Commit 7fb46ee7 authored by VanillaSalt's avatar VanillaSalt

fix

parent 10c7691a
......@@ -2953,6 +2953,7 @@ int32 field::process_battle_command(uint16 step) {
core.attack_player = FALSE;
core.select_cards.clear();
auto atype = get_attack_target(core.attacker, &core.select_cards, core.chain_attack);
core.units.begin()->arg2 = (ptr)core.select_cards.size();
// direct attack
if(core.attacker->direct_attackable) {
if(core.select_cards.size() == 0) {
......@@ -3061,7 +3062,8 @@ int32 field::process_battle_command(uint16 step) {
raise_single_event(core.attacker, 0, EVENT_ATTACK_ANNOUNCE, 0, 0, 0, infos.turn_player, 0);
raise_event(core.attacker, EVENT_ATTACK_ANNOUNCE, 0, 0, 0, infos.turn_player, 0);
}
core.units.begin()->arg2 = (core.attacker->current.controler << 16) + core.attacker->fieldid_r;
core.attacker->attack_controler = core.attacker->current.controler;
core.pre_field[0] = core.attacker->fieldid_r;
if(evt) {
process_single_event();
process_instant_event();
......@@ -3098,16 +3100,16 @@ int32 field::process_battle_command(uint16 step) {
case 10: {
uint8 rollback = core.attack_rollback;
bool atk_disabled = false;
uint32 acon = core.units.begin()->arg2 >> 16;
uint32 afid = core.units.begin()->arg2 & 0xffff;
uint32 acon = core.attacker->attack_controler;
uint32 afid = core.pre_field[0];
if(core.attacker->is_affected_by_effect(EFFECT_ATTACK_DISABLED)) {
core.attacker->reset(EFFECT_ATTACK_DISABLED, RESET_CODE);
atk_disabled = true;
pduel->write_buffer8(MSG_ATTACK_DISABLED);
core.attacker->set_status(STATUS_ATTACK_CANCELED, TRUE);
}
effect* peffect;
if((peffect = is_player_affected_by_effect(infos.turn_player, EFFECT_SKIP_BP))) {
effect* peffect = is_player_affected_by_effect(infos.turn_player, EFFECT_SKIP_BP);
if(peffect) {
core.units.begin()->step = 41;
core.units.begin()->arg1 = 2;
if(is_player_affected_by_effect(infos.turn_player, EFFECT_BP_TWICE))
......@@ -3143,26 +3145,11 @@ int32 field::process_battle_command(uint16 step) {
rollback = true;
// go to damage step
if(!rollback) {
infos.phase = PHASE_DAMAGE;
core.chain_attack = FALSE;
core.units.begin()->arg1 = FALSE;
core.damage_calculated = FALSE;
core.selfdes_disabled = TRUE;
core.flip_delayed = TRUE;
core.pre_field[0] = core.attacker->fieldid_r;
if(core.attack_target)
core.pre_field[1] = core.attack_target->fieldid_r;
else
core.pre_field[1] = 0;
core.attacker->attacked_count++;
core.attacker->attacked_cards.addcard(core.attack_target);
core.battled_count[infos.turn_player]++;
core.units.begin()->step = 19;
adjust_all();
core.units.begin()->step = 18;
return FALSE;
}
// attack canceled
if(!core.select_cards.size() && !core.attacker->direct_attackable) {
if(!core.units.begin()->arg2 && !core.attacker->direct_attackable) {
core.chain_attack = FALSE;
core.units.begin()->step = -1;
reset_phase(PHASE_DAMAGE);
......@@ -3190,14 +3177,32 @@ int32 field::process_battle_command(uint16 step) {
adjust_all();
return FALSE;
}
case 19: {
infos.phase = PHASE_DAMAGE;
core.chain_attack = FALSE;
core.units.begin()->arg1 = FALSE;
core.damage_calculated = FALSE;
core.selfdes_disabled = TRUE;
core.flip_delayed = TRUE;
core.attacker->attack_controler = core.attacker->current.controler;
core.pre_field[0] = core.attacker->fieldid_r;
if(core.attack_target) {
core.attack_target->attack_controler = core.attack_target->current.controler;
core.pre_field[1] = core.attack_target->fieldid_r;
} else
core.pre_field[1] = 0;
core.attacker->attacked_count++;
core.attacker->attacked_cards.addcard(core.attack_target);
core.battled_count[infos.turn_player]++;
adjust_all();
return FALSE;
}
case 20: {
// start of PHASE_DAMAGE;
pduel->write_buffer8(MSG_DAMAGE_STEP_START);
raise_single_event(core.attacker, 0, EVENT_BATTLE_START, 0, 0, 0, 0, 0);
core.attacker->attack_controler = core.attacker->current.controler;
if(core.attack_target) {
raise_single_event(core.attack_target, 0, EVENT_BATTLE_START, 0, 0, 0, 0, 1);
core.attack_target->attack_controler = core.attack_target->current.controler;
}
raise_event((card*)0, EVENT_BATTLE_START, 0, 0, 0, 0, 0);
process_single_event();
......@@ -3211,7 +3216,6 @@ int32 field::process_battle_command(uint16 step) {
pduel->write_buffer8(1);
pduel->write_buffer32(40);
add_process(PROCESSOR_POINT_EVENT, 0, 0, 0, 0, TRUE);
core.temp_var[2] = 0;
return FALSE;
}
case 21: {
......@@ -3235,12 +3239,11 @@ int32 field::process_battle_command(uint16 step) {
return FALSE;
}
case 22: {
int32 r = core.temp_var[2] == 0 ? 0 : REASON_REPLACE;
raise_single_event(core.attacker, 0, EVENT_BATTLE_CONFIRM, 0, r, 0, 0, 0);
raise_single_event(core.attacker, 0, EVENT_BATTLE_CONFIRM, 0, 0, 0, 0, 0);
if(core.attack_target) {
if(core.attack_target->temp.position & POS_FACEDOWN)
core.pre_field[1] = core.attack_target->fieldid_r;
raise_single_event(core.attack_target, 0, EVENT_BATTLE_CONFIRM, 0, r, 0, 0, 1);
raise_single_event(core.attack_target, 0, EVENT_BATTLE_CONFIRM, 0, 0, 0, 0, 1);
}
raise_event((card*)0, EVENT_BATTLE_CONFIRM, 0, 0, 0, 0, 0);
process_single_event();
......
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