khbsd e385c7f59f
feat: change defines in constants/abilities.h to an enum (#7006)
Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
2025-09-29 21:35:09 +02:00

60 lines
2.2 KiB
C

#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(GetMoveEffect(MOVE_SPEED_SWAP) == EFFECT_SPEED_SWAP);
}
SINGLE_BATTLE_TEST("Speed Swap swaps user and target's speed stats")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Speed(6); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(10); }
}WHEN {
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_SPEED_SWAP); }
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_SCRATCH); }
} SCENE {
// Turn 1
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPEED_SWAP, player);
// Turn 2
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
} THEN {
EXPECT_EQ(player->speed, 10);
EXPECT_EQ(opponent->speed, 6);
}
}
SINGLE_BATTLE_TEST("Speed Swap doesn't swap user and target's speed modifiers")
{
u32 species, move;
enum Ability ability;
PARAMETRIZE { species = SPECIES_WOBBUFFET; ability = ABILITY_TELEPATHY; move = MOVE_ROCK_POLISH; } // x2.0
PARAMETRIZE { species = SPECIES_PSYDUCK; ability = ABILITY_SWIFT_SWIM; move = MOVE_RAIN_DANCE; } // x2.0
GIVEN {
ASSUME(GetMoveEffect(MOVE_ROCK_POLISH) == EFFECT_SPEED_UP_2);
ASSUME(GetMoveEffect(MOVE_RAIN_DANCE) == EFFECT_RAIN_DANCE);
PLAYER(SPECIES_WOBBUFFET) { Speed(8); }
OPPONENT(species) { Speed(10); Ability(ability); }
}WHEN {
TURN { MOVE(opponent, move); MOVE(player, MOVE_SPEED_SWAP); }
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_SCRATCH); }
} SCENE {
// Turn 1
ANIMATION(ANIM_TYPE_MOVE, move, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPEED_SWAP, player);
// Turn 2
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); // Opponent is still first
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
} THEN {
EXPECT_EQ(player->speed, 10);
EXPECT_EQ(opponent->speed, 8);
if (move == MOVE_ROCK_POLISH) {
EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE);
EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2);
}
}
}