pokeemerald/test/battle/move_effect/revelation_dance.c
PhallenTree 779cedd16f
Fixes Dancer, adds Revelation Dance interactions with Z-Move, Roost and typeless mons (#5133)
* Add Revelation Dance interactions with typeless mons, Roost and Z-Move

* Fixes Dancer-called moves not updating their type

* Adds Revelation Dance tests

* Make sure target isn't immune in Dancer test

* Missing ... in message

* Missing Assume

* CI ends Dancer test too early?

* Z-Revelation Dance is Breakneck Blitz (Test)

* Fix test (Zoroark too strong?)

* Replace H!Zoroark

* Remove Ability specification

* Remove HP_Bars

* Fix Dancer checking for battlers that don't exist in single battles
2024-08-11 12:13:46 -04:00

150 lines
5.2 KiB
C

#include "global.h"
#include "test/battle.h"
ASSUMPTIONS
{
ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].effect == EFFECT_REVELATION_DANCE);
ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].danceMove == TRUE);
ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE));
ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].effect == EFFECT_THIRD_TYPE);
ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].argument == TYPE_GRASS);
ASSUME(gMovesInfo[MOVE_ROOST].effect == EFFECT_ROOST);
}
SINGLE_BATTLE_TEST("Revelation Dance changes its type depending on the user's 1st Type")
{
u16 speciesPlayer;
u16 speciesOpponent;
PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_POM_POM; speciesOpponent = SPECIES_DUGTRIO; }
PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_BAILE; speciesOpponent = SPECIES_BLASTOISE; }
PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_PAU; speciesOpponent = SPECIES_LIEPARD; }
PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_SENSU; speciesOpponent = SPECIES_PERSIAN; }
GIVEN {
PLAYER(speciesPlayer);
OPPONENT(speciesOpponent);
} WHEN {
TURN { MOVE(player, MOVE_REVELATION_DANCE); }
} SCENE {
if (speciesPlayer == SPECIES_ORICORIO_BAILE) {
ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player);
HP_BAR(opponent);
MESSAGE("It's not very effective…");
}
else {
NONE_OF {
ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player);
HP_BAR(opponent);
MESSAGE("It's not very effective…");
}
}
}
}
SINGLE_BATTLE_TEST("Revelation Dance changes its type depending on the user's 2nd Type if it has no 1st type")
{
GIVEN {
PLAYER(SPECIES_ORICORIO_BAILE);
OPPONENT(SPECIES_EMPOLEON);
} WHEN {
TURN { MOVE(player, MOVE_BURN_UP); }
TURN { MOVE(player, MOVE_REVELATION_DANCE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player);
HP_BAR(opponent);
NONE_OF {
MESSAGE("It's not very effective…");
MESSAGE("It's super effective!");
}
ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player);
HP_BAR(opponent);
MESSAGE("It's not very effective…");
}
}
SINGLE_BATTLE_TEST("Revelation Dance changes its type depending on the user's 3rd Type if it has no 1st or 2nd type")
{
GIVEN {
PLAYER(SPECIES_GROWLITHE);
OPPONENT(SPECIES_TREVENANT);
} WHEN {
TURN { MOVE(player, MOVE_BURN_UP); MOVE(opponent, MOVE_FORESTS_CURSE); }
TURN { MOVE(player, MOVE_REVELATION_DANCE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player);
HP_BAR(opponent);
MESSAGE("It's super effective!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_FORESTS_CURSE, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player);
HP_BAR(opponent);
MESSAGE("It's not very effective…");
}
}
SINGLE_BATTLE_TEST("Revelation Dance becomes Typeless if its user is Typeless")
{
u16 speciesOpponent;
PARAMETRIZE { speciesOpponent = SPECIES_BLISSEY; }
PARAMETRIZE { speciesOpponent = SPECIES_BLASTOISE; }
PARAMETRIZE { speciesOpponent = SPECIES_CHARIZARD; }
PARAMETRIZE { speciesOpponent = SPECIES_VENUSAUR; }
PARAMETRIZE { speciesOpponent = SPECIES_GOLEM; }
PARAMETRIZE { speciesOpponent = SPECIES_AEGISLASH; }
GIVEN {
PLAYER(SPECIES_GROWLITHE);
OPPONENT(speciesOpponent);
} WHEN {
TURN { MOVE(player, MOVE_BURN_UP); }
TURN { MOVE(player, MOVE_REVELATION_DANCE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player);
HP_BAR(opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player);
HP_BAR(opponent);
NONE_OF {
MESSAGE("It's not very effective…");
MESSAGE("It's super effective!");
}
}
}
SINGLE_BATTLE_TEST("Revelation Dance becomes Normal type if used by a Typeless Pokemon due to Roost")
{
u16 speciesOpponent;
PARAMETRIZE { speciesOpponent = SPECIES_SABLEYE; }
PARAMETRIZE { speciesOpponent = SPECIES_AGGRON; }
ASSUME(B_ROOST_PURE_FLYING >= GEN_5);
GIVEN {
PLAYER(SPECIES_ORICORIO_BAILE) { Ability(ABILITY_DANCER); }
OPPONENT(speciesOpponent);
} WHEN {
TURN { MOVE(player, MOVE_BURN_UP); MOVE(opponent, MOVE_TACKLE); }
TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_REVELATION_DANCE); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player);
HP_BAR(opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, opponent);
HP_BAR(player);
ABILITY_POPUP(player, ABILITY_DANCER);
if (speciesOpponent == SPECIES_AGGRON) {
ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player);
HP_BAR(opponent);
MESSAGE("It's not very effective…");
}
else {
NONE_OF {
ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player);
HP_BAR(opponent);
MESSAGE("It's not very effective…");
}
}
}
}