Fix: AI should not use Helping Hand on a partner with ABILITY_GOOD_AS_GOLD (#8560)

This commit is contained in:
GGbond 2025-12-18 01:38:28 +08:00 committed by GitHub
parent 7ea180513e
commit 16ed9fbf3d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 0 deletions

View File

@ -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);

View File

@ -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;