From d213b1fad7950082ed2e7f841c591f1a76d90efa Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Wed, 9 Jul 2025 17:21:49 -0400 Subject: [PATCH] Fix switch AI not seeing absorbing abilities (#7309) --- src/battle_ai_switch_items.c | 2 ++ test/battle/ai/ai_switching.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index c6a4b8708f..7695a0a154 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -397,6 +397,8 @@ static bool32 ShouldSwitchIfAllMovesBad(u32 battler) { aiMove = gBattleMons[battler].moves[moveIndex]; if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > UQ_4_12(0.0) && aiMove != MOVE_NONE + && !CanAbilityAbsorbMove(battler, opposingBattler, gBattleMons[opposingBattler].ability, aiMove, GetBattleMoveType(aiMove), ABILITY_CHECK_TRIGGER_AI) + && !CanAbilityBlockMove(battler, opposingBattler, gBattleMons[battler].ability, gBattleMons[opposingBattler].ability, aiMove, ABILITY_CHECK_TRIGGER_AI) && (!ALL_MOVES_BAD_STATUS_MOVES_BAD || gMovesInfo[aiMove].power != 0)) // If using ALL_MOVES_BAD_STATUS_MOVES_BAD, then need power to be non-zero return FALSE; } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 41a480135d..e9ad61bdfa 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -1156,6 +1156,23 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if all moves } } +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if all moves deal zero damage (absorbing ability)") +{ + PASSES_RANDOMLY(SHOULD_SWITCH_ALL_SCORES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_SCORES_BAD); + GIVEN { + ASSUME(GetMoveType(MOVE_THUNDER_PUNCH) == TYPE_ELECTRIC); + ASSUME(GetMoveType(MOVE_FAKE_OUT) == TYPE_NORMAL); + ASSUME(GetMoveType(MOVE_RETURN) == TYPE_NORMAL); + ASSUME(GetMoveType(MOVE_DRAIN_PUNCH) == TYPE_FIGHTING); + ASSUME(gSpeciesInfo[SPECIES_MAROWAK_ALOLA].types[1] == TYPE_GHOST); + PLAYER(SPECIES_MAROWAK_ALOLA) { Ability(ABILITY_LIGHTNING_ROD); Moves(MOVE_SHADOW_BONE); } + OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_FAKE_OUT, MOVE_RETURN, MOVE_DRAIN_PUNCH, MOVE_THUNDER_PUNCH); Ability(ABILITY_LIMBER); } + OPPONENT(SPECIES_CHANDELURE) { Moves(MOVE_SHADOW_BALL); } + } WHEN { + TURN { MOVE(player, MOVE_SHADOW_BONE); EXPECT_SWITCH(opponent, 1); } + } +} + AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if Palafin-Zero isn't transformed yet") { GIVEN {