Small Battle Test reorganization (#4504)
* Fixed test folders + Chud Chew test name fixes * Adjusted file names + merged Burn Up and Double Shock files * Added Spit Up/Swallow files that point to Stockpile's file * Multiple changes (see description) - Moved secondary effect files to their own folder. - Split hit_set_entry_hazards.c to separate files for Spikes/Stealth Rock. - Grouped Hex/Venoshock to the same file
This commit is contained in:
parent
e20cb62de6
commit
5ec08ee98c
@ -1,7 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
SINGLE_BATTLE_TEST("Cud Chuw will activate Kee Berry effect again on the next turn")
|
||||
SINGLE_BATTLE_TEST("Cud Chew will activate Kee Berry effect again on the next turn")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gItemsInfo[ITEM_KEE_BERRY].holdEffect == HOLD_EFFECT_KEE_BERRY);
|
||||
@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Cud Chuw will activate Kee Berry effect again on the next tu
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Cud Chuw will activate Oran Berry effect again on the next turn")
|
||||
SINGLE_BATTLE_TEST("Cud Chew will activate Oran Berry effect again on the next turn")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP);
|
||||
@ -1,54 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE || gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_CYNDAQUIL);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_BURN_UP); }
|
||||
TURN { MOVE(player, MOVE_BURN_UP); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player);
|
||||
MESSAGE("Cyndaquil burned itself out!");
|
||||
MESSAGE("Cyndaquil used Burn Up!");
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Burn Up fails if the user isn't a Fire-type")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_BURN_UP); }
|
||||
} SCENE {
|
||||
NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); }
|
||||
MESSAGE("Wobbuffet used Burn Up!");
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type if enemy faints")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_CYNDAQUIL);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_BURN_UP); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player);
|
||||
HP_BAR(opponent, hp: 0);
|
||||
MESSAGE("Cyndaquil burned itself out!");
|
||||
}
|
||||
}
|
||||
@ -1,54 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC);
|
||||
ASSUME(gSpeciesInfo[SPECIES_PIKACHU].types[0] == TYPE_ELECTRIC || gSpeciesInfo[SPECIES_PIKACHU].types[1] == TYPE_ELECTRIC);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_PIKACHU);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DOUBLE_SHOCK); }
|
||||
TURN { MOVE(player, MOVE_DOUBLE_SHOCK); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player);
|
||||
MESSAGE("Pikachu used up all of its electricity!");
|
||||
MESSAGE("Pikachu used Double Shock!");
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Double Shock fails if the user isn't an Electric-type")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DOUBLE_SHOCK); }
|
||||
} SCENE {
|
||||
NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); }
|
||||
MESSAGE("Wobbuffet used Double Shock!");
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type if enemy faints")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_PIKACHU);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DOUBLE_SHOCK); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player);
|
||||
HP_BAR(opponent, hp: 0);
|
||||
MESSAGE("Pikachu used up all of its electricity!");
|
||||
}
|
||||
}
|
||||
112
test/battle/move_effect/fail_if_not_arg_type.c
Normal file
112
test/battle/move_effect/fail_if_not_arg_type.c
Normal file
@ -0,0 +1,112 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE || gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE);
|
||||
PLAYER(SPECIES_CYNDAQUIL);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_BURN_UP); }
|
||||
TURN { MOVE(player, MOVE_BURN_UP); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player);
|
||||
MESSAGE("Cyndaquil burned itself out!");
|
||||
MESSAGE("Cyndaquil used Burn Up!");
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Burn Up fails if the user isn't a Fire-type")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_BURN_UP); }
|
||||
} SCENE {
|
||||
NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); }
|
||||
MESSAGE("Wobbuffet used Burn Up!");
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type if enemy faints")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_BURN_UP].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_FIRE || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_FIRE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE || gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE);
|
||||
PLAYER(SPECIES_CYNDAQUIL);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_BURN_UP); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player);
|
||||
HP_BAR(opponent, hp: 0);
|
||||
MESSAGE("Cyndaquil burned itself out!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC);
|
||||
ASSUME(gSpeciesInfo[SPECIES_PIKACHU].types[0] == TYPE_ELECTRIC || gSpeciesInfo[SPECIES_PIKACHU].types[1] == TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_PIKACHU);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DOUBLE_SHOCK); }
|
||||
TURN { MOVE(player, MOVE_DOUBLE_SHOCK); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player);
|
||||
MESSAGE("Pikachu used up all of its electricity!");
|
||||
MESSAGE("Pikachu used Double Shock!");
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Double Shock fails if the user isn't an Electric-type")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DOUBLE_SHOCK); }
|
||||
} SCENE {
|
||||
NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); }
|
||||
MESSAGE("Wobbuffet used Double Shock!");
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type if enemy faints")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
|
||||
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_DOUBLE_SHOCK, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_ELECTRIC) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ELECTRIC || gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ELECTRIC);
|
||||
ASSUME(gSpeciesInfo[SPECIES_PIKACHU].types[0] == TYPE_ELECTRIC || gSpeciesInfo[SPECIES_PIKACHU].types[1] == TYPE_ELECTRIC);
|
||||
PLAYER(SPECIES_PIKACHU);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DOUBLE_SHOCK); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player);
|
||||
HP_BAR(opponent, hp: 0);
|
||||
MESSAGE("Pikachu used up all of its electricity!");
|
||||
}
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_HEX].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_HEX].argument == STATUS1_ANY);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Hex deals double damage to foes with a status", s16 damage)
|
||||
{
|
||||
u32 status1;
|
||||
PARAMETRIZE { status1 = STATUS1_NONE; }
|
||||
PARAMETRIZE { status1 = STATUS1_SLEEP; }
|
||||
PARAMETRIZE { status1 = STATUS1_POISON; }
|
||||
PARAMETRIZE { status1 = STATUS1_BURN; }
|
||||
PARAMETRIZE { status1 = STATUS1_FREEZE; }
|
||||
PARAMETRIZE { status1 = STATUS1_PARALYSIS; }
|
||||
PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_HEX); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEX, player);
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} THEN {
|
||||
if (i > 0)
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[i].damage);
|
||||
if (i > 1)
|
||||
EXPECT_EQ(results[i-1].damage, results[i].damage);
|
||||
}
|
||||
}
|
||||
@ -1,117 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_STONE_AXE, MOVE_EFFECT_STEALTH_ROCK) == TRUE);
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_CEASELESS_EDGE, MOVE_EFFECT_SPIKES) == TRUE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the target")
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE { move = MOVE_STONE_AXE; }
|
||||
PARAMETRIZE { move = MOVE_CEASELESS_EDGE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, move); }
|
||||
TURN { SWITCH(opponent, 1); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP);
|
||||
ANIMATION(ANIM_TYPE_MOVE, move, player);
|
||||
HP_BAR(opponent);
|
||||
if (move == MOVE_CEASELESS_EDGE) {
|
||||
MESSAGE("Spikes were scattered all around the opposing team!");
|
||||
}
|
||||
else {
|
||||
MESSAGE("Pointed stones float in the air around the opposing team!");
|
||||
}
|
||||
MESSAGE("2 sent out Wobbuffet!");
|
||||
if (move == MOVE_CEASELESS_EDGE) {
|
||||
HP_BAR(opponent, damage: maxHP / 8);
|
||||
MESSAGE("Foe Wobbuffet is hurt by spikes!");
|
||||
}
|
||||
else {
|
||||
HP_BAR(opponent, damage: maxHP / 8);
|
||||
MESSAGE("Pointed stones dug into Foe Wobbuffet!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_CEASELESS_EDGE); }
|
||||
TURN { MOVE(player, MOVE_CEASELESS_EDGE); }
|
||||
TURN { MOVE(player, MOVE_CEASELESS_EDGE); }
|
||||
TURN { MOVE(player, MOVE_CEASELESS_EDGE); }
|
||||
TURN { SWITCH(opponent, 1); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP);
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player);
|
||||
HP_BAR(opponent);
|
||||
MESSAGE("Spikes were scattered all around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player);
|
||||
HP_BAR(opponent);
|
||||
MESSAGE("Spikes were scattered all around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player);
|
||||
HP_BAR(opponent);
|
||||
MESSAGE("Spikes were scattered all around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player);
|
||||
HP_BAR(opponent);
|
||||
NOT MESSAGE("Spikes were scattered all around the opposing team!");
|
||||
|
||||
MESSAGE("2 sent out Wynaut!");
|
||||
HP_BAR(opponent, damage: maxHP / 4);
|
||||
MESSAGE("Foe Wynaut is hurt by spikes!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Stone Axe can set up pointed stones only once")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_STONE_AXE); }
|
||||
TURN { MOVE(player, MOVE_STONE_AXE); }
|
||||
TURN { MOVE(player, MOVE_STONE_AXE); }
|
||||
TURN { MOVE(player, MOVE_STONE_AXE); }
|
||||
TURN { SWITCH(opponent, 1); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP);
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player);
|
||||
HP_BAR(opponent);
|
||||
MESSAGE("Pointed stones float in the air around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player);
|
||||
HP_BAR(opponent);
|
||||
NOT MESSAGE("Pointed stones float in the air around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player);
|
||||
HP_BAR(opponent);
|
||||
NOT MESSAGE("Pointed stones float in the air around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player);
|
||||
HP_BAR(opponent);
|
||||
NOT MESSAGE("Pointed stones float in the air around the opposing team!");
|
||||
|
||||
MESSAGE("2 sent out Wynaut!");
|
||||
HP_BAR(opponent, damage: maxHP / 8);
|
||||
MESSAGE("Pointed stones dug into Foe Wynaut!");
|
||||
}
|
||||
}
|
||||
|
||||
4
test/battle/move_effect/spit_up.c
Normal file
4
test/battle/move_effect/spit_up.c
Normal file
@ -0,0 +1,4 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
// Go to test/battle/move_effect/stockpile.c for Spit Up's tests
|
||||
4
test/battle/move_effect/swallow.c
Normal file
4
test/battle/move_effect/swallow.c
Normal file
@ -0,0 +1,4 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
// Go to test/battle/move_effect/stockpile.c for Swallow's tests
|
||||
@ -1,28 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_VENOSHOCK].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_VENOSHOCK].argument == STATUS1_PSN_ANY);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Venoshock's power doubles if the target is poisoned/badly poisoned", s16 damage)
|
||||
{
|
||||
u32 status1;
|
||||
PARAMETRIZE { status1 = 0; }
|
||||
PARAMETRIZE { status1 = STATUS1_POISON; }
|
||||
PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_VENOSHOCK); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_VENOSHOCK, player);
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage);
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[2].damage);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,52 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
SINGLE_BATTLE_TEST("Hex deals double damage to foes with a status", s16 damage)
|
||||
{
|
||||
u32 status1;
|
||||
PARAMETRIZE { status1 = STATUS1_NONE; }
|
||||
PARAMETRIZE { status1 = STATUS1_SLEEP; }
|
||||
PARAMETRIZE { status1 = STATUS1_POISON; }
|
||||
PARAMETRIZE { status1 = STATUS1_BURN; }
|
||||
PARAMETRIZE { status1 = STATUS1_FREEZE; }
|
||||
PARAMETRIZE { status1 = STATUS1_PARALYSIS; }
|
||||
PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_HEX].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_HEX].argument == STATUS1_ANY);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_HEX); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_HEX, player);
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} THEN {
|
||||
if (i > 0)
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[i].damage);
|
||||
if (i > 1)
|
||||
EXPECT_EQ(results[i-1].damage, results[i].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Venoshock's power doubles if the target is poisoned/badly poisoned", s16 damage)
|
||||
{
|
||||
u32 status1;
|
||||
PARAMETRIZE { status1 = 0; }
|
||||
PARAMETRIZE { status1 = STATUS1_POISON; }
|
||||
PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; }
|
||||
GIVEN {
|
||||
ASSUME(gMovesInfo[MOVE_VENOSHOCK].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_VENOSHOCK].argument == STATUS1_PSN_ANY);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_VENOSHOCK); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_VENOSHOCK, player);
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage);
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[2].damage);
|
||||
}
|
||||
}
|
||||
@ -1,15 +1,10 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON) == TRUE);
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_TWINEEDLE, MOVE_EFFECT_POISON) == TRUE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Poison Sting inflicts poison")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON) == TRUE);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -29,6 +24,7 @@ SINGLE_BATTLE_TEST("Poison cannot be inflicted on Poison and Steel-type Pokémon
|
||||
PARAMETRIZE { mon = SPECIES_NIDORAN_M; }
|
||||
PARAMETRIZE { mon = SPECIES_REGISTEEL; }
|
||||
GIVEN {
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_TWINEEDLE, MOVE_EFFECT_POISON) == TRUE);
|
||||
ASSUME(gSpeciesInfo[SPECIES_NIDORAN_M].types[0] == TYPE_POISON);
|
||||
ASSUME(gSpeciesInfo[SPECIES_REGISTEEL].types[0] == TYPE_STEEL);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
64
test/battle/move_effect_secondary/spikes.c
Normal file
64
test/battle/move_effect_secondary/spikes.c
Normal file
@ -0,0 +1,64 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_CEASELESS_EDGE, MOVE_EFFECT_SPIKES) == TRUE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Ceaseless Edge sets up hazards after hitting the target")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_CEASELESS_EDGE); }
|
||||
TURN { SWITCH(opponent, 1); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player);
|
||||
HP_BAR(opponent);
|
||||
MESSAGE("Spikes were scattered all around the opposing team!");
|
||||
MESSAGE("2 sent out Wobbuffet!");
|
||||
HP_BAR(opponent, damage: maxHP / 8);
|
||||
MESSAGE("Foe Wobbuffet is hurt by spikes!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_CEASELESS_EDGE); }
|
||||
TURN { MOVE(player, MOVE_CEASELESS_EDGE); }
|
||||
TURN { MOVE(player, MOVE_CEASELESS_EDGE); }
|
||||
TURN { MOVE(player, MOVE_CEASELESS_EDGE); }
|
||||
TURN { SWITCH(opponent, 1); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP);
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player);
|
||||
HP_BAR(opponent);
|
||||
MESSAGE("Spikes were scattered all around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player);
|
||||
HP_BAR(opponent);
|
||||
MESSAGE("Spikes were scattered all around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player);
|
||||
HP_BAR(opponent);
|
||||
MESSAGE("Spikes were scattered all around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player);
|
||||
HP_BAR(opponent);
|
||||
NOT MESSAGE("Spikes were scattered all around the opposing team!");
|
||||
|
||||
MESSAGE("2 sent out Wynaut!");
|
||||
HP_BAR(opponent, damage: maxHP / 4);
|
||||
MESSAGE("Foe Wynaut is hurt by spikes!");
|
||||
}
|
||||
}
|
||||
65
test/battle/move_effect_secondary/stealth_rock.c
Normal file
65
test/battle/move_effect_secondary/stealth_rock.c
Normal file
@ -0,0 +1,65 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_STONE_AXE, MOVE_EFFECT_STEALTH_ROCK) == TRUE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Stone Axe sets up hazards after hitting the target")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_STONE_AXE); }
|
||||
TURN { SWITCH(opponent, 1); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player);
|
||||
HP_BAR(opponent);
|
||||
MESSAGE("Pointed stones float in the air around the opposing team!");
|
||||
MESSAGE("2 sent out Wobbuffet!");
|
||||
HP_BAR(opponent, damage: maxHP / 8);
|
||||
MESSAGE("Pointed stones dug into Foe Wobbuffet!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Stone Axe can set up pointed stones only once")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_STONE_AXE); }
|
||||
TURN { MOVE(player, MOVE_STONE_AXE); }
|
||||
TURN { MOVE(player, MOVE_STONE_AXE); }
|
||||
TURN { MOVE(player, MOVE_STONE_AXE); }
|
||||
TURN { SWITCH(opponent, 1); }
|
||||
} SCENE {
|
||||
s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP);
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player);
|
||||
HP_BAR(opponent);
|
||||
MESSAGE("Pointed stones float in the air around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player);
|
||||
HP_BAR(opponent);
|
||||
NOT MESSAGE("Pointed stones float in the air around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player);
|
||||
HP_BAR(opponent);
|
||||
NOT MESSAGE("Pointed stones float in the air around the opposing team!");
|
||||
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player);
|
||||
HP_BAR(opponent);
|
||||
NOT MESSAGE("Pointed stones float in the air around the opposing team!");
|
||||
|
||||
MESSAGE("2 sent out Wynaut!");
|
||||
HP_BAR(opponent, damage: maxHP / 8);
|
||||
MESSAGE("Pointed stones dug into Foe Wynaut!");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,11 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_SYRUP_BOMB, MOVE_EFFECT_SYRUP_BOMB) == TRUE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Syrup Bomb covers the foe in sticky syrup for 3 turns")
|
||||
{
|
||||
u8 j;
|
||||
@ -5,6 +5,7 @@ ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gMovesInfo[MOVE_INFERNAL_PARADE].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS);
|
||||
ASSUME(gMovesInfo[MOVE_INFERNAL_PARADE].argument == STATUS1_ANY);
|
||||
ASSUME(MoveHasAdditionalEffect(MOVE_INFERNAL_PARADE, MOVE_EFFECT_BURN) == TRUE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Infernal Parade inflicts burn")
|
||||
Loading…
x
Reference in New Issue
Block a user