diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2afd6f26a2..b0b0c61fcd 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1475,14 +1475,17 @@ BattleScript_EffectFlowerShield:: ppreduce savetarget selectfirstvalidtarget -BattleScript_FlowerShieldIsAnyGrass: +BattleScript_FlowerShieldIsAnyValidTarget: + jumpifvolatile BS_TARGET, VOLATILE_SEMI_INVULNERABLE, BattleScript_FlowerShieldCheckNextTarget jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoopStart - jumpifnexttargetvalid BattleScript_FlowerShieldIsAnyGrass +BattleScript_FlowerShieldCheckNextTarget: + jumpifnexttargetvalid BattleScript_FlowerShieldIsAnyValidTarget goto BattleScript_RestoreTargetButItFailed BattleScript_FlowerShieldLoopStart: selectfirstvalidtarget BattleScript_FlowerShieldLoop: movevaluescleanup + jumpifvolatile BS_TARGET, VOLATILE_SEMI_INVULNERABLE, BattleScript_FlowerShieldMoveTargetEnd jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoop2 goto BattleScript_FlowerShieldMoveTargetEnd BattleScript_FlowerShieldLoop2: @@ -1503,6 +1506,7 @@ BattleScript_FlowerShieldMoveTargetEnd: moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_FlowerShieldLoop restoretarget + moveendfrom MOVEEND_ITEM_EFFECTS_ATTACKER end BattleScript_EffectRototiller:: diff --git a/test/battle/move_effect/flower_shield.c b/test/battle/move_effect/flower_shield.c index 9eac08eb4d..d690869fa3 100644 --- a/test/battle/move_effect/flower_shield.c +++ b/test/battle/move_effect/flower_shield.c @@ -36,4 +36,38 @@ DOUBLE_BATTLE_TEST("Flower Shield raises the defense of all Grass-type Pokémon" } } -TO_DO_BATTLE_TEST("Flower Shield fails if there's no Grass-type Pokémon on the field") +SINGLE_BATTLE_TEST("Flower Shield fails if there's no Grass-type Pokémon on the field") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FLOWER_SHIELD); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, player); + } +} + +DOUBLE_BATTLE_TEST("Flower Shield doesn't affect Grass-type Pokémon that are in a semi-invulnerable position") +{ + GIVEN { + PLAYER(SPECIES_BULBASAUR); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_FLY, target: playerLeft); + MOVE(playerLeft, MOVE_FLOWER_SHIELD); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLY, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + } + } +}