mirror of
https://github.com/pret/pokeemerald.git
synced 2026-03-21 17:54:57 -05:00
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:
parent
6bf1b59b72
commit
70b841d7dd
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user