Commit 16c4d4b2 authored by salix5's avatar salix5

update class duel, API process()

parent 8799b7a1
......@@ -29,6 +29,15 @@ typedef signed char int8;
#define OPERATION_CANCELED -1
#define TRUE 1
#define FALSE 0
#define MESSAGE_BUFFER_SIZE 0x2000
#define QUERY_BUFFER_SIZE 0x4000
#define PROCESSOR_BUFFER_LEN 0x0fffffff
#define PROCESSOR_FLAG 0xf0000000
#define PROCESSOR_NONE 0
#define PROCESSOR_WAITING 0x10000000
#define PROCESSOR_END 0x20000000
#ifndef NULL
#define NULL 0
#endif
......
......@@ -17,7 +17,7 @@ duel::duel() {
lua = new interpreter(this);
game_field = new field(this);
game_field->temp_card = new_card(0);
clear_buffer();
message_buffer.reserve(MESSAGE_BUFFER_SIZE);
}
duel::~duel() {
for(auto& pcard : cards)
......@@ -95,8 +95,9 @@ void duel::delete_effect(effect* peffect) {
delete peffect;
}
int32 duel::read_buffer(byte* buf) {
std::memcpy(buf, message_buffer, bufferlen);
return bufferlen;
if(message_buffer.size())
std::memcpy(buf, message_buffer.data(), message_buffer.size());
return (int32)message_buffer.size();
}
void duel::release_script_group() {
for(auto& pgroup : sgroups) {
......@@ -113,24 +114,20 @@ void duel::restore_assumes() {
pcard->assume_type = 0;
assumes.clear();
}
void duel::write_buffer(const void* data, int size) {
write_buffer_vector(message_buffer, data, size);
}
void duel::write_buffer32(uint32 value) {
std::memcpy(bufferp, &value, sizeof(value));
bufferp += 4;
bufferlen += 4;
write_buffer(&value, sizeof(value));
}
void duel::write_buffer16(uint16 value) {
std::memcpy(bufferp, &value, sizeof(value));
bufferp += 2;
bufferlen += 2;
write_buffer(&value, sizeof(value));
}
void duel::write_buffer8(uint8 value) {
std::memcpy(bufferp, &value, sizeof(value));
bufferp += 1;
bufferlen += 1;
write_buffer(&value, sizeof(value));
}
void duel::clear_buffer() {
bufferlen = 0;
bufferp = message_buffer;
message_buffer.clear();
}
void duel::set_responsei(uint32 resp) {
game_field->returns.ivalue[0] = resp;
......
......@@ -13,21 +13,25 @@
#include <set>
#include <unordered_set>
#define BUFFER_SIZE 4096
class card;
class group;
class effect;
class field;
class interpreter;
inline void write_buffer_vector(std::vector<byte>& buffer, const void* data, int size) {
if (size > 0) {
const auto len = buffer.size();
buffer.resize(len + size);
std::memcpy(&buffer[len], data, size);
}
}
class duel {
public:
using card_set = std::set<card*, card_sort>;
char strbuffer[256];
byte message_buffer[BUFFER_SIZE];
int32 bufferlen;
byte* bufferp;
std::vector<byte> message_buffer;
interpreter* lua;
field* game_field;
mt19937 random;
......@@ -53,6 +57,7 @@ public:
void release_script_group();
void restore_assumes();
int32 read_buffer(byte* buf);
void write_buffer(const void* data, int size);
void write_buffer32(uint32 value);
void write_buffer16(uint16 value);
void write_buffer8(uint8 value);
......
......@@ -501,7 +501,7 @@ public:
int32 is_able_to_enter_bp();
void add_process(uint16 type, uint16 step, effect* peffect, group* target, int32 arg1, int32 arg2, int32 arg3 = 0, int32 arg4 = 0, void* ptr1 = nullptr, void* ptr2 = nullptr);
int32 process();
uint32 process();
int32 execute_cost(uint16 step, effect* peffect, uint8 triggering_player);
int32 execute_operation(uint16 step, effect* peffect, uint8 triggering_player);
int32 execute_target(uint16 step, effect* peffect, uint8 triggering_player);
......@@ -704,9 +704,6 @@ public:
#define GLOBALFLAG_TUNE_MAGICIAN 0x400
#define GLOBALFLAG_ACTIVATION_COUNT 0x800
//
#define PROCESSOR_NONE 0
#define PROCESSOR_WAITING 0x10000
#define PROCESSOR_END 0x20000
#define PROCESSOR_ADJUST 1
#define PROCESSOR_HINT 2
......
......@@ -174,9 +174,7 @@ int32 scriptlib::debug_set_ai_name(lua_State *L) {
if(len > 100)
len = 100;
pduel->write_buffer16(len);
for (int i = 0; i < len; ++i) {
pduel->write_buffer8(pstr[i]);
}
pduel->write_buffer(pstr, len);
pduel->write_buffer8(0);
return 0;
}
......@@ -190,9 +188,7 @@ int32 scriptlib::debug_show_hint(lua_State *L) {
if(len > 1024)
len = 1024;
pduel->write_buffer16(len);
for (int i = 0; i < len; ++i) {
pduel->write_buffer8(pstr[i]);
}
pduel->write_buffer(pstr, len);
pduel->write_buffer8(0);
return 0;
}
......
......@@ -127,11 +127,12 @@ extern "C" DECL_DLLEXPORT int32 get_message(intptr_t pduel, byte* buf) {
((duel*)pduel)->clear_buffer();
return len;
}
extern "C" DECL_DLLEXPORT int32 process(intptr_t pduel) {
extern "C" DECL_DLLEXPORT uint32 process(intptr_t pduel) {
duel* pd = (duel*)pduel;
int result = pd->game_field->process();
while((result & 0xffff) == 0 && (result & 0xf0000) == 0)
uint32 result = 0;
do {
result = pd->game_field->process();
} while ((result & PROCESSOR_BUFFER_LEN) == 0 && (result & PROCESSOR_FLAG) == 0);
return result;
}
extern "C" DECL_DLLEXPORT void new_card(intptr_t pduel, uint32 code, uint8 owner, uint8 playerid, uint8 location, uint8 sequence, uint8 position) {
......
......@@ -41,7 +41,7 @@ extern "C" DECL_DLLEXPORT void end_duel(intptr_t pduel);
extern "C" DECL_DLLEXPORT void set_player_info(intptr_t pduel, int32 playerid, int32 lp, int32 startcount, int32 drawcount);
extern "C" DECL_DLLEXPORT void get_log_message(intptr_t pduel, byte* buf);
extern "C" DECL_DLLEXPORT int32 get_message(intptr_t pduel, byte* buf);
extern "C" DECL_DLLEXPORT int32 process(intptr_t pduel);
extern "C" DECL_DLLEXPORT uint32 process(intptr_t pduel);
extern "C" DECL_DLLEXPORT void new_card(intptr_t pduel, uint32 code, uint8 owner, uint8 playerid, uint8 location, uint8 sequence, uint8 position);
extern "C" DECL_DLLEXPORT void new_tag_card(intptr_t pduel, uint32 code, uint8 owner, uint8 location);
extern "C" DECL_DLLEXPORT int32 query_card(intptr_t pduel, uint8 playerid, uint8 location, uint8 sequence, int32 query_flag, byte* buf, int32 use_cache);
......
......@@ -32,11 +32,11 @@ void field::add_process(uint16 type, uint16 step, effect* peffect, group* target
#pragma warning(push)
#pragma warning(disable: 4244)
#endif
int32 field::process() {
uint32 field::process() {
if (core.subunits.size())
core.units.splice(core.units.begin(), core.subunits);
if (core.units.size() == 0)
return PROCESSOR_END + pduel->bufferlen;
return PROCESSOR_END | pduel->message_buffer.size();
auto it = core.units.begin();
switch (it->type) {
case PROCESSOR_ADJUST: {
......@@ -45,151 +45,151 @@ int32 field::process() {
else {
++it->step;
}
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_TURN: {
if (process_turn(it->step, it->arg1))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_WAIT: {
core.units.pop_front();
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
case PROCESSOR_REFRESH_LOC: {
if (refresh_location_info(it->step))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SELECT_BATTLECMD: {
if (select_battle_command(it->step, it->arg1)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_IDLECMD: {
if (select_idle_command(it->step, it->arg1)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_EFFECTYN: {
if (select_effect_yes_no(it->step, it->arg1, it->arg2, (card*)it->ptarget)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_YESNO: {
if (select_yes_no(it->step, it->arg1, it->arg2)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_OPTION: {
if (select_option(it->step, it->arg1)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_CARD: {
if (select_card(it->step, it->arg1 & 0xff, (it->arg1 >> 16) & 0xff, (it->arg2) & 0xff, (it->arg2 >> 16) & 0xff)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_UNSELECT_CARD: {
if (select_unselect_card(it->step, it->arg1 & 0xff, (it->arg1 >> 16) & 0xff, (it->arg2) & 0xff, (it->arg2 >> 16) & 0xff, (it->arg3) & 0xff)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_CHAIN: {
if (select_chain(it->step, it->arg1, (it->arg2 & 0xffff), it->arg2 >> 16)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_DISFIELD:
case PROCESSOR_SELECT_PLACE: {
if (select_place(it->step, it->arg1, it->arg2, it->arg3)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_POSITION: {
if (select_position(it->step, it->arg1 & 0xffff, it->arg2, (it->arg1 >> 16) & 0xffff)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_TRIBUTE_P: {
if (select_tribute(it->step, it->arg1 & 0xff, (it->arg1 >> 16) & 0xff, (it->arg2) & 0xff, (it->arg2 >> 16) & 0xff)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_COUNTER: {
if (select_counter(it->step, it->arg1, it->arg2, it->arg3, it->arg4 >> 8, it->arg4 & 0xff)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_SUM: {
if (select_with_sum_limit(it->step, it->arg2 & 0xffff, it->arg1, (it->arg2 >> 16) & 0xff, (it->arg2 >> 24) & 0xff)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SORT_CARD: {
if (sort_card(it->step, it->arg1)) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
} else {
it->step = 1;
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
}
case PROCESSOR_SELECT_RELEASE: {
......@@ -197,77 +197,77 @@ int32 field::process() {
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SELECT_TRIBUTE: {
if (select_tribute_cards(it->step, (card*)it->ptarget, it->arg1 & 0xff, (it->arg1 >> 16) & 0xff, (it->arg2) & 0xff, (it->arg2 >> 16) & 0xff, it->arg3, it->arg4))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_POINT_EVENT: {
if(process_point_event(it->step, it->arg1 & 0xff, (it->arg1 >> 8) & 0xff, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_QUICK_EFFECT: {
if(process_quick_effect(it->step, it->arg1, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_IDLE_COMMAND: {
if(process_idle_command(it->step))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_PHASE_EVENT: {
if(process_phase_event(it->step, it->arg1))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_BATTLE_COMMAND: {
if(process_battle_command(it->step))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_DAMAGE_STEP: {
if(process_damage_step(it->step, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_ADD_CHAIN: {
if (add_chain(it->step))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SOLVE_CHAIN: {
if (solve_chain(it->step, it->arg1, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SOLVE_CONTINUOUS: {
if (solve_continuous(it->step))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_EXECUTE_COST: {
if (execute_cost(it->step, it->peffect, it->arg1)) {
......@@ -275,7 +275,7 @@ int32 field::process() {
core.solving_event.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_EXECUTE_OPERATION: {
if (execute_operation(it->step, it->peffect, it->arg1)) {
......@@ -283,7 +283,7 @@ int32 field::process() {
core.solving_event.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_EXECUTE_TARGET: {
if (execute_target(it->step, it->peffect, it->arg1)) {
......@@ -291,140 +291,140 @@ int32 field::process() {
core.solving_event.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_DESTROY: {
if (destroy(it->step, it->ptarget, it->peffect, it->arg1, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_RELEASE: {
if (release(it->step, it->ptarget, it->peffect, it->arg1, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SENDTO: {
if (send_to(it->step, it->ptarget, it->peffect, it->arg1, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_DESTROY_REPLACE: {
if(destroy_replace(it->step, it->ptarget, (card*)it->ptr1, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_RELEASE_REPLACE: {
if (release_replace(it->step, it->ptarget, (card*)it->ptr1))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SENDTO_REPLACE: {
if (send_replace(it->step, it->ptarget, (card*)it->ptr1))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_MOVETOFIELD: {
if (move_to_field(it->step, (card*)it->ptarget, it->arg1, it->arg2 & 0xff, (it->arg2 >> 8) & 0xff, it->arg3))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_CHANGEPOS: {
if (change_position(it->step, it->ptarget, it->peffect, it->arg1, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_OPERATION_REPLACE: {
if (operation_replace(it->step, it->peffect, it->ptarget, (card*)it->ptr1, it->arg1))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_ACTIVATE_EFFECT: {
if (activate_effect(it->step, it->peffect))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SUMMON_RULE: {
if (summon(it->step, it->arg1 & 0xff, (card*)it->ptarget, it->peffect, (it->arg1 >> 8) & 0xff, (it->arg1 >> 16) & 0xff, (it->arg1 >> 24) & 0xff))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SPSUMMON_RULE: {
if (special_summon_rule(it->step, it->arg1, (card*)it->ptarget, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SPSUMMON: {
if (special_summon(it->step, it->peffect, it->arg1, it->ptarget, it->arg2))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_FLIP_SUMMON: {
if (flip_summon(it->step, it->arg1, (card*)(it->ptarget)))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_MSET: {
if (mset(it->step, it->arg1 & 0xff, (card*)it->ptarget, it->peffect, (it->arg1 >> 8) & 0xff, (it->arg1 >> 16) & 0xff, (it->arg1 >> 24) & 0xff))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SSET: {
if (sset(it->step, it->arg1, it->arg2, (card*)(it->ptarget), it->peffect))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SPSUMMON_STEP: {
if (special_summon_step(it->step, it->ptarget, (card*)(it->ptr1), it->arg1))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SSET_G: {
if (sset_g(it->step, it->arg1, it->arg2, it->ptarget, it->arg3, it->peffect)) {
core.units.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_DRAW : {
if (draw(it->step, it->peffect, it->arg1, (it->arg2 >> 4) & 0xf, (it->arg2) & 0xf, it->arg3))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_DAMAGE: {
int32 reason = it->arg1;
......@@ -442,7 +442,7 @@ int32 field::process() {
core.units.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_RECOVER: {
if (recover(it->step, it->peffect, it->arg1, (it->arg2 >> 2) & 0x3, (it->arg2) & 0x3, it->arg3, (it->arg2 >> 4) & 0x1)) {
......@@ -453,56 +453,56 @@ int32 field::process() {
core.units.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_EQUIP: {
if (equip(it->step, it->arg2 & 0xffff, (card*)it->ptr1, (card*)it->ptarget, (it->arg2 >> 16) & 0xff, (it->arg2 >> 24) & 0xff))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_GET_CONTROL: {
if (get_control(it->step, it->peffect, (it->arg2 >> 28) & 0xf, it->ptarget, (it->arg2 >> 24) & 0xf, (it->arg2 >> 8) & 0x3ff, it->arg2 & 0xff, it->arg3)) {
core.units.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SWAP_CONTROL: {
if (swap_control(it->step, it->peffect, it->arg1, it->ptarget, (group*)it->ptr1, it->arg2, it->arg3)) {
core.units.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SELF_DESTROY: {
if (self_destroy(it->step, (card*)it->ptr1, it->arg1)) {
core.units.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_TRAP_MONSTER_ADJUST: {
if (trap_monster_adjust(it->step))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_PAY_LPCOST: {
if (pay_lp_cost(it->step, it->arg1, it->arg2, it->arg3))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_REMOVE_COUNTER: {
if (remove_counter(it->step, it->arg4, (card*)it->ptarget, (it->arg1 >> 16) & 0xff, (it->arg1 >> 8) & 0xff, it->arg1 & 0xff, it->arg2, it->arg3)) {
core.units.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_ATTACK_DISABLE: {
if(it->step == 0) {
......@@ -529,7 +529,7 @@ int32 field::process() {
returns.ivalue[0] = 1;
core.units.pop_front();
}
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_ANNOUNCE_RACE: {
if(announce_race(it->step, it->arg1 & 0xffff, it->arg1 >> 16, it->arg2)) {
......@@ -537,7 +537,7 @@ int32 field::process() {
} else {
++it->step;
}
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
case PROCESSOR_ANNOUNCE_ATTRIB: {
if(announce_attribute(it->step, it->arg1 & 0xffff, it->arg1 >> 16, it->arg2)) {
......@@ -545,7 +545,7 @@ int32 field::process() {
} else {
++it->step;
}
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
case PROCESSOR_ANNOUNCE_CARD: {
if(announce_card(it->step, it->arg1)) {
......@@ -553,7 +553,7 @@ int32 field::process() {
} else {
++it->step;
}
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
case PROCESSOR_ANNOUNCE_NUMBER: {
if(announce_number(it->step, it->arg1)) {
......@@ -561,28 +561,28 @@ int32 field::process() {
} else {
++it->step;
}
return PROCESSOR_WAITING + pduel->bufferlen;
return PROCESSOR_WAITING | pduel->message_buffer.size();
}
case PROCESSOR_TOSS_DICE: {
if(toss_dice(it->step, it->peffect, it->arg1 >> 16, it->arg1 & 0xff, it->arg2 & 0xff, it->arg2 >> 16)) {
core.units.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_TOSS_COIN: {
if (toss_coin(it->step, it->peffect, (it->arg1 >> 16), it->arg1 & 0xff, it->arg2)) {
core.units.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_ROCK_PAPER_SCISSORS: {
if (rock_paper_scissors(it->step, it->arg1)) {
core.units.pop_front();
} else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SELECT_FUSION: {
if(it->step == 0) {
......@@ -593,7 +593,7 @@ int32 field::process() {
core.fusion_materials.clear();
if(!it->peffect) {
core.units.pop_front();
return pduel->bufferlen;
return pduel->message_buffer.size();
}
core.not_material = it->arg2;
core.sub_solving_event.push_back(e);
......@@ -605,7 +605,7 @@ int32 field::process() {
core.not_material = 0;
core.units.pop_front();
}
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SELECT_SYNCHRO: {
int32 ret = TRUE;
......@@ -617,14 +617,14 @@ int32 field::process() {
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SELECT_XMATERIAL: {
if (select_xyz_material(it->step, it->arg1 & 0xffff, it->arg1 >> 16, (card*)it->ptarget, it->arg2 & 0xffff, it->arg2 >> 16))
core.units.pop_front();
else
++it->step;
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_DISCARD_HAND: {
if(it->step == 0) {
......@@ -651,7 +651,7 @@ int32 field::process() {
} else {
core.units.pop_front();
}
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_DISCARD_DECK: {
if(discard_deck(it->step, it->arg1 & 0xff, it->arg1 >> 16, it->arg2)) {
......@@ -659,7 +659,7 @@ int32 field::process() {
} else {
++it->step;
}
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_SORT_DECK: {
uint8 sort_player = it->arg1 & 0xffff;
......@@ -710,7 +710,7 @@ int32 field::process() {
}
core.units.pop_front();
}
return pduel->bufferlen;
return pduel->message_buffer.size();
}
case PROCESSOR_REMOVE_OVERLAY: {
if(remove_overlay_card(it->step, it->arg3, (card*)(it->ptarget), it->arg1 >> 16,
......@@ -719,10 +719,10 @@ int32 field::process() {
} else {
++it->step;
}
return pduel->bufferlen;
return pduel->message_buffer.size();
}
}
return pduel->bufferlen;
return pduel->message_buffer.size();
}
#ifdef _MSC_VER
#pragma warning(pop)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment