From e605b87722ce23757626b756973681a6db73a175 Mon Sep 17 00:00:00 2001 From: Raymond Dodge Date: Thu, 29 May 2025 04:59:47 -0400 Subject: [PATCH 1/4] Fix out-of-bounds in Heal Bell Cures Entire Party test (#7011) --- test/battle/move_effect/heal_bell.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); } } From 213503dee96a1351d34e2d250572f3879bdf5d61 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 29 May 2025 11:25:10 +0200 Subject: [PATCH 2/4] Fixes spread move fire types not defrosting all targets (#6998) --- include/constants/battle_script_commands.h | 2 +- test/battle/defrost.c | 18 ++++++++++++++++++ test/battle/spread_moves.c | 1 - 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 test/battle/defrost.c diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index d8e13baae1..ecd85700d8 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -278,9 +278,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 multi-hit move MOVEEND_MULTIHIT_MOVE, - MOVEEND_DEFROST, MOVEEND_RECOIL, MOVEEND_RAPID_SPIN, MOVEEND_ITEM_EFFECTS_ATTACKER, 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/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); } From 5bdab5163e82d833a24c003f4a0b365979f3a23c Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 30 May 2025 11:58:32 +0200 Subject: [PATCH 3/4] Update Supersweet Syrup with eject pack fix (#7015) --- data/battle_scripts_1.s | 3 ++- test/battle/hold_effect/eject_pack.c | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 41afb65a5d..974a4a561c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7847,8 +7847,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/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); } } From 1e32cf278c4ea0942ec5fbf78a7a9763ee3f5f39 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Fri, 30 May 2025 16:31:38 +0200 Subject: [PATCH 4/4] fix battle controller macros (#7021) --- include/battle_controllers.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 0716ae2e54..3eddc95578 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