Added missing Move Effect TODO tests - Volume G (#8428)
This commit is contained in:
parent
fc25d943a7
commit
cd49a47aa1
@ -1,7 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from enemies")
|
||||
SINGLE_BATTLE_TEST("Damp prevents Explosion-like moves from enemies")
|
||||
{
|
||||
u32 move;
|
||||
PARAMETRIZE { move = MOVE_EXPLOSION; }
|
||||
@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from enemies")
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Damp prevents explosion-like moves from enemies in a double battle")
|
||||
DOUBLE_BATTLE_TEST("Damp prevents Explosion-like moves from enemies in a double battle")
|
||||
{
|
||||
u32 move;
|
||||
PARAMETRIZE { move = MOVE_EXPLOSION; }
|
||||
@ -39,7 +39,7 @@ DOUBLE_BATTLE_TEST("Damp prevents explosion-like moves from enemies in a double
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from self")
|
||||
SINGLE_BATTLE_TEST("Damp prevents Explosion-like moves from self")
|
||||
{
|
||||
u32 move;
|
||||
PARAMETRIZE { move = MOVE_EXPLOSION; }
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("Baddy Bad sets up Reflect, reducing physical damage");
|
||||
TO_DO_BATTLE_TEST("Baddy Bad's Reflect lasts for 5 turns");
|
||||
TO_DO_BATTLE_TEST("Baddy Bad can still damage the target when Reflect is already set up");
|
||||
4
test/battle/move_effect/celebrate.c
Normal file
4
test/battle/move_effect/celebrate.c
Normal file
@ -0,0 +1,4 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Celebrate (Move Effect) test titles")
|
||||
9
test/battle/move_effect/fixed_percent_damage.c
Normal file
9
test/battle/move_effect/fixed_percent_damage.c
Normal file
@ -0,0 +1,9 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("Super Fang does 50% damage to the target's current HP")
|
||||
TO_DO_BATTLE_TEST("Super Fang always deals at least 1 HP of damage")
|
||||
TO_DO_BATTLE_TEST("Super Fang is unaffected by type immunities (Gen 1)")
|
||||
TO_DO_BATTLE_TEST("Super Fang doesn't hit Ghost-type Pokémon (Gen 2+)")
|
||||
|
||||
TO_DO_BATTLE_TEST("Guardian of Alola does 75% damage to the target's current HP")
|
||||
@ -1,7 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Gear Up (Move Effect) test titles")
|
||||
TO_DO_BATTLE_TEST("Gear Up increases the Attack and Sp. Attack of the user and allies if they have Plus or Minus")
|
||||
|
||||
AI_DOUBLE_BATTLE_TEST("AI uses Gear Up")
|
||||
{
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Geomancy (Move Effect) test titles")
|
||||
TO_DO_BATTLE_TEST("Geomancy takes 2 turns to increase Sp. Atk, Sp. Def and Speed by 2 stages");
|
||||
TO_DO_BATTLE_TEST("Geomancy only takes 1 turn when holding Power Herb")
|
||||
TO_DO_BATTLE_TEST("Geomancy fails on the second turn if the user falls for Taunt while charging")
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Grassy Glide (Move Effect) test titles")
|
||||
TO_DO_BATTLE_TEST("Grassy Glide's priority increases by 1 when the user is affected by Grassy Terrain")
|
||||
TO_DO_BATTLE_TEST("Dynamax: Grassy Glide's priority doesn't increase for the Max Move it becomes")
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Grav Apple (Move Effect) test titles")
|
||||
TO_DO_BATTLE_TEST("Grav Apple lowers the target's Defense by 1 stage")
|
||||
TO_DO_BATTLE_TEST("Grav Apple's power increases by 50% under Gravity's effect")
|
||||
|
||||
@ -6,7 +6,11 @@ ASSUMPTIONS
|
||||
ASSUME(GetMoveEffect(MOVE_GRAVITY) == EFFECT_GRAVITY);
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Gravity cancels fly and sky drop if they are in the air")
|
||||
TO_DO_BATTLE_TEST("Gravity causes certain moves to fail") // Fly, Jump Kick, High Jump Kick, Splash, Bounce, Magnet Rise, Telekinesis, Sky Drop, Flying Press, Floaty Fall
|
||||
TO_DO_BATTLE_TEST("Gravity increases accuracy of all moves by 5/3 (~1.67)")
|
||||
TO_DO_BATTLE_TEST("Gravity causes all battlers to become grounded")
|
||||
|
||||
DOUBLE_BATTLE_TEST("Gravity cancels Fly and Sky Drop if they are in the air")
|
||||
{
|
||||
u8 visibility;
|
||||
GIVEN {
|
||||
@ -55,13 +59,13 @@ AI_DOUBLE_BATTLE_TEST("AI uses Gravity")
|
||||
PARAMETRIZE { move = MOVE_HEADBUTT; friendItem = ITEM_AIR_BALLOON; foeItem = ITEM_NONE; }
|
||||
PARAMETRIZE { move = MOVE_HEADBUTT; friendItem = ITEM_AIR_BALLOON; foeItem = ITEM_AIR_BALLOON; }
|
||||
PARAMETRIZE { move = MOVE_HEADBUTT; friendItem = ITEM_NONE; foeItem = ITEM_AIR_BALLOON; }
|
||||
PARAMETRIZE { aiFlags |= AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PP_STALL_PREVENTION;
|
||||
PARAMETRIZE { aiFlags |= AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PP_STALL_PREVENTION;
|
||||
move = MOVE_THUNDER; friendItem = ITEM_NONE; foeItem = ITEM_NONE; }
|
||||
PARAMETRIZE { aiFlags |= AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PP_STALL_PREVENTION;
|
||||
PARAMETRIZE { aiFlags |= AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PP_STALL_PREVENTION;
|
||||
move = MOVE_HEADBUTT; friendItem = ITEM_AIR_BALLOON; foeItem = ITEM_NONE; }
|
||||
PARAMETRIZE { aiFlags |= AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PP_STALL_PREVENTION;
|
||||
PARAMETRIZE { aiFlags |= AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PP_STALL_PREVENTION;
|
||||
move = MOVE_HEADBUTT; friendItem = ITEM_AIR_BALLOON; foeItem = ITEM_AIR_BALLOON; }
|
||||
PARAMETRIZE { aiFlags |= AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PP_STALL_PREVENTION;
|
||||
PARAMETRIZE { aiFlags |= AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_PP_STALL_PREVENTION;
|
||||
move = MOVE_HEADBUTT; friendItem = ITEM_NONE; foeItem = ITEM_AIR_BALLOON; }
|
||||
|
||||
GIVEN {
|
||||
@ -77,4 +81,3 @@ AI_DOUBLE_BATTLE_TEST("AI uses Gravity")
|
||||
TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_GRAVITY); }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Growth (Move Effect) test titles")
|
||||
TO_DO_BATTLE_TEST("Growth increases Sp. Atk and Sp. Def by 1 stage (Gen 1)") // Equivalent to raising Special
|
||||
TO_DO_BATTLE_TEST("Growth increases Sp. Atk by 1 stage (Gen 2-4)")
|
||||
TO_DO_BATTLE_TEST("Growth increases Attack and Sp. Atk by 1 stage or 2 stages under Sun (Gen 5+)")
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Grudge (Move Effect) test titles")
|
||||
|
||||
SINGLE_BATTLE_TEST("Grudge depletes all pp of the move that fainted the target")
|
||||
SINGLE_BATTLE_TEST("Grudge depletes all PP of the move that fainted the target")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
||||
@ -27,7 +25,7 @@ SINGLE_BATTLE_TEST("Grudge depletes all pp of the move that fainted the target")
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Grudge does not depletes pp of a z-move")
|
||||
SINGLE_BATTLE_TEST("Grudge does not deplete PP of a Z-Move")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
|
||||
@ -51,3 +49,13 @@ SINGLE_BATTLE_TEST("Grudge does not depletes pp of a z-move")
|
||||
EXPECT_GT(opponent->pp[3], 0);
|
||||
}
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
@ -20,3 +20,7 @@ SINGLE_BATTLE_TEST("Guard Split averages users and targets Def and Sp. Def stats
|
||||
EXPECT_EQ(player->spDefense, opponent->spDefense);
|
||||
}
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Stat stages use Guard Split's altered stats")
|
||||
TO_DO_BATTLE_TEST("Assault Vest uses Guard Split's altered stats")
|
||||
TO_DO_BATTLE_TEST("Eviolite uses Guard Split's altered stats")
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Grudge (Move Effect) test titles")
|
||||
TO_DO_BATTLE_TEST("Guard Swap switches the user's Defense and Sp. Def stat stages with the target")
|
||||
|
||||
@ -1,4 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Guardian of Alola (Move Effect) test titles")
|
||||
@ -86,6 +86,7 @@ SINGLE_BATTLE_TEST("Heal Pulse is blocked by Substitute")
|
||||
SINGLE_BATTLE_TEST("Floral Healing heals the target by 2/3rd of it's maxHP if Grassy Terrain is on the field")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_FLORAL_HEALING) == EFFECT_HEAL_PULSE);
|
||||
ASSUME(GetMoveEffectArg_MoveProperty(MOVE_FLORAL_HEALING) == MOVE_EFFECT_FLORAL_HEALING);
|
||||
ASSUME(GetMoveEffect(MOVE_GRASSY_TERRAIN) == EFFECT_GRASSY_TERRAIN);
|
||||
PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }
|
||||
|
||||
93
test/battle/move_effect/misty_explosion.c
Normal file
93
test/battle/move_effect/misty_explosion.c
Normal file
@ -0,0 +1,93 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(GetMoveEffect(MOVE_MISTY_EXPLOSION) == EFFECT_MISTY_EXPLOSION);
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Misty Explosion increases in power by 50% when affected by Misty Terrain")
|
||||
|
||||
SINGLE_BATTLE_TEST("Misty Explosion causes the user to faint")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_MISTY_EXPLOSION); }
|
||||
} SCENE {
|
||||
HP_BAR(player, hp: 0);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_EXPLOSION, player);
|
||||
MESSAGE("Wobbuffet fainted!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Misty Explosion causes the user & the target to faint")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_MISTY_EXPLOSION); }
|
||||
} SCENE {
|
||||
HP_BAR(player, hp: 0);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_EXPLOSION, player);
|
||||
HP_BAR(opponent, hp: 0);
|
||||
MESSAGE("The opposing Wobbuffet fainted!");
|
||||
MESSAGE("Wobbuffet fainted!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Misty Explosion causes the user to faint even if it misses")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_MISTY_EXPLOSION, hit: FALSE); }
|
||||
} SCENE {
|
||||
HP_BAR(player, hp: 0);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_EXPLOSION, player);
|
||||
MESSAGE("Wobbuffet fainted!");
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Misty Explosion causes everyone to faint in a double battle")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WYNAUT) { HP(1); }
|
||||
OPPONENT(SPECIES_ABRA) { HP(1); }
|
||||
OPPONENT(SPECIES_KADABRA) { HP(1); }
|
||||
OPPONENT(SPECIES_KADABRA);
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_MISTY_EXPLOSION); }
|
||||
} SCENE {
|
||||
HP_BAR(playerLeft, hp: 0);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_EXPLOSION, playerLeft);
|
||||
HP_BAR(opponentLeft, hp: 0);
|
||||
HP_BAR(playerRight, hp: 0);
|
||||
HP_BAR(opponentRight, hp: 0);
|
||||
MESSAGE("The opposing Abra fainted!");
|
||||
MESSAGE("Wynaut fainted!");
|
||||
MESSAGE("The opposing Kadabra fainted!");
|
||||
MESSAGE("Wobbuffet fainted!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Misty Explosion does not trigger Destiny Bond")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); };
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DESTINY_BOND); MOVE(opponent, MOVE_MISTY_EXPLOSION);}
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, player);
|
||||
HP_BAR(opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_EXPLOSION, opponent);
|
||||
HP_BAR(player);
|
||||
NOT HP_BAR(opponent);
|
||||
}
|
||||
}
|
||||
150
test/battle/move_effect/overwrite_ability.c
Normal file
150
test/battle/move_effect/overwrite_ability.c
Normal file
@ -0,0 +1,150 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
SINGLE_BATTLE_TEST("Simple Beam replaces target's ability with Simple")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_SIMPLE_BEAM) == EFFECT_OVERWRITE_ABILITY);
|
||||
ASSUME(GetMoveOverwriteAbility(MOVE_SIMPLE_BEAM) == ABILITY_SIMPLE);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
OPPONENT(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); }
|
||||
}WHEN {
|
||||
TURN { MOVE(player, MOVE_SIMPLE_BEAM); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, player);
|
||||
ABILITY_POPUP(opponent, ABILITY_BLAZE);
|
||||
} THEN {
|
||||
EXPECT_EQ(opponent->ability, ABILITY_SIMPLE);
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Simple Beam fails if the target already has Simple")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_SIMPLE_BEAM) == EFFECT_OVERWRITE_ABILITY);
|
||||
ASSUME(GetMoveOverwriteAbility(MOVE_SIMPLE_BEAM) == ABILITY_SIMPLE);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); }
|
||||
OPPONENT(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); }
|
||||
OPPONENT(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); }
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_SIMPLE_BEAM, target: opponentLeft); MOVE(playerRight, MOVE_SIMPLE_BEAM, target: opponentLeft); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, playerLeft);
|
||||
ABILITY_POPUP(opponentLeft, ABILITY_OVERGROW);
|
||||
NONE_OF {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, playerRight);
|
||||
ABILITY_POPUP(opponentLeft, ABILITY_SIMPLE);
|
||||
}
|
||||
} THEN {
|
||||
EXPECT_EQ(opponentLeft->ability, ABILITY_SIMPLE);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Simple Beam fails if target has an ability that can't be overwritten")
|
||||
{
|
||||
u32 species;
|
||||
enum Ability ability;
|
||||
|
||||
PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; }
|
||||
PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; }
|
||||
PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; }
|
||||
PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; }
|
||||
PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; }
|
||||
PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; }
|
||||
PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; }
|
||||
PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; }
|
||||
PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; }
|
||||
PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; }
|
||||
PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; }
|
||||
PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; }
|
||||
PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; }
|
||||
PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; }
|
||||
PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_SIMPLE_BEAM) == EFFECT_OVERWRITE_ABILITY);
|
||||
ASSUME(GetMoveOverwriteAbility(MOVE_SIMPLE_BEAM) == ABILITY_SIMPLE);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
OPPONENT(species) { Ability(ability); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SIMPLE_BEAM); }
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, player);
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Worry Seed replaces target's ability with Insomnia")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_WORRY_SEED) == EFFECT_OVERWRITE_ABILITY);
|
||||
ASSUME(GetMoveOverwriteAbility(MOVE_WORRY_SEED) == ABILITY_INSOMNIA);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
OPPONENT(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); }
|
||||
}WHEN {
|
||||
TURN { MOVE(player, MOVE_WORRY_SEED); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player);
|
||||
ABILITY_POPUP(opponent, ABILITY_BLAZE);
|
||||
} THEN {
|
||||
EXPECT_EQ(opponent->ability, ABILITY_INSOMNIA);
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Worry Seed fails if the target already has Insomnia")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_WORRY_SEED) == EFFECT_OVERWRITE_ABILITY);
|
||||
ASSUME(GetMoveOverwriteAbility(MOVE_WORRY_SEED) == ABILITY_INSOMNIA);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); }
|
||||
OPPONENT(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); }
|
||||
OPPONENT(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); }
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_WORRY_SEED, target: opponentLeft); MOVE(playerRight, MOVE_WORRY_SEED, target: opponentLeft); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, playerLeft);
|
||||
ABILITY_POPUP(opponentLeft, ABILITY_OVERGROW);
|
||||
NONE_OF {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, playerRight);
|
||||
ABILITY_POPUP(opponentLeft, ABILITY_INSOMNIA);
|
||||
}
|
||||
} THEN {
|
||||
EXPECT_EQ(opponentLeft->ability, ABILITY_INSOMNIA);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Worry Seed fails if target has an ability that can't be overwritten")
|
||||
{
|
||||
u32 species;
|
||||
enum Ability ability;
|
||||
|
||||
PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; }
|
||||
PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; }
|
||||
PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; }
|
||||
PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; }
|
||||
PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; }
|
||||
PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; }
|
||||
PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; }
|
||||
PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; }
|
||||
PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; }
|
||||
PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; }
|
||||
PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; }
|
||||
PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; }
|
||||
PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; }
|
||||
PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; }
|
||||
PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_WORRY_SEED) == EFFECT_OVERWRITE_ABILITY);
|
||||
ASSUME(GetMoveOverwriteAbility(MOVE_WORRY_SEED) == ABILITY_INSOMNIA);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
OPPONENT(species) { Ability(ability); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_WORRY_SEED); }
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player);
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
@ -1,4 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Bleakwind/Wildbolt/Sandsear Storm (Move Effect) test titles")
|
||||
4
test/battle/move_effect/recoil.c
Normal file
4
test/battle/move_effect/recoil.c
Normal file
@ -0,0 +1,4 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Take Down (Move Effect) test titles")
|
||||
@ -1,4 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Struggle (Move Effect) test titles")
|
||||
@ -1,76 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(GetMoveEffect(MOVE_SIMPLE_BEAM) == EFFECT_OVERWRITE_ABILITY);
|
||||
ASSUME(GetMoveOverwriteAbility(MOVE_SIMPLE_BEAM) == ABILITY_SIMPLE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Simple Beam replaces target's ability with Simple")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
OPPONENT(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); }
|
||||
}WHEN {
|
||||
TURN { MOVE(player, MOVE_SIMPLE_BEAM); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, player);
|
||||
ABILITY_POPUP(opponent, ABILITY_BLAZE);
|
||||
} THEN {
|
||||
EXPECT_EQ(opponent->ability, ABILITY_SIMPLE);
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Simple Beam fails if the target already has Simple")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); }
|
||||
OPPONENT(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); }
|
||||
OPPONENT(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); }
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_SIMPLE_BEAM, target: opponentLeft); MOVE(playerRight, MOVE_SIMPLE_BEAM, target: opponentLeft); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, playerLeft);
|
||||
ABILITY_POPUP(opponentLeft, ABILITY_OVERGROW);
|
||||
NONE_OF {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, playerRight);
|
||||
ABILITY_POPUP(opponentLeft, ABILITY_SIMPLE);
|
||||
}
|
||||
} THEN {
|
||||
EXPECT_EQ(opponentLeft->ability, ABILITY_SIMPLE);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Simple Beam fails if target has an ability that can't be overwritten")
|
||||
{
|
||||
u32 species;
|
||||
enum Ability ability;
|
||||
|
||||
PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; }
|
||||
PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; }
|
||||
PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; }
|
||||
PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; }
|
||||
PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; }
|
||||
PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; }
|
||||
PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; }
|
||||
PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; }
|
||||
PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; }
|
||||
PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; }
|
||||
PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; }
|
||||
PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; }
|
||||
PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; }
|
||||
PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; }
|
||||
PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; }
|
||||
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
OPPONENT(species) { Ability(ability); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SIMPLE_BEAM); }
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SIMPLE_BEAM, player);
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
4
test/battle/move_effect/sketch.c
Normal file
4
test/battle/move_effect/sketch.c
Normal file
@ -0,0 +1,4 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Sketch (Move Effect) test titles")
|
||||
@ -1,4 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Super Fang (Move Effect) test titles")
|
||||
@ -1,76 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(GetMoveEffect(MOVE_WORRY_SEED) == EFFECT_OVERWRITE_ABILITY);
|
||||
ASSUME(GetMoveOverwriteAbility(MOVE_WORRY_SEED) == ABILITY_INSOMNIA);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Worry Seed replaces target's ability with Insomnia")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
OPPONENT(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); }
|
||||
}WHEN {
|
||||
TURN { MOVE(player, MOVE_WORRY_SEED); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player);
|
||||
ABILITY_POPUP(opponent, ABILITY_BLAZE);
|
||||
} THEN {
|
||||
EXPECT_EQ(opponent->ability, ABILITY_INSOMNIA);
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Worry Seed fails if the target already has Insomnia")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); }
|
||||
OPPONENT(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); }
|
||||
OPPONENT(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); }
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_WORRY_SEED, target: opponentLeft); MOVE(playerRight, MOVE_WORRY_SEED, target: opponentLeft); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, playerLeft);
|
||||
ABILITY_POPUP(opponentLeft, ABILITY_OVERGROW);
|
||||
NONE_OF {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, playerRight);
|
||||
ABILITY_POPUP(opponentLeft, ABILITY_INSOMNIA);
|
||||
}
|
||||
} THEN {
|
||||
EXPECT_EQ(opponentLeft->ability, ABILITY_INSOMNIA);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Worry Seed fails if target has an ability that can't be overwritten")
|
||||
{
|
||||
u32 species;
|
||||
enum Ability ability;
|
||||
|
||||
PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; }
|
||||
PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; }
|
||||
PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; }
|
||||
PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; }
|
||||
PARAMETRIZE { species = SPECIES_MIMIKYU; ability = ABILITY_DISGUISE; }
|
||||
PARAMETRIZE { species = SPECIES_GRENINJA_BATTLE_BOND; ability = ABILITY_BATTLE_BOND; }
|
||||
PARAMETRIZE { species = SPECIES_ZYGARDE; ability = ABILITY_POWER_CONSTRUCT; }
|
||||
PARAMETRIZE { species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; }
|
||||
PARAMETRIZE { species = SPECIES_SILVALLY; ability = ABILITY_RKS_SYSTEM; }
|
||||
PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; }
|
||||
PARAMETRIZE { species = SPECIES_EISCUE; ability = ABILITY_ICE_FACE; }
|
||||
PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; }
|
||||
PARAMETRIZE { species = SPECIES_CALYREX_SHADOW; ability = ABILITY_AS_ONE_SHADOW_RIDER; }
|
||||
PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; }
|
||||
PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; }
|
||||
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); }
|
||||
OPPONENT(species) { Ability(ability); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_WORRY_SEED); }
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player);
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
4
test/battle/move_effect_secondary/recoil_hp_25.c
Normal file
4
test/battle/move_effect_secondary/recoil_hp_25.c
Normal file
@ -0,0 +1,4 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("TODO: Write Struggle (Secondary Move Effect) test titles")
|
||||
@ -21,8 +21,7 @@ SINGLE_BATTLE_TEST("Baddy Bad sets up Reflect when it was succesful")
|
||||
MOVE(player, MOVE_BADDY_BAD, hit: moveSuccess);
|
||||
}
|
||||
} SCENE {
|
||||
if (moveSuccess == TRUE)
|
||||
{
|
||||
if (moveSuccess == TRUE) {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_BADDY_BAD, player);
|
||||
MESSAGE("Reflect made your team stronger against physical moves!");
|
||||
} else {
|
||||
@ -33,3 +32,5 @@ SINGLE_BATTLE_TEST("Baddy Bad sets up Reflect when it was succesful")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Baddy Bad can still damage the target when Reflect is already set up");
|
||||
|
||||
@ -1,15 +1,21 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
SINGLE_BATTLE_TEST("Thunder bypasses accuracy checks in Rain")
|
||||
SINGLE_BATTLE_TEST("Thunder and Bleakwind/Wildbolt/Sandsear Storm bypass accuracy checks in Rain")
|
||||
{
|
||||
u32 move;
|
||||
PARAMETRIZE { move = MOVE_THUNDER; }
|
||||
PARAMETRIZE { move = MOVE_BLEAKWIND_STORM; }
|
||||
PARAMETRIZE { move = MOVE_WILDBOLT_STORM; }
|
||||
PARAMETRIZE { move = MOVE_SANDSEAR_STORM; }
|
||||
PASSES_RANDOMLY(100, 100, RNG_ACCURACY);
|
||||
GIVEN {
|
||||
ASSUME(MoveAlwaysHitsInRain(MOVE_THUNDER) == TRUE);
|
||||
ASSUME(GetMoveAccuracy(move) < 100 && GetMoveAccuracy(move) > 0);
|
||||
ASSUME(MoveAlwaysHitsInRain(move) == TRUE);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_RAIN_DANCE); MOVE(player, MOVE_THUNDER); }
|
||||
TURN { MOVE(opponent, MOVE_RAIN_DANCE); MOVE(player, move); }
|
||||
} SCENE {
|
||||
NONE_OF { MESSAGE("Wobbuffet's attack missed!"); }
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user