diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index c550139a03..d304dcbcbc 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -769,6 +769,11 @@ static bool32 ShouldSwitchIfAbilityBenefit(u32 battler) break; return FALSE; + + case ABILITY_ZERO_TO_HERO: + // Want to activate Palafin-Zero at all costs + if (gBattleMons[battler].species == SPECIES_PALAFIN_ZERO) + break; default: return FALSE; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 74f0646ed3..299c0a3bcd 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2907,6 +2907,12 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 mov battlerToSwitch = gBattleStruct->AI_monToSwitchIntoId[battlerAtk]; + // Palafin always wants to activate Zero to Hero + if (gBattleMons[battlerAtk].species == SPECIES_PALAFIN_ZERO + && gBattleMons[battlerAtk].ability == ABILITY_ZERO_TO_HERO + && CountUsablePartyMons(battlerAtk) != 0) + return SHOULD_PIVOT; + if (PartyBattlerShouldAvoidHazards(battlerAtk, battlerToSwitch)) return DONT_PIVOT; diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 85461966da..bb33ab4489 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -1153,3 +1153,27 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if all moves TURN { EXPECT_SWITCH(opponent, 1); MOVE(player, MOVE_ROOST); } } } + +AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch out if Palafin-Zero isn't transformed yet") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_FINIZEN); + OPPONENT(SPECIES_PALAFIN_ZERO); + OPPONENT(SPECIES_FINIZEN); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); EXPECT_SWITCH(opponent, 1); } + } +} + +AI_SINGLE_BATTLE_TEST("Switch AI: AI will use pivot move to activate Palafin's Zero to Hero rather than hard switching") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_FINIZEN); + OPPONENT(SPECIES_PALAFIN_ZERO) { Moves(MOVE_FLIP_TURN); } + OPPONENT(SPECIES_FINIZEN); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); EXPECT_MOVE(opponent, MOVE_FLIP_TURN); EXPECT_SEND_OUT(opponent, 1); } + } +}