Added missing Dream Eater and Reflect Type tests (#6245)

This commit is contained in:
Eduardo Quezada 2025-02-13 13:32:08 -03:00 committed by GitHub
parent 5aeeb3365f
commit 845679471f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 97 additions and 8 deletions

View File

@ -3550,6 +3550,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.healingMove = B_HEAL_BLOCKING >= GEN_6,
.ignoresSubstitute = B_UPDATED_MOVE_FLAGS >= GEN_5,
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,

View File

@ -55,6 +55,62 @@ SINGLE_BATTLE_TEST("Dream Eater fails if Heal Block applies")
}
}
TO_DO_BATTLE_TEST("Dream Eater works on targets with Comatose");
TO_DO_BATTLE_TEST("Dream Eater fails if the target is behind a Substitute (Gen 1-4)");
TO_DO_BATTLE_TEST("Dream Eater works if the target is behind a Substitute (Gen 5+)");
SINGLE_BATTLE_TEST("Dream Eater works on targets with Comatose")
{
s16 damage;
s16 healed;
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); }
} WHEN {
TURN { MOVE(player, MOVE_DREAM_EATER); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_DREAM_EATER, player);
HP_BAR(opponent, captureDamage: &damage);
HP_BAR(player, captureDamage: &healed);
} THEN {
EXPECT_MUL_EQ(damage, Q_4_12(-1.0/2.0), healed);
}
}
#if B_UPDATED_MOVE_FLAGS < GEN_5
SINGLE_BATTLE_TEST("Dream Eater fails if the target is behind a Substitute (Gen 1-4)")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN);
ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE);
ASSUME(!gMovesInfo[MOVE_DREAM_EATER].ignoresSubstitute);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_YAWN); MOVE(player, MOVE_SUBSTITUTE); }
TURN { }
TURN { MOVE(opponent, MOVE_DREAM_EATER); }
} SCENE {
MESSAGE("The opposing Wobbuffet used Dream Eater!");
MESSAGE("Wobbuffet wasn't affected!");
}
}
#else
SINGLE_BATTLE_TEST("Dream Eater works if the target is behind a Substitute (Gen 5+)")
{
s16 damage;
s16 healed;
GIVEN {
ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN);
ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
} WHEN {
TURN { MOVE(opponent, MOVE_YAWN); MOVE(player, MOVE_SUBSTITUTE); }
TURN { }
TURN { MOVE(opponent, MOVE_DREAM_EATER); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_DREAM_EATER, opponent);
HP_BAR(player, captureDamage: &damage);
HP_BAR(opponent, captureDamage: &healed);
} THEN {
EXPECT_MUL_EQ(damage, Q_4_12(-1.0/2.0), healed);
}
}
#endif

View File

@ -1,9 +1,6 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("Reflect Type fails if the user is Terastallized");
TO_DO_BATTLE_TEST("Reflect Type succeeds against a Terastallized target and copies its Tera type");
SINGLE_BATTLE_TEST("Reflect Type does not affect any of Arceus' forms")
{
u32 j;
@ -86,7 +83,7 @@ SINGLE_BATTLE_TEST("Reflect Type does not affect any of Silvally's forms")
}
}
SINGLE_BATTLE_TEST("Reflect Type does not affect Pokémon with no types")
SINGLE_BATTLE_TEST("Reflect Type fails if the target has no types")
{
GIVEN {
ASSUME(gSpeciesInfo[SPECIES_ARCANINE].types[0] == TYPE_FIRE);
@ -151,7 +148,7 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's pure type")
}
}
SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's types[0] and types[1] if the target only has a 3rd type")
SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's 1st and 2nd types if the target only has a 3rd type")
{
GIVEN {
ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC);
@ -184,3 +181,38 @@ SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's types[0]
EXPECT_EQ(player->types[2], TYPE_GRASS);
}
}
SINGLE_BATTLE_TEST("Reflect Type fails if the user is Terastallized")
{
GIVEN {
PLAYER(SPECIES_ARCANINE) { TeraType(TYPE_NORMAL); }
OPPONENT(SPECIES_POLIWRATH);
} WHEN {
TURN { MOVE(player, MOVE_REFLECT_TYPE, gimmick: GIMMICK_TERA); }
} SCENE {
MESSAGE("Arcanine used Reflect Type!");
MESSAGE("But it failed!");
} THEN {
EXPECT_EQ(player->types[0], TYPE_FIRE);
EXPECT_EQ(player->types[1], TYPE_FIRE);
EXPECT_EQ(player->types[2], TYPE_MYSTERY);
}
}
SINGLE_BATTLE_TEST("Reflect Type succeeds against a Terastallized target and copies its Tera type")
{
GIVEN {
ASSUME(gSpeciesInfo[SPECIES_POLIWRATH].types[0] != TYPE_NORMAL);
ASSUME(gSpeciesInfo[SPECIES_POLIWRATH].types[1] != TYPE_NORMAL);
PLAYER(SPECIES_ARCANINE) { TeraType(TYPE_NORMAL); }
OPPONENT(SPECIES_POLIWRATH);
} WHEN {
TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_REFLECT_TYPE); }
} SCENE {
MESSAGE("The opposing Poliwrath used Reflect Type!");
} THEN {
EXPECT_EQ(opponent->types[0], TYPE_NORMAL);
EXPECT_EQ(opponent->types[1], TYPE_NORMAL);
EXPECT_EQ(opponent->types[2], TYPE_NORMAL);
}
}