676 lines
26 KiB
C
676 lines
26 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
|
|
ASSUMPTIONS
|
|
{
|
|
ASSUME(gMovesInfo[MOVE_PURSUIT].effect == EFFECT_PURSUIT);
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit attacks a switching foe")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
} WHEN {
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
HP_BAR(player);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit attacks a foe using Volt Switch / U-Turn / Parting Shot to switch out")
|
|
{
|
|
u32 move;
|
|
PARAMETRIZE { move = MOVE_VOLT_SWITCH; }
|
|
PARAMETRIZE { move = MOVE_U_TURN; }
|
|
PARAMETRIZE { move = MOVE_PARTING_SHOT; }
|
|
GIVEN {
|
|
ASSUME(gMovesInfo[MOVE_VOLT_SWITCH].effect == EFFECT_HIT_ESCAPE);
|
|
ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE);
|
|
ASSUME(gMovesInfo[MOVE_PARTING_SHOT].effect == EFFECT_PARTING_SHOT);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
} WHEN {
|
|
TURN { MOVE(player, move); MOVE(opponent, MOVE_PURSUIT); SEND_OUT(player, 1); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, move, player);
|
|
MESSAGE("Wobbuffet went back to 1!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit doesn't attack a foe using Teleport / Baton Pass to switch out")
|
|
{
|
|
u32 move;
|
|
PARAMETRIZE { move = MOVE_TELEPORT; }
|
|
PARAMETRIZE { move = MOVE_BATON_PASS; }
|
|
GIVEN {
|
|
ASSUME(gMovesInfo[MOVE_QUASH].effect == EFFECT_QUASH);
|
|
ASSUME(gMovesInfo[MOVE_TELEPORT].effect == EFFECT_TELEPORT);
|
|
ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_NIDOKING);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_LINOONE);
|
|
} WHEN {
|
|
TURN { MOVE(playerRight, MOVE_QUASH, target: opponentLeft); MOVE(playerLeft, move); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); SEND_OUT(playerLeft, 2); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_QUASH, playerRight);
|
|
ANIMATION(ANIM_TYPE_MOVE, move, playerLeft);
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit doesn't attack switching foe if user already acted that turn")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_PURSUIT); MOVE(player, MOVE_VOLT_SWITCH); SEND_OUT(player, 1); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, player);
|
|
MESSAGE("Wobbuffet went back to 1!");
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit doubles in power if attacking while target switches out", s16 damage)
|
|
{
|
|
u32 speed;
|
|
PARAMETRIZE { speed = 5; }
|
|
PARAMETRIZE { speed = 3; }
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(4); }
|
|
PLAYER(SPECIES_ZIGZAGOON) { Speed(2); }
|
|
OPPONENT(SPECIES_WYNAUT) { Speed(speed); }
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_PURSUIT); MOVE(player, MOVE_VOLT_SWITCH); SEND_OUT(player, 1); }
|
|
} SCENE {
|
|
if (speed == 3)
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
HP_BAR(player, captureDamage: &results[i].damage);
|
|
if (speed == 5)
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, player);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
} FINALLY {
|
|
EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit ignores accuracy checks when attacking a switching target")
|
|
{
|
|
PASSES_RANDOMLY(100, 100, RNG_ACCURACY);
|
|
GIVEN {
|
|
ASSUME(gMovesInfo[MOVE_SAND_ATTACK].effect == EFFECT_ACCURACY_DOWN);
|
|
ASSUME(gMovesInfo[MOVE_HAIL].effect == EFFECT_HAIL);
|
|
PLAYER(SPECIES_GLACEON) { Ability(ABILITY_SNOW_CLOAK); }
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_SAND_ATTACK); MOVE(opponent, MOVE_HAIL); }
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SAND_ATTACK, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_HAIL, opponent);
|
|
SWITCH_OUT_MESSAGE("Glaceon");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit attacks switching foes even if not targetting them (Gen 4+)")
|
|
{
|
|
GIVEN {
|
|
ASSUME(B_PURSUIT_TARGET >= GEN_4);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
PLAYER(SPECIES_GRIMER);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_LINOONE);
|
|
} WHEN {
|
|
TURN { SWITCH(playerLeft, 2); MOVE(opponentLeft, MOVE_PURSUIT, target: playerRight); MOVE(opponentRight, MOVE_PURSUIT, target: playerRight); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
HP_BAR(playerLeft);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
HP_BAR(playerLeft);
|
|
SEND_IN_MESSAGE("Grimer");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight);
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit attacks a switching foe from fastest to slowest")
|
|
{
|
|
u32 speedLeft, speedRight;
|
|
PARAMETRIZE { speedLeft = 5; speedRight = 3; }
|
|
PARAMETRIZE { speedLeft = 3; speedRight = 5; }
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
|
|
PLAYER(SPECIES_ZIGZAGOON) { Speed(4); }
|
|
PLAYER(SPECIES_GRIMER) { Speed(2); }
|
|
OPPONENT(SPECIES_WYNAUT) { Speed(speedLeft); }
|
|
OPPONENT(SPECIES_LINOONE) { Speed(speedRight); }
|
|
} WHEN {
|
|
TURN { SWITCH(playerLeft, 2); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); MOVE(opponentRight, MOVE_PURSUIT, target: playerLeft); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
if (speedLeft > speedRight) {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
HP_BAR(playerLeft);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
HP_BAR(playerLeft);
|
|
} else {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
HP_BAR(playerLeft);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
HP_BAR(playerLeft);
|
|
}
|
|
SEND_IN_MESSAGE("Grimer");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight);
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit attacks a switching foe but not switching allies")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
PLAYER(SPECIES_GRIMER);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_LINOONE);
|
|
OPPONENT(SPECIES_ABRA);
|
|
} WHEN {
|
|
TURN { SWITCH(playerLeft, 2); SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_PURSUIT, target: opponentRight); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, playerRight);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
SEND_IN_MESSAGE("Grimer");
|
|
MESSAGE("2 withdrew Linoone!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, playerRight);
|
|
MESSAGE("2 sent out Abra!");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit only attacks the first switching foe")
|
|
{
|
|
// This test does not make sense for B_PURSUIT_TARGET < GEN_4
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
PLAYER(SPECIES_GRIMER);
|
|
PLAYER(SPECIES_SUNKERN);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_LINOONE);
|
|
} WHEN {
|
|
TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); MOVE(opponentRight, MOVE_PURSUIT, target: playerLeft); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
HP_BAR(playerLeft);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
HP_BAR(playerLeft);
|
|
SEND_IN_MESSAGE("Grimer");
|
|
SWITCH_OUT_MESSAGE("Zigzagoon");
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
HP_BAR(playerRight);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
HP_BAR(playerRight);
|
|
}
|
|
SEND_IN_MESSAGE("Sunkern");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit only attacks a switching foe if foe is alive")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
PLAYER(SPECIES_GRIMER);
|
|
PLAYER(SPECIES_SUNKERN);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_LINOONE);
|
|
} WHEN {
|
|
TURN { SWITCH(playerLeft, 2); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); MOVE(opponentRight, MOVE_PURSUIT, target: playerLeft); SEND_OUT(playerLeft, 2); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
HP_BAR(playerLeft);
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
SEND_IN_MESSAGE("Grimer");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit attacks the second switching foe if the first faints from pursuit")
|
|
{
|
|
// This test does not make sense for B_PURSUIT_TARGET < GEN_4
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
PLAYER(SPECIES_GRIMER);
|
|
PLAYER(SPECIES_SUNKERN);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_LINOONE);
|
|
} WHEN {
|
|
TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); MOVE(opponentRight, MOVE_PURSUIT, target: playerRight); SEND_OUT(playerLeft, 2); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
HP_BAR(playerLeft);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
SWITCH_OUT_MESSAGE("Zigzagoon");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
HP_BAR(playerRight);
|
|
SEND_IN_MESSAGE("Sunkern");
|
|
SEND_IN_MESSAGE("Grimer");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit only attacks a switching foe if user is alive")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
PLAYER(SPECIES_GRIMER);
|
|
OPPONENT(SPECIES_WYNAUT) { HP(1); }
|
|
OPPONENT(SPECIES_LINOONE);
|
|
OPPONENT(SPECIES_SUNKERN);
|
|
} WHEN {
|
|
TURN { MOVE(playerLeft, MOVE_VOLT_SWITCH, target: opponentLeft); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, playerLeft);
|
|
MESSAGE("The opposing Wynaut fainted!");
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
SEND_IN_MESSAGE("Grimer");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit attacks a switching foe but fails if user is asleep")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WYNAUT) { Status1(STATUS1_SLEEP_TURN(2)); }
|
|
} WHEN {
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
MESSAGE("The opposing Wynaut is fast asleep.");
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit attacks a switching foe and takes Life Orb damage")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gItemsInfo[ITEM_LIFE_ORB].holdEffect == HOLD_EFFECT_LIFE_ORB);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WYNAUT) { Item(ITEM_LIFE_ORB); }
|
|
} WHEN {
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
HP_BAR(opponent);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit attacks a switching foe but isn't affected by Follow Me")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gMovesInfo[MOVE_FOLLOW_ME].effect == EFFECT_FOLLOW_ME);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_CLEFABLE);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_LINOONE);
|
|
} WHEN {
|
|
TURN { MOVE(playerRight, MOVE_FOLLOW_ME); MOVE(playerLeft, MOVE_VOLT_SWITCH, target: opponentLeft); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); SEND_OUT(playerLeft, 2); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_FOLLOW_ME, playerRight);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, playerLeft);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit user mega evolves before attacking a switching foe and hits twice if user has Parental Bond")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
|
|
} WHEN {
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT, gimmick: GIMMICK_MEGA); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
HP_BAR(player);
|
|
HP_BAR(player);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit user mega evolves before attacking a switching foe and others mega evolve after switch")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_CHARIZARD) { Item(ITEM_CHARIZARDITE_X); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
|
|
} WHEN {
|
|
TURN { SWITCH(playerRight, 2); MOVE(opponentRight, MOVE_PURSUIT, gimmick: GIMMICK_MEGA, target: playerRight); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentRight);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
HP_BAR(playerRight);
|
|
HP_BAR(playerRight);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit user terastalizes before attacking a switching foe and gets the damage boost from the tera type", s16 damage)
|
|
{
|
|
u32 tera;
|
|
PARAMETRIZE { tera = GIMMICK_NONE; }
|
|
PARAMETRIZE { tera = GIMMICK_TERA; }
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_KANGASKHAN) { TeraType(TYPE_DARK); }
|
|
} WHEN {
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT, gimmick: tera); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
if (tera == GIMMICK_TERA)
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_TERA_ACTIVATE, opponent);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
HP_BAR(player, captureDamage: &results[i].damage);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
} FINALLY {
|
|
EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit affected by Electrify fails against immune target")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY);
|
|
PLAYER(SPECIES_DONPHAN);
|
|
PLAYER(SPECIES_HELIOLISK);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_LINOONE);
|
|
} WHEN {
|
|
TURN { MOVE(playerRight, MOVE_ELECTRIFY, target: opponentLeft); MOVE(playerLeft, MOVE_VOLT_SWITCH, target: opponentLeft); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); SEND_OUT(playerLeft, 2); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIFY, playerRight);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, playerLeft);
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuit affected by Electrify fails against target with Volt Absorb")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY);
|
|
PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }
|
|
PLAYER(SPECIES_HELIOLISK);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_LINOONE);
|
|
} WHEN {
|
|
TURN { MOVE(playerRight, MOVE_ELECTRIFY, target: opponentLeft); MOVE(playerLeft, MOVE_VOLT_SWITCH, target: opponentLeft); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); SEND_OUT(playerLeft, 2); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIFY, playerRight);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, playerLeft);
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
ABILITY_POPUP(playerLeft, ABILITY_VOLT_ABSORB);
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and activated ability Tangling Hair")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_DUGTRIO_ALOLA) { Ability(ABILITY_TANGLING_HAIR); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Dugtrio");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
ABILITY_POPUP(player, ABILITY_TANGLING_HAIR);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
|
|
MESSAGE("The opposing Wynaut's Speed fell!");
|
|
SEND_IN_MESSAGE("Wobbuffet");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and activated ability Tangling Hair - Doubles")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_DUGTRIO_ALOLA) { Ability(ABILITY_TANGLING_HAIR); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { SWITCH(playerLeft, 2); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); MOVE(opponentRight, MOVE_PURSUIT, target: playerLeft); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Dugtrio");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
ABILITY_POPUP(playerLeft, ABILITY_TANGLING_HAIR);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
|
|
MESSAGE("The opposing Wynaut's Speed fell!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
ABILITY_POPUP(playerLeft, ABILITY_TANGLING_HAIR);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
|
|
MESSAGE("The opposing Wobbuffet's Speed fell!");
|
|
SEND_IN_MESSAGE("Wobbuffet");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and activated ability Tangling Hair - Mirror Armor")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_DUGTRIO_ALOLA) { Ability(ABILITY_TANGLING_HAIR); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Dugtrio");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
ABILITY_POPUP(player, ABILITY_TANGLING_HAIR);
|
|
ABILITY_POPUP(opponent, ABILITY_MIRROR_ARMOR);
|
|
SEND_IN_MESSAGE("Wobbuffet");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and activated ability Cotton Down")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_ELDEGOSS) { Ability(ABILITY_COTTON_DOWN); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { SWITCH(playerLeft, 2); MOVE(opponentLeft, MOVE_PURSUIT, target: playerLeft); MOVE(opponentRight, MOVE_PURSUIT, target: playerLeft); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Eldegoss");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentLeft);
|
|
ABILITY_POPUP(playerLeft, ABILITY_COTTON_DOWN);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
|
|
MESSAGE("The opposing Wynaut's Speed fell!");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
MESSAGE("Wobbuffet's Speed fell!");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
|
|
MESSAGE("The opposing Wobbuffet's Speed fell!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponentRight);
|
|
ABILITY_POPUP(playerLeft, ABILITY_COTTON_DOWN);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
|
|
MESSAGE("The opposing Wynaut's Speed fell!");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
MESSAGE("Wobbuffet's Speed fell!");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
|
|
MESSAGE("The opposing Wobbuffet's Speed fell!");
|
|
SEND_IN_MESSAGE("Wobbuffet");
|
|
}
|
|
}
|
|
|
|
// Checked so that Pursuit has only 1 PP and it forces the player to use Struggle.
|
|
SINGLE_BATTLE_TEST("Pursuit becomes a locked move after being used on switch-out while holding a Choice Item")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gItemsInfo[ITEM_CHOICE_BAND].holdEffect == HOLD_EFFECT_CHOICE_BAND);
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_CHOICE_BAND); MovesWithPP({MOVE_PURSUIT, 1}, {MOVE_CELEBRATE, 10}, {MOVE_WATER_GUN, 10}, {MOVE_TACKLE, 10}); }
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { SWITCH(opponent, 1); MOVE(player, MOVE_PURSUIT); }
|
|
TURN { FORCED_MOVE(player); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, player);
|
|
HP_BAR(opponent);
|
|
MESSAGE("2 sent out Wobbuffet!");
|
|
|
|
MESSAGE("Wobbuffet used Struggle!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, player);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit attacks a switching foe and switchin is correctly stored")
|
|
{
|
|
u32 switchin;
|
|
PARAMETRIZE { switchin = 1; }
|
|
PARAMETRIZE { switchin = 2; }
|
|
PARAMETRIZE { switchin = 3; }
|
|
PARAMETRIZE { switchin = 4; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_ZIGZAGOON);
|
|
PLAYER(SPECIES_AIPOM);
|
|
PLAYER(SPECIES_ABRA);
|
|
PLAYER(SPECIES_VENIPEDE);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
} WHEN {
|
|
TURN { SWITCH(player, switchin); MOVE(opponent, MOVE_PURSUIT); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
switch (switchin)
|
|
{
|
|
case 1:
|
|
SEND_IN_MESSAGE("Zigzagoon");
|
|
break;
|
|
case 2:
|
|
SEND_IN_MESSAGE("Aipom");
|
|
break;
|
|
case 3:
|
|
SEND_IN_MESSAGE("Abra");
|
|
break;
|
|
case 4:
|
|
SEND_IN_MESSAGE("Venipede");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit doesn't cause mon with Emergency Exit to switch twice")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_GOLISOPOD) { HP(101); MaxHP(200); Ability(ABILITY_EMERGENCY_EXIT); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_VOLTORB);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT); SEND_OUT(player, 2); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Golisopod");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
ABILITY_POPUP(player, ABILITY_EMERGENCY_EXIT);
|
|
SEND_IN_MESSAGE("Voltorb");
|
|
} THEN {
|
|
EXPECT_EQ(player->species, SPECIES_VOLTORB);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit user gets forced out by Red Card and target still switches out")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gItemsInfo[ITEM_RED_CARD].holdEffect == HOLD_EFFECT_RED_CARD);
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); }
|
|
PLAYER(SPECIES_VOLTORB);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_VOLTORB);
|
|
} WHEN {
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("The opposing Voltorb was dragged out!");
|
|
SEND_IN_MESSAGE("Voltorb");
|
|
} THEN {
|
|
EXPECT_EQ(player->species, SPECIES_VOLTORB);
|
|
EXPECT_EQ(opponent->species, SPECIES_VOLTORB);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Pursuit user faints to Life Orb and target still switches out")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gItemsInfo[ITEM_LIFE_ORB].holdEffect == HOLD_EFFECT_LIFE_ORB);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_VOLTORB);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIFE_ORB); HP(1); }
|
|
OPPONENT(SPECIES_VOLTORB);
|
|
} WHEN {
|
|
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT); SEND_OUT(opponent, 1); }
|
|
} SCENE {
|
|
SWITCH_OUT_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
|
|
HP_BAR(opponent);
|
|
MESSAGE("The opposing Wobbuffet fainted!");
|
|
SEND_IN_MESSAGE("Voltorb");
|
|
} THEN {
|
|
EXPECT_EQ(player->species, SPECIES_VOLTORB);
|
|
EXPECT_EQ(opponent->species, SPECIES_VOLTORB);
|
|
}
|
|
}
|
|
|
|
TO_DO_BATTLE_TEST("Baton Pass doesn't cause Pursuit to increase its power or priority");
|