120 lines
3.7 KiB
C
120 lines
3.7 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
|
|
ASSUMPTIONS
|
|
{
|
|
ASSUME(GetItemHoldEffect(ITEM_THROAT_SPRAY) == HOLD_EFFECT_THROAT_SPRAY);
|
|
ASSUME(IsSoundMove(MOVE_HYPER_VOICE) == TRUE);
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Throat Spray activates after both hits of a spread move")
|
|
{
|
|
s16 firstHit, secondHit;
|
|
|
|
GIVEN {
|
|
ASSUME(GetMoveTarget(MOVE_HYPER_VOICE) == MOVE_TARGET_BOTH);
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_THROAT_SPRAY); }
|
|
PLAYER(SPECIES_WYNAUT);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(playerLeft, MOVE_HYPER_VOICE); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerLeft);
|
|
HP_BAR(opponentLeft, captureDamage: &firstHit);
|
|
HP_BAR(opponentRight, captureDamage: &secondHit);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
|
|
} THEN {
|
|
EXPECT_EQ(firstHit, secondHit);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Throat Spray increases Sp. Atk by one stage")
|
|
{
|
|
s16 normalHit;
|
|
s16 boostedHit;
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_THROAT_SPRAY); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_HYPER_VOICE); }
|
|
TURN { MOVE(player, MOVE_HYPER_VOICE); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, player);
|
|
HP_BAR(opponent, captureDamage: &normalHit);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, player);
|
|
HP_BAR(opponent, captureDamage: &boostedHit);
|
|
} THEN {
|
|
EXPECT_MUL_EQ(normalHit, Q_4_12(1.5), boostedHit);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Throat Spray activates when a sound move is used")
|
|
{
|
|
u32 move;
|
|
|
|
PARAMETRIZE { move = MOVE_SWIFT; }
|
|
PARAMETRIZE { move = MOVE_HYPER_VOICE; }
|
|
|
|
GIVEN {
|
|
ASSUME(IsSoundMove(MOVE_SWIFT) != IsSoundMove(MOVE_HYPER_VOICE));
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_THROAT_SPRAY); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, move); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, move, player);
|
|
if (move == MOVE_HYPER_VOICE)
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
else
|
|
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Throat Spray does not activate if move fails")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_THROAT_SPRAY); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_HYPER_VOICE); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent);
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
}
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Throat Spray does not activate if user flinches")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_THROAT_SPRAY); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_HYPER_VOICE); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponent);
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
}
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Throat Spray is not blocked by Sheer Force")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_NIDOKING) { Ability(ABILITY_SHEER_FORCE); Item(ITEM_THROAT_SPRAY); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_BUG_BUZZ); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_BUG_BUZZ, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
}
|
|
}
|