Add tests for Future Sight interaction with Ally Switch (#9300)

This commit is contained in:
GGbond 2026-02-23 21:54:46 +08:00 committed by GitHub
parent 8334c68422
commit a3d041b8af
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -92,24 +92,24 @@ DOUBLE_BATTLE_TEST("Ally Switch does not redirect the target of Snipe Shot")
DOUBLE_BATTLE_TEST("Ally Switch does not redirect moves done by Pokémon with Stalwart and Propeller Tail") DOUBLE_BATTLE_TEST("Ally Switch does not redirect moves done by Pokémon with Stalwart and Propeller Tail")
{ {
u16 species;
enum Ability ability; enum Ability ability;
PARAMETRIZE { ability = ABILITY_STALWART; } PARAMETRIZE { species = SPECIES_DURALUDON; ability = ABILITY_STALWART; }
PARAMETRIZE { ability = ABILITY_PROPELLER_TAIL; } PARAMETRIZE { species = SPECIES_ARROKUDA; ability = ABILITY_PROPELLER_TAIL; }
PARAMETRIZE { ability = ABILITY_TELEPATHY; } PARAMETRIZE { species = SPECIES_RALTS; ability = ABILITY_TELEPATHY; }
GIVEN { GIVEN {
PLAYER(SPECIES_WOBBUFFET); // Wobb is playerLeft, but it'll be Wynaut after Ally Switch PLAYER(SPECIES_WOBBUFFET); // Wobb is playerLeft, but it'll be Wynaut after Ally Switch
PLAYER(SPECIES_WYNAUT); PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_KADABRA) { Ability(ability); } OPPONENT(species) { Ability(ability); }
OPPONENT(SPECIES_ABRA); OPPONENT(SPECIES_ABRA);
} WHEN { } WHEN {
TURN { MOVE(playerLeft, MOVE_ALLY_SWITCH); MOVE(opponentLeft, MOVE_SCRATCH, target:playerRight); } // Kadabra targets playerRight Wynaut. TURN { MOVE(playerLeft, MOVE_ALLY_SWITCH); MOVE(opponentLeft, MOVE_SCRATCH, target:playerRight); } // Opponent targets playerRight Wynaut.
} SCENE { } SCENE {
MESSAGE("Wobbuffet used Ally Switch!"); MESSAGE("Wobbuffet used Ally Switch!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft);
MESSAGE("Wobbuffet and Wynaut switched places!"); MESSAGE("Wobbuffet and Wynaut switched places!");
MESSAGE("The opposing Kadabra used Scratch!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponentLeft);
HP_BAR((ability == ABILITY_STALWART || ability == ABILITY_PROPELLER_TAIL) ? playerLeft : playerRight); HP_BAR((ability == ABILITY_STALWART || ability == ABILITY_PROPELLER_TAIL) ? playerLeft : playerRight);
} }
@ -218,6 +218,7 @@ DOUBLE_BATTLE_TEST("Ally Switch increases the Protect-like moves counter (Gen9+)
DOUBLE_BATTLE_TEST("Ally Switch works if ally used two-turn move like Dig") DOUBLE_BATTLE_TEST("Ally Switch works if ally used two-turn move like Dig")
{ {
GIVEN { GIVEN {
ASSUME(gBattleMoveEffects[GetMoveEffect(MOVE_DIG)].twoTurnEffect);
PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT); PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET);
@ -313,9 +314,8 @@ DOUBLE_BATTLE_TEST("Ally switch swaps opposing sky drop targets if partner is be
DOUBLE_BATTLE_TEST("Ally Switch swaps Illusion data") DOUBLE_BATTLE_TEST("Ally Switch swaps Illusion data")
{ {
GIVEN { GIVEN {
ASSUME(GetMoveEffect(MOVE_ALLY_SWITCH) == EFFECT_ALLY_SWITCH);
PLAYER(SPECIES_HOOPA); PLAYER(SPECIES_HOOPA);
PLAYER(SPECIES_ZOROARK); PLAYER(SPECIES_ZOROARK) {Ability(ABILITY_ILLUSION); }
PLAYER(SPECIES_MAMOSWINE); // the third member here is required for zoroark PLAYER(SPECIES_MAMOSWINE); // the third member here is required for zoroark
OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET);
@ -329,6 +329,7 @@ DOUBLE_BATTLE_TEST("Ally Switch swaps Illusion data")
DOUBLE_BATTLE_TEST("Ally switch updates last used moves for Mimic") DOUBLE_BATTLE_TEST("Ally switch updates last used moves for Mimic")
{ {
GIVEN { GIVEN {
ASSUME(GetMoveEffect(MOVE_MIMIC) == EFFECT_MIMIC);
PLAYER(SPECIES_XATU) { Speed(100); } PLAYER(SPECIES_XATU) { Speed(100); }
PLAYER(SPECIES_RIOLU) { Speed(150); } PLAYER(SPECIES_RIOLU) { Speed(150); }
OPPONENT(SPECIES_FEAROW) { Speed(20); } OPPONENT(SPECIES_FEAROW) { Speed(20); }
@ -348,9 +349,10 @@ DOUBLE_BATTLE_TEST("Ally switch updates last used moves for Mimic")
} }
} }
DOUBLE_BATTLE_TEST("Ally Switch does not update leech seed battler") DOUBLE_BATTLE_TEST("Ally Switch does not update leech seed position")
{ {
GIVEN { GIVEN {
ASSUME(GetMoveEffect(MOVE_LEECH_SEED) == EFFECT_LEECH_SEED);
PLAYER(SPECIES_WYNAUT); PLAYER(SPECIES_WYNAUT);
PLAYER(SPECIES_SOLOSIS); PLAYER(SPECIES_SOLOSIS);
OPPONENT(SPECIES_BULBASAUR) { HP(50); MaxHP(100); } OPPONENT(SPECIES_BULBASAUR) { HP(50); MaxHP(100); }
@ -379,6 +381,114 @@ DOUBLE_BATTLE_TEST("Ally Switch does not update leech seed battler")
} }
} }
DOUBLE_BATTLE_TEST("Ally Switch does not update Future Sight target position")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_ABRA);
OPPONENT(SPECIES_RALTS);
} WHEN {
TURN { MOVE(opponentLeft, MOVE_FUTURE_SIGHT, target: playerLeft); }
TURN { MOVE(playerLeft, MOVE_ALLY_SWITCH); }
TURN { }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, opponentLeft);
ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft);
MESSAGE("Wynaut took the Future Sight attack!");
HP_BAR(playerLeft);
NOT HP_BAR(playerRight);
}
}
DOUBLE_BATTLE_TEST("Ally Switch does not update Future Sight target position when attacker side switches")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_ABRA);
OPPONENT(SPECIES_RALTS);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponentLeft, MOVE_FUTURE_SIGHT, target: playerLeft); }
TURN { SWITCH(opponentLeft, 2); MOVE(opponentRight, MOVE_ALLY_SWITCH); }
TURN { }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, opponentLeft);
ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, opponentRight);
MESSAGE("Wobbuffet took the Future Sight attack!");
HP_BAR(playerLeft);
NOT HP_BAR(playerRight);
}
}
DOUBLE_BATTLE_TEST("Ally Switch does not update Wish recovery position")
{
GIVEN {
ASSUME(GetMoveEffect(MOVE_WISH) == EFFECT_WISH);
PLAYER(SPECIES_WOBBUFFET) { HP(50); MaxHP(100); }
PLAYER(SPECIES_WYNAUT) { HP(20); MaxHP(100); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, MOVE_WISH); }
TURN { MOVE(playerLeft, MOVE_ALLY_SWITCH); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_WISH, playerLeft);
ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft);
HP_BAR(playerLeft);
NOT HP_BAR(playerRight);
} THEN {
EXPECT_EQ(playerLeft->hp, 70);
EXPECT_EQ(playerRight->hp, 50);
}
}
DOUBLE_BATTLE_TEST("Ally Switch does not update Healing Wish/Lunar Dance recovery position")
{
u16 move = MOVE_NONE;
struct BattlePokemon *switchTarget = NULL;
PARAMETRIZE { move = MOVE_HEALING_WISH; switchTarget = playerLeft; }
PARAMETRIZE { move = MOVE_HEALING_WISH; switchTarget = playerRight; }
PARAMETRIZE { move = MOVE_LUNAR_DANCE; switchTarget = playerLeft; }
PARAMETRIZE { move = MOVE_LUNAR_DANCE; switchTarget = playerRight; }
GIVEN {
WITH_CONFIG(B_HEALING_WISH_SWITCH, GEN_8);
ASSUME(GetMoveEffect(MOVE_HEALING_WISH) == EFFECT_HEALING_WISH);
ASSUME(GetMoveEffect(MOVE_LUNAR_DANCE) == EFFECT_LUNAR_DANCE);
PLAYER(SPECIES_GARDEVOIR);
PLAYER(SPECIES_ABRA);
PLAYER(SPECIES_WOBBUFFET) { HP(100); MaxHP(100); }
PLAYER(SPECIES_WYNAUT) { HP(50); MaxHP(80); Status1(STATUS1_PARALYSIS); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerLeft, move); SEND_OUT(playerLeft, 2); }
TURN { MOVE(playerRight, MOVE_ALLY_SWITCH); }
TURN { SWITCH(switchTarget, 3); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, move, playerLeft);
if (switchTarget == playerLeft) {
HP_BAR(playerLeft, hp: 80);
STATUS_ICON(playerLeft, none: TRUE);
} else {
NOT HP_BAR(playerRight);
}
} THEN {
if (switchTarget == playerLeft) {
EXPECT_EQ(playerLeft->hp, 80);
EXPECT_EQ(playerLeft->status1, STATUS1_NONE);
} else {
EXPECT_EQ(playerRight->hp, 50);
EXPECT_EQ(playerRight->status1, STATUS1_PARALYSIS);
}
}
}
DOUBLE_BATTLE_TEST("Ally Switch updates attract battler") DOUBLE_BATTLE_TEST("Ally Switch updates attract battler")
{ {
GIVEN { GIVEN {