2024-06-16 14:02:44 +01:00
|
|
|
#include "global.h"
|
|
|
|
#include "test/battle.h"
|
|
|
|
|
|
|
|
SINGLE_BATTLE_TEST("Anger Point raises Attack stage to maximum after receiving a critical hit")
|
|
|
|
{
|
|
|
|
GIVEN {
|
2025-01-01 19:34:33 +00:00
|
|
|
ASSUME(MoveAlwaysCrits(MOVE_FROST_BREATH));
|
2024-06-16 14:02:44 +01:00
|
|
|
PLAYER(SPECIES_PRIMEAPE) { Ability(ABILITY_ANGER_POINT); }
|
|
|
|
OPPONENT(SPECIES_SNORUNT);
|
|
|
|
} WHEN {
|
|
|
|
TURN { MOVE(opponent, MOVE_FROST_BREATH); }
|
|
|
|
} SCENE {
|
|
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent);
|
|
|
|
MESSAGE("A critical hit!");
|
|
|
|
ABILITY_POPUP(player, ABILITY_ANGER_POINT);
|
|
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
|
|
MESSAGE("Primeape's Anger Point maxed its Attack!");
|
|
|
|
} THEN {
|
|
|
|
EXPECT_EQ(player->statStages[STAT_ATK], MAX_STAT_STAGE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SINGLE_BATTLE_TEST("Anger Point does not trigger when already at maximum Attack stage")
|
|
|
|
{
|
|
|
|
GIVEN {
|
2025-01-01 19:34:33 +00:00
|
|
|
ASSUME(MoveAlwaysCrits(MOVE_FROST_BREATH));
|
|
|
|
ASSUME(GetMoveEffect(MOVE_BELLY_DRUM) == EFFECT_BELLY_DRUM);
|
2024-06-16 14:02:44 +01:00
|
|
|
PLAYER(SPECIES_PRIMEAPE) { Ability(ABILITY_ANGER_POINT); Speed(2); }
|
|
|
|
OPPONENT(SPECIES_SNORUNT) { Speed(1); }
|
|
|
|
} WHEN {
|
|
|
|
TURN { MOVE(player, MOVE_BELLY_DRUM); MOVE(opponent, MOVE_FROST_BREATH); }
|
|
|
|
} SCENE {
|
|
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player);
|
|
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
2024-10-21 18:52:45 +01:00
|
|
|
MESSAGE("Primeape cut its own HP and maximized its Attack!");
|
2024-06-16 14:02:44 +01:00
|
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent);
|
|
|
|
MESSAGE("A critical hit!");
|
2024-08-15 03:48:20 +01:00
|
|
|
NONE_OF {
|
2024-06-16 14:02:44 +01:00
|
|
|
ABILITY_POPUP(player, ABILITY_ANGER_POINT);
|
|
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
|
|
MESSAGE("Primeape's Anger Point maxed its Attack!");
|
|
|
|
}
|
|
|
|
} THEN {
|
|
|
|
EXPECT_EQ(player->statStages[STAT_ATK], MAX_STAT_STAGE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-08-14 14:43:18 +01:00
|
|
|
TO_DO_BATTLE_TEST("Anger Point triggers when a substitute takes the hit (Gen4)");
|
|
|
|
|
|
|
|
SINGLE_BATTLE_TEST("Anger Point does not trigger when a substitute takes the hit (Gen5+)")
|
2024-06-16 14:02:44 +01:00
|
|
|
{
|
|
|
|
GIVEN {
|
2025-01-01 19:34:33 +00:00
|
|
|
ASSUME(MoveAlwaysCrits(MOVE_FROST_BREATH));
|
|
|
|
ASSUME(GetMoveEffect(MOVE_SUBSTITUTE) == EFFECT_SUBSTITUTE);
|
2024-06-16 14:02:44 +01:00
|
|
|
PLAYER(SPECIES_PRIMEAPE) { Ability(ABILITY_ANGER_POINT); Speed(2); }
|
|
|
|
OPPONENT(SPECIES_SNORUNT) { Speed(1); }
|
|
|
|
} WHEN {
|
|
|
|
TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_FROST_BREATH); }
|
|
|
|
} SCENE {
|
|
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player);
|
2024-10-21 18:52:45 +01:00
|
|
|
MESSAGE("Primeape put in a substitute!");
|
2024-06-16 14:02:44 +01:00
|
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent);
|
|
|
|
MESSAGE("A critical hit!");
|
2024-08-15 03:48:20 +01:00
|
|
|
NONE_OF {
|
2024-06-16 14:02:44 +01:00
|
|
|
ABILITY_POPUP(player, ABILITY_ANGER_POINT);
|
|
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
|
|
MESSAGE("Primeape's Anger Point maxed its Attack!");
|
|
|
|
}
|
|
|
|
} THEN {
|
|
|
|
EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
|
|
|
|
}
|
|
|
|
}
|