From 8c875224153a1068db01337f55979db7b1655a9a Mon Sep 17 00:00:00 2001 From: FosterProgramming Date: Fri, 24 Oct 2025 11:50:19 +0200 Subject: [PATCH] Fix toxic debris setting hazards on the wrong side when hit by an ally (#8026) --- data/battle_scripts_1.s | 5 ++--- src/battle_util.c | 5 ++++- test/battle/ability/toxic_debris.c | 20 ++++++++++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index db4f7e65e3..970c16179d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6048,9 +6048,8 @@ BattleScript_ToxicDebrisActivates:: printstring STRINGID_POISONSPIKESSCATTERED waitmessage B_WAIT_TIME_LONG BattleScript_ToxicDebrisRet: - copybyte sBATTLER, gBattlerTarget - copybyte gBattlerTarget, gBattlerAttacker - copybyte gBattlerAttacker, sBATTLER + restoretarget + restoreattacker return BattleScript_EarthEaterActivates:: diff --git a/src/battle_util.c b/src/battle_util.c index d5cad634d9..7744cb78e3 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4959,7 +4959,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && IsBattlerTurnDamaged(gBattlerTarget) && (gSideTimers[GetBattlerSide(gBattlerAttacker)].toxicSpikesAmount != 2)) { - SWAP(gBattlerAttacker, gBattlerTarget, i); + SaveBattlerTarget(gBattlerTarget); + SaveBattlerAttacker(gBattlerAttacker); + gBattlerAttacker = gBattlerTarget; + gBattlerTarget = BATTLE_OPPOSITE(gBattlerAttacker); BattleScriptCall(BattleScript_ToxicDebrisActivates); effect++; } diff --git a/test/battle/ability/toxic_debris.c b/test/battle/ability/toxic_debris.c index 61e128e985..4661849905 100644 --- a/test/battle/ability/toxic_debris.c +++ b/test/battle/ability/toxic_debris.c @@ -120,3 +120,23 @@ SINGLE_BATTLE_TEST("Air Balloon is popped after Toxic Debris activates") MESSAGE("Glimmora's Air Balloon popped!"); } } + +DOUBLE_BATTLE_TEST("Toxic Debris sets Toxic Spikes on the opposing side even when hit by an ally") +{ + struct BattlePokemon *user = NULL; + + PARAMETRIZE{ user = opponentLeft; } + PARAMETRIZE{ user = opponentRight; } + PARAMETRIZE{ user = playerRight; } + GIVEN { + PLAYER(SPECIES_GLIMMORA) { Ability(ABILITY_TOXIC_DEBRIS); } + PLAYER(SPECIES_WYNAUT) { } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { } + } WHEN { + TURN { MOVE(user, MOVE_SCRATCH, target: playerLeft); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_TOXIC_DEBRIS); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); + } +}