From 4a714225e526a7af3bbb815a9e0553cea2f9700e Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Wed, 29 Oct 2025 13:25:05 +0000 Subject: [PATCH] Fixes hazards and switch-in items not being reset when switching in (#8074) --- src/battle_main.c | 3 +++ src/battle_script_commands.c | 1 - test/battle/hazards.c | 23 +++++++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/battle_main.c b/src/battle_main.c index 6aa4c7212d..99464151a8 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3235,6 +3235,9 @@ void SwitchInClearSetData(u32 battler, struct Volatiles *volatilesCopy) gBattleStruct->battlerState[battler].stompingTantrumTimer = 0; gBattleStruct->palaceFlags &= ~(1u << battler); gBattleStruct->battlerState[battler].canPickupItem = FALSE; + gBattleStruct->hazardsCounter = 0; + gDisableStructs[battler].hazardsDone = FALSE; + gSpecialStatuses[battler].switchInItemDone = FALSE; ClearPursuitValuesIfSet(battler); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 223a4bd382..6d9ba3d61e 100755 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7891,7 +7891,6 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) gBattleStruct->hpOnSwitchout[GetBattlerSide(i)] = gBattleMons[i].hp; } - gDisableStructs[battler].hazardsDone = FALSE; gBattleStruct->battlerState[battler].forcedSwitch = FALSE; return FALSE; } diff --git a/test/battle/hazards.c b/test/battle/hazards.c index 9c974bb7b1..17ecb41f5c 100644 --- a/test/battle/hazards.c +++ b/test/battle/hazards.c @@ -38,3 +38,26 @@ SINGLE_BATTLE_TEST("Hazards are applied based on order of set up") EXPECT_EQ(gBattleStruct->hazardsQueue[0][5], HAZARDS_NONE); } } + +SINGLE_BATTLE_TEST("Hazards are applied correctly after a battler faints") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_FINAL_GAMBIT) == EFFECT_FINAL_GAMBIT); + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_STEALTH_ROCK); + MOVE(player, MOVE_FINAL_GAMBIT); + SEND_OUT(player, 1); + SEND_OUT(player, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FINAL_GAMBIT, player); + MESSAGE("Wynaut fainted!"); + MESSAGE("Pointed stones dug into Wobbuffet!"); + MESSAGE("Wobbuffet fainted!"); + MESSAGE("Pointed stones dug into Wynaut!"); + } +}