sovereignx/test/battle/move_effect/pursuit.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");