202 lines
8.1 KiB
C
202 lines
8.1 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
#include "battle_ai_util.h"
|
|
#include "constants/battle_z_move_effects.h"
|
|
|
|
AI_SINGLE_BATTLE_TEST("AI uses Z-moves.")
|
|
{
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
|
|
ASSUME(GetMoveType(MOVE_QUICK_ATTACK) == TYPE_NORMAL);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Moves(MOVE_QUICK_ATTACK); }
|
|
} WHEN {
|
|
TURN { EXPECT_MOVE(opponent, MOVE_QUICK_ATTACK, gimmick: GIMMICK_Z_MOVE); }
|
|
}
|
|
}
|
|
|
|
AI_SINGLE_BATTLE_TEST("AI does not use damaging Z-moves if the player would faint anyway.")
|
|
{
|
|
u32 currentHP;
|
|
PARAMETRIZE { currentHP = 1; }
|
|
PARAMETRIZE { currentHP = 500; }
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
|
|
ASSUME(GetMoveType(MOVE_QUICK_ATTACK) == TYPE_NORMAL);
|
|
PLAYER(SPECIES_WOBBUFFET) { HP(currentHP); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Moves(MOVE_QUICK_ATTACK); }
|
|
} WHEN {
|
|
if (currentHP != 1)
|
|
TURN { EXPECT_MOVE(opponent, MOVE_QUICK_ATTACK, gimmick: GIMMICK_Z_MOVE); }
|
|
else
|
|
TURN { EXPECT_MOVE(opponent, MOVE_QUICK_ATTACK, gimmick: GIMMICK_NONE); }
|
|
}
|
|
}
|
|
AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Extreme Evoboost")
|
|
{
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
|
|
ASSUME(GetMoveType(MOVE_QUICK_ATTACK) == TYPE_NORMAL);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_EEVEE) { Item(ITEM_EEVIUM_Z); Moves(MOVE_POUND, MOVE_LAST_RESORT); }
|
|
} WHEN {
|
|
TURN { EXPECT_MOVE(opponent, MOVE_LAST_RESORT, gimmick: GIMMICK_Z_MOVE); }
|
|
TURN { EXPECT_MOVE(opponent, MOVE_POUND, gimmick: GIMMICK_NONE);
|
|
SCORE_LT_VAL(opponent, MOVE_LAST_RESORT, AI_SCORE_DEFAULT); }
|
|
TURN { EXPECT_MOVE(opponent, MOVE_LAST_RESORT, gimmick: GIMMICK_NONE); }
|
|
}
|
|
}
|
|
|
|
AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- 10,000,000 Volt Thunderbolt")
|
|
{
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_PIKACHU_PARTNER) { Item(ITEM_PIKASHUNIUM_Z); Moves(MOVE_THUNDERBOLT); }
|
|
} WHEN {
|
|
TURN { EXPECT_MOVE(opponent, MOVE_THUNDERBOLT, gimmick: GIMMICK_Z_MOVE); }
|
|
}
|
|
}
|
|
AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Z-Conversion")
|
|
{
|
|
enum Ability ability;
|
|
PARAMETRIZE { ability = ABILITY_NONE; }
|
|
PARAMETRIZE { ability = ABILITY_OPPORTUNIST; }
|
|
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
|
|
ASSUME(GetMoveType(MOVE_CONVERSION) == TYPE_NORMAL);
|
|
PLAYER(SPECIES_WOBBUFFET) { Ability(ability); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Ability(ABILITY_ADAPTABILITY); Moves(MOVE_THUNDERBOLT, MOVE_CONVERSION); }
|
|
} WHEN {
|
|
if (ability == ABILITY_OPPORTUNIST)
|
|
TURN { EXPECT_MOVE(opponent, MOVE_CONVERSION, gimmick: GIMMICK_NONE); }
|
|
else
|
|
TURN { EXPECT_MOVE(opponent, MOVE_CONVERSION, gimmick: GIMMICK_Z_MOVE); }
|
|
}
|
|
}
|
|
|
|
|
|
AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Z-Destiny Bond is not used in singles")
|
|
{
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_GHOSTIUM_Z); Moves(MOVE_DESTINY_BOND); }
|
|
} WHEN {
|
|
TURN { EXPECT_MOVE(opponent, MOVE_DESTINY_BOND, gimmick: GIMMICK_NONE); }
|
|
}
|
|
}
|
|
|
|
AI_DOUBLE_BATTLE_TEST("AI uses Z-Moves -- Z-Destiny Bond is used when about to die")
|
|
{
|
|
u32 currentHP;
|
|
PARAMETRIZE { currentHP = 1; }
|
|
PARAMETRIZE { currentHP = 500; }
|
|
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
|
|
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_POUND); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET) { HP(currentHP); Item(ITEM_GHOSTIUM_Z); Moves(MOVE_DESTINY_BOND); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
if (currentHP == 1)
|
|
TURN { EXPECT_MOVE(opponentLeft, MOVE_DESTINY_BOND, gimmick: GIMMICK_Z_MOVE); }
|
|
else
|
|
TURN { EXPECT_MOVE(opponentLeft, MOVE_DESTINY_BOND, gimmick: GIMMICK_NONE); }
|
|
}
|
|
}
|
|
|
|
AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Z-Detect")
|
|
{
|
|
u32 move;
|
|
PARAMETRIZE { move = MOVE_THUNDERBOLT; }
|
|
PARAMETRIZE { move = MOVE_CLOSE_COMBAT; }
|
|
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT | AI_FLAG_PREDICT_MOVE );
|
|
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_FAKE_OUT); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_FIGHTINIUM_Z); Moves(MOVE_DETECT, move); }
|
|
} WHEN {
|
|
if (move == MOVE_CLOSE_COMBAT)
|
|
TURN { EXPECT_MOVE(opponent, MOVE_DETECT, gimmick: GIMMICK_NONE); }
|
|
else
|
|
TURN { EXPECT_MOVE(opponent, MOVE_DETECT, gimmick: GIMMICK_Z_MOVE); }
|
|
}
|
|
}
|
|
|
|
AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Z-Happy Hour")
|
|
{
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
|
|
ASSUME(GetMoveType(MOVE_QUICK_ATTACK) == TYPE_NORMAL);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Moves(MOVE_POUND, MOVE_HAPPY_HOUR); }
|
|
} WHEN {
|
|
TURN { EXPECT_MOVE(opponent, MOVE_HAPPY_HOUR, gimmick: GIMMICK_Z_MOVE);
|
|
SCORE_GT_VAL(opponent, MOVE_HAPPY_HOUR, AI_SCORE_DEFAULT); }
|
|
TURN { EXPECT_MOVE(opponent, MOVE_POUND, gimmick: GIMMICK_NONE);
|
|
SCORE_EQ_VAL(opponent, MOVE_HAPPY_HOUR, 90); }
|
|
}
|
|
}
|
|
|
|
TO_DO_BATTLE_TEST("TODO: AI uses Z-Moves -- Z-Haze")
|
|
|
|
TO_DO_BATTLE_TEST("TODO: AI uses Z-Moves -- Z-Mirror Move")
|
|
|
|
AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Z-Nature Power")
|
|
{
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT | AI_FLAG_PREDICT_MOVE);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Moves(MOVE_NATURE_POWER, MOVE_HEADBUTT); }
|
|
} WHEN {
|
|
TURN { EXPECT_MOVE(opponent, MOVE_NATURE_POWER, gimmick: GIMMICK_Z_MOVE); }
|
|
}
|
|
}
|
|
|
|
// Requires handling for Wish passing/Healing Wish/other ways to determine what pokemon to heal via switching into.
|
|
TO_DO_BATTLE_TEST("TODO: AI uses Z-Moves -- Z-Parting Shot")
|
|
|
|
AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Z-Splash")
|
|
{
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
|
|
ASSUME(GetMoveType(MOVE_QUICK_ATTACK) == TYPE_NORMAL);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Moves(MOVE_POUND, MOVE_SPLASH); }
|
|
} WHEN {
|
|
TURN { EXPECT_MOVE(opponent, MOVE_SPLASH, gimmick: GIMMICK_Z_MOVE);
|
|
SCORE_GT_VAL(opponent, MOVE_SPLASH, AI_SCORE_DEFAULT); }
|
|
TURN { EXPECT_MOVE(opponent, MOVE_POUND, gimmick: GIMMICK_NONE);
|
|
SCORE_EQ_VAL(opponent, MOVE_SPLASH, 90); }
|
|
}
|
|
}
|
|
|
|
TO_DO_BATTLE_TEST("TODO: AI uses Z-Moves -- Z-Tailwind")
|
|
|
|
AI_SINGLE_BATTLE_TEST("AI uses Z-Moves -- Z-Transform")
|
|
{
|
|
u32 currentHP, move;
|
|
PARAMETRIZE { currentHP = 1; move = MOVE_HEADBUTT; }
|
|
PARAMETRIZE { currentHP = 1; move = MOVE_THUNDERBOLT; }
|
|
PARAMETRIZE { currentHP = 500; move = MOVE_HEADBUTT; }
|
|
PARAMETRIZE { currentHP = 500; move = MOVE_THUNDERBOLT; }
|
|
|
|
GIVEN {
|
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT );
|
|
PLAYER(SPECIES_WOBBUFFET) { Moves(move, MOVE_CELEBRATE); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { HP(currentHP); Item(ITEM_NORMALIUM_Z); Moves(MOVE_TRANSFORM); }
|
|
} WHEN {
|
|
if (currentHP == 1 || move == MOVE_THUNDERBOLT)
|
|
TURN { EXPECT_MOVE(opponent, MOVE_TRANSFORM, gimmick: GIMMICK_Z_MOVE); }
|
|
else
|
|
TURN { EXPECT_MOVE(opponent, MOVE_TRANSFORM, gimmick: GIMMICK_NONE); }
|
|
}
|
|
}
|
|
|
|
TO_DO_BATTLE_TEST("TODO: AI uses Z-Moves -- Z-Trick Room")
|
|
|
|
|