sovereignx/test/battle/ai/ai_flag_sequence_switching.c
kittenchilly db24128ee3
Update battle messages to Gen 5+ standards (#3240)
Co-authored-by: Eduardo Quezada <eduardo602002@gmail.com>
2024-10-21 14:52:45 -03:00

131 lines
5.2 KiB
C

#include "global.h"
#include "test/battle.h"
AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch after a KO in exactly party order")
{
u32 aiSequenceSwitchingFlag = 0;
PARAMETRIZE { aiSequenceSwitchingFlag = 0; }
PARAMETRIZE { aiSequenceSwitchingFlag = AI_FLAG_SEQUENCE_SWITCHING; }
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag);
PLAYER(SPECIES_SWELLOW) { Level (50); }
OPPONENT(SPECIES_MACHOP) { Level(5); }
OPPONENT(SPECIES_MACHOKE) { Level(5); }
OPPONENT(SPECIES_MACHAMP) { Level(5); }
OPPONENT(SPECIES_MANKEY) { Level(5); }
OPPONENT(SPECIES_PRIMEAPE) { Level(5); }
OPPONENT(SPECIES_MAGNEZONE) { Level(100); }
} WHEN {
TURN { MOVE(player, MOVE_WING_ATTACK); }
if (aiSequenceSwitchingFlag) {
TURN { MOVE(player, MOVE_WING_ATTACK); }
TURN { MOVE(player, MOVE_WING_ATTACK); }
TURN { MOVE(player, MOVE_WING_ATTACK); }
TURN { MOVE(player, MOVE_WING_ATTACK); }
}
} SCENE {
if (aiSequenceSwitchingFlag) {
MESSAGE(AI_TRAINER_NAME " sent out Machoke!");
MESSAGE(AI_TRAINER_NAME " sent out Machamp!");
MESSAGE(AI_TRAINER_NAME " sent out Mankey!");
MESSAGE(AI_TRAINER_NAME " sent out Primeape!");
MESSAGE(AI_TRAINER_NAME " sent out Magnezone!");
}
else {
MESSAGE(AI_TRAINER_NAME " sent out Magnezone!");
}
}
}
AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: Roar and Dragon Tail still force switch to random party member")
{
u32 move;
PARAMETRIZE { move = MOVE_ROAR; }
PARAMETRIZE {move = MOVE_DRAGON_TAIL; }
PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH);
GIVEN {
ASSUME(gMovesInfo[MOVE_ROAR].effect == EFFECT_ROAR);
ASSUME(gMovesInfo[MOVE_DRAGON_TAIL].effect == EFFECT_HIT_SWITCH_TARGET);
AI_FLAGS(AI_FLAG_SEQUENCE_SWITCHING);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_BULBASAUR);
OPPONENT(SPECIES_CHARMANDER);
OPPONENT(SPECIES_SQUIRTLE) { HP(0); }
} WHEN {
TURN { MOVE(player, move); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, move, player);
MESSAGE("The opposing Bulbasaur was dragged out!");
}
}
AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lowest party index after U-Turn, Parting Shot, Baton Pass, and Chilly Reception")
{
u32 j, aiSequenceSwitchingFlag = 0, move = MOVE_NONE;
static const u32 switchMoves[] = {
MOVE_U_TURN,
MOVE_PARTING_SHOT,
MOVE_BATON_PASS,
MOVE_CHILLY_RECEPTION,
};
for (j = 0; j < ARRAY_COUNT(switchMoves); j++)
{
PARAMETRIZE { aiSequenceSwitchingFlag = 0; move = switchMoves[j]; }
PARAMETRIZE { aiSequenceSwitchingFlag = AI_FLAG_SEQUENCE_SWITCHING; move = switchMoves[j]; }
}
GIVEN {
ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE);
ASSUME(gMovesInfo[MOVE_PARTING_SHOT].effect == EFFECT_PARTING_SHOT);
ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS);
ASSUME(gMovesInfo[MOVE_CHILLY_RECEPTION].effect == EFFECT_CHILLY_RECEPTION);
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag);
PLAYER(SPECIES_SWELLOW) { Level (50); }
OPPONENT(SPECIES_MACHOP) { Level(1); Moves(move); }
OPPONENT(SPECIES_MACHOP) { Level(2); Moves(move); }
OPPONENT(SPECIES_MACHOP) { Level(3); Moves(move); }
OPPONENT(SPECIES_MACHOP) { Level(4); Moves(move); }
OPPONENT(SPECIES_MACHOP) { Level(5); Moves(move); }
OPPONENT(SPECIES_MAGNEZONE) { Level(100); Moves(move); }
} WHEN {
if (aiSequenceSwitchingFlag) {
TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 1); }
TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 0); }
TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 1); }
TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 0); }
TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 1); }
}
else {
TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 5); }
}
}
}
AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will not switch mid-battle")
{
u32 aiSequenceSwitchingFlag = 0;
PARAMETRIZE { aiSequenceSwitchingFlag = 0; }
PARAMETRIZE { aiSequenceSwitchingFlag = AI_FLAG_SEQUENCE_SWITCHING; }
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag);
PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_LICK); }
OPPONENT(SPECIES_GASTLY) { Moves(MOVE_SHADOW_BALL); }
OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_KARATE_CHOP); }
} WHEN {
if (aiSequenceSwitchingFlag == AI_FLAG_SEQUENCE_SWITCHING) {
TURN { MOVE(player, MOVE_LICK) ; EXPECT_MOVE(opponent, MOVE_SHADOW_BALL); }
}
else {
TURN { MOVE(player, MOVE_LICK) ; EXPECT_SWITCH(opponent, 1); }
}
}
}