338 lines
15 KiB
C
338 lines
15 KiB
C
#include "global.h"
|
|
#include "test/battle.h"
|
|
|
|
DOUBLE_BATTLE_TEST("Competitive sharply raises player's Sp. Atk after Intimidate")
|
|
{
|
|
u32 abilityLeft, abilityRight;
|
|
|
|
PARAMETRIZE { abilityLeft = ABILITY_FRIEND_GUARD; abilityRight = ABILITY_FRIEND_GUARD; }
|
|
PARAMETRIZE { abilityLeft = ABILITY_FRIEND_GUARD; abilityRight = ABILITY_COMPETITIVE; }
|
|
PARAMETRIZE { abilityLeft = ABILITY_COMPETITIVE; abilityRight = ABILITY_FRIEND_GUARD; }
|
|
PARAMETRIZE { abilityLeft = ABILITY_COMPETITIVE; abilityRight = ABILITY_COMPETITIVE; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_IGGLYBUFF) { Ability(abilityLeft); }
|
|
PLAYER(SPECIES_JIGGLYPUFF) { Ability(abilityRight); }
|
|
OPPONENT(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); }
|
|
OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); }
|
|
} WHEN {
|
|
TURN { MOVE(playerLeft, MOVE_SCRATCH, target:opponentLeft); MOVE(playerRight, MOVE_SCRATCH, target:opponentRight); }
|
|
} SCENE {
|
|
//1st mon Intimidate
|
|
ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
|
|
MESSAGE("The opposing Gyarados's Intimidate cuts Igglybuff's Attack!");
|
|
if (abilityLeft == ABILITY_COMPETITIVE) {
|
|
ABILITY_POPUP(playerLeft, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
}
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
MESSAGE("The opposing Gyarados's Intimidate cuts Jigglypuff's Attack!");
|
|
if (abilityRight == ABILITY_COMPETITIVE) {
|
|
ABILITY_POPUP(playerRight, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
MESSAGE("Jigglypuff's Sp. Atk sharply rose!");
|
|
}
|
|
|
|
//2nd mon Intimidate
|
|
ABILITY_POPUP(opponentRight, ABILITY_INTIMIDATE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
|
|
MESSAGE("The opposing Arbok's Intimidate cuts Igglybuff's Attack!");
|
|
if (abilityLeft == ABILITY_COMPETITIVE) {
|
|
ABILITY_POPUP(playerLeft, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
}
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
MESSAGE("The opposing Arbok's Intimidate cuts Jigglypuff's Attack!");
|
|
if (abilityRight == ABILITY_COMPETITIVE) {
|
|
ABILITY_POPUP(playerRight, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
MESSAGE("Jigglypuff's Sp. Atk sharply rose!");
|
|
}
|
|
} THEN {
|
|
EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + (abilityLeft == ABILITY_COMPETITIVE ? 4 : 0));
|
|
EXPECT_EQ(playerRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + (abilityRight == ABILITY_COMPETITIVE ? 4 : 0));
|
|
}
|
|
}
|
|
|
|
// Same as above, but for opponent.
|
|
DOUBLE_BATTLE_TEST("Competitive sharply raises opponent's Sp. Atk after Intimidate")
|
|
{
|
|
u32 abilityLeft, abilityRight;
|
|
|
|
PARAMETRIZE { abilityLeft = ABILITY_FRIEND_GUARD; abilityRight = ABILITY_FRIEND_GUARD; }
|
|
PARAMETRIZE { abilityLeft = ABILITY_FRIEND_GUARD; abilityRight = ABILITY_COMPETITIVE; }
|
|
PARAMETRIZE { abilityLeft = ABILITY_COMPETITIVE; abilityRight = ABILITY_FRIEND_GUARD; }
|
|
PARAMETRIZE { abilityLeft = ABILITY_COMPETITIVE; abilityRight = ABILITY_COMPETITIVE; }
|
|
|
|
GIVEN {
|
|
OPPONENT(SPECIES_IGGLYBUFF) { Ability(abilityLeft); }
|
|
OPPONENT(SPECIES_JIGGLYPUFF) { Ability(abilityRight); }
|
|
PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); }
|
|
PLAYER(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); }
|
|
} WHEN {
|
|
TURN { MOVE(opponentLeft, MOVE_SCRATCH, target:playerLeft); MOVE(opponentRight, MOVE_SCRATCH, target:playerRight); }
|
|
} SCENE {
|
|
//1st mon Intimidate
|
|
ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
|
|
MESSAGE("Gyarados's Intimidate cuts the opposing Igglybuff's Attack!");
|
|
if (abilityLeft == ABILITY_COMPETITIVE) {
|
|
ABILITY_POPUP(opponentLeft, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
|
|
MESSAGE("The opposing Igglybuff's Sp. Atk sharply rose!");
|
|
}
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
|
|
MESSAGE("Gyarados's Intimidate cuts the opposing Jigglypuff's Attack!");
|
|
if (abilityRight == ABILITY_COMPETITIVE) {
|
|
ABILITY_POPUP(opponentRight, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
|
|
MESSAGE("The opposing Jigglypuff's Sp. Atk sharply rose!");
|
|
}
|
|
|
|
//2nd mon Intimidate
|
|
ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
|
|
MESSAGE("Arbok's Intimidate cuts the opposing Igglybuff's Attack!");
|
|
if (abilityLeft == ABILITY_COMPETITIVE) {
|
|
ABILITY_POPUP(opponentLeft, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
|
|
MESSAGE("The opposing Igglybuff's Sp. Atk sharply rose!");
|
|
}
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
|
|
MESSAGE("Arbok's Intimidate cuts the opposing Jigglypuff's Attack!");
|
|
if (abilityRight == ABILITY_COMPETITIVE) {
|
|
ABILITY_POPUP(opponentRight, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
|
|
MESSAGE("The opposing Jigglypuff's Sp. Atk sharply rose!");
|
|
}
|
|
} THEN {
|
|
EXPECT_EQ(opponentLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + (abilityLeft == ABILITY_COMPETITIVE ? 4 : 0));
|
|
EXPECT_EQ(opponentRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + (abilityRight == ABILITY_COMPETITIVE ? 4 : 0));
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Competitive activates after Sticky Web lowers Speed")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_STICKY_WEB); }
|
|
TURN { SWITCH(player, 1); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent);
|
|
// Switch-in - Sticky Web activates
|
|
SEND_IN_MESSAGE("Igglybuff");
|
|
MESSAGE("Igglybuff was caught in a sticky web!");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Speed fell!");
|
|
// Competitive activates
|
|
ABILITY_POPUP(player, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Competitive doesn't activate after Sticky Web lowers Speed if Court Changed (gen8)")
|
|
{
|
|
GIVEN {
|
|
WITH_CONFIG(B_DEFIANT_STICKY_WEB, GEN_8);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); }
|
|
TURN { SWITCH(player, 1); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent);
|
|
// Switch-in - Sticky Web activates
|
|
SEND_IN_MESSAGE("Igglybuff");
|
|
MESSAGE("Igglybuff was caught in a sticky web!");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Speed fell!");
|
|
// Competitive doesn't activate
|
|
NONE_OF {
|
|
ABILITY_POPUP(player, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
}
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Competitive correctly activates after Sticky Web lowers Speed if Court Changed (Gen8)")
|
|
{
|
|
GIVEN {
|
|
WITH_CONFIG(B_DEFIANT_STICKY_WEB, GEN_8);
|
|
PLAYER(SPECIES_WOBBUFFET);
|
|
PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); }
|
|
TURN { SWITCH(player, 1); }
|
|
TURN { MOVE(opponent, MOVE_GROWL); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player);
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent);
|
|
// Switch-in - Sticky Web activates
|
|
SEND_IN_MESSAGE("Igglybuff");
|
|
MESSAGE("Igglybuff was caught in a sticky web!");
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Speed fell!");
|
|
// Competitive doesn't activate
|
|
NONE_OF {
|
|
ABILITY_POPUP(player, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
}
|
|
// Competitive triggers correctly after Sticky Web
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, opponent);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Attack fell!");
|
|
ABILITY_POPUP(player, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
}
|
|
}
|
|
|
|
DOUBLE_BATTLE_TEST("Competitive is activated by Cotton Down for non-ally pokemon")
|
|
{
|
|
GIVEN {
|
|
PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); }
|
|
PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); }
|
|
OPPONENT(SPECIES_ELDEGOSS) { Ability(ABILITY_COTTON_DOWN); }
|
|
OPPONENT(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); }
|
|
} WHEN {
|
|
TURN { MOVE(playerLeft, MOVE_SCRATCH, target: opponentLeft); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, playerLeft);
|
|
ABILITY_POPUP(opponentLeft, ABILITY_COTTON_DOWN);
|
|
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
|
|
MESSAGE("Igglybuff's Speed fell!");
|
|
ABILITY_POPUP(playerLeft, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
MESSAGE("Igglybuff's Speed fell!");
|
|
ABILITY_POPUP(playerRight, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
|
|
MESSAGE("The opposing Igglybuff's Speed fell!");
|
|
} THEN {
|
|
EXPECT_EQ(playerLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1);
|
|
EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1);
|
|
EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1);
|
|
EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 2);
|
|
EXPECT_EQ(playerRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 2);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Competitive activates before White Herb")
|
|
{
|
|
u32 move;
|
|
|
|
PARAMETRIZE { move = MOVE_LEER; }
|
|
PARAMETRIZE { move = MOVE_CONFIDE; }
|
|
|
|
GIVEN {
|
|
PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); Item(ITEM_WHITE_HERB); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(opponent, move); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, move, opponent);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
|
|
ABILITY_POPUP(player, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
|
|
if (move == MOVE_LEER) {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Igglybuff returned its stats to normal using its White Herb!");
|
|
} else {
|
|
NONE_OF {
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
|
|
MESSAGE("Igglybuff returned its stats to normal using its White Herb!");
|
|
}
|
|
}
|
|
} THEN {
|
|
if (move == MOVE_LEER) {
|
|
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE);
|
|
EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 2);
|
|
} else {
|
|
EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Competitive activates for each stat that is lowered")
|
|
{
|
|
GIVEN {
|
|
ASSUME(GetMoveEffect(MOVE_TICKLE) == EFFECT_TICKLE);
|
|
PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(opponent, MOVE_TICKLE); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TICKLE, opponent);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
|
|
MESSAGE("Igglybuff's Attack fell!");
|
|
ABILITY_POPUP(player, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
|
|
MESSAGE("Igglybuff's Defense fell!");
|
|
ABILITY_POPUP(player, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
|
|
} THEN {
|
|
EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 4);
|
|
}
|
|
}
|
|
|
|
SINGLE_BATTLE_TEST("Competitive doesn't activate if the pokemon lowers it's own stats")
|
|
{
|
|
u32 move;
|
|
|
|
PARAMETRIZE { move = MOVE_SUPERPOWER; }
|
|
PARAMETRIZE { move = MOVE_CLOSE_COMBAT; }
|
|
PARAMETRIZE { move = MOVE_MAKE_IT_RAIN; }
|
|
PARAMETRIZE { move = MOVE_SPIN_OUT; }
|
|
|
|
GIVEN {
|
|
ASSUME(MoveHasAdditionalEffectSelf(MOVE_SUPERPOWER, MOVE_EFFECT_ATK_DEF_DOWN));
|
|
ASSUME(MoveHasAdditionalEffectSelf(MOVE_CLOSE_COMBAT, MOVE_EFFECT_DEF_SPDEF_DOWN));
|
|
ASSUME(MoveHasAdditionalEffectSelf(MOVE_MAKE_IT_RAIN, MOVE_EFFECT_SP_ATK_MINUS_1));
|
|
ASSUME(MoveHasAdditionalEffectSelf(MOVE_SPIN_OUT, MOVE_EFFECT_SPD_MINUS_2));
|
|
PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); }
|
|
OPPONENT(SPECIES_WOBBUFFET);
|
|
} WHEN {
|
|
TURN { MOVE(player, move); }
|
|
} SCENE {
|
|
ANIMATION(ANIM_TYPE_MOVE, move, player);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
|
|
NONE_OF {
|
|
ABILITY_POPUP(player, ABILITY_COMPETITIVE);
|
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
|
MESSAGE("Igglybuff's Sp. Atk sharply rose!");
|
|
}
|
|
} THEN {
|
|
if (move == MOVE_SUPERPOWER)
|
|
EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1);
|
|
else
|
|
EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
|
|
}
|
|
}
|