2026-02-06 11:57:33 +01:00

132 lines
5.1 KiB
C

#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(GetMoveEffect(MOVE_ENCORE) == EFFECT_ENCORE);
}
SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns: Encore used before move")
{
struct BattlePokemon *encoreUser = NULL;
struct BattlePokemon *encoreTarget = NULL;
u32 speedPlayer, speedOpponent;
PARAMETRIZE { encoreUser = opponent; encoreTarget = player; speedPlayer = 10; speedOpponent = 20; }
PARAMETRIZE { encoreUser = player; encoreTarget = opponent; speedPlayer = 20; speedOpponent = 10; }
GIVEN {
WITH_CONFIG(B_ENCORE_TARGET, GEN_3);
PLAYER(SPECIES_WOBBUFFET) { Speed(speedPlayer); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(speedOpponent); }
} WHEN {
TURN { MOVE(encoreUser, MOVE_CELEBRATE); MOVE(encoreTarget, MOVE_CELEBRATE); }
TURN { MOVE(encoreUser, MOVE_ENCORE); MOVE(encoreTarget, MOVE_CELEBRATE); }
TURN { FORCED_MOVE(encoreTarget); }
TURN { FORCED_MOVE(encoreTarget); }
TURN { MOVE(encoreTarget, MOVE_SPLASH); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreUser);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget);
ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, encoreUser);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, encoreTarget);
}
}
SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 3 turns for player: Encore used after move")
{
struct BattlePokemon *encoreUser = NULL;
struct BattlePokemon *encoreTarget = NULL;
u32 speedPlayer, speedOpponent;
PARAMETRIZE { encoreUser = opponent; encoreTarget = player; speedPlayer = 20; speedOpponent = 10; }
PARAMETRIZE { encoreUser = player; encoreTarget = opponent; speedPlayer = 10; speedOpponent = 20; }
GIVEN {
WITH_CONFIG(B_ENCORE_TARGET, GEN_3);
PLAYER(SPECIES_WOBBUFFET) { Speed(speedPlayer); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(speedOpponent); }
} WHEN {
TURN { MOVE(encoreTarget, MOVE_CELEBRATE); MOVE(encoreUser, MOVE_ENCORE); }
TURN { FORCED_MOVE(encoreTarget); }
TURN { FORCED_MOVE(encoreTarget); }
TURN { FORCED_MOVE(encoreTarget); }
TURN { MOVE(encoreTarget, MOVE_SPLASH); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget);
ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, encoreUser);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, encoreTarget);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, encoreTarget);
}
}
SINGLE_BATTLE_TEST("Encore has no effect if no previous move")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("The opposing Wobbuffet used Encore!");
MESSAGE("But it failed!");
}
}
SINGLE_BATTLE_TEST("Encore overrides the chosen move if it occurs first")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_CELEBRATE); }
TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_SPLASH); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
}
}
SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Encore")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_ENCORE); }
TURN { MOVE(player, MOVE_EMBER); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("The opposing Wobbuffet used Encore!");
MESSAGE("But it failed!");
MESSAGE("Wobbuffet used Max Flare!");
}
}
SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after reverting")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; // yes, this speed is necessary
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {
TURN { MOVE(player, MOVE_ARM_THRUST, gimmick: GIMMICK_DYNAMAX); }
TURN { MOVE(player, MOVE_ARM_THRUST); }
TURN { MOVE(player, MOVE_ARM_THRUST); }
TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_SCRATCH); }
} SCENE {
MESSAGE("Wobbuffet used Max Knuckle!");
MESSAGE("Wobbuffet used Max Knuckle!");
MESSAGE("Wobbuffet used Max Knuckle!");
MESSAGE("The opposing Wobbuffet used Encore!");
MESSAGE("Wobbuffet used Arm Thrust!");
}
}
TO_DO_BATTLE_TEST("Encore's effect ends if the encored move runs out of PP");
TO_DO_BATTLE_TEST("Encore lasts for 2-6 turns (Gen 2-3)");
TO_DO_BATTLE_TEST("Encore lasts for 3-7 turns (Gen 4)");
TO_DO_BATTLE_TEST("Encore lasts for 3 turns (Gen 5+)");
TO_DO_BATTLE_TEST("Encore randomly chooses an opponent target");