sovereignx/test/battle/ability/commander.c
kittenchilly db24128ee3
Update battle messages to Gen 5+ standards (#3240)
Co-authored-by: Eduardo Quezada <eduardo602002@gmail.com>
2024-10-21 14:52:45 -03:00

423 lines
16 KiB
C

#include "global.h"
#include "test/battle.h"
DOUBLE_BATTLE_TEST("Commander will activate once Dondozo switches in")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { SWITCH(playerLeft, 2); }
} SCENE {
ABILITY_POPUP(playerRight, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
}
}
DOUBLE_BATTLE_TEST("Commander increases all stats by 2 stages once it is triggered")
{
GIVEN {
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
MESSAGE("Dondozo's Attack sharply rose!");
MESSAGE("Dondozo's Defense sharply rose!");
MESSAGE("Dondozo's Sp. Atk sharply rose!");
MESSAGE("Dondozo's Sp. Def sharply rose!");
MESSAGE("Dondozo's Speed sharply rose!");
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri avoids moves targetted towards it")
{
GIVEN {
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); MOVE(opponentRight, MOVE_POUND, target: playerRight); }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft);
MESSAGE("The opposing Wobbuffet's attack missed!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponentRight);
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take residual damage from a field effect while inside Dondozo")
{
GIVEN {
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_TYRANITAR) { Ability(ABILITY_SAND_STREAM); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ABILITY_POPUP(opponentLeft, ABILITY_SAND_STREAM);
MESSAGE("Dondozo is buffeted by the sandstorm!");
MESSAGE("Tatsugiri is buffeted by the sandstorm!");
MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!");
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take poison damage if while inside Dondozo")
{
GIVEN {
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); Status1(STATUS1_POISON); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
MESSAGE("Tatsugiri was hurt by its poisoning!");
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri still avoids moves even when the attacker has No Guard")
{
GIVEN {
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_MACHAMP) { Ability(ABILITY_NO_GUARD); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft);
MESSAGE("The opposing Machamp's attack missed!");
}
}
DOUBLE_BATTLE_TEST("Commander cannot affect a Dondozo that was previously affected by Commander until it faints and revived")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_DONDOZO);
PLAYER(SPECIES_TATSUGIRI) { HP(1); Ability(ABILITY_COMMANDER); Status1(STATUS1_POISON); }
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerRight, MOVE_CELEBRATE); SWITCH(playerLeft, 2); SEND_OUT(playerLeft, 3); }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
MESSAGE("Tatsugiri was hurt by its poisoning!");
NONE_OF {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
}
}
}
DOUBLE_BATTLE_TEST("Commander prevents Whirlwind from working against Dondozo or Tatsugiri while it's active")
{
GIVEN {
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponentLeft, MOVE_WHIRLWIND, target: playerLeft); }
TURN { MOVE(opponentRight, MOVE_WHIRLWIND, target: playerRight); }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
MESSAGE("The opposing Wobbuffet used Whirlwind!");
MESSAGE("But it failed!");
MESSAGE("The opposing Wobbuffet used Whirlwind!");
MESSAGE("But it failed!");
}
}
DOUBLE_BATTLE_TEST("Commander prevents Red Card from working while Commander is active")
{
GIVEN {
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); }
} SCENE {
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft);
} THEN {
EXPECT(opponentLeft->item == ITEM_NONE);
EXPECT(playerRight->species == SPECIES_DONDOZO);
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri is not damaged by a double target move if Dondozo faints")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_SURF].target == MOVE_TARGET_FOES_AND_ALLY);
PLAYER(SPECIES_DONDOZO) { HP(1); };
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(opponentLeft, MOVE_SURF); SEND_OUT(playerLeft, 2); }
} SCENE {
ABILITY_POPUP(playerRight, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
HP_BAR(playerLeft);
MESSAGE("Dondozo fainted!");
NOT HP_BAR(playerRight);
HP_BAR(opponentRight);
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri takes no damage from multi-target damaging moves")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(opponentLeft, MOVE_SURF); MOVE(opponentRight, MOVE_SURF); SWITCH(playerLeft, 2); }
} SCENE {
ABILITY_POPUP(playerRight, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft);
HP_BAR(playerLeft);
NOT HP_BAR(playerRight);
HP_BAR(opponentRight);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentRight);
HP_BAR(playerLeft);
HP_BAR(opponentLeft);
NOT HP_BAR(playerRight);
}
}
DOUBLE_BATTLE_TEST("Commander doesn't prevent Transform from working on a Commander Tatsugiri")
{
GIVEN {
PLAYER(SPECIES_DONDOZO);
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponentRight, MOVE_TRANSFORM, target: playerRight); }
} SCENE {
ABILITY_POPUP(playerRight, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_TRANSFORM, opponentRight);
}
}
DOUBLE_BATTLE_TEST("Commander doesn't prevent Imposter from working on a Commander Tatsugiri")
{
GIVEN {
PLAYER(SPECIES_DONDOZO);
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_DITTO) { Ability(ABILITY_IMPOSTER); }
} WHEN {
TURN { }
TURN { SWITCH(opponentRight, 2); }
} SCENE {
ABILITY_POPUP(playerRight, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ABILITY_POPUP(opponentRight, ABILITY_IMPOSTER);
MESSAGE("The opposing Ditto transformed into Tatsugiri using Imposter!");
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri is still affected by Perish Song while controlling Dondozo")
{
GIVEN {
PLAYER(SPECIES_DONDOZO);
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { MOVE(opponentLeft, MOVE_PERISH_SONG); }
TURN {}
TURN {}
TURN {}
} SCENE {
ABILITY_POPUP(playerRight, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_PERISH_SONG, opponentLeft);
MESSAGE("All Pokémon that heard the song will faint in three turns!");
MESSAGE("Dondozo's perish count fell to 0!");
MESSAGE("Dondozo fainted!");
MESSAGE("The opposing Wobbuffet's perish count fell to 0!");
MESSAGE("The opposing Wobbuffet fainted!");
NONE_OF {
MESSAGE("Tatsugiri's perish count fell to 0!");
MESSAGE("Tatsugiri fainted!");
}
MESSAGE("The opposing Wynaut's perish count fell to 0!");
MESSAGE("The opposing Wynaut fainted!");
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri is still affected by Haze while controlling Dondozo")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(playerRight, MOVE_SWORDS_DANCE); }
TURN { SWITCH(playerLeft, 2); MOVE(opponentRight, MOVE_HAZE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, playerRight);
ABILITY_POPUP(playerRight, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_HAZE, opponentRight);
} THEN {
EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
}
}
DOUBLE_BATTLE_TEST("Commander Attacker is kept (Dondozo Left Slot)")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_SURF].target == MOVE_TARGET_FOES_AND_ALLY);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponentRight, MOVE_TACKLE, target: opponentLeft); }
TURN { SWITCH(playerLeft, 2); MOVE(opponentLeft, MOVE_SURF); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight);
ABILITY_POPUP(playerRight, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft);
HP_BAR(playerLeft);
MESSAGE("The opposing Wobbuffet's attack missed!");
HP_BAR(opponentRight);
}
}
DOUBLE_BATTLE_TEST("Commander Attacker is kept (Dondozo Right Slot)")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_SURF].target == MOVE_TARGET_FOES_AND_ALLY);
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponentRight, MOVE_TACKLE, target: opponentLeft); }
TURN { SWITCH(playerRight, 2); MOVE(opponentLeft, MOVE_SURF); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight);
ABILITY_POPUP(playerLeft, ABILITY_COMMANDER);
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
MESSAGE("The opposing Wobbuffet's attack missed!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft);
HP_BAR(playerRight);
HP_BAR(opponentRight);
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri does not attack if Dondozo faints the same turn it's switched in")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO) { HP(1); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN {
SWITCH(playerLeft, 2);
MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft);
MOVE(opponentRight, MOVE_TACKLE, target: playerRight);
MOVE(playerRight, MOVE_CELEBRATE);
SEND_OUT(playerLeft, 0);
}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft);
HP_BAR(playerLeft);
MESSAGE("Dondozo fainted!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight);
HP_BAR(playerRight);
NOT MESSAGE("Tatsugiri used Celebrate!");
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri does not get hit by Dragon Darts when a commanded Dondozo faints")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_DRAGON_DARTS].effect == EFFECT_DRAGON_DARTS);
PLAYER(SPECIES_WOBBUFFET);
PLAYER(SPECIES_DONDOZO) { HP(1); }
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
TURN { SWITCH(playerLeft, 2); MOVE(opponentRight, MOVE_DRAGON_DARTS, target: playerRight); SEND_OUT(playerRight, 0); }
} SCENE {
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, opponentRight);
MESSAGE("Dondozo fainted!");
NOT HP_BAR(playerLeft);
}
}
DOUBLE_BATTLE_TEST("Commander Tatsugiri does not get hit by Dragon Darts when commanding Dondozo")
{
bool32 targetPlayerRight;
PARAMETRIZE { targetPlayerRight = TRUE; }
PARAMETRIZE { targetPlayerRight = FALSE; }
GIVEN {
ASSUME(gMovesInfo[MOVE_DRAGON_DARTS].effect == EFFECT_DRAGON_DARTS);
PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); }
PLAYER(SPECIES_DONDOZO);
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
if (targetPlayerRight == TRUE)
TURN { MOVE(opponentRight, MOVE_DRAGON_DARTS, target: playerRight); }
else
TURN { MOVE(opponentRight, MOVE_DRAGON_DARTS, target: playerLeft); }
} SCENE {
MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, opponentRight);
HP_BAR(playerRight);
NOT HP_BAR(playerLeft);
HP_BAR(playerRight);
NOT HP_BAR(playerLeft);
}
}