From 1405f04e1e8bf18022d5b5929f932405cb19ac03 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 7 Feb 2021 12:39:23 -0700 Subject: [PATCH] ai understands constant-damage effects --- src/battle_ai_main.c | 2 +- src/battle_ai_util.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 4af3ba4fcc..c45ccc311b 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -188,7 +188,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves) move = gBattleMons[sBattler_AI].moves[i]; if (gBattleMoves[move].power != 0 && !(moveLimitations & gBitTable[i])) { - dmg = AI_CalcDamage(move, sBattler_AI, gBattlerTarget) * (100 - (Random() % 10)) / 100; + dmg = AI_CalcDamage(move, sBattler_AI, gBattlerTarget); if (dmg == 0) dmg = 1; } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 018dc55a51..bbfae9bda1 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -721,6 +721,35 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef) GET_MOVE_TYPE(move, moveType); dmg = CalculateMoveDamage(move, battlerAtk, battlerDef, moveType, 0, AI_GetIfCrit(move, battlerAtk, battlerDef), FALSE, FALSE); + // handle dynamic move damage + switch (gBattleMoves[move].effect) + { + case EFFECT_LEVEL_DAMAGE: + dmg = gBattleMons[battlerAtk].level; + break; + case EFFECT_DRAGON_RAGE: + dmg = 40; + break; + case EFFECT_SONICBOOM: + dmg = 20; + break; + case EFFECT_PSYWAVE: + { + u32 randDamage; + if (B_PSYWAVE_DMG >= GEN_6) + randDamage = (Random() % 101); + else + randDamage = (Random() % 11) * 10; + dmg = gBattleMons[battlerAtk].level * (randDamage + 50) / 100; + } + break; + //case EFFECT_METAL_BURST: + //case EFFECT_COUNTER: + default: + dmg *= (100 - (Random() % 10)) / 100; // add random factor + break; + } + RestoreBattlerData(battlerAtk); RestoreBattlerData(battlerDef);