Fix AI's inability to use Acupressure on its ally (#9437)

Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
This commit is contained in:
Pawkkie 2026-03-05 17:07:48 -05:00 committed by GitHub
parent 6bf1b59b72
commit 70b841d7dd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 27 additions and 4 deletions

View File

@ -877,7 +877,7 @@ static u32 ChooseMoveOrAction_Doubles(enum BattlerId battler)
for (enum BattlerId battlerIndex = 0; battlerIndex < MAX_BATTLERS_COUNT; battlerIndex++)
{
if (battlerIndex == battler || gBattleMons[battlerIndex].hp == 0)
if (gBattleMons[battlerIndex].hp == 0)
{
actionOrMoveIndex[battlerIndex] = 0xFF;
bestMovePointsForTarget[battlerIndex] = -1;
@ -987,12 +987,14 @@ static u32 ChooseMoveOrAction_Doubles(enum BattlerId battler)
static inline bool32 ShouldConsiderMoveForBattler(enum BattlerId battlerAi, enum BattlerId battlerDef, enum Move move)
{
enum MoveTarget target = AI_GetBattlerMoveTargetType(battlerAi, move);
if (battlerAi == BATTLE_PARTNER(battlerDef))
{
enum MoveTarget target = AI_GetBattlerMoveTargetType(battlerAi, move);
if (target == TARGET_BOTH || target == TARGET_OPPONENTS_FIELD)
return FALSE;
}
if (!IsBattlerAlly(battlerAi, battlerDef) && target == TARGET_USER_OR_ALLY)
return FALSE;
return TRUE;
}
@ -3893,6 +3895,12 @@ static s32 AI_DoubleBattle(enum BattlerId battlerAtk, enum BattlerId battlerDef,
ADJUST_SCORE(WORST_EFFECT);
break;
}
case EFFECT_ACUPRESSURE:
{
ADJUST_SCORE(IncreaseStatUpScore(battlerAtkPartner, BATTLE_OPPOSITE(battlerAtkPartner), STAT_CHANGE_ATK_2));
ADJUST_SCORE(IncreaseStatUpScore(battlerAtkPartner, BATTLE_OPPOSITE(battlerAtkPartner), STAT_CHANGE_SPATK_2));
break;
}
default:
break;
} // attacker move effects

View File

@ -462,7 +462,7 @@ static void OpponentHandleChooseMove(enum BattlerId battler)
u32 chosenMove = moveInfo->moves[chosenMoveIndex];
enum MoveTarget target = GetBattlerMoveTargetType(battler, chosenMove);
if (target == TARGET_USER || target == TARGET_USER_OR_ALLY)
if (target == TARGET_USER)
gBattlerTarget = battler;
if (target == TARGET_BOTH)

View File

@ -1270,3 +1270,18 @@ AI_SINGLE_BATTLE_TEST("AI will not try to withstand hit with absorbing move if i
TURN { MOVE(player, MOVE_DRAGON_RAGE); EXPECT_MOVE(opponent, MOVE_ENERGY_BALL); }
}
}
AI_DOUBLE_BATTLE_TEST("AI can use Acupressure on its ally")
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT);
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); }
PLAYER(SPECIES_WYNAUT) { HP(1); Moves(MOVE_CELEBRATE); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_ACUPRESSURE); }
OPPONENT(SPECIES_WYNAUT) { Moves(MOVE_SCRATCH); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); EXPECT_MOVE(opponentRight, MOVE_SCRATCH, target:playerRight); EXPECT_MOVE(opponentLeft, MOVE_ACUPRESSURE, target:opponentRight); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_ACUPRESSURE, opponentLeft);
}
}

View File

@ -692,7 +692,7 @@ AI_MULTI_BATTLE_TEST("Trainer Slide: Multi: Last Switchin")
MULTI_OPPONENT_B(SPECIES_WOBBUFFET) { Speed(2); Moves(MOVE_CELEBRATE); }
} WHEN {
TURN {
EXPECT_MOVE(opponentLeft, MOVE_MEMENTO, target: opponentRight); EXPECT_SEND_OUT(opponentLeft,1);
EXPECT_MOVE(opponentLeft, MOVE_MEMENTO, target: playerRight); EXPECT_SEND_OUT(opponentLeft,1);
MOVE(playerRight, MOVE_MEMENTO, target: opponentRight); SEND_OUT(playerRight,4);
EXPECT_MOVE(opponentRight, MOVE_MEMENTO, target: playerRight); EXPECT_SEND_OUT(opponentRight,4);
}