Added missing Move Effect TODO tests - Volume G (#8428)

This commit is contained in:
Eduardo Quezada 2025-12-05 09:47:12 -03:00 committed by GitHub
parent fc25d943a7
commit cd49a47aa1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
30 changed files with 321 additions and 198 deletions

View File

@ -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; }

View File

@ -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");

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Celebrate (Move Effect) test titles")

View 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")

View File

@ -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")
{

View File

@ -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")

View File

@ -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")

View File

@ -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")

View File

@ -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); }
}
}

View File

@ -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+)")

View File

@ -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");

View File

@ -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")

View File

@ -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")

View File

@ -1,4 +0,0 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Guardian of Alola (Move Effect) test titles")

View File

@ -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); }

View 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);
}
}

View 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!");
}
}

View File

@ -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")

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Take Down (Move Effect) test titles")

View File

@ -1,4 +0,0 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Struggle (Move Effect) test titles")

View File

@ -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!");
}
}

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Sketch (Move Effect) test titles")

View File

@ -1,4 +0,0 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Super Fang (Move Effect) test titles")

View File

@ -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!");
}
}

View File

@ -0,0 +1,4 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Struggle (Secondary Move Effect) test titles")

View File

@ -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");

View File

@ -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!"); }
}