308 lines
12 KiB
C
308 lines
12 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
|
|
SINGLE_BATTLE_TEST("Grudge depletes all PP of the move that fainted the target")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); }
|
|
} WHEN {
|
|
TURN {
|
|
MOVE(player, MOVE_GRUDGE);
|
|
MOVE(opponent, MOVE_SCRATCH);
|
|
SEND_OUT(player, 1);
|
|
}
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
} THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_EQ(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Grudge does not deplete PP of a Z-Move")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); }
|
|
} WHEN {
|
|
TURN {
|
|
MOVE(player, MOVE_GRUDGE);
|
|
MOVE(opponent, MOVE_SCRATCH, gimmick: GIMMICK_Z_MOVE);
|
|
SEND_OUT(player, 1);
|
|
}
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, opponent);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, opponent);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
} THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_GT(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Grudge depletes all PP from a Max Move's base move")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); Item(ITEM_LAGGING_TAIL); }
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); SEND_OUT(player, 1); }
|
|
} SCENE {
|
|
MESSAGE("Wobbuffet used Grudge!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
MESSAGE("The opposing Wobbuffet used Max Strike!");
|
|
MESSAGE("Wobbuffet fainted!");
|
|
MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!");
|
|
} THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_EQ(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Grudge does not activate for Struggle")
|
|
{
|
|
GIVEN {
|
|
PLAYER (SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER (SPECIES_WOBBUFFET);
|
|
OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_STRUGGLE, MOVE_POUND, MOVE_SURF); };
|
|
}
|
|
WHEN {
|
|
TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_STRUGGLE); SEND_OUT(player, 1); }
|
|
}
|
|
SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, opponent);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
NOT MESSAGE("The opposing Wobbuffet's Struggle lost all its PP due to the grudge!");
|
|
}
|
|
THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_GT(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Move")
|
|
{
|
|
GIVEN {
|
|
PLAYER (SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER (SPECIES_WOBBUFFET);
|
|
OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); };
|
|
}
|
|
WHEN {
|
|
TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_CELEBRATE); }
|
|
TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_SCRATCH); SEND_OUT(player, 1); }
|
|
}
|
|
SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!");
|
|
}
|
|
THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_GT(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Sleep")
|
|
{
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS);
|
|
ASSUME(gMovesInfo[SanitizeMoveId(MOVE_SPORE)].argument.nonVolatileStatus == MOVE_EFFECT_SLEEP);
|
|
PLAYER (SPECIES_WOBBUFFET) { HP(1);}
|
|
PLAYER (SPECIES_WOBBUFFET);
|
|
OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_VITAL_THROW, MOVE_SPORE, MOVE_SURF); }
|
|
}
|
|
WHEN {
|
|
TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_SPORE); }
|
|
TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_VITAL_THROW); SEND_OUT(player, 1); }
|
|
}
|
|
SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent);
|
|
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player);
|
|
MESSAGE("Wobbuffet fell asleep!");
|
|
STATUS_ICON(player, sleep: TRUE);
|
|
MESSAGE("Wobbuffet is fast asleep.");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_VITAL_THROW, opponent);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!");
|
|
}
|
|
THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_GT(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Paralysis")
|
|
{
|
|
PASSES_RANDOMLY(25, 100, RNG_PARALYSIS);
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_STUN_SPORE) == EFFECT_NON_VOLATILE_STATUS);
|
|
ASSUME(gMovesInfo[SanitizeMoveId(MOVE_STUN_SPORE)].argument.nonVolatileStatus == MOVE_EFFECT_PARALYSIS);
|
|
ASSUME(GetMovePriority(MOVE_VITAL_THROW) == -1);
|
|
PLAYER (SPECIES_WOBBUFFET) { HP(1);}
|
|
PLAYER (SPECIES_WOBBUFFET);
|
|
OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_VITAL_THROW, MOVE_STUN_SPORE, MOVE_SURF); };\
|
|
}
|
|
WHEN {
|
|
TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_STUN_SPORE); }
|
|
TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_VITAL_THROW); SEND_OUT(player, 1); }
|
|
}
|
|
SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent);
|
|
MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!");
|
|
STATUS_ICON(player, paralysis: TRUE);
|
|
MESSAGE("Wobbuffet couldn't move because it's paralyzed!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_VITAL_THROW, opponent);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!");
|
|
}
|
|
THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_GT(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Flinching")
|
|
{
|
|
PASSES_RANDOMLY(10, 100, RNG_HOLD_EFFECT_FLINCH);
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_FALSE_SWIPE) == EFFECT_FALSE_SWIPE);
|
|
PLAYER (SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER (SPECIES_WOBBUFFET);
|
|
OPPONENT (SPECIES_WOBBUFFET);
|
|
OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_FALSE_SWIPE, MOVE_SURF); Item(ITEM_KINGS_ROCK); }
|
|
}
|
|
WHEN {
|
|
TURN { SWITCH(opponent, 1); MOVE(player, MOVE_GRUDGE); }
|
|
TURN { MOVE(opponent, MOVE_FALSE_SWIPE); MOVE(player, MOVE_CELEBRATE); }
|
|
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_CELEBRATE); SEND_OUT(player, 1); }
|
|
}
|
|
SCENE {
|
|
SEND_IN_MESSAGE("Wobbuffet");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_FALSE_SWIPE, opponent);
|
|
MESSAGE("Wobbuffet flinched and couldn't move!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!");
|
|
}
|
|
THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_GT(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Sandstorm")
|
|
{
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_SANDSTORM) == EFFECT_SANDSTORM);
|
|
PLAYER (SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER (SPECIES_WOBBUFFET);
|
|
OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_SANDSTORM, MOVE_SURF); }
|
|
}
|
|
WHEN {
|
|
TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_SANDSTORM); SEND_OUT(player, 1); }
|
|
}
|
|
SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SANDSTORM, opponent);
|
|
MESSAGE("The sandstorm is raging.");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES);
|
|
MESSAGE("Wobbuffet is buffeted by the sandstorm!");
|
|
MESSAGE("Wobbuffet fainted!");
|
|
NOT MESSAGE("The opposing Wobbuffet's Sandstorm lost all its PP due to the grudge!");
|
|
}
|
|
THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_GT(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Leech Seed")
|
|
{
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_LEECH_SEED) == EFFECT_LEECH_SEED);
|
|
PLAYER (SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER (SPECIES_WOBBUFFET);
|
|
OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_LEECH_SEED, MOVE_SURF); }
|
|
}
|
|
WHEN {
|
|
TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_LEECH_SEED); SEND_OUT(player, 1); }
|
|
}
|
|
SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, opponent);
|
|
MESSAGE("Wobbuffet was seeded!");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_LEECH_SEED_DRAIN, player);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
NOT MESSAGE("The opposing Wobbuffet's Leech Seed lost all its PP due to the grudge!");
|
|
}
|
|
THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_GT(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Future Sight")
|
|
{
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT);
|
|
PLAYER (SPECIES_WOBBUFFET) { HP(1); }
|
|
PLAYER (SPECIES_WOBBUFFET);
|
|
OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_FUTURE_SIGHT, MOVE_SURF); }
|
|
}
|
|
WHEN {
|
|
TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_FUTURE_SIGHT); }
|
|
TURN {}
|
|
TURN { MOVE(player, MOVE_GRUDGE); SEND_OUT(player, 1); }
|
|
}
|
|
SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, opponent);
|
|
MESSAGE("The opposing Wobbuffet foresaw an attack!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player);
|
|
MESSAGE("Wobbuffet took the Future Sight attack!");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FUTURE_SIGHT_HIT);
|
|
MESSAGE("Wobbuffet fainted!");
|
|
NOT MESSAGE("The opposing Wobbuffet's Future Sight lost all its PP due to the grudge!");
|
|
}
|
|
THEN {
|
|
EXPECT_GT(opponent->pp[0], 0);
|
|
EXPECT_GT(opponent->pp[1], 0);
|
|
EXPECT_GT(opponent->pp[2], 0);
|
|
EXPECT_GT(opponent->pp[3], 0);
|
|
}
|
|
}
|
|
|