diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 380213e22f..9625033c81 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7722,8 +7722,9 @@ BattleScript_SupersweetSyrupLoopIncrement: jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_SupersweetSyrupLoop copybyte sBATTLER, gBattlerAttacker destroyabilitypopup - restoretarget + restoretarget pause B_WAIT_TIME_MED + tryintimidatejectpack end3 BattleScript_SupersweetSyrupWontDecrease: diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 7a093d2e08..8f2d78ed41 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -82,19 +82,19 @@ enum { (gBattleControllerExecFlags & (1u << battler)) #define MARK_BATTLE_CONTROLLER_MESSAGE_OUTBOUND_OVER_LINK(battler) \ - gBattleControllerExecFlags |= (1u << battler) << (32 - MAX_BATTLERS_COUNT) + gBattleControllerExecFlags |= ((1u << battler) << (32 - MAX_BATTLERS_COUNT)) #define MARK_BATTLE_CONTROLLER_MESSAGE_SYNCHRONIZED_OVER_LINK(battler) \ gBattleControllerExecFlags &= ~((1 << 28) << (battler)) #define MARK_BATTLE_CONTROLLER_ACTIVE_FOR_PLAYER(battler, playerId) \ - gBattleControllerExecFlags |= (1u << battler) << ((playerId) << 2) + gBattleControllerExecFlags |= ((1u << battler) << ((playerId) << 2)) #define MARK_BATTLE_CONTROLLER_IDLE_FOR_PLAYER(battler, playerId) \ - gBattleControllerExecFlags &= ~(1u << battler) << ((playerId) * 4) + gBattleControllerExecFlags &= ~((1u << battler) << ((playerId) * 4)) #define IS_BATTLE_CONTROLLER_ACTIVE_FOR_PLAYER(battler, playerId) \ - (gBattleControllerExecFlags & (1u << battler) << ((playerId) * 4)) + (gBattleControllerExecFlags & ((1u << battler) << ((playerId) * 4))) // This actually checks if a specific controller is active on any player or if // *any* controller is pending sync over link communications, but the macro name diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 2eeac282ce..2b0287be40 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -268,9 +268,9 @@ enum MoveEndEffects MOVEEND_SKY_DROP_CONFUSE, MOVEEND_UPDATE_LAST_MOVES, MOVEEND_MIRROR_MOVE, + MOVEEND_DEFROST, MOVEEND_NEXT_TARGET, // Everything up until here is handled for each strike of a spread move MOVEEND_MULTIHIT_MOVE, - MOVEEND_DEFROST, MOVEEND_SECOND_MOVE_BLOCK, MOVEEND_ITEM_EFFECTS_ATTACKER, MOVEEND_ABILITY_BLOCK, diff --git a/test/battle/defrost.c b/test/battle/defrost.c new file mode 100644 index 0000000000..3d456d6673 --- /dev/null +++ b/test/battle/defrost.c @@ -0,0 +1,18 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Defrost: A fire type spread move will thaw both targets") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_HEAT_WAVE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAT_WAVE, playerLeft); + STATUS_ICON(opponentLeft, freeze: FALSE); + STATUS_ICON(opponentRight, freeze: FALSE); + } +} diff --git a/test/battle/hold_effect/eject_pack.c b/test/battle/hold_effect/eject_pack.c index 0a21362a99..f33a59de21 100644 --- a/test/battle/hold_effect/eject_pack.c +++ b/test/battle/hold_effect/eject_pack.c @@ -161,12 +161,16 @@ SINGLE_BATTLE_TEST("Eject Pack will miss timing to switch out user if Eject Butt } } -DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after intimidate") +DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after an ability stat drop") { u32 speed; + u32 species, ability; - PARAMETRIZE { speed = 1; } - PARAMETRIZE { speed = 11; } + PARAMETRIZE { species = SPECIES_EKANS; ability = ABILITY_INTIMIDATE; speed = 1; } + PARAMETRIZE { species = SPECIES_EKANS; ability = ABILITY_INTIMIDATE; speed = 11; } + + PARAMETRIZE { species = SPECIES_DIPPLIN; ability = ABILITY_SUPERSWEET_SYRUP; speed = 1; } + PARAMETRIZE { species = SPECIES_DIPPLIN; ability = ABILITY_SUPERSWEET_SYRUP; speed = 11; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_EJECT_PACK); } @@ -174,7 +178,7 @@ DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after PLAYER(SPECIES_WOBBUFFET) { Speed(3); } OPPONENT(SPECIES_WYNAUT) { Speed(4); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } - OPPONENT(SPECIES_EKANS) { Speed(6); Ability(ABILITY_INTIMIDATE); } + OPPONENT(species) { Speed(6); Ability(ability); } } WHEN { TURN { SWITCH(opponentLeft, 2); @@ -184,14 +188,18 @@ DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after SEND_OUT(playerLeft, 2); } } SCENE { - ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + ABILITY_POPUP(opponentLeft, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); if (speed == 11) { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); } else { - NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); + } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); } } diff --git a/test/battle/move_effect/heal_bell.c b/test/battle/move_effect/heal_bell.c index 6a8e5d5ed4..67bdfda1b8 100644 --- a/test/battle/move_effect/heal_bell.c +++ b/test/battle/move_effect/heal_bell.c @@ -80,7 +80,7 @@ DOUBLE_BATTLE_TEST("Heal Bell/Aromatherapy cures the entire party of the user fr case STATUS1_FROSTBITE: STATUS_ICON(playerLeft, frostbite: FALSE); STATUS_ICON(playerRight, frostbite: FALSE); break; } for (j = 0; j < PARTY_SIZE; j++) - EXPECT_EQ(GetMonData(&gPlayerParty[i], MON_DATA_STATUS), STATUS1_NONE); + EXPECT_EQ(GetMonData(&gPlayerParty[j], MON_DATA_STATUS), STATUS1_NONE); } } diff --git a/test/battle/spread_moves.c b/test/battle/spread_moves.c index f617bd69c1..869d5bbebb 100644 --- a/test/battle/spread_moves.c +++ b/test/battle/spread_moves.c @@ -3,7 +3,6 @@ DOUBLE_BATTLE_TEST("Spread Moves: Ability and Item effects activate correctly after a multi target move") { - // TODO: Might be a bug, verify on cardridge GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); } PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_COVERT_CLOAK); }