diff --git a/test/battle/move_effect/cud_chuw.c b/test/battle/ability/cud_chew.c similarity index 93% rename from test/battle/move_effect/cud_chuw.c rename to test/battle/ability/cud_chew.c index ba59d355a48b..305969aa93ae 100644 --- a/test/battle/move_effect/cud_chuw.c +++ b/test/battle/ability/cud_chew.c @@ -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); diff --git a/test/battle/hold_effect/white_herb.c b/test/battle/hold_effect/restore_stats.c similarity index 100% rename from test/battle/hold_effect/white_herb.c rename to test/battle/hold_effect/restore_stats.c diff --git a/test/battle/move_effect/burn_up.c b/test/battle/move_effect/burn_up.c deleted file mode 100644 index 46b26a49a09a..000000000000 --- a/test/battle/move_effect/burn_up.c +++ /dev/null @@ -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!"); - } -} diff --git a/test/battle/move_effect/techno_blast.c b/test/battle/move_effect/change_type_on_item.c similarity index 100% rename from test/battle/move_effect/techno_blast.c rename to test/battle/move_effect/change_type_on_item.c diff --git a/test/battle/move_effect/double_shock.c b/test/battle/move_effect/double_shock.c deleted file mode 100644 index b7f59a3ab7ca..000000000000 --- a/test/battle/move_effect/double_shock.c +++ /dev/null @@ -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!"); - } -} diff --git a/test/battle/move_effect/fail_if_not_arg_type.c b/test/battle/move_effect/fail_if_not_arg_type.c new file mode 100644 index 000000000000..4ffe0a032353 --- /dev/null +++ b/test/battle/move_effect/fail_if_not_arg_type.c @@ -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!"); + } +} diff --git a/test/battle/ability/gastro_acid.c b/test/battle/move_effect/gastro_acid.c similarity index 100% rename from test/battle/ability/gastro_acid.c rename to test/battle/move_effect/gastro_acid.c diff --git a/test/battle/move_effect/hex.c b/test/battle/move_effect/hex.c deleted file mode 100644 index 25660d73099f..000000000000 --- a/test/battle/move_effect/hex.c +++ /dev/null @@ -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); - } -} diff --git a/test/battle/move_effect/hit_set_entry_hazardss.c b/test/battle/move_effect/hit_set_entry_hazardss.c deleted file mode 100644 index fa405ed3b332..000000000000 --- a/test/battle/move_effect/hit_set_entry_hazardss.c +++ /dev/null @@ -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!"); - } -} - diff --git a/test/battle/ability/role_play.c b/test/battle/move_effect/role_play.c similarity index 100% rename from test/battle/ability/role_play.c rename to test/battle/move_effect/role_play.c diff --git a/test/battle/move_effect/semi_invulnerable_moves.c b/test/battle/move_effect/semi_invulnerable.c similarity index 100% rename from test/battle/move_effect/semi_invulnerable_moves.c rename to test/battle/move_effect/semi_invulnerable.c diff --git a/test/battle/move_effect/spit_up.c b/test/battle/move_effect/spit_up.c new file mode 100644 index 000000000000..1291962e1fe4 --- /dev/null +++ b/test/battle/move_effect/spit_up.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Go to test/battle/move_effect/stockpile.c for Spit Up's tests diff --git a/test/battle/move_effect/swallow.c b/test/battle/move_effect/swallow.c new file mode 100644 index 000000000000..bce0a4470ce1 --- /dev/null +++ b/test/battle/move_effect/swallow.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Go to test/battle/move_effect/stockpile.c for Swallow's tests diff --git a/test/battle/move_effect/two_turn_moves.c b/test/battle/move_effect/two_turns_attack.c similarity index 100% rename from test/battle/move_effect/two_turn_moves.c rename to test/battle/move_effect/two_turns_attack.c diff --git a/test/battle/move_effect/venoshock.c b/test/battle/move_effect/venoshock.c deleted file mode 100644 index feea48df10c4..000000000000 --- a/test/battle/move_effect/venoshock.c +++ /dev/null @@ -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); - } -} diff --git a/test/battle/move_effect/bug_bite.c b/test/battle/move_effect_secondary/bug_bite.c similarity index 100% rename from test/battle/move_effect/bug_bite.c rename to test/battle/move_effect_secondary/bug_bite.c diff --git a/test/battle/move_effect/burn_hit.c b/test/battle/move_effect_secondary/burn.c similarity index 100% rename from test/battle/move_effect/burn_hit.c rename to test/battle/move_effect_secondary/burn.c diff --git a/test/battle/move_effect/confusion_hit.c b/test/battle/move_effect_secondary/confusion.c similarity index 100% rename from test/battle/move_effect/confusion_hit.c rename to test/battle/move_effect_secondary/confusion.c diff --git a/test/battle/move_effect/clanging_scales.c b/test/battle/move_effect_secondary/def_minus_1.c similarity index 100% rename from test/battle/move_effect/clanging_scales.c rename to test/battle/move_effect_secondary/def_minus_1.c diff --git a/test/battle/move_effect/dire_claw.c b/test/battle/move_effect_secondary/dire_claw.c similarity index 100% rename from test/battle/move_effect/dire_claw.c rename to test/battle/move_effect_secondary/dire_claw.c diff --git a/test/battle/move_effect_secondary/double_power_on_arg_status.c b/test/battle/move_effect_secondary/double_power_on_arg_status.c new file mode 100644 index 000000000000..d147264470a3 --- /dev/null +++ b/test/battle/move_effect_secondary/double_power_on_arg_status.c @@ -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); + } +} diff --git a/test/battle/move_effect/flinch_hit.c b/test/battle/move_effect_secondary/flinch.c similarity index 100% rename from test/battle/move_effect/flinch_hit.c rename to test/battle/move_effect_secondary/flinch.c diff --git a/test/battle/move_effect/freeze_hit.c b/test/battle/move_effect_secondary/freeze.c similarity index 100% rename from test/battle/move_effect/freeze_hit.c rename to test/battle/move_effect_secondary/freeze.c diff --git a/test/battle/move_effect/paralyze_hit.c b/test/battle/move_effect_secondary/paralysis.c similarity index 100% rename from test/battle/move_effect/paralyze_hit.c rename to test/battle/move_effect_secondary/paralysis.c diff --git a/test/battle/move_effect/pay_day.c b/test/battle/move_effect_secondary/pay_day.c similarity index 100% rename from test/battle/move_effect/pay_day.c rename to test/battle/move_effect_secondary/pay_day.c diff --git a/test/battle/move_effect/poison_hit.c b/test/battle/move_effect_secondary/poison.c similarity index 86% rename from test/battle/move_effect/poison_hit.c rename to test/battle/move_effect_secondary/poison.c index f7f46df4f9f6..63b2816bfdf2 100644 --- a/test/battle/move_effect/poison_hit.c +++ b/test/battle/move_effect_secondary/poison.c @@ -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); diff --git a/test/battle/move_effect/psychic_noise.c b/test/battle/move_effect_secondary/psychic_noise.c similarity index 100% rename from test/battle/move_effect/psychic_noise.c rename to test/battle/move_effect_secondary/psychic_noise.c diff --git a/test/battle/move_effect/rapid_spin.c b/test/battle/move_effect_secondary/rapid_spin.c similarity index 100% rename from test/battle/move_effect/rapid_spin.c rename to test/battle/move_effect_secondary/rapid_spin.c diff --git a/test/battle/move_effect/sp_atk_two_down.c b/test/battle/move_effect_secondary/sp_atk_two_down.c similarity index 100% rename from test/battle/move_effect/sp_atk_two_down.c rename to test/battle/move_effect_secondary/sp_atk_two_down.c diff --git a/test/battle/move_effect/spin_out.c b/test/battle/move_effect_secondary/spd_minus_2.c similarity index 100% rename from test/battle/move_effect/spin_out.c rename to test/battle/move_effect_secondary/spd_minus_2.c diff --git a/test/battle/move_effect_secondary/spikes.c b/test/battle/move_effect_secondary/spikes.c new file mode 100644 index 000000000000..b9c72930c2be --- /dev/null +++ b/test/battle/move_effect_secondary/spikes.c @@ -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!"); + } +} diff --git a/test/battle/move_effect_secondary/stealth_rock.c b/test/battle/move_effect_secondary/stealth_rock.c new file mode 100644 index 000000000000..034e2c347b6e --- /dev/null +++ b/test/battle/move_effect_secondary/stealth_rock.c @@ -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!"); + } +} + diff --git a/test/battle/move_effect/syrup_bomb.c b/test/battle/move_effect_secondary/syrup_bomb.c similarity index 98% rename from test/battle/move_effect/syrup_bomb.c rename to test/battle/move_effect_secondary/syrup_bomb.c index 57831abb5576..1e6d61372140 100644 --- a/test/battle/move_effect/syrup_bomb.c +++ b/test/battle/move_effect_secondary/syrup_bomb.c @@ -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; diff --git a/test/battle/move_effect/rampage.c b/test/battle/move_effect_secondary/thrash.c similarity index 100% rename from test/battle/move_effect/rampage.c rename to test/battle/move_effect_secondary/thrash.c diff --git a/test/battle/move_effect/throat_chop.c b/test/battle/move_effect_secondary/throat_chop.c similarity index 100% rename from test/battle/move_effect/throat_chop.c rename to test/battle/move_effect_secondary/throat_chop.c diff --git a/test/battle/move_effect/jaw_lock.c b/test/battle/move_effect_secondary/trap_both.c similarity index 100% rename from test/battle/move_effect/jaw_lock.c rename to test/battle/move_effect_secondary/trap_both.c diff --git a/test/battle/move_effect/tri_attack.c b/test/battle/move_effect_secondary/tri_attack.c similarity index 100% rename from test/battle/move_effect/tri_attack.c rename to test/battle/move_effect_secondary/tri_attack.c diff --git a/test/battle/move_effect/axe_kick.c b/test/battle/move_effects_combined/axe_kick.c similarity index 100% rename from test/battle/move_effect/axe_kick.c rename to test/battle/move_effects_combined/axe_kick.c diff --git a/test/battle/move_effect/barb_barrage.c b/test/battle/move_effects_combined/barb_barrage.c similarity index 100% rename from test/battle/move_effect/barb_barrage.c rename to test/battle/move_effects_combined/barb_barrage.c diff --git a/test/battle/move_effect/flinch_status.c b/test/battle/move_effects_combined/flinch_status.c similarity index 100% rename from test/battle/move_effect/flinch_status.c rename to test/battle/move_effects_combined/flinch_status.c diff --git a/test/battle/move_effect/hurricane.c b/test/battle/move_effects_combined/hurricane.c similarity index 100% rename from test/battle/move_effect/hurricane.c rename to test/battle/move_effects_combined/hurricane.c diff --git a/test/battle/move_effect/infernal_parade.c b/test/battle/move_effects_combined/infernal_parade.c similarity index 94% rename from test/battle/move_effect/infernal_parade.c rename to test/battle/move_effects_combined/infernal_parade.c index bd7ec793ac20..6aa46ef8cb34 100644 --- a/test/battle/move_effect/infernal_parade.c +++ b/test/battle/move_effects_combined/infernal_parade.c @@ -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") diff --git a/test/battle/move_effect/make_it_rain.c b/test/battle/move_effects_combined/make_it_rain.c similarity index 100% rename from test/battle/move_effect/make_it_rain.c rename to test/battle/move_effects_combined/make_it_rain.c diff --git a/test/battle/move_effect/triple_arrows.c b/test/battle/move_effects_combined/triple_arrows.c similarity index 100% rename from test/battle/move_effect/triple_arrows.c rename to test/battle/move_effects_combined/triple_arrows.c diff --git a/test/battle/move_effect/recoil.c b/test/battle/move_flags/recoil.c similarity index 100% rename from test/battle/move_effect/recoil.c rename to test/battle/move_flags/recoil.c