From 48100e959319fbc97b468e6d7b4c9f3aaf59706d Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 22 May 2025 19:15:01 +0200 Subject: [PATCH] Fixes Unnerve activation not limited to 1 per switch-in (#6960) --- include/battle.h | 1 + src/battle_util.c | 6 ++++-- test/battle/ability/unnerve.c | 27 +++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/include/battle.h b/include/battle.h index 633c9da18a..10cd804931 100644 --- a/include/battle.h +++ b/include/battle.h @@ -132,6 +132,7 @@ struct DisableStruct u8 unburdenActive:1; u8 neutralizingGas:1; u8 iceFaceActivationPrevention:1; // fixes hit escape move edge case + u8 unnerveActivated:1; // Unnerve and As One (Unnerve part) activate only once per switch in u8 padding:3; }; diff --git a/src/battle_util.c b/src/battle_util.c index 640b4753af..e74bddcf54 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4847,10 +4847,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITY_UNNERVE: - if (!gSpecialStatuses[battler].switchInAbilityDone) + if (!gSpecialStatuses[battler].switchInAbilityDone && !gDisableStructs[battler].unnerveActivated) { gBattlerTarget = GetOppositeBattler(battler); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_UNNERVE; + gDisableStructs[battler].unnerveActivated = TRUE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; BattleScriptPushCursorAndCallback(BattleScript_SwitchInAbilityMsg); effect++; @@ -4858,10 +4859,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_AS_ONE_ICE_RIDER: case ABILITY_AS_ONE_SHADOW_RIDER: - if (!gSpecialStatuses[battler].switchInAbilityDone) + if (!gSpecialStatuses[battler].switchInAbilityDone && !gDisableStructs[battler].unnerveActivated) { gBattlerTarget = GetOppositeBattler(battler); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWITCHIN_ASONE; + gDisableStructs[battler].unnerveActivated = TRUE; gSpecialStatuses[battler].switchInAbilityDone = TRUE; BattleScriptPushCursorAndCallback(BattleScript_ActivateAsOne); effect++; diff --git a/test/battle/ability/unnerve.c b/test/battle/ability/unnerve.c index 4547854231..9a8972eb5c 100644 --- a/test/battle/ability/unnerve.c +++ b/test/battle/ability/unnerve.c @@ -72,3 +72,30 @@ SINGLE_BATTLE_TEST("Unnerve prints the correct string (opponent)") MESSAGE("Your team is too nervous to eat Berries!"); } } + +SINGLE_BATTLE_TEST("Unnerve activates only once per switch-in") +{ + u16 mon; + u16 ability; + PARAMETRIZE { mon = SPECIES_JOLTIK, ability = ABILITY_UNNERVE; } + PARAMETRIZE { mon = SPECIES_CALYREX_ICE, ability = ABILITY_AS_ONE_ICE_RIDER; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + OPPONENT(mon) { Ability(ability); } + OPPONENT(mon) { Ability(ability); } + } WHEN { + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ability); + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + NOT ABILITY_POPUP(opponent, ability); + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + ABILITY_POPUP(opponent, ability); + + } +}