From 57ce85207ee3b1a1643cbac64086f0f1285a2952 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 9 Dec 2023 17:40:04 +0100 Subject: [PATCH] Fixes Substitute triggering Stamina and Eject Button on crash damage (#3669) * Fixes Substitute triggering Stamina * Fix Eject Button triggering on crash damage --- src/battle_script_commands.c | 4 +-- src/battle_util.c | 1 + test/battle/ability/stamina.c | 36 ++++++++++++++++++++++++++ test/battle/hold_effect/eject_button.c | 21 +++++++++++++++ 4 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2395a65e1f..b1fbc21485 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5858,9 +5858,9 @@ static void Cmd_moveend(void) u8 battler = battlers[i]; // Attacker is the damage-dealer, battler is mon to be switched out if (IsBattlerAlive(battler) + && gBattlerAttacker != battler && GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_EJECT_BUTTON - && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) - && (gSpecialStatuses[battler].physicalDmg != 0 || gSpecialStatuses[battler].specialDmg != 0) + && TARGET_TURN_DAMAGED && CountUsablePartyMons(battler) > 0) // Has mon to switch into { gBattleScripting.battler = battler; diff --git a/src/battle_util.c b/src/battle_util.c index 0a89e7e70e..71809c86a1 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5193,6 +5193,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_STAMINA: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattlerAttacker != gBattlerTarget && TARGET_TURN_DAMAGED && IsBattlerAlive(battler) && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN)) diff --git a/test/battle/ability/stamina.c b/test/battle/ability/stamina.c index 3470cce518..e4a1a255a3 100644 --- a/test/battle/ability/stamina.c +++ b/test/battle/ability/stamina.c @@ -87,3 +87,39 @@ DOUBLE_BATTLE_TEST("Stamina activates correctly for every battler with the abili EXPECT_EQ(opponentLeft->hp, opponentLeft->maxHP); } } + +SINGLE_BATTLE_TEST("Stamina activates for every hit of a multi hit move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_MUDBRAY) { Ability(ABILITY_STAMINA); } + } WHEN { + TURN { MOVE(player, MOVE_DOUBLE_KICK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, player); + HP_BAR(opponent); + STAMINA_STAT_RAISE(opponent, "Foe Mudbray's Defense rose!"); + STAMINA_STAT_RAISE(opponent, "Foe Mudbray's Defense rose!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("Stamina is not activated by users own Substitute") +{ + GIVEN { + PLAYER(SPECIES_MUDBRAY) { Ability(ABILITY_STAMINA); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SUBSTITUTE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); + MESSAGE("Mudbray made a SUBSTITUTE!"); + NONE_OF { + ABILITY_POPUP(player, ABILITY_STAMINA); + MESSAGE("Mudbray's Defense rose!"); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/hold_effect/eject_button.c b/test/battle/hold_effect/eject_button.c index 45dfc539b8..a94978b3ee 100644 --- a/test/battle/hold_effect/eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -187,3 +187,24 @@ SINGLE_BATTLE_TEST("Eject Button is activated before Emergency Exit") MESSAGE("Foe Golisopod is switched out with the Eject Button!"); } } + +SINGLE_BATTLE_TEST("Eject Button is not triggered after High Jump Kick crash damage") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_PROTECT); + MOVE(opponent, MOVE_HIGH_JUMP_KICK); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, player); + MESSAGE("Foe Wobbuffet kept going and crashed!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } + } +}