2025-08-29 20:49:28 +02:00

114 lines
3.6 KiB
C

#include "global.h"
#include "test/battle.h"
DOUBLE_BATTLE_TEST("Life Dew fails if user and partner are both at full hp")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, MOVE_LIFE_DEW); }
} SCENE {
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_LIFE_DEW, playerLeft);
MESSAGE("But it failed!");
}
}
DOUBLE_BATTLE_TEST("Life Dew recovers 25% of hp for both user and partner")
{
s16 healing[2];
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_WYNAUT) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, MOVE_LIFE_DEW); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_LIFE_DEW, playerLeft);
HP_BAR(playerLeft, captureDamage: &healing[0]);
MESSAGE("Wobbuffet's HP was restored.");
HP_BAR(playerRight, captureDamage: &healing[1]);
MESSAGE("Wynaut's HP was restored.");
} THEN {
EXPECT_EQ(playerLeft->maxHP / 4, -healing[0]);
EXPECT_EQ(playerRight->maxHP / 4, -healing[1]);
}
}
SINGLE_BATTLE_TEST("Life Dew works in singles on user")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_LIFE_DEW); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_LIFE_DEW, player);
HP_BAR(player);
NOT HP_BAR(opponent);
}
}
DOUBLE_BATTLE_TEST("Life Dew only works on user if partner is at full hp")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, MOVE_LIFE_DEW); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_LIFE_DEW, playerLeft);
HP_BAR(playerLeft);
NOT HP_BAR(playerRight);
}
}
DOUBLE_BATTLE_TEST("Life Dew only works on partner if user is at full hp")
{
GIVEN {
PLAYER(SPECIES_WYNAUT);
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, MOVE_LIFE_DEW); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_LIFE_DEW, playerLeft);
NOT HP_BAR(playerLeft);
HP_BAR(playerRight);
}
}
AI_SINGLE_BATTLE_TEST("AI uses Life Dew if it outheals your damage and outspeeds (singles)")
{
PASSES_RANDOMLY(100, 100, RNG_AI_SHOULD_RECOVER);
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
PLAYER(SPECIES_WOBBUFFET) { Speed(2); Moves(MOVE_TACKLE); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Moves(MOVE_SCALD, MOVE_LIFE_DEW); HP(1); }
} WHEN {
TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_LIFE_DEW); }
}
}
AI_DOUBLE_BATTLE_TEST("AI uses Life Dew if it outheals your damage and outspeeds (doubles)")
{
PASSES_RANDOMLY(100, 100, RNG_AI_SHOULD_RECOVER);
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
PLAYER(SPECIES_WOBBUFFET) { Speed(2); Moves(MOVE_TACKLE); }
PLAYER(SPECIES_WOBBUFFET) { Speed(2); Moves(MOVE_TACKLE); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Moves(MOVE_SCALD, MOVE_LIFE_DEW); HP(1); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Moves(MOVE_SCALD); HP(1); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_TACKLE); MOVE(playerRight, MOVE_TACKLE); EXPECT_MOVE(opponentLeft, MOVE_LIFE_DEW); }
}
}