GGbond 164e0c7ebc
Fix Present heal miss-flag handling and enforce Telepathy blocking (#9170)
Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
2026-02-10 13:56:38 +01:00

64 lines
2.1 KiB
C

#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(GetMoveEffect(MOVE_PRESENT) == EFFECT_PRESENT);
}
SINGLE_BATTLE_TEST("Present healing through Wonder Guard is still considered to have affected the target")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_MIRROR_MOVE) == EFFECT_MIRROR_MOVE);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); HP(1); MaxHP(100); }
} WHEN {
TURN { MOVE(player, MOVE_PRESENT, WITH_RNG(RNG_PRESENT, 254)); }
TURN { MOVE(opponent, MOVE_MIRROR_MOVE, WITH_RNG(RNG_PRESENT, 1)); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_PRESENT, player);
HP_BAR(opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_MIRROR_MOVE, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_PRESENT, opponent);
HP_BAR(player);
}
}
DOUBLE_BATTLE_TEST("Present healing is blocked by Telepathy on an ally target")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); HP(50); MaxHP(100); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, MOVE_PRESENT, target: playerRight, WITH_RNG(RNG_PRESENT, 254)); }
} SCENE {
NONE_OF {
ANIMATION(ANIM_TYPE_MOVE, MOVE_PRESENT, playerLeft);
HP_BAR(playerRight);
}
} THEN {
EXPECT_EQ(playerRight->hp, 50);
}
}
SINGLE_BATTLE_TEST("Present with Parental Bond hits twice when damaging, but only once when healing")
{
GIVEN {
ASSUME(GetSpeciesAbility(SPECIES_KANGASKHAN_MEGA, 0) == ABILITY_PARENTAL_BOND);
PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_PRESENT, gimmick: GIMMICK_MEGA, WITH_RNG(RNG_PRESENT, 1)); }
TURN { MOVE(player, MOVE_PRESENT, WITH_RNG(RNG_PRESENT, 254)); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_PRESENT, player);
HP_BAR(opponent);
HP_BAR(opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_PRESENT, player);
HP_BAR(opponent);
NOT HP_BAR(opponent);
}
}