From 49e41a2d3b134ab3d9e1275620499be47440f6a2 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 14 Feb 2021 09:11:29 -0700 Subject: [PATCH] fix ShouldSetScreen (thx Syreldar) --- src/battle_ai_main.c | 2 +- src/battle_ai_util.c | 53 +++++++++++++++++--------------------------- 2 files changed, 21 insertions(+), 34 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 55080a756..2e8342204 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3232,7 +3232,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_LIGHT_SCREEN: case EFFECT_REFLECT: case EFFECT_AURORA_VEIL: - if (ShouldSetScreen(battlerAtk, battlerDef, move)) + if (ShouldSetScreen(battlerAtk, battlerDef, moveEffect)) { score += 5; if (AI_DATA->atkHoldEffect == HOLD_EFFECT_LIGHT_CLAY) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 9ede3ae99..1c55d0798 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2891,41 +2891,28 @@ bool32 ShouldRecover(u8 battlerAtk, u8 battlerDef, u16 move, u8 healPercent) bool32 ShouldSetScreen(u8 battlerAtk, u8 battlerDef, u16 moveEffect) { u8 atkSide = GetBattlerSide(battlerAtk); - - if (gSideTimers[atkSide].auroraVeilTimer != 0) + switch (moveEffect) { - bool8 defHasPhysical = HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL); - bool8 defHasSpecial = HasMoveWithSplit(battlerDef, SPLIT_SPECIAL); - - switch (moveEffect) - { - case EFFECT_AURORA_VEIL: - if (gBattleWeather & WEATHER_HAIL_ANY - && !((gSideStatuses[atkSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN)))) - return TRUE; - break; - case EFFECT_REFLECT: - if (SideHasMoveSplit(battlerDef, SPLIT_PHYSICAL)) - { - if (!defHasPhysical && !defHasSpecial) - return TRUE; // Target has no attacking moves so no point in doing Light Screen check - - if (defHasPhysical || !HasMoveEffect(battlerAtk, EFFECT_LIGHT_SCREEN) || !defHasSpecial) - return TRUE; - } - break; - case EFFECT_LIGHT_SCREEN: - if (SideHasMoveSplit(battlerDef, SPLIT_SPECIAL)) - { - if (!defHasPhysical && !defHasSpecial) - return TRUE; //Target has no attacking moves so no point in doing Light Screen check - - if (defHasSpecial || !HasMoveEffect(battlerAtk, EFFECT_REFLECT) || !defHasPhysical) - return TRUE; - } - break; - } + case EFFECT_AURORA_VEIL: + // Use only in Hail and only if AI doesn't already have Reflect, Light Screen or Aurora Veil itself active. + if (gBattleWeather & WEATHER_HAIL_ANY + && !(gSideStatuses[atkSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL))) + return TRUE; + break; + case EFFECT_REFLECT: + // Use only if the player has a physical move and AI doesn't already have Reflect itself active. + if (HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL) + && !(gSideStatuses[atkSide] & SIDE_STATUS_REFLECT)) + return TRUE; + break; + case EFFECT_LIGHT_SCREEN: + // Use only if the player has a special move and AI doesn't already have Light Screen itself active. + if (HasMoveWithSplit(battlerDef, SPLIT_SPECIAL) + && !(gSideStatuses[atkSide] & SIDE_STATUS_LIGHTSCREEN)) + return TRUE; + break; } + return FALSE; }