#include "global.h" #include "test/battle.h" ASSUMPTIONS { ASSUME(GetMoveEffect(MOVE_MAGIC_COAT) == EFFECT_MAGIC_COAT); } SINGLE_BATTLE_TEST("Magic Coat prints the correct message when bouncing back a move") { GIVEN { ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); PLAYER(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); OPPONENT(SPECIES_ZIGZAGOON); } WHEN { TURN { MOVE(player, MOVE_MAGIC_COAT); MOVE(opponent, MOVE_SPORE); } TURN { SWITCH(opponent, 1); } TURN { MOVE(player, MOVE_MAGIC_COAT); MOVE(opponent, MOVE_SPORE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); MESSAGE("Zigzagoon bounced the Spore back!"); MESSAGE("The opposing Zigzagoon fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); MESSAGE("Zigzagoon bounced the Spore back!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); MESSAGE("The opposing Zigzagoon fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); } } SINGLE_BATTLE_TEST("Magic Coat fails if user moves last") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(5); } OPPONENT(SPECIES_WYNAUT) { Speed(10); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_MAGIC_COAT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); } } DOUBLE_BATTLE_TEST("Magic Coat fails when the only slower battler is a fainted ally") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(5); } PLAYER(SPECIES_WYNAUT) { HP(1); Speed(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(20); } OPPONENT(SPECIES_WYNAUT) { Speed(10); } } WHEN { TURN { MOVE(opponentLeft, MOVE_SCRATCH, target: playerRight); } TURN { MOVE(opponentLeft, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); MOVE(playerLeft, MOVE_MAGIC_COAT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponentLeft); MESSAGE("Wynaut fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, playerLeft); } } DOUBLE_BATTLE_TEST("Magic Coat reflects hazards regardless of the user's position") { struct BattlePokemon *coatUser = NULL; PARAMETRIZE { coatUser = playerLeft; } PARAMETRIZE { coatUser = playerRight; } ASSUME(GetMoveEffect(MOVE_SPIKES) == EFFECT_SPIKES); ASSUME(GetMoveEffect(MOVE_STEALTH_ROCK) == EFFECT_STEALTH_ROCK); GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(coatUser, MOVE_MAGIC_COAT); MOVE(opponentRight, MOVE_STEALTH_ROCK); MOVE(opponentLeft, MOVE_SPIKES); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, coatUser); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, opponentLeft); } } THEN { EXPECT(!IsHazardOnSide(B_SIDE_PLAYER, HAZARDS_STEALTH_ROCK)); EXPECT(!IsHazardOnSide(B_SIDE_PLAYER, HAZARDS_SPIKES)); EXPECT(IsHazardOnSide(B_SIDE_OPPONENT, HAZARDS_STEALTH_ROCK)); EXPECT(IsHazardOnSide(B_SIDE_OPPONENT, HAZARDS_SPIKES)); } }