From 527cc33e0d7ae8a338e1b410eaaa3d2e534e6fc9 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 11 Aug 2024 13:01:10 +0200 Subject: [PATCH] Adjusted AI calcs for Triple Kick Effect (#5127) * Adjusted AI calcs for Triple Kick Effect * use strikeCount * fix compile --- src/battle_ai_util.c | 41 +++++++++++++++++++++++++++-------------- src/battle_util.c | 5 +---- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index f138252fa8..a094dfd694 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -577,13 +577,13 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u if (critChanceIndex > 1) // Consider crit damage only if a move has at least +2 crit chance { s32 nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, FALSE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + effectivenessMultiplier, weather, FALSE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, TRUE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + effectivenessMultiplier, weather, TRUE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); u32 critOdds = GetCritHitOdds(critChanceIndex); // With critOdds getting closer to 1, dmg gets closer to critDmg. @@ -596,20 +596,33 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u else if (critChanceIndex == -2) // Guaranteed critical { s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, TRUE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + effectivenessMultiplier, weather, TRUE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); simDamage.expected = GetDamageByRollType(critDmg, rollType); simDamage.minimum = LowestRollDmg(critDmg); } else { - s32 nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, FALSE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - + s32 nonCritDmg = 0; + if (gMovesInfo[move].effect == EFFECT_TRIPLE_KICK) + { + for (gMultiHitCounter = gMovesInfo[move].strikeCount; gMultiHitCounter > 0; gMultiHitCounter--) // The global is used to simulate actual damage done + { + nonCritDmg += CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, + effectivenessMultiplier, weather, FALSE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + } + } + else + { + nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, + effectivenessMultiplier, weather, FALSE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + } simDamage.expected = GetDamageByRollType(nonCritDmg, rollType); simDamage.minimum = LowestRollDmg(nonCritDmg); } diff --git a/src/battle_util.c b/src/battle_util.c index 821f785810..329de506d5 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8898,10 +8898,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 basePower = gBattleStruct->presentBasePower; break; case EFFECT_TRIPLE_KICK: - if (gMultiHitCounter == 0) // Calc damage with max BP for move consideration - basePower *= 6; - else - basePower *= 1 + gMovesInfo[move].strikeCount - gMultiHitCounter; + basePower *= 1 + gMovesInfo[move].strikeCount - gMultiHitCounter; break; case EFFECT_SPIT_UP: basePower = 100 * gDisableStructs[battlerAtk].stockpileCounter;