Simplifying calls to IsBattlerTrapped; treats being unable to switch as trappedness (#7671)

This commit is contained in:
surskitty 2025-09-01 15:34:31 -04:00 committed by GitHub
parent 927f1898bb
commit 0a0d574998
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 6 deletions

View File

@ -2979,7 +2979,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
else if (GetBattleMoveCategory(move) == DAMAGE_CATEGORY_STATUS
&& (CountUsablePartyMons(battlerAtk) < 1
|| gAiLogicData->mostSuitableMonId[battlerAtk] == PARTY_SIZE
|| (!AI_CanBattlerEscape(battlerAtk) && IsBattlerTrapped(battlerDef, battlerAtk))))
|| IsBattlerTrapped(battlerDef, battlerAtk)))
ADJUST_SCORE(-30);
}
@ -4432,7 +4432,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
break;
ADJUST_SCORE(GOOD_EFFECT);
if (!HasDamagingMove(battlerDef)
|| (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef))
|| IsBattlerTrapped(battlerAtk, battlerDef)
|| aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT)
ADJUST_SCORE(DECENT_EFFECT);
break;
@ -4542,7 +4542,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case EFFECT_CURSE:
if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST))
{
if (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef))
if (IsBattlerTrapped(battlerAtk, battlerDef))
ADJUST_SCORE(GOOD_EFFECT);
else
ADJUST_SCORE(WEAK_EFFECT);
@ -4640,7 +4640,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_PERISH_SONG:
if (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef))
if (IsBattlerTrapped(battlerAtk, battlerDef))
ADJUST_SCORE(GOOD_EFFECT);
break;
case EFFECT_SANDSTORM:
@ -4799,7 +4799,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
break; // Don't use if the attract won't have a change to activate
if (gBattleMons[battlerDef].status1 & STATUS1_ANY
|| gBattleMons[battlerDef].volatiles.confusionTurns > 0
|| (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef)))
|| IsBattlerTrapped(battlerAtk, battlerDef))
ADJUST_SCORE(GOOD_EFFECT);
else
ADJUST_SCORE(DECENT_EFFECT);
@ -6049,7 +6049,7 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor
|| CountUsablePartyMons(battlerAtk) == 0
|| !IsBattleMoveStatus(move)
|| !HasMoveWithEffect(battlerAtk, EFFECT_BATON_PASS)
|| (!AI_CanBattlerEscape(battlerAtk) && IsBattlerTrapped(battlerDef, battlerAtk)))
|| IsBattlerTrapped(battlerAtk, battlerDef))
return score;
enum BattleMoveEffects effect = GetMoveEffect(move);

View File

@ -469,6 +469,9 @@ bool32 AI_CanBattlerEscape(u32 battler)
bool32 IsBattlerTrapped(u32 battlerAtk, u32 battlerDef)
{
if (AI_CanBattlerEscape(battlerDef))
return FALSE;
if (gBattleMons[battlerDef].volatiles.wrapped)
return TRUE;
if (gBattleMons[battlerDef].volatiles.escapePrevention)
@ -489,6 +492,9 @@ bool32 IsBattlerTrapped(u32 battlerAtk, u32 battlerDef)
&& IS_BATTLER_OF_TYPE(battlerAtk, TYPE_STEEL))
return TRUE;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && CountUsablePartyMons(battlerDef) == 0)
return TRUE;
return FALSE;
}