reviewer feedback + additional tests

This commit is contained in:
Moos Toet 2025-12-13 16:53:09 +01:00
parent fc2242cd68
commit efbbd4130f
5 changed files with 142 additions and 13 deletions

View File

@ -713,12 +713,12 @@ enum FaintedActions
F(STARTING_STATUS_TOXIC_SPIKES_PLAYER_L2, toxicSpikesPlayerL2, (u32, 1)) /* Toxic Spikes Player Layer 2 */ \
F(STARTING_STATUS_TOXIC_SPIKES_OPPONENT_L1, toxicSpikesOpponentL1, (u32, 1)) /* Toxic Spikes Opponent Layer 1 */ \
F(STARTING_STATUS_TOXIC_SPIKES_OPPONENT_L2, toxicSpikesOpponentL2, (u32, 1)) /* Toxic Spikes Opponent Layer 2 */ \
F(STARTING_STATUS_STICKY_WEB_PLAYER, stickyWebPlayer, (u32, 1)) /* Sticky Web Player */ \
F(STARTING_STATUS_STICKY_WEB_OPPONENT, stickyWebOpponent, (u32, 1)) /* Sticky Web Opponent */ \
F(STARTING_STATUS_STEALTH_ROCK_PLAYER, stealthRockPlayer, (u32, 1)) /* Stealth Rock Player */ \
F(STARTING_STATUS_STEALTH_ROCK_OPPONENT, stealthRockOpponent, (u32, 1)) /* Stealth Rock Opponent */ \
F(STARTING_STATUS_SHARP_STEEL_PLAYER, sharpSteelPlayer, (u32, 1)) /* Sharp Steel Player */ \
F(STARTING_STATUS_SHARP_STEEL_OPPONENT, sharpSteelOpponent, (u32, 1)) /* Sharp Steel Opponent */ \
F(STARTING_STATUS_STICKY_WEB_PLAYER, stickyWebPlayer, (u32, 1)) /* Sticky Web Player */ \
F(STARTING_STATUS_STICKY_WEB_OPPONENT, stickyWebOpponent, (u32, 1)) /* Sticky Web Opponent */ \
F(STARTING_STATUS_STEALTH_ROCK_PLAYER, stealthRockPlayer, (u32, 1)) /* Stealth Rock Player */ \
F(STARTING_STATUS_STEALTH_ROCK_OPPONENT, stealthRockOpponent, (u32, 1)) /* Stealth Rock Opponent */ \
F(STARTING_STATUS_SHARP_STEEL_PLAYER, sharpSteelPlayer, (u32, 1)) /* Sharp Steel Player */ \
F(STARTING_STATUS_SHARP_STEEL_OPPONENT, sharpSteelOpponent, (u32, 1)) /* Sharp Steel Opponent */ \
#define UNPACK_STARTING_STATUS_ENUMS(_enum, ...) _enum,

View File

