mirror of
https://github.com/rh-hideout/pokeemerald-expansion.git
synced 2026-03-21 18:04:50 -05:00
Add tests for Taunt (#9386)
This commit is contained in:
parent
a7ecf56328
commit
474d586452
|
|
@ -54,7 +54,7 @@
|
||||||
F(B_DISABLE_TURNS, disableTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
F(B_DISABLE_TURNS, disableTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
F(B_TAILWIND_TURNS, tailwindTurns, (u32, GEN_COUNT - 1)) \
|
F(B_TAILWIND_TURNS, tailwindTurns, (u32, GEN_COUNT - 1)) \
|
||||||
F(B_SLEEP_TURNS, sleepTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
F(B_SLEEP_TURNS, sleepTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
F(B_TAUNT_TURNS, tauntTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
F(B_TAUNT_TURNS, tauntTurns, (u32, GEN_COUNT - 1)) \
|
||||||
F(B_SPORT_TURNS, sportTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
F(B_SPORT_TURNS, sportTurns, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \
|
||||||
F(B_MEGA_EVO_TURN_ORDER, megaEvoTurnOrder, (u32, GEN_COUNT - 1)) \
|
F(B_MEGA_EVO_TURN_ORDER, megaEvoTurnOrder, (u32, GEN_COUNT - 1)) \
|
||||||
F(B_RECALC_TURN_AFTER_ACTIONS, recalcTurnAfterActions, (u32, GEN_COUNT - 1)) \
|
F(B_RECALC_TURN_AFTER_ACTIONS, recalcTurnAfterActions, (u32, GEN_COUNT - 1)) \
|
||||||
|
|
|
||||||
|
|
@ -160,6 +160,7 @@ enum RandomTag
|
||||||
RNG_SECONDARY_EFFECT_3,
|
RNG_SECONDARY_EFFECT_3,
|
||||||
RNG_SHED_SKIN,
|
RNG_SHED_SKIN,
|
||||||
RNG_SLEEP_TURNS,
|
RNG_SLEEP_TURNS,
|
||||||
|
RNG_TAUNT_TURNS,
|
||||||
RNG_SPEED_TIE,
|
RNG_SPEED_TIE,
|
||||||
RNG_STATIC,
|
RNG_STATIC,
|
||||||
RNG_STENCH,
|
RNG_STENCH,
|
||||||
|
|
@ -241,7 +242,6 @@ enum RandomTag
|
||||||
RNG_FISHING_BITE,
|
RNG_FISHING_BITE,
|
||||||
RNG_FISHING_GEN3_STICKY,
|
RNG_FISHING_GEN3_STICKY,
|
||||||
RNG_WILD_MON_TARGET,
|
RNG_WILD_MON_TARGET,
|
||||||
RNG_TAUNT,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define RandomWeighted(tag, ...) \
|
#define RandomWeighted(tag, ...) \
|
||||||
|
|
|
||||||
|
|
@ -9642,15 +9642,15 @@ static void Cmd_settaunt(void)
|
||||||
else if (gBattleMons[gBattlerTarget].volatiles.tauntTimer == 0)
|
else if (gBattleMons[gBattlerTarget].volatiles.tauntTimer == 0)
|
||||||
{
|
{
|
||||||
u8 turns;
|
u8 turns;
|
||||||
if (B_TAUNT_TURNS >= GEN_5)
|
if (GetConfig(B_TAUNT_TURNS) >= GEN_5)
|
||||||
{
|
{
|
||||||
turns = B_TAUNT_TIMER - 1; // 4 turns
|
turns = B_TAUNT_TIMER - 1; // 4 turns
|
||||||
if (!HasBattlerActedThisTurn(gBattlerTarget))
|
if (!HasBattlerActedThisTurn(gBattlerTarget))
|
||||||
turns--; // If the target hasn't yet moved this turn, Taunt lasts for only three turns (source: Bulbapedia)
|
turns--; // If the target hasn't yet moved this turn, Taunt lasts for only three turns (source: Bulbapedia)
|
||||||
}
|
}
|
||||||
else if (B_TAUNT_TURNS >= GEN_4)
|
else if (GetConfig(B_TAUNT_TURNS) >= GEN_4)
|
||||||
{
|
{
|
||||||
turns = RandomUniform(RNG_TAUNT, 3, B_TAUNT_TIMER);
|
turns = RandomUniform(RNG_TAUNT_TURNS, 3, B_TAUNT_TIMER);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,83 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "test/battle.h"
|
#include "test/battle.h"
|
||||||
|
|
||||||
TO_DO_BATTLE_TEST("TODO: Write Taunt (Move Effect) test titles")
|
ASSUMPTIONS
|
||||||
|
{
|
||||||
|
ASSUME(GetMoveEffect(MOVE_TAUNT) == EFFECT_TAUNT);
|
||||||
|
}
|
||||||
|
|
||||||
|
SINGLE_BATTLE_TEST("Taunt lasts for 2 turns (Gen 3)")
|
||||||
|
{
|
||||||
|
GIVEN {
|
||||||
|
WITH_CONFIG(B_TAUNT_TURNS, GEN_3);
|
||||||
|
PLAYER(SPECIES_WOBBUFFET) { Speed(2); Moves(MOVE_GROWL, MOVE_TACKLE); }
|
||||||
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(1); Moves(MOVE_TAUNT, MOVE_CELEBRATE); }
|
||||||
|
} WHEN {
|
||||||
|
TURN { MOVE(player, MOVE_GROWL); MOVE(opponent, MOVE_TAUNT); }
|
||||||
|
TURN { MOVE(player, MOVE_GROWL, allowed: FALSE); MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); }
|
||||||
|
TURN { MOVE(player, MOVE_GROWL); MOVE(opponent, MOVE_CELEBRATE); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: AI test is required to validate RNG range without MOVE/FORCED_MOVE invalids; there may be a better approach.
|
||||||
|
AI_SINGLE_BATTLE_TEST("Taunt lasts for 3-5 turns (Gen 4)")
|
||||||
|
{
|
||||||
|
u32 count, turns;
|
||||||
|
|
||||||
|
PARAMETRIZE { turns = 3; }
|
||||||
|
PARAMETRIZE { turns = 4; }
|
||||||
|
PARAMETRIZE { turns = 5; }
|
||||||
|
PASSES_RANDOMLY(1, 3, RNG_TAUNT_TURNS);
|
||||||
|
GIVEN {
|
||||||
|
WITH_CONFIG(B_TAUNT_TURNS, GEN_4);
|
||||||
|
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
|
||||||
|
PLAYER(SPECIES_WOBBUFFET) { Speed(1); Moves(MOVE_TAUNT, MOVE_CELEBRATE); }
|
||||||
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(2); Moves(MOVE_GROWL, MOVE_TACKLE); }
|
||||||
|
} WHEN {
|
||||||
|
TURN { MOVE(player, MOVE_TAUNT); }
|
||||||
|
for (count = 0; count < turns - 1; ++count)
|
||||||
|
TURN { MOVE(player, MOVE_CELEBRATE); }
|
||||||
|
TURN { MOVE(player, MOVE_CELEBRATE); }
|
||||||
|
} SCENE {
|
||||||
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_TAUNT, player);
|
||||||
|
for (count = 0; count < turns - 1; ++count)
|
||||||
|
{
|
||||||
|
NOT MESSAGE("The opposing Wobbuffet's Taunt wore off!");
|
||||||
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||||
|
}
|
||||||
|
MESSAGE("The opposing Wobbuffet's Taunt wore off!");
|
||||||
|
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SINGLE_BATTLE_TEST("Taunt lasts for 3 turns if target hasn't moved (Gen 5+)")
|
||||||
|
{
|
||||||
|
u32 count;
|
||||||
|
|
||||||
|
GIVEN {
|
||||||
|
WITH_CONFIG(B_TAUNT_TURNS, GEN_5);
|
||||||
|
PLAYER(SPECIES_WOBBUFFET) { Speed(1); Moves(MOVE_GROWL, MOVE_TACKLE); }
|
||||||
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(2); Moves(MOVE_TAUNT, MOVE_CELEBRATE); }
|
||||||
|
} WHEN {
|
||||||
|
TURN { MOVE(opponent, MOVE_TAUNT); MOVE(player, MOVE_GROWL); }
|
||||||
|
for (count = 0; count < 2; ++count)
|
||||||
|
TURN { MOVE(player, MOVE_GROWL, allowed: FALSE); MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); }
|
||||||
|
TURN { MOVE(player, MOVE_GROWL); MOVE(opponent, MOVE_CELEBRATE); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SINGLE_BATTLE_TEST("Taunt lasts for 4 turns if target already moved (Gen 5+)")
|
||||||
|
{
|
||||||
|
u32 count;
|
||||||
|
|
||||||
|
GIVEN {
|
||||||
|
WITH_CONFIG(B_TAUNT_TURNS, GEN_5);
|
||||||
|
PLAYER(SPECIES_WOBBUFFET) { Speed(2); Moves(MOVE_GROWL, MOVE_TACKLE); }
|
||||||
|
OPPONENT(SPECIES_WOBBUFFET) { Speed(1); Moves(MOVE_TAUNT, MOVE_CELEBRATE); }
|
||||||
|
} WHEN {
|
||||||
|
TURN { MOVE(player, MOVE_GROWL); MOVE(opponent, MOVE_TAUNT); }
|
||||||
|
for (count = 0; count < 3; ++count)
|
||||||
|
TURN { MOVE(player, MOVE_GROWL, allowed: FALSE); MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); }
|
||||||
|
TURN { MOVE(player, MOVE_GROWL); MOVE(opponent, MOVE_CELEBRATE); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user