Fix Commander Dondozo Switching (#8624)

This commit is contained in:
Pawkkie 2025-12-25 17:27:56 -05:00 committed by GitHub
parent 1e0e1ffca6
commit 4f55dade50
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 40 additions and 18 deletions

View File

@ -1091,6 +1091,23 @@ static bool32 ShouldSwitchIfAttackingStatsLowered(u32 battler)
return FALSE;
}
static bool32 CanBattlerConsiderSwitch(u32 battler)
{
if (gBattleMons[battler].volatiles.wrapped)
return FALSE;
if (gBattleMons[battler].volatiles.escapePrevention)
return FALSE;
if (gBattleMons[battler].volatiles.root)
return FALSE;
if (IsAbilityPreventingEscape(battler))
return FALSE;
if (gBattleStruct->battlerState[battler].commanderSpecies)
return FALSE;
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
return FALSE;
return TRUE;
}
bool32 ShouldSwitch(u32 battler)
{
u32 battlerIn1, battlerIn2;
@ -1100,15 +1117,7 @@ bool32 ShouldSwitch(u32 battler)
s32 i;
s32 availableToSwitch;
if (gBattleMons[battler].volatiles.wrapped)
return FALSE;
if (gBattleMons[battler].volatiles.escapePrevention)
return FALSE;
if (gBattleMons[battler].volatiles.root)
return FALSE;
if (IsAbilityPreventingEscape(battler))
return FALSE;
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
if (!CanBattlerConsiderSwitch(battler))
return FALSE;
// Sequence Switching AI never switches mid-battle
@ -1251,15 +1260,7 @@ void ModifySwitchAfterMoveScoring(u32 battler)
s32 i;
s32 availableToSwitch;
if (gBattleMons[battler].volatiles.wrapped)
return;
if (gBattleMons[battler].volatiles.escapePrevention)
return;
if (gBattleMons[battler].volatiles.root)
return;
if (IsAbilityPreventingEscape(battler))
return;
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
if (!CanBattlerConsiderSwitch(battler))
return;
// Sequence Switching AI never switches mid-battle

View File

@ -1724,3 +1724,24 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers both meeting and
TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EXPLOSION); hp > 80 ? EXPECT_SEND_OUT(opponent, 2) : EXPECT_SEND_OUT(opponent, 1); }
}
}
AI_DOUBLE_BATTLE_TEST("AI will not choose to switch out Dondozo with Commander Tatsugiri")
{
PASSES_RANDOMLY(100, 100);
GIVEN {
ASSUME(GetMoveEffect(MOVE_PERISH_SONG) == EFFECT_PERISH_SONG);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES);
OPPONENT(SPECIES_DONDOZO) { Level(50); Moves(MOVE_WATER_GUN); }
OPPONENT(SPECIES_TATSUGIRI) { Moves(MOVE_WATER_GUN); Ability(ABILITY_COMMANDER); }
OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_HEADBUTT); }
PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH); }
PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_CELEBRATE, MOVE_PERISH_SONG); }
PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_CELEBRATE); }
PLAYER(SPECIES_ZIGZAGOON) { Moves (MOVE_CELEBRATE); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_PERISH_SONG); }
TURN { MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); }
TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); }
TURN { MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); EXPECT_MOVE(opponentLeft, MOVE_WATER_GUN); }
}
}