@ -3607,9 +3607,7 @@ bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, enum Ability ability
static u32 GetFirstBattlerOnSide(u32 side)
{
u32 battler;
for (battler = 0; battler < gBattlersCount; battler++)
for (u32 battler = 0; battler < gBattlersCount; battler++)
{
if (GetBattlerSide(battler) == side && !(gAbsentBattlerFlags & (1u << battler)))
return battler;

View File

@ -8,6 +8,7 @@ SINGLE_BATTLE_TEST("SetStartingStatus can start Spikes on the opposing side", s1
u32 divisor;
PARAMETRIZE { startingHazard = STARTING_STATUS_SPIKES_OPPONENT_L1; divisor = 8; }
PARAMETRIZE { startingHazard = STARTING_STATUS_SPIKES_OPPONENT_L2; divisor = 6; }
PARAMETRIZE { startingHazard = STARTING_STATUS_SPIKES_OPPONENT_L3; divisor = 4; }
SetStartingStatus(startingHazard);
@ -88,6 +89,8 @@ SINGLE_BATTLE_TEST("Starting Sticky Web lowers Speed on entry")
SINGLE_BATTLE_TEST("Starting Stealth Rock damages the opposing switch-in")
{
ASSUME(gSpeciesInfo[SPECIES_CHARIZARD].types[0] == TYPE_FIRE);
ASSUME(gSpeciesInfo[SPECIES_CHARIZARD].types[1] == TYPE_FLYING);
SetStartingStatus(STARTING_STATUS_STEALTH_ROCK_OPPONENT);
GIVEN {
@ -108,6 +111,7 @@ SINGLE_BATTLE_TEST("Starting Stealth Rock damages the opposing switch-in")
SINGLE_BATTLE_TEST("Starting sharp steel damages the opposing switch-in")
{
ASSUME(gSpeciesInfo[SPECIES_SYLVEON].types[0] == TYPE_FAIRY);
SetStartingStatus(STARTING_STATUS_SHARP_STEEL_OPPONENT);
GIVEN {
@ -125,3 +129,133 @@ SINGLE_BATTLE_TEST("Starting sharp steel damages the opposing switch-in")
ResetStartingStatuses();
}
}
// Player-side hazard tests
SINGLE_BATTLE_TEST("SetStartingStatus can start Spikes on the player side", s16 damage)
{
u16 startingHazard;
u32 divisor;
PARAMETRIZE { startingHazard = STARTING_STATUS_SPIKES_PLAYER_L1; divisor = 8; }
PARAMETRIZE { startingHazard = STARTING_STATUS_SPIKES_PLAYER_L2; divisor = 6; }
PARAMETRIZE { startingHazard = STARTING_STATUS_SPIKES_PLAYER_L3; divisor = 4; }
SetStartingStatus(startingHazard);
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { SWITCH(player, 1); }
} SCENE {
MESSAGE("Go! Wynaut!");
s32 maxHP = GetMonData(&PLAYER_PARTY[1], MON_DATA_MAX_HP);
HP_BAR(player, damage: maxHP / divisor);
MESSAGE("Wynaut was hurt by the spikes!");
} FINALLY {
ResetStartingStatuses();
}
}
SINGLE_BATTLE_TEST("Starting Toxic Spikes poison the player's switch-in")
{
SetStartingStatus(STARTING_STATUS_TOXIC_SPIKES_PLAYER_L1);
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { SWITCH(player, 1); }
} SCENE {
MESSAGE("Go! Wynaut!");
MESSAGE("Wynaut was poisoned!");
STATUS_ICON(player, poison: TRUE);
NOT STATUS_ICON(player, badPoison: TRUE);
} THEN {
ResetStartingStatuses();
}
}
SINGLE_BATTLE_TEST("Starting Toxic Spikes badly poison the player's switch-in")
{
SetStartingStatus(STARTING_STATUS_TOXIC_SPIKES_PLAYER_L2);
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { SWITCH(player, 1); }
} SCENE {
MESSAGE("Go! Wynaut!");
MESSAGE("Wynaut was badly poisoned!");
STATUS_ICON(player, badPoison: TRUE);
} THEN {
ResetStartingStatuses();
}
}
SINGLE_BATTLE_TEST("Starting Sticky Web lowers Speed on player's entry")
{
SetStartingStatus(STARTING_STATUS_STICKY_WEB_PLAYER);
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { SWITCH(player, 1); }
} SCENE {
MESSAGE("Go! Wynaut!");
MESSAGE("Wynaut was caught in a sticky web!");
MESSAGE("Wynaut's Speed fell!");
} THEN {
ResetStartingStatuses();
}
}
SINGLE_BATTLE_TEST("Starting Stealth Rock damages the player's switch-in")
{
ASSUME(gSpeciesInfo[SPECIES_CHARIZARD].types[0] == TYPE_FIRE);
ASSUME(gSpeciesInfo[SPECIES_CHARIZARD].types[1] == TYPE_FLYING);
SetStartingStatus(STARTING_STATUS_STEALTH_ROCK_PLAYER);
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_CHARIZARD);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { SWITCH(player, 1); }
} SCENE {
MESSAGE("Go! Charizard!");
s32 maxHP = GetMonData(&PLAYER_PARTY[1], MON_DATA_MAX_HP);
HP_BAR(player, damage: maxHP / 2);
MESSAGE("Pointed stones dug into Charizard!");
} THEN {
ResetStartingStatuses();
}
}
SINGLE_BATTLE_TEST("Starting sharp steel damages the player's switch-in")
{
ASSUME(gSpeciesInfo[SPECIES_SYLVEON].types[0] == TYPE_FAIRY);
SetStartingStatus(STARTING_STATUS_SHARP_STEEL_PLAYER);
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_SYLVEON);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { SWITCH(player, 1); }
} SCENE {
MESSAGE("Go! Sylveon!");
s32 maxHP = GetMonData(&PLAYER_PARTY[1], MON_DATA_MAX_HP);
HP_BAR(player, damage: maxHP / 4);
MESSAGE("The sharp steel bit into Sylveon!");
} THEN {
ResetStartingStatuses();
}
}

View File

@ -237,7 +237,6 @@ static u32 BattleTest_EstimateCost(void *data)
STATE->runRandomly = TRUE;
ResetStartingStatuses();
InvokeTestFunction(test);
ResetStartingStatuses();
cost = 1;
if (STATE->parametersCount != 0)
cost *= STATE->parametersCount;

View File

@ -1681,9 +1681,7 @@ static void fprint_symbol(FILE *f, struct String s)
}
fputc(c + 'a' - 'A', f);
}
else if ('a' <= c && c <= 'z')
fputc(c, f);
else if ('0' <= c && c <= '9')
else if (('a' <= c && c <= 'z') || ('0' <= c && c <= '9'))
fputc(c, f);
else if (c == '\'')
;