mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
More weather and type-specific tests (#3260)
Co-authored-by: Eduardo Quezada D'Ottone <eduardo602002@gmail.com>
This commit is contained in:
parent
0f3971a360
commit
28c6a1af49
17
test/battle/ability/harvest.c
Normal file
17
test/battle/ability/harvest.c
Normal file
@ -0,0 +1,17 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("Harvest has a 50% chance to restore a Berry at the end of the turn");
|
||||
TO_DO_BATTLE_TEST("Harvest always restores a Berry in Sunlight");
|
||||
TO_DO_BATTLE_TEST("Harvest restores a Berry even after being switched out and back in");
|
||||
TO_DO_BATTLE_TEST("Harvest restores a Berry consumed by Fling");
|
||||
TO_DO_BATTLE_TEST("Harvest restores a Berry consumed by Natural Gift");
|
||||
TO_DO_BATTLE_TEST("Harvest only works once per turn"); // Check for berries that are consumed immediately, like Pecha Berry
|
||||
TO_DO_BATTLE_TEST("Harvest doesn't restore a Berry when destroyed by Incinerate");
|
||||
TO_DO_BATTLE_TEST("Harvest doesn't restore a Berry when knocked off by Knock Off");
|
||||
TO_DO_BATTLE_TEST("Harvest doesn't restore a Berry when eaten by Bug Bite/Pluck");
|
||||
TO_DO_BATTLE_TEST("Harvest doesn't restore a Berry that's collected via Pickup");
|
||||
TO_DO_BATTLE_TEST("Harvest order is affected by speed");
|
||||
TO_DO_BATTLE_TEST("Harvest doesn't restore a Berry when transfered to another Pokémon");
|
||||
TO_DO_BATTLE_TEST("Harvest can restore a Berry that was transferred from another Pokémon");
|
||||
TO_DO_BATTLE_TEST("Harvest can only restore the newest berry consumed that was transferred from another Pokémon instead of its original Berry");
|
30
test/battle/ability/prankster.c
Normal file
30
test/battle/ability/prankster.c
Normal file
@ -0,0 +1,30 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
SINGLE_BATTLE_TEST("Prankster-affected moves don't affect Dark-type Pokémon")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_UMBREON].types[0] == TYPE_DARK);
|
||||
PLAYER(SPECIES_UMBREON);
|
||||
OPPONENT(SPECIES_MURKROW) { Ability(ABILITY_PRANKSTER); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_CONFUSE_RAY); }
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player);
|
||||
MESSAGE("It doesn't affect Umbreon…");
|
||||
}
|
||||
}
|
||||
TO_DO_BATTLE_TEST("Prankster-affected moves affect Ally Dark-type Pokémon")
|
||||
TO_DO_BATTLE_TEST("Prankster-affected moves called via Assist don't affect Dark-type Pokémon");
|
||||
TO_DO_BATTLE_TEST("Prankster-affected moves called via Nature Power don't affect Dark-type Pokémon");
|
||||
TO_DO_BATTLE_TEST("Prankster-affected moves called via Instruct affect Dark-type Pokémon");
|
||||
TO_DO_BATTLE_TEST("Prankster-affected moves called via After you affect Dark-type Pokémon");
|
||||
TO_DO_BATTLE_TEST("Prankster-affected moves that are bounced back by Magic Bounce/Coat can affect Dark-type Pokémon");
|
||||
TO_DO_BATTLE_TEST("Prankster-affected moves that are bounced back by Magic Coat from a Pokémon with Prankster can't affect Dark-type Pokémon");
|
||||
TO_DO_BATTLE_TEST("Prankster-affected moves that target all Pokémon are successful regardless of the presence of Dark-type Pokémon");
|
||||
TO_DO_BATTLE_TEST("Prankster-affected moves that target all Pokémon are successful regardless of the presence of Dark-type Pokémon");
|
||||
TO_DO_BATTLE_TEST("Prankster-affected move effects don't affect Dark-type Pokémon");
|
||||
TO_DO_BATTLE_TEST("Prankster increases the priority of moves by 1");
|
||||
TO_DO_BATTLE_TEST("Prankster increases the priority of status Z-Moves by 1");
|
||||
TO_DO_BATTLE_TEST("Prankster increases the priority of Extreme Evoboost by 1");
|
||||
TO_DO_BATTLE_TEST("Prankster is blocked by Quick Guard in Gen5+");
|
@ -10,7 +10,6 @@ SINGLE_BATTLE_TEST("Safety Goggles block powder and spore moves")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_STUN_SPORE].powderMove);
|
||||
ASSUME(gItems[ITEM_SAFETY_GOGGLES].holdEffect == HOLD_EFFECT_SAFETY_GOGGLES);
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_ABRA) { Item(ITEM_SAFETY_GOGGLES); }
|
||||
} WHEN {
|
||||
@ -21,6 +20,28 @@ SINGLE_BATTLE_TEST("Safety Goggles block powder and spore moves")
|
||||
}
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Safety Goggles blocks damage from hail");
|
||||
TO_DO_BATTLE_TEST("Safety Goggles blocks damage from sandstorm");
|
||||
SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Hail")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_HAIL); }
|
||||
} SCENE {
|
||||
NOT MESSAGE("Foe Wobbuffet is pelted by HAIL!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Sandstorm")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SANDSTORM); }
|
||||
} SCENE {
|
||||
NOT MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!");
|
||||
}
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Safety Goggles blocks Effect Spore's effect");
|
||||
|
33
test/battle/move_effect/aurora_veil.c
Normal file
33
test/battle/move_effect/aurora_veil.c
Normal file
@ -0,0 +1,33 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_AURORA_VEIL].effect == EFFECT_AURORA_VEIL);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Aurora Veil can only be used in Hail and Snow")
|
||||
{
|
||||
u32 move;
|
||||
PARAMETRIZE { move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE { move = MOVE_HAIL; }
|
||||
PARAMETRIZE { move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_AURORA_VEIL); }
|
||||
} SCENE {
|
||||
if (move == MOVE_CELEBRATE)
|
||||
MESSAGE("But it failed!");
|
||||
else
|
||||
NOT MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Aurora Veil reduces damage done to the user by half in singles")
|
||||
TO_DO_BATTLE_TEST("Aurora Veil reduces damage done to the user by roughly a third in doubles")
|
||||
TO_DO_BATTLE_TEST("Aurora Veil's damage reduction is ignored by Critical Hits")
|
||||
TO_DO_BATTLE_TEST("Aurora Veil's damage reduction doesn't stack with Reflect or Light Screen")
|
||||
TO_DO_BATTLE_TEST("Aurora Veil doesn't reduce confusion damage")
|
||||
TO_DO_BATTLE_TEST("Aurora Veil doesn't reduce damage done by moves that do direct damage") // Bide, Counter, Endeavor, Final Gambit, Metal Burst, Mirror Coat, Psywave, Seismic Toss, Sonic Boom, Super Fang
|
@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Ember inflicts burn")
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Ember cannot burn a Fire-type")
|
||||
SINGLE_BATTLE_TEST("Ember cannot burn a Fire-type Pokémon")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_CHARMANDER].types[0] == TYPE_FIRE);
|
||||
|
@ -4,6 +4,7 @@
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_POWDER_SNOW].effect == EFFECT_FREEZE_HIT);
|
||||
ASSUME(gBattleMoves[MOVE_BLIZZARD].accuracy == 70);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Powder Snow inflicts freeze")
|
||||
@ -21,7 +22,7 @@ SINGLE_BATTLE_TEST("Powder Snow inflicts freeze")
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type")
|
||||
SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type Pokémon")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_SNORUNT].types[0] == TYPE_ICE);
|
||||
@ -36,3 +37,30 @@ SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type")
|
||||
NOT STATUS_ICON(opponent, freeze: TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Freeze cannot be inflicted in Sunlight")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, MOVE_ICE_BEAM); }
|
||||
} SCENE {
|
||||
NOT MESSAGE("Wobbuffet was frozen solid!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Blizzard bypasses accuracy checks in Hail and Snow")
|
||||
{
|
||||
u32 move;
|
||||
PARAMETRIZE { move = MOVE_HAIL; }
|
||||
PARAMETRIZE { move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_BLIZZARD); }
|
||||
} SCENE {
|
||||
NONE_OF { MESSAGE("Wobbuffet's attack missed!"); }
|
||||
}
|
||||
}
|
||||
|
35
test/battle/move_effect/hurricane.c
Normal file
35
test/battle/move_effect/hurricane.c
Normal file
@ -0,0 +1,35 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_HURRICANE].effect == EFFECT_HURRICANE);
|
||||
ASSUME(gBattleMoves[MOVE_HURRICANE].accuracy == 70);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Hurricane's accuracy is lowered to 50% in Sunlight")
|
||||
{
|
||||
PASSES_RANDOMLY(50, 100, RNG_ACCURACY);
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, MOVE_HURRICANE); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_HURRICANE, opponent);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Hurricane bypasses accuracy checks in Rain")
|
||||
{
|
||||
PASSES_RANDOMLY(100, 100, RNG_ACCURACY);
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_RAIN_DANCE); MOVE(player, MOVE_HURRICANE); }
|
||||
} SCENE {
|
||||
NONE_OF { MESSAGE("Wobbuffet's attack missed!"); }
|
||||
}
|
||||
}
|
||||
TO_DO_BATTLE_TEST("Hurricane Veil can hit airborne targets") // Fly, Bounce, Sky Drop
|
26
test/battle/move_effect/leech_seed.c
Normal file
26
test/battle/move_effect/leech_seed.c
Normal file
@ -0,0 +1,26 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_LEECH_SEED].effect == EFFECT_LEECH_SEED);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Leech Seed doesn't affect Grass-type Pokémon")
|
||||
{
|
||||
PASSES_RANDOMLY(90, 100, RNG_ACCURACY);
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS);
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_ODDISH);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_LEECH_SEED); }
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player);
|
||||
MESSAGE("It doesn't affect Foe Oddish…");
|
||||
}
|
||||
}
|
||||
TO_DO_BATTLE_TEST("Leech Seed doesn't affect already seeded targets")
|
||||
TO_DO_BATTLE_TEST("Leech Seeded targets lose 1/8 of its max HP every turn and give it to the user")
|
||||
TO_DO_BATTLE_TEST("Leech Seed's effect is paused until a new battler replaces the original user's position") // Faint, can't be replaced, then revived.
|
||||
TO_DO_BATTLE_TEST("Leech Seed's effect pause still prevents it from being seeded again")
|
48
test/battle/move_effect/moonlight.c
Normal file
48
test/battle/move_effect/moonlight.c
Normal file
@ -0,0 +1,48 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_MOONLIGHT].effect == EFFECT_MOONLIGHT);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Moonlight recovers 1/2 of the user's max HP")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(200); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_MOONLIGHT); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(200 / 2));
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Moonlight recovers 2/3 of the user's max HP in Sunlight")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, MOVE_MOONLIGHT); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(300 / 1.5));
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Moonlight recovers 1/4 of the user's max HP in Rain, Sandstorm, Hail, and Snow")
|
||||
{
|
||||
u32 move;
|
||||
PARAMETRIZE { move = MOVE_RAIN_DANCE; }
|
||||
PARAMETRIZE { move = MOVE_SANDSTORM; }
|
||||
PARAMETRIZE { move = MOVE_HAIL; }
|
||||
PARAMETRIZE { move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_MOONLIGHT); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(400 / 4));
|
||||
}
|
||||
}
|
48
test/battle/move_effect/morning_sun.c
Normal file
48
test/battle/move_effect/morning_sun.c
Normal file
@ -0,0 +1,48 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_MORNING_SUN].effect == EFFECT_MORNING_SUN);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Morning Sun recovers 1/2 of the user's max HP")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(200); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_MORNING_SUN); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(200 / 2));
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Morning Sun recovers 2/3 of the user's max HP in Sunlight")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, MOVE_MORNING_SUN); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(300 / 1.5));
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Morning Sun recovers 1/4 of the user's max HP in Rain, Sandstorm, Hail, and Snow")
|
||||
{
|
||||
u32 move;
|
||||
PARAMETRIZE { move = MOVE_RAIN_DANCE; }
|
||||
PARAMETRIZE { move = MOVE_SANDSTORM; }
|
||||
PARAMETRIZE { move = MOVE_HAIL; }
|
||||
PARAMETRIZE { move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_MORNING_SUN); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(400 / 4));
|
||||
}
|
||||
}
|
26
test/battle/move_effect/ohko.c
Normal file
26
test/battle/move_effect/ohko.c
Normal file
@ -0,0 +1,26 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_SHEER_COLD].effect == EFFECT_OHKO);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(B_SHEER_COLD_IMMUNITY >= GEN_7);
|
||||
ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE);
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_GLALIE);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SHEER_COLD); }
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SHEER_COLD, player);
|
||||
MESSAGE("It doesn't affect Foe Glalie…");
|
||||
}
|
||||
}
|
||||
TO_DO_BATTLE_TEST("Fissure faints the target, skipping regular damage calculations")
|
||||
TO_DO_BATTLE_TEST("Fissure always fails if the target has a higher level than the user")
|
||||
TO_DO_BATTLE_TEST("Fissure's accuracy increases by 1% for every level the user has over the target")
|
||||
TO_DO_BATTLE_TEST("Fissure's ignores non-stage accuracy modifiers") // Gravity, Wide Lens, Compound Eyes
|
@ -4,6 +4,7 @@
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_POISON_STING].effect == EFFECT_POISON_HIT);
|
||||
ASSUME(gBattleMoves[MOVE_TWINEEDLE].effect == EFFECT_POISON_HIT);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Poison Sting inflicts poison")
|
||||
@ -22,16 +23,20 @@ SINGLE_BATTLE_TEST("Poison Sting inflicts poison")
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Poison Sting cannot poison Poison-type")
|
||||
SINGLE_BATTLE_TEST("Poison cannot be inflicted on Poison and Steel-type Pokémon")
|
||||
{
|
||||
u32 mon;
|
||||
PARAMETRIZE { mon = SPECIES_NIDORAN_M; }
|
||||
PARAMETRIZE { mon = SPECIES_REGISTEEL; }
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_NIDORAN_M].types[0] == TYPE_POISON);
|
||||
ASSUME(gSpeciesInfo[SPECIES_REGISTEEL].types[0] == TYPE_STEEL);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_NIDORAN_M);
|
||||
OPPONENT(mon);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_POISON_STING); }
|
||||
TURN { MOVE(player, MOVE_TWINEEDLE); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_STING, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_TWINEEDLE, player);
|
||||
HP_BAR(opponent);
|
||||
NOT ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
|
||||
NOT STATUS_ICON(opponent, poison: TRUE);
|
||||
|
167
test/battle/move_effect/solar_beam.c
Normal file
167
test/battle/move_effect/solar_beam.c
Normal file
@ -0,0 +1,167 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_SOLAR_BEAM].effect == EFFECT_SOLAR_BEAM);
|
||||
ASSUME(gBattleMoves[MOVE_SOLAR_BLADE].effect == EFFECT_SOLAR_BEAM);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Solar Beam and Solar Blade can be used instantly in Sunlight")
|
||||
{
|
||||
u32 move;
|
||||
PARAMETRIZE { move = MOVE_SOLAR_BEAM; }
|
||||
PARAMETRIZE { move = MOVE_SOLAR_BLADE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, move); }
|
||||
} SCENE {
|
||||
NOT MESSAGE("Wobbuffet took in sunlight!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Solar Beam's power is halved in Rain", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_RAIN_DANCE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); }
|
||||
TURN { SKIP_TURN(player); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Solar Blade's power is halved in Rain", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_RAIN_DANCE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); }
|
||||
TURN { SKIP_TURN(player); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Solar Beam's power is halved in a Sandstorm", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_SANDSTORM; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); }
|
||||
TURN { SKIP_TURN(player); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Solar Blade's power is halved in a Sandstorm", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_SANDSTORM; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); }
|
||||
TURN { SKIP_TURN(player); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Solar Beam's power is halved in Hail", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_HAIL; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); }
|
||||
TURN { SKIP_TURN(player); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Solar Blade's power is halved in Hail", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_HAIL; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); };
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); }
|
||||
TURN { SKIP_TURN(player); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Solar Beam's power is halved in Snow", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); }
|
||||
TURN { SKIP_TURN(player); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Solar Blade's power is halved in Snow", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); }
|
||||
TURN { SKIP_TURN(player); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
|
||||
}
|
||||
}
|
48
test/battle/move_effect/synthesis.c
Normal file
48
test/battle/move_effect/synthesis.c
Normal file
@ -0,0 +1,48 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_SYNTHESIS].effect == EFFECT_SYNTHESIS);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Synthesis recovers 1/2 of the user's max HP")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(200); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SYNTHESIS); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(200 / 2));
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Synthesis recovers 2/3 of the user's max HP in Sunlight")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SUNNY_DAY); MOVE(player, MOVE_SYNTHESIS); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(300 / 1.5));
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Synthesis recovers 1/4 of the user's max HP in Rain, Sandstorm, Hail, and Snow")
|
||||
{
|
||||
u32 move;
|
||||
PARAMETRIZE { move = MOVE_RAIN_DANCE; }
|
||||
PARAMETRIZE { move = MOVE_SANDSTORM; }
|
||||
PARAMETRIZE { move = MOVE_HAIL; }
|
||||
PARAMETRIZE { move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SYNTHESIS); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(400 / 4));
|
||||
}
|
||||
}
|
34
test/battle/move_effect/thunder.c
Normal file
34
test/battle/move_effect/thunder.c
Normal file
@ -0,0 +1,34 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_THUNDER].effect == EFFECT_THUNDER);
|
||||
ASSUME(gBattleMoves[MOVE_THUNDER].accuracy == 70);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Thunder's accuracy is lowered to 50% in Sunlight")
|
||||
{
|
||||
PASSES_RANDOMLY(50, 100, RNG_ACCURACY);
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, MOVE_THUNDER); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER, opponent);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Thunder bypasses accuracy checks in Rain")
|
||||
{
|
||||
PASSES_RANDOMLY(100, 100, RNG_ACCURACY);
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_RAIN_DANCE); MOVE(player, MOVE_THUNDER); }
|
||||
} SCENE {
|
||||
NONE_OF { MESSAGE("Wobbuffet's attack missed!"); }
|
||||
}
|
||||
}
|
@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes do not affect Steel-types")
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-types")
|
||||
SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-type Pokémon on switch in")
|
||||
{
|
||||
u32 species;
|
||||
u32 item = ITEM_NONE;
|
||||
@ -190,7 +190,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-types")
|
||||
// A Pokémon that gets passed magnet rise should still remove the Toxic
|
||||
// Spikes even though it is airborne.
|
||||
// The test currently fails, because we don't incorporate this bug.
|
||||
SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-types affected by Magnet Rise")
|
||||
SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-type Pokémon affected by Magnet Rise on switch in")
|
||||
{
|
||||
KNOWN_FAILING;
|
||||
GIVEN {
|
||||
|
80
test/battle/move_effect/weather_ball.c
Normal file
80
test/battle/move_effect/weather_ball.c
Normal file
@ -0,0 +1,80 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Fire-type move in Sunlight", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_SUNNY_DAY; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_MEGANIUM);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, move); }
|
||||
TURN { MOVE(player, MOVE_WEATHER_BALL); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(6.0), results[1].damage); // double base power + type effectiveness + sun 50% boost
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Water-type move in Rain", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_RAIN_DANCE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_ARCANINE);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, move); }
|
||||
TURN { MOVE(player, MOVE_WEATHER_BALL); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(6.0), results[1].damage); // double base power + type effectiveness + rain 50% boost
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Rock-type move in a Sandstorm", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_SANDSTORM; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_MAGMAR) { Item(ITEM_SAFETY_GOGGLES); };
|
||||
} WHEN {
|
||||
TURN { MOVE(player, move); }
|
||||
TURN { MOVE(player, MOVE_WEATHER_BALL); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.0), results[1].damage); // double base power + type effectiveness.
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to an Ice-type move in Hail and Snow", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_HAIL; }
|
||||
PARAMETRIZE{ move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_DRAGONAIR) { Item(ITEM_SAFETY_GOGGLES); };
|
||||
} WHEN {
|
||||
TURN { MOVE(player, move); }
|
||||
TURN { MOVE(player, MOVE_WEATHER_BALL); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.0), results[1].damage); // double base power + type effectiveness.
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
SINGLE_BATTLE_TEST("Grass-type Pokémon block powder and spore moves")
|
||||
SINGLE_BATTLE_TEST("Powder moves are blocked by Grass-type Pokémon")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_STUN_SPORE].powderMove);
|
31
test/battle/weather/hail.c
Normal file
31
test/battle/weather/hail.c
Normal file
@ -0,0 +1,31 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
// Please add Hail interactions with move, item and ability effects on their respective files.
|
||||
SINGLE_BATTLE_TEST("Hail deals 1/16 damage per turn")
|
||||
{
|
||||
s16 hailDamage;
|
||||
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_GLALIE);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN {MOVE(player, MOVE_HAIL);}
|
||||
} SCENE {
|
||||
MESSAGE("Foe Wobbuffet is pelted by HAIL!");
|
||||
HP_BAR(opponent, captureDamage: &hailDamage);
|
||||
} THEN { EXPECT_EQ(hailDamage, opponent->maxHP / 16); }
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Hail damage does not affect Ice-type Pokémon")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_GLALIE);
|
||||
} WHEN {
|
||||
TURN {MOVE(player, MOVE_HAIL);}
|
||||
} SCENE {
|
||||
NOT MESSAGE("Foe Glalie is pelted by HAIL!");
|
||||
}
|
||||
}
|
66
test/battle/weather/sandstorm.c
Normal file
66
test/battle/weather/sandstorm.c
Normal file
@ -0,0 +1,66 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
// Please add Sandstorm interactions with move, item and ability effects on their respective files.
|
||||
SINGLE_BATTLE_TEST("Sandstorm deals 1/16 damage per turn")
|
||||
{
|
||||
s16 sandstormDamage;
|
||||
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_SANDSLASH);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN {MOVE(player, MOVE_SANDSTORM);}
|
||||
} SCENE {
|
||||
MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!");
|
||||
HP_BAR(opponent, captureDamage: &sandstormDamage);
|
||||
} THEN { EXPECT_EQ(sandstormDamage, opponent->maxHP / 16); }
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Sandstorm multiplies the special defense of Rock-types by 1.5x", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_SANDSTORM; }
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) ;
|
||||
OPPONENT(SPECIES_NOSEPASS);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); }
|
||||
TURN { MOVE(player, MOVE_SWIFT); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Sandstorm damage does not hurt Ground, Rock, and Steel-type Pokémon")
|
||||
{
|
||||
u32 mon;
|
||||
PARAMETRIZE { mon = SPECIES_SANDSLASH; }
|
||||
PARAMETRIZE { mon = SPECIES_NOSEPASS; }
|
||||
PARAMETRIZE { mon = SPECIES_REGISTEEL; }
|
||||
GIVEN {
|
||||
ASSUME(gSpeciesInfo[SPECIES_SANDSLASH].types[0] == TYPE_GROUND);
|
||||
ASSUME(gSpeciesInfo[SPECIES_NOSEPASS].types[0] == TYPE_ROCK);
|
||||
ASSUME(gSpeciesInfo[SPECIES_REGISTEEL].types[0] == TYPE_STEEL);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(mon);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SANDSTORM); }
|
||||
} SCENE {
|
||||
switch (mon)
|
||||
{
|
||||
case SPECIES_SANDSLASH:
|
||||
NOT MESSAGE("Foe Sandslash is buffeted by the sandstorm!");
|
||||
break;
|
||||
case SPECIES_NOSEPASS:
|
||||
NOT MESSAGE("Foe Nosepass is buffeted by the sandstorm!");
|
||||
break;
|
||||
case SPECIES_REGISTEEL:
|
||||
NOT MESSAGE("Foe Registeel is buffeted by the sandstorm!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
// Please add Snow interactions with move, item and ability effects on their respective files.
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(gBattleMoves[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE);
|
||||
@ -8,7 +9,7 @@ ASSUMPTIONS
|
||||
ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE || gSpeciesInfo[SPECIES_GLALIE].types[1] == TYPE_ICE);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Snow increases the defense of Ice types by 50 %", s16 damage)
|
||||
SINGLE_BATTLE_TEST("Snow multiplies the defense of Ice-types by 1.5x", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_SNOWSCAPE; }
|
||||
@ -25,126 +26,3 @@ SINGLE_BATTLE_TEST("Snow increases the defense of Ice types by 50 %", s16 damage
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Snow turns Weather Ball to an Ice-type move and doubles its power", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_DRAGONAIR);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, move); }
|
||||
TURN { MOVE(player, MOVE_WEATHER_BALL); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.0), results[1].damage); // double base power + type effectiveness.
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Snow allows Blizzard to bypass accuracy checks")
|
||||
{
|
||||
PASSES_RANDOMLY(100, 100, RNG_ACCURACY);
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_BLIZZARD].accuracy == 70);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_BLIZZARD); }
|
||||
} SCENE {
|
||||
NONE_OF { MESSAGE("Wobbuffet's attack missed!"); }
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Snow halves the power of Solar Beam", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_SOLAR_BEAM].effect == EFFECT_SOLAR_BEAM);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); }
|
||||
TURN { SKIP_TURN(player); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Snow halves the power of Solar Blade", s16 damage)
|
||||
{
|
||||
u16 move;
|
||||
PARAMETRIZE{ move = MOVE_CELEBRATE; }
|
||||
PARAMETRIZE{ move = MOVE_SNOWSCAPE; }
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_SOLAR_BLADE].effect == EFFECT_SOLAR_BEAM);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); }
|
||||
TURN { SKIP_TURN(player); }
|
||||
} SCENE {
|
||||
HP_BAR(opponent, captureDamage: &results[i].damage);
|
||||
} FINALLY {
|
||||
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Snow causes Moonlight to recover 1/4 of the user's max HP")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_MOONLIGHT].effect == EFFECT_MOONLIGHT);
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MOONLIGHT); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(400 / 4));
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Snow causes Moonlight to recover 1/4 of the user's max HP")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_MOONLIGHT].effect == EFFECT_MOONLIGHT);
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MOONLIGHT); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(400 / 4));
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Snow causes Synthesis to recover 1/4 of the user's max HP")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_SYNTHESIS].effect == EFFECT_SYNTHESIS);
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_SYNTHESIS); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(400 / 4));
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Snow causes Morning Sun to recover 1/4 of the user's max HP")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gBattleMoves[MOVE_MORNING_SUN].effect == EFFECT_MORNING_SUN);
|
||||
PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(400); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SNOWSCAPE); MOVE(player, MOVE_MORNING_SUN); }
|
||||
} SCENE {
|
||||
HP_BAR(player, damage: -(400 / 4));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user