From 4d9659987d9ba5720121a2b9c4615f366934a662 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 17 Feb 2025 12:34:21 +0100 Subject: [PATCH] Fixes Protean not restoring types after ai damage calcs (#6280) --- src/battle_ai_util.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index b765616802..dadf39c61e 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -542,6 +542,20 @@ static inline s32 SetFixedMoveBasePower(u32 battlerAtk, u32 move) return fixedBasePower; } +static inline void AI_StoreBattlerTypes(u32 battlerAtk, u32 *types) +{ + types[0] = gBattleMons[battlerAtk].types[0]; + types[1] = gBattleMons[battlerAtk].types[1]; + types[2] = gBattleMons[battlerAtk].types[2]; +} + +static inline void AI_RestoreBattlerTypes(u32 battlerAtk, u32 *types) +{ + gBattleMons[battlerAtk].types[0] = types[0]; + gBattleMons[battlerAtk].types[1] = types[1]; + gBattleMons[battlerAtk].types[2] = types[2]; +} + static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCalcData, s32 *expectedDamage, s32 *minimumDamage, u32 holdEffectAtk, u32 abilityAtk) { u32 move = damageCalcData->move; @@ -664,6 +678,9 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u { s32 critChanceIndex, fixedBasePower; + u32 types[3]; + AI_StoreBattlerTypes(battlerAtk, types); + ProteanTryChangeType(battlerAtk, aiData->abilities[battlerAtk], move, moveType); fixedBasePower = SetFixedMoveBasePower(battlerAtk, move); @@ -741,6 +758,8 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u aiData->holdEffects[battlerAtk], aiData->abilities[battlerAtk]); } + + AI_RestoreBattlerTypes(battlerAtk, types); } else {