364 lines
14 KiB
C
364 lines
14 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
|
|
ASSUMPTIONS
|
|
{
|
|
ASSUME(gItemsInfo[ITEM_EJECT_PACK].holdEffect == HOLD_EFFECT_EJECT_PACK);
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Eject Pack does not cause the new Pokémon to lose HP due to it's held Life Orb")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gItemsInfo[ITEM_LIFE_ORB].holdEffect == HOLD_EFFECT_LIFE_ORB);
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WYNAUT) { Item(ITEM_LIFE_ORB); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_OVERHEAT); SEND_OUT(player, 1); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_OVERHEAT, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Wobbuffet is switched out with the Eject Pack!");
|
|
SEND_IN_MESSAGE("Wynaut");
|
|
NOT HP_BAR(player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Eject Pack does not activate if there are no Pokémon left to battle")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WOBBUFFET) { HP(0); }
|
|
OPPONENT(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
|
|
} WHEN {
|
|
TURN {}
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Wobbuffet is switched out with the Eject Pack!");
|
|
}
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Eject Pack is triggered by self-inflicting stat decreases")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gItemsInfo[ITEM_LIFE_ORB].holdEffect == HOLD_EFFECT_LIFE_ORB);
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_OVERHEAT); SEND_OUT(player, 1); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_OVERHEAT, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Wobbuffet is switched out with the Eject Pack!");
|
|
SEND_IN_MESSAGE("Wynaut");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Eject Pack will miss timing to switch out user if Emergency Exit was activated on target")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); }
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_OVERHEAT); SEND_OUT(opponent, 1); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_OVERHEAT, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Wobbuffet is switched out with the Eject Pack!");
|
|
}
|
|
ABILITY_POPUP(opponent, ABILITY_EMERGENCY_EXIT);
|
|
} THEN {
|
|
EXPECT(player->species == SPECIES_WOBBUFFET);
|
|
EXPECT(opponent->species == SPECIES_WYNAUT);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Eject Pack activates once intimidate mon switches in")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
|
|
} WHEN {
|
|
TURN { SWITCH(opponent, 1); SEND_OUT(player, 1); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Wobbuffet is switched out with the Eject Pack!");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Eject Pack will not activate if Parting Shot user can switch out")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_PARTING_SHOT); SEND_OUT(opponent, 1); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PARTING_SHOT, opponent);
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Wobbuffet is switched out with the Eject Pack!");
|
|
}
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Eject Pack will not trigger if the conditions are not met")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); }
|
|
PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }
|
|
} WHEN {
|
|
TURN { SWITCH(opponentLeft, 2); SEND_OUT(playerLeft, 2); }
|
|
} SCENE {
|
|
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Eject Pack will miss timing to switch out user if Eject Button was activated on target")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WYNAUT) { Speed(10); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Item(ITEM_EJECT_BUTTON); }
|
|
OPPONENT(SPECIES_WYNAUT) { Speed(10); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_OVERHEAT); SEND_OUT(opponent, 1); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_OVERHEAT, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Wobbuffet is switched out with the Eject Pack!");
|
|
}
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
|
|
} THEN {
|
|
EXPECT(player->species == SPECIES_WOBBUFFET);
|
|
EXPECT(opponent->species == SPECIES_WYNAUT);
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after an ability stat drop")
|
|
{
|
|
u32 speed;
|
|
u32 species, ability;
|
|
|
|
PARAMETRIZE { species = SPECIES_EKANS; ability = ABILITY_INTIMIDATE; speed = 1; }
|
|
PARAMETRIZE { species = SPECIES_EKANS; ability = ABILITY_INTIMIDATE; speed = 11; }
|
|
|
|
PARAMETRIZE { species = SPECIES_DIPPLIN; ability = ABILITY_SUPERSWEET_SYRUP; speed = 1; }
|
|
PARAMETRIZE { species = SPECIES_DIPPLIN; ability = ABILITY_SUPERSWEET_SYRUP; speed = 11; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WYNAUT) { Speed(speed); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(3); }
|
|
OPPONENT(SPECIES_WYNAUT) { Speed(4); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
|
|
OPPONENT(species) { Speed(6); Ability(ability); }
|
|
} WHEN {
|
|
TURN {
|
|
SWITCH(opponentLeft, 2);
|
|
if (speed == 11)
|
|
SEND_OUT(playerRight, 2);
|
|
else
|
|
SEND_OUT(playerLeft, 2);
|
|
}
|
|
} SCENE {
|
|
ABILITY_POPUP(opponentLeft, ability);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
if (speed == 11) {
|
|
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
|
|
} else {
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
|
|
}
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
|
|
}
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after a move stat drop")
|
|
{
|
|
u32 speed;
|
|
|
|
PARAMETRIZE { speed = 1; }
|
|
PARAMETRIZE { speed = 11; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WYNAUT) { Speed(speed); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(3); }
|
|
OPPONENT(SPECIES_WYNAUT) { Speed(4); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
|
|
} WHEN {
|
|
TURN {
|
|
MOVE(opponentLeft, MOVE_BUBBLE);
|
|
if (speed == 11)
|
|
SEND_OUT(playerRight, 2);
|
|
else
|
|
SEND_OUT(playerLeft, 2);
|
|
}
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_BUBBLE, opponentLeft);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
if (speed == 11) {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
|
|
} else {
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
|
|
}
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after intimidate (switch in after fainting)")
|
|
{
|
|
u32 speed;
|
|
|
|
PARAMETRIZE { speed = 1; }
|
|
PARAMETRIZE { speed = 11; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WYNAUT) { Speed(speed); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(3); }
|
|
OPPONENT(SPECIES_WYNAUT) { HP(1); Speed(4); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
|
|
OPPONENT(SPECIES_EKANS) { Speed(6); Ability(ABILITY_INTIMIDATE); }
|
|
} WHEN {
|
|
TURN {
|
|
MOVE(playerLeft, MOVE_POUND, target: opponentLeft);
|
|
SEND_OUT(opponentLeft, 2);
|
|
if (speed == 11)
|
|
SEND_OUT(playerRight, 2);
|
|
else
|
|
SEND_OUT(playerLeft, 2);
|
|
}
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, playerLeft);
|
|
ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
if (speed == 11) {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
|
|
} else {
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
|
|
}
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Eject Pack: Only the fastest Eject Pack will activate after intimidate (switch in after 2 mons fainted)")
|
|
{
|
|
u32 speed;
|
|
|
|
PARAMETRIZE { speed = 1; }
|
|
PARAMETRIZE { speed = 11; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WYNAUT) { Speed(speed); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
|
|
OPPONENT(SPECIES_WYNAUT) { HP(1); Speed(4); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(5); }
|
|
OPPONENT(SPECIES_WYNAUT) { Speed(4); }
|
|
OPPONENT(SPECIES_EKANS) { Speed(6); Ability(ABILITY_INTIMIDATE); }
|
|
} WHEN {
|
|
TURN {
|
|
MOVE(playerLeft, MOVE_HYPER_VOICE);
|
|
SEND_OUT(opponentLeft, 3);
|
|
SEND_OUT(opponentRight, 2);
|
|
if (speed == 11)
|
|
SEND_OUT(playerRight, 2);
|
|
else
|
|
SEND_OUT(playerLeft, 2);
|
|
}
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerLeft);
|
|
ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
if (speed == 11) {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
|
|
} else {
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
|
|
}
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Eject Pack does not activate if mon is switched in due to Eject Button")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_ARENA_TRAP); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN {
|
|
MOVE(player, MOVE_BULLDOZE);
|
|
SEND_OUT(opponent, 1);
|
|
}
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
|
|
MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!");
|
|
MESSAGE("2 sent out Wobbuffet!");
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Eject Pack will trigger on the fastest mon at the end of the turn")
|
|
{
|
|
GIVEN {
|
|
ASSUME(MoveHasAdditionalEffect(MOVE_SYRUP_BOMB, MOVE_EFFECT_SYRUP_BOMB) == TRUE);
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(1); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WYNAUT) { Speed(10); Item(ITEM_EJECT_PACK); }
|
|
PLAYER(SPECIES_WOBBUFFET) { Speed(2); }
|
|
OPPONENT(SPECIES_WYNAUT) { Speed(4); }
|
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(3); }
|
|
} WHEN {
|
|
TURN {
|
|
MOVE(opponentLeft, MOVE_SYRUP_BOMB, target: playerLeft);
|
|
MOVE(opponentRight, MOVE_SYRUP_BOMB, target: playerRight);
|
|
SEND_OUT(playerRight, 2);
|
|
}
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, playerRight);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, playerLeft);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight);
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
|
|
}
|
|
}
|