db24128ee3
Co-authored-by: Eduardo Quezada <eduardo602002@gmail.com>
131 lines
5.2 KiB
C
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); }
|
|
}
|
|
}
|
|
}
|