mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-23 20:55:30 +01:00
fix ShouldSetScreen (thx Syreldar)
This commit is contained in:
parent
0664daf384
commit
49e41a2d3b
@ -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)
|
||||
|
@ -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)
|
||||
{
|
||||
bool8 defHasPhysical = HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL);
|
||||
bool8 defHasSpecial = HasMoveWithSplit(battlerDef, SPLIT_SPECIAL);
|
||||
|
||||
switch (moveEffect)
|
||||
{
|
||||
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))))
|
||||
&& !(gSideStatuses[atkSide] & (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL)))
|
||||
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)
|
||||
// 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:
|
||||
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)
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user