pokeemmo/test/battle/badge_boost.c
2026-02-06 11:57:33 +01:00

167 lines
4.9 KiB
C

#include "global.h"
#include "event_data.h"
#include "test/battle.h"
WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_ATTACK boost Attack", s16 dmg)
{
u32 badge = 0;
u32 genConfig = 0;
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
PARAMETRIZE { badge = FALSE; genConfig = gen; }
PARAMETRIZE { badge = TRUE; genConfig = gen; }
}
GIVEN {
if (badge)
FlagSet(B_FLAG_BADGE_BOOST_ATTACK);
else
FlagClear(B_FLAG_BADGE_BOOST_ATTACK);
WITH_CONFIG(B_BADGE_BOOST, genConfig);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); }
} SCENE {
HP_BAR(opponent, captureDamage: &results[i].dmg);
} FINALLY {
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
if (gen <= GEN_3)
EXPECT_GT(results[2 * gen + 1].dmg, results[2 * gen].dmg);
else
EXPECT_EQ(results[2 * gen + 1].dmg, results[2 * gen].dmg);
}
}
}
WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPATK boost Special Attack", s16 dmg)
{
u32 badge = 0;
u32 genConfig = 0;
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
PARAMETRIZE { badge = FALSE; genConfig = gen; }
PARAMETRIZE { badge = TRUE; genConfig = gen; }
}
GIVEN {
if (badge)
FlagSet(B_FLAG_BADGE_BOOST_SPATK);
else
FlagClear(B_FLAG_BADGE_BOOST_SPATK);
WITH_CONFIG(B_BADGE_BOOST, genConfig);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_THUNDER_SHOCK); }
} SCENE {
HP_BAR(opponent, captureDamage: &results[i].dmg);
} FINALLY {
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
if (gen <= GEN_3)
EXPECT_GT(results[2 * gen + 1].dmg, results[2 * gen].dmg);
else
EXPECT_EQ(results[2 * gen + 1].dmg, results[2 * gen].dmg);
}
}
}
WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_DEFENSE boost Defense", s16 dmg)
{
u32 badge = 0;
u32 genConfig = 0;
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
PARAMETRIZE { badge = FALSE; genConfig = gen; }
PARAMETRIZE { badge = TRUE; genConfig = gen; }
}
GIVEN {
if (badge)
FlagSet(B_FLAG_BADGE_BOOST_DEFENSE);
else
FlagClear(B_FLAG_BADGE_BOOST_DEFENSE);
WITH_CONFIG(B_BADGE_BOOST, genConfig);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); }
} SCENE {
HP_BAR(player, captureDamage: &results[i].dmg);
} FINALLY {
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
if (gen <= GEN_3)
EXPECT_LT(results[2 * gen + 1].dmg, results[2 * gen].dmg);
else
EXPECT_EQ(results[2 * gen + 1].dmg, results[2 * gen].dmg);
}
}
}
WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPDEF boost Special Defense", s16 dmg)
{
u32 badge = 0;
u32 genConfig = 0;
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
PARAMETRIZE { badge = FALSE; genConfig = gen; }
PARAMETRIZE { badge = TRUE; genConfig = gen; }
}
GIVEN {
if (badge)
FlagSet(B_FLAG_BADGE_BOOST_SPDEF);
else
FlagClear(B_FLAG_BADGE_BOOST_SPDEF);
WITH_CONFIG(B_BADGE_BOOST, genConfig);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_THUNDER_SHOCK); }
} SCENE {
HP_BAR(player, captureDamage: &results[i].dmg);
} FINALLY {
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
if (gen <= GEN_3)
EXPECT_LT(results[2 * gen + 1].dmg, results[2 * gen].dmg);
else
EXPECT_EQ(results[2 * gen + 1].dmg, results[2 * gen].dmg);
}
}
}
WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPEED boost Speed", s16 dmg)
{
u32 badge = 0;
u32 genConfig = 0;
for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++)
{
PARAMETRIZE { badge = FALSE; genConfig = gen; }
PARAMETRIZE { badge = TRUE; genConfig = gen; }
}
GIVEN {
if (badge)
FlagSet(B_FLAG_BADGE_BOOST_SPEED);
else
FlagClear(B_FLAG_BADGE_BOOST_SPEED);
WITH_CONFIG(B_BADGE_BOOST, genConfig);
PLAYER(SPECIES_WOBBUFFET) { Speed(100); HP(1); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(101); HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_SCRATCH); }
} THEN {
if (badge && genConfig <= GEN_3)
{
EXPECT_EQ(opponent->hp, 0);
EXPECT_EQ(player->hp, 1);
}
else
{
EXPECT_EQ(opponent->hp, 1);
EXPECT_EQ(player->hp, 0);
}
}
}