Commit b1dee64a authored by wind2009's avatar wind2009

Merge branch 'patch_tempremove' into develop

parents 3f6066dc c552bb64
...@@ -3419,9 +3419,7 @@ int32_t card::get_set_tribute_count() { ...@@ -3419,9 +3419,7 @@ int32_t card::get_set_tribute_count() {
return min + (max << 16); return min + (max << 16);
} }
int32_t card::is_can_be_flip_summoned(uint8_t playerid) { int32_t card::is_can_be_flip_summoned(uint8_t playerid) {
if(is_status(STATUS_SUMMON_TURN) || is_status(STATUS_FLIP_SUMMON_TURN) || is_status(STATUS_SPSUMMON_TURN) || is_status(STATUS_FORM_CHANGED)) if(is_status(STATUS_CANNOT_CHANGE_FORM))
return FALSE;
if(announce_count > 0)
return FALSE; return FALSE;
if(current.location != LOCATION_MZONE) if(current.location != LOCATION_MZONE)
return FALSE; return FALSE;
...@@ -3949,12 +3947,10 @@ int32_t card::is_capable_attack_announce(uint8_t playerid) { ...@@ -3949,12 +3947,10 @@ int32_t card::is_capable_attack_announce(uint8_t playerid) {
return TRUE; return TRUE;
} }
int32_t card::is_capable_change_position(uint8_t playerid) { int32_t card::is_capable_change_position(uint8_t playerid) {
if(get_status(STATUS_SUMMON_TURN | STATUS_FLIP_SUMMON_TURN | STATUS_SPSUMMON_TURN | STATUS_FORM_CHANGED)) if(is_status(STATUS_CANNOT_CHANGE_FORM))
return FALSE; return FALSE;
if(data.type & TYPE_LINK) if(data.type & TYPE_LINK)
return FALSE; return FALSE;
if(announce_count > 0)
return FALSE;
if(is_status(STATUS_FORBIDDEN)) if(is_status(STATUS_FORBIDDEN))
return FALSE; return FALSE;
if(is_affected_by_effect(EFFECT_CANNOT_CHANGE_POSITION)) if(is_affected_by_effect(EFFECT_CANNOT_CHANGE_POSITION))
......
...@@ -189,7 +189,7 @@ inline bool check_playerid(int32_t playerid) { ...@@ -189,7 +189,7 @@ inline bool check_playerid(int32_t playerid) {
#define STATUS_NO_LEVEL 0x0020 #define STATUS_NO_LEVEL 0x0020
#define STATUS_BATTLE_RESULT 0x0040 #define STATUS_BATTLE_RESULT 0x0040
#define STATUS_SPSUMMON_STEP 0x0080 #define STATUS_SPSUMMON_STEP 0x0080
#define STATUS_FORM_CHANGED 0x0100 #define STATUS_CANNOT_CHANGE_FORM 0x0100
#define STATUS_SUMMONING 0x0200 #define STATUS_SUMMONING 0x0200
#define STATUS_EFFECT_ENABLED 0x0400 #define STATUS_EFFECT_ENABLED 0x0400
#define STATUS_SUMMON_TURN 0x0800 #define STATUS_SUMMON_TURN 0x0800
......
...@@ -1938,6 +1938,7 @@ int32_t field::summon(uint16_t step, uint8_t sumplayer, card* target, effect* pr ...@@ -1938,6 +1938,7 @@ int32_t field::summon(uint16_t step, uint8_t sumplayer, card* target, effect* pr
target->set_status(STATUS_SUMMONING, FALSE); target->set_status(STATUS_SUMMONING, FALSE);
target->set_status(STATUS_FLIP_SUMMONING, FALSE); target->set_status(STATUS_FLIP_SUMMONING, FALSE);
target->set_status(STATUS_SUMMON_TURN, TRUE); target->set_status(STATUS_SUMMON_TURN, TRUE);
target->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
target->enable_field_effect(true); target->enable_field_effect(true);
if(target->is_status(STATUS_DISABLED)) if(target->is_status(STATUS_DISABLED))
target->reset(RESET_DISABLE, RESET_EVENT); target->reset(RESET_DISABLE, RESET_EVENT);
...@@ -2048,6 +2049,7 @@ int32_t field::flip_summon(uint16_t step, uint8_t sumplayer, card * target, uint ...@@ -2048,6 +2049,7 @@ int32_t field::flip_summon(uint16_t step, uint8_t sumplayer, card * target, uint
if(target->is_status(STATUS_DISABLED)) if(target->is_status(STATUS_DISABLED))
target->reset(RESET_DISABLE, RESET_EVENT); target->reset(RESET_DISABLE, RESET_EVENT);
target->set_status(STATUS_FLIP_SUMMON_TURN, TRUE); target->set_status(STATUS_FLIP_SUMMON_TURN, TRUE);
target->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
return FALSE; return FALSE;
} }
case 4: { case 4: {
...@@ -2395,6 +2397,7 @@ int32_t field::mset(uint16_t step, uint8_t setplayer, card* target, effect* proc ...@@ -2395,6 +2397,7 @@ int32_t field::mset(uint16_t step, uint8_t setplayer, card* target, effect* proc
++core.normalsummon_state_count[setplayer]; ++core.normalsummon_state_count[setplayer];
check_card_counter(target, ACTIVITY_NORMALSUMMON, setplayer); check_card_counter(target, ACTIVITY_NORMALSUMMON, setplayer);
target->set_status(STATUS_SUMMON_TURN, TRUE); target->set_status(STATUS_SUMMON_TURN, TRUE);
target->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
pduel->write_buffer8(MSG_SET); pduel->write_buffer8(MSG_SET);
pduel->write_buffer32(target->data.code); pduel->write_buffer32(target->data.code);
pduel->write_buffer32(target->get_info_location()); pduel->write_buffer32(target->get_info_location());
...@@ -3136,6 +3139,7 @@ int32_t field::special_summon_rule(uint16_t step, uint8_t sumplayer, card* targe ...@@ -3136,6 +3139,7 @@ int32_t field::special_summon_rule(uint16_t step, uint8_t sumplayer, card* targe
for(auto& pcard : pgroup->container) { for(auto& pcard : pgroup->container) {
pcard->set_status(STATUS_SUMMONING, FALSE); pcard->set_status(STATUS_SUMMONING, FALSE);
pcard->set_status(STATUS_SPSUMMON_TURN, TRUE); pcard->set_status(STATUS_SPSUMMON_TURN, TRUE);
pcard->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
pcard->enable_field_effect(true); pcard->enable_field_effect(true);
if(pcard->is_status(STATUS_DISABLED)) if(pcard->is_status(STATUS_DISABLED))
pcard->reset(RESET_DISABLE, RESET_EVENT); pcard->reset(RESET_DISABLE, RESET_EVENT);
...@@ -3352,6 +3356,7 @@ int32_t field::special_summon(uint16_t step, effect* reason_effect, uint8_t reas ...@@ -3352,6 +3356,7 @@ int32_t field::special_summon(uint16_t step, effect* reason_effect, uint8_t reas
for(auto& pcard : targets->container) { for(auto& pcard : targets->container) {
pcard->set_status(STATUS_SPSUMMON_STEP, FALSE); pcard->set_status(STATUS_SPSUMMON_STEP, FALSE);
pcard->set_status(STATUS_SPSUMMON_TURN, TRUE); pcard->set_status(STATUS_SPSUMMON_TURN, TRUE);
pcard->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
if(pcard->is_position(POS_FACEUP)) if(pcard->is_position(POS_FACEUP))
pcard->enable_field_effect(true); pcard->enable_field_effect(true);
} }
...@@ -4265,8 +4270,10 @@ int32_t field::send_to(uint16_t step, group * targets, effect * reason_effect, u ...@@ -4265,8 +4270,10 @@ int32_t field::send_to(uint16_t step, group * targets, effect * reason_effect, u
if(nloc == LOCATION_GRAVE) if(nloc == LOCATION_GRAVE)
pcard->reset(RESET_TOGRAVE, RESET_EVENT); pcard->reset(RESET_TOGRAVE, RESET_EVENT);
if(nloc == LOCATION_REMOVED || ((pcard->data.type & TYPE_TOKEN) && pcard->sendto_param.location == LOCATION_REMOVED)) { if(nloc == LOCATION_REMOVED || ((pcard->data.type & TYPE_TOKEN) && pcard->sendto_param.location == LOCATION_REMOVED)) {
if(pcard->current.reason & REASON_TEMPORARY) if(pcard->current.reason & REASON_TEMPORARY) {
pcard->reset(RESET_TEMP_REMOVE, RESET_EVENT); pcard->reset(RESET_TEMP_REMOVE, RESET_EVENT);
pcard->set_status(STATUS_CANNOT_CHANGE_FORM, FALSE);
}
else else
pcard->reset(RESET_REMOVE, RESET_EVENT); pcard->reset(RESET_REMOVE, RESET_EVENT);
} }
...@@ -4645,15 +4652,17 @@ int32_t field::move_to_field(uint16_t step, card* target, uint32_t enable, uint3 ...@@ -4645,15 +4652,17 @@ int32_t field::move_to_field(uint16_t step, card* target, uint32_t enable, uint3
} }
if(!(target->current.location & LOCATION_ONFIELD)) if(!(target->current.location & LOCATION_ONFIELD))
target->clear_relate_effect(); target->clear_relate_effect();
if(ret == RETURN_TEMP_REMOVE_TO_FIELD) if(ret == RETURN_TEMP_REMOVE_TO_FIELD) {
target->current.reason &= ~REASON_TEMPORARY; target->current.reason &= ~REASON_TEMPORARY;
target->set_status(STATUS_CANNOT_CHANGE_FORM, FALSE);
}
if(ret == 0 && location != target->current.location if(ret == 0 && location != target->current.location
|| ret == RETURN_TEMP_REMOVE_TO_FIELD && target->turnid != infos.turn_id) { || ret == RETURN_TEMP_REMOVE_TO_FIELD && target->turnid != infos.turn_id) {
target->set_status(STATUS_SUMMON_TURN, FALSE); target->set_status(STATUS_SUMMON_TURN, FALSE);
target->set_status(STATUS_FLIP_SUMMON_TURN, FALSE); target->set_status(STATUS_FLIP_SUMMON_TURN, FALSE);
target->set_status(STATUS_SPSUMMON_TURN, FALSE); target->set_status(STATUS_SPSUMMON_TURN, FALSE);
target->set_status(STATUS_SET_TURN, FALSE); target->set_status(STATUS_SET_TURN, FALSE);
target->set_status(STATUS_FORM_CHANGED, FALSE); target->set_status(STATUS_CANNOT_CHANGE_FORM, FALSE);
} }
target->temp.sequence = seq; target->temp.sequence = seq;
if(location != LOCATION_MZONE) { if(location != LOCATION_MZONE) {
......
...@@ -2316,7 +2316,7 @@ int32_t field::process_idle_command(uint16_t step) { ...@@ -2316,7 +2316,7 @@ int32_t field::process_idle_command(uint16_t step) {
return FALSE; return FALSE;
} else } else
add_process(PROCESSOR_FLIP_SUMMON, 0, 0, (group*)target, target->current.controler, 0); add_process(PROCESSOR_FLIP_SUMMON, 0, 0, (group*)target, target->current.controler, 0);
target->set_status(STATUS_FORM_CHANGED, TRUE); target->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
core.units.begin()->step = -1; core.units.begin()->step = -1;
return FALSE; return FALSE;
} }
...@@ -2375,7 +2375,7 @@ int32_t field::process_idle_command(uint16_t step) { ...@@ -2375,7 +2375,7 @@ int32_t field::process_idle_command(uint16_t step) {
adjust_all(); adjust_all();
add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, FALSE, 0); add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, FALSE, 0);
} }
target->set_status(STATUS_FORM_CHANGED, TRUE); target->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
core.units.begin()->step = -1; core.units.begin()->step = -1;
return FALSE; return FALSE;
} }
...@@ -2665,6 +2665,7 @@ int32_t field::process_battle_command(uint16_t step) { ...@@ -2665,6 +2665,7 @@ int32_t field::process_battle_command(uint16_t step) {
} }
if(core.units.begin()->arg3) {//attack announce failed if(core.units.begin()->arg3) {//attack announce failed
++core.attacker->announce_count; ++core.attacker->announce_count;
core.attacker->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
core.chain_attack = FALSE; core.chain_attack = FALSE;
core.units.begin()->step = -1; core.units.begin()->step = -1;
} }
...@@ -2739,6 +2740,7 @@ int32_t field::process_battle_command(uint16_t step) { ...@@ -2739,6 +2740,7 @@ int32_t field::process_battle_command(uint16_t step) {
// go to damage step // go to damage step
if(!core.attack_rollback) { if(!core.attack_rollback) {
++core.attacker->announce_count; ++core.attacker->announce_count;
core.attacker->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
core.attacker->announced_cards.addcard(core.attack_target); core.attacker->announced_cards.addcard(core.attack_target);
attack_all_target_check(); attack_all_target_check();
core.units.begin()->step = 18; core.units.begin()->step = 18;
...@@ -2771,6 +2773,7 @@ int32_t field::process_battle_command(uint16_t step) { ...@@ -2771,6 +2773,7 @@ int32_t field::process_battle_command(uint16_t step) {
case 13: { case 13: {
if(core.attacker->fieldid_r == core.pre_field[0]) { if(core.attacker->fieldid_r == core.pre_field[0]) {
++core.attacker->announce_count; ++core.attacker->announce_count;
core.attacker->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
core.attacker->announced_cards.addcard(core.attack_target); core.attacker->announced_cards.addcard(core.attack_target);
attack_all_target_check(); attack_all_target_check();
} }
...@@ -3323,6 +3326,7 @@ int32_t field::process_damage_step(uint16_t step, uint32_t new_attack) { ...@@ -3323,6 +3326,7 @@ int32_t field::process_damage_step(uint16_t step, uint32_t new_attack) {
if(core.attacker) { if(core.attacker) {
core.attacker->set_status(STATUS_ATTACK_CANCELED, TRUE); core.attacker->set_status(STATUS_ATTACK_CANCELED, TRUE);
++core.attacker->announce_count; ++core.attacker->announce_count;
core.attacker->set_status(STATUS_CANNOT_CHANGE_FORM, TRUE);
core.attacker->announced_cards.addcard(core.attack_target); core.attacker->announced_cards.addcard(core.attack_target);
attack_all_target_check(); attack_all_target_check();
} }
...@@ -3674,7 +3678,7 @@ int32_t field::process_turn(uint16_t step, uint8_t turn_player) { ...@@ -3674,7 +3678,7 @@ int32_t field::process_turn(uint16_t step, uint8_t turn_player) {
pcard->set_status(STATUS_FLIP_SUMMON_TURN, FALSE); pcard->set_status(STATUS_FLIP_SUMMON_TURN, FALSE);
pcard->set_status(STATUS_SPSUMMON_TURN, FALSE); pcard->set_status(STATUS_SPSUMMON_TURN, FALSE);
pcard->set_status(STATUS_SET_TURN, FALSE); pcard->set_status(STATUS_SET_TURN, FALSE);
pcard->set_status(STATUS_FORM_CHANGED, FALSE); pcard->set_status(STATUS_CANNOT_CHANGE_FORM, FALSE);
pcard->indestructable_effects.clear(); pcard->indestructable_effects.clear();
pcard->attack_announce_count = 0; pcard->attack_announce_count = 0;
pcard->announce_count = 0; pcard->announce_count = 0;
......
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