1708c80200
Replaced ALWAYS_CRIT with an alwaysCriticalHit flag to account for the fact that in earlier generations, there is no crit stage at which crits are guaranteed. Renamed critBoost to criticalHitStage (at Edu's prompting). Reorder .criticalHitStage defines in battle_moves.h to be aligned with struct order.
73 lines
2.3 KiB
C
73 lines
2.3 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
|
|
SINGLE_BATTLE_TEST("Two strike count turns a move into a 2-hit move")
|
|
{
|
|
GIVEN {
|
|
ASSUME(gBattleMoves[MOVE_DOUBLE_KICK].strikeCount == 2);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_DOUBLE_KICK); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, player);
|
|
MESSAGE("Hit 2 time(s)!");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Three strike count turns a move into a 3-hit move")
|
|
{
|
|
s16 firstHit;
|
|
s16 secondHit;
|
|
s16 thirdHit;
|
|
|
|
GIVEN {
|
|
ASSUME(gBattleMoves[MOVE_TRIPLE_DIVE].strikeCount == 3);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_TRIPLE_DIVE); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_DIVE, player);
|
|
HP_BAR(opponent, captureDamage: &firstHit);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_DIVE, player);
|
|
HP_BAR(opponent, captureDamage: &secondHit);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_DIVE, player);
|
|
HP_BAR(opponent, captureDamage: &thirdHit);
|
|
} THEN {
|
|
EXPECT_EQ(firstHit, secondHit);
|
|
EXPECT_EQ(secondHit, thirdHit);
|
|
EXPECT_EQ(firstHit, thirdHit);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Surging Strikes hits 3 times with each hit being a critical hit")
|
|
{
|
|
s16 firstHit;
|
|
s16 secondHit;
|
|
s16 thirdHit;
|
|
|
|
GIVEN {
|
|
ASSUME(gBattleMoves[MOVE_SURGING_STRIKES].strikeCount == 3);
|
|
ASSUME(gBattleMoves[MOVE_SURGING_STRIKES].alwaysCriticalHit == TRUE);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_SURGING_STRIKES); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SURGING_STRIKES, player);
|
|
HP_BAR(opponent, captureDamage: &firstHit);
|
|
MESSAGE("A critical hit!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SURGING_STRIKES, player);
|
|
HP_BAR(opponent, captureDamage: &secondHit);
|
|
MESSAGE("A critical hit!");
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SURGING_STRIKES, player);
|
|
HP_BAR(opponent, captureDamage: &thirdHit);
|
|
MESSAGE("A critical hit!");
|
|
} THEN {
|
|
EXPECT_EQ(firstHit, secondHit);
|
|
EXPECT_EQ(secondHit, thirdHit);
|
|
EXPECT_EQ(firstHit, thirdHit);
|
|
}
|
|
}
|