mirror of
https://github.com/rh-hideout/pokeemerald-expansion.git
synced 2026-03-21 18:04:50 -05:00
Merge 53cd652a7f into c47809abcd
This commit is contained in:
commit
0a4c8677f9
|
|
@ -133,6 +133,8 @@ enum RandomTag
|
|||
RNG_CUTE_CHARM,
|
||||
RNG_DAMAGE_MODIFIER,
|
||||
RNG_DIRE_CLAW,
|
||||
RNG_DISABLE_MOVE,
|
||||
RNG_DISABLE_TURNS,
|
||||
RNG_EFFECT_SPORE,
|
||||
RNG_FLAME_BODY,
|
||||
RNG_FORCE_RANDOM_SWITCH,
|
||||
|
|
|
|||
|
|
@ -772,12 +772,18 @@ static bool32 HandleEndTurnDisable(enum BattlerId battler)
|
|||
if (gBattleMons[battler].volatiles.disabledMove == gBattleMons[battler].moves[moveIndex])
|
||||
break;
|
||||
}
|
||||
if (!(GetConfig(B_DISABLE_TURNS) <= GEN_2
|
||||
&& gBattleMons[battler].volatiles.unableToUseMove
|
||||
&& (gBattleMons[battler].volatiles.disabledMove != gChosenMoveByBattler[battler]))) // Timer increments still if fast disable blocked move
|
||||
{
|
||||
gBattleMons[battler].volatiles.disableTimer--;
|
||||
}
|
||||
if (moveIndex == MAX_MON_MOVES) // Pokémon does not have the disabled move anymore
|
||||
{
|
||||
gBattleMons[battler].volatiles.disabledMove = 0;
|
||||
gBattleMons[battler].volatiles.disableTimer = 0;
|
||||
}
|
||||
else if (--gBattleMons[battler].volatiles.disableTimer == 0) // disable ends
|
||||
else if (gBattleMons[battler].volatiles.disableTimer == 0) // disable ends
|
||||
{
|
||||
gBattleMons[battler].volatiles.disabledMove = 0;
|
||||
gBattleScripting.battler = battler;
|
||||
|
|
|
|||
|
|
@ -4112,7 +4112,7 @@ static enum Move GetSleepTalkMove(void)
|
|||
unusableMovesBits |= (1 << (i));
|
||||
}
|
||||
|
||||
unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~(MOVE_LIMITATION_PP | MOVE_LIMITATION_CHOICE_ITEM));
|
||||
unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~(MOVE_LIMITATION_PP | MOVE_LIMITATION_CHOICE_ITEM | MOVE_LIMITATION_DISABLED));
|
||||
if (unusableMovesBits == ALL_MOVES_MASK) // all 4 moves cannot be chosen
|
||||
return move;
|
||||
|
||||
|
|
|
|||
|
|
@ -8749,24 +8749,53 @@ static void Cmd_disablelastusedattack(void)
|
|||
CMD_ARGS(const u8 *failInstr);
|
||||
|
||||
s32 i;
|
||||
enum Move moveToDisable = gLastMoves[gBattlerTarget];
|
||||
|
||||
if (GetConfig(B_DISABLE_TURNS) == GEN_1)
|
||||
{
|
||||
enum Move eligibleMoves[MAX_MON_MOVES] = {0};
|
||||
s32 eligibleMovesCount = 0;
|
||||
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (gBattleMons[gBattlerTarget].moves[i] == MOVE_NONE || gBattleMons[gBattlerTarget].pp[i] == 0)
|
||||
continue;
|
||||
else
|
||||
eligibleMoves[eligibleMovesCount++] = gBattleMons[gBattlerTarget].moves[i];
|
||||
}
|
||||
|
||||
if (eligibleMovesCount > 0)
|
||||
moveToDisable = eligibleMoves[RandomUniform(RNG_DISABLE_MOVE, 0, (eligibleMovesCount - 1))];
|
||||
}
|
||||
if (moveToDisable == MOVE_NONE || gBattleMons[gBattlerTarget].volatiles.disabledMove != MOVE_NONE)
|
||||
{
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (gBattleMons[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget])
|
||||
if (gBattleMons[gBattlerTarget].moves[i] == moveToDisable)
|
||||
break;
|
||||
}
|
||||
if (gBattleMons[gBattlerTarget].volatiles.disabledMove == MOVE_NONE
|
||||
&& i != MAX_MON_MOVES && gBattleMons[gBattlerTarget].pp[i] != 0)
|
||||
{
|
||||
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerTarget].moves[i])
|
||||
PREPARE_MOVE_BUFFER(gBattleTextBuff1, moveToDisable)
|
||||
|
||||
gBattleMons[gBattlerTarget].volatiles.disabledMove = gBattleMons[gBattlerTarget].moves[i];
|
||||
if (B_DISABLE_TURNS >= GEN_5)
|
||||
if (GetConfig(B_DISABLE_TURNS) == GEN_1)
|
||||
gBattleMons[gBattlerTarget].volatiles.disableTimer = RandomUniform(RNG_DISABLE_TURNS, 0, 7);
|
||||
else if (GetConfig(B_DISABLE_TURNS) == GEN_2)
|
||||
gBattleMons[gBattlerTarget].volatiles.disableTimer = RandomUniform(RNG_DISABLE_TURNS, 1, 7);
|
||||
else if (GetConfig(B_DISABLE_TURNS) == GEN_3)
|
||||
gBattleMons[gBattlerTarget].volatiles.disableTimer = RandomUniform(RNG_DISABLE_TURNS, 2, 5);
|
||||
else if (GetConfig(B_DISABLE_TURNS) == GEN_4)
|
||||
gBattleMons[gBattlerTarget].volatiles.disableTimer = RandomUniform(RNG_DISABLE_TURNS, B_DISABLE_TIMER, 7);
|
||||
else // GEN_5+
|
||||
gBattleMons[gBattlerTarget].volatiles.disableTimer = B_DISABLE_TIMER;
|
||||
else if (B_DISABLE_TURNS >= GEN_4)
|
||||
gBattleMons[gBattlerTarget].volatiles.disableTimer = (Random() & 3) + B_DISABLE_TIMER; // 4-7 turns
|
||||
else
|
||||
gBattleMons[gBattlerTarget].volatiles.disableTimer = (Random() & 3) + 2; // 2-5 turns
|
||||
// If timer set to zero turns, don't set disabledMove
|
||||
if (gBattleMons[gBattlerTarget].volatiles.disableTimer != 0)
|
||||
gBattleMons[gBattlerTarget].volatiles.disabledMove = moveToDisable;
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1422,14 +1422,18 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] =
|
|||
{
|
||||
.name = COMPOUND_STRING("Disable"),
|
||||
.description = COMPOUND_STRING(
|
||||
#if B_DISABLE_TURNS >= GEN_5
|
||||
"For 4 turns, prevents foe\n"
|
||||
"Prevents the foe from using\n"
|
||||
#if B_DISABLE_TURNS == GEN_1
|
||||
"a random move for 0-7 turns."),
|
||||
#elif B_DISABLE_TURNS == GEN_2
|
||||
"its last move for 1-7 turns."),
|
||||
#elif B_DISABLE_TURNS == GEN_3
|
||||
"its last move for 2-5 turns."),
|
||||
#elif B_DISABLE_TURNS == GEN_4
|
||||
"For 4-7 turns, prevents foe\n"
|
||||
"its last move for 4-7 turns."),
|
||||
#else
|
||||
"For 2-5 turns, prevents foe\n"
|
||||
"its last move for 4 turns."),
|
||||
#endif
|
||||
"from using last used move."),
|
||||
#if B_UPDATED_MOVE_DATA >= GEN_5
|
||||
.accuracy = 100,
|
||||
#elif B_UPDATED_MOVE_DATA == GEN_4
|
||||
|
|
|
|||
|
|
@ -1,20 +1,482 @@
|
|||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
TO_DO_BATTLE_TEST("Disable prevents the target from using a random move (Gen 1)");
|
||||
TO_DO_BATTLE_TEST("Disable prevents the target from using the last move used (Gen 2+)");
|
||||
TO_DO_BATTLE_TEST("Disable fails if one of the target's moves is already disabled");
|
||||
TO_DO_BATTLE_TEST("Disable fails if the target haven't used a move yet (Gen 2+)");
|
||||
TO_DO_BATTLE_TEST("Disable fails if the last move used was Struggle (Gen 2+)");
|
||||
TO_DO_BATTLE_TEST("Disable fails if the last move used was a Max Move");
|
||||
TO_DO_BATTLE_TEST("Disabled moves can still be used via Sleep Talk");
|
||||
TO_DO_BATTLE_TEST("Disabled moves can still be used via Metronome");
|
||||
TO_DO_BATTLE_TEST("Disabled moves can still be used via Mirror Move");
|
||||
TO_DO_BATTLE_TEST("Disable lasts 0-7 turns (Gen 1)");
|
||||
TO_DO_BATTLE_TEST("Disable lasts 2-8 turns (Gen 2)");
|
||||
TO_DO_BATTLE_TEST("Disable lasts 2-5 turns (Gen 3)");
|
||||
TO_DO_BATTLE_TEST("Disable lasts 4-7 turns (Gen 4)");
|
||||
TO_DO_BATTLE_TEST("Disable lasts 4 turns (Gen 5+)");
|
||||
TO_DO_BATTLE_TEST("Disable's timer only counts down when trying to use a move (Gen 1-2)");
|
||||
TO_DO_BATTLE_TEST("Disable's timer counts down regardless of the action (Gen 3+)");
|
||||
TO_DO_BATTLE_TEST("Baton Pass doesn't pass Disable's effect");
|
||||
SINGLE_BATTLE_TEST("Disable prevents the target from using a random move (Gen 1)")
|
||||
{
|
||||
PASSES_RANDOMLY(1, 3, RNG_DISABLE_MOVE);
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_1);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_ICE_BEAM); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DISABLE); MOVE(opponent, MOVE_THUNDERBOLT); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, opponent);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable prevents the target from using the last move used (Gen 2+)")
|
||||
{
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_2);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_SCRATCH, MOVE_CELEBRATE); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN { MOVE(player, MOVE_DISABLE); MOVE(opponent, MOVE_SCRATCH); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable fails if one of the target's moves is already disabled")
|
||||
{
|
||||
u32 config = GEN_LATEST;
|
||||
|
||||
PARAMETRIZE { config = GEN_1; }
|
||||
PARAMETRIZE { config = GEN_2; }
|
||||
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, config);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(2); Moves(MOVE_CELEBRATE, MOVE_SCRATCH); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_DISABLE); }
|
||||
TURN { MOVE(player, MOVE_DISABLE); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable fails if the target haven't used a move yet (Gen 2+)")
|
||||
{
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_2);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_CELEBRATE, MOVE_SCRATCH); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DISABLE); MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN { MOVE(player, MOVE_DISABLE); MOVE(opponent, MOVE_SCRATCH); }
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("But it failed!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable fails if the last move used was Struggle (Gen 2+)")
|
||||
{
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_2);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(2); MovesWithPP({MOVE_SCRATCH, 1}, {MOVE_CELEBRATE, 40}); Item(ITEM_CHOICE_BAND); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_CELEBRATE); }
|
||||
TURN { FORCED_MOVE(opponent); MOVE(player, MOVE_DISABLE); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, opponent);
|
||||
NONE_OF {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
}
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable fails if the last move used was a Max Move")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(2); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_DYNAMAX); MOVE(player, MOVE_DISABLE); }
|
||||
TURN { MOVE(opponent, MOVE_SLEEP_TALK); MOVE(player, MOVE_SPORE); }
|
||||
TURN { MOVE(opponent, MOVE_SLEEP_TALK); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MAX_GUARD, opponent);
|
||||
MESSAGE("Wobbuffet used Disable!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("But it failed!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disabled moves can still be used via Sleep Talk")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(2); Moves(MOVE_SLEEP_TALK, MOVE_SCRATCH); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_DISABLE); }
|
||||
TURN { MOVE(opponent, MOVE_SLEEP_TALK); MOVE(player, MOVE_SPORE); }
|
||||
TURN { MOVE(opponent, MOVE_SLEEP_TALK); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, opponent);
|
||||
MESSAGE("But it failed!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, opponent);
|
||||
NOT MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disabled moves can still be used via Metronome")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(2); Moves(MOVE_METRONOME, MOVE_SCRATCH); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_DISABLE); }
|
||||
TURN { MOVE(opponent, MOVE_METRONOME, WITH_RNG(RNG_METRONOME, MOVE_SCRATCH)); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut used Metronome!");
|
||||
NOT MESSAGE("But it failed!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_METRONOME, opponent);
|
||||
MESSAGE("Waggling a finger let it use Scratch!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disabled moves can still be used via Mirror Move")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(2); Moves(MOVE_DISABLE, MOVE_MIRROR_MOVE); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_DISABLE); MOVE(player, MOVE_DISABLE); }
|
||||
TURN { MOVE(opponent, MOVE_MIRROR_MOVE); MOVE(player, MOVE_DISABLE); }
|
||||
} SCENE {
|
||||
MESSAGE("The opposing Wynaut used Disable!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, opponent);
|
||||
MESSAGE("But it failed!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Disable was disabled!");
|
||||
MESSAGE("The opposing Wynaut used Mirror Move!");
|
||||
NOT MESSAGE("But it failed!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_MIRROR_MOVE, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, opponent);
|
||||
MESSAGE("Wobbuffet's Disable was disabled!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("Wobbuffet's Disable is disabled!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable lasts 0-7 turns (Gen 1)")
|
||||
{
|
||||
PASSES_RANDOMLY(1, 8, RNG_DISABLE_TURNS);
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_1);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_SCRATCH, MOVE_CELEBRATE); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DISABLE, WITH_RNG(RNG_DISABLE_MOVE, 0)); MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
MESSAGE("The opposing Wynaut's move is no longer disabled!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable has a 1 in 8 chance for the target to still use its move (Gen 1)")
|
||||
{
|
||||
PASSES_RANDOMLY(1, 8, RNG_DISABLE_TURNS);
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_1);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_SCRATCH, MOVE_CELEBRATE); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DISABLE, WITH_RNG(RNG_DISABLE_MOVE, 0)); MOVE(opponent, MOVE_SCRATCH); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
NOT MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable lasts 1-7 turns (Gen 2)")
|
||||
{
|
||||
PASSES_RANDOMLY(1, 7, RNG_DISABLE_TURNS);
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_2);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_SCRATCH, MOVE_CELEBRATE); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN { MOVE(player, MOVE_DISABLE); MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); // 0 turns
|
||||
MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 7 turns
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable lasts 2-5 turns (Gen 3)")
|
||||
{
|
||||
PASSES_RANDOMLY(1, 4, RNG_DISABLE_TURNS);
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_3);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_SCRATCH, MOVE_CELEBRATE); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN { MOVE(player, MOVE_DISABLE); MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); // 0 turns
|
||||
MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 1 turn
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 5 turns
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable lasts 4-7 turns (Gen 4)")
|
||||
{
|
||||
PASSES_RANDOMLY(1, 4, RNG_DISABLE_TURNS);
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_4);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_SCRATCH, MOVE_CELEBRATE); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN { MOVE(player, MOVE_DISABLE); MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); // 0 turns
|
||||
MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 1 turn
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 2 turns
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 3 turns
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
MESSAGE("The opposing Wynaut's move is no longer disabled!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable lasts 4 turns (Gen 5+)")
|
||||
{
|
||||
PASSES_RANDOMLY(10, 10, RNG_DISABLE_TURNS);
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_5);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_SCRATCH, MOVE_CELEBRATE); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN { MOVE(player, MOVE_DISABLE); MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN {}
|
||||
TURN {}
|
||||
TURN {}
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); // 0 turns
|
||||
MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 1 turn
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 2 turns
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 3 turns
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
MESSAGE("The opposing Wynaut's move is no longer disabled!");
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable's timer only counts down when trying to use a move (Gen 1-2)")
|
||||
{
|
||||
u32 config = GEN_LATEST;
|
||||
enum Move move = MOVE_NONE;
|
||||
|
||||
PARAMETRIZE { config = GEN_1; move = MOVE_SCRATCH; }
|
||||
PARAMETRIZE { config = GEN_1; move = MOVE_ROCK_SLIDE; }
|
||||
PARAMETRIZE { config = GEN_1; move = MOVE_SING; }
|
||||
PARAMETRIZE { config = GEN_1; move = MOVE_ICE_BEAM; }
|
||||
PARAMETRIZE { config = GEN_1; move = MOVE_THUNDERBOLT; }
|
||||
//PARAMETRIZE { config = GEN_1; move = MOVE_WRAP; } // TO DO: uncomment once Gen 1 Wrap is added
|
||||
PARAMETRIZE { config = GEN_2; move = MOVE_SCRATCH; }
|
||||
PARAMETRIZE { config = GEN_2; move = MOVE_ROCK_SLIDE; }
|
||||
PARAMETRIZE { config = GEN_2; move = MOVE_SING; }
|
||||
PARAMETRIZE { config = GEN_2; move = MOVE_ICE_BEAM; }
|
||||
PARAMETRIZE { config = GEN_2; move = MOVE_THUNDERBOLT; }
|
||||
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, config);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); Moves(move, MOVE_DISABLE, MOVE_CELEBRATE); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_CELEBRATE, MOVE_SCRATCH); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN { MOVE(player, MOVE_DISABLE, WITH_RNG(RNG_DISABLE_TURNS, 2)); MOVE(opponent, MOVE_SCRATCH); }
|
||||
switch (move)
|
||||
{
|
||||
case MOVE_ICE_BEAM:
|
||||
TURN { MOVE(player, move); MOVE(opponent, MOVE_CELEBRATE, WITH_RNG(RNG_FROZEN, FALSE)); }
|
||||
break;
|
||||
case MOVE_THUNDERBOLT:
|
||||
TURN { MOVE(player, move); MOVE(opponent, MOVE_CELEBRATE, WITH_RNG(RNG_PARALYSIS, FALSE)); }
|
||||
break;
|
||||
default:
|
||||
TURN { MOVE(player, move); MOVE(opponent, MOVE_CELEBRATE); }
|
||||
break;
|
||||
}
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); // 0 turns
|
||||
MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 1 turn
|
||||
ANIMATION(ANIM_TYPE_MOVE, move, player);
|
||||
if (move != MOVE_SCRATCH)
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 2 turns
|
||||
else
|
||||
MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 2 turns
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Disable's timer counts down regardless of the action (Gen 3+)")
|
||||
{
|
||||
enum Move move = MOVE_NONE;
|
||||
|
||||
PARAMETRIZE { move = MOVE_SCRATCH; }
|
||||
PARAMETRIZE { move = MOVE_ROCK_SLIDE; }
|
||||
PARAMETRIZE { move = MOVE_SING; }
|
||||
PARAMETRIZE { move = MOVE_ICE_BEAM; }
|
||||
PARAMETRIZE { move = MOVE_THUNDERBOLT; }
|
||||
|
||||
GIVEN {
|
||||
WITH_CONFIG(B_DISABLE_TURNS, GEN_3);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(2); Moves(move, MOVE_DISABLE, MOVE_CELEBRATE); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(1); Moves(MOVE_CELEBRATE, MOVE_SCRATCH); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN { MOVE(player, MOVE_DISABLE, WITH_RNG(RNG_DISABLE_TURNS, 2)); MOVE(opponent, MOVE_SCRATCH); }
|
||||
switch (move)
|
||||
{
|
||||
case MOVE_ICE_BEAM:
|
||||
TURN { MOVE(player, move); MOVE(opponent, MOVE_CELEBRATE, WITH_RNG(RNG_FROZEN, FALSE)); }
|
||||
break;
|
||||
case MOVE_THUNDERBOLT:
|
||||
TURN { MOVE(player, move); MOVE(opponent, MOVE_CELEBRATE, WITH_RNG(RNG_PARALYSIS, FALSE)); }
|
||||
break;
|
||||
default:
|
||||
TURN { MOVE(player, move); MOVE(opponent, MOVE_CELEBRATE); }
|
||||
break;
|
||||
}
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); // 0 turns
|
||||
MESSAGE("The opposing Wynaut's Scratch is disabled!");
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 1 turn
|
||||
ANIMATION(ANIM_TYPE_MOVE, move, player);
|
||||
MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 2 turns
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Baton Pass doesn't pass Disable's effect")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(1); Moves(MOVE_DISABLE, MOVE_CELEBRATE); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(2); Moves(MOVE_SCRATCH, MOVE_BATON_PASS); }
|
||||
OPPONENT(SPECIES_WYNAUT) { Speed(2); Moves(MOVE_SCRATCH, MOVE_BATON_PASS); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_DISABLE); }
|
||||
TURN { MOVE(opponent, MOVE_BATON_PASS, partyIndex:1); }
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); }
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, player);
|
||||
MESSAGE("The opposing Wynaut's Scratch was disabled!");
|
||||
MESSAGE("The opposing Wynaut used Baton Pass!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
MESSAGE("The opposing Wynaut used Scratch!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
MESSAGE("The opposing Wynaut used Scratch!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||
NOT MESSAGE("The opposing Wynaut's move is no longer disabled!"); // 4 turns
|
||||
}
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Disable's effect persists when an affected move is taught over following a level up (Gen1)");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user