100 lines
3.7 KiB
C

#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));
}
}