Add some missing tests for heatproof, thick fat and grudge (#8705)
This commit is contained in:
parent
c0d4f0e45f
commit
cd0834237b
@ -1,4 +1,52 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Heatproof (Ability) test titles")
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE);
|
||||
ASSUME(GetMoveEffect(MOVE_WORRY_SEED) == EFFECT_OVERWRITE_ABILITY);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Heatproof halves damage from fire type moves")
|
||||
{
|
||||
s16 damage[2];
|
||||
GIVEN {
|
||||
PLAYER (SPECIES_WOBBUFFET);
|
||||
OPPONENT (SPECIES_BRONZONG) { Ability(ABILITY_HEATPROOF); }
|
||||
}
|
||||
WHEN {
|
||||
TURN { MOVE(player, MOVE_EMBER); }
|
||||
TURN { MOVE(player, MOVE_WORRY_SEED); }
|
||||
TURN { MOVE(player, MOVE_EMBER); }
|
||||
}
|
||||
SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player);
|
||||
HP_BAR(opponent, captureDamage: &damage[0]);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player);
|
||||
HP_BAR(opponent, captureDamage: &damage[1]);
|
||||
EXPECT_MUL_EQ(damage[0], Q_4_12(2), damage[1]);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Heatproof halves the damage done by burn from 1/8th to 1/16th (Gen1-6) or 1/16th to 1/32nd (Gen 7+)")
|
||||
{
|
||||
u32 config, burnRate;
|
||||
|
||||
PARAMETRIZE { config = GEN_7; burnRate = 32; }
|
||||
PARAMETRIZE { config = GEN_6; burnRate = 16; }
|
||||
|
||||
GIVEN {
|
||||
WITH_CONFIG(CONFIG_BURN_DAMAGE, config);
|
||||
PLAYER (SPECIES_BRONZONG) { Ability(ABILITY_HEATPROOF); Status1(STATUS1_BURN); }
|
||||
OPPONENT (SPECIES_WOBBUFFET);
|
||||
}
|
||||
WHEN {
|
||||
TURN {}
|
||||
}
|
||||
SCENE {
|
||||
s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP);
|
||||
HP_BAR(player, damage: maxHP / burnRate);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,39 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Thick Fat (Ability) test titles")
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE);
|
||||
ASSUME(GetMoveType(MOVE_POWDER_SNOW) == TYPE_ICE);
|
||||
ASSUME(GetMoveEffect(MOVE_WORRY_SEED) == EFFECT_OVERWRITE_ABILITY);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Thick Fat halves damage from fire and ice type moves", s16 damage[2])
|
||||
{
|
||||
u16 move;
|
||||
|
||||
PARAMETRIZE { move = MOVE_POWDER_SNOW; }
|
||||
PARAMETRIZE { move = MOVE_EMBER; }
|
||||
|
||||
GIVEN {
|
||||
PLAYER (SPECIES_WOBBUFFET);
|
||||
OPPONENT (SPECIES_SNORLAX) { Ability(ABILITY_THICK_FAT); }
|
||||
}
|
||||
WHEN {
|
||||
TURN { MOVE(player, move); }
|
||||
TURN { MOVE(player, MOVE_WORRY_SEED); }
|
||||
TURN { MOVE(player, move); }
|
||||
}
|
||||
SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, move, player);
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage[0]);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, move, player);
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage[1]);
|
||||
}
|
||||
FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage[0], Q_4_12(2), results[0].damage[1]);
|
||||
EXPECT_MUL_EQ(results[1].damage[0], Q_4_12(2), results[1].damage[1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -50,12 +50,258 @@ SINGLE_BATTLE_TEST("Grudge does not deplete PP of a Z-Move")
|
||||
}
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Grudge depletes all PP from a Max Move's base move")
|
||||
TO_DO_BATTLE_TEST("Grudge does not activate for Struggle")
|
||||
TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Move");
|
||||
TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Sleep");
|
||||
TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Paralysis");
|
||||
TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Flinching");
|
||||
TO_DO_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Sandstorm");
|
||||
TO_DO_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Leech Seed");
|
||||
TO_DO_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Future Sight");
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user