From 53727aa23d006b6f05aaa6b4adf78ad491eaad29 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 14 Feb 2025 12:26:49 +0100 Subject: [PATCH] Fixes ability Embody Aspect triggering multiple times (#6259) Co-authored-by: Bassoonian --- include/battle.h | 1 + src/battle_util.c | 4 +++- test/battle/ability/embody_aspect.c | 23 +++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/include/battle.h b/include/battle.h index 0ca26cc8e6..2659c08844 100644 --- a/include/battle.h +++ b/include/battle.h @@ -833,6 +833,7 @@ struct BattleStruct u8 usedEjectItem; u8 usedMicleBerry; u8 trainerSlideSpriteIds[MAX_BATTLERS_COUNT]; + u8 embodyAspectBoost[NUM_BATTLE_SIDES]; }; // The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, diff --git a/src/battle_util.c b/src/battle_util.c index 6419b5017d..20e4ba635e 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5107,7 +5107,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK: case ABILITY_EMBODY_ASPECT_WELLSPRING_MASK: case ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK: - if (!gSpecialStatuses[battler].switchInAbilityDone) + if (!gSpecialStatuses[battler].switchInAbilityDone + && !(gBattleStruct->embodyAspectBoost[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]))) { u32 stat; @@ -5126,6 +5127,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = battler; gSpecialStatuses[battler].switchInAbilityDone = TRUE; + gBattleStruct->embodyAspectBoost[GetBattlerSide(battler)] |= 1u << gBattlerPartyIndexes[battler]; SET_STATCHANGER(stat, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); effect++; diff --git a/test/battle/ability/embody_aspect.c b/test/battle/ability/embody_aspect.c index fffc8cf423..22b28dea22 100644 --- a/test/battle/ability/embody_aspect.c +++ b/test/battle/ability/embody_aspect.c @@ -57,3 +57,26 @@ SINGLE_BATTLE_TEST("Embody Aspect activates when it's no longer effected by Neut MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); } } + +SINGLE_BATTLE_TEST("Embody Aspect raises Speed only once per battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_OGERPON_TEAL_TERA) { Ability(ABILITY_EMBODY_ASPECT_TEAL_MASK); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { SWITCH(opponent, 1); } + TURN { SWITCH(opponent, 0); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_EMBODY_ASPECT_TEAL_MASK); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_EMBODY_ASPECT_TEAL_MASK); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); + } + } THEN { + EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + } +}