Fix psychic terrain affecting semi-invulnerable mons (#7986)

This commit is contained in:
FosterProgramming 2025-10-20 13:38:01 +02:00 committed by GitHub
parent e5df8f0212
commit 24c595bfec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 33 additions and 2 deletions

View File

@ -2403,8 +2403,7 @@ static enum MoveCanceller CancellerProtean(void)
static enum MoveCanceller CancellerPsychicTerrain(void)
{
if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN
&& IsBattlerGrounded(gBattlerTarget)
if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_PSYCHIC_TERRAIN)
&& GetChosenMovePriority(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) > 0
&& GetMoveTarget(gCurrentMove) != MOVE_TARGET_ALL_BATTLERS
&& GetMoveTarget(gCurrentMove) != MOVE_TARGET_OPPONENTS_FIELD

View File

@ -114,6 +114,38 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority field moves")
}
}
SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves against semi-invulnerable targets")
{
u32 move = 0, shouldWork = 0;
PARAMETRIZE { move = MOVE_SOLAR_BEAM; shouldWork = FALSE;}
PARAMETRIZE { move = MOVE_FLY; shouldWork = TRUE;}
GIVEN {
PLAYER(SPECIES_SHROODLE) { Ability(ABILITY_PRANKSTER); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); MOVE(opponent,move);}
TURN { MOVE(player, MOVE_TOXIC); SKIP_TURN(opponent);}
} SCENE {
if (shouldWork)
{
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player);
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
}
else
{
NONE_OF {
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player);
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
}
}
} THEN {
if (shouldWork)
EXPECT(opponent->status1 & STATUS1_TOXIC_POISON);
else
EXPECT(!(opponent->status1 & STATUS1_TOXIC_POISON));
}
}
SINGLE_BATTLE_TEST("Psychic Terrain lasts for 5 turns")
{
GIVEN {