mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-24 05:05:29 +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_LIGHT_SCREEN:
|
||||||
case EFFECT_REFLECT:
|
case EFFECT_REFLECT:
|
||||||
case EFFECT_AURORA_VEIL:
|
case EFFECT_AURORA_VEIL:
|
||||||
if (ShouldSetScreen(battlerAtk, battlerDef, move))
|
if (ShouldSetScreen(battlerAtk, battlerDef, moveEffect))
|
||||||
{
|
{
|
||||||
score += 5;
|
score += 5;
|
||||||
if (AI_DATA->atkHoldEffect == HOLD_EFFECT_LIGHT_CLAY)
|
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)
|
bool32 ShouldSetScreen(u8 battlerAtk, u8 battlerDef, u16 moveEffect)
|
||||||
{
|
{
|
||||||
u8 atkSide = GetBattlerSide(battlerAtk);
|
u8 atkSide = GetBattlerSide(battlerAtk);
|
||||||
|
|
||||||
if (gSideTimers[atkSide].auroraVeilTimer != 0)
|
|
||||||
{
|
|
||||||
bool8 defHasPhysical = HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL);
|
|
||||||
bool8 defHasSpecial = HasMoveWithSplit(battlerDef, SPLIT_SPECIAL);
|
|
||||||
|
|
||||||
switch (moveEffect)
|
switch (moveEffect)
|
||||||
{
|
{
|
||||||
case EFFECT_AURORA_VEIL:
|
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
|
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;
|
return TRUE;
|
||||||
break;
|
break;
|
||||||
case EFFECT_REFLECT:
|
case EFFECT_REFLECT:
|
||||||
if (SideHasMoveSplit(battlerDef, SPLIT_PHYSICAL))
|
// Use only if the player has a physical move and AI doesn't already have Reflect itself active.
|
||||||
{
|
if (HasMoveWithSplit(battlerDef, SPLIT_PHYSICAL)
|
||||||
if (!defHasPhysical && !defHasSpecial)
|
&& !(gSideStatuses[atkSide] & SIDE_STATUS_REFLECT))
|
||||||
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;
|
return TRUE;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EFFECT_LIGHT_SCREEN:
|
case EFFECT_LIGHT_SCREEN:
|
||||||
if (SideHasMoveSplit(battlerDef, SPLIT_SPECIAL))
|
// Use only if the player has a special move and AI doesn't already have Light Screen itself active.
|
||||||
{
|
if (HasMoveWithSplit(battlerDef, SPLIT_SPECIAL)
|
||||||
if (!defHasPhysical && !defHasSpecial)
|
&& !(gSideStatuses[atkSide] & SIDE_STATUS_LIGHTSCREEN))
|
||||||
return TRUE; //Target has no attacking moves so no point in doing Light Screen check
|
|
||||||
|
|
||||||
if (defHasSpecial || !HasMoveEffect(battlerAtk, EFFECT_REFLECT) || !defHasPhysical)
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user