Add tests for Hadron Engine and Psyblade (#9314)

This commit is contained in:
GGbond 2026-02-23 21:50:03 +08:00 committed by GitHub
parent 484eef4143
commit d2ae1175c4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 76 additions and 2 deletions

View File

@ -1,4 +1,45 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Hadron Engine (Ability) test titles")
SINGLE_BATTLE_TEST("Hadron Engine creates Electric Terrain when entering the battle")
{
GIVEN {
PLAYER(SPECIES_MIRAIDON) { Ability(ABILITY_HADRON_ENGINE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {}
} SCENE {
ABILITY_POPUP(player, ABILITY_HADRON_ENGINE);
MESSAGE("An electric current ran across the battlefield!");
}
}
SINGLE_BATTLE_TEST("Hadron Engine boosts the Pokemon's Special Attack on Electric Terrain even if not grounded", s16 damage)
{
bool32 overrideTerrain, airBalloon;
PARAMETRIZE { airBalloon = FALSE; overrideTerrain = TRUE; }
PARAMETRIZE { airBalloon = FALSE; overrideTerrain = FALSE; }
PARAMETRIZE { airBalloon = TRUE; overrideTerrain = TRUE; }
PARAMETRIZE { airBalloon = TRUE; overrideTerrain = FALSE; }
GIVEN {
ASSUME(gItemsInfo[ITEM_AIR_BALLOON].holdEffect == HOLD_EFFECT_AIR_BALLOON);
ASSUME(GetMoveEffect(MOVE_GRASSY_TERRAIN) == EFFECT_GRASSY_TERRAIN);
ASSUME(GetMoveCategory(MOVE_POWER_GEM) == DAMAGE_CATEGORY_SPECIAL);
PLAYER(SPECIES_MIRAIDON) { Ability(ABILITY_HADRON_ENGINE); Moves(MOVE_POWER_GEM, MOVE_CELEBRATE); Item(airBalloon ? ITEM_AIR_BALLOON : ITEM_NONE); Speed(1); }
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_GRASSY_TERRAIN, MOVE_CELEBRATE); Speed(2); }
} WHEN {
if (overrideTerrain)
TURN { MOVE(opponent, MOVE_GRASSY_TERRAIN); }
TURN { MOVE(player, MOVE_POWER_GEM); }
} SCENE {
if (overrideTerrain)
ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_POWER_GEM, player);
HP_BAR(opponent, captureDamage: &results[i].damage);
} FINALLY {
EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3333), results[1].damage);
EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.3333), results[3].damage);
}
}

View File

@ -1,4 +1,37 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Psyblade (Move Effect) test titles")
ASSUMPTIONS
{
ASSUME(GetMoveEffect(MOVE_PSYBLADE) == EFFECT_PSYBLADE);
}
SINGLE_BATTLE_TEST("Psyblade's power increases by 50% on Electric Terrain even if the user is not grounded", s16 damage)
{
bool32 terrain, airBalloon;
PARAMETRIZE { terrain = FALSE; airBalloon = FALSE; }
PARAMETRIZE { terrain = TRUE; airBalloon = FALSE; }
PARAMETRIZE { terrain = FALSE; airBalloon = TRUE; }
PARAMETRIZE { terrain = TRUE; airBalloon = TRUE; }
GIVEN {
ASSUME(gItemsInfo[ITEM_AIR_BALLOON].holdEffect == HOLD_EFFECT_AIR_BALLOON);
ASSUME(GetMoveEffect(MOVE_ELECTRIC_TERRAIN) == EFFECT_ELECTRIC_TERRAIN);
ASSUME(GetMoveEffect(MOVE_PSYBLADE) == EFFECT_PSYBLADE);
PLAYER(SPECIES_SLOWKING) { Moves(MOVE_ELECTRIC_TERRAIN, MOVE_PSYBLADE); Item(airBalloon ? ITEM_AIR_BALLOON : ITEM_NONE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
if (terrain)
TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); }
TURN { MOVE(player, MOVE_PSYBLADE); }
} SCENE {
if (terrain)
ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYBLADE, player);
HP_BAR(opponent, captureDamage: &results[i].damage);
} FINALLY {
EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.5), results[3].damage);
}
}