forked from DizzyEggg/pokeemerald
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Sticky web / Court Change / Mirror Armor tests + small fixes (#3160)
Co-authored-by: Eduardo Quezada D'Ottone <[email protected]> Co-authored-by: Martin Griffin <[email protected]>
- Loading branch information
1 parent
d74cbca
commit 1fb42e4
Showing
9 changed files
with
620 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,202 @@ | ||
#include "global.h" | ||
#include "test_battle.h" | ||
|
||
ASSUMPTIONS | ||
{ | ||
ASSUME(P_GEN_8_POKEMON == TRUE); | ||
} | ||
|
||
SINGLE_BATTLE_TEST("Mirror Armor lowers a stat of the attacking pokemon") | ||
{ | ||
u16 move, statId; | ||
|
||
PARAMETRIZE { move = MOVE_LEER; statId = STAT_DEF; } | ||
PARAMETRIZE { move = MOVE_GROWL; statId = STAT_ATK; } | ||
PARAMETRIZE { move = MOVE_SWEET_SCENT; statId = STAT_EVASION; } | ||
PARAMETRIZE { move = MOVE_SAND_ATTACK; statId = STAT_ACC; } | ||
PARAMETRIZE { move = MOVE_CONFIDE; statId = STAT_SPATK; } | ||
PARAMETRIZE { move = MOVE_FAKE_TEARS; statId = STAT_SPDEF; } | ||
|
||
GIVEN { | ||
PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);} | ||
OPPONENT(SPECIES_WYNAUT); | ||
} WHEN { | ||
TURN { MOVE(opponent, move); } | ||
} SCENE { | ||
ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); | ||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); | ||
switch (statId) | ||
{ | ||
case STAT_DEF: | ||
MESSAGE("Foe Wynaut's Defense fell!"); | ||
break; | ||
case STAT_ATK: | ||
MESSAGE("Foe Wynaut's Attack fell!"); | ||
break; | ||
case STAT_EVASION: | ||
MESSAGE("Foe Wynaut's evasiveness harshly fell!"); | ||
break; | ||
case STAT_ACC: | ||
MESSAGE("Foe Wynaut's accuracy fell!"); | ||
break; | ||
case STAT_SPATK: | ||
MESSAGE("Foe Wynaut's Sp. Atk fell!"); | ||
break; | ||
case STAT_SPDEF: | ||
MESSAGE("Foe Wynaut's Sp. Def harshly fell!"); | ||
break; | ||
} | ||
} THEN { | ||
EXPECT_EQ(player->statStages[statId], DEFAULT_STAT_STAGE); | ||
EXPECT_EQ(opponent->statStages[statId], (statId == STAT_SPDEF || statId == STAT_EVASION) ? DEFAULT_STAT_STAGE - 2 : DEFAULT_STAT_STAGE - 1); | ||
} | ||
} | ||
|
||
SINGLE_BATTLE_TEST("Mirror Armor triggers even if the attacking Pokemon also has Mirror Armor ability") | ||
{ | ||
GIVEN { | ||
PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } | ||
OPPONENT(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } | ||
} WHEN { | ||
TURN { MOVE(opponent, MOVE_LEER); } | ||
} SCENE { | ||
MESSAGE("Foe Corviknigh used Leer!"); | ||
ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); | ||
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); | ||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); | ||
MESSAGE("Foe Corviknigh's Defense fell!"); | ||
} THEN { | ||
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); | ||
EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); | ||
} | ||
} | ||
|
||
SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon with the Clear Body ability") | ||
{ | ||
GIVEN { | ||
PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } | ||
OPPONENT(SPECIES_WYNAUT) { Ability(ABILITY_CLEAR_BODY); } | ||
} WHEN { | ||
TURN { MOVE(opponent, MOVE_LEER); } | ||
} SCENE { | ||
MESSAGE("Foe Wynaut used Leer!"); | ||
ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); | ||
ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); | ||
MESSAGE("Foe Wynaut's Clear Body prevents stat loss!"); | ||
} THEN { | ||
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); | ||
EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); | ||
} | ||
} | ||
|
||
SINGLE_BATTLE_TEST("Mirror Armor lowers the Attack of Pokemon with Intimidate") | ||
{ | ||
GIVEN { | ||
PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } | ||
OPPONENT(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } | ||
} WHEN { | ||
TURN {} | ||
} SCENE { | ||
ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); | ||
ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); | ||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); | ||
MESSAGE("Foe Gyarados's Attack fell!"); | ||
} THEN { | ||
EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE); | ||
EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); | ||
} | ||
} | ||
|
||
// Unsure whether this should or should not fail, as Showdown has conflicting information. Needs testing in gen8 games. | ||
SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon behind Substitute") | ||
{ | ||
KNOWN_FAILING; | ||
GIVEN { | ||
PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } | ||
OPPONENT(SPECIES_WYNAUT); | ||
} WHEN { | ||
TURN { MOVE(opponent, MOVE_SUBSTITUTE); } | ||
TURN { MOVE(opponent, MOVE_LEER); } | ||
} SCENE { | ||
MESSAGE("Foe Wynaut used Substitute!"); | ||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); | ||
MESSAGE("Foe Wynaut used Leer!"); | ||
ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); | ||
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); | ||
} THEN { | ||
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); | ||
EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); | ||
} | ||
} | ||
|
||
SINGLE_BATTLE_TEST("Mirror Armor raises the stat of an attacking Pokemon with Contrary") | ||
{ | ||
GIVEN { | ||
PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);} | ||
OPPONENT(SPECIES_SHUCKLE) {Ability(ABILITY_CONTRARY);} | ||
} WHEN { | ||
TURN { MOVE(opponent, MOVE_LEER); } | ||
} SCENE { | ||
MESSAGE("Foe Shuckle used Leer!"); | ||
ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); | ||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); | ||
MESSAGE("Foe Shuckle's Defense rose!"); | ||
} THEN { | ||
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); | ||
EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); | ||
} | ||
} | ||
|
||
SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon if it is already at -6") | ||
{ | ||
GIVEN { | ||
PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);} | ||
OPPONENT(SPECIES_WYNAUT); | ||
} WHEN { | ||
TURN { MOVE(player, MOVE_SCREECH); } | ||
TURN { MOVE(player, MOVE_SCREECH); } | ||
TURN { MOVE(player, MOVE_SCREECH); } | ||
TURN { MOVE(opponent, MOVE_LEER); } | ||
} SCENE { | ||
MESSAGE("Corviknigh used Screech!"); | ||
MESSAGE("Corviknigh used Screech!"); | ||
MESSAGE("Corviknigh used Screech!"); | ||
MESSAGE("Foe Wynaut used Leer!"); | ||
ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); | ||
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); | ||
MESSAGE("Foe Wynaut's Defense won't go lower!"); | ||
} THEN { | ||
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); | ||
EXPECT_EQ(opponent->statStages[STAT_DEF], MIN_STAT_STAGE); | ||
} | ||
} | ||
|
||
// This behaviour needs to be verified in the actual games. Currently it's written to follow Showdown's logic. | ||
DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court Change was used by the opponent after it set up Sticky Web") | ||
{ | ||
KNOWN_FAILING; | ||
GIVEN { | ||
ASSUME(gBattleMoves[MOVE_STICKY_WEB].effect == EFFECT_STICKY_WEB); | ||
ASSUME(gBattleMoves[MOVE_COURT_CHANGE].effect == EFFECT_COURT_CHANGE); | ||
PLAYER(SPECIES_WOBBUFFET); | ||
PLAYER(SPECIES_WOBBUFFET); | ||
PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); } | ||
OPPONENT(SPECIES_WYNAUT); | ||
OPPONENT(SPECIES_WYNAUT); | ||
OPPONENT(SPECIES_WYNAUT); | ||
} WHEN { | ||
TURN { MOVE(playerLeft, MOVE_STICKY_WEB); } | ||
TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); } | ||
TURN { SWITCH(playerRight, 2);} | ||
TURN { } | ||
} SCENE { | ||
MESSAGE("Wobbuffet used Sticky Web!"); | ||
MESSAGE("Foe Wynaut used Court Change!"); | ||
MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); | ||
MESSAGE("Go! Corviknigh!"); | ||
MESSAGE("Corviknigh was caught in a Sticky Web!"); | ||
ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); | ||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); | ||
MESSAGE("Wobbuffet's Speed fell!"); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.