From 16ed9fbf3dba99abcda870a32a10aad6a43afd50 Mon Sep 17 00:00:00 2001 From: GGbond Date: Thu, 18 Dec 2025 01:38:28 +0800 Subject: [PATCH] Fix: AI should not use Helping Hand on a partner with ABILITY_GOOD_AS_GOLD (#8560) --- src/battle_ai_main.c | 8 ++++++++ test/battle/ai/ai_doubles.c | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 9fe1b819ba..ac97f1e004 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2049,9 +2049,16 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_FOLLOW_ME: + if (!hasPartner + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) + || (aiData->partnerMove != MOVE_NONE && IsBattleMoveStatus(aiData->partnerMove)) + || gBattleStruct->monToSwitchIntoId[BATTLE_PARTNER(battlerAtk)] != PARTY_SIZE) + ADJUST_SCORE(-20); + break; case EFFECT_HELPING_HAND: if (!hasPartner || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) + || aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_GOOD_AS_GOLD || (aiData->partnerMove != MOVE_NONE && IsBattleMoveStatus(aiData->partnerMove)) || gBattleStruct->monToSwitchIntoId[BATTLE_PARTNER(battlerAtk)] != PARTY_SIZE) //Partner is switching out. ADJUST_SCORE(-20); @@ -3152,6 +3159,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_HELPING_HAND: if (!hasPartner || !HasDamagingMove(battlerAtkPartner) + || aiData->abilities[battlerAtkPartner] == ABILITY_GOOD_AS_GOLD || (aiData->partnerMove != MOVE_NONE && IsBattleMoveStatus(aiData->partnerMove))) { ADJUST_SCORE(WORST_EFFECT); diff --git a/test/battle/ai/ai_doubles.c b/test/battle/ai/ai_doubles.c index 94fcfc8ef9..a35ff248bd 100644 --- a/test/battle/ai/ai_doubles.c +++ b/test/battle/ai/ai_doubles.c @@ -796,6 +796,20 @@ AI_DOUBLE_BATTLE_TEST("AI uses Helping Hand if the ally does notably more damage } } +AI_DOUBLE_BATTLE_TEST("AI does not use Helping Hand on Good as Gold ally") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_HELPING_HAND) == EFFECT_HELPING_HAND); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_DOUBLE_BATTLE); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); } + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_HELPING_HAND, MOVE_MUD_SLAP); } + OPPONENT(SPECIES_GHOLDENGO) { Ability(ABILITY_GOOD_AS_GOLD); Moves(MOVE_MUDDY_WATER); } + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, MOVE_MUD_SLAP); } + } +} + AI_DOUBLE_BATTLE_TEST("AI uses Tailwind") { u32 speed1, speed2, speed3, speed4;