diff --git a/src/battle-scene.ts b/src/battle-scene.ts index cbaf07d579c..6a3958e385f 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -132,7 +132,7 @@ import { BattleStyle } from "#enums/battle-style"; import { Biome } from "#enums/biome"; import type { ExpNotification } from "#enums/exp-notification"; import { MoneyFormat } from "#enums/money-format"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import { UiTheme } from "#enums/ui-theme"; @@ -707,14 +707,14 @@ export default class BattleScene extends SceneBase { ui.setup(); - const defaultMoves = [Moves.TACKLE, Moves.TAIL_WHIP, Moves.FOCUS_ENERGY, Moves.STRUGGLE]; + const defaultMoves = [MoveId.TACKLE, MoveId.TAIL_WHIP, MoveId.FOCUS_ENERGY, MoveId.STRUGGLE]; Promise.all([ Promise.all(loadPokemonAssets), initCommonAnims().then(() => loadCommonAnimAssets(true)), - Promise.all([Moves.TACKLE, Moves.TAIL_WHIP, Moves.FOCUS_ENERGY, Moves.STRUGGLE].map(m => initMoveAnim(m))).then( - () => loadMoveAnimAssets(defaultMoves, true), - ), + Promise.all( + [MoveId.TACKLE, MoveId.TAIL_WHIP, MoveId.FOCUS_ENERGY, MoveId.STRUGGLE].map(m => initMoveAnim(m)), + ).then(() => loadMoveAnimAssets(defaultMoves, true)), this.initStarterColors(), ]).then(() => { this.pushPhase(new LoginPhase()); diff --git a/src/battle.ts b/src/battle.ts index 07e520d6bc0..c25c3941f07 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -19,7 +19,7 @@ import type { EnemyPokemon, PlayerPokemon, TurnMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { MusicPreference } from "#app/system/settings/settings"; import { Species } from "#enums/species"; @@ -78,7 +78,7 @@ export default class Battle { public battleScore = 0; public postBattleLoot: PokemonHeldItemModifier[] = []; public escapeAttempts = 0; - public lastMove: Moves; + public lastMove: MoveId; public battleSeed: string = randomString(16, true); private battleSeedState: string | null = null; public moneyScattered = 0; diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 1ba61a2b931..7b2901b5651 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -53,7 +53,7 @@ import { WeatherType } from "#enums/weather-type"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { SwitchType } from "#enums/switch-type"; import { MoveFlags } from "#enums/MoveFlags"; @@ -1139,13 +1139,13 @@ export class MoveEffectChanceMultiplierAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const exceptMoves = [ Moves.ORDER_UP, Moves.ELECTRO_SHOT ]; + const exceptMoves = [ MoveId.ORDER_UP, MoveId.ELECTRO_SHOT ]; return !((args[0] as NumberHolder).value <= 0 || exceptMoves.includes((args[1] as Move).id)); } /** * @param args [0]: {@linkcode NumberHolder} Move additional effect chance. Has to be higher than or equal to 0. - * [1]: {@linkcode Moves } Move used by the ability user. + * [1]: {@linkcode MoveId } Move used by the ability user. */ override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { (args[0] as NumberHolder).value *= this.chanceMultiplier; @@ -1249,7 +1249,7 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { * * Can be applied if: * - The ability's condition is met, e.g. pixilate only boosts normal moves, - * - The move is not forbidden from having its type changed by an ability, e.g. {@linkcode Moves.MULTI_ATTACK} + * - The move is not forbidden from having its type changed by an ability, e.g. {@linkcode MoveId.MULTI_ATTACK} * - The user is not terastallized and using tera blast * - The user is not a terastallized terapagos with tera stellar using tera starstorm * @param pokemon - The pokemon that has the move type changing ability and is using the attacking move @@ -1264,8 +1264,8 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { return (!this.condition || this.condition(pokemon, _defender, move)) && !noAbilityTypeOverrideMoves.has(move.id) && (!pokemon.isTerastallized || - (move.id !== Moves.TERA_BLAST && - (move.id !== Moves.TERA_STARSTORM || pokemon.getTeraType() !== PokemonType.STELLAR || !pokemon.hasSpecies(Species.TERAPAGOS)))); + (move.id !== MoveId.TERA_BLAST && + (move.id !== MoveId.TERA_STARSTORM || pokemon.getTeraType() !== PokemonType.STELLAR || !pokemon.hasSpecies(Species.TERAPAGOS)))); } /** @@ -1296,7 +1296,7 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr { override canApplyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): boolean { if (!pokemon.isTerastallized && - move.id !== Moves.STRUGGLE && + move.id !== MoveId.STRUGGLE && /** * Skip moves that call other moves because these moves generate a following move that will trigger this ability attribute * @see {@link https://bulbapedia.bulbagarden.net/wiki/Category:Moves_that_call_other_moves} @@ -2826,7 +2826,7 @@ export class CommanderAbAttr extends AbAttr { // Play an animation of the source jumping into the ally Dondozo's mouth globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.COMMANDER_APPLY); // Apply boosts from this effect to the ally Dondozo - pokemon.getAlly()?.addTag(BattlerTagType.COMMANDED, 0, Moves.NONE, pokemon.id); + pokemon.getAlly()?.addTag(BattlerTagType.COMMANDED, 0, MoveId.NONE, pokemon.id); // Cancel the source Pokemon's next move (if a move is queued) globalScene.tryRemovePhase((phase) => phase instanceof MovePhase && phase.pokemon === pokemon); } @@ -3712,7 +3712,7 @@ function getAnticipationCondition(): AbAttrCondition { return true; } // edge case for hidden power, type is computed - if (move.getMove().id === Moves.HIDDEN_POWER) { + if (move.getMove().id === MoveId.HIDDEN_POWER) { const iv_val = Math.floor(((opponent.ivs[Stat.HP] & 1) + (opponent.ivs[Stat.ATK] & 1) * 2 + (opponent.ivs[Stat.DEF] & 1) * 4 @@ -3764,7 +3764,7 @@ export class ForewarnAbAttr extends PostSummonAbAttr { movePower = 1; } else if (move?.getMove().hasAttr(OneHitKOAttr)) { movePower = 150; - } else if (move?.getMove().id === Moves.COUNTER || move?.getMove().id === Moves.MIRROR_COAT || move?.getMove().id === Moves.METAL_BURST) { + } else if (move?.getMove().id === MoveId.COUNTER || move?.getMove().id === MoveId.MIRROR_COAT || move?.getMove().id === MoveId.METAL_BURST) { movePower = 120; } else if (move?.getMove().power === -1) { movePower = 80; @@ -4856,7 +4856,7 @@ export class RedirectMoveAbAttr extends AbAttr { */ override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - if (!this.canRedirect(args[0] as Moves, args[2] as Pokemon)) { + if (!this.canRedirect(args[0] as MoveId, args[2] as Pokemon)) { return false; } const target = args[1] as NumberHolder; @@ -4870,7 +4870,7 @@ export class RedirectMoveAbAttr extends AbAttr { target.value = newTarget; } - canRedirect(moveId: Moves, user: Pokemon): boolean { + canRedirect(moveId: MoveId, user: Pokemon): boolean { const move = allMoves[moveId]; return !![ MoveTarget.NEAR_OTHER, MoveTarget.OTHER ].find(t => move.moveTarget === t); } @@ -4884,7 +4884,7 @@ export class RedirectTypeMoveAbAttr extends RedirectMoveAbAttr { this.type = type; } - canRedirect(moveId: Moves, user: Pokemon): boolean { + canRedirect(moveId: MoveId, user: Pokemon): boolean { return super.canRedirect(moveId, user) && user.getMoveType(allMoves[moveId]) === this.type; } } @@ -5050,7 +5050,7 @@ export class InfiltratorAbAttr extends AbAttr { /** * Attribute implementing the effects of {@link https://bulbapedia.bulbagarden.net/wiki/Magic_Bounce_(ability) | Magic Bounce}. * Allows the source to bounce back {@linkcode MoveFlags.REFLECTABLE | Reflectable} - * moves as if the user had used {@linkcode Moves.MAGIC_COAT | Magic Coat}. + * moves as if the user had used {@linkcode MoveId.MAGIC_COAT | Magic Coat}. */ export class ReflectStatusMoveAbAttr extends AbAttr { } @@ -5731,7 +5731,7 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { source?: Pokemon): boolean { const moveHistory = pokemon.getMoveHistory(); // Will not activate when the Pokémon's HP is lowered by cutting its own HP - const fordbiddenAttackingMoves = [ Moves.BELLY_DRUM, Moves.SUBSTITUTE, Moves.CURSE, Moves.PAIN_SPLIT ]; + const fordbiddenAttackingMoves = [ MoveId.BELLY_DRUM, MoveId.SUBSTITUTE, MoveId.CURSE, MoveId.PAIN_SPLIT ]; if (moveHistory.length > 0) { const lastMoveUsed = moveHistory[moveHistory.length - 1]; if (fordbiddenAttackingMoves.includes(lastMoveUsed.move)) { @@ -5740,13 +5740,13 @@ export class PostDamageForceSwitchAbAttr extends PostDamageAbAttr { } // Dragon Tail and Circle Throw switch out Pokémon before the Ability activates. - const fordbiddenDefendingMoves = [ Moves.DRAGON_TAIL, Moves.CIRCLE_THROW ]; + const fordbiddenDefendingMoves = [ MoveId.DRAGON_TAIL, MoveId.CIRCLE_THROW ]; if (source) { const enemyMoveHistory = source.getMoveHistory(); if (enemyMoveHistory.length > 0) { const enemyLastMoveUsed = enemyMoveHistory[enemyMoveHistory.length - 1]; // Will not activate if the Pokémon's HP falls below half while it is in the air during Sky Drop. - if (fordbiddenDefendingMoves.includes(enemyLastMoveUsed.move) || enemyLastMoveUsed.move === Moves.SKY_DROP && enemyLastMoveUsed.result === MoveResult.OTHER) { + if (fordbiddenDefendingMoves.includes(enemyLastMoveUsed.move) || enemyLastMoveUsed.move === MoveId.SKY_DROP && enemyLastMoveUsed.result === MoveResult.OTHER) { return false; // Will not activate if the Pokémon's HP falls below half by a move affected by Sheer Force. // TODO: Make this use the sheer force disable condition diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index c7c9e47de9f..ae96bf2b04d 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -25,7 +25,7 @@ import i18next from "i18next"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; @@ -41,7 +41,7 @@ export abstract class ArenaTag { constructor( public tagType: ArenaTagType, public turnCount: number, - public sourceMove?: Moves, + public sourceMove?: MoveId, public sourceId?: number, public side: ArenaTagSide = ArenaTagSide.BOTH, ) {} @@ -116,7 +116,7 @@ export abstract class ArenaTag { */ export class MistTag extends ArenaTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.MIST, turnCount, Moves.MIST, sourceId, side); + super(ArenaTagType.MIST, turnCount, MoveId.MIST, sourceId, side); } onAdd(arena: Arena, quiet = false): void { @@ -188,7 +188,7 @@ export class WeakenMoveScreenTag extends ArenaTag { constructor( tagType: ArenaTagType, turnCount: number, - sourceMove: Moves, + sourceMove: MoveId, sourceId: number, side: ArenaTagSide, weakenedCategories: MoveCategory[], @@ -230,11 +230,11 @@ export class WeakenMoveScreenTag extends ArenaTag { /** * Reduces the damage of physical moves. - * Used by {@linkcode Moves.REFLECT} + * Used by {@linkcode MoveId.REFLECT} */ class ReflectTag extends WeakenMoveScreenTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.REFLECT, turnCount, Moves.REFLECT, sourceId, side, [MoveCategory.PHYSICAL]); + super(ArenaTagType.REFLECT, turnCount, MoveId.REFLECT, sourceId, side, [MoveCategory.PHYSICAL]); } onAdd(_arena: Arena, quiet = false): void { @@ -250,11 +250,11 @@ class ReflectTag extends WeakenMoveScreenTag { /** * Reduces the damage of special moves. - * Used by {@linkcode Moves.LIGHT_SCREEN} + * Used by {@linkcode MoveId.LIGHT_SCREEN} */ class LightScreenTag extends WeakenMoveScreenTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.LIGHT_SCREEN, turnCount, Moves.LIGHT_SCREEN, sourceId, side, [MoveCategory.SPECIAL]); + super(ArenaTagType.LIGHT_SCREEN, turnCount, MoveId.LIGHT_SCREEN, sourceId, side, [MoveCategory.SPECIAL]); } onAdd(_arena: Arena, quiet = false): void { @@ -270,11 +270,11 @@ class LightScreenTag extends WeakenMoveScreenTag { /** * Reduces the damage of physical and special moves. - * Used by {@linkcode Moves.AURORA_VEIL} + * Used by {@linkcode MoveId.AURORA_VEIL} */ class AuroraVeilTag extends WeakenMoveScreenTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.AURORA_VEIL, turnCount, Moves.AURORA_VEIL, sourceId, side, [ + super(ArenaTagType.AURORA_VEIL, turnCount, MoveId.AURORA_VEIL, sourceId, side, [ MoveCategory.SPECIAL, MoveCategory.PHYSICAL, ]); @@ -291,7 +291,7 @@ class AuroraVeilTag extends WeakenMoveScreenTag { } } -type ProtectConditionFunc = (arena: Arena, moveId: Moves) => boolean; +type ProtectConditionFunc = (arena: Arena, moveId: MoveId) => boolean; /** * Class to implement conditional team protection @@ -305,7 +305,7 @@ export class ConditionalProtectTag extends ArenaTag { constructor( tagType: ArenaTagType, - sourceMove: Moves, + sourceMove: MoveId, sourceId: number, side: ArenaTagSide, condition: ProtectConditionFunc, @@ -337,7 +337,7 @@ export class ConditionalProtectTag extends ArenaTag { * @param isProtected a {@linkcode BooleanHolder} used to flag if the move is protected against * @param _attacker the attacking {@linkcode Pokemon} * @param defender the defending {@linkcode Pokemon} - * @param moveId the {@linkcode Moves | identifier} for the move being used + * @param moveId the {@linkcode MoveId | identifier} for the move being used * @param ignoresProtectBypass a {@linkcode BooleanHolder} used to flag if a protection effect supercedes effects that ignore protection * @returns `true` if this tag protected against the attack; `false` otherwise */ @@ -347,7 +347,7 @@ export class ConditionalProtectTag extends ArenaTag { isProtected: BooleanHolder, _attacker: Pokemon, defender: Pokemon, - moveId: Moves, + moveId: MoveId, ignoresProtectBypass: BooleanHolder, ): boolean { if ((this.side === ArenaTagSide.PLAYER) === defender.isPlayer() && this.protectConditionFunc(arena, moveId)) { @@ -375,7 +375,7 @@ export class ConditionalProtectTag extends ArenaTag { * Condition function for {@link https://bulbapedia.bulbagarden.net/wiki/Quick_Guard_(move) Quick Guard's} * protection effect. * @param _arena {@linkcode Arena} The arena containing the protection effect - * @param moveId {@linkcode Moves} The move to check against this condition + * @param moveId {@linkcode MoveId} The move to check against this condition * @returns `true` if the incoming move's priority is greater than 0. * This includes moves with modified priorities from abilities (e.g. Prankster) */ @@ -398,7 +398,7 @@ const QuickGuardConditionFunc: ProtectConditionFunc = (_arena, moveId) => { */ class QuickGuardTag extends ConditionalProtectTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.QUICK_GUARD, Moves.QUICK_GUARD, sourceId, side, QuickGuardConditionFunc); + super(ArenaTagType.QUICK_GUARD, MoveId.QUICK_GUARD, sourceId, side, QuickGuardConditionFunc); } } @@ -406,7 +406,7 @@ class QuickGuardTag extends ConditionalProtectTag { * Condition function for {@link https://bulbapedia.bulbagarden.net/wiki/Wide_Guard_(move) Wide Guard's} * protection effect. * @param _arena {@linkcode Arena} The arena containing the protection effect - * @param moveId {@linkcode Moves} The move to check against this condition + * @param moveId {@linkcode MoveId} The move to check against this condition * @returns `true` if the incoming move is multi-targeted (even if it's only used against one Pokemon). */ const WideGuardConditionFunc: ProtectConditionFunc = (_arena, moveId): boolean => { @@ -429,7 +429,7 @@ const WideGuardConditionFunc: ProtectConditionFunc = (_arena, moveId): boolean = */ class WideGuardTag extends ConditionalProtectTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.WIDE_GUARD, Moves.WIDE_GUARD, sourceId, side, WideGuardConditionFunc); + super(ArenaTagType.WIDE_GUARD, MoveId.WIDE_GUARD, sourceId, side, WideGuardConditionFunc); } } @@ -437,7 +437,7 @@ class WideGuardTag extends ConditionalProtectTag { * Condition function for {@link https://bulbapedia.bulbagarden.net/wiki/Mat_Block_(move) Mat Block's} * protection effect. * @param _arena {@linkcode Arena} The arena containing the protection effect. - * @param moveId {@linkcode Moves} The move to check against this condition. + * @param moveId {@linkcode MoveId} The move to check against this condition. * @returns `true` if the incoming move is not a Status move. */ const MatBlockConditionFunc: ProtectConditionFunc = (_arena, moveId): boolean => { @@ -451,7 +451,7 @@ const MatBlockConditionFunc: ProtectConditionFunc = (_arena, moveId): boolean => */ class MatBlockTag extends ConditionalProtectTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.MAT_BLOCK, Moves.MAT_BLOCK, sourceId, side, MatBlockConditionFunc); + super(ArenaTagType.MAT_BLOCK, MoveId.MAT_BLOCK, sourceId, side, MatBlockConditionFunc); } onAdd(_arena: Arena) { @@ -474,7 +474,7 @@ class MatBlockTag extends ConditionalProtectTag { * Condition function for {@link https://bulbapedia.bulbagarden.net/wiki/Crafty_Shield_(move) Crafty Shield's} * protection effect. * @param _arena {@linkcode Arena} The arena containing the protection effect - * @param moveId {@linkcode Moves} The move to check against this condition + * @param moveId {@linkcode MoveId} The move to check against this condition * @returns `true` if the incoming move is a Status move, is not a hazard, and does not target all * Pokemon or sides of the field. */ @@ -495,7 +495,7 @@ const CraftyShieldConditionFunc: ProtectConditionFunc = (_arena, moveId) => { */ class CraftyShieldTag extends ConditionalProtectTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.CRAFTY_SHIELD, Moves.CRAFTY_SHIELD, sourceId, side, CraftyShieldConditionFunc, true); + super(ArenaTagType.CRAFTY_SHIELD, MoveId.CRAFTY_SHIELD, sourceId, side, CraftyShieldConditionFunc, true); } } @@ -507,11 +507,11 @@ export class NoCritTag extends ArenaTag { /** * Constructor method for the NoCritTag class * @param turnCount `number` the number of turns this effect lasts - * @param sourceMove {@linkcode Moves} the move that created this effect + * @param sourceMove {@linkcode MoveId} the move that created this effect * @param sourceId `number` the ID of the {@linkcode Pokemon} that created this effect * @param side {@linkcode ArenaTagSide} the side to which this effect belongs */ - constructor(turnCount: number, sourceMove: Moves, sourceId: number, side: ArenaTagSide) { + constructor(turnCount: number, sourceMove: MoveId, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.NO_CRIT, turnCount, sourceMove, sourceId, side); } @@ -546,7 +546,7 @@ class WishTag extends ArenaTag { private healHp: number; constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.WISH, turnCount, Moves.WISH, sourceId, side); + super(ArenaTagType.WISH, turnCount, MoveId.WISH, sourceId, side); } onAdd(_arena: Arena): void { @@ -588,7 +588,7 @@ export class WeakenMoveTypeTag extends ArenaTag { * @param sourceMove - The move that created the tag. * @param sourceId - The ID of the source of the tag. */ - constructor(tagType: ArenaTagType, turnCount: number, type: PokemonType, sourceMove: Moves, sourceId: number) { + constructor(tagType: ArenaTagType, turnCount: number, type: PokemonType, sourceMove: MoveId, sourceId: number) { super(tagType, turnCount, sourceMove, sourceId); this.weakenedType = type; @@ -617,7 +617,7 @@ export class WeakenMoveTypeTag extends ArenaTag { */ class MudSportTag extends WeakenMoveTypeTag { constructor(turnCount: number, sourceId: number) { - super(ArenaTagType.MUD_SPORT, turnCount, PokemonType.ELECTRIC, Moves.MUD_SPORT, sourceId); + super(ArenaTagType.MUD_SPORT, turnCount, PokemonType.ELECTRIC, MoveId.MUD_SPORT, sourceId); } onAdd(_arena: Arena): void { @@ -635,7 +635,7 @@ class MudSportTag extends WeakenMoveTypeTag { */ class WaterSportTag extends WeakenMoveTypeTag { constructor(turnCount: number, sourceId: number) { - super(ArenaTagType.WATER_SPORT, turnCount, PokemonType.FIRE, Moves.WATER_SPORT, sourceId); + super(ArenaTagType.WATER_SPORT, turnCount, PokemonType.FIRE, MoveId.WATER_SPORT, sourceId); } onAdd(_arena: Arena): void { @@ -653,7 +653,7 @@ class WaterSportTag extends WeakenMoveTypeTag { * Converts Normal-type moves to Electric type for the rest of the turn. */ export class IonDelugeTag extends ArenaTag { - constructor(sourceMove?: Moves) { + constructor(sourceMove?: MoveId) { super(ArenaTagType.ION_DELUGE, 1, sourceMove); } @@ -696,7 +696,7 @@ export class ArenaTrapTag extends ArenaTag { * @param side - The side (player or enemy) the tag affects. * @param maxLayers - The maximum amount of layers this tag can have. */ - constructor(tagType: ArenaTagType, sourceMove: Moves, sourceId: number, side: ArenaTagSide, maxLayers: number) { + constructor(tagType: ArenaTagType, sourceMove: MoveId, sourceId: number, side: ArenaTagSide, maxLayers: number) { super(tagType, 0, sourceMove, sourceId, side); this.layers = 1; @@ -750,7 +750,7 @@ export class ArenaTrapTag extends ArenaTag { */ class SpikesTag extends ArenaTrapTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.SPIKES, Moves.SPIKES, sourceId, side, 3); + super(ArenaTagType.SPIKES, MoveId.SPIKES, sourceId, side, 3); } onAdd(arena: Arena, quiet = false): void { @@ -802,7 +802,7 @@ class ToxicSpikesTag extends ArenaTrapTag { private neutralized: boolean; constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.TOXIC_SPIKES, Moves.TOXIC_SPIKES, sourceId, side, 2); + super(ArenaTagType.TOXIC_SPIKES, MoveId.TOXIC_SPIKES, sourceId, side, 2); this.neutralized = false; } @@ -867,7 +867,7 @@ class ToxicSpikesTag extends ArenaTrapTag { } /** - * Arena Tag class for delayed attacks, such as {@linkcode Moves.FUTURE_SIGHT} or {@linkcode Moves.DOOM_DESIRE}. + * Arena Tag class for delayed attacks, such as {@linkcode MoveId.FUTURE_SIGHT} or {@linkcode MoveId.DOOM_DESIRE}. * Delays the attack's effect by a set amount of turns, usually 3 (including the turn the move is used), * and deals damage after the turn count is reached. */ @@ -876,7 +876,7 @@ export class DelayedAttackTag extends ArenaTag { constructor( tagType: ArenaTagType, - sourceMove: Moves | undefined, + sourceMove: MoveId | undefined, sourceId: number, targetIndex: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH, @@ -909,7 +909,7 @@ export class DelayedAttackTag extends ArenaTag { */ class StealthRockTag extends ArenaTrapTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.STEALTH_ROCK, Moves.STEALTH_ROCK, sourceId, side, 1); + super(ArenaTagType.STEALTH_ROCK, MoveId.STEALTH_ROCK, sourceId, side, 1); } onAdd(arena: Arena, quiet = false): void { @@ -994,7 +994,7 @@ class StealthRockTag extends ArenaTrapTag { */ class StickyWebTag extends ArenaTrapTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.STICKY_WEB, Moves.STICKY_WEB, sourceId, side, 1); + super(ArenaTagType.STICKY_WEB, MoveId.STICKY_WEB, sourceId, side, 1); } onAdd(arena: Arena, quiet = false): void { @@ -1055,7 +1055,7 @@ class StickyWebTag extends ArenaTrapTag { */ export class TrickRoomTag extends ArenaTag { constructor(turnCount: number, sourceId: number) { - super(ArenaTagType.TRICK_ROOM, turnCount, Moves.TRICK_ROOM, sourceId); + super(ArenaTagType.TRICK_ROOM, turnCount, MoveId.TRICK_ROOM, sourceId); } /** @@ -1094,7 +1094,7 @@ export class TrickRoomTag extends ArenaTag { */ export class GravityTag extends ArenaTag { constructor(turnCount: number) { - super(ArenaTagType.GRAVITY, turnCount, Moves.GRAVITY); + super(ArenaTagType.GRAVITY, turnCount, MoveId.GRAVITY); } onAdd(_arena: Arena): void { @@ -1122,7 +1122,7 @@ export class GravityTag extends ArenaTag { */ class TailwindTag extends ArenaTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.TAILWIND, turnCount, Moves.TAILWIND, sourceId, side); + super(ArenaTagType.TAILWIND, turnCount, MoveId.TAILWIND, sourceId, side); } onAdd(_arena: Arena, quiet = false): void { @@ -1171,11 +1171,11 @@ class TailwindTag extends ArenaTag { /** * Arena Tag class for {@link https://bulbapedia.bulbagarden.net/wiki/Happy_Hour_(move) Happy Hour}. - * Doubles the prize money from trainers and money moves like {@linkcode Moves.PAY_DAY} and {@linkcode Moves.MAKE_IT_RAIN}. + * Doubles the prize money from trainers and money moves like {@linkcode MoveId.PAY_DAY} and {@linkcode MoveId.MAKE_IT_RAIN}. */ class HappyHourTag extends ArenaTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.HAPPY_HOUR, turnCount, Moves.HAPPY_HOUR, sourceId, side); + super(ArenaTagType.HAPPY_HOUR, turnCount, MoveId.HAPPY_HOUR, sourceId, side); } onAdd(_arena: Arena): void { @@ -1189,7 +1189,7 @@ class HappyHourTag extends ArenaTag { class SafeguardTag extends ArenaTag { constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.SAFEGUARD, turnCount, Moves.SAFEGUARD, sourceId, side); + super(ArenaTagType.SAFEGUARD, turnCount, MoveId.SAFEGUARD, sourceId, side); } onAdd(_arena: Arena): void { @@ -1221,7 +1221,7 @@ class NoneTag extends ArenaTag { */ class ImprisonTag extends ArenaTrapTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.IMPRISON, Moves.IMPRISON, sourceId, side, 1); + super(ArenaTagType.IMPRISON, MoveId.IMPRISON, sourceId, side, 1); } /** @@ -1234,7 +1234,7 @@ class ImprisonTag extends ArenaTrapTag { const party = this.getAffectedPokemon(); party?.forEach((p: Pokemon) => { if (p.isAllowedInBattle()) { - p.addTag(BattlerTagType.IMPRISON, 1, Moves.IMPRISON, this.sourceId); + p.addTag(BattlerTagType.IMPRISON, 1, MoveId.IMPRISON, this.sourceId); } }); globalScene.queueMessage( @@ -1263,7 +1263,7 @@ class ImprisonTag extends ArenaTrapTag { override activateTrap(pokemon: Pokemon): boolean { const source = this.getSourcePokemon(); if (source?.isActive(true) && pokemon.isAllowedInBattle()) { - pokemon.addTag(BattlerTagType.IMPRISON, 1, Moves.IMPRISON, this.sourceId); + pokemon.addTag(BattlerTagType.IMPRISON, 1, MoveId.IMPRISON, this.sourceId); } return true; } @@ -1289,7 +1289,7 @@ class ImprisonTag extends ArenaTrapTag { */ class FireGrassPledgeTag extends ArenaTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.FIRE_GRASS_PLEDGE, 4, Moves.FIRE_PLEDGE, sourceId, side); + super(ArenaTagType.FIRE_GRASS_PLEDGE, 4, MoveId.FIRE_PLEDGE, sourceId, side); } override onAdd(_arena: Arena): void { @@ -1334,7 +1334,7 @@ class FireGrassPledgeTag extends ArenaTag { */ class WaterFirePledgeTag extends ArenaTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.WATER_FIRE_PLEDGE, 4, Moves.WATER_PLEDGE, sourceId, side); + super(ArenaTagType.WATER_FIRE_PLEDGE, 4, MoveId.WATER_PLEDGE, sourceId, side); } override onAdd(_arena: Arena): void { @@ -1368,7 +1368,7 @@ class WaterFirePledgeTag extends ArenaTag { */ class GrassWaterPledgeTag extends ArenaTag { constructor(sourceId: number, side: ArenaTagSide) { - super(ArenaTagType.GRASS_WATER_PLEDGE, 4, Moves.GRASS_PLEDGE, sourceId, side); + super(ArenaTagType.GRASS_WATER_PLEDGE, 4, MoveId.GRASS_PLEDGE, sourceId, side); } override onAdd(_arena: Arena): void { @@ -1390,7 +1390,7 @@ class GrassWaterPledgeTag extends ArenaTag { */ export class FairyLockTag extends ArenaTag { constructor(turnCount: number, sourceId: number) { - super(ArenaTagType.FAIRY_LOCK, turnCount, Moves.FAIRY_LOCK, sourceId); + super(ArenaTagType.FAIRY_LOCK, turnCount, MoveId.FAIRY_LOCK, sourceId); } onAdd(_arena: Arena): void { @@ -1485,7 +1485,7 @@ export class SuppressAbilitiesTag extends ArenaTag { export function getArenaTag( tagType: ArenaTagType, turnCount: number, - sourceMove: Moves | undefined, + sourceMove: MoveId | undefined, sourceId: number, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH, diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index 73c6300166b..1ffab79c1ed 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -1,587 +1,587 @@ import { allMoves } from "../data-lists"; import { getEnumKeys, getEnumValues } from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; export const speciesEggMoves = { - [Species.BULBASAUR]: [ Moves.SAPPY_SEED, Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.MATCHA_GOTCHA ], - [Species.CHARMANDER]: [ Moves.DRAGON_DANCE, Moves.BITTER_BLADE, Moves.EARTH_POWER, Moves.OBLIVION_WING ], - [Species.SQUIRTLE]: [ Moves.FREEZE_DRY, Moves.ARMOR_CANNON, Moves.SHORE_UP, Moves.ORIGIN_PULSE ], - [Species.CATERPIE]: [ Moves.SANDSEAR_STORM, Moves.SILK_TRAP, Moves.TWIN_BEAM, Moves.BLEAKWIND_STORM ], - [Species.WEEDLE]: [ Moves.THOUSAND_ARROWS, Moves.NOXIOUS_TORQUE, Moves.ATTACK_ORDER, Moves.VICTORY_DANCE ], - [Species.PIDGEY]: [ Moves.BLEAKWIND_STORM, Moves.SANDSEAR_STORM, Moves.CALM_MIND, Moves.BOOMBURST ], - [Species.RATTATA]: [ Moves.HYPER_FANG, Moves.PSYCHIC_FANGS, Moves.FIRE_FANG, Moves.EXTREME_SPEED ], - [Species.SPEAROW]: [ Moves.FLOATY_FALL, Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.TRIPLE_ARROWS ], - [Species.EKANS]: [ Moves.NOXIOUS_TORQUE, Moves.DRAGON_DANCE, Moves.SLACK_OFF, Moves.SHED_TAIL ], - [Species.SANDSHREW]: [ Moves.HIGH_HORSEPOWER, Moves.DIRE_CLAW, Moves.SHORE_UP, Moves.MIGHTY_CLEAVE ], - [Species.NIDORAN_F]: [ Moves.CALM_MIND, Moves.MOONLIGHT, Moves.MALIGNANT_CHAIN, Moves.SANDSEAR_STORM ], - [Species.NIDORAN_M]: [ Moves.DRAGON_DANCE, Moves.MOUNTAIN_GALE, Moves.NOXIOUS_TORQUE, Moves.PRECIPICE_BLADES ], - [Species.VULPIX]: [ Moves.MOONBLAST, Moves.INFERNAL_PARADE, Moves.MORNING_SUN, Moves.TAIL_GLOW ], - [Species.ZUBAT]: [ Moves.FLOATY_FALL, Moves.DIRE_CLAW, Moves.SWORDS_DANCE, Moves.COLLISION_COURSE ], - [Species.ODDISH]: [ Moves.SLUDGE_BOMB, Moves.FIERY_DANCE, Moves.STRENGTH_SAP, Moves.SPORE ], - [Species.PARAS]: [ Moves.LEECH_LIFE, Moves.HORN_LEECH, Moves.CRABHAMMER, Moves.SAPPY_SEED ], - [Species.VENONAT]: [ Moves.SLUDGE_BOMB, Moves.TOXIC_THREAD, Moves.EARTH_POWER, Moves.STORED_POWER ], - [Species.DIGLETT]: [ Moves.TRIPLE_DIVE, Moves.SWORDS_DANCE, Moves.TRIPLE_AXEL, Moves.HEADLONG_RUSH ], - [Species.MEOWTH]: [ Moves.HEART_STAMP, Moves.SWORDS_DANCE, Moves.SIZZLY_SLIDE, Moves.TAIL_SLAP ], - [Species.PSYDUCK]: [ Moves.FROST_BREATH, Moves.AQUA_STEP, Moves.MYSTICAL_POWER, Moves.BOUNCY_BUBBLE ], - [Species.MANKEY]: [ Moves.DRAIN_PUNCH, Moves.SLACK_OFF, Moves.METEOR_MASH, Moves.NO_RETREAT ], - [Species.GROWLITHE]: [ Moves.ZING_ZAP, Moves.PARTING_SHOT, Moves.MORNING_SUN, Moves.SACRED_FIRE ], - [Species.POLIWAG]: [ Moves.SLACK_OFF, Moves.WILDBOLT_STORM, Moves.DRAIN_PUNCH, Moves.SURGING_STRIKES ], - [Species.ABRA]: [ Moves.AURA_SPHERE, Moves.BADDY_BAD, Moves.ICE_BEAM, Moves.PSYSTRIKE ], - [Species.MACHOP]: [ Moves.COMBAT_TORQUE, Moves.METEOR_MASH, Moves.MOUNTAIN_GALE, Moves.FISSURE ], - [Species.BELLSPROUT]: [ Moves.SOLAR_BLADE, Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.VICTORY_DANCE ], - [Species.TENTACOOL]: [ Moves.BANEFUL_BUNKER, Moves.MALIGNANT_CHAIN, Moves.BOUNCY_BUBBLE, Moves.STRENGTH_SAP ], - [Species.GEODUDE]: [ Moves.FLARE_BLITZ, Moves.HEAD_SMASH, Moves.SHORE_UP, Moves.SHELL_SMASH ], - [Species.PONYTA]: [ Moves.HEADLONG_RUSH, Moves.FIRE_LASH, Moves.SWORDS_DANCE, Moves.VOLT_TACKLE ], - [Species.SLOWPOKE]: [ Moves.SPLISHY_SPLASH, Moves.FROST_BREATH, Moves.SHED_TAIL, Moves.MYSTICAL_POWER ], - [Species.MAGNEMITE]: [ Moves.PARABOLIC_CHARGE, Moves.FLAMETHROWER, Moves.ICE_BEAM, Moves.THUNDERCLAP ], - [Species.FARFETCHD]: [ Moves.IVY_CUDGEL, Moves.TRIPLE_ARROWS, Moves.DRILL_RUN, Moves.VICTORY_DANCE ], - [Species.DODUO]: [ Moves.TRIPLE_AXEL, Moves.HYPER_DRILL, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ], - [Species.SEEL]: [ Moves.FREEZE_DRY, Moves.BOUNCY_BUBBLE, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ], - [Species.GRIMER]: [ Moves.SUCKER_PUNCH, Moves.CURSE, Moves.NOXIOUS_TORQUE, Moves.STRENGTH_SAP ], - [Species.SHELLDER]: [ Moves.ROCK_BLAST, Moves.WATER_SHURIKEN, Moves.BANEFUL_BUNKER, Moves.BONE_RUSH ], - [Species.GASTLY]: [ Moves.MALIGNANT_CHAIN, Moves.AURA_SPHERE, Moves.PARTING_SHOT, Moves.DARK_VOID ], - [Species.ONIX]: [ Moves.SHORE_UP, Moves.THOUSAND_WAVES, Moves.COIL, Moves.DIAMOND_STORM ], - [Species.DROWZEE]: [ Moves.BADDY_BAD, Moves.STRENGTH_SAP, Moves.LUMINA_CRASH, Moves.DARK_VOID ], - [Species.KRABBY]: [ Moves.DIRE_CLAW, Moves.DRAGON_HAMMER, Moves.IVY_CUDGEL, Moves.JET_PUNCH ], - [Species.VOLTORB]: [ Moves.NASTY_PLOT, Moves.FUSION_FLARE, Moves.FROST_BREATH, Moves.ELECTRO_DRIFT ], - [Species.EXEGGCUTE]: [ Moves.FICKLE_BEAM, Moves.APPLE_ACID, Moves.HEAT_WAVE, Moves.LUMINA_CRASH ], - [Species.CUBONE]: [ Moves.HEAD_SMASH, Moves.WOOD_HAMMER, Moves.SHADOW_SNEAK, Moves.BITTER_BLADE ], - [Species.LICKITUNG]: [ Moves.CRUSH_GRIP, Moves.FIRE_LASH, Moves.SLACK_OFF, Moves.MAGICAL_TORQUE ], - [Species.KOFFING]: [ Moves.SCALD, Moves.RECOVER, Moves.BODY_PRESS, Moves.MALIGNANT_CHAIN ], - [Species.RHYHORN]: [ Moves.SHORE_UP, Moves.ICE_HAMMER, Moves.ACCELEROCK, Moves.HEAD_SMASH ], - [Species.TANGELA]: [ Moves.NATURES_MADNESS, Moves.SNAP_TRAP, Moves.PARTING_SHOT, Moves.SAPPY_SEED ], - [Species.KANGASKHAN]: [ Moves.POWER_UP_PUNCH, Moves.TRAILBLAZE, Moves.COVET, Moves.SEISMIC_TOSS ], - [Species.HORSEA]: [ Moves.SNIPE_SHOT, Moves.TAKE_HEART, Moves.SHELL_SIDE_ARM, Moves.DRAGON_ENERGY ], - [Species.GOLDEEN]: [ Moves.GLACIAL_LANCE, Moves.SUPERCELL_SLAM, Moves.DRAGON_DANCE, Moves.FISHIOUS_REND ], - [Species.STARYU]: [ Moves.CALM_MIND, Moves.BOUNCY_BUBBLE, Moves.MOONBLAST, Moves.MYSTICAL_POWER ], - [Species.SCYTHER]: [ Moves.MIGHTY_CLEAVE, Moves.GEAR_GRIND, Moves.STORM_THROW, Moves.BITTER_BLADE ], - [Species.PINSIR]: [ Moves.HEADLONG_RUSH, Moves.LEECH_LIFE, Moves.CRUSH_GRIP, Moves.EXTREME_SPEED ], - [Species.TAUROS]: [ Moves.SWORDS_DANCE, Moves.FIRE_LASH, Moves.WICKED_TORQUE, Moves.COLLISION_COURSE ], - [Species.MAGIKARP]: [ Moves.FLIP_TURN, Moves.ICE_SPINNER, Moves.KNOCK_OFF, Moves.DRAGON_ASCENT ], - [Species.LAPRAS]: [ Moves.RECOVER, Moves.FREEZE_DRY, Moves.SCALD, Moves.SHELL_SMASH ], - [Species.DITTO]: [ Moves.MIMIC, Moves.SKETCH, Moves.METRONOME, Moves.IMPRISON ], - [Species.EEVEE]: [ Moves.WISH, Moves.NO_RETREAT, Moves.ZIPPY_ZAP, Moves.BOOMBURST ], - [Species.PORYGON]: [ Moves.THUNDERCLAP, Moves.AURA_SPHERE, Moves.FLAMETHROWER, Moves.TECHNO_BLAST ], - [Species.OMANYTE]: [ Moves.FREEZE_DRY, Moves.GIGA_DRAIN, Moves.POWER_GEM, Moves.STEAM_ERUPTION ], - [Species.KABUTO]: [ Moves.CEASELESS_EDGE, Moves.HIGH_HORSEPOWER, Moves.CRABHAMMER, Moves.MIGHTY_CLEAVE ], - [Species.AERODACTYL]: [ Moves.FLOATY_FALL, Moves.HIGH_HORSEPOWER, Moves.STONE_AXE, Moves.SWORDS_DANCE ], - [Species.ARTICUNO]: [ Moves.EARTH_POWER, Moves.CALM_MIND, Moves.AURORA_VEIL, Moves.AEROBLAST ], - [Species.ZAPDOS]: [ Moves.BLEAKWIND_STORM, Moves.CALM_MIND, Moves.SANDSEAR_STORM, Moves.ELECTRO_SHOT ], - [Species.MOLTRES]: [ Moves.EARTH_POWER, Moves.CALM_MIND, Moves.AEROBLAST, Moves.TORCH_SONG ], - [Species.DRATINI]: [ Moves.DRAGON_HAMMER, Moves.CRUSH_GRIP, Moves.FIRE_LASH, Moves.GIGATON_HAMMER ], - [Species.MEWTWO]: [ Moves.METEOR_MASH, Moves.MOONBLAST, Moves.THUNDEROUS_KICK, Moves.PHOTON_GEYSER ], - [Species.MEW]: [ Moves.PHOTON_GEYSER, Moves.MOONBLAST, Moves.ASTRAL_BARRAGE, Moves.SHELL_SMASH ], + [Species.BULBASAUR]: [ MoveId.SAPPY_SEED, MoveId.MALIGNANT_CHAIN, MoveId.EARTH_POWER, MoveId.MATCHA_GOTCHA ], + [Species.CHARMANDER]: [ MoveId.DRAGON_DANCE, MoveId.BITTER_BLADE, MoveId.EARTH_POWER, MoveId.OBLIVION_WING ], + [Species.SQUIRTLE]: [ MoveId.FREEZE_DRY, MoveId.ARMOR_CANNON, MoveId.SHORE_UP, MoveId.ORIGIN_PULSE ], + [Species.CATERPIE]: [ MoveId.SANDSEAR_STORM, MoveId.SILK_TRAP, MoveId.TWIN_BEAM, MoveId.BLEAKWIND_STORM ], + [Species.WEEDLE]: [ MoveId.THOUSAND_ARROWS, MoveId.NOXIOUS_TORQUE, MoveId.ATTACK_ORDER, MoveId.VICTORY_DANCE ], + [Species.PIDGEY]: [ MoveId.BLEAKWIND_STORM, MoveId.SANDSEAR_STORM, MoveId.CALM_MIND, MoveId.BOOMBURST ], + [Species.RATTATA]: [ MoveId.HYPER_FANG, MoveId.PSYCHIC_FANGS, MoveId.FIRE_FANG, MoveId.EXTREME_SPEED ], + [Species.SPEAROW]: [ MoveId.FLOATY_FALL, MoveId.EXTREME_SPEED, MoveId.KNOCK_OFF, MoveId.TRIPLE_ARROWS ], + [Species.EKANS]: [ MoveId.NOXIOUS_TORQUE, MoveId.DRAGON_DANCE, MoveId.SLACK_OFF, MoveId.SHED_TAIL ], + [Species.SANDSHREW]: [ MoveId.HIGH_HORSEPOWER, MoveId.DIRE_CLAW, MoveId.SHORE_UP, MoveId.MIGHTY_CLEAVE ], + [Species.NIDORAN_F]: [ MoveId.CALM_MIND, MoveId.MOONLIGHT, MoveId.MALIGNANT_CHAIN, MoveId.SANDSEAR_STORM ], + [Species.NIDORAN_M]: [ MoveId.DRAGON_DANCE, MoveId.MOUNTAIN_GALE, MoveId.NOXIOUS_TORQUE, MoveId.PRECIPICE_BLADES ], + [Species.VULPIX]: [ MoveId.MOONBLAST, MoveId.INFERNAL_PARADE, MoveId.MORNING_SUN, MoveId.TAIL_GLOW ], + [Species.ZUBAT]: [ MoveId.FLOATY_FALL, MoveId.DIRE_CLAW, MoveId.SWORDS_DANCE, MoveId.COLLISION_COURSE ], + [Species.ODDISH]: [ MoveId.SLUDGE_BOMB, MoveId.FIERY_DANCE, MoveId.STRENGTH_SAP, MoveId.SPORE ], + [Species.PARAS]: [ MoveId.LEECH_LIFE, MoveId.HORN_LEECH, MoveId.CRABHAMMER, MoveId.SAPPY_SEED ], + [Species.VENONAT]: [ MoveId.SLUDGE_BOMB, MoveId.TOXIC_THREAD, MoveId.EARTH_POWER, MoveId.STORED_POWER ], + [Species.DIGLETT]: [ MoveId.TRIPLE_DIVE, MoveId.SWORDS_DANCE, MoveId.TRIPLE_AXEL, MoveId.HEADLONG_RUSH ], + [Species.MEOWTH]: [ MoveId.HEART_STAMP, MoveId.SWORDS_DANCE, MoveId.SIZZLY_SLIDE, MoveId.TAIL_SLAP ], + [Species.PSYDUCK]: [ MoveId.FROST_BREATH, MoveId.AQUA_STEP, MoveId.MYSTICAL_POWER, MoveId.BOUNCY_BUBBLE ], + [Species.MANKEY]: [ MoveId.DRAIN_PUNCH, MoveId.SLACK_OFF, MoveId.METEOR_MASH, MoveId.NO_RETREAT ], + [Species.GROWLITHE]: [ MoveId.ZING_ZAP, MoveId.PARTING_SHOT, MoveId.MORNING_SUN, MoveId.SACRED_FIRE ], + [Species.POLIWAG]: [ MoveId.SLACK_OFF, MoveId.WILDBOLT_STORM, MoveId.DRAIN_PUNCH, MoveId.SURGING_STRIKES ], + [Species.ABRA]: [ MoveId.AURA_SPHERE, MoveId.BADDY_BAD, MoveId.ICE_BEAM, MoveId.PSYSTRIKE ], + [Species.MACHOP]: [ MoveId.COMBAT_TORQUE, MoveId.METEOR_MASH, MoveId.MOUNTAIN_GALE, MoveId.FISSURE ], + [Species.BELLSPROUT]: [ MoveId.SOLAR_BLADE, MoveId.STRENGTH_SAP, MoveId.FIRE_LASH, MoveId.VICTORY_DANCE ], + [Species.TENTACOOL]: [ MoveId.BANEFUL_BUNKER, MoveId.MALIGNANT_CHAIN, MoveId.BOUNCY_BUBBLE, MoveId.STRENGTH_SAP ], + [Species.GEODUDE]: [ MoveId.FLARE_BLITZ, MoveId.HEAD_SMASH, MoveId.SHORE_UP, MoveId.SHELL_SMASH ], + [Species.PONYTA]: [ MoveId.HEADLONG_RUSH, MoveId.FIRE_LASH, MoveId.SWORDS_DANCE, MoveId.VOLT_TACKLE ], + [Species.SLOWPOKE]: [ MoveId.SPLISHY_SPLASH, MoveId.FROST_BREATH, MoveId.SHED_TAIL, MoveId.MYSTICAL_POWER ], + [Species.MAGNEMITE]: [ MoveId.PARABOLIC_CHARGE, MoveId.FLAMETHROWER, MoveId.ICE_BEAM, MoveId.THUNDERCLAP ], + [Species.FARFETCHD]: [ MoveId.IVY_CUDGEL, MoveId.TRIPLE_ARROWS, MoveId.DRILL_RUN, MoveId.VICTORY_DANCE ], + [Species.DODUO]: [ MoveId.TRIPLE_AXEL, MoveId.HYPER_DRILL, MoveId.FLOATY_FALL, MoveId.TRIPLE_ARROWS ], + [Species.SEEL]: [ MoveId.FREEZE_DRY, MoveId.BOUNCY_BUBBLE, MoveId.SLACK_OFF, MoveId.STEAM_ERUPTION ], + [Species.GRIMER]: [ MoveId.SUCKER_PUNCH, MoveId.CURSE, MoveId.NOXIOUS_TORQUE, MoveId.STRENGTH_SAP ], + [Species.SHELLDER]: [ MoveId.ROCK_BLAST, MoveId.WATER_SHURIKEN, MoveId.BANEFUL_BUNKER, MoveId.BONE_RUSH ], + [Species.GASTLY]: [ MoveId.MALIGNANT_CHAIN, MoveId.AURA_SPHERE, MoveId.PARTING_SHOT, MoveId.DARK_VOID ], + [Species.ONIX]: [ MoveId.SHORE_UP, MoveId.THOUSAND_WAVES, MoveId.COIL, MoveId.DIAMOND_STORM ], + [Species.DROWZEE]: [ MoveId.BADDY_BAD, MoveId.STRENGTH_SAP, MoveId.LUMINA_CRASH, MoveId.DARK_VOID ], + [Species.KRABBY]: [ MoveId.DIRE_CLAW, MoveId.DRAGON_HAMMER, MoveId.IVY_CUDGEL, MoveId.JET_PUNCH ], + [Species.VOLTORB]: [ MoveId.NASTY_PLOT, MoveId.FUSION_FLARE, MoveId.FROST_BREATH, MoveId.ELECTRO_DRIFT ], + [Species.EXEGGCUTE]: [ MoveId.FICKLE_BEAM, MoveId.APPLE_ACID, MoveId.HEAT_WAVE, MoveId.LUMINA_CRASH ], + [Species.CUBONE]: [ MoveId.HEAD_SMASH, MoveId.WOOD_HAMMER, MoveId.SHADOW_SNEAK, MoveId.BITTER_BLADE ], + [Species.LICKITUNG]: [ MoveId.CRUSH_GRIP, MoveId.FIRE_LASH, MoveId.SLACK_OFF, MoveId.MAGICAL_TORQUE ], + [Species.KOFFING]: [ MoveId.SCALD, MoveId.RECOVER, MoveId.BODY_PRESS, MoveId.MALIGNANT_CHAIN ], + [Species.RHYHORN]: [ MoveId.SHORE_UP, MoveId.ICE_HAMMER, MoveId.ACCELEROCK, MoveId.HEAD_SMASH ], + [Species.TANGELA]: [ MoveId.NATURES_MADNESS, MoveId.SNAP_TRAP, MoveId.PARTING_SHOT, MoveId.SAPPY_SEED ], + [Species.KANGASKHAN]: [ MoveId.POWER_UP_PUNCH, MoveId.TRAILBLAZE, MoveId.COVET, MoveId.SEISMIC_TOSS ], + [Species.HORSEA]: [ MoveId.SNIPE_SHOT, MoveId.TAKE_HEART, MoveId.SHELL_SIDE_ARM, MoveId.DRAGON_ENERGY ], + [Species.GOLDEEN]: [ MoveId.GLACIAL_LANCE, MoveId.SUPERCELL_SLAM, MoveId.DRAGON_DANCE, MoveId.FISHIOUS_REND ], + [Species.STARYU]: [ MoveId.CALM_MIND, MoveId.BOUNCY_BUBBLE, MoveId.MOONBLAST, MoveId.MYSTICAL_POWER ], + [Species.SCYTHER]: [ MoveId.MIGHTY_CLEAVE, MoveId.GEAR_GRIND, MoveId.STORM_THROW, MoveId.BITTER_BLADE ], + [Species.PINSIR]: [ MoveId.HEADLONG_RUSH, MoveId.LEECH_LIFE, MoveId.CRUSH_GRIP, MoveId.EXTREME_SPEED ], + [Species.TAUROS]: [ MoveId.SWORDS_DANCE, MoveId.FIRE_LASH, MoveId.WICKED_TORQUE, MoveId.COLLISION_COURSE ], + [Species.MAGIKARP]: [ MoveId.FLIP_TURN, MoveId.ICE_SPINNER, MoveId.KNOCK_OFF, MoveId.DRAGON_ASCENT ], + [Species.LAPRAS]: [ MoveId.RECOVER, MoveId.FREEZE_DRY, MoveId.SCALD, MoveId.SHELL_SMASH ], + [Species.DITTO]: [ MoveId.MIMIC, MoveId.SKETCH, MoveId.METRONOME, MoveId.IMPRISON ], + [Species.EEVEE]: [ MoveId.WISH, MoveId.NO_RETREAT, MoveId.ZIPPY_ZAP, MoveId.BOOMBURST ], + [Species.PORYGON]: [ MoveId.THUNDERCLAP, MoveId.AURA_SPHERE, MoveId.FLAMETHROWER, MoveId.TECHNO_BLAST ], + [Species.OMANYTE]: [ MoveId.FREEZE_DRY, MoveId.GIGA_DRAIN, MoveId.POWER_GEM, MoveId.STEAM_ERUPTION ], + [Species.KABUTO]: [ MoveId.CEASELESS_EDGE, MoveId.HIGH_HORSEPOWER, MoveId.CRABHAMMER, MoveId.MIGHTY_CLEAVE ], + [Species.AERODACTYL]: [ MoveId.FLOATY_FALL, MoveId.HIGH_HORSEPOWER, MoveId.STONE_AXE, MoveId.SWORDS_DANCE ], + [Species.ARTICUNO]: [ MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.AURORA_VEIL, MoveId.AEROBLAST ], + [Species.ZAPDOS]: [ MoveId.BLEAKWIND_STORM, MoveId.CALM_MIND, MoveId.SANDSEAR_STORM, MoveId.ELECTRO_SHOT ], + [Species.MOLTRES]: [ MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.AEROBLAST, MoveId.TORCH_SONG ], + [Species.DRATINI]: [ MoveId.DRAGON_HAMMER, MoveId.CRUSH_GRIP, MoveId.FIRE_LASH, MoveId.GIGATON_HAMMER ], + [Species.MEWTWO]: [ MoveId.METEOR_MASH, MoveId.MOONBLAST, MoveId.THUNDEROUS_KICK, MoveId.PHOTON_GEYSER ], + [Species.MEW]: [ MoveId.PHOTON_GEYSER, MoveId.MOONBLAST, MoveId.ASTRAL_BARRAGE, MoveId.SHELL_SMASH ], - [Species.CHIKORITA]: [ Moves.SAPPY_SEED, Moves.STONE_AXE, Moves.DRAGON_DANCE, Moves.SPORE ], - [Species.CYNDAQUIL]: [ Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.FIERY_DANCE, Moves.ELECTRO_DRIFT ], - [Species.TOTODILE]: [ Moves.THUNDER_PUNCH, Moves.DRAGON_DANCE, Moves.PLAY_ROUGH, Moves.SURGING_STRIKES ], - [Species.SENTRET]: [ Moves.TIDY_UP, Moves.FAKE_OUT, Moves.NUZZLE, Moves.EXTREME_SPEED ], - [Species.HOOTHOOT]: [ Moves.TAKE_HEART, Moves.ESPER_WING, Moves.AEROBLAST, Moves.BOOMBURST ], - [Species.LEDYBA]: [ Moves.POLLEN_PUFF, Moves.MAT_BLOCK, Moves.PARTING_SHOT, Moves.SPORE ], - [Species.SPINARAK]: [ Moves.PARTING_SHOT, Moves.ATTACK_ORDER, Moves.GASTRO_ACID, Moves.STRENGTH_SAP ], - [Species.CHINCHOU]: [ Moves.THUNDERCLAP, Moves.BOUNCY_BUBBLE, Moves.THUNDER_CAGE, Moves.TAIL_GLOW ], - [Species.PICHU]: [ Moves.MOONBLAST, Moves.TRIPLE_AXEL, Moves.FIERY_DANCE, Moves.AURA_WHEEL ], - [Species.CLEFFA]: [ Moves.CALM_MIND, Moves.EARTH_POWER, Moves.WISH, Moves.LIGHT_OF_RUIN ], - [Species.IGGLYBUFF]: [ Moves.DRAIN_PUNCH, Moves.GRAV_APPLE, Moves.SOFT_BOILED, Moves.EXTREME_SPEED ], - [Species.TOGEPI]: [ Moves.SCORCHING_SANDS, Moves.SPLISHY_SPLASH, Moves.RELIC_SONG, Moves.FIERY_DANCE ], - [Species.NATU]: [ Moves.REVIVAL_BLESSING, Moves.NASTY_PLOT, Moves.MOONBLAST, Moves.OBLIVION_WING ], - [Species.MAREEP]: [ Moves.ICE_BEAM, Moves.PARABOLIC_CHARGE, Moves.CORE_ENFORCER, Moves.TAIL_GLOW ], - [Species.HOPPIP]: [ Moves.FLOATY_FALL, Moves.STRENGTH_SAP, Moves.SAPPY_SEED, Moves.SPORE ], - [Species.AIPOM]: [ Moves.ROCK_BLAST, Moves.STORM_THROW, Moves.FAKE_OUT, Moves.SWORDS_DANCE ], - [Species.SUNKERN]: [ Moves.SPORE, Moves.QUIVER_DANCE, Moves.FIERY_DANCE, Moves.HYDRO_STEAM ], - [Species.YANMA]: [ Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.HEAT_WAVE, Moves.BLEAKWIND_STORM ], - [Species.WOOPER]: [ Moves.SIZZLY_SLIDE, Moves.RECOVER, Moves.SHED_TAIL, Moves.SURGING_STRIKES ], - [Species.MURKROW]: [ Moves.TRIPLE_ARROWS, Moves.FLOATY_FALL, Moves.TIDY_UP, Moves.WICKED_BLOW ], - [Species.MISDREAVUS]: [ Moves.TAKE_HEART, Moves.MOONBLAST, Moves.AURA_SPHERE, Moves.MOONGEIST_BEAM ], - [Species.UNOWN]: [ Moves.NATURE_POWER, Moves.COSMIC_POWER, Moves.ANCIENT_POWER, Moves.MYSTICAL_POWER ], - [Species.GIRAFARIG]: [ Moves.MYSTICAL_POWER, Moves.NIGHT_DAZE, Moves.RECOVER, Moves.BOOMBURST ], - [Species.PINECO]: [ Moves.METAL_BURST, Moves.SHORE_UP, Moves.BODY_PRESS, Moves.DIAMOND_STORM ], - [Species.DUNSPARCE]: [ Moves.WICKED_TORQUE, Moves.MAGICAL_TORQUE, Moves.BLAZING_TORQUE, Moves.EXTREME_SPEED ], - [Species.GLIGAR]: [ Moves.FLOATY_FALL, Moves.THOUSAND_WAVES, Moves.SPIKY_SHIELD, Moves.MIGHTY_CLEAVE ], - [Species.SNUBBULL]: [ Moves.FACADE, Moves.HIGH_HORSEPOWER, Moves.SWORDS_DANCE, Moves.EXTREME_SPEED ], - [Species.QWILFISH]: [ Moves.BARB_BARRAGE, Moves.BANEFUL_BUNKER, Moves.RECOVER, Moves.FISHIOUS_REND ], - [Species.SHUCKLE]: [ Moves.STUFF_CHEEKS, Moves.HEAL_ORDER, Moves.BODY_PRESS, Moves.SALT_CURE ], - [Species.HERACROSS]: [ Moves.ROCK_BLAST, Moves.STORM_THROW, Moves.ICICLE_SPEAR, Moves.SCALE_SHOT ], - [Species.SNEASEL]: [ Moves.DIRE_CLAW, Moves.DARKEST_LARIAT, Moves.TRIPLE_AXEL, Moves.CLOSE_COMBAT ], - [Species.TEDDIURSA]: [ Moves.MOUNTAIN_GALE, Moves.FAKE_OUT, Moves.SLACK_OFF, Moves.PRECIPICE_BLADES ], - [Species.SLUGMA]: [ Moves.BURNING_BULWARK, Moves.POWER_GEM, Moves.SOLAR_BEAM, Moves.MAGMA_STORM ], - [Species.SWINUB]: [ Moves.SLACK_OFF, Moves.MOUNTAIN_GALE, Moves.STONE_AXE, Moves.PRECIPICE_BLADES ], - [Species.CORSOLA]: [ Moves.SCALD, Moves.FREEZE_DRY, Moves.STRENGTH_SAP, Moves.SALT_CURE ], - [Species.REMORAID]: [ Moves.WATER_SHURIKEN, Moves.TAKE_HEART, Moves.SHELL_SIDE_ARM, Moves.BOUNCY_BUBBLE ], - [Species.DELIBIRD]: [ Moves.BONEMERANG, Moves.FLOATY_FALL, Moves.VICTORY_DANCE, Moves.GLACIAL_LANCE ], - [Species.SKARMORY]: [ Moves.ROOST, Moves.BODY_PRESS, Moves.SPIKY_SHIELD, Moves.BEAK_BLAST ], - [Species.HOUNDOUR]: [ Moves.FIERY_WRATH, Moves.THUNDERBOLT, Moves.MOONBLAST, Moves.ARMOR_CANNON ], - [Species.PHANPY]: [ Moves.SHORE_UP, Moves.SWORDS_DANCE, Moves.MOUNTAIN_GALE, Moves.COLLISION_COURSE ], - [Species.STANTLER]: [ Moves.THUNDEROUS_KICK, Moves.PHOTON_GEYSER, Moves.SWORDS_DANCE, Moves.BOOMBURST ], - [Species.SMEARGLE]: [ Moves.CONVERSION, Moves.BURNING_BULWARK, Moves.SALT_CURE, Moves.DARK_VOID ], - [Species.TYROGUE]: [ Moves.VICTORY_DANCE, Moves.THUNDEROUS_KICK, Moves.METEOR_MASH, Moves.WICKED_BLOW ], - [Species.SMOOCHUM]: [ Moves.LUSTER_PURGE, Moves.AURA_SPHERE, Moves.FREEZE_DRY, Moves.QUIVER_DANCE ], - [Species.ELEKID]: [ Moves.FIRE_LASH, Moves.ZING_ZAP, Moves.MOUNTAIN_GALE, Moves.SHIFT_GEAR ], - [Species.MAGBY]: [ Moves.THUNDERCLAP, Moves.EARTH_POWER, Moves.ENERGY_BALL, Moves.BLUE_FLARE ], - [Species.MILTANK]: [ Moves.BODY_PRESS, Moves.BULK_UP, Moves.KNOCK_OFF, Moves.SIZZLY_SLIDE ], - [Species.RAIKOU]: [ Moves.PARABOLIC_CHARGE, Moves.NASTY_PLOT, Moves.FROST_BREATH, Moves.ELECTRO_DRIFT ], - [Species.ENTEI]: [ Moves.BURNING_BULWARK, Moves.DRAGON_DANCE, Moves.EARTHQUAKE, Moves.PYRO_BALL ], - [Species.SUICUNE]: [ Moves.RECOVER, Moves.NASTY_PLOT, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.LARVITAR]: [ Moves.DRAGON_DANCE, Moves.MOUNTAIN_GALE, Moves.SHORE_UP, Moves.DIAMOND_STORM ], - [Species.LUGIA]: [ Moves.NASTY_PLOT, Moves.LUMINA_CRASH, Moves.AURA_SPHERE, Moves.OBLIVION_WING ], - [Species.HO_OH]: [ Moves.BRAVE_BIRD, Moves.DRAGON_DANCE, Moves.REVIVAL_BLESSING, Moves.BOLT_BEAK ], - [Species.CELEBI]: [ Moves.PHOTON_GEYSER, Moves.MATCHA_GOTCHA, Moves.REVIVAL_BLESSING, Moves.QUIVER_DANCE ], + [Species.CHIKORITA]: [ MoveId.SAPPY_SEED, MoveId.STONE_AXE, MoveId.DRAGON_DANCE, MoveId.SPORE ], + [Species.CYNDAQUIL]: [ MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.FIERY_DANCE, MoveId.ELECTRO_DRIFT ], + [Species.TOTODILE]: [ MoveId.THUNDER_PUNCH, MoveId.DRAGON_DANCE, MoveId.PLAY_ROUGH, MoveId.SURGING_STRIKES ], + [Species.SENTRET]: [ MoveId.TIDY_UP, MoveId.FAKE_OUT, MoveId.NUZZLE, MoveId.EXTREME_SPEED ], + [Species.HOOTHOOT]: [ MoveId.TAKE_HEART, MoveId.ESPER_WING, MoveId.AEROBLAST, MoveId.BOOMBURST ], + [Species.LEDYBA]: [ MoveId.POLLEN_PUFF, MoveId.MAT_BLOCK, MoveId.PARTING_SHOT, MoveId.SPORE ], + [Species.SPINARAK]: [ MoveId.PARTING_SHOT, MoveId.ATTACK_ORDER, MoveId.GASTRO_ACID, MoveId.STRENGTH_SAP ], + [Species.CHINCHOU]: [ MoveId.THUNDERCLAP, MoveId.BOUNCY_BUBBLE, MoveId.THUNDER_CAGE, MoveId.TAIL_GLOW ], + [Species.PICHU]: [ MoveId.MOONBLAST, MoveId.TRIPLE_AXEL, MoveId.FIERY_DANCE, MoveId.AURA_WHEEL ], + [Species.CLEFFA]: [ MoveId.CALM_MIND, MoveId.EARTH_POWER, MoveId.WISH, MoveId.LIGHT_OF_RUIN ], + [Species.IGGLYBUFF]: [ MoveId.DRAIN_PUNCH, MoveId.GRAV_APPLE, MoveId.SOFT_BOILED, MoveId.EXTREME_SPEED ], + [Species.TOGEPI]: [ MoveId.SCORCHING_SANDS, MoveId.SPLISHY_SPLASH, MoveId.RELIC_SONG, MoveId.FIERY_DANCE ], + [Species.NATU]: [ MoveId.REVIVAL_BLESSING, MoveId.NASTY_PLOT, MoveId.MOONBLAST, MoveId.OBLIVION_WING ], + [Species.MAREEP]: [ MoveId.ICE_BEAM, MoveId.PARABOLIC_CHARGE, MoveId.CORE_ENFORCER, MoveId.TAIL_GLOW ], + [Species.HOPPIP]: [ MoveId.FLOATY_FALL, MoveId.STRENGTH_SAP, MoveId.SAPPY_SEED, MoveId.SPORE ], + [Species.AIPOM]: [ MoveId.ROCK_BLAST, MoveId.STORM_THROW, MoveId.FAKE_OUT, MoveId.SWORDS_DANCE ], + [Species.SUNKERN]: [ MoveId.SPORE, MoveId.QUIVER_DANCE, MoveId.FIERY_DANCE, MoveId.HYDRO_STEAM ], + [Species.YANMA]: [ MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.HEAT_WAVE, MoveId.BLEAKWIND_STORM ], + [Species.WOOPER]: [ MoveId.SIZZLY_SLIDE, MoveId.RECOVER, MoveId.SHED_TAIL, MoveId.SURGING_STRIKES ], + [Species.MURKROW]: [ MoveId.TRIPLE_ARROWS, MoveId.FLOATY_FALL, MoveId.TIDY_UP, MoveId.WICKED_BLOW ], + [Species.MISDREAVUS]: [ MoveId.TAKE_HEART, MoveId.MOONBLAST, MoveId.AURA_SPHERE, MoveId.MOONGEIST_BEAM ], + [Species.UNOWN]: [ MoveId.NATURE_POWER, MoveId.COSMIC_POWER, MoveId.ANCIENT_POWER, MoveId.MYSTICAL_POWER ], + [Species.GIRAFARIG]: [ MoveId.MYSTICAL_POWER, MoveId.NIGHT_DAZE, MoveId.RECOVER, MoveId.BOOMBURST ], + [Species.PINECO]: [ MoveId.METAL_BURST, MoveId.SHORE_UP, MoveId.BODY_PRESS, MoveId.DIAMOND_STORM ], + [Species.DUNSPARCE]: [ MoveId.WICKED_TORQUE, MoveId.MAGICAL_TORQUE, MoveId.BLAZING_TORQUE, MoveId.EXTREME_SPEED ], + [Species.GLIGAR]: [ MoveId.FLOATY_FALL, MoveId.THOUSAND_WAVES, MoveId.SPIKY_SHIELD, MoveId.MIGHTY_CLEAVE ], + [Species.SNUBBULL]: [ MoveId.FACADE, MoveId.HIGH_HORSEPOWER, MoveId.SWORDS_DANCE, MoveId.EXTREME_SPEED ], + [Species.QWILFISH]: [ MoveId.BARB_BARRAGE, MoveId.BANEFUL_BUNKER, MoveId.RECOVER, MoveId.FISHIOUS_REND ], + [Species.SHUCKLE]: [ MoveId.STUFF_CHEEKS, MoveId.HEAL_ORDER, MoveId.BODY_PRESS, MoveId.SALT_CURE ], + [Species.HERACROSS]: [ MoveId.ROCK_BLAST, MoveId.STORM_THROW, MoveId.ICICLE_SPEAR, MoveId.SCALE_SHOT ], + [Species.SNEASEL]: [ MoveId.DIRE_CLAW, MoveId.DARKEST_LARIAT, MoveId.TRIPLE_AXEL, MoveId.CLOSE_COMBAT ], + [Species.TEDDIURSA]: [ MoveId.MOUNTAIN_GALE, MoveId.FAKE_OUT, MoveId.SLACK_OFF, MoveId.PRECIPICE_BLADES ], + [Species.SLUGMA]: [ MoveId.BURNING_BULWARK, MoveId.POWER_GEM, MoveId.SOLAR_BEAM, MoveId.MAGMA_STORM ], + [Species.SWINUB]: [ MoveId.SLACK_OFF, MoveId.MOUNTAIN_GALE, MoveId.STONE_AXE, MoveId.PRECIPICE_BLADES ], + [Species.CORSOLA]: [ MoveId.SCALD, MoveId.FREEZE_DRY, MoveId.STRENGTH_SAP, MoveId.SALT_CURE ], + [Species.REMORAID]: [ MoveId.WATER_SHURIKEN, MoveId.TAKE_HEART, MoveId.SHELL_SIDE_ARM, MoveId.BOUNCY_BUBBLE ], + [Species.DELIBIRD]: [ MoveId.BONEMERANG, MoveId.FLOATY_FALL, MoveId.VICTORY_DANCE, MoveId.GLACIAL_LANCE ], + [Species.SKARMORY]: [ MoveId.ROOST, MoveId.BODY_PRESS, MoveId.SPIKY_SHIELD, MoveId.BEAK_BLAST ], + [Species.HOUNDOUR]: [ MoveId.FIERY_WRATH, MoveId.THUNDERBOLT, MoveId.MOONBLAST, MoveId.ARMOR_CANNON ], + [Species.PHANPY]: [ MoveId.SHORE_UP, MoveId.SWORDS_DANCE, MoveId.MOUNTAIN_GALE, MoveId.COLLISION_COURSE ], + [Species.STANTLER]: [ MoveId.THUNDEROUS_KICK, MoveId.PHOTON_GEYSER, MoveId.SWORDS_DANCE, MoveId.BOOMBURST ], + [Species.SMEARGLE]: [ MoveId.CONVERSION, MoveId.BURNING_BULWARK, MoveId.SALT_CURE, MoveId.DARK_VOID ], + [Species.TYROGUE]: [ MoveId.VICTORY_DANCE, MoveId.THUNDEROUS_KICK, MoveId.METEOR_MASH, MoveId.WICKED_BLOW ], + [Species.SMOOCHUM]: [ MoveId.LUSTER_PURGE, MoveId.AURA_SPHERE, MoveId.FREEZE_DRY, MoveId.QUIVER_DANCE ], + [Species.ELEKID]: [ MoveId.FIRE_LASH, MoveId.ZING_ZAP, MoveId.MOUNTAIN_GALE, MoveId.SHIFT_GEAR ], + [Species.MAGBY]: [ MoveId.THUNDERCLAP, MoveId.EARTH_POWER, MoveId.ENERGY_BALL, MoveId.BLUE_FLARE ], + [Species.MILTANK]: [ MoveId.BODY_PRESS, MoveId.BULK_UP, MoveId.KNOCK_OFF, MoveId.SIZZLY_SLIDE ], + [Species.RAIKOU]: [ MoveId.PARABOLIC_CHARGE, MoveId.NASTY_PLOT, MoveId.FROST_BREATH, MoveId.ELECTRO_DRIFT ], + [Species.ENTEI]: [ MoveId.BURNING_BULWARK, MoveId.DRAGON_DANCE, MoveId.EARTHQUAKE, MoveId.PYRO_BALL ], + [Species.SUICUNE]: [ MoveId.RECOVER, MoveId.NASTY_PLOT, MoveId.FREEZE_DRY, MoveId.STEAM_ERUPTION ], + [Species.LARVITAR]: [ MoveId.DRAGON_DANCE, MoveId.MOUNTAIN_GALE, MoveId.SHORE_UP, MoveId.DIAMOND_STORM ], + [Species.LUGIA]: [ MoveId.NASTY_PLOT, MoveId.LUMINA_CRASH, MoveId.AURA_SPHERE, MoveId.OBLIVION_WING ], + [Species.HO_OH]: [ MoveId.BRAVE_BIRD, MoveId.DRAGON_DANCE, MoveId.REVIVAL_BLESSING, MoveId.BOLT_BEAK ], + [Species.CELEBI]: [ MoveId.PHOTON_GEYSER, MoveId.MATCHA_GOTCHA, MoveId.REVIVAL_BLESSING, MoveId.QUIVER_DANCE ], - [Species.TREECKO]: [ Moves.NASTY_PLOT, Moves.CORE_ENFORCER, Moves.FLAMETHROWER, Moves.SEED_FLARE ], - [Species.TORCHIC]: [ Moves.THUNDEROUS_KICK, Moves.ZING_ZAP, Moves.BURNING_BULWARK, Moves.PYRO_BALL ], - [Species.MUDKIP]: [ Moves.SHORE_UP, Moves.MOUNTAIN_GALE, Moves.AQUA_STEP, Moves.PRECIPICE_BLADES ], - [Species.POOCHYENA]: [ Moves.KNOCK_OFF, Moves.CLOSE_COMBAT, Moves.DIRE_CLAW, Moves.VICTORY_DANCE ], - [Species.ZIGZAGOON]: [ Moves.EXTREME_SPEED, Moves.NUZZLE, Moves.HIGH_HORSEPOWER, Moves.TIDY_UP ], - [Species.WURMPLE]: [ Moves.BATON_PASS, Moves.BLEAKWIND_STORM, Moves.STORED_POWER, Moves.MALIGNANT_CHAIN ], - [Species.LOTAD]: [ Moves.REVELATION_DANCE, Moves.APPLE_ACID, Moves.ICE_BEAM, Moves.QUIVER_DANCE ], - [Species.SEEDOT]: [ Moves.SWORDS_DANCE, Moves.SACRED_SWORD, Moves.KOWTOW_CLEAVE, Moves.BITTER_BLADE ], - [Species.TAILLOW]: [ Moves.BOOMBURST, Moves.FACADE, Moves.HEADLONG_RUSH, Moves.NO_RETREAT ], - [Species.WINGULL]: [ Moves.THUNDER, Moves.FLIP_TURN, Moves.CALM_MIND, Moves.STEAM_ERUPTION ], - [Species.RALTS]: [ Moves.PSYBLADE, Moves.BITTER_BLADE, Moves.NO_RETREAT, Moves.BOOMBURST ], - [Species.SURSKIT]: [ Moves.POLLEN_PUFF, Moves.FIERY_DANCE, Moves.BOUNCY_BUBBLE, Moves.AEROBLAST ], - [Species.SHROOMISH]: [ Moves.ACCELEROCK, Moves.TRAILBLAZE, Moves.STORM_THROW, Moves.SAPPY_SEED ], - [Species.SLAKOTH]: [ Moves.FACADE, Moves.DRAIN_PUNCH, Moves.KNOCK_OFF, Moves.SKILL_SWAP ], - [Species.NINCADA]: [ Moves.BULLDOZE, Moves.STICKY_WEB, Moves.SHADOW_BONE, Moves.SHELL_SMASH ], - [Species.WHISMUR]: [ Moves.ALLURING_VOICE, Moves.SHIFT_GEAR, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], - [Species.MAKUHITA]: [ Moves.COMBAT_TORQUE, Moves.SLACK_OFF, Moves.HEAT_CRASH, Moves.DOUBLE_IRON_BASH ], - [Species.AZURILL]: [ Moves.JET_PUNCH, Moves.MAGICAL_TORQUE, Moves.SWORDS_DANCE, Moves.SURGING_STRIKES ], - [Species.NOSEPASS]: [ Moves.SHORE_UP, Moves.BODY_PRESS, Moves.CALM_MIND, Moves.TACHYON_CUTTER ], - [Species.SKITTY]: [ Moves.THUNDEROUS_KICK, Moves.ENTRAINMENT, Moves.TIDY_UP, Moves.V_CREATE ], - [Species.SABLEYE]: [ Moves.RECOVER, Moves.TOPSY_TURVY, Moves.CURSE, Moves.SALT_CURE ], - [Species.MAWILE]: [ Moves.BULLET_PUNCH, Moves.HORN_LEECH, Moves.EARTHQUAKE, Moves.MAGICAL_TORQUE ], - [Species.ARON]: [ Moves.HEAD_SMASH, Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SALT_CURE ], - [Species.MEDITITE]: [ Moves.THUNDEROUS_KICK, Moves.SUCKER_PUNCH, Moves.BULLET_PUNCH, Moves.PHOTON_GEYSER ], - [Species.ELECTRIKE]: [ Moves.FROST_BREATH, Moves.HEAT_WAVE, Moves.NASTY_PLOT, Moves.ELECTRO_DRIFT ], - [Species.PLUSLE]: [ Moves.FLAMETHROWER, Moves.GLITZY_GLOW, Moves.SPLISHY_SPLASH, Moves.TAIL_GLOW ], - [Species.MINUN]: [ Moves.ICE_BEAM, Moves.BADDY_BAD, Moves.SPARKLY_SWIRL, Moves.TAIL_GLOW ], - [Species.VOLBEAT]: [ Moves.BATON_PASS, Moves.STICKY_WEB, Moves.DECORATE, Moves.VICTORY_DANCE ], - [Species.ILLUMISE]: [ Moves.PARTING_SHOT, Moves.GLITZY_GLOW, Moves.POWDER, Moves.QUIVER_DANCE ], - [Species.GULPIN]: [ Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.CALM_MIND, Moves.STRENGTH_SAP ], - [Species.CARVANHA]: [ Moves.THUNDER_FANG, Moves.GUNK_SHOT, Moves.OBSTRUCT, Moves.SURGING_STRIKES ], - [Species.WAILMER]: [ Moves.TAKE_HEART, Moves.COMEUPPANCE, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ], - [Species.NUMEL]: [ Moves.TRICK_ROOM, Moves.ENERGY_BALL, Moves.SLACK_OFF, Moves.BLUE_FLARE ], - [Species.TORKOAL]: [ Moves.MORNING_SUN, Moves.BURNING_BULWARK, Moves.BODY_PRESS, Moves.HYDRO_STEAM ], - [Species.SPOINK]: [ Moves.AURA_SPHERE, Moves.MILK_DRINK, Moves.EXPANDING_FORCE, Moves.TAIL_GLOW ], - [Species.SPINDA]: [ Moves.SUPERPOWER, Moves.SLACK_OFF, Moves.FLEUR_CANNON, Moves.V_CREATE ], - [Species.TRAPINCH]: [ Moves.FIRE_LASH, Moves.DRAGON_DARTS, Moves.THOUSAND_ARROWS, Moves.DRAGON_ENERGY ], - [Species.CACNEA]: [ Moves.EARTH_POWER, Moves.CEASELESS_EDGE, Moves.NIGHT_DAZE, Moves.IVY_CUDGEL ], - [Species.SWABLU]: [ Moves.ROOST, Moves.NASTY_PLOT, Moves.FLOATY_FALL, Moves.BOOMBURST ], - [Species.ZANGOOSE]: [ Moves.FACADE, Moves.HIGH_HORSEPOWER, Moves.EXTREME_SPEED, Moves.TIDY_UP ], - [Species.SEVIPER]: [ Moves.ICE_BEAM, Moves.BITTER_BLADE, Moves.SUCKER_PUNCH, Moves.NO_RETREAT ], - [Species.LUNATONE]: [ Moves.REVELATION_DANCE, Moves.MOONGEIST_BEAM, Moves.SHELL_SMASH, Moves.LUMINA_CRASH ], - [Species.SOLROCK]: [ Moves.MIGHTY_CLEAVE, Moves.PHOTON_GEYSER, Moves.SHELL_SMASH, Moves.SACRED_FIRE ], - [Species.BARBOACH]: [ Moves.DRAGON_DANCE, Moves.ZING_ZAP, Moves.ICE_SPINNER, Moves.SURGING_STRIKES ], - [Species.CORPHISH]: [ Moves.CEASELESS_EDGE, Moves.SHELL_SIDE_ARM, Moves.SUCKER_PUNCH, Moves.JET_PUNCH ], - [Species.BALTOY]: [ Moves.RECOVER, Moves.GLARE, Moves.RUINATION, Moves.MYSTICAL_POWER ], - [Species.LILEEP]: [ Moves.POWER_GEM, Moves.SCALD, Moves.STRENGTH_SAP, Moves.SAPPY_SEED ], - [Species.ANORITH]: [ Moves.FIRST_IMPRESSION, Moves.LEECH_LIFE, Moves.DRAGON_DANCE, Moves.MIGHTY_CLEAVE ], - [Species.FEEBAS]: [ Moves.CALM_MIND, Moves.FREEZE_DRY, Moves.MOONBLAST, Moves.STEAM_ERUPTION ], - [Species.CASTFORM]: [ Moves.BOOMBURST, Moves.HYDRO_STEAM, Moves.ERUPTION, Moves.QUIVER_DANCE ], - [Species.KECLEON]: [ Moves.ZIPPY_ZAP, Moves.COIL, Moves.EXTREME_SPEED, Moves.MULTI_ATTACK ], - [Species.SHUPPET]: [ Moves.STORM_THROW, Moves.TIDY_UP, Moves.PARTING_SHOT, Moves.SPECTRAL_THIEF ], - [Species.DUSKULL]: [ Moves.BULK_UP, Moves.DRAIN_PUNCH, Moves.RECOVER, Moves.RAGE_FIST ], - [Species.TROPIUS]: [ Moves.STUFF_CHEEKS, Moves.EARTH_POWER, Moves.APPLE_ACID, Moves.SAPPY_SEED ], - [Species.ABSOL]: [ Moves.KOWTOW_CLEAVE, Moves.SACRED_SWORD, Moves.PSYBLADE, Moves.BITTER_BLADE ], - [Species.WYNAUT]: [ Moves.RECOVER, Moves.SHED_TAIL, Moves.TAUNT, Moves.COMEUPPANCE ], - [Species.SNORUNT]: [ Moves.SPARKLY_SWIRL, Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.BLOOD_MOON ], - [Species.SPHEAL]: [ Moves.FLIP_TURN, Moves.FREEZE_DRY, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ], - [Species.CLAMPERL]: [ Moves.SHELL_SIDE_ARM, Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.RELICANTH]: [ Moves.DRAGON_DANCE, Moves.SHORE_UP, Moves.WAVE_CRASH, Moves.DIAMOND_STORM ], - [Species.LUVDISC]: [ Moves.BATON_PASS, Moves.HEART_SWAP, Moves.GLITZY_GLOW, Moves.REVIVAL_BLESSING ], - [Species.BAGON]: [ Moves.HEADLONG_RUSH, Moves.FIRE_LASH, Moves.DRAGON_DANCE, Moves.DRAGON_DARTS ], - [Species.BELDUM]: [ Moves.HEADLONG_RUSH, Moves.DRAIN_PUNCH, Moves.ICE_SPINNER, Moves.SHIFT_GEAR ], - [Species.REGIROCK]: [ Moves.STONE_AXE, Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SALT_CURE ], - [Species.REGICE]: [ Moves.EARTH_POWER, Moves.TAKE_HEART, Moves.RECOVER, Moves.FREEZE_DRY ], - [Species.REGISTEEL]: [ Moves.BODY_PRESS, Moves.SIZZLY_SLIDE, Moves.RECOVER, Moves.GIGATON_HAMMER ], - [Species.LATIAS]: [ Moves.CORE_ENFORCER, Moves.FUSION_FLARE, Moves.SPARKLY_SWIRL, Moves.MYSTICAL_POWER ], - [Species.LATIOS]: [ Moves.CORE_ENFORCER, Moves.BLUE_FLARE, Moves.NASTY_PLOT, Moves.TACHYON_CUTTER ], - [Species.KYOGRE]: [ Moves.RECOVER, Moves.HURRICANE, Moves.FREEZY_FROST, Moves.WILDBOLT_STORM ], - [Species.GROUDON]: [ Moves.STONE_AXE, Moves.SOLAR_BLADE, Moves.MORNING_SUN, Moves.SACRED_FIRE ], - [Species.RAYQUAZA]: [ Moves.V_CREATE, Moves.DRAGON_DARTS, Moves.CORE_ENFORCER, Moves.OBLIVION_WING ], - [Species.JIRACHI]: [ Moves.TACHYON_CUTTER, Moves.TRIPLE_ARROWS, Moves.ROCK_SLIDE, Moves.SHELL_SMASH ], - [Species.DEOXYS]: [ Moves.COLLISION_COURSE, Moves.FUSION_FLARE, Moves.PARTING_SHOT, Moves.LUMINA_CRASH ], + [Species.TREECKO]: [ MoveId.NASTY_PLOT, MoveId.CORE_ENFORCER, MoveId.FLAMETHROWER, MoveId.SEED_FLARE ], + [Species.TORCHIC]: [ MoveId.THUNDEROUS_KICK, MoveId.ZING_ZAP, MoveId.BURNING_BULWARK, MoveId.PYRO_BALL ], + [Species.MUDKIP]: [ MoveId.SHORE_UP, MoveId.MOUNTAIN_GALE, MoveId.AQUA_STEP, MoveId.PRECIPICE_BLADES ], + [Species.POOCHYENA]: [ MoveId.KNOCK_OFF, MoveId.CLOSE_COMBAT, MoveId.DIRE_CLAW, MoveId.VICTORY_DANCE ], + [Species.ZIGZAGOON]: [ MoveId.EXTREME_SPEED, MoveId.NUZZLE, MoveId.HIGH_HORSEPOWER, MoveId.TIDY_UP ], + [Species.WURMPLE]: [ MoveId.BATON_PASS, MoveId.BLEAKWIND_STORM, MoveId.STORED_POWER, MoveId.MALIGNANT_CHAIN ], + [Species.LOTAD]: [ MoveId.REVELATION_DANCE, MoveId.APPLE_ACID, MoveId.ICE_BEAM, MoveId.QUIVER_DANCE ], + [Species.SEEDOT]: [ MoveId.SWORDS_DANCE, MoveId.SACRED_SWORD, MoveId.KOWTOW_CLEAVE, MoveId.BITTER_BLADE ], + [Species.TAILLOW]: [ MoveId.BOOMBURST, MoveId.FACADE, MoveId.HEADLONG_RUSH, MoveId.NO_RETREAT ], + [Species.WINGULL]: [ MoveId.THUNDER, MoveId.FLIP_TURN, MoveId.CALM_MIND, MoveId.STEAM_ERUPTION ], + [Species.RALTS]: [ MoveId.PSYBLADE, MoveId.BITTER_BLADE, MoveId.NO_RETREAT, MoveId.BOOMBURST ], + [Species.SURSKIT]: [ MoveId.POLLEN_PUFF, MoveId.FIERY_DANCE, MoveId.BOUNCY_BUBBLE, MoveId.AEROBLAST ], + [Species.SHROOMISH]: [ MoveId.ACCELEROCK, MoveId.TRAILBLAZE, MoveId.STORM_THROW, MoveId.SAPPY_SEED ], + [Species.SLAKOTH]: [ MoveId.FACADE, MoveId.DRAIN_PUNCH, MoveId.KNOCK_OFF, MoveId.SKILL_SWAP ], + [Species.NINCADA]: [ MoveId.BULLDOZE, MoveId.STICKY_WEB, MoveId.SHADOW_BONE, MoveId.SHELL_SMASH ], + [Species.WHISMUR]: [ MoveId.ALLURING_VOICE, MoveId.SHIFT_GEAR, MoveId.SPARKLING_ARIA, MoveId.TORCH_SONG ], + [Species.MAKUHITA]: [ MoveId.COMBAT_TORQUE, MoveId.SLACK_OFF, MoveId.HEAT_CRASH, MoveId.DOUBLE_IRON_BASH ], + [Species.AZURILL]: [ MoveId.JET_PUNCH, MoveId.MAGICAL_TORQUE, MoveId.SWORDS_DANCE, MoveId.SURGING_STRIKES ], + [Species.NOSEPASS]: [ MoveId.SHORE_UP, MoveId.BODY_PRESS, MoveId.CALM_MIND, MoveId.TACHYON_CUTTER ], + [Species.SKITTY]: [ MoveId.THUNDEROUS_KICK, MoveId.ENTRAINMENT, MoveId.TIDY_UP, MoveId.V_CREATE ], + [Species.SABLEYE]: [ MoveId.RECOVER, MoveId.TOPSY_TURVY, MoveId.CURSE, MoveId.SALT_CURE ], + [Species.MAWILE]: [ MoveId.BULLET_PUNCH, MoveId.HORN_LEECH, MoveId.EARTHQUAKE, MoveId.MAGICAL_TORQUE ], + [Species.ARON]: [ MoveId.HEAD_SMASH, MoveId.BODY_PRESS, MoveId.SHORE_UP, MoveId.SALT_CURE ], + [Species.MEDITITE]: [ MoveId.THUNDEROUS_KICK, MoveId.SUCKER_PUNCH, MoveId.BULLET_PUNCH, MoveId.PHOTON_GEYSER ], + [Species.ELECTRIKE]: [ MoveId.FROST_BREATH, MoveId.HEAT_WAVE, MoveId.NASTY_PLOT, MoveId.ELECTRO_DRIFT ], + [Species.PLUSLE]: [ MoveId.FLAMETHROWER, MoveId.GLITZY_GLOW, MoveId.SPLISHY_SPLASH, MoveId.TAIL_GLOW ], + [Species.MINUN]: [ MoveId.ICE_BEAM, MoveId.BADDY_BAD, MoveId.SPARKLY_SWIRL, MoveId.TAIL_GLOW ], + [Species.VOLBEAT]: [ MoveId.BATON_PASS, MoveId.STICKY_WEB, MoveId.DECORATE, MoveId.VICTORY_DANCE ], + [Species.ILLUMISE]: [ MoveId.PARTING_SHOT, MoveId.GLITZY_GLOW, MoveId.POWDER, MoveId.QUIVER_DANCE ], + [Species.GULPIN]: [ MoveId.MALIGNANT_CHAIN, MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.STRENGTH_SAP ], + [Species.CARVANHA]: [ MoveId.THUNDER_FANG, MoveId.GUNK_SHOT, MoveId.OBSTRUCT, MoveId.SURGING_STRIKES ], + [Species.WAILMER]: [ MoveId.TAKE_HEART, MoveId.COMEUPPANCE, MoveId.SLACK_OFF, MoveId.STEAM_ERUPTION ], + [Species.NUMEL]: [ MoveId.TRICK_ROOM, MoveId.ENERGY_BALL, MoveId.SLACK_OFF, MoveId.BLUE_FLARE ], + [Species.TORKOAL]: [ MoveId.MORNING_SUN, MoveId.BURNING_BULWARK, MoveId.BODY_PRESS, MoveId.HYDRO_STEAM ], + [Species.SPOINK]: [ MoveId.AURA_SPHERE, MoveId.MILK_DRINK, MoveId.EXPANDING_FORCE, MoveId.TAIL_GLOW ], + [Species.SPINDA]: [ MoveId.SUPERPOWER, MoveId.SLACK_OFF, MoveId.FLEUR_CANNON, MoveId.V_CREATE ], + [Species.TRAPINCH]: [ MoveId.FIRE_LASH, MoveId.DRAGON_DARTS, MoveId.THOUSAND_ARROWS, MoveId.DRAGON_ENERGY ], + [Species.CACNEA]: [ MoveId.EARTH_POWER, MoveId.CEASELESS_EDGE, MoveId.NIGHT_DAZE, MoveId.IVY_CUDGEL ], + [Species.SWABLU]: [ MoveId.ROOST, MoveId.NASTY_PLOT, MoveId.FLOATY_FALL, MoveId.BOOMBURST ], + [Species.ZANGOOSE]: [ MoveId.FACADE, MoveId.HIGH_HORSEPOWER, MoveId.EXTREME_SPEED, MoveId.TIDY_UP ], + [Species.SEVIPER]: [ MoveId.ICE_BEAM, MoveId.BITTER_BLADE, MoveId.SUCKER_PUNCH, MoveId.NO_RETREAT ], + [Species.LUNATONE]: [ MoveId.REVELATION_DANCE, MoveId.MOONGEIST_BEAM, MoveId.SHELL_SMASH, MoveId.LUMINA_CRASH ], + [Species.SOLROCK]: [ MoveId.MIGHTY_CLEAVE, MoveId.PHOTON_GEYSER, MoveId.SHELL_SMASH, MoveId.SACRED_FIRE ], + [Species.BARBOACH]: [ MoveId.DRAGON_DANCE, MoveId.ZING_ZAP, MoveId.ICE_SPINNER, MoveId.SURGING_STRIKES ], + [Species.CORPHISH]: [ MoveId.CEASELESS_EDGE, MoveId.SHELL_SIDE_ARM, MoveId.SUCKER_PUNCH, MoveId.JET_PUNCH ], + [Species.BALTOY]: [ MoveId.RECOVER, MoveId.GLARE, MoveId.RUINATION, MoveId.MYSTICAL_POWER ], + [Species.LILEEP]: [ MoveId.POWER_GEM, MoveId.SCALD, MoveId.STRENGTH_SAP, MoveId.SAPPY_SEED ], + [Species.ANORITH]: [ MoveId.FIRST_IMPRESSION, MoveId.LEECH_LIFE, MoveId.DRAGON_DANCE, MoveId.MIGHTY_CLEAVE ], + [Species.FEEBAS]: [ MoveId.CALM_MIND, MoveId.FREEZE_DRY, MoveId.MOONBLAST, MoveId.STEAM_ERUPTION ], + [Species.CASTFORM]: [ MoveId.BOOMBURST, MoveId.HYDRO_STEAM, MoveId.ERUPTION, MoveId.QUIVER_DANCE ], + [Species.KECLEON]: [ MoveId.ZIPPY_ZAP, MoveId.COIL, MoveId.EXTREME_SPEED, MoveId.MULTI_ATTACK ], + [Species.SHUPPET]: [ MoveId.STORM_THROW, MoveId.TIDY_UP, MoveId.PARTING_SHOT, MoveId.SPECTRAL_THIEF ], + [Species.DUSKULL]: [ MoveId.BULK_UP, MoveId.DRAIN_PUNCH, MoveId.RECOVER, MoveId.RAGE_FIST ], + [Species.TROPIUS]: [ MoveId.STUFF_CHEEKS, MoveId.EARTH_POWER, MoveId.APPLE_ACID, MoveId.SAPPY_SEED ], + [Species.ABSOL]: [ MoveId.KOWTOW_CLEAVE, MoveId.SACRED_SWORD, MoveId.PSYBLADE, MoveId.BITTER_BLADE ], + [Species.WYNAUT]: [ MoveId.RECOVER, MoveId.SHED_TAIL, MoveId.TAUNT, MoveId.COMEUPPANCE ], + [Species.SNORUNT]: [ MoveId.SPARKLY_SWIRL, MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.BLOOD_MOON ], + [Species.SPHEAL]: [ MoveId.FLIP_TURN, MoveId.FREEZE_DRY, MoveId.SLACK_OFF, MoveId.STEAM_ERUPTION ], + [Species.CLAMPERL]: [ MoveId.SHELL_SIDE_ARM, MoveId.BOUNCY_BUBBLE, MoveId.FREEZE_DRY, MoveId.STEAM_ERUPTION ], + [Species.RELICANTH]: [ MoveId.DRAGON_DANCE, MoveId.SHORE_UP, MoveId.WAVE_CRASH, MoveId.DIAMOND_STORM ], + [Species.LUVDISC]: [ MoveId.BATON_PASS, MoveId.HEART_SWAP, MoveId.GLITZY_GLOW, MoveId.REVIVAL_BLESSING ], + [Species.BAGON]: [ MoveId.HEADLONG_RUSH, MoveId.FIRE_LASH, MoveId.DRAGON_DANCE, MoveId.DRAGON_DARTS ], + [Species.BELDUM]: [ MoveId.HEADLONG_RUSH, MoveId.DRAIN_PUNCH, MoveId.ICE_SPINNER, MoveId.SHIFT_GEAR ], + [Species.REGIROCK]: [ MoveId.STONE_AXE, MoveId.BODY_PRESS, MoveId.SHORE_UP, MoveId.SALT_CURE ], + [Species.REGICE]: [ MoveId.EARTH_POWER, MoveId.TAKE_HEART, MoveId.RECOVER, MoveId.FREEZE_DRY ], + [Species.REGISTEEL]: [ MoveId.BODY_PRESS, MoveId.SIZZLY_SLIDE, MoveId.RECOVER, MoveId.GIGATON_HAMMER ], + [Species.LATIAS]: [ MoveId.CORE_ENFORCER, MoveId.FUSION_FLARE, MoveId.SPARKLY_SWIRL, MoveId.MYSTICAL_POWER ], + [Species.LATIOS]: [ MoveId.CORE_ENFORCER, MoveId.BLUE_FLARE, MoveId.NASTY_PLOT, MoveId.TACHYON_CUTTER ], + [Species.KYOGRE]: [ MoveId.RECOVER, MoveId.HURRICANE, MoveId.FREEZY_FROST, MoveId.WILDBOLT_STORM ], + [Species.GROUDON]: [ MoveId.STONE_AXE, MoveId.SOLAR_BLADE, MoveId.MORNING_SUN, MoveId.SACRED_FIRE ], + [Species.RAYQUAZA]: [ MoveId.V_CREATE, MoveId.DRAGON_DARTS, MoveId.CORE_ENFORCER, MoveId.OBLIVION_WING ], + [Species.JIRACHI]: [ MoveId.TACHYON_CUTTER, MoveId.TRIPLE_ARROWS, MoveId.ROCK_SLIDE, MoveId.SHELL_SMASH ], + [Species.DEOXYS]: [ MoveId.COLLISION_COURSE, MoveId.FUSION_FLARE, MoveId.PARTING_SHOT, MoveId.LUMINA_CRASH ], - [Species.TURTWIG]: [ Moves.SHELL_SMASH, Moves.MIGHTY_CLEAVE, Moves.ICE_SPINNER, Moves.SAPPY_SEED ], - [Species.CHIMCHAR]: [ Moves.THUNDERBOLT, Moves.SECRET_SWORD, Moves.TRIPLE_AXEL, Moves.SACRED_FIRE ], - [Species.PIPLUP]: [ Moves.KINGS_SHIELD, Moves.TACHYON_CUTTER, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.STARLY]: [ Moves.SWORDS_DANCE, Moves.HEAD_CHARGE, Moves.FLARE_BLITZ, Moves.EXTREME_SPEED ], - [Species.BIDOOF]: [ Moves.EXTREME_SPEED, Moves.COSMIC_POWER, Moves.POWER_TRIP, Moves.AQUA_STEP ], - [Species.KRICKETOT]: [ Moves.BONEMERANG, Moves.VICTORY_DANCE, Moves.STONE_AXE, Moves.POPULATION_BOMB ], - [Species.SHINX]: [ Moves.FIRE_LASH, Moves.TRIPLE_AXEL, Moves.ZIPPY_ZAP, Moves.BOLT_STRIKE ], - [Species.BUDEW]: [ Moves.FIERY_DANCE, Moves.ACID_SPRAY, Moves.BOUNCY_BUBBLE, Moves.QUIVER_DANCE ], - [Species.CRANIDOS]: [ Moves.VOLT_TACKLE, Moves.ACCELEROCK, Moves.FLARE_BLITZ, Moves.SHIFT_GEAR ], - [Species.SHIELDON]: [ Moves.SHORE_UP, Moves.BODY_PRESS, Moves.KINGS_SHIELD, Moves.DIAMOND_STORM ], - [Species.BURMY]: [ Moves.FIERY_DANCE, Moves.DEFEND_ORDER, Moves.HEAL_ORDER, Moves.SAPPY_SEED ], - [Species.COMBEE]: [ Moves.SPORE, Moves.FLOATY_FALL, Moves.KINGS_SHIELD, Moves.VICTORY_DANCE ], - [Species.PACHIRISU]: [ Moves.FREEZY_FROST, Moves.SIZZLY_SLIDE, Moves.SLACK_OFF, Moves.THUNDER_CAGE ], - [Species.BUIZEL]: [ Moves.JET_PUNCH, Moves.TRIPLE_AXEL, Moves.SUPERCELL_SLAM, Moves.SURGING_STRIKES ], - [Species.CHERUBI]: [ Moves.SLEEP_POWDER, Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.FLOWER_TRICK ], - [Species.SHELLOS]: [ Moves.BOUNCY_BUBBLE, Moves.SCORCHING_SANDS, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.DRIFLOON]: [ Moves.PSYCHO_SHIFT, Moves.MIND_BLOWN, Moves.CALM_MIND, Moves.OBLIVION_WING ], - [Species.BUNEARY]: [ Moves.TRIPLE_AXEL, Moves.EXTREME_SPEED, Moves.THUNDEROUS_KICK, Moves.SWORDS_DANCE ], - [Species.GLAMEOW]: [ Moves.PARTING_SHOT, Moves.HIGH_HORSEPOWER, Moves.SWORDS_DANCE, Moves.EXTREME_SPEED ], - [Species.CHINGLING]: [ Moves.ALLURING_VOICE, Moves.EERIE_SPELL, Moves.TORCH_SONG, Moves.BOOMBURST ], - [Species.STUNKY]: [ Moves.CEASELESS_EDGE, Moves.FIRE_LASH, Moves.RECOVER, Moves.DIRE_CLAW ], - [Species.BRONZOR]: [ Moves.RECOVER, Moves.TACHYON_CUTTER, Moves.GLARE, Moves.LUMINA_CRASH ], - [Species.BONSLY]: [ Moves.ACCELEROCK, Moves.SWORDS_DANCE, Moves.STRENGTH_SAP, Moves.SAPPY_SEED ], - [Species.MIME_JR]: [ Moves.CHILLY_RECEPTION, Moves.MOONBLAST, Moves.FROST_BREATH, Moves.LUMINA_CRASH ], - [Species.HAPPINY]: [ Moves.COTTON_GUARD, Moves.SEISMIC_TOSS, Moves.SIZZLY_SLIDE, Moves.REVIVAL_BLESSING ], - [Species.CHATOT]: [ Moves.SPARKLING_ARIA, Moves.BOOMBURST, Moves.BATON_PASS, Moves.TORCH_SONG ], - [Species.SPIRITOMB]: [ Moves.PARTING_SHOT, Moves.BADDY_BAD, Moves.STRENGTH_SAP, Moves.SPECTRAL_THIEF ], - [Species.GIBLE]: [ Moves.METEOR_MASH, Moves.BITTER_BLADE, Moves.LANDS_WRATH, Moves.DRAGON_DANCE ], - [Species.MUNCHLAX]: [ Moves.STUFF_CHEEKS, Moves.GRAV_APPLE, Moves.SLACK_OFF, Moves.EXTREME_SPEED ], - [Species.RIOLU]: [ Moves.THUNDEROUS_KICK, Moves.TACHYON_CUTTER, Moves.TRIPLE_AXEL, Moves.SUNSTEEL_STRIKE ], - [Species.HIPPOPOTAS]: [ Moves.SHORE_UP, Moves.STONE_AXE, Moves.BULK_UP, Moves.SALT_CURE ], - [Species.SKORUPI]: [ Moves.COIL, Moves.DIRE_CLAW, Moves.CRABHAMMER, Moves.WICKED_BLOW ], - [Species.CROAGUNK]: [ Moves.DIRE_CLAW, Moves.TRIPLE_AXEL, Moves.THUNDEROUS_KICK, Moves.VICTORY_DANCE ], - [Species.CARNIVINE]: [ Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.COIL, Moves.SAPPY_SEED ], - [Species.FINNEON]: [ Moves.QUIVER_DANCE, Moves.SPLISHY_SPLASH, Moves.FREEZE_DRY, Moves.OBLIVION_WING ], - [Species.MANTYKE]: [ Moves.SPLISHY_SPLASH, Moves.FREEZY_FROST, Moves.NASTY_PLOT, Moves.OBLIVION_WING ], - [Species.SNOVER]: [ Moves.LANDS_WRATH, Moves.POWDER, Moves.CALM_MIND, Moves.MATCHA_GOTCHA ], - [Species.ROTOM]: [ Moves.STRENGTH_SAP, Moves.FIERY_DANCE, Moves.SPLISHY_SPLASH, Moves.ELECTRO_DRIFT ], - [Species.UXIE]: [ Moves.LUMINA_CRASH, Moves.AURA_SPHERE, Moves.RECOVER, Moves.TAIL_GLOW ], - [Species.MESPRIT]: [ Moves.PHOTON_GEYSER, Moves.AURA_SPHERE, Moves.RECOVER, Moves.TAIL_GLOW ], - [Species.AZELF]: [ Moves.PSYSTRIKE, Moves.AURA_SPHERE, Moves.ICE_BEAM, Moves.TAIL_GLOW ], - [Species.DIALGA]: [ Moves.CORE_ENFORCER, Moves.TAKE_HEART, Moves.RECOVER, Moves.MAKE_IT_RAIN ], - [Species.PALKIA]: [ Moves.MALIGNANT_CHAIN, Moves.TAKE_HEART, Moves.RECOVER, Moves.ORIGIN_PULSE ], - [Species.HEATRAN]: [ Moves.ENERGY_BALL, Moves.RECOVER, Moves.ERUPTION, Moves.TACHYON_CUTTER ], - [Species.REGIGIGAS]: [ Moves.SKILL_SWAP, Moves.RECOVER, Moves.EXTREME_SPEED, Moves.GIGATON_HAMMER ], - [Species.GIRATINA]: [ Moves.DRAGON_DANCE, Moves.SPECTRAL_THIEF, Moves.RECOVER, Moves.COLLISION_COURSE ], - [Species.CRESSELIA]: [ Moves.COSMIC_POWER, Moves.BODY_PRESS, Moves.SIZZLY_SLIDE, Moves.LUMINA_CRASH ], - [Species.PHIONE]: [ Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.STORED_POWER, Moves.ORIGIN_PULSE ], - [Species.MANAPHY]: [ Moves.BOUNCY_BUBBLE, Moves.FROST_BREATH, Moves.WILDBOLT_STORM, Moves.ORIGIN_PULSE ], - [Species.DARKRAI]: [ Moves.FIERY_WRATH, Moves.MOONBLAST, Moves.FIERY_DANCE, Moves.MAKE_IT_RAIN ], - [Species.SHAYMIN]: [ Moves.MATCHA_GOTCHA, Moves.FIERY_DANCE, Moves.AEROBLAST, Moves.QUIVER_DANCE ], - [Species.ARCEUS]: [ Moves.NO_RETREAT, Moves.COLLISION_COURSE, Moves.ASTRAL_BARRAGE, Moves.MULTI_ATTACK ], + [Species.TURTWIG]: [ MoveId.SHELL_SMASH, MoveId.MIGHTY_CLEAVE, MoveId.ICE_SPINNER, MoveId.SAPPY_SEED ], + [Species.CHIMCHAR]: [ MoveId.THUNDERBOLT, MoveId.SECRET_SWORD, MoveId.TRIPLE_AXEL, MoveId.SACRED_FIRE ], + [Species.PIPLUP]: [ MoveId.KINGS_SHIELD, MoveId.TACHYON_CUTTER, MoveId.FREEZE_DRY, MoveId.STEAM_ERUPTION ], + [Species.STARLY]: [ MoveId.SWORDS_DANCE, MoveId.HEAD_CHARGE, MoveId.FLARE_BLITZ, MoveId.EXTREME_SPEED ], + [Species.BIDOOF]: [ MoveId.EXTREME_SPEED, MoveId.COSMIC_POWER, MoveId.POWER_TRIP, MoveId.AQUA_STEP ], + [Species.KRICKETOT]: [ MoveId.BONEMERANG, MoveId.VICTORY_DANCE, MoveId.STONE_AXE, MoveId.POPULATION_BOMB ], + [Species.SHINX]: [ MoveId.FIRE_LASH, MoveId.TRIPLE_AXEL, MoveId.ZIPPY_ZAP, MoveId.BOLT_STRIKE ], + [Species.BUDEW]: [ MoveId.FIERY_DANCE, MoveId.ACID_SPRAY, MoveId.BOUNCY_BUBBLE, MoveId.QUIVER_DANCE ], + [Species.CRANIDOS]: [ MoveId.VOLT_TACKLE, MoveId.ACCELEROCK, MoveId.FLARE_BLITZ, MoveId.SHIFT_GEAR ], + [Species.SHIELDON]: [ MoveId.SHORE_UP, MoveId.BODY_PRESS, MoveId.KINGS_SHIELD, MoveId.DIAMOND_STORM ], + [Species.BURMY]: [ MoveId.FIERY_DANCE, MoveId.DEFEND_ORDER, MoveId.HEAL_ORDER, MoveId.SAPPY_SEED ], + [Species.COMBEE]: [ MoveId.SPORE, MoveId.FLOATY_FALL, MoveId.KINGS_SHIELD, MoveId.VICTORY_DANCE ], + [Species.PACHIRISU]: [ MoveId.FREEZY_FROST, MoveId.SIZZLY_SLIDE, MoveId.SLACK_OFF, MoveId.THUNDER_CAGE ], + [Species.BUIZEL]: [ MoveId.JET_PUNCH, MoveId.TRIPLE_AXEL, MoveId.SUPERCELL_SLAM, MoveId.SURGING_STRIKES ], + [Species.CHERUBI]: [ MoveId.SLEEP_POWDER, MoveId.STRENGTH_SAP, MoveId.FIRE_LASH, MoveId.FLOWER_TRICK ], + [Species.SHELLOS]: [ MoveId.BOUNCY_BUBBLE, MoveId.SCORCHING_SANDS, MoveId.FREEZE_DRY, MoveId.STEAM_ERUPTION ], + [Species.DRIFLOON]: [ MoveId.PSYCHO_SHIFT, MoveId.MIND_BLOWN, MoveId.CALM_MIND, MoveId.OBLIVION_WING ], + [Species.BUNEARY]: [ MoveId.TRIPLE_AXEL, MoveId.EXTREME_SPEED, MoveId.THUNDEROUS_KICK, MoveId.SWORDS_DANCE ], + [Species.GLAMEOW]: [ MoveId.PARTING_SHOT, MoveId.HIGH_HORSEPOWER, MoveId.SWORDS_DANCE, MoveId.EXTREME_SPEED ], + [Species.CHINGLING]: [ MoveId.ALLURING_VOICE, MoveId.EERIE_SPELL, MoveId.TORCH_SONG, MoveId.BOOMBURST ], + [Species.STUNKY]: [ MoveId.CEASELESS_EDGE, MoveId.FIRE_LASH, MoveId.RECOVER, MoveId.DIRE_CLAW ], + [Species.BRONZOR]: [ MoveId.RECOVER, MoveId.TACHYON_CUTTER, MoveId.GLARE, MoveId.LUMINA_CRASH ], + [Species.BONSLY]: [ MoveId.ACCELEROCK, MoveId.SWORDS_DANCE, MoveId.STRENGTH_SAP, MoveId.SAPPY_SEED ], + [Species.MIME_JR]: [ MoveId.CHILLY_RECEPTION, MoveId.MOONBLAST, MoveId.FROST_BREATH, MoveId.LUMINA_CRASH ], + [Species.HAPPINY]: [ MoveId.COTTON_GUARD, MoveId.SEISMIC_TOSS, MoveId.SIZZLY_SLIDE, MoveId.REVIVAL_BLESSING ], + [Species.CHATOT]: [ MoveId.SPARKLING_ARIA, MoveId.BOOMBURST, MoveId.BATON_PASS, MoveId.TORCH_SONG ], + [Species.SPIRITOMB]: [ MoveId.PARTING_SHOT, MoveId.BADDY_BAD, MoveId.STRENGTH_SAP, MoveId.SPECTRAL_THIEF ], + [Species.GIBLE]: [ MoveId.METEOR_MASH, MoveId.BITTER_BLADE, MoveId.LANDS_WRATH, MoveId.DRAGON_DANCE ], + [Species.MUNCHLAX]: [ MoveId.STUFF_CHEEKS, MoveId.GRAV_APPLE, MoveId.SLACK_OFF, MoveId.EXTREME_SPEED ], + [Species.RIOLU]: [ MoveId.THUNDEROUS_KICK, MoveId.TACHYON_CUTTER, MoveId.TRIPLE_AXEL, MoveId.SUNSTEEL_STRIKE ], + [Species.HIPPOPOTAS]: [ MoveId.SHORE_UP, MoveId.STONE_AXE, MoveId.BULK_UP, MoveId.SALT_CURE ], + [Species.SKORUPI]: [ MoveId.COIL, MoveId.DIRE_CLAW, MoveId.CRABHAMMER, MoveId.WICKED_BLOW ], + [Species.CROAGUNK]: [ MoveId.DIRE_CLAW, MoveId.TRIPLE_AXEL, MoveId.THUNDEROUS_KICK, MoveId.VICTORY_DANCE ], + [Species.CARNIVINE]: [ MoveId.STRENGTH_SAP, MoveId.FIRE_LASH, MoveId.COIL, MoveId.SAPPY_SEED ], + [Species.FINNEON]: [ MoveId.QUIVER_DANCE, MoveId.SPLISHY_SPLASH, MoveId.FREEZE_DRY, MoveId.OBLIVION_WING ], + [Species.MANTYKE]: [ MoveId.SPLISHY_SPLASH, MoveId.FREEZY_FROST, MoveId.NASTY_PLOT, MoveId.OBLIVION_WING ], + [Species.SNOVER]: [ MoveId.LANDS_WRATH, MoveId.POWDER, MoveId.CALM_MIND, MoveId.MATCHA_GOTCHA ], + [Species.ROTOM]: [ MoveId.STRENGTH_SAP, MoveId.FIERY_DANCE, MoveId.SPLISHY_SPLASH, MoveId.ELECTRO_DRIFT ], + [Species.UXIE]: [ MoveId.LUMINA_CRASH, MoveId.AURA_SPHERE, MoveId.RECOVER, MoveId.TAIL_GLOW ], + [Species.MESPRIT]: [ MoveId.PHOTON_GEYSER, MoveId.AURA_SPHERE, MoveId.RECOVER, MoveId.TAIL_GLOW ], + [Species.AZELF]: [ MoveId.PSYSTRIKE, MoveId.AURA_SPHERE, MoveId.ICE_BEAM, MoveId.TAIL_GLOW ], + [Species.DIALGA]: [ MoveId.CORE_ENFORCER, MoveId.TAKE_HEART, MoveId.RECOVER, MoveId.MAKE_IT_RAIN ], + [Species.PALKIA]: [ MoveId.MALIGNANT_CHAIN, MoveId.TAKE_HEART, MoveId.RECOVER, MoveId.ORIGIN_PULSE ], + [Species.HEATRAN]: [ MoveId.ENERGY_BALL, MoveId.RECOVER, MoveId.ERUPTION, MoveId.TACHYON_CUTTER ], + [Species.REGIGIGAS]: [ MoveId.SKILL_SWAP, MoveId.RECOVER, MoveId.EXTREME_SPEED, MoveId.GIGATON_HAMMER ], + [Species.GIRATINA]: [ MoveId.DRAGON_DANCE, MoveId.SPECTRAL_THIEF, MoveId.RECOVER, MoveId.COLLISION_COURSE ], + [Species.CRESSELIA]: [ MoveId.COSMIC_POWER, MoveId.BODY_PRESS, MoveId.SIZZLY_SLIDE, MoveId.LUMINA_CRASH ], + [Species.PHIONE]: [ MoveId.BOUNCY_BUBBLE, MoveId.FREEZE_DRY, MoveId.STORED_POWER, MoveId.ORIGIN_PULSE ], + [Species.MANAPHY]: [ MoveId.BOUNCY_BUBBLE, MoveId.FROST_BREATH, MoveId.WILDBOLT_STORM, MoveId.ORIGIN_PULSE ], + [Species.DARKRAI]: [ MoveId.FIERY_WRATH, MoveId.MOONBLAST, MoveId.FIERY_DANCE, MoveId.MAKE_IT_RAIN ], + [Species.SHAYMIN]: [ MoveId.MATCHA_GOTCHA, MoveId.FIERY_DANCE, MoveId.AEROBLAST, MoveId.QUIVER_DANCE ], + [Species.ARCEUS]: [ MoveId.NO_RETREAT, MoveId.COLLISION_COURSE, MoveId.ASTRAL_BARRAGE, MoveId.MULTI_ATTACK ], - [Species.VICTINI]: [ Moves.BLUE_FLARE, Moves.BOLT_STRIKE, Moves.LUSTER_PURGE, Moves.VICTORY_DANCE ], - [Species.SNIVY]: [ Moves.FLAMETHROWER, Moves.CLANGING_SCALES, Moves.MAKE_IT_RAIN, Moves.FLEUR_CANNON ], - [Species.TEPIG]: [ Moves.WAVE_CRASH, Moves.VOLT_TACKLE, Moves.AXE_KICK, Moves.VICTORY_DANCE ], - [Species.OSHAWOTT]: [ Moves.FREEZE_DRY, Moves.SHELL_SIDE_ARM, Moves.SACRED_SWORD, Moves.SHELL_SMASH ], - [Species.PATRAT]: [ Moves.FAKE_OUT, Moves.SWORDS_DANCE, Moves.DYNAMIC_PUNCH, Moves.EXTREME_SPEED ], - [Species.LILLIPUP]: [ Moves.CLOSE_COMBAT, Moves.BODY_SLAM, Moves.HIGH_HORSEPOWER, Moves.LAST_RESPECTS ], - [Species.PURRLOIN]: [ Moves.ENCORE, Moves.OBSTRUCT, Moves.PARTING_SHOT, Moves.WICKED_BLOW ], - [Species.PANSAGE]: [ Moves.SWORDS_DANCE, Moves.FIRE_LASH, Moves.EARTHQUAKE, Moves.IVY_CUDGEL ], - [Species.PANSEAR]: [ Moves.NASTY_PLOT, Moves.HYDRO_STEAM, Moves.EARTH_POWER, Moves.ERUPTION ], - [Species.PANPOUR]: [ Moves.NASTY_PLOT, Moves.ENERGY_BALL, Moves.EARTH_POWER, Moves.WATER_SPOUT ], - [Species.MUNNA]: [ Moves.COSMIC_POWER, Moves.AURA_SPHERE, Moves.LUNAR_BLESSING, Moves.MYSTICAL_POWER ], - [Species.PIDOVE]: [ Moves.SLASH, Moves.TIDY_UP, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ], - [Species.BLITZLE]: [ Moves.HORN_LEECH, Moves.SWORDS_DANCE, Moves.FLARE_BLITZ, Moves.BOLT_STRIKE ], - [Species.ROGGENROLA]: [ Moves.BODY_PRESS, Moves.CURSE, Moves.SHORE_UP, Moves.DIAMOND_STORM ], - [Species.WOOBAT]: [ Moves.ESPER_WING, Moves.STORED_POWER, Moves.MYSTICAL_FIRE, Moves.OBLIVION_WING ], - [Species.DRILBUR]: [ Moves.METEOR_MASH, Moves.ICE_SPINNER, Moves.SHIFT_GEAR, Moves.THOUSAND_ARROWS ], - [Species.AUDINO]: [ Moves.TAKE_HEART, Moves.MOONBLAST, Moves.WISH, Moves.MATCHA_GOTCHA ], - [Species.TIMBURR]: [ Moves.MACH_PUNCH, Moves.DRAIN_PUNCH, Moves.ICE_HAMMER, Moves.DOUBLE_IRON_BASH ], - [Species.TYMPOLE]: [ Moves.JET_PUNCH, Moves.HIGH_HORSEPOWER, Moves.BULK_UP, Moves.SURGING_STRIKES ], - [Species.THROH]: [ Moves.MACH_PUNCH, Moves.SLACK_OFF, Moves.METEOR_MASH, Moves.RAGE_FIST ], - [Species.SAWK]: [ Moves.DRAIN_PUNCH, Moves.SUCKER_PUNCH, Moves.METEOR_MASH, Moves.VICTORY_DANCE ], - [Species.SEWADDLE]: [ Moves.STONE_AXE, Moves.PSYCHO_CUT, Moves.BITTER_BLADE, Moves.VICTORY_DANCE ], - [Species.VENIPEDE]: [ Moves.BANEFUL_BUNKER, Moves.LEECH_LIFE, Moves.NOXIOUS_TORQUE, Moves.POWER_TRIP ], - [Species.COTTONEE]: [ Moves.POLLEN_PUFF, Moves.PARTING_SHOT, Moves.SLEEP_POWDER, Moves.SEED_FLARE ], - [Species.PETILIL]: [ Moves.THUNDEROUS_KICK, Moves.SPARKLING_ARIA, Moves.FIERY_DANCE, Moves.FLOWER_TRICK ], - [Species.BASCULIN]: [ Moves.LAST_RESPECTS, Moves.CLOSE_COMBAT, Moves.SPLISHY_SPLASH, Moves.NO_RETREAT ], - [Species.SANDILE]: [ Moves.DIRE_CLAW, Moves.SUCKER_PUNCH, Moves.FIRE_LASH, Moves.HEADLONG_RUSH ], - [Species.DARUMAKA]: [ Moves.DRAIN_PUNCH, Moves.ZIPPY_ZAP, Moves.HEADLONG_RUSH, Moves.PYRO_BALL ], - [Species.MARACTUS]: [ Moves.EARTH_POWER, Moves.SIZZLY_SLIDE, Moves.FIERY_DANCE, Moves.QUIVER_DANCE ], - [Species.DWEBBLE]: [ Moves.CRABHAMMER, Moves.STONE_AXE, Moves.LEECH_LIFE, Moves.MIGHTY_CLEAVE ], - [Species.SCRAGGY]: [ Moves.SUCKER_PUNCH, Moves.BULLET_PUNCH, Moves.NOXIOUS_TORQUE, Moves.VICTORY_DANCE ], - [Species.SIGILYPH]: [ Moves.MOONBLAST, Moves.PSYCHO_SHIFT, Moves.ESPER_WING, Moves.OBLIVION_WING ], - [Species.YAMASK]: [ Moves.STRENGTH_SAP, Moves.GLARE, Moves.AURA_SPHERE, Moves.ASTRAL_BARRAGE ], - [Species.TIRTOUGA]: [ Moves.ICE_SPINNER, Moves.AQUA_STEP, Moves.SHORE_UP, Moves.MIGHTY_CLEAVE ], - [Species.ARCHEN]: [ Moves.ROOST, Moves.EARTHQUAKE, Moves.FLOATY_FALL, Moves.MIGHTY_CLEAVE ], - [Species.TRUBBISH]: [ Moves.COIL, Moves.RECOVER, Moves.DIRE_CLAW, Moves.GIGATON_HAMMER ], - [Species.ZORUA]: [ Moves.MALIGNANT_CHAIN, Moves.MOONBLAST, Moves.SECRET_SWORD, Moves.FIERY_WRATH ], - [Species.MINCCINO]: [ Moves.ICICLE_SPEAR, Moves.TIDY_UP, Moves.KNOCK_OFF, Moves.POPULATION_BOMB ], - [Species.GOTHITA]: [ Moves.RECOVER, Moves.MOONBLAST, Moves.AURA_SPHERE, Moves.LUMINA_CRASH ], - [Species.SOLOSIS]: [ Moves.MIST_BALL, Moves.SPEED_SWAP, Moves.FLAMETHROWER, Moves.LIGHT_OF_RUIN ], - [Species.DUCKLETT]: [ Moves.SPLISHY_SPLASH, Moves.SANDSEAR_STORM, Moves.WILDBOLT_STORM, Moves.QUIVER_DANCE ], - [Species.VANILLITE]: [ Moves.EARTH_POWER, Moves.AURORA_VEIL, Moves.CALM_MIND, Moves.SPARKLY_SWIRL ], - [Species.DEERLING]: [ Moves.TIDY_UP, Moves.HEADBUTT, Moves.COMBAT_TORQUE, Moves.FLOWER_TRICK ], - [Species.EMOLGA]: [ Moves.ICICLE_CRASH, Moves.ZING_ZAP, Moves.FLOATY_FALL, Moves.ELECTRIFY ], - [Species.KARRABLAST]: [ Moves.LEECH_LIFE, Moves.BITTER_BLADE, Moves.OBSTRUCT, Moves.DOUBLE_IRON_BASH ], - [Species.FOONGUS]: [ Moves.POLLEN_PUFF, Moves.PARTING_SHOT, Moves.FOUL_PLAY, Moves.SAPPY_SEED ], - [Species.FRILLISH]: [ Moves.CALM_MIND, Moves.BUZZY_BUZZ, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], - [Species.ALOMOMOLA]: [ Moves.FLIP_TURN, Moves.HEART_SWAP, Moves.GLITZY_GLOW, Moves.REVIVAL_BLESSING ], - [Species.JOLTIK]: [ Moves.WILDBOLT_STORM, Moves.PARABOLIC_CHARGE, Moves.EARTH_POWER, Moves.QUIVER_DANCE ], - [Species.FERROSEED]: [ Moves.SYNTHESIS, Moves.CEASELESS_EDGE, Moves.SPIKY_SHIELD, Moves.SAPPY_SEED ], - [Species.KLINK]: [ Moves.TRIPLE_AXEL, Moves.HIGH_HORSEPOWER, Moves.RECOVER, Moves.AURA_WHEEL ], - [Species.TYNAMO]: [ Moves.SCALD, Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.AURA_WHEEL ], - [Species.ELGYEM]: [ Moves.THUNDERCLAP, Moves.BADDY_BAD, Moves.AURA_SPHERE, Moves.PHOTON_GEYSER ], - [Species.LITWICK]: [ Moves.GIGA_DRAIN, Moves.EARTH_POWER, Moves.MOONBLAST, Moves.TORCH_SONG ], - [Species.AXEW]: [ Moves.STONE_AXE, Moves.DIRE_CLAW, Moves.BITTER_BLADE, Moves.GLAIVE_RUSH ], - [Species.CUBCHOO]: [ Moves.MOUNTAIN_GALE, Moves.AQUA_STEP, Moves.ICE_SHARD, Moves.COLLISION_COURSE ], - [Species.CRYOGONAL]: [ Moves.FREEZING_GLARE, Moves.AURORA_VEIL, Moves.NASTY_PLOT, Moves.ORIGIN_PULSE ], - [Species.SHELMET]: [ Moves.POWER_GEM, Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.STEAM_ERUPTION ], - [Species.STUNFISK]: [ Moves.THUNDERCLAP, Moves.SANDSEAR_STORM, Moves.STRENGTH_SAP, Moves.THUNDER_CAGE ], - [Species.MIENFOO]: [ Moves.GUNK_SHOT, Moves.SUPERCELL_SLAM, Moves.MOUNTAIN_GALE, Moves.WICKED_BLOW ], - [Species.DRUDDIGON]: [ Moves.FIRE_LASH, Moves.MORNING_SUN, Moves.DRAGON_DARTS, Moves.CLANGOROUS_SOUL ], - [Species.GOLETT]: [ Moves.SHIFT_GEAR, Moves.DRAIN_PUNCH, Moves.HEADLONG_RUSH, Moves.RAGE_FIST ], - [Species.PAWNIARD]: [ Moves.SUCKER_PUNCH, Moves.CEASELESS_EDGE, Moves.BITTER_BLADE, Moves.LAST_RESPECTS ], - [Species.BOUFFALANT]: [ Moves.HORN_LEECH, Moves.HIGH_JUMP_KICK, Moves.HEAD_SMASH, Moves.FLARE_BLITZ ], - [Species.RUFFLET]: [ Moves.FLOATY_FALL, Moves.AURA_SPHERE, Moves.NO_RETREAT, Moves.BOLT_BEAK ], - [Species.VULLABY]: [ Moves.FOUL_PLAY, Moves.BODY_PRESS, Moves.ROOST, Moves.RUINATION ], - [Species.HEATMOR]: [ Moves.EARTH_POWER, Moves.OVERHEAT, Moves.THUNDERBOLT, Moves.V_CREATE ], - [Species.DURANT]: [ Moves.HIGH_HORSEPOWER, Moves.FIRST_IMPRESSION, Moves.SWORDS_DANCE, Moves.BEHEMOTH_BASH ], - [Species.DEINO]: [ Moves.FIERY_WRATH, Moves.ESPER_WING, Moves.SLUDGE_BOMB, Moves.FICKLE_BEAM ], - [Species.LARVESTA]: [ Moves.THUNDERBOLT, Moves.DAZZLING_GLEAM, Moves.EARTH_POWER, Moves.HYDRO_STEAM ], - [Species.COBALION]: [ Moves.BEHEMOTH_BLADE, Moves.MIGHTY_CLEAVE, Moves.CEASELESS_EDGE, Moves.VICTORY_DANCE ], - [Species.TERRAKION]: [ Moves.MIGHTY_CLEAVE, Moves.HEADLONG_RUSH, Moves.KNOCK_OFF, Moves.VICTORY_DANCE ], - [Species.VIRIZION]: [ Moves.SAPPY_SEED, Moves.PSYBLADE, Moves.STONE_AXE, Moves.VICTORY_DANCE ], - [Species.TORNADUS]: [ Moves.SANDSEAR_STORM, Moves.PARTING_SHOT, Moves.SPLISHY_SPLASH, Moves.OBLIVION_WING ], - [Species.THUNDURUS]: [ Moves.SANDSEAR_STORM, Moves.HURRICANE, Moves.FROST_BREATH, Moves.ELECTRO_SHOT ], - [Species.RESHIRAM]: [ Moves.ENERGY_BALL, Moves.TAKE_HEART, Moves.FICKLE_BEAM, Moves.ERUPTION ], - [Species.ZEKROM]: [ Moves.TRIPLE_AXEL, Moves.THUNDEROUS_KICK, Moves.DRAGON_HAMMER, Moves.DRAGON_ENERGY ], - [Species.LANDORUS]: [ Moves.STONE_AXE, Moves.FLOATY_FALL, Moves.ROOST, Moves.BLEAKWIND_STORM ], - [Species.KYUREM]: [ Moves.DRAGON_DARTS, Moves.GLACIAL_LANCE, Moves.NO_RETREAT, Moves.DRAGON_ENERGY ], - [Species.KELDEO]: [ Moves.BOUNCY_BUBBLE, Moves.THUNDERBOLT, Moves.ICE_BEAM, Moves.STEAM_ERUPTION ], - [Species.MELOETTA]: [ Moves.BODY_SLAM, Moves.PSYCHIC_NOISE, Moves.TRIPLE_ARROWS, Moves.TORCH_SONG ], - [Species.GENESECT]: [ Moves.EXTREME_SPEED, Moves.SHIFT_GEAR, Moves.BEHEMOTH_BASH, Moves.TACHYON_CUTTER ], + [Species.VICTINI]: [ MoveId.BLUE_FLARE, MoveId.BOLT_STRIKE, MoveId.LUSTER_PURGE, MoveId.VICTORY_DANCE ], + [Species.SNIVY]: [ MoveId.FLAMETHROWER, MoveId.CLANGING_SCALES, MoveId.MAKE_IT_RAIN, MoveId.FLEUR_CANNON ], + [Species.TEPIG]: [ MoveId.WAVE_CRASH, MoveId.VOLT_TACKLE, MoveId.AXE_KICK, MoveId.VICTORY_DANCE ], + [Species.OSHAWOTT]: [ MoveId.FREEZE_DRY, MoveId.SHELL_SIDE_ARM, MoveId.SACRED_SWORD, MoveId.SHELL_SMASH ], + [Species.PATRAT]: [ MoveId.FAKE_OUT, MoveId.SWORDS_DANCE, MoveId.DYNAMIC_PUNCH, MoveId.EXTREME_SPEED ], + [Species.LILLIPUP]: [ MoveId.CLOSE_COMBAT, MoveId.BODY_SLAM, MoveId.HIGH_HORSEPOWER, MoveId.LAST_RESPECTS ], + [Species.PURRLOIN]: [ MoveId.ENCORE, MoveId.OBSTRUCT, MoveId.PARTING_SHOT, MoveId.WICKED_BLOW ], + [Species.PANSAGE]: [ MoveId.SWORDS_DANCE, MoveId.FIRE_LASH, MoveId.EARTHQUAKE, MoveId.IVY_CUDGEL ], + [Species.PANSEAR]: [ MoveId.NASTY_PLOT, MoveId.HYDRO_STEAM, MoveId.EARTH_POWER, MoveId.ERUPTION ], + [Species.PANPOUR]: [ MoveId.NASTY_PLOT, MoveId.ENERGY_BALL, MoveId.EARTH_POWER, MoveId.WATER_SPOUT ], + [Species.MUNNA]: [ MoveId.COSMIC_POWER, MoveId.AURA_SPHERE, MoveId.LUNAR_BLESSING, MoveId.MYSTICAL_POWER ], + [Species.PIDOVE]: [ MoveId.SLASH, MoveId.TIDY_UP, MoveId.FLOATY_FALL, MoveId.TRIPLE_ARROWS ], + [Species.BLITZLE]: [ MoveId.HORN_LEECH, MoveId.SWORDS_DANCE, MoveId.FLARE_BLITZ, MoveId.BOLT_STRIKE ], + [Species.ROGGENROLA]: [ MoveId.BODY_PRESS, MoveId.CURSE, MoveId.SHORE_UP, MoveId.DIAMOND_STORM ], + [Species.WOOBAT]: [ MoveId.ESPER_WING, MoveId.STORED_POWER, MoveId.MYSTICAL_FIRE, MoveId.OBLIVION_WING ], + [Species.DRILBUR]: [ MoveId.METEOR_MASH, MoveId.ICE_SPINNER, MoveId.SHIFT_GEAR, MoveId.THOUSAND_ARROWS ], + [Species.AUDINO]: [ MoveId.TAKE_HEART, MoveId.MOONBLAST, MoveId.WISH, MoveId.MATCHA_GOTCHA ], + [Species.TIMBURR]: [ MoveId.MACH_PUNCH, MoveId.DRAIN_PUNCH, MoveId.ICE_HAMMER, MoveId.DOUBLE_IRON_BASH ], + [Species.TYMPOLE]: [ MoveId.JET_PUNCH, MoveId.HIGH_HORSEPOWER, MoveId.BULK_UP, MoveId.SURGING_STRIKES ], + [Species.THROH]: [ MoveId.MACH_PUNCH, MoveId.SLACK_OFF, MoveId.METEOR_MASH, MoveId.RAGE_FIST ], + [Species.SAWK]: [ MoveId.DRAIN_PUNCH, MoveId.SUCKER_PUNCH, MoveId.METEOR_MASH, MoveId.VICTORY_DANCE ], + [Species.SEWADDLE]: [ MoveId.STONE_AXE, MoveId.PSYCHO_CUT, MoveId.BITTER_BLADE, MoveId.VICTORY_DANCE ], + [Species.VENIPEDE]: [ MoveId.BANEFUL_BUNKER, MoveId.LEECH_LIFE, MoveId.NOXIOUS_TORQUE, MoveId.POWER_TRIP ], + [Species.COTTONEE]: [ MoveId.POLLEN_PUFF, MoveId.PARTING_SHOT, MoveId.SLEEP_POWDER, MoveId.SEED_FLARE ], + [Species.PETILIL]: [ MoveId.THUNDEROUS_KICK, MoveId.SPARKLING_ARIA, MoveId.FIERY_DANCE, MoveId.FLOWER_TRICK ], + [Species.BASCULIN]: [ MoveId.LAST_RESPECTS, MoveId.CLOSE_COMBAT, MoveId.SPLISHY_SPLASH, MoveId.NO_RETREAT ], + [Species.SANDILE]: [ MoveId.DIRE_CLAW, MoveId.SUCKER_PUNCH, MoveId.FIRE_LASH, MoveId.HEADLONG_RUSH ], + [Species.DARUMAKA]: [ MoveId.DRAIN_PUNCH, MoveId.ZIPPY_ZAP, MoveId.HEADLONG_RUSH, MoveId.PYRO_BALL ], + [Species.MARACTUS]: [ MoveId.EARTH_POWER, MoveId.SIZZLY_SLIDE, MoveId.FIERY_DANCE, MoveId.QUIVER_DANCE ], + [Species.DWEBBLE]: [ MoveId.CRABHAMMER, MoveId.STONE_AXE, MoveId.LEECH_LIFE, MoveId.MIGHTY_CLEAVE ], + [Species.SCRAGGY]: [ MoveId.SUCKER_PUNCH, MoveId.BULLET_PUNCH, MoveId.NOXIOUS_TORQUE, MoveId.VICTORY_DANCE ], + [Species.SIGILYPH]: [ MoveId.MOONBLAST, MoveId.PSYCHO_SHIFT, MoveId.ESPER_WING, MoveId.OBLIVION_WING ], + [Species.YAMASK]: [ MoveId.STRENGTH_SAP, MoveId.GLARE, MoveId.AURA_SPHERE, MoveId.ASTRAL_BARRAGE ], + [Species.TIRTOUGA]: [ MoveId.ICE_SPINNER, MoveId.AQUA_STEP, MoveId.SHORE_UP, MoveId.MIGHTY_CLEAVE ], + [Species.ARCHEN]: [ MoveId.ROOST, MoveId.EARTHQUAKE, MoveId.FLOATY_FALL, MoveId.MIGHTY_CLEAVE ], + [Species.TRUBBISH]: [ MoveId.COIL, MoveId.RECOVER, MoveId.DIRE_CLAW, MoveId.GIGATON_HAMMER ], + [Species.ZORUA]: [ MoveId.MALIGNANT_CHAIN, MoveId.MOONBLAST, MoveId.SECRET_SWORD, MoveId.FIERY_WRATH ], + [Species.MINCCINO]: [ MoveId.ICICLE_SPEAR, MoveId.TIDY_UP, MoveId.KNOCK_OFF, MoveId.POPULATION_BOMB ], + [Species.GOTHITA]: [ MoveId.RECOVER, MoveId.MOONBLAST, MoveId.AURA_SPHERE, MoveId.LUMINA_CRASH ], + [Species.SOLOSIS]: [ MoveId.MIST_BALL, MoveId.SPEED_SWAP, MoveId.FLAMETHROWER, MoveId.LIGHT_OF_RUIN ], + [Species.DUCKLETT]: [ MoveId.SPLISHY_SPLASH, MoveId.SANDSEAR_STORM, MoveId.WILDBOLT_STORM, MoveId.QUIVER_DANCE ], + [Species.VANILLITE]: [ MoveId.EARTH_POWER, MoveId.AURORA_VEIL, MoveId.CALM_MIND, MoveId.SPARKLY_SWIRL ], + [Species.DEERLING]: [ MoveId.TIDY_UP, MoveId.HEADBUTT, MoveId.COMBAT_TORQUE, MoveId.FLOWER_TRICK ], + [Species.EMOLGA]: [ MoveId.ICICLE_CRASH, MoveId.ZING_ZAP, MoveId.FLOATY_FALL, MoveId.ELECTRIFY ], + [Species.KARRABLAST]: [ MoveId.LEECH_LIFE, MoveId.BITTER_BLADE, MoveId.OBSTRUCT, MoveId.DOUBLE_IRON_BASH ], + [Species.FOONGUS]: [ MoveId.POLLEN_PUFF, MoveId.PARTING_SHOT, MoveId.FOUL_PLAY, MoveId.SAPPY_SEED ], + [Species.FRILLISH]: [ MoveId.CALM_MIND, MoveId.BUZZY_BUZZ, MoveId.FREEZE_DRY, MoveId.STEAM_ERUPTION ], + [Species.ALOMOMOLA]: [ MoveId.FLIP_TURN, MoveId.HEART_SWAP, MoveId.GLITZY_GLOW, MoveId.REVIVAL_BLESSING ], + [Species.JOLTIK]: [ MoveId.WILDBOLT_STORM, MoveId.PARABOLIC_CHARGE, MoveId.EARTH_POWER, MoveId.QUIVER_DANCE ], + [Species.FERROSEED]: [ MoveId.SYNTHESIS, MoveId.CEASELESS_EDGE, MoveId.SPIKY_SHIELD, MoveId.SAPPY_SEED ], + [Species.KLINK]: [ MoveId.TRIPLE_AXEL, MoveId.HIGH_HORSEPOWER, MoveId.RECOVER, MoveId.AURA_WHEEL ], + [Species.TYNAMO]: [ MoveId.SCALD, MoveId.STRENGTH_SAP, MoveId.FIRE_LASH, MoveId.AURA_WHEEL ], + [Species.ELGYEM]: [ MoveId.THUNDERCLAP, MoveId.BADDY_BAD, MoveId.AURA_SPHERE, MoveId.PHOTON_GEYSER ], + [Species.LITWICK]: [ MoveId.GIGA_DRAIN, MoveId.EARTH_POWER, MoveId.MOONBLAST, MoveId.TORCH_SONG ], + [Species.AXEW]: [ MoveId.STONE_AXE, MoveId.DIRE_CLAW, MoveId.BITTER_BLADE, MoveId.GLAIVE_RUSH ], + [Species.CUBCHOO]: [ MoveId.MOUNTAIN_GALE, MoveId.AQUA_STEP, MoveId.ICE_SHARD, MoveId.COLLISION_COURSE ], + [Species.CRYOGONAL]: [ MoveId.FREEZING_GLARE, MoveId.AURORA_VEIL, MoveId.NASTY_PLOT, MoveId.ORIGIN_PULSE ], + [Species.SHELMET]: [ MoveId.POWER_GEM, MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.STEAM_ERUPTION ], + [Species.STUNFISK]: [ MoveId.THUNDERCLAP, MoveId.SANDSEAR_STORM, MoveId.STRENGTH_SAP, MoveId.THUNDER_CAGE ], + [Species.MIENFOO]: [ MoveId.GUNK_SHOT, MoveId.SUPERCELL_SLAM, MoveId.MOUNTAIN_GALE, MoveId.WICKED_BLOW ], + [Species.DRUDDIGON]: [ MoveId.FIRE_LASH, MoveId.MORNING_SUN, MoveId.DRAGON_DARTS, MoveId.CLANGOROUS_SOUL ], + [Species.GOLETT]: [ MoveId.SHIFT_GEAR, MoveId.DRAIN_PUNCH, MoveId.HEADLONG_RUSH, MoveId.RAGE_FIST ], + [Species.PAWNIARD]: [ MoveId.SUCKER_PUNCH, MoveId.CEASELESS_EDGE, MoveId.BITTER_BLADE, MoveId.LAST_RESPECTS ], + [Species.BOUFFALANT]: [ MoveId.HORN_LEECH, MoveId.HIGH_JUMP_KICK, MoveId.HEAD_SMASH, MoveId.FLARE_BLITZ ], + [Species.RUFFLET]: [ MoveId.FLOATY_FALL, MoveId.AURA_SPHERE, MoveId.NO_RETREAT, MoveId.BOLT_BEAK ], + [Species.VULLABY]: [ MoveId.FOUL_PLAY, MoveId.BODY_PRESS, MoveId.ROOST, MoveId.RUINATION ], + [Species.HEATMOR]: [ MoveId.EARTH_POWER, MoveId.OVERHEAT, MoveId.THUNDERBOLT, MoveId.V_CREATE ], + [Species.DURANT]: [ MoveId.HIGH_HORSEPOWER, MoveId.FIRST_IMPRESSION, MoveId.SWORDS_DANCE, MoveId.BEHEMOTH_BASH ], + [Species.DEINO]: [ MoveId.FIERY_WRATH, MoveId.ESPER_WING, MoveId.SLUDGE_BOMB, MoveId.FICKLE_BEAM ], + [Species.LARVESTA]: [ MoveId.THUNDERBOLT, MoveId.DAZZLING_GLEAM, MoveId.EARTH_POWER, MoveId.HYDRO_STEAM ], + [Species.COBALION]: [ MoveId.BEHEMOTH_BLADE, MoveId.MIGHTY_CLEAVE, MoveId.CEASELESS_EDGE, MoveId.VICTORY_DANCE ], + [Species.TERRAKION]: [ MoveId.MIGHTY_CLEAVE, MoveId.HEADLONG_RUSH, MoveId.KNOCK_OFF, MoveId.VICTORY_DANCE ], + [Species.VIRIZION]: [ MoveId.SAPPY_SEED, MoveId.PSYBLADE, MoveId.STONE_AXE, MoveId.VICTORY_DANCE ], + [Species.TORNADUS]: [ MoveId.SANDSEAR_STORM, MoveId.PARTING_SHOT, MoveId.SPLISHY_SPLASH, MoveId.OBLIVION_WING ], + [Species.THUNDURUS]: [ MoveId.SANDSEAR_STORM, MoveId.HURRICANE, MoveId.FROST_BREATH, MoveId.ELECTRO_SHOT ], + [Species.RESHIRAM]: [ MoveId.ENERGY_BALL, MoveId.TAKE_HEART, MoveId.FICKLE_BEAM, MoveId.ERUPTION ], + [Species.ZEKROM]: [ MoveId.TRIPLE_AXEL, MoveId.THUNDEROUS_KICK, MoveId.DRAGON_HAMMER, MoveId.DRAGON_ENERGY ], + [Species.LANDORUS]: [ MoveId.STONE_AXE, MoveId.FLOATY_FALL, MoveId.ROOST, MoveId.BLEAKWIND_STORM ], + [Species.KYUREM]: [ MoveId.DRAGON_DARTS, MoveId.GLACIAL_LANCE, MoveId.NO_RETREAT, MoveId.DRAGON_ENERGY ], + [Species.KELDEO]: [ MoveId.BOUNCY_BUBBLE, MoveId.THUNDERBOLT, MoveId.ICE_BEAM, MoveId.STEAM_ERUPTION ], + [Species.MELOETTA]: [ MoveId.BODY_SLAM, MoveId.PSYCHIC_NOISE, MoveId.TRIPLE_ARROWS, MoveId.TORCH_SONG ], + [Species.GENESECT]: [ MoveId.EXTREME_SPEED, MoveId.SHIFT_GEAR, MoveId.BEHEMOTH_BASH, MoveId.TACHYON_CUTTER ], - [Species.CHESPIN]: [ Moves.COMBAT_TORQUE, Moves.SYNTHESIS, Moves.CEASELESS_EDGE, Moves.SAPPY_SEED ], - [Species.FENNEKIN]: [ Moves.TWIN_BEAM, Moves.FIERY_DANCE, Moves.THUNDERBOLT, Moves.SPARKLY_SWIRL ], - [Species.FROAKIE]: [ Moves.MOONBLAST, Moves.SHELL_SIDE_ARM, Moves.FIERY_WRATH, Moves.STEAM_ERUPTION ], - [Species.BUNNELBY]: [ Moves.DRAIN_PUNCH, Moves.TIDY_UP, Moves.LANDS_WRATH, Moves.EXTREME_SPEED ], - [Species.FLETCHLING]: [ Moves.DRILL_RUN, Moves.BURNING_BULWARK, Moves.HEAD_SMASH, Moves.VOLT_TACKLE ], - [Species.SCATTERBUG]: [ Moves.FOCUS_BLAST, Moves.AFTER_YOU, Moves.DECORATE, Moves.BLIZZARD ], - [Species.LITLEO]: [ Moves.EARTH_POWER, Moves.NASTY_PLOT, Moves.BURNING_BULWARK, Moves.BLUE_FLARE ], - [Species.FLABEBE]: [ Moves.GLITZY_GLOW, Moves.MYSTICAL_FIRE, Moves.TAKE_HEART, Moves.SEED_FLARE ], - [Species.SKIDDO]: [ Moves.HIGH_HORSEPOWER, Moves.GRASSY_GLIDE, Moves.STONE_AXE, Moves.SAPPY_SEED ], - [Species.PANCHAM]: [ Moves.DRAIN_PUNCH, Moves.SUCKER_PUNCH, Moves.METEOR_MASH, Moves.WICKED_BLOW ], - [Species.FURFROU]: [ Moves.TIDY_UP, Moves.SLACK_OFF, Moves.COMBAT_TORQUE, Moves.MULTI_ATTACK ], - [Species.ESPURR]: [ Moves.LUSTER_PURGE, Moves.MOONBLAST, Moves.AURA_SPHERE, Moves.DARK_VOID ], - [Species.HONEDGE]: [ Moves.TACHYON_CUTTER, Moves.SHADOW_BONE, Moves.BITTER_BLADE, Moves.BEHEMOTH_BLADE ], - [Species.SPRITZEE]: [ Moves.SPEED_SWAP, Moves.REVIVAL_BLESSING, Moves.ROOST, Moves.TORCH_SONG ], - [Species.SWIRLIX]: [ Moves.BELLY_DRUM, Moves.HEADLONG_RUSH, Moves.MAGICAL_TORQUE, Moves.REVIVAL_BLESSING ], - [Species.INKAY]: [ Moves.POWER_TRIP, Moves.SPIN_OUT, Moves.RECOVER, Moves.PSYCHO_BOOST ], - [Species.BINACLE]: [ Moves.TRIPLE_AXEL, Moves.CRABHAMMER, Moves.DIRE_CLAW, Moves.MIGHTY_CLEAVE ], - [Species.SKRELP]: [ Moves.STRENGTH_SAP, Moves.TRICK_ROOM, Moves.CALM_MIND, Moves.CORE_ENFORCER ], - [Species.CLAUNCHER]: [ Moves.SHELL_SMASH, Moves.ARMOR_CANNON, Moves.ENERGY_BALL, Moves.ORIGIN_PULSE ], - [Species.HELIOPTILE]: [ Moves.WEATHER_BALL, Moves.HYDRO_STEAM, Moves.EARTH_POWER, Moves.BOOMBURST ], - [Species.TYRUNT]: [ Moves.DRAGON_HAMMER, Moves.FLARE_BLITZ, Moves.VOLT_TACKLE, Moves.SHIFT_GEAR ], - [Species.AMAURA]: [ Moves.RECOVER, Moves.TERA_STARSTORM, Moves.POWER_GEM, Moves.GEOMANCY ], - [Species.HAWLUCHA]: [ Moves.TRIPLE_AXEL, Moves.HIGH_HORSEPOWER, Moves.FLOATY_FALL, Moves.WICKED_BLOW ], - [Species.DEDENNE]: [ Moves.BOOMBURST, Moves.FAKE_OUT, Moves.NASTY_PLOT, Moves.REVIVAL_BLESSING ], - [Species.CARBINK]: [ Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SPARKLY_SWIRL, Moves.DIAMOND_STORM ], - [Species.GOOMY]: [ Moves.DRAGON_HAMMER, Moves.RECOVER, Moves.CALM_MIND, Moves.MAKE_IT_RAIN ], - [Species.KLEFKI]: [ Moves.HEAL_BELL, Moves.ENCORE, Moves.INSTRUCT, Moves.TOPSY_TURVY ], - [Species.PHANTUMP]: [ Moves.RAGE_FIST, Moves.SLEEP_POWDER, Moves.BULK_UP, Moves.SAPPY_SEED ], - [Species.PUMPKABOO]: [ Moves.SPIRIT_SHACKLE, Moves.FIRE_LASH, Moves.DIRE_CLAW, Moves.SAPPY_SEED ], - [Species.BERGMITE]: [ Moves.STONE_AXE, Moves.METAL_BURST, Moves.BODY_PRESS, Moves.GLACIAL_LANCE ], - [Species.NOIBAT]: [ Moves.AEROBLAST, Moves.OVERDRIVE, Moves.NASTY_PLOT, Moves.CLANGING_SCALES ], - [Species.XERNEAS]: [ Moves.EARTH_POWER, Moves.SPRINGTIDE_STORM, Moves.STORED_POWER, Moves.STRENGTH_SAP ], - [Species.YVELTAL]: [ Moves.SLUDGE_WAVE, Moves.POWER_TRIP, Moves.FIERY_WRATH, Moves.CLANGOROUS_SOUL ], - [Species.ZYGARDE]: [ Moves.DRAGON_DARTS, Moves.V_CREATE, Moves.CLANGOROUS_SOUL, Moves.HEAL_ORDER ], - [Species.DIANCIE]: [ Moves.MAGICAL_TORQUE, Moves.FIERY_DANCE, Moves.SHORE_UP, Moves.GEOMANCY ], - [Species.HOOPA]: [ Moves.PHOTON_GEYSER, Moves.SECRET_SWORD, Moves.FIERY_WRATH, Moves.SHELL_SMASH ], - [Species.VOLCANION]: [ Moves.HYDRO_STEAM, Moves.CALM_MIND, Moves.SEARING_SHOT, Moves.THUNDERCLAP ], - [Species.ETERNAL_FLOETTE]: [ Moves.MIND_BLOWN, Moves.CHLOROBLAST, Moves.LUSTER_PURGE, Moves.QUIVER_DANCE ], + [Species.CHESPIN]: [ MoveId.COMBAT_TORQUE, MoveId.SYNTHESIS, MoveId.CEASELESS_EDGE, MoveId.SAPPY_SEED ], + [Species.FENNEKIN]: [ MoveId.TWIN_BEAM, MoveId.FIERY_DANCE, MoveId.THUNDERBOLT, MoveId.SPARKLY_SWIRL ], + [Species.FROAKIE]: [ MoveId.MOONBLAST, MoveId.SHELL_SIDE_ARM, MoveId.FIERY_WRATH, MoveId.STEAM_ERUPTION ], + [Species.BUNNELBY]: [ MoveId.DRAIN_PUNCH, MoveId.TIDY_UP, MoveId.LANDS_WRATH, MoveId.EXTREME_SPEED ], + [Species.FLETCHLING]: [ MoveId.DRILL_RUN, MoveId.BURNING_BULWARK, MoveId.HEAD_SMASH, MoveId.VOLT_TACKLE ], + [Species.SCATTERBUG]: [ MoveId.FOCUS_BLAST, MoveId.AFTER_YOU, MoveId.DECORATE, MoveId.BLIZZARD ], + [Species.LITLEO]: [ MoveId.EARTH_POWER, MoveId.NASTY_PLOT, MoveId.BURNING_BULWARK, MoveId.BLUE_FLARE ], + [Species.FLABEBE]: [ MoveId.GLITZY_GLOW, MoveId.MYSTICAL_FIRE, MoveId.TAKE_HEART, MoveId.SEED_FLARE ], + [Species.SKIDDO]: [ MoveId.HIGH_HORSEPOWER, MoveId.GRASSY_GLIDE, MoveId.STONE_AXE, MoveId.SAPPY_SEED ], + [Species.PANCHAM]: [ MoveId.DRAIN_PUNCH, MoveId.SUCKER_PUNCH, MoveId.METEOR_MASH, MoveId.WICKED_BLOW ], + [Species.FURFROU]: [ MoveId.TIDY_UP, MoveId.SLACK_OFF, MoveId.COMBAT_TORQUE, MoveId.MULTI_ATTACK ], + [Species.ESPURR]: [ MoveId.LUSTER_PURGE, MoveId.MOONBLAST, MoveId.AURA_SPHERE, MoveId.DARK_VOID ], + [Species.HONEDGE]: [ MoveId.TACHYON_CUTTER, MoveId.SHADOW_BONE, MoveId.BITTER_BLADE, MoveId.BEHEMOTH_BLADE ], + [Species.SPRITZEE]: [ MoveId.SPEED_SWAP, MoveId.REVIVAL_BLESSING, MoveId.ROOST, MoveId.TORCH_SONG ], + [Species.SWIRLIX]: [ MoveId.BELLY_DRUM, MoveId.HEADLONG_RUSH, MoveId.MAGICAL_TORQUE, MoveId.REVIVAL_BLESSING ], + [Species.INKAY]: [ MoveId.POWER_TRIP, MoveId.SPIN_OUT, MoveId.RECOVER, MoveId.PSYCHO_BOOST ], + [Species.BINACLE]: [ MoveId.TRIPLE_AXEL, MoveId.CRABHAMMER, MoveId.DIRE_CLAW, MoveId.MIGHTY_CLEAVE ], + [Species.SKRELP]: [ MoveId.STRENGTH_SAP, MoveId.TRICK_ROOM, MoveId.CALM_MIND, MoveId.CORE_ENFORCER ], + [Species.CLAUNCHER]: [ MoveId.SHELL_SMASH, MoveId.ARMOR_CANNON, MoveId.ENERGY_BALL, MoveId.ORIGIN_PULSE ], + [Species.HELIOPTILE]: [ MoveId.WEATHER_BALL, MoveId.HYDRO_STEAM, MoveId.EARTH_POWER, MoveId.BOOMBURST ], + [Species.TYRUNT]: [ MoveId.DRAGON_HAMMER, MoveId.FLARE_BLITZ, MoveId.VOLT_TACKLE, MoveId.SHIFT_GEAR ], + [Species.AMAURA]: [ MoveId.RECOVER, MoveId.TERA_STARSTORM, MoveId.POWER_GEM, MoveId.GEOMANCY ], + [Species.HAWLUCHA]: [ MoveId.TRIPLE_AXEL, MoveId.HIGH_HORSEPOWER, MoveId.FLOATY_FALL, MoveId.WICKED_BLOW ], + [Species.DEDENNE]: [ MoveId.BOOMBURST, MoveId.FAKE_OUT, MoveId.NASTY_PLOT, MoveId.REVIVAL_BLESSING ], + [Species.CARBINK]: [ MoveId.BODY_PRESS, MoveId.SHORE_UP, MoveId.SPARKLY_SWIRL, MoveId.DIAMOND_STORM ], + [Species.GOOMY]: [ MoveId.DRAGON_HAMMER, MoveId.RECOVER, MoveId.CALM_MIND, MoveId.MAKE_IT_RAIN ], + [Species.KLEFKI]: [ MoveId.HEAL_BELL, MoveId.ENCORE, MoveId.INSTRUCT, MoveId.TOPSY_TURVY ], + [Species.PHANTUMP]: [ MoveId.RAGE_FIST, MoveId.SLEEP_POWDER, MoveId.BULK_UP, MoveId.SAPPY_SEED ], + [Species.PUMPKABOO]: [ MoveId.SPIRIT_SHACKLE, MoveId.FIRE_LASH, MoveId.DIRE_CLAW, MoveId.SAPPY_SEED ], + [Species.BERGMITE]: [ MoveId.STONE_AXE, MoveId.METAL_BURST, MoveId.BODY_PRESS, MoveId.GLACIAL_LANCE ], + [Species.NOIBAT]: [ MoveId.AEROBLAST, MoveId.OVERDRIVE, MoveId.NASTY_PLOT, MoveId.CLANGING_SCALES ], + [Species.XERNEAS]: [ MoveId.EARTH_POWER, MoveId.SPRINGTIDE_STORM, MoveId.STORED_POWER, MoveId.STRENGTH_SAP ], + [Species.YVELTAL]: [ MoveId.SLUDGE_WAVE, MoveId.POWER_TRIP, MoveId.FIERY_WRATH, MoveId.CLANGOROUS_SOUL ], + [Species.ZYGARDE]: [ MoveId.DRAGON_DARTS, MoveId.V_CREATE, MoveId.CLANGOROUS_SOUL, MoveId.HEAL_ORDER ], + [Species.DIANCIE]: [ MoveId.MAGICAL_TORQUE, MoveId.FIERY_DANCE, MoveId.SHORE_UP, MoveId.GEOMANCY ], + [Species.HOOPA]: [ MoveId.PHOTON_GEYSER, MoveId.SECRET_SWORD, MoveId.FIERY_WRATH, MoveId.SHELL_SMASH ], + [Species.VOLCANION]: [ MoveId.HYDRO_STEAM, MoveId.CALM_MIND, MoveId.SEARING_SHOT, MoveId.THUNDERCLAP ], + [Species.ETERNAL_FLOETTE]: [ MoveId.MIND_BLOWN, MoveId.CHLOROBLAST, MoveId.LUSTER_PURGE, MoveId.QUIVER_DANCE ], - [Species.ROWLET]: [ Moves.THOUSAND_ARROWS, Moves.SHADOW_BONE, Moves.FIRST_IMPRESSION, Moves.VICTORY_DANCE ], - [Species.LITTEN]: [ Moves.SUCKER_PUNCH, Moves.PARTING_SHOT, Moves.SLACK_OFF, Moves.SACRED_FIRE ], - [Species.POPPLIO]: [ Moves.PSYCHIC_NOISE, Moves.MOONLIGHT, Moves.OVERDRIVE, Moves.TORCH_SONG ], - [Species.PIKIPEK]: [ Moves.DUAL_WINGBEAT, Moves.BONE_RUSH, Moves.BURNING_BULWARK, Moves.POPULATION_BOMB ], - [Species.YUNGOOS]: [ Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.TIDY_UP, Moves.MULTI_ATTACK ], - [Species.GRUBBIN]: [ Moves.ICE_BEAM, Moves.EARTH_POWER, Moves.CALM_MIND, Moves.THUNDERCLAP ], - [Species.CRABRAWLER]: [ Moves.JET_PUNCH, Moves.SHORE_UP, Moves.MACH_PUNCH, Moves.SURGING_STRIKES ], - [Species.ORICORIO]: [ Moves.QUIVER_DANCE, Moves.FIERY_DANCE, Moves.THUNDERCLAP, Moves.OBLIVION_WING ], - [Species.CUTIEFLY]: [ Moves.STICKY_WEB, Moves.SLEEP_POWDER, Moves.HEAT_WAVE, Moves.SPARKLY_SWIRL ], - [Species.ROCKRUFF]: [ Moves.HIGH_HORSEPOWER, Moves.TIDY_UP, Moves.ICE_SPINNER, Moves.MIGHTY_CLEAVE ], - [Species.WISHIWASHI]: [ Moves.HEAL_ORDER, Moves.FREEZE_DRY, Moves.WATER_SHURIKEN, Moves.TAIL_GLOW ], - [Species.MAREANIE]: [ Moves.CEASELESS_EDGE, Moves.SIZZLY_SLIDE, Moves.BODY_PRESS, Moves.LEECH_SEED ], - [Species.MUDBRAY]: [ Moves.BODY_PRESS, Moves.YAWN, Moves.SHORE_UP, Moves.THOUSAND_WAVES ], - [Species.DEWPIDER]: [ Moves.AQUA_STEP, Moves.SILK_TRAP, Moves.SWORDS_DANCE, Moves.JET_PUNCH ], - [Species.FOMANTIS]: [ Moves.SUPERPOWER, Moves.HEADLONG_RUSH, Moves.ICE_HAMMER, Moves.BITTER_BLADE ], - [Species.MORELULL]: [ Moves.CALM_MIND, Moves.SAPPY_SEED, Moves.DRAINING_KISS, Moves.MATCHA_GOTCHA ], - [Species.SALANDIT]: [ Moves.SCALD, Moves.MALIGNANT_CHAIN, Moves.CORE_ENFORCER, Moves.ERUPTION ], - [Species.STUFFUL]: [ Moves.DRAIN_PUNCH, Moves.METEOR_MASH, Moves.TRIPLE_AXEL, Moves.RAGE_FIST ], - [Species.BOUNSWEET]: [ Moves.TRIPLE_AXEL, Moves.AQUA_STEP, Moves.THUNDEROUS_KICK, Moves.SAPPY_SEED ], - [Species.COMFEY]: [ Moves.REVIVAL_BLESSING, Moves.TAKE_HEART, Moves.STRENGTH_SAP, Moves.MATCHA_GOTCHA ], - [Species.ORANGURU]: [ Moves.JUNGLE_HEALING, Moves.YAWN, Moves.FOLLOW_ME, Moves.LUMINA_CRASH ], - [Species.PASSIMIAN]: [ Moves.PYRO_BALL, Moves.SUCKER_PUNCH, Moves.ZING_ZAP, Moves.VICTORY_DANCE ], - [Species.WIMPOD]: [ Moves.TRIPLE_AXEL, Moves.OBSTRUCT, Moves.JET_PUNCH, Moves.SURGING_STRIKES ], - [Species.SANDYGAST]: [ Moves.BITTER_MALICE, Moves.SPLISHY_SPLASH, Moves.TAKE_HEART, Moves.SALT_CURE ], - [Species.PYUKUMUKU]: [ Moves.COMEUPPANCE, Moves.BANEFUL_BUNKER, Moves.TOXIC_SPIKES, Moves.SALT_CURE ], - [Species.TYPE_NULL]: [ Moves.DIRE_CLAW, Moves.RECOVER, Moves.COMBAT_TORQUE, Moves.NO_RETREAT ], - [Species.MINIOR]: [ Moves.EARTH_POWER, Moves.FLOATY_FALL, Moves.TRI_ATTACK, Moves.DIAMOND_STORM ], - [Species.KOMALA]: [ Moves.SLACK_OFF, Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.COLLISION_COURSE ], - [Species.TURTONATOR]: [ Moves.BURNING_BULWARK, Moves.MORNING_SUN, Moves.BODY_PRESS, Moves.CORE_ENFORCER ], - [Species.TOGEDEMARU]: [ Moves.FAKE_OUT, Moves.METAL_BURST, Moves.METEOR_MASH, Moves.AURA_WHEEL ], - [Species.MIMIKYU]: [ Moves.SPIRIT_BREAK, Moves.TIDY_UP, Moves.FIRE_LASH, Moves.SPECTRAL_THIEF ], - [Species.BRUXISH]: [ Moves.PLAY_ROUGH, Moves.FIRE_FANG, Moves.DRAGON_DANCE, Moves.SURGING_STRIKES ], - [Species.DRAMPA]: [ Moves.SLACK_OFF, Moves.TRICK_ROOM, Moves.CORE_ENFORCER, Moves.BOOMBURST ], - [Species.DHELMISE]: [ Moves.SHADOW_BONE, Moves.IVY_CUDGEL, Moves.TRIPLE_DIVE, Moves.STRENGTH_SAP ], - [Species.JANGMO_O]: [ Moves.BODY_PRESS, Moves.SHELL_SIDE_ARM, Moves.SECRET_SWORD, Moves.GLAIVE_RUSH ], - [Species.TAPU_KOKO]: [ Moves.MAGICAL_TORQUE, Moves.TRIPLE_AXEL, Moves.SWORDS_DANCE, Moves.BOLT_STRIKE ], - [Species.TAPU_LELE]: [ Moves.MOONLIGHT, Moves.NASTY_PLOT, Moves.HEAT_WAVE, Moves.EXPANDING_FORCE ], - [Species.TAPU_BULU]: [ Moves.SAPPY_SEED, Moves.LANDS_WRATH, Moves.MAGICAL_TORQUE, Moves.VICTORY_DANCE ], - [Species.TAPU_FINI]: [ Moves.SPRINGTIDE_STORM, Moves.EARTH_POWER, Moves.RECOVER, Moves.QUIVER_DANCE ], - [Species.COSMOG]: [ Moves.PHOTON_GEYSER, Moves.PRECIPICE_BLADES, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE ], - [Species.NIHILEGO]: [ Moves.STRENGTH_SAP, Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.QUIVER_DANCE ], - [Species.BUZZWOLE]: [ Moves.FIRST_IMPRESSION, Moves.COMBAT_TORQUE, Moves.ROCK_BLAST, Moves.DOUBLE_IRON_BASH ], - [Species.PHEROMOSA]: [ Moves.SECRET_SWORD, Moves.MAKE_IT_RAIN, Moves.ATTACK_ORDER, Moves.DIAMOND_STORM ], - [Species.XURKITREE]: [ Moves.FLAMETHROWER, Moves.GIGA_DRAIN, Moves.TAIL_GLOW, Moves.THUNDERCLAP ], - [Species.CELESTEELA]: [ Moves.RECOVER, Moves.BUZZY_BUZZ, Moves.EARTH_POWER, Moves.OBLIVION_WING ], - [Species.KARTANA]: [ Moves.MIGHTY_CLEAVE, Moves.DUAL_CHOP, Moves.BITTER_BLADE, Moves.BEHEMOTH_BLADE ], - [Species.GUZZLORD]: [ Moves.SUCKER_PUNCH, Moves.COMEUPPANCE, Moves.SLACK_OFF, Moves.SHED_TAIL ], - [Species.NECROZMA]: [ Moves.DYNAMAX_CANNON, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE, Moves.CLANGOROUS_SOUL ], - [Species.MAGEARNA]: [ Moves.STRENGTH_SAP, Moves.EARTH_POWER, Moves.MOONBLAST, Moves.MAKE_IT_RAIN ], - [Species.MARSHADOW]: [ Moves.POWER_UP_PUNCH, Moves.BONEMERANG, Moves.METEOR_MASH, Moves.TRIPLE_AXEL ], - [Species.POIPOLE]: [ Moves.MALIGNANT_CHAIN, Moves.ICE_BEAM, Moves.ARMOR_CANNON, Moves.CLANGING_SCALES ], - [Species.STAKATAKA]: [ Moves.HEAVY_SLAM, Moves.SHORE_UP, Moves.CURSE, Moves.SALT_CURE ], - [Species.BLACEPHALON]: [ Moves.STEEL_BEAM, Moves.MOONBLAST, Moves.CHLOROBLAST, Moves.MOONGEIST_BEAM ], - [Species.ZERAORA]: [ Moves.SWORDS_DANCE, Moves.U_TURN, Moves.COLLISION_COURSE, Moves.TRIPLE_AXEL ], - [Species.MELTAN]: [ Moves.BULLET_PUNCH, Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.PLASMA_FISTS ], - [Species.ALOLA_RATTATA]: [ Moves.FALSE_SURRENDER, Moves.PSYCHIC_FANGS, Moves.COIL, Moves.EXTREME_SPEED ], - [Species.ALOLA_SANDSHREW]: [ Moves.SPIKY_SHIELD, Moves.LIQUIDATION, Moves.SHIFT_GEAR, Moves.GLACIAL_LANCE ], - [Species.ALOLA_VULPIX]: [ Moves.MOONBLAST, Moves.GLARE, Moves.MYSTICAL_FIRE, Moves.REVIVAL_BLESSING ], - [Species.ALOLA_DIGLETT]: [ Moves.THOUSAND_WAVES, Moves.SWORDS_DANCE, Moves.TRIPLE_DIVE, Moves.PYRO_BALL ], - [Species.ALOLA_MEOWTH]: [ Moves.BADDY_BAD, Moves.BUZZY_BUZZ, Moves.PARTING_SHOT, Moves.MAKE_IT_RAIN ], - [Species.ALOLA_GEODUDE]: [ Moves.THOUSAND_WAVES, Moves.BULK_UP, Moves.STONE_AXE, Moves.EXTREME_SPEED ], - [Species.ALOLA_GRIMER]: [ Moves.SUCKER_PUNCH, Moves.BARB_BARRAGE, Moves.RECOVER, Moves.SURGING_STRIKES ], + [Species.ROWLET]: [ MoveId.THOUSAND_ARROWS, MoveId.SHADOW_BONE, MoveId.FIRST_IMPRESSION, MoveId.VICTORY_DANCE ], + [Species.LITTEN]: [ MoveId.SUCKER_PUNCH, MoveId.PARTING_SHOT, MoveId.SLACK_OFF, MoveId.SACRED_FIRE ], + [Species.POPPLIO]: [ MoveId.PSYCHIC_NOISE, MoveId.MOONLIGHT, MoveId.OVERDRIVE, MoveId.TORCH_SONG ], + [Species.PIKIPEK]: [ MoveId.DUAL_WINGBEAT, MoveId.BONE_RUSH, MoveId.BURNING_BULWARK, MoveId.POPULATION_BOMB ], + [Species.YUNGOOS]: [ MoveId.EXTREME_SPEED, MoveId.KNOCK_OFF, MoveId.TIDY_UP, MoveId.MULTI_ATTACK ], + [Species.GRUBBIN]: [ MoveId.ICE_BEAM, MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.THUNDERCLAP ], + [Species.CRABRAWLER]: [ MoveId.JET_PUNCH, MoveId.SHORE_UP, MoveId.MACH_PUNCH, MoveId.SURGING_STRIKES ], + [Species.ORICORIO]: [ MoveId.QUIVER_DANCE, MoveId.FIERY_DANCE, MoveId.THUNDERCLAP, MoveId.OBLIVION_WING ], + [Species.CUTIEFLY]: [ MoveId.STICKY_WEB, MoveId.SLEEP_POWDER, MoveId.HEAT_WAVE, MoveId.SPARKLY_SWIRL ], + [Species.ROCKRUFF]: [ MoveId.HIGH_HORSEPOWER, MoveId.TIDY_UP, MoveId.ICE_SPINNER, MoveId.MIGHTY_CLEAVE ], + [Species.WISHIWASHI]: [ MoveId.HEAL_ORDER, MoveId.FREEZE_DRY, MoveId.WATER_SHURIKEN, MoveId.TAIL_GLOW ], + [Species.MAREANIE]: [ MoveId.CEASELESS_EDGE, MoveId.SIZZLY_SLIDE, MoveId.BODY_PRESS, MoveId.LEECH_SEED ], + [Species.MUDBRAY]: [ MoveId.BODY_PRESS, MoveId.YAWN, MoveId.SHORE_UP, MoveId.THOUSAND_WAVES ], + [Species.DEWPIDER]: [ MoveId.AQUA_STEP, MoveId.SILK_TRAP, MoveId.SWORDS_DANCE, MoveId.JET_PUNCH ], + [Species.FOMANTIS]: [ MoveId.SUPERPOWER, MoveId.HEADLONG_RUSH, MoveId.ICE_HAMMER, MoveId.BITTER_BLADE ], + [Species.MORELULL]: [ MoveId.CALM_MIND, MoveId.SAPPY_SEED, MoveId.DRAINING_KISS, MoveId.MATCHA_GOTCHA ], + [Species.SALANDIT]: [ MoveId.SCALD, MoveId.MALIGNANT_CHAIN, MoveId.CORE_ENFORCER, MoveId.ERUPTION ], + [Species.STUFFUL]: [ MoveId.DRAIN_PUNCH, MoveId.METEOR_MASH, MoveId.TRIPLE_AXEL, MoveId.RAGE_FIST ], + [Species.BOUNSWEET]: [ MoveId.TRIPLE_AXEL, MoveId.AQUA_STEP, MoveId.THUNDEROUS_KICK, MoveId.SAPPY_SEED ], + [Species.COMFEY]: [ MoveId.REVIVAL_BLESSING, MoveId.TAKE_HEART, MoveId.STRENGTH_SAP, MoveId.MATCHA_GOTCHA ], + [Species.ORANGURU]: [ MoveId.JUNGLE_HEALING, MoveId.YAWN, MoveId.FOLLOW_ME, MoveId.LUMINA_CRASH ], + [Species.PASSIMIAN]: [ MoveId.PYRO_BALL, MoveId.SUCKER_PUNCH, MoveId.ZING_ZAP, MoveId.VICTORY_DANCE ], + [Species.WIMPOD]: [ MoveId.TRIPLE_AXEL, MoveId.OBSTRUCT, MoveId.JET_PUNCH, MoveId.SURGING_STRIKES ], + [Species.SANDYGAST]: [ MoveId.BITTER_MALICE, MoveId.SPLISHY_SPLASH, MoveId.TAKE_HEART, MoveId.SALT_CURE ], + [Species.PYUKUMUKU]: [ MoveId.COMEUPPANCE, MoveId.BANEFUL_BUNKER, MoveId.TOXIC_SPIKES, MoveId.SALT_CURE ], + [Species.TYPE_NULL]: [ MoveId.DIRE_CLAW, MoveId.RECOVER, MoveId.COMBAT_TORQUE, MoveId.NO_RETREAT ], + [Species.MINIOR]: [ MoveId.EARTH_POWER, MoveId.FLOATY_FALL, MoveId.TRI_ATTACK, MoveId.DIAMOND_STORM ], + [Species.KOMALA]: [ MoveId.SLACK_OFF, MoveId.EXTREME_SPEED, MoveId.KNOCK_OFF, MoveId.COLLISION_COURSE ], + [Species.TURTONATOR]: [ MoveId.BURNING_BULWARK, MoveId.MORNING_SUN, MoveId.BODY_PRESS, MoveId.CORE_ENFORCER ], + [Species.TOGEDEMARU]: [ MoveId.FAKE_OUT, MoveId.METAL_BURST, MoveId.METEOR_MASH, MoveId.AURA_WHEEL ], + [Species.MIMIKYU]: [ MoveId.SPIRIT_BREAK, MoveId.TIDY_UP, MoveId.FIRE_LASH, MoveId.SPECTRAL_THIEF ], + [Species.BRUXISH]: [ MoveId.PLAY_ROUGH, MoveId.FIRE_FANG, MoveId.DRAGON_DANCE, MoveId.SURGING_STRIKES ], + [Species.DRAMPA]: [ MoveId.SLACK_OFF, MoveId.TRICK_ROOM, MoveId.CORE_ENFORCER, MoveId.BOOMBURST ], + [Species.DHELMISE]: [ MoveId.SHADOW_BONE, MoveId.IVY_CUDGEL, MoveId.TRIPLE_DIVE, MoveId.STRENGTH_SAP ], + [Species.JANGMO_O]: [ MoveId.BODY_PRESS, MoveId.SHELL_SIDE_ARM, MoveId.SECRET_SWORD, MoveId.GLAIVE_RUSH ], + [Species.TAPU_KOKO]: [ MoveId.MAGICAL_TORQUE, MoveId.TRIPLE_AXEL, MoveId.SWORDS_DANCE, MoveId.BOLT_STRIKE ], + [Species.TAPU_LELE]: [ MoveId.MOONLIGHT, MoveId.NASTY_PLOT, MoveId.HEAT_WAVE, MoveId.EXPANDING_FORCE ], + [Species.TAPU_BULU]: [ MoveId.SAPPY_SEED, MoveId.LANDS_WRATH, MoveId.MAGICAL_TORQUE, MoveId.VICTORY_DANCE ], + [Species.TAPU_FINI]: [ MoveId.SPRINGTIDE_STORM, MoveId.EARTH_POWER, MoveId.RECOVER, MoveId.QUIVER_DANCE ], + [Species.COSMOG]: [ MoveId.PHOTON_GEYSER, MoveId.PRECIPICE_BLADES, MoveId.SACRED_FIRE, MoveId.ASTRAL_BARRAGE ], + [Species.NIHILEGO]: [ MoveId.STRENGTH_SAP, MoveId.MALIGNANT_CHAIN, MoveId.EARTH_POWER, MoveId.QUIVER_DANCE ], + [Species.BUZZWOLE]: [ MoveId.FIRST_IMPRESSION, MoveId.COMBAT_TORQUE, MoveId.ROCK_BLAST, MoveId.DOUBLE_IRON_BASH ], + [Species.PHEROMOSA]: [ MoveId.SECRET_SWORD, MoveId.MAKE_IT_RAIN, MoveId.ATTACK_ORDER, MoveId.DIAMOND_STORM ], + [Species.XURKITREE]: [ MoveId.FLAMETHROWER, MoveId.GIGA_DRAIN, MoveId.TAIL_GLOW, MoveId.THUNDERCLAP ], + [Species.CELESTEELA]: [ MoveId.RECOVER, MoveId.BUZZY_BUZZ, MoveId.EARTH_POWER, MoveId.OBLIVION_WING ], + [Species.KARTANA]: [ MoveId.MIGHTY_CLEAVE, MoveId.DUAL_CHOP, MoveId.BITTER_BLADE, MoveId.BEHEMOTH_BLADE ], + [Species.GUZZLORD]: [ MoveId.SUCKER_PUNCH, MoveId.COMEUPPANCE, MoveId.SLACK_OFF, MoveId.SHED_TAIL ], + [Species.NECROZMA]: [ MoveId.DYNAMAX_CANNON, MoveId.SACRED_FIRE, MoveId.ASTRAL_BARRAGE, MoveId.CLANGOROUS_SOUL ], + [Species.MAGEARNA]: [ MoveId.STRENGTH_SAP, MoveId.EARTH_POWER, MoveId.MOONBLAST, MoveId.MAKE_IT_RAIN ], + [Species.MARSHADOW]: [ MoveId.POWER_UP_PUNCH, MoveId.BONEMERANG, MoveId.METEOR_MASH, MoveId.TRIPLE_AXEL ], + [Species.POIPOLE]: [ MoveId.MALIGNANT_CHAIN, MoveId.ICE_BEAM, MoveId.ARMOR_CANNON, MoveId.CLANGING_SCALES ], + [Species.STAKATAKA]: [ MoveId.HEAVY_SLAM, MoveId.SHORE_UP, MoveId.CURSE, MoveId.SALT_CURE ], + [Species.BLACEPHALON]: [ MoveId.STEEL_BEAM, MoveId.MOONBLAST, MoveId.CHLOROBLAST, MoveId.MOONGEIST_BEAM ], + [Species.ZERAORA]: [ MoveId.SWORDS_DANCE, MoveId.U_TURN, MoveId.COLLISION_COURSE, MoveId.TRIPLE_AXEL ], + [Species.MELTAN]: [ MoveId.BULLET_PUNCH, MoveId.DRAIN_PUNCH, MoveId.BULK_UP, MoveId.PLASMA_FISTS ], + [Species.ALOLA_RATTATA]: [ MoveId.FALSE_SURRENDER, MoveId.PSYCHIC_FANGS, MoveId.COIL, MoveId.EXTREME_SPEED ], + [Species.ALOLA_SANDSHREW]: [ MoveId.SPIKY_SHIELD, MoveId.LIQUIDATION, MoveId.SHIFT_GEAR, MoveId.GLACIAL_LANCE ], + [Species.ALOLA_VULPIX]: [ MoveId.MOONBLAST, MoveId.GLARE, MoveId.MYSTICAL_FIRE, MoveId.REVIVAL_BLESSING ], + [Species.ALOLA_DIGLETT]: [ MoveId.THOUSAND_WAVES, MoveId.SWORDS_DANCE, MoveId.TRIPLE_DIVE, MoveId.PYRO_BALL ], + [Species.ALOLA_MEOWTH]: [ MoveId.BADDY_BAD, MoveId.BUZZY_BUZZ, MoveId.PARTING_SHOT, MoveId.MAKE_IT_RAIN ], + [Species.ALOLA_GEODUDE]: [ MoveId.THOUSAND_WAVES, MoveId.BULK_UP, MoveId.STONE_AXE, MoveId.EXTREME_SPEED ], + [Species.ALOLA_GRIMER]: [ MoveId.SUCKER_PUNCH, MoveId.BARB_BARRAGE, MoveId.RECOVER, MoveId.SURGING_STRIKES ], - [Species.GROOKEY]: [ Moves.ROCK_SLIDE, Moves.PLAY_ROUGH, Moves.GRASSY_GLIDE, Moves.CLANGOROUS_SOUL ], - [Species.SCORBUNNY]: [ Moves.EXTREME_SPEED, Moves.HIGH_JUMP_KICK, Moves.TRIPLE_AXEL, Moves.BOLT_STRIKE ], - [Species.SOBBLE]: [ Moves.AEROBLAST, Moves.FROST_BREATH, Moves.ENERGY_BALL, Moves.NASTY_PLOT ], - [Species.SKWOVET]: [ Moves.SUCKER_PUNCH, Moves.SLACK_OFF, Moves.COIL, Moves.POPULATION_BOMB ], - [Species.ROOKIDEE]: [ Moves.ROOST, Moves.BODY_PRESS, Moves.KINGS_SHIELD, Moves.BEHEMOTH_BASH ], - [Species.BLIPBUG]: [ Moves.HEAL_ORDER, Moves.LUSTER_PURGE, Moves.SLEEP_POWDER, Moves.TAIL_GLOW ], - [Species.NICKIT]: [ Moves.BADDY_BAD, Moves.FLAMETHROWER, Moves.SPARKLY_SWIRL, Moves.MAKE_IT_RAIN ], - [Species.GOSSIFLEUR]: [ Moves.PARTING_SHOT, Moves.STRENGTH_SAP, Moves.SAPPY_SEED, Moves.SEED_FLARE ], - [Species.WOOLOO]: [ Moves.NUZZLE, Moves.MILK_DRINK, Moves.BODY_PRESS, Moves.MULTI_ATTACK ], - [Species.CHEWTLE]: [ Moves.ICE_FANG, Moves.PSYCHIC_FANGS, Moves.SHELL_SMASH, Moves.MIGHTY_CLEAVE ], - [Species.YAMPER]: [ Moves.ICE_FANG, Moves.SWORDS_DANCE, Moves.THUNDER_FANG, Moves.BOLT_STRIKE ], - [Species.ROLYCOLY]: [ Moves.BITTER_BLADE, Moves.BODY_PRESS, Moves.BULK_UP, Moves.DIAMOND_STORM ], - [Species.APPLIN]: [ Moves.CORE_ENFORCER, Moves.COMBAT_TORQUE, Moves.SAPPY_SEED, Moves.MATCHA_GOTCHA ], - [Species.SILICOBRA]: [ Moves.SHORE_UP, Moves.SHED_TAIL, Moves.MOUNTAIN_GALE, Moves.THOUSAND_ARROWS ], - [Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.BOLT_BEAK, Moves.OBLIVION_WING ], - [Species.ARROKUDA]: [ Moves.SUPERCELL_SLAM, Moves.TRIPLE_DIVE, Moves.ICE_SPINNER, Moves.SWORDS_DANCE ], - [Species.TOXEL]: [ Moves.BUZZY_BUZZ, Moves.BUG_BUZZ, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], - [Species.SIZZLIPEDE]: [ Moves.BURNING_BULWARK, Moves.ZING_ZAP, Moves.FIRST_IMPRESSION, Moves.BITTER_BLADE ], - [Species.CLOBBOPUS]: [ Moves.STORM_THROW, Moves.JET_PUNCH, Moves.MACH_PUNCH, Moves.SURGING_STRIKES ], - [Species.SINISTEA]: [ Moves.SPLISHY_SPLASH, Moves.MATCHA_GOTCHA, Moves.DRAINING_KISS, Moves.MOONGEIST_BEAM ], - [Species.HATENNA]: [ Moves.RECOVER, Moves.MOONBLAST, Moves.BUZZY_BUZZ, Moves.TORCH_SONG ], - [Species.IMPIDIMP]: [ Moves.SLACK_OFF, Moves.PARTING_SHOT, Moves.OCTOLOCK, Moves.WICKED_BLOW ], - [Species.MILCERY]: [ Moves.MOONBLAST, Moves.CHILLY_RECEPTION, Moves.EARTH_POWER, Moves.GEOMANCY ], - [Species.FALINKS]: [ Moves.BATON_PASS, Moves.POWER_TRIP, Moves.COMBAT_TORQUE, Moves.HEAL_ORDER ], - [Species.PINCURCHIN]: [ Moves.TRICK_ROOM, Moves.VOLT_SWITCH, Moves.STRENGTH_SAP, Moves.THUNDERCLAP ], - [Species.SNOM]: [ Moves.FROST_BREATH, Moves.HEAL_ORDER, Moves.EARTH_POWER, Moves.SPORE ], - [Species.STONJOURNER]: [ Moves.BODY_PRESS, Moves.HELPING_HAND, Moves.ACCELEROCK, Moves.DIAMOND_STORM ], - [Species.EISCUE]: [ Moves.TRIPLE_AXEL, Moves.AQUA_STEP, Moves.AXE_KICK, Moves.SHELL_SMASH ], - [Species.INDEEDEE]: [ Moves.MATCHA_GOTCHA, Moves.EXPANDING_FORCE, Moves.MOONBLAST, Moves.REVIVAL_BLESSING ], - [Species.MORPEKO]: [ Moves.TRIPLE_AXEL, Moves.OBSTRUCT, Moves.SWORDS_DANCE, Moves.COLLISION_COURSE ], - [Species.CUFANT]: [ Moves.LIQUIDATION, Moves.CURSE, Moves.COMBAT_TORQUE, Moves.GIGATON_HAMMER ], - [Species.DRACOZOLT]: [ Moves.TRIPLE_AXEL, Moves.GUNK_SHOT, Moves.FIRE_LASH, Moves.DRAGON_DANCE ], - [Species.ARCTOZOLT]: [ Moves.MOUNTAIN_GALE, Moves.AQUA_STEP, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], - [Species.DRACOVISH]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.THUNDER_FANG, Moves.DRAGON_DANCE ], - [Species.ARCTOVISH]: [ Moves.ICE_FANG, Moves.THUNDER_FANG, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], - [Species.DURALUDON]: [ Moves.CORE_ENFORCER, Moves.BODY_PRESS, Moves.RECOVER, Moves.TACHYON_CUTTER ], - [Species.DREEPY]: [ Moves.SHADOW_BONE, Moves.POWER_UP_PUNCH, Moves.FIRE_LASH, Moves.DIRE_CLAW ], - [Species.ZACIAN]: [ Moves.MAGICAL_TORQUE, Moves.MIGHTY_CLEAVE, Moves.BITTER_BLADE, Moves.PRECIPICE_BLADES ], - [Species.ZAMAZENTA]: [ Moves.BULK_UP, Moves.BODY_PRESS, Moves.SLACK_OFF, Moves.DIAMOND_STORM ], - [Species.ETERNATUS]: [ Moves.BODY_PRESS, Moves.NASTY_PLOT, Moves.MALIGNANT_CHAIN, Moves.DRAGON_ENERGY ], - [Species.KUBFU]: [ Moves.METEOR_MASH, Moves.DRAIN_PUNCH, Moves.JET_PUNCH, Moves.DRAGON_DANCE ], - [Species.ZARUDE]: [ Moves.SAPPY_SEED, Moves.MIGHTY_CLEAVE, Moves.WICKED_BLOW, Moves.VICTORY_DANCE ], - [Species.REGIELEKI]: [ Moves.NASTY_PLOT, Moves.ICE_BEAM, Moves.EARTH_POWER, Moves.ELECTRO_DRIFT ], - [Species.REGIDRAGO]: [ Moves.SHELL_SIDE_ARM, Moves.FLAMETHROWER, Moves.TAKE_HEART, Moves.DRAGON_DARTS ], - [Species.GLASTRIER]: [ Moves.SPEED_SWAP, Moves.SLACK_OFF, Moves.HIGH_HORSEPOWER, Moves.GLACIAL_LANCE ], - [Species.SPECTRIER]: [ Moves.EARTH_POWER, Moves.MOONLIGHT, Moves.AURA_SPHERE, Moves.ASTRAL_BARRAGE ], - [Species.CALYREX]: [ Moves.SAPPY_SEED, Moves.RECOVER, Moves.SECRET_SWORD, Moves.PHOTON_GEYSER ], - [Species.ENAMORUS]: [ Moves.AEROBLAST, Moves.THOUSAND_ARROWS, Moves.STORED_POWER, Moves.FLEUR_CANNON ], - [Species.GALAR_MEOWTH]: [ Moves.LIQUIDATION, Moves.HORN_LEECH, Moves.BULLET_PUNCH, Moves.BEHEMOTH_BASH ], - [Species.GALAR_PONYTA]: [ Moves.MAGICAL_TORQUE, Moves.EXTREME_SPEED, Moves.FLARE_BLITZ, Moves.PHOTON_GEYSER ], - [Species.GALAR_SLOWPOKE]: [ Moves.SHED_TAIL, Moves.BADDY_BAD, Moves.MOONBLAST, Moves.PHOTON_GEYSER ], - [Species.GALAR_FARFETCHD]: [ Moves.ROOST, Moves.SACRED_SWORD, Moves.KINGS_SHIELD, Moves.BEHEMOTH_BLADE ], - [Species.GALAR_ARTICUNO]: [ Moves.SECRET_SWORD, Moves.NIGHT_DAZE, Moves.ICE_BEAM, Moves.OBLIVION_WING ], - [Species.GALAR_ZAPDOS]: [ Moves.POISON_JAB, Moves.FLOATY_FALL, Moves.ROOST, Moves.BOLT_BEAK ], - [Species.GALAR_MOLTRES]: [ Moves.ROOST, Moves.SLUDGE_BOMB, Moves.FLAMETHROWER, Moves.OBLIVION_WING ], - [Species.GALAR_CORSOLA]: [ Moves.SHELL_SMASH, Moves.AURA_SPHERE, Moves.INFERNAL_PARADE, Moves.ASTRAL_BARRAGE ], - [Species.GALAR_ZIGZAGOON]: [ Moves.CEASELESS_EDGE, Moves.FACADE, Moves.PARTING_SHOT, Moves.EXTREME_SPEED ], - [Species.GALAR_DARUMAKA]: [ Moves.ICE_SPINNER, Moves.ZING_ZAP, Moves.DRAIN_PUNCH, Moves.PYRO_BALL ], - [Species.GALAR_YAMASK]: [ Moves.STRENGTH_SAP, Moves.DIRE_CLAW, Moves.THOUSAND_WAVES, Moves.SPECTRAL_THIEF ], - [Species.GALAR_STUNFISK]: [ Moves.SPIKY_SHIELD, Moves.THOUSAND_ARROWS, Moves.STRENGTH_SAP, Moves.DOUBLE_IRON_BASH ], - [Species.HISUI_GROWLITHE]: [ Moves.WAVE_CRASH, Moves.HEAD_SMASH, Moves.VOLT_TACKLE, Moves.DRAGON_DANCE ], - [Species.HISUI_VOLTORB]: [ Moves.FROST_BREATH, Moves.NASTY_PLOT, Moves.APPLE_ACID, Moves.ELECTRO_DRIFT ], - [Species.HISUI_QWILFISH]: [ Moves.CEASELESS_EDGE, Moves.BANEFUL_BUNKER, Moves.RECOVER, Moves.FISHIOUS_REND ], - [Species.HISUI_SNEASEL]: [ Moves.DRAIN_PUNCH, Moves.KNOCK_OFF, Moves.PSYCHIC_FANGS, Moves.TRIPLE_AXEL ], - [Species.HISUI_ZORUA]: [ Moves.MOONBLAST, Moves.SECRET_SWORD, Moves.PARTING_SHOT, Moves.BLOOD_MOON ], + [Species.GROOKEY]: [ MoveId.ROCK_SLIDE, MoveId.PLAY_ROUGH, MoveId.GRASSY_GLIDE, MoveId.CLANGOROUS_SOUL ], + [Species.SCORBUNNY]: [ MoveId.EXTREME_SPEED, MoveId.HIGH_JUMP_KICK, MoveId.TRIPLE_AXEL, MoveId.BOLT_STRIKE ], + [Species.SOBBLE]: [ MoveId.AEROBLAST, MoveId.FROST_BREATH, MoveId.ENERGY_BALL, MoveId.NASTY_PLOT ], + [Species.SKWOVET]: [ MoveId.SUCKER_PUNCH, MoveId.SLACK_OFF, MoveId.COIL, MoveId.POPULATION_BOMB ], + [Species.ROOKIDEE]: [ MoveId.ROOST, MoveId.BODY_PRESS, MoveId.KINGS_SHIELD, MoveId.BEHEMOTH_BASH ], + [Species.BLIPBUG]: [ MoveId.HEAL_ORDER, MoveId.LUSTER_PURGE, MoveId.SLEEP_POWDER, MoveId.TAIL_GLOW ], + [Species.NICKIT]: [ MoveId.BADDY_BAD, MoveId.FLAMETHROWER, MoveId.SPARKLY_SWIRL, MoveId.MAKE_IT_RAIN ], + [Species.GOSSIFLEUR]: [ MoveId.PARTING_SHOT, MoveId.STRENGTH_SAP, MoveId.SAPPY_SEED, MoveId.SEED_FLARE ], + [Species.WOOLOO]: [ MoveId.NUZZLE, MoveId.MILK_DRINK, MoveId.BODY_PRESS, MoveId.MULTI_ATTACK ], + [Species.CHEWTLE]: [ MoveId.ICE_FANG, MoveId.PSYCHIC_FANGS, MoveId.SHELL_SMASH, MoveId.MIGHTY_CLEAVE ], + [Species.YAMPER]: [ MoveId.ICE_FANG, MoveId.SWORDS_DANCE, MoveId.THUNDER_FANG, MoveId.BOLT_STRIKE ], + [Species.ROLYCOLY]: [ MoveId.BITTER_BLADE, MoveId.BODY_PRESS, MoveId.BULK_UP, MoveId.DIAMOND_STORM ], + [Species.APPLIN]: [ MoveId.CORE_ENFORCER, MoveId.COMBAT_TORQUE, MoveId.SAPPY_SEED, MoveId.MATCHA_GOTCHA ], + [Species.SILICOBRA]: [ MoveId.SHORE_UP, MoveId.SHED_TAIL, MoveId.MOUNTAIN_GALE, MoveId.THOUSAND_ARROWS ], + [Species.CRAMORANT]: [ MoveId.APPLE_ACID, MoveId.SURF, MoveId.BOLT_BEAK, MoveId.OBLIVION_WING ], + [Species.ARROKUDA]: [ MoveId.SUPERCELL_SLAM, MoveId.TRIPLE_DIVE, MoveId.ICE_SPINNER, MoveId.SWORDS_DANCE ], + [Species.TOXEL]: [ MoveId.BUZZY_BUZZ, MoveId.BUG_BUZZ, MoveId.SPARKLING_ARIA, MoveId.TORCH_SONG ], + [Species.SIZZLIPEDE]: [ MoveId.BURNING_BULWARK, MoveId.ZING_ZAP, MoveId.FIRST_IMPRESSION, MoveId.BITTER_BLADE ], + [Species.CLOBBOPUS]: [ MoveId.STORM_THROW, MoveId.JET_PUNCH, MoveId.MACH_PUNCH, MoveId.SURGING_STRIKES ], + [Species.SINISTEA]: [ MoveId.SPLISHY_SPLASH, MoveId.MATCHA_GOTCHA, MoveId.DRAINING_KISS, MoveId.MOONGEIST_BEAM ], + [Species.HATENNA]: [ MoveId.RECOVER, MoveId.MOONBLAST, MoveId.BUZZY_BUZZ, MoveId.TORCH_SONG ], + [Species.IMPIDIMP]: [ MoveId.SLACK_OFF, MoveId.PARTING_SHOT, MoveId.OCTOLOCK, MoveId.WICKED_BLOW ], + [Species.MILCERY]: [ MoveId.MOONBLAST, MoveId.CHILLY_RECEPTION, MoveId.EARTH_POWER, MoveId.GEOMANCY ], + [Species.FALINKS]: [ MoveId.BATON_PASS, MoveId.POWER_TRIP, MoveId.COMBAT_TORQUE, MoveId.HEAL_ORDER ], + [Species.PINCURCHIN]: [ MoveId.TRICK_ROOM, MoveId.VOLT_SWITCH, MoveId.STRENGTH_SAP, MoveId.THUNDERCLAP ], + [Species.SNOM]: [ MoveId.FROST_BREATH, MoveId.HEAL_ORDER, MoveId.EARTH_POWER, MoveId.SPORE ], + [Species.STONJOURNER]: [ MoveId.BODY_PRESS, MoveId.HELPING_HAND, MoveId.ACCELEROCK, MoveId.DIAMOND_STORM ], + [Species.EISCUE]: [ MoveId.TRIPLE_AXEL, MoveId.AQUA_STEP, MoveId.AXE_KICK, MoveId.SHELL_SMASH ], + [Species.INDEEDEE]: [ MoveId.MATCHA_GOTCHA, MoveId.EXPANDING_FORCE, MoveId.MOONBLAST, MoveId.REVIVAL_BLESSING ], + [Species.MORPEKO]: [ MoveId.TRIPLE_AXEL, MoveId.OBSTRUCT, MoveId.SWORDS_DANCE, MoveId.COLLISION_COURSE ], + [Species.CUFANT]: [ MoveId.LIQUIDATION, MoveId.CURSE, MoveId.COMBAT_TORQUE, MoveId.GIGATON_HAMMER ], + [Species.DRACOZOLT]: [ MoveId.TRIPLE_AXEL, MoveId.GUNK_SHOT, MoveId.FIRE_LASH, MoveId.DRAGON_DANCE ], + [Species.ARCTOZOLT]: [ MoveId.MOUNTAIN_GALE, MoveId.AQUA_STEP, MoveId.HIGH_HORSEPOWER, MoveId.SHIFT_GEAR ], + [Species.DRACOVISH]: [ MoveId.TRIPLE_AXEL, MoveId.DRAGON_HAMMER, MoveId.THUNDER_FANG, MoveId.DRAGON_DANCE ], + [Species.ARCTOVISH]: [ MoveId.ICE_FANG, MoveId.THUNDER_FANG, MoveId.HIGH_HORSEPOWER, MoveId.SHIFT_GEAR ], + [Species.DURALUDON]: [ MoveId.CORE_ENFORCER, MoveId.BODY_PRESS, MoveId.RECOVER, MoveId.TACHYON_CUTTER ], + [Species.DREEPY]: [ MoveId.SHADOW_BONE, MoveId.POWER_UP_PUNCH, MoveId.FIRE_LASH, MoveId.DIRE_CLAW ], + [Species.ZACIAN]: [ MoveId.MAGICAL_TORQUE, MoveId.MIGHTY_CLEAVE, MoveId.BITTER_BLADE, MoveId.PRECIPICE_BLADES ], + [Species.ZAMAZENTA]: [ MoveId.BULK_UP, MoveId.BODY_PRESS, MoveId.SLACK_OFF, MoveId.DIAMOND_STORM ], + [Species.ETERNATUS]: [ MoveId.BODY_PRESS, MoveId.NASTY_PLOT, MoveId.MALIGNANT_CHAIN, MoveId.DRAGON_ENERGY ], + [Species.KUBFU]: [ MoveId.METEOR_MASH, MoveId.DRAIN_PUNCH, MoveId.JET_PUNCH, MoveId.DRAGON_DANCE ], + [Species.ZARUDE]: [ MoveId.SAPPY_SEED, MoveId.MIGHTY_CLEAVE, MoveId.WICKED_BLOW, MoveId.VICTORY_DANCE ], + [Species.REGIELEKI]: [ MoveId.NASTY_PLOT, MoveId.ICE_BEAM, MoveId.EARTH_POWER, MoveId.ELECTRO_DRIFT ], + [Species.REGIDRAGO]: [ MoveId.SHELL_SIDE_ARM, MoveId.FLAMETHROWER, MoveId.TAKE_HEART, MoveId.DRAGON_DARTS ], + [Species.GLASTRIER]: [ MoveId.SPEED_SWAP, MoveId.SLACK_OFF, MoveId.HIGH_HORSEPOWER, MoveId.GLACIAL_LANCE ], + [Species.SPECTRIER]: [ MoveId.EARTH_POWER, MoveId.MOONLIGHT, MoveId.AURA_SPHERE, MoveId.ASTRAL_BARRAGE ], + [Species.CALYREX]: [ MoveId.SAPPY_SEED, MoveId.RECOVER, MoveId.SECRET_SWORD, MoveId.PHOTON_GEYSER ], + [Species.ENAMORUS]: [ MoveId.AEROBLAST, MoveId.THOUSAND_ARROWS, MoveId.STORED_POWER, MoveId.FLEUR_CANNON ], + [Species.GALAR_MEOWTH]: [ MoveId.LIQUIDATION, MoveId.HORN_LEECH, MoveId.BULLET_PUNCH, MoveId.BEHEMOTH_BASH ], + [Species.GALAR_PONYTA]: [ MoveId.MAGICAL_TORQUE, MoveId.EXTREME_SPEED, MoveId.FLARE_BLITZ, MoveId.PHOTON_GEYSER ], + [Species.GALAR_SLOWPOKE]: [ MoveId.SHED_TAIL, MoveId.BADDY_BAD, MoveId.MOONBLAST, MoveId.PHOTON_GEYSER ], + [Species.GALAR_FARFETCHD]: [ MoveId.ROOST, MoveId.SACRED_SWORD, MoveId.KINGS_SHIELD, MoveId.BEHEMOTH_BLADE ], + [Species.GALAR_ARTICUNO]: [ MoveId.SECRET_SWORD, MoveId.NIGHT_DAZE, MoveId.ICE_BEAM, MoveId.OBLIVION_WING ], + [Species.GALAR_ZAPDOS]: [ MoveId.POISON_JAB, MoveId.FLOATY_FALL, MoveId.ROOST, MoveId.BOLT_BEAK ], + [Species.GALAR_MOLTRES]: [ MoveId.ROOST, MoveId.SLUDGE_BOMB, MoveId.FLAMETHROWER, MoveId.OBLIVION_WING ], + [Species.GALAR_CORSOLA]: [ MoveId.SHELL_SMASH, MoveId.AURA_SPHERE, MoveId.INFERNAL_PARADE, MoveId.ASTRAL_BARRAGE ], + [Species.GALAR_ZIGZAGOON]: [ MoveId.CEASELESS_EDGE, MoveId.FACADE, MoveId.PARTING_SHOT, MoveId.EXTREME_SPEED ], + [Species.GALAR_DARUMAKA]: [ MoveId.ICE_SPINNER, MoveId.ZING_ZAP, MoveId.DRAIN_PUNCH, MoveId.PYRO_BALL ], + [Species.GALAR_YAMASK]: [ MoveId.STRENGTH_SAP, MoveId.DIRE_CLAW, MoveId.THOUSAND_WAVES, MoveId.SPECTRAL_THIEF ], + [Species.GALAR_STUNFISK]: [ MoveId.SPIKY_SHIELD, MoveId.THOUSAND_ARROWS, MoveId.STRENGTH_SAP, MoveId.DOUBLE_IRON_BASH ], + [Species.HISUI_GROWLITHE]: [ MoveId.WAVE_CRASH, MoveId.HEAD_SMASH, MoveId.VOLT_TACKLE, MoveId.DRAGON_DANCE ], + [Species.HISUI_VOLTORB]: [ MoveId.FROST_BREATH, MoveId.NASTY_PLOT, MoveId.APPLE_ACID, MoveId.ELECTRO_DRIFT ], + [Species.HISUI_QWILFISH]: [ MoveId.CEASELESS_EDGE, MoveId.BANEFUL_BUNKER, MoveId.RECOVER, MoveId.FISHIOUS_REND ], + [Species.HISUI_SNEASEL]: [ MoveId.DRAIN_PUNCH, MoveId.KNOCK_OFF, MoveId.PSYCHIC_FANGS, MoveId.TRIPLE_AXEL ], + [Species.HISUI_ZORUA]: [ MoveId.MOONBLAST, MoveId.SECRET_SWORD, MoveId.PARTING_SHOT, MoveId.BLOOD_MOON ], - [Species.SPRIGATITO]: [ Moves.FIRE_LASH, Moves.TRIPLE_AXEL, Moves.SUCKER_PUNCH, Moves.WICKED_BLOW ], - [Species.FUECOCO]: [ Moves.ALLURING_VOICE, Moves.SLACK_OFF, Moves.OVERDRIVE, Moves.MOONGEIST_BEAM ], - [Species.QUAXLY]: [ Moves.DRAGON_DANCE, Moves.TRIPLE_AXEL, Moves.POWER_TRIP, Moves.THUNDEROUS_KICK ], - [Species.LECHONK]: [ Moves.MILK_DRINK, Moves.PSYSHIELD_BASH, Moves.BLAZING_TORQUE, Moves.FILLET_AWAY ], - [Species.TAROUNTULA]: [ Moves.STONE_AXE, Moves.LEECH_LIFE, Moves.THIEF, Moves.SPORE ], - [Species.NYMBLE]: [ Moves.KNOCK_OFF, Moves.FELL_STINGER, Moves.ATTACK_ORDER, Moves.WICKED_BLOW ], - [Species.PAWMI]: [ Moves.DRAIN_PUNCH, Moves.METEOR_MASH, Moves.JET_PUNCH, Moves.PLASMA_FISTS ], - [Species.TANDEMAUS]: [ Moves.BATON_PASS, Moves.COVET, Moves.SIZZLY_SLIDE, Moves.REVIVAL_BLESSING ], - [Species.FIDOUGH]: [ Moves.SOFT_BOILED, Moves.HIGH_HORSEPOWER, Moves.SIZZLY_SLIDE, Moves.TIDY_UP ], - [Species.SMOLIV]: [ Moves.STRENGTH_SAP, Moves.EARTH_POWER, Moves.CALM_MIND, Moves.BOOMBURST ], - [Species.SQUAWKABILLY]: [ Moves.PARTING_SHOT, Moves.EARTHQUAKE, Moves.FLARE_BLITZ, Moves.EXTREME_SPEED ], - [Species.NACLI]: [ Moves.BODY_PRESS, Moves.TOXIC, Moves.CURSE, Moves.DIAMOND_STORM ], - [Species.CHARCADET]: [ Moves.SACRED_SWORD, Moves.PHOTON_GEYSER, Moves.MOONBLAST, Moves.SPECTRAL_THIEF ], - [Species.TADBULB]: [ Moves.PARABOLIC_CHARGE, Moves.SCALD, Moves.EARTH_POWER, Moves.ELECTRO_SHOT ], - [Species.WATTREL]: [ Moves.NASTY_PLOT, Moves.SPLISHY_SPLASH, Moves.SANDSEAR_STORM, Moves.WILDBOLT_STORM ], - [Species.MASCHIFF]: [ Moves.PARTING_SHOT, Moves.COMBAT_TORQUE, Moves.PSYCHIC_FANGS, Moves.NO_RETREAT ], - [Species.SHROODLE]: [ Moves.GASTRO_ACID, Moves.PARTING_SHOT, Moves.TOXIC, Moves.SKETCH ], - [Species.BRAMBLIN]: [ Moves.TAILWIND, Moves.STRENGTH_SAP, Moves.FLOWER_TRICK, Moves.LAST_RESPECTS ], - [Species.TOEDSCOOL]: [ Moves.STRENGTH_SAP, Moves.TOPSY_TURVY, Moves.SAPPY_SEED, Moves.TAIL_GLOW ], - [Species.KLAWF]: [ Moves.CRABHAMMER, Moves.SHORE_UP, Moves.MIGHTY_CLEAVE, Moves.SHELL_SMASH ], - [Species.CAPSAKID]: [ Moves.STRENGTH_SAP, Moves.APPLE_ACID, Moves.FROST_BREATH, Moves.TORCH_SONG ], - [Species.RELLOR]: [ Moves.HEAL_BLOCK, Moves.RECOVER, Moves.MAGIC_POWDER, Moves.LUMINA_CRASH ], - [Species.FLITTLE]: [ Moves.COSMIC_POWER, Moves.AURA_SPHERE, Moves.ROOST, Moves.FIERY_DANCE ], - [Species.TINKATINK]: [ Moves.MAGICAL_TORQUE, Moves.PYRO_BALL, Moves.IVY_CUDGEL, Moves.SHIFT_GEAR ], - [Species.WIGLETT]: [ Moves.SHELL_SMASH, Moves.ICICLE_CRASH, Moves.SEED_BOMB, Moves.SURGING_STRIKES ], - [Species.BOMBIRDIER]: [ Moves.FLOATY_FALL, Moves.SWORDS_DANCE, Moves.SUCKER_PUNCH, Moves.MIGHTY_CLEAVE ], - [Species.FINIZEN]: [ Moves.TRIPLE_AXEL, Moves.DRAIN_PUNCH, Moves.HEADLONG_RUSH, Moves.SURGING_STRIKES ], - [Species.VAROOM]: [ Moves.COMBAT_TORQUE, Moves.U_TURN, Moves.BLAZING_TORQUE, Moves.NOXIOUS_TORQUE ], - [Species.CYCLIZAR]: [ Moves.PARTING_SHOT, Moves.FIRE_LASH, Moves.MAGICAL_TORQUE, Moves.GLAIVE_RUSH ], - [Species.ORTHWORM]: [ Moves.SIZZLY_SLIDE, Moves.COIL, Moves.BODY_PRESS, Moves.SHORE_UP ], - [Species.GLIMMET]: [ Moves.CALM_MIND, Moves.GIGA_DRAIN, Moves.FIERY_DANCE, Moves.MALIGNANT_CHAIN ], - [Species.GREAVARD]: [ Moves.SHADOW_BONE, Moves.SIZZLY_SLIDE, Moves.SHORE_UP, Moves.COLLISION_COURSE ], - [Species.FLAMIGO]: [ Moves.THUNDEROUS_KICK, Moves.TRIPLE_AXEL, Moves.FLOATY_FALL, Moves.VICTORY_DANCE ], - [Species.CETODDLE]: [ Moves.ZING_ZAP, Moves.HIGH_HORSEPOWER, Moves.SLACK_OFF, Moves.DRAGON_DANCE ], - [Species.VELUZA]: [ Moves.PSYBLADE, Moves.LEAF_BLADE, Moves.CEASELESS_EDGE, Moves.BITTER_BLADE ], - [Species.DONDOZO]: [ Moves.SOFT_BOILED, Moves.SIZZLY_SLIDE, Moves.BREAKING_SWIPE, Moves.SALT_CURE ], - [Species.TATSUGIRI]: [ Moves.SLUDGE_BOMB, Moves.FILLET_AWAY, Moves.CORE_ENFORCER, Moves.STEAM_ERUPTION ], - [Species.GREAT_TUSK]: [ Moves.STONE_AXE, Moves.MORNING_SUN, Moves.COLLISION_COURSE, Moves.SHIFT_GEAR ], - [Species.SCREAM_TAIL]: [ Moves.TORCH_SONG, Moves.GLITZY_GLOW, Moves.MOONLIGHT, Moves.SPARKLY_SWIRL ], - [Species.BRUTE_BONNET]: [ Moves.SAPPY_SEED, Moves.STRENGTH_SAP, Moves.EARTHQUAKE, Moves.WICKED_BLOW ], - [Species.FLUTTER_MANE]: [ Moves.MOONLIGHT, Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.MOONGEIST_BEAM ], - [Species.SLITHER_WING]: [ Moves.MIGHTY_CLEAVE, Moves.THUNDEROUS_KICK, Moves.FIRE_LASH, Moves.VICTORY_DANCE ], - [Species.SANDY_SHOCKS]: [ Moves.MORNING_SUN, Moves.ICE_BEAM, Moves.NASTY_PLOT, Moves.THUNDERCLAP ], - [Species.IRON_TREADS]: [ Moves.FUSION_BOLT, Moves.SHIFT_GEAR, Moves.SHORE_UP, Moves.SUNSTEEL_STRIKE ], - [Species.IRON_BUNDLE]: [ Moves.EARTH_POWER, Moves.SPLISHY_SPLASH, Moves.VOLT_SWITCH, Moves.NASTY_PLOT ], - [Species.IRON_HANDS]: [ Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.PLASMA_FISTS, Moves.ICE_HAMMER ], - [Species.IRON_JUGULIS]: [ Moves.FIERY_WRATH, Moves.ROOST, Moves.NASTY_PLOT, Moves.OBLIVION_WING ], - [Species.IRON_MOTH]: [ Moves.EARTH_POWER, Moves.SEARING_SHOT, Moves.MALIGNANT_CHAIN, Moves.QUIVER_DANCE ], - [Species.IRON_THORNS]: [ Moves.DIAMOND_STORM, Moves.SHORE_UP, Moves.SHIFT_GEAR, Moves.PLASMA_FISTS ], - [Species.FRIGIBAX]: [ Moves.BEHEMOTH_BLADE, Moves.DRAGON_DANCE, Moves.MOUNTAIN_GALE, Moves.PRECIPICE_BLADES ], - [Species.GIMMIGHOUL]: [ Moves.HAPPY_HOUR, Moves.AURA_SPHERE, Moves.SURF, Moves.ASTRAL_BARRAGE ], - [Species.WO_CHIEN]: [ Moves.SPORE, Moves.FIERY_WRATH, Moves.SAPPY_SEED, Moves.STRENGTH_SAP ], - [Species.CHIEN_PAO]: [ Moves.KNOCK_OFF, Moves.PARTING_SHOT, Moves.TRIPLE_AXEL, Moves.BITTER_BLADE ], - [Species.TING_LU]: [ Moves.SHORE_UP, Moves.CEASELESS_EDGE, Moves.SAPPY_SEED, Moves.PRECIPICE_BLADES ], - [Species.CHI_YU]: [ Moves.FIERY_WRATH, Moves.HYDRO_STEAM, Moves.MORNING_SUN, Moves.BLUE_FLARE ], - [Species.ROARING_MOON]: [ Moves.FIRE_LASH, Moves.DRAGON_HAMMER, Moves.METEOR_MASH, Moves.DRAGON_ASCENT ], - [Species.IRON_VALIANT]: [ Moves.PLASMA_FISTS, Moves.NO_RETREAT, Moves.SECRET_SWORD, Moves.MAGICAL_TORQUE ], - [Species.KORAIDON]: [ Moves.SUNSTEEL_STRIKE, Moves.SOLAR_BLADE, Moves.DRAGON_DARTS, Moves.BITTER_BLADE ], - [Species.MIRAIDON]: [ Moves.FROST_BREATH, Moves.WILDBOLT_STORM, Moves.SPACIAL_REND, Moves.RISING_VOLTAGE ], - [Species.WALKING_WAKE]: [ Moves.BOUNCY_BUBBLE, Moves.FUSION_FLARE, Moves.SLUDGE_WAVE, Moves.CORE_ENFORCER ], - [Species.IRON_LEAVES]: [ Moves.BITTER_BLADE, Moves.U_TURN, Moves.MIGHTY_CLEAVE, Moves.VICTORY_DANCE ], - [Species.POLTCHAGEIST]: [ Moves.PARABOLIC_CHARGE, Moves.BOUNCY_BUBBLE, Moves.LEECH_SEED, Moves.SPARKLY_SWIRL ], - [Species.OKIDOGI]: [ Moves.COMBAT_TORQUE, Moves.TIDY_UP, Moves.DIRE_CLAW, Moves.WICKED_BLOW ], - [Species.MUNKIDORI]: [ Moves.TWIN_BEAM, Moves.HEAT_WAVE, Moves.EARTH_POWER, Moves.MALIGNANT_CHAIN ], - [Species.FEZANDIPITI]: [ Moves.BARB_BARRAGE, Moves.BONEMERANG, Moves.TRIPLE_AXEL, Moves.VICTORY_DANCE ], - [Species.OGERPON]: [ Moves.SLEEP_POWDER, Moves.BONEMERANG, Moves.TRIPLE_AXEL, Moves.FLOWER_TRICK ], - [Species.GOUGING_FIRE]: [ Moves.EXTREME_SPEED, Moves.BULK_UP, Moves.SACRED_FIRE, Moves.GLAIVE_RUSH ], - [Species.RAGING_BOLT]: [ Moves.NASTY_PLOT, Moves.FLAMETHROWER, Moves.MORNING_SUN, Moves.ELECTRO_DRIFT ], - [Species.IRON_BOULDER]: [ Moves.PSYBLADE, Moves.KOWTOW_CLEAVE, Moves.STONE_AXE, Moves.BITTER_BLADE ], - [Species.IRON_CROWN]: [ Moves.NASTY_PLOT, Moves.SECRET_SWORD, Moves.PSYSTRIKE, Moves.ELECTRO_DRIFT ], - [Species.TERAPAGOS]: [ Moves.MOONBLAST, Moves.NASTY_PLOT, Moves.ASTRAL_BARRAGE, Moves.RECOVER ], - [Species.PECHARUNT]: [ Moves.TAKE_HEART, Moves.BODY_PRESS, Moves.SAPPY_SEED, Moves.ASTRAL_BARRAGE ], - [Species.PALDEA_TAUROS]: [ Moves.NO_RETREAT, Moves.BLAZING_TORQUE, Moves.AQUA_STEP, Moves.THUNDEROUS_KICK ], - [Species.PALDEA_WOOPER]: [ Moves.STONE_AXE, Moves.RECOVER, Moves.BANEFUL_BUNKER, Moves.BARB_BARRAGE ], - [Species.BLOODMOON_URSALUNA]: [ Moves.NASTY_PLOT, Moves.ROCK_POLISH, Moves.SANDSEAR_STORM, Moves.BOOMBURST ] + [Species.SPRIGATITO]: [ MoveId.FIRE_LASH, MoveId.TRIPLE_AXEL, MoveId.SUCKER_PUNCH, MoveId.WICKED_BLOW ], + [Species.FUECOCO]: [ MoveId.ALLURING_VOICE, MoveId.SLACK_OFF, MoveId.OVERDRIVE, MoveId.MOONGEIST_BEAM ], + [Species.QUAXLY]: [ MoveId.DRAGON_DANCE, MoveId.TRIPLE_AXEL, MoveId.POWER_TRIP, MoveId.THUNDEROUS_KICK ], + [Species.LECHONK]: [ MoveId.MILK_DRINK, MoveId.PSYSHIELD_BASH, MoveId.BLAZING_TORQUE, MoveId.FILLET_AWAY ], + [Species.TAROUNTULA]: [ MoveId.STONE_AXE, MoveId.LEECH_LIFE, MoveId.THIEF, MoveId.SPORE ], + [Species.NYMBLE]: [ MoveId.KNOCK_OFF, MoveId.FELL_STINGER, MoveId.ATTACK_ORDER, MoveId.WICKED_BLOW ], + [Species.PAWMI]: [ MoveId.DRAIN_PUNCH, MoveId.METEOR_MASH, MoveId.JET_PUNCH, MoveId.PLASMA_FISTS ], + [Species.TANDEMAUS]: [ MoveId.BATON_PASS, MoveId.COVET, MoveId.SIZZLY_SLIDE, MoveId.REVIVAL_BLESSING ], + [Species.FIDOUGH]: [ MoveId.SOFT_BOILED, MoveId.HIGH_HORSEPOWER, MoveId.SIZZLY_SLIDE, MoveId.TIDY_UP ], + [Species.SMOLIV]: [ MoveId.STRENGTH_SAP, MoveId.EARTH_POWER, MoveId.CALM_MIND, MoveId.BOOMBURST ], + [Species.SQUAWKABILLY]: [ MoveId.PARTING_SHOT, MoveId.EARTHQUAKE, MoveId.FLARE_BLITZ, MoveId.EXTREME_SPEED ], + [Species.NACLI]: [ MoveId.BODY_PRESS, MoveId.TOXIC, MoveId.CURSE, MoveId.DIAMOND_STORM ], + [Species.CHARCADET]: [ MoveId.SACRED_SWORD, MoveId.PHOTON_GEYSER, MoveId.MOONBLAST, MoveId.SPECTRAL_THIEF ], + [Species.TADBULB]: [ MoveId.PARABOLIC_CHARGE, MoveId.SCALD, MoveId.EARTH_POWER, MoveId.ELECTRO_SHOT ], + [Species.WATTREL]: [ MoveId.NASTY_PLOT, MoveId.SPLISHY_SPLASH, MoveId.SANDSEAR_STORM, MoveId.WILDBOLT_STORM ], + [Species.MASCHIFF]: [ MoveId.PARTING_SHOT, MoveId.COMBAT_TORQUE, MoveId.PSYCHIC_FANGS, MoveId.NO_RETREAT ], + [Species.SHROODLE]: [ MoveId.GASTRO_ACID, MoveId.PARTING_SHOT, MoveId.TOXIC, MoveId.SKETCH ], + [Species.BRAMBLIN]: [ MoveId.TAILWIND, MoveId.STRENGTH_SAP, MoveId.FLOWER_TRICK, MoveId.LAST_RESPECTS ], + [Species.TOEDSCOOL]: [ MoveId.STRENGTH_SAP, MoveId.TOPSY_TURVY, MoveId.SAPPY_SEED, MoveId.TAIL_GLOW ], + [Species.KLAWF]: [ MoveId.CRABHAMMER, MoveId.SHORE_UP, MoveId.MIGHTY_CLEAVE, MoveId.SHELL_SMASH ], + [Species.CAPSAKID]: [ MoveId.STRENGTH_SAP, MoveId.APPLE_ACID, MoveId.FROST_BREATH, MoveId.TORCH_SONG ], + [Species.RELLOR]: [ MoveId.HEAL_BLOCK, MoveId.RECOVER, MoveId.MAGIC_POWDER, MoveId.LUMINA_CRASH ], + [Species.FLITTLE]: [ MoveId.COSMIC_POWER, MoveId.AURA_SPHERE, MoveId.ROOST, MoveId.FIERY_DANCE ], + [Species.TINKATINK]: [ MoveId.MAGICAL_TORQUE, MoveId.PYRO_BALL, MoveId.IVY_CUDGEL, MoveId.SHIFT_GEAR ], + [Species.WIGLETT]: [ MoveId.SHELL_SMASH, MoveId.ICICLE_CRASH, MoveId.SEED_BOMB, MoveId.SURGING_STRIKES ], + [Species.BOMBIRDIER]: [ MoveId.FLOATY_FALL, MoveId.SWORDS_DANCE, MoveId.SUCKER_PUNCH, MoveId.MIGHTY_CLEAVE ], + [Species.FINIZEN]: [ MoveId.TRIPLE_AXEL, MoveId.DRAIN_PUNCH, MoveId.HEADLONG_RUSH, MoveId.SURGING_STRIKES ], + [Species.VAROOM]: [ MoveId.COMBAT_TORQUE, MoveId.U_TURN, MoveId.BLAZING_TORQUE, MoveId.NOXIOUS_TORQUE ], + [Species.CYCLIZAR]: [ MoveId.PARTING_SHOT, MoveId.FIRE_LASH, MoveId.MAGICAL_TORQUE, MoveId.GLAIVE_RUSH ], + [Species.ORTHWORM]: [ MoveId.SIZZLY_SLIDE, MoveId.COIL, MoveId.BODY_PRESS, MoveId.SHORE_UP ], + [Species.GLIMMET]: [ MoveId.CALM_MIND, MoveId.GIGA_DRAIN, MoveId.FIERY_DANCE, MoveId.MALIGNANT_CHAIN ], + [Species.GREAVARD]: [ MoveId.SHADOW_BONE, MoveId.SIZZLY_SLIDE, MoveId.SHORE_UP, MoveId.COLLISION_COURSE ], + [Species.FLAMIGO]: [ MoveId.THUNDEROUS_KICK, MoveId.TRIPLE_AXEL, MoveId.FLOATY_FALL, MoveId.VICTORY_DANCE ], + [Species.CETODDLE]: [ MoveId.ZING_ZAP, MoveId.HIGH_HORSEPOWER, MoveId.SLACK_OFF, MoveId.DRAGON_DANCE ], + [Species.VELUZA]: [ MoveId.PSYBLADE, MoveId.LEAF_BLADE, MoveId.CEASELESS_EDGE, MoveId.BITTER_BLADE ], + [Species.DONDOZO]: [ MoveId.SOFT_BOILED, MoveId.SIZZLY_SLIDE, MoveId.BREAKING_SWIPE, MoveId.SALT_CURE ], + [Species.TATSUGIRI]: [ MoveId.SLUDGE_BOMB, MoveId.FILLET_AWAY, MoveId.CORE_ENFORCER, MoveId.STEAM_ERUPTION ], + [Species.GREAT_TUSK]: [ MoveId.STONE_AXE, MoveId.MORNING_SUN, MoveId.COLLISION_COURSE, MoveId.SHIFT_GEAR ], + [Species.SCREAM_TAIL]: [ MoveId.TORCH_SONG, MoveId.GLITZY_GLOW, MoveId.MOONLIGHT, MoveId.SPARKLY_SWIRL ], + [Species.BRUTE_BONNET]: [ MoveId.SAPPY_SEED, MoveId.STRENGTH_SAP, MoveId.EARTHQUAKE, MoveId.WICKED_BLOW ], + [Species.FLUTTER_MANE]: [ MoveId.MOONLIGHT, MoveId.NASTY_PLOT, MoveId.EARTH_POWER, MoveId.MOONGEIST_BEAM ], + [Species.SLITHER_WING]: [ MoveId.MIGHTY_CLEAVE, MoveId.THUNDEROUS_KICK, MoveId.FIRE_LASH, MoveId.VICTORY_DANCE ], + [Species.SANDY_SHOCKS]: [ MoveId.MORNING_SUN, MoveId.ICE_BEAM, MoveId.NASTY_PLOT, MoveId.THUNDERCLAP ], + [Species.IRON_TREADS]: [ MoveId.FUSION_BOLT, MoveId.SHIFT_GEAR, MoveId.SHORE_UP, MoveId.SUNSTEEL_STRIKE ], + [Species.IRON_BUNDLE]: [ MoveId.EARTH_POWER, MoveId.SPLISHY_SPLASH, MoveId.VOLT_SWITCH, MoveId.NASTY_PLOT ], + [Species.IRON_HANDS]: [ MoveId.DRAIN_PUNCH, MoveId.BULK_UP, MoveId.PLASMA_FISTS, MoveId.ICE_HAMMER ], + [Species.IRON_JUGULIS]: [ MoveId.FIERY_WRATH, MoveId.ROOST, MoveId.NASTY_PLOT, MoveId.OBLIVION_WING ], + [Species.IRON_MOTH]: [ MoveId.EARTH_POWER, MoveId.SEARING_SHOT, MoveId.MALIGNANT_CHAIN, MoveId.QUIVER_DANCE ], + [Species.IRON_THORNS]: [ MoveId.DIAMOND_STORM, MoveId.SHORE_UP, MoveId.SHIFT_GEAR, MoveId.PLASMA_FISTS ], + [Species.FRIGIBAX]: [ MoveId.BEHEMOTH_BLADE, MoveId.DRAGON_DANCE, MoveId.MOUNTAIN_GALE, MoveId.PRECIPICE_BLADES ], + [Species.GIMMIGHOUL]: [ MoveId.HAPPY_HOUR, MoveId.AURA_SPHERE, MoveId.SURF, MoveId.ASTRAL_BARRAGE ], + [Species.WO_CHIEN]: [ MoveId.SPORE, MoveId.FIERY_WRATH, MoveId.SAPPY_SEED, MoveId.STRENGTH_SAP ], + [Species.CHIEN_PAO]: [ MoveId.KNOCK_OFF, MoveId.PARTING_SHOT, MoveId.TRIPLE_AXEL, MoveId.BITTER_BLADE ], + [Species.TING_LU]: [ MoveId.SHORE_UP, MoveId.CEASELESS_EDGE, MoveId.SAPPY_SEED, MoveId.PRECIPICE_BLADES ], + [Species.CHI_YU]: [ MoveId.FIERY_WRATH, MoveId.HYDRO_STEAM, MoveId.MORNING_SUN, MoveId.BLUE_FLARE ], + [Species.ROARING_MOON]: [ MoveId.FIRE_LASH, MoveId.DRAGON_HAMMER, MoveId.METEOR_MASH, MoveId.DRAGON_ASCENT ], + [Species.IRON_VALIANT]: [ MoveId.PLASMA_FISTS, MoveId.NO_RETREAT, MoveId.SECRET_SWORD, MoveId.MAGICAL_TORQUE ], + [Species.KORAIDON]: [ MoveId.SUNSTEEL_STRIKE, MoveId.SOLAR_BLADE, MoveId.DRAGON_DARTS, MoveId.BITTER_BLADE ], + [Species.MIRAIDON]: [ MoveId.FROST_BREATH, MoveId.WILDBOLT_STORM, MoveId.SPACIAL_REND, MoveId.RISING_VOLTAGE ], + [Species.WALKING_WAKE]: [ MoveId.BOUNCY_BUBBLE, MoveId.FUSION_FLARE, MoveId.SLUDGE_WAVE, MoveId.CORE_ENFORCER ], + [Species.IRON_LEAVES]: [ MoveId.BITTER_BLADE, MoveId.U_TURN, MoveId.MIGHTY_CLEAVE, MoveId.VICTORY_DANCE ], + [Species.POLTCHAGEIST]: [ MoveId.PARABOLIC_CHARGE, MoveId.BOUNCY_BUBBLE, MoveId.LEECH_SEED, MoveId.SPARKLY_SWIRL ], + [Species.OKIDOGI]: [ MoveId.COMBAT_TORQUE, MoveId.TIDY_UP, MoveId.DIRE_CLAW, MoveId.WICKED_BLOW ], + [Species.MUNKIDORI]: [ MoveId.TWIN_BEAM, MoveId.HEAT_WAVE, MoveId.EARTH_POWER, MoveId.MALIGNANT_CHAIN ], + [Species.FEZANDIPITI]: [ MoveId.BARB_BARRAGE, MoveId.BONEMERANG, MoveId.TRIPLE_AXEL, MoveId.VICTORY_DANCE ], + [Species.OGERPON]: [ MoveId.SLEEP_POWDER, MoveId.BONEMERANG, MoveId.TRIPLE_AXEL, MoveId.FLOWER_TRICK ], + [Species.GOUGING_FIRE]: [ MoveId.EXTREME_SPEED, MoveId.BULK_UP, MoveId.SACRED_FIRE, MoveId.GLAIVE_RUSH ], + [Species.RAGING_BOLT]: [ MoveId.NASTY_PLOT, MoveId.FLAMETHROWER, MoveId.MORNING_SUN, MoveId.ELECTRO_DRIFT ], + [Species.IRON_BOULDER]: [ MoveId.PSYBLADE, MoveId.KOWTOW_CLEAVE, MoveId.STONE_AXE, MoveId.BITTER_BLADE ], + [Species.IRON_CROWN]: [ MoveId.NASTY_PLOT, MoveId.SECRET_SWORD, MoveId.PSYSTRIKE, MoveId.ELECTRO_DRIFT ], + [Species.TERAPAGOS]: [ MoveId.MOONBLAST, MoveId.NASTY_PLOT, MoveId.ASTRAL_BARRAGE, MoveId.RECOVER ], + [Species.PECHARUNT]: [ MoveId.TAKE_HEART, MoveId.BODY_PRESS, MoveId.SAPPY_SEED, MoveId.ASTRAL_BARRAGE ], + [Species.PALDEA_TAUROS]: [ MoveId.NO_RETREAT, MoveId.BLAZING_TORQUE, MoveId.AQUA_STEP, MoveId.THUNDEROUS_KICK ], + [Species.PALDEA_WOOPER]: [ MoveId.STONE_AXE, MoveId.RECOVER, MoveId.BANEFUL_BUNKER, MoveId.BARB_BARRAGE ], + [Species.BLOODMOON_URSALUNA]: [ MoveId.NASTY_PLOT, MoveId.ROCK_POLISH, MoveId.SANDSEAR_STORM, MoveId.BOOMBURST ] }; function parseEggMoves(content: string): void { @@ -597,20 +597,20 @@ function parseEggMoves(content: string): void { const enumSpeciesName = cols[0].toUpperCase().replace(/[ -]/g, "_"); const species = speciesValues[speciesNames.findIndex(s => s === enumSpeciesName)]; - const eggMoves: Moves[] = []; + const eggMoves: MoveId[] = []; for (let m = 0; m < 4; m++) { const moveName = cols[m + 1].trim(); const moveIndex = moveName !== "N/A" ? moveNames.findIndex(mn => mn === moveName.toLowerCase()) : -1; - eggMoves.push(moveIndex > -1 ? moveIndex as Moves : Moves.NONE); + eggMoves.push(moveIndex > -1 ? moveIndex as MoveId : MoveId.NONE); if (moveIndex === -1) { console.warn(moveName, "could not be parsed"); } } - if (eggMoves.find(m => m !== Moves.NONE)) { - output += `[Species.${Species[species]}]: [ ${eggMoves.map(m => `Moves.${Moves[m]}`).join(", ")} ],\n`; + if (eggMoves.find(m => m !== MoveId.NONE)) { + output += `[Species.${Species[species]}]: [ ${eggMoves.map(m => `Moves.${MoveId[m]}`).join(", ")} ],\n`; } } diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index cf1e4061987..4bc110e5929 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -7,7 +7,7 @@ import { randSeedInt } from "#app/utils/common"; import { WeatherType } from "#enums/weather-type"; import { Nature } from "#enums/nature"; import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { SpeciesFormKey } from "#enums/species-form-key"; import { TimeOfDay } from "#enums/time-of-day"; @@ -181,11 +181,11 @@ class TimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { } class MoveEvolutionCondition extends SpeciesEvolutionCondition { - public move: Moves; - constructor(move: Moves) { + public move: MoveId; + constructor(move: MoveId) { super(p => p.moveset.filter(m => m.moveId === move).length > 0); this.move = move; - const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + const moveKey = MoveId[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); } } @@ -283,12 +283,12 @@ class TreasureEvolutionCondition extends SpeciesEvolutionCondition { } class TyrogueEvolutionCondition extends SpeciesEvolutionCondition { - public move: Moves; - constructor(move: Moves) { + public move: MoveId; + constructor(move: MoveId) { super(p => - p.getMoveset(true).find(m => m && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(m.moveId))?.moveId === move); + p.getMoveset(true).find(m => m && [ MoveId.LOW_SWEEP, MoveId.MACH_PUNCH, MoveId.RAPID_SPIN ].includes(m.moveId))?.moveId === move); this.move = move; - const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + const moveKey = MoveId[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); } } @@ -303,9 +303,9 @@ class NatureEvolutionCondition extends SpeciesEvolutionCondition { } class MoveTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { - public move: Moves; + public move: MoveId; public timesOfDay: TimeOfDay[]; - constructor(move: Moves, tod: "day" | "night") { + constructor(move: MoveId, tod: "day" | "night") { if (tod === "day") { super(p => p.moveset.filter(m => m.moveId === move).length > 0 && (globalScene.arena.getTimeOfDay() === TimeOfDay.DAWN || globalScene.arena.getTimeOfDay() === TimeOfDay.DAY)); this.move = move; @@ -318,7 +318,7 @@ class MoveTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { super(() => false); this.timesOfDay = []; } - const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + const moveKey = MoveId[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); this.description = i18next.t("pokemonEvolutions:moveTimeOfDay", { move: i18next.t(`move:${moveKey}.name`), tod: i18next.t(`pokemonEvolutions:${tod}`) }); } } @@ -336,12 +336,12 @@ class DunsparceEvolutionCondition extends SpeciesEvolutionCondition { constructor() { super(p => { let ret = false; - if (p.moveset.filter(m => m.moveId === Moves.HYPER_DRILL).length > 0) { + if (p.moveset.filter(m => m.moveId === MoveId.HYPER_DRILL).length > 0) { globalScene.executeWithSeedOffset(() => ret = !randSeedInt(4), p.id); } return ret; }); - const moveKey = Moves[Moves.HYPER_DRILL].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + const moveKey = MoveId[MoveId.HYPER_DRILL].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); } } @@ -499,9 +499,9 @@ export const pokemonEvolutions: PokemonEvolutions = { * If Tyrogue knows multiple of these moves, its evolution is based on * the first qualifying move in its moveset. */ - new SpeciesEvolution(Species.HITMONLEE, 20, null, new TyrogueEvolutionCondition(Moves.LOW_SWEEP)), - new SpeciesEvolution(Species.HITMONCHAN, 20, null, new TyrogueEvolutionCondition(Moves.MACH_PUNCH)), - new SpeciesEvolution(Species.HITMONTOP, 20, null, new TyrogueEvolutionCondition(Moves.RAPID_SPIN)), + new SpeciesEvolution(Species.HITMONLEE, 20, null, new TyrogueEvolutionCondition(MoveId.LOW_SWEEP)), + new SpeciesEvolution(Species.HITMONCHAN, 20, null, new TyrogueEvolutionCondition(MoveId.MACH_PUNCH)), + new SpeciesEvolution(Species.HITMONTOP, 20, null, new TyrogueEvolutionCondition(MoveId.RAPID_SPIN)), ], [Species.KOFFING]: [ new SpeciesEvolution(Species.GALAR_WEEZING, 35, null, new TimeOfDayEvolutionCondition("night")), @@ -1514,10 +1514,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.EXEGGUTOR, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.TANGELA]: [ - new SpeciesEvolution(Species.TANGROWTH, 34, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.TANGROWTH, 34, null, new MoveEvolutionCondition(MoveId.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) ], [Species.LICKITUNG]: [ - new SpeciesEvolution(Species.LICKILICKY, 32, null, new MoveEvolutionCondition(Moves.ROLLOUT), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.LICKILICKY, 32, null, new MoveEvolutionCondition(MoveId.ROLLOUT), SpeciesWildEvolutionDelay.LONG) ], [Species.STARYU]: [ new SpeciesEvolution(Species.STARMIE, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1544,13 +1544,13 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.TOGEKISS, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.AIPOM]: [ - new SpeciesEvolution(Species.AMBIPOM, 32, null, new MoveEvolutionCondition(Moves.DOUBLE_HIT), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.AMBIPOM, 32, null, new MoveEvolutionCondition(MoveId.DOUBLE_HIT), SpeciesWildEvolutionDelay.LONG) ], [Species.SUNKERN]: [ new SpeciesEvolution(Species.SUNFLORA, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.YANMA]: [ - new SpeciesEvolution(Species.YANMEGA, 33, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.YANMEGA, 33, null, new MoveEvolutionCondition(MoveId.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) ], [Species.MURKROW]: [ new SpeciesEvolution(Species.HONCHKROW, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1559,11 +1559,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.MISMAGIUS, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.GIRAFARIG]: [ - new SpeciesEvolution(Species.FARIGIRAF, 32, null, new MoveEvolutionCondition(Moves.TWIN_BEAM), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.FARIGIRAF, 32, null, new MoveEvolutionCondition(MoveId.TWIN_BEAM), SpeciesWildEvolutionDelay.LONG) ], [Species.DUNSPARCE]: [ new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "three-segment", 32, null, new DunsparceEvolutionCondition(), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "two-segment", 32, null, new MoveEvolutionCondition(Moves.HYPER_DRILL), SpeciesWildEvolutionDelay.LONG) + new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "two-segment", 32, null, new MoveEvolutionCondition(MoveId.HYPER_DRILL), SpeciesWildEvolutionDelay.LONG) ], [Species.GLIGAR]: [ new SpeciesEvolution(Species.GLISCOR, 1, EvolutionItem.RAZOR_FANG, new TimeOfDayEvolutionCondition("night") /* Razor fang at night*/, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1575,10 +1575,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.URSALUNA, 1, EvolutionItem.PEAT_BLOCK, null, SpeciesWildEvolutionDelay.VERY_LONG) //Ursaring does not evolve into Bloodmoon Ursaluna ], [Species.PILOSWINE]: [ - new SpeciesEvolution(Species.MAMOSWINE, 1, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.MAMOSWINE, 1, null, new MoveEvolutionCondition(MoveId.ANCIENT_POWER), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.STANTLER]: [ - new SpeciesEvolution(Species.WYRDEER, 25, null, new MoveEvolutionCondition(Moves.PSYSHIELD_BASH), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.WYRDEER, 25, null, new MoveEvolutionCondition(MoveId.PSYSHIELD_BASH), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.LOMBRE]: [ new SpeciesEvolution(Species.LUDICOLO, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1596,11 +1596,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ROSERADE, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.BONSLY]: [ - new SpeciesEvolution(Species.SUDOWOODO, 1, null, new MoveEvolutionCondition(Moves.MIMIC), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.SUDOWOODO, 1, null, new MoveEvolutionCondition(MoveId.MIMIC), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.MIME_JR]: [ - new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(Moves.MIMIC, "night"), SpeciesWildEvolutionDelay.MEDIUM), - new SpeciesEvolution(Species.MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(Moves.MIMIC, "day"), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(MoveId.MIMIC, "night"), SpeciesWildEvolutionDelay.MEDIUM), + new SpeciesEvolution(Species.MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(MoveId.MIMIC, "day"), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.PANSAGE]: [ new SpeciesEvolution(Species.SIMISAGE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1655,10 +1655,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesFormEvolution(Species.LYCANROC, "", "midnight", 25, null, new TimeOfDayEvolutionCondition("night")) ], [Species.STEENEE]: [ - new SpeciesEvolution(Species.TSAREENA, 28, null, new MoveEvolutionCondition(Moves.STOMP), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.TSAREENA, 28, null, new MoveEvolutionCondition(MoveId.STOMP), SpeciesWildEvolutionDelay.LONG) ], [Species.POIPOLE]: [ - new SpeciesEvolution(Species.NAGANADEL, 1, null, new MoveEvolutionCondition(Moves.DRAGON_PULSE), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.NAGANADEL, 1, null, new MoveEvolutionCondition(MoveId.DRAGON_PULSE), SpeciesWildEvolutionDelay.LONG) ], [Species.ALOLA_SANDSHREW]: [ new SpeciesEvolution(Species.ALOLA_SANDSLASH, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1672,7 +1672,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.APPLETUN, 1, EvolutionItem.SWEET_APPLE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.CLOBBOPUS]: [ - new SpeciesEvolution(Species.GRAPPLOCT, 35, null, new MoveEvolutionCondition(Moves.TAUNT)/*Once Taunt is implemented, change evo level to 1 and delay to LONG*/) + new SpeciesEvolution(Species.GRAPPLOCT, 35, null, new MoveEvolutionCondition(MoveId.TAUNT)/*Once Taunt is implemented, change evo level to 1 and delay to LONG*/) ], [Species.SINISTEA]: [ new SpeciesFormEvolution(Species.POLTEAGEIST, "phony", "phony", 1, EvolutionItem.CRACKED_POT, null, SpeciesWildEvolutionDelay.LONG), @@ -1724,7 +1724,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.HISUI_ELECTRODE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.HISUI_QWILFISH]: [ - new SpeciesEvolution(Species.OVERQWIL, 28, null, new MoveEvolutionCondition(Moves.BARB_BARRAGE), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.OVERQWIL, 28, null, new MoveEvolutionCondition(MoveId.BARB_BARRAGE), SpeciesWildEvolutionDelay.LONG) ], [Species.HISUI_SNEASEL]: [ new SpeciesEvolution(Species.SNEASLER, 1, EvolutionItem.RAZOR_CLAW, new TimeOfDayEvolutionCondition("day") /* Razor claw at day*/, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1747,7 +1747,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesFormEvolution(Species.SINISTCHA, "artisan", "masterpiece", 1, EvolutionItem.MASTERPIECE_TEACUP, null, SpeciesWildEvolutionDelay.LONG) ], [Species.DIPPLIN]: [ - new SpeciesEvolution(Species.HYDRAPPLE, 1, null, new MoveEvolutionCondition(Moves.DRAGON_CHEER), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.HYDRAPPLE, 1, null, new MoveEvolutionCondition(MoveId.DRAGON_CHEER), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.KADABRA]: [ new SpeciesEvolution(Species.ALAKAZAM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1825,7 +1825,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ALOLA_GOLEM, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.PRIMEAPE]: [ - new SpeciesEvolution(Species.ANNIHILAPE, 35, null, new MoveEvolutionCondition(Moves.RAGE_FIST), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.ANNIHILAPE, 35, null, new MoveEvolutionCondition(MoveId.RAGE_FIST), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.GOLBAT]: [ new SpeciesEvolution(Species.CROBAT, 1, null, new FriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.VERY_LONG) diff --git a/src/data/balance/pokemon-level-moves.ts b/src/data/balance/pokemon-level-moves.ts index 0b0ba1b5f71..ff413af27d9 100644 --- a/src/data/balance/pokemon-level-moves.ts +++ b/src/data/balance/pokemon-level-moves.ts @@ -1,7 +1,7 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; -export type LevelMoves = ([number, Moves])[]; +export type LevelMoves = ([number, MoveId])[]; interface PokemonSpeciesLevelMoves { [key: number]: LevelMoves @@ -22,20000 +22,20000 @@ export const EVOLVE_MOVE = 0; export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.BULBASAUR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.VINE_WHIP ], - [ 6, Moves.GROWTH ], - [ 9, Moves.LEECH_SEED ], - [ 12, Moves.RAZOR_LEAF ], - [ 15, Moves.POISON_POWDER ], - [ 15, Moves.SLEEP_POWDER ], - [ 18, Moves.SEED_BOMB ], - [ 21, Moves.TAKE_DOWN ], - [ 24, Moves.SWEET_SCENT ], - [ 27, Moves.SYNTHESIS ], - [ 30, Moves.WORRY_SEED ], - [ 33, Moves.POWER_WHIP ], - [ 36, Moves.SOLAR_BEAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.VINE_WHIP ], + [ 6, MoveId.GROWTH ], + [ 9, MoveId.LEECH_SEED ], + [ 12, MoveId.RAZOR_LEAF ], + [ 15, MoveId.POISON_POWDER ], + [ 15, MoveId.SLEEP_POWDER ], + [ 18, MoveId.SEED_BOMB ], + [ 21, MoveId.TAKE_DOWN ], + [ 24, MoveId.SWEET_SCENT ], + [ 27, MoveId.SYNTHESIS ], + [ 30, MoveId.WORRY_SEED ], + [ 33, MoveId.POWER_WHIP ], + [ 36, MoveId.SOLAR_BEAM ], ], [Species.IVYSAUR]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.GROWTH ], - [ 9, Moves.LEECH_SEED ], - [ 12, Moves.RAZOR_LEAF ], - [ 15, Moves.POISON_POWDER ], - [ 15, Moves.SLEEP_POWDER ], - [ 20, Moves.SEED_BOMB ], - [ 25, Moves.TAKE_DOWN ], - [ 30, Moves.SWEET_SCENT ], - [ 35, Moves.SYNTHESIS ], - [ 40, Moves.WORRY_SEED ], - [ 45, Moves.POWER_WHIP ], - [ 50, Moves.SOLAR_BEAM ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.GROWTH ], + [ 9, MoveId.LEECH_SEED ], + [ 12, MoveId.RAZOR_LEAF ], + [ 15, MoveId.POISON_POWDER ], + [ 15, MoveId.SLEEP_POWDER ], + [ 20, MoveId.SEED_BOMB ], + [ 25, MoveId.TAKE_DOWN ], + [ 30, MoveId.SWEET_SCENT ], + [ 35, MoveId.SYNTHESIS ], + [ 40, MoveId.WORRY_SEED ], + [ 45, MoveId.POWER_WHIP ], + [ 50, MoveId.SOLAR_BEAM ], ], [Species.VENUSAUR]: [ - [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], - [ 1, Moves.GROWTH ], - [ 1, Moves.PETAL_DANCE ], - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 9, Moves.LEECH_SEED ], - [ 12, Moves.RAZOR_LEAF ], - [ 15, Moves.POISON_POWDER ], - [ 15, Moves.SLEEP_POWDER ], - [ 20, Moves.SEED_BOMB ], - [ 25, Moves.TAKE_DOWN ], - [ 30, Moves.SWEET_SCENT ], - [ 37, Moves.SYNTHESIS ], - [ 44, Moves.WORRY_SEED ], - [ 51, Moves.POWER_WHIP ], - [ 58, Moves.SOLAR_BEAM ], + [ EVOLVE_MOVE, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.PETAL_DANCE ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 9, MoveId.LEECH_SEED ], + [ 12, MoveId.RAZOR_LEAF ], + [ 15, MoveId.POISON_POWDER ], + [ 15, MoveId.SLEEP_POWDER ], + [ 20, MoveId.SEED_BOMB ], + [ 25, MoveId.TAKE_DOWN ], + [ 30, MoveId.SWEET_SCENT ], + [ 37, MoveId.SYNTHESIS ], + [ 44, MoveId.WORRY_SEED ], + [ 51, MoveId.POWER_WHIP ], + [ 58, MoveId.SOLAR_BEAM ], ], [Species.CHARMANDER]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 4, Moves.EMBER ], - [ 8, Moves.SMOKESCREEN ], - [ 12, Moves.DRAGON_BREATH ], - [ 17, Moves.FIRE_FANG ], - [ 20, Moves.SLASH ], - [ 24, Moves.FLAMETHROWER ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.FIRE_SPIN ], - [ 36, Moves.INFERNO ], - [ 40, Moves.FLARE_BLITZ ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.EMBER ], + [ 8, MoveId.SMOKESCREEN ], + [ 12, MoveId.DRAGON_BREATH ], + [ 17, MoveId.FIRE_FANG ], + [ 20, MoveId.SLASH ], + [ 24, MoveId.FLAMETHROWER ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.FIRE_SPIN ], + [ 36, MoveId.INFERNO ], + [ 40, MoveId.FLARE_BLITZ ], ], [Species.CHARMELEON]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.FIRE_SPIN ], // Previous Stage Move - [ 12, Moves.DRAGON_BREATH ], - [ 19, Moves.FIRE_FANG ], - [ 24, Moves.SLASH ], - [ 30, Moves.FLAMETHROWER ], - [ 37, Moves.SCARY_FACE ], - [ 48, Moves.INFERNO ], - [ 54, Moves.FLARE_BLITZ ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.FIRE_SPIN ], // Previous Stage Move + [ 12, MoveId.DRAGON_BREATH ], + [ 19, MoveId.FIRE_FANG ], + [ 24, MoveId.SLASH ], + [ 30, MoveId.FLAMETHROWER ], + [ 37, MoveId.SCARY_FACE ], + [ 48, MoveId.INFERNO ], + [ 54, MoveId.FLARE_BLITZ ], ], [Species.CHARIZARD]: [ - [ EVOLVE_MOVE, Moves.AIR_SLASH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.HEAT_WAVE ], - [ 1, Moves.DRAGON_CLAW ], - [ 12, Moves.DRAGON_BREATH ], - [ 19, Moves.FIRE_FANG ], - [ 24, Moves.SLASH ], - [ 30, Moves.FLAMETHROWER ], - [ 39, Moves.SCARY_FACE ], - [ 46, Moves.FIRE_SPIN ], - [ 54, Moves.INFERNO ], - [ 62, Moves.FLARE_BLITZ ], + [ EVOLVE_MOVE, MoveId.AIR_SLASH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.HEAT_WAVE ], + [ 1, MoveId.DRAGON_CLAW ], + [ 12, MoveId.DRAGON_BREATH ], + [ 19, MoveId.FIRE_FANG ], + [ 24, MoveId.SLASH ], + [ 30, MoveId.FLAMETHROWER ], + [ 39, MoveId.SCARY_FACE ], + [ 46, MoveId.FIRE_SPIN ], + [ 54, MoveId.INFERNO ], + [ 62, MoveId.FLARE_BLITZ ], ], [Species.SQUIRTLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 3, Moves.WATER_GUN ], - [ 6, Moves.WITHDRAW ], - [ 9, Moves.RAPID_SPIN ], - [ 12, Moves.BITE ], - [ 15, Moves.WATER_PULSE ], - [ 18, Moves.PROTECT ], - [ 21, Moves.RAIN_DANCE ], - [ 24, Moves.AQUA_TAIL ], - [ 27, Moves.SHELL_SMASH ], - [ 30, Moves.IRON_DEFENSE ], - [ 33, Moves.HYDRO_PUMP ], - [ 36, Moves.WAVE_CRASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 3, MoveId.WATER_GUN ], + [ 6, MoveId.WITHDRAW ], + [ 9, MoveId.RAPID_SPIN ], + [ 12, MoveId.BITE ], + [ 15, MoveId.WATER_PULSE ], + [ 18, MoveId.PROTECT ], + [ 21, MoveId.RAIN_DANCE ], + [ 24, MoveId.AQUA_TAIL ], + [ 27, MoveId.SHELL_SMASH ], + [ 30, MoveId.IRON_DEFENSE ], + [ 33, MoveId.HYDRO_PUMP ], + [ 36, MoveId.WAVE_CRASH ], ], [Species.WARTORTLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 9, Moves.RAPID_SPIN ], - [ 12, Moves.BITE ], - [ 15, Moves.WATER_PULSE ], - [ 20, Moves.PROTECT ], - [ 25, Moves.RAIN_DANCE ], - [ 30, Moves.AQUA_TAIL ], - [ 35, Moves.SHELL_SMASH ], - [ 40, Moves.IRON_DEFENSE ], - [ 45, Moves.HYDRO_PUMP ], - [ 50, Moves.WAVE_CRASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 9, MoveId.RAPID_SPIN ], + [ 12, MoveId.BITE ], + [ 15, MoveId.WATER_PULSE ], + [ 20, MoveId.PROTECT ], + [ 25, MoveId.RAIN_DANCE ], + [ 30, MoveId.AQUA_TAIL ], + [ 35, MoveId.SHELL_SMASH ], + [ 40, MoveId.IRON_DEFENSE ], + [ 45, MoveId.HYDRO_PUMP ], + [ 50, MoveId.WAVE_CRASH ], ], [Species.BLASTOISE]: [ - [ EVOLVE_MOVE, Moves.FLASH_CANNON ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 9, Moves.RAPID_SPIN ], - [ 12, Moves.BITE ], - [ 15, Moves.WATER_PULSE ], - [ 20, Moves.PROTECT ], - [ 25, Moves.RAIN_DANCE ], - [ 30, Moves.AQUA_TAIL ], - [ 35, Moves.SHELL_SMASH ], - [ 42, Moves.IRON_DEFENSE ], - [ 49, Moves.HYDRO_PUMP ], - [ 56, Moves.WAVE_CRASH ], + [ EVOLVE_MOVE, MoveId.FLASH_CANNON ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 9, MoveId.RAPID_SPIN ], + [ 12, MoveId.BITE ], + [ 15, MoveId.WATER_PULSE ], + [ 20, MoveId.PROTECT ], + [ 25, MoveId.RAIN_DANCE ], + [ 30, MoveId.AQUA_TAIL ], + [ 35, MoveId.SHELL_SMASH ], + [ 42, MoveId.IRON_DEFENSE ], + [ 49, MoveId.HYDRO_PUMP ], + [ 56, MoveId.WAVE_CRASH ], ], [Species.CATERPIE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 9, Moves.BUG_BITE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 9, MoveId.BUG_BITE ], ], [Species.METAPOD]: [ - [ EVOLVE_MOVE, Moves.HARDEN ], - [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.HARDEN ], + [ EVOLVE_MOVE, MoveId.HARDEN ], + [ RELEARN_MOVE, MoveId.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.HARDEN ], ], [Species.BUTTERFREE]: [ - [ EVOLVE_MOVE, Moves.GUST ], - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.HARDEN ], - [ 1, Moves.BUG_BITE ], - [ 4, Moves.SUPERSONIC ], - [ 8, Moves.CONFUSION ], - [ 12, Moves.POISON_POWDER ], - [ 12, Moves.STUN_SPORE ], - [ 12, Moves.SLEEP_POWDER ], - [ 16, Moves.PSYBEAM ], - [ 20, Moves.WHIRLWIND ], - [ 24, Moves.AIR_SLASH ], - [ 28, Moves.SAFEGUARD ], - [ 32, Moves.BUG_BUZZ ], - [ 36, Moves.TAILWIND ], - [ 40, Moves.RAGE_POWDER ], - [ 44, Moves.QUIVER_DANCE ], + [ EVOLVE_MOVE, MoveId.GUST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.BUG_BITE ], + [ 4, MoveId.SUPERSONIC ], + [ 8, MoveId.CONFUSION ], + [ 12, MoveId.POISON_POWDER ], + [ 12, MoveId.STUN_SPORE ], + [ 12, MoveId.SLEEP_POWDER ], + [ 16, MoveId.PSYBEAM ], + [ 20, MoveId.WHIRLWIND ], + [ 24, MoveId.AIR_SLASH ], + [ 28, MoveId.SAFEGUARD ], + [ 32, MoveId.BUG_BUZZ ], + [ 36, MoveId.TAILWIND ], + [ 40, MoveId.RAGE_POWDER ], + [ 44, MoveId.QUIVER_DANCE ], ], [Species.WEEDLE]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.STRING_SHOT ], - [ 9, Moves.BUG_BITE ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.STRING_SHOT ], + [ 9, MoveId.BUG_BITE ], ], [Species.KAKUNA]: [ - [ EVOLVE_MOVE, Moves.HARDEN ], - [ RELEARN_MOVE, Moves.POISON_STING ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.HARDEN ], + [ EVOLVE_MOVE, MoveId.HARDEN ], + [ RELEARN_MOVE, MoveId.POISON_STING ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.HARDEN ], ], [Species.BEEDRILL]: [ - [ EVOLVE_MOVE, Moves.TWINEEDLE ], - [ 1, Moves.POISON_STING ], // Previous Stage Move - [ 1, Moves.STRING_SHOT ], // Previous Stage Move - [ 1, Moves.HARDEN ], // Previous Stage Move - [ 1, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.FURY_ATTACK ], - [ 11, Moves.FURY_CUTTER ], - [ 14, Moves.RAGE ], - [ 17, Moves.PURSUIT ], - [ 20, Moves.FOCUS_ENERGY ], - [ 23, Moves.VENOSHOCK ], - [ 26, Moves.ASSURANCE ], - [ 29, Moves.TOXIC_SPIKES ], - [ 32, Moves.PIN_MISSILE ], - [ 35, Moves.POISON_JAB ], - [ 38, Moves.AGILITY ], - [ 41, Moves.ENDEAVOR ], - [ 44, Moves.FELL_STINGER ], + [ EVOLVE_MOVE, MoveId.TWINEEDLE ], + [ 1, MoveId.POISON_STING ], // Previous Stage Move + [ 1, MoveId.STRING_SHOT ], // Previous Stage Move + [ 1, MoveId.HARDEN ], // Previous Stage Move + [ 1, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.FURY_ATTACK ], + [ 11, MoveId.FURY_CUTTER ], + [ 14, MoveId.RAGE ], + [ 17, MoveId.PURSUIT ], + [ 20, MoveId.FOCUS_ENERGY ], + [ 23, MoveId.VENOSHOCK ], + [ 26, MoveId.ASSURANCE ], + [ 29, MoveId.TOXIC_SPIKES ], + [ 32, MoveId.PIN_MISSILE ], + [ 35, MoveId.POISON_JAB ], + [ 38, MoveId.AGILITY ], + [ 41, MoveId.ENDEAVOR ], + [ 44, MoveId.FELL_STINGER ], ], [Species.PIDGEY]: [ - [ 1, Moves.TACKLE ], - [ 5, Moves.SAND_ATTACK ], - [ 9, Moves.GUST ], - [ 13, Moves.QUICK_ATTACK ], - [ 17, Moves.WHIRLWIND ], - [ 21, Moves.TWISTER ], - [ 25, Moves.FEATHER_DANCE ], - [ 29, Moves.AGILITY ], - [ 33, Moves.WING_ATTACK ], - [ 37, Moves.ROOST ], - [ 41, Moves.TAILWIND ], - [ 45, Moves.AERIAL_ACE ], - [ 49, Moves.AIR_SLASH ], - [ 53, Moves.HURRICANE ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.SAND_ATTACK ], + [ 9, MoveId.GUST ], + [ 13, MoveId.QUICK_ATTACK ], + [ 17, MoveId.WHIRLWIND ], + [ 21, MoveId.TWISTER ], + [ 25, MoveId.FEATHER_DANCE ], + [ 29, MoveId.AGILITY ], + [ 33, MoveId.WING_ATTACK ], + [ 37, MoveId.ROOST ], + [ 41, MoveId.TAILWIND ], + [ 45, MoveId.AERIAL_ACE ], + [ 49, MoveId.AIR_SLASH ], + [ 53, MoveId.HURRICANE ], ], [Species.PIDGEOTTO]: [ - [ 1, Moves.GUST ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 5, Moves.SAND_ATTACK ], - [ 9, Moves.GUST ], - [ 13, Moves.QUICK_ATTACK ], - [ 17, Moves.WHIRLWIND ], - [ 22, Moves.TWISTER ], - [ 27, Moves.FEATHER_DANCE ], - [ 32, Moves.AGILITY ], - [ 37, Moves.WING_ATTACK ], - [ 42, Moves.ROOST ], - [ 47, Moves.TAILWIND ], - [ 52, Moves.AERIAL_ACE ], - [ 57, Moves.AIR_SLASH ], - [ 62, Moves.HURRICANE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.SAND_ATTACK ], + [ 9, MoveId.GUST ], + [ 13, MoveId.QUICK_ATTACK ], + [ 17, MoveId.WHIRLWIND ], + [ 22, MoveId.TWISTER ], + [ 27, MoveId.FEATHER_DANCE ], + [ 32, MoveId.AGILITY ], + [ 37, MoveId.WING_ATTACK ], + [ 42, MoveId.ROOST ], + [ 47, MoveId.TAILWIND ], + [ 52, MoveId.AERIAL_ACE ], + [ 57, MoveId.AIR_SLASH ], + [ 62, MoveId.HURRICANE ], ], [Species.PIDGEOT]: [ - [ 1, Moves.GUST ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.HURRICANE ], - [ 5, Moves.SAND_ATTACK ], - [ 9, Moves.GUST ], - [ 17, Moves.WHIRLWIND ], - [ 22, Moves.TWISTER ], - [ 27, Moves.FEATHER_DANCE ], - [ 32, Moves.AGILITY ], - [ 38, Moves.WING_ATTACK ], - [ 44, Moves.ROOST ], - [ 50, Moves.TAILWIND ], - [ 56, Moves.AERIAL_ACE ], - [ 62, Moves.AIR_SLASH ], - [ 68, Moves.HURRICANE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.HURRICANE ], + [ 5, MoveId.SAND_ATTACK ], + [ 9, MoveId.GUST ], + [ 17, MoveId.WHIRLWIND ], + [ 22, MoveId.TWISTER ], + [ 27, MoveId.FEATHER_DANCE ], + [ 32, MoveId.AGILITY ], + [ 38, MoveId.WING_ATTACK ], + [ 44, MoveId.ROOST ], + [ 50, MoveId.TAILWIND ], + [ 56, MoveId.AERIAL_ACE ], + [ 62, MoveId.AIR_SLASH ], + [ 68, MoveId.HURRICANE ], ], [Species.RATTATA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 4, Moves.QUICK_ATTACK ], - [ 7, Moves.FOCUS_ENERGY ], - [ 10, Moves.BITE ], - [ 13, Moves.LASER_FOCUS ], - [ 16, Moves.TAKE_DOWN ], - [ 19, Moves.ASSURANCE ], - [ 22, Moves.CRUNCH ], - [ 25, Moves.SUCKER_PUNCH ], - [ 28, Moves.SUPER_FANG ], - [ 31, Moves.DOUBLE_EDGE ], - [ 34, Moves.ENDEAVOR ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 4, MoveId.QUICK_ATTACK ], + [ 7, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.BITE ], + [ 13, MoveId.LASER_FOCUS ], + [ 16, MoveId.TAKE_DOWN ], + [ 19, MoveId.ASSURANCE ], + [ 22, MoveId.CRUNCH ], + [ 25, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.SUPER_FANG ], + [ 31, MoveId.DOUBLE_EDGE ], + [ 34, MoveId.ENDEAVOR ], ], [Species.RATICATE]: [ - [ EVOLVE_MOVE, Moves.SCARY_FACE ], - [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 10, Moves.BITE ], - [ 13, Moves.LASER_FOCUS ], - [ 16, Moves.TAKE_DOWN ], - [ 19, Moves.ASSURANCE ], - [ 24, Moves.CRUNCH ], - [ 29, Moves.SUCKER_PUNCH ], - [ 34, Moves.SUPER_FANG ], - [ 39, Moves.DOUBLE_EDGE ], - [ 44, Moves.ENDEAVOR ], + [ EVOLVE_MOVE, MoveId.SCARY_FACE ], + [ 1, MoveId.SWORDS_DANCE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.BITE ], + [ 13, MoveId.LASER_FOCUS ], + [ 16, MoveId.TAKE_DOWN ], + [ 19, MoveId.ASSURANCE ], + [ 24, MoveId.CRUNCH ], + [ 29, MoveId.SUCKER_PUNCH ], + [ 34, MoveId.SUPER_FANG ], + [ 39, MoveId.DOUBLE_EDGE ], + [ 44, MoveId.ENDEAVOR ], ], [Species.SPEAROW]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 4, Moves.LEER ], - [ 8, Moves.ASSURANCE ], - [ 11, Moves.FURY_ATTACK ], - [ 15, Moves.AERIAL_ACE ], - [ 18, Moves.WING_ATTACK ], - [ 22, Moves.TAKE_DOWN ], - [ 25, Moves.AGILITY ], - [ 29, Moves.FOCUS_ENERGY ], - [ 32, Moves.ROOST ], - [ 36, Moves.DRILL_PECK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 4, MoveId.LEER ], + [ 8, MoveId.ASSURANCE ], + [ 11, MoveId.FURY_ATTACK ], + [ 15, MoveId.AERIAL_ACE ], + [ 18, MoveId.WING_ATTACK ], + [ 22, MoveId.TAKE_DOWN ], + [ 25, MoveId.AGILITY ], + [ 29, MoveId.FOCUS_ENERGY ], + [ 32, MoveId.ROOST ], + [ 36, MoveId.DRILL_PECK ], ], [Species.FEAROW]: [ - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.ASSURANCE ], - [ 1, Moves.PLUCK ], - [ 1, Moves.DRILL_RUN ], - [ 1, Moves.PURSUIT ], - [ 4, Moves.LEER ], - [ 8, Moves.ASSURANCE ], - [ 11, Moves.FURY_ATTACK ], - [ 15, Moves.AERIAL_ACE ], - [ 18, Moves.WING_ATTACK ], - [ 23, Moves.TAKE_DOWN ], - [ 27, Moves.AGILITY ], - [ 32, Moves.FOCUS_ENERGY ], - [ 36, Moves.ROOST ], - [ 41, Moves.DRILL_PECK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.ASSURANCE ], + [ 1, MoveId.PLUCK ], + [ 1, MoveId.DRILL_RUN ], + [ 1, MoveId.PURSUIT ], + [ 4, MoveId.LEER ], + [ 8, MoveId.ASSURANCE ], + [ 11, MoveId.FURY_ATTACK ], + [ 15, MoveId.AERIAL_ACE ], + [ 18, MoveId.WING_ATTACK ], + [ 23, MoveId.TAKE_DOWN ], + [ 27, MoveId.AGILITY ], + [ 32, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.ROOST ], + [ 41, MoveId.DRILL_PECK ], ], [Species.EKANS]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 4, Moves.POISON_STING ], - [ 9, Moves.BITE ], - [ 12, Moves.GLARE ], - [ 17, Moves.SCREECH ], - [ 20, Moves.ACID ], - [ 25, Moves.SWALLOW ], - [ 25, Moves.STOCKPILE ], - [ 25, Moves.SPIT_UP ], - [ 28, Moves.ACID_SPRAY ], - [ 33, Moves.SLUDGE_BOMB ], - [ 36, Moves.GASTRO_ACID ], - [ 38, Moves.BELCH ], - [ 41, Moves.HAZE ], - [ 44, Moves.COIL ], - [ 49, Moves.GUNK_SHOT ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 4, MoveId.POISON_STING ], + [ 9, MoveId.BITE ], + [ 12, MoveId.GLARE ], + [ 17, MoveId.SCREECH ], + [ 20, MoveId.ACID ], + [ 25, MoveId.SWALLOW ], + [ 25, MoveId.STOCKPILE ], + [ 25, MoveId.SPIT_UP ], + [ 28, MoveId.ACID_SPRAY ], + [ 33, MoveId.SLUDGE_BOMB ], + [ 36, MoveId.GASTRO_ACID ], + [ 38, MoveId.BELCH ], + [ 41, MoveId.HAZE ], + [ 44, MoveId.COIL ], + [ 49, MoveId.GUNK_SHOT ], ], [Species.ARBOK]: [ - [ EVOLVE_MOVE, Moves.CRUNCH ], - [ 1, Moves.WRAP ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 12, Moves.GLARE ], - [ 17, Moves.SCREECH ], - [ 20, Moves.ACID ], - [ 27, Moves.STOCKPILE ], - [ 27, Moves.SPIT_UP ], - [ 27, Moves.SWALLOW ], - [ 32, Moves.ACID_SPRAY ], - [ 39, Moves.SLUDGE_BOMB ], - [ 44, Moves.GASTRO_ACID ], - [ 48, Moves.BELCH ], - [ 51, Moves.HAZE ], - [ 56, Moves.COIL ], - [ 63, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 12, MoveId.GLARE ], + [ 17, MoveId.SCREECH ], + [ 20, MoveId.ACID ], + [ 27, MoveId.STOCKPILE ], + [ 27, MoveId.SPIT_UP ], + [ 27, MoveId.SWALLOW ], + [ 32, MoveId.ACID_SPRAY ], + [ 39, MoveId.SLUDGE_BOMB ], + [ 44, MoveId.GASTRO_ACID ], + [ 48, MoveId.BELCH ], + [ 51, MoveId.HAZE ], + [ 56, MoveId.COIL ], + [ 63, MoveId.GUNK_SHOT ], ], [Species.PIKACHU]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], [Species.RAICHU]: [ - [ EVOLVE_MOVE, Moves.ZIPPY_ZAP ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.THUNDER ], - [ 1, Moves.AGILITY ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.SPARK ], - [ 1, Moves.IRON_TAIL ], - [ 1, Moves.FEINT ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.DISCHARGE ], - [ 1, Moves.ELECTRO_BALL ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 1, Moves.THUNDER_PUNCH ], - [ 5, Moves.THUNDERBOLT ], - [ 50, Moves.PIKA_PAPOW ], + [ EVOLVE_MOVE, MoveId.ZIPPY_ZAP ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.THUNDER ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SPARK ], + [ 1, MoveId.IRON_TAIL ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.DISCHARGE ], + [ 1, MoveId.ELECTRO_BALL ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 5, MoveId.THUNDERBOLT ], + [ 50, MoveId.PIKA_PAPOW ], ], [Species.SANDSHREW]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.DEFENSE_CURL ], - [ 3, Moves.POISON_STING ], - [ 6, Moves.SAND_ATTACK ], - [ 9, Moves.ROLLOUT ], - [ 12, Moves.FURY_CUTTER ], - [ 15, Moves.RAPID_SPIN ], - [ 18, Moves.BULLDOZE ], - [ 21, Moves.SWIFT ], - [ 24, Moves.FURY_SWIPES ], - [ 27, Moves.AGILITY ], - [ 30, Moves.SLASH ], - [ 33, Moves.DIG ], - [ 36, Moves.GYRO_BALL ], - [ 39, Moves.SWORDS_DANCE ], - [ 42, Moves.SANDSTORM ], - [ 45, Moves.EARTHQUAKE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.DEFENSE_CURL ], + [ 3, MoveId.POISON_STING ], + [ 6, MoveId.SAND_ATTACK ], + [ 9, MoveId.ROLLOUT ], + [ 12, MoveId.FURY_CUTTER ], + [ 15, MoveId.RAPID_SPIN ], + [ 18, MoveId.BULLDOZE ], + [ 21, MoveId.SWIFT ], + [ 24, MoveId.FURY_SWIPES ], + [ 27, MoveId.AGILITY ], + [ 30, MoveId.SLASH ], + [ 33, MoveId.DIG ], + [ 36, MoveId.GYRO_BALL ], + [ 39, MoveId.SWORDS_DANCE ], + [ 42, MoveId.SANDSTORM ], + [ 45, MoveId.EARTHQUAKE ], ], [Species.SANDSLASH]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.CRUSH_CLAW ], - [ 1, Moves.AGILITY ], // Previous Stage Move - [ 9, Moves.ROLLOUT ], - [ 12, Moves.FURY_CUTTER ], - [ 15, Moves.RAPID_SPIN ], - [ 18, Moves.BULLDOZE ], - [ 21, Moves.SWIFT ], - [ 26, Moves.FURY_SWIPES ], - [ 31, Moves.SAND_TOMB ], - [ 36, Moves.SLASH ], - [ 41, Moves.DIG ], - [ 46, Moves.GYRO_BALL ], - [ 51, Moves.SWORDS_DANCE ], - [ 56, Moves.SANDSTORM ], - [ 61, Moves.EARTHQUAKE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.CRUSH_CLAW ], + [ 1, MoveId.AGILITY ], // Previous Stage Move + [ 9, MoveId.ROLLOUT ], + [ 12, MoveId.FURY_CUTTER ], + [ 15, MoveId.RAPID_SPIN ], + [ 18, MoveId.BULLDOZE ], + [ 21, MoveId.SWIFT ], + [ 26, MoveId.FURY_SWIPES ], + [ 31, MoveId.SAND_TOMB ], + [ 36, MoveId.SLASH ], + [ 41, MoveId.DIG ], + [ 46, MoveId.GYRO_BALL ], + [ 51, MoveId.SWORDS_DANCE ], + [ 56, MoveId.SANDSTORM ], + [ 61, MoveId.EARTHQUAKE ], ], [Species.NIDORAN_F]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.GROWL ], - [ 5, Moves.SCRATCH ], - [ 10, Moves.TAIL_WHIP ], - [ 15, Moves.FURY_SWIPES ], - [ 20, Moves.TOXIC_SPIKES ], - [ 25, Moves.DOUBLE_KICK ], - [ 30, Moves.BITE ], - [ 35, Moves.HELPING_HAND ], - [ 40, Moves.TOXIC ], - [ 45, Moves.FLATTER ], - [ 50, Moves.CRUNCH ], - [ 55, Moves.EARTH_POWER ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.SCRATCH ], + [ 10, MoveId.TAIL_WHIP ], + [ 15, MoveId.FURY_SWIPES ], + [ 20, MoveId.TOXIC_SPIKES ], + [ 25, MoveId.DOUBLE_KICK ], + [ 30, MoveId.BITE ], + [ 35, MoveId.HELPING_HAND ], + [ 40, MoveId.TOXIC ], + [ 45, MoveId.FLATTER ], + [ 50, MoveId.CRUNCH ], + [ 55, MoveId.EARTH_POWER ], ], [Species.NIDORINA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.GROWL ], - [ 15, Moves.FURY_SWIPES ], - [ 22, Moves.TOXIC_SPIKES ], - [ 29, Moves.DOUBLE_KICK ], - [ 36, Moves.BITE ], - [ 43, Moves.HELPING_HAND ], - [ 50, Moves.TOXIC ], - [ 57, Moves.FLATTER ], - [ 64, Moves.CRUNCH ], - [ 71, Moves.EARTH_POWER ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.GROWL ], + [ 15, MoveId.FURY_SWIPES ], + [ 22, MoveId.TOXIC_SPIKES ], + [ 29, MoveId.DOUBLE_KICK ], + [ 36, MoveId.BITE ], + [ 43, MoveId.HELPING_HAND ], + [ 50, MoveId.TOXIC ], + [ 57, MoveId.FLATTER ], + [ 64, MoveId.CRUNCH ], + [ 71, MoveId.EARTH_POWER ], ], [Species.NIDOQUEEN]: [ - [ EVOLVE_MOVE, Moves.SUPERPOWER ], - [ 1, Moves.SLUDGE_WAVE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.TOXIC ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.FLATTER ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.EARTH_POWER ], + [ EVOLVE_MOVE, MoveId.SUPERPOWER ], + [ 1, MoveId.SLUDGE_WAVE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.FLATTER ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.EARTH_POWER ], ], [Species.NIDORAN_M]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 5, Moves.PECK ], - [ 10, Moves.FOCUS_ENERGY ], - [ 15, Moves.FURY_ATTACK ], - [ 20, Moves.TOXIC_SPIKES ], - [ 25, Moves.DOUBLE_KICK ], - [ 30, Moves.HORN_ATTACK ], - [ 35, Moves.HELPING_HAND ], - [ 40, Moves.TOXIC ], - [ 45, Moves.FLATTER ], - [ 50, Moves.POISON_JAB ], - [ 55, Moves.EARTH_POWER ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 5, MoveId.PECK ], + [ 10, MoveId.FOCUS_ENERGY ], + [ 15, MoveId.FURY_ATTACK ], + [ 20, MoveId.TOXIC_SPIKES ], + [ 25, MoveId.DOUBLE_KICK ], + [ 30, MoveId.HORN_ATTACK ], + [ 35, MoveId.HELPING_HAND ], + [ 40, MoveId.TOXIC ], + [ 45, MoveId.FLATTER ], + [ 50, MoveId.POISON_JAB ], + [ 55, MoveId.EARTH_POWER ], ], [Species.NIDORINO]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 15, Moves.FURY_ATTACK ], - [ 22, Moves.TOXIC_SPIKES ], - [ 29, Moves.DOUBLE_KICK ], - [ 36, Moves.HORN_ATTACK ], - [ 43, Moves.HELPING_HAND ], - [ 50, Moves.TOXIC ], - [ 57, Moves.FLATTER ], - [ 64, Moves.POISON_JAB ], - [ 71, Moves.EARTH_POWER ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 15, MoveId.FURY_ATTACK ], + [ 22, MoveId.TOXIC_SPIKES ], + [ 29, MoveId.DOUBLE_KICK ], + [ 36, MoveId.HORN_ATTACK ], + [ 43, MoveId.HELPING_HAND ], + [ 50, MoveId.TOXIC ], + [ 57, MoveId.FLATTER ], + [ 64, MoveId.POISON_JAB ], + [ 71, MoveId.EARTH_POWER ], ], [Species.NIDOKING]: [ - [ EVOLVE_MOVE, Moves.MEGAHORN ], - [ 1, Moves.SLUDGE_WAVE ], - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.HORN_ATTACK ], - [ 1, Moves.FURY_ATTACK ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.TOXIC ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.FLATTER ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.POISON_JAB ], - [ 1, Moves.EARTH_POWER ], + [ EVOLVE_MOVE, MoveId.MEGAHORN ], + [ 1, MoveId.SLUDGE_WAVE ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.HORN_ATTACK ], + [ 1, MoveId.FURY_ATTACK ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.FLATTER ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.POISON_JAB ], + [ 1, MoveId.EARTH_POWER ], ], [Species.CLEFAIRY]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.SING ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SPLASH ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.SPOTLIGHT ], - [ 4, Moves.STORED_POWER ], - [ 8, Moves.ENCORE ], - [ 12, Moves.AFTER_YOU ], - [ 16, Moves.LIFE_DEW ], - [ 20, Moves.METRONOME ], - [ 24, Moves.MOONLIGHT ], - [ 28, Moves.GRAVITY ], - [ 32, Moves.METEOR_MASH ], - [ 36, Moves.FOLLOW_ME ], - [ 40, Moves.COSMIC_POWER ], - [ 44, Moves.MOONBLAST ], - [ 48, Moves.HEALING_WISH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SING ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.SPOTLIGHT ], + [ 4, MoveId.STORED_POWER ], + [ 8, MoveId.ENCORE ], + [ 12, MoveId.AFTER_YOU ], + [ 16, MoveId.LIFE_DEW ], + [ 20, MoveId.METRONOME ], + [ 24, MoveId.MOONLIGHT ], + [ 28, MoveId.GRAVITY ], + [ 32, MoveId.METEOR_MASH ], + [ 36, MoveId.FOLLOW_ME ], + [ 40, MoveId.COSMIC_POWER ], + [ 44, MoveId.MOONBLAST ], + [ 48, MoveId.HEALING_WISH ], ], [Species.CLEFABLE]: [ - [ RELEARN_MOVE, Moves.POUND ], - [ RELEARN_MOVE, Moves.GROWL ], - [ RELEARN_MOVE, Moves.SING ], - [ RELEARN_MOVE, Moves.DEFENSE_CURL ], - [ RELEARN_MOVE, Moves.SPLASH ], - [ RELEARN_MOVE, Moves.SWEET_KISS ], - [ RELEARN_MOVE, Moves.CHARM ], - [ RELEARN_MOVE, Moves.ENCORE ], - [ RELEARN_MOVE, Moves.MOONLIGHT ], - [ RELEARN_MOVE, Moves.FOLLOW_ME ], - [ RELEARN_MOVE, Moves.COSMIC_POWER ], - [ RELEARN_MOVE, Moves.GRAVITY ], - [ RELEARN_MOVE, Moves.HEALING_WISH ], - [ RELEARN_MOVE, Moves.COPYCAT ], - [ RELEARN_MOVE, Moves.AFTER_YOU ], - [ RELEARN_MOVE, Moves.STORED_POWER ], - [ RELEARN_MOVE, Moves.DISARMING_VOICE ], - [ 1, Moves.METRONOME ], - [ 1, Moves.METEOR_MASH ], - [ 1, Moves.MOONBLAST ], - [ 1, Moves.LIFE_DEW ], - [ 1, Moves.SPOTLIGHT ], + [ RELEARN_MOVE, MoveId.POUND ], + [ RELEARN_MOVE, MoveId.GROWL ], + [ RELEARN_MOVE, MoveId.SING ], + [ RELEARN_MOVE, MoveId.DEFENSE_CURL ], + [ RELEARN_MOVE, MoveId.SPLASH ], + [ RELEARN_MOVE, MoveId.SWEET_KISS ], + [ RELEARN_MOVE, MoveId.CHARM ], + [ RELEARN_MOVE, MoveId.ENCORE ], + [ RELEARN_MOVE, MoveId.MOONLIGHT ], + [ RELEARN_MOVE, MoveId.FOLLOW_ME ], + [ RELEARN_MOVE, MoveId.COSMIC_POWER ], + [ RELEARN_MOVE, MoveId.GRAVITY ], + [ RELEARN_MOVE, MoveId.HEALING_WISH ], + [ RELEARN_MOVE, MoveId.COPYCAT ], + [ RELEARN_MOVE, MoveId.AFTER_YOU ], + [ RELEARN_MOVE, MoveId.STORED_POWER ], + [ RELEARN_MOVE, MoveId.DISARMING_VOICE ], + [ 1, MoveId.METRONOME ], + [ 1, MoveId.METEOR_MASH ], + [ 1, MoveId.MOONBLAST ], + [ 1, MoveId.LIFE_DEW ], + [ 1, MoveId.SPOTLIGHT ], ], [Species.VULPIX]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.EMBER ], - [ 4, Moves.DISABLE ], - [ 8, Moves.QUICK_ATTACK ], - [ 12, Moves.SPITE ], - [ 16, Moves.INCINERATE ], - [ 20, Moves.CONFUSE_RAY ], - [ 24, Moves.WILL_O_WISP ], - [ 28, Moves.EXTRASENSORY ], - [ 32, Moves.FLAMETHROWER ], - [ 36, Moves.IMPRISON ], - [ 40, Moves.FIRE_SPIN ], - [ 44, Moves.SAFEGUARD ], - [ 48, Moves.INFERNO ], - [ 52, Moves.FIRE_BLAST ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.DISABLE ], + [ 8, MoveId.QUICK_ATTACK ], + [ 12, MoveId.SPITE ], + [ 16, MoveId.INCINERATE ], + [ 20, MoveId.CONFUSE_RAY ], + [ 24, MoveId.WILL_O_WISP ], + [ 28, MoveId.EXTRASENSORY ], + [ 32, MoveId.FLAMETHROWER ], + [ 36, MoveId.IMPRISON ], + [ 40, MoveId.FIRE_SPIN ], + [ 44, MoveId.SAFEGUARD ], + [ 48, MoveId.INFERNO ], + [ 52, MoveId.FIRE_BLAST ], ], [Species.NINETALES]: [ - [ RELEARN_MOVE, Moves.DISABLE ], - [ RELEARN_MOVE, Moves.EMBER ], - [ RELEARN_MOVE, Moves.FIRE_SPIN ], - [ RELEARN_MOVE, Moves.CONFUSE_RAY ], - [ RELEARN_MOVE, Moves.FIRE_BLAST ], - [ RELEARN_MOVE, Moves.SPITE ], - [ RELEARN_MOVE, Moves.SAFEGUARD ], - [ RELEARN_MOVE, Moves.WILL_O_WISP ], - [ RELEARN_MOVE, Moves.IMPRISON ], - [ RELEARN_MOVE, Moves.EXTRASENSORY ], - [ RELEARN_MOVE, Moves.NASTY_PLOT ], - [ RELEARN_MOVE, Moves.INCINERATE ], - [ RELEARN_MOVE, Moves.INFERNO ], - [ 1, Moves.FLAMETHROWER ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.QUICK_ATTACK ], + [ RELEARN_MOVE, MoveId.DISABLE ], + [ RELEARN_MOVE, MoveId.EMBER ], + [ RELEARN_MOVE, MoveId.FIRE_SPIN ], + [ RELEARN_MOVE, MoveId.CONFUSE_RAY ], + [ RELEARN_MOVE, MoveId.FIRE_BLAST ], + [ RELEARN_MOVE, MoveId.SPITE ], + [ RELEARN_MOVE, MoveId.SAFEGUARD ], + [ RELEARN_MOVE, MoveId.WILL_O_WISP ], + [ RELEARN_MOVE, MoveId.IMPRISON ], + [ RELEARN_MOVE, MoveId.EXTRASENSORY ], + [ RELEARN_MOVE, MoveId.NASTY_PLOT ], + [ RELEARN_MOVE, MoveId.INCINERATE ], + [ RELEARN_MOVE, MoveId.INFERNO ], + [ 1, MoveId.FLAMETHROWER ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.QUICK_ATTACK ], ], [Species.JIGGLYPUFF]: [ - [ 1, Moves.POUND ], - [ 1, Moves.SING ], - [ 1, Moves.DISABLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.DISARMING_VOICE ], - [ 4, Moves.ECHOED_VOICE ], - [ 8, Moves.COVET ], - [ 12, Moves.STOCKPILE ], - [ 12, Moves.SPIT_UP ], - [ 12, Moves.SWALLOW ], - [ 16, Moves.ROUND ], - [ 20, Moves.REST ], - [ 24, Moves.BODY_SLAM ], - [ 28, Moves.MIMIC ], - [ 32, Moves.GYRO_BALL ], - [ 36, Moves.HYPER_VOICE ], - [ 44, Moves.DOUBLE_EDGE ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SING ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 4, MoveId.ECHOED_VOICE ], + [ 8, MoveId.COVET ], + [ 12, MoveId.STOCKPILE ], + [ 12, MoveId.SPIT_UP ], + [ 12, MoveId.SWALLOW ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.REST ], + [ 24, MoveId.BODY_SLAM ], + [ 28, MoveId.MIMIC ], + [ 32, MoveId.GYRO_BALL ], + [ 36, MoveId.HYPER_VOICE ], + [ 44, MoveId.DOUBLE_EDGE ], ], [Species.WIGGLYTUFF]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.SING ], - [ 1, Moves.DISABLE ], - [ 1, Moves.MIMIC ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.REST ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.STOCKPILE ], - [ 1, Moves.SPIT_UP ], - [ 1, Moves.SWALLOW ], - [ 1, Moves.HYPER_VOICE ], - [ 1, Moves.COVET ], - [ 1, Moves.GYRO_BALL ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.ROUND ], - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.DISARMING_VOICE ], - [ 5, Moves.PLAY_ROUGH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.BODY_SLAM ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.SING ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.MIMIC ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.REST ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.STOCKPILE ], + [ 1, MoveId.SPIT_UP ], + [ 1, MoveId.SWALLOW ], + [ 1, MoveId.HYPER_VOICE ], + [ 1, MoveId.COVET ], + [ 1, MoveId.GYRO_BALL ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.ROUND ], + [ 1, MoveId.ECHOED_VOICE ], + [ 1, MoveId.DISARMING_VOICE ], + [ 5, MoveId.PLAY_ROUGH ], ], [Species.ZUBAT]: [ - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ABSORB ], - [ 5, Moves.ASTONISH ], - [ 10, Moves.MEAN_LOOK ], - [ 15, Moves.POISON_FANG ], - [ 20, Moves.QUICK_GUARD ], - [ 25, Moves.AIR_CUTTER ], - [ 30, Moves.BITE ], - [ 35, Moves.HAZE ], - [ 40, Moves.VENOSHOCK ], - [ 45, Moves.CONFUSE_RAY ], - [ 50, Moves.AIR_SLASH ], - [ 55, Moves.LEECH_LIFE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ABSORB ], + [ 5, MoveId.ASTONISH ], + [ 10, MoveId.MEAN_LOOK ], + [ 15, MoveId.POISON_FANG ], + [ 20, MoveId.QUICK_GUARD ], + [ 25, MoveId.AIR_CUTTER ], + [ 30, MoveId.BITE ], + [ 35, MoveId.HAZE ], + [ 40, MoveId.VENOSHOCK ], + [ 45, MoveId.CONFUSE_RAY ], + [ 50, MoveId.AIR_SLASH ], + [ 55, MoveId.LEECH_LIFE ], ], [Species.GOLBAT]: [ - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ABSORB ], - [ 1, Moves.SCREECH ], - [ 1, Moves.MEAN_LOOK ], - [ 1, Moves.ASTONISH ], - [ 15, Moves.POISON_FANG ], - [ 20, Moves.QUICK_GUARD ], - [ 27, Moves.AIR_CUTTER ], - [ 34, Moves.BITE ], - [ 41, Moves.HAZE ], - [ 48, Moves.VENOSHOCK ], - [ 55, Moves.CONFUSE_RAY ], - [ 62, Moves.AIR_SLASH ], - [ 69, Moves.LEECH_LIFE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.SCREECH ], + [ 1, MoveId.MEAN_LOOK ], + [ 1, MoveId.ASTONISH ], + [ 15, MoveId.POISON_FANG ], + [ 20, MoveId.QUICK_GUARD ], + [ 27, MoveId.AIR_CUTTER ], + [ 34, MoveId.BITE ], + [ 41, MoveId.HAZE ], + [ 48, MoveId.VENOSHOCK ], + [ 55, MoveId.CONFUSE_RAY ], + [ 62, MoveId.AIR_SLASH ], + [ 69, MoveId.LEECH_LIFE ], ], [Species.ODDISH]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 4, Moves.ACID ], - [ 8, Moves.SWEET_SCENT ], - [ 12, Moves.MEGA_DRAIN ], - [ 14, Moves.POISON_POWDER ], - [ 16, Moves.STUN_SPORE ], - [ 18, Moves.SLEEP_POWDER ], - [ 20, Moves.GIGA_DRAIN ], - [ 24, Moves.TOXIC ], - [ 28, Moves.MOONBLAST ], - [ 32, Moves.GRASSY_TERRAIN ], - [ 36, Moves.MOONLIGHT ], - [ 40, Moves.PETAL_DANCE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 4, MoveId.ACID ], + [ 8, MoveId.SWEET_SCENT ], + [ 12, MoveId.MEGA_DRAIN ], + [ 14, MoveId.POISON_POWDER ], + [ 16, MoveId.STUN_SPORE ], + [ 18, MoveId.SLEEP_POWDER ], + [ 20, MoveId.GIGA_DRAIN ], + [ 24, MoveId.TOXIC ], + [ 28, MoveId.MOONBLAST ], + [ 32, MoveId.GRASSY_TERRAIN ], + [ 36, MoveId.MOONLIGHT ], + [ 40, MoveId.PETAL_DANCE ], ], [Species.GLOOM]: [ - [ 1, Moves.ACID ], - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.SWEET_SCENT ], - [ 12, Moves.MEGA_DRAIN ], - [ 14, Moves.POISON_POWDER ], - [ 16, Moves.STUN_SPORE ], - [ 18, Moves.SLEEP_POWDER ], - [ 20, Moves.GIGA_DRAIN ], - [ 26, Moves.TOXIC ], - [ 32, Moves.MOONBLAST ], - [ 38, Moves.GRASSY_TERRAIN ], - [ 44, Moves.MOONLIGHT ], - [ 50, Moves.PETAL_DANCE ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.SWEET_SCENT ], + [ 12, MoveId.MEGA_DRAIN ], + [ 14, MoveId.POISON_POWDER ], + [ 16, MoveId.STUN_SPORE ], + [ 18, MoveId.SLEEP_POWDER ], + [ 20, MoveId.GIGA_DRAIN ], + [ 26, MoveId.TOXIC ], + [ 32, MoveId.MOONBLAST ], + [ 38, MoveId.GRASSY_TERRAIN ], + [ 44, MoveId.MOONLIGHT ], + [ 50, MoveId.PETAL_DANCE ], ], [Species.VILEPLUME]: [ - [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], - [ 1, Moves.ACID ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.PETAL_DANCE ], - [ 1, Moves.TOXIC ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.AROMATHERAPY ], - [ 1, Moves.GRASSY_TERRAIN ], - [ 1, Moves.MOONBLAST ], + [ EVOLVE_MOVE, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.PETAL_DANCE ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.AROMATHERAPY ], + [ 1, MoveId.GRASSY_TERRAIN ], + [ 1, MoveId.MOONBLAST ], ], [Species.PARAS]: [ - [ 1, Moves.SCRATCH ], - [ 6, Moves.POISON_POWDER ], - [ 6, Moves.STUN_SPORE ], - [ 11, Moves.ABSORB ], - [ 17, Moves.FURY_CUTTER ], - [ 22, Moves.SPORE ], - [ 27, Moves.SLASH ], - [ 33, Moves.GROWTH ], - [ 38, Moves.GIGA_DRAIN ], - [ 43, Moves.AROMATHERAPY ], - [ 49, Moves.RAGE_POWDER ], - [ 54, Moves.X_SCISSOR ], + [ 1, MoveId.SCRATCH ], + [ 6, MoveId.POISON_POWDER ], + [ 6, MoveId.STUN_SPORE ], + [ 11, MoveId.ABSORB ], + [ 17, MoveId.FURY_CUTTER ], + [ 22, MoveId.SPORE ], + [ 27, MoveId.SLASH ], + [ 33, MoveId.GROWTH ], + [ 38, MoveId.GIGA_DRAIN ], + [ 43, MoveId.AROMATHERAPY ], + [ 49, MoveId.RAGE_POWDER ], + [ 54, MoveId.X_SCISSOR ], ], [Species.PARASECT]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.ABSORB ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.CROSS_POISON ], - [ 6, Moves.POISON_POWDER ], - [ 6, Moves.STUN_SPORE ], - [ 11, Moves.ABSORB ], - [ 17, Moves.FURY_CUTTER ], - [ 22, Moves.SPORE ], - [ 29, Moves.SLASH ], - [ 37, Moves.GROWTH ], - [ 44, Moves.GIGA_DRAIN ], - [ 51, Moves.AROMATHERAPY ], - [ 59, Moves.RAGE_POWDER ], - [ 66, Moves.X_SCISSOR ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.CROSS_POISON ], + [ 6, MoveId.POISON_POWDER ], + [ 6, MoveId.STUN_SPORE ], + [ 11, MoveId.ABSORB ], + [ 17, MoveId.FURY_CUTTER ], + [ 22, MoveId.SPORE ], + [ 29, MoveId.SLASH ], + [ 37, MoveId.GROWTH ], + [ 44, MoveId.GIGA_DRAIN ], + [ 51, MoveId.AROMATHERAPY ], + [ 59, MoveId.RAGE_POWDER ], + [ 66, MoveId.X_SCISSOR ], ], [Species.VENONAT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DISABLE ], - [ 5, Moves.SUPERSONIC ], - [ 11, Moves.CONFUSION ], - [ 13, Moves.POISON_POWDER ], - [ 17, Moves.PSYBEAM ], - [ 23, Moves.STUN_SPORE ], - [ 25, Moves.BUG_BUZZ ], - [ 29, Moves.SLEEP_POWDER ], - [ 35, Moves.LEECH_LIFE ], - [ 37, Moves.ZEN_HEADBUTT ], - [ 41, Moves.POISON_FANG ], - [ 47, Moves.PSYCHIC ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DISABLE ], + [ 5, MoveId.SUPERSONIC ], + [ 11, MoveId.CONFUSION ], + [ 13, MoveId.POISON_POWDER ], + [ 17, MoveId.PSYBEAM ], + [ 23, MoveId.STUN_SPORE ], + [ 25, MoveId.BUG_BUZZ ], + [ 29, MoveId.SLEEP_POWDER ], + [ 35, MoveId.LEECH_LIFE ], + [ 37, MoveId.ZEN_HEADBUTT ], + [ 41, MoveId.POISON_FANG ], + [ 47, MoveId.PSYCHIC ], ], [Species.VENOMOTH]: [ - [ EVOLVE_MOVE, Moves.AIR_SLASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.DISABLE ], - [ 1, Moves.QUIVER_DANCE ], - [ 1, Moves.SILVER_WIND ], - [ 11, Moves.CONFUSION ], - [ 13, Moves.POISON_POWDER ], - [ 17, Moves.PSYBEAM ], - [ 23, Moves.STUN_SPORE ], - [ 25, Moves.BUG_BUZZ ], - [ 29, Moves.SLEEP_POWDER ], - [ 37, Moves.LEECH_LIFE ], - [ 41, Moves.ZEN_HEADBUTT ], - [ 47, Moves.POISON_FANG ], - [ 55, Moves.PSYCHIC ], + [ EVOLVE_MOVE, MoveId.AIR_SLASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.QUIVER_DANCE ], + [ 1, MoveId.SILVER_WIND ], + [ 11, MoveId.CONFUSION ], + [ 13, MoveId.POISON_POWDER ], + [ 17, MoveId.PSYBEAM ], + [ 23, MoveId.STUN_SPORE ], + [ 25, MoveId.BUG_BUZZ ], + [ 29, MoveId.SLEEP_POWDER ], + [ 37, MoveId.LEECH_LIFE ], + [ 41, MoveId.ZEN_HEADBUTT ], + [ 47, MoveId.POISON_FANG ], + [ 55, MoveId.PSYCHIC ], ], [Species.DIGLETT]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 4, Moves.GROWL ], - [ 8, Moves.ASTONISH ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.BULLDOZE ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.SLASH ], - [ 28, Moves.SANDSTORM ], - [ 32, Moves.DIG ], - [ 36, Moves.EARTH_POWER ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.FISSURE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 4, MoveId.GROWL ], + [ 8, MoveId.ASTONISH ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.BULLDOZE ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.SANDSTORM ], + [ 32, MoveId.DIG ], + [ 36, MoveId.EARTH_POWER ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.FISSURE ], ], [Species.DUGTRIO]: [ - [ EVOLVE_MOVE, Moves.SAND_TOMB ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.GROWL ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.ROTOTILLER ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.BULLDOZE ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.SLASH ], - [ 30, Moves.SANDSTORM ], - [ 36, Moves.DIG ], - [ 42, Moves.EARTH_POWER ], - [ 48, Moves.EARTHQUAKE ], - [ 54, Moves.FISSURE ], + [ EVOLVE_MOVE, MoveId.SAND_TOMB ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.ROTOTILLER ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.BULLDOZE ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.SLASH ], + [ 30, MoveId.SANDSTORM ], + [ 36, MoveId.DIG ], + [ 42, MoveId.EARTH_POWER ], + [ 48, MoveId.EARTHQUAKE ], + [ 54, MoveId.FISSURE ], ], [Species.MEOWTH]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 4, Moves.FEINT ], - [ 8, Moves.SCRATCH ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.BITE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.ASSURANCE ], - [ 29, Moves.FURY_SWIPES ], - [ 32, Moves.SCREECH ], - [ 36, Moves.SLASH ], - [ 40, Moves.NASTY_PLOT ], - [ 44, Moves.PLAY_ROUGH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 4, MoveId.FEINT ], + [ 8, MoveId.SCRATCH ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.BITE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.ASSURANCE ], + [ 29, MoveId.FURY_SWIPES ], + [ 32, MoveId.SCREECH ], + [ 36, MoveId.SLASH ], + [ 40, MoveId.NASTY_PLOT ], + [ 44, MoveId.PLAY_ROUGH ], ], [Species.PERSIAN]: [ - [ EVOLVE_MOVE, Moves.POWER_GEM ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.FEINT ], - [ 1, Moves.SWITCHEROO ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.BITE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.ASSURANCE ], - [ 31, Moves.FURY_SWIPES ], - [ 36, Moves.SCREECH ], - [ 42, Moves.SLASH ], - [ 48, Moves.NASTY_PLOT ], - [ 54, Moves.PLAY_ROUGH ], + [ EVOLVE_MOVE, MoveId.POWER_GEM ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.SWITCHEROO ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.BITE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.ASSURANCE ], + [ 31, MoveId.FURY_SWIPES ], + [ 36, MoveId.SCREECH ], + [ 42, MoveId.SLASH ], + [ 48, MoveId.NASTY_PLOT ], + [ 54, MoveId.PLAY_ROUGH ], ], [Species.PSYDUCK]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_SPORT ], - [ 3, Moves.WATER_GUN ], - [ 6, Moves.CONFUSION ], - [ 9, Moves.FURY_SWIPES ], - [ 12, Moves.WATER_PULSE ], - [ 15, Moves.DISABLE ], - [ 18, Moves.ZEN_HEADBUTT ], - [ 21, Moves.SCREECH ], - [ 24, Moves.AQUA_TAIL ], - [ 27, Moves.SOAK ], - [ 30, Moves.PSYCH_UP ], - [ 34, Moves.AMNESIA ], - [ 39, Moves.WONDER_ROOM ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_SPORT ], + [ 3, MoveId.WATER_GUN ], + [ 6, MoveId.CONFUSION ], + [ 9, MoveId.FURY_SWIPES ], + [ 12, MoveId.WATER_PULSE ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.ZEN_HEADBUTT ], + [ 21, MoveId.SCREECH ], + [ 24, MoveId.AQUA_TAIL ], + [ 27, MoveId.SOAK ], + [ 30, MoveId.PSYCH_UP ], + [ 34, MoveId.AMNESIA ], + [ 39, MoveId.WONDER_ROOM ], ], [Species.GOLDUCK]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.WATER_SPORT ], - [ 1, Moves.ME_FIRST ], - [ 9, Moves.FURY_SWIPES ], - [ 12, Moves.WATER_PULSE ], - [ 15, Moves.DISABLE ], - [ 18, Moves.ZEN_HEADBUTT ], - [ 21, Moves.SCREECH ], - [ 24, Moves.AQUA_TAIL ], - [ 27, Moves.SOAK ], - [ 30, Moves.PSYCH_UP ], - [ 36, Moves.AMNESIA ], - [ 40, Moves.HYDRO_PUMP ], - [ 45, Moves.WONDER_ROOM ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.WATER_SPORT ], + [ 1, MoveId.ME_FIRST ], + [ 9, MoveId.FURY_SWIPES ], + [ 12, MoveId.WATER_PULSE ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.ZEN_HEADBUTT ], + [ 21, MoveId.SCREECH ], + [ 24, MoveId.AQUA_TAIL ], + [ 27, MoveId.SOAK ], + [ 30, MoveId.PSYCH_UP ], + [ 36, MoveId.AMNESIA ], + [ 40, MoveId.HYDRO_PUMP ], + [ 45, MoveId.WONDER_ROOM ], ], [Species.MANKEY]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.COVET ], - [ 5, Moves.FURY_SWIPES ], - [ 8, Moves.LOW_KICK ], - [ 12, Moves.SEISMIC_TOSS ], - [ 17, Moves.SWAGGER ], - [ 22, Moves.CROSS_CHOP ], - [ 26, Moves.ASSURANCE ], - [ 29, Moves.THRASH ], - [ 33, Moves.CLOSE_COMBAT ], - [ 36, Moves.SCREECH ], - [ 40, Moves.STOMPING_TANTRUM ], - [ 44, Moves.OUTRAGE ], - [ 48, Moves.FINAL_GAMBIT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.COVET ], + [ 5, MoveId.FURY_SWIPES ], + [ 8, MoveId.LOW_KICK ], + [ 12, MoveId.SEISMIC_TOSS ], + [ 17, MoveId.SWAGGER ], + [ 22, MoveId.CROSS_CHOP ], + [ 26, MoveId.ASSURANCE ], + [ 29, MoveId.THRASH ], + [ 33, MoveId.CLOSE_COMBAT ], + [ 36, MoveId.SCREECH ], + [ 40, MoveId.STOMPING_TANTRUM ], + [ 44, MoveId.OUTRAGE ], + [ 48, MoveId.FINAL_GAMBIT ], ], [Species.PRIMEAPE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.COVET ], // Previous Stage Move - [ 1, Moves.FLING ], - [ 5, Moves.FURY_SWIPES ], - [ 8, Moves.LOW_KICK ], - [ 15, Moves.SEISMIC_TOSS ], - [ 17, Moves.SWAGGER ], - [ 22, Moves.CROSS_CHOP ], - [ 26, Moves.ASSURANCE ], - [ 30, Moves.THRASH ], - [ 35, Moves.RAGE_FIST ], - [ 39, Moves.CLOSE_COMBAT ], - [ 44, Moves.SCREECH ], - [ 48, Moves.STOMPING_TANTRUM ], - [ 53, Moves.OUTRAGE ], - [ 57, Moves.FINAL_GAMBIT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.COVET ], // Previous Stage Move + [ 1, MoveId.FLING ], + [ 5, MoveId.FURY_SWIPES ], + [ 8, MoveId.LOW_KICK ], + [ 15, MoveId.SEISMIC_TOSS ], + [ 17, MoveId.SWAGGER ], + [ 22, MoveId.CROSS_CHOP ], + [ 26, MoveId.ASSURANCE ], + [ 30, MoveId.THRASH ], + [ 35, MoveId.RAGE_FIST ], + [ 39, MoveId.CLOSE_COMBAT ], + [ 44, MoveId.SCREECH ], + [ 48, MoveId.STOMPING_TANTRUM ], + [ 53, MoveId.OUTRAGE ], + [ 57, MoveId.FINAL_GAMBIT ], ], [Species.GROWLITHE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 4, Moves.HOWL ], - [ 8, Moves.BITE ], - [ 12, Moves.FLAME_WHEEL ], - [ 16, Moves.HELPING_HAND ], - [ 20, Moves.AGILITY ], - [ 24, Moves.FIRE_FANG ], - [ 28, Moves.RETALIATE ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.FLAMETHROWER ], - [ 44, Moves.ROAR ], - [ 48, Moves.PLAY_ROUGH ], - [ 52, Moves.REVERSAL ], - [ 56, Moves.FLARE_BLITZ ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.HOWL ], + [ 8, MoveId.BITE ], + [ 12, MoveId.FLAME_WHEEL ], + [ 16, MoveId.HELPING_HAND ], + [ 20, MoveId.AGILITY ], + [ 24, MoveId.FIRE_FANG ], + [ 28, MoveId.RETALIATE ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.FLAMETHROWER ], + [ 44, MoveId.ROAR ], + [ 48, MoveId.PLAY_ROUGH ], + [ 52, MoveId.REVERSAL ], + [ 56, MoveId.FLARE_BLITZ ], ], [Species.ARCANINE]: [ - [ EVOLVE_MOVE, Moves.EXTREME_SPEED ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.ROAR ], - [ 1, Moves.EMBER ], - [ 1, Moves.AGILITY ], - [ 1, Moves.FLAME_WHEEL ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.ODOR_SLEUTH ], - [ 1, Moves.HOWL ], - [ 1, Moves.FLARE_BLITZ ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.RETALIATE ], - [ 1, Moves.PLAY_ROUGH ], - [ 5, Moves.FLAMETHROWER ], + [ EVOLVE_MOVE, MoveId.EXTREME_SPEED ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.ROAR ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.FLAME_WHEEL ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.FLARE_BLITZ ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.RETALIATE ], + [ 1, MoveId.PLAY_ROUGH ], + [ 5, MoveId.FLAMETHROWER ], ], [Species.POLIWAG]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.WATER_SPORT ], - [ 6, Moves.POUND ], - [ 12, Moves.MUD_SHOT ], - [ 18, Moves.BUBBLE_BEAM ], - [ 24, Moves.RAIN_DANCE ], - [ 30, Moves.BODY_SLAM ], - [ 36, Moves.EARTH_POWER ], - [ 42, Moves.HYDRO_PUMP ], - [ 48, Moves.BELLY_DRUM ], - [ 54, Moves.DOUBLE_EDGE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.WATER_SPORT ], + [ 6, MoveId.POUND ], + [ 12, MoveId.MUD_SHOT ], + [ 18, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.RAIN_DANCE ], + [ 30, MoveId.BODY_SLAM ], + [ 36, MoveId.EARTH_POWER ], + [ 42, MoveId.HYDRO_PUMP ], + [ 48, MoveId.BELLY_DRUM ], + [ 54, MoveId.DOUBLE_EDGE ], ], [Species.POLIWHIRL]: [ - [ 1, Moves.POUND ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.WATER_SPORT ], - [ 1, Moves.MUD_SHOT ], - [ 18, Moves.BUBBLE_BEAM ], - [ 24, Moves.RAIN_DANCE ], - [ 32, Moves.BODY_SLAM ], - [ 40, Moves.EARTH_POWER ], - [ 48, Moves.HYDRO_PUMP ], - [ 56, Moves.BELLY_DRUM ], - [ 66, Moves.DOUBLE_EDGE ], + [ 1, MoveId.POUND ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.WATER_SPORT ], + [ 1, MoveId.MUD_SHOT ], + [ 18, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.RAIN_DANCE ], + [ 32, MoveId.BODY_SLAM ], + [ 40, MoveId.EARTH_POWER ], + [ 48, MoveId.HYDRO_PUMP ], + [ 56, MoveId.BELLY_DRUM ], + [ 66, MoveId.DOUBLE_EDGE ], ], [Species.POLIWRATH]: [ - [ EVOLVE_MOVE, Moves.DYNAMIC_PUNCH ], - [ RELEARN_MOVE, Moves.POUND ], - [ RELEARN_MOVE, Moves.DOUBLE_EDGE ], - [ RELEARN_MOVE, Moves.WATER_GUN ], - [ RELEARN_MOVE, Moves.HYDRO_PUMP ], - [ RELEARN_MOVE, Moves.BELLY_DRUM ], - [ RELEARN_MOVE, Moves.RAIN_DANCE ], - [ RELEARN_MOVE, Moves.MUD_SHOT ], - [ RELEARN_MOVE, Moves.EARTH_POWER ], - [ RELEARN_MOVE, Moves.CIRCLE_THROW ], - [ 1, Moves.BUBBLE_BEAM ], - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.WATER_SPORT ], + [ EVOLVE_MOVE, MoveId.DYNAMIC_PUNCH ], + [ RELEARN_MOVE, MoveId.POUND ], + [ RELEARN_MOVE, MoveId.DOUBLE_EDGE ], + [ RELEARN_MOVE, MoveId.WATER_GUN ], + [ RELEARN_MOVE, MoveId.HYDRO_PUMP ], + [ RELEARN_MOVE, MoveId.BELLY_DRUM ], + [ RELEARN_MOVE, MoveId.RAIN_DANCE ], + [ RELEARN_MOVE, MoveId.MUD_SHOT ], + [ RELEARN_MOVE, MoveId.EARTH_POWER ], + [ RELEARN_MOVE, MoveId.CIRCLE_THROW ], + [ 1, MoveId.BUBBLE_BEAM ], + [ 1, MoveId.BODY_SLAM ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.WATER_SPORT ], ], [Species.ABRA]: [ - [ 1, Moves.TELEPORT ], - [ 1, Moves.CONFUSION ], // Custom + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.CONFUSION ], // Custom ], [Species.KADABRA]: [ - [ EVOLVE_MOVE, Moves.PSYBEAM ], // LGPE - [ 1, Moves.CONFUSION ], // Previous Stage Move, Custom - [ 1, Moves.DISABLE ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.KINESIS ], - [ 10, Moves.REFLECT ], - [ 15, Moves.ALLY_SWITCH ], - [ 20, Moves.PSYCHO_CUT ], - [ 25, Moves.RECOVER ], - [ 30, Moves.PSYSHOCK ], - [ 35, Moves.PSYCHIC ], - [ 40, Moves.ROLE_PLAY ], - [ 45, Moves.FUTURE_SIGHT ], - [ 50, Moves.CALM_MIND ], + [ EVOLVE_MOVE, MoveId.PSYBEAM ], // LGPE + [ 1, MoveId.CONFUSION ], // Previous Stage Move, Custom + [ 1, MoveId.DISABLE ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.KINESIS ], + [ 10, MoveId.REFLECT ], + [ 15, MoveId.ALLY_SWITCH ], + [ 20, MoveId.PSYCHO_CUT ], + [ 25, MoveId.RECOVER ], + [ 30, MoveId.PSYSHOCK ], + [ 35, MoveId.PSYCHIC ], + [ 40, MoveId.ROLE_PLAY ], + [ 45, MoveId.FUTURE_SIGHT ], + [ 50, MoveId.CALM_MIND ], ], [Species.ALAKAZAM]: [ - [ 1, Moves.DISABLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.KINESIS ], - [ 5, Moves.PSYBEAM ], - [ 10, Moves.REFLECT ], - [ 15, Moves.ALLY_SWITCH ], - [ 20, Moves.PSYCHO_CUT ], - [ 25, Moves.RECOVER ], - [ 30, Moves.PSYSHOCK ], - [ 35, Moves.PSYCHIC ], - [ 40, Moves.ROLE_PLAY ], - [ 45, Moves.FUTURE_SIGHT ], - [ 50, Moves.CALM_MIND ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.KINESIS ], + [ 5, MoveId.PSYBEAM ], + [ 10, MoveId.REFLECT ], + [ 15, MoveId.ALLY_SWITCH ], + [ 20, MoveId.PSYCHO_CUT ], + [ 25, MoveId.RECOVER ], + [ 30, MoveId.PSYSHOCK ], + [ 35, MoveId.PSYCHIC ], + [ 40, MoveId.ROLE_PLAY ], + [ 45, MoveId.FUTURE_SIGHT ], + [ 50, MoveId.CALM_MIND ], ], [Species.MACHOP]: [ - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 4, Moves.FOCUS_ENERGY ], - [ 8, Moves.REVENGE ], - [ 12, Moves.LOW_SWEEP ], - [ 16, Moves.KNOCK_OFF ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.VITAL_THROW ], - [ 29, Moves.STRENGTH ], - [ 32, Moves.DUAL_CHOP ], - [ 36, Moves.BULK_UP ], - [ 40, Moves.SEISMIC_TOSS ], - [ 44, Moves.DYNAMIC_PUNCH ], - [ 48, Moves.CROSS_CHOP ], - [ 52, Moves.DOUBLE_EDGE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 4, MoveId.FOCUS_ENERGY ], + [ 8, MoveId.REVENGE ], + [ 12, MoveId.LOW_SWEEP ], + [ 16, MoveId.KNOCK_OFF ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.VITAL_THROW ], + [ 29, MoveId.STRENGTH ], + [ 32, MoveId.DUAL_CHOP ], + [ 36, MoveId.BULK_UP ], + [ 40, MoveId.SEISMIC_TOSS ], + [ 44, MoveId.DYNAMIC_PUNCH ], + [ 48, MoveId.CROSS_CHOP ], + [ 52, MoveId.DOUBLE_EDGE ], ], [Species.MACHOKE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.REVENGE ], - [ 1, Moves.KARATE_CHOP ], - [ 12, Moves.LOW_SWEEP ], - [ 16, Moves.KNOCK_OFF ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.VITAL_THROW ], - [ 31, Moves.STRENGTH ], - [ 36, Moves.DUAL_CHOP ], - [ 42, Moves.BULK_UP ], - [ 48, Moves.SEISMIC_TOSS ], - [ 54, Moves.DYNAMIC_PUNCH ], - [ 60, Moves.CROSS_CHOP ], - [ 66, Moves.DOUBLE_EDGE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.REVENGE ], + [ 1, MoveId.KARATE_CHOP ], + [ 12, MoveId.LOW_SWEEP ], + [ 16, MoveId.KNOCK_OFF ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.VITAL_THROW ], + [ 31, MoveId.STRENGTH ], + [ 36, MoveId.DUAL_CHOP ], + [ 42, MoveId.BULK_UP ], + [ 48, MoveId.SEISMIC_TOSS ], + [ 54, MoveId.DYNAMIC_PUNCH ], + [ 60, MoveId.CROSS_CHOP ], + [ 66, MoveId.DOUBLE_EDGE ], ], [Species.MACHAMP]: [ - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.REVENGE ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.KARATE_CHOP ], - [ 12, Moves.LOW_SWEEP ], - [ 16, Moves.KNOCK_OFF ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.VITAL_THROW ], - [ 31, Moves.STRENGTH ], - [ 36, Moves.DUAL_CHOP ], - [ 42, Moves.BULK_UP ], - [ 48, Moves.SEISMIC_TOSS ], - [ 54, Moves.DYNAMIC_PUNCH ], - [ 60, Moves.CROSS_CHOP ], - [ 66, Moves.DOUBLE_EDGE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.REVENGE ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.KARATE_CHOP ], + [ 12, MoveId.LOW_SWEEP ], + [ 16, MoveId.KNOCK_OFF ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.VITAL_THROW ], + [ 31, MoveId.STRENGTH ], + [ 36, MoveId.DUAL_CHOP ], + [ 42, MoveId.BULK_UP ], + [ 48, MoveId.SEISMIC_TOSS ], + [ 54, MoveId.DYNAMIC_PUNCH ], + [ 60, MoveId.CROSS_CHOP ], + [ 66, MoveId.DOUBLE_EDGE ], ], [Species.BELLSPROUT]: [ - [ 1, Moves.VINE_WHIP ], - [ 7, Moves.GROWTH ], - [ 11, Moves.WRAP ], - [ 13, Moves.SLEEP_POWDER ], - [ 15, Moves.POISON_POWDER ], - [ 17, Moves.STUN_SPORE ], - [ 23, Moves.ACID ], - [ 27, Moves.KNOCK_OFF ], - [ 29, Moves.SWEET_SCENT ], - [ 35, Moves.GASTRO_ACID ], - [ 39, Moves.RAZOR_LEAF ], - [ 41, Moves.POISON_JAB ], - [ 47, Moves.SLAM ], - [ 52, Moves.POWER_WHIP ], + [ 1, MoveId.VINE_WHIP ], + [ 7, MoveId.GROWTH ], + [ 11, MoveId.WRAP ], + [ 13, MoveId.SLEEP_POWDER ], + [ 15, MoveId.POISON_POWDER ], + [ 17, MoveId.STUN_SPORE ], + [ 23, MoveId.ACID ], + [ 27, MoveId.KNOCK_OFF ], + [ 29, MoveId.SWEET_SCENT ], + [ 35, MoveId.GASTRO_ACID ], + [ 39, MoveId.RAZOR_LEAF ], + [ 41, MoveId.POISON_JAB ], + [ 47, MoveId.SLAM ], + [ 52, MoveId.POWER_WHIP ], ], [Species.WEEPINBELL]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.WRAP ], - [ 1, Moves.GROWTH ], - [ 13, Moves.SLEEP_POWDER ], - [ 15, Moves.POISON_POWDER ], - [ 17, Moves.STUN_SPORE ], - [ 24, Moves.ACID ], - [ 29, Moves.KNOCK_OFF ], - [ 32, Moves.SWEET_SCENT ], - [ 39, Moves.GASTRO_ACID ], - [ 44, Moves.RAZOR_LEAF ], - [ 47, Moves.POISON_JAB ], - [ 54, Moves.SLAM ], - [ 58, Moves.POWER_WHIP ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.GROWTH ], + [ 13, MoveId.SLEEP_POWDER ], + [ 15, MoveId.POISON_POWDER ], + [ 17, MoveId.STUN_SPORE ], + [ 24, MoveId.ACID ], + [ 29, MoveId.KNOCK_OFF ], + [ 32, MoveId.SWEET_SCENT ], + [ 39, MoveId.GASTRO_ACID ], + [ 44, MoveId.RAZOR_LEAF ], + [ 47, MoveId.POISON_JAB ], + [ 54, MoveId.SLAM ], + [ 58, MoveId.POWER_WHIP ], ], [Species.VICTREEBEL]: [ - [ EVOLVE_MOVE, Moves.LEAF_STORM ], - [ RELEARN_MOVE, Moves.STOCKPILE ], - [ RELEARN_MOVE, Moves.SWALLOW ], - [ RELEARN_MOVE, Moves.SPIT_UP ], - [ RELEARN_MOVE, Moves.WRAP ], // Previous Stage Move - [ RELEARN_MOVE, Moves.GROWTH ], // Previous Stage Move - [ RELEARN_MOVE, Moves.ACID ], // Previous Stage Move - [ RELEARN_MOVE, Moves.KNOCK_OFF ], // Previous Stage Move - [ RELEARN_MOVE, Moves.GASTRO_ACID ], - [ RELEARN_MOVE, Moves.POISON_JAB ], // Previous Stage Move - [ RELEARN_MOVE, Moves.SLAM ], // Previous Stage Move - [ RELEARN_MOVE, Moves.POWER_WHIP ], - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.POISON_POWDER ], // Previous Stage Move - [ 1, Moves.STUN_SPORE ], // Previous Stage Move - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.RAZOR_LEAF ], - [ 44, Moves.LEAF_BLADE ], + [ EVOLVE_MOVE, MoveId.LEAF_STORM ], + [ RELEARN_MOVE, MoveId.STOCKPILE ], + [ RELEARN_MOVE, MoveId.SWALLOW ], + [ RELEARN_MOVE, MoveId.SPIT_UP ], + [ RELEARN_MOVE, MoveId.WRAP ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.GROWTH ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.ACID ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.KNOCK_OFF ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.GASTRO_ACID ], + [ RELEARN_MOVE, MoveId.POISON_JAB ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.SLAM ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.POWER_WHIP ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.POISON_POWDER ], // Previous Stage Move + [ 1, MoveId.STUN_SPORE ], // Previous Stage Move + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.RAZOR_LEAF ], + [ 44, MoveId.LEAF_BLADE ], ], [Species.TENTACOOL]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.ACID ], - [ 8, Moves.WRAP ], - [ 12, Moves.SUPERSONIC ], - [ 16, Moves.WATER_PULSE ], - [ 20, Moves.SCREECH ], - [ 24, Moves.BUBBLE_BEAM ], - [ 28, Moves.HEX ], - [ 32, Moves.ACID_ARMOR ], - [ 36, Moves.POISON_JAB ], - [ 40, Moves.SURF ], - [ 44, Moves.SLUDGE_WAVE ], - [ 48, Moves.HYDRO_PUMP ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.ACID ], + [ 8, MoveId.WRAP ], + [ 12, MoveId.SUPERSONIC ], + [ 16, MoveId.WATER_PULSE ], + [ 20, MoveId.SCREECH ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 28, MoveId.HEX ], + [ 32, MoveId.ACID_ARMOR ], + [ 36, MoveId.POISON_JAB ], + [ 40, MoveId.SURF ], + [ 44, MoveId.SLUDGE_WAVE ], + [ 48, MoveId.HYDRO_PUMP ], ], [Species.TENTACRUEL]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.ACID ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.REFLECT_TYPE ], - [ 1, Moves.WRING_OUT ], - [ 12, Moves.SUPERSONIC ], - [ 16, Moves.WATER_PULSE ], - [ 20, Moves.SCREECH ], - [ 24, Moves.BUBBLE_BEAM ], - [ 28, Moves.HEX ], - [ 34, Moves.ACID_ARMOR ], - [ 40, Moves.POISON_JAB ], - [ 46, Moves.SURF ], - [ 52, Moves.SLUDGE_WAVE ], - [ 58, Moves.HYDRO_PUMP ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.ACID ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.REFLECT_TYPE ], + [ 1, MoveId.WRING_OUT ], + [ 12, MoveId.SUPERSONIC ], + [ 16, MoveId.WATER_PULSE ], + [ 20, MoveId.SCREECH ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 28, MoveId.HEX ], + [ 34, MoveId.ACID_ARMOR ], + [ 40, MoveId.POISON_JAB ], + [ 46, MoveId.SURF ], + [ 52, MoveId.SLUDGE_WAVE ], + [ 58, MoveId.HYDRO_PUMP ], ], [Species.GEODUDE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 6, Moves.ROCK_POLISH ], - [ 10, Moves.ROLLOUT ], - [ 12, Moves.BULLDOZE ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 24, Moves.SELF_DESTRUCT ], - [ 28, Moves.STEALTH_ROCK ], - [ 30, Moves.ROCK_BLAST ], - [ 34, Moves.EARTHQUAKE ], - [ 36, Moves.EXPLOSION ], - [ 40, Moves.DOUBLE_EDGE ], - [ 42, Moves.STONE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 6, MoveId.ROCK_POLISH ], + [ 10, MoveId.ROLLOUT ], + [ 12, MoveId.BULLDOZE ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 28, MoveId.STEALTH_ROCK ], + [ 30, MoveId.ROCK_BLAST ], + [ 34, MoveId.EARTHQUAKE ], + [ 36, MoveId.EXPLOSION ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 42, MoveId.STONE_EDGE ], ], [Species.GRAVELER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROCK_POLISH ], - [ 10, Moves.ROLLOUT ], - [ 12, Moves.BULLDOZE ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 24, Moves.SELF_DESTRUCT ], - [ 30, Moves.STEALTH_ROCK ], - [ 34, Moves.ROCK_BLAST ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.EXPLOSION ], - [ 50, Moves.DOUBLE_EDGE ], - [ 54, Moves.STONE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROCK_POLISH ], + [ 10, MoveId.ROLLOUT ], + [ 12, MoveId.BULLDOZE ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 30, MoveId.STEALTH_ROCK ], + [ 34, MoveId.ROCK_BLAST ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.EXPLOSION ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 54, MoveId.STONE_EDGE ], ], [Species.GOLEM]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROCK_POLISH ], - [ 1, Moves.ROLLOUT ], // Previous Stage Move - [ 1, Moves.HEAVY_SLAM ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 22, Moves.BULLDOZE ], - [ 24, Moves.SELF_DESTRUCT ], - [ 30, Moves.STEALTH_ROCK ], - [ 34, Moves.ROCK_BLAST ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.EXPLOSION ], - [ 50, Moves.DOUBLE_EDGE ], - [ 54, Moves.STONE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROCK_POLISH ], + [ 1, MoveId.ROLLOUT ], // Previous Stage Move + [ 1, MoveId.HEAVY_SLAM ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 22, MoveId.BULLDOZE ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 30, MoveId.STEALTH_ROCK ], + [ 34, MoveId.ROCK_BLAST ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.EXPLOSION ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 54, MoveId.STONE_EDGE ], ], [Species.PONYTA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.TAIL_WHIP ], - [ 10, Moves.EMBER ], - [ 15, Moves.FLAME_CHARGE ], - [ 20, Moves.AGILITY ], - [ 25, Moves.FLAME_WHEEL ], - [ 30, Moves.STOMP ], - [ 35, Moves.FIRE_SPIN ], - [ 41, Moves.TAKE_DOWN ], - [ 45, Moves.INFERNO ], - [ 50, Moves.FIRE_BLAST ], - [ 55, Moves.FLARE_BLITZ ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.TAIL_WHIP ], + [ 10, MoveId.EMBER ], + [ 15, MoveId.FLAME_CHARGE ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.FLAME_WHEEL ], + [ 30, MoveId.STOMP ], + [ 35, MoveId.FIRE_SPIN ], + [ 41, MoveId.TAKE_DOWN ], + [ 45, MoveId.INFERNO ], + [ 50, MoveId.FIRE_BLAST ], + [ 55, MoveId.FLARE_BLITZ ], ], [Species.RAPIDASH]: [ - [ EVOLVE_MOVE, Moves.SMART_STRIKE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.MEGAHORN ], - [ 1, Moves.POISON_JAB ], - [ 15, Moves.FLAME_CHARGE ], - [ 20, Moves.AGILITY ], - [ 25, Moves.FLAME_WHEEL ], - [ 30, Moves.STOMP ], - [ 35, Moves.FIRE_SPIN ], - [ 43, Moves.TAKE_DOWN ], - [ 49, Moves.INFERNO ], - [ 56, Moves.FIRE_BLAST ], - [ 63, Moves.FLARE_BLITZ ], + [ EVOLVE_MOVE, MoveId.SMART_STRIKE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.MEGAHORN ], + [ 1, MoveId.POISON_JAB ], + [ 15, MoveId.FLAME_CHARGE ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.FLAME_WHEEL ], + [ 30, MoveId.STOMP ], + [ 35, MoveId.FIRE_SPIN ], + [ 43, MoveId.TAKE_DOWN ], + [ 49, MoveId.INFERNO ], + [ 56, MoveId.FIRE_BLAST ], + [ 63, MoveId.FLARE_BLITZ ], ], [Species.SLOWPOKE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CURSE ], - [ 3, Moves.GROWL ], - [ 6, Moves.WATER_GUN ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 39, Moves.PSYCH_UP ], - [ 42, Moves.RAIN_DANCE ], - [ 45, Moves.HEAL_PULSE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CURSE ], + [ 3, MoveId.GROWL ], + [ 6, MoveId.WATER_GUN ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 39, MoveId.PSYCH_UP ], + [ 42, MoveId.RAIN_DANCE ], + [ 45, MoveId.HEAL_PULSE ], ], [Species.SLOWBRO]: [ - [ RELEARN_MOVE, Moves.FUTURE_SIGHT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.CURSE ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 41, Moves.PSYCH_UP ], - [ 46, Moves.RAIN_DANCE ], - [ 51, Moves.HEAL_PULSE ], + [ RELEARN_MOVE, MoveId.FUTURE_SIGHT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.CURSE ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 41, MoveId.PSYCH_UP ], + [ 46, MoveId.RAIN_DANCE ], + [ 51, MoveId.HEAL_PULSE ], ], [Species.MAGNEMITE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_SHOCK ], - [ 4, Moves.SUPERSONIC ], - [ 8, Moves.THUNDER_WAVE ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.GYRO_BALL ], - [ 20, Moves.SPARK ], - [ 24, Moves.SCREECH ], - [ 28, Moves.MAGNET_RISE ], - [ 32, Moves.FLASH_CANNON ], - [ 36, Moves.DISCHARGE ], - [ 40, Moves.METAL_SOUND ], - [ 44, Moves.LIGHT_SCREEN ], - [ 48, Moves.LOCK_ON ], - [ 52, Moves.ZAP_CANNON ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 4, MoveId.SUPERSONIC ], + [ 8, MoveId.THUNDER_WAVE ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.GYRO_BALL ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.MAGNET_RISE ], + [ 32, MoveId.FLASH_CANNON ], + [ 36, MoveId.DISCHARGE ], + [ 40, MoveId.METAL_SOUND ], + [ 44, MoveId.LIGHT_SCREEN ], + [ 48, MoveId.LOCK_ON ], + [ 52, MoveId.ZAP_CANNON ], ], [Species.MAGNETON]: [ - [ EVOLVE_MOVE, Moves.TRI_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.GYRO_BALL ], - [ 20, Moves.SPARK ], - [ 24, Moves.SCREECH ], - [ 28, Moves.MAGNET_RISE ], - [ 34, Moves.FLASH_CANNON ], - [ 40, Moves.DISCHARGE ], - [ 46, Moves.METAL_SOUND ], - [ 52, Moves.LIGHT_SCREEN ], - [ 58, Moves.LOCK_ON ], - [ 64, Moves.ZAP_CANNON ], + [ EVOLVE_MOVE, MoveId.TRI_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.GYRO_BALL ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.MAGNET_RISE ], + [ 34, MoveId.FLASH_CANNON ], + [ 40, MoveId.DISCHARGE ], + [ 46, MoveId.METAL_SOUND ], + [ 52, MoveId.LIGHT_SCREEN ], + [ 58, MoveId.LOCK_ON ], + [ 64, MoveId.ZAP_CANNON ], ], [Species.FARFETCHD]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.PECK ], - [ 5, Moves.LEER ], - [ 10, Moves.FURY_CUTTER ], - [ 15, Moves.CUT ], - [ 20, Moves.AERIAL_ACE ], - [ 25, Moves.AIR_CUTTER ], - [ 30, Moves.KNOCK_OFF ], - [ 35, Moves.FALSE_SWIPE ], - [ 40, Moves.SLASH ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.AIR_SLASH ], - [ 55, Moves.LEAF_BLADE ], - [ 60, Moves.AGILITY ], - [ 65, Moves.BRAVE_BIRD ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.PECK ], + [ 5, MoveId.LEER ], + [ 10, MoveId.FURY_CUTTER ], + [ 15, MoveId.CUT ], + [ 20, MoveId.AERIAL_ACE ], + [ 25, MoveId.AIR_CUTTER ], + [ 30, MoveId.KNOCK_OFF ], + [ 35, MoveId.FALSE_SWIPE ], + [ 40, MoveId.SLASH ], + [ 45, MoveId.SWORDS_DANCE ], + [ 50, MoveId.AIR_SLASH ], + [ 55, MoveId.LEAF_BLADE ], + [ 60, MoveId.AGILITY ], + [ 65, MoveId.BRAVE_BIRD ], ], [Species.DODUO]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 5, Moves.QUICK_ATTACK ], - [ 9, Moves.FURY_ATTACK ], - [ 14, Moves.PLUCK ], - [ 19, Moves.DOUBLE_HIT ], - [ 23, Moves.AGILITY ], - [ 27, Moves.UPROAR ], - [ 30, Moves.ACUPRESSURE ], - [ 33, Moves.SWORDS_DANCE ], - [ 36, Moves.DRILL_PECK ], - [ 39, Moves.ENDEAVOR ], - [ 43, Moves.THRASH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 5, MoveId.QUICK_ATTACK ], + [ 9, MoveId.FURY_ATTACK ], + [ 14, MoveId.PLUCK ], + [ 19, MoveId.DOUBLE_HIT ], + [ 23, MoveId.AGILITY ], + [ 27, MoveId.UPROAR ], + [ 30, MoveId.ACUPRESSURE ], + [ 33, MoveId.SWORDS_DANCE ], + [ 36, MoveId.DRILL_PECK ], + [ 39, MoveId.ENDEAVOR ], + [ 43, MoveId.THRASH ], ], [Species.DODRIO]: [ - [ EVOLVE_MOVE, Moves.TRI_ATTACK ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 5, Moves.QUICK_ATTACK ], - [ 12, Moves.FURY_ATTACK ], - [ 15, Moves.PLUCK ], - [ 19, Moves.DOUBLE_HIT ], - [ 23, Moves.AGILITY ], - [ 26, Moves.UPROAR ], - [ 30, Moves.ACUPRESSURE ], - [ 34, Moves.SWORDS_DANCE ], - [ 38, Moves.DRILL_PECK ], - [ 43, Moves.ENDEAVOR ], - [ 50, Moves.THRASH ], + [ EVOLVE_MOVE, MoveId.TRI_ATTACK ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 5, MoveId.QUICK_ATTACK ], + [ 12, MoveId.FURY_ATTACK ], + [ 15, MoveId.PLUCK ], + [ 19, MoveId.DOUBLE_HIT ], + [ 23, MoveId.AGILITY ], + [ 26, MoveId.UPROAR ], + [ 30, MoveId.ACUPRESSURE ], + [ 34, MoveId.SWORDS_DANCE ], + [ 38, MoveId.DRILL_PECK ], + [ 43, MoveId.ENDEAVOR ], + [ 50, MoveId.THRASH ], ], [Species.SEEL]: [ - [ 1, Moves.HEADBUTT ], - [ 3, Moves.GROWL ], - [ 7, Moves.CHARM ], - [ 11, Moves.ICY_WIND ], - [ 13, Moves.ENCORE ], - [ 17, Moves.ICE_SHARD ], - [ 21, Moves.REST ], - [ 23, Moves.AQUA_RING ], - [ 27, Moves.AURORA_BEAM ], - [ 31, Moves.AQUA_JET ], - [ 33, Moves.BRINE ], - [ 37, Moves.TAKE_DOWN ], - [ 41, Moves.DIVE ], - [ 43, Moves.AQUA_TAIL ], - [ 47, Moves.ICE_BEAM ], - [ 51, Moves.SAFEGUARD ], - [ 53, Moves.SNOWSCAPE ], + [ 1, MoveId.HEADBUTT ], + [ 3, MoveId.GROWL ], + [ 7, MoveId.CHARM ], + [ 11, MoveId.ICY_WIND ], + [ 13, MoveId.ENCORE ], + [ 17, MoveId.ICE_SHARD ], + [ 21, MoveId.REST ], + [ 23, MoveId.AQUA_RING ], + [ 27, MoveId.AURORA_BEAM ], + [ 31, MoveId.AQUA_JET ], + [ 33, MoveId.BRINE ], + [ 37, MoveId.TAKE_DOWN ], + [ 41, MoveId.DIVE ], + [ 43, MoveId.AQUA_TAIL ], + [ 47, MoveId.ICE_BEAM ], + [ 51, MoveId.SAFEGUARD ], + [ 53, MoveId.SNOWSCAPE ], ], [Species.DEWGONG]: [ - [ EVOLVE_MOVE, Moves.SHEER_COLD ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.GROWL ], - [ 1, Moves.ICY_WIND ], - [ 1, Moves.CHARM ], - [ 1, Moves.SIGNAL_BEAM ], - [ 13, Moves.ENCORE ], - [ 17, Moves.ICE_SHARD ], - [ 21, Moves.REST ], - [ 23, Moves.AQUA_RING ], - [ 27, Moves.AURORA_BEAM ], - [ 31, Moves.AQUA_JET ], - [ 33, Moves.BRINE ], - [ 39, Moves.TAKE_DOWN ], - [ 45, Moves.DIVE ], - [ 49, Moves.AQUA_TAIL ], - [ 55, Moves.ICE_BEAM ], - [ 61, Moves.SAFEGUARD ], - [ 65, Moves.SNOWSCAPE ], + [ EVOLVE_MOVE, MoveId.SHEER_COLD ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ICY_WIND ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SIGNAL_BEAM ], + [ 13, MoveId.ENCORE ], + [ 17, MoveId.ICE_SHARD ], + [ 21, MoveId.REST ], + [ 23, MoveId.AQUA_RING ], + [ 27, MoveId.AURORA_BEAM ], + [ 31, MoveId.AQUA_JET ], + [ 33, MoveId.BRINE ], + [ 39, MoveId.TAKE_DOWN ], + [ 45, MoveId.DIVE ], + [ 49, MoveId.AQUA_TAIL ], + [ 55, MoveId.ICE_BEAM ], + [ 61, MoveId.SAFEGUARD ], + [ 65, MoveId.SNOWSCAPE ], ], [Species.GRIMER]: [ - [ 1, Moves.POUND ], - [ 1, Moves.POISON_GAS ], - [ 4, Moves.HARDEN ], - [ 7, Moves.MUD_SLAP ], - [ 12, Moves.DISABLE ], - [ 15, Moves.SLUDGE ], - [ 18, Moves.MUD_SHOT ], - [ 21, Moves.MINIMIZE ], - [ 26, Moves.TOXIC ], - [ 29, Moves.SLUDGE_BOMB ], - [ 32, Moves.SLUDGE_WAVE ], - [ 37, Moves.SCREECH ], - [ 40, Moves.GUNK_SHOT ], - [ 43, Moves.ACID_ARMOR ], - [ 46, Moves.BELCH ], - [ 48, Moves.MEMENTO ], + [ 1, MoveId.POUND ], + [ 1, MoveId.POISON_GAS ], + [ 4, MoveId.HARDEN ], + [ 7, MoveId.MUD_SLAP ], + [ 12, MoveId.DISABLE ], + [ 15, MoveId.SLUDGE ], + [ 18, MoveId.MUD_SHOT ], + [ 21, MoveId.MINIMIZE ], + [ 26, MoveId.TOXIC ], + [ 29, MoveId.SLUDGE_BOMB ], + [ 32, MoveId.SLUDGE_WAVE ], + [ 37, MoveId.SCREECH ], + [ 40, MoveId.GUNK_SHOT ], + [ 43, MoveId.ACID_ARMOR ], + [ 46, MoveId.BELCH ], + [ 48, MoveId.MEMENTO ], ], [Species.MUK]: [ - [ 1, Moves.POUND ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MUD_SLAP ], - [ 12, Moves.DISABLE ], - [ 15, Moves.SLUDGE ], - [ 18, Moves.MUD_SHOT ], - [ 21, Moves.MINIMIZE ], - [ 26, Moves.TOXIC ], - [ 29, Moves.SLUDGE_BOMB ], - [ 32, Moves.SLUDGE_WAVE ], - [ 37, Moves.SCREECH ], - [ 40, Moves.GUNK_SHOT ], - [ 46, Moves.ACID_ARMOR ], - [ 52, Moves.BELCH ], - [ 57, Moves.MEMENTO ], + [ 1, MoveId.POUND ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MUD_SLAP ], + [ 12, MoveId.DISABLE ], + [ 15, MoveId.SLUDGE ], + [ 18, MoveId.MUD_SHOT ], + [ 21, MoveId.MINIMIZE ], + [ 26, MoveId.TOXIC ], + [ 29, MoveId.SLUDGE_BOMB ], + [ 32, MoveId.SLUDGE_WAVE ], + [ 37, MoveId.SCREECH ], + [ 40, MoveId.GUNK_SHOT ], + [ 46, MoveId.ACID_ARMOR ], + [ 52, MoveId.BELCH ], + [ 57, MoveId.MEMENTO ], ], [Species.SHELLDER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.WITHDRAW ], - [ 8, Moves.ICE_SHARD ], - [ 12, Moves.LEER ], - [ 16, Moves.WHIRLPOOL ], - [ 20, Moves.SUPERSONIC ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.PROTECT ], - [ 32, Moves.RAZOR_SHELL ], - [ 36, Moves.IRON_DEFENSE ], - [ 40, Moves.ICE_BEAM ], - [ 44, Moves.SHELL_SMASH ], - [ 48, Moves.HYDRO_PUMP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.WITHDRAW ], + [ 8, MoveId.ICE_SHARD ], + [ 12, MoveId.LEER ], + [ 16, MoveId.WHIRLPOOL ], + [ 20, MoveId.SUPERSONIC ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.PROTECT ], + [ 32, MoveId.RAZOR_SHELL ], + [ 36, MoveId.IRON_DEFENSE ], + [ 40, MoveId.ICE_BEAM ], + [ 44, MoveId.SHELL_SMASH ], + [ 48, MoveId.HYDRO_PUMP ], ], [Species.CLOYSTER]: [ - [ EVOLVE_MOVE, Moves.ICICLE_SPEAR ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HYDRO_PUMP ], - [ 1, Moves.ICE_BEAM ], - [ 1, Moves.AURORA_BEAM ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SPIKES ], - [ 1, Moves.WHIRLPOOL ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.SHELL_SMASH ], - [ 1, Moves.ICICLE_CRASH ], - [ 5, Moves.RAZOR_SHELL ], + [ EVOLVE_MOVE, MoveId.ICICLE_SPEAR ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HYDRO_PUMP ], + [ 1, MoveId.ICE_BEAM ], + [ 1, MoveId.AURORA_BEAM ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SPIKES ], + [ 1, MoveId.WHIRLPOOL ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.ICE_SHARD ], + [ 1, MoveId.SHELL_SMASH ], + [ 1, MoveId.ICICLE_CRASH ], + [ 5, MoveId.RAZOR_SHELL ], ], [Species.GASTLY]: [ - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.LICK ], - [ 1, Moves.ACID ], // Custom - [ 4, Moves.HYPNOSIS ], - [ 8, Moves.MEAN_LOOK ], - [ 12, Moves.PAYBACK ], - [ 16, Moves.SPITE ], - [ 20, Moves.CURSE ], - [ 24, Moves.HEX ], - [ 28, Moves.NIGHT_SHADE ], - [ 32, Moves.SUCKER_PUNCH ], - [ 36, Moves.DARK_PULSE ], - [ 40, Moves.SHADOW_BALL ], - [ 44, Moves.DESTINY_BOND ], - [ 48, Moves.DREAM_EATER ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.LICK ], + [ 1, MoveId.ACID ], // Custom + [ 4, MoveId.HYPNOSIS ], + [ 8, MoveId.MEAN_LOOK ], + [ 12, MoveId.PAYBACK ], + [ 16, MoveId.SPITE ], + [ 20, MoveId.CURSE ], + [ 24, MoveId.HEX ], + [ 28, MoveId.NIGHT_SHADE ], + [ 32, MoveId.SUCKER_PUNCH ], + [ 36, MoveId.DARK_PULSE ], + [ 40, MoveId.SHADOW_BALL ], + [ 44, MoveId.DESTINY_BOND ], + [ 48, MoveId.DREAM_EATER ], ], [Species.HAUNTER]: [ - [ EVOLVE_MOVE, Moves.SHADOW_PUNCH ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.LICK ], - [ 1, Moves.ACID ], // Previous Stage Move, Custom - [ 1, Moves.MEAN_LOOK ], - [ 12, Moves.PAYBACK ], - [ 16, Moves.SPITE ], - [ 20, Moves.CURSE ], - [ 24, Moves.HEX ], - [ 30, Moves.NIGHT_SHADE ], - [ 36, Moves.SUCKER_PUNCH ], - [ 42, Moves.DARK_PULSE ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.DESTINY_BOND ], - [ 60, Moves.DREAM_EATER ], + [ EVOLVE_MOVE, MoveId.SHADOW_PUNCH ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.LICK ], + [ 1, MoveId.ACID ], // Previous Stage Move, Custom + [ 1, MoveId.MEAN_LOOK ], + [ 12, MoveId.PAYBACK ], + [ 16, MoveId.SPITE ], + [ 20, MoveId.CURSE ], + [ 24, MoveId.HEX ], + [ 30, MoveId.NIGHT_SHADE ], + [ 36, MoveId.SUCKER_PUNCH ], + [ 42, MoveId.DARK_PULSE ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.DESTINY_BOND ], + [ 60, MoveId.DREAM_EATER ], ], [Species.GENGAR]: [ - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.LICK ], - [ 1, Moves.ACID ], // Previous Stage Move, Custom - [ 1, Moves.PERISH_SONG ], - [ 1, Moves.MEAN_LOOK ], - [ 1, Moves.SHADOW_PUNCH ], - [ 1, Moves.REFLECT_TYPE ], - [ 12, Moves.PAYBACK ], - [ 16, Moves.SPITE ], - [ 20, Moves.CURSE ], - [ 24, Moves.HEX ], - [ 30, Moves.NIGHT_SHADE ], - [ 36, Moves.SUCKER_PUNCH ], - [ 42, Moves.DARK_PULSE ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.DESTINY_BOND ], - [ 60, Moves.DREAM_EATER ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.LICK ], + [ 1, MoveId.ACID ], // Previous Stage Move, Custom + [ 1, MoveId.PERISH_SONG ], + [ 1, MoveId.MEAN_LOOK ], + [ 1, MoveId.SHADOW_PUNCH ], + [ 1, MoveId.REFLECT_TYPE ], + [ 12, MoveId.PAYBACK ], + [ 16, MoveId.SPITE ], + [ 20, MoveId.CURSE ], + [ 24, MoveId.HEX ], + [ 30, MoveId.NIGHT_SHADE ], + [ 36, MoveId.SUCKER_PUNCH ], + [ 42, MoveId.DARK_PULSE ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.DESTINY_BOND ], + [ 60, MoveId.DREAM_EATER ], ], [Species.ONIX]: [ - [ 1, Moves.BIND ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SPORT ], - [ 4, Moves.SMACK_DOWN ], - [ 8, Moves.ROCK_POLISH ], - [ 12, Moves.DRAGON_BREATH ], - [ 16, Moves.CURSE ], - [ 20, Moves.ROCK_SLIDE ], - [ 22, Moves.GYRO_BALL ], // Custom, from USUM - [ 24, Moves.SCREECH ], - [ 28, Moves.SAND_TOMB ], - [ 32, Moves.STEALTH_ROCK ], - [ 36, Moves.SLAM ], - [ 40, Moves.SANDSTORM ], - [ 44, Moves.DIG ], - [ 48, Moves.IRON_TAIL ], - [ 52, Moves.STONE_EDGE ], - [ 56, Moves.DOUBLE_EDGE ], + [ 1, MoveId.BIND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MUD_SPORT ], + [ 4, MoveId.SMACK_DOWN ], + [ 8, MoveId.ROCK_POLISH ], + [ 12, MoveId.DRAGON_BREATH ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.ROCK_SLIDE ], + [ 22, MoveId.GYRO_BALL ], // Custom, from USUM + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SAND_TOMB ], + [ 32, MoveId.STEALTH_ROCK ], + [ 36, MoveId.SLAM ], + [ 40, MoveId.SANDSTORM ], + [ 44, MoveId.DIG ], + [ 48, MoveId.IRON_TAIL ], + [ 52, MoveId.STONE_EDGE ], + [ 56, MoveId.DOUBLE_EDGE ], ], [Species.DROWZEE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.HYPNOSIS ], - [ 5, Moves.DISABLE ], - [ 9, Moves.CONFUSION ], - [ 13, Moves.HEADBUTT ], - [ 17, Moves.POISON_GAS ], - [ 21, Moves.PSYBEAM ], - [ 25, Moves.PSYCH_UP ], - [ 29, Moves.ZEN_HEADBUTT ], - [ 33, Moves.SWAGGER ], - [ 37, Moves.PSYCHIC ], - [ 41, Moves.NASTY_PLOT ], - [ 45, Moves.PSYSHOCK ], - [ 49, Moves.FUTURE_SIGHT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.HYPNOSIS ], + [ 5, MoveId.DISABLE ], + [ 9, MoveId.CONFUSION ], + [ 13, MoveId.HEADBUTT ], + [ 17, MoveId.POISON_GAS ], + [ 21, MoveId.PSYBEAM ], + [ 25, MoveId.PSYCH_UP ], + [ 29, MoveId.ZEN_HEADBUTT ], + [ 33, MoveId.SWAGGER ], + [ 37, MoveId.PSYCHIC ], + [ 41, MoveId.NASTY_PLOT ], + [ 45, MoveId.PSYSHOCK ], + [ 49, MoveId.FUTURE_SIGHT ], ], [Species.HYPNO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.DISABLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.SWITCHEROO ], - [ 1, Moves.NIGHTMARE ], - [ 13, Moves.HEADBUTT ], - [ 17, Moves.POISON_GAS ], - [ 21, Moves.PSYBEAM ], - [ 25, Moves.PSYCH_UP ], - [ 32, Moves.ZEN_HEADBUTT ], - [ 37, Moves.SWAGGER ], - [ 42, Moves.PSYCHIC ], - [ 47, Moves.NASTY_PLOT ], - [ 51, Moves.PSYSHOCK ], - [ 56, Moves.FUTURE_SIGHT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.SWITCHEROO ], + [ 1, MoveId.NIGHTMARE ], + [ 13, MoveId.HEADBUTT ], + [ 17, MoveId.POISON_GAS ], + [ 21, MoveId.PSYBEAM ], + [ 25, MoveId.PSYCH_UP ], + [ 32, MoveId.ZEN_HEADBUTT ], + [ 37, MoveId.SWAGGER ], + [ 42, MoveId.PSYCHIC ], + [ 47, MoveId.NASTY_PLOT ], + [ 51, MoveId.PSYSHOCK ], + [ 56, MoveId.FUTURE_SIGHT ], ], [Species.KRABBY]: [ - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.MUD_SPORT ], - [ 4, Moves.HARDEN ], - [ 8, Moves.METAL_CLAW ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.PROTECT ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.STOMP ], - [ 29, Moves.FLAIL ], - [ 32, Moves.RAZOR_SHELL ], - [ 36, Moves.SLAM ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.CRABHAMMER ], - [ 48, Moves.GUILLOTINE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.MUD_SPORT ], + [ 4, MoveId.HARDEN ], + [ 8, MoveId.METAL_CLAW ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.STOMP ], + [ 29, MoveId.FLAIL ], + [ 32, MoveId.RAZOR_SHELL ], + [ 36, MoveId.SLAM ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.CRABHAMMER ], + [ 48, MoveId.GUILLOTINE ], ], [Species.KINGLER]: [ - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HARDEN ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.HAMMER_ARM ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.MUD_SPORT ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.PROTECT ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.STOMP ], - [ 31, Moves.FLAIL ], - [ 36, Moves.RAZOR_SHELL ], - [ 42, Moves.SLAM ], - [ 48, Moves.SWORDS_DANCE ], - [ 54, Moves.CRABHAMMER ], - [ 60, Moves.GUILLOTINE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.HAMMER_ARM ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.MUD_SPORT ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.STOMP ], + [ 31, MoveId.FLAIL ], + [ 36, MoveId.RAZOR_SHELL ], + [ 42, MoveId.SLAM ], + [ 48, MoveId.SWORDS_DANCE ], + [ 54, MoveId.CRABHAMMER ], + [ 60, MoveId.GUILLOTINE ], ], [Species.VOLTORB]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CHARGE ], - [ 4, Moves.THUNDER_SHOCK ], - [ 6, Moves.EERIE_IMPULSE ], - [ 9, Moves.SPARK ], - [ 11, Moves.ROLLOUT ], - [ 13, Moves.SCREECH ], - [ 16, Moves.CHARGE_BEAM ], - [ 20, Moves.SWIFT ], - [ 22, Moves.ELECTRO_BALL ], - [ 26, Moves.SELF_DESTRUCT ], - [ 29, Moves.LIGHT_SCREEN ], - [ 34, Moves.MAGNET_RISE ], - [ 37, Moves.DISCHARGE ], - [ 41, Moves.EXPLOSION ], - [ 46, Moves.GYRO_BALL ], - [ 50, Moves.MIRROR_COAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CHARGE ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.EERIE_IMPULSE ], + [ 9, MoveId.SPARK ], + [ 11, MoveId.ROLLOUT ], + [ 13, MoveId.SCREECH ], + [ 16, MoveId.CHARGE_BEAM ], + [ 20, MoveId.SWIFT ], + [ 22, MoveId.ELECTRO_BALL ], + [ 26, MoveId.SELF_DESTRUCT ], + [ 29, MoveId.LIGHT_SCREEN ], + [ 34, MoveId.MAGNET_RISE ], + [ 37, MoveId.DISCHARGE ], + [ 41, MoveId.EXPLOSION ], + [ 46, MoveId.GYRO_BALL ], + [ 50, MoveId.MIRROR_COAT ], ], [Species.ELECTRODE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.CHARGE ], - [ 1, Moves.EERIE_IMPULSE ], - [ 1, Moves.MAGNETIC_FLUX ], - [ 9, Moves.SPARK ], - [ 11, Moves.ROLLOUT ], - [ 13, Moves.SCREECH ], - [ 16, Moves.CHARGE_BEAM ], - [ 20, Moves.SWIFT ], - [ 22, Moves.ELECTRO_BALL ], - [ 26, Moves.SELF_DESTRUCT ], - [ 29, Moves.LIGHT_SCREEN ], - [ 36, Moves.MAGNET_RISE ], - [ 41, Moves.DISCHARGE ], - [ 47, Moves.EXPLOSION ], - [ 54, Moves.GYRO_BALL ], - [ 58, Moves.MIRROR_COAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.EERIE_IMPULSE ], + [ 1, MoveId.MAGNETIC_FLUX ], + [ 9, MoveId.SPARK ], + [ 11, MoveId.ROLLOUT ], + [ 13, MoveId.SCREECH ], + [ 16, MoveId.CHARGE_BEAM ], + [ 20, MoveId.SWIFT ], + [ 22, MoveId.ELECTRO_BALL ], + [ 26, MoveId.SELF_DESTRUCT ], + [ 29, MoveId.LIGHT_SCREEN ], + [ 36, MoveId.MAGNET_RISE ], + [ 41, MoveId.DISCHARGE ], + [ 47, MoveId.EXPLOSION ], + [ 54, MoveId.GYRO_BALL ], + [ 58, MoveId.MIRROR_COAT ], ], [Species.EXEGGCUTE]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.BARRAGE ], - [ 5, Moves.REFLECT ], - [ 10, Moves.LEECH_SEED ], - [ 15, Moves.MEGA_DRAIN ], - [ 20, Moves.CONFUSION ], - [ 25, Moves.SYNTHESIS ], - [ 30, Moves.BULLET_SEED ], - [ 35, Moves.GIGA_DRAIN ], - [ 40, Moves.EXTRASENSORY ], - [ 45, Moves.UPROAR ], - [ 50, Moves.WORRY_SEED ], - [ 55, Moves.SOLAR_BEAM ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.BARRAGE ], + [ 5, MoveId.REFLECT ], + [ 10, MoveId.LEECH_SEED ], + [ 15, MoveId.MEGA_DRAIN ], + [ 20, MoveId.CONFUSION ], + [ 25, MoveId.SYNTHESIS ], + [ 30, MoveId.BULLET_SEED ], + [ 35, MoveId.GIGA_DRAIN ], + [ 40, MoveId.EXTRASENSORY ], + [ 45, MoveId.UPROAR ], + [ 50, MoveId.WORRY_SEED ], + [ 55, MoveId.SOLAR_BEAM ], ], [Species.EXEGGUTOR]: [ - [ EVOLVE_MOVE, Moves.STOMP ], - [ RELEARN_MOVE, Moves.GROWTH ], - [ 1, Moves.BARRAGE ], - [ 1, Moves.SEED_BOMB ], - [ 1, Moves.PSYSHOCK ], - [ 1, Moves.WOOD_HAMMER ], - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.BULLET_SEED ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.EXTRASENSORY ], - [ 1, Moves.UPROAR ], - [ 1, Moves.WORRY_SEED ], - [ 1, Moves.SOLAR_BEAM ], - [ 1, Moves.ABSORB ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.REFLECT ], - [ 1, Moves.LEECH_SEED ], + [ EVOLVE_MOVE, MoveId.STOMP ], + [ RELEARN_MOVE, MoveId.GROWTH ], + [ 1, MoveId.BARRAGE ], + [ 1, MoveId.SEED_BOMB ], + [ 1, MoveId.PSYSHOCK ], + [ 1, MoveId.WOOD_HAMMER ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.BULLET_SEED ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.EXTRASENSORY ], + [ 1, MoveId.UPROAR ], + [ 1, MoveId.WORRY_SEED ], + [ 1, MoveId.SOLAR_BEAM ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.LEECH_SEED ], ], [Species.CUBONE]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.MUD_SLAP ], - [ 4, Moves.TAIL_WHIP ], - [ 8, Moves.FALSE_SWIPE ], - [ 12, Moves.HEADBUTT ], - [ 16, Moves.RETALIATE ], - [ 20, Moves.FLING ], - [ 24, Moves.STOMPING_TANTRUM ], - [ 29, Moves.BONE_RUSH ], - [ 32, Moves.FOCUS_ENERGY ], - [ 36, Moves.ENDEAVOR ], - [ 40, Moves.BONEMERANG ], - [ 44, Moves.THRASH ], - [ 48, Moves.DOUBLE_EDGE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.MUD_SLAP ], + [ 4, MoveId.TAIL_WHIP ], + [ 8, MoveId.FALSE_SWIPE ], + [ 12, MoveId.HEADBUTT ], + [ 16, MoveId.RETALIATE ], + [ 20, MoveId.FLING ], + [ 24, MoveId.STOMPING_TANTRUM ], + [ 29, MoveId.BONE_RUSH ], + [ 32, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.ENDEAVOR ], + [ 40, MoveId.BONEMERANG ], + [ 44, MoveId.THRASH ], + [ 48, MoveId.DOUBLE_EDGE ], ], [Species.MAROWAK]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.BONE_CLUB ], - [ 12, Moves.HEADBUTT ], - [ 16, Moves.RETALIATE ], - [ 20, Moves.FLING ], - [ 24, Moves.STOMPING_TANTRUM ], - [ 31, Moves.BONE_RUSH ], - [ 36, Moves.FOCUS_ENERGY ], - [ 42, Moves.ENDEAVOR ], - [ 48, Moves.BONEMERANG ], - [ 54, Moves.THRASH ], - [ 60, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.FALSE_SWIPE ], + [ 1, MoveId.BONE_CLUB ], + [ 12, MoveId.HEADBUTT ], + [ 16, MoveId.RETALIATE ], + [ 20, MoveId.FLING ], + [ 24, MoveId.STOMPING_TANTRUM ], + [ 31, MoveId.BONE_RUSH ], + [ 36, MoveId.FOCUS_ENERGY ], + [ 42, MoveId.ENDEAVOR ], + [ 48, MoveId.BONEMERANG ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.DOUBLE_EDGE ], ], [Species.HITMONLEE]: [ - [ EVOLVE_MOVE, Moves.BRICK_BREAK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.FEINT ], - [ 1, Moves.LOW_SWEEP ], - [ 1, Moves.JUMP_KICK ], - [ 1, Moves.ROLLING_KICK ], - [ 1, Moves.MACH_PUNCH ], // Previous Stage Move, Custom - [ 1, Moves.RAPID_SPIN ], // Previous Stage Move, Custom - [ 4, Moves.DOUBLE_KICK ], - [ 8, Moves.LOW_KICK ], - [ 12, Moves.ENDURE ], - [ 16, Moves.SUCKER_PUNCH ], - [ 21, Moves.WIDE_GUARD ], - [ 24, Moves.BLAZE_KICK ], - [ 28, Moves.FEINT ], - [ 32, Moves.MEGA_KICK ], - [ 36, Moves.CLOSE_COMBAT ], - [ 40, Moves.REVERSAL ], - [ 44, Moves.HIGH_JUMP_KICK ], - [ 50, Moves.AXE_KICK ], + [ EVOLVE_MOVE, MoveId.BRICK_BREAK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.LOW_SWEEP ], + [ 1, MoveId.JUMP_KICK ], + [ 1, MoveId.ROLLING_KICK ], + [ 1, MoveId.MACH_PUNCH ], // Previous Stage Move, Custom + [ 1, MoveId.RAPID_SPIN ], // Previous Stage Move, Custom + [ 4, MoveId.DOUBLE_KICK ], + [ 8, MoveId.LOW_KICK ], + [ 12, MoveId.ENDURE ], + [ 16, MoveId.SUCKER_PUNCH ], + [ 21, MoveId.WIDE_GUARD ], + [ 24, MoveId.BLAZE_KICK ], + [ 28, MoveId.FEINT ], + [ 32, MoveId.MEGA_KICK ], + [ 36, MoveId.CLOSE_COMBAT ], + [ 40, MoveId.REVERSAL ], + [ 44, MoveId.HIGH_JUMP_KICK ], + [ 50, MoveId.AXE_KICK ], ], [Species.HITMONCHAN]: [ - [ EVOLVE_MOVE, Moves.DRAIN_PUNCH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.FEINT ], - [ 1, Moves.PURSUIT ], - [ 1, Moves.COMET_PUNCH ], - [ 1, Moves.LOW_SWEEP ], // Previous Stage Move, Custom - [ 1, Moves.RAPID_SPIN ], // Previous Stage Move, Custom - [ 4, Moves.MACH_PUNCH ], - [ 8, Moves.VACUUM_WAVE ], - [ 12, Moves.DETECT ], - [ 16, Moves.BULLET_PUNCH ], - [ 21, Moves.QUICK_GUARD ], - [ 24, Moves.THUNDER_PUNCH ], - [ 24, Moves.ICE_PUNCH ], - [ 24, Moves.FIRE_PUNCH ], - [ 28, Moves.AGILITY ], - [ 32, Moves.MEGA_PUNCH ], - [ 36, Moves.CLOSE_COMBAT ], - [ 40, Moves.COUNTER ], - [ 44, Moves.FOCUS_PUNCH ], + [ EVOLVE_MOVE, MoveId.DRAIN_PUNCH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.PURSUIT ], + [ 1, MoveId.COMET_PUNCH ], + [ 1, MoveId.LOW_SWEEP ], // Previous Stage Move, Custom + [ 1, MoveId.RAPID_SPIN ], // Previous Stage Move, Custom + [ 4, MoveId.MACH_PUNCH ], + [ 8, MoveId.VACUUM_WAVE ], + [ 12, MoveId.DETECT ], + [ 16, MoveId.BULLET_PUNCH ], + [ 21, MoveId.QUICK_GUARD ], + [ 24, MoveId.THUNDER_PUNCH ], + [ 24, MoveId.ICE_PUNCH ], + [ 24, MoveId.FIRE_PUNCH ], + [ 28, MoveId.AGILITY ], + [ 32, MoveId.MEGA_PUNCH ], + [ 36, MoveId.CLOSE_COMBAT ], + [ 40, MoveId.COUNTER ], + [ 44, MoveId.FOCUS_PUNCH ], ], [Species.LICKITUNG]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.LICK ], - [ 1, Moves.TACKLE ], // Custom - [ 6, Moves.REST ], - [ 12, Moves.SUPERSONIC ], - [ 18, Moves.WRAP ], - [ 24, Moves.DISABLE ], - [ 30, Moves.STOMP ], - [ 32, Moves.ROLLOUT ], - [ 36, Moves.KNOCK_OFF ], - [ 42, Moves.SCREECH ], - [ 48, Moves.SLAM ], - [ 54, Moves.POWER_WHIP ], - [ 60, Moves.BELLY_DRUM ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.LICK ], + [ 1, MoveId.TACKLE ], // Custom + [ 6, MoveId.REST ], + [ 12, MoveId.SUPERSONIC ], + [ 18, MoveId.WRAP ], + [ 24, MoveId.DISABLE ], + [ 30, MoveId.STOMP ], + [ 32, MoveId.ROLLOUT ], + [ 36, MoveId.KNOCK_OFF ], + [ 42, MoveId.SCREECH ], + [ 48, MoveId.SLAM ], + [ 54, MoveId.POWER_WHIP ], + [ 60, MoveId.BELLY_DRUM ], ], [Species.KOFFING]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POISON_GAS ], - [ 4, Moves.SMOG ], - [ 8, Moves.SMOKESCREEN ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SLUDGE ], - [ 24, Moves.HAZE ], - [ 28, Moves.SELF_DESTRUCT ], - [ 32, Moves.SLUDGE_BOMB ], - [ 36, Moves.TOXIC ], - [ 40, Moves.BELCH ], - [ 44, Moves.EXPLOSION ], - [ 48, Moves.MEMENTO ], - [ 52, Moves.DESTINY_BOND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POISON_GAS ], + [ 4, MoveId.SMOG ], + [ 8, MoveId.SMOKESCREEN ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SLUDGE ], + [ 24, MoveId.HAZE ], + [ 28, MoveId.SELF_DESTRUCT ], + [ 32, MoveId.SLUDGE_BOMB ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.BELCH ], + [ 44, MoveId.EXPLOSION ], + [ 48, MoveId.MEMENTO ], + [ 52, MoveId.DESTINY_BOND ], ], [Species.WEEZING]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.SMOG ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.HEAT_WAVE ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SLUDGE ], - [ 24, Moves.HAZE ], - [ 28, Moves.SELF_DESTRUCT ], - [ 32, Moves.SLUDGE_BOMB ], - [ 38, Moves.TOXIC ], - [ 44, Moves.BELCH ], - [ 50, Moves.EXPLOSION ], - [ 56, Moves.MEMENTO ], - [ 62, Moves.DESTINY_BOND ], + [ EVOLVE_MOVE, MoveId.DOUBLE_HIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.HEAT_WAVE ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SLUDGE ], + [ 24, MoveId.HAZE ], + [ 28, MoveId.SELF_DESTRUCT ], + [ 32, MoveId.SLUDGE_BOMB ], + [ 38, MoveId.TOXIC ], + [ 44, MoveId.BELCH ], + [ 50, MoveId.EXPLOSION ], + [ 56, MoveId.MEMENTO ], + [ 62, MoveId.DESTINY_BOND ], ], [Species.RHYHORN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.SMACK_DOWN ], - [ 10, Moves.BULLDOZE ], - [ 15, Moves.HORN_ATTACK ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.STOMP ], - [ 30, Moves.ROCK_BLAST ], - [ 35, Moves.DRILL_RUN ], - [ 40, Moves.TAKE_DOWN ], - [ 45, Moves.EARTHQUAKE ], - [ 50, Moves.STONE_EDGE ], - [ 55, Moves.MEGAHORN ], - [ 60, Moves.HORN_DRILL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.SMACK_DOWN ], + [ 10, MoveId.BULLDOZE ], + [ 15, MoveId.HORN_ATTACK ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.STOMP ], + [ 30, MoveId.ROCK_BLAST ], + [ 35, MoveId.DRILL_RUN ], + [ 40, MoveId.TAKE_DOWN ], + [ 45, MoveId.EARTHQUAKE ], + [ 50, MoveId.STONE_EDGE ], + [ 55, MoveId.MEGAHORN ], + [ 60, MoveId.HORN_DRILL ], ], [Species.RHYDON]: [ - [ EVOLVE_MOVE, Moves.HAMMER_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.SMACK_DOWN ], - [ 1, Moves.BULLDOZE ], - [ 15, Moves.HORN_ATTACK ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.STOMP ], - [ 30, Moves.ROCK_BLAST ], - [ 35, Moves.DRILL_RUN ], - [ 40, Moves.TAKE_DOWN ], - [ 47, Moves.EARTHQUAKE ], - [ 54, Moves.STONE_EDGE ], - [ 61, Moves.MEGAHORN ], - [ 68, Moves.HORN_DRILL ], + [ EVOLVE_MOVE, MoveId.HAMMER_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.SMACK_DOWN ], + [ 1, MoveId.BULLDOZE ], + [ 15, MoveId.HORN_ATTACK ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.STOMP ], + [ 30, MoveId.ROCK_BLAST ], + [ 35, MoveId.DRILL_RUN ], + [ 40, MoveId.TAKE_DOWN ], + [ 47, MoveId.EARTHQUAKE ], + [ 54, MoveId.STONE_EDGE ], + [ 61, MoveId.MEGAHORN ], + [ 68, MoveId.HORN_DRILL ], ], [Species.CHANSEY]: [ - [ 1, Moves.POUND ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.DISARMING_VOICE ], - [ 4, Moves.TAIL_WHIP ], - [ 8, Moves.ECHOED_VOICE ], - [ 12, Moves.LIFE_DEW ], - [ 16, Moves.SING ], - [ 20, Moves.FLING ], - [ 24, Moves.TAKE_DOWN ], - [ 28, Moves.HEAL_PULSE ], - [ 32, Moves.HELPING_HAND ], - [ 36, Moves.LIGHT_SCREEN ], - [ 40, Moves.DOUBLE_EDGE ], - [ 44, Moves.SOFT_BOILED ], - [ 48, Moves.LAST_RESORT ], - [ 52, Moves.HEALING_WISH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 4, MoveId.TAIL_WHIP ], + [ 8, MoveId.ECHOED_VOICE ], + [ 12, MoveId.LIFE_DEW ], + [ 16, MoveId.SING ], + [ 20, MoveId.FLING ], + [ 24, MoveId.TAKE_DOWN ], + [ 28, MoveId.HEAL_PULSE ], + [ 32, MoveId.HELPING_HAND ], + [ 36, MoveId.LIGHT_SCREEN ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 44, MoveId.SOFT_BOILED ], + [ 48, MoveId.LAST_RESORT ], + [ 52, MoveId.HEALING_WISH ], ], [Species.TANGELA]: [ - [ 1, Moves.BIND ], - [ 1, Moves.ABSORB ], - [ 1, Moves.CONSTRICT ], - [ 4, Moves.STUN_SPORE ], - [ 8, Moves.GROWTH ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.VINE_WHIP ], - [ 20, Moves.POISON_POWDER ], - [ 24, Moves.DOUBLE_HIT ], - [ 28, Moves.KNOCK_OFF ], - [ 32, Moves.GIGA_DRAIN ], - [ 34, Moves.ANCIENT_POWER ], - [ 36, Moves.SLEEP_POWDER ], - [ 40, Moves.SLAM ], - [ 44, Moves.TICKLE ], - [ 48, Moves.POWER_WHIP ], - [ 52, Moves.INGRAIN ], - [ 56, Moves.GRASSY_TERRAIN ], + [ 1, MoveId.BIND ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.CONSTRICT ], + [ 4, MoveId.STUN_SPORE ], + [ 8, MoveId.GROWTH ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.VINE_WHIP ], + [ 20, MoveId.POISON_POWDER ], + [ 24, MoveId.DOUBLE_HIT ], + [ 28, MoveId.KNOCK_OFF ], + [ 32, MoveId.GIGA_DRAIN ], + [ 34, MoveId.ANCIENT_POWER ], + [ 36, MoveId.SLEEP_POWDER ], + [ 40, MoveId.SLAM ], + [ 44, MoveId.TICKLE ], + [ 48, MoveId.POWER_WHIP ], + [ 52, MoveId.INGRAIN ], + [ 56, MoveId.GRASSY_TERRAIN ], ], [Species.KANGASKHAN]: [ - [ 1, Moves.POUND ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.COMET_PUNCH ], - [ 4, Moves.GROWL ], - [ 8, Moves.FAKE_OUT ], - [ 12, Moves.BITE ], - [ 16, Moves.STOMP ], - [ 20, Moves.FOCUS_ENERGY ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.DOUBLE_HIT ], - [ 36, Moves.CRUNCH ], - [ 40, Moves.ENDURE ], - [ 44, Moves.REVERSAL ], - [ 48, Moves.OUTRAGE ], - [ 52, Moves.LAST_RESORT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.COMET_PUNCH ], + [ 4, MoveId.GROWL ], + [ 8, MoveId.FAKE_OUT ], + [ 12, MoveId.BITE ], + [ 16, MoveId.STOMP ], + [ 20, MoveId.FOCUS_ENERGY ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.DOUBLE_HIT ], + [ 36, MoveId.CRUNCH ], + [ 40, MoveId.ENDURE ], + [ 44, MoveId.REVERSAL ], + [ 48, MoveId.OUTRAGE ], + [ 52, MoveId.LAST_RESORT ], ], [Species.HORSEA]: [ - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 5, Moves.SMOKESCREEN ], - [ 10, Moves.TWISTER ], - [ 15, Moves.FOCUS_ENERGY ], - [ 20, Moves.DRAGON_BREATH ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.AGILITY ], - [ 35, Moves.LASER_FOCUS ], - [ 40, Moves.DRAGON_PULSE ], - [ 45, Moves.HYDRO_PUMP ], - [ 50, Moves.DRAGON_DANCE ], - [ 55, Moves.RAIN_DANCE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 5, MoveId.SMOKESCREEN ], + [ 10, MoveId.TWISTER ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 20, MoveId.DRAGON_BREATH ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.AGILITY ], + [ 35, MoveId.LASER_FOCUS ], + [ 40, MoveId.DRAGON_PULSE ], + [ 45, MoveId.HYDRO_PUMP ], + [ 50, MoveId.DRAGON_DANCE ], + [ 55, MoveId.RAIN_DANCE ], ], [Species.SEADRA]: [ - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.TWISTER ], - [ 15, Moves.FOCUS_ENERGY ], - [ 20, Moves.DRAGON_BREATH ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.AGILITY ], - [ 37, Moves.LASER_FOCUS ], - [ 44, Moves.DRAGON_PULSE ], - [ 51, Moves.HYDRO_PUMP ], - [ 58, Moves.DRAGON_DANCE ], - [ 65, Moves.RAIN_DANCE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.TWISTER ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 20, MoveId.DRAGON_BREATH ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.AGILITY ], + [ 37, MoveId.LASER_FOCUS ], + [ 44, MoveId.DRAGON_PULSE ], + [ 51, MoveId.HYDRO_PUMP ], + [ 58, MoveId.DRAGON_DANCE ], + [ 65, MoveId.RAIN_DANCE ], ], [Species.GOLDEEN]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.PECK ], - [ 1, Moves.WATER_SPORT ], - [ 5, Moves.SUPERSONIC ], - [ 10, Moves.WATER_PULSE ], - [ 15, Moves.HORN_ATTACK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.AQUA_RING ], - [ 30, Moves.FLAIL ], - [ 35, Moves.WATERFALL ], - [ 40, Moves.SOAK ], - [ 45, Moves.MEGAHORN ], - [ 50, Moves.HORN_DRILL ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.PECK ], + [ 1, MoveId.WATER_SPORT ], + [ 5, MoveId.SUPERSONIC ], + [ 10, MoveId.WATER_PULSE ], + [ 15, MoveId.HORN_ATTACK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.AQUA_RING ], + [ 30, MoveId.FLAIL ], + [ 35, MoveId.WATERFALL ], + [ 40, MoveId.SOAK ], + [ 45, MoveId.MEGAHORN ], + [ 50, MoveId.HORN_DRILL ], ], [Species.SEAKING]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_SPORT ], - [ 1, Moves.PECK ], - [ 1, Moves.WATER_PULSE ], - [ 15, Moves.HORN_ATTACK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.AQUA_RING ], - [ 30, Moves.FLAIL ], - [ 37, Moves.WATERFALL ], - [ 44, Moves.SOAK ], - [ 51, Moves.MEGAHORN ], - [ 58, Moves.HORN_DRILL ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_SPORT ], + [ 1, MoveId.PECK ], + [ 1, MoveId.WATER_PULSE ], + [ 15, MoveId.HORN_ATTACK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.AQUA_RING ], + [ 30, MoveId.FLAIL ], + [ 37, MoveId.WATERFALL ], + [ 44, MoveId.SOAK ], + [ 51, MoveId.MEGAHORN ], + [ 58, MoveId.HORN_DRILL ], ], [Species.STARYU]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 4, Moves.WATER_GUN ], - [ 8, Moves.CONFUSE_RAY ], - [ 12, Moves.RAPID_SPIN ], - [ 16, Moves.MINIMIZE ], - [ 20, Moves.SWIFT ], - [ 24, Moves.PSYBEAM ], - [ 28, Moves.BRINE ], - [ 32, Moves.LIGHT_SCREEN ], - [ 36, Moves.POWER_GEM ], - [ 40, Moves.PSYCHIC ], - [ 44, Moves.SURF ], - [ 48, Moves.RECOVER ], - [ 52, Moves.COSMIC_POWER ], - [ 56, Moves.HYDRO_PUMP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 4, MoveId.WATER_GUN ], + [ 8, MoveId.CONFUSE_RAY ], + [ 12, MoveId.RAPID_SPIN ], + [ 16, MoveId.MINIMIZE ], + [ 20, MoveId.SWIFT ], + [ 24, MoveId.PSYBEAM ], + [ 28, MoveId.BRINE ], + [ 32, MoveId.LIGHT_SCREEN ], + [ 36, MoveId.POWER_GEM ], + [ 40, MoveId.PSYCHIC ], + [ 44, MoveId.SURF ], + [ 48, MoveId.RECOVER ], + [ 52, MoveId.COSMIC_POWER ], + [ 56, MoveId.HYDRO_PUMP ], ], [Species.STARMIE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HYDRO_PUMP ], - [ 1, Moves.SURF ], - [ 1, Moves.PSYBEAM ], - [ 1, Moves.PSYCHIC ], - [ 1, Moves.RECOVER ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MINIMIZE ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.SWIFT ], - [ 1, Moves.SPOTLIGHT ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.COSMIC_POWER ], - [ 1, Moves.BRINE ], - [ 1, Moves.POWER_GEM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HYDRO_PUMP ], + [ 1, MoveId.SURF ], + [ 1, MoveId.PSYBEAM ], + [ 1, MoveId.PSYCHIC ], + [ 1, MoveId.RECOVER ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.SPOTLIGHT ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.COSMIC_POWER ], + [ 1, MoveId.BRINE ], + [ 1, MoveId.POWER_GEM ], ], [Species.MR_MIME]: [ - [ 1, Moves.POUND ], - [ 1, Moves.TICKLE ], // Previous Stage Move - [ 1, Moves.BATON_PASS ], - [ 1, Moves.ENCORE ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.POWER_SWAP ], - [ 1, Moves.GUARD_SWAP ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.BARRIER ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.ROLE_PLAY ], - [ 20, Moves.PROTECT ], - [ 24, Moves.RECYCLE ], - [ 28, Moves.PSYBEAM ], - [ 32, Moves.MIMIC ], - [ 36, Moves.LIGHT_SCREEN ], - [ 36, Moves.REFLECT ], - [ 36, Moves.SAFEGUARD ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.DAZZLING_GLEAM ], - [ 48, Moves.PSYCHIC ], - [ 52, Moves.TEETER_DANCE ], + [ 1, MoveId.POUND ], + [ 1, MoveId.TICKLE ], // Previous Stage Move + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.POWER_SWAP ], + [ 1, MoveId.GUARD_SWAP ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.BARRIER ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.ROLE_PLAY ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.RECYCLE ], + [ 28, MoveId.PSYBEAM ], + [ 32, MoveId.MIMIC ], + [ 36, MoveId.LIGHT_SCREEN ], + [ 36, MoveId.REFLECT ], + [ 36, MoveId.SAFEGUARD ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.DAZZLING_GLEAM ], + [ 48, MoveId.PSYCHIC ], + [ 52, MoveId.TEETER_DANCE ], ], [Species.SCYTHER]: [ - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.FURY_CUTTER ], - [ 8, Moves.FALSE_SWIPE ], - [ 12, Moves.WING_ATTACK ], - [ 16, Moves.DOUBLE_TEAM ], - [ 20, Moves.DOUBLE_HIT ], - [ 24, Moves.SLASH ], - [ 28, Moves.FOCUS_ENERGY ], - [ 30, Moves.STEEL_WING ], // Custom - [ 32, Moves.AGILITY ], - [ 36, Moves.AIR_SLASH ], - [ 40, Moves.X_SCISSOR ], - [ 44, Moves.SWORDS_DANCE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.FURY_CUTTER ], + [ 8, MoveId.FALSE_SWIPE ], + [ 12, MoveId.WING_ATTACK ], + [ 16, MoveId.DOUBLE_TEAM ], + [ 20, MoveId.DOUBLE_HIT ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.FOCUS_ENERGY ], + [ 30, MoveId.STEEL_WING ], // Custom + [ 32, MoveId.AGILITY ], + [ 36, MoveId.AIR_SLASH ], + [ 40, MoveId.X_SCISSOR ], + [ 44, MoveId.SWORDS_DANCE ], ], [Species.JYNX]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LICK ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.COPYCAT ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.COVET ], - [ 20, Moves.SING ], - [ 24, Moves.FAKE_TEARS ], - [ 28, Moves.ICE_PUNCH ], - [ 34, Moves.PSYCHIC ], - [ 40, Moves.LOVELY_KISS ], - [ 46, Moves.MEAN_LOOK ], - [ 52, Moves.PERISH_SONG ], - [ 58, Moves.BLIZZARD ], + [ 1, MoveId.POUND ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.COPYCAT ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.COVET ], + [ 20, MoveId.SING ], + [ 24, MoveId.FAKE_TEARS ], + [ 28, MoveId.ICE_PUNCH ], + [ 34, MoveId.PSYCHIC ], + [ 40, MoveId.LOVELY_KISS ], + [ 46, MoveId.MEAN_LOOK ], + [ 52, MoveId.PERISH_SONG ], + [ 58, MoveId.BLIZZARD ], ], [Species.ELECTABUZZ]: [ - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.CHARGE ], - [ 12, Moves.SWIFT ], - [ 16, Moves.SHOCK_WAVE ], - [ 20, Moves.THUNDER_WAVE ], - [ 24, Moves.SCREECH ], - [ 28, Moves.THUNDER_PUNCH ], - [ 34, Moves.DISCHARGE ], - [ 40, Moves.LOW_KICK ], - [ 46, Moves.THUNDERBOLT ], - [ 52, Moves.LIGHT_SCREEN ], - [ 58, Moves.THUNDER ], - [ 64, Moves.GIGA_IMPACT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.CHARGE ], + [ 12, MoveId.SWIFT ], + [ 16, MoveId.SHOCK_WAVE ], + [ 20, MoveId.THUNDER_WAVE ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.THUNDER_PUNCH ], + [ 34, MoveId.DISCHARGE ], + [ 40, MoveId.LOW_KICK ], + [ 46, MoveId.THUNDERBOLT ], + [ 52, MoveId.LIGHT_SCREEN ], + [ 58, MoveId.THUNDER ], + [ 64, MoveId.GIGA_IMPACT ], ], [Species.MAGMAR]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.SMOG ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.FLAME_WHEEL ], - [ 20, Moves.CONFUSE_RAY ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.FIRE_PUNCH ], - [ 34, Moves.LAVA_PLUME ], - [ 40, Moves.LOW_KICK ], - [ 46, Moves.FLAMETHROWER ], - [ 52, Moves.SUNNY_DAY ], - [ 58, Moves.FIRE_BLAST ], - [ 64, Moves.HYPER_BEAM ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.SMOG ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.FLAME_WHEEL ], + [ 20, MoveId.CONFUSE_RAY ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.FIRE_PUNCH ], + [ 34, MoveId.LAVA_PLUME ], + [ 40, MoveId.LOW_KICK ], + [ 46, MoveId.FLAMETHROWER ], + [ 52, MoveId.SUNNY_DAY ], + [ 58, MoveId.FIRE_BLAST ], + [ 64, MoveId.HYPER_BEAM ], ], [Species.PINSIR]: [ - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.HARDEN ], - [ 4, Moves.FOCUS_ENERGY ], - [ 8, Moves.BIND ], - [ 12, Moves.SEISMIC_TOSS ], - [ 16, Moves.BUG_BITE ], - [ 20, Moves.STORM_THROW ], - [ 24, Moves.DOUBLE_HIT ], - [ 28, Moves.VITAL_THROW ], - [ 32, Moves.X_SCISSOR ], - [ 36, Moves.STRENGTH ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.SUBMISSION ], - [ 48, Moves.GUILLOTINE ], - [ 52, Moves.SUPERPOWER ], + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.HARDEN ], + [ 4, MoveId.FOCUS_ENERGY ], + [ 8, MoveId.BIND ], + [ 12, MoveId.SEISMIC_TOSS ], + [ 16, MoveId.BUG_BITE ], + [ 20, MoveId.STORM_THROW ], + [ 24, MoveId.DOUBLE_HIT ], + [ 28, MoveId.VITAL_THROW ], + [ 32, MoveId.X_SCISSOR ], + [ 36, MoveId.STRENGTH ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.SUBMISSION ], + [ 48, MoveId.GUILLOTINE ], + [ 52, MoveId.SUPERPOWER ], ], [Species.TAUROS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.WORK_UP ], - [ 10, Moves.PAYBACK ], - [ 15, Moves.ASSURANCE ], - [ 20, Moves.HORN_ATTACK ], - [ 25, Moves.SCARY_FACE ], - [ 30, Moves.ZEN_HEADBUTT ], - [ 35, Moves.RAGING_BULL ], - [ 40, Moves.REST ], - [ 45, Moves.SWAGGER ], - [ 50, Moves.THRASH ], - [ 55, Moves.DOUBLE_EDGE ], - [ 60, Moves.GIGA_IMPACT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.WORK_UP ], + [ 10, MoveId.PAYBACK ], + [ 15, MoveId.ASSURANCE ], + [ 20, MoveId.HORN_ATTACK ], + [ 25, MoveId.SCARY_FACE ], + [ 30, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.RAGING_BULL ], + [ 40, MoveId.REST ], + [ 45, MoveId.SWAGGER ], + [ 50, MoveId.THRASH ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.GIGA_IMPACT ], ], [Species.MAGIKARP]: [ - [ 1, Moves.SPLASH ], - [ 15, Moves.TACKLE ], - [ 25, Moves.FLAIL ], + [ 1, MoveId.SPLASH ], + [ 15, MoveId.TACKLE ], + [ 25, MoveId.FLAIL ], ], [Species.GYARADOS]: [ - [ EVOLVE_MOVE, Moves.BITE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.SPLASH ], - [ 1, Moves.FLAIL ], - [ 1, Moves.TWISTER ], - [ 4, Moves.WHIRLPOOL ], - [ 8, Moves.ICE_FANG ], - [ 12, Moves.BRINE ], - [ 16, Moves.SCARY_FACE ], - [ 21, Moves.WATERFALL ], - [ 24, Moves.CRUNCH ], - [ 28, Moves.RAIN_DANCE ], - [ 32, Moves.AQUA_TAIL ], - [ 36, Moves.DRAGON_DANCE ], - [ 40, Moves.HYDRO_PUMP ], - [ 44, Moves.HURRICANE ], - [ 48, Moves.THRASH ], - [ 52, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, MoveId.BITE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.TWISTER ], + [ 4, MoveId.WHIRLPOOL ], + [ 8, MoveId.ICE_FANG ], + [ 12, MoveId.BRINE ], + [ 16, MoveId.SCARY_FACE ], + [ 21, MoveId.WATERFALL ], + [ 24, MoveId.CRUNCH ], + [ 28, MoveId.RAIN_DANCE ], + [ 32, MoveId.AQUA_TAIL ], + [ 36, MoveId.DRAGON_DANCE ], + [ 40, MoveId.HYDRO_PUMP ], + [ 44, MoveId.HURRICANE ], + [ 48, MoveId.THRASH ], + [ 52, MoveId.HYPER_BEAM ], ], [Species.LAPRAS]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 5, Moves.SING ], - [ 10, Moves.MIST ], - [ 15, Moves.LIFE_DEW ], - [ 20, Moves.ICE_SHARD ], - [ 25, Moves.CONFUSE_RAY ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.BRINE ], - [ 40, Moves.BODY_SLAM ], - [ 45, Moves.ICE_BEAM ], - [ 50, Moves.RAIN_DANCE ], - [ 55, Moves.HYDRO_PUMP ], - [ 60, Moves.PERISH_SONG ], - [ 65, Moves.SHEER_COLD ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 5, MoveId.SING ], + [ 10, MoveId.MIST ], + [ 15, MoveId.LIFE_DEW ], + [ 20, MoveId.ICE_SHARD ], + [ 25, MoveId.CONFUSE_RAY ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.BRINE ], + [ 40, MoveId.BODY_SLAM ], + [ 45, MoveId.ICE_BEAM ], + [ 50, MoveId.RAIN_DANCE ], + [ 55, MoveId.HYDRO_PUMP ], + [ 60, MoveId.PERISH_SONG ], + [ 65, MoveId.SHEER_COLD ], ], [Species.DITTO]: [ - [ 1, Moves.TRANSFORM ], + [ 1, MoveId.TRANSFORM ], ], [Species.EEVEE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 20, Moves.SWIFT ], - [ 25, Moves.BITE ], - [ 30, Moves.COPYCAT ], - [ 35, Moves.BATON_PASS ], - [ 40, Moves.TAKE_DOWN ], - [ 45, Moves.CHARM ], - [ 50, Moves.DOUBLE_EDGE ], - [ 55, Moves.LAST_RESORT ], - [ 60, Moves.VEEVEE_VOLLEY ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.QUICK_ATTACK ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 20, MoveId.SWIFT ], + [ 25, MoveId.BITE ], + [ 30, MoveId.COPYCAT ], + [ 35, MoveId.BATON_PASS ], + [ 40, MoveId.TAKE_DOWN ], + [ 45, MoveId.CHARM ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 55, MoveId.LAST_RESORT ], + [ 60, MoveId.VEEVEE_VOLLEY ], ], [Species.VAPOREON]: [ - [ EVOLVE_MOVE, Moves.BOUNCY_BUBBLE ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.WATER_GUN ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.HAZE ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.AURORA_BEAM ], - [ 40, Moves.AQUA_RING ], - [ 45, Moves.MUDDY_WATER ], - [ 50, Moves.ACID_ARMOR ], - [ 55, Moves.HYDRO_PUMP ], - [ 60, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.BOUNCY_BUBBLE ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.WATER_GUN ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.HAZE ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.AURORA_BEAM ], + [ 40, MoveId.AQUA_RING ], + [ 45, MoveId.MUDDY_WATER ], + [ 50, MoveId.ACID_ARMOR ], + [ 55, MoveId.HYDRO_PUMP ], + [ 60, MoveId.LAST_RESORT ], ], [Species.JOLTEON]: [ - [ EVOLVE_MOVE, Moves.BUZZY_BUZZ ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.THUNDER_SHOCK ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.DOUBLE_KICK ], - [ 35, Moves.THUNDER_FANG ], - [ 40, Moves.PIN_MISSILE ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.AGILITY ], - [ 55, Moves.THUNDER ], - [ 60, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.BUZZY_BUZZ ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.THUNDER_SHOCK ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.DOUBLE_KICK ], + [ 35, MoveId.THUNDER_FANG ], + [ 40, MoveId.PIN_MISSILE ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.AGILITY ], + [ 55, MoveId.THUNDER ], + [ 60, MoveId.LAST_RESORT ], ], [Species.FLAREON]: [ - [ EVOLVE_MOVE, Moves.SIZZLY_SLIDE ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.EMBER ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.SMOG ], - [ 30, Moves.BITE ], - [ 35, Moves.FIRE_FANG ], - [ 40, Moves.FIRE_SPIN ], - [ 45, Moves.LAVA_PLUME ], - [ 50, Moves.SCARY_FACE ], - [ 55, Moves.FLARE_BLITZ ], - [ 60, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.SIZZLY_SLIDE ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.EMBER ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.SMOG ], + [ 30, MoveId.BITE ], + [ 35, MoveId.FIRE_FANG ], + [ 40, MoveId.FIRE_SPIN ], + [ 45, MoveId.LAVA_PLUME ], + [ 50, MoveId.SCARY_FACE ], + [ 55, MoveId.FLARE_BLITZ ], + [ 60, MoveId.LAST_RESORT ], ], [Species.PORYGON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CONVERSION ], - [ 5, Moves.RECYCLE ], - [ 10, Moves.MAGNET_RISE ], - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.CONVERSION_2 ], - [ 30, Moves.AGILITY ], - [ 35, Moves.RECOVER ], - [ 40, Moves.DISCHARGE ], - [ 45, Moves.TRI_ATTACK ], - [ 50, Moves.MAGIC_COAT ], - [ 55, Moves.LOCK_ON ], - [ 60, Moves.ZAP_CANNON ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CONVERSION ], + [ 5, MoveId.RECYCLE ], + [ 10, MoveId.MAGNET_RISE ], + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.CONVERSION_2 ], + [ 30, MoveId.AGILITY ], + [ 35, MoveId.RECOVER ], + [ 40, MoveId.DISCHARGE ], + [ 45, MoveId.TRI_ATTACK ], + [ 50, MoveId.MAGIC_COAT ], + [ 55, MoveId.LOCK_ON ], + [ 60, MoveId.ZAP_CANNON ], ], [Species.OMANYTE]: [ - [ 1, Moves.BIND ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.CONSTRICT ], - [ 5, Moves.ROLLOUT ], - [ 10, Moves.SAND_ATTACK ], - [ 15, Moves.WATER_GUN ], - [ 20, Moves.LEER ], - [ 25, Moves.MUD_SHOT ], - [ 30, Moves.ANCIENT_POWER ], - [ 35, Moves.BRINE ], - [ 41, Moves.PROTECT ], - [ 45, Moves.ROCK_BLAST ], - [ 50, Moves.SURF ], - [ 55, Moves.SHELL_SMASH ], - [ 60, Moves.HYDRO_PUMP ], + [ 1, MoveId.BIND ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.CONSTRICT ], + [ 5, MoveId.ROLLOUT ], + [ 10, MoveId.SAND_ATTACK ], + [ 15, MoveId.WATER_GUN ], + [ 20, MoveId.LEER ], + [ 25, MoveId.MUD_SHOT ], + [ 30, MoveId.ANCIENT_POWER ], + [ 35, MoveId.BRINE ], + [ 41, MoveId.PROTECT ], + [ 45, MoveId.ROCK_BLAST ], + [ 50, MoveId.SURF ], + [ 55, MoveId.SHELL_SMASH ], + [ 60, MoveId.HYDRO_PUMP ], ], [Species.OMASTAR]: [ - [ EVOLVE_MOVE, Moves.CRUNCH ], - [ 1, Moves.BIND ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.SPIKE_CANNON ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ROLLOUT ], - [ 15, Moves.WATER_GUN ], - [ 20, Moves.LEER ], - [ 25, Moves.MUD_SHOT ], - [ 30, Moves.ANCIENT_POWER ], - [ 35, Moves.BRINE ], - [ 43, Moves.PROTECT ], - [ 49, Moves.ROCK_BLAST ], - [ 56, Moves.SURF ], - [ 63, Moves.SHELL_SMASH ], - [ 70, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.BIND ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.SPIKE_CANNON ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ROLLOUT ], + [ 15, MoveId.WATER_GUN ], + [ 20, MoveId.LEER ], + [ 25, MoveId.MUD_SHOT ], + [ 30, MoveId.ANCIENT_POWER ], + [ 35, MoveId.BRINE ], + [ 43, MoveId.PROTECT ], + [ 49, MoveId.ROCK_BLAST ], + [ 56, MoveId.SURF ], + [ 63, MoveId.SHELL_SMASH ], + [ 70, MoveId.HYDRO_PUMP ], ], [Species.KABUTO]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.HARDEN ], - [ 5, Moves.SCRATCH ], - [ 10, Moves.SAND_ATTACK ], - [ 15, Moves.AQUA_JET ], - [ 20, Moves.LEER ], - [ 25, Moves.MUD_SHOT ], - [ 30, Moves.ANCIENT_POWER ], - [ 35, Moves.BRINE ], - [ 41, Moves.PROTECT ], - [ 45, Moves.LEECH_LIFE ], - [ 50, Moves.LIQUIDATION ], - [ 55, Moves.METAL_SOUND ], - [ 60, Moves.STONE_EDGE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.SCRATCH ], + [ 10, MoveId.SAND_ATTACK ], + [ 15, MoveId.AQUA_JET ], + [ 20, MoveId.LEER ], + [ 25, MoveId.MUD_SHOT ], + [ 30, MoveId.ANCIENT_POWER ], + [ 35, MoveId.BRINE ], + [ 41, MoveId.PROTECT ], + [ 45, MoveId.LEECH_LIFE ], + [ 50, MoveId.LIQUIDATION ], + [ 55, MoveId.METAL_SOUND ], + [ 60, MoveId.STONE_EDGE ], ], [Species.KABUTOPS]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.ABSORB ], - [ 1, Moves.HARDEN ], - [ 1, Moves.FEINT ], - [ 1, Moves.NIGHT_SLASH ], - [ 15, Moves.AQUA_JET ], - [ 20, Moves.LEER ], - [ 25, Moves.MUD_SHOT ], - [ 30, Moves.ANCIENT_POWER ], - [ 35, Moves.BRINE ], - [ 43, Moves.PROTECT ], - [ 49, Moves.LEECH_LIFE ], - [ 56, Moves.LIQUIDATION ], - [ 63, Moves.METAL_SOUND ], - [ 70, Moves.STONE_EDGE ], + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.NIGHT_SLASH ], + [ 15, MoveId.AQUA_JET ], + [ 20, MoveId.LEER ], + [ 25, MoveId.MUD_SHOT ], + [ 30, MoveId.ANCIENT_POWER ], + [ 35, MoveId.BRINE ], + [ 43, MoveId.PROTECT ], + [ 49, MoveId.LEECH_LIFE ], + [ 56, MoveId.LIQUIDATION ], + [ 63, MoveId.METAL_SOUND ], + [ 70, MoveId.STONE_EDGE ], ], [Species.AERODACTYL]: [ - [ 1, Moves.BITE ], - [ 1, Moves.ANCIENT_POWER ], - [ 5, Moves.SUPERSONIC ], - [ 10, Moves.WING_ATTACK ], - [ 15, Moves.SCARY_FACE ], - [ 20, Moves.ROCK_SLIDE ], - [ 25, Moves.ROAR ], - [ 30, Moves.CRUNCH ], - [ 35, Moves.IRON_HEAD ], - [ 40, Moves.TAKE_DOWN ], - [ 45, Moves.STONE_EDGE ], - [ 50, Moves.AGILITY ], - [ 55, Moves.HYPER_BEAM ], - [ 60, Moves.GIGA_IMPACT ], + [ 1, MoveId.BITE ], + [ 1, MoveId.ANCIENT_POWER ], + [ 5, MoveId.SUPERSONIC ], + [ 10, MoveId.WING_ATTACK ], + [ 15, MoveId.SCARY_FACE ], + [ 20, MoveId.ROCK_SLIDE ], + [ 25, MoveId.ROAR ], + [ 30, MoveId.CRUNCH ], + [ 35, MoveId.IRON_HEAD ], + [ 40, MoveId.TAKE_DOWN ], + [ 45, MoveId.STONE_EDGE ], + [ 50, MoveId.AGILITY ], + [ 55, MoveId.HYPER_BEAM ], + [ 60, MoveId.GIGA_IMPACT ], ], [Species.SNORLAX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SCREECH ], - [ 1, Moves.ODOR_SLEUTH ], // Previous Stage Move - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.METRONOME ], - [ 1, Moves.LICK ], - [ 1, Moves.FLAIL ], - [ 1, Moves.STOCKPILE ], - [ 1, Moves.SWALLOW ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.BLOCK ], - [ 1, Moves.COVET ], - [ 1, Moves.FLING ], - [ 1, Moves.LAST_RESORT ], - [ 12, Moves.YAWN ], - [ 16, Moves.BITE ], - [ 20, Moves.REST ], - [ 20, Moves.SNORE ], - [ 20, Moves.SLEEP_TALK ], - [ 24, Moves.CRUNCH ], - [ 28, Moves.BODY_SLAM ], - [ 32, Moves.HEAVY_SLAM ], - [ 36, Moves.AMNESIA ], - [ 40, Moves.HIGH_HORSEPOWER ], - [ 44, Moves.HAMMER_ARM ], - [ 48, Moves.BELLY_DRUM ], - [ 52, Moves.BELCH ], - [ 56, Moves.GIGA_IMPACT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SCREECH ], + [ 1, MoveId.ODOR_SLEUTH ], // Previous Stage Move + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.METRONOME ], + [ 1, MoveId.LICK ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.STOCKPILE ], + [ 1, MoveId.SWALLOW ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.BLOCK ], + [ 1, MoveId.COVET ], + [ 1, MoveId.FLING ], + [ 1, MoveId.LAST_RESORT ], + [ 12, MoveId.YAWN ], + [ 16, MoveId.BITE ], + [ 20, MoveId.REST ], + [ 20, MoveId.SNORE ], + [ 20, MoveId.SLEEP_TALK ], + [ 24, MoveId.CRUNCH ], + [ 28, MoveId.BODY_SLAM ], + [ 32, MoveId.HEAVY_SLAM ], + [ 36, MoveId.AMNESIA ], + [ 40, MoveId.HIGH_HORSEPOWER ], + [ 44, MoveId.HAMMER_ARM ], + [ 48, MoveId.BELLY_DRUM ], + [ 52, MoveId.BELCH ], + [ 56, MoveId.GIGA_IMPACT ], ], [Species.ARTICUNO]: [ - [ 1, Moves.GUST ], - [ 1, Moves.MIST ], - [ 5, Moves.POWDER_SNOW ], - [ 10, Moves.REFLECT ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.TAILWIND ], - [ 35, Moves.FREEZE_DRY ], - [ 40, Moves.ROOST ], - [ 45, Moves.ICE_BEAM ], - [ 50, Moves.SNOWSCAPE ], - [ 55, Moves.HURRICANE ], - [ 60, Moves.HAZE ], - [ 65, Moves.BLIZZARD ], - [ 70, Moves.SHEER_COLD ], + [ 1, MoveId.GUST ], + [ 1, MoveId.MIST ], + [ 5, MoveId.POWDER_SNOW ], + [ 10, MoveId.REFLECT ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.TAILWIND ], + [ 35, MoveId.FREEZE_DRY ], + [ 40, MoveId.ROOST ], + [ 45, MoveId.ICE_BEAM ], + [ 50, MoveId.SNOWSCAPE ], + [ 55, MoveId.HURRICANE ], + [ 60, MoveId.HAZE ], + [ 65, MoveId.BLIZZARD ], + [ 70, MoveId.SHEER_COLD ], ], [Species.ZAPDOS]: [ - [ 1, Moves.PECK ], - [ 1, Moves.THUNDER_WAVE ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.LIGHT_SCREEN ], - [ 15, Moves.PLUCK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.CHARGE ], - [ 35, Moves.DRILL_PECK ], - [ 40, Moves.ROOST ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.RAIN_DANCE ], - [ 55, Moves.THUNDER ], - [ 60, Moves.DETECT ], - [ 65, Moves.MAGNETIC_FLUX ], - [ 70, Moves.ZAP_CANNON ], + [ 1, MoveId.PECK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.LIGHT_SCREEN ], + [ 15, MoveId.PLUCK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.CHARGE ], + [ 35, MoveId.DRILL_PECK ], + [ 40, MoveId.ROOST ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.RAIN_DANCE ], + [ 55, MoveId.THUNDER ], + [ 60, MoveId.DETECT ], + [ 65, MoveId.MAGNETIC_FLUX ], + [ 70, MoveId.ZAP_CANNON ], ], [Species.MOLTRES]: [ - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 5, Moves.EMBER ], - [ 10, Moves.SAFEGUARD ], - [ 15, Moves.WING_ATTACK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.INCINERATE ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.ROOST ], - [ 45, Moves.HEAT_WAVE ], - [ 50, Moves.SUNNY_DAY ], - [ 55, Moves.HURRICANE ], - [ 60, Moves.ENDURE ], - [ 65, Moves.OVERHEAT ], - [ 70, Moves.SKY_ATTACK ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 5, MoveId.EMBER ], + [ 10, MoveId.SAFEGUARD ], + [ 15, MoveId.WING_ATTACK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.INCINERATE ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.ROOST ], + [ 45, MoveId.HEAT_WAVE ], + [ 50, MoveId.SUNNY_DAY ], + [ 55, MoveId.HURRICANE ], + [ 60, MoveId.ENDURE ], + [ 65, MoveId.OVERHEAT ], + [ 70, MoveId.SKY_ATTACK ], ], [Species.DRATINI]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 5, Moves.TWISTER ], - [ 10, Moves.THUNDER_WAVE ], - [ 15, Moves.DRAGON_TAIL ], - [ 20, Moves.AGILITY ], - [ 25, Moves.SLAM ], - [ 31, Moves.AQUA_TAIL ], - [ 35, Moves.DRAGON_RUSH ], - [ 40, Moves.SAFEGUARD ], - [ 45, Moves.RAIN_DANCE ], - [ 50, Moves.DRAGON_DANCE ], - [ 55, Moves.OUTRAGE ], - [ 60, Moves.HYPER_BEAM ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 5, MoveId.TWISTER ], + [ 10, MoveId.THUNDER_WAVE ], + [ 15, MoveId.DRAGON_TAIL ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.SLAM ], + [ 31, MoveId.AQUA_TAIL ], + [ 35, MoveId.DRAGON_RUSH ], + [ 40, MoveId.SAFEGUARD ], + [ 45, MoveId.RAIN_DANCE ], + [ 50, MoveId.DRAGON_DANCE ], + [ 55, MoveId.OUTRAGE ], + [ 60, MoveId.HYPER_BEAM ], ], [Species.DRAGONAIR]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.TWISTER ], - [ 15, Moves.DRAGON_TAIL ], - [ 20, Moves.AGILITY ], - [ 25, Moves.SLAM ], - [ 33, Moves.AQUA_TAIL ], - [ 39, Moves.DRAGON_RUSH ], - [ 46, Moves.SAFEGUARD ], - [ 53, Moves.RAIN_DANCE ], - [ 60, Moves.DRAGON_DANCE ], - [ 67, Moves.OUTRAGE ], - [ 74, Moves.HYPER_BEAM ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.TWISTER ], + [ 15, MoveId.DRAGON_TAIL ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.SLAM ], + [ 33, MoveId.AQUA_TAIL ], + [ 39, MoveId.DRAGON_RUSH ], + [ 46, MoveId.SAFEGUARD ], + [ 53, MoveId.RAIN_DANCE ], + [ 60, MoveId.DRAGON_DANCE ], + [ 67, MoveId.OUTRAGE ], + [ 74, MoveId.HYPER_BEAM ], ], [Species.DRAGONITE]: [ - [ EVOLVE_MOVE, Moves.HURRICANE ], - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.THUNDER_PUNCH ], - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.TWISTER ], - [ 1, Moves.EXTREME_SPEED ], - [ 1, Moves.ROOST ], - [ 15, Moves.DRAGON_TAIL ], - [ 20, Moves.AGILITY ], - [ 25, Moves.SLAM ], - [ 33, Moves.AQUA_TAIL ], - [ 39, Moves.DRAGON_RUSH ], - [ 41, Moves.OUTRAGE ], - [ 46, Moves.SAFEGUARD ], - [ 53, Moves.RAIN_DANCE ], - [ 62, Moves.DRAGON_DANCE ], - [ 80, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, MoveId.HURRICANE ], + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.EXTREME_SPEED ], + [ 1, MoveId.ROOST ], + [ 15, MoveId.DRAGON_TAIL ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.SLAM ], + [ 33, MoveId.AQUA_TAIL ], + [ 39, MoveId.DRAGON_RUSH ], + [ 41, MoveId.OUTRAGE ], + [ 46, MoveId.SAFEGUARD ], + [ 53, MoveId.RAIN_DANCE ], + [ 62, MoveId.DRAGON_DANCE ], + [ 80, MoveId.HYPER_BEAM ], ], [Species.MEWTWO]: [ - [ 1, Moves.DISABLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SWIFT ], - [ 1, Moves.LIFE_DEW ], - [ 8, Moves.ANCIENT_POWER ], - [ 16, Moves.PSYCHO_CUT ], - [ 24, Moves.SAFEGUARD ], - [ 32, Moves.AMNESIA ], - [ 40, Moves.AURA_SPHERE ], - [ 48, Moves.PSYCHIC ], - [ 56, Moves.POWER_SWAP ], - [ 56, Moves.GUARD_SWAP ], - [ 64, Moves.MIST ], - [ 72, Moves.PSYSTRIKE ], - [ 80, Moves.RECOVER ], - [ 88, Moves.FUTURE_SIGHT ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.LIFE_DEW ], + [ 8, MoveId.ANCIENT_POWER ], + [ 16, MoveId.PSYCHO_CUT ], + [ 24, MoveId.SAFEGUARD ], + [ 32, MoveId.AMNESIA ], + [ 40, MoveId.AURA_SPHERE ], + [ 48, MoveId.PSYCHIC ], + [ 56, MoveId.POWER_SWAP ], + [ 56, MoveId.GUARD_SWAP ], + [ 64, MoveId.MIST ], + [ 72, MoveId.PSYSTRIKE ], + [ 80, MoveId.RECOVER ], + [ 88, MoveId.FUTURE_SIGHT ], ], [Species.MEW]: [ - [ 1, Moves.POUND ], - [ 1, Moves.REFLECT_TYPE ], - [ 10, Moves.AMNESIA ], - [ 20, Moves.BATON_PASS ], - [ 30, Moves.ANCIENT_POWER ], - [ 40, Moves.LIFE_DEW ], - [ 50, Moves.NASTY_PLOT ], - [ 60, Moves.METRONOME ], - [ 70, Moves.IMPRISON ], - [ 80, Moves.TRANSFORM ], - [ 90, Moves.AURA_SPHERE ], - [ 100, Moves.PSYCHIC ], + [ 1, MoveId.POUND ], + [ 1, MoveId.REFLECT_TYPE ], + [ 10, MoveId.AMNESIA ], + [ 20, MoveId.BATON_PASS ], + [ 30, MoveId.ANCIENT_POWER ], + [ 40, MoveId.LIFE_DEW ], + [ 50, MoveId.NASTY_PLOT ], + [ 60, MoveId.METRONOME ], + [ 70, MoveId.IMPRISON ], + [ 80, MoveId.TRANSFORM ], + [ 90, MoveId.AURA_SPHERE ], + [ 100, MoveId.PSYCHIC ], ], [Species.CHIKORITA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.RAZOR_LEAF ], // Custom, moved from 6 to 5 - [ 9, Moves.POISON_POWDER ], - [ 12, Moves.SYNTHESIS ], - [ 17, Moves.REFLECT ], - [ 20, Moves.MAGICAL_LEAF ], - [ 23, Moves.LEECH_SEED ], - [ 28, Moves.SWEET_SCENT ], - [ 31, Moves.LIGHT_SCREEN ], - [ 34, Moves.BODY_SLAM ], - [ 39, Moves.SAFEGUARD ], - [ 42, Moves.GIGA_DRAIN ], - [ 45, Moves.SOLAR_BEAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.RAZOR_LEAF ], // Custom, moved from 6 to 5 + [ 9, MoveId.POISON_POWDER ], + [ 12, MoveId.SYNTHESIS ], + [ 17, MoveId.REFLECT ], + [ 20, MoveId.MAGICAL_LEAF ], + [ 23, MoveId.LEECH_SEED ], + [ 28, MoveId.SWEET_SCENT ], + [ 31, MoveId.LIGHT_SCREEN ], + [ 34, MoveId.BODY_SLAM ], + [ 39, MoveId.SAFEGUARD ], + [ 42, MoveId.GIGA_DRAIN ], + [ 45, MoveId.SOLAR_BEAM ], ], [Species.BAYLEEF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.POISON_POWDER ], - [ 12, Moves.SYNTHESIS ], - [ 18, Moves.REFLECT ], - [ 22, Moves.MAGICAL_LEAF ], - [ 26, Moves.LEECH_SEED ], - [ 32, Moves.SWEET_SCENT ], - [ 36, Moves.LIGHT_SCREEN ], - [ 40, Moves.BODY_SLAM ], - [ 46, Moves.SAFEGUARD ], - [ 50, Moves.GIGA_DRAIN ], - [ 54, Moves.SOLAR_BEAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.POISON_POWDER ], + [ 12, MoveId.SYNTHESIS ], + [ 18, MoveId.REFLECT ], + [ 22, MoveId.MAGICAL_LEAF ], + [ 26, MoveId.LEECH_SEED ], + [ 32, MoveId.SWEET_SCENT ], + [ 36, MoveId.LIGHT_SCREEN ], + [ 40, MoveId.BODY_SLAM ], + [ 46, MoveId.SAFEGUARD ], + [ 50, MoveId.GIGA_DRAIN ], + [ 54, MoveId.SOLAR_BEAM ], ], [Species.MEGANIUM]: [ - [ EVOLVE_MOVE, Moves.PETAL_DANCE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.PETAL_BLIZZARD ], - [ 12, Moves.SYNTHESIS ], - [ 18, Moves.REFLECT ], - [ 22, Moves.MAGICAL_LEAF ], - [ 26, Moves.LEECH_SEED ], - [ 34, Moves.SWEET_SCENT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 46, Moves.BODY_SLAM ], - [ 54, Moves.SAFEGUARD ], - [ 60, Moves.GIGA_DRAIN ], - [ 65, Moves.SOLAR_BEAM ], + [ EVOLVE_MOVE, MoveId.PETAL_DANCE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.PETAL_BLIZZARD ], + [ 12, MoveId.SYNTHESIS ], + [ 18, MoveId.REFLECT ], + [ 22, MoveId.MAGICAL_LEAF ], + [ 26, MoveId.LEECH_SEED ], + [ 34, MoveId.SWEET_SCENT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 46, MoveId.BODY_SLAM ], + [ 54, MoveId.SAFEGUARD ], + [ 60, MoveId.GIGA_DRAIN ], + [ 65, MoveId.SOLAR_BEAM ], ], [Species.CYNDAQUIL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 5, Moves.EMBER ], // Custom, moved from 10 to 5 - [ 10, Moves.SMOKESCREEN ], // Custom, moved from 6 to 10 - [ 13, Moves.QUICK_ATTACK ], - [ 19, Moves.FLAME_WHEEL ], - [ 22, Moves.DEFENSE_CURL ], - [ 28, Moves.FLAME_CHARGE ], - [ 31, Moves.SWIFT ], - [ 37, Moves.LAVA_PLUME ], - [ 40, Moves.FLAMETHROWER ], - [ 46, Moves.INFERNO ], - [ 49, Moves.ROLLOUT ], - [ 55, Moves.DOUBLE_EDGE ], - [ 58, Moves.OVERHEAT ], - [ 64, Moves.ERUPTION ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 5, MoveId.EMBER ], // Custom, moved from 10 to 5 + [ 10, MoveId.SMOKESCREEN ], // Custom, moved from 6 to 10 + [ 13, MoveId.QUICK_ATTACK ], + [ 19, MoveId.FLAME_WHEEL ], + [ 22, MoveId.DEFENSE_CURL ], + [ 28, MoveId.FLAME_CHARGE ], + [ 31, MoveId.SWIFT ], + [ 37, MoveId.LAVA_PLUME ], + [ 40, MoveId.FLAMETHROWER ], + [ 46, MoveId.INFERNO ], + [ 49, MoveId.ROLLOUT ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 58, MoveId.OVERHEAT ], + [ 64, MoveId.ERUPTION ], ], [Species.QUILAVA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.SMOKESCREEN ], - [ 10, Moves.EMBER ], - [ 13, Moves.QUICK_ATTACK ], - [ 20, Moves.FLAME_WHEEL ], - [ 24, Moves.DEFENSE_CURL ], - [ 31, Moves.SWIFT ], - [ 35, Moves.FLAME_CHARGE ], - [ 42, Moves.LAVA_PLUME ], - [ 46, Moves.FLAMETHROWER ], - [ 53, Moves.INFERNO ], - [ 57, Moves.ROLLOUT ], - [ 64, Moves.DOUBLE_EDGE ], - [ 68, Moves.OVERHEAT ], - [ 75, Moves.ERUPTION ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SMOKESCREEN ], + [ 10, MoveId.EMBER ], + [ 13, MoveId.QUICK_ATTACK ], + [ 20, MoveId.FLAME_WHEEL ], + [ 24, MoveId.DEFENSE_CURL ], + [ 31, MoveId.SWIFT ], + [ 35, MoveId.FLAME_CHARGE ], + [ 42, MoveId.LAVA_PLUME ], + [ 46, MoveId.FLAMETHROWER ], + [ 53, MoveId.INFERNO ], + [ 57, MoveId.ROLLOUT ], + [ 64, MoveId.DOUBLE_EDGE ], + [ 68, MoveId.OVERHEAT ], + [ 75, MoveId.ERUPTION ], ], [Species.TYPHLOSION]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.ERUPTION ], - [ 1, Moves.GYRO_BALL ], - [ 13, Moves.QUICK_ATTACK ], - [ 20, Moves.FLAME_WHEEL ], - [ 24, Moves.DEFENSE_CURL ], - [ 31, Moves.SWIFT ], - [ 35, Moves.FLAME_CHARGE ], - [ 43, Moves.LAVA_PLUME ], - [ 48, Moves.FLAMETHROWER ], - [ 56, Moves.INFERNO ], - [ 61, Moves.ROLLOUT ], - [ 74, Moves.OVERHEAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.ERUPTION ], + [ 1, MoveId.GYRO_BALL ], + [ 13, MoveId.QUICK_ATTACK ], + [ 20, MoveId.FLAME_WHEEL ], + [ 24, MoveId.DEFENSE_CURL ], + [ 31, MoveId.SWIFT ], + [ 35, MoveId.FLAME_CHARGE ], + [ 43, MoveId.LAVA_PLUME ], + [ 48, MoveId.FLAMETHROWER ], + [ 56, MoveId.INFERNO ], + [ 61, MoveId.ROLLOUT ], + [ 74, MoveId.OVERHEAT ], ], [Species.TOTODILE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.WATER_GUN ], // Custom, moved from 6 to 5 - [ 9, Moves.BITE ], - [ 13, Moves.SCARY_FACE ], - [ 19, Moves.ICE_FANG ], - [ 22, Moves.FLAIL ], - [ 27, Moves.CRUNCH ], - [ 30, Moves.SLASH ], - [ 33, Moves.SCREECH ], - [ 37, Moves.THRASH ], - [ 41, Moves.AQUA_TAIL ], - [ 45, Moves.SUPERPOWER ], - [ 50, Moves.HYDRO_PUMP ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.WATER_GUN ], // Custom, moved from 6 to 5 + [ 9, MoveId.BITE ], + [ 13, MoveId.SCARY_FACE ], + [ 19, MoveId.ICE_FANG ], + [ 22, MoveId.FLAIL ], + [ 27, MoveId.CRUNCH ], + [ 30, MoveId.SLASH ], + [ 33, MoveId.SCREECH ], + [ 37, MoveId.THRASH ], + [ 41, MoveId.AQUA_TAIL ], + [ 45, MoveId.SUPERPOWER ], + [ 50, MoveId.HYDRO_PUMP ], ], [Species.CROCONAW]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 13, Moves.BITE ], - [ 15, Moves.SCARY_FACE ], - [ 21, Moves.ICE_FANG ], - [ 24, Moves.FLAIL ], - [ 30, Moves.CRUNCH ], - [ 34, Moves.SLASH ], - [ 37, Moves.SCREECH ], - [ 42, Moves.THRASH ], - [ 47, Moves.AQUA_TAIL ], - [ 50, Moves.SUPERPOWER ], - [ 55, Moves.HYDRO_PUMP ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 13, MoveId.BITE ], + [ 15, MoveId.SCARY_FACE ], + [ 21, MoveId.ICE_FANG ], + [ 24, MoveId.FLAIL ], + [ 30, MoveId.CRUNCH ], + [ 34, MoveId.SLASH ], + [ 37, MoveId.SCREECH ], + [ 42, MoveId.THRASH ], + [ 47, MoveId.AQUA_TAIL ], + [ 50, MoveId.SUPERPOWER ], + [ 55, MoveId.HYDRO_PUMP ], ], [Species.FERALIGATR]: [ - [ 1, Moves.AGILITY ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 13, Moves.BITE ], - [ 15, Moves.SCARY_FACE ], - [ 21, Moves.ICE_FANG ], - [ 24, Moves.FLAIL ], - [ 32, Moves.CRUNCH ], - [ 37, Moves.SLASH ], - [ 44, Moves.SCREECH ], - [ 51, Moves.THRASH ], - [ 59, Moves.AQUA_TAIL ], - [ 65, Moves.SUPERPOWER ], - [ 70, Moves.HYDRO_PUMP ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 13, MoveId.BITE ], + [ 15, MoveId.SCARY_FACE ], + [ 21, MoveId.ICE_FANG ], + [ 24, MoveId.FLAIL ], + [ 32, MoveId.CRUNCH ], + [ 37, MoveId.SLASH ], + [ 44, MoveId.SCREECH ], + [ 51, MoveId.THRASH ], + [ 59, MoveId.AQUA_TAIL ], + [ 65, MoveId.SUPERPOWER ], + [ 70, MoveId.HYDRO_PUMP ], ], [Species.SENTRET]: [ - [ 1, Moves.SCRATCH ], - [ 4, Moves.DEFENSE_CURL ], - [ 7, Moves.QUICK_ATTACK ], - [ 13, Moves.FURY_SWIPES ], - [ 16, Moves.HELPING_HAND ], - [ 19, Moves.FOLLOW_ME ], - [ 25, Moves.SLAM ], - [ 28, Moves.REST ], - [ 31, Moves.SUCKER_PUNCH ], - [ 36, Moves.AMNESIA ], - [ 39, Moves.BATON_PASS ], - [ 42, Moves.DOUBLE_EDGE ], - [ 47, Moves.HYPER_VOICE ], + [ 1, MoveId.SCRATCH ], + [ 4, MoveId.DEFENSE_CURL ], + [ 7, MoveId.QUICK_ATTACK ], + [ 13, MoveId.FURY_SWIPES ], + [ 16, MoveId.HELPING_HAND ], + [ 19, MoveId.FOLLOW_ME ], + [ 25, MoveId.SLAM ], + [ 28, MoveId.REST ], + [ 31, MoveId.SUCKER_PUNCH ], + [ 36, MoveId.AMNESIA ], + [ 39, MoveId.BATON_PASS ], + [ 42, MoveId.DOUBLE_EDGE ], + [ 47, MoveId.HYPER_VOICE ], ], [Species.FURRET]: [ - [ EVOLVE_MOVE, Moves.AGILITY ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.COIL ], - [ 13, Moves.FURY_SWIPES ], - [ 17, Moves.HELPING_HAND ], - [ 21, Moves.FOLLOW_ME ], - [ 28, Moves.SLAM ], - [ 32, Moves.REST ], - [ 36, Moves.SUCKER_PUNCH ], - [ 42, Moves.AMNESIA ], - [ 46, Moves.BATON_PASS ], - [ 50, Moves.DOUBLE_EDGE ], - [ 56, Moves.HYPER_VOICE ], + [ EVOLVE_MOVE, MoveId.AGILITY ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.COIL ], + [ 13, MoveId.FURY_SWIPES ], + [ 17, MoveId.HELPING_HAND ], + [ 21, MoveId.FOLLOW_ME ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.REST ], + [ 36, MoveId.SUCKER_PUNCH ], + [ 42, MoveId.AMNESIA ], + [ 46, MoveId.BATON_PASS ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.HYPER_VOICE ], ], [Species.HOOTHOOT]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 3, Moves.TACKLE ], - [ 6, Moves.ECHOED_VOICE ], - [ 9, Moves.CONFUSION ], - [ 12, Moves.REFLECT ], - [ 15, Moves.DEFOG ], - [ 18, Moves.AIR_SLASH ], - [ 21, Moves.EXTRASENSORY ], - [ 24, Moves.TAKE_DOWN ], - [ 27, Moves.UPROAR ], - [ 30, Moves.ROOST ], - [ 33, Moves.MOONBLAST ], - [ 36, Moves.HYPNOSIS ], - [ 39, Moves.DREAM_EATER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 3, MoveId.TACKLE ], + [ 6, MoveId.ECHOED_VOICE ], + [ 9, MoveId.CONFUSION ], + [ 12, MoveId.REFLECT ], + [ 15, MoveId.DEFOG ], + [ 18, MoveId.AIR_SLASH ], + [ 21, MoveId.EXTRASENSORY ], + [ 24, MoveId.TAKE_DOWN ], + [ 27, MoveId.UPROAR ], + [ 30, MoveId.ROOST ], + [ 33, MoveId.MOONBLAST ], + [ 36, MoveId.HYPNOSIS ], + [ 39, MoveId.DREAM_EATER ], ], [Species.NOCTOWL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.SKY_ATTACK ], - [ 1, Moves.ECHOED_VOICE ], - [ 9, Moves.CONFUSION ], - [ 12, Moves.REFLECT ], - [ 15, Moves.DEFOG ], - [ 18, Moves.AIR_SLASH ], - [ 23, Moves.EXTRASENSORY ], - [ 28, Moves.TAKE_DOWN ], - [ 33, Moves.UPROAR ], - [ 38, Moves.ROOST ], - [ 43, Moves.MOONBLAST ], - [ 48, Moves.HYPNOSIS ], - [ 53, Moves.DREAM_EATER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.SKY_ATTACK ], + [ 1, MoveId.ECHOED_VOICE ], + [ 9, MoveId.CONFUSION ], + [ 12, MoveId.REFLECT ], + [ 15, MoveId.DEFOG ], + [ 18, MoveId.AIR_SLASH ], + [ 23, MoveId.EXTRASENSORY ], + [ 28, MoveId.TAKE_DOWN ], + [ 33, MoveId.UPROAR ], + [ 38, MoveId.ROOST ], + [ 43, MoveId.MOONBLAST ], + [ 48, MoveId.HYPNOSIS ], + [ 53, MoveId.DREAM_EATER ], ], [Species.LEDYBA]: [ - [ 1, Moves.TACKLE ], - [ 5, Moves.SUPERSONIC ], - [ 8, Moves.SWIFT ], - [ 12, Moves.LIGHT_SCREEN ], - [ 12, Moves.REFLECT ], - [ 12, Moves.SAFEGUARD ], - [ 15, Moves.MACH_PUNCH ], - [ 19, Moves.ROOST ], - [ 22, Moves.STRUGGLE_BUG ], - [ 26, Moves.BATON_PASS ], - [ 29, Moves.AGILITY ], - [ 33, Moves.BUG_BUZZ ], - [ 36, Moves.AIR_SLASH ], - [ 40, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.SUPERSONIC ], + [ 8, MoveId.SWIFT ], + [ 12, MoveId.LIGHT_SCREEN ], + [ 12, MoveId.REFLECT ], + [ 12, MoveId.SAFEGUARD ], + [ 15, MoveId.MACH_PUNCH ], + [ 19, MoveId.ROOST ], + [ 22, MoveId.STRUGGLE_BUG ], + [ 26, MoveId.BATON_PASS ], + [ 29, MoveId.AGILITY ], + [ 33, MoveId.BUG_BUZZ ], + [ 36, MoveId.AIR_SLASH ], + [ 40, MoveId.DOUBLE_EDGE ], ], [Species.LEDIAN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.SWIFT ], - [ 5, Moves.SUPERSONIC ], - [ 12, Moves.LIGHT_SCREEN ], - [ 12, Moves.REFLECT ], - [ 12, Moves.SAFEGUARD ], - [ 15, Moves.MACH_PUNCH ], - [ 20, Moves.ROOST ], - [ 24, Moves.STRUGGLE_BUG ], - [ 29, Moves.BATON_PASS ], - [ 33, Moves.AGILITY ], - [ 38, Moves.BUG_BUZZ ], - [ 42, Moves.AIR_SLASH ], - [ 47, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.SWIFT ], + [ 5, MoveId.SUPERSONIC ], + [ 12, MoveId.LIGHT_SCREEN ], + [ 12, MoveId.REFLECT ], + [ 12, MoveId.SAFEGUARD ], + [ 15, MoveId.MACH_PUNCH ], + [ 20, MoveId.ROOST ], + [ 24, MoveId.STRUGGLE_BUG ], + [ 29, MoveId.BATON_PASS ], + [ 33, MoveId.AGILITY ], + [ 38, MoveId.BUG_BUZZ ], + [ 42, MoveId.AIR_SLASH ], + [ 47, MoveId.DOUBLE_EDGE ], ], [Species.SPINARAK]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.CONSTRICT ], - [ 5, Moves.ABSORB ], - [ 8, Moves.INFESTATION ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.NIGHT_SHADE ], - [ 19, Moves.SHADOW_SNEAK ], - [ 22, Moves.FURY_SWIPES ], - [ 26, Moves.SUCKER_PUNCH ], - [ 29, Moves.AGILITY ], - [ 33, Moves.PIN_MISSILE ], - [ 36, Moves.PSYCHIC ], - [ 40, Moves.POISON_JAB ], - [ 44, Moves.CROSS_POISON ], - [ 47, Moves.STICKY_WEB ], - [ 51, Moves.TOXIC_THREAD ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.CONSTRICT ], + [ 5, MoveId.ABSORB ], + [ 8, MoveId.INFESTATION ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.NIGHT_SHADE ], + [ 19, MoveId.SHADOW_SNEAK ], + [ 22, MoveId.FURY_SWIPES ], + [ 26, MoveId.SUCKER_PUNCH ], + [ 29, MoveId.AGILITY ], + [ 33, MoveId.PIN_MISSILE ], + [ 36, MoveId.PSYCHIC ], + [ 40, MoveId.POISON_JAB ], + [ 44, MoveId.CROSS_POISON ], + [ 47, MoveId.STICKY_WEB ], + [ 51, MoveId.TOXIC_THREAD ], ], [Species.ARIADOS]: [ - [ EVOLVE_MOVE, Moves.SWORDS_DANCE ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.ABSORB ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.FELL_STINGER ], - [ 8, Moves.INFESTATION ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.NIGHT_SHADE ], - [ 19, Moves.SHADOW_SNEAK ], - [ 23, Moves.FURY_SWIPES ], - [ 28, Moves.SUCKER_PUNCH ], - [ 31, Moves.AGILITY ], - [ 35, Moves.PIN_MISSILE ], - [ 41, Moves.PSYCHIC ], - [ 46, Moves.POISON_JAB ], - [ 50, Moves.CROSS_POISON ], - [ 54, Moves.STICKY_WEB ], - [ 59, Moves.TOXIC_THREAD ], + [ EVOLVE_MOVE, MoveId.SWORDS_DANCE ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.FELL_STINGER ], + [ 8, MoveId.INFESTATION ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.NIGHT_SHADE ], + [ 19, MoveId.SHADOW_SNEAK ], + [ 23, MoveId.FURY_SWIPES ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 31, MoveId.AGILITY ], + [ 35, MoveId.PIN_MISSILE ], + [ 41, MoveId.PSYCHIC ], + [ 46, MoveId.POISON_JAB ], + [ 50, MoveId.CROSS_POISON ], + [ 54, MoveId.STICKY_WEB ], + [ 59, MoveId.TOXIC_THREAD ], ], [Species.CROBAT]: [ - [ EVOLVE_MOVE, Moves.CROSS_POISON ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ABSORB ], - [ 1, Moves.TOXIC ], - [ 1, Moves.SCREECH ], - [ 1, Moves.MEAN_LOOK ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.TAILWIND ], - [ 15, Moves.POISON_FANG ], - [ 20, Moves.QUICK_GUARD ], - [ 27, Moves.AIR_CUTTER ], - [ 34, Moves.BITE ], - [ 41, Moves.HAZE ], - [ 48, Moves.VENOSHOCK ], - [ 55, Moves.CONFUSE_RAY ], - [ 62, Moves.AIR_SLASH ], - [ 69, Moves.LEECH_LIFE ], + [ EVOLVE_MOVE, MoveId.CROSS_POISON ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.SCREECH ], + [ 1, MoveId.MEAN_LOOK ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.TAILWIND ], + [ 15, MoveId.POISON_FANG ], + [ 20, MoveId.QUICK_GUARD ], + [ 27, MoveId.AIR_CUTTER ], + [ 34, MoveId.BITE ], + [ 41, MoveId.HAZE ], + [ 48, MoveId.VENOSHOCK ], + [ 55, MoveId.CONFUSE_RAY ], + [ 62, MoveId.AIR_SLASH ], + [ 69, MoveId.LEECH_LIFE ], ], [Species.CHINCHOU]: [ - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.ELECTRO_BALL ], - [ 8, Moves.THUNDER_WAVE ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.CONFUSE_RAY ], - [ 20, Moves.SPARK ], - [ 24, Moves.CHARGE ], - [ 28, Moves.DISCHARGE ], - [ 32, Moves.AQUA_RING ], - [ 36, Moves.FLAIL ], - [ 40, Moves.TAKE_DOWN ], - [ 44, Moves.HYDRO_PUMP ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.ELECTRO_BALL ], + [ 8, MoveId.THUNDER_WAVE ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.CONFUSE_RAY ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.CHARGE ], + [ 28, MoveId.DISCHARGE ], + [ 32, MoveId.AQUA_RING ], + [ 36, MoveId.FLAIL ], + [ 40, MoveId.TAKE_DOWN ], + [ 44, MoveId.HYDRO_PUMP ], ], [Species.LANTURN]: [ - [ EVOLVE_MOVE, Moves.STOCKPILE ], - [ EVOLVE_MOVE, Moves.SPIT_UP ], - [ EVOLVE_MOVE, Moves.SWALLOW ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SPOTLIGHT ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.ELECTRO_BALL ], - [ 1, Moves.EERIE_IMPULSE ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.CONFUSE_RAY ], - [ 20, Moves.SPARK ], - [ 24, Moves.CHARGE ], - [ 30, Moves.DISCHARGE ], - [ 36, Moves.AQUA_RING ], - [ 42, Moves.FLAIL ], - [ 48, Moves.TAKE_DOWN ], - [ 54, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.STOCKPILE ], + [ EVOLVE_MOVE, MoveId.SPIT_UP ], + [ EVOLVE_MOVE, MoveId.SWALLOW ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SPOTLIGHT ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.ELECTRO_BALL ], + [ 1, MoveId.EERIE_IMPULSE ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.CONFUSE_RAY ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.CHARGE ], + [ 30, MoveId.DISCHARGE ], + [ 36, MoveId.AQUA_RING ], + [ 42, MoveId.FLAIL ], + [ 48, MoveId.TAKE_DOWN ], + [ 54, MoveId.HYDRO_PUMP ], ], [Species.PICHU]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.THUNDER_SHOCK ], - [ 4, Moves.PLAY_NICE ], - [ 8, Moves.SWEET_KISS ], - [ 12, Moves.NUZZLE ], - [ 16, Moves.NASTY_PLOT ], - [ 20, Moves.CHARM ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 4, MoveId.PLAY_NICE ], + [ 8, MoveId.SWEET_KISS ], + [ 12, MoveId.NUZZLE ], + [ 16, MoveId.NASTY_PLOT ], + [ 20, MoveId.CHARM ], ], [Species.CLEFFA]: [ - [ 1, Moves.POUND ], - [ 1, Moves.SPLASH ], - [ 1, Moves.COPYCAT ], - [ 4, Moves.SING ], - [ 8, Moves.SWEET_KISS ], - [ 12, Moves.DISARMING_VOICE ], - [ 16, Moves.ENCORE ], - [ 20, Moves.CHARM ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.COPYCAT ], + [ 4, MoveId.SING ], + [ 8, MoveId.SWEET_KISS ], + [ 12, MoveId.DISARMING_VOICE ], + [ 16, MoveId.ENCORE ], + [ 20, MoveId.CHARM ], ], [Species.IGGLYBUFF]: [ - [ 1, Moves.POUND ], - [ 1, Moves.SING ], - [ 1, Moves.COPYCAT ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.SWEET_KISS ], - [ 12, Moves.DISARMING_VOICE ], - [ 16, Moves.DISABLE ], - [ 20, Moves.CHARM ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SING ], + [ 1, MoveId.COPYCAT ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.SWEET_KISS ], + [ 12, MoveId.DISARMING_VOICE ], + [ 16, MoveId.DISABLE ], + [ 20, MoveId.CHARM ], ], [Species.TOGEPI]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 4, Moves.SWEET_KISS ], - [ 8, Moves.LIFE_DEW ], - [ 12, Moves.CHARM ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.YAWN ], - [ 24, Moves.METRONOME ], - [ 28, Moves.AFTER_YOU ], - [ 32, Moves.DOUBLE_EDGE ], - [ 36, Moves.SAFEGUARD ], - [ 40, Moves.FOLLOW_ME ], - [ 44, Moves.BATON_PASS ], - [ 48, Moves.LAST_RESORT ], - [ 52, Moves.WISH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.SWEET_KISS ], + [ 8, MoveId.LIFE_DEW ], + [ 12, MoveId.CHARM ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.YAWN ], + [ 24, MoveId.METRONOME ], + [ 28, MoveId.AFTER_YOU ], + [ 32, MoveId.DOUBLE_EDGE ], + [ 36, MoveId.SAFEGUARD ], + [ 40, MoveId.FOLLOW_ME ], + [ 44, MoveId.BATON_PASS ], + [ 48, MoveId.LAST_RESORT ], + [ 52, MoveId.WISH ], ], [Species.TOGETIC]: [ - [ EVOLVE_MOVE, Moves.FAIRY_WIND ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.LIFE_DEW ], - [ 12, Moves.CHARM ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.YAWN ], - [ 24, Moves.METRONOME ], - [ 28, Moves.AFTER_YOU ], - [ 32, Moves.DOUBLE_EDGE ], - [ 36, Moves.SAFEGUARD ], - [ 40, Moves.FOLLOW_ME ], - [ 44, Moves.BATON_PASS ], - [ 48, Moves.LAST_RESORT ], - [ 52, Moves.WISH ], + [ EVOLVE_MOVE, MoveId.FAIRY_WIND ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.LIFE_DEW ], + [ 12, MoveId.CHARM ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.YAWN ], + [ 24, MoveId.METRONOME ], + [ 28, MoveId.AFTER_YOU ], + [ 32, MoveId.DOUBLE_EDGE ], + [ 36, MoveId.SAFEGUARD ], + [ 40, MoveId.FOLLOW_ME ], + [ 44, MoveId.BATON_PASS ], + [ 48, MoveId.LAST_RESORT ], + [ 52, MoveId.WISH ], ], [Species.NATU]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 5, Moves.STORED_POWER ], - [ 10, Moves.TELEPORT ], - [ 15, Moves.CONFUSE_RAY ], - [ 20, Moves.NIGHT_SHADE ], - [ 26, Moves.PSYCHO_SHIFT ], - [ 30, Moves.POWER_SWAP ], - [ 35, Moves.PSYCHIC ], - [ 35, Moves.GUARD_SWAP ], - [ 40, Moves.WISH ], - [ 45, Moves.FUTURE_SIGHT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 5, MoveId.STORED_POWER ], + [ 10, MoveId.TELEPORT ], + [ 15, MoveId.CONFUSE_RAY ], + [ 20, MoveId.NIGHT_SHADE ], + [ 26, MoveId.PSYCHO_SHIFT ], + [ 30, MoveId.POWER_SWAP ], + [ 35, MoveId.PSYCHIC ], + [ 35, MoveId.GUARD_SWAP ], + [ 40, MoveId.WISH ], + [ 45, MoveId.FUTURE_SIGHT ], ], [Species.XATU]: [ - [ EVOLVE_MOVE, Moves.AIR_SLASH ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.TAILWIND ], - [ 1, Moves.STORED_POWER ], - [ 15, Moves.CONFUSE_RAY ], - [ 20, Moves.NIGHT_SHADE ], - [ 28, Moves.PSYCHO_SHIFT ], - [ 34, Moves.POWER_SWAP ], - [ 34, Moves.GUARD_SWAP ], - [ 41, Moves.PSYCHIC ], - [ 48, Moves.WISH ], - [ 55, Moves.FUTURE_SIGHT ], + [ EVOLVE_MOVE, MoveId.AIR_SLASH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.TAILWIND ], + [ 1, MoveId.STORED_POWER ], + [ 15, MoveId.CONFUSE_RAY ], + [ 20, MoveId.NIGHT_SHADE ], + [ 28, MoveId.PSYCHO_SHIFT ], + [ 34, MoveId.POWER_SWAP ], + [ 34, MoveId.GUARD_SWAP ], + [ 41, MoveId.PSYCHIC ], + [ 48, MoveId.WISH ], + [ 55, MoveId.FUTURE_SIGHT ], ], [Species.MAREEP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.THUNDER_SHOCK ], - [ 11, Moves.COTTON_SPORE ], - [ 15, Moves.CHARGE ], - [ 18, Moves.TAKE_DOWN ], - [ 22, Moves.ELECTRO_BALL ], - [ 25, Moves.CONFUSE_RAY ], - [ 29, Moves.POWER_GEM ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.COTTON_GUARD ], - [ 39, Moves.DAZZLING_GLEAM ], - [ 43, Moves.LIGHT_SCREEN ], - [ 46, Moves.THUNDER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.THUNDER_SHOCK ], + [ 11, MoveId.COTTON_SPORE ], + [ 15, MoveId.CHARGE ], + [ 18, MoveId.TAKE_DOWN ], + [ 22, MoveId.ELECTRO_BALL ], + [ 25, MoveId.CONFUSE_RAY ], + [ 29, MoveId.POWER_GEM ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.COTTON_GUARD ], + [ 39, MoveId.DAZZLING_GLEAM ], + [ 43, MoveId.LIGHT_SCREEN ], + [ 46, MoveId.THUNDER ], ], [Species.FLAAFFY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 6, Moves.THUNDER_SHOCK ], - [ 9, Moves.THUNDER_WAVE ], - [ 11, Moves.COTTON_SPORE ], - [ 16, Moves.CHARGE ], - [ 20, Moves.TAKE_DOWN ], - [ 25, Moves.ELECTRO_BALL ], - [ 29, Moves.CONFUSE_RAY ], - [ 34, Moves.POWER_GEM ], - [ 38, Moves.DISCHARGE ], - [ 43, Moves.COTTON_GUARD ], - [ 47, Moves.DAZZLING_GLEAM ], - [ 52, Moves.LIGHT_SCREEN ], - [ 56, Moves.THUNDER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 6, MoveId.THUNDER_SHOCK ], + [ 9, MoveId.THUNDER_WAVE ], + [ 11, MoveId.COTTON_SPORE ], + [ 16, MoveId.CHARGE ], + [ 20, MoveId.TAKE_DOWN ], + [ 25, MoveId.ELECTRO_BALL ], + [ 29, MoveId.CONFUSE_RAY ], + [ 34, MoveId.POWER_GEM ], + [ 38, MoveId.DISCHARGE ], + [ 43, MoveId.COTTON_GUARD ], + [ 47, MoveId.DAZZLING_GLEAM ], + [ 52, MoveId.LIGHT_SCREEN ], + [ 56, MoveId.THUNDER ], ], [Species.AMPHAROS]: [ - [ EVOLVE_MOVE, Moves.THUNDER_PUNCH ], - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.ZAP_CANNON ], - [ 1, Moves.DRAGON_PULSE ], - [ 1, Moves.MAGNETIC_FLUX ], - [ 1, Moves.ION_DELUGE ], - [ 11, Moves.COTTON_SPORE ], - [ 16, Moves.CHARGE ], - [ 20, Moves.TAKE_DOWN ], - [ 25, Moves.ELECTRO_BALL ], - [ 29, Moves.CONFUSE_RAY ], - [ 35, Moves.POWER_GEM ], - [ 40, Moves.DISCHARGE ], - [ 46, Moves.COTTON_GUARD ], - [ 51, Moves.DAZZLING_GLEAM ], - [ 57, Moves.LIGHT_SCREEN ], - [ 62, Moves.THUNDER ], + [ EVOLVE_MOVE, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.ZAP_CANNON ], + [ 1, MoveId.DRAGON_PULSE ], + [ 1, MoveId.MAGNETIC_FLUX ], + [ 1, MoveId.ION_DELUGE ], + [ 11, MoveId.COTTON_SPORE ], + [ 16, MoveId.CHARGE ], + [ 20, MoveId.TAKE_DOWN ], + [ 25, MoveId.ELECTRO_BALL ], + [ 29, MoveId.CONFUSE_RAY ], + [ 35, MoveId.POWER_GEM ], + [ 40, MoveId.DISCHARGE ], + [ 46, MoveId.COTTON_GUARD ], + [ 51, MoveId.DAZZLING_GLEAM ], + [ 57, MoveId.LIGHT_SCREEN ], + [ 62, MoveId.THUNDER ], ], [Species.BELLOSSOM]: [ - [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], - [ 1, Moves.ACID ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.PETAL_DANCE ], - [ 1, Moves.TOXIC ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.QUIVER_DANCE ], - [ 1, Moves.GRASSY_TERRAIN ], - [ 1, Moves.MOONBLAST ], + [ EVOLVE_MOVE, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.PETAL_DANCE ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.QUIVER_DANCE ], + [ 1, MoveId.GRASSY_TERRAIN ], + [ 1, MoveId.MOONBLAST ], ], [Species.MARILL]: [ - [ 1, Moves.SPLASH ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.HELPING_HAND ], - [ 6, Moves.BUBBLE_BEAM ], - [ 9, Moves.CHARM ], - [ 12, Moves.SLAM ], - [ 15, Moves.BOUNCE ], - [ 19, Moves.AQUA_TAIL ], - [ 21, Moves.PLAY_ROUGH ], - [ 24, Moves.AQUA_RING ], - [ 27, Moves.RAIN_DANCE ], - [ 30, Moves.HYDRO_PUMP ], - [ 33, Moves.DOUBLE_EDGE ], - [ 36, Moves.SUPERPOWER ], + [ 1, MoveId.SPLASH ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.HELPING_HAND ], + [ 6, MoveId.BUBBLE_BEAM ], + [ 9, MoveId.CHARM ], + [ 12, MoveId.SLAM ], + [ 15, MoveId.BOUNCE ], + [ 19, MoveId.AQUA_TAIL ], + [ 21, MoveId.PLAY_ROUGH ], + [ 24, MoveId.AQUA_RING ], + [ 27, MoveId.RAIN_DANCE ], + [ 30, MoveId.HYDRO_PUMP ], + [ 33, MoveId.DOUBLE_EDGE ], + [ 36, MoveId.SUPERPOWER ], ], [Species.AZUMARILL]: [ - [ 1, Moves.SPLASH ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.HELPING_HAND ], - [ 6, Moves.BUBBLE_BEAM ], - [ 9, Moves.CHARM ], - [ 12, Moves.SLAM ], - [ 15, Moves.BOUNCE ], - [ 21, Moves.AQUA_TAIL ], - [ 25, Moves.PLAY_ROUGH ], - [ 30, Moves.AQUA_RING ], - [ 35, Moves.RAIN_DANCE ], - [ 40, Moves.HYDRO_PUMP ], - [ 45, Moves.DOUBLE_EDGE ], - [ 50, Moves.SUPERPOWER ], + [ 1, MoveId.SPLASH ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.HELPING_HAND ], + [ 6, MoveId.BUBBLE_BEAM ], + [ 9, MoveId.CHARM ], + [ 12, MoveId.SLAM ], + [ 15, MoveId.BOUNCE ], + [ 21, MoveId.AQUA_TAIL ], + [ 25, MoveId.PLAY_ROUGH ], + [ 30, MoveId.AQUA_RING ], + [ 35, MoveId.RAIN_DANCE ], + [ 40, MoveId.HYDRO_PUMP ], + [ 45, MoveId.DOUBLE_EDGE ], + [ 50, MoveId.SUPERPOWER ], ], [Species.SUDOWOODO]: [ - [ EVOLVE_MOVE, Moves.SLAM ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.TACKLE ], // Previous Stage Move, Custom - [ 1, Moves.FLAIL ], - [ 1, Moves.FAKE_TEARS ], - [ 1, Moves.HAMMER_ARM ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.STONE_EDGE ], - [ 1, Moves.WOOD_HAMMER ], - [ 12, Moves.BLOCK ], - [ 16, Moves.MIMIC ], - [ 20, Moves.ROCK_TOMB ], - [ 24, Moves.TEARFUL_LOOK ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.ROCK_SLIDE ], - [ 36, Moves.LOW_KICK ], - [ 40, Moves.COUNTER ], - [ 44, Moves.DOUBLE_EDGE ], - [ 48, Moves.HEAD_SMASH ], + [ EVOLVE_MOVE, MoveId.SLAM ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.TACKLE ], // Previous Stage Move, Custom + [ 1, MoveId.FLAIL ], + [ 1, MoveId.FAKE_TEARS ], + [ 1, MoveId.HAMMER_ARM ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.STONE_EDGE ], + [ 1, MoveId.WOOD_HAMMER ], + [ 12, MoveId.BLOCK ], + [ 16, MoveId.MIMIC ], + [ 20, MoveId.ROCK_TOMB ], + [ 24, MoveId.TEARFUL_LOOK ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.ROCK_SLIDE ], + [ 36, MoveId.LOW_KICK ], + [ 40, MoveId.COUNTER ], + [ 44, MoveId.DOUBLE_EDGE ], + [ 48, MoveId.HEAD_SMASH ], ], [Species.POLITOED]: [ - [ EVOLVE_MOVE, Moves.BOUNCE ], - [ RELEARN_MOVE, Moves.BODY_SLAM ], - [ RELEARN_MOVE, Moves.DOUBLE_EDGE ], - [ RELEARN_MOVE, Moves.WATER_GUN ], - [ RELEARN_MOVE, Moves.BUBBLE_BEAM ], - [ RELEARN_MOVE, Moves.HYPNOSIS ], - [ RELEARN_MOVE, Moves.PERISH_SONG ], - [ RELEARN_MOVE, Moves.SWAGGER ], - [ RELEARN_MOVE, Moves.HYPER_VOICE ], - [ RELEARN_MOVE, Moves.MUD_SHOT ], - [ RELEARN_MOVE, Moves.EARTH_POWER ], - [ 1, Moves.RAIN_DANCE ], - [ 1, Moves.HYDRO_PUMP ], - [ 1, Moves.BELLY_DRUM ], - [ 1, Moves.POUND ], - [ 1, Moves.WATER_SPORT ], // Previous Stage Move + [ EVOLVE_MOVE, MoveId.BOUNCE ], + [ RELEARN_MOVE, MoveId.BODY_SLAM ], + [ RELEARN_MOVE, MoveId.DOUBLE_EDGE ], + [ RELEARN_MOVE, MoveId.WATER_GUN ], + [ RELEARN_MOVE, MoveId.BUBBLE_BEAM ], + [ RELEARN_MOVE, MoveId.HYPNOSIS ], + [ RELEARN_MOVE, MoveId.PERISH_SONG ], + [ RELEARN_MOVE, MoveId.SWAGGER ], + [ RELEARN_MOVE, MoveId.HYPER_VOICE ], + [ RELEARN_MOVE, MoveId.MUD_SHOT ], + [ RELEARN_MOVE, MoveId.EARTH_POWER ], + [ 1, MoveId.RAIN_DANCE ], + [ 1, MoveId.HYDRO_PUMP ], + [ 1, MoveId.BELLY_DRUM ], + [ 1, MoveId.POUND ], + [ 1, MoveId.WATER_SPORT ], // Previous Stage Move ], [Species.HOPPIP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SPLASH ], - [ 4, Moves.TAIL_WHIP ], - [ 6, Moves.ABSORB ], - [ 8, Moves.FAIRY_WIND ], - [ 10, Moves.POISON_POWDER ], - [ 10, Moves.STUN_SPORE ], - [ 10, Moves.SLEEP_POWDER ], - [ 12, Moves.BULLET_SEED ], - [ 15, Moves.SYNTHESIS ], - [ 19, Moves.LEECH_SEED ], - [ 22, Moves.MEGA_DRAIN ], - [ 24, Moves.ACROBATICS ], - [ 27, Moves.COTTON_SPORE ], - [ 29, Moves.U_TURN ], - [ 32, Moves.GIGA_DRAIN ], - [ 35, Moves.BOUNCE ], - [ 38, Moves.MEMENTO ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SPLASH ], + [ 4, MoveId.TAIL_WHIP ], + [ 6, MoveId.ABSORB ], + [ 8, MoveId.FAIRY_WIND ], + [ 10, MoveId.POISON_POWDER ], + [ 10, MoveId.STUN_SPORE ], + [ 10, MoveId.SLEEP_POWDER ], + [ 12, MoveId.BULLET_SEED ], + [ 15, MoveId.SYNTHESIS ], + [ 19, MoveId.LEECH_SEED ], + [ 22, MoveId.MEGA_DRAIN ], + [ 24, MoveId.ACROBATICS ], + [ 27, MoveId.COTTON_SPORE ], + [ 29, MoveId.U_TURN ], + [ 32, MoveId.GIGA_DRAIN ], + [ 35, MoveId.BOUNCE ], + [ 38, MoveId.MEMENTO ], ], [Species.SKIPLOOM]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.ABSORB ], - [ 1, Moves.SPLASH ], - [ 1, Moves.SYNTHESIS ], - [ 8, Moves.TACKLE ], - [ 10, Moves.FAIRY_WIND ], - [ 12, Moves.POISON_POWDER ], - [ 12, Moves.STUN_SPORE ], - [ 12, Moves.SLEEP_POWDER ], - [ 15, Moves.BULLET_SEED ], - [ 20, Moves.LEECH_SEED ], - [ 24, Moves.MEGA_DRAIN ], - [ 28, Moves.ACROBATICS ], - [ 31, Moves.COTTON_SPORE ], - [ 34, Moves.U_TURN ], - [ 37, Moves.GIGA_DRAIN ], - [ 41, Moves.BOUNCE ], - [ 44, Moves.MEMENTO ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.SYNTHESIS ], + [ 8, MoveId.TACKLE ], + [ 10, MoveId.FAIRY_WIND ], + [ 12, MoveId.POISON_POWDER ], + [ 12, MoveId.STUN_SPORE ], + [ 12, MoveId.SLEEP_POWDER ], + [ 15, MoveId.BULLET_SEED ], + [ 20, MoveId.LEECH_SEED ], + [ 24, MoveId.MEGA_DRAIN ], + [ 28, MoveId.ACROBATICS ], + [ 31, MoveId.COTTON_SPORE ], + [ 34, MoveId.U_TURN ], + [ 37, MoveId.GIGA_DRAIN ], + [ 41, MoveId.BOUNCE ], + [ 44, MoveId.MEMENTO ], ], [Species.JUMPLUFF]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.ABSORB ], - [ 1, Moves.SPLASH ], - [ 1, Moves.SYNTHESIS ], - [ 8, Moves.TACKLE ], - [ 10, Moves.FAIRY_WIND ], - [ 12, Moves.POISON_POWDER ], - [ 12, Moves.STUN_SPORE ], - [ 12, Moves.SLEEP_POWDER ], - [ 15, Moves.BULLET_SEED ], - [ 20, Moves.LEECH_SEED ], - [ 24, Moves.MEGA_DRAIN ], - [ 30, Moves.ACROBATICS ], - [ 35, Moves.COTTON_SPORE ], - [ 39, Moves.U_TURN ], - [ 43, Moves.GIGA_DRAIN ], - [ 49, Moves.BOUNCE ], - [ 55, Moves.MEMENTO ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.SYNTHESIS ], + [ 8, MoveId.TACKLE ], + [ 10, MoveId.FAIRY_WIND ], + [ 12, MoveId.POISON_POWDER ], + [ 12, MoveId.STUN_SPORE ], + [ 12, MoveId.SLEEP_POWDER ], + [ 15, MoveId.BULLET_SEED ], + [ 20, MoveId.LEECH_SEED ], + [ 24, MoveId.MEGA_DRAIN ], + [ 30, MoveId.ACROBATICS ], + [ 35, MoveId.COTTON_SPORE ], + [ 39, MoveId.U_TURN ], + [ 43, MoveId.GIGA_DRAIN ], + [ 49, MoveId.BOUNCE ], + [ 55, MoveId.MEMENTO ], ], [Species.AIPOM]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 4, Moves.SAND_ATTACK ], - [ 8, Moves.ASTONISH ], - [ 11, Moves.BATON_PASS ], - [ 15, Moves.TICKLE ], - [ 18, Moves.FURY_SWIPES ], - [ 22, Moves.SWIFT ], - [ 25, Moves.SCREECH ], - [ 29, Moves.AGILITY ], - [ 32, Moves.DOUBLE_HIT ], - [ 36, Moves.FLING ], - [ 39, Moves.NASTY_PLOT ], - [ 43, Moves.LAST_RESORT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 4, MoveId.SAND_ATTACK ], + [ 8, MoveId.ASTONISH ], + [ 11, MoveId.BATON_PASS ], + [ 15, MoveId.TICKLE ], + [ 18, MoveId.FURY_SWIPES ], + [ 22, MoveId.SWIFT ], + [ 25, MoveId.SCREECH ], + [ 29, MoveId.AGILITY ], + [ 32, MoveId.DOUBLE_HIT ], + [ 36, MoveId.FLING ], + [ 39, MoveId.NASTY_PLOT ], + [ 43, MoveId.LAST_RESORT ], ], [Species.SUNKERN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWTH ], - [ 7, Moves.ABSORB ], - [ 10, Moves.MEGA_DRAIN ], - [ 16, Moves.RAZOR_LEAF ], - [ 19, Moves.WORRY_SEED ], - [ 22, Moves.GIGA_DRAIN ], - [ 25, Moves.ENDEAVOR ], - [ 28, Moves.SYNTHESIS ], - [ 31, Moves.SOLAR_BEAM ], - [ 34, Moves.DOUBLE_EDGE ], - [ 36, Moves.SUNNY_DAY ], - [ 39, Moves.SEED_BOMB ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWTH ], + [ 7, MoveId.ABSORB ], + [ 10, MoveId.MEGA_DRAIN ], + [ 16, MoveId.RAZOR_LEAF ], + [ 19, MoveId.WORRY_SEED ], + [ 22, MoveId.GIGA_DRAIN ], + [ 25, MoveId.ENDEAVOR ], + [ 28, MoveId.SYNTHESIS ], + [ 31, MoveId.SOLAR_BEAM ], + [ 34, MoveId.DOUBLE_EDGE ], + [ 36, MoveId.SUNNY_DAY ], + [ 39, MoveId.SEED_BOMB ], ], [Species.SUNFLORA]: [ - [ RELEARN_MOVE, Moves.SEED_BOMB ], // Previous Stage Move - [ 1, Moves.POUND ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWTH ], - [ 1, Moves.ENDEAVOR ], // Previous Stage Move - [ 1, Moves.SYNTHESIS ], // Previous Stage Move - [ 4, Moves.INGRAIN ], - [ 7, Moves.ABSORB ], - [ 10, Moves.MEGA_DRAIN ], - [ 13, Moves.LEECH_SEED ], - [ 16, Moves.RAZOR_LEAF ], - [ 19, Moves.WORRY_SEED ], - [ 22, Moves.GIGA_DRAIN ], - [ 25, Moves.BULLET_SEED ], - [ 28, Moves.PETAL_DANCE ], - [ 31, Moves.SOLAR_BEAM ], - [ 34, Moves.DOUBLE_EDGE ], - [ 39, Moves.SUNNY_DAY ], - [ 43, Moves.LEAF_STORM ], - [ 50, Moves.PETAL_BLIZZARD ], + [ RELEARN_MOVE, MoveId.SEED_BOMB ], // Previous Stage Move + [ 1, MoveId.POUND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.ENDEAVOR ], // Previous Stage Move + [ 1, MoveId.SYNTHESIS ], // Previous Stage Move + [ 4, MoveId.INGRAIN ], + [ 7, MoveId.ABSORB ], + [ 10, MoveId.MEGA_DRAIN ], + [ 13, MoveId.LEECH_SEED ], + [ 16, MoveId.RAZOR_LEAF ], + [ 19, MoveId.WORRY_SEED ], + [ 22, MoveId.GIGA_DRAIN ], + [ 25, MoveId.BULLET_SEED ], + [ 28, MoveId.PETAL_DANCE ], + [ 31, MoveId.SOLAR_BEAM ], + [ 34, MoveId.DOUBLE_EDGE ], + [ 39, MoveId.SUNNY_DAY ], + [ 43, MoveId.LEAF_STORM ], + [ 50, MoveId.PETAL_BLIZZARD ], ], [Species.YANMA]: [ - [ 1, Moves.TACKLE ], - [ 6, Moves.QUICK_ATTACK ], - [ 11, Moves.DOUBLE_TEAM ], - [ 14, Moves.AIR_CUTTER ], - [ 17, Moves.DETECT ], - [ 22, Moves.SUPERSONIC ], - [ 27, Moves.UPROAR ], - [ 30, Moves.BUG_BITE ], - [ 33, Moves.ANCIENT_POWER ], - [ 38, Moves.HYPNOSIS ], - [ 43, Moves.WING_ATTACK ], - [ 46, Moves.SCREECH ], - [ 49, Moves.U_TURN ], - [ 54, Moves.AIR_SLASH ], - [ 57, Moves.BUG_BUZZ ], + [ 1, MoveId.TACKLE ], + [ 6, MoveId.QUICK_ATTACK ], + [ 11, MoveId.DOUBLE_TEAM ], + [ 14, MoveId.AIR_CUTTER ], + [ 17, MoveId.DETECT ], + [ 22, MoveId.SUPERSONIC ], + [ 27, MoveId.UPROAR ], + [ 30, MoveId.BUG_BITE ], + [ 33, MoveId.ANCIENT_POWER ], + [ 38, MoveId.HYPNOSIS ], + [ 43, MoveId.WING_ATTACK ], + [ 46, MoveId.SCREECH ], + [ 49, MoveId.U_TURN ], + [ 54, MoveId.AIR_SLASH ], + [ 57, MoveId.BUG_BUZZ ], ], [Species.WOOPER]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.RAIN_DANCE ], - [ 8, Moves.MUD_SHOT ], - [ 12, Moves.MIST ], - [ 12, Moves.HAZE ], - [ 16, Moves.SLAM ], - [ 21, Moves.YAWN ], - [ 24, Moves.AQUA_TAIL ], - [ 28, Moves.MUDDY_WATER ], - [ 32, Moves.AMNESIA ], - [ 36, Moves.TOXIC ], - [ 40, Moves.EARTHQUAKE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.RAIN_DANCE ], + [ 8, MoveId.MUD_SHOT ], + [ 12, MoveId.MIST ], + [ 12, MoveId.HAZE ], + [ 16, MoveId.SLAM ], + [ 21, MoveId.YAWN ], + [ 24, MoveId.AQUA_TAIL ], + [ 28, MoveId.MUDDY_WATER ], + [ 32, MoveId.AMNESIA ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.EARTHQUAKE ], ], [Species.QUAGSIRE]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.RAIN_DANCE ], - [ 1, Moves.MUD_SHOT ], - [ 12, Moves.MIST ], - [ 12, Moves.HAZE ], - [ 16, Moves.SLAM ], - [ 23, Moves.YAWN ], - [ 28, Moves.AQUA_TAIL ], - [ 34, Moves.MUDDY_WATER ], - [ 40, Moves.AMNESIA ], - [ 46, Moves.TOXIC ], - [ 52, Moves.EARTHQUAKE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.RAIN_DANCE ], + [ 1, MoveId.MUD_SHOT ], + [ 12, MoveId.MIST ], + [ 12, MoveId.HAZE ], + [ 16, MoveId.SLAM ], + [ 23, MoveId.YAWN ], + [ 28, MoveId.AQUA_TAIL ], + [ 34, MoveId.MUDDY_WATER ], + [ 40, MoveId.AMNESIA ], + [ 46, MoveId.TOXIC ], + [ 52, MoveId.EARTHQUAKE ], ], [Species.ESPEON]: [ - [ EVOLVE_MOVE, Moves.GLITZY_GLOW ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.CONFUSION ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.SWIFT ], - [ 30, Moves.PSYBEAM ], - [ 35, Moves.MORNING_SUN ], - [ 40, Moves.POWER_SWAP ], - [ 45, Moves.PSYCHIC ], - [ 50, Moves.PSYCH_UP ], - [ 55, Moves.FUTURE_SIGHT ], - [ 60, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.GLITZY_GLOW ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.CONFUSION ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.SWIFT ], + [ 30, MoveId.PSYBEAM ], + [ 35, MoveId.MORNING_SUN ], + [ 40, MoveId.POWER_SWAP ], + [ 45, MoveId.PSYCHIC ], + [ 50, MoveId.PSYCH_UP ], + [ 55, MoveId.FUTURE_SIGHT ], + [ 60, MoveId.LAST_RESORT ], ], [Species.UMBREON]: [ - [ EVOLVE_MOVE, Moves.BADDY_BAD ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.PURSUIT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.SNARL ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.CONFUSE_RAY ], - [ 30, Moves.ASSURANCE ], - [ 35, Moves.MOONLIGHT ], - [ 40, Moves.GUARD_SWAP ], - [ 45, Moves.DARK_PULSE ], - [ 50, Moves.SCREECH ], - [ 55, Moves.MEAN_LOOK ], - [ 60, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.BADDY_BAD ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.PURSUIT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.SNARL ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.CONFUSE_RAY ], + [ 30, MoveId.ASSURANCE ], + [ 35, MoveId.MOONLIGHT ], + [ 40, MoveId.GUARD_SWAP ], + [ 45, MoveId.DARK_PULSE ], + [ 50, MoveId.SCREECH ], + [ 55, MoveId.MEAN_LOOK ], + [ 60, MoveId.LAST_RESORT ], ], [Species.MURKROW]: [ - [ 1, Moves.PECK ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.GUST ], - [ 11, Moves.HAZE ], - [ 15, Moves.WING_ATTACK ], - [ 21, Moves.NIGHT_SHADE ], - [ 25, Moves.ASSURANCE ], - [ 31, Moves.TAUNT ], - [ 35, Moves.MEAN_LOOK ], - [ 40, Moves.FOUL_PLAY ], - [ 50, Moves.SUCKER_PUNCH ], - [ 55, Moves.TORMENT ], - [ 60, Moves.QUASH ], + [ 1, MoveId.PECK ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.GUST ], + [ 11, MoveId.HAZE ], + [ 15, MoveId.WING_ATTACK ], + [ 21, MoveId.NIGHT_SHADE ], + [ 25, MoveId.ASSURANCE ], + [ 31, MoveId.TAUNT ], + [ 35, MoveId.MEAN_LOOK ], + [ 40, MoveId.FOUL_PLAY ], + [ 50, MoveId.SUCKER_PUNCH ], + [ 55, MoveId.TORMENT ], + [ 60, MoveId.QUASH ], ], [Species.SLOWKING]: [ - [ RELEARN_MOVE, Moves.FUTURE_SIGHT ], - [ RELEARN_MOVE, Moves.CHILLY_RECEPTION ], - [ 1, Moves.POWER_GEM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CURSE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], // Previous Stage Move, Galar Slowking Level - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 39, Moves.PSYCH_UP ], - [ 42, Moves.RAIN_DANCE ], - [ 45, Moves.HEAL_PULSE ], + [ RELEARN_MOVE, MoveId.FUTURE_SIGHT ], + [ RELEARN_MOVE, MoveId.CHILLY_RECEPTION ], + [ 1, MoveId.POWER_GEM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CURSE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], // Previous Stage Move, Galar Slowking Level + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 39, MoveId.PSYCH_UP ], + [ 42, MoveId.RAIN_DANCE ], + [ 45, MoveId.HEAL_PULSE ], ], [Species.MISDREAVUS]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.PSYWAVE ], - [ 10, Moves.ASTONISH ], - [ 14, Moves.CONFUSE_RAY ], - [ 19, Moves.MEAN_LOOK ], - [ 23, Moves.HEX ], - [ 28, Moves.PSYBEAM ], - [ 32, Moves.PAIN_SPLIT ], - [ 37, Moves.PAYBACK ], - [ 41, Moves.SHADOW_BALL ], - [ 46, Moves.PERISH_SONG ], - [ 50, Moves.POWER_GEM ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.PSYWAVE ], + [ 10, MoveId.ASTONISH ], + [ 14, MoveId.CONFUSE_RAY ], + [ 19, MoveId.MEAN_LOOK ], + [ 23, MoveId.HEX ], + [ 28, MoveId.PSYBEAM ], + [ 32, MoveId.PAIN_SPLIT ], + [ 37, MoveId.PAYBACK ], + [ 41, MoveId.SHADOW_BALL ], + [ 46, MoveId.PERISH_SONG ], + [ 50, MoveId.POWER_GEM ], ], [Species.UNOWN]: [ - [ 1, Moves.HIDDEN_POWER ], + [ 1, MoveId.HIDDEN_POWER ], ], [Species.WOBBUFFET]: [ - [ EVOLVE_MOVE, Moves.COUNTER ], - [ EVOLVE_MOVE, Moves.DESTINY_BOND ], - [ EVOLVE_MOVE, Moves.SAFEGUARD ], - [ EVOLVE_MOVE, Moves.MIRROR_COAT ], - [ 1, Moves.COUNTER ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.MIRROR_COAT ], - [ 1, Moves.AMNESIA ], - [ 1, Moves.SPLASH ], - [ 1, Moves.CHARM ], - [ 1, Moves.ENCORE ], + [ EVOLVE_MOVE, MoveId.COUNTER ], + [ EVOLVE_MOVE, MoveId.DESTINY_BOND ], + [ EVOLVE_MOVE, MoveId.SAFEGUARD ], + [ EVOLVE_MOVE, MoveId.MIRROR_COAT ], + [ 1, MoveId.COUNTER ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.MIRROR_COAT ], + [ 1, MoveId.AMNESIA ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.ENCORE ], ], [Species.GIRAFARIG]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POWER_SWAP ], - [ 1, Moves.GUARD_SWAP ], - [ 5, Moves.CONFUSION ], - [ 10, Moves.ASSURANCE ], - [ 14, Moves.STOMP ], - [ 19, Moves.PSYBEAM ], - [ 23, Moves.AGILITY ], - [ 28, Moves.DOUBLE_HIT ], - [ 32, Moves.TWIN_BEAM ], - [ 37, Moves.CRUNCH ], - [ 41, Moves.BATON_PASS ], - [ 46, Moves.NASTY_PLOT ], - [ 50, Moves.PSYCHIC ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POWER_SWAP ], + [ 1, MoveId.GUARD_SWAP ], + [ 5, MoveId.CONFUSION ], + [ 10, MoveId.ASSURANCE ], + [ 14, MoveId.STOMP ], + [ 19, MoveId.PSYBEAM ], + [ 23, MoveId.AGILITY ], + [ 28, MoveId.DOUBLE_HIT ], + [ 32, MoveId.TWIN_BEAM ], + [ 37, MoveId.CRUNCH ], + [ 41, MoveId.BATON_PASS ], + [ 46, MoveId.NASTY_PLOT ], + [ 50, MoveId.PSYCHIC ], ], [Species.PINECO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 6, Moves.SELF_DESTRUCT ], - [ 9, Moves.BUG_BITE ], - [ 12, Moves.TAKE_DOWN ], - [ 17, Moves.RAPID_SPIN ], - [ 20, Moves.ROLLOUT ], - [ 23, Moves.CURSE ], - [ 28, Moves.SPIKES ], - [ 31, Moves.PAYBACK ], - [ 34, Moves.EXPLOSION ], - [ 39, Moves.IRON_DEFENSE ], - [ 42, Moves.GYRO_BALL ], - [ 45, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 6, MoveId.SELF_DESTRUCT ], + [ 9, MoveId.BUG_BITE ], + [ 12, MoveId.TAKE_DOWN ], + [ 17, MoveId.RAPID_SPIN ], + [ 20, MoveId.ROLLOUT ], + [ 23, MoveId.CURSE ], + [ 28, MoveId.SPIKES ], + [ 31, MoveId.PAYBACK ], + [ 34, MoveId.EXPLOSION ], + [ 39, MoveId.IRON_DEFENSE ], + [ 42, MoveId.GYRO_BALL ], + [ 45, MoveId.DOUBLE_EDGE ], ], [Species.FORRETRESS]: [ - [ EVOLVE_MOVE, Moves.HEAVY_SLAM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SELF_DESTRUCT ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ZAP_CANNON ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.MAGNET_RISE ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.MIRROR_SHOT ], - [ 12, Moves.TAKE_DOWN ], - [ 17, Moves.RAPID_SPIN ], - [ 20, Moves.ROLLOUT ], - [ 23, Moves.CURSE ], - [ 28, Moves.SPIKES ], - [ 32, Moves.PAYBACK ], - [ 36, Moves.EXPLOSION ], - [ 42, Moves.IRON_DEFENSE ], - [ 46, Moves.GYRO_BALL ], - [ 50, Moves.DOUBLE_EDGE ], + [ EVOLVE_MOVE, MoveId.HEAVY_SLAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SELF_DESTRUCT ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ZAP_CANNON ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.MAGNET_RISE ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.MIRROR_SHOT ], + [ 12, MoveId.TAKE_DOWN ], + [ 17, MoveId.RAPID_SPIN ], + [ 20, MoveId.ROLLOUT ], + [ 23, MoveId.CURSE ], + [ 28, MoveId.SPIKES ], + [ 32, MoveId.PAYBACK ], + [ 36, MoveId.EXPLOSION ], + [ 42, MoveId.IRON_DEFENSE ], + [ 46, MoveId.GYRO_BALL ], + [ 50, MoveId.DOUBLE_EDGE ], ], [Species.DUNSPARCE]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.FLAIL ], - [ 1, Moves.TACKLE ], // Custom - [ 4, Moves.MUD_SLAP ], - [ 8, Moves.ROLLOUT ], - [ 12, Moves.GLARE ], - [ 16, Moves.SCREECH ], - [ 20, Moves.ANCIENT_POWER ], - [ 24, Moves.DRILL_RUN ], - [ 28, Moves.YAWN ], - [ 32, Moves.HYPER_DRILL ], - [ 36, Moves.ROOST ], - [ 40, Moves.DRAGON_RUSH ], - [ 44, Moves.COIL ], - [ 48, Moves.DOUBLE_EDGE ], - [ 52, Moves.ENDEAVOR ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.TACKLE ], // Custom + [ 4, MoveId.MUD_SLAP ], + [ 8, MoveId.ROLLOUT ], + [ 12, MoveId.GLARE ], + [ 16, MoveId.SCREECH ], + [ 20, MoveId.ANCIENT_POWER ], + [ 24, MoveId.DRILL_RUN ], + [ 28, MoveId.YAWN ], + [ 32, MoveId.HYPER_DRILL ], + [ 36, MoveId.ROOST ], + [ 40, MoveId.DRAGON_RUSH ], + [ 44, MoveId.COIL ], + [ 48, MoveId.DOUBLE_EDGE ], + [ 52, MoveId.ENDEAVOR ], ], [Species.GLIGAR]: [ - [ 1, Moves.POISON_STING ], - [ 4, Moves.SAND_ATTACK ], - [ 7, Moves.HARDEN ], - [ 10, Moves.KNOCK_OFF ], - [ 13, Moves.QUICK_ATTACK ], - [ 16, Moves.FURY_CUTTER ], - [ 19, Moves.POISON_TAIL ], - [ 22, Moves.ACROBATICS ], - [ 27, Moves.SLASH ], - [ 30, Moves.U_TURN ], - [ 35, Moves.SCREECH ], - [ 40, Moves.X_SCISSOR ], - [ 45, Moves.CRABHAMMER ], - [ 50, Moves.SWORDS_DANCE ], + [ 1, MoveId.POISON_STING ], + [ 4, MoveId.SAND_ATTACK ], + [ 7, MoveId.HARDEN ], + [ 10, MoveId.KNOCK_OFF ], + [ 13, MoveId.QUICK_ATTACK ], + [ 16, MoveId.FURY_CUTTER ], + [ 19, MoveId.POISON_TAIL ], + [ 22, MoveId.ACROBATICS ], + [ 27, MoveId.SLASH ], + [ 30, MoveId.U_TURN ], + [ 35, MoveId.SCREECH ], + [ 40, MoveId.X_SCISSOR ], + [ 45, MoveId.CRABHAMMER ], + [ 50, MoveId.SWORDS_DANCE ], ], [Species.STEELIX]: [ - [ 1, Moves.BIND ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SPORT ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.ROCK_POLISH ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 4, Moves.SMACK_DOWN ], - [ 8, Moves.AUTOTOMIZE ], - [ 12, Moves.DRAGON_BREATH ], - [ 16, Moves.CURSE ], - [ 20, Moves.ROCK_SLIDE ], - [ 22, Moves.GYRO_BALL ], // Custom from USUM - [ 24, Moves.SCREECH ], - [ 28, Moves.SAND_TOMB ], - [ 32, Moves.STEALTH_ROCK ], - [ 36, Moves.SLAM ], - [ 40, Moves.SANDSTORM ], - [ 44, Moves.DIG ], - [ 48, Moves.IRON_TAIL ], - [ 52, Moves.STONE_EDGE ], - [ 56, Moves.DOUBLE_EDGE ], - [ 60, Moves.MAGNET_RISE ], + [ 1, MoveId.BIND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MUD_SPORT ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.ROCK_POLISH ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 4, MoveId.SMACK_DOWN ], + [ 8, MoveId.AUTOTOMIZE ], + [ 12, MoveId.DRAGON_BREATH ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.ROCK_SLIDE ], + [ 22, MoveId.GYRO_BALL ], // Custom from USUM + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SAND_TOMB ], + [ 32, MoveId.STEALTH_ROCK ], + [ 36, MoveId.SLAM ], + [ 40, MoveId.SANDSTORM ], + [ 44, MoveId.DIG ], + [ 48, MoveId.IRON_TAIL ], + [ 52, MoveId.STONE_EDGE ], + [ 56, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.MAGNET_RISE ], ], [Species.SNUBBULL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.CHARM ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 7, Moves.BITE ], - [ 13, Moves.LICK ], - [ 19, Moves.HEADBUTT ], - [ 25, Moves.ROAR ], - [ 31, Moves.LAST_RESORT ], - [ 37, Moves.PLAY_ROUGH ], - [ 43, Moves.PAYBACK ], - [ 49, Moves.CRUNCH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 7, MoveId.BITE ], + [ 13, MoveId.LICK ], + [ 19, MoveId.HEADBUTT ], + [ 25, MoveId.ROAR ], + [ 31, MoveId.LAST_RESORT ], + [ 37, MoveId.PLAY_ROUGH ], + [ 43, MoveId.PAYBACK ], + [ 49, MoveId.CRUNCH ], ], [Species.GRANBULL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.OUTRAGE ], - [ 1, Moves.CHARM ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 7, Moves.BITE ], - [ 13, Moves.LICK ], - [ 19, Moves.HEADBUTT ], - [ 27, Moves.ROAR ], - [ 35, Moves.LAST_RESORT ], - [ 43, Moves.PLAY_ROUGH ], - [ 51, Moves.PAYBACK ], - [ 59, Moves.CRUNCH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.OUTRAGE ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 7, MoveId.BITE ], + [ 13, MoveId.LICK ], + [ 19, MoveId.HEADBUTT ], + [ 27, MoveId.ROAR ], + [ 35, MoveId.LAST_RESORT ], + [ 43, MoveId.PLAY_ROUGH ], + [ 51, MoveId.PAYBACK ], + [ 59, MoveId.CRUNCH ], ], [Species.QWILFISH]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POISON_STING ], - [ 4, Moves.HARDEN ], - [ 8, Moves.WATER_GUN ], - [ 12, Moves.FELL_STINGER ], - [ 16, Moves.MINIMIZE ], - [ 20, Moves.SPIKES ], - [ 24, Moves.BRINE ], - [ 28, Moves.POISON_JAB ], - [ 32, Moves.PIN_MISSILE ], - [ 36, Moves.TOXIC_SPIKES ], - [ 40, Moves.STOCKPILE ], - [ 40, Moves.SPIT_UP ], - [ 44, Moves.TOXIC ], - [ 48, Moves.AQUA_TAIL ], - [ 52, Moves.ACUPRESSURE ], - [ 56, Moves.DESTINY_BOND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POISON_STING ], + [ 4, MoveId.HARDEN ], + [ 8, MoveId.WATER_GUN ], + [ 12, MoveId.FELL_STINGER ], + [ 16, MoveId.MINIMIZE ], + [ 20, MoveId.SPIKES ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.POISON_JAB ], + [ 32, MoveId.PIN_MISSILE ], + [ 36, MoveId.TOXIC_SPIKES ], + [ 40, MoveId.STOCKPILE ], + [ 40, MoveId.SPIT_UP ], + [ 44, MoveId.TOXIC ], + [ 48, MoveId.AQUA_TAIL ], + [ 52, MoveId.ACUPRESSURE ], + [ 56, MoveId.DESTINY_BOND ], ], [Species.SCIZOR]: [ - [ EVOLVE_MOVE, Moves.BULLET_PUNCH ], - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.AGILITY ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.AIR_SLASH ], - [ 12, Moves.METAL_CLAW ], - [ 16, Moves.DOUBLE_TEAM ], - [ 20, Moves.DOUBLE_HIT ], - [ 24, Moves.SLASH ], - [ 28, Moves.FOCUS_ENERGY ], - [ 30, Moves.STEEL_WING ], // Custom - [ 32, Moves.IRON_DEFENSE ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.X_SCISSOR ], - [ 44, Moves.SWORDS_DANCE ], + [ EVOLVE_MOVE, MoveId.BULLET_PUNCH ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FALSE_SWIPE ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.AIR_SLASH ], + [ 12, MoveId.METAL_CLAW ], + [ 16, MoveId.DOUBLE_TEAM ], + [ 20, MoveId.DOUBLE_HIT ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.FOCUS_ENERGY ], + [ 30, MoveId.STEEL_WING ], // Custom + [ 32, MoveId.IRON_DEFENSE ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.X_SCISSOR ], + [ 44, MoveId.SWORDS_DANCE ], ], [Species.SHUCKLE]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.BIDE ], - [ 1, Moves.CONSTRICT ], - [ 5, Moves.ROLLOUT ], - [ 10, Moves.STRUGGLE_BUG ], - [ 15, Moves.ROCK_THROW ], - [ 20, Moves.SAFEGUARD ], - [ 25, Moves.REST ], - [ 30, Moves.BUG_BITE ], - [ 35, Moves.GUARD_SPLIT ], - [ 35, Moves.POWER_SPLIT ], - [ 40, Moves.ROCK_SLIDE ], - [ 45, Moves.GASTRO_ACID ], - [ 50, Moves.STICKY_WEB ], - [ 55, Moves.POWER_TRICK ], - [ 60, Moves.STONE_EDGE ], - [ 65, Moves.SHELL_SMASH ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.CONSTRICT ], + [ 5, MoveId.ROLLOUT ], + [ 10, MoveId.STRUGGLE_BUG ], + [ 15, MoveId.ROCK_THROW ], + [ 20, MoveId.SAFEGUARD ], + [ 25, MoveId.REST ], + [ 30, MoveId.BUG_BITE ], + [ 35, MoveId.GUARD_SPLIT ], + [ 35, MoveId.POWER_SPLIT ], + [ 40, MoveId.ROCK_SLIDE ], + [ 45, MoveId.GASTRO_ACID ], + [ 50, MoveId.STICKY_WEB ], + [ 55, MoveId.POWER_TRICK ], + [ 60, MoveId.STONE_EDGE ], + [ 65, MoveId.SHELL_SMASH ], ], [Species.HERACROSS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.ARM_THRUST ], - [ 5, Moves.FURY_ATTACK ], - [ 10, Moves.ENDURE ], - [ 15, Moves.AERIAL_ACE ], - [ 20, Moves.HORN_ATTACK ], - [ 25, Moves.COUNTER ], - [ 30, Moves.BRICK_BREAK ], - [ 35, Moves.PIN_MISSILE ], - [ 40, Moves.THROAT_CHOP ], - [ 45, Moves.THRASH ], - [ 50, Moves.SWORDS_DANCE ], - [ 55, Moves.MEGAHORN ], - [ 60, Moves.CLOSE_COMBAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ARM_THRUST ], + [ 5, MoveId.FURY_ATTACK ], + [ 10, MoveId.ENDURE ], + [ 15, MoveId.AERIAL_ACE ], + [ 20, MoveId.HORN_ATTACK ], + [ 25, MoveId.COUNTER ], + [ 30, MoveId.BRICK_BREAK ], + [ 35, MoveId.PIN_MISSILE ], + [ 40, MoveId.THROAT_CHOP ], + [ 45, MoveId.THRASH ], + [ 50, MoveId.SWORDS_DANCE ], + [ 55, MoveId.MEGAHORN ], + [ 60, MoveId.CLOSE_COMBAT ], ], [Species.SNEASEL]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 6, Moves.TAUNT ], - [ 12, Moves.QUICK_ATTACK ], - [ 18, Moves.METAL_CLAW ], - [ 24, Moves.ICY_WIND ], - [ 30, Moves.FURY_SWIPES ], - [ 36, Moves.HONE_CLAWS ], - [ 42, Moves.BEAT_UP ], - [ 48, Moves.AGILITY ], - [ 54, Moves.SCREECH ], - [ 60, Moves.SLASH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 6, MoveId.TAUNT ], + [ 12, MoveId.QUICK_ATTACK ], + [ 18, MoveId.METAL_CLAW ], + [ 24, MoveId.ICY_WIND ], + [ 30, MoveId.FURY_SWIPES ], + [ 36, MoveId.HONE_CLAWS ], + [ 42, MoveId.BEAT_UP ], + [ 48, MoveId.AGILITY ], + [ 54, MoveId.SCREECH ], + [ 60, MoveId.SLASH ], ], [Species.TEDDIURSA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LICK ], - [ 1, Moves.COVET ], - [ 1, Moves.FLING ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 8, Moves.FURY_SWIPES ], - [ 13, Moves.PAYBACK ], - [ 17, Moves.SWEET_SCENT ], - [ 22, Moves.SLASH ], - [ 25, Moves.PLAY_NICE ], - [ 29, Moves.PLAY_ROUGH ], - [ 33, Moves.CHARM ], - [ 37, Moves.REST ], - [ 37, Moves.SNORE ], - [ 41, Moves.THRASH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LICK ], + [ 1, MoveId.COVET ], + [ 1, MoveId.FLING ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 8, MoveId.FURY_SWIPES ], + [ 13, MoveId.PAYBACK ], + [ 17, MoveId.SWEET_SCENT ], + [ 22, MoveId.SLASH ], + [ 25, MoveId.PLAY_NICE ], + [ 29, MoveId.PLAY_ROUGH ], + [ 33, MoveId.CHARM ], + [ 37, MoveId.REST ], + [ 37, MoveId.SNORE ], + [ 41, MoveId.THRASH ], ], [Species.URSARING]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.COVET ], - [ 1, Moves.FLING ], // Previous Stage Move - [ 1, Moves.BABY_DOLL_EYES ], // Previous Stage Move - [ 1, Moves.FAKE_TEARS ], - [ 1, Moves.CHARM ], // Previous Stage Move - [ 8, Moves.FURY_SWIPES ], - [ 13, Moves.PAYBACK ], - [ 17, Moves.SWEET_SCENT ], - [ 22, Moves.SLASH ], - [ 25, Moves.PLAY_NICE ], - [ 29, Moves.PLAY_ROUGH ], - [ 35, Moves.SCARY_FACE ], - [ 41, Moves.REST ], - [ 41, Moves.SNORE ], - [ 48, Moves.HIGH_HORSEPOWER ], - [ 56, Moves.THRASH ], - [ 64, Moves.HAMMER_ARM ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.COVET ], + [ 1, MoveId.FLING ], // Previous Stage Move + [ 1, MoveId.BABY_DOLL_EYES ], // Previous Stage Move + [ 1, MoveId.FAKE_TEARS ], + [ 1, MoveId.CHARM ], // Previous Stage Move + [ 8, MoveId.FURY_SWIPES ], + [ 13, MoveId.PAYBACK ], + [ 17, MoveId.SWEET_SCENT ], + [ 22, MoveId.SLASH ], + [ 25, MoveId.PLAY_NICE ], + [ 29, MoveId.PLAY_ROUGH ], + [ 35, MoveId.SCARY_FACE ], + [ 41, MoveId.REST ], + [ 41, MoveId.SNORE ], + [ 48, MoveId.HIGH_HORSEPOWER ], + [ 56, MoveId.THRASH ], + [ 64, MoveId.HAMMER_ARM ], ], [Species.SLUGMA]: [ - [ 1, Moves.SMOG ], - [ 1, Moves.YAWN ], - [ 5, Moves.EMBER ], // Custom, Moved from Level 6 to 5 - [ 8, Moves.ROCK_THROW ], - [ 13, Moves.HARDEN ], - [ 20, Moves.CLEAR_SMOG ], - [ 22, Moves.ANCIENT_POWER ], - [ 27, Moves.INCINERATE ], - [ 29, Moves.ROCK_SLIDE ], - [ 34, Moves.LAVA_PLUME ], - [ 36, Moves.AMNESIA ], - [ 41, Moves.BODY_SLAM ], - [ 43, Moves.RECOVER ], - [ 48, Moves.FLAMETHROWER ], - [ 50, Moves.EARTH_POWER ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.YAWN ], + [ 5, MoveId.EMBER ], // Custom, Moved from Level 6 to 5 + [ 8, MoveId.ROCK_THROW ], + [ 13, MoveId.HARDEN ], + [ 20, MoveId.CLEAR_SMOG ], + [ 22, MoveId.ANCIENT_POWER ], + [ 27, MoveId.INCINERATE ], + [ 29, MoveId.ROCK_SLIDE ], + [ 34, MoveId.LAVA_PLUME ], + [ 36, MoveId.AMNESIA ], + [ 41, MoveId.BODY_SLAM ], + [ 43, MoveId.RECOVER ], + [ 48, MoveId.FLAMETHROWER ], + [ 50, MoveId.EARTH_POWER ], ], [Species.MAGCARGO]: [ - [ EVOLVE_MOVE, Moves.SHELL_SMASH ], - [ 1, Moves.EMBER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.SMOG ], - [ 1, Moves.YAWN ], - [ 1, Moves.EARTH_POWER ], - [ 13, Moves.HARDEN ], - [ 20, Moves.CLEAR_SMOG ], - [ 22, Moves.ANCIENT_POWER ], - [ 27, Moves.INCINERATE ], - [ 29, Moves.ROCK_SLIDE ], - [ 34, Moves.LAVA_PLUME ], - [ 36, Moves.AMNESIA ], - [ 43, Moves.BODY_SLAM ], - [ 47, Moves.RECOVER ], - [ 54, Moves.FLAMETHROWER ], + [ EVOLVE_MOVE, MoveId.SHELL_SMASH ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.EARTH_POWER ], + [ 13, MoveId.HARDEN ], + [ 20, MoveId.CLEAR_SMOG ], + [ 22, MoveId.ANCIENT_POWER ], + [ 27, MoveId.INCINERATE ], + [ 29, MoveId.ROCK_SLIDE ], + [ 34, MoveId.LAVA_PLUME ], + [ 36, MoveId.AMNESIA ], + [ 43, MoveId.BODY_SLAM ], + [ 47, MoveId.RECOVER ], + [ 54, MoveId.FLAMETHROWER ], ], [Species.SWINUB]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ODOR_SLEUTH ], - [ 5, Moves.POWDER_SNOW ], - [ 10, Moves.FLAIL ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.MIST ], - [ 25, Moves.ENDURE ], - [ 30, Moves.ICY_WIND ], - [ 35, Moves.AMNESIA ], - [ 40, Moves.TAKE_DOWN ], - [ 45, Moves.EARTHQUAKE ], - [ 50, Moves.BLIZZARD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 5, MoveId.POWDER_SNOW ], + [ 10, MoveId.FLAIL ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.MIST ], + [ 25, MoveId.ENDURE ], + [ 30, MoveId.ICY_WIND ], + [ 35, MoveId.AMNESIA ], + [ 40, MoveId.TAKE_DOWN ], + [ 45, MoveId.EARTHQUAKE ], + [ 50, MoveId.BLIZZARD ], ], [Species.PILOSWINE]: [ - [ EVOLVE_MOVE, Moves.ICE_FANG ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FLAIL ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ODOR_SLEUTH ], - [ 1, Moves.ANCIENT_POWER ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.MIST ], - [ 25, Moves.ENDURE ], - [ 30, Moves.ICY_WIND ], - [ 37, Moves.AMNESIA ], - [ 44, Moves.TAKE_DOWN ], - [ 51, Moves.EARTHQUAKE ], - [ 58, Moves.BLIZZARD ], - [ 65, Moves.THRASH ], + [ EVOLVE_MOVE, MoveId.ICE_FANG ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.MIST ], + [ 25, MoveId.ENDURE ], + [ 30, MoveId.ICY_WIND ], + [ 37, MoveId.AMNESIA ], + [ 44, MoveId.TAKE_DOWN ], + [ 51, MoveId.EARTHQUAKE ], + [ 58, MoveId.BLIZZARD ], + [ 65, MoveId.THRASH ], ], [Species.CORSOLA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.WATER_GUN ], - [ 10, Moves.AQUA_RING ], - [ 15, Moves.ENDURE ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.FLAIL ], - [ 35, Moves.LIFE_DEW ], - [ 40, Moves.POWER_GEM ], - [ 45, Moves.EARTH_POWER ], - [ 50, Moves.RECOVER ], - [ 55, Moves.MIRROR_COAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.WATER_GUN ], + [ 10, MoveId.AQUA_RING ], + [ 15, MoveId.ENDURE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.FLAIL ], + [ 35, MoveId.LIFE_DEW ], + [ 40, MoveId.POWER_GEM ], + [ 45, MoveId.EARTH_POWER ], + [ 50, MoveId.RECOVER ], + [ 55, MoveId.MIRROR_COAT ], ], [Species.REMORAID]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HELPING_HAND ], - [ 4, Moves.WATER_PULSE ], - [ 8, Moves.FOCUS_ENERGY ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.AURORA_BEAM ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.LOCK_ON ], - [ 28, Moves.BULLET_SEED ], - [ 32, Moves.ICE_BEAM ], - [ 36, Moves.HYDRO_PUMP ], - [ 40, Moves.SOAK ], - [ 44, Moves.HYPER_BEAM ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HELPING_HAND ], + [ 4, MoveId.WATER_PULSE ], + [ 8, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.AURORA_BEAM ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.LOCK_ON ], + [ 28, MoveId.BULLET_SEED ], + [ 32, MoveId.ICE_BEAM ], + [ 36, MoveId.HYDRO_PUMP ], + [ 40, MoveId.SOAK ], + [ 44, MoveId.HYPER_BEAM ], ], [Species.OCTILLERY]: [ - [ EVOLVE_MOVE, Moves.OCTAZOOKA ], - [ 1, Moves.WRAP ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.ROCK_BLAST ], - [ 1, Moves.WATER_PULSE ], - [ 1, Moves.GUNK_SHOT ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.AURORA_BEAM ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.LOCK_ON ], - [ 30, Moves.BULLET_SEED ], - [ 36, Moves.ICE_BEAM ], - [ 42, Moves.HYDRO_PUMP ], - [ 48, Moves.SOAK ], - [ 54, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, MoveId.OCTAZOOKA ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.ROCK_BLAST ], + [ 1, MoveId.WATER_PULSE ], + [ 1, MoveId.GUNK_SHOT ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.AURORA_BEAM ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.LOCK_ON ], + [ 30, MoveId.BULLET_SEED ], + [ 36, MoveId.ICE_BEAM ], + [ 42, MoveId.HYDRO_PUMP ], + [ 48, MoveId.SOAK ], + [ 54, MoveId.HYPER_BEAM ], ], [Species.DELIBIRD]: [ // Given a custom level up learnset - [ 1, Moves.PRESENT ], - [ 1, Moves.METRONOME ], - [ 5, Moves.FAKE_OUT ], - [ 5, Moves.POWDER_SNOW ], - [ 6, Moves.MIST ], - [ 10, Moves.ICE_SHARD ], - [ 15, Moves.AERIAL_ACE ], - [ 20, Moves.ICY_WIND ], - [ 25, Moves.DRILL_PECK ], - [ 30, Moves.ICE_PUNCH ], - [ 35, Moves.HAZE ], - [ 40, Moves.AIR_SLASH ], - [ 45, Moves.TAILWIND ], - [ 50, Moves.SNOWSCAPE ], - [ 55, Moves.BLIZZARD ], - [ 60, Moves.BRAVE_BIRD ], + [ 1, MoveId.PRESENT ], + [ 1, MoveId.METRONOME ], + [ 5, MoveId.FAKE_OUT ], + [ 5, MoveId.POWDER_SNOW ], + [ 6, MoveId.MIST ], + [ 10, MoveId.ICE_SHARD ], + [ 15, MoveId.AERIAL_ACE ], + [ 20, MoveId.ICY_WIND ], + [ 25, MoveId.DRILL_PECK ], + [ 30, MoveId.ICE_PUNCH ], + [ 35, MoveId.HAZE ], + [ 40, MoveId.AIR_SLASH ], + [ 45, MoveId.TAILWIND ], + [ 50, MoveId.SNOWSCAPE ], + [ 55, MoveId.BLIZZARD ], + [ 60, MoveId.BRAVE_BIRD ], ], [Species.MANTINE]: [ - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.PSYBEAM ], - [ 1, Moves.SIGNAL_BEAM ], - [ 1, Moves.BULLET_SEED ], - [ 1, Moves.ROOST ], - [ 12, Moves.WATER_PULSE ], - [ 16, Moves.WIDE_GUARD ], - [ 20, Moves.AGILITY ], - [ 24, Moves.BUBBLE_BEAM ], - [ 28, Moves.HEADBUTT ], - [ 32, Moves.AIR_SLASH ], - [ 36, Moves.AQUA_RING ], - [ 40, Moves.BOUNCE ], - [ 44, Moves.TAKE_DOWN ], - [ 48, Moves.HYDRO_PUMP ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.PSYBEAM ], + [ 1, MoveId.SIGNAL_BEAM ], + [ 1, MoveId.BULLET_SEED ], + [ 1, MoveId.ROOST ], + [ 12, MoveId.WATER_PULSE ], + [ 16, MoveId.WIDE_GUARD ], + [ 20, MoveId.AGILITY ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 28, MoveId.HEADBUTT ], + [ 32, MoveId.AIR_SLASH ], + [ 36, MoveId.AQUA_RING ], + [ 40, MoveId.BOUNCE ], + [ 44, MoveId.TAKE_DOWN ], + [ 48, MoveId.HYDRO_PUMP ], ], [Species.SKARMORY]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 4, Moves.SAND_ATTACK ], - [ 8, Moves.FURY_ATTACK ], - [ 12, Moves.METAL_CLAW ], - [ 16, Moves.AGILITY ], - [ 20, Moves.WING_ATTACK ], - [ 24, Moves.SLASH ], - [ 28, Moves.STEEL_WING ], - [ 32, Moves.PAYBACK ], - [ 36, Moves.DRILL_PECK ], - [ 40, Moves.METAL_SOUND ], - [ 44, Moves.SPIKES ], - [ 48, Moves.IRON_DEFENSE ], - [ 52, Moves.BRAVE_BIRD ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 4, MoveId.SAND_ATTACK ], + [ 8, MoveId.FURY_ATTACK ], + [ 12, MoveId.METAL_CLAW ], + [ 16, MoveId.AGILITY ], + [ 20, MoveId.WING_ATTACK ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.STEEL_WING ], + [ 32, MoveId.PAYBACK ], + [ 36, MoveId.DRILL_PECK ], + [ 40, MoveId.METAL_SOUND ], + [ 44, MoveId.SPIKES ], + [ 48, MoveId.IRON_DEFENSE ], + [ 52, MoveId.BRAVE_BIRD ], ], [Species.HOUNDOUR]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 4, Moves.HOWL ], - [ 8, Moves.SMOG ], - [ 13, Moves.ROAR ], - [ 16, Moves.BITE ], - [ 20, Moves.INCINERATE ], - [ 25, Moves.BEAT_UP ], - [ 28, Moves.FIRE_FANG ], - [ 32, Moves.TORMENT ], - [ 37, Moves.COMEUPPANCE ], - [ 40, Moves.FOUL_PLAY ], - [ 44, Moves.FLAMETHROWER ], - [ 49, Moves.CRUNCH ], - [ 52, Moves.NASTY_PLOT ], - [ 56, Moves.INFERNO ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.HOWL ], + [ 8, MoveId.SMOG ], + [ 13, MoveId.ROAR ], + [ 16, MoveId.BITE ], + [ 20, MoveId.INCINERATE ], + [ 25, MoveId.BEAT_UP ], + [ 28, MoveId.FIRE_FANG ], + [ 32, MoveId.TORMENT ], + [ 37, MoveId.COMEUPPANCE ], + [ 40, MoveId.FOUL_PLAY ], + [ 44, MoveId.FLAMETHROWER ], + [ 49, MoveId.CRUNCH ], + [ 52, MoveId.NASTY_PLOT ], + [ 56, MoveId.INFERNO ], ], [Species.HOUNDOOM]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOG ], - [ 1, Moves.HOWL ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.THUNDER_FANG ], - [ 13, Moves.ROAR ], - [ 16, Moves.BITE ], - [ 20, Moves.INCINERATE ], - [ 26, Moves.BEAT_UP ], - [ 30, Moves.FIRE_FANG ], - [ 35, Moves.TORMENT ], - [ 41, Moves.COMEUPPANCE ], - [ 45, Moves.FOUL_PLAY ], - [ 50, Moves.FLAMETHROWER ], - [ 56, Moves.CRUNCH ], - [ 62, Moves.INFERNO ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.THUNDER_FANG ], + [ 13, MoveId.ROAR ], + [ 16, MoveId.BITE ], + [ 20, MoveId.INCINERATE ], + [ 26, MoveId.BEAT_UP ], + [ 30, MoveId.FIRE_FANG ], + [ 35, MoveId.TORMENT ], + [ 41, MoveId.COMEUPPANCE ], + [ 45, MoveId.FOUL_PLAY ], + [ 50, MoveId.FLAMETHROWER ], + [ 56, MoveId.CRUNCH ], + [ 62, MoveId.INFERNO ], ], [Species.KINGDRA]: [ - [ RELEARN_MOVE, Moves.LASER_FOCUS ], // Previous Stage Move - [ 1, Moves.LEER ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.TWISTER ], - [ 1, Moves.WHIRLPOOL ], - [ 1, Moves.YAWN ], - [ 15, Moves.FOCUS_ENERGY ], - [ 20, Moves.DRAGON_BREATH ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.AGILITY ], - [ 37, Moves.WATER_PULSE ], - [ 44, Moves.DRAGON_PULSE ], - [ 51, Moves.HYDRO_PUMP ], - [ 58, Moves.DRAGON_DANCE ], - [ 65, Moves.RAIN_DANCE ], - [ 72, Moves.WAVE_CRASH ], + [ RELEARN_MOVE, MoveId.LASER_FOCUS ], // Previous Stage Move + [ 1, MoveId.LEER ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.WHIRLPOOL ], + [ 1, MoveId.YAWN ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 20, MoveId.DRAGON_BREATH ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.AGILITY ], + [ 37, MoveId.WATER_PULSE ], + [ 44, MoveId.DRAGON_PULSE ], + [ 51, MoveId.HYDRO_PUMP ], + [ 58, MoveId.DRAGON_DANCE ], + [ 65, MoveId.RAIN_DANCE ], + [ 72, MoveId.WAVE_CRASH ], ], [Species.PHANPY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ODOR_SLEUTH ], - [ 6, Moves.FLAIL ], - [ 10, Moves.ROLLOUT ], - [ 15, Moves.BULLDOZE ], - [ 19, Moves.ENDURE ], - [ 24, Moves.SLAM ], - [ 28, Moves.TAKE_DOWN ], - [ 33, Moves.CHARM ], - [ 37, Moves.LAST_RESORT ], - [ 42, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 6, MoveId.FLAIL ], + [ 10, MoveId.ROLLOUT ], + [ 15, MoveId.BULLDOZE ], + [ 19, MoveId.ENDURE ], + [ 24, MoveId.SLAM ], + [ 28, MoveId.TAKE_DOWN ], + [ 33, MoveId.CHARM ], + [ 37, MoveId.LAST_RESORT ], + [ 42, MoveId.DOUBLE_EDGE ], ], [Species.DONPHAN]: [ - [ EVOLVE_MOVE, Moves.FURY_ATTACK ], - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.GROWL ], - [ 1, Moves.HORN_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ODOR_SLEUTH ], // Previous Stage Move - [ 1, Moves.FLAIL ], // Previous Stage Move - [ 1, Moves.ENDURE ], // Previous Stage Move - [ 1, Moves.TAKE_DOWN ], // Previous Stage Move - [ 1, Moves.CHARM ], // Previous Stage Move - [ 1, Moves.LAST_RESORT ], // Previous Stage Move - [ 1, Moves.DOUBLE_EDGE ], // Previous Stage Move - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.BULLDOZE ], - [ 6, Moves.RAPID_SPIN ], - [ 10, Moves.ROLLOUT ], - [ 15, Moves.ASSURANCE ], - [ 19, Moves.KNOCK_OFF ], - [ 24, Moves.SLAM ], - [ 30, Moves.STOMPING_TANTRUM ], - [ 37, Moves.SCARY_FACE ], - [ 43, Moves.EARTHQUAKE ], - [ 50, Moves.GIGA_IMPACT ], + [ EVOLVE_MOVE, MoveId.FURY_ATTACK ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.GROWL ], + [ 1, MoveId.HORN_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ODOR_SLEUTH ], // Previous Stage Move + [ 1, MoveId.FLAIL ], // Previous Stage Move + [ 1, MoveId.ENDURE ], // Previous Stage Move + [ 1, MoveId.TAKE_DOWN ], // Previous Stage Move + [ 1, MoveId.CHARM ], // Previous Stage Move + [ 1, MoveId.LAST_RESORT ], // Previous Stage Move + [ 1, MoveId.DOUBLE_EDGE ], // Previous Stage Move + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.BULLDOZE ], + [ 6, MoveId.RAPID_SPIN ], + [ 10, MoveId.ROLLOUT ], + [ 15, MoveId.ASSURANCE ], + [ 19, MoveId.KNOCK_OFF ], + [ 24, MoveId.SLAM ], + [ 30, MoveId.STOMPING_TANTRUM ], + [ 37, MoveId.SCARY_FACE ], + [ 43, MoveId.EARTHQUAKE ], + [ 50, MoveId.GIGA_IMPACT ], ], [Species.PORYGON2]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.CONVERSION ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.MAGNET_RISE ], - [ 1, Moves.MAGIC_COAT ], // Previous Stage Move - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.CONVERSION_2 ], - [ 30, Moves.AGILITY ], - [ 35, Moves.RECOVER ], - [ 40, Moves.DISCHARGE ], - [ 45, Moves.TRI_ATTACK ], - [ 50, Moves.LOCK_ON ], - [ 55, Moves.ZAP_CANNON ], - [ 60, Moves.HYPER_BEAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.CONVERSION ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.MAGNET_RISE ], + [ 1, MoveId.MAGIC_COAT ], // Previous Stage Move + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.CONVERSION_2 ], + [ 30, MoveId.AGILITY ], + [ 35, MoveId.RECOVER ], + [ 40, MoveId.DISCHARGE ], + [ 45, MoveId.TRI_ATTACK ], + [ 50, MoveId.LOCK_ON ], + [ 55, MoveId.ZAP_CANNON ], + [ 60, MoveId.HYPER_BEAM ], ], [Species.STANTLER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ME_FIRST ], - [ 3, Moves.LEER ], - [ 7, Moves.ASTONISH ], - [ 10, Moves.HYPNOSIS ], - [ 13, Moves.STOMP ], - [ 16, Moves.SAND_ATTACK ], - [ 21, Moves.TAKE_DOWN ], - [ 23, Moves.CONFUSE_RAY ], - [ 25, Moves.PSYSHIELD_BASH ], - [ 27, Moves.CALM_MIND ], - [ 32, Moves.ROLE_PLAY ], - [ 37, Moves.ZEN_HEADBUTT ], - [ 49, Moves.IMPRISON ], - [ 55, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ME_FIRST ], + [ 3, MoveId.LEER ], + [ 7, MoveId.ASTONISH ], + [ 10, MoveId.HYPNOSIS ], + [ 13, MoveId.STOMP ], + [ 16, MoveId.SAND_ATTACK ], + [ 21, MoveId.TAKE_DOWN ], + [ 23, MoveId.CONFUSE_RAY ], + [ 25, MoveId.PSYSHIELD_BASH ], + [ 27, MoveId.CALM_MIND ], + [ 32, MoveId.ROLE_PLAY ], + [ 37, MoveId.ZEN_HEADBUTT ], + [ 49, MoveId.IMPRISON ], + [ 55, MoveId.DOUBLE_EDGE ], ], // Reverting Smeargle back to pre gen9 implementation, to make it less dependent on access to Memory Mushrooms [Species.SMEARGLE]: [ - [ 1, Moves.SKETCH ], - [ 11, Moves.SKETCH ], - [ 21, Moves.SKETCH ], - [ 31, Moves.SKETCH ], - [ 41, Moves.SKETCH ], - [ 51, Moves.SKETCH ], - [ 61, Moves.SKETCH ], - [ 71, Moves.SKETCH ], - [ 81, Moves.SKETCH ], - [ 91, Moves.SKETCH ], + [ 1, MoveId.SKETCH ], + [ 11, MoveId.SKETCH ], + [ 21, MoveId.SKETCH ], + [ 31, MoveId.SKETCH ], + [ 41, MoveId.SKETCH ], + [ 51, MoveId.SKETCH ], + [ 61, MoveId.SKETCH ], + [ 71, MoveId.SKETCH ], + [ 81, MoveId.SKETCH ], + [ 91, MoveId.SKETCH ], ], [Species.TYROGUE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.HELPING_HAND ], - [ 10, Moves.LOW_SWEEP ], // Custom - [ 10, Moves.MACH_PUNCH ], // Custom - [ 10, Moves.RAPID_SPIN ], // Custom + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.HELPING_HAND ], + [ 10, MoveId.LOW_SWEEP ], // Custom + [ 10, MoveId.MACH_PUNCH ], // Custom + [ 10, MoveId.RAPID_SPIN ], // Custom ], [Species.HITMONTOP]: [ - [ EVOLVE_MOVE, Moves.TRIPLE_KICK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.FEINT ], - [ 1, Moves.PURSUIT ], - [ 1, Moves.ROLLING_KICK ], - [ 1, Moves.LOW_SWEEP ], // Previous Stage Move, Custom - [ 1, Moves.MACH_PUNCH ], // Previous Stage Move, Custom - [ 4, Moves.QUICK_ATTACK ], - [ 8, Moves.GYRO_BALL ], - [ 12, Moves.DETECT ], - [ 16, Moves.REVENGE ], - [ 21, Moves.WIDE_GUARD ], - [ 21, Moves.QUICK_GUARD ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.AGILITY ], - [ 32, Moves.DIG ], - [ 36, Moves.CLOSE_COMBAT ], - [ 40, Moves.COUNTER ], - [ 44, Moves.ENDEAVOR ], + [ EVOLVE_MOVE, MoveId.TRIPLE_KICK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.PURSUIT ], + [ 1, MoveId.ROLLING_KICK ], + [ 1, MoveId.LOW_SWEEP ], // Previous Stage Move, Custom + [ 1, MoveId.MACH_PUNCH ], // Previous Stage Move, Custom + [ 4, MoveId.QUICK_ATTACK ], + [ 8, MoveId.GYRO_BALL ], + [ 12, MoveId.DETECT ], + [ 16, MoveId.REVENGE ], + [ 21, MoveId.WIDE_GUARD ], + [ 21, MoveId.QUICK_GUARD ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.AGILITY ], + [ 32, MoveId.DIG ], + [ 36, MoveId.CLOSE_COMBAT ], + [ 40, MoveId.COUNTER ], + [ 44, MoveId.ENDEAVOR ], ], [Species.SMOOCHUM]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LICK ], - [ 4, Moves.POWDER_SNOW ], - [ 8, Moves.COPYCAT ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.COVET ], - [ 20, Moves.SING ], - [ 24, Moves.FAKE_TEARS ], - [ 28, Moves.ICE_PUNCH ], - [ 32, Moves.PSYCHIC ], - [ 36, Moves.SWEET_KISS ], - [ 40, Moves.MEAN_LOOK ], - [ 44, Moves.PERISH_SONG ], - [ 48, Moves.BLIZZARD ], + [ 1, MoveId.POUND ], + [ 1, MoveId.LICK ], + [ 4, MoveId.POWDER_SNOW ], + [ 8, MoveId.COPYCAT ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.COVET ], + [ 20, MoveId.SING ], + [ 24, MoveId.FAKE_TEARS ], + [ 28, MoveId.ICE_PUNCH ], + [ 32, MoveId.PSYCHIC ], + [ 36, MoveId.SWEET_KISS ], + [ 40, MoveId.MEAN_LOOK ], + [ 44, MoveId.PERISH_SONG ], + [ 48, MoveId.BLIZZARD ], ], [Species.ELEKID]: [ - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.THUNDER_SHOCK ], - [ 8, Moves.CHARGE ], - [ 12, Moves.SWIFT ], - [ 16, Moves.SHOCK_WAVE ], - [ 20, Moves.THUNDER_WAVE ], - [ 24, Moves.SCREECH ], - [ 28, Moves.THUNDER_PUNCH ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.LOW_KICK ], - [ 40, Moves.THUNDERBOLT ], - [ 44, Moves.LIGHT_SCREEN ], - [ 48, Moves.THUNDER ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.SWIFT ], + [ 16, MoveId.SHOCK_WAVE ], + [ 20, MoveId.THUNDER_WAVE ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.THUNDER_PUNCH ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.LOW_KICK ], + [ 40, MoveId.THUNDERBOLT ], + [ 44, MoveId.LIGHT_SCREEN ], + [ 48, MoveId.THUNDER ], ], [Species.MAGBY]: [ - [ 1, Moves.LEER ], - [ 1, Moves.SMOG ], - [ 4, Moves.EMBER ], - [ 8, Moves.SMOKESCREEN ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.FLAME_WHEEL ], - [ 20, Moves.CONFUSE_RAY ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.FIRE_PUNCH ], - [ 32, Moves.LAVA_PLUME ], - [ 36, Moves.LOW_KICK ], - [ 40, Moves.FLAMETHROWER ], - [ 44, Moves.SUNNY_DAY ], - [ 48, Moves.FIRE_BLAST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SMOG ], + [ 4, MoveId.EMBER ], + [ 8, MoveId.SMOKESCREEN ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.FLAME_WHEEL ], + [ 20, MoveId.CONFUSE_RAY ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.FIRE_PUNCH ], + [ 32, MoveId.LAVA_PLUME ], + [ 36, MoveId.LOW_KICK ], + [ 40, MoveId.FLAMETHROWER ], + [ 44, MoveId.SUNNY_DAY ], + [ 48, MoveId.FIRE_BLAST ], ], [Species.MILTANK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.ROLLOUT ], - [ 10, Moves.DEFENSE_CURL ], - [ 15, Moves.STOMP ], - [ 20, Moves.HEAL_BELL ], - [ 25, Moves.HEADBUTT ], - [ 30, Moves.ZEN_HEADBUTT ], - [ 35, Moves.MILK_DRINK ], - [ 40, Moves.BODY_SLAM ], - [ 45, Moves.PLAY_ROUGH ], - [ 50, Moves.CHARM ], - [ 55, Moves.HIGH_HORSEPOWER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.ROLLOUT ], + [ 10, MoveId.DEFENSE_CURL ], + [ 15, MoveId.STOMP ], + [ 20, MoveId.HEAL_BELL ], + [ 25, MoveId.HEADBUTT ], + [ 30, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.MILK_DRINK ], + [ 40, MoveId.BODY_SLAM ], + [ 45, MoveId.PLAY_ROUGH ], + [ 50, MoveId.CHARM ], + [ 55, MoveId.HIGH_HORSEPOWER ], ], [Species.BLISSEY]: [ - [ 1, Moves.POUND ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.DISARMING_VOICE ], - [ 4, Moves.TAIL_WHIP ], - [ 8, Moves.ECHOED_VOICE ], - [ 12, Moves.LIFE_DEW ], - [ 16, Moves.SING ], - [ 20, Moves.FLING ], - [ 24, Moves.TAKE_DOWN ], - [ 28, Moves.HEAL_PULSE ], - [ 32, Moves.HELPING_HAND ], - [ 36, Moves.LIGHT_SCREEN ], - [ 40, Moves.DOUBLE_EDGE ], - [ 44, Moves.SOFT_BOILED ], - [ 48, Moves.LAST_RESORT ], - [ 52, Moves.HEALING_WISH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 4, MoveId.TAIL_WHIP ], + [ 8, MoveId.ECHOED_VOICE ], + [ 12, MoveId.LIFE_DEW ], + [ 16, MoveId.SING ], + [ 20, MoveId.FLING ], + [ 24, MoveId.TAKE_DOWN ], + [ 28, MoveId.HEAL_PULSE ], + [ 32, MoveId.HELPING_HAND ], + [ 36, MoveId.LIGHT_SCREEN ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 44, MoveId.SOFT_BOILED ], + [ 48, MoveId.LAST_RESORT ], + [ 52, MoveId.HEALING_WISH ], ], [Species.RAIKOU]: [ - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.EXTREME_SPEED ], - [ 1, Moves.CHARGE ], - [ 6, Moves.SPARK ], - [ 12, Moves.BITE ], - [ 18, Moves.CALM_MIND ], - [ 24, Moves.ROAR ], - [ 30, Moves.THUNDER_FANG ], - [ 36, Moves.HOWL ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.EXTRASENSORY ], - [ 54, Moves.DISCHARGE ], - [ 60, Moves.REFLECT ], - [ 66, Moves.RAIN_DANCE ], - [ 72, Moves.THUNDER ], - [ 78, Moves.ZAP_CANNON ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.EXTREME_SPEED ], + [ 1, MoveId.CHARGE ], + [ 6, MoveId.SPARK ], + [ 12, MoveId.BITE ], + [ 18, MoveId.CALM_MIND ], + [ 24, MoveId.ROAR ], + [ 30, MoveId.THUNDER_FANG ], + [ 36, MoveId.HOWL ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.EXTRASENSORY ], + [ 54, MoveId.DISCHARGE ], + [ 60, MoveId.REFLECT ], + [ 66, MoveId.RAIN_DANCE ], + [ 72, MoveId.THUNDER ], + [ 78, MoveId.ZAP_CANNON ], ], [Species.ENTEI]: [ - [ RELEARN_MOVE, Moves.SACRED_FIRE ], - [ RELEARN_MOVE, Moves.EXTREME_SPEED ], - [ 1, Moves.STOMP ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 6, Moves.FLAME_WHEEL ], - [ 12, Moves.BITE ], - [ 18, Moves.CALM_MIND ], - [ 24, Moves.ROAR ], - [ 30, Moves.FIRE_FANG ], - [ 36, Moves.SCARY_FACE ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.EXTRASENSORY ], - [ 54, Moves.LAVA_PLUME ], - [ 60, Moves.SWAGGER ], - [ 66, Moves.SUNNY_DAY ], - [ 72, Moves.FIRE_BLAST ], - [ 78, Moves.ERUPTION ], + [ RELEARN_MOVE, MoveId.SACRED_FIRE ], + [ RELEARN_MOVE, MoveId.EXTREME_SPEED ], + [ 1, MoveId.STOMP ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 6, MoveId.FLAME_WHEEL ], + [ 12, MoveId.BITE ], + [ 18, MoveId.CALM_MIND ], + [ 24, MoveId.ROAR ], + [ 30, MoveId.FIRE_FANG ], + [ 36, MoveId.SCARY_FACE ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.EXTRASENSORY ], + [ 54, MoveId.LAVA_PLUME ], + [ 60, MoveId.SWAGGER ], + [ 66, MoveId.SUNNY_DAY ], + [ 72, MoveId.FIRE_BLAST ], + [ 78, MoveId.ERUPTION ], ], [Species.SUICUNE]: [ - [ RELEARN_MOVE, Moves.EXTREME_SPEED ], - [ RELEARN_MOVE, Moves.SHEER_COLD ], - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 1, Moves.MIST ], - [ 1, Moves.WATER_GUN ], - [ 6, Moves.WATER_PULSE ], - [ 12, Moves.BITE ], - [ 18, Moves.CALM_MIND ], - [ 24, Moves.ROAR ], - [ 30, Moves.ICE_FANG ], - [ 36, Moves.TAILWIND ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.EXTRASENSORY ], - [ 54, Moves.SURF ], - [ 60, Moves.MIRROR_COAT ], - [ 66, Moves.RAIN_DANCE ], - [ 72, Moves.HYDRO_PUMP ], - [ 78, Moves.BLIZZARD ], + [ RELEARN_MOVE, MoveId.EXTREME_SPEED ], + [ RELEARN_MOVE, MoveId.SHEER_COLD ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.MIST ], + [ 1, MoveId.WATER_GUN ], + [ 6, MoveId.WATER_PULSE ], + [ 12, MoveId.BITE ], + [ 18, MoveId.CALM_MIND ], + [ 24, MoveId.ROAR ], + [ 30, MoveId.ICE_FANG ], + [ 36, MoveId.TAILWIND ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.EXTRASENSORY ], + [ 54, MoveId.SURF ], + [ 60, MoveId.MIRROR_COAT ], + [ 66, MoveId.RAIN_DANCE ], + [ 72, MoveId.HYDRO_PUMP ], + [ 78, MoveId.BLIZZARD ], ], [Species.LARVITAR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 3, Moves.ROCK_THROW ], - [ 6, Moves.PAYBACK ], - [ 9, Moves.BITE ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.ROCK_SLIDE ], - [ 18, Moves.STOMPING_TANTRUM ], - [ 21, Moves.SCREECH ], - [ 24, Moves.SMACK_DOWN ], - [ 27, Moves.CRUNCH ], - [ 31, Moves.EARTHQUAKE ], - [ 33, Moves.STONE_EDGE ], - [ 36, Moves.THRASH ], - [ 39, Moves.SANDSTORM ], - [ 42, Moves.HYPER_BEAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 3, MoveId.ROCK_THROW ], + [ 6, MoveId.PAYBACK ], + [ 9, MoveId.BITE ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.ROCK_SLIDE ], + [ 18, MoveId.STOMPING_TANTRUM ], + [ 21, MoveId.SCREECH ], + [ 24, MoveId.SMACK_DOWN ], + [ 27, MoveId.CRUNCH ], + [ 31, MoveId.EARTHQUAKE ], + [ 33, MoveId.STONE_EDGE ], + [ 36, MoveId.THRASH ], + [ 39, MoveId.SANDSTORM ], + [ 42, MoveId.HYPER_BEAM ], ], [Species.PUPITAR]: [ - [ EVOLVE_MOVE, Moves.IRON_DEFENSE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.PAYBACK ], - [ 9, Moves.BITE ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.ROCK_SLIDE ], - [ 18, Moves.STOMPING_TANTRUM ], - [ 21, Moves.SCREECH ], - [ 24, Moves.SMACK_DOWN ], - [ 27, Moves.CRUNCH ], - [ 33, Moves.EARTHQUAKE ], - [ 37, Moves.STONE_EDGE ], - [ 42, Moves.THRASH ], - [ 47, Moves.SANDSTORM ], - [ 52, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, MoveId.IRON_DEFENSE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.PAYBACK ], + [ 9, MoveId.BITE ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.ROCK_SLIDE ], + [ 18, MoveId.STOMPING_TANTRUM ], + [ 21, MoveId.SCREECH ], + [ 24, MoveId.SMACK_DOWN ], + [ 27, MoveId.CRUNCH ], + [ 33, MoveId.EARTHQUAKE ], + [ 37, MoveId.STONE_EDGE ], + [ 42, MoveId.THRASH ], + [ 47, MoveId.SANDSTORM ], + [ 52, MoveId.HYPER_BEAM ], ], [Species.TYRANITAR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.DARK_PULSE ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 9, Moves.BITE ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.ROCK_SLIDE ], - [ 18, Moves.STOMPING_TANTRUM ], - [ 21, Moves.SCREECH ], - [ 24, Moves.SMACK_DOWN ], - [ 27, Moves.CRUNCH ], - [ 33, Moves.EARTHQUAKE ], - [ 37, Moves.STONE_EDGE ], - [ 42, Moves.THRASH ], - [ 47, Moves.SANDSTORM ], - [ 52, Moves.HYPER_BEAM ], - [ 59, Moves.GIGA_IMPACT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.DARK_PULSE ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 9, MoveId.BITE ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.ROCK_SLIDE ], + [ 18, MoveId.STOMPING_TANTRUM ], + [ 21, MoveId.SCREECH ], + [ 24, MoveId.SMACK_DOWN ], + [ 27, MoveId.CRUNCH ], + [ 33, MoveId.EARTHQUAKE ], + [ 37, MoveId.STONE_EDGE ], + [ 42, MoveId.THRASH ], + [ 47, MoveId.SANDSTORM ], + [ 52, MoveId.HYPER_BEAM ], + [ 59, MoveId.GIGA_IMPACT ], ], [Species.LUGIA]: [ - [ RELEARN_MOVE, Moves.DRAGON_RUSH ], - [ 1, Moves.GUST ], - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.WEATHER_BALL ], - [ 9, Moves.MIST ], - [ 18, Moves.SAFEGUARD ], - [ 27, Moves.CALM_MIND ], - [ 36, Moves.EXTRASENSORY ], - [ 45, Moves.RECOVER ], - [ 54, Moves.AEROBLAST ], - [ 63, Moves.RAIN_DANCE ], - [ 72, Moves.HYDRO_PUMP ], - [ 81, Moves.FUTURE_SIGHT ], - [ 90, Moves.SKY_ATTACK ], + [ RELEARN_MOVE, MoveId.DRAGON_RUSH ], + [ 1, MoveId.GUST ], + [ 1, MoveId.WHIRLWIND ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.WEATHER_BALL ], + [ 9, MoveId.MIST ], + [ 18, MoveId.SAFEGUARD ], + [ 27, MoveId.CALM_MIND ], + [ 36, MoveId.EXTRASENSORY ], + [ 45, MoveId.RECOVER ], + [ 54, MoveId.AEROBLAST ], + [ 63, MoveId.RAIN_DANCE ], + [ 72, MoveId.HYDRO_PUMP ], + [ 81, MoveId.FUTURE_SIGHT ], + [ 90, MoveId.SKY_ATTACK ], ], [Species.HO_OH]: [ - [ 1, Moves.GUST ], - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.WEATHER_BALL ], - [ 9, Moves.LIFE_DEW ], - [ 18, Moves.SAFEGUARD ], - [ 27, Moves.CALM_MIND ], - [ 36, Moves.EXTRASENSORY ], - [ 45, Moves.RECOVER ], - [ 54, Moves.SACRED_FIRE ], - [ 63, Moves.SUNNY_DAY ], - [ 72, Moves.FIRE_BLAST ], - [ 81, Moves.FUTURE_SIGHT ], - [ 90, Moves.SKY_ATTACK ], - [ 99, Moves.OVERHEAT ], + [ 1, MoveId.GUST ], + [ 1, MoveId.WHIRLWIND ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.WEATHER_BALL ], + [ 9, MoveId.LIFE_DEW ], + [ 18, MoveId.SAFEGUARD ], + [ 27, MoveId.CALM_MIND ], + [ 36, MoveId.EXTRASENSORY ], + [ 45, MoveId.RECOVER ], + [ 54, MoveId.SACRED_FIRE ], + [ 63, MoveId.SUNNY_DAY ], + [ 72, MoveId.FIRE_BLAST ], + [ 81, MoveId.FUTURE_SIGHT ], + [ 90, MoveId.SKY_ATTACK ], + [ 99, MoveId.OVERHEAT ], ], [Species.CELEBI]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.HEAL_BELL ], - [ 10, Moves.MAGICAL_LEAF ], - [ 20, Moves.BATON_PASS ], - [ 30, Moves.ANCIENT_POWER ], - [ 40, Moves.LIFE_DEW ], - [ 50, Moves.LEECH_SEED ], - [ 55, Moves.HEAL_BLOCK ], - [ 60, Moves.RECOVER ], - [ 70, Moves.FUTURE_SIGHT ], - [ 80, Moves.HEALING_WISH ], - [ 90, Moves.LEAF_STORM ], - [ 100, Moves.PERISH_SONG ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.HEAL_BELL ], + [ 10, MoveId.MAGICAL_LEAF ], + [ 20, MoveId.BATON_PASS ], + [ 30, MoveId.ANCIENT_POWER ], + [ 40, MoveId.LIFE_DEW ], + [ 50, MoveId.LEECH_SEED ], + [ 55, MoveId.HEAL_BLOCK ], + [ 60, MoveId.RECOVER ], + [ 70, MoveId.FUTURE_SIGHT ], + [ 80, MoveId.HEALING_WISH ], + [ 90, MoveId.LEAF_STORM ], + [ 100, MoveId.PERISH_SONG ], ], [Species.TREECKO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 3, Moves.LEAFAGE ], - [ 6, Moves.QUICK_ATTACK ], - [ 9, Moves.MEGA_DRAIN ], - [ 12, Moves.DETECT ], - [ 15, Moves.QUICK_GUARD ], - [ 18, Moves.ASSURANCE ], - [ 21, Moves.GIGA_DRAIN ], - [ 24, Moves.SLAM ], - [ 27, Moves.DOUBLE_TEAM ], - [ 30, Moves.ENERGY_BALL ], - [ 33, Moves.SCREECH ], - [ 36, Moves.ENDEAVOR ], - [ 39, Moves.LEAF_STORM ], + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 3, MoveId.LEAFAGE ], + [ 6, MoveId.QUICK_ATTACK ], + [ 9, MoveId.MEGA_DRAIN ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.QUICK_GUARD ], + [ 18, MoveId.ASSURANCE ], + [ 21, MoveId.GIGA_DRAIN ], + [ 24, MoveId.SLAM ], + [ 27, MoveId.DOUBLE_TEAM ], + [ 30, MoveId.ENERGY_BALL ], + [ 33, MoveId.SCREECH ], + [ 36, MoveId.ENDEAVOR ], + [ 39, MoveId.LEAF_STORM ], ], [Species.GROVYLE]: [ - [ RELEARN_MOVE, Moves.FALSE_SWIPE ], - [ RELEARN_MOVE, Moves.FURY_CUTTER ], - [ RELEARN_MOVE, Moves.X_SCISSOR ], - [ RELEARN_MOVE, Moves.ENERGY_BALL ], - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.QUICK_ATTACK ], - [ 9, Moves.MEGA_DRAIN ], - [ 12, Moves.DETECT ], - [ 15, Moves.QUICK_GUARD ], - [ 20, Moves.ASSURANCE ], - [ 25, Moves.GIGA_DRAIN ], - [ 30, Moves.SLAM ], - [ 35, Moves.DOUBLE_TEAM ], - [ 40, Moves.LEAF_BLADE ], - [ 45, Moves.SCREECH ], - [ 50, Moves.ENDEAVOR ], - [ 55, Moves.LEAF_STORM ], + [ RELEARN_MOVE, MoveId.FALSE_SWIPE ], + [ RELEARN_MOVE, MoveId.FURY_CUTTER ], + [ RELEARN_MOVE, MoveId.X_SCISSOR ], + [ RELEARN_MOVE, MoveId.ENERGY_BALL ], + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 9, MoveId.MEGA_DRAIN ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.QUICK_GUARD ], + [ 20, MoveId.ASSURANCE ], + [ 25, MoveId.GIGA_DRAIN ], + [ 30, MoveId.SLAM ], + [ 35, MoveId.DOUBLE_TEAM ], + [ 40, MoveId.LEAF_BLADE ], + [ 45, MoveId.SCREECH ], + [ 50, MoveId.ENDEAVOR ], + [ 55, MoveId.LEAF_STORM ], ], [Species.SCEPTILE]: [ - [ EVOLVE_MOVE, Moves.LEAF_BLADE ], - [ RELEARN_MOVE, Moves.FALSE_SWIPE ], - [ RELEARN_MOVE, Moves.FURY_CUTTER ], - [ RELEARN_MOVE, Moves.X_SCISSOR ], - [ RELEARN_MOVE, Moves.ENERGY_BALL ], - [ RELEARN_MOVE, Moves.SHED_TAIL ], - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DUAL_CHOP ], - [ 5, Moves.MEGA_DRAIN ], - [ 12, Moves.DETECT ], - [ 15, Moves.QUICK_GUARD ], - [ 20, Moves.ASSURANCE ], - [ 25, Moves.GIGA_DRAIN ], - [ 30, Moves.SLAM ], - [ 35, Moves.DOUBLE_TEAM ], - [ 42, Moves.SCREECH ], - [ 49, Moves.ENDEAVOR ], - [ 56, Moves.LEAF_STORM ], + [ EVOLVE_MOVE, MoveId.LEAF_BLADE ], + [ RELEARN_MOVE, MoveId.FALSE_SWIPE ], + [ RELEARN_MOVE, MoveId.FURY_CUTTER ], + [ RELEARN_MOVE, MoveId.X_SCISSOR ], + [ RELEARN_MOVE, MoveId.ENERGY_BALL ], + [ RELEARN_MOVE, MoveId.SHED_TAIL ], + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DUAL_CHOP ], + [ 5, MoveId.MEGA_DRAIN ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.QUICK_GUARD ], + [ 20, MoveId.ASSURANCE ], + [ 25, MoveId.GIGA_DRAIN ], + [ 30, MoveId.SLAM ], + [ 35, MoveId.DOUBLE_TEAM ], + [ 42, MoveId.SCREECH ], + [ 49, MoveId.ENDEAVOR ], + [ 56, MoveId.LEAF_STORM ], ], [Species.TORCHIC]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 3, Moves.EMBER ], - [ 6, Moves.QUICK_ATTACK ], - [ 9, Moves.FLAME_CHARGE ], - [ 12, Moves.DETECT ], - [ 15, Moves.SAND_ATTACK ], - [ 18, Moves.AERIAL_ACE ], - [ 21, Moves.SLASH ], - [ 24, Moves.BOUNCE ], - [ 27, Moves.FOCUS_ENERGY ], - [ 30, Moves.FLAMETHROWER ], - [ 33, Moves.FEATHER_DANCE ], - [ 36, Moves.REVERSAL ], - [ 39, Moves.FLARE_BLITZ ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.EMBER ], + [ 6, MoveId.QUICK_ATTACK ], + [ 9, MoveId.FLAME_CHARGE ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.SAND_ATTACK ], + [ 18, MoveId.AERIAL_ACE ], + [ 21, MoveId.SLASH ], + [ 24, MoveId.BOUNCE ], + [ 27, MoveId.FOCUS_ENERGY ], + [ 30, MoveId.FLAMETHROWER ], + [ 33, MoveId.FEATHER_DANCE ], + [ 36, MoveId.REVERSAL ], + [ 39, MoveId.FLARE_BLITZ ], ], [Species.COMBUSKEN]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_KICK ], - [ RELEARN_MOVE, Moves.FLAMETHROWER ], - [ RELEARN_MOVE, Moves.FEATHER_DANCE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.QUICK_ATTACK ], - [ 9, Moves.FLAME_CHARGE ], - [ 12, Moves.DETECT ], - [ 15, Moves.SAND_ATTACK ], - [ 20, Moves.AERIAL_ACE ], - [ 25, Moves.SLASH ], - [ 30, Moves.BOUNCE ], - [ 35, Moves.FOCUS_ENERGY ], - [ 40, Moves.BLAZE_KICK ], - [ 45, Moves.BULK_UP ], - [ 50, Moves.REVERSAL ], - [ 55, Moves.FLARE_BLITZ ], + [ EVOLVE_MOVE, MoveId.DOUBLE_KICK ], + [ RELEARN_MOVE, MoveId.FLAMETHROWER ], + [ RELEARN_MOVE, MoveId.FEATHER_DANCE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 9, MoveId.FLAME_CHARGE ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.SAND_ATTACK ], + [ 20, MoveId.AERIAL_ACE ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.BOUNCE ], + [ 35, MoveId.FOCUS_ENERGY ], + [ 40, MoveId.BLAZE_KICK ], + [ 45, MoveId.BULK_UP ], + [ 50, MoveId.REVERSAL ], + [ 55, MoveId.FLARE_BLITZ ], ], [Species.BLAZIKEN]: [ - [ EVOLVE_MOVE, Moves.BLAZE_KICK ], - [ RELEARN_MOVE, Moves.FIRE_PUNCH ], - [ RELEARN_MOVE, Moves.EMBER ], - [ RELEARN_MOVE, Moves.FLAMETHROWER ], - [ RELEARN_MOVE, Moves.FEATHER_DANCE ], - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 9, Moves.FLAME_CHARGE ], - [ 12, Moves.DETECT ], - [ 15, Moves.SAND_ATTACK ], - [ 20, Moves.AERIAL_ACE ], - [ 25, Moves.SLASH ], - [ 30, Moves.BOUNCE ], - [ 35, Moves.FOCUS_ENERGY ], - [ 42, Moves.BULK_UP ], - [ 49, Moves.REVERSAL ], - [ 56, Moves.FLARE_BLITZ ], - [ 63, Moves.BRAVE_BIRD ], + [ EVOLVE_MOVE, MoveId.BLAZE_KICK ], + [ RELEARN_MOVE, MoveId.FIRE_PUNCH ], + [ RELEARN_MOVE, MoveId.EMBER ], + [ RELEARN_MOVE, MoveId.FLAMETHROWER ], + [ RELEARN_MOVE, MoveId.FEATHER_DANCE ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 9, MoveId.FLAME_CHARGE ], + [ 12, MoveId.DETECT ], + [ 15, MoveId.SAND_ATTACK ], + [ 20, MoveId.AERIAL_ACE ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.BOUNCE ], + [ 35, MoveId.FOCUS_ENERGY ], + [ 42, MoveId.BULK_UP ], + [ 49, MoveId.REVERSAL ], + [ 56, MoveId.FLARE_BLITZ ], + [ 63, MoveId.BRAVE_BIRD ], ], [Species.MUDKIP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.WATER_GUN ], - [ 6, Moves.ROCK_SMASH ], - [ 9, Moves.ROCK_THROW ], - [ 12, Moves.PROTECT ], - [ 15, Moves.SUPERSONIC ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.ROCK_SLIDE ], - [ 24, Moves.TAKE_DOWN ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SCREECH ], - [ 36, Moves.ENDEAVOR ], - [ 39, Moves.HYDRO_PUMP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.WATER_GUN ], + [ 6, MoveId.ROCK_SMASH ], + [ 9, MoveId.ROCK_THROW ], + [ 12, MoveId.PROTECT ], + [ 15, MoveId.SUPERSONIC ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.ROCK_SLIDE ], + [ 24, MoveId.TAKE_DOWN ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SCREECH ], + [ 36, MoveId.ENDEAVOR ], + [ 39, MoveId.HYDRO_PUMP ], ], [Species.MARSHTOMP]: [ - [ EVOLVE_MOVE, Moves.MUD_SHOT ], - [ RELEARN_MOVE, Moves.SURF ], // Previous Stage Move - [ RELEARN_MOVE, Moves.ROCK_SMASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 9, Moves.ROCK_THROW ], - [ 12, Moves.PROTECT ], - [ 15, Moves.SUPERSONIC ], - [ 20, Moves.WATER_PULSE ], - [ 25, Moves.ROCK_SLIDE ], - [ 30, Moves.TAKE_DOWN ], - [ 35, Moves.AMNESIA ], - [ 40, Moves.MUDDY_WATER ], - [ 45, Moves.SCREECH ], - [ 50, Moves.ENDEAVOR ], - [ 55, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.MUD_SHOT ], + [ RELEARN_MOVE, MoveId.SURF ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.ROCK_SMASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 9, MoveId.ROCK_THROW ], + [ 12, MoveId.PROTECT ], + [ 15, MoveId.SUPERSONIC ], + [ 20, MoveId.WATER_PULSE ], + [ 25, MoveId.ROCK_SLIDE ], + [ 30, MoveId.TAKE_DOWN ], + [ 35, MoveId.AMNESIA ], + [ 40, MoveId.MUDDY_WATER ], + [ 45, MoveId.SCREECH ], + [ 50, MoveId.ENDEAVOR ], + [ 55, MoveId.HYDRO_PUMP ], ], [Species.SWAMPERT]: [ - [ RELEARN_MOVE, Moves.SURF ], - [ RELEARN_MOVE, Moves.EARTHQUAKE ], - [ RELEARN_MOVE, Moves.ROCK_SMASH ], - [ RELEARN_MOVE, Moves.HAMMER_ARM ], - [ 1, Moves.MUD_SHOT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 9, Moves.ROCK_THROW ], - [ 12, Moves.PROTECT ], - [ 15, Moves.SUPERSONIC ], - [ 20, Moves.WATER_PULSE ], - [ 25, Moves.ROCK_SLIDE ], - [ 30, Moves.TAKE_DOWN ], - [ 35, Moves.AMNESIA ], - [ 42, Moves.MUDDY_WATER ], - [ 49, Moves.SCREECH ], - [ 56, Moves.ENDEAVOR ], - [ 63, Moves.HYDRO_PUMP ], + [ RELEARN_MOVE, MoveId.SURF ], + [ RELEARN_MOVE, MoveId.EARTHQUAKE ], + [ RELEARN_MOVE, MoveId.ROCK_SMASH ], + [ RELEARN_MOVE, MoveId.HAMMER_ARM ], + [ 1, MoveId.MUD_SHOT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 9, MoveId.ROCK_THROW ], + [ 12, MoveId.PROTECT ], + [ 15, MoveId.SUPERSONIC ], + [ 20, MoveId.WATER_PULSE ], + [ 25, MoveId.ROCK_SLIDE ], + [ 30, MoveId.TAKE_DOWN ], + [ 35, MoveId.AMNESIA ], + [ 42, MoveId.MUDDY_WATER ], + [ 49, MoveId.SCREECH ], + [ 56, MoveId.ENDEAVOR ], + [ 63, MoveId.HYDRO_PUMP ], ], [Species.POOCHYENA]: [ - [ 1, Moves.TACKLE ], - [ 4, Moves.HOWL ], - [ 7, Moves.SAND_ATTACK ], - [ 10, Moves.BITE ], - [ 13, Moves.LEER ], - [ 16, Moves.ROAR ], - [ 19, Moves.SWAGGER ], - [ 22, Moves.ASSURANCE ], - [ 25, Moves.SCARY_FACE ], - [ 28, Moves.TAUNT ], - [ 31, Moves.CRUNCH ], - [ 34, Moves.YAWN ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.PLAY_ROUGH ], + [ 1, MoveId.TACKLE ], + [ 4, MoveId.HOWL ], + [ 7, MoveId.SAND_ATTACK ], + [ 10, MoveId.BITE ], + [ 13, MoveId.LEER ], + [ 16, MoveId.ROAR ], + [ 19, MoveId.SWAGGER ], + [ 22, MoveId.ASSURANCE ], + [ 25, MoveId.SCARY_FACE ], + [ 28, MoveId.TAUNT ], + [ 31, MoveId.CRUNCH ], + [ 34, MoveId.YAWN ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.PLAY_ROUGH ], ], [Species.MIGHTYENA]: [ - [ EVOLVE_MOVE, Moves.SNARL ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.THIEF ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 13, Moves.LEER ], - [ 13, Moves.HOWL ], - [ 16, Moves.ROAR ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.ASSURANCE ], - [ 28, Moves.SCARY_FACE ], - [ 36, Moves.TAUNT ], - [ 44, Moves.YAWN ], - [ 48, Moves.TAKE_DOWN ], - [ 52, Moves.SUCKER_PUNCH ], - [ 56, Moves.PLAY_ROUGH ], + [ EVOLVE_MOVE, MoveId.SNARL ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.THIEF ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 13, MoveId.LEER ], + [ 13, MoveId.HOWL ], + [ 16, MoveId.ROAR ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.ASSURANCE ], + [ 28, MoveId.SCARY_FACE ], + [ 36, MoveId.TAUNT ], + [ 44, MoveId.YAWN ], + [ 48, MoveId.TAKE_DOWN ], + [ 52, MoveId.SUCKER_PUNCH ], + [ 56, MoveId.PLAY_ROUGH ], ], [Species.ZIGZAGOON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.SAND_ATTACK ], - [ 6, Moves.TAIL_WHIP ], - [ 9, Moves.COVET ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.PIN_MISSILE ], - [ 21, Moves.REST ], - [ 24, Moves.TAKE_DOWN ], - [ 27, Moves.FLING ], - [ 30, Moves.FLAIL ], - [ 33, Moves.BELLY_DRUM ], - [ 36, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.SAND_ATTACK ], + [ 6, MoveId.TAIL_WHIP ], + [ 9, MoveId.COVET ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.PIN_MISSILE ], + [ 21, MoveId.REST ], + [ 24, MoveId.TAKE_DOWN ], + [ 27, MoveId.FLING ], + [ 30, MoveId.FLAIL ], + [ 33, MoveId.BELLY_DRUM ], + [ 36, MoveId.DOUBLE_EDGE ], ], [Species.LINOONE]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.PIN_MISSILE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWITCHEROO ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 1, Moves.ROTOTILLER ], - [ 9, Moves.COVET ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.HONE_CLAWS ], - [ 18, Moves.FURY_SWIPES ], - [ 23, Moves.REST ], - [ 28, Moves.TAKE_DOWN ], - [ 33, Moves.FLING ], - [ 38, Moves.FLAIL ], - [ 43, Moves.BELLY_DRUM ], - [ 48, Moves.DOUBLE_EDGE ], + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.PIN_MISSILE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWITCHEROO ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 1, MoveId.ROTOTILLER ], + [ 9, MoveId.COVET ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.HONE_CLAWS ], + [ 18, MoveId.FURY_SWIPES ], + [ 23, MoveId.REST ], + [ 28, MoveId.TAKE_DOWN ], + [ 33, MoveId.FLING ], + [ 38, MoveId.FLAIL ], + [ 43, MoveId.BELLY_DRUM ], + [ 48, MoveId.DOUBLE_EDGE ], ], [Species.WURMPLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 5, Moves.POISON_STING ], - [ 15, Moves.BUG_BITE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 5, MoveId.POISON_STING ], + [ 15, MoveId.BUG_BITE ], ], [Species.SILCOON]: [ - [ EVOLVE_MOVE, Moves.HARDEN ], - [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.POISON_STING ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.HARDEN ], + [ EVOLVE_MOVE, MoveId.HARDEN ], + [ RELEARN_MOVE, MoveId.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.POISON_STING ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.HARDEN ], ], [Species.BEAUTIFLY]: [ - [ EVOLVE_MOVE, Moves.GUST ], - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.BUG_BITE ], - [ 1, Moves.GUST ], - [ 1, Moves.HARDEN ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.POISON_STING ], - [ 12, Moves.ABSORB ], - [ 15, Moves.STUN_SPORE ], - [ 17, Moves.MORNING_SUN ], - [ 20, Moves.AIR_CUTTER ], - [ 22, Moves.MEGA_DRAIN ], - [ 25, Moves.LEECH_LIFE ], - [ 27, Moves.ATTRACT ], - [ 30, Moves.WHIRLWIND ], - [ 32, Moves.GIGA_DRAIN ], - [ 35, Moves.BUG_BUZZ ], - [ 37, Moves.PROTECT ], - [ 40, Moves.QUIVER_DANCE ], + [ EVOLVE_MOVE, MoveId.GUST ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.POISON_STING ], + [ 12, MoveId.ABSORB ], + [ 15, MoveId.STUN_SPORE ], + [ 17, MoveId.MORNING_SUN ], + [ 20, MoveId.AIR_CUTTER ], + [ 22, MoveId.MEGA_DRAIN ], + [ 25, MoveId.LEECH_LIFE ], + [ 27, MoveId.ATTRACT ], + [ 30, MoveId.WHIRLWIND ], + [ 32, MoveId.GIGA_DRAIN ], + [ 35, MoveId.BUG_BUZZ ], + [ 37, MoveId.PROTECT ], + [ 40, MoveId.QUIVER_DANCE ], ], [Species.CASCOON]: [ - [ EVOLVE_MOVE, Moves.HARDEN ], - [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.POISON_STING ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.HARDEN ], + [ EVOLVE_MOVE, MoveId.HARDEN ], + [ RELEARN_MOVE, MoveId.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.POISON_STING ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.HARDEN ], ], [Species.DUSTOX]: [ - [ EVOLVE_MOVE, Moves.GUST ], - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.BUG_BITE ], - [ 1, Moves.GUST ], - [ 1, Moves.HARDEN ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.POISON_STING ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.POISON_POWDER ], - [ 17, Moves.MOONLIGHT ], - [ 20, Moves.VENOSHOCK ], - [ 22, Moves.PSYBEAM ], - [ 25, Moves.LEECH_LIFE ], - [ 27, Moves.LIGHT_SCREEN ], - [ 30, Moves.WHIRLWIND ], - [ 32, Moves.TOXIC ], - [ 35, Moves.BUG_BUZZ ], - [ 37, Moves.PROTECT ], - [ 40, Moves.QUIVER_DANCE ], + [ EVOLVE_MOVE, MoveId.GUST ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.POISON_STING ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.POISON_POWDER ], + [ 17, MoveId.MOONLIGHT ], + [ 20, MoveId.VENOSHOCK ], + [ 22, MoveId.PSYBEAM ], + [ 25, MoveId.LEECH_LIFE ], + [ 27, MoveId.LIGHT_SCREEN ], + [ 30, MoveId.WHIRLWIND ], + [ 32, MoveId.TOXIC ], + [ 35, MoveId.BUG_BUZZ ], + [ 37, MoveId.PROTECT ], + [ 40, MoveId.QUIVER_DANCE ], ], [Species.LOTAD]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 3, Moves.ABSORB ], - [ 6, Moves.WATER_GUN ], - [ 9, Moves.MIST ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.FLAIL ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.LEECH_SEED ], - [ 28, Moves.GIGA_DRAIN ], - [ 33, Moves.RAIN_DANCE ], - [ 38, Moves.ZEN_HEADBUTT ], - [ 43, Moves.ENERGY_BALL ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 3, MoveId.ABSORB ], + [ 6, MoveId.WATER_GUN ], + [ 9, MoveId.MIST ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.LEECH_SEED ], + [ 28, MoveId.GIGA_DRAIN ], + [ 33, MoveId.RAIN_DANCE ], + [ 38, MoveId.ZEN_HEADBUTT ], + [ 43, MoveId.ENERGY_BALL ], ], [Species.LOMBRE]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.FLAIL ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.RAIN_DANCE ], // Previous Stage Move - [ 1, Moves.KNOCK_OFF ], - [ 1, Moves.TEETER_DANCE ], - [ 1, Moves.ASTONISH ], - [ 9, Moves.MIST ], - [ 12, Moves.MEGA_DRAIN ], - [ 18, Moves.FURY_SWIPES ], - [ 24, Moves.BUBBLE_BEAM ], - [ 30, Moves.LEECH_SEED ], - [ 36, Moves.GIGA_DRAIN ], - [ 50, Moves.ZEN_HEADBUTT ], - [ 57, Moves.ENERGY_BALL ], - [ 64, Moves.HYDRO_PUMP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.RAIN_DANCE ], // Previous Stage Move + [ 1, MoveId.KNOCK_OFF ], + [ 1, MoveId.TEETER_DANCE ], + [ 1, MoveId.ASTONISH ], + [ 9, MoveId.MIST ], + [ 12, MoveId.MEGA_DRAIN ], + [ 18, MoveId.FURY_SWIPES ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.LEECH_SEED ], + [ 36, MoveId.GIGA_DRAIN ], + [ 50, MoveId.ZEN_HEADBUTT ], + [ 57, MoveId.ENERGY_BALL ], + [ 64, MoveId.HYDRO_PUMP ], ], [Species.LUDICOLO]: [ - [ RELEARN_MOVE, Moves.GROWL ], - [ RELEARN_MOVE, Moves.MIST ], - [ RELEARN_MOVE, Moves.WATER_GUN ], - [ RELEARN_MOVE, Moves.HYDRO_PUMP ], - [ RELEARN_MOVE, Moves.ABSORB ], - [ RELEARN_MOVE, Moves.MEGA_DRAIN ], - [ RELEARN_MOVE, Moves.FURY_SWIPES ], - [ RELEARN_MOVE, Moves.FLAIL ], - [ RELEARN_MOVE, Moves.KNOCK_OFF ], - [ RELEARN_MOVE, Moves.TEETER_DANCE ], - [ RELEARN_MOVE, Moves.ASTONISH ], - [ RELEARN_MOVE, Moves.ENERGY_BALL ], - [ RELEARN_MOVE, Moves.ZEN_HEADBUTT ], - [ RELEARN_MOVE, Moves.LEECH_SEED ], // Previous Stage Move - [ RELEARN_MOVE, Moves.GIGA_DRAIN ], // Previous Stage Move - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.BUBBLE_BEAM ], - [ 1, Moves.RAIN_DANCE ], + [ RELEARN_MOVE, MoveId.GROWL ], + [ RELEARN_MOVE, MoveId.MIST ], + [ RELEARN_MOVE, MoveId.WATER_GUN ], + [ RELEARN_MOVE, MoveId.HYDRO_PUMP ], + [ RELEARN_MOVE, MoveId.ABSORB ], + [ RELEARN_MOVE, MoveId.MEGA_DRAIN ], + [ RELEARN_MOVE, MoveId.FURY_SWIPES ], + [ RELEARN_MOVE, MoveId.FLAIL ], + [ RELEARN_MOVE, MoveId.KNOCK_OFF ], + [ RELEARN_MOVE, MoveId.TEETER_DANCE ], + [ RELEARN_MOVE, MoveId.ASTONISH ], + [ RELEARN_MOVE, MoveId.ENERGY_BALL ], + [ RELEARN_MOVE, MoveId.ZEN_HEADBUTT ], + [ RELEARN_MOVE, MoveId.LEECH_SEED ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.GIGA_DRAIN ], // Previous Stage Move + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.BUBBLE_BEAM ], + [ 1, MoveId.RAIN_DANCE ], ], [Species.SEEDOT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.BIDE ], - [ 3, Moves.ABSORB ], - [ 6, Moves.ASTONISH ], - [ 9, Moves.GROWTH ], - [ 12, Moves.ROLLOUT ], - [ 15, Moves.MEGA_DRAIN ], - [ 18, Moves.PAYBACK ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.SUNNY_DAY ], - [ 27, Moves.SYNTHESIS ], - [ 30, Moves.SUCKER_PUNCH ], - [ 33, Moves.EXPLOSION ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.BIDE ], + [ 3, MoveId.ABSORB ], + [ 6, MoveId.ASTONISH ], + [ 9, MoveId.GROWTH ], + [ 12, MoveId.ROLLOUT ], + [ 15, MoveId.MEGA_DRAIN ], + [ 18, MoveId.PAYBACK ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.SUNNY_DAY ], + [ 27, MoveId.SYNTHESIS ], + [ 30, MoveId.SUCKER_PUNCH ], + [ 33, MoveId.EXPLOSION ], ], [Species.NUZLEAF]: [ - [ EVOLVE_MOVE, Moves.RAZOR_LEAF ], - [ 1, Moves.AIR_CUTTER ], - [ 1, Moves.TORMENT ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.EXPLOSION ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.BIDE ], // Previous Stage Move - [ 1, Moves.ABSORB ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HEADBUTT ], // Previous Stage Move - [ 9, Moves.GROWTH ], - [ 12, Moves.ROLLOUT ], - [ 18, Moves.MEGA_DRAIN ], - [ 24, Moves.PAYBACK ], - [ 30, Moves.SYNTHESIS ], - [ 36, Moves.SUNNY_DAY ], - [ 43, Moves.EXTRASENSORY ], - [ 50, Moves.SUCKER_PUNCH ], - [ 57, Moves.LEAF_BLADE ], + [ EVOLVE_MOVE, MoveId.RAZOR_LEAF ], + [ 1, MoveId.AIR_CUTTER ], + [ 1, MoveId.TORMENT ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.EXPLOSION ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.BIDE ], // Previous Stage Move + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.HEADBUTT ], // Previous Stage Move + [ 9, MoveId.GROWTH ], + [ 12, MoveId.ROLLOUT ], + [ 18, MoveId.MEGA_DRAIN ], + [ 24, MoveId.PAYBACK ], + [ 30, MoveId.SYNTHESIS ], + [ 36, MoveId.SUNNY_DAY ], + [ 43, MoveId.EXTRASENSORY ], + [ 50, MoveId.SUCKER_PUNCH ], + [ 57, MoveId.LEAF_BLADE ], ], [Species.SHIFTRY]: [ - [ EVOLVE_MOVE, Moves.LEAF_BLADE ], - [ RELEARN_MOVE, Moves.WHIRLWIND ], - [ RELEARN_MOVE, Moves.TACKLE ], - [ RELEARN_MOVE, Moves.BIDE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.ABSORB ], - [ RELEARN_MOVE, Moves.MEGA_DRAIN ], - [ RELEARN_MOVE, Moves.GROWTH ], - [ RELEARN_MOVE, Moves.RAZOR_LEAF ], - [ RELEARN_MOVE, Moves.HARDEN ], - [ RELEARN_MOVE, Moves.HEADBUTT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.EXPLOSION ], - [ RELEARN_MOVE, Moves.ROLLOUT ], - [ RELEARN_MOVE, Moves.SWAGGER ], - [ RELEARN_MOVE, Moves.SYNTHESIS ], - [ RELEARN_MOVE, Moves.BEAT_UP ], - [ RELEARN_MOVE, Moves.FAKE_OUT ], - [ RELEARN_MOVE, Moves.TORMENT ], - [ RELEARN_MOVE, Moves.ASTONISH ], - [ RELEARN_MOVE, Moves.EXTRASENSORY ], - [ RELEARN_MOVE, Moves.SUCKER_PUNCH ], - [ 1, Moves.AIR_CUTTER ], - [ 1, Moves.HURRICANE ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.SUNNY_DAY ], + [ EVOLVE_MOVE, MoveId.LEAF_BLADE ], + [ RELEARN_MOVE, MoveId.WHIRLWIND ], + [ RELEARN_MOVE, MoveId.TACKLE ], + [ RELEARN_MOVE, MoveId.BIDE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.ABSORB ], + [ RELEARN_MOVE, MoveId.MEGA_DRAIN ], + [ RELEARN_MOVE, MoveId.GROWTH ], + [ RELEARN_MOVE, MoveId.RAZOR_LEAF ], + [ RELEARN_MOVE, MoveId.HARDEN ], + [ RELEARN_MOVE, MoveId.HEADBUTT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.EXPLOSION ], + [ RELEARN_MOVE, MoveId.ROLLOUT ], + [ RELEARN_MOVE, MoveId.SWAGGER ], + [ RELEARN_MOVE, MoveId.SYNTHESIS ], + [ RELEARN_MOVE, MoveId.BEAT_UP ], + [ RELEARN_MOVE, MoveId.FAKE_OUT ], + [ RELEARN_MOVE, MoveId.TORMENT ], + [ RELEARN_MOVE, MoveId.ASTONISH ], + [ RELEARN_MOVE, MoveId.EXTRASENSORY ], + [ RELEARN_MOVE, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.AIR_CUTTER ], + [ 1, MoveId.HURRICANE ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.SUNNY_DAY ], ], [Species.TAILLOW]: [ - [ 1, Moves.PECK ], - [ 1, Moves.GROWL ], - [ 5, Moves.FOCUS_ENERGY ], - [ 9, Moves.QUICK_ATTACK ], - [ 13, Moves.WING_ATTACK ], - [ 17, Moves.DOUBLE_TEAM ], - [ 21, Moves.AERIAL_ACE ], - [ 25, Moves.QUICK_GUARD ], - [ 29, Moves.AGILITY ], - [ 33, Moves.AIR_SLASH ], - [ 37, Moves.ENDEAVOR ], - [ 41, Moves.BRAVE_BIRD ], - [ 45, Moves.REVERSAL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.FOCUS_ENERGY ], + [ 9, MoveId.QUICK_ATTACK ], + [ 13, MoveId.WING_ATTACK ], + [ 17, MoveId.DOUBLE_TEAM ], + [ 21, MoveId.AERIAL_ACE ], + [ 25, MoveId.QUICK_GUARD ], + [ 29, MoveId.AGILITY ], + [ 33, MoveId.AIR_SLASH ], + [ 37, MoveId.ENDEAVOR ], + [ 41, MoveId.BRAVE_BIRD ], + [ 45, MoveId.REVERSAL ], ], [Species.SWELLOW]: [ - [ 1, Moves.BRAVE_BIRD ], - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.PLUCK ], - [ 1, Moves.PECK ], - [ 1, Moves.GROWL ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.QUICK_ATTACK ], - [ 13, Moves.WING_ATTACK ], - [ 17, Moves.DOUBLE_TEAM ], - [ 21, Moves.AERIAL_ACE ], - [ 27, Moves.QUICK_GUARD ], - [ 33, Moves.AGILITY ], - [ 45, Moves.ENDEAVOR ], - [ 51, Moves.BRAVE_BIRD ], - [ 57, Moves.REVERSAL ], + [ 1, MoveId.BRAVE_BIRD ], + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.PLUCK ], + [ 1, MoveId.PECK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.QUICK_ATTACK ], + [ 13, MoveId.WING_ATTACK ], + [ 17, MoveId.DOUBLE_TEAM ], + [ 21, MoveId.AERIAL_ACE ], + [ 27, MoveId.QUICK_GUARD ], + [ 33, MoveId.AGILITY ], + [ 45, MoveId.ENDEAVOR ], + [ 51, MoveId.BRAVE_BIRD ], + [ 57, MoveId.REVERSAL ], ], [Species.WINGULL]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 5, Moves.QUICK_ATTACK ], - [ 10, Moves.SUPERSONIC ], - [ 15, Moves.WING_ATTACK ], - [ 20, Moves.WATER_PULSE ], - [ 26, Moves.AGILITY ], - [ 30, Moves.AIR_SLASH ], - [ 35, Moves.MIST ], - [ 40, Moves.ROOST ], - [ 45, Moves.HURRICANE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 5, MoveId.QUICK_ATTACK ], + [ 10, MoveId.SUPERSONIC ], + [ 15, MoveId.WING_ATTACK ], + [ 20, MoveId.WATER_PULSE ], + [ 26, MoveId.AGILITY ], + [ 30, MoveId.AIR_SLASH ], + [ 35, MoveId.MIST ], + [ 40, MoveId.ROOST ], + [ 45, MoveId.HURRICANE ], ], [Species.PELIPPER]: [ - [ 1, Moves.PROTECT ], - [ 1, Moves.SOAK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.AGILITY ], - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.TAILWIND ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_SPORT ], - [ 15, Moves.WING_ATTACK ], - [ 20, Moves.WATER_PULSE ], - [ 28, Moves.STOCKPILE ], - [ 28, Moves.SPIT_UP ], - [ 28, Moves.SWALLOW ], - [ 34, Moves.FLING ], - [ 41, Moves.MIST ], - [ 48, Moves.ROOST ], - [ 55, Moves.HURRICANE ], - [ 62, Moves.HYDRO_PUMP ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SOAK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.TAILWIND ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_SPORT ], + [ 15, MoveId.WING_ATTACK ], + [ 20, MoveId.WATER_PULSE ], + [ 28, MoveId.STOCKPILE ], + [ 28, MoveId.SPIT_UP ], + [ 28, MoveId.SWALLOW ], + [ 34, MoveId.FLING ], + [ 41, MoveId.MIST ], + [ 48, MoveId.ROOST ], + [ 55, MoveId.HURRICANE ], + [ 62, MoveId.HYDRO_PUMP ], ], [Species.RALTS]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.DISARMING_VOICE ], - [ 3, Moves.DOUBLE_TEAM ], - [ 6, Moves.CONFUSION ], - [ 9, Moves.HYPNOSIS ], - [ 12, Moves.DRAINING_KISS ], - [ 15, Moves.TELEPORT ], - [ 18, Moves.PSYBEAM ], - [ 21, Moves.LIFE_DEW ], - [ 24, Moves.CHARM ], - [ 27, Moves.CALM_MIND ], - [ 30, Moves.PSYCHIC ], - [ 33, Moves.HEAL_PULSE ], - [ 36, Moves.DREAM_EATER ], - [ 39, Moves.FUTURE_SIGHT ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.DISARMING_VOICE ], + [ 3, MoveId.DOUBLE_TEAM ], + [ 6, MoveId.CONFUSION ], + [ 9, MoveId.HYPNOSIS ], + [ 12, MoveId.DRAINING_KISS ], + [ 15, MoveId.TELEPORT ], + [ 18, MoveId.PSYBEAM ], + [ 21, MoveId.LIFE_DEW ], + [ 24, MoveId.CHARM ], + [ 27, MoveId.CALM_MIND ], + [ 30, MoveId.PSYCHIC ], + [ 33, MoveId.HEAL_PULSE ], + [ 36, MoveId.DREAM_EATER ], + [ 39, MoveId.FUTURE_SIGHT ], ], [Species.KIRLIA]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.CONFUSION ], - [ 9, Moves.HYPNOSIS ], - [ 12, Moves.DRAINING_KISS ], - [ 15, Moves.TELEPORT ], - [ 18, Moves.PSYBEAM ], - [ 23, Moves.LIFE_DEW ], - [ 28, Moves.CHARM ], - [ 33, Moves.CALM_MIND ], - [ 38, Moves.PSYCHIC ], - [ 43, Moves.HEAL_PULSE ], - [ 48, Moves.DREAM_EATER ], - [ 53, Moves.FUTURE_SIGHT ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.CONFUSION ], + [ 9, MoveId.HYPNOSIS ], + [ 12, MoveId.DRAINING_KISS ], + [ 15, MoveId.TELEPORT ], + [ 18, MoveId.PSYBEAM ], + [ 23, MoveId.LIFE_DEW ], + [ 28, MoveId.CHARM ], + [ 33, MoveId.CALM_MIND ], + [ 38, MoveId.PSYCHIC ], + [ 43, MoveId.HEAL_PULSE ], + [ 48, MoveId.DREAM_EATER ], + [ 53, MoveId.FUTURE_SIGHT ], ], [Species.GARDEVOIR]: [ - [ EVOLVE_MOVE, Moves.DAZZLING_GLEAM ], - [ 1, Moves.MISTY_TERRAIN ], - [ 1, Moves.HEALING_WISH ], - [ 1, Moves.CHARM ], - [ 1, Moves.MYSTICAL_FIRE ], - [ 1, Moves.HEAL_PULSE ], - [ 1, Moves.GROWL ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.CONFUSION ], - [ 9, Moves.HYPNOSIS ], - [ 12, Moves.DRAINING_KISS ], - [ 15, Moves.TELEPORT ], - [ 18, Moves.PSYBEAM ], - [ 23, Moves.LIFE_DEW ], - [ 28, Moves.WISH ], - [ 35, Moves.CALM_MIND ], - [ 42, Moves.PSYCHIC ], - [ 49, Moves.MOONBLAST ], - [ 56, Moves.DREAM_EATER ], - [ 63, Moves.FUTURE_SIGHT ], + [ EVOLVE_MOVE, MoveId.DAZZLING_GLEAM ], + [ 1, MoveId.MISTY_TERRAIN ], + [ 1, MoveId.HEALING_WISH ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.MYSTICAL_FIRE ], + [ 1, MoveId.HEAL_PULSE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.CONFUSION ], + [ 9, MoveId.HYPNOSIS ], + [ 12, MoveId.DRAINING_KISS ], + [ 15, MoveId.TELEPORT ], + [ 18, MoveId.PSYBEAM ], + [ 23, MoveId.LIFE_DEW ], + [ 28, MoveId.WISH ], + [ 35, MoveId.CALM_MIND ], + [ 42, MoveId.PSYCHIC ], + [ 49, MoveId.MOONBLAST ], + [ 56, MoveId.DREAM_EATER ], + [ 63, MoveId.FUTURE_SIGHT ], ], [Species.SURSKIT]: [ - [ 1, Moves.WATER_GUN ], - [ 6, Moves.QUICK_ATTACK ], - [ 9, Moves.SWEET_SCENT ], - [ 14, Moves.SOAK ], - [ 17, Moves.BUBBLE_BEAM ], - [ 22, Moves.AGILITY ], - [ 25, Moves.MIST ], - [ 25, Moves.HAZE ], - [ 35, Moves.BATON_PASS ], - [ 38, Moves.STICKY_WEB ], + [ 1, MoveId.WATER_GUN ], + [ 6, MoveId.QUICK_ATTACK ], + [ 9, MoveId.SWEET_SCENT ], + [ 14, MoveId.SOAK ], + [ 17, MoveId.BUBBLE_BEAM ], + [ 22, MoveId.AGILITY ], + [ 25, MoveId.MIST ], + [ 25, MoveId.HAZE ], + [ 35, MoveId.BATON_PASS ], + [ 38, MoveId.STICKY_WEB ], ], [Species.MASQUERAIN]: [ - [ RELEARN_MOVE, Moves.BATON_PASS ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STICKY_WEB ], // Previous Stage Move - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.SOAK ], - [ 1, Moves.BUBBLE_BEAM ], // Previous Stage Move - [ 1, Moves.AGILITY ], // Previous Stage Move - [ 1, Moves.MIST ], // Previous Stage Move - [ 1, Moves.HAZE ], // Previous Stage Move - [ 1, Moves.OMINOUS_WIND ], - [ 17, Moves.GUST ], - [ 22, Moves.SCARY_FACE ], - [ 22, Moves.AIR_CUTTER ], - [ 26, Moves.STUN_SPORE ], - [ 32, Moves.AIR_SLASH ], - [ 38, Moves.GIGA_DRAIN ], - [ 44, Moves.BUG_BUZZ ], - [ 52, Moves.QUIVER_DANCE ], + [ RELEARN_MOVE, MoveId.BATON_PASS ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STICKY_WEB ], // Previous Stage Move + [ 1, MoveId.WHIRLWIND ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.SOAK ], + [ 1, MoveId.BUBBLE_BEAM ], // Previous Stage Move + [ 1, MoveId.AGILITY ], // Previous Stage Move + [ 1, MoveId.MIST ], // Previous Stage Move + [ 1, MoveId.HAZE ], // Previous Stage Move + [ 1, MoveId.OMINOUS_WIND ], + [ 17, MoveId.GUST ], + [ 22, MoveId.SCARY_FACE ], + [ 22, MoveId.AIR_CUTTER ], + [ 26, MoveId.STUN_SPORE ], + [ 32, MoveId.AIR_SLASH ], + [ 38, MoveId.GIGA_DRAIN ], + [ 44, MoveId.BUG_BUZZ ], + [ 52, MoveId.QUIVER_DANCE ], ], [Species.SHROOMISH]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.TACKLE ], - [ 5, Moves.STUN_SPORE ], - [ 8, Moves.LEECH_SEED ], - [ 12, Moves.MEGA_DRAIN ], - [ 15, Moves.HEADBUTT ], - [ 19, Moves.POISON_POWDER ], - [ 26, Moves.GIGA_DRAIN ], - [ 29, Moves.GROWTH ], - [ 33, Moves.TOXIC ], - [ 36, Moves.SEED_BOMB ], - [ 40, Moves.SPORE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.STUN_SPORE ], + [ 8, MoveId.LEECH_SEED ], + [ 12, MoveId.MEGA_DRAIN ], + [ 15, MoveId.HEADBUTT ], + [ 19, MoveId.POISON_POWDER ], + [ 26, MoveId.GIGA_DRAIN ], + [ 29, MoveId.GROWTH ], + [ 33, MoveId.TOXIC ], + [ 36, MoveId.SEED_BOMB ], + [ 40, MoveId.SPORE ], ], [Species.BRELOOM]: [ - [ EVOLVE_MOVE, Moves.MACH_PUNCH ], - [ RELEARN_MOVE, Moves.SPORE ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.GIGA_DRAIN ], // Previous Stage Move - [ 1, Moves.GROWTH ], - [ 1, Moves.TOXIC ], - [ 1, Moves.ABSORB ], - [ 1, Moves.TACKLE ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.LEECH_SEED ], - [ 12, Moves.MEGA_DRAIN ], - [ 15, Moves.HEADBUTT ], - [ 19, Moves.FEINT ], - [ 22, Moves.COUNTER ], - [ 28, Moves.FORCE_PALM ], - [ 33, Moves.WORRY_SEED ], - [ 39, Moves.BRICK_BREAK ], - [ 44, Moves.SEED_BOMB ], - [ 50, Moves.DYNAMIC_PUNCH ], - [ 55, Moves.FOCUS_PUNCH ], + [ EVOLVE_MOVE, MoveId.MACH_PUNCH ], + [ RELEARN_MOVE, MoveId.SPORE ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.GIGA_DRAIN ], // Previous Stage Move + [ 1, MoveId.GROWTH ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.LEECH_SEED ], + [ 12, MoveId.MEGA_DRAIN ], + [ 15, MoveId.HEADBUTT ], + [ 19, MoveId.FEINT ], + [ 22, MoveId.COUNTER ], + [ 28, MoveId.FORCE_PALM ], + [ 33, MoveId.WORRY_SEED ], + [ 39, MoveId.BRICK_BREAK ], + [ 44, MoveId.SEED_BOMB ], + [ 50, MoveId.DYNAMIC_PUNCH ], + [ 55, MoveId.FOCUS_PUNCH ], ], [Species.SLAKOTH]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.YAWN ], - [ 6, Moves.ENCORE ], - [ 9, Moves.SLACK_OFF ], - [ 14, Moves.HEADBUTT ], - [ 17, Moves.AMNESIA ], - [ 22, Moves.COVET ], - [ 25, Moves.THROAT_CHOP ], - [ 30, Moves.COUNTER ], - [ 33, Moves.FLAIL ], - [ 38, Moves.PLAY_ROUGH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.YAWN ], + [ 6, MoveId.ENCORE ], + [ 9, MoveId.SLACK_OFF ], + [ 14, MoveId.HEADBUTT ], + [ 17, MoveId.AMNESIA ], + [ 22, MoveId.COVET ], + [ 25, MoveId.THROAT_CHOP ], + [ 30, MoveId.COUNTER ], + [ 33, MoveId.FLAIL ], + [ 38, MoveId.PLAY_ROUGH ], ], [Species.VIGOROTH]: [ - [ RELEARN_MOVE, Moves.PLAY_ROUGH ], // Previous Stage Move - [ 1, Moves.SCRATCH ], - [ 1, Moves.YAWN ], // Previous Stage Move - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.SLACK_OFF ], // Previous Stage Move - [ 1, Moves.ENCORE ], - [ 1, Moves.HEADBUTT ], // Previous Stage Move - [ 1, Moves.AMNESIA ], // Previous Stage Move - [ 1, Moves.COVET ], // Previous Stage Move - [ 1, Moves.FLAIL ], // Previous Stage Move - [ 1, Moves.UPROAR ], - [ 14, Moves.FURY_SWIPES ], - [ 17, Moves.ENDURE ], - [ 23, Moves.SLASH ], - [ 27, Moves.THROAT_CHOP ], - [ 33, Moves.COUNTER ], - [ 37, Moves.FOCUS_PUNCH ], - [ 43, Moves.REVERSAL ], + [ RELEARN_MOVE, MoveId.PLAY_ROUGH ], // Previous Stage Move + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.YAWN ], // Previous Stage Move + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.SLACK_OFF ], // Previous Stage Move + [ 1, MoveId.ENCORE ], + [ 1, MoveId.HEADBUTT ], // Previous Stage Move + [ 1, MoveId.AMNESIA ], // Previous Stage Move + [ 1, MoveId.COVET ], // Previous Stage Move + [ 1, MoveId.FLAIL ], // Previous Stage Move + [ 1, MoveId.UPROAR ], + [ 14, MoveId.FURY_SWIPES ], + [ 17, MoveId.ENDURE ], + [ 23, MoveId.SLASH ], + [ 27, MoveId.THROAT_CHOP ], + [ 33, MoveId.COUNTER ], + [ 37, MoveId.FOCUS_PUNCH ], + [ 43, MoveId.REVERSAL ], ], [Species.SLAKING]: [ - [ EVOLVE_MOVE, Moves.SWAGGER ], - [ RELEARN_MOVE, Moves.PLAY_ROUGH ], // Previous Stage Move - [ RELEARN_MOVE, Moves.FOCUS_PUNCH ], // Previous Stage Move - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.YAWN ], - [ 1, Moves.FOCUS_ENERGY ], // Previous Stage Move - [ 1, Moves.ENCORE ], - [ 1, Moves.SLACK_OFF ], - [ 1, Moves.UPROAR ], // Previous Stage Move - [ 1, Moves.FURY_SWIPES ], // Previous Stage Move - [ 1, Moves.ENDURE ], // Previous Stage Move - [ 1, Moves.HEADBUTT ], // Previous Stage Move - [ 1, Moves.SLASH ], // Previous Stage Move - [ 1, Moves.REVERSAL ], // Previous Stage Move - [ 17, Moves.AMNESIA ], - [ 23, Moves.COVET ], - [ 27, Moves.THROAT_CHOP ], - [ 33, Moves.COUNTER ], - [ 39, Moves.FLAIL ], - [ 45, Moves.FLING ], - [ 52, Moves.MEGA_KICK ], - [ 63, Moves.HAMMER_ARM ], + [ EVOLVE_MOVE, MoveId.SWAGGER ], + [ RELEARN_MOVE, MoveId.PLAY_ROUGH ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.FOCUS_PUNCH ], // Previous Stage Move + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.FOCUS_ENERGY ], // Previous Stage Move + [ 1, MoveId.ENCORE ], + [ 1, MoveId.SLACK_OFF ], + [ 1, MoveId.UPROAR ], // Previous Stage Move + [ 1, MoveId.FURY_SWIPES ], // Previous Stage Move + [ 1, MoveId.ENDURE ], // Previous Stage Move + [ 1, MoveId.HEADBUTT ], // Previous Stage Move + [ 1, MoveId.SLASH ], // Previous Stage Move + [ 1, MoveId.REVERSAL ], // Previous Stage Move + [ 17, MoveId.AMNESIA ], + [ 23, MoveId.COVET ], + [ 27, MoveId.THROAT_CHOP ], + [ 33, MoveId.COUNTER ], + [ 39, MoveId.FLAIL ], + [ 45, MoveId.FLING ], + [ 52, MoveId.MEGA_KICK ], + [ 63, MoveId.HAMMER_ARM ], ], [Species.NINCADA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 5, Moves.HARDEN ], - [ 10, Moves.FALSE_SWIPE ], - [ 15, Moves.MUD_SLAP ], - [ 21, Moves.ABSORB ], - [ 25, Moves.METAL_CLAW ], - [ 30, Moves.FURY_SWIPES ], - [ 35, Moves.MIND_READER ], - [ 40, Moves.DIG ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 5, MoveId.HARDEN ], + [ 10, MoveId.FALSE_SWIPE ], + [ 15, MoveId.MUD_SLAP ], + [ 21, MoveId.ABSORB ], + [ 25, MoveId.METAL_CLAW ], + [ 30, MoveId.FURY_SWIPES ], + [ 35, MoveId.MIND_READER ], + [ 40, MoveId.DIG ], ], [Species.NINJASK]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_TEAM ], - [ EVOLVE_MOVE, Moves.SCREECH ], - [ EVOLVE_MOVE, Moves.FURY_CUTTER ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.AERIAL_ACE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.DIG ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.HARDEN ], - [ 1, Moves.FALSE_SWIPE ], - [ 15, Moves.AGILITY ], - [ 23, Moves.ABSORB ], - [ 29, Moves.BUG_BITE ], - [ 36, Moves.FURY_SWIPES ], - [ 43, Moves.MIND_READER ], - [ 50, Moves.SLASH ], - [ 57, Moves.SWORDS_DANCE ], - [ 64, Moves.X_SCISSOR ], + [ EVOLVE_MOVE, MoveId.DOUBLE_TEAM ], + [ EVOLVE_MOVE, MoveId.SCREECH ], + [ EVOLVE_MOVE, MoveId.FURY_CUTTER ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.AERIAL_ACE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.DIG ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.FALSE_SWIPE ], + [ 15, MoveId.AGILITY ], + [ 23, MoveId.ABSORB ], + [ 29, MoveId.BUG_BITE ], + [ 36, MoveId.FURY_SWIPES ], + [ 43, MoveId.MIND_READER ], + [ 50, MoveId.SLASH ], + [ 57, MoveId.SWORDS_DANCE ], + [ 64, MoveId.X_SCISSOR ], ], [Species.SHEDINJA]: [ - [ 1, Moves.SHADOW_CLAW ], - [ 1, Moves.GRUDGE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.DIG ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.HARDEN ], - [ 1, Moves.FALSE_SWIPE ], - [ 15, Moves.CONFUSE_RAY ], - [ 23, Moves.ABSORB ], - [ 29, Moves.SHADOW_SNEAK ], - [ 36, Moves.FURY_SWIPES ], - [ 43, Moves.MIND_READER ], - [ 50, Moves.SHADOW_BALL ], - [ 57, Moves.SPITE ], - [ 64, Moves.PHANTOM_FORCE ], + [ 1, MoveId.SHADOW_CLAW ], + [ 1, MoveId.GRUDGE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.DIG ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.FALSE_SWIPE ], + [ 15, MoveId.CONFUSE_RAY ], + [ 23, MoveId.ABSORB ], + [ 29, MoveId.SHADOW_SNEAK ], + [ 36, MoveId.FURY_SWIPES ], + [ 43, MoveId.MIND_READER ], + [ 50, MoveId.SHADOW_BALL ], + [ 57, MoveId.SPITE ], + [ 64, MoveId.PHANTOM_FORCE ], ], [Species.WHISMUR]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.POUND ], - [ 5, Moves.ECHOED_VOICE ], - [ 10, Moves.HOWL ], - [ 15, Moves.REST ], - [ 15, Moves.SLEEP_TALK ], - [ 21, Moves.STOMP ], - [ 25, Moves.ROAR ], - [ 30, Moves.SUPERSONIC ], - [ 35, Moves.UPROAR ], - [ 40, Moves.SCREECH ], - [ 45, Moves.HYPER_VOICE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POUND ], + [ 5, MoveId.ECHOED_VOICE ], + [ 10, MoveId.HOWL ], + [ 15, MoveId.REST ], + [ 15, MoveId.SLEEP_TALK ], + [ 21, MoveId.STOMP ], + [ 25, MoveId.ROAR ], + [ 30, MoveId.SUPERSONIC ], + [ 35, MoveId.UPROAR ], + [ 40, MoveId.SCREECH ], + [ 45, MoveId.HYPER_VOICE ], ], [Species.LOUDRED]: [ - [ EVOLVE_MOVE, Moves.BITE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POUND ], - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.HOWL ], - [ 15, Moves.REST ], - [ 15, Moves.SLEEP_TALK ], - [ 23, Moves.STOMP ], - [ 29, Moves.ROAR ], - [ 36, Moves.SUPERSONIC ], - [ 43, Moves.UPROAR ], - [ 50, Moves.SCREECH ], - [ 57, Moves.HYPER_VOICE ], + [ EVOLVE_MOVE, MoveId.BITE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.ECHOED_VOICE ], + [ 1, MoveId.HOWL ], + [ 15, MoveId.REST ], + [ 15, MoveId.SLEEP_TALK ], + [ 23, MoveId.STOMP ], + [ 29, MoveId.ROAR ], + [ 36, MoveId.SUPERSONIC ], + [ 43, MoveId.UPROAR ], + [ 50, MoveId.SCREECH ], + [ 57, MoveId.HYPER_VOICE ], ], [Species.EXPLOUD]: [ - [ EVOLVE_MOVE, Moves.CRUNCH ], - [ 1, Moves.BITE ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POUND ], - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.HOWL ], - [ 15, Moves.REST ], - [ 15, Moves.SLEEP_TALK ], - [ 23, Moves.STOMP ], - [ 29, Moves.ROAR ], - [ 36, Moves.SUPERSONIC ], - [ 45, Moves.UPROAR ], - [ 54, Moves.SCREECH ], - [ 63, Moves.HYPER_VOICE ], - [ 72, Moves.BOOMBURST ], - [ 81, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.BITE ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.ECHOED_VOICE ], + [ 1, MoveId.HOWL ], + [ 15, MoveId.REST ], + [ 15, MoveId.SLEEP_TALK ], + [ 23, MoveId.STOMP ], + [ 29, MoveId.ROAR ], + [ 36, MoveId.SUPERSONIC ], + [ 45, MoveId.UPROAR ], + [ 54, MoveId.SCREECH ], + [ 63, MoveId.HYPER_VOICE ], + [ 72, MoveId.BOOMBURST ], + [ 81, MoveId.HYPER_BEAM ], ], [Species.MAKUHITA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 4, Moves.SAND_ATTACK ], - [ 7, Moves.ARM_THRUST ], - [ 10, Moves.FAKE_OUT ], - [ 13, Moves.FORCE_PALM ], - [ 16, Moves.WHIRLWIND ], - [ 19, Moves.KNOCK_OFF ], - [ 22, Moves.BULK_UP ], - [ 25, Moves.BELLY_DRUM ], - [ 28, Moves.DETECT ], - [ 31, Moves.SEISMIC_TOSS ], - [ 34, Moves.FOCUS_PUNCH ], - [ 37, Moves.ENDURE ], - [ 40, Moves.CLOSE_COMBAT ], - [ 43, Moves.REVERSAL ], - [ 46, Moves.HEAVY_SLAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 4, MoveId.SAND_ATTACK ], + [ 7, MoveId.ARM_THRUST ], + [ 10, MoveId.FAKE_OUT ], + [ 13, MoveId.FORCE_PALM ], + [ 16, MoveId.WHIRLWIND ], + [ 19, MoveId.KNOCK_OFF ], + [ 22, MoveId.BULK_UP ], + [ 25, MoveId.BELLY_DRUM ], + [ 28, MoveId.DETECT ], + [ 31, MoveId.SEISMIC_TOSS ], + [ 34, MoveId.FOCUS_PUNCH ], + [ 37, MoveId.ENDURE ], + [ 40, MoveId.CLOSE_COMBAT ], + [ 43, MoveId.REVERSAL ], + [ 46, MoveId.HEAVY_SLAM ], ], [Species.HARIYAMA]: [ - [ 1, Moves.BRINE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.SAND_ATTACK ], // Previous Stage Move - [ 1, Moves.ARM_THRUST ], - [ 10, Moves.FAKE_OUT ], - [ 13, Moves.FORCE_PALM ], - [ 16, Moves.WHIRLWIND ], - [ 19, Moves.KNOCK_OFF ], - [ 22, Moves.BULK_UP ], - [ 26, Moves.BELLY_DRUM ], - [ 30, Moves.DETECT ], - [ 34, Moves.SEISMIC_TOSS ], - [ 38, Moves.FOCUS_PUNCH ], - [ 42, Moves.ENDURE ], - [ 46, Moves.CLOSE_COMBAT ], - [ 50, Moves.REVERSAL ], - [ 54, Moves.HEAVY_SLAM ], - [ 60, Moves.HEADLONG_RUSH ], + [ 1, MoveId.BRINE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.SAND_ATTACK ], // Previous Stage Move + [ 1, MoveId.ARM_THRUST ], + [ 10, MoveId.FAKE_OUT ], + [ 13, MoveId.FORCE_PALM ], + [ 16, MoveId.WHIRLWIND ], + [ 19, MoveId.KNOCK_OFF ], + [ 22, MoveId.BULK_UP ], + [ 26, MoveId.BELLY_DRUM ], + [ 30, MoveId.DETECT ], + [ 34, MoveId.SEISMIC_TOSS ], + [ 38, MoveId.FOCUS_PUNCH ], + [ 42, MoveId.ENDURE ], + [ 46, MoveId.CLOSE_COMBAT ], + [ 50, MoveId.REVERSAL ], + [ 54, MoveId.HEAVY_SLAM ], + [ 60, MoveId.HEADLONG_RUSH ], ], [Species.AZURILL]: [ - [ 1, Moves.SPLASH ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.TAIL_WHIP ], - [ 3, Moves.HELPING_HAND ], - [ 6, Moves.BUBBLE_BEAM ], - [ 9, Moves.CHARM ], - [ 12, Moves.SLAM ], - [ 15, Moves.BOUNCE ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.TAIL_WHIP ], + [ 3, MoveId.HELPING_HAND ], + [ 6, MoveId.BUBBLE_BEAM ], + [ 9, MoveId.CHARM ], + [ 12, MoveId.SLAM ], + [ 15, MoveId.BOUNCE ], ], [Species.NOSEPASS]: [ - [ 1, Moves.TACKLE ], - [ 4, Moves.HARDEN ], - [ 7, Moves.BLOCK ], - [ 10, Moves.ROCK_THROW ], - [ 13, Moves.THUNDER_WAVE ], - [ 16, Moves.REST ], - [ 19, Moves.SPARK ], - [ 22, Moves.ROCK_SLIDE ], - [ 25, Moves.POWER_GEM ], - [ 28, Moves.ROCK_BLAST ], - [ 31, Moves.DISCHARGE ], - [ 34, Moves.SANDSTORM ], - [ 37, Moves.EARTH_POWER ], - [ 40, Moves.STONE_EDGE ], - [ 43, Moves.LOCK_ON ], - [ 43, Moves.ZAP_CANNON ], + [ 1, MoveId.TACKLE ], + [ 4, MoveId.HARDEN ], + [ 7, MoveId.BLOCK ], + [ 10, MoveId.ROCK_THROW ], + [ 13, MoveId.THUNDER_WAVE ], + [ 16, MoveId.REST ], + [ 19, MoveId.SPARK ], + [ 22, MoveId.ROCK_SLIDE ], + [ 25, MoveId.POWER_GEM ], + [ 28, MoveId.ROCK_BLAST ], + [ 31, MoveId.DISCHARGE ], + [ 34, MoveId.SANDSTORM ], + [ 37, MoveId.EARTH_POWER ], + [ 40, MoveId.STONE_EDGE ], + [ 43, MoveId.LOCK_ON ], + [ 43, MoveId.ZAP_CANNON ], ], [Species.SKITTY]: [ - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.GROWL ], - [ 1, Moves.TAIL_WHIP ], - [ 4, Moves.TACKLE ], - [ 7, Moves.SING ], - [ 10, Moves.ATTRACT ], - [ 13, Moves.DISARMING_VOICE ], - [ 16, Moves.FURY_SWIPES ], - [ 19, Moves.COPYCAT ], - [ 22, Moves.PAYBACK ], - [ 25, Moves.CHARM ], - [ 31, Moves.FACADE ], - [ 34, Moves.COVET ], - [ 37, Moves.HEAL_BELL ], - [ 40, Moves.DOUBLE_EDGE ], - [ 43, Moves.BABY_DOLL_EYES ], - [ 46, Moves.PLAY_ROUGH ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TAIL_WHIP ], + [ 4, MoveId.TACKLE ], + [ 7, MoveId.SING ], + [ 10, MoveId.ATTRACT ], + [ 13, MoveId.DISARMING_VOICE ], + [ 16, MoveId.FURY_SWIPES ], + [ 19, MoveId.COPYCAT ], + [ 22, MoveId.PAYBACK ], + [ 25, MoveId.CHARM ], + [ 31, MoveId.FACADE ], + [ 34, MoveId.COVET ], + [ 37, MoveId.HEAL_BELL ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 43, MoveId.BABY_DOLL_EYES ], + [ 46, MoveId.PLAY_ROUGH ], ], [Species.DELCATTY]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SING ], - [ 1, Moves.ATTRACT ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.CHARM ], - [ 1, Moves.FACADE ], - [ 1, Moves.COVET ], - [ 1, Moves.HEAL_BELL ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 1, Moves.PLAY_ROUGH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SING ], + [ 1, MoveId.ATTRACT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.FACADE ], + [ 1, MoveId.COVET ], + [ 1, MoveId.HEAL_BELL ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 1, MoveId.PLAY_ROUGH ], ], [Species.SABLEYE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.SCRATCH ], - [ 3, Moves.ASTONISH ], - [ 9, Moves.SHADOW_SNEAK ], - [ 12, Moves.FAKE_OUT ], - [ 15, Moves.DISABLE ], - [ 18, Moves.DETECT ], - [ 21, Moves.NIGHT_SHADE ], - [ 24, Moves.FURY_SWIPES ], - [ 27, Moves.KNOCK_OFF ], - [ 30, Moves.QUASH ], - [ 33, Moves.SHADOW_CLAW ], - [ 36, Moves.MEAN_LOOK ], - [ 39, Moves.POWER_GEM ], - [ 42, Moves.ZEN_HEADBUTT ], - [ 45, Moves.SHADOW_BALL ], - [ 48, Moves.FOUL_PLAY ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SCRATCH ], + [ 3, MoveId.ASTONISH ], + [ 9, MoveId.SHADOW_SNEAK ], + [ 12, MoveId.FAKE_OUT ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.DETECT ], + [ 21, MoveId.NIGHT_SHADE ], + [ 24, MoveId.FURY_SWIPES ], + [ 27, MoveId.KNOCK_OFF ], + [ 30, MoveId.QUASH ], + [ 33, MoveId.SHADOW_CLAW ], + [ 36, MoveId.MEAN_LOOK ], + [ 39, MoveId.POWER_GEM ], + [ 42, MoveId.ZEN_HEADBUTT ], + [ 45, MoveId.SHADOW_BALL ], + [ 48, MoveId.FOUL_PLAY ], ], [Species.MAWILE]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.GROWL ], - [ 4, Moves.FAIRY_WIND ], - [ 8, Moves.BATON_PASS ], - [ 12, Moves.BITE ], - [ 16, Moves.STOCKPILE ], - [ 16, Moves.SPIT_UP ], - [ 16, Moves.SWALLOW ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.IRON_DEFENSE ], - [ 28, Moves.CRUNCH ], - [ 32, Moves.SWEET_SCENT ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.TAUNT ], - [ 44, Moves.FAKE_TEARS ], - [ 48, Moves.PLAY_ROUGH ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.FAIRY_WIND ], + [ 8, MoveId.BATON_PASS ], + [ 12, MoveId.BITE ], + [ 16, MoveId.STOCKPILE ], + [ 16, MoveId.SPIT_UP ], + [ 16, MoveId.SWALLOW ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.IRON_DEFENSE ], + [ 28, MoveId.CRUNCH ], + [ 32, MoveId.SWEET_SCENT ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.TAUNT ], + [ 44, MoveId.FAKE_TEARS ], + [ 48, MoveId.PLAY_ROUGH ], ], [Species.ARON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 4, Moves.METAL_CLAW ], - [ 8, Moves.ROCK_TOMB ], - [ 12, Moves.ROAR ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.PROTECT ], - [ 24, Moves.ROCK_SLIDE ], - [ 28, Moves.IRON_HEAD ], - [ 33, Moves.METAL_SOUND ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.AUTOTOMIZE ], - [ 44, Moves.IRON_TAIL ], - [ 48, Moves.IRON_DEFENSE ], - [ 52, Moves.HEAVY_SLAM ], - [ 56, Moves.DOUBLE_EDGE ], - [ 60, Moves.METAL_BURST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 4, MoveId.METAL_CLAW ], + [ 8, MoveId.ROCK_TOMB ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.ROCK_SLIDE ], + [ 28, MoveId.IRON_HEAD ], + [ 33, MoveId.METAL_SOUND ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.AUTOTOMIZE ], + [ 44, MoveId.IRON_TAIL ], + [ 48, MoveId.IRON_DEFENSE ], + [ 52, MoveId.HEAVY_SLAM ], + [ 56, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.METAL_BURST ], ], [Species.LAIRON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.ROCK_TOMB ], - [ 12, Moves.ROAR ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.PROTECT ], - [ 24, Moves.ROCK_SLIDE ], - [ 28, Moves.IRON_HEAD ], - [ 35, Moves.METAL_SOUND ], - [ 40, Moves.TAKE_DOWN ], - [ 46, Moves.AUTOTOMIZE ], - [ 52, Moves.IRON_TAIL ], - [ 58, Moves.IRON_DEFENSE ], - [ 64, Moves.HEAVY_SLAM ], - [ 70, Moves.DOUBLE_EDGE ], - [ 76, Moves.METAL_BURST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.ROCK_TOMB ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.ROCK_SLIDE ], + [ 28, MoveId.IRON_HEAD ], + [ 35, MoveId.METAL_SOUND ], + [ 40, MoveId.TAKE_DOWN ], + [ 46, MoveId.AUTOTOMIZE ], + [ 52, MoveId.IRON_TAIL ], + [ 58, MoveId.IRON_DEFENSE ], + [ 64, MoveId.HEAVY_SLAM ], + [ 70, MoveId.DOUBLE_EDGE ], + [ 76, MoveId.METAL_BURST ], ], [Species.AGGRON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.ROCK_TOMB ], - [ 12, Moves.ROAR ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.PROTECT ], - [ 24, Moves.ROCK_SLIDE ], - [ 28, Moves.IRON_HEAD ], - [ 35, Moves.METAL_SOUND ], - [ 40, Moves.TAKE_DOWN ], - [ 48, Moves.AUTOTOMIZE ], - [ 56, Moves.IRON_TAIL ], - [ 64, Moves.IRON_DEFENSE ], - [ 72, Moves.HEAVY_SLAM ], - [ 80, Moves.DOUBLE_EDGE ], - [ 88, Moves.METAL_BURST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.ROCK_TOMB ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.ROCK_SLIDE ], + [ 28, MoveId.IRON_HEAD ], + [ 35, MoveId.METAL_SOUND ], + [ 40, MoveId.TAKE_DOWN ], + [ 48, MoveId.AUTOTOMIZE ], + [ 56, MoveId.IRON_TAIL ], + [ 64, MoveId.IRON_DEFENSE ], + [ 72, MoveId.HEAVY_SLAM ], + [ 80, MoveId.DOUBLE_EDGE ], + [ 88, MoveId.METAL_BURST ], ], [Species.MEDITITE]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.WORK_UP ], - [ 1, Moves.BIDE ], - [ 9, Moves.DETECT ], - [ 12, Moves.ENDURE ], - [ 15, Moves.FEINT ], - [ 17, Moves.FORCE_PALM ], - [ 20, Moves.PSYBEAM ], - [ 23, Moves.CALM_MIND ], - [ 25, Moves.ZEN_HEADBUTT ], - [ 28, Moves.HIGH_JUMP_KICK ], - [ 31, Moves.PSYCH_UP ], - [ 33, Moves.ACUPRESSURE ], - [ 36, Moves.POWER_TRICK ], - [ 39, Moves.REVERSAL ], - [ 41, Moves.RECOVER ], - [ 44, Moves.COUNTER ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.WORK_UP ], + [ 1, MoveId.BIDE ], + [ 9, MoveId.DETECT ], + [ 12, MoveId.ENDURE ], + [ 15, MoveId.FEINT ], + [ 17, MoveId.FORCE_PALM ], + [ 20, MoveId.PSYBEAM ], + [ 23, MoveId.CALM_MIND ], + [ 25, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.HIGH_JUMP_KICK ], + [ 31, MoveId.PSYCH_UP ], + [ 33, MoveId.ACUPRESSURE ], + [ 36, MoveId.POWER_TRICK ], + [ 39, MoveId.REVERSAL ], + [ 41, MoveId.RECOVER ], + [ 44, MoveId.COUNTER ], ], [Species.MEDICHAM]: [ - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.ICE_PUNCH ], - [ 1, Moves.THUNDER_PUNCH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.DETECT ], - [ 1, Moves.WORK_UP ], - [ 1, Moves.BIDE ], - [ 1, Moves.REVERSAL ], // Previous Stage Move - [ 12, Moves.ENDURE ], - [ 15, Moves.FEINT ], - [ 17, Moves.FORCE_PALM ], - [ 20, Moves.PSYBEAM ], - [ 23, Moves.CALM_MIND ], - [ 25, Moves.ZEN_HEADBUTT ], - [ 28, Moves.HIGH_JUMP_KICK ], - [ 31, Moves.PSYCH_UP ], - [ 33, Moves.ACUPRESSURE ], - [ 36, Moves.POWER_TRICK ], - [ 47, Moves.RECOVER ], - [ 53, Moves.COUNTER ], - [ 53, Moves.AXE_KICK ], + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.ICE_PUNCH ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DETECT ], + [ 1, MoveId.WORK_UP ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.REVERSAL ], // Previous Stage Move + [ 12, MoveId.ENDURE ], + [ 15, MoveId.FEINT ], + [ 17, MoveId.FORCE_PALM ], + [ 20, MoveId.PSYBEAM ], + [ 23, MoveId.CALM_MIND ], + [ 25, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.HIGH_JUMP_KICK ], + [ 31, MoveId.PSYCH_UP ], + [ 33, MoveId.ACUPRESSURE ], + [ 36, MoveId.POWER_TRICK ], + [ 47, MoveId.RECOVER ], + [ 53, MoveId.COUNTER ], + [ 53, MoveId.AXE_KICK ], ], [Species.ELECTRIKE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_WAVE ], - [ 4, Moves.LEER ], - [ 8, Moves.HOWL ], - [ 12, Moves.QUICK_ATTACK ], - [ 16, Moves.SHOCK_WAVE ], - [ 20, Moves.BITE ], - [ 24, Moves.THUNDER_FANG ], - [ 28, Moves.ROAR ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.CHARGE ], - [ 40, Moves.WILD_CHARGE ], - [ 44, Moves.THUNDER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_WAVE ], + [ 4, MoveId.LEER ], + [ 8, MoveId.HOWL ], + [ 12, MoveId.QUICK_ATTACK ], + [ 16, MoveId.SHOCK_WAVE ], + [ 20, MoveId.BITE ], + [ 24, MoveId.THUNDER_FANG ], + [ 28, MoveId.ROAR ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.CHARGE ], + [ 40, MoveId.WILD_CHARGE ], + [ 44, MoveId.THUNDER ], ], [Species.MANECTRIC]: [ - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.LEER ], - [ 1, Moves.HOWL ], - [ 12, Moves.QUICK_ATTACK ], - [ 16, Moves.SHOCK_WAVE ], - [ 20, Moves.BITE ], - [ 24, Moves.THUNDER_FANG ], - [ 30, Moves.ROAR ], - [ 36, Moves.DISCHARGE ], - [ 42, Moves.CHARGE ], - [ 48, Moves.WILD_CHARGE ], - [ 54, Moves.THUNDER ], - [ 60, Moves.ELECTRIC_TERRAIN ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.HOWL ], + [ 12, MoveId.QUICK_ATTACK ], + [ 16, MoveId.SHOCK_WAVE ], + [ 20, MoveId.BITE ], + [ 24, MoveId.THUNDER_FANG ], + [ 30, MoveId.ROAR ], + [ 36, MoveId.DISCHARGE ], + [ 42, MoveId.CHARGE ], + [ 48, MoveId.WILD_CHARGE ], + [ 54, MoveId.THUNDER ], + [ 60, MoveId.ELECTRIC_TERRAIN ], ], [Species.PLUSLE]: [ - [ RELEARN_MOVE, Moves.NUZZLE ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.HELPING_HAND ], - [ 7, Moves.SPARK ], - [ 10, Moves.ENCORE ], - [ 13, Moves.SWITCHEROO ], - [ 16, Moves.SWIFT ], - [ 19, Moves.ELECTRO_BALL ], - [ 22, Moves.COPYCAT ], - [ 26, Moves.CHARGE ], - [ 31, Moves.DISCHARGE ], - [ 34, Moves.BATON_PASS ], - [ 37, Moves.AGILITY ], - [ 40, Moves.LAST_RESORT ], - [ 43, Moves.THUNDER ], - [ 46, Moves.NASTY_PLOT ], - [ 49, Moves.ENTRAINMENT ], + [ RELEARN_MOVE, MoveId.NUZZLE ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.HELPING_HAND ], + [ 7, MoveId.SPARK ], + [ 10, MoveId.ENCORE ], + [ 13, MoveId.SWITCHEROO ], + [ 16, MoveId.SWIFT ], + [ 19, MoveId.ELECTRO_BALL ], + [ 22, MoveId.COPYCAT ], + [ 26, MoveId.CHARGE ], + [ 31, MoveId.DISCHARGE ], + [ 34, MoveId.BATON_PASS ], + [ 37, MoveId.AGILITY ], + [ 40, MoveId.LAST_RESORT ], + [ 43, MoveId.THUNDER ], + [ 46, MoveId.NASTY_PLOT ], + [ 49, MoveId.ENTRAINMENT ], ], [Species.MINUN]: [ - [ RELEARN_MOVE, Moves.NUZZLE ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.HELPING_HAND ], - [ 7, Moves.SPARK ], - [ 10, Moves.ENCORE ], - [ 13, Moves.SWITCHEROO ], - [ 16, Moves.SWIFT ], - [ 19, Moves.ELECTRO_BALL ], - [ 22, Moves.COPYCAT ], - [ 26, Moves.CHARGE ], - [ 31, Moves.DISCHARGE ], - [ 34, Moves.BATON_PASS ], - [ 37, Moves.AGILITY ], - [ 40, Moves.LAST_RESORT ], - [ 43, Moves.THUNDER ], - [ 46, Moves.NASTY_PLOT ], - [ 49, Moves.ENTRAINMENT ], + [ RELEARN_MOVE, MoveId.NUZZLE ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.HELPING_HAND ], + [ 7, MoveId.SPARK ], + [ 10, MoveId.ENCORE ], + [ 13, MoveId.SWITCHEROO ], + [ 16, MoveId.SWIFT ], + [ 19, MoveId.ELECTRO_BALL ], + [ 22, MoveId.COPYCAT ], + [ 26, MoveId.CHARGE ], + [ 31, MoveId.DISCHARGE ], + [ 34, MoveId.BATON_PASS ], + [ 37, MoveId.AGILITY ], + [ 40, MoveId.LAST_RESORT ], + [ 43, MoveId.THUNDER ], + [ 46, MoveId.NASTY_PLOT ], + [ 49, MoveId.ENTRAINMENT ], ], [Species.VOLBEAT]: [ - [ 1, Moves.FLASH ], - [ 1, Moves.TACKLE ], - [ 5, Moves.DOUBLE_TEAM ], - [ 8, Moves.CONFUSE_RAY ], - [ 12, Moves.QUICK_ATTACK ], - [ 15, Moves.STRUGGLE_BUG ], - [ 19, Moves.MOONLIGHT ], - [ 22, Moves.TAIL_GLOW ], - [ 26, Moves.PROTECT ], - [ 29, Moves.ZEN_HEADBUTT ], - [ 33, Moves.HELPING_HAND ], - [ 36, Moves.BUG_BUZZ ], - [ 40, Moves.PLAY_ROUGH ], - [ 43, Moves.DOUBLE_EDGE ], - [ 47, Moves.INFESTATION ], + [ 1, MoveId.FLASH ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.DOUBLE_TEAM ], + [ 8, MoveId.CONFUSE_RAY ], + [ 12, MoveId.QUICK_ATTACK ], + [ 15, MoveId.STRUGGLE_BUG ], + [ 19, MoveId.MOONLIGHT ], + [ 22, MoveId.TAIL_GLOW ], + [ 26, MoveId.PROTECT ], + [ 29, MoveId.ZEN_HEADBUTT ], + [ 33, MoveId.HELPING_HAND ], + [ 36, MoveId.BUG_BUZZ ], + [ 40, MoveId.PLAY_ROUGH ], + [ 43, MoveId.DOUBLE_EDGE ], + [ 47, MoveId.INFESTATION ], ], [Species.ILLUMISE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.PLAY_NICE ], - [ 5, Moves.SWEET_SCENT ], - [ 9, Moves.CHARM ], - [ 12, Moves.QUICK_ATTACK ], - [ 15, Moves.STRUGGLE_BUG ], - [ 19, Moves.MOONLIGHT ], - [ 22, Moves.WISH ], - [ 26, Moves.ENCORE ], - [ 29, Moves.FLATTER ], - [ 33, Moves.ZEN_HEADBUTT ], - [ 36, Moves.HELPING_HAND ], - [ 40, Moves.BUG_BUZZ ], - [ 43, Moves.PLAY_ROUGH ], - [ 47, Moves.INFESTATION ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PLAY_NICE ], + [ 5, MoveId.SWEET_SCENT ], + [ 9, MoveId.CHARM ], + [ 12, MoveId.QUICK_ATTACK ], + [ 15, MoveId.STRUGGLE_BUG ], + [ 19, MoveId.MOONLIGHT ], + [ 22, MoveId.WISH ], + [ 26, MoveId.ENCORE ], + [ 29, MoveId.FLATTER ], + [ 33, MoveId.ZEN_HEADBUTT ], + [ 36, MoveId.HELPING_HAND ], + [ 40, MoveId.BUG_BUZZ ], + [ 43, MoveId.PLAY_ROUGH ], + [ 47, MoveId.INFESTATION ], ], [Species.ROSELIA]: [ - [ EVOLVE_MOVE, Moves.POISON_STING ], - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.WORRY_SEED ], - [ 5, Moves.MEGA_DRAIN ], - [ 10, Moves.LEECH_SEED ], - [ 15, Moves.MAGICAL_LEAF ], - [ 20, Moves.TOXIC_SPIKES ], - [ 25, Moves.SWEET_SCENT ], - [ 30, Moves.GIGA_DRAIN ], - [ 35, Moves.SYNTHESIS ], - [ 40, Moves.TOXIC ], - [ 45, Moves.PETAL_BLIZZARD ], - [ 50, Moves.AROMATHERAPY ], - [ 55, Moves.INGRAIN ], - [ 60, Moves.PETAL_DANCE ], + [ EVOLVE_MOVE, MoveId.POISON_STING ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.WORRY_SEED ], + [ 5, MoveId.MEGA_DRAIN ], + [ 10, MoveId.LEECH_SEED ], + [ 15, MoveId.MAGICAL_LEAF ], + [ 20, MoveId.TOXIC_SPIKES ], + [ 25, MoveId.SWEET_SCENT ], + [ 30, MoveId.GIGA_DRAIN ], + [ 35, MoveId.SYNTHESIS ], + [ 40, MoveId.TOXIC ], + [ 45, MoveId.PETAL_BLIZZARD ], + [ 50, MoveId.AROMATHERAPY ], + [ 55, MoveId.INGRAIN ], + [ 60, MoveId.PETAL_DANCE ], ], [Species.GULPIN]: [ - [ 1, Moves.POUND ], - [ 5, Moves.YAWN ], - [ 8, Moves.POISON_GAS ], - [ 10, Moves.SLUDGE ], - [ 12, Moves.AMNESIA ], - [ 17, Moves.ACID_SPRAY ], - [ 20, Moves.ENCORE ], - [ 25, Moves.TOXIC ], - [ 28, Moves.STOCKPILE ], - [ 28, Moves.SPIT_UP ], - [ 28, Moves.SWALLOW ], - [ 33, Moves.SLUDGE_BOMB ], - [ 36, Moves.GASTRO_ACID ], - [ 41, Moves.BELCH ], - [ 44, Moves.PAIN_SPLIT ], - [ 49, Moves.GUNK_SHOT ], + [ 1, MoveId.POUND ], + [ 5, MoveId.YAWN ], + [ 8, MoveId.POISON_GAS ], + [ 10, MoveId.SLUDGE ], + [ 12, MoveId.AMNESIA ], + [ 17, MoveId.ACID_SPRAY ], + [ 20, MoveId.ENCORE ], + [ 25, MoveId.TOXIC ], + [ 28, MoveId.STOCKPILE ], + [ 28, MoveId.SPIT_UP ], + [ 28, MoveId.SWALLOW ], + [ 33, MoveId.SLUDGE_BOMB ], + [ 36, MoveId.GASTRO_ACID ], + [ 41, MoveId.BELCH ], + [ 44, MoveId.PAIN_SPLIT ], + [ 49, MoveId.GUNK_SHOT ], ], [Species.SWALOT]: [ - [ EVOLVE_MOVE, Moves.BODY_SLAM ], - [ 1, Moves.GUNK_SHOT ], - [ 1, Moves.POUND ], - [ 1, Moves.YAWN ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.WRING_OUT ], - [ 1, Moves.SLUDGE ], - [ 1, Moves.PAIN_SPLIT ], // Previous Stage Move - [ 12, Moves.AMNESIA ], - [ 17, Moves.ACID_SPRAY ], - [ 20, Moves.ENCORE ], - [ 25, Moves.TOXIC ], - [ 30, Moves.STOCKPILE ], - [ 30, Moves.SPIT_UP ], - [ 30, Moves.SWALLOW ], - [ 37, Moves.SLUDGE_BOMB ], - [ 42, Moves.GASTRO_ACID ], - [ 49, Moves.BELCH ], + [ EVOLVE_MOVE, MoveId.BODY_SLAM ], + [ 1, MoveId.GUNK_SHOT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.WRING_OUT ], + [ 1, MoveId.SLUDGE ], + [ 1, MoveId.PAIN_SPLIT ], // Previous Stage Move + [ 12, MoveId.AMNESIA ], + [ 17, MoveId.ACID_SPRAY ], + [ 20, MoveId.ENCORE ], + [ 25, MoveId.TOXIC ], + [ 30, MoveId.STOCKPILE ], + [ 30, MoveId.SPIT_UP ], + [ 30, MoveId.SWALLOW ], + [ 37, MoveId.SLUDGE_BOMB ], + [ 42, MoveId.GASTRO_ACID ], + [ 49, MoveId.BELCH ], ], [Species.CARVANHA]: [ - [ 1, Moves.AQUA_JET ], - [ 1, Moves.LEER ], - [ 4, Moves.POISON_FANG ], - [ 8, Moves.FOCUS_ENERGY ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.BITE ], - [ 20, Moves.ICE_FANG ], - [ 24, Moves.SCREECH ], - [ 28, Moves.SWAGGER ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.AGILITY ], - [ 40, Moves.LIQUIDATION ], - [ 44, Moves.TAKE_DOWN ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.LEER ], + [ 4, MoveId.POISON_FANG ], + [ 8, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.BITE ], + [ 20, MoveId.ICE_FANG ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SWAGGER ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.AGILITY ], + [ 40, MoveId.LIQUIDATION ], + [ 44, MoveId.TAKE_DOWN ], ], [Species.SHARPEDO]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.LEER ], - [ 1, Moves.POISON_FANG ], - [ 1, Moves.FOCUS_ENERGY ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.BITE ], - [ 20, Moves.ICE_FANG ], - [ 24, Moves.SCREECH ], - [ 28, Moves.SWAGGER ], - [ 34, Moves.CRUNCH ], - [ 40, Moves.AGILITY ], - [ 46, Moves.LIQUIDATION ], - [ 52, Moves.TAKE_DOWN ], + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.LEER ], + [ 1, MoveId.POISON_FANG ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.BITE ], + [ 20, MoveId.ICE_FANG ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SWAGGER ], + [ 34, MoveId.CRUNCH ], + [ 40, MoveId.AGILITY ], + [ 46, MoveId.LIQUIDATION ], + [ 52, MoveId.TAKE_DOWN ], ], [Species.WAILMER]: [ - [ 1, Moves.SPLASH ], - [ 1, Moves.TACKLE ], // Custom - [ 3, Moves.GROWL ], - [ 6, Moves.ASTONISH ], - [ 12, Moves.WATER_GUN ], - [ 15, Moves.MIST ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEAVY_SLAM ], - [ 24, Moves.BRINE ], - [ 27, Moves.WHIRLPOOL ], - [ 30, Moves.DIVE ], - [ 33, Moves.BOUNCE ], - [ 36, Moves.BODY_SLAM ], - [ 39, Moves.REST ], - [ 42, Moves.AMNESIA ], - [ 45, Moves.HYDRO_PUMP ], - [ 48, Moves.WATER_SPOUT ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.TACKLE ], // Custom + [ 3, MoveId.GROWL ], + [ 6, MoveId.ASTONISH ], + [ 12, MoveId.WATER_GUN ], + [ 15, MoveId.MIST ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEAVY_SLAM ], + [ 24, MoveId.BRINE ], + [ 27, MoveId.WHIRLPOOL ], + [ 30, MoveId.DIVE ], + [ 33, MoveId.BOUNCE ], + [ 36, MoveId.BODY_SLAM ], + [ 39, MoveId.REST ], + [ 42, MoveId.AMNESIA ], + [ 45, MoveId.HYDRO_PUMP ], + [ 48, MoveId.WATER_SPOUT ], ], [Species.WAILORD]: [ - [ 1, Moves.SOAK ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.SPLASH ], - [ 1, Moves.TACKLE ], // Previous Stage Move, Custom - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.WATER_GUN ], - [ 15, Moves.MIST ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEAVY_SLAM ], - [ 24, Moves.BRINE ], - [ 27, Moves.WHIRLPOOL ], - [ 30, Moves.DIVE ], - [ 33, Moves.BOUNCE ], - [ 36, Moves.BODY_SLAM ], - [ 39, Moves.REST ], - [ 44, Moves.AMNESIA ], - [ 49, Moves.HYDRO_PUMP ], - [ 54, Moves.WATER_SPOUT ], + [ 1, MoveId.SOAK ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.TACKLE ], // Previous Stage Move, Custom + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.WATER_GUN ], + [ 15, MoveId.MIST ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEAVY_SLAM ], + [ 24, MoveId.BRINE ], + [ 27, MoveId.WHIRLPOOL ], + [ 30, MoveId.DIVE ], + [ 33, MoveId.BOUNCE ], + [ 36, MoveId.BODY_SLAM ], + [ 39, MoveId.REST ], + [ 44, MoveId.AMNESIA ], + [ 49, MoveId.HYDRO_PUMP ], + [ 54, MoveId.WATER_SPOUT ], ], [Species.NUMEL]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.TACKLE ], - [ 5, Moves.EMBER ], - [ 8, Moves.FOCUS_ENERGY ], - [ 12, Moves.BULLDOZE ], - [ 15, Moves.INCINERATE ], - [ 19, Moves.AMNESIA ], - [ 22, Moves.LAVA_PLUME ], - [ 26, Moves.EARTH_POWER ], - [ 29, Moves.CURSE ], - [ 31, Moves.TAKE_DOWN ], - [ 40, Moves.EARTHQUAKE ], - [ 43, Moves.FLAMETHROWER ], - [ 47, Moves.DOUBLE_EDGE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.EMBER ], + [ 8, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.BULLDOZE ], + [ 15, MoveId.INCINERATE ], + [ 19, MoveId.AMNESIA ], + [ 22, MoveId.LAVA_PLUME ], + [ 26, MoveId.EARTH_POWER ], + [ 29, MoveId.CURSE ], + [ 31, MoveId.TAKE_DOWN ], + [ 40, MoveId.EARTHQUAKE ], + [ 43, MoveId.FLAMETHROWER ], + [ 47, MoveId.DOUBLE_EDGE ], ], [Species.CAMERUPT]: [ - [ EVOLVE_MOVE, Moves.ROCK_SLIDE ], - [ RELEARN_MOVE, Moves.FLAMETHROWER ], // Previous Stage Move - [ RELEARN_MOVE, Moves.DOUBLE_EDGE ], // Previous Stage Move - [ 1, Moves.FISSURE ], - [ 1, Moves.ERUPTION ], - [ 1, Moves.GROWL ], - [ 1, Moves.TACKLE ], - [ 1, Moves.EMBER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 12, Moves.BULLDOZE ], - [ 15, Moves.INCINERATE ], - [ 19, Moves.AMNESIA ], - [ 22, Moves.LAVA_PLUME ], - [ 26, Moves.EARTH_POWER ], - [ 29, Moves.CURSE ], - [ 31, Moves.TAKE_DOWN ], - [ 39, Moves.YAWN ], - [ 46, Moves.EARTHQUAKE ], + [ EVOLVE_MOVE, MoveId.ROCK_SLIDE ], + [ RELEARN_MOVE, MoveId.FLAMETHROWER ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.DOUBLE_EDGE ], // Previous Stage Move + [ 1, MoveId.FISSURE ], + [ 1, MoveId.ERUPTION ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.BULLDOZE ], + [ 15, MoveId.INCINERATE ], + [ 19, MoveId.AMNESIA ], + [ 22, MoveId.LAVA_PLUME ], + [ 26, MoveId.EARTH_POWER ], + [ 29, MoveId.CURSE ], + [ 31, MoveId.TAKE_DOWN ], + [ 39, MoveId.YAWN ], + [ 46, MoveId.EARTHQUAKE ], ], [Species.TORKOAL]: [ - [ 1, Moves.SMOG ], - [ 1, Moves.EMBER ], - [ 4, Moves.WITHDRAW ], - [ 8, Moves.RAPID_SPIN ], - [ 12, Moves.SMOKESCREEN ], - [ 16, Moves.CLEAR_SMOG ], - [ 20, Moves.FLAME_WHEEL ], - [ 24, Moves.PROTECT ], - [ 28, Moves.LAVA_PLUME ], - [ 32, Moves.BODY_SLAM ], - [ 36, Moves.IRON_DEFENSE ], - [ 40, Moves.FLAMETHROWER ], - [ 44, Moves.CURSE ], - [ 48, Moves.HEAT_WAVE ], - [ 52, Moves.AMNESIA ], - [ 56, Moves.INFERNO ], - [ 60, Moves.SHELL_SMASH ], - [ 64, Moves.ERUPTION ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.WITHDRAW ], + [ 8, MoveId.RAPID_SPIN ], + [ 12, MoveId.SMOKESCREEN ], + [ 16, MoveId.CLEAR_SMOG ], + [ 20, MoveId.FLAME_WHEEL ], + [ 24, MoveId.PROTECT ], + [ 28, MoveId.LAVA_PLUME ], + [ 32, MoveId.BODY_SLAM ], + [ 36, MoveId.IRON_DEFENSE ], + [ 40, MoveId.FLAMETHROWER ], + [ 44, MoveId.CURSE ], + [ 48, MoveId.HEAT_WAVE ], + [ 52, MoveId.AMNESIA ], + [ 56, MoveId.INFERNO ], + [ 60, MoveId.SHELL_SMASH ], + [ 64, MoveId.ERUPTION ], ], [Species.SPOINK]: [ - [ 1, Moves.SPLASH ], - [ 5, Moves.CONFUSION ], // Custom, Moved from Level 7 to 5 - [ 10, Moves.GROWL ], - [ 14, Moves.PSYBEAM ], - [ 18, Moves.PSYCH_UP ], - [ 22, Moves.CONFUSE_RAY ], - [ 29, Moves.REST ], - [ 29, Moves.POWER_GEM ], - [ 33, Moves.SNORE ], - [ 38, Moves.PSYSHOCK ], - [ 40, Moves.PAYBACK ], - [ 44, Moves.PSYCHIC ], - [ 50, Moves.BOUNCE ], + [ 1, MoveId.SPLASH ], + [ 5, MoveId.CONFUSION ], // Custom, Moved from Level 7 to 5 + [ 10, MoveId.GROWL ], + [ 14, MoveId.PSYBEAM ], + [ 18, MoveId.PSYCH_UP ], + [ 22, MoveId.CONFUSE_RAY ], + [ 29, MoveId.REST ], + [ 29, MoveId.POWER_GEM ], + [ 33, MoveId.SNORE ], + [ 38, MoveId.PSYSHOCK ], + [ 40, MoveId.PAYBACK ], + [ 44, MoveId.PSYCHIC ], + [ 50, MoveId.BOUNCE ], ], [Species.GRUMPIG]: [ - [ EVOLVE_MOVE, Moves.TEETER_DANCE ], - [ 1, Moves.BELCH ], - [ 1, Moves.SPLASH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.GROWL ], // Previous Stage Move - [ 1, Moves.PSYBEAM ], - [ 18, Moves.PSYCH_UP ], - [ 22, Moves.CONFUSE_RAY ], - [ 26, Moves.ZEN_HEADBUTT ], - [ 29, Moves.POWER_GEM ], - [ 35, Moves.REST ], - [ 35, Moves.SNORE ], - [ 42, Moves.PSYSHOCK ], - [ 46, Moves.PAYBACK ], - [ 52, Moves.PSYCHIC ], - [ 60, Moves.BOUNCE ], + [ EVOLVE_MOVE, MoveId.TEETER_DANCE ], + [ 1, MoveId.BELCH ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.GROWL ], // Previous Stage Move + [ 1, MoveId.PSYBEAM ], + [ 18, MoveId.PSYCH_UP ], + [ 22, MoveId.CONFUSE_RAY ], + [ 26, MoveId.ZEN_HEADBUTT ], + [ 29, MoveId.POWER_GEM ], + [ 35, MoveId.REST ], + [ 35, MoveId.SNORE ], + [ 42, MoveId.PSYSHOCK ], + [ 46, MoveId.PAYBACK ], + [ 52, MoveId.PSYCHIC ], + [ 60, MoveId.BOUNCE ], ], [Species.SPINDA]: [ - [ 1, Moves.TACKLE ], - [ 5, Moves.COPYCAT ], - [ 10, Moves.DIZZY_PUNCH ], - [ 14, Moves.PSYBEAM ], - [ 19, Moves.HYPNOSIS ], - [ 23, Moves.BODY_SLAM ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.TEETER_DANCE ], - [ 37, Moves.UPROAR ], - [ 41, Moves.PSYCH_UP ], - [ 46, Moves.DOUBLE_EDGE ], - [ 50, Moves.FLAIL ], - [ 55, Moves.THRASH ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.COPYCAT ], + [ 10, MoveId.DIZZY_PUNCH ], + [ 14, MoveId.PSYBEAM ], + [ 19, MoveId.HYPNOSIS ], + [ 23, MoveId.BODY_SLAM ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.TEETER_DANCE ], + [ 37, MoveId.UPROAR ], + [ 41, MoveId.PSYCH_UP ], + [ 46, MoveId.DOUBLE_EDGE ], + [ 50, MoveId.FLAIL ], + [ 55, MoveId.THRASH ], ], [Species.TRAPINCH]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.BIDE ], - [ 1, Moves.FEINT_ATTACK ], - [ 8, Moves.BITE ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SAND_TOMB ], - [ 20, Moves.BULLDOZE ], - [ 24, Moves.DIG ], - [ 28, Moves.CRUNCH ], - [ 32, Moves.SANDSTORM ], - [ 36, Moves.EARTH_POWER ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.SUPERPOWER ], - [ 48, Moves.FISSURE ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.FEINT_ATTACK ], + [ 8, MoveId.BITE ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SAND_TOMB ], + [ 20, MoveId.BULLDOZE ], + [ 24, MoveId.DIG ], + [ 28, MoveId.CRUNCH ], + [ 32, MoveId.SANDSTORM ], + [ 36, MoveId.EARTH_POWER ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.SUPERPOWER ], + [ 48, MoveId.FISSURE ], ], [Species.VIBRAVA]: [ - [ EVOLVE_MOVE, Moves.DRAGON_BREATH ], - [ RELEARN_MOVE, Moves.SUPERSONIC ], - [ RELEARN_MOVE, Moves.FISSURE ], - [ RELEARN_MOVE, Moves.CRUNCH ], - [ RELEARN_MOVE, Moves.SUPERPOWER ], - [ RELEARN_MOVE, Moves.ASTONISH ], - [ RELEARN_MOVE, Moves.BULLDOZE ], - [ 1, Moves.DIG ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.BITE ], - [ 1, Moves.BIDE ], - [ 1, Moves.FEINT_ATTACK ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SAND_TOMB ], - [ 20, Moves.DRAGON_TAIL ], - [ 24, Moves.SCREECH ], - [ 28, Moves.BUG_BUZZ ], - [ 32, Moves.SANDSTORM ], - [ 38, Moves.EARTH_POWER ], - [ 44, Moves.EARTHQUAKE ], - [ 50, Moves.UPROAR ], - [ 56, Moves.DRAGON_RUSH ], - [ 62, Moves.BOOMBURST ], + [ EVOLVE_MOVE, MoveId.DRAGON_BREATH ], + [ RELEARN_MOVE, MoveId.SUPERSONIC ], + [ RELEARN_MOVE, MoveId.FISSURE ], + [ RELEARN_MOVE, MoveId.CRUNCH ], + [ RELEARN_MOVE, MoveId.SUPERPOWER ], + [ RELEARN_MOVE, MoveId.ASTONISH ], + [ RELEARN_MOVE, MoveId.BULLDOZE ], + [ 1, MoveId.DIG ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.BITE ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.FEINT_ATTACK ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SAND_TOMB ], + [ 20, MoveId.DRAGON_TAIL ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.BUG_BUZZ ], + [ 32, MoveId.SANDSTORM ], + [ 38, MoveId.EARTH_POWER ], + [ 44, MoveId.EARTHQUAKE ], + [ 50, MoveId.UPROAR ], + [ 56, MoveId.DRAGON_RUSH ], + [ 62, MoveId.BOOMBURST ], ], [Species.FLYGON]: [ - [ EVOLVE_MOVE, Moves.DRAGON_CLAW ], - [ RELEARN_MOVE, Moves.BITE ], - [ RELEARN_MOVE, Moves.FISSURE ], - [ RELEARN_MOVE, Moves.DIG ], - [ RELEARN_MOVE, Moves.CRUNCH ], - [ RELEARN_MOVE, Moves.SUPERPOWER ], - [ RELEARN_MOVE, Moves.ASTONISH ], - [ RELEARN_MOVE, Moves.DRAGON_DANCE ], - [ RELEARN_MOVE, Moves.FEINT ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.BULLDOZE ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.BIDE ], - [ 1, Moves.FEINT_ATTACK ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SAND_TOMB ], - [ 20, Moves.DRAGON_TAIL ], - [ 24, Moves.SCREECH ], - [ 28, Moves.BUG_BUZZ ], - [ 32, Moves.SANDSTORM ], - [ 38, Moves.EARTH_POWER ], - [ 44, Moves.EARTHQUAKE ], - [ 52, Moves.UPROAR ], - [ 60, Moves.DRAGON_RUSH ], - [ 68, Moves.BOOMBURST ], + [ EVOLVE_MOVE, MoveId.DRAGON_CLAW ], + [ RELEARN_MOVE, MoveId.BITE ], + [ RELEARN_MOVE, MoveId.FISSURE ], + [ RELEARN_MOVE, MoveId.DIG ], + [ RELEARN_MOVE, MoveId.CRUNCH ], + [ RELEARN_MOVE, MoveId.SUPERPOWER ], + [ RELEARN_MOVE, MoveId.ASTONISH ], + [ RELEARN_MOVE, MoveId.DRAGON_DANCE ], + [ RELEARN_MOVE, MoveId.FEINT ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.BULLDOZE ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.FEINT_ATTACK ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SAND_TOMB ], + [ 20, MoveId.DRAGON_TAIL ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.BUG_BUZZ ], + [ 32, MoveId.SANDSTORM ], + [ 38, MoveId.EARTH_POWER ], + [ 44, MoveId.EARTHQUAKE ], + [ 52, MoveId.UPROAR ], + [ 60, MoveId.DRAGON_RUSH ], + [ 68, MoveId.BOOMBURST ], ], [Species.CACNEA]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 4, Moves.ABSORB ], - [ 7, Moves.GROWTH ], - [ 10, Moves.LEECH_SEED ], - [ 13, Moves.SAND_ATTACK ], - [ 16, Moves.BULLET_SEED ], - [ 19, Moves.POWER_TRIP ], - [ 22, Moves.INGRAIN ], - [ 26, Moves.PAYBACK ], - [ 30, Moves.SPIKES ], - [ 34, Moves.SUCKER_PUNCH ], - [ 38, Moves.PIN_MISSILE ], - [ 42, Moves.ENERGY_BALL ], - [ 46, Moves.COTTON_SPORE ], - [ 50, Moves.SANDSTORM ], - [ 54, Moves.DESTINY_BOND ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 4, MoveId.ABSORB ], + [ 7, MoveId.GROWTH ], + [ 10, MoveId.LEECH_SEED ], + [ 13, MoveId.SAND_ATTACK ], + [ 16, MoveId.BULLET_SEED ], + [ 19, MoveId.POWER_TRIP ], + [ 22, MoveId.INGRAIN ], + [ 26, MoveId.PAYBACK ], + [ 30, MoveId.SPIKES ], + [ 34, MoveId.SUCKER_PUNCH ], + [ 38, MoveId.PIN_MISSILE ], + [ 42, MoveId.ENERGY_BALL ], + [ 46, MoveId.COTTON_SPORE ], + [ 50, MoveId.SANDSTORM ], + [ 54, MoveId.DESTINY_BOND ], ], [Species.CACTURNE]: [ - [ EVOLVE_MOVE, Moves.SPIKY_SHIELD ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 10, Moves.LEECH_SEED ], - [ 13, Moves.SAND_ATTACK ], - [ 16, Moves.BULLET_SEED ], - [ 19, Moves.POWER_TRIP ], - [ 22, Moves.INGRAIN ], - [ 26, Moves.PAYBACK ], - [ 30, Moves.SPIKES ], - [ 35, Moves.SUCKER_PUNCH ], - [ 38, Moves.PIN_MISSILE ], - [ 44, Moves.ENERGY_BALL ], - [ 49, Moves.COTTON_SPORE ], - [ 54, Moves.SANDSTORM ], + [ EVOLVE_MOVE, MoveId.SPIKY_SHIELD ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 10, MoveId.LEECH_SEED ], + [ 13, MoveId.SAND_ATTACK ], + [ 16, MoveId.BULLET_SEED ], + [ 19, MoveId.POWER_TRIP ], + [ 22, MoveId.INGRAIN ], + [ 26, MoveId.PAYBACK ], + [ 30, MoveId.SPIKES ], + [ 35, MoveId.SUCKER_PUNCH ], + [ 38, MoveId.PIN_MISSILE ], + [ 44, MoveId.ENERGY_BALL ], + [ 49, MoveId.COTTON_SPORE ], + [ 54, MoveId.SANDSTORM ], ], [Species.SWABLU]: [ - [ 1, Moves.PECK ], - [ 1, Moves.GROWL ], - [ 4, Moves.DISARMING_VOICE ], - [ 8, Moves.MIST ], - [ 12, Moves.FURY_ATTACK ], - [ 16, Moves.ROUND ], - [ 20, Moves.DRAGON_BREATH ], - [ 24, Moves.SAFEGUARD ], - [ 28, Moves.SING ], - [ 32, Moves.COTTON_GUARD ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.MOONBLAST ], - [ 44, Moves.PERISH_SONG ], + [ 1, MoveId.PECK ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.DISARMING_VOICE ], + [ 8, MoveId.MIST ], + [ 12, MoveId.FURY_ATTACK ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.DRAGON_BREATH ], + [ 24, MoveId.SAFEGUARD ], + [ 28, MoveId.SING ], + [ 32, MoveId.COTTON_GUARD ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.MOONBLAST ], + [ 44, MoveId.PERISH_SONG ], ], [Species.ALTARIA]: [ - [ EVOLVE_MOVE, Moves.DRAGON_PULSE ], - [ 1, Moves.PLUCK ], - [ 1, Moves.PECK ], - [ 1, Moves.GROWL ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.MIST ], - [ 12, Moves.FURY_ATTACK ], - [ 16, Moves.ROUND ], - [ 20, Moves.DRAGON_BREATH ], - [ 24, Moves.SAFEGUARD ], - [ 28, Moves.SING ], - [ 32, Moves.COTTON_GUARD ], - [ 38, Moves.TAKE_DOWN ], - [ 44, Moves.MOONBLAST ], - [ 50, Moves.PERISH_SONG ], - [ 56, Moves.SKY_ATTACK ], + [ EVOLVE_MOVE, MoveId.DRAGON_PULSE ], + [ 1, MoveId.PLUCK ], + [ 1, MoveId.PECK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.MIST ], + [ 12, MoveId.FURY_ATTACK ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.DRAGON_BREATH ], + [ 24, MoveId.SAFEGUARD ], + [ 28, MoveId.SING ], + [ 32, MoveId.COTTON_GUARD ], + [ 38, MoveId.TAKE_DOWN ], + [ 44, MoveId.MOONBLAST ], + [ 50, MoveId.PERISH_SONG ], + [ 56, MoveId.SKY_ATTACK ], ], [Species.ZANGOOSE]: [ - [ RELEARN_MOVE, Moves.DOUBLE_KICK ], - [ RELEARN_MOVE, Moves.DISABLE ], - [ RELEARN_MOVE, Moves.COUNTER ], - [ RELEARN_MOVE, Moves.FURY_SWIPES ], - [ RELEARN_MOVE, Moves.CURSE ], - [ RELEARN_MOVE, Moves.FLAIL ], - [ RELEARN_MOVE, Moves.BELLY_DRUM ], - [ RELEARN_MOVE, Moves.FEINT ], - [ RELEARN_MOVE, Moves.NIGHT_SLASH ], - [ RELEARN_MOVE, Moves.DOUBLE_HIT ], - [ RELEARN_MOVE, Moves.QUICK_GUARD ], - [ RELEARN_MOVE, Moves.FINAL_GAMBIT ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.QUICK_ATTACK ], - [ 8, Moves.FURY_CUTTER ], - [ 12, Moves.METAL_CLAW ], - [ 15, Moves.HONE_CLAWS ], - [ 19, Moves.SLASH ], - [ 22, Moves.POWER_TRIP ], - [ 26, Moves.CRUSH_CLAW ], - [ 29, Moves.FALSE_SWIPE ], - [ 33, Moves.SWITCHEROO ], - [ 36, Moves.DETECT ], - [ 40, Moves.X_SCISSOR ], - [ 43, Moves.TAUNT ], - [ 47, Moves.SWORDS_DANCE ], - [ 50, Moves.CLOSE_COMBAT ], + [ RELEARN_MOVE, MoveId.DOUBLE_KICK ], + [ RELEARN_MOVE, MoveId.DISABLE ], + [ RELEARN_MOVE, MoveId.COUNTER ], + [ RELEARN_MOVE, MoveId.FURY_SWIPES ], + [ RELEARN_MOVE, MoveId.CURSE ], + [ RELEARN_MOVE, MoveId.FLAIL ], + [ RELEARN_MOVE, MoveId.BELLY_DRUM ], + [ RELEARN_MOVE, MoveId.FEINT ], + [ RELEARN_MOVE, MoveId.NIGHT_SLASH ], + [ RELEARN_MOVE, MoveId.DOUBLE_HIT ], + [ RELEARN_MOVE, MoveId.QUICK_GUARD ], + [ RELEARN_MOVE, MoveId.FINAL_GAMBIT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.QUICK_ATTACK ], + [ 8, MoveId.FURY_CUTTER ], + [ 12, MoveId.METAL_CLAW ], + [ 15, MoveId.HONE_CLAWS ], + [ 19, MoveId.SLASH ], + [ 22, MoveId.POWER_TRIP ], + [ 26, MoveId.CRUSH_CLAW ], + [ 29, MoveId.FALSE_SWIPE ], + [ 33, MoveId.SWITCHEROO ], + [ 36, MoveId.DETECT ], + [ 40, MoveId.X_SCISSOR ], + [ 43, MoveId.TAUNT ], + [ 47, MoveId.SWORDS_DANCE ], + [ 50, MoveId.CLOSE_COMBAT ], ], [Species.SEVIPER]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.SWAGGER ], - [ 4, Moves.BITE ], - [ 6, Moves.LICK ], - [ 9, Moves.POISON_TAIL ], - [ 11, Moves.FEINT ], - [ 14, Moves.SCREECH ], - [ 19, Moves.GLARE ], - [ 21, Moves.POISON_FANG ], - [ 24, Moves.VENOSHOCK ], - [ 29, Moves.GASTRO_ACID ], - [ 31, Moves.POISON_JAB ], - [ 34, Moves.HAZE ], - [ 39, Moves.CRUNCH ], - [ 41, Moves.BELCH ], - [ 44, Moves.COIL ], - [ 46, Moves.SLUDGE_BOMB ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.SWAGGER ], + [ 4, MoveId.BITE ], + [ 6, MoveId.LICK ], + [ 9, MoveId.POISON_TAIL ], + [ 11, MoveId.FEINT ], + [ 14, MoveId.SCREECH ], + [ 19, MoveId.GLARE ], + [ 21, MoveId.POISON_FANG ], + [ 24, MoveId.VENOSHOCK ], + [ 29, MoveId.GASTRO_ACID ], + [ 31, MoveId.POISON_JAB ], + [ 34, MoveId.HAZE ], + [ 39, MoveId.CRUNCH ], + [ 41, MoveId.BELCH ], + [ 44, MoveId.COIL ], + [ 46, MoveId.SLUDGE_BOMB ], ], [Species.LUNATONE]: [ - [ 1, Moves.MOONBLAST ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.ROCK_THROW ], - [ 5, Moves.HYPNOSIS ], - [ 10, Moves.ROCK_POLISH ], - [ 15, Moves.ROCK_SLIDE ], - [ 20, Moves.PSYSHOCK ], - [ 25, Moves.COSMIC_POWER ], - [ 30, Moves.PSYCHIC ], - [ 35, Moves.STONE_EDGE ], - [ 40, Moves.FUTURE_SIGHT ], - [ 45, Moves.MAGIC_ROOM ], - [ 50, Moves.EXPLOSION ], + [ 1, MoveId.MOONBLAST ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.ROCK_THROW ], + [ 5, MoveId.HYPNOSIS ], + [ 10, MoveId.ROCK_POLISH ], + [ 15, MoveId.ROCK_SLIDE ], + [ 20, MoveId.PSYSHOCK ], + [ 25, MoveId.COSMIC_POWER ], + [ 30, MoveId.PSYCHIC ], + [ 35, MoveId.STONE_EDGE ], + [ 40, MoveId.FUTURE_SIGHT ], + [ 45, MoveId.MAGIC_ROOM ], + [ 50, MoveId.EXPLOSION ], ], [Species.SOLROCK]: [ - [ 1, Moves.FLARE_BLITZ ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.ROCK_THROW ], - [ 5, Moves.HYPNOSIS ], - [ 10, Moves.ROCK_POLISH ], - [ 15, Moves.ROCK_SLIDE ], - [ 20, Moves.ZEN_HEADBUTT ], - [ 25, Moves.COSMIC_POWER ], - [ 30, Moves.PSYCHIC ], - [ 35, Moves.STONE_EDGE ], - [ 40, Moves.SOLAR_BEAM ], - [ 45, Moves.WONDER_ROOM ], - [ 50, Moves.EXPLOSION ], + [ 1, MoveId.FLARE_BLITZ ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.ROCK_THROW ], + [ 5, MoveId.HYPNOSIS ], + [ 10, MoveId.ROCK_POLISH ], + [ 15, MoveId.ROCK_SLIDE ], + [ 20, MoveId.ZEN_HEADBUTT ], + [ 25, MoveId.COSMIC_POWER ], + [ 30, MoveId.PSYCHIC ], + [ 35, MoveId.STONE_EDGE ], + [ 40, MoveId.SOLAR_BEAM ], + [ 45, MoveId.WONDER_ROOM ], + [ 50, MoveId.EXPLOSION ], ], [Species.BARBOACH]: [ - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.WATER_GUN ], - [ 6, Moves.REST ], - [ 6, Moves.SNORE ], - [ 12, Moves.WATER_PULSE ], - [ 18, Moves.AMNESIA ], - [ 24, Moves.AQUA_TAIL ], - [ 31, Moves.MUDDY_WATER ], - [ 36, Moves.EARTHQUAKE ], - [ 42, Moves.FUTURE_SIGHT ], - [ 48, Moves.FISSURE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.WATER_GUN ], + [ 6, MoveId.REST ], + [ 6, MoveId.SNORE ], + [ 12, MoveId.WATER_PULSE ], + [ 18, MoveId.AMNESIA ], + [ 24, MoveId.AQUA_TAIL ], + [ 31, MoveId.MUDDY_WATER ], + [ 36, MoveId.EARTHQUAKE ], + [ 42, MoveId.FUTURE_SIGHT ], + [ 48, MoveId.FISSURE ], ], [Species.WHISCASH]: [ - [ EVOLVE_MOVE, Moves.THRASH ], - [ 1, Moves.BELCH ], - [ 1, Moves.ZEN_HEADBUTT ], - [ 1, Moves.TICKLE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.REST ], - [ 1, Moves.SNORE ], - [ 12, Moves.WATER_PULSE ], - [ 18, Moves.AMNESIA ], - [ 24, Moves.AQUA_TAIL ], - [ 33, Moves.MUDDY_WATER ], - [ 40, Moves.EARTHQUAKE ], - [ 48, Moves.FUTURE_SIGHT ], - [ 56, Moves.FISSURE ], + [ EVOLVE_MOVE, MoveId.THRASH ], + [ 1, MoveId.BELCH ], + [ 1, MoveId.ZEN_HEADBUTT ], + [ 1, MoveId.TICKLE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.REST ], + [ 1, MoveId.SNORE ], + [ 12, MoveId.WATER_PULSE ], + [ 18, MoveId.AMNESIA ], + [ 24, MoveId.AQUA_TAIL ], + [ 33, MoveId.MUDDY_WATER ], + [ 40, MoveId.EARTHQUAKE ], + [ 48, MoveId.FUTURE_SIGHT ], + [ 56, MoveId.FISSURE ], ], [Species.CORPHISH]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HARDEN ], - [ 4, Moves.LEER ], - [ 8, Moves.TAUNT ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.KNOCK_OFF ], - [ 20, Moves.DOUBLE_HIT ], - [ 24, Moves.PROTECT ], - [ 28, Moves.NIGHT_SLASH ], - [ 32, Moves.RAZOR_SHELL ], - [ 36, Moves.SWORDS_DANCE ], - [ 40, Moves.CRUNCH ], - [ 44, Moves.CRABHAMMER ], - [ 48, Moves.ENDEAVOR ], - [ 52, Moves.GUILLOTINE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HARDEN ], + [ 4, MoveId.LEER ], + [ 8, MoveId.TAUNT ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.KNOCK_OFF ], + [ 20, MoveId.DOUBLE_HIT ], + [ 24, MoveId.PROTECT ], + [ 28, MoveId.NIGHT_SLASH ], + [ 32, MoveId.RAZOR_SHELL ], + [ 36, MoveId.SWORDS_DANCE ], + [ 40, MoveId.CRUNCH ], + [ 44, MoveId.CRABHAMMER ], + [ 48, MoveId.ENDEAVOR ], + [ 52, MoveId.GUILLOTINE ], ], [Species.CRAWDAUNT]: [ - [ EVOLVE_MOVE, Moves.SWIFT ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HARDEN ], - [ 1, Moves.LEER ], - [ 1, Moves.TAUNT ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.KNOCK_OFF ], - [ 20, Moves.DOUBLE_HIT ], - [ 24, Moves.PROTECT ], - [ 28, Moves.NIGHT_SLASH ], - [ 34, Moves.RAZOR_SHELL ], - [ 40, Moves.SWORDS_DANCE ], - [ 46, Moves.CRUNCH ], - [ 52, Moves.CRABHAMMER ], - [ 58, Moves.ENDEAVOR ], - [ 64, Moves.GUILLOTINE ], + [ EVOLVE_MOVE, MoveId.SWIFT ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.LEER ], + [ 1, MoveId.TAUNT ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.KNOCK_OFF ], + [ 20, MoveId.DOUBLE_HIT ], + [ 24, MoveId.PROTECT ], + [ 28, MoveId.NIGHT_SLASH ], + [ 34, MoveId.RAZOR_SHELL ], + [ 40, MoveId.SWORDS_DANCE ], + [ 46, MoveId.CRUNCH ], + [ 52, MoveId.CRABHAMMER ], + [ 58, MoveId.ENDEAVOR ], + [ 64, MoveId.GUILLOTINE ], ], [Species.BALTOY]: [ - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SLAP ], - [ 3, Moves.RAPID_SPIN ], - [ 6, Moves.CONFUSION ], - [ 9, Moves.ROCK_TOMB ], - [ 12, Moves.POWER_TRICK ], - [ 15, Moves.PSYBEAM ], - [ 18, Moves.ANCIENT_POWER ], - [ 21, Moves.IMPRISON ], - [ 24, Moves.COSMIC_POWER ], - [ 27, Moves.EXTRASENSORY ], - [ 30, Moves.EARTH_POWER ], - [ 33, Moves.SELF_DESTRUCT ], - [ 36, Moves.GUARD_SPLIT ], - [ 36, Moves.POWER_SPLIT ], - [ 39, Moves.SANDSTORM ], - [ 42, Moves.EXPLOSION ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MUD_SLAP ], + [ 3, MoveId.RAPID_SPIN ], + [ 6, MoveId.CONFUSION ], + [ 9, MoveId.ROCK_TOMB ], + [ 12, MoveId.POWER_TRICK ], + [ 15, MoveId.PSYBEAM ], + [ 18, MoveId.ANCIENT_POWER ], + [ 21, MoveId.IMPRISON ], + [ 24, MoveId.COSMIC_POWER ], + [ 27, MoveId.EXTRASENSORY ], + [ 30, MoveId.EARTH_POWER ], + [ 33, MoveId.SELF_DESTRUCT ], + [ 36, MoveId.GUARD_SPLIT ], + [ 36, MoveId.POWER_SPLIT ], + [ 39, MoveId.SANDSTORM ], + [ 42, MoveId.EXPLOSION ], ], [Species.CLAYDOL]: [ - [ EVOLVE_MOVE, Moves.HYPER_BEAM ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.CONFUSION ], - [ 9, Moves.ROCK_TOMB ], - [ 12, Moves.POWER_TRICK ], - [ 15, Moves.PSYBEAM ], - [ 18, Moves.ANCIENT_POWER ], - [ 21, Moves.IMPRISON ], - [ 24, Moves.COSMIC_POWER ], - [ 27, Moves.EXTRASENSORY ], - [ 30, Moves.EARTH_POWER ], - [ 33, Moves.SELF_DESTRUCT ], - [ 38, Moves.GUARD_SPLIT ], - [ 38, Moves.POWER_SPLIT ], - [ 43, Moves.SANDSTORM ], - [ 48, Moves.EXPLOSION ], + [ EVOLVE_MOVE, MoveId.HYPER_BEAM ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.CONFUSION ], + [ 9, MoveId.ROCK_TOMB ], + [ 12, MoveId.POWER_TRICK ], + [ 15, MoveId.PSYBEAM ], + [ 18, MoveId.ANCIENT_POWER ], + [ 21, MoveId.IMPRISON ], + [ 24, MoveId.COSMIC_POWER ], + [ 27, MoveId.EXTRASENSORY ], + [ 30, MoveId.EARTH_POWER ], + [ 33, MoveId.SELF_DESTRUCT ], + [ 38, MoveId.GUARD_SPLIT ], + [ 38, MoveId.POWER_SPLIT ], + [ 43, MoveId.SANDSTORM ], + [ 48, MoveId.EXPLOSION ], ], [Species.LILEEP]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.CONSTRICT ], - [ 4, Moves.ACID ], - [ 8, Moves.CONFUSE_RAY ], - [ 12, Moves.INGRAIN ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.MEGA_DRAIN ], - [ 24, Moves.BRINE ], - [ 28, Moves.AMNESIA ], - [ 32, Moves.GASTRO_ACID ], - [ 36, Moves.GIGA_DRAIN ], - [ 41, Moves.STOCKPILE ], - [ 41, Moves.SPIT_UP ], - [ 41, Moves.SWALLOW ], - [ 44, Moves.ENERGY_BALL ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.CONSTRICT ], + [ 4, MoveId.ACID ], + [ 8, MoveId.CONFUSE_RAY ], + [ 12, MoveId.INGRAIN ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.MEGA_DRAIN ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.AMNESIA ], + [ 32, MoveId.GASTRO_ACID ], + [ 36, MoveId.GIGA_DRAIN ], + [ 41, MoveId.STOCKPILE ], + [ 41, MoveId.SPIT_UP ], + [ 41, MoveId.SWALLOW ], + [ 44, MoveId.ENERGY_BALL ], ], [Species.CRADILY]: [ - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.WRAP ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.ACID ], - [ 1, Moves.CONFUSE_RAY ], - [ 12, Moves.INGRAIN ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.MEGA_DRAIN ], - [ 24, Moves.BRINE ], - [ 28, Moves.AMNESIA ], - [ 32, Moves.GASTRO_ACID ], - [ 36, Moves.GIGA_DRAIN ], - [ 43, Moves.STOCKPILE ], - [ 43, Moves.SPIT_UP ], - [ 43, Moves.SWALLOW ], - [ 48, Moves.ENERGY_BALL ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.ACID ], + [ 1, MoveId.CONFUSE_RAY ], + [ 12, MoveId.INGRAIN ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.MEGA_DRAIN ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.AMNESIA ], + [ 32, MoveId.GASTRO_ACID ], + [ 36, MoveId.GIGA_DRAIN ], + [ 43, MoveId.STOCKPILE ], + [ 43, MoveId.SPIT_UP ], + [ 43, MoveId.SWALLOW ], + [ 48, MoveId.ENERGY_BALL ], ], [Species.ANORITH]: [ - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.HARDEN ], - [ 4, Moves.WATER_GUN ], - [ 8, Moves.SMACK_DOWN ], - [ 12, Moves.METAL_CLAW ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.BUG_BITE ], - [ 24, Moves.BRINE ], - [ 28, Moves.SLASH ], - [ 32, Moves.CRUSH_CLAW ], - [ 36, Moves.ROCK_BLAST ], - [ 41, Moves.PROTECT ], - [ 44, Moves.X_SCISSOR ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.HARDEN ], + [ 4, MoveId.WATER_GUN ], + [ 8, MoveId.SMACK_DOWN ], + [ 12, MoveId.METAL_CLAW ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.BUG_BITE ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.CRUSH_CLAW ], + [ 36, MoveId.ROCK_BLAST ], + [ 41, MoveId.PROTECT ], + [ 44, MoveId.X_SCISSOR ], ], [Species.ARMALDO]: [ - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.HARDEN ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SMACK_DOWN ], - [ 12, Moves.METAL_CLAW ], - [ 16, Moves.ANCIENT_POWER ], - [ 20, Moves.BUG_BITE ], - [ 24, Moves.BRINE ], - [ 28, Moves.SLASH ], - [ 32, Moves.CRUSH_CLAW ], - [ 36, Moves.ROCK_BLAST ], - [ 43, Moves.PROTECT ], - [ 48, Moves.X_SCISSOR ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SMACK_DOWN ], + [ 12, MoveId.METAL_CLAW ], + [ 16, MoveId.ANCIENT_POWER ], + [ 20, MoveId.BUG_BITE ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.CRUSH_CLAW ], + [ 36, MoveId.ROCK_BLAST ], + [ 43, MoveId.PROTECT ], + [ 48, MoveId.X_SCISSOR ], ], [Species.FEEBAS]: [ - [ 1, Moves.SPLASH ], - [ 15, Moves.TACKLE ], - [ 25, Moves.FLAIL ], + [ 1, MoveId.SPLASH ], + [ 15, MoveId.TACKLE ], + [ 25, MoveId.FLAIL ], ], [Species.MILOTIC]: [ - [ EVOLVE_MOVE, Moves.WATER_PULSE ], - [ 1, Moves.FLAIL ], - [ 1, Moves.SPLASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WRAP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WATER_SPORT ], - [ 4, Moves.DISARMING_VOICE ], - [ 8, Moves.TWISTER ], - [ 12, Moves.AQUA_RING ], - [ 16, Moves.ATTRACT ], - [ 20, Moves.LIFE_DEW ], - [ 24, Moves.DRAGON_TAIL ], - [ 28, Moves.RECOVER ], - [ 32, Moves.AQUA_TAIL ], - [ 36, Moves.SAFEGUARD ], - [ 40, Moves.SURF ], - [ 44, Moves.RAIN_DANCE ], - [ 48, Moves.COIL ], - [ 52, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.WATER_PULSE ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WATER_SPORT ], + [ 4, MoveId.DISARMING_VOICE ], + [ 8, MoveId.TWISTER ], + [ 12, MoveId.AQUA_RING ], + [ 16, MoveId.ATTRACT ], + [ 20, MoveId.LIFE_DEW ], + [ 24, MoveId.DRAGON_TAIL ], + [ 28, MoveId.RECOVER ], + [ 32, MoveId.AQUA_TAIL ], + [ 36, MoveId.SAFEGUARD ], + [ 40, MoveId.SURF ], + [ 44, MoveId.RAIN_DANCE ], + [ 48, MoveId.COIL ], + [ 52, MoveId.HYDRO_PUMP ], ], [Species.CASTFORM]: [ - [ 1, Moves.TACKLE ], - [ 10, Moves.WATER_GUN ], - [ 10, Moves.EMBER ], - [ 10, Moves.POWDER_SNOW ], - [ 15, Moves.HEADBUTT ], - [ 20, Moves.RAIN_DANCE ], - [ 20, Moves.SUNNY_DAY ], - [ 20, Moves.HAIL ], - [ 25, Moves.WEATHER_BALL ], - [ 35, Moves.HYDRO_PUMP ], - [ 35, Moves.FIRE_BLAST ], - [ 35, Moves.BLIZZARD ], - [ 45, Moves.HURRICANE ], + [ 1, MoveId.TACKLE ], + [ 10, MoveId.WATER_GUN ], + [ 10, MoveId.EMBER ], + [ 10, MoveId.POWDER_SNOW ], + [ 15, MoveId.HEADBUTT ], + [ 20, MoveId.RAIN_DANCE ], + [ 20, MoveId.SUNNY_DAY ], + [ 20, MoveId.HAIL ], + [ 25, MoveId.WEATHER_BALL ], + [ 35, MoveId.HYDRO_PUMP ], + [ 35, MoveId.FIRE_BLAST ], + [ 35, MoveId.BLIZZARD ], + [ 45, MoveId.HURRICANE ], ], [Species.KECLEON]: [ - [ 1, Moves.THIEF ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LICK ], - [ 1, Moves.SCRATCH ], - [ 4, Moves.BIND ], - [ 7, Moves.SHADOW_SNEAK ], - [ 10, Moves.FEINT ], - [ 13, Moves.FURY_SWIPES ], - [ 16, Moves.DISABLE ], - [ 18, Moves.PSYBEAM ], - [ 21, Moves.ANCIENT_POWER ], - [ 25, Moves.SLASH ], - [ 30, Moves.DETECT ], - [ 33, Moves.SHADOW_CLAW ], - [ 38, Moves.SCREECH ], - [ 42, Moves.SUBSTITUTE ], - [ 46, Moves.SUCKER_PUNCH ], - [ 50, Moves.FOUL_PLAY ], + [ 1, MoveId.THIEF ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LICK ], + [ 1, MoveId.SCRATCH ], + [ 4, MoveId.BIND ], + [ 7, MoveId.SHADOW_SNEAK ], + [ 10, MoveId.FEINT ], + [ 13, MoveId.FURY_SWIPES ], + [ 16, MoveId.DISABLE ], + [ 18, MoveId.PSYBEAM ], + [ 21, MoveId.ANCIENT_POWER ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.DETECT ], + [ 33, MoveId.SHADOW_CLAW ], + [ 38, MoveId.SCREECH ], + [ 42, MoveId.SUBSTITUTE ], + [ 46, MoveId.SUCKER_PUNCH ], + [ 50, MoveId.FOUL_PLAY ], ], [Species.SHUPPET]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.PURSUIT ], // Custom - [ 4, Moves.SCREECH ], - [ 7, Moves.NIGHT_SHADE ], - [ 10, Moves.SPITE ], - [ 16, Moves.WILL_O_WISP ], - [ 19, Moves.SHADOW_SNEAK ], - [ 22, Moves.HEX ], - [ 26, Moves.CURSE ], - [ 30, Moves.SHADOW_BALL ], - [ 34, Moves.ROLE_PLAY ], - [ 38, Moves.SUCKER_PUNCH ], - [ 42, Moves.TRICK ], - [ 48, Moves.PHANTOM_FORCE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.PURSUIT ], // Custom + [ 4, MoveId.SCREECH ], + [ 7, MoveId.NIGHT_SHADE ], + [ 10, MoveId.SPITE ], + [ 16, MoveId.WILL_O_WISP ], + [ 19, MoveId.SHADOW_SNEAK ], + [ 22, MoveId.HEX ], + [ 26, MoveId.CURSE ], + [ 30, MoveId.SHADOW_BALL ], + [ 34, MoveId.ROLE_PLAY ], + [ 38, MoveId.SUCKER_PUNCH ], + [ 42, MoveId.TRICK ], + [ 48, MoveId.PHANTOM_FORCE ], ], [Species.BANETTE]: [ - [ EVOLVE_MOVE, Moves.KNOCK_OFF ], - [ 1, Moves.ASTONISH ], // Previous Stage Move - [ 1, Moves.PURSUIT ], // Previous Stage Move, Custom - [ 1, Moves.SCREECH ], - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.SPITE ], - [ 16, Moves.WILL_O_WISP ], - [ 19, Moves.SHADOW_SNEAK ], - [ 22, Moves.HEX ], - [ 26, Moves.CURSE ], - [ 30, Moves.SHADOW_BALL ], - [ 34, Moves.ROLE_PLAY ], - [ 40, Moves.SUCKER_PUNCH ], - [ 46, Moves.TRICK ], - [ 53, Moves.PHANTOM_FORCE ], + [ EVOLVE_MOVE, MoveId.KNOCK_OFF ], + [ 1, MoveId.ASTONISH ], // Previous Stage Move + [ 1, MoveId.PURSUIT ], // Previous Stage Move, Custom + [ 1, MoveId.SCREECH ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.SPITE ], + [ 16, MoveId.WILL_O_WISP ], + [ 19, MoveId.SHADOW_SNEAK ], + [ 22, MoveId.HEX ], + [ 26, MoveId.CURSE ], + [ 30, MoveId.SHADOW_BALL ], + [ 34, MoveId.ROLE_PLAY ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 46, MoveId.TRICK ], + [ 53, MoveId.PHANTOM_FORCE ], ], [Species.DUSKULL]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEER ], - [ 1, Moves.PURSUIT ], // Custom - [ 4, Moves.DISABLE ], - [ 8, Moves.SHADOW_SNEAK ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.NIGHT_SHADE ], - [ 20, Moves.PAYBACK ], - [ 24, Moves.WILL_O_WISP ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.HEX ], - [ 36, Moves.CURSE ], - [ 40, Moves.SHADOW_BALL ], - [ 44, Moves.FUTURE_SIGHT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PURSUIT ], // Custom + [ 4, MoveId.DISABLE ], + [ 8, MoveId.SHADOW_SNEAK ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.NIGHT_SHADE ], + [ 20, MoveId.PAYBACK ], + [ 24, MoveId.WILL_O_WISP ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.HEX ], + [ 36, MoveId.CURSE ], + [ 40, MoveId.SHADOW_BALL ], + [ 44, MoveId.FUTURE_SIGHT ], ], [Species.DUSCLOPS]: [ - [ EVOLVE_MOVE, Moves.SHADOW_PUNCH ], - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.ICE_PUNCH ], - [ 1, Moves.THUNDER_PUNCH ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.BIND ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEER ], - [ 1, Moves.PURSUIT ], // Previous Stage Move, Custom - [ 1, Moves.DISABLE ], - [ 1, Moves.SHADOW_SNEAK ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.NIGHT_SHADE ], - [ 20, Moves.PAYBACK ], - [ 24, Moves.WILL_O_WISP ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.HEX ], - [ 36, Moves.CURSE ], - [ 42, Moves.SHADOW_BALL ], - [ 48, Moves.FUTURE_SIGHT ], + [ EVOLVE_MOVE, MoveId.SHADOW_PUNCH ], + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.ICE_PUNCH ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.BIND ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PURSUIT ], // Previous Stage Move, Custom + [ 1, MoveId.DISABLE ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.NIGHT_SHADE ], + [ 20, MoveId.PAYBACK ], + [ 24, MoveId.WILL_O_WISP ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.HEX ], + [ 36, MoveId.CURSE ], + [ 42, MoveId.SHADOW_BALL ], + [ 48, MoveId.FUTURE_SIGHT ], ], [Species.TROPIUS]: [ - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWTH ], - [ 1, Moves.RAZOR_LEAF ], - [ 6, Moves.SWEET_SCENT ], - [ 10, Moves.STOMP ], - [ 16, Moves.MAGICAL_LEAF ], - [ 21, Moves.WHIRLWIND ], - [ 30, Moves.WIDE_GUARD ], - [ 36, Moves.AIR_SLASH ], - [ 41, Moves.BODY_SLAM ], - [ 46, Moves.OUTRAGE ], - [ 50, Moves.SYNTHESIS ], - [ 56, Moves.SOLAR_BEAM ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.RAZOR_LEAF ], + [ 6, MoveId.SWEET_SCENT ], + [ 10, MoveId.STOMP ], + [ 16, MoveId.MAGICAL_LEAF ], + [ 21, MoveId.WHIRLWIND ], + [ 30, MoveId.WIDE_GUARD ], + [ 36, MoveId.AIR_SLASH ], + [ 41, MoveId.BODY_SLAM ], + [ 46, MoveId.OUTRAGE ], + [ 50, MoveId.SYNTHESIS ], + [ 56, MoveId.SOLAR_BEAM ], ], [Species.CHIMECHO]: [ - [ 1, Moves.HEALING_WISH ], - [ 1, Moves.LAST_RESORT ], // Previous Stage Move - [ 1, Moves.ENTRAINMENT ], // Previous Stage Move - [ 1, Moves.WRAP ], - [ 1, Moves.PSYWAVE ], // Previous Stage Move, Custom - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SYNCHRONOISE ], - [ 13, Moves.YAWN ], - [ 16, Moves.STORED_POWER ], - [ 19, Moves.TAKE_DOWN ], - [ 22, Moves.EXTRASENSORY ], - [ 27, Moves.HEAL_BELL ], - [ 32, Moves.UPROAR ], - [ 37, Moves.SAFEGUARD ], - [ 42, Moves.DOUBLE_EDGE ], - [ 47, Moves.HEAL_PULSE ], + [ 1, MoveId.HEALING_WISH ], + [ 1, MoveId.LAST_RESORT ], // Previous Stage Move + [ 1, MoveId.ENTRAINMENT ], // Previous Stage Move + [ 1, MoveId.WRAP ], + [ 1, MoveId.PSYWAVE ], // Previous Stage Move, Custom + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.SYNCHRONOISE ], + [ 13, MoveId.YAWN ], + [ 16, MoveId.STORED_POWER ], + [ 19, MoveId.TAKE_DOWN ], + [ 22, MoveId.EXTRASENSORY ], + [ 27, MoveId.HEAL_BELL ], + [ 32, MoveId.UPROAR ], + [ 37, MoveId.SAFEGUARD ], + [ 42, MoveId.DOUBLE_EDGE ], + [ 47, MoveId.HEAL_PULSE ], ], [Species.ABSOL]: [ - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.LEER ], - [ 5, Moves.DOUBLE_TEAM ], - [ 10, Moves.KNOCK_OFF ], - [ 15, Moves.DETECT ], - [ 20, Moves.TAUNT ], - [ 25, Moves.SLASH ], - [ 30, Moves.NIGHT_SLASH ], - [ 35, Moves.FOCUS_ENERGY ], - [ 40, Moves.SUCKER_PUNCH ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.FUTURE_SIGHT ], - [ 55, Moves.PERISH_SONG ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.LEER ], + [ 5, MoveId.DOUBLE_TEAM ], + [ 10, MoveId.KNOCK_OFF ], + [ 15, MoveId.DETECT ], + [ 20, MoveId.TAUNT ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.NIGHT_SLASH ], + [ 35, MoveId.FOCUS_ENERGY ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 45, MoveId.SWORDS_DANCE ], + [ 50, MoveId.FUTURE_SIGHT ], + [ 55, MoveId.PERISH_SONG ], ], [Species.WYNAUT]: [ - [ 1, Moves.COUNTER ], - [ 1, Moves.MIRROR_COAT ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.SPLASH ], - [ 1, Moves.CHARM ], - [ 1, Moves.ENCORE ], - [ 1, Moves.AMNESIA ], + [ 1, MoveId.COUNTER ], + [ 1, MoveId.MIRROR_COAT ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.AMNESIA ], ], [Species.SNORUNT]: [ - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HEADBUTT ], - [ 5, Moves.LEER ], - [ 10, Moves.DOUBLE_TEAM ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.PROTECT ], - [ 25, Moves.ICY_WIND ], - [ 30, Moves.FROST_BREATH ], - [ 35, Moves.BITE ], - [ 40, Moves.ICE_FANG ], - [ 45, Moves.SNOWSCAPE ], - [ 50, Moves.WEATHER_BALL ], - [ 55, Moves.CRUNCH ], - [ 60, Moves.BLIZZARD ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.HEADBUTT ], + [ 5, MoveId.LEER ], + [ 10, MoveId.DOUBLE_TEAM ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.PROTECT ], + [ 25, MoveId.ICY_WIND ], + [ 30, MoveId.FROST_BREATH ], + [ 35, MoveId.BITE ], + [ 40, MoveId.ICE_FANG ], + [ 45, MoveId.SNOWSCAPE ], + [ 50, MoveId.WEATHER_BALL ], + [ 55, MoveId.CRUNCH ], + [ 60, MoveId.BLIZZARD ], ], [Species.GLALIE]: [ - [ EVOLVE_MOVE, Moves.FREEZE_DRY ], - [ 1, Moves.SHEER_COLD ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEER ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ICE_BALL ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.PROTECT ], - [ 25, Moves.ICY_WIND ], - [ 30, Moves.FROST_BREATH ], - [ 35, Moves.BITE ], - [ 40, Moves.ICE_FANG ], - [ 47, Moves.SNOWSCAPE ], - [ 54, Moves.WEATHER_BALL ], - [ 61, Moves.CRUNCH ], - [ 68, Moves.BLIZZARD ], + [ EVOLVE_MOVE, MoveId.FREEZE_DRY ], + [ 1, MoveId.SHEER_COLD ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ICE_BALL ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.PROTECT ], + [ 25, MoveId.ICY_WIND ], + [ 30, MoveId.FROST_BREATH ], + [ 35, MoveId.BITE ], + [ 40, MoveId.ICE_FANG ], + [ 47, MoveId.SNOWSCAPE ], + [ 54, MoveId.WEATHER_BALL ], + [ 61, MoveId.CRUNCH ], + [ 68, MoveId.BLIZZARD ], ], [Species.SPHEAL]: [ - [ 1, Moves.ROLLOUT ], - [ 1, Moves.DEFENSE_CURL ], - [ 4, Moves.GROWL ], - [ 8, Moves.WATER_GUN ], - [ 12, Moves.POWDER_SNOW ], - [ 16, Moves.REST ], - [ 20, Moves.SNORE ], - [ 24, Moves.BRINE ], - [ 28, Moves.AURORA_BEAM ], - [ 33, Moves.ENCORE ], - [ 36, Moves.BODY_SLAM ], - [ 40, Moves.SURF ], - [ 44, Moves.BLIZZARD ], - [ 48, Moves.HAIL ], - [ 52, Moves.SHEER_COLD ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.DEFENSE_CURL ], + [ 4, MoveId.GROWL ], + [ 8, MoveId.WATER_GUN ], + [ 12, MoveId.POWDER_SNOW ], + [ 16, MoveId.REST ], + [ 20, MoveId.SNORE ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.AURORA_BEAM ], + [ 33, MoveId.ENCORE ], + [ 36, MoveId.BODY_SLAM ], + [ 40, MoveId.SURF ], + [ 44, MoveId.BLIZZARD ], + [ 48, MoveId.HAIL ], + [ 52, MoveId.SHEER_COLD ], ], [Species.SEALEO]: [ - [ EVOLVE_MOVE, Moves.SWAGGER ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 12, Moves.POWDER_SNOW ], - [ 16, Moves.REST ], - [ 20, Moves.SNORE ], - [ 24, Moves.BRINE ], - [ 28, Moves.AURORA_BEAM ], - [ 35, Moves.ENCORE ], - [ 40, Moves.BODY_SLAM ], - [ 46, Moves.SURF ], - [ 52, Moves.BLIZZARD ], - [ 58, Moves.HAIL ], - [ 64, Moves.SHEER_COLD ], + [ EVOLVE_MOVE, MoveId.SWAGGER ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 12, MoveId.POWDER_SNOW ], + [ 16, MoveId.REST ], + [ 20, MoveId.SNORE ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.AURORA_BEAM ], + [ 35, MoveId.ENCORE ], + [ 40, MoveId.BODY_SLAM ], + [ 46, MoveId.SURF ], + [ 52, MoveId.BLIZZARD ], + [ 58, MoveId.HAIL ], + [ 64, MoveId.SHEER_COLD ], ], [Species.WALREIN]: [ - [ 1, Moves.SWAGGER ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 12, Moves.POWDER_SNOW ], - [ 16, Moves.REST ], - [ 20, Moves.SNORE ], - [ 24, Moves.BRINE ], - [ 28, Moves.AURORA_BEAM ], - [ 35, Moves.ENCORE ], - [ 40, Moves.BODY_SLAM ], - [ 48, Moves.SURF ], - [ 56, Moves.BLIZZARD ], - [ 64, Moves.HAIL ], - [ 72, Moves.SHEER_COLD ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 12, MoveId.POWDER_SNOW ], + [ 16, MoveId.REST ], + [ 20, MoveId.SNORE ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.AURORA_BEAM ], + [ 35, MoveId.ENCORE ], + [ 40, MoveId.BODY_SLAM ], + [ 48, MoveId.SURF ], + [ 56, MoveId.BLIZZARD ], + [ 64, MoveId.HAIL ], + [ 72, MoveId.SHEER_COLD ], ], [Species.CLAMPERL]: [ - [ 1, Moves.CLAMP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WHIRLPOOL ], - [ 1, Moves.IRON_DEFENSE ], - [ 50, Moves.SHELL_SMASH ], + [ 1, MoveId.CLAMP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WHIRLPOOL ], + [ 1, MoveId.IRON_DEFENSE ], + [ 50, MoveId.SHELL_SMASH ], ], [Species.HUNTAIL]: [ - [ 1, Moves.CLAMP ], // Previous Stage Move - [ 1, Moves.WATER_GUN ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.SHELL_SMASH ], - [ 1, Moves.WHIRLPOOL ], - [ 1, Moves.BITE ], - [ 5, Moves.SCREECH ], - [ 9, Moves.SCARY_FACE ], - [ 11, Moves.RAIN_DANCE ], - [ 14, Moves.WATER_PULSE ], - [ 16, Moves.ICE_FANG ], - [ 19, Moves.BRINE ], - [ 23, Moves.SUCKER_PUNCH ], - [ 26, Moves.DIVE ], - [ 29, Moves.BATON_PASS ], - [ 34, Moves.CRUNCH ], - [ 39, Moves.AQUA_TAIL ], - [ 45, Moves.COIL ], - [ 50, Moves.HYDRO_PUMP ], + [ 1, MoveId.CLAMP ], // Previous Stage Move + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.SHELL_SMASH ], + [ 1, MoveId.WHIRLPOOL ], + [ 1, MoveId.BITE ], + [ 5, MoveId.SCREECH ], + [ 9, MoveId.SCARY_FACE ], + [ 11, MoveId.RAIN_DANCE ], + [ 14, MoveId.WATER_PULSE ], + [ 16, MoveId.ICE_FANG ], + [ 19, MoveId.BRINE ], + [ 23, MoveId.SUCKER_PUNCH ], + [ 26, MoveId.DIVE ], + [ 29, MoveId.BATON_PASS ], + [ 34, MoveId.CRUNCH ], + [ 39, MoveId.AQUA_TAIL ], + [ 45, MoveId.COIL ], + [ 50, MoveId.HYDRO_PUMP ], ], [Species.GOREBYSS]: [ - [ 1, Moves.CLAMP ], // Previous Stage Move - [ 1, Moves.WATER_GUN ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.SHELL_SMASH ], - [ 1, Moves.WHIRLPOOL ], - [ 1, Moves.CONFUSION ], - [ 5, Moves.RAIN_DANCE ], - [ 9, Moves.AGILITY ], - [ 11, Moves.DRAINING_KISS ], - [ 14, Moves.WATER_PULSE ], - [ 16, Moves.AMNESIA ], - [ 19, Moves.AQUA_RING ], - [ 23, Moves.SAFEGUARD ], - [ 26, Moves.DIVE ], - [ 29, Moves.BATON_PASS ], - [ 34, Moves.PSYCHIC ], - [ 39, Moves.AQUA_TAIL ], - [ 45, Moves.COIL ], - [ 50, Moves.HYDRO_PUMP ], + [ 1, MoveId.CLAMP ], // Previous Stage Move + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.SHELL_SMASH ], + [ 1, MoveId.WHIRLPOOL ], + [ 1, MoveId.CONFUSION ], + [ 5, MoveId.RAIN_DANCE ], + [ 9, MoveId.AGILITY ], + [ 11, MoveId.DRAINING_KISS ], + [ 14, MoveId.WATER_PULSE ], + [ 16, MoveId.AMNESIA ], + [ 19, MoveId.AQUA_RING ], + [ 23, MoveId.SAFEGUARD ], + [ 26, MoveId.DIVE ], + [ 29, MoveId.BATON_PASS ], + [ 34, MoveId.PSYCHIC ], + [ 39, MoveId.AQUA_TAIL ], + [ 45, MoveId.COIL ], + [ 50, MoveId.HYDRO_PUMP ], ], [Species.RELICANTH]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.WATER_GUN ], - [ 10, Moves.ANCIENT_POWER ], - [ 15, Moves.YAWN ], - [ 20, Moves.DIVE ], - [ 25, Moves.TAKE_DOWN ], - [ 30, Moves.AQUA_TAIL ], - [ 35, Moves.REST ], - [ 40, Moves.FLAIL ], - [ 45, Moves.HYDRO_PUMP ], - [ 50, Moves.DOUBLE_EDGE ], - [ 55, Moves.HEAD_SMASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.WATER_GUN ], + [ 10, MoveId.ANCIENT_POWER ], + [ 15, MoveId.YAWN ], + [ 20, MoveId.DIVE ], + [ 25, MoveId.TAKE_DOWN ], + [ 30, MoveId.AQUA_TAIL ], + [ 35, MoveId.REST ], + [ 40, MoveId.FLAIL ], + [ 45, MoveId.HYDRO_PUMP ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 55, MoveId.HEAD_SMASH ], ], [Species.LUVDISC]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CHARM ], - [ 4, Moves.WATER_GUN ], - [ 7, Moves.AGILITY ], - [ 13, Moves.WISH ], - [ 17, Moves.WATER_PULSE ], - [ 20, Moves.ATTRACT ], - [ 22, Moves.DRAINING_KISS ], - [ 26, Moves.FLAIL ], - [ 31, Moves.SWEET_KISS ], - [ 34, Moves.TAKE_DOWN ], - [ 37, Moves.BABY_DOLL_EYES ], - [ 40, Moves.AQUA_RING ], - [ 42, Moves.SOAK ], - [ 46, Moves.HYDRO_PUMP ], - [ 49, Moves.SAFEGUARD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CHARM ], + [ 4, MoveId.WATER_GUN ], + [ 7, MoveId.AGILITY ], + [ 13, MoveId.WISH ], + [ 17, MoveId.WATER_PULSE ], + [ 20, MoveId.ATTRACT ], + [ 22, MoveId.DRAINING_KISS ], + [ 26, MoveId.FLAIL ], + [ 31, MoveId.SWEET_KISS ], + [ 34, MoveId.TAKE_DOWN ], + [ 37, MoveId.BABY_DOLL_EYES ], + [ 40, MoveId.AQUA_RING ], + [ 42, MoveId.SOAK ], + [ 46, MoveId.HYDRO_PUMP ], + [ 49, MoveId.SAFEGUARD ], ], [Species.BAGON]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.LEER ], - [ 5, Moves.BITE ], - [ 10, Moves.DRAGON_BREATH ], - [ 15, Moves.HEADBUTT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.CRUNCH ], - [ 31, Moves.DRAGON_CLAW ], - [ 35, Moves.ZEN_HEADBUTT ], - [ 40, Moves.FOCUS_ENERGY ], - [ 45, Moves.FLAMETHROWER ], - [ 50, Moves.OUTRAGE ], - [ 55, Moves.DOUBLE_EDGE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LEER ], + [ 5, MoveId.BITE ], + [ 10, MoveId.DRAGON_BREATH ], + [ 15, MoveId.HEADBUTT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.CRUNCH ], + [ 31, MoveId.DRAGON_CLAW ], + [ 35, MoveId.ZEN_HEADBUTT ], + [ 40, MoveId.FOCUS_ENERGY ], + [ 45, MoveId.FLAMETHROWER ], + [ 50, MoveId.OUTRAGE ], + [ 55, MoveId.DOUBLE_EDGE ], ], [Species.SHELGON]: [ - [ EVOLVE_MOVE, Moves.PROTECT ], - [ 1, Moves.EMBER ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.DRAGON_BREATH ], - [ 15, Moves.HEADBUTT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.CRUNCH ], - [ 33, Moves.DRAGON_CLAW ], - [ 39, Moves.ZEN_HEADBUTT ], - [ 46, Moves.FOCUS_ENERGY ], - [ 53, Moves.FLAMETHROWER ], - [ 60, Moves.OUTRAGE ], - [ 67, Moves.DOUBLE_EDGE ], + [ EVOLVE_MOVE, MoveId.PROTECT ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 15, MoveId.HEADBUTT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.CRUNCH ], + [ 33, MoveId.DRAGON_CLAW ], + [ 39, MoveId.ZEN_HEADBUTT ], + [ 46, MoveId.FOCUS_ENERGY ], + [ 53, MoveId.FLAMETHROWER ], + [ 60, MoveId.OUTRAGE ], + [ 67, MoveId.DOUBLE_EDGE ], ], [Species.SALAMENCE]: [ - [ EVOLVE_MOVE, Moves.FLY ], - [ RELEARN_MOVE, Moves.OUTRAGE ], // Previous Stage Move - [ 1, Moves.PROTECT ], - [ 1, Moves.DRAGON_TAIL ], - [ 1, Moves.DUAL_WINGBEAT ], - [ 1, Moves.ROOST ], - [ 1, Moves.EMBER ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.DRAGON_BREATH ], - [ 15, Moves.HEADBUTT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.CRUNCH ], - [ 33, Moves.DRAGON_CLAW ], - [ 39, Moves.ZEN_HEADBUTT ], - [ 46, Moves.FOCUS_ENERGY ], - [ 55, Moves.FLAMETHROWER ], - [ 73, Moves.DOUBLE_EDGE ], + [ EVOLVE_MOVE, MoveId.FLY ], + [ RELEARN_MOVE, MoveId.OUTRAGE ], // Previous Stage Move + [ 1, MoveId.PROTECT ], + [ 1, MoveId.DRAGON_TAIL ], + [ 1, MoveId.DUAL_WINGBEAT ], + [ 1, MoveId.ROOST ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 15, MoveId.HEADBUTT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.CRUNCH ], + [ 33, MoveId.DRAGON_CLAW ], + [ 39, MoveId.ZEN_HEADBUTT ], + [ 46, MoveId.FOCUS_ENERGY ], + [ 55, MoveId.FLAMETHROWER ], + [ 73, MoveId.DOUBLE_EDGE ], ], [Species.BELDUM]: [ - [ 1, Moves.TACKLE ], + [ 1, MoveId.TACKLE ], ], [Species.METANG]: [ - [ EVOLVE_MOVE, Moves.CONFUSION ], - [ EVOLVE_MOVE, Moves.METAL_CLAW ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BULLET_PUNCH ], - [ 1, Moves.HONE_CLAWS ], - [ 6, Moves.ZEN_HEADBUTT ], - [ 12, Moves.MAGNET_RISE ], - [ 18, Moves.FLASH_CANNON ], - [ 26, Moves.TAKE_DOWN ], - [ 34, Moves.PSYCHIC ], - [ 42, Moves.SCARY_FACE ], - [ 50, Moves.METEOR_MASH ], - [ 58, Moves.IRON_DEFENSE ], - [ 66, Moves.AGILITY ], - [ 74, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, MoveId.CONFUSION ], + [ EVOLVE_MOVE, MoveId.METAL_CLAW ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BULLET_PUNCH ], + [ 1, MoveId.HONE_CLAWS ], + [ 6, MoveId.ZEN_HEADBUTT ], + [ 12, MoveId.MAGNET_RISE ], + [ 18, MoveId.FLASH_CANNON ], + [ 26, MoveId.TAKE_DOWN ], + [ 34, MoveId.PSYCHIC ], + [ 42, MoveId.SCARY_FACE ], + [ 50, MoveId.METEOR_MASH ], + [ 58, MoveId.IRON_DEFENSE ], + [ 66, MoveId.AGILITY ], + [ 74, MoveId.HYPER_BEAM ], ], [Species.METAGROSS]: [ - [ EVOLVE_MOVE, Moves.HAMMER_ARM ], - [ RELEARN_MOVE, Moves.EXPLOSION ], - [ RELEARN_MOVE, Moves.HONE_CLAWS ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.BULLET_PUNCH ], - [ 1, Moves.TACKLE ], - [ 6, Moves.ZEN_HEADBUTT ], - [ 12, Moves.MAGNET_RISE ], - [ 16, Moves.FLASH_CANNON ], - [ 26, Moves.TAKE_DOWN ], - [ 34, Moves.PSYCHIC ], - [ 42, Moves.SCARY_FACE ], - [ 52, Moves.METEOR_MASH ], - [ 62, Moves.IRON_DEFENSE ], - [ 72, Moves.AGILITY ], - [ 82, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, MoveId.HAMMER_ARM ], + [ RELEARN_MOVE, MoveId.EXPLOSION ], + [ RELEARN_MOVE, MoveId.HONE_CLAWS ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.BULLET_PUNCH ], + [ 1, MoveId.TACKLE ], + [ 6, MoveId.ZEN_HEADBUTT ], + [ 12, MoveId.MAGNET_RISE ], + [ 16, MoveId.FLASH_CANNON ], + [ 26, MoveId.TAKE_DOWN ], + [ 34, MoveId.PSYCHIC ], + [ 42, MoveId.SCARY_FACE ], + [ 52, MoveId.METEOR_MASH ], + [ 62, MoveId.IRON_DEFENSE ], + [ 72, MoveId.AGILITY ], + [ 82, MoveId.HYPER_BEAM ], ], [Species.REGIROCK]: [ - [ 1, Moves.CHARGE_BEAM ], - [ 1, Moves.ROCK_THROW ], - [ 6, Moves.BULLDOZE ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.STOMP ], - [ 24, Moves.ROCK_SLIDE ], - [ 30, Moves.CURSE ], - [ 36, Moves.IRON_DEFENSE ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.STONE_EDGE ], - [ 54, Moves.SUPERPOWER ], - [ 60, Moves.LOCK_ON ], - [ 66, Moves.ZAP_CANNON ], - [ 72, Moves.HYPER_BEAM ], - [ 78, Moves.EXPLOSION ], + [ 1, MoveId.CHARGE_BEAM ], + [ 1, MoveId.ROCK_THROW ], + [ 6, MoveId.BULLDOZE ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.ROCK_SLIDE ], + [ 30, MoveId.CURSE ], + [ 36, MoveId.IRON_DEFENSE ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.STONE_EDGE ], + [ 54, MoveId.SUPERPOWER ], + [ 60, MoveId.LOCK_ON ], + [ 66, MoveId.ZAP_CANNON ], + [ 72, MoveId.HYPER_BEAM ], + [ 78, MoveId.EXPLOSION ], ], [Species.REGICE]: [ - [ 1, Moves.CHARGE_BEAM ], - [ 1, Moves.ICY_WIND ], - [ 6, Moves.BULLDOZE ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.STOMP ], - [ 24, Moves.ICE_BEAM ], - [ 30, Moves.CURSE ], - [ 36, Moves.AMNESIA ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.BLIZZARD ], - [ 54, Moves.SUPERPOWER ], - [ 60, Moves.LOCK_ON ], - [ 66, Moves.ZAP_CANNON ], - [ 72, Moves.HYPER_BEAM ], - [ 78, Moves.EXPLOSION ], + [ 1, MoveId.CHARGE_BEAM ], + [ 1, MoveId.ICY_WIND ], + [ 6, MoveId.BULLDOZE ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.ICE_BEAM ], + [ 30, MoveId.CURSE ], + [ 36, MoveId.AMNESIA ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.BLIZZARD ], + [ 54, MoveId.SUPERPOWER ], + [ 60, MoveId.LOCK_ON ], + [ 66, MoveId.ZAP_CANNON ], + [ 72, MoveId.HYPER_BEAM ], + [ 78, MoveId.EXPLOSION ], ], [Species.REGISTEEL]: [ - [ 1, Moves.CHARGE_BEAM ], - [ 1, Moves.METAL_CLAW ], - [ 6, Moves.BULLDOZE ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.STOMP ], - [ 24, Moves.IRON_HEAD ], - [ 24, Moves.FLASH_CANNON ], - [ 30, Moves.CURSE ], - [ 36, Moves.AMNESIA ], - [ 36, Moves.IRON_DEFENSE ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.HEAVY_SLAM ], - [ 54, Moves.SUPERPOWER ], - [ 60, Moves.LOCK_ON ], - [ 66, Moves.ZAP_CANNON ], - [ 72, Moves.HYPER_BEAM ], - [ 78, Moves.EXPLOSION ], + [ 1, MoveId.CHARGE_BEAM ], + [ 1, MoveId.METAL_CLAW ], + [ 6, MoveId.BULLDOZE ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.IRON_HEAD ], + [ 24, MoveId.FLASH_CANNON ], + [ 30, MoveId.CURSE ], + [ 36, MoveId.AMNESIA ], + [ 36, MoveId.IRON_DEFENSE ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.HEAVY_SLAM ], + [ 54, MoveId.SUPERPOWER ], + [ 60, MoveId.LOCK_ON ], + [ 66, MoveId.ZAP_CANNON ], + [ 72, MoveId.HYPER_BEAM ], + [ 78, MoveId.EXPLOSION ], ], [Species.LATIAS]: [ - [ 1, Moves.STORED_POWER ], - [ 1, Moves.CHARM ], - [ 1, Moves.PSYWAVE ], - [ 5, Moves.HELPING_HAND ], - [ 10, Moves.RECOVER ], - [ 15, Moves.CONFUSION ], - [ 20, Moves.TAILWIND ], - [ 25, Moves.DRAGON_BREATH ], - [ 30, Moves.WISH ], - [ 35, Moves.MIST_BALL ], - [ 40, Moves.ZEN_HEADBUTT ], - [ 45, Moves.DRAGON_PULSE ], - [ 50, Moves.HEAL_PULSE ], - [ 55, Moves.REFLECT_TYPE ], - [ 60, Moves.PSYCHIC ], - [ 65, Moves.GUARD_SPLIT ], - [ 70, Moves.HEALING_WISH ], + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.PSYWAVE ], + [ 5, MoveId.HELPING_HAND ], + [ 10, MoveId.RECOVER ], + [ 15, MoveId.CONFUSION ], + [ 20, MoveId.TAILWIND ], + [ 25, MoveId.DRAGON_BREATH ], + [ 30, MoveId.WISH ], + [ 35, MoveId.MIST_BALL ], + [ 40, MoveId.ZEN_HEADBUTT ], + [ 45, MoveId.DRAGON_PULSE ], + [ 50, MoveId.HEAL_PULSE ], + [ 55, MoveId.REFLECT_TYPE ], + [ 60, MoveId.PSYCHIC ], + [ 65, MoveId.GUARD_SPLIT ], + [ 70, MoveId.HEALING_WISH ], ], [Species.LATIOS]: [ - [ 1, Moves.STORED_POWER ], - [ 1, Moves.DRAGON_DANCE ], - [ 1, Moves.HEAL_BLOCK ], - [ 1, Moves.PSYWAVE ], - [ 5, Moves.HELPING_HAND ], - [ 10, Moves.RECOVER ], - [ 15, Moves.CONFUSION ], - [ 20, Moves.TAILWIND ], - [ 25, Moves.DRAGON_BREATH ], - [ 30, Moves.ALLY_SWITCH ], - [ 35, Moves.LUSTER_PURGE ], - [ 40, Moves.ZEN_HEADBUTT ], - [ 45, Moves.DRAGON_PULSE ], - [ 50, Moves.HEAL_PULSE ], - [ 55, Moves.SIMPLE_BEAM ], - [ 60, Moves.PSYCHIC ], - [ 65, Moves.POWER_SPLIT ], - [ 70, Moves.MEMENTO ], + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.DRAGON_DANCE ], + [ 1, MoveId.HEAL_BLOCK ], + [ 1, MoveId.PSYWAVE ], + [ 5, MoveId.HELPING_HAND ], + [ 10, MoveId.RECOVER ], + [ 15, MoveId.CONFUSION ], + [ 20, MoveId.TAILWIND ], + [ 25, MoveId.DRAGON_BREATH ], + [ 30, MoveId.ALLY_SWITCH ], + [ 35, MoveId.LUSTER_PURGE ], + [ 40, MoveId.ZEN_HEADBUTT ], + [ 45, MoveId.DRAGON_PULSE ], + [ 50, MoveId.HEAL_PULSE ], + [ 55, MoveId.SIMPLE_BEAM ], + [ 60, MoveId.PSYCHIC ], + [ 65, MoveId.POWER_SPLIT ], + [ 70, MoveId.MEMENTO ], ], [Species.KYOGRE]: [ - [ 1, Moves.ORIGIN_PULSE ], - [ 1, Moves.WATER_PULSE ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.SCARY_FACE ], - [ 9, Moves.AQUA_TAIL ], - [ 18, Moves.CALM_MIND ], - [ 27, Moves.MUDDY_WATER ], - [ 36, Moves.ICE_BEAM ], - [ 45, Moves.SHEER_COLD ], - [ 54, Moves.AQUA_RING ], - [ 72, Moves.HYDRO_PUMP ], - [ 81, Moves.DOUBLE_EDGE ], - [ 90, Moves.WATER_SPOUT ], + [ 1, MoveId.ORIGIN_PULSE ], + [ 1, MoveId.WATER_PULSE ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.BODY_SLAM ], + [ 1, MoveId.SCARY_FACE ], + [ 9, MoveId.AQUA_TAIL ], + [ 18, MoveId.CALM_MIND ], + [ 27, MoveId.MUDDY_WATER ], + [ 36, MoveId.ICE_BEAM ], + [ 45, MoveId.SHEER_COLD ], + [ 54, MoveId.AQUA_RING ], + [ 72, MoveId.HYDRO_PUMP ], + [ 81, MoveId.DOUBLE_EDGE ], + [ 90, MoveId.WATER_SPOUT ], ], [Species.GROUDON]: [ - [ 1, Moves.PRECIPICE_BLADES ], - [ 1, Moves.MUD_SHOT ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.LAVA_PLUME ], - [ 1, Moves.SCARY_FACE ], - [ 9, Moves.EARTH_POWER ], - [ 18, Moves.BULK_UP ], - [ 27, Moves.EARTHQUAKE ], - [ 36, Moves.HAMMER_ARM ], - [ 45, Moves.FISSURE ], - [ 54, Moves.REST ], - [ 72, Moves.FIRE_BLAST ], - [ 81, Moves.SOLAR_BEAM ], - [ 90, Moves.ERUPTION ], + [ 1, MoveId.PRECIPICE_BLADES ], + [ 1, MoveId.MUD_SHOT ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.LAVA_PLUME ], + [ 1, MoveId.SCARY_FACE ], + [ 9, MoveId.EARTH_POWER ], + [ 18, MoveId.BULK_UP ], + [ 27, MoveId.EARTHQUAKE ], + [ 36, MoveId.HAMMER_ARM ], + [ 45, MoveId.FISSURE ], + [ 54, MoveId.REST ], + [ 72, MoveId.FIRE_BLAST ], + [ 81, MoveId.SOLAR_BEAM ], + [ 90, MoveId.ERUPTION ], ], [Species.RAYQUAZA]: [ - [ 1, Moves.DRAGON_ASCENT ], - [ 1, Moves.TWISTER ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.SCARY_FACE ], - [ 9, Moves.CRUNCH ], - [ 18, Moves.DRAGON_DANCE ], - [ 27, Moves.EXTREME_SPEED ], - [ 36, Moves.DRAGON_PULSE ], - [ 45, Moves.HYPER_VOICE ], - [ 54, Moves.REST ], - [ 63, Moves.FLY ], - [ 72, Moves.HURRICANE ], - [ 81, Moves.OUTRAGE ], - [ 90, Moves.HYPER_BEAM ], + [ 1, MoveId.DRAGON_ASCENT ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.SCARY_FACE ], + [ 9, MoveId.CRUNCH ], + [ 18, MoveId.DRAGON_DANCE ], + [ 27, MoveId.EXTREME_SPEED ], + [ 36, MoveId.DRAGON_PULSE ], + [ 45, MoveId.HYPER_VOICE ], + [ 54, MoveId.REST ], + [ 63, MoveId.FLY ], + [ 72, MoveId.HURRICANE ], + [ 81, MoveId.OUTRAGE ], + [ 90, MoveId.HYPER_BEAM ], ], [Species.JIRACHI]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.WISH ], - [ 7, Moves.SWIFT ], - [ 21, Moves.LIFE_DEW ], - [ 28, Moves.ZEN_HEADBUTT ], - [ 35, Moves.GRAVITY ], - [ 42, Moves.PSYCHIC ], - [ 49, Moves.METEOR_MASH ], - [ 56, Moves.HEALING_WISH ], - [ 63, Moves.REST ], - [ 70, Moves.FUTURE_SIGHT ], - [ 77, Moves.DOUBLE_EDGE ], - [ 84, Moves.COSMIC_POWER ], - [ 91, Moves.LAST_RESORT ], - [ 98, Moves.DOOM_DESIRE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.WISH ], + [ 7, MoveId.SWIFT ], + [ 21, MoveId.LIFE_DEW ], + [ 28, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.GRAVITY ], + [ 42, MoveId.PSYCHIC ], + [ 49, MoveId.METEOR_MASH ], + [ 56, MoveId.HEALING_WISH ], + [ 63, MoveId.REST ], + [ 70, MoveId.FUTURE_SIGHT ], + [ 77, MoveId.DOUBLE_EDGE ], + [ 84, MoveId.COSMIC_POWER ], + [ 91, MoveId.LAST_RESORT ], + [ 98, MoveId.DOOM_DESIRE ], ], [Species.DEOXYS]: [ - [ 1, Moves.CONFUSION ], // Custom - [ 1, Moves.LEER ], - [ 1, Moves.WRAP ], - [ 7, Moves.NIGHT_SHADE ], - [ 13, Moves.TELEPORT ], - [ 19, Moves.KNOCK_OFF ], - [ 25, Moves.PSYSHOCK ], - [ 31, Moves.PSYCHIC ], - [ 37, Moves.GRAVITY ], - [ 43, Moves.SKILL_SWAP ], - [ 49, Moves.ZEN_HEADBUTT ], - [ 55, Moves.COSMIC_POWER ], - [ 61, Moves.RECOVER ], - [ 67, Moves.PSYCHO_BOOST ], - [ 73, Moves.HYPER_BEAM ], + [ 1, MoveId.CONFUSION ], // Custom + [ 1, MoveId.LEER ], + [ 1, MoveId.WRAP ], + [ 7, MoveId.NIGHT_SHADE ], + [ 13, MoveId.TELEPORT ], + [ 19, MoveId.KNOCK_OFF ], + [ 25, MoveId.PSYSHOCK ], + [ 31, MoveId.PSYCHIC ], + [ 37, MoveId.GRAVITY ], + [ 43, MoveId.SKILL_SWAP ], + [ 49, MoveId.ZEN_HEADBUTT ], + [ 55, MoveId.COSMIC_POWER ], + [ 61, MoveId.RECOVER ], + [ 67, MoveId.PSYCHO_BOOST ], + [ 73, MoveId.HYPER_BEAM ], ], [Species.TURTWIG]: [ - [ 1, Moves.TACKLE ], - [ 5, Moves.WITHDRAW ], - [ 5, Moves.LEAFAGE ], // Custom, moved from 10 to 5, BDSP - [ 9, Moves.GROWTH ], // Fill empty moveslot, from BDSP level 6 - [ 13, Moves.RAZOR_LEAF ], - [ 17, Moves.CURSE ], - [ 21, Moves.BITE ], - [ 25, Moves.MEGA_DRAIN ], - [ 29, Moves.LEECH_SEED ], - [ 33, Moves.SYNTHESIS ], - [ 37, Moves.CRUNCH ], - [ 41, Moves.GIGA_DRAIN ], - [ 45, Moves.LEAF_STORM ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.WITHDRAW ], + [ 5, MoveId.LEAFAGE ], // Custom, moved from 10 to 5, BDSP + [ 9, MoveId.GROWTH ], // Fill empty moveslot, from BDSP level 6 + [ 13, MoveId.RAZOR_LEAF ], + [ 17, MoveId.CURSE ], + [ 21, MoveId.BITE ], + [ 25, MoveId.MEGA_DRAIN ], + [ 29, MoveId.LEECH_SEED ], + [ 33, MoveId.SYNTHESIS ], + [ 37, MoveId.CRUNCH ], + [ 41, MoveId.GIGA_DRAIN ], + [ 45, MoveId.LEAF_STORM ], ], [Species.GROTLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.GROWTH ], // Previous Stage Move - [ 13, Moves.RAZOR_LEAF ], - [ 17, Moves.CURSE ], - [ 22, Moves.BITE ], - [ 27, Moves.MEGA_DRAIN ], - [ 32, Moves.LEECH_SEED ], - [ 37, Moves.SYNTHESIS ], - [ 42, Moves.CRUNCH ], - [ 47, Moves.GIGA_DRAIN ], - [ 52, Moves.LEAF_STORM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.GROWTH ], // Previous Stage Move + [ 13, MoveId.RAZOR_LEAF ], + [ 17, MoveId.CURSE ], + [ 22, MoveId.BITE ], + [ 27, MoveId.MEGA_DRAIN ], + [ 32, MoveId.LEECH_SEED ], + [ 37, MoveId.SYNTHESIS ], + [ 42, MoveId.CRUNCH ], + [ 47, MoveId.GIGA_DRAIN ], + [ 52, MoveId.LEAF_STORM ], ], [Species.TORTERRA]: [ - [ EVOLVE_MOVE, Moves.EARTHQUAKE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.GROWTH ], // Previous Stage Move - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.WOOD_HAMMER ], - [ 17, Moves.CURSE ], - [ 22, Moves.BITE ], - [ 27, Moves.MEGA_DRAIN ], - [ 33, Moves.LEECH_SEED ], - [ 39, Moves.SYNTHESIS ], - [ 45, Moves.CRUNCH ], - [ 51, Moves.GIGA_DRAIN ], - [ 57, Moves.LEAF_STORM ], - [ 63, Moves.HEADLONG_RUSH ], + [ EVOLVE_MOVE, MoveId.EARTHQUAKE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.GROWTH ], // Previous Stage Move + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.WOOD_HAMMER ], + [ 17, MoveId.CURSE ], + [ 22, MoveId.BITE ], + [ 27, MoveId.MEGA_DRAIN ], + [ 33, MoveId.LEECH_SEED ], + [ 39, MoveId.SYNTHESIS ], + [ 45, MoveId.CRUNCH ], + [ 51, MoveId.GIGA_DRAIN ], + [ 57, MoveId.LEAF_STORM ], + [ 63, MoveId.HEADLONG_RUSH ], ], [Species.CHIMCHAR]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.EMBER ], // Custom, moved from 7 to 5 - [ 9, Moves.TAUNT ], - [ 15, Moves.FURY_SWIPES ], - [ 17, Moves.FLAME_WHEEL ], - [ 23, Moves.NASTY_PLOT ], - [ 25, Moves.TORMENT ], - [ 31, Moves.FACADE ], - [ 33, Moves.FIRE_SPIN ], - [ 39, Moves.ACROBATICS ], - [ 41, Moves.SLACK_OFF ], - [ 47, Moves.FLAMETHROWER ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.EMBER ], // Custom, moved from 7 to 5 + [ 9, MoveId.TAUNT ], + [ 15, MoveId.FURY_SWIPES ], + [ 17, MoveId.FLAME_WHEEL ], + [ 23, MoveId.NASTY_PLOT ], + [ 25, MoveId.TORMENT ], + [ 31, MoveId.FACADE ], + [ 33, MoveId.FIRE_SPIN ], + [ 39, MoveId.ACROBATICS ], + [ 41, MoveId.SLACK_OFF ], + [ 47, MoveId.FLAMETHROWER ], ], [Species.MONFERNO]: [ - [ EVOLVE_MOVE, Moves.MACH_PUNCH ], - [ RELEARN_MOVE, Moves.NASTY_PLOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.FACADE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.FLAMETHROWER ], // Previous Stage Move - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 9, Moves.TAUNT ], - [ 16, Moves.FURY_SWIPES ], - [ 19, Moves.FLAME_WHEEL ], - [ 26, Moves.FEINT ], - [ 29, Moves.TORMENT ], - [ 36, Moves.CLOSE_COMBAT ], - [ 39, Moves.FIRE_SPIN ], - [ 46, Moves.ACROBATICS ], - [ 49, Moves.SLACK_OFF ], - [ 56, Moves.FLARE_BLITZ ], + [ EVOLVE_MOVE, MoveId.MACH_PUNCH ], + [ RELEARN_MOVE, MoveId.NASTY_PLOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.FACADE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.FLAMETHROWER ], // Previous Stage Move + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 9, MoveId.TAUNT ], + [ 16, MoveId.FURY_SWIPES ], + [ 19, MoveId.FLAME_WHEEL ], + [ 26, MoveId.FEINT ], + [ 29, MoveId.TORMENT ], + [ 36, MoveId.CLOSE_COMBAT ], + [ 39, MoveId.FIRE_SPIN ], + [ 46, MoveId.ACROBATICS ], + [ 49, MoveId.SLACK_OFF ], + [ 56, MoveId.FLARE_BLITZ ], ], [Species.INFERNAPE]: [ - [ EVOLVE_MOVE, Moves.CLOSE_COMBAT ], - [ RELEARN_MOVE, Moves.TAUNT ], - [ RELEARN_MOVE, Moves.NASTY_PLOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.FACADE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.SLACK_OFF ], - [ RELEARN_MOVE, Moves.FLAMETHROWER ], // Previous Stage Move - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.MACH_PUNCH ], - [ 16, Moves.FURY_SWIPES ], - [ 19, Moves.FLAME_WHEEL ], - [ 26, Moves.FEINT ], - [ 29, Moves.TORMENT ], - [ 42, Moves.FIRE_SPIN ], - [ 47, Moves.FLARE_BLITZ ], - [ 52, Moves.ACROBATICS ], - [ 58, Moves.CALM_MIND ], - [ 65, Moves.RAGING_FURY ], + [ EVOLVE_MOVE, MoveId.CLOSE_COMBAT ], + [ RELEARN_MOVE, MoveId.TAUNT ], + [ RELEARN_MOVE, MoveId.NASTY_PLOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.FACADE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.SLACK_OFF ], + [ RELEARN_MOVE, MoveId.FLAMETHROWER ], // Previous Stage Move + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.MACH_PUNCH ], + [ 16, MoveId.FURY_SWIPES ], + [ 19, MoveId.FLAME_WHEEL ], + [ 26, MoveId.FEINT ], + [ 29, MoveId.TORMENT ], + [ 42, MoveId.FIRE_SPIN ], + [ 47, MoveId.FLARE_BLITZ ], + [ 52, MoveId.ACROBATICS ], + [ 58, MoveId.CALM_MIND ], + [ 65, MoveId.RAGING_FURY ], ], [Species.PIPLUP]: [ - [ 1, Moves.POUND ], - [ 4, Moves.GROWL ], - [ 5, Moves.WATER_GUN ], // Custom, moved from 8 to 5 - [ 11, Moves.CHARM ], - [ 15, Moves.PECK ], - [ 18, Moves.BUBBLE_BEAM ], - [ 22, Moves.SWAGGER ], - [ 25, Moves.FURY_ATTACK ], - [ 29, Moves.BRINE ], - [ 32, Moves.WHIRLPOOL ], - [ 36, Moves.MIST ], - [ 39, Moves.DRILL_PECK ], - [ 43, Moves.HYDRO_PUMP ], + [ 1, MoveId.POUND ], + [ 4, MoveId.GROWL ], + [ 5, MoveId.WATER_GUN ], // Custom, moved from 8 to 5 + [ 11, MoveId.CHARM ], + [ 15, MoveId.PECK ], + [ 18, MoveId.BUBBLE_BEAM ], + [ 22, MoveId.SWAGGER ], + [ 25, MoveId.FURY_ATTACK ], + [ 29, MoveId.BRINE ], + [ 32, MoveId.WHIRLPOOL ], + [ 36, MoveId.MIST ], + [ 39, MoveId.DRILL_PECK ], + [ 43, MoveId.HYDRO_PUMP ], ], [Species.PRINPLUP]: [ - [ EVOLVE_MOVE, Moves.METAL_CLAW ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.CHARM ], // Previous Stage Move - [ 15, Moves.PECK ], - [ 19, Moves.BUBBLE_BEAM ], - [ 24, Moves.SWAGGER ], - [ 28, Moves.FURY_ATTACK ], - [ 33, Moves.BRINE ], - [ 37, Moves.WHIRLPOOL ], - [ 42, Moves.MIST ], - [ 46, Moves.DRILL_PECK ], - [ 50, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.METAL_CLAW ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.CHARM ], // Previous Stage Move + [ 15, MoveId.PECK ], + [ 19, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.SWAGGER ], + [ 28, MoveId.FURY_ATTACK ], + [ 33, MoveId.BRINE ], + [ 37, MoveId.WHIRLPOOL ], + [ 42, MoveId.MIST ], + [ 46, MoveId.DRILL_PECK ], + [ 50, MoveId.HYDRO_PUMP ], ], [Species.EMPOLEON]: [ - [ EVOLVE_MOVE, Moves.AQUA_JET ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.CHARM ], // Previous Stage Move - [ 1, Moves.METAL_CLAW ], - [ 11, Moves.SWORDS_DANCE ], - [ 15, Moves.PECK ], - [ 19, Moves.BUBBLE_BEAM ], - [ 24, Moves.SWAGGER ], - [ 28, Moves.FURY_ATTACK ], - [ 33, Moves.BRINE ], - [ 39, Moves.WHIRLPOOL ], - [ 46, Moves.MIST ], - [ 52, Moves.DRILL_PECK ], - [ 59, Moves.HYDRO_PUMP ], - [ 66, Moves.WAVE_CRASH ], + [ EVOLVE_MOVE, MoveId.AQUA_JET ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.CHARM ], // Previous Stage Move + [ 1, MoveId.METAL_CLAW ], + [ 11, MoveId.SWORDS_DANCE ], + [ 15, MoveId.PECK ], + [ 19, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.SWAGGER ], + [ 28, MoveId.FURY_ATTACK ], + [ 33, MoveId.BRINE ], + [ 39, MoveId.WHIRLPOOL ], + [ 46, MoveId.MIST ], + [ 52, MoveId.DRILL_PECK ], + [ 59, MoveId.HYDRO_PUMP ], + [ 66, MoveId.WAVE_CRASH ], ], [Species.STARLY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.QUICK_ATTACK ], - [ 9, Moves.WING_ATTACK ], - [ 13, Moves.DOUBLE_TEAM ], - [ 17, Moves.ENDEAVOR ], - [ 21, Moves.WHIRLWIND ], - [ 25, Moves.AERIAL_ACE ], - [ 29, Moves.TAKE_DOWN ], - [ 33, Moves.AGILITY ], - [ 37, Moves.BRAVE_BIRD ], - [ 41, Moves.FINAL_GAMBIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.QUICK_ATTACK ], + [ 9, MoveId.WING_ATTACK ], + [ 13, MoveId.DOUBLE_TEAM ], + [ 17, MoveId.ENDEAVOR ], + [ 21, MoveId.WHIRLWIND ], + [ 25, MoveId.AERIAL_ACE ], + [ 29, MoveId.TAKE_DOWN ], + [ 33, MoveId.AGILITY ], + [ 37, MoveId.BRAVE_BIRD ], + [ 41, MoveId.FINAL_GAMBIT ], ], [Species.STARAVIA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 9, Moves.WING_ATTACK ], - [ 13, Moves.DOUBLE_TEAM ], - [ 18, Moves.ENDEAVOR ], - [ 23, Moves.WHIRLWIND ], - [ 28, Moves.AERIAL_ACE ], - [ 33, Moves.TAKE_DOWN ], - [ 38, Moves.AGILITY ], - [ 43, Moves.BRAVE_BIRD ], - [ 48, Moves.FINAL_GAMBIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 9, MoveId.WING_ATTACK ], + [ 13, MoveId.DOUBLE_TEAM ], + [ 18, MoveId.ENDEAVOR ], + [ 23, MoveId.WHIRLWIND ], + [ 28, MoveId.AERIAL_ACE ], + [ 33, MoveId.TAKE_DOWN ], + [ 38, MoveId.AGILITY ], + [ 43, MoveId.BRAVE_BIRD ], + [ 48, MoveId.FINAL_GAMBIT ], ], [Species.STARAPTOR]: [ - [ EVOLVE_MOVE, Moves.CLOSE_COMBAT ], - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 13, Moves.DOUBLE_TEAM ], - [ 18, Moves.ENDEAVOR ], - [ 23, Moves.WHIRLWIND ], - [ 28, Moves.AERIAL_ACE ], - [ 33, Moves.TAKE_DOWN ], - [ 41, Moves.AGILITY ], - [ 49, Moves.BRAVE_BIRD ], - [ 57, Moves.FINAL_GAMBIT ], + [ EVOLVE_MOVE, MoveId.CLOSE_COMBAT ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 13, MoveId.DOUBLE_TEAM ], + [ 18, MoveId.ENDEAVOR ], + [ 23, MoveId.WHIRLWIND ], + [ 28, MoveId.AERIAL_ACE ], + [ 33, MoveId.TAKE_DOWN ], + [ 41, MoveId.AGILITY ], + [ 49, MoveId.BRAVE_BIRD ], + [ 57, MoveId.FINAL_GAMBIT ], ], [Species.BIDOOF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.DEFENSE_CURL ], - [ 9, Moves.ROLLOUT ], - [ 13, Moves.HEADBUTT ], - [ 17, Moves.HYPER_FANG ], - [ 21, Moves.YAWN ], - [ 25, Moves.CRUNCH ], - [ 29, Moves.TAKE_DOWN ], - [ 33, Moves.SUPER_FANG ], - [ 37, Moves.SWORDS_DANCE ], - [ 41, Moves.AMNESIA ], - [ 45, Moves.SUPERPOWER ], - [ 49, Moves.CURSE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.DEFENSE_CURL ], + [ 9, MoveId.ROLLOUT ], + [ 13, MoveId.HEADBUTT ], + [ 17, MoveId.HYPER_FANG ], + [ 21, MoveId.YAWN ], + [ 25, MoveId.CRUNCH ], + [ 29, MoveId.TAKE_DOWN ], + [ 33, MoveId.SUPER_FANG ], + [ 37, MoveId.SWORDS_DANCE ], + [ 41, MoveId.AMNESIA ], + [ 45, MoveId.SUPERPOWER ], + [ 49, MoveId.CURSE ], ], [Species.BIBAREL]: [ - [ EVOLVE_MOVE, Moves.WATER_GUN ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.ROTOTILLER ], - [ 5, Moves.DEFENSE_CURL ], - [ 9, Moves.ROLLOUT ], - [ 13, Moves.HEADBUTT ], - [ 18, Moves.HYPER_FANG ], - [ 23, Moves.YAWN ], - [ 28, Moves.CRUNCH ], - [ 33, Moves.TAKE_DOWN ], - [ 38, Moves.SUPER_FANG ], - [ 43, Moves.SWORDS_DANCE ], - [ 48, Moves.AMNESIA ], - [ 53, Moves.SUPERPOWER ], - [ 58, Moves.CURSE ], + [ EVOLVE_MOVE, MoveId.WATER_GUN ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.ROTOTILLER ], + [ 5, MoveId.DEFENSE_CURL ], + [ 9, MoveId.ROLLOUT ], + [ 13, MoveId.HEADBUTT ], + [ 18, MoveId.HYPER_FANG ], + [ 23, MoveId.YAWN ], + [ 28, MoveId.CRUNCH ], + [ 33, MoveId.TAKE_DOWN ], + [ 38, MoveId.SUPER_FANG ], + [ 43, MoveId.SWORDS_DANCE ], + [ 48, MoveId.AMNESIA ], + [ 53, MoveId.SUPERPOWER ], + [ 58, MoveId.CURSE ], ], [Species.KRICKETOT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.BIDE ], - [ 6, Moves.STRUGGLE_BUG ], - [ 16, Moves.BUG_BITE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.BIDE ], + [ 6, MoveId.STRUGGLE_BUG ], + [ 16, MoveId.BUG_BITE ], ], [Species.KRICKETUNE]: [ - [ EVOLVE_MOVE, Moves.FURY_CUTTER ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.BIDE ], - [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move - [ 1, Moves.BUG_BITE ], // Previous Stage Move - [ 14, Moves.ABSORB ], - [ 18, Moves.SING ], - [ 22, Moves.FOCUS_ENERGY ], - [ 26, Moves.SLASH ], - [ 30, Moves.X_SCISSOR ], - [ 34, Moves.SCREECH ], - [ 36, Moves.FELL_STINGER ], - [ 38, Moves.TAUNT ], - [ 42, Moves.NIGHT_SLASH ], - [ 44, Moves.STICKY_WEB ], - [ 46, Moves.BUG_BUZZ ], - [ 50, Moves.PERISH_SONG ], + [ EVOLVE_MOVE, MoveId.FURY_CUTTER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.STRUGGLE_BUG ], // Previous Stage Move + [ 1, MoveId.BUG_BITE ], // Previous Stage Move + [ 14, MoveId.ABSORB ], + [ 18, MoveId.SING ], + [ 22, MoveId.FOCUS_ENERGY ], + [ 26, MoveId.SLASH ], + [ 30, MoveId.X_SCISSOR ], + [ 34, MoveId.SCREECH ], + [ 36, MoveId.FELL_STINGER ], + [ 38, MoveId.TAUNT ], + [ 42, MoveId.NIGHT_SLASH ], + [ 44, MoveId.STICKY_WEB ], + [ 46, MoveId.BUG_BUZZ ], + [ 50, MoveId.PERISH_SONG ], ], [Species.SHINX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.THUNDER_SHOCK ], - [ 8, Moves.CHARGE ], - [ 12, Moves.BITE ], - [ 16, Moves.SPARK ], - [ 20, Moves.ROAR ], - [ 24, Moves.VOLT_SWITCH ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.THUNDER_WAVE ], - [ 36, Moves.CRUNCH ], - [ 40, Moves.DISCHARGE ], - [ 44, Moves.SWAGGER ], - [ 48, Moves.WILD_CHARGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.BITE ], + [ 16, MoveId.SPARK ], + [ 20, MoveId.ROAR ], + [ 24, MoveId.VOLT_SWITCH ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.THUNDER_WAVE ], + [ 36, MoveId.CRUNCH ], + [ 40, MoveId.DISCHARGE ], + [ 44, MoveId.SWAGGER ], + [ 48, MoveId.WILD_CHARGE ], ], [Species.LUXIO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.CHARGE ], - [ 12, Moves.BITE ], - [ 18, Moves.SPARK ], - [ 24, Moves.ROAR ], - [ 31, Moves.VOLT_SWITCH ], - [ 36, Moves.SCARY_FACE ], - [ 42, Moves.THUNDER_WAVE ], - [ 48, Moves.CRUNCH ], - [ 54, Moves.DISCHARGE ], - [ 60, Moves.SWAGGER ], - [ 68, Moves.WILD_CHARGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.CHARGE ], + [ 12, MoveId.BITE ], + [ 18, MoveId.SPARK ], + [ 24, MoveId.ROAR ], + [ 31, MoveId.VOLT_SWITCH ], + [ 36, MoveId.SCARY_FACE ], + [ 42, MoveId.THUNDER_WAVE ], + [ 48, MoveId.CRUNCH ], + [ 54, MoveId.DISCHARGE ], + [ 60, MoveId.SWAGGER ], + [ 68, MoveId.WILD_CHARGE ], ], [Species.LUXRAY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.CHARGE ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 12, Moves.BITE ], - [ 18, Moves.SPARK ], - [ 24, Moves.ROAR ], - [ 33, Moves.VOLT_SWITCH ], - [ 40, Moves.SCARY_FACE ], - [ 48, Moves.THUNDER_WAVE ], - [ 56, Moves.CRUNCH ], - [ 64, Moves.DISCHARGE ], - [ 72, Moves.SWAGGER ], - [ 80, Moves.WILD_CHARGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 12, MoveId.BITE ], + [ 18, MoveId.SPARK ], + [ 24, MoveId.ROAR ], + [ 33, MoveId.VOLT_SWITCH ], + [ 40, MoveId.SCARY_FACE ], + [ 48, MoveId.THUNDER_WAVE ], + [ 56, MoveId.CRUNCH ], + [ 64, MoveId.DISCHARGE ], + [ 72, MoveId.SWAGGER ], + [ 80, MoveId.WILD_CHARGE ], ], [Species.BUDEW]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.WORRY_SEED ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.WORRY_SEED ], ], [Species.ROSERADE]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.PETAL_DANCE ], - [ 1, Moves.TOXIC ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.INGRAIN ], - [ 1, Moves.AROMATHERAPY ], - [ 1, Moves.MAGICAL_LEAF ], - [ 1, Moves.WORRY_SEED ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.PETAL_BLIZZARD ], - [ 1, Moves.GRASSY_TERRAIN ], - [ 1, Moves.VENOM_DRENCH ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.PETAL_DANCE ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.INGRAIN ], + [ 1, MoveId.AROMATHERAPY ], + [ 1, MoveId.MAGICAL_LEAF ], + [ 1, MoveId.WORRY_SEED ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.GRASSY_TERRAIN ], + [ 1, MoveId.VENOM_DRENCH ], ], [Species.CRANIDOS]: [ - [ 1, Moves.HEADBUTT ], - [ 1, Moves.LEER ], - [ 6, Moves.FOCUS_ENERGY ], - [ 10, Moves.PURSUIT ], - [ 15, Moves.TAKE_DOWN ], - [ 19, Moves.SCARY_FACE ], - [ 24, Moves.ASSURANCE ], - [ 28, Moves.CHIP_AWAY ], - [ 33, Moves.ANCIENT_POWER ], - [ 37, Moves.ZEN_HEADBUTT ], - [ 42, Moves.SCREECH ], - [ 46, Moves.HEAD_SMASH ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.LEER ], + [ 6, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.PURSUIT ], + [ 15, MoveId.TAKE_DOWN ], + [ 19, MoveId.SCARY_FACE ], + [ 24, MoveId.ASSURANCE ], + [ 28, MoveId.CHIP_AWAY ], + [ 33, MoveId.ANCIENT_POWER ], + [ 37, MoveId.ZEN_HEADBUTT ], + [ 42, MoveId.SCREECH ], + [ 46, MoveId.HEAD_SMASH ], ], [Species.RAMPARDOS]: [ - [ EVOLVE_MOVE, Moves.ENDEAVOR ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.PURSUIT ], - [ 15, Moves.TAKE_DOWN ], - [ 19, Moves.SCARY_FACE ], - [ 24, Moves.ASSURANCE ], - [ 28, Moves.CHIP_AWAY ], - [ 36, Moves.ANCIENT_POWER ], - [ 43, Moves.ZEN_HEADBUTT ], - [ 51, Moves.SCREECH ], - [ 58, Moves.HEAD_SMASH ], + [ EVOLVE_MOVE, MoveId.ENDEAVOR ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.PURSUIT ], + [ 15, MoveId.TAKE_DOWN ], + [ 19, MoveId.SCARY_FACE ], + [ 24, MoveId.ASSURANCE ], + [ 28, MoveId.CHIP_AWAY ], + [ 36, MoveId.ANCIENT_POWER ], + [ 43, MoveId.ZEN_HEADBUTT ], + [ 51, MoveId.SCREECH ], + [ 58, MoveId.HEAD_SMASH ], ], [Species.SHIELDON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 6, Moves.TAUNT ], - [ 10, Moves.METAL_SOUND ], - [ 15, Moves.TAKE_DOWN ], - [ 19, Moves.IRON_DEFENSE ], - [ 24, Moves.SWAGGER ], - [ 28, Moves.ANCIENT_POWER ], - [ 33, Moves.ENDURE ], - [ 37, Moves.METAL_BURST ], - [ 42, Moves.IRON_HEAD ], - [ 46, Moves.HEAVY_SLAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 6, MoveId.TAUNT ], + [ 10, MoveId.METAL_SOUND ], + [ 15, MoveId.TAKE_DOWN ], + [ 19, MoveId.IRON_DEFENSE ], + [ 24, MoveId.SWAGGER ], + [ 28, MoveId.ANCIENT_POWER ], + [ 33, MoveId.ENDURE ], + [ 37, MoveId.METAL_BURST ], + [ 42, MoveId.IRON_HEAD ], + [ 46, MoveId.HEAVY_SLAM ], ], [Species.BASTIODON]: [ - [ EVOLVE_MOVE, Moves.BLOCK ], - [ RELEARN_MOVE, Moves.WIDE_GUARD ], - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.TAUNT ], - [ 1, Moves.METAL_SOUND ], - [ 15, Moves.TAKE_DOWN ], - [ 19, Moves.IRON_DEFENSE ], - [ 24, Moves.SWAGGER ], - [ 28, Moves.ANCIENT_POWER ], - [ 36, Moves.ENDURE ], - [ 43, Moves.METAL_BURST ], - [ 51, Moves.IRON_HEAD ], - [ 58, Moves.HEAVY_SLAM ], + [ EVOLVE_MOVE, MoveId.BLOCK ], + [ RELEARN_MOVE, MoveId.WIDE_GUARD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.METAL_SOUND ], + [ 15, MoveId.TAKE_DOWN ], + [ 19, MoveId.IRON_DEFENSE ], + [ 24, MoveId.SWAGGER ], + [ 28, MoveId.ANCIENT_POWER ], + [ 36, MoveId.ENDURE ], + [ 43, MoveId.METAL_BURST ], + [ 51, MoveId.IRON_HEAD ], + [ 58, MoveId.HEAVY_SLAM ], ], [Species.BURMY]: [ - [ 1, Moves.PROTECT ], - [ 1, Moves.STRUGGLE_BUG ], // Custom - [ 10, Moves.TACKLE ], - [ 15, Moves.BUG_BITE ], - [ 20, Moves.STRING_SHOT ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.STRUGGLE_BUG ], // Custom + [ 10, MoveId.TACKLE ], + [ 15, MoveId.BUG_BITE ], + [ 20, MoveId.STRING_SHOT ], ], [Species.WORMADAM]: [ - [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], - [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move, Custom - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.PROTECT ], - [ 10, Moves.TACKLE ], - [ 20, Moves.STRING_SHOT ], - [ 23, Moves.CONFUSION ], - [ 26, Moves.RAZOR_LEAF ], - [ 29, Moves.GROWTH ], - [ 32, Moves.PSYBEAM ], - [ 35, Moves.INFESTATION ], - [ 38, Moves.FLAIL ], - [ 41, Moves.ATTRACT ], - [ 44, Moves.PSYCHIC ], - [ 47, Moves.LEAF_STORM ], - [ 50, Moves.BUG_BUZZ ], + [ EVOLVE_MOVE, MoveId.QUIVER_DANCE ], + [ 1, MoveId.STRUGGLE_BUG ], // Previous Stage Move, Custom + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.PROTECT ], + [ 10, MoveId.TACKLE ], + [ 20, MoveId.STRING_SHOT ], + [ 23, MoveId.CONFUSION ], + [ 26, MoveId.RAZOR_LEAF ], + [ 29, MoveId.GROWTH ], + [ 32, MoveId.PSYBEAM ], + [ 35, MoveId.INFESTATION ], + [ 38, MoveId.FLAIL ], + [ 41, MoveId.ATTRACT ], + [ 44, MoveId.PSYCHIC ], + [ 47, MoveId.LEAF_STORM ], + [ 50, MoveId.BUG_BUZZ ], ], [Species.MOTHIM]: [ - [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], - [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.BUG_BITE ], - [ 10, Moves.PROTECT ], - [ 15, Moves.BUG_BITE ], - [ 20, Moves.STRING_SHOT ], - [ 23, Moves.CONFUSION ], - [ 26, Moves.GUST ], - [ 29, Moves.POISON_POWDER ], - [ 32, Moves.PSYBEAM ], - [ 35, Moves.ROOST ], - [ 38, Moves.STRUGGLE_BUG ], - [ 41, Moves.AIR_SLASH ], - [ 44, Moves.PSYCHIC ], - [ 47, Moves.LUNGE ], - [ 50, Moves.BUG_BUZZ ], + [ EVOLVE_MOVE, MoveId.QUIVER_DANCE ], + [ 1, MoveId.STRUGGLE_BUG ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.BUG_BITE ], + [ 10, MoveId.PROTECT ], + [ 15, MoveId.BUG_BITE ], + [ 20, MoveId.STRING_SHOT ], + [ 23, MoveId.CONFUSION ], + [ 26, MoveId.GUST ], + [ 29, MoveId.POISON_POWDER ], + [ 32, MoveId.PSYBEAM ], + [ 35, MoveId.ROOST ], + [ 38, MoveId.STRUGGLE_BUG ], + [ 41, MoveId.AIR_SLASH ], + [ 44, MoveId.PSYCHIC ], + [ 47, MoveId.LUNGE ], + [ 50, MoveId.BUG_BUZZ ], ], [Species.COMBEE]: [ - [ 1, Moves.GUST ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.STRUGGLE_BUG ], + [ 1, MoveId.GUST ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.STRUGGLE_BUG ], ], [Species.VESPIQUEN]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.GUST ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.STRUGGLE_BUG ], - [ 4, Moves.FURY_CUTTER ], - [ 8, Moves.AROMATIC_MIST ], - [ 12, Moves.FELL_STINGER ], - [ 16, Moves.FURY_SWIPES ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.ROOST ], - [ 28, Moves.AIR_SLASH ], - [ 32, Moves.POWER_GEM ], - [ 36, Moves.TOXIC ], - [ 40, Moves.ATTACK_ORDER ], - [ 40, Moves.DEFEND_ORDER ], - [ 40, Moves.HEAL_ORDER ], - [ 44, Moves.DESTINY_BOND ], + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.GUST ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 4, MoveId.FURY_CUTTER ], + [ 8, MoveId.AROMATIC_MIST ], + [ 12, MoveId.FELL_STINGER ], + [ 16, MoveId.FURY_SWIPES ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.ROOST ], + [ 28, MoveId.AIR_SLASH ], + [ 32, MoveId.POWER_GEM ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.ATTACK_ORDER ], + [ 40, MoveId.DEFEND_ORDER ], + [ 40, MoveId.HEAL_ORDER ], + [ 44, MoveId.DESTINY_BOND ], ], [Species.PACHIRISU]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.BIDE ], - [ 5, Moves.QUICK_ATTACK ], - [ 9, Moves.CHARM ], - [ 13, Moves.SPARK ], - [ 17, Moves.ENDURE ], - [ 19, Moves.NUZZLE ], - [ 21, Moves.SWIFT ], - [ 25, Moves.ELECTRO_BALL ], - [ 29, Moves.SWEET_KISS ], - [ 33, Moves.THUNDER_WAVE ], - [ 37, Moves.SUPER_FANG ], - [ 41, Moves.DISCHARGE ], - [ 45, Moves.LAST_RESORT ], - [ 49, Moves.THUNDER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.BIDE ], + [ 5, MoveId.QUICK_ATTACK ], + [ 9, MoveId.CHARM ], + [ 13, MoveId.SPARK ], + [ 17, MoveId.ENDURE ], + [ 19, MoveId.NUZZLE ], + [ 21, MoveId.SWIFT ], + [ 25, MoveId.ELECTRO_BALL ], + [ 29, MoveId.SWEET_KISS ], + [ 33, MoveId.THUNDER_WAVE ], + [ 37, MoveId.SUPER_FANG ], + [ 41, MoveId.DISCHARGE ], + [ 45, MoveId.LAST_RESORT ], + [ 49, MoveId.THUNDER ], ], [Species.BUIZEL]: [ - [ 1, Moves.TACKLE ], - [ 4, Moves.GROWL ], - [ 7, Moves.SOAK ], - [ 11, Moves.QUICK_ATTACK ], - [ 15, Moves.WATER_GUN ], - [ 18, Moves.BITE ], - [ 21, Moves.SWIFT ], - [ 24, Moves.AQUA_JET ], - [ 27, Moves.DOUBLE_HIT ], - [ 31, Moves.WHIRLPOOL ], - [ 35, Moves.LIQUIDATION ], - [ 38, Moves.AQUA_TAIL ], - [ 41, Moves.AGILITY ], - [ 45, Moves.HYDRO_PUMP ], - [ 49, Moves.WAVE_CRASH ], + [ 1, MoveId.TACKLE ], + [ 4, MoveId.GROWL ], + [ 7, MoveId.SOAK ], + [ 11, MoveId.QUICK_ATTACK ], + [ 15, MoveId.WATER_GUN ], + [ 18, MoveId.BITE ], + [ 21, MoveId.SWIFT ], + [ 24, MoveId.AQUA_JET ], + [ 27, MoveId.DOUBLE_HIT ], + [ 31, MoveId.WHIRLPOOL ], + [ 35, MoveId.LIQUIDATION ], + [ 38, MoveId.AQUA_TAIL ], + [ 41, MoveId.AGILITY ], + [ 45, MoveId.HYDRO_PUMP ], + [ 49, MoveId.WAVE_CRASH ], ], [Species.FLOATZEL]: [ - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.SOAK ], - [ 15, Moves.WATER_GUN ], - [ 18, Moves.BITE ], - [ 21, Moves.SWIFT ], - [ 24, Moves.AQUA_JET ], - [ 29, Moves.DOUBLE_HIT ], - [ 35, Moves.WHIRLPOOL ], - [ 41, Moves.LIQUIDATION ], - [ 46, Moves.AQUA_TAIL ], - [ 51, Moves.AGILITY ], - [ 57, Moves.HYDRO_PUMP ], - [ 62, Moves.WAVE_CRASH ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.SOAK ], + [ 15, MoveId.WATER_GUN ], + [ 18, MoveId.BITE ], + [ 21, MoveId.SWIFT ], + [ 24, MoveId.AQUA_JET ], + [ 29, MoveId.DOUBLE_HIT ], + [ 35, MoveId.WHIRLPOOL ], + [ 41, MoveId.LIQUIDATION ], + [ 46, MoveId.AQUA_TAIL ], + [ 51, MoveId.AGILITY ], + [ 57, MoveId.HYDRO_PUMP ], + [ 62, MoveId.WAVE_CRASH ], ], [Species.CHERUBI]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.MORNING_SUN ], - [ 5, Moves.LEAFAGE ], - [ 10, Moves.GROWTH ], - [ 15, Moves.HELPING_HAND ], - [ 20, Moves.MAGICAL_LEAF ], - [ 26, Moves.LEECH_SEED ], - [ 30, Moves.TAKE_DOWN ], - [ 35, Moves.PETAL_BLIZZARD ], - [ 40, Moves.WORRY_SEED ], - [ 45, Moves.SOLAR_BEAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.MORNING_SUN ], + [ 5, MoveId.LEAFAGE ], + [ 10, MoveId.GROWTH ], + [ 15, MoveId.HELPING_HAND ], + [ 20, MoveId.MAGICAL_LEAF ], + [ 26, MoveId.LEECH_SEED ], + [ 30, MoveId.TAKE_DOWN ], + [ 35, MoveId.PETAL_BLIZZARD ], + [ 40, MoveId.WORRY_SEED ], + [ 45, MoveId.SOLAR_BEAM ], ], [Species.CHERRIM]: [ - [ EVOLVE_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWTH ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.FLOWER_SHIELD ], - [ 1, Moves.LEAFAGE ], - [ 15, Moves.HELPING_HAND ], - [ 20, Moves.MAGICAL_LEAF ], - [ 28, Moves.LEECH_SEED ], - [ 34, Moves.TAKE_DOWN ], - [ 41, Moves.PETAL_BLIZZARD ], - [ 48, Moves.WORRY_SEED ], - [ 55, Moves.SOLAR_BEAM ], - [ 62, Moves.PETAL_DANCE ], + [ EVOLVE_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.FLOWER_SHIELD ], + [ 1, MoveId.LEAFAGE ], + [ 15, MoveId.HELPING_HAND ], + [ 20, MoveId.MAGICAL_LEAF ], + [ 28, MoveId.LEECH_SEED ], + [ 34, MoveId.TAKE_DOWN ], + [ 41, MoveId.PETAL_BLIZZARD ], + [ 48, MoveId.WORRY_SEED ], + [ 55, MoveId.SOLAR_BEAM ], + [ 62, MoveId.PETAL_DANCE ], ], [Species.SHELLOS]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.MUD_SLAP ], - [ 5, Moves.HARDEN ], - [ 10, Moves.RECOVER ], - [ 15, Moves.WATER_PULSE ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.BODY_SLAM ], - [ 31, Moves.MUDDY_WATER ], - [ 35, Moves.EARTH_POWER ], - [ 40, Moves.RAIN_DANCE ], - [ 45, Moves.MEMENTO ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.MUD_SLAP ], + [ 5, MoveId.HARDEN ], + [ 10, MoveId.RECOVER ], + [ 15, MoveId.WATER_PULSE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.BODY_SLAM ], + [ 31, MoveId.MUDDY_WATER ], + [ 35, MoveId.EARTH_POWER ], + [ 40, MoveId.RAIN_DANCE ], + [ 45, MoveId.MEMENTO ], ], [Species.GASTRODON]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.RECOVER ], - [ 1, Moves.HARDEN ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.MUD_SPORT ], - [ 15, Moves.WATER_PULSE ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.BODY_SLAM ], - [ 33, Moves.MUDDY_WATER ], - [ 39, Moves.EARTH_POWER ], - [ 46, Moves.RAIN_DANCE ], - [ 53, Moves.MEMENTO ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.RECOVER ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.MUD_SPORT ], + [ 15, MoveId.WATER_PULSE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.BODY_SLAM ], + [ 33, MoveId.MUDDY_WATER ], + [ 39, MoveId.EARTH_POWER ], + [ 46, MoveId.RAIN_DANCE ], + [ 53, MoveId.MEMENTO ], ], [Species.AMBIPOM]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.ASTONISH ], - [ 11, Moves.BATON_PASS ], - [ 15, Moves.TICKLE ], - [ 18, Moves.FURY_SWIPES ], - [ 22, Moves.SWIFT ], - [ 25, Moves.SCREECH ], - [ 29, Moves.AGILITY ], - [ 32, Moves.DOUBLE_HIT ], - [ 36, Moves.FLING ], - [ 39, Moves.NASTY_PLOT ], - [ 43, Moves.LAST_RESORT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.ASTONISH ], + [ 11, MoveId.BATON_PASS ], + [ 15, MoveId.TICKLE ], + [ 18, MoveId.FURY_SWIPES ], + [ 22, MoveId.SWIFT ], + [ 25, MoveId.SCREECH ], + [ 29, MoveId.AGILITY ], + [ 32, MoveId.DOUBLE_HIT ], + [ 36, MoveId.FLING ], + [ 39, MoveId.NASTY_PLOT ], + [ 43, MoveId.LAST_RESORT ], ], [Species.DRIFLOON]: [ - [ 1, Moves.MINIMIZE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.CONSTRICT ], - [ 4, Moves.GUST ], - [ 8, Moves.FOCUS_ENERGY ], - [ 12, Moves.PAYBACK ], - [ 16, Moves.HEX ], - [ 20, Moves.SHADOW_BALL ], - [ 24, Moves.STOCKPILE ], - [ 24, Moves.SPIT_UP ], - [ 24, Moves.SWALLOW ], - [ 29, Moves.SELF_DESTRUCT ], - [ 32, Moves.DESTINY_BOND ], - [ 36, Moves.BATON_PASS ], - [ 40, Moves.TAILWIND ], - [ 44, Moves.EXPLOSION ], + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.CONSTRICT ], + [ 4, MoveId.GUST ], + [ 8, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.PAYBACK ], + [ 16, MoveId.HEX ], + [ 20, MoveId.SHADOW_BALL ], + [ 24, MoveId.STOCKPILE ], + [ 24, MoveId.SPIT_UP ], + [ 24, MoveId.SWALLOW ], + [ 29, MoveId.SELF_DESTRUCT ], + [ 32, MoveId.DESTINY_BOND ], + [ 36, MoveId.BATON_PASS ], + [ 40, MoveId.TAILWIND ], + [ 44, MoveId.EXPLOSION ], ], [Species.DRIFBLIM]: [ - [ EVOLVE_MOVE, Moves.PHANTOM_FORCE ], - [ 1, Moves.GUST ], - [ 1, Moves.MINIMIZE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.STRENGTH_SAP ], - [ 12, Moves.PAYBACK ], - [ 16, Moves.HEX ], - [ 20, Moves.SHADOW_BALL ], - [ 24, Moves.STOCKPILE ], - [ 24, Moves.SPIT_UP ], - [ 24, Moves.SWALLOW ], - [ 31, Moves.SELF_DESTRUCT ], - [ 36, Moves.DESTINY_BOND ], - [ 42, Moves.BATON_PASS ], - [ 48, Moves.TAILWIND ], - [ 54, Moves.EXPLOSION ], + [ EVOLVE_MOVE, MoveId.PHANTOM_FORCE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.STRENGTH_SAP ], + [ 12, MoveId.PAYBACK ], + [ 16, MoveId.HEX ], + [ 20, MoveId.SHADOW_BALL ], + [ 24, MoveId.STOCKPILE ], + [ 24, MoveId.SPIT_UP ], + [ 24, MoveId.SWALLOW ], + [ 31, MoveId.SELF_DESTRUCT ], + [ 36, MoveId.DESTINY_BOND ], + [ 42, MoveId.BATON_PASS ], + [ 48, MoveId.TAILWIND ], + [ 54, MoveId.EXPLOSION ], ], [Species.BUNEARY]: [ - [ 1, Moves.FRUSTRATION ], - [ 1, Moves.POUND ], - [ 1, Moves.SPLASH ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.BABY_DOLL_EYES ], - [ 12, Moves.AFTER_YOU ], - [ 16, Moves.QUICK_ATTACK ], - [ 20, Moves.DOUBLE_KICK ], - [ 24, Moves.CHARM ], - [ 28, Moves.BATON_PASS ], - [ 32, Moves.HEADBUTT ], - [ 36, Moves.AGILITY ], - [ 40, Moves.ENTRAINMENT ], - [ 44, Moves.FLATTER ], - [ 48, Moves.BOUNCE ], - [ 52, Moves.HEALING_WISH ], + [ 1, MoveId.FRUSTRATION ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SPLASH ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.BABY_DOLL_EYES ], + [ 12, MoveId.AFTER_YOU ], + [ 16, MoveId.QUICK_ATTACK ], + [ 20, MoveId.DOUBLE_KICK ], + [ 24, MoveId.CHARM ], + [ 28, MoveId.BATON_PASS ], + [ 32, MoveId.HEADBUTT ], + [ 36, MoveId.AGILITY ], + [ 40, MoveId.ENTRAINMENT ], + [ 44, MoveId.FLATTER ], + [ 48, MoveId.BOUNCE ], + [ 52, MoveId.HEALING_WISH ], ], [Species.LOPUNNY]: [ - [ EVOLVE_MOVE, Moves.RETURN ], - [ 1, Moves.FRUSTRATION ], // Previous Stage Move - [ 1, Moves.POUND ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SPLASH ], - [ 1, Moves.MIRROR_COAT ], - [ 1, Moves.MAGIC_COAT ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 1, Moves.ROTOTILLER ], - [ 12, Moves.AFTER_YOU ], - [ 16, Moves.QUICK_ATTACK ], - [ 20, Moves.DOUBLE_KICK ], - [ 24, Moves.CHARM ], - [ 28, Moves.BATON_PASS ], - [ 32, Moves.HEADBUTT ], - [ 36, Moves.AGILITY ], - [ 40, Moves.ENTRAINMENT ], - [ 44, Moves.FLATTER ], - [ 48, Moves.BOUNCE ], - [ 52, Moves.HEALING_WISH ], - [ 56, Moves.HIGH_JUMP_KICK ], + [ EVOLVE_MOVE, MoveId.RETURN ], + [ 1, MoveId.FRUSTRATION ], // Previous Stage Move + [ 1, MoveId.POUND ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.MIRROR_COAT ], + [ 1, MoveId.MAGIC_COAT ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 1, MoveId.ROTOTILLER ], + [ 12, MoveId.AFTER_YOU ], + [ 16, MoveId.QUICK_ATTACK ], + [ 20, MoveId.DOUBLE_KICK ], + [ 24, MoveId.CHARM ], + [ 28, MoveId.BATON_PASS ], + [ 32, MoveId.HEADBUTT ], + [ 36, MoveId.AGILITY ], + [ 40, MoveId.ENTRAINMENT ], + [ 44, MoveId.FLATTER ], + [ 48, MoveId.BOUNCE ], + [ 52, MoveId.HEALING_WISH ], + [ 56, MoveId.HIGH_JUMP_KICK ], ], [Species.MISMAGIUS]: [ // Previous Stage Relearn Learnset - [ RELEARN_MOVE, Moves.CONFUSION ], - [ RELEARN_MOVE, Moves.CONFUSE_RAY ], - [ RELEARN_MOVE, Moves.MEAN_LOOK ], - [ RELEARN_MOVE, Moves.HEX ], - [ RELEARN_MOVE, Moves.PSYBEAM ], - [ RELEARN_MOVE, Moves.PAIN_SPLIT ], - [ RELEARN_MOVE, Moves.PAYBACK ], - [ RELEARN_MOVE, Moves.SHADOW_BALL ], - [ RELEARN_MOVE, Moves.PERISH_SONG ], - [ 1, Moves.GROWL ], - [ 1, Moves.SPITE ], - [ 1, Moves.PSYWAVE ], - [ 1, Moves.LUCKY_CHANT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.MAGICAL_LEAF ], - [ 1, Moves.POWER_GEM ], - [ 1, Moves.PHANTOM_FORCE ], - [ 1, Moves.MYSTICAL_FIRE ], + [ RELEARN_MOVE, MoveId.CONFUSION ], + [ RELEARN_MOVE, MoveId.CONFUSE_RAY ], + [ RELEARN_MOVE, MoveId.MEAN_LOOK ], + [ RELEARN_MOVE, MoveId.HEX ], + [ RELEARN_MOVE, MoveId.PSYBEAM ], + [ RELEARN_MOVE, MoveId.PAIN_SPLIT ], + [ RELEARN_MOVE, MoveId.PAYBACK ], + [ RELEARN_MOVE, MoveId.SHADOW_BALL ], + [ RELEARN_MOVE, MoveId.PERISH_SONG ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.PSYWAVE ], + [ 1, MoveId.LUCKY_CHANT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.MAGICAL_LEAF ], + [ 1, MoveId.POWER_GEM ], + [ 1, MoveId.PHANTOM_FORCE ], + [ 1, MoveId.MYSTICAL_FIRE ], ], [Species.HONCHKROW]: [ - [ 1, Moves.PECK ], // Previous Stage Move - [ 1, Moves.ASTONISH ], - [ 1, Moves.GUST ], // Previous Stage Move - [ 1, Moves.HAZE ], - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.NIGHT_SHADE ], // Previous Stage Move - [ 1, Moves.ASSURANCE ], // Previous Stage Move - [ 1, Moves.TAUNT ], // Previous Stage Move - [ 1, Moves.MEAN_LOOK ], // Previous Stage Move - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.TORMENT ], // Previous Stage Move - [ 1, Moves.QUASH ], - [ 1, Moves.PURSUIT ], - [ 25, Moves.SWAGGER ], - [ 35, Moves.NASTY_PLOT ], - [ 45, Moves.FOUL_PLAY ], - [ 55, Moves.DARK_PULSE ], - [ 65, Moves.COMEUPPANCE ], + [ 1, MoveId.PECK ], // Previous Stage Move + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.GUST ], // Previous Stage Move + [ 1, MoveId.HAZE ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.NIGHT_SHADE ], // Previous Stage Move + [ 1, MoveId.ASSURANCE ], // Previous Stage Move + [ 1, MoveId.TAUNT ], // Previous Stage Move + [ 1, MoveId.MEAN_LOOK ], // Previous Stage Move + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.TORMENT ], // Previous Stage Move + [ 1, MoveId.QUASH ], + [ 1, MoveId.PURSUIT ], + [ 25, MoveId.SWAGGER ], + [ 35, MoveId.NASTY_PLOT ], + [ 45, MoveId.FOUL_PLAY ], + [ 55, MoveId.DARK_PULSE ], + [ 65, MoveId.COMEUPPANCE ], ], [Species.GLAMEOW]: [ - [ 1, Moves.FAKE_OUT ], - [ 5, Moves.SCRATCH ], - [ 8, Moves.GROWL ], - [ 13, Moves.HYPNOSIS ], - [ 17, Moves.AERIAL_ACE ], - [ 20, Moves.FURY_SWIPES ], - [ 25, Moves.CHARM ], - [ 29, Moves.TAUNT ], - [ 32, Moves.RETALIATE ], - [ 37, Moves.SLASH ], - [ 41, Moves.SUCKER_PUNCH ], - [ 44, Moves.ATTRACT ], - [ 48, Moves.HONE_CLAWS ], - [ 50, Moves.PLAY_ROUGH ], + [ 1, MoveId.FAKE_OUT ], + [ 5, MoveId.SCRATCH ], + [ 8, MoveId.GROWL ], + [ 13, MoveId.HYPNOSIS ], + [ 17, MoveId.AERIAL_ACE ], + [ 20, MoveId.FURY_SWIPES ], + [ 25, MoveId.CHARM ], + [ 29, MoveId.TAUNT ], + [ 32, MoveId.RETALIATE ], + [ 37, MoveId.SLASH ], + [ 41, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.ATTRACT ], + [ 48, MoveId.HONE_CLAWS ], + [ 50, MoveId.PLAY_ROUGH ], ], [Species.PURUGLY]: [ - [ EVOLVE_MOVE, Moves.SWAGGER ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.PLAY_ROUGH ], - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 13, Moves.HYPNOSIS ], - [ 17, Moves.AERIAL_ACE ], - [ 20, Moves.FURY_SWIPES ], - [ 25, Moves.CHARM ], - [ 29, Moves.TAUNT ], - [ 32, Moves.RETALIATE ], - [ 37, Moves.SLASH ], - [ 45, Moves.BODY_SLAM ], - [ 52, Moves.ATTRACT ], - [ 60, Moves.HONE_CLAWS ], + [ EVOLVE_MOVE, MoveId.SWAGGER ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.PLAY_ROUGH ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 13, MoveId.HYPNOSIS ], + [ 17, MoveId.AERIAL_ACE ], + [ 20, MoveId.FURY_SWIPES ], + [ 25, MoveId.CHARM ], + [ 29, MoveId.TAUNT ], + [ 32, MoveId.RETALIATE ], + [ 37, MoveId.SLASH ], + [ 45, MoveId.BODY_SLAM ], + [ 52, MoveId.ATTRACT ], + [ 60, MoveId.HONE_CLAWS ], ], [Species.CHINGLING]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.PSYWAVE ], // Custom - [ 4, Moves.GROWL ], - [ 7, Moves.ASTONISH ], - [ 10, Moves.CONFUSION ], - [ 13, Moves.YAWN ], - [ 16, Moves.LAST_RESORT ], - [ 19, Moves.ENTRAINMENT ], - [ 32, Moves.UPROAR ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.PSYWAVE ], // Custom + [ 4, MoveId.GROWL ], + [ 7, MoveId.ASTONISH ], + [ 10, MoveId.CONFUSION ], + [ 13, MoveId.YAWN ], + [ 16, MoveId.LAST_RESORT ], + [ 19, MoveId.ENTRAINMENT ], + [ 32, MoveId.UPROAR ], ], [Species.STUNKY]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.POISON_GAS ], - [ 3, Moves.FEINT ], - [ 6, Moves.SMOKESCREEN ], - [ 9, Moves.ACID_SPRAY ], - [ 12, Moves.FURY_SWIPES ], - [ 15, Moves.FOCUS_ENERGY ], - [ 18, Moves.BITE ], - [ 21, Moves.VENOSHOCK ], - [ 24, Moves.SCREECH ], - [ 27, Moves.TOXIC ], - [ 30, Moves.SUCKER_PUNCH ], - [ 33, Moves.MEMENTO ], - [ 36, Moves.NIGHT_SLASH ], - [ 39, Moves.BELCH ], - [ 42, Moves.EXPLOSION ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.POISON_GAS ], + [ 3, MoveId.FEINT ], + [ 6, MoveId.SMOKESCREEN ], + [ 9, MoveId.ACID_SPRAY ], + [ 12, MoveId.FURY_SWIPES ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.BITE ], + [ 21, MoveId.VENOSHOCK ], + [ 24, MoveId.SCREECH ], + [ 27, MoveId.TOXIC ], + [ 30, MoveId.SUCKER_PUNCH ], + [ 33, MoveId.MEMENTO ], + [ 36, MoveId.NIGHT_SLASH ], + [ 39, MoveId.BELCH ], + [ 42, MoveId.EXPLOSION ], ], [Species.SKUNTANK]: [ - [ EVOLVE_MOVE, Moves.FLAMETHROWER ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.FEINT ], - [ 1, Moves.ACID_SPRAY ], // Previous Stage Move - [ 12, Moves.FURY_SWIPES ], - [ 15, Moves.FOCUS_ENERGY ], - [ 18, Moves.BITE ], - [ 21, Moves.VENOSHOCK ], - [ 24, Moves.SCREECH ], - [ 27, Moves.TOXIC ], - [ 30, Moves.SUCKER_PUNCH ], - [ 33, Moves.MEMENTO ], - [ 38, Moves.NIGHT_SLASH ], - [ 43, Moves.BELCH ], - [ 48, Moves.EXPLOSION ], + [ EVOLVE_MOVE, MoveId.FLAMETHROWER ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.ACID_SPRAY ], // Previous Stage Move + [ 12, MoveId.FURY_SWIPES ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.BITE ], + [ 21, MoveId.VENOSHOCK ], + [ 24, MoveId.SCREECH ], + [ 27, MoveId.TOXIC ], + [ 30, MoveId.SUCKER_PUNCH ], + [ 33, MoveId.MEMENTO ], + [ 38, MoveId.NIGHT_SLASH ], + [ 43, MoveId.BELCH ], + [ 48, MoveId.EXPLOSION ], ], [Species.BRONZOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CONFUSION ], - [ 4, Moves.CONFUSE_RAY ], - [ 8, Moves.PAYBACK ], - [ 12, Moves.IMPRISON ], - [ 16, Moves.GYRO_BALL ], - [ 20, Moves.HYPNOSIS ], - [ 24, Moves.SAFEGUARD ], - [ 28, Moves.EXTRASENSORY ], - [ 32, Moves.HEAVY_SLAM ], - [ 36, Moves.IRON_DEFENSE ], - [ 40, Moves.METAL_SOUND ], - [ 44, Moves.FUTURE_SIGHT ], - [ 45, Moves.HEAL_BLOCK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CONFUSION ], + [ 4, MoveId.CONFUSE_RAY ], + [ 8, MoveId.PAYBACK ], + [ 12, MoveId.IMPRISON ], + [ 16, MoveId.GYRO_BALL ], + [ 20, MoveId.HYPNOSIS ], + [ 24, MoveId.SAFEGUARD ], + [ 28, MoveId.EXTRASENSORY ], + [ 32, MoveId.HEAVY_SLAM ], + [ 36, MoveId.IRON_DEFENSE ], + [ 40, MoveId.METAL_SOUND ], + [ 44, MoveId.FUTURE_SIGHT ], + [ 45, MoveId.HEAL_BLOCK ], ], [Species.BRONZONG]: [ - [ EVOLVE_MOVE, Moves.BLOCK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.WEATHER_BALL ], - [ 1, Moves.PAYBACK ], - [ 12, Moves.IMPRISON ], - [ 16, Moves.GYRO_BALL ], - [ 20, Moves.HYPNOSIS ], - [ 24, Moves.SAFEGUARD ], - [ 28, Moves.EXTRASENSORY ], - [ 32, Moves.HEAVY_SLAM ], - [ 38, Moves.IRON_DEFENSE ], - [ 44, Moves.METAL_SOUND ], - [ 50, Moves.FUTURE_SIGHT ], - [ 52, Moves.HEAL_BLOCK ], - [ 56, Moves.RAIN_DANCE ], + [ EVOLVE_MOVE, MoveId.BLOCK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.WEATHER_BALL ], + [ 1, MoveId.PAYBACK ], + [ 12, MoveId.IMPRISON ], + [ 16, MoveId.GYRO_BALL ], + [ 20, MoveId.HYPNOSIS ], + [ 24, MoveId.SAFEGUARD ], + [ 28, MoveId.EXTRASENSORY ], + [ 32, MoveId.HEAVY_SLAM ], + [ 38, MoveId.IRON_DEFENSE ], + [ 44, MoveId.METAL_SOUND ], + [ 50, MoveId.FUTURE_SIGHT ], + [ 52, MoveId.HEAL_BLOCK ], + [ 56, MoveId.RAIN_DANCE ], ], [Species.BONSLY]: [ - [ 1, Moves.FAKE_TEARS ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.TACKLE ], // Custom - [ 4, Moves.FLAIL ], - [ 8, Moves.ROCK_THROW ], - [ 12, Moves.BLOCK ], - [ 16, Moves.MIMIC ], - [ 20, Moves.ROCK_TOMB ], - [ 24, Moves.TEARFUL_LOOK ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.ROCK_SLIDE ], - [ 36, Moves.LOW_KICK ], - [ 40, Moves.COUNTER ], - [ 44, Moves.DOUBLE_EDGE ], + [ 1, MoveId.FAKE_TEARS ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.TACKLE ], // Custom + [ 4, MoveId.FLAIL ], + [ 8, MoveId.ROCK_THROW ], + [ 12, MoveId.BLOCK ], + [ 16, MoveId.MIMIC ], + [ 20, MoveId.ROCK_TOMB ], + [ 24, MoveId.TEARFUL_LOOK ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.ROCK_SLIDE ], + [ 36, MoveId.LOW_KICK ], + [ 40, MoveId.COUNTER ], + [ 44, MoveId.DOUBLE_EDGE ], ], [Species.MIME_JR]: [ - [ 1, Moves.POUND ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.BARRIER ], - [ 1, Moves.TICKLE ], //USUM - [ 4, Moves.BATON_PASS ], - [ 8, Moves.ENCORE ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.MIMIC ], // Custom, swapped with Role Play to be closer to USUM - [ 20, Moves.PROTECT ], - [ 24, Moves.RECYCLE ], - [ 28, Moves.PSYBEAM ], - [ 32, Moves.ROLE_PLAY ], // Custom, swapped with Mimic - [ 36, Moves.LIGHT_SCREEN ], - [ 36, Moves.REFLECT ], - [ 36, Moves.SAFEGUARD ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.DAZZLING_GLEAM ], - [ 48, Moves.PSYCHIC ], - [ 52, Moves.TEETER_DANCE ], + [ 1, MoveId.POUND ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.BARRIER ], + [ 1, MoveId.TICKLE ], //USUM + [ 4, MoveId.BATON_PASS ], + [ 8, MoveId.ENCORE ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.MIMIC ], // Custom, swapped with Role Play to be closer to USUM + [ 20, MoveId.PROTECT ], + [ 24, MoveId.RECYCLE ], + [ 28, MoveId.PSYBEAM ], + [ 32, MoveId.ROLE_PLAY ], // Custom, swapped with Mimic + [ 36, MoveId.LIGHT_SCREEN ], + [ 36, MoveId.REFLECT ], + [ 36, MoveId.SAFEGUARD ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.DAZZLING_GLEAM ], + [ 48, MoveId.PSYCHIC ], + [ 52, MoveId.TEETER_DANCE ], ], [Species.HAPPINY]: [ - [ 1, Moves.POUND ], - [ 1, Moves.COPYCAT ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.SWEET_KISS ], - [ 12, Moves.DISARMING_VOICE ], - [ 16, Moves.COVET ], - [ 20, Moves.CHARM ], + [ 1, MoveId.POUND ], + [ 1, MoveId.COPYCAT ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.SWEET_KISS ], + [ 12, MoveId.DISARMING_VOICE ], + [ 16, MoveId.COVET ], + [ 20, MoveId.CHARM ], ], [Species.CHATOT]: [ - [ 1, Moves.PECK ], - [ 1, Moves.TAUNT ], - [ 1, Moves.HYPER_VOICE ], - [ 1, Moves.CHATTER ], - [ 1, Moves.CONFIDE ], - [ 5, Moves.GROWL ], - [ 9, Moves.MIRROR_MOVE ], - [ 13, Moves.SING ], - [ 17, Moves.FURY_ATTACK ], - [ 29, Moves.ROUND ], - [ 33, Moves.MIMIC ], - [ 37, Moves.ECHOED_VOICE ], - [ 41, Moves.ROOST ], - [ 45, Moves.UPROAR ], - [ 49, Moves.SYNCHRONOISE ], - [ 50, Moves.FEATHER_DANCE ], + [ 1, MoveId.PECK ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.HYPER_VOICE ], + [ 1, MoveId.CHATTER ], + [ 1, MoveId.CONFIDE ], + [ 5, MoveId.GROWL ], + [ 9, MoveId.MIRROR_MOVE ], + [ 13, MoveId.SING ], + [ 17, MoveId.FURY_ATTACK ], + [ 29, MoveId.ROUND ], + [ 33, MoveId.MIMIC ], + [ 37, MoveId.ECHOED_VOICE ], + [ 41, MoveId.ROOST ], + [ 45, MoveId.UPROAR ], + [ 49, MoveId.SYNCHRONOISE ], + [ 50, MoveId.FEATHER_DANCE ], ], [Species.SPIRITOMB]: [ - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.PURSUIT ], - [ 5, Moves.SHADOW_SNEAK ], - [ 10, Moves.SPITE ], - [ 15, Moves.PAYBACK ], - [ 20, Moves.NASTY_PLOT ], - [ 25, Moves.HEX ], - [ 30, Moves.MEMENTO ], - [ 35, Moves.SUCKER_PUNCH ], - [ 40, Moves.CURSE ], - [ 45, Moves.SHADOW_BALL ], - [ 50, Moves.DARK_PULSE ], - [ 55, Moves.HYPNOSIS ], - [ 60, Moves.DREAM_EATER ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.PURSUIT ], + [ 5, MoveId.SHADOW_SNEAK ], + [ 10, MoveId.SPITE ], + [ 15, MoveId.PAYBACK ], + [ 20, MoveId.NASTY_PLOT ], + [ 25, MoveId.HEX ], + [ 30, MoveId.MEMENTO ], + [ 35, MoveId.SUCKER_PUNCH ], + [ 40, MoveId.CURSE ], + [ 45, MoveId.SHADOW_BALL ], + [ 50, MoveId.DARK_PULSE ], + [ 55, MoveId.HYPNOSIS ], + [ 60, MoveId.DREAM_EATER ], ], [Species.GIBLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SAND_TOMB ], - [ 6, Moves.SAND_ATTACK ], - [ 12, Moves.DRAGON_BREATH ], - [ 18, Moves.BULLDOZE ], - [ 25, Moves.BITE ], - [ 30, Moves.SLASH ], - [ 36, Moves.DRAGON_CLAW ], - [ 42, Moves.DIG ], - [ 48, Moves.SANDSTORM ], - [ 54, Moves.TAKE_DOWN ], - [ 60, Moves.DRAGON_RUSH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SAND_TOMB ], + [ 6, MoveId.SAND_ATTACK ], + [ 12, MoveId.DRAGON_BREATH ], + [ 18, MoveId.BULLDOZE ], + [ 25, MoveId.BITE ], + [ 30, MoveId.SLASH ], + [ 36, MoveId.DRAGON_CLAW ], + [ 42, MoveId.DIG ], + [ 48, MoveId.SANDSTORM ], + [ 54, MoveId.TAKE_DOWN ], + [ 60, MoveId.DRAGON_RUSH ], ], [Species.GABITE]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.SAND_TOMB ], - [ 1, Moves.DUAL_CHOP ], - [ 18, Moves.BULLDOZE ], - [ 27, Moves.BITE ], - [ 34, Moves.SLASH ], - [ 42, Moves.DRAGON_CLAW ], - [ 50, Moves.DIG ], - [ 58, Moves.SANDSTORM ], - [ 66, Moves.TAKE_DOWN ], - [ 74, Moves.DRAGON_RUSH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.SAND_TOMB ], + [ 1, MoveId.DUAL_CHOP ], + [ 18, MoveId.BULLDOZE ], + [ 27, MoveId.BITE ], + [ 34, MoveId.SLASH ], + [ 42, MoveId.DRAGON_CLAW ], + [ 50, MoveId.DIG ], + [ 58, MoveId.SANDSTORM ], + [ 66, MoveId.TAKE_DOWN ], + [ 74, MoveId.DRAGON_RUSH ], ], [Species.GARCHOMP]: [ - [ EVOLVE_MOVE, Moves.CRUNCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.SAND_TOMB ], - [ 1, Moves.DUAL_CHOP ], - [ 18, Moves.BULLDOZE ], - [ 27, Moves.BITE ], - [ 34, Moves.SLASH ], - [ 42, Moves.DRAGON_CLAW ], - [ 52, Moves.DIG ], - [ 62, Moves.SANDSTORM ], - [ 72, Moves.TAKE_DOWN ], - [ 82, Moves.DRAGON_RUSH ], + [ EVOLVE_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.SAND_TOMB ], + [ 1, MoveId.DUAL_CHOP ], + [ 18, MoveId.BULLDOZE ], + [ 27, MoveId.BITE ], + [ 34, MoveId.SLASH ], + [ 42, MoveId.DRAGON_CLAW ], + [ 52, MoveId.DIG ], + [ 62, MoveId.SANDSTORM ], + [ 72, MoveId.TAKE_DOWN ], + [ 82, MoveId.DRAGON_RUSH ], ], [Species.MUNCHLAX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LICK ], - [ 1, Moves.ODOR_SLEUTH ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.RECYCLE ], - [ 12, Moves.COVET ], - [ 16, Moves.BITE ], - [ 20, Moves.STOCKPILE ], - [ 20, Moves.SWALLOW ], - [ 24, Moves.SCREECH ], - [ 28, Moves.BODY_SLAM ], - [ 32, Moves.FLING ], - [ 36, Moves.AMNESIA ], - [ 40, Moves.METRONOME ], - [ 44, Moves.FLAIL ], - [ 48, Moves.BELLY_DRUM ], - [ 52, Moves.LAST_RESORT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LICK ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.RECYCLE ], + [ 12, MoveId.COVET ], + [ 16, MoveId.BITE ], + [ 20, MoveId.STOCKPILE ], + [ 20, MoveId.SWALLOW ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.BODY_SLAM ], + [ 32, MoveId.FLING ], + [ 36, MoveId.AMNESIA ], + [ 40, MoveId.METRONOME ], + [ 44, MoveId.FLAIL ], + [ 48, MoveId.BELLY_DRUM ], + [ 52, MoveId.LAST_RESORT ], ], [Species.RIOLU]: [ - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ENDURE ], - [ 4, Moves.FEINT ], - [ 8, Moves.METAL_CLAW ], - [ 12, Moves.COUNTER ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.ROCK_SMASH ], - [ 24, Moves.VACUUM_WAVE ], - [ 28, Moves.SCREECH ], - [ 32, Moves.QUICK_GUARD ], - [ 36, Moves.FORCE_PALM ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.HELPING_HAND ], - [ 48, Moves.COPYCAT ], - [ 52, Moves.FINAL_GAMBIT ], - [ 56, Moves.REVERSAL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ENDURE ], + [ 4, MoveId.FEINT ], + [ 8, MoveId.METAL_CLAW ], + [ 12, MoveId.COUNTER ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.ROCK_SMASH ], + [ 24, MoveId.VACUUM_WAVE ], + [ 28, MoveId.SCREECH ], + [ 32, MoveId.QUICK_GUARD ], + [ 36, MoveId.FORCE_PALM ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.HELPING_HAND ], + [ 48, MoveId.COPYCAT ], + [ 52, MoveId.FINAL_GAMBIT ], + [ 56, MoveId.REVERSAL ], ], [Species.LUCARIO]: [ - [ EVOLVE_MOVE, Moves.AURA_SPHERE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ENDURE ], // Previous Stage Move - [ 1, Moves.SCREECH ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.DETECT ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.FEINT ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.VACUUM_WAVE ], - [ 1, Moves.FINAL_GAMBIT ], - [ 1, Moves.LIFE_DEW ], - [ 12, Moves.COUNTER ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.FORCE_PALM ], - [ 24, Moves.CALM_MIND ], - [ 28, Moves.METAL_SOUND ], - [ 32, Moves.QUICK_GUARD ], - [ 36, Moves.BONE_RUSH ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.HEAL_PULSE ], - [ 48, Moves.METEOR_MASH ], - [ 52, Moves.DRAGON_PULSE ], - [ 56, Moves.EXTREME_SPEED ], - [ 60, Moves.CLOSE_COMBAT ], + [ EVOLVE_MOVE, MoveId.AURA_SPHERE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ENDURE ], // Previous Stage Move + [ 1, MoveId.SCREECH ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.DETECT ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.VACUUM_WAVE ], + [ 1, MoveId.FINAL_GAMBIT ], + [ 1, MoveId.LIFE_DEW ], + [ 12, MoveId.COUNTER ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.FORCE_PALM ], + [ 24, MoveId.CALM_MIND ], + [ 28, MoveId.METAL_SOUND ], + [ 32, MoveId.QUICK_GUARD ], + [ 36, MoveId.BONE_RUSH ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.HEAL_PULSE ], + [ 48, MoveId.METEOR_MASH ], + [ 52, MoveId.DRAGON_PULSE ], + [ 56, MoveId.EXTREME_SPEED ], + [ 60, MoveId.CLOSE_COMBAT ], ], [Species.HIPPOPOTAS]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 4, Moves.BITE ], - [ 8, Moves.YAWN ], - [ 12, Moves.SAND_TOMB ], - [ 16, Moves.DIG ], - [ 20, Moves.CRUNCH ], - [ 24, Moves.SANDSTORM ], - [ 28, Moves.TAKE_DOWN ], - [ 32, Moves.ROAR ], - [ 36, Moves.REST ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.DOUBLE_EDGE ], - [ 48, Moves.FISSURE ], - [ 52, Moves.SLACK_OFF ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 4, MoveId.BITE ], + [ 8, MoveId.YAWN ], + [ 12, MoveId.SAND_TOMB ], + [ 16, MoveId.DIG ], + [ 20, MoveId.CRUNCH ], + [ 24, MoveId.SANDSTORM ], + [ 28, MoveId.TAKE_DOWN ], + [ 32, MoveId.ROAR ], + [ 36, MoveId.REST ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.DOUBLE_EDGE ], + [ 48, MoveId.FISSURE ], + [ 52, MoveId.SLACK_OFF ], ], [Species.HIPPOWDON]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.YAWN ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 12, Moves.SAND_TOMB ], - [ 16, Moves.DIG ], - [ 20, Moves.CRUNCH ], - [ 24, Moves.SANDSTORM ], - [ 28, Moves.TAKE_DOWN ], - [ 32, Moves.ROAR ], - [ 38, Moves.REST ], - [ 44, Moves.EARTHQUAKE ], - [ 50, Moves.DOUBLE_EDGE ], - [ 56, Moves.FISSURE ], - [ 62, Moves.SLACK_OFF ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 12, MoveId.SAND_TOMB ], + [ 16, MoveId.DIG ], + [ 20, MoveId.CRUNCH ], + [ 24, MoveId.SANDSTORM ], + [ 28, MoveId.TAKE_DOWN ], + [ 32, MoveId.ROAR ], + [ 38, MoveId.REST ], + [ 44, MoveId.EARTHQUAKE ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.FISSURE ], + [ 62, MoveId.SLACK_OFF ], ], [Species.SKORUPI]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 3, Moves.HONE_CLAWS ], - [ 6, Moves.FELL_STINGER ], - [ 9, Moves.POISON_FANG ], - [ 12, Moves.BITE ], - [ 15, Moves.TOXIC_SPIKES ], - [ 18, Moves.BUG_BITE ], - [ 21, Moves.VENOSHOCK ], - [ 24, Moves.KNOCK_OFF ], - [ 27, Moves.SCARY_FACE ], - [ 30, Moves.PIN_MISSILE ], - [ 33, Moves.TOXIC ], - [ 36, Moves.NIGHT_SLASH ], - [ 39, Moves.CROSS_POISON ], - [ 42, Moves.X_SCISSOR ], - [ 45, Moves.ACUPRESSURE ], - [ 48, Moves.CRUNCH ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 3, MoveId.HONE_CLAWS ], + [ 6, MoveId.FELL_STINGER ], + [ 9, MoveId.POISON_FANG ], + [ 12, MoveId.BITE ], + [ 15, MoveId.TOXIC_SPIKES ], + [ 18, MoveId.BUG_BITE ], + [ 21, MoveId.VENOSHOCK ], + [ 24, MoveId.KNOCK_OFF ], + [ 27, MoveId.SCARY_FACE ], + [ 30, MoveId.PIN_MISSILE ], + [ 33, MoveId.TOXIC ], + [ 36, MoveId.NIGHT_SLASH ], + [ 39, MoveId.CROSS_POISON ], + [ 42, MoveId.X_SCISSOR ], + [ 45, MoveId.ACUPRESSURE ], + [ 48, MoveId.CRUNCH ], ], [Species.DRAPION]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.FELL_STINGER ], - [ 9, Moves.POISON_FANG ], - [ 12, Moves.BITE ], - [ 15, Moves.TOXIC_SPIKES ], - [ 18, Moves.BUG_BITE ], - [ 21, Moves.VENOSHOCK ], - [ 24, Moves.KNOCK_OFF ], - [ 27, Moves.SCARY_FACE ], - [ 30, Moves.PIN_MISSILE ], - [ 33, Moves.TOXIC ], - [ 36, Moves.NIGHT_SLASH ], - [ 39, Moves.CROSS_POISON ], - [ 44, Moves.X_SCISSOR ], - [ 49, Moves.ACUPRESSURE ], - [ 54, Moves.CRUNCH ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.FELL_STINGER ], + [ 9, MoveId.POISON_FANG ], + [ 12, MoveId.BITE ], + [ 15, MoveId.TOXIC_SPIKES ], + [ 18, MoveId.BUG_BITE ], + [ 21, MoveId.VENOSHOCK ], + [ 24, MoveId.KNOCK_OFF ], + [ 27, MoveId.SCARY_FACE ], + [ 30, MoveId.PIN_MISSILE ], + [ 33, MoveId.TOXIC ], + [ 36, MoveId.NIGHT_SLASH ], + [ 39, MoveId.CROSS_POISON ], + [ 44, MoveId.X_SCISSOR ], + [ 49, MoveId.ACUPRESSURE ], + [ 54, MoveId.CRUNCH ], ], [Species.CROAGUNK]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.MUD_SLAP ], - [ 4, Moves.ASTONISH ], - [ 8, Moves.TAUNT ], - [ 12, Moves.FLATTER ], - [ 16, Moves.LOW_KICK ], - [ 20, Moves.VENOSHOCK ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.SWAGGER ], - [ 32, Moves.POISON_JAB ], - [ 36, Moves.TOXIC ], - [ 40, Moves.NASTY_PLOT ], - [ 44, Moves.SLUDGE_BOMB ], - [ 48, Moves.BELCH ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.MUD_SLAP ], + [ 4, MoveId.ASTONISH ], + [ 8, MoveId.TAUNT ], + [ 12, MoveId.FLATTER ], + [ 16, MoveId.LOW_KICK ], + [ 20, MoveId.VENOSHOCK ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.SWAGGER ], + [ 32, MoveId.POISON_JAB ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.NASTY_PLOT ], + [ 44, MoveId.SLUDGE_BOMB ], + [ 48, MoveId.BELCH ], ], [Species.TOXICROAK]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.TAUNT ], - [ 1, Moves.ASTONISH ], - [ 12, Moves.FLATTER ], - [ 16, Moves.LOW_KICK ], - [ 20, Moves.VENOSHOCK ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.SWAGGER ], - [ 32, Moves.POISON_JAB ], - [ 36, Moves.TOXIC ], - [ 42, Moves.NASTY_PLOT ], - [ 48, Moves.SLUDGE_BOMB ], - [ 54, Moves.BELCH ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.ASTONISH ], + [ 12, MoveId.FLATTER ], + [ 16, MoveId.LOW_KICK ], + [ 20, MoveId.VENOSHOCK ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.SWAGGER ], + [ 32, MoveId.POISON_JAB ], + [ 36, MoveId.TOXIC ], + [ 42, MoveId.NASTY_PLOT ], + [ 48, MoveId.SLUDGE_BOMB ], + [ 54, MoveId.BELCH ], ], [Species.CARNIVINE]: [ - [ 1, Moves.BIND ], - [ 1, Moves.GROWTH ], - [ 1, Moves.LEAFAGE ], // Custom - [ 7, Moves.BITE ], - [ 11, Moves.VINE_WHIP ], - [ 17, Moves.SWEET_SCENT ], - [ 21, Moves.INGRAIN ], - [ 27, Moves.GRASS_KNOT ], - [ 31, Moves.LEAF_TORNADO ], - [ 37, Moves.STOCKPILE ], - [ 37, Moves.SPIT_UP ], - [ 37, Moves.SWALLOW ], - [ 41, Moves.CRUNCH ], - [ 47, Moves.SEED_BOMB ], - [ 50, Moves.POWER_WHIP ], + [ 1, MoveId.BIND ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.LEAFAGE ], // Custom + [ 7, MoveId.BITE ], + [ 11, MoveId.VINE_WHIP ], + [ 17, MoveId.SWEET_SCENT ], + [ 21, MoveId.INGRAIN ], + [ 27, MoveId.GRASS_KNOT ], + [ 31, MoveId.LEAF_TORNADO ], + [ 37, MoveId.STOCKPILE ], + [ 37, MoveId.SPIT_UP ], + [ 37, MoveId.SWALLOW ], + [ 41, MoveId.CRUNCH ], + [ 47, MoveId.SEED_BOMB ], + [ 50, MoveId.POWER_WHIP ], ], [Species.FINNEON]: [ - [ 1, Moves.POUND ], - [ 6, Moves.WATER_GUN ], - [ 13, Moves.RAIN_DANCE ], - [ 17, Moves.GUST ], - [ 22, Moves.WATER_PULSE ], - [ 26, Moves.ATTRACT ], - [ 29, Moves.SAFEGUARD ], - [ 33, Moves.AQUA_RING ], - [ 38, Moves.WHIRLPOOL ], - [ 42, Moves.U_TURN ], - [ 45, Moves.BOUNCE ], - [ 49, Moves.TAILWIND ], - [ 54, Moves.SOAK ], + [ 1, MoveId.POUND ], + [ 6, MoveId.WATER_GUN ], + [ 13, MoveId.RAIN_DANCE ], + [ 17, MoveId.GUST ], + [ 22, MoveId.WATER_PULSE ], + [ 26, MoveId.ATTRACT ], + [ 29, MoveId.SAFEGUARD ], + [ 33, MoveId.AQUA_RING ], + [ 38, MoveId.WHIRLPOOL ], + [ 42, MoveId.U_TURN ], + [ 45, MoveId.BOUNCE ], + [ 49, MoveId.TAILWIND ], + [ 54, MoveId.SOAK ], ], [Species.LUMINEON]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GUST ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SOAK ], - [ 13, Moves.RAIN_DANCE ], - [ 22, Moves.WATER_PULSE ], - [ 26, Moves.ATTRACT ], - [ 29, Moves.SAFEGUARD ], - [ 35, Moves.AQUA_RING ], - [ 42, Moves.WHIRLPOOL ], - [ 48, Moves.U_TURN ], - [ 53, Moves.BOUNCE ], - [ 59, Moves.TAILWIND ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GUST ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SOAK ], + [ 13, MoveId.RAIN_DANCE ], + [ 22, MoveId.WATER_PULSE ], + [ 26, MoveId.ATTRACT ], + [ 29, MoveId.SAFEGUARD ], + [ 35, MoveId.AQUA_RING ], + [ 42, MoveId.WHIRLPOOL ], + [ 48, MoveId.U_TURN ], + [ 53, MoveId.BOUNCE ], + [ 59, MoveId.TAILWIND ], ], [Species.MANTYKE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.SUPERSONIC ], - [ 8, Moves.WING_ATTACK ], - [ 12, Moves.WATER_PULSE ], - [ 16, Moves.WIDE_GUARD ], - [ 20, Moves.AGILITY ], - [ 24, Moves.BUBBLE_BEAM ], - [ 28, Moves.HEADBUTT ], - [ 32, Moves.AIR_SLASH ], - [ 36, Moves.AQUA_RING ], - [ 40, Moves.BOUNCE ], - [ 44, Moves.TAKE_DOWN ], - [ 48, Moves.HYDRO_PUMP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.SUPERSONIC ], + [ 8, MoveId.WING_ATTACK ], + [ 12, MoveId.WATER_PULSE ], + [ 16, MoveId.WIDE_GUARD ], + [ 20, MoveId.AGILITY ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 28, MoveId.HEADBUTT ], + [ 32, MoveId.AIR_SLASH ], + [ 36, MoveId.AQUA_RING ], + [ 40, MoveId.BOUNCE ], + [ 44, MoveId.TAKE_DOWN ], + [ 48, MoveId.HYDRO_PUMP ], ], [Species.SNOVER]: [ - [ 1, Moves.LEER ], - [ 1, Moves.POWDER_SNOW ], - [ 5, Moves.LEAFAGE ], - [ 10, Moves.MIST ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.RAZOR_LEAF ], - [ 25, Moves.ICY_WIND ], - [ 30, Moves.SWAGGER ], - [ 35, Moves.INGRAIN ], - [ 41, Moves.WOOD_HAMMER ], - [ 45, Moves.BLIZZARD ], - [ 50, Moves.SHEER_COLD ], + [ 1, MoveId.LEER ], + [ 1, MoveId.POWDER_SNOW ], + [ 5, MoveId.LEAFAGE ], + [ 10, MoveId.MIST ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.RAZOR_LEAF ], + [ 25, MoveId.ICY_WIND ], + [ 30, MoveId.SWAGGER ], + [ 35, MoveId.INGRAIN ], + [ 41, MoveId.WOOD_HAMMER ], + [ 45, MoveId.BLIZZARD ], + [ 50, MoveId.SHEER_COLD ], ], [Species.ABOMASNOW]: [ - [ EVOLVE_MOVE, Moves.ICE_PUNCH ], - [ 1, Moves.LEER ], - [ 1, Moves.MIST ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.AURORA_VEIL ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.RAZOR_LEAF ], - [ 25, Moves.ICY_WIND ], - [ 30, Moves.SWAGGER ], - [ 35, Moves.INGRAIN ], - [ 43, Moves.WOOD_HAMMER ], - [ 49, Moves.BLIZZARD ], - [ 56, Moves.SHEER_COLD ], + [ EVOLVE_MOVE, MoveId.ICE_PUNCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.MIST ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.AURORA_VEIL ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.RAZOR_LEAF ], + [ 25, MoveId.ICY_WIND ], + [ 30, MoveId.SWAGGER ], + [ 35, MoveId.INGRAIN ], + [ 43, MoveId.WOOD_HAMMER ], + [ 49, MoveId.BLIZZARD ], + [ 56, MoveId.SHEER_COLD ], ], [Species.WEAVILE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.AGILITY ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SLASH ], - [ 1, Moves.BEAT_UP ], - [ 1, Moves.TAUNT ], - [ 1, Moves.ASSURANCE ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.EMBARGO ], - [ 18, Moves.METAL_CLAW ], - [ 24, Moves.ICY_WIND ], - [ 30, Moves.FURY_SWIPES ], - [ 36, Moves.HONE_CLAWS ], - [ 42, Moves.FLING ], - [ 48, Moves.NASTY_PLOT ], - [ 54, Moves.SCREECH ], - [ 60, Moves.NIGHT_SLASH ], - [ 66, Moves.DARK_PULSE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SLASH ], + [ 1, MoveId.BEAT_UP ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.ASSURANCE ], + [ 1, MoveId.ICE_SHARD ], + [ 1, MoveId.EMBARGO ], + [ 18, MoveId.METAL_CLAW ], + [ 24, MoveId.ICY_WIND ], + [ 30, MoveId.FURY_SWIPES ], + [ 36, MoveId.HONE_CLAWS ], + [ 42, MoveId.FLING ], + [ 48, MoveId.NASTY_PLOT ], + [ 54, MoveId.SCREECH ], + [ 60, MoveId.NIGHT_SLASH ], + [ 66, MoveId.DARK_PULSE ], ], [Species.MAGNEZONE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.BARRIER ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.MIRROR_COAT ], - [ 1, Moves.MAGNETIC_FLUX ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.GYRO_BALL ], - [ 20, Moves.SPARK ], - [ 24, Moves.SCREECH ], - [ 28, Moves.MAGNET_RISE ], - [ 34, Moves.FLASH_CANNON ], - [ 40, Moves.DISCHARGE ], - [ 46, Moves.METAL_SOUND ], - [ 52, Moves.LIGHT_SCREEN ], - [ 58, Moves.LOCK_ON ], - [ 64, Moves.ZAP_CANNON ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.BARRIER ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.MIRROR_COAT ], + [ 1, MoveId.MAGNETIC_FLUX ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.GYRO_BALL ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.MAGNET_RISE ], + [ 34, MoveId.FLASH_CANNON ], + [ 40, MoveId.DISCHARGE ], + [ 46, MoveId.METAL_SOUND ], + [ 52, MoveId.LIGHT_SCREEN ], + [ 58, MoveId.LOCK_ON ], + [ 64, MoveId.ZAP_CANNON ], ], [Species.LICKILICKY]: [ - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.LICK ], - [ 1, Moves.TACKLE ], // Previous Stage Move, Custom - [ 1, Moves.ROLLOUT ], - [ 1, Moves.WRING_OUT ], - [ 6, Moves.REST ], - [ 18, Moves.WRAP ], - [ 24, Moves.DISABLE ], - [ 30, Moves.STOMP ], - [ 36, Moves.KNOCK_OFF ], - [ 42, Moves.SCREECH ], - [ 48, Moves.SLAM ], - [ 54, Moves.POWER_WHIP ], - [ 60, Moves.BELLY_DRUM ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.LICK ], + [ 1, MoveId.TACKLE ], // Previous Stage Move, Custom + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.WRING_OUT ], + [ 6, MoveId.REST ], + [ 18, MoveId.WRAP ], + [ 24, MoveId.DISABLE ], + [ 30, MoveId.STOMP ], + [ 36, MoveId.KNOCK_OFF ], + [ 42, MoveId.SCREECH ], + [ 48, MoveId.SLAM ], + [ 54, MoveId.POWER_WHIP ], + [ 60, MoveId.BELLY_DRUM ], ], [Species.RHYPERIOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.HAMMER_ARM ], - [ 1, Moves.SMACK_DOWN ], - [ 1, Moves.BULLDOZE ], - [ 15, Moves.HORN_ATTACK ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.STOMP ], - [ 30, Moves.ROCK_BLAST ], - [ 35, Moves.DRILL_RUN ], - [ 40, Moves.TAKE_DOWN ], - [ 47, Moves.EARTHQUAKE ], - [ 54, Moves.STONE_EDGE ], - [ 61, Moves.MEGAHORN ], - [ 68, Moves.HORN_DRILL ], - [ 75, Moves.ROCK_WRECKER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.HAMMER_ARM ], + [ 1, MoveId.SMACK_DOWN ], + [ 1, MoveId.BULLDOZE ], + [ 15, MoveId.HORN_ATTACK ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.STOMP ], + [ 30, MoveId.ROCK_BLAST ], + [ 35, MoveId.DRILL_RUN ], + [ 40, MoveId.TAKE_DOWN ], + [ 47, MoveId.EARTHQUAKE ], + [ 54, MoveId.STONE_EDGE ], + [ 61, MoveId.MEGAHORN ], + [ 68, MoveId.HORN_DRILL ], + [ 75, MoveId.ROCK_WRECKER ], ], [Species.TANGROWTH]: [ - [ 1, Moves.BIND ], - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.BLOCK ], - [ 1, Moves.CONSTRICT ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.VINE_WHIP ], - [ 20, Moves.POISON_POWDER ], - [ 24, Moves.DOUBLE_HIT ], - [ 28, Moves.KNOCK_OFF ], - [ 32, Moves.GIGA_DRAIN ], - [ 34, Moves.ANCIENT_POWER ], - [ 36, Moves.SLEEP_POWDER ], - [ 40, Moves.SLAM ], - [ 44, Moves.TICKLE ], - [ 48, Moves.POWER_WHIP ], - [ 52, Moves.INGRAIN ], - [ 56, Moves.GRASSY_TERRAIN ], + [ 1, MoveId.BIND ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.BLOCK ], + [ 1, MoveId.CONSTRICT ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.VINE_WHIP ], + [ 20, MoveId.POISON_POWDER ], + [ 24, MoveId.DOUBLE_HIT ], + [ 28, MoveId.KNOCK_OFF ], + [ 32, MoveId.GIGA_DRAIN ], + [ 34, MoveId.ANCIENT_POWER ], + [ 36, MoveId.SLEEP_POWDER ], + [ 40, MoveId.SLAM ], + [ 44, MoveId.TICKLE ], + [ 48, MoveId.POWER_WHIP ], + [ 52, MoveId.INGRAIN ], + [ 56, MoveId.GRASSY_TERRAIN ], ], [Species.ELECTIVIRE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.CHARGE ], - [ 1, Moves.ION_DELUGE ], - [ 12, Moves.SWIFT ], - [ 16, Moves.SHOCK_WAVE ], - [ 20, Moves.THUNDER_WAVE ], - [ 24, Moves.SCREECH ], - [ 28, Moves.THUNDER_PUNCH ], - [ 34, Moves.DISCHARGE ], - [ 40, Moves.LOW_KICK ], - [ 46, Moves.THUNDERBOLT ], - [ 52, Moves.LIGHT_SCREEN ], - [ 58, Moves.THUNDER ], - [ 64, Moves.GIGA_IMPACT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.ION_DELUGE ], + [ 12, MoveId.SWIFT ], + [ 16, MoveId.SHOCK_WAVE ], + [ 20, MoveId.THUNDER_WAVE ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.THUNDER_PUNCH ], + [ 34, MoveId.DISCHARGE ], + [ 40, MoveId.LOW_KICK ], + [ 46, MoveId.THUNDERBOLT ], + [ 52, MoveId.LIGHT_SCREEN ], + [ 58, MoveId.THUNDER ], + [ 64, MoveId.GIGA_IMPACT ], ], [Species.MAGMORTAR]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.SMOG ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.FLAME_WHEEL ], - [ 20, Moves.CONFUSE_RAY ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.FIRE_PUNCH ], - [ 34, Moves.LAVA_PLUME ], - [ 40, Moves.LOW_KICK ], - [ 46, Moves.FLAMETHROWER ], - [ 52, Moves.SUNNY_DAY ], - [ 58, Moves.FIRE_BLAST ], - [ 64, Moves.HYPER_BEAM ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.SMOG ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.FLAME_WHEEL ], + [ 20, MoveId.CONFUSE_RAY ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.FIRE_PUNCH ], + [ 34, MoveId.LAVA_PLUME ], + [ 40, MoveId.LOW_KICK ], + [ 46, MoveId.FLAMETHROWER ], + [ 52, MoveId.SUNNY_DAY ], + [ 58, MoveId.FIRE_BLAST ], + [ 64, MoveId.HYPER_BEAM ], ], [Species.TOGEKISS]: [ - [ EVOLVE_MOVE, Moves.AIR_SLASH ], - [ 1, Moves.POUND ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.GROWL ], - [ 1, Moves.METRONOME ], - [ 1, Moves.SKY_ATTACK ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.EXTREME_SPEED ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.FOLLOW_ME ], - [ 1, Moves.WISH ], - [ 1, Moves.YAWN ], - [ 1, Moves.LAST_RESORT ], - [ 1, Moves.AURA_SPHERE ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.FAIRY_WIND ], - [ 1, Moves.LIFE_DEW ], + [ EVOLVE_MOVE, MoveId.AIR_SLASH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.METRONOME ], + [ 1, MoveId.SKY_ATTACK ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.EXTREME_SPEED ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.FOLLOW_ME ], + [ 1, MoveId.WISH ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.LAST_RESORT ], + [ 1, MoveId.AURA_SPHERE ], + [ 1, MoveId.AFTER_YOU ], + [ 1, MoveId.FAIRY_WIND ], + [ 1, MoveId.LIFE_DEW ], ], [Species.YANMEGA]: [ - [ RELEARN_MOVE, Moves.HYPNOSIS ], - [ 1, Moves.TACKLE ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.AIR_CUTTER ], // Previous Stage Move - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.WING_ATTACK ], // Previous Stage Move - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.BUG_BUZZ ], - [ 14, Moves.QUICK_ATTACK ], - [ 17, Moves.DETECT ], - [ 22, Moves.SUPERSONIC ], - [ 27, Moves.UPROAR ], - [ 30, Moves.BUG_BITE ], - [ 33, Moves.ANCIENT_POWER ], - [ 38, Moves.FEINT ], - [ 43, Moves.SLASH ], - [ 46, Moves.SCREECH ], - [ 49, Moves.U_TURN ], + [ RELEARN_MOVE, MoveId.HYPNOSIS ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.AIR_CUTTER ], // Previous Stage Move + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.WING_ATTACK ], // Previous Stage Move + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.BUG_BUZZ ], + [ 14, MoveId.QUICK_ATTACK ], + [ 17, MoveId.DETECT ], + [ 22, MoveId.SUPERSONIC ], + [ 27, MoveId.UPROAR ], + [ 30, MoveId.BUG_BITE ], + [ 33, MoveId.ANCIENT_POWER ], + [ 38, MoveId.FEINT ], + [ 43, MoveId.SLASH ], + [ 46, MoveId.SCREECH ], + [ 49, MoveId.U_TURN ], ], [Species.LEAFEON]: [ - [ EVOLVE_MOVE, Moves.SAPPY_SEED ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.RAZOR_LEAF ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.LEECH_SEED ], - [ 30, Moves.MAGICAL_LEAF ], - [ 35, Moves.SYNTHESIS ], - [ 40, Moves.SUNNY_DAY ], - [ 45, Moves.GIGA_DRAIN ], - [ 50, Moves.SWORDS_DANCE ], - [ 55, Moves.LEAF_BLADE ], - [ 60, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.SAPPY_SEED ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.RAZOR_LEAF ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.LEECH_SEED ], + [ 30, MoveId.MAGICAL_LEAF ], + [ 35, MoveId.SYNTHESIS ], + [ 40, MoveId.SUNNY_DAY ], + [ 45, MoveId.GIGA_DRAIN ], + [ 50, MoveId.SWORDS_DANCE ], + [ 55, MoveId.LEAF_BLADE ], + [ 60, MoveId.LAST_RESORT ], ], [Species.GLACEON]: [ - [ EVOLVE_MOVE, Moves.FREEZY_FROST ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.ICY_WIND ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.ICE_SHARD ], - [ 30, Moves.BITE ], - [ 35, Moves.ICE_FANG ], - [ 40, Moves.SNOWSCAPE ], - [ 45, Moves.FREEZE_DRY ], - [ 50, Moves.MIRROR_COAT ], - [ 55, Moves.BLIZZARD ], - [ 60, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.FREEZY_FROST ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SWIFT ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.ICY_WIND ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.ICE_SHARD ], + [ 30, MoveId.BITE ], + [ 35, MoveId.ICE_FANG ], + [ 40, MoveId.SNOWSCAPE ], + [ 45, MoveId.FREEZE_DRY ], + [ 50, MoveId.MIRROR_COAT ], + [ 55, MoveId.BLIZZARD ], + [ 60, MoveId.LAST_RESORT ], ], [Species.GLISCOR]: [ - [ 1, Moves.POISON_STING ], // Previous Stage Move - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POISON_TAIL ], // Previous Stage Move - [ 1, Moves.SLASH ], // Previous Stage Move - [ 1, Moves.POISON_JAB ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 13, Moves.QUICK_ATTACK ], - [ 16, Moves.FURY_CUTTER ], - [ 19, Moves.KNOCK_OFF ], - [ 22, Moves.ACROBATICS ], - [ 27, Moves.NIGHT_SLASH ], - [ 30, Moves.U_TURN ], - [ 35, Moves.SCREECH ], - [ 40, Moves.X_SCISSOR ], - [ 45, Moves.CRABHAMMER ], - [ 50, Moves.SWORDS_DANCE ], + [ 1, MoveId.POISON_STING ], // Previous Stage Move + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POISON_TAIL ], // Previous Stage Move + [ 1, MoveId.SLASH ], // Previous Stage Move + [ 1, MoveId.POISON_JAB ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 13, MoveId.QUICK_ATTACK ], + [ 16, MoveId.FURY_CUTTER ], + [ 19, MoveId.KNOCK_OFF ], + [ 22, MoveId.ACROBATICS ], + [ 27, MoveId.NIGHT_SLASH ], + [ 30, MoveId.U_TURN ], + [ 35, MoveId.SCREECH ], + [ 40, MoveId.X_SCISSOR ], + [ 45, MoveId.CRABHAMMER ], + [ 50, MoveId.SWORDS_DANCE ], ], [Species.MAMOSWINE]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FLAIL ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ODOR_SLEUTH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.ICE_FANG ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.MIST ], - [ 25, Moves.ENDURE ], - [ 30, Moves.ICY_WIND ], - [ 37, Moves.AMNESIA ], - [ 44, Moves.TAKE_DOWN ], - [ 51, Moves.EARTHQUAKE ], - [ 58, Moves.BLIZZARD ], - [ 65, Moves.THRASH ], + [ EVOLVE_MOVE, MoveId.DOUBLE_HIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ODOR_SLEUTH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.ICE_FANG ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.MIST ], + [ 25, MoveId.ENDURE ], + [ 30, MoveId.ICY_WIND ], + [ 37, MoveId.AMNESIA ], + [ 44, MoveId.TAKE_DOWN ], + [ 51, MoveId.EARTHQUAKE ], + [ 58, MoveId.BLIZZARD ], + [ 65, MoveId.THRASH ], ], [Species.PORYGON_Z]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.CONVERSION ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.MAGNET_RISE ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.TRICK_ROOM ], - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.CONVERSION_2 ], - [ 30, Moves.AGILITY ], - [ 35, Moves.RECOVER ], - [ 40, Moves.DISCHARGE ], - [ 45, Moves.TRI_ATTACK ], - [ 50, Moves.MAGIC_COAT ], - [ 55, Moves.LOCK_ON ], - [ 60, Moves.ZAP_CANNON ], - [ 65, Moves.HYPER_BEAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.CONVERSION ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.MAGNET_RISE ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.TRICK_ROOM ], + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.CONVERSION_2 ], + [ 30, MoveId.AGILITY ], + [ 35, MoveId.RECOVER ], + [ 40, MoveId.DISCHARGE ], + [ 45, MoveId.TRI_ATTACK ], + [ 50, MoveId.MAGIC_COAT ], + [ 55, MoveId.LOCK_ON ], + [ 60, MoveId.ZAP_CANNON ], + [ 65, MoveId.HYPER_BEAM ], ], [Species.GALLADE]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.PSYBEAM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.PSYCHIC ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.DREAM_EATER ], - [ 1, Moves.CHARM ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.FUTURE_SIGHT ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.CALM_MIND ], - [ 1, Moves.LEAF_BLADE ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.SACRED_SWORD ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.DRAINING_KISS ], - [ 1, Moves.LIFE_DEW ], - [ 1, Moves.AQUA_CUTTER ], - [ 9, Moves.HELPING_HAND ], - [ 12, Moves.FEINT ], - [ 15, Moves.TELEPORT ], - [ 18, Moves.AERIAL_ACE ], - [ 23, Moves.FALSE_SWIPE ], - [ 28, Moves.PROTECT ], - [ 35, Moves.SWORDS_DANCE ], - [ 42, Moves.PSYCHO_CUT ], - [ 49, Moves.HEAL_PULSE ], - [ 56, Moves.WIDE_GUARD ], - [ 56, Moves.QUICK_GUARD ], - [ 63, Moves.CLOSE_COMBAT ], + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PSYBEAM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.PSYCHIC ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.DREAM_EATER ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.FUTURE_SIGHT ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.CALM_MIND ], + [ 1, MoveId.LEAF_BLADE ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.SACRED_SWORD ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.DRAINING_KISS ], + [ 1, MoveId.LIFE_DEW ], + [ 1, MoveId.AQUA_CUTTER ], + [ 9, MoveId.HELPING_HAND ], + [ 12, MoveId.FEINT ], + [ 15, MoveId.TELEPORT ], + [ 18, MoveId.AERIAL_ACE ], + [ 23, MoveId.FALSE_SWIPE ], + [ 28, MoveId.PROTECT ], + [ 35, MoveId.SWORDS_DANCE ], + [ 42, MoveId.PSYCHO_CUT ], + [ 49, MoveId.HEAL_PULSE ], + [ 56, MoveId.WIDE_GUARD ], + [ 56, MoveId.QUICK_GUARD ], + [ 63, MoveId.CLOSE_COMBAT ], ], [Species.PROBOPASS]: [ - [ EVOLVE_MOVE, Moves.TRI_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], // Previous Stage Move - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.BLOCK ], - [ 1, Moves.ROCK_THROW ], // Previous Stage Move - [ 1, Moves.GRAVITY ], - [ 1, Moves.MAGNET_RISE ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.MAGNETIC_FLUX ], - [ 13, Moves.THUNDER_WAVE ], - [ 16, Moves.REST ], - [ 19, Moves.SPARK ], - [ 22, Moves.ROCK_SLIDE ], - [ 25, Moves.POWER_GEM ], - [ 28, Moves.ROCK_BLAST ], - [ 31, Moves.DISCHARGE ], - [ 34, Moves.SANDSTORM ], - [ 37, Moves.EARTH_POWER ], - [ 40, Moves.STONE_EDGE ], - [ 43, Moves.ZAP_CANNON ], - [ 43, Moves.LOCK_ON ], + [ EVOLVE_MOVE, MoveId.TRI_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], // Previous Stage Move + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.BLOCK ], + [ 1, MoveId.ROCK_THROW ], // Previous Stage Move + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.MAGNET_RISE ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.MAGNETIC_FLUX ], + [ 13, MoveId.THUNDER_WAVE ], + [ 16, MoveId.REST ], + [ 19, MoveId.SPARK ], + [ 22, MoveId.ROCK_SLIDE ], + [ 25, MoveId.POWER_GEM ], + [ 28, MoveId.ROCK_BLAST ], + [ 31, MoveId.DISCHARGE ], + [ 34, MoveId.SANDSTORM ], + [ 37, MoveId.EARTH_POWER ], + [ 40, MoveId.STONE_EDGE ], + [ 43, MoveId.ZAP_CANNON ], + [ 43, MoveId.LOCK_ON ], ], [Species.DUSKNOIR]: [ - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.ICE_PUNCH ], - [ 1, Moves.THUNDER_PUNCH ], - [ 1, Moves.BIND ], - [ 1, Moves.LEER ], - [ 1, Moves.DISABLE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.PURSUIT ], // Previous Stage Move, Custom - [ 1, Moves.SHADOW_PUNCH ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.SHADOW_SNEAK ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.NIGHT_SHADE ], - [ 20, Moves.PAYBACK ], - [ 24, Moves.WILL_O_WISP ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.HEX ], - [ 36, Moves.CURSE ], - [ 42, Moves.SHADOW_BALL ], - [ 48, Moves.FUTURE_SIGHT ], - [ 54, Moves.DESTINY_BOND ], + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.ICE_PUNCH ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.BIND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.PURSUIT ], // Previous Stage Move, Custom + [ 1, MoveId.SHADOW_PUNCH ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.NIGHT_SHADE ], + [ 20, MoveId.PAYBACK ], + [ 24, MoveId.WILL_O_WISP ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.HEX ], + [ 36, MoveId.CURSE ], + [ 42, MoveId.SHADOW_BALL ], + [ 48, MoveId.FUTURE_SIGHT ], + [ 54, MoveId.DESTINY_BOND ], ], [Species.FROSLASS]: [ - [ EVOLVE_MOVE, Moves.HEX ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.PROTECT ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.WEATHER_BALL ], // Previous Stage Move - [ 1, Moves.CRUNCH ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.OMINOUS_WIND ], - [ 15, Moves.ICE_SHARD ], - [ 20, Moves.DRAINING_KISS ], - [ 25, Moves.ICY_WIND ], - [ 30, Moves.FROST_BREATH ], - [ 35, Moves.CONFUSE_RAY ], - [ 40, Moves.SNOWSCAPE ], - [ 47, Moves.WILL_O_WISP ], - [ 54, Moves.AURORA_VEIL ], - [ 61, Moves.SHADOW_BALL ], - [ 68, Moves.BLIZZARD ], + [ EVOLVE_MOVE, MoveId.HEX ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.WEATHER_BALL ], // Previous Stage Move + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.OMINOUS_WIND ], + [ 15, MoveId.ICE_SHARD ], + [ 20, MoveId.DRAINING_KISS ], + [ 25, MoveId.ICY_WIND ], + [ 30, MoveId.FROST_BREATH ], + [ 35, MoveId.CONFUSE_RAY ], + [ 40, MoveId.SNOWSCAPE ], + [ 47, MoveId.WILL_O_WISP ], + [ 54, MoveId.AURORA_VEIL ], + [ 61, MoveId.SHADOW_BALL ], + [ 68, MoveId.BLIZZARD ], ], [Species.ROTOM]: [ - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], [Species.UXIE]: [ - [ RELEARN_MOVE, Moves.TRI_ATTACK ], - [ RELEARN_MOVE, Moves.SNORE ], - [ RELEARN_MOVE, Moves.SAFEGUARD ], - [ RELEARN_MOVE, Moves.IRON_TAIL ], - [ RELEARN_MOVE, Moves.PSYCHO_CUT ], - [ RELEARN_MOVE, Moves.WONDER_ROOM ], - [ RELEARN_MOVE, Moves.MAGIC_ROOM ], - [ RELEARN_MOVE, Moves.ROUND ], - [ RELEARN_MOVE, Moves.ALLY_SWITCH ], - [ RELEARN_MOVE, Moves.EXPANDING_FORCE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.REST ], - [ 7, Moves.SWIFT ], - [ 14, Moves.ENDURE ], - [ 21, Moves.PSYBEAM ], - [ 28, Moves.IMPRISON ], - [ 35, Moves.EXTRASENSORY ], - [ 42, Moves.AMNESIA ], - [ 49, Moves.PSYCHIC ], - [ 56, Moves.YAWN ], - [ 63, Moves.FUTURE_SIGHT ], - [ 70, Moves.FLAIL ], - [ 77, Moves.MEMENTO ], - [ 84, Moves.MYSTICAL_POWER ], + [ RELEARN_MOVE, MoveId.TRI_ATTACK ], + [ RELEARN_MOVE, MoveId.SNORE ], + [ RELEARN_MOVE, MoveId.SAFEGUARD ], + [ RELEARN_MOVE, MoveId.IRON_TAIL ], + [ RELEARN_MOVE, MoveId.PSYCHO_CUT ], + [ RELEARN_MOVE, MoveId.WONDER_ROOM ], + [ RELEARN_MOVE, MoveId.MAGIC_ROOM ], + [ RELEARN_MOVE, MoveId.ROUND ], + [ RELEARN_MOVE, MoveId.ALLY_SWITCH ], + [ RELEARN_MOVE, MoveId.EXPANDING_FORCE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.REST ], + [ 7, MoveId.SWIFT ], + [ 14, MoveId.ENDURE ], + [ 21, MoveId.PSYBEAM ], + [ 28, MoveId.IMPRISON ], + [ 35, MoveId.EXTRASENSORY ], + [ 42, MoveId.AMNESIA ], + [ 49, MoveId.PSYCHIC ], + [ 56, MoveId.YAWN ], + [ 63, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.FLAIL ], + [ 77, MoveId.MEMENTO ], + [ 84, MoveId.MYSTICAL_POWER ], ], [Species.MESPRIT]: [ - [ RELEARN_MOVE, Moves.TRI_ATTACK ], - [ RELEARN_MOVE, Moves.SNORE ], - [ RELEARN_MOVE, Moves.SAFEGUARD ], - [ RELEARN_MOVE, Moves.IRON_TAIL ], - [ RELEARN_MOVE, Moves.PSYCHO_CUT ], - [ RELEARN_MOVE, Moves.WONDER_ROOM ], - [ RELEARN_MOVE, Moves.MAGIC_ROOM ], - [ RELEARN_MOVE, Moves.ROUND ], - [ RELEARN_MOVE, Moves.ALLY_SWITCH ], - [ RELEARN_MOVE, Moves.EXPANDING_FORCE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.REST ], - [ 7, Moves.SWIFT ], - [ 14, Moves.PROTECT ], - [ 21, Moves.PSYBEAM ], - [ 28, Moves.IMPRISON ], - [ 35, Moves.EXTRASENSORY ], - [ 42, Moves.CHARM ], - [ 49, Moves.PSYCHIC ], - [ 56, Moves.FLATTER ], - [ 63, Moves.FUTURE_SIGHT ], - [ 70, Moves.COPYCAT ], - [ 77, Moves.HEALING_WISH ], - [ 84, Moves.MYSTICAL_POWER ], + [ RELEARN_MOVE, MoveId.TRI_ATTACK ], + [ RELEARN_MOVE, MoveId.SNORE ], + [ RELEARN_MOVE, MoveId.SAFEGUARD ], + [ RELEARN_MOVE, MoveId.IRON_TAIL ], + [ RELEARN_MOVE, MoveId.PSYCHO_CUT ], + [ RELEARN_MOVE, MoveId.WONDER_ROOM ], + [ RELEARN_MOVE, MoveId.MAGIC_ROOM ], + [ RELEARN_MOVE, MoveId.ROUND ], + [ RELEARN_MOVE, MoveId.ALLY_SWITCH ], + [ RELEARN_MOVE, MoveId.EXPANDING_FORCE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.REST ], + [ 7, MoveId.SWIFT ], + [ 14, MoveId.PROTECT ], + [ 21, MoveId.PSYBEAM ], + [ 28, MoveId.IMPRISON ], + [ 35, MoveId.EXTRASENSORY ], + [ 42, MoveId.CHARM ], + [ 49, MoveId.PSYCHIC ], + [ 56, MoveId.FLATTER ], + [ 63, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.COPYCAT ], + [ 77, MoveId.HEALING_WISH ], + [ 84, MoveId.MYSTICAL_POWER ], ], [Species.AZELF]: [ - [ RELEARN_MOVE, Moves.SELF_DESTRUCT ], - [ RELEARN_MOVE, Moves.TRI_ATTACK ], - [ RELEARN_MOVE, Moves.SNORE ], - [ RELEARN_MOVE, Moves.SAFEGUARD ], - [ RELEARN_MOVE, Moves.IRON_TAIL ], - [ RELEARN_MOVE, Moves.PAYBACK ], - [ RELEARN_MOVE, Moves.ASSURANCE ], - [ RELEARN_MOVE, Moves.PSYCHO_CUT ], - [ RELEARN_MOVE, Moves.WONDER_ROOM ], - [ RELEARN_MOVE, Moves.MAGIC_ROOM ], - [ RELEARN_MOVE, Moves.ROUND ], - [ RELEARN_MOVE, Moves.ALLY_SWITCH ], - [ RELEARN_MOVE, Moves.EXPANDING_FORCE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.REST ], - [ 7, Moves.SWIFT ], - [ 14, Moves.DETECT ], - [ 21, Moves.PSYBEAM ], - [ 28, Moves.IMPRISON ], - [ 35, Moves.EXTRASENSORY ], - [ 42, Moves.NASTY_PLOT ], - [ 49, Moves.PSYCHIC ], - [ 56, Moves.UPROAR ], - [ 63, Moves.FUTURE_SIGHT ], - [ 70, Moves.LAST_RESORT ], - [ 77, Moves.EXPLOSION ], - [ 84, Moves.MYSTICAL_POWER ], + [ RELEARN_MOVE, MoveId.SELF_DESTRUCT ], + [ RELEARN_MOVE, MoveId.TRI_ATTACK ], + [ RELEARN_MOVE, MoveId.SNORE ], + [ RELEARN_MOVE, MoveId.SAFEGUARD ], + [ RELEARN_MOVE, MoveId.IRON_TAIL ], + [ RELEARN_MOVE, MoveId.PAYBACK ], + [ RELEARN_MOVE, MoveId.ASSURANCE ], + [ RELEARN_MOVE, MoveId.PSYCHO_CUT ], + [ RELEARN_MOVE, MoveId.WONDER_ROOM ], + [ RELEARN_MOVE, MoveId.MAGIC_ROOM ], + [ RELEARN_MOVE, MoveId.ROUND ], + [ RELEARN_MOVE, MoveId.ALLY_SWITCH ], + [ RELEARN_MOVE, MoveId.EXPANDING_FORCE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.REST ], + [ 7, MoveId.SWIFT ], + [ 14, MoveId.DETECT ], + [ 21, MoveId.PSYBEAM ], + [ 28, MoveId.IMPRISON ], + [ 35, MoveId.EXTRASENSORY ], + [ 42, MoveId.NASTY_PLOT ], + [ 49, MoveId.PSYCHIC ], + [ 56, MoveId.UPROAR ], + [ 63, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.LAST_RESORT ], + [ 77, MoveId.EXPLOSION ], + [ 84, MoveId.MYSTICAL_POWER ], ], [Species.DIALGA]: [ - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.METAL_CLAW ], - [ 8, Moves.DRAGON_BREATH ], - [ 16, Moves.ANCIENT_POWER ], - [ 24, Moves.SLASH ], - [ 32, Moves.FLASH_CANNON ], - [ 40, Moves.DRAGON_CLAW ], - [ 48, Moves.AURA_SPHERE ], - [ 56, Moves.POWER_GEM ], - [ 64, Moves.METAL_BURST ], - [ 72, Moves.EARTH_POWER ], - [ 80, Moves.IRON_TAIL ], - [ 88, Moves.ROAR_OF_TIME ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.METAL_CLAW ], + [ 8, MoveId.DRAGON_BREATH ], + [ 16, MoveId.ANCIENT_POWER ], + [ 24, MoveId.SLASH ], + [ 32, MoveId.FLASH_CANNON ], + [ 40, MoveId.DRAGON_CLAW ], + [ 48, MoveId.AURA_SPHERE ], + [ 56, MoveId.POWER_GEM ], + [ 64, MoveId.METAL_BURST ], + [ 72, MoveId.EARTH_POWER ], + [ 80, MoveId.IRON_TAIL ], + [ 88, MoveId.ROAR_OF_TIME ], ], [Species.PALKIA]: [ - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.WATER_PULSE ], - [ 8, Moves.DRAGON_BREATH ], - [ 16, Moves.ANCIENT_POWER ], - [ 24, Moves.SLASH ], - [ 32, Moves.AQUA_RING ], - [ 48, Moves.AURA_SPHERE ], - [ 56, Moves.POWER_GEM ], - [ 64, Moves.AQUA_TAIL ], - [ 72, Moves.EARTH_POWER ], - [ 80, Moves.SPACIAL_REND ], - [ 88, Moves.HYDRO_PUMP ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.WATER_PULSE ], + [ 8, MoveId.DRAGON_BREATH ], + [ 16, MoveId.ANCIENT_POWER ], + [ 24, MoveId.SLASH ], + [ 32, MoveId.AQUA_RING ], + [ 48, MoveId.AURA_SPHERE ], + [ 56, MoveId.POWER_GEM ], + [ 64, MoveId.AQUA_TAIL ], + [ 72, MoveId.EARTH_POWER ], + [ 80, MoveId.SPACIAL_REND ], + [ 88, MoveId.HYDRO_PUMP ], ], [Species.HEATRAN]: [ - [ 1, Moves.LEER ], - [ 1, Moves.FIRE_SPIN ], - [ 6, Moves.METAL_CLAW ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.FIRE_FANG ], - [ 24, Moves.SCARY_FACE ], - [ 30, Moves.IRON_HEAD ], - [ 36, Moves.CRUNCH ], - [ 42, Moves.LAVA_PLUME ], - [ 48, Moves.METAL_SOUND ], - [ 54, Moves.EARTH_POWER ], - [ 60, Moves.HEAT_WAVE ], - [ 66, Moves.STONE_EDGE ], - [ 72, Moves.MAGMA_STORM ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FIRE_SPIN ], + [ 6, MoveId.METAL_CLAW ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.FIRE_FANG ], + [ 24, MoveId.SCARY_FACE ], + [ 30, MoveId.IRON_HEAD ], + [ 36, MoveId.CRUNCH ], + [ 42, MoveId.LAVA_PLUME ], + [ 48, MoveId.METAL_SOUND ], + [ 54, MoveId.EARTH_POWER ], + [ 60, MoveId.HEAT_WAVE ], + [ 66, MoveId.STONE_EDGE ], + [ 72, MoveId.MAGMA_STORM ], ], [Species.REGIGIGAS]: [ - [ 1, Moves.POUND ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.DIZZY_PUNCH ], - [ 1, Moves.FORESIGHT ], - [ 6, Moves.PAYBACK ], - [ 12, Moves.REVENGE ], - [ 18, Moves.STOMP ], - [ 24, Moves.PROTECT ], - [ 30, Moves.KNOCK_OFF ], - [ 36, Moves.MEGA_PUNCH ], - [ 42, Moves.BODY_PRESS ], - [ 48, Moves.WIDE_GUARD ], - [ 54, Moves.ZEN_HEADBUTT ], - [ 60, Moves.HEAVY_SLAM ], - [ 66, Moves.HAMMER_ARM ], - [ 72, Moves.GIGA_IMPACT ], - [ 78, Moves.CRUSH_GRIP ], + [ 1, MoveId.POUND ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.DIZZY_PUNCH ], + [ 1, MoveId.FORESIGHT ], + [ 6, MoveId.PAYBACK ], + [ 12, MoveId.REVENGE ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.PROTECT ], + [ 30, MoveId.KNOCK_OFF ], + [ 36, MoveId.MEGA_PUNCH ], + [ 42, MoveId.BODY_PRESS ], + [ 48, MoveId.WIDE_GUARD ], + [ 54, MoveId.ZEN_HEADBUTT ], + [ 60, MoveId.HEAVY_SLAM ], + [ 66, MoveId.HAMMER_ARM ], + [ 72, MoveId.GIGA_IMPACT ], + [ 78, MoveId.CRUSH_GRIP ], ], [Species.GIRATINA]: [ - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.DEFOG ], - [ 1, Moves.DRAGON_BREATH ], //USUM - [ 7, Moves.OMINOUS_WIND ], //USUM - [ 14, Moves.ANCIENT_POWER ], - [ 21, Moves.HEX ], - [ 28, Moves.SLASH ], - [ 35, Moves.SCARY_FACE ], - [ 42, Moves.SHADOW_CLAW ], - [ 49, Moves.PAIN_SPLIT ], - [ 56, Moves.AURA_SPHERE ], - [ 63, Moves.DRAGON_CLAW ], - [ 70, Moves.EARTH_POWER ], - [ 77, Moves.SHADOW_FORCE ], - [ 84, Moves.DESTINY_BOND ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 1, MoveId.DEFOG ], + [ 1, MoveId.DRAGON_BREATH ], //USUM + [ 7, MoveId.OMINOUS_WIND ], //USUM + [ 14, MoveId.ANCIENT_POWER ], + [ 21, MoveId.HEX ], + [ 28, MoveId.SLASH ], + [ 35, MoveId.SCARY_FACE ], + [ 42, MoveId.SHADOW_CLAW ], + [ 49, MoveId.PAIN_SPLIT ], + [ 56, MoveId.AURA_SPHERE ], + [ 63, MoveId.DRAGON_CLAW ], + [ 70, MoveId.EARTH_POWER ], + [ 77, MoveId.SHADOW_FORCE ], + [ 84, MoveId.DESTINY_BOND ], ], [Species.CRESSELIA]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.DOUBLE_TEAM ], - [ 6, Moves.MIST ], - [ 12, Moves.AURORA_BEAM ], - [ 18, Moves.PSYBEAM ], - [ 24, Moves.ALLY_SWITCH ], - [ 30, Moves.SLASH ], - [ 36, Moves.PSYCHO_CUT ], - [ 42, Moves.MOONLIGHT ], - [ 48, Moves.SAFEGUARD ], - [ 54, Moves.PSYCHIC ], - [ 60, Moves.MOONBLAST ], - [ 66, Moves.FUTURE_SIGHT ], - [ 72, Moves.LUNAR_DANCE ], - [ 72, Moves.LUNAR_BLESSING ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 6, MoveId.MIST ], + [ 12, MoveId.AURORA_BEAM ], + [ 18, MoveId.PSYBEAM ], + [ 24, MoveId.ALLY_SWITCH ], + [ 30, MoveId.SLASH ], + [ 36, MoveId.PSYCHO_CUT ], + [ 42, MoveId.MOONLIGHT ], + [ 48, MoveId.SAFEGUARD ], + [ 54, MoveId.PSYCHIC ], + [ 60, MoveId.MOONBLAST ], + [ 66, MoveId.FUTURE_SIGHT ], + [ 72, MoveId.LUNAR_DANCE ], + [ 72, MoveId.LUNAR_BLESSING ], ], [Species.PHIONE]: [ - [ 1, Moves.WATER_GUN ], - [ 9, Moves.CHARM ], - [ 16, Moves.SUPERSONIC ], - [ 24, Moves.BUBBLE_BEAM ], - [ 31, Moves.ACID_ARMOR ], - [ 39, Moves.WHIRLPOOL ], - [ 46, Moves.WATER_PULSE ], - [ 54, Moves.AQUA_RING ], - [ 61, Moves.DIVE ], - [ 69, Moves.RAIN_DANCE ], - [ 75, Moves.TAKE_HEART ], + [ 1, MoveId.WATER_GUN ], + [ 9, MoveId.CHARM ], + [ 16, MoveId.SUPERSONIC ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 31, MoveId.ACID_ARMOR ], + [ 39, MoveId.WHIRLPOOL ], + [ 46, MoveId.WATER_PULSE ], + [ 54, MoveId.AQUA_RING ], + [ 61, MoveId.DIVE ], + [ 69, MoveId.RAIN_DANCE ], + [ 75, MoveId.TAKE_HEART ], ], [Species.MANAPHY]: [ - [ 1, Moves.HEART_SWAP ], - [ 1, Moves.TAIL_GLOW ], - [ 1, Moves.WATER_GUN ], - [ 9, Moves.CHARM ], - [ 16, Moves.SUPERSONIC ], - [ 24, Moves.BUBBLE_BEAM ], - [ 31, Moves.ACID_ARMOR ], - [ 39, Moves.WHIRLPOOL ], - [ 46, Moves.WATER_PULSE ], - [ 54, Moves.AQUA_RING ], - [ 61, Moves.DIVE ], - [ 69, Moves.RAIN_DANCE ], - [ 76, Moves.TAKE_HEART ], + [ 1, MoveId.HEART_SWAP ], + [ 1, MoveId.TAIL_GLOW ], + [ 1, MoveId.WATER_GUN ], + [ 9, MoveId.CHARM ], + [ 16, MoveId.SUPERSONIC ], + [ 24, MoveId.BUBBLE_BEAM ], + [ 31, MoveId.ACID_ARMOR ], + [ 39, MoveId.WHIRLPOOL ], + [ 46, MoveId.WATER_PULSE ], + [ 54, MoveId.AQUA_RING ], + [ 61, MoveId.DIVE ], + [ 69, MoveId.RAIN_DANCE ], + [ 76, MoveId.TAKE_HEART ], ], [Species.DARKRAI]: [ - [ 1, Moves.DISABLE ], - [ 1, Moves.OMINOUS_WIND ], - [ 1, Moves.PURSUIT ], // Custom - [ 11, Moves.QUICK_ATTACK ], - [ 20, Moves.HYPNOSIS ], - [ 29, Moves.SUCKER_PUNCH ], - [ 38, Moves.NIGHT_SHADE ], - [ 47, Moves.DOUBLE_TEAM ], - [ 57, Moves.HAZE ], - [ 66, Moves.DARK_VOID ], - [ 75, Moves.NASTY_PLOT ], - [ 84, Moves.DREAM_EATER ], - [ 93, Moves.DARK_PULSE ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.OMINOUS_WIND ], + [ 1, MoveId.PURSUIT ], // Custom + [ 11, MoveId.QUICK_ATTACK ], + [ 20, MoveId.HYPNOSIS ], + [ 29, MoveId.SUCKER_PUNCH ], + [ 38, MoveId.NIGHT_SHADE ], + [ 47, MoveId.DOUBLE_TEAM ], + [ 57, MoveId.HAZE ], + [ 66, MoveId.DARK_VOID ], + [ 75, MoveId.NASTY_PLOT ], + [ 84, MoveId.DREAM_EATER ], + [ 93, MoveId.DARK_PULSE ], ], [Species.SHAYMIN]: [ - [ 1, Moves.LEAFAGE ], // Custom - [ 1, Moves.GROWTH ], - [ 10, Moves.MAGICAL_LEAF ], - [ 19, Moves.LEECH_SEED ], - [ 28, Moves.SYNTHESIS ], - [ 37, Moves.SWEET_SCENT ], - [ 46, Moves.NATURAL_GIFT ], - [ 55, Moves.WORRY_SEED ], - [ 64, Moves.AROMATHERAPY ], - [ 73, Moves.ENERGY_BALL ], - [ 82, Moves.SWEET_KISS ], - [ 91, Moves.HEALING_WISH ], - [ 100, Moves.SEED_FLARE ], + [ 1, MoveId.LEAFAGE ], // Custom + [ 1, MoveId.GROWTH ], + [ 10, MoveId.MAGICAL_LEAF ], + [ 19, MoveId.LEECH_SEED ], + [ 28, MoveId.SYNTHESIS ], + [ 37, MoveId.SWEET_SCENT ], + [ 46, MoveId.NATURAL_GIFT ], + [ 55, MoveId.WORRY_SEED ], + [ 64, MoveId.AROMATHERAPY ], + [ 73, MoveId.ENERGY_BALL ], + [ 82, MoveId.SWEET_KISS ], + [ 91, MoveId.HEALING_WISH ], + [ 100, MoveId.SEED_FLARE ], ], [Species.ARCEUS]: [ - [ 1, Moves.SEISMIC_TOSS ], - [ 1, Moves.COSMIC_POWER ], - [ 1, Moves.PUNISHMENT ], - [ 10, Moves.GRAVITY ], - [ 20, Moves.EARTH_POWER ], - [ 30, Moves.HYPER_VOICE ], - [ 40, Moves.EXTREME_SPEED ], - [ 50, Moves.HEALING_WISH ], - [ 60, Moves.FUTURE_SIGHT ], - [ 70, Moves.RECOVER ], - [ 80, Moves.HYPER_BEAM ], - [ 90, Moves.PERISH_SONG ], - [ 100, Moves.JUDGMENT ], + [ 1, MoveId.SEISMIC_TOSS ], + [ 1, MoveId.COSMIC_POWER ], + [ 1, MoveId.PUNISHMENT ], + [ 10, MoveId.GRAVITY ], + [ 20, MoveId.EARTH_POWER ], + [ 30, MoveId.HYPER_VOICE ], + [ 40, MoveId.EXTREME_SPEED ], + [ 50, MoveId.HEALING_WISH ], + [ 60, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.RECOVER ], + [ 80, MoveId.HYPER_BEAM ], + [ 90, MoveId.PERISH_SONG ], + [ 100, MoveId.JUDGMENT ], ], [Species.VICTINI]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.FLAME_CHARGE ], - [ 1, Moves.V_CREATE ], - [ 7, Moves.WORK_UP ], - [ 14, Moves.INCINERATE ], - [ 21, Moves.STORED_POWER ], - [ 28, Moves.HEADBUTT ], - [ 35, Moves.ENDURE ], - [ 42, Moves.ZEN_HEADBUTT ], - [ 49, Moves.INFERNO ], - [ 56, Moves.REVERSAL ], - [ 63, Moves.SEARING_SHOT ], - [ 70, Moves.DOUBLE_EDGE ], - [ 77, Moves.FLARE_BLITZ ], - [ 84, Moves.OVERHEAT ], - [ 91, Moves.FINAL_GAMBIT ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.FLAME_CHARGE ], + [ 1, MoveId.V_CREATE ], + [ 7, MoveId.WORK_UP ], + [ 14, MoveId.INCINERATE ], + [ 21, MoveId.STORED_POWER ], + [ 28, MoveId.HEADBUTT ], + [ 35, MoveId.ENDURE ], + [ 42, MoveId.ZEN_HEADBUTT ], + [ 49, MoveId.INFERNO ], + [ 56, MoveId.REVERSAL ], + [ 63, MoveId.SEARING_SHOT ], + [ 70, MoveId.DOUBLE_EDGE ], + [ 77, MoveId.FLARE_BLITZ ], + [ 84, MoveId.OVERHEAT ], + [ 91, MoveId.FINAL_GAMBIT ], ], [Species.SNIVY]: [ - [ 1, Moves.TACKLE ], - [ 4, Moves.LEER ], - [ 5, Moves.VINE_WHIP ], // Custom, moved from 7 to 5 - [ 10, Moves.WRAP ], - [ 13, Moves.GROWTH ], - [ 16, Moves.MAGICAL_LEAF ], - [ 19, Moves.LEECH_SEED ], - [ 22, Moves.MEGA_DRAIN ], - [ 25, Moves.SLAM ], - [ 28, Moves.LEAF_BLADE ], - [ 31, Moves.COIL ], - [ 34, Moves.GIGA_DRAIN ], - [ 37, Moves.GASTRO_ACID ], - [ 40, Moves.LEAF_STORM ], + [ 1, MoveId.TACKLE ], + [ 4, MoveId.LEER ], + [ 5, MoveId.VINE_WHIP ], // Custom, moved from 7 to 5 + [ 10, MoveId.WRAP ], + [ 13, MoveId.GROWTH ], + [ 16, MoveId.MAGICAL_LEAF ], + [ 19, MoveId.LEECH_SEED ], + [ 22, MoveId.MEGA_DRAIN ], + [ 25, MoveId.SLAM ], + [ 28, MoveId.LEAF_BLADE ], + [ 31, MoveId.COIL ], + [ 34, MoveId.GIGA_DRAIN ], + [ 37, MoveId.GASTRO_ACID ], + [ 40, MoveId.LEAF_STORM ], ], [Species.SERVINE]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 13, Moves.GROWTH ], - [ 16, Moves.MAGICAL_LEAF ], - [ 20, Moves.LEECH_SEED ], - [ 24, Moves.MEGA_DRAIN ], - [ 28, Moves.SLAM ], - [ 32, Moves.LEAF_BLADE ], - [ 36, Moves.COIL ], - [ 40, Moves.GIGA_DRAIN ], - [ 44, Moves.GASTRO_ACID ], - [ 48, Moves.LEAF_STORM ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 13, MoveId.GROWTH ], + [ 16, MoveId.MAGICAL_LEAF ], + [ 20, MoveId.LEECH_SEED ], + [ 24, MoveId.MEGA_DRAIN ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.LEAF_BLADE ], + [ 36, MoveId.COIL ], + [ 40, MoveId.GIGA_DRAIN ], + [ 44, MoveId.GASTRO_ACID ], + [ 48, MoveId.LEAF_STORM ], ], [Species.SERPERIOR]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 13, Moves.GROWTH ], - [ 16, Moves.MAGICAL_LEAF ], - [ 20, Moves.LEECH_SEED ], - [ 24, Moves.MEGA_DRAIN ], - [ 28, Moves.SLAM ], - [ 32, Moves.LEAF_BLADE ], - [ 38, Moves.COIL ], - [ 44, Moves.GIGA_DRAIN ], - [ 50, Moves.GASTRO_ACID ], - [ 56, Moves.LEAF_STORM ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 13, MoveId.GROWTH ], + [ 16, MoveId.MAGICAL_LEAF ], + [ 20, MoveId.LEECH_SEED ], + [ 24, MoveId.MEGA_DRAIN ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.LEAF_BLADE ], + [ 38, MoveId.COIL ], + [ 44, MoveId.GIGA_DRAIN ], + [ 50, MoveId.GASTRO_ACID ], + [ 56, MoveId.LEAF_STORM ], ], [Species.TEPIG]: [ - [ 1, Moves.TACKLE ], - [ 3, Moves.TAIL_WHIP ], - [ 5, Moves.EMBER ], // Custom, moved from 7 to 5 - [ 9, Moves.ENDURE ], - [ 13, Moves.DEFENSE_CURL ], - [ 15, Moves.FLAME_CHARGE ], - [ 19, Moves.SMOG ], - [ 21, Moves.ROLLOUT ], - [ 25, Moves.TAKE_DOWN ], - [ 27, Moves.HEAT_CRASH ], - [ 31, Moves.ASSURANCE ], - [ 33, Moves.FLAMETHROWER ], - [ 37, Moves.HEAD_SMASH ], - [ 39, Moves.ROAR ], - [ 43, Moves.FLARE_BLITZ ], + [ 1, MoveId.TACKLE ], + [ 3, MoveId.TAIL_WHIP ], + [ 5, MoveId.EMBER ], // Custom, moved from 7 to 5 + [ 9, MoveId.ENDURE ], + [ 13, MoveId.DEFENSE_CURL ], + [ 15, MoveId.FLAME_CHARGE ], + [ 19, MoveId.SMOG ], + [ 21, MoveId.ROLLOUT ], + [ 25, MoveId.TAKE_DOWN ], + [ 27, MoveId.HEAT_CRASH ], + [ 31, MoveId.ASSURANCE ], + [ 33, MoveId.FLAMETHROWER ], + [ 37, MoveId.HEAD_SMASH ], + [ 39, MoveId.ROAR ], + [ 43, MoveId.FLARE_BLITZ ], ], [Species.PIGNITE]: [ - [ EVOLVE_MOVE, Moves.ARM_THRUST ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.EMBER ], - [ 1, Moves.ENDURE ], - [ 13, Moves.DEFENSE_CURL ], - [ 15, Moves.FLAME_CHARGE ], - [ 20, Moves.SMOG ], - [ 23, Moves.ROLLOUT ], - [ 28, Moves.TAKE_DOWN ], - [ 31, Moves.HEAT_CRASH ], - [ 36, Moves.ASSURANCE ], - [ 39, Moves.FLAMETHROWER ], - [ 44, Moves.HEAD_SMASH ], - [ 47, Moves.ROAR ], - [ 52, Moves.FLARE_BLITZ ], + [ EVOLVE_MOVE, MoveId.ARM_THRUST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ENDURE ], + [ 13, MoveId.DEFENSE_CURL ], + [ 15, MoveId.FLAME_CHARGE ], + [ 20, MoveId.SMOG ], + [ 23, MoveId.ROLLOUT ], + [ 28, MoveId.TAKE_DOWN ], + [ 31, MoveId.HEAT_CRASH ], + [ 36, MoveId.ASSURANCE ], + [ 39, MoveId.FLAMETHROWER ], + [ 44, MoveId.HEAD_SMASH ], + [ 47, MoveId.ROAR ], + [ 52, MoveId.FLARE_BLITZ ], ], [Species.EMBOAR]: [ - [ RELEARN_MOVE, Moves.ENDURE ], - [ RELEARN_MOVE, Moves.HAMMER_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.EMBER ], - [ 1, Moves.ARM_THRUST ], - [ 13, Moves.DEFENSE_CURL ], - [ 15, Moves.FLAME_CHARGE ], - [ 20, Moves.SMOG ], - [ 23, Moves.ROLLOUT ], - [ 28, Moves.TAKE_DOWN ], - [ 31, Moves.HEAT_CRASH ], - [ 38, Moves.ASSURANCE ], - [ 43, Moves.FLAMETHROWER ], - [ 50, Moves.HEAD_SMASH ], - [ 55, Moves.ROAR ], - [ 62, Moves.FLARE_BLITZ ], + [ RELEARN_MOVE, MoveId.ENDURE ], + [ RELEARN_MOVE, MoveId.HAMMER_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ARM_THRUST ], + [ 13, MoveId.DEFENSE_CURL ], + [ 15, MoveId.FLAME_CHARGE ], + [ 20, MoveId.SMOG ], + [ 23, MoveId.ROLLOUT ], + [ 28, MoveId.TAKE_DOWN ], + [ 31, MoveId.HEAT_CRASH ], + [ 38, MoveId.ASSURANCE ], + [ 43, MoveId.FLAMETHROWER ], + [ 50, MoveId.HEAD_SMASH ], + [ 55, MoveId.ROAR ], + [ 62, MoveId.FLARE_BLITZ ], ], [Species.OSHAWOTT]: [ - [ 1, Moves.TACKLE ], - [ 5, Moves.TAIL_WHIP ], - [ 5, Moves.WATER_GUN ], // Custom, moved from 7 to 5 - [ 11, Moves.SOAK ], - [ 13, Moves.FOCUS_ENERGY ], - [ 17, Moves.RAZOR_SHELL ], - [ 19, Moves.FURY_CUTTER ], - [ 23, Moves.WATER_PULSE ], - [ 25, Moves.AERIAL_ACE ], - [ 29, Moves.AQUA_JET ], - [ 31, Moves.ENCORE ], - [ 35, Moves.AQUA_TAIL ], - [ 37, Moves.RETALIATE ], - [ 41, Moves.SWORDS_DANCE ], - [ 43, Moves.HYDRO_PUMP ], + [ 1, MoveId.TACKLE ], + [ 5, MoveId.TAIL_WHIP ], + [ 5, MoveId.WATER_GUN ], // Custom, moved from 7 to 5 + [ 11, MoveId.SOAK ], + [ 13, MoveId.FOCUS_ENERGY ], + [ 17, MoveId.RAZOR_SHELL ], + [ 19, MoveId.FURY_CUTTER ], + [ 23, MoveId.WATER_PULSE ], + [ 25, MoveId.AERIAL_ACE ], + [ 29, MoveId.AQUA_JET ], + [ 31, MoveId.ENCORE ], + [ 35, MoveId.AQUA_TAIL ], + [ 37, MoveId.RETALIATE ], + [ 41, MoveId.SWORDS_DANCE ], + [ 43, MoveId.HYDRO_PUMP ], ], [Species.DEWOTT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SOAK ], - [ 13, Moves.FOCUS_ENERGY ], - [ 18, Moves.RAZOR_SHELL ], - [ 21, Moves.FURY_CUTTER ], - [ 26, Moves.WATER_PULSE ], - [ 29, Moves.AERIAL_ACE ], - [ 34, Moves.AQUA_JET ], - [ 37, Moves.ENCORE ], - [ 42, Moves.AQUA_TAIL ], - [ 45, Moves.RETALIATE ], - [ 50, Moves.SWORDS_DANCE ], - [ 53, Moves.HYDRO_PUMP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SOAK ], + [ 13, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.RAZOR_SHELL ], + [ 21, MoveId.FURY_CUTTER ], + [ 26, MoveId.WATER_PULSE ], + [ 29, MoveId.AERIAL_ACE ], + [ 34, MoveId.AQUA_JET ], + [ 37, MoveId.ENCORE ], + [ 42, MoveId.AQUA_TAIL ], + [ 45, MoveId.RETALIATE ], + [ 50, MoveId.SWORDS_DANCE ], + [ 53, MoveId.HYDRO_PUMP ], ], [Species.SAMUROTT]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.MEGAHORN ], - [ 1, Moves.SOAK ], - [ 13, Moves.FOCUS_ENERGY ], - [ 18, Moves.RAZOR_SHELL ], - [ 21, Moves.FURY_CUTTER ], - [ 25, Moves.WATER_PULSE ], - [ 29, Moves.AERIAL_ACE ], - [ 34, Moves.AQUA_JET ], - [ 39, Moves.ENCORE ], - [ 46, Moves.AQUA_TAIL ], - [ 51, Moves.RETALIATE ], - [ 58, Moves.SWORDS_DANCE ], - [ 63, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.SLASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.MEGAHORN ], + [ 1, MoveId.SOAK ], + [ 13, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.RAZOR_SHELL ], + [ 21, MoveId.FURY_CUTTER ], + [ 25, MoveId.WATER_PULSE ], + [ 29, MoveId.AERIAL_ACE ], + [ 34, MoveId.AQUA_JET ], + [ 39, MoveId.ENCORE ], + [ 46, MoveId.AQUA_TAIL ], + [ 51, MoveId.RETALIATE ], + [ 58, MoveId.SWORDS_DANCE ], + [ 63, MoveId.HYDRO_PUMP ], ], [Species.PATRAT]: [ - [ 1, Moves.TACKLE ], - [ 3, Moves.LEER ], - [ 6, Moves.BITE ], - [ 8, Moves.BIDE ], - [ 11, Moves.DETECT ], - [ 13, Moves.SAND_ATTACK ], - [ 16, Moves.CRUNCH ], - [ 18, Moves.HYPNOSIS ], - [ 21, Moves.SUPER_FANG ], - [ 23, Moves.AFTER_YOU ], - [ 26, Moves.FOCUS_ENERGY ], - [ 28, Moves.WORK_UP ], - [ 31, Moves.HYPER_FANG ], - [ 33, Moves.NASTY_PLOT ], - [ 36, Moves.MEAN_LOOK ], - [ 38, Moves.BATON_PASS ], - [ 41, Moves.SLAM ], + [ 1, MoveId.TACKLE ], + [ 3, MoveId.LEER ], + [ 6, MoveId.BITE ], + [ 8, MoveId.BIDE ], + [ 11, MoveId.DETECT ], + [ 13, MoveId.SAND_ATTACK ], + [ 16, MoveId.CRUNCH ], + [ 18, MoveId.HYPNOSIS ], + [ 21, MoveId.SUPER_FANG ], + [ 23, MoveId.AFTER_YOU ], + [ 26, MoveId.FOCUS_ENERGY ], + [ 28, MoveId.WORK_UP ], + [ 31, MoveId.HYPER_FANG ], + [ 33, MoveId.NASTY_PLOT ], + [ 36, MoveId.MEAN_LOOK ], + [ 38, MoveId.BATON_PASS ], + [ 41, MoveId.SLAM ], ], [Species.WATCHOG]: [ - [ EVOLVE_MOVE, Moves.CONFUSE_RAY ], - [ RELEARN_MOVE, Moves.WORK_UP ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.ROTOTILLER ], - [ 8, Moves.BIDE ], - [ 11, Moves.DETECT ], - [ 13, Moves.SAND_ATTACK ], - [ 16, Moves.CRUNCH ], - [ 18, Moves.HYPNOSIS ], - [ 22, Moves.SUPER_FANG ], - [ 25, Moves.AFTER_YOU ], - [ 29, Moves.FOCUS_ENERGY ], - [ 32, Moves.PSYCH_UP ], - [ 36, Moves.HYPER_FANG ], - [ 39, Moves.NASTY_PLOT ], - [ 43, Moves.MEAN_LOOK ], - [ 46, Moves.BATON_PASS ], - [ 50, Moves.SLAM ], + [ EVOLVE_MOVE, MoveId.CONFUSE_RAY ], + [ RELEARN_MOVE, MoveId.WORK_UP ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.ROTOTILLER ], + [ 8, MoveId.BIDE ], + [ 11, MoveId.DETECT ], + [ 13, MoveId.SAND_ATTACK ], + [ 16, MoveId.CRUNCH ], + [ 18, MoveId.HYPNOSIS ], + [ 22, MoveId.SUPER_FANG ], + [ 25, MoveId.AFTER_YOU ], + [ 29, MoveId.FOCUS_ENERGY ], + [ 32, MoveId.PSYCH_UP ], + [ 36, MoveId.HYPER_FANG ], + [ 39, MoveId.NASTY_PLOT ], + [ 43, MoveId.MEAN_LOOK ], + [ 46, MoveId.BATON_PASS ], + [ 50, MoveId.SLAM ], ], [Species.LILLIPUP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.WORK_UP ], - [ 8, Moves.BITE ], - [ 12, Moves.RETALIATE ], - [ 17, Moves.BABY_DOLL_EYES ], - [ 20, Moves.PLAY_ROUGH ], - [ 24, Moves.CRUNCH ], - [ 28, Moves.TAKE_DOWN ], - [ 32, Moves.HELPING_HAND ], - [ 36, Moves.REVERSAL ], - [ 40, Moves.ROAR ], - [ 44, Moves.LAST_RESORT ], - [ 48, Moves.GIGA_IMPACT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.WORK_UP ], + [ 8, MoveId.BITE ], + [ 12, MoveId.RETALIATE ], + [ 17, MoveId.BABY_DOLL_EYES ], + [ 20, MoveId.PLAY_ROUGH ], + [ 24, MoveId.CRUNCH ], + [ 28, MoveId.TAKE_DOWN ], + [ 32, MoveId.HELPING_HAND ], + [ 36, MoveId.REVERSAL ], + [ 40, MoveId.ROAR ], + [ 44, MoveId.LAST_RESORT ], + [ 48, MoveId.GIGA_IMPACT ], ], [Species.HERDIER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.WORK_UP ], - [ 12, Moves.RETALIATE ], - [ 19, Moves.BABY_DOLL_EYES ], - [ 24, Moves.PLAY_ROUGH ], - [ 30, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 42, Moves.HELPING_HAND ], - [ 48, Moves.REVERSAL ], - [ 54, Moves.ROAR ], - [ 60, Moves.LAST_RESORT ], - [ 66, Moves.GIGA_IMPACT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.WORK_UP ], + [ 12, MoveId.RETALIATE ], + [ 19, MoveId.BABY_DOLL_EYES ], + [ 24, MoveId.PLAY_ROUGH ], + [ 30, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 42, MoveId.HELPING_HAND ], + [ 48, MoveId.REVERSAL ], + [ 54, MoveId.ROAR ], + [ 60, MoveId.LAST_RESORT ], + [ 66, MoveId.GIGA_IMPACT ], ], [Species.STOUTLAND]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.WORK_UP ], - [ 12, Moves.RETALIATE ], - [ 19, Moves.BABY_DOLL_EYES ], - [ 24, Moves.PLAY_ROUGH ], - [ 30, Moves.CRUNCH ], - [ 38, Moves.TAKE_DOWN ], - [ 46, Moves.HELPING_HAND ], - [ 54, Moves.REVERSAL ], - [ 62, Moves.ROAR ], - [ 70, Moves.LAST_RESORT ], - [ 78, Moves.GIGA_IMPACT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.WORK_UP ], + [ 12, MoveId.RETALIATE ], + [ 19, MoveId.BABY_DOLL_EYES ], + [ 24, MoveId.PLAY_ROUGH ], + [ 30, MoveId.CRUNCH ], + [ 38, MoveId.TAKE_DOWN ], + [ 46, MoveId.HELPING_HAND ], + [ 54, MoveId.REVERSAL ], + [ 62, MoveId.ROAR ], + [ 70, MoveId.LAST_RESORT ], + [ 78, MoveId.GIGA_IMPACT ], ], [Species.PURRLOIN]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 4, Moves.SAND_ATTACK ], - [ 5, Moves.FAKE_OUT ], - [ 12, Moves.FURY_SWIPES ], - [ 16, Moves.TORMENT ], - [ 21, Moves.ASSURANCE ], - [ 24, Moves.HONE_CLAWS ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.NASTY_PLOT ], - [ 36, Moves.NIGHT_SLASH ], - [ 40, Moves.PLAY_ROUGH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.SAND_ATTACK ], + [ 5, MoveId.FAKE_OUT ], + [ 12, MoveId.FURY_SWIPES ], + [ 16, MoveId.TORMENT ], + [ 21, MoveId.ASSURANCE ], + [ 24, MoveId.HONE_CLAWS ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.NASTY_PLOT ], + [ 36, MoveId.NIGHT_SLASH ], + [ 40, MoveId.PLAY_ROUGH ], ], [Species.LIEPARD]: [ - [ 1, Moves.ASSIST ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 12, Moves.FURY_SWIPES ], - [ 16, Moves.TORMENT ], - [ 23, Moves.ASSURANCE ], - [ 28, Moves.HONE_CLAWS ], - [ 34, Moves.SUCKER_PUNCH ], - [ 40, Moves.NASTY_PLOT ], - [ 46, Moves.NIGHT_SLASH ], - [ 52, Moves.PLAY_ROUGH ], + [ 1, MoveId.ASSIST ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 12, MoveId.FURY_SWIPES ], + [ 16, MoveId.TORMENT ], + [ 23, MoveId.ASSURANCE ], + [ 28, MoveId.HONE_CLAWS ], + [ 34, MoveId.SUCKER_PUNCH ], + [ 40, MoveId.NASTY_PLOT ], + [ 46, MoveId.NIGHT_SLASH ], + [ 52, MoveId.PLAY_ROUGH ], ], [Species.PANSAGE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.PLAY_NICE ], - [ 4, Moves.LEER ], - [ 7, Moves.LICK ], - [ 10, Moves.VINE_WHIP ], - [ 13, Moves.FURY_SWIPES ], - [ 16, Moves.LEECH_SEED ], - [ 19, Moves.BITE ], - [ 22, Moves.SEED_BOMB ], - [ 25, Moves.TORMENT ], - [ 28, Moves.FLING ], - [ 31, Moves.ACROBATICS ], - [ 34, Moves.GRASS_KNOT ], - [ 37, Moves.RECYCLE ], - [ 40, Moves.NATURAL_GIFT ], - [ 43, Moves.CRUNCH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.PLAY_NICE ], + [ 4, MoveId.LEER ], + [ 7, MoveId.LICK ], + [ 10, MoveId.VINE_WHIP ], + [ 13, MoveId.FURY_SWIPES ], + [ 16, MoveId.LEECH_SEED ], + [ 19, MoveId.BITE ], + [ 22, MoveId.SEED_BOMB ], + [ 25, MoveId.TORMENT ], + [ 28, MoveId.FLING ], + [ 31, MoveId.ACROBATICS ], + [ 34, MoveId.GRASS_KNOT ], + [ 37, MoveId.RECYCLE ], + [ 40, MoveId.NATURAL_GIFT ], + [ 43, MoveId.CRUNCH ], ], [Species.SIMISAGE]: [ // Previous Stage Relearn Learnset - [ RELEARN_MOVE, Moves.SCRATCH ], - [ RELEARN_MOVE, Moves.PLAY_NICE ], - [ RELEARN_MOVE, Moves.VINE_WHIP ], - [ RELEARN_MOVE, Moves.LEECH_SEED ], - [ RELEARN_MOVE, Moves.BITE ], - [ RELEARN_MOVE, Moves.TORMENT ], - [ RELEARN_MOVE, Moves.FLING ], - [ RELEARN_MOVE, Moves.ACROBATICS ], - [ RELEARN_MOVE, Moves.GRASS_KNOT ], - [ RELEARN_MOVE, Moves.RECYCLE ], - [ RELEARN_MOVE, Moves.NATURAL_GIFT ], - [ RELEARN_MOVE, Moves.CRUNCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.SEED_BOMB ], + [ RELEARN_MOVE, MoveId.SCRATCH ], + [ RELEARN_MOVE, MoveId.PLAY_NICE ], + [ RELEARN_MOVE, MoveId.VINE_WHIP ], + [ RELEARN_MOVE, MoveId.LEECH_SEED ], + [ RELEARN_MOVE, MoveId.BITE ], + [ RELEARN_MOVE, MoveId.TORMENT ], + [ RELEARN_MOVE, MoveId.FLING ], + [ RELEARN_MOVE, MoveId.ACROBATICS ], + [ RELEARN_MOVE, MoveId.GRASS_KNOT ], + [ RELEARN_MOVE, MoveId.RECYCLE ], + [ RELEARN_MOVE, MoveId.NATURAL_GIFT ], + [ RELEARN_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.SEED_BOMB ], ], [Species.PANSEAR]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.PLAY_NICE ], - [ 4, Moves.LEER ], - [ 7, Moves.LICK ], - [ 10, Moves.INCINERATE ], - [ 13, Moves.FURY_SWIPES ], - [ 16, Moves.YAWN ], - [ 19, Moves.BITE ], - [ 22, Moves.FLAME_BURST ], - [ 25, Moves.AMNESIA ], - [ 28, Moves.FLING ], - [ 31, Moves.ACROBATICS ], - [ 34, Moves.FIRE_BLAST ], - [ 37, Moves.RECYCLE ], - [ 40, Moves.NATURAL_GIFT ], - [ 43, Moves.CRUNCH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.PLAY_NICE ], + [ 4, MoveId.LEER ], + [ 7, MoveId.LICK ], + [ 10, MoveId.INCINERATE ], + [ 13, MoveId.FURY_SWIPES ], + [ 16, MoveId.YAWN ], + [ 19, MoveId.BITE ], + [ 22, MoveId.FLAME_BURST ], + [ 25, MoveId.AMNESIA ], + [ 28, MoveId.FLING ], + [ 31, MoveId.ACROBATICS ], + [ 34, MoveId.FIRE_BLAST ], + [ 37, MoveId.RECYCLE ], + [ 40, MoveId.NATURAL_GIFT ], + [ 43, MoveId.CRUNCH ], ], [Species.SIMISEAR]: [ // Previous Stage Relearn Learnset - [ RELEARN_MOVE, Moves.SCRATCH ], - [ RELEARN_MOVE, Moves.PLAY_NICE ], - [ RELEARN_MOVE, Moves.INCINERATE ], - [ RELEARN_MOVE, Moves.YAWN ], - [ RELEARN_MOVE, Moves.BITE ], - [ RELEARN_MOVE, Moves.AMNESIA ], - [ RELEARN_MOVE, Moves.FLING ], - [ RELEARN_MOVE, Moves.ACROBATICS ], - [ RELEARN_MOVE, Moves.FIRE_BLAST ], - [ RELEARN_MOVE, Moves.RECYCLE ], - [ RELEARN_MOVE, Moves.NATURAL_GIFT ], - [ RELEARN_MOVE, Moves.CRUNCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.FLAME_BURST ], + [ RELEARN_MOVE, MoveId.SCRATCH ], + [ RELEARN_MOVE, MoveId.PLAY_NICE ], + [ RELEARN_MOVE, MoveId.INCINERATE ], + [ RELEARN_MOVE, MoveId.YAWN ], + [ RELEARN_MOVE, MoveId.BITE ], + [ RELEARN_MOVE, MoveId.AMNESIA ], + [ RELEARN_MOVE, MoveId.FLING ], + [ RELEARN_MOVE, MoveId.ACROBATICS ], + [ RELEARN_MOVE, MoveId.FIRE_BLAST ], + [ RELEARN_MOVE, MoveId.RECYCLE ], + [ RELEARN_MOVE, MoveId.NATURAL_GIFT ], + [ RELEARN_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.FLAME_BURST ], ], [Species.PANPOUR]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.PLAY_NICE ], - [ 4, Moves.LEER ], - [ 7, Moves.LICK ], - [ 10, Moves.WATER_GUN ], - [ 13, Moves.FURY_SWIPES ], - [ 16, Moves.WATER_SPORT ], - [ 19, Moves.BITE ], - [ 22, Moves.SCALD ], - [ 25, Moves.TAUNT ], - [ 28, Moves.FLING ], - [ 31, Moves.ACROBATICS ], - [ 34, Moves.BRINE ], - [ 37, Moves.RECYCLE ], - [ 40, Moves.NATURAL_GIFT ], - [ 43, Moves.CRUNCH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.PLAY_NICE ], + [ 4, MoveId.LEER ], + [ 7, MoveId.LICK ], + [ 10, MoveId.WATER_GUN ], + [ 13, MoveId.FURY_SWIPES ], + [ 16, MoveId.WATER_SPORT ], + [ 19, MoveId.BITE ], + [ 22, MoveId.SCALD ], + [ 25, MoveId.TAUNT ], + [ 28, MoveId.FLING ], + [ 31, MoveId.ACROBATICS ], + [ 34, MoveId.BRINE ], + [ 37, MoveId.RECYCLE ], + [ 40, MoveId.NATURAL_GIFT ], + [ 43, MoveId.CRUNCH ], ], [Species.SIMIPOUR]: [ // Previous Stage Relearn Learnset - [ RELEARN_MOVE, Moves.SCRATCH ], - [ RELEARN_MOVE, Moves.PLAY_NICE ], - [ RELEARN_MOVE, Moves.WATER_GUN ], - [ RELEARN_MOVE, Moves.WATER_SPORT ], - [ RELEARN_MOVE, Moves.BITE ], - [ RELEARN_MOVE, Moves.TAUNT ], - [ RELEARN_MOVE, Moves.FLING ], - [ RELEARN_MOVE, Moves.ACROBATICS ], - [ RELEARN_MOVE, Moves.BRINE ], - [ RELEARN_MOVE, Moves.RECYCLE ], - [ RELEARN_MOVE, Moves.NATURAL_GIFT ], - [ RELEARN_MOVE, Moves.CRUNCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.SCALD ], + [ RELEARN_MOVE, MoveId.SCRATCH ], + [ RELEARN_MOVE, MoveId.PLAY_NICE ], + [ RELEARN_MOVE, MoveId.WATER_GUN ], + [ RELEARN_MOVE, MoveId.WATER_SPORT ], + [ RELEARN_MOVE, MoveId.BITE ], + [ RELEARN_MOVE, MoveId.TAUNT ], + [ RELEARN_MOVE, MoveId.FLING ], + [ RELEARN_MOVE, MoveId.ACROBATICS ], + [ RELEARN_MOVE, MoveId.BRINE ], + [ RELEARN_MOVE, MoveId.RECYCLE ], + [ RELEARN_MOVE, MoveId.NATURAL_GIFT ], + [ RELEARN_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.SCALD ], ], [Species.MUNNA]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.STORED_POWER ], - [ 1, Moves.PSYWAVE ], - [ 4, Moves.HYPNOSIS ], - [ 8, Moves.PSYBEAM ], - [ 12, Moves.IMPRISON ], - [ 16, Moves.MOONLIGHT ], - [ 20, Moves.MAGIC_COAT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 28, Moves.CALM_MIND ], - [ 32, Moves.YAWN ], - [ 36, Moves.PSYCHIC ], - [ 40, Moves.MOONBLAST ], - [ 44, Moves.DREAM_EATER ], - [ 48, Moves.FUTURE_SIGHT ], - [ 52, Moves.WONDER_ROOM ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.PSYWAVE ], + [ 4, MoveId.HYPNOSIS ], + [ 8, MoveId.PSYBEAM ], + [ 12, MoveId.IMPRISON ], + [ 16, MoveId.MOONLIGHT ], + [ 20, MoveId.MAGIC_COAT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.CALM_MIND ], + [ 32, MoveId.YAWN ], + [ 36, MoveId.PSYCHIC ], + [ 40, MoveId.MOONBLAST ], + [ 44, MoveId.DREAM_EATER ], + [ 48, MoveId.FUTURE_SIGHT ], + [ 52, MoveId.WONDER_ROOM ], ], [Species.MUSHARNA]: [ - [ 1, Moves.PSYWAVE ], // Previous Stage Move - [ 1, Moves.PSYBEAM ], - [ 1, Moves.PSYCHIC ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.LUCKY_CHANT ], - [ 1, Moves.DREAM_EATER ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.FUTURE_SIGHT ], - [ 1, Moves.MAGIC_COAT ], - [ 1, Moves.YAWN ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.CALM_MIND ], - [ 1, Moves.ZEN_HEADBUTT ], - [ 1, Moves.WONDER_ROOM ], - [ 1, Moves.STORED_POWER ], - [ 1, Moves.MOONBLAST ], - [ 1, Moves.PSYCHIC_TERRAIN ], + [ 1, MoveId.PSYWAVE ], // Previous Stage Move + [ 1, MoveId.PSYBEAM ], + [ 1, MoveId.PSYCHIC ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.LUCKY_CHANT ], + [ 1, MoveId.DREAM_EATER ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.FUTURE_SIGHT ], + [ 1, MoveId.MAGIC_COAT ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.CALM_MIND ], + [ 1, MoveId.ZEN_HEADBUTT ], + [ 1, MoveId.WONDER_ROOM ], + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.MOONBLAST ], + [ 1, MoveId.PSYCHIC_TERRAIN ], ], [Species.PIDOVE]: [ - [ 1, Moves.GUST ], - [ 1, Moves.GROWL ], - [ 4, Moves.LEER ], - [ 8, Moves.QUICK_ATTACK ], - [ 12, Moves.TAUNT ], - [ 16, Moves.AIR_CUTTER ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.FEATHER_DANCE ], - [ 28, Moves.DETECT ], - [ 32, Moves.AIR_SLASH ], - [ 36, Moves.ROOST ], - [ 40, Moves.TAILWIND ], - [ 44, Moves.SKY_ATTACK ], + [ 1, MoveId.GUST ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.LEER ], + [ 8, MoveId.QUICK_ATTACK ], + [ 12, MoveId.TAUNT ], + [ 16, MoveId.AIR_CUTTER ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.FEATHER_DANCE ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.AIR_SLASH ], + [ 36, MoveId.ROOST ], + [ 40, MoveId.TAILWIND ], + [ 44, MoveId.SKY_ATTACK ], ], [Species.TRANQUILL]: [ - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 12, Moves.TAUNT ], - [ 16, Moves.AIR_CUTTER ], - [ 20, Moves.SWAGGER ], - [ 26, Moves.FEATHER_DANCE ], - [ 34, Moves.DETECT ], - [ 38, Moves.AIR_SLASH ], - [ 44, Moves.ROOST ], - [ 50, Moves.TAILWIND ], - [ 56, Moves.SKY_ATTACK ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 12, MoveId.TAUNT ], + [ 16, MoveId.AIR_CUTTER ], + [ 20, MoveId.SWAGGER ], + [ 26, MoveId.FEATHER_DANCE ], + [ 34, MoveId.DETECT ], + [ 38, MoveId.AIR_SLASH ], + [ 44, MoveId.ROOST ], + [ 50, MoveId.TAILWIND ], + [ 56, MoveId.SKY_ATTACK ], ], [Species.UNFEZANT]: [ - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.QUICK_ATTACK ], - [ 12, Moves.TAUNT ], - [ 16, Moves.AIR_CUTTER ], - [ 20, Moves.SWAGGER ], - [ 26, Moves.FEATHER_DANCE ], - [ 36, Moves.DETECT ], - [ 42, Moves.AIR_SLASH ], - [ 50, Moves.ROOST ], - [ 58, Moves.TAILWIND ], - [ 66, Moves.SKY_ATTACK ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.QUICK_ATTACK ], + [ 12, MoveId.TAUNT ], + [ 16, MoveId.AIR_CUTTER ], + [ 20, MoveId.SWAGGER ], + [ 26, MoveId.FEATHER_DANCE ], + [ 36, MoveId.DETECT ], + [ 42, MoveId.AIR_SLASH ], + [ 50, MoveId.ROOST ], + [ 58, MoveId.TAILWIND ], + [ 66, MoveId.SKY_ATTACK ], ], [Species.BLITZLE]: [ - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.TAIL_WHIP ], - [ 8, Moves.CHARGE ], - [ 11, Moves.SHOCK_WAVE ], - [ 15, Moves.THUNDER_WAVE ], - [ 18, Moves.FLAME_CHARGE ], - [ 22, Moves.SPARK ], - [ 25, Moves.STOMP ], - [ 29, Moves.DISCHARGE ], - [ 33, Moves.AGILITY ], - [ 35, Moves.WILD_CHARGE ], - [ 40, Moves.THRASH ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.TAIL_WHIP ], + [ 8, MoveId.CHARGE ], + [ 11, MoveId.SHOCK_WAVE ], + [ 15, MoveId.THUNDER_WAVE ], + [ 18, MoveId.FLAME_CHARGE ], + [ 22, MoveId.SPARK ], + [ 25, MoveId.STOMP ], + [ 29, MoveId.DISCHARGE ], + [ 33, MoveId.AGILITY ], + [ 35, MoveId.WILD_CHARGE ], + [ 40, MoveId.THRASH ], ], [Species.ZEBSTRIKA]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.CHARGE ], - [ 1, Moves.ION_DELUGE ], - [ 11, Moves.SHOCK_WAVE ], - [ 18, Moves.FLAME_CHARGE ], - [ 25, Moves.SPARK ], - [ 31, Moves.STOMP ], - [ 36, Moves.DISCHARGE ], - [ 42, Moves.AGILITY ], - [ 47, Moves.WILD_CHARGE ], - [ 53, Moves.THRASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.ION_DELUGE ], + [ 11, MoveId.SHOCK_WAVE ], + [ 18, MoveId.FLAME_CHARGE ], + [ 25, MoveId.SPARK ], + [ 31, MoveId.STOMP ], + [ 36, MoveId.DISCHARGE ], + [ 42, MoveId.AGILITY ], + [ 47, MoveId.WILD_CHARGE ], + [ 53, MoveId.THRASH ], ], [Species.ROGGENROLA]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 4, Moves.HARDEN ], - [ 8, Moves.STEALTH_ROCK ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SMACK_DOWN ], - [ 20, Moves.IRON_DEFENSE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.ROCK_SLIDE ], - [ 32, Moves.ROCK_BLAST ], - [ 36, Moves.SANDSTORM ], - [ 40, Moves.STONE_EDGE ], - [ 44, Moves.EXPLOSION ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 4, MoveId.HARDEN ], + [ 8, MoveId.STEALTH_ROCK ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SMACK_DOWN ], + [ 20, MoveId.IRON_DEFENSE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.ROCK_SLIDE ], + [ 32, MoveId.ROCK_BLAST ], + [ 36, MoveId.SANDSTORM ], + [ 40, MoveId.STONE_EDGE ], + [ 44, MoveId.EXPLOSION ], ], [Species.BOLDORE]: [ - [ EVOLVE_MOVE, Moves.POWER_GEM ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.STEALTH_ROCK ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SMACK_DOWN ], - [ 20, Moves.IRON_DEFENSE ], - [ 24, Moves.HEADBUTT ], - [ 30, Moves.ROCK_SLIDE ], - [ 36, Moves.ROCK_BLAST ], - [ 42, Moves.SANDSTORM ], - [ 48, Moves.STONE_EDGE ], - [ 54, Moves.EXPLOSION ], + [ EVOLVE_MOVE, MoveId.POWER_GEM ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.STEALTH_ROCK ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SMACK_DOWN ], + [ 20, MoveId.IRON_DEFENSE ], + [ 24, MoveId.HEADBUTT ], + [ 30, MoveId.ROCK_SLIDE ], + [ 36, MoveId.ROCK_BLAST ], + [ 42, MoveId.SANDSTORM ], + [ 48, MoveId.STONE_EDGE ], + [ 54, MoveId.EXPLOSION ], ], [Species.GIGALITH]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POWER_GEM ], - [ 1, Moves.STEALTH_ROCK ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.SMACK_DOWN ], - [ 20, Moves.IRON_DEFENSE ], - [ 24, Moves.HEADBUTT ], - [ 30, Moves.ROCK_SLIDE ], - [ 36, Moves.ROCK_BLAST ], - [ 42, Moves.SANDSTORM ], - [ 48, Moves.STONE_EDGE ], - [ 54, Moves.EXPLOSION ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POWER_GEM ], + [ 1, MoveId.STEALTH_ROCK ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.SMACK_DOWN ], + [ 20, MoveId.IRON_DEFENSE ], + [ 24, MoveId.HEADBUTT ], + [ 30, MoveId.ROCK_SLIDE ], + [ 36, MoveId.ROCK_BLAST ], + [ 42, MoveId.SANDSTORM ], + [ 48, MoveId.STONE_EDGE ], + [ 54, MoveId.EXPLOSION ], ], [Species.WOOBAT]: [ - [ 1, Moves.GUST ], - [ 1, Moves.ATTRACT ], - [ 5, Moves.CONFUSION ], - [ 10, Moves.ENDEAVOR ], - [ 15, Moves.AIR_CUTTER ], - [ 20, Moves.IMPRISON ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.AMNESIA ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.PSYCHIC ], - [ 45, Moves.CALM_MIND ], - [ 50, Moves.FUTURE_SIGHT ], - [ 55, Moves.SIMPLE_BEAM ], + [ 1, MoveId.GUST ], + [ 1, MoveId.ATTRACT ], + [ 5, MoveId.CONFUSION ], + [ 10, MoveId.ENDEAVOR ], + [ 15, MoveId.AIR_CUTTER ], + [ 20, MoveId.IMPRISON ], + [ 25, MoveId.ASSURANCE ], + [ 30, MoveId.AMNESIA ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.PSYCHIC ], + [ 45, MoveId.CALM_MIND ], + [ 50, MoveId.FUTURE_SIGHT ], + [ 55, MoveId.SIMPLE_BEAM ], ], [Species.SWOOBAT]: [ - [ 1, Moves.GUST ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.ATTRACT ], - [ 1, Moves.ENDEAVOR ], - [ 15, Moves.AIR_CUTTER ], - [ 20, Moves.IMPRISON ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.AMNESIA ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.PSYCHIC ], - [ 45, Moves.CALM_MIND ], - [ 50, Moves.FUTURE_SIGHT ], - [ 55, Moves.SIMPLE_BEAM ], + [ 1, MoveId.GUST ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.ATTRACT ], + [ 1, MoveId.ENDEAVOR ], + [ 15, MoveId.AIR_CUTTER ], + [ 20, MoveId.IMPRISON ], + [ 25, MoveId.ASSURANCE ], + [ 30, MoveId.AMNESIA ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.PSYCHIC ], + [ 45, MoveId.CALM_MIND ], + [ 50, MoveId.FUTURE_SIGHT ], + [ 55, MoveId.SIMPLE_BEAM ], ], [Species.DRILBUR]: [ - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.MUD_SPORT ], - [ 4, Moves.SCRATCH ], - [ 8, Moves.HONE_CLAWS ], - [ 12, Moves.FURY_SWIPES ], - [ 16, Moves.METAL_CLAW ], - [ 20, Moves.SANDSTORM ], - [ 24, Moves.CRUSH_CLAW ], - [ 28, Moves.ROCK_SLIDE ], - [ 32, Moves.DIG ], - [ 36, Moves.SWORDS_DANCE ], - [ 40, Moves.DRILL_RUN ], - [ 44, Moves.EARTHQUAKE ], - [ 48, Moves.FISSURE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.MUD_SPORT ], + [ 4, MoveId.SCRATCH ], + [ 8, MoveId.HONE_CLAWS ], + [ 12, MoveId.FURY_SWIPES ], + [ 16, MoveId.METAL_CLAW ], + [ 20, MoveId.SANDSTORM ], + [ 24, MoveId.CRUSH_CLAW ], + [ 28, MoveId.ROCK_SLIDE ], + [ 32, MoveId.DIG ], + [ 36, MoveId.SWORDS_DANCE ], + [ 40, MoveId.DRILL_RUN ], + [ 44, MoveId.EARTHQUAKE ], + [ 48, MoveId.FISSURE ], ], [Species.EXCADRILL]: [ - [ EVOLVE_MOVE, Moves.HORN_DRILL ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.MUD_SPORT ], - [ 1, Moves.ROTOTILLER ], - [ 1, Moves.HONE_CLAWS ], - [ 12, Moves.FURY_SWIPES ], - [ 16, Moves.METAL_CLAW ], - [ 20, Moves.SANDSTORM ], - [ 24, Moves.CRUSH_CLAW ], - [ 28, Moves.ROCK_SLIDE ], - [ 34, Moves.DIG ], - [ 40, Moves.SWORDS_DANCE ], - [ 46, Moves.DRILL_RUN ], - [ 52, Moves.EARTHQUAKE ], - [ 58, Moves.FISSURE ], + [ EVOLVE_MOVE, MoveId.HORN_DRILL ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.MUD_SPORT ], + [ 1, MoveId.ROTOTILLER ], + [ 1, MoveId.HONE_CLAWS ], + [ 12, MoveId.FURY_SWIPES ], + [ 16, MoveId.METAL_CLAW ], + [ 20, MoveId.SANDSTORM ], + [ 24, MoveId.CRUSH_CLAW ], + [ 28, MoveId.ROCK_SLIDE ], + [ 34, MoveId.DIG ], + [ 40, MoveId.SWORDS_DANCE ], + [ 46, MoveId.DRILL_RUN ], + [ 52, MoveId.EARTHQUAKE ], + [ 58, MoveId.FISSURE ], ], [Species.AUDINO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.PLAY_NICE ], - [ 4, Moves.DISARMING_VOICE ], - [ 9, Moves.BABY_DOLL_EYES ], - [ 12, Moves.HELPING_HAND ], - [ 16, Moves.GROWL ], - [ 20, Moves.ZEN_HEADBUTT ], - [ 24, Moves.LIFE_DEW ], - [ 28, Moves.AFTER_YOU ], - [ 32, Moves.TAKE_DOWN ], - [ 36, Moves.SIMPLE_BEAM ], - [ 40, Moves.HYPER_VOICE ], - [ 44, Moves.HEAL_PULSE ], - [ 48, Moves.DOUBLE_EDGE ], - [ 52, Moves.ENTRAINMENT ], - [ 56, Moves.MISTY_TERRAIN ], - [ 60, Moves.LAST_RESORT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.PLAY_NICE ], + [ 4, MoveId.DISARMING_VOICE ], + [ 9, MoveId.BABY_DOLL_EYES ], + [ 12, MoveId.HELPING_HAND ], + [ 16, MoveId.GROWL ], + [ 20, MoveId.ZEN_HEADBUTT ], + [ 24, MoveId.LIFE_DEW ], + [ 28, MoveId.AFTER_YOU ], + [ 32, MoveId.TAKE_DOWN ], + [ 36, MoveId.SIMPLE_BEAM ], + [ 40, MoveId.HYPER_VOICE ], + [ 44, MoveId.HEAL_PULSE ], + [ 48, MoveId.DOUBLE_EDGE ], + [ 52, MoveId.ENTRAINMENT ], + [ 56, MoveId.MISTY_TERRAIN ], + [ 60, MoveId.LAST_RESORT ], ], [Species.TIMBURR]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 4, Moves.LOW_KICK ], - [ 8, Moves.ROCK_THROW ], - [ 12, Moves.FOCUS_ENERGY ], - [ 16, Moves.BULK_UP ], - [ 20, Moves.ROCK_SLIDE ], - [ 24, Moves.SLAM ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.DYNAMIC_PUNCH ], - [ 36, Moves.HAMMER_ARM ], - [ 40, Moves.STONE_EDGE ], - [ 44, Moves.SUPERPOWER ], - [ 48, Moves.FOCUS_PUNCH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 4, MoveId.LOW_KICK ], + [ 8, MoveId.ROCK_THROW ], + [ 12, MoveId.FOCUS_ENERGY ], + [ 16, MoveId.BULK_UP ], + [ 20, MoveId.ROCK_SLIDE ], + [ 24, MoveId.SLAM ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.DYNAMIC_PUNCH ], + [ 36, MoveId.HAMMER_ARM ], + [ 40, MoveId.STONE_EDGE ], + [ 44, MoveId.SUPERPOWER ], + [ 48, MoveId.FOCUS_PUNCH ], ], [Species.GURDURR]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.BIDE ], - [ 12, Moves.FOCUS_ENERGY ], - [ 16, Moves.BULK_UP ], - [ 20, Moves.ROCK_SLIDE ], - [ 24, Moves.SLAM ], - [ 30, Moves.SCARY_FACE ], - [ 36, Moves.DYNAMIC_PUNCH ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.STONE_EDGE ], - [ 54, Moves.SUPERPOWER ], - [ 60, Moves.FOCUS_PUNCH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.BIDE ], + [ 12, MoveId.FOCUS_ENERGY ], + [ 16, MoveId.BULK_UP ], + [ 20, MoveId.ROCK_SLIDE ], + [ 24, MoveId.SLAM ], + [ 30, MoveId.SCARY_FACE ], + [ 36, MoveId.DYNAMIC_PUNCH ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.STONE_EDGE ], + [ 54, MoveId.SUPERPOWER ], + [ 60, MoveId.FOCUS_PUNCH ], ], [Species.CONKELDURR]: [ - [ 1, Moves.POUND ], - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.BIDE ], - [ 12, Moves.FOCUS_ENERGY ], - [ 16, Moves.BULK_UP ], - [ 20, Moves.ROCK_SLIDE ], - [ 24, Moves.SLAM ], - [ 30, Moves.SCARY_FACE ], - [ 36, Moves.DYNAMIC_PUNCH ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.STONE_EDGE ], - [ 54, Moves.SUPERPOWER ], - [ 60, Moves.FOCUS_PUNCH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.BIDE ], + [ 12, MoveId.FOCUS_ENERGY ], + [ 16, MoveId.BULK_UP ], + [ 20, MoveId.ROCK_SLIDE ], + [ 24, MoveId.SLAM ], + [ 30, MoveId.SCARY_FACE ], + [ 36, MoveId.DYNAMIC_PUNCH ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.STONE_EDGE ], + [ 54, MoveId.SUPERPOWER ], + [ 60, MoveId.FOCUS_PUNCH ], ], [Species.TYMPOLE]: [ - [ 1, Moves.BUBBLE ], //USUM - [ 1, Moves.GROWL ], - [ 1, Moves.ECHOED_VOICE ], - [ 4, Moves.ACID ], - [ 8, Moves.SUPERSONIC ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.ROUND ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.FLAIL ], - [ 28, Moves.UPROAR ], - [ 32, Moves.AQUA_RING ], - [ 36, Moves.HYPER_VOICE ], - [ 40, Moves.MUDDY_WATER ], - [ 44, Moves.RAIN_DANCE ], - [ 48, Moves.HYDRO_PUMP ], + [ 1, MoveId.BUBBLE ], //USUM + [ 1, MoveId.GROWL ], + [ 1, MoveId.ECHOED_VOICE ], + [ 4, MoveId.ACID ], + [ 8, MoveId.SUPERSONIC ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.FLAIL ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.AQUA_RING ], + [ 36, MoveId.HYPER_VOICE ], + [ 40, MoveId.MUDDY_WATER ], + [ 44, MoveId.RAIN_DANCE ], + [ 48, MoveId.HYDRO_PUMP ], ], [Species.PALPITOAD]: [ - [ 1, Moves.BUBBLE ], //USUM - [ 1, Moves.GROWL ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ACID ], - [ 1, Moves.ECHOED_VOICE ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.ROUND ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.FLAIL ], - [ 30, Moves.UPROAR ], - [ 37, Moves.AQUA_RING ], - [ 42, Moves.HYPER_VOICE ], - [ 48, Moves.MUDDY_WATER ], - [ 54, Moves.RAIN_DANCE ], - [ 60, Moves.HYDRO_PUMP ], + [ 1, MoveId.BUBBLE ], //USUM + [ 1, MoveId.GROWL ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ECHOED_VOICE ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.FLAIL ], + [ 30, MoveId.UPROAR ], + [ 37, MoveId.AQUA_RING ], + [ 42, MoveId.HYPER_VOICE ], + [ 48, MoveId.MUDDY_WATER ], + [ 54, MoveId.RAIN_DANCE ], + [ 60, MoveId.HYDRO_PUMP ], ], [Species.SEISMITOAD]: [ - [ EVOLVE_MOVE, Moves.DRAIN_PUNCH ], - [ 1, Moves.BUBBLE ], //USUM - [ 1, Moves.GROWL ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ACID ], - [ 1, Moves.GASTRO_ACID ], - [ 1, Moves.ECHOED_VOICE ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.ROUND ], - [ 20, Moves.BUBBLE_BEAM ], - [ 24, Moves.FLAIL ], - [ 30, Moves.UPROAR ], - [ 39, Moves.AQUA_RING ], - [ 46, Moves.HYPER_VOICE ], - [ 54, Moves.MUDDY_WATER ], - [ 62, Moves.RAIN_DANCE ], - [ 70, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.DRAIN_PUNCH ], + [ 1, MoveId.BUBBLE ], //USUM + [ 1, MoveId.GROWL ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ACID ], + [ 1, MoveId.GASTRO_ACID ], + [ 1, MoveId.ECHOED_VOICE ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.FLAIL ], + [ 30, MoveId.UPROAR ], + [ 39, MoveId.AQUA_RING ], + [ 46, MoveId.HYPER_VOICE ], + [ 54, MoveId.MUDDY_WATER ], + [ 62, MoveId.RAIN_DANCE ], + [ 70, MoveId.HYDRO_PUMP ], ], [Species.THROH]: [ - [ 1, Moves.ROCK_SMASH ], // Custom - [ 1, Moves.LEER ], - [ 1, Moves.BIDE ], - [ 1, Moves.MAT_BLOCK ], - [ 1, Moves.BIND ], - [ 5, Moves.FOCUS_ENERGY ], - [ 10, Moves.CIRCLE_THROW ], - [ 15, Moves.WIDE_GUARD ], - [ 20, Moves.REVENGE ], - [ 25, Moves.BULK_UP ], - [ 30, Moves.STORM_THROW ], - [ 35, Moves.VITAL_THROW ], - [ 40, Moves.SEISMIC_TOSS ], - [ 45, Moves.ENDURE ], - [ 50, Moves.REVERSAL ], - [ 55, Moves.SUPERPOWER ], + [ 1, MoveId.ROCK_SMASH ], // Custom + [ 1, MoveId.LEER ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.MAT_BLOCK ], + [ 1, MoveId.BIND ], + [ 5, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.CIRCLE_THROW ], + [ 15, MoveId.WIDE_GUARD ], + [ 20, MoveId.REVENGE ], + [ 25, MoveId.BULK_UP ], + [ 30, MoveId.STORM_THROW ], + [ 35, MoveId.VITAL_THROW ], + [ 40, MoveId.SEISMIC_TOSS ], + [ 45, MoveId.ENDURE ], + [ 50, MoveId.REVERSAL ], + [ 55, MoveId.SUPERPOWER ], ], [Species.SAWK]: [ - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.BIDE ], - [ 5, Moves.FOCUS_ENERGY ], - [ 10, Moves.DOUBLE_KICK ], - [ 15, Moves.QUICK_GUARD ], - [ 20, Moves.LOW_SWEEP ], - [ 25, Moves.BULK_UP ], - [ 30, Moves.RETALIATE ], - [ 35, Moves.BRICK_BREAK ], - [ 40, Moves.COUNTER ], - [ 45, Moves.ENDURE ], - [ 50, Moves.REVERSAL ], - [ 55, Moves.CLOSE_COMBAT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.BIDE ], + [ 5, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.DOUBLE_KICK ], + [ 15, MoveId.QUICK_GUARD ], + [ 20, MoveId.LOW_SWEEP ], + [ 25, MoveId.BULK_UP ], + [ 30, MoveId.RETALIATE ], + [ 35, MoveId.BRICK_BREAK ], + [ 40, MoveId.COUNTER ], + [ 45, MoveId.ENDURE ], + [ 50, MoveId.REVERSAL ], + [ 55, MoveId.CLOSE_COMBAT ], ], [Species.SEWADDLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 8, Moves.BUG_BITE ], - [ 15, Moves.RAZOR_LEAF ], - [ 22, Moves.STRUGGLE_BUG ], - [ 29, Moves.ENDURE ], - [ 31, Moves.STICKY_WEB ], - [ 36, Moves.BUG_BUZZ ], - [ 43, Moves.FLAIL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 8, MoveId.BUG_BITE ], + [ 15, MoveId.RAZOR_LEAF ], + [ 22, MoveId.STRUGGLE_BUG ], + [ 29, MoveId.ENDURE ], + [ 31, MoveId.STICKY_WEB ], + [ 36, MoveId.BUG_BUZZ ], + [ 43, MoveId.FLAIL ], ], [Species.SWADLOON]: [ - [ EVOLVE_MOVE, Moves.PROTECT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.GRASS_WHISTLE ], - [ 22, Moves.STRUGGLE_BUG ], - [ 29, Moves.ENDURE ], - [ 31, Moves.STICKY_WEB ], - [ 36, Moves.BUG_BUZZ ], - [ 43, Moves.FLAIL ], + [ EVOLVE_MOVE, MoveId.PROTECT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.GRASS_WHISTLE ], + [ 22, MoveId.STRUGGLE_BUG ], + [ 29, MoveId.ENDURE ], + [ 31, MoveId.STICKY_WEB ], + [ 36, MoveId.BUG_BUZZ ], + [ 43, MoveId.FLAIL ], ], [Species.LEAVANNY]: [ - [ EVOLVE_MOVE, Moves.SLASH ], - [ RELEARN_MOVE, Moves.BUG_BITE ], - [ RELEARN_MOVE, Moves.STICKY_WEB ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BUZZ ], // Previous Stage Move - [ 1, Moves.PROTECT ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.GRASS_WHISTLE ], // Previous Stage Move - [ 1, Moves.ENDURE ], // Previous Stage Move - [ 1, Moves.FLAIL ], // Previous Stage Move - [ 1, Moves.FALSE_SWIPE ], - [ 22, Moves.STRUGGLE_BUG ], - [ 29, Moves.FELL_STINGER ], - [ 32, Moves.HELPING_HAND ], - [ 36, Moves.LEAF_BLADE ], - [ 39, Moves.X_SCISSOR ], - [ 43, Moves.ENTRAINMENT ], - [ 46, Moves.SWORDS_DANCE ], - [ 50, Moves.LEAF_STORM ], + [ EVOLVE_MOVE, MoveId.SLASH ], + [ RELEARN_MOVE, MoveId.BUG_BITE ], + [ RELEARN_MOVE, MoveId.STICKY_WEB ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BUZZ ], // Previous Stage Move + [ 1, MoveId.PROTECT ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.GRASS_WHISTLE ], // Previous Stage Move + [ 1, MoveId.ENDURE ], // Previous Stage Move + [ 1, MoveId.FLAIL ], // Previous Stage Move + [ 1, MoveId.FALSE_SWIPE ], + [ 22, MoveId.STRUGGLE_BUG ], + [ 29, MoveId.FELL_STINGER ], + [ 32, MoveId.HELPING_HAND ], + [ 36, MoveId.LEAF_BLADE ], + [ 39, MoveId.X_SCISSOR ], + [ 43, MoveId.ENTRAINMENT ], + [ 46, MoveId.SWORDS_DANCE ], + [ 50, MoveId.LEAF_STORM ], ], [Species.VENIPEDE]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.DEFENSE_CURL ], - [ 4, Moves.ROLLOUT ], - [ 8, Moves.PROTECT ], - [ 12, Moves.POISON_TAIL ], - [ 16, Moves.SCREECH ], - [ 20, Moves.BUG_BITE ], - [ 24, Moves.VENOSHOCK ], - [ 28, Moves.TAKE_DOWN ], - [ 32, Moves.AGILITY ], - [ 36, Moves.TOXIC ], - [ 40, Moves.VENOM_DRENCH ], - [ 44, Moves.DOUBLE_EDGE ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.DEFENSE_CURL ], + [ 4, MoveId.ROLLOUT ], + [ 8, MoveId.PROTECT ], + [ 12, MoveId.POISON_TAIL ], + [ 16, MoveId.SCREECH ], + [ 20, MoveId.BUG_BITE ], + [ 24, MoveId.VENOSHOCK ], + [ 28, MoveId.TAKE_DOWN ], + [ 32, MoveId.AGILITY ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.VENOM_DRENCH ], + [ 44, MoveId.DOUBLE_EDGE ], ], [Species.WHIRLIPEDE]: [ - [ EVOLVE_MOVE, Moves.IRON_DEFENSE ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ROLLOUT ], - [ 12, Moves.POISON_TAIL ], - [ 16, Moves.SCREECH ], - [ 20, Moves.BUG_BITE ], - [ 26, Moves.VENOSHOCK ], - [ 32, Moves.TAKE_DOWN ], - [ 38, Moves.AGILITY ], - [ 44, Moves.TOXIC ], - [ 50, Moves.VENOM_DRENCH ], - [ 56, Moves.DOUBLE_EDGE ], + [ EVOLVE_MOVE, MoveId.IRON_DEFENSE ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ROLLOUT ], + [ 12, MoveId.POISON_TAIL ], + [ 16, MoveId.SCREECH ], + [ 20, MoveId.BUG_BITE ], + [ 26, MoveId.VENOSHOCK ], + [ 32, MoveId.TAKE_DOWN ], + [ 38, MoveId.AGILITY ], + [ 44, MoveId.TOXIC ], + [ 50, MoveId.VENOM_DRENCH ], + [ 56, MoveId.DOUBLE_EDGE ], ], [Species.SCOLIPEDE]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.IRON_DEFENSE ], - [ 12, Moves.POISON_TAIL ], - [ 16, Moves.SCREECH ], - [ 20, Moves.BUG_BITE ], - [ 26, Moves.VENOSHOCK ], - [ 34, Moves.TAKE_DOWN ], - [ 42, Moves.AGILITY ], - [ 50, Moves.TOXIC ], - [ 58, Moves.VENOM_DRENCH ], - [ 66, Moves.DOUBLE_EDGE ], - [ 74, Moves.MEGAHORN ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.IRON_DEFENSE ], + [ 12, MoveId.POISON_TAIL ], + [ 16, MoveId.SCREECH ], + [ 20, MoveId.BUG_BITE ], + [ 26, MoveId.VENOSHOCK ], + [ 34, MoveId.TAKE_DOWN ], + [ 42, MoveId.AGILITY ], + [ 50, MoveId.TOXIC ], + [ 58, MoveId.VENOM_DRENCH ], + [ 66, MoveId.DOUBLE_EDGE ], + [ 74, MoveId.MEGAHORN ], ], [Species.COTTONEE]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.HELPING_HAND ], - [ 3, Moves.FAIRY_WIND ], - [ 6, Moves.STUN_SPORE ], - [ 12, Moves.MEGA_DRAIN ], - [ 15, Moves.RAZOR_LEAF ], - [ 18, Moves.GROWTH ], - [ 21, Moves.POISON_POWDER ], - [ 24, Moves.GIGA_DRAIN ], - [ 27, Moves.CHARM ], - [ 30, Moves.LEECH_SEED ], - [ 33, Moves.COTTON_SPORE ], - [ 36, Moves.ENERGY_BALL ], - [ 39, Moves.SUNNY_DAY ], - [ 42, Moves.ENDEAVOR ], - [ 45, Moves.COTTON_GUARD ], - [ 48, Moves.SOLAR_BEAM ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HELPING_HAND ], + [ 3, MoveId.FAIRY_WIND ], + [ 6, MoveId.STUN_SPORE ], + [ 12, MoveId.MEGA_DRAIN ], + [ 15, MoveId.RAZOR_LEAF ], + [ 18, MoveId.GROWTH ], + [ 21, MoveId.POISON_POWDER ], + [ 24, MoveId.GIGA_DRAIN ], + [ 27, MoveId.CHARM ], + [ 30, MoveId.LEECH_SEED ], + [ 33, MoveId.COTTON_SPORE ], + [ 36, MoveId.ENERGY_BALL ], + [ 39, MoveId.SUNNY_DAY ], + [ 42, MoveId.ENDEAVOR ], + [ 45, MoveId.COTTON_GUARD ], + [ 48, MoveId.SOLAR_BEAM ], ], [Species.WHIMSICOTT]: [ - [ 1, Moves.GUST ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.SOLAR_BEAM ], - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.COTTON_SPORE ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.CHARM ], - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.MEMENTO ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.ENDEAVOR ], - [ 1, Moves.TAILWIND ], - [ 1, Moves.ENERGY_BALL ], - [ 1, Moves.COTTON_GUARD ], - [ 1, Moves.HURRICANE ], - [ 1, Moves.FAIRY_WIND ], - [ 1, Moves.MOONBLAST ], + [ 1, MoveId.GUST ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.SOLAR_BEAM ], + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.COTTON_SPORE ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.MEMENTO ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.ENDEAVOR ], + [ 1, MoveId.TAILWIND ], + [ 1, MoveId.ENERGY_BALL ], + [ 1, MoveId.COTTON_GUARD ], + [ 1, MoveId.HURRICANE ], + [ 1, MoveId.FAIRY_WIND ], + [ 1, MoveId.MOONBLAST ], ], [Species.PETILIL]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 3, Moves.HELPING_HAND ], - [ 6, Moves.STUN_SPORE ], - [ 9, Moves.MEGA_DRAIN ], - [ 12, Moves.CHARM ], - [ 15, Moves.MAGICAL_LEAF ], - [ 18, Moves.SLEEP_POWDER ], - [ 21, Moves.GIGA_DRAIN ], - [ 24, Moves.LEECH_SEED ], - [ 27, Moves.AFTER_YOU ], - [ 30, Moves.ENERGY_BALL ], - [ 33, Moves.SYNTHESIS ], - [ 36, Moves.SUNNY_DAY ], - [ 39, Moves.ENTRAINMENT ], - [ 42, Moves.LEAF_STORM ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 3, MoveId.HELPING_HAND ], + [ 6, MoveId.STUN_SPORE ], + [ 9, MoveId.MEGA_DRAIN ], + [ 12, MoveId.CHARM ], + [ 15, MoveId.MAGICAL_LEAF ], + [ 18, MoveId.SLEEP_POWDER ], + [ 21, MoveId.GIGA_DRAIN ], + [ 24, MoveId.LEECH_SEED ], + [ 27, MoveId.AFTER_YOU ], + [ 30, MoveId.ENERGY_BALL ], + [ 33, MoveId.SYNTHESIS ], + [ 36, MoveId.SUNNY_DAY ], + [ 39, MoveId.ENTRAINMENT ], + [ 42, MoveId.LEAF_STORM ], ], [Species.LILLIGANT]: [ - [ EVOLVE_MOVE, Moves.PETAL_DANCE ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.CHARM ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.TEETER_DANCE ], - [ 1, Moves.ENERGY_BALL ], - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.QUIVER_DANCE ], - [ 1, Moves.ENTRAINMENT ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.PETAL_BLIZZARD ], - [ 5, Moves.MAGICAL_LEAF ], + [ EVOLVE_MOVE, MoveId.PETAL_DANCE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.TEETER_DANCE ], + [ 1, MoveId.ENERGY_BALL ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.QUIVER_DANCE ], + [ 1, MoveId.ENTRAINMENT ], + [ 1, MoveId.AFTER_YOU ], + [ 1, MoveId.PETAL_BLIZZARD ], + [ 5, MoveId.MAGICAL_LEAF ], ], [Species.BASCULIN]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.TACKLE ], - [ 8, Moves.FLAIL ], - [ 12, Moves.AQUA_JET ], - [ 16, Moves.BITE ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.SOAK ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.FINAL_GAMBIT ], - [ 44, Moves.WAVE_CRASH ], - [ 48, Moves.THRASH ], - [ 52, Moves.DOUBLE_EDGE ], - [ 56, Moves.HEAD_SMASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.FLAIL ], + [ 12, MoveId.AQUA_JET ], + [ 16, MoveId.BITE ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.SOAK ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.FINAL_GAMBIT ], + [ 44, MoveId.WAVE_CRASH ], + [ 48, MoveId.THRASH ], + [ 52, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.HEAD_SMASH ], ], [Species.SANDILE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.POWER_TRIP ], - [ 3, Moves.SAND_ATTACK ], - [ 6, Moves.HONE_CLAWS ], - [ 9, Moves.SAND_TOMB ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.BITE ], - [ 18, Moves.TORMENT ], - [ 21, Moves.DIG ], - [ 24, Moves.SWAGGER ], - [ 27, Moves.CRUNCH ], - [ 30, Moves.SANDSTORM ], - [ 33, Moves.FOUL_PLAY ], - [ 36, Moves.EARTHQUAKE ], - [ 39, Moves.THRASH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.POWER_TRIP ], + [ 3, MoveId.SAND_ATTACK ], + [ 6, MoveId.HONE_CLAWS ], + [ 9, MoveId.SAND_TOMB ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.BITE ], + [ 18, MoveId.TORMENT ], + [ 21, MoveId.DIG ], + [ 24, MoveId.SWAGGER ], + [ 27, MoveId.CRUNCH ], + [ 30, MoveId.SANDSTORM ], + [ 33, MoveId.FOUL_PLAY ], + [ 36, MoveId.EARTHQUAKE ], + [ 39, MoveId.THRASH ], ], [Species.KROKOROK]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.POWER_TRIP ], - [ 9, Moves.SAND_TOMB ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.BITE ], - [ 18, Moves.TORMENT ], - [ 21, Moves.DIG ], - [ 24, Moves.SWAGGER ], - [ 27, Moves.CRUNCH ], - [ 32, Moves.SANDSTORM ], - [ 35, Moves.FOUL_PLAY ], - [ 42, Moves.EARTHQUAKE ], - [ 47, Moves.THRASH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.POWER_TRIP ], + [ 9, MoveId.SAND_TOMB ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.BITE ], + [ 18, MoveId.TORMENT ], + [ 21, MoveId.DIG ], + [ 24, MoveId.SWAGGER ], + [ 27, MoveId.CRUNCH ], + [ 32, MoveId.SANDSTORM ], + [ 35, MoveId.FOUL_PLAY ], + [ 42, MoveId.EARTHQUAKE ], + [ 47, MoveId.THRASH ], ], [Species.KROOKODILE]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.POWER_TRIP ], - [ 9, Moves.SAND_TOMB ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.BITE ], - [ 18, Moves.TORMENT ], - [ 21, Moves.DIG ], - [ 24, Moves.SWAGGER ], - [ 27, Moves.CRUNCH ], - [ 32, Moves.SANDSTORM ], - [ 35, Moves.FOUL_PLAY ], - [ 44, Moves.EARTHQUAKE ], - [ 51, Moves.THRASH ], - [ 58, Moves.OUTRAGE ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.POWER_TRIP ], + [ 9, MoveId.SAND_TOMB ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.BITE ], + [ 18, MoveId.TORMENT ], + [ 21, MoveId.DIG ], + [ 24, MoveId.SWAGGER ], + [ 27, MoveId.CRUNCH ], + [ 32, MoveId.SANDSTORM ], + [ 35, MoveId.FOUL_PLAY ], + [ 44, MoveId.EARTHQUAKE ], + [ 51, MoveId.THRASH ], + [ 58, MoveId.OUTRAGE ], ], [Species.DARUMAKA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.EMBER ], - [ 4, Moves.TAUNT ], - [ 8, Moves.BITE ], - [ 12, Moves.INCINERATE ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.FIRE_FANG ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.FIRE_PUNCH ], - [ 32, Moves.UPROAR ], - [ 36, Moves.BELLY_DRUM ], - [ 40, Moves.FLARE_BLITZ ], - [ 44, Moves.THRASH ], - [ 48, Moves.SUPERPOWER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.TAUNT ], + [ 8, MoveId.BITE ], + [ 12, MoveId.INCINERATE ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.FIRE_FANG ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.FIRE_PUNCH ], + [ 32, MoveId.UPROAR ], + [ 36, MoveId.BELLY_DRUM ], + [ 40, MoveId.FLARE_BLITZ ], + [ 44, MoveId.THRASH ], + [ 48, MoveId.SUPERPOWER ], ], [Species.DARMANITAN]: [ - [ EVOLVE_MOVE, Moves.HAMMER_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.EMBER ], - [ 1, Moves.TAUNT ], - [ 12, Moves.INCINERATE ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.FIRE_FANG ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.FIRE_PUNCH ], - [ 32, Moves.UPROAR ], - [ 38, Moves.BELLY_DRUM ], - [ 44, Moves.FLARE_BLITZ ], - [ 50, Moves.THRASH ], - [ 56, Moves.SUPERPOWER ], + [ EVOLVE_MOVE, MoveId.HAMMER_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.TAUNT ], + [ 12, MoveId.INCINERATE ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.FIRE_FANG ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.FIRE_PUNCH ], + [ 32, MoveId.UPROAR ], + [ 38, MoveId.BELLY_DRUM ], + [ 44, MoveId.FLARE_BLITZ ], + [ 50, MoveId.THRASH ], + [ 56, MoveId.SUPERPOWER ], ], [Species.MARACTUS]: [ - [ 1, Moves.PECK ], - [ 1, Moves.ABSORB ], - [ 1, Moves.INGRAIN ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.SPIKY_SHIELD ], - [ 4, Moves.GROWTH ], - [ 8, Moves.MEGA_DRAIN ], - [ 12, Moves.LEECH_SEED ], - [ 16, Moves.SUCKER_PUNCH ], - [ 20, Moves.PIN_MISSILE ], - [ 24, Moves.GIGA_DRAIN ], - [ 28, Moves.SWEET_SCENT ], - [ 32, Moves.SYNTHESIS ], - [ 36, Moves.PETAL_BLIZZARD ], - [ 40, Moves.COTTON_SPORE ], - [ 44, Moves.SUNNY_DAY ], - [ 48, Moves.SOLAR_BEAM ], - [ 52, Moves.ACUPRESSURE ], - [ 56, Moves.PETAL_DANCE ], - [ 60, Moves.COTTON_GUARD ], + [ 1, MoveId.PECK ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.INGRAIN ], + [ 1, MoveId.AFTER_YOU ], + [ 1, MoveId.SPIKY_SHIELD ], + [ 4, MoveId.GROWTH ], + [ 8, MoveId.MEGA_DRAIN ], + [ 12, MoveId.LEECH_SEED ], + [ 16, MoveId.SUCKER_PUNCH ], + [ 20, MoveId.PIN_MISSILE ], + [ 24, MoveId.GIGA_DRAIN ], + [ 28, MoveId.SWEET_SCENT ], + [ 32, MoveId.SYNTHESIS ], + [ 36, MoveId.PETAL_BLIZZARD ], + [ 40, MoveId.COTTON_SPORE ], + [ 44, MoveId.SUNNY_DAY ], + [ 48, MoveId.SOLAR_BEAM ], + [ 52, MoveId.ACUPRESSURE ], + [ 56, MoveId.PETAL_DANCE ], + [ 60, MoveId.COTTON_GUARD ], ], [Species.DWEBBLE]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.FURY_CUTTER ], - [ 4, Moves.WITHDRAW ], - [ 8, Moves.SMACK_DOWN ], - [ 12, Moves.BUG_BITE ], - [ 16, Moves.FLAIL ], - [ 20, Moves.SLASH ], - [ 24, Moves.ROCK_SLIDE ], - [ 28, Moves.STEALTH_ROCK ], - [ 32, Moves.ROCK_BLAST ], - [ 36, Moves.X_SCISSOR ], - [ 40, Moves.ROCK_POLISH ], - [ 44, Moves.SHELL_SMASH ], - [ 48, Moves.ROCK_WRECKER ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.FURY_CUTTER ], + [ 4, MoveId.WITHDRAW ], + [ 8, MoveId.SMACK_DOWN ], + [ 12, MoveId.BUG_BITE ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.SLASH ], + [ 24, MoveId.ROCK_SLIDE ], + [ 28, MoveId.STEALTH_ROCK ], + [ 32, MoveId.ROCK_BLAST ], + [ 36, MoveId.X_SCISSOR ], + [ 40, MoveId.ROCK_POLISH ], + [ 44, MoveId.SHELL_SMASH ], + [ 48, MoveId.ROCK_WRECKER ], ], [Species.CRUSTLE]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.SMACK_DOWN ], - [ 12, Moves.BUG_BITE ], - [ 16, Moves.FLAIL ], - [ 20, Moves.SLASH ], - [ 24, Moves.ROCK_SLIDE ], - [ 28, Moves.STEALTH_ROCK ], - [ 32, Moves.ROCK_BLAST ], - [ 38, Moves.X_SCISSOR ], - [ 44, Moves.ROCK_POLISH ], - [ 50, Moves.SHELL_SMASH ], - [ 56, Moves.ROCK_WRECKER ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.SMACK_DOWN ], + [ 12, MoveId.BUG_BITE ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.SLASH ], + [ 24, MoveId.ROCK_SLIDE ], + [ 28, MoveId.STEALTH_ROCK ], + [ 32, MoveId.ROCK_BLAST ], + [ 38, MoveId.X_SCISSOR ], + [ 44, MoveId.ROCK_POLISH ], + [ 50, MoveId.SHELL_SMASH ], + [ 56, MoveId.ROCK_WRECKER ], ], [Species.SCRAGGY]: [ - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 4, Moves.PAYBACK ], - [ 8, Moves.HEADBUTT ], - [ 12, Moves.SAND_ATTACK ], - [ 16, Moves.FACADE ], - [ 20, Moves.PROTECT ], - [ 24, Moves.BEAT_UP ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.BRICK_BREAK ], - [ 36, Moves.SWAGGER ], - [ 40, Moves.CRUNCH ], - [ 44, Moves.HIGH_JUMP_KICK ], - [ 48, Moves.FOCUS_PUNCH ], - [ 52, Moves.HEAD_SMASH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 4, MoveId.PAYBACK ], + [ 8, MoveId.HEADBUTT ], + [ 12, MoveId.SAND_ATTACK ], + [ 16, MoveId.FACADE ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.BEAT_UP ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.BRICK_BREAK ], + [ 36, MoveId.SWAGGER ], + [ 40, MoveId.CRUNCH ], + [ 44, MoveId.HIGH_JUMP_KICK ], + [ 48, MoveId.FOCUS_PUNCH ], + [ 52, MoveId.HEAD_SMASH ], ], [Species.SCRAFTY]: [ - [ 1, Moves.HEADBUTT ], - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.FEINT_ATTACK ], - [ 12, Moves.SAND_ATTACK ], - [ 16, Moves.FACADE ], - [ 20, Moves.PROTECT ], - [ 24, Moves.BEAT_UP ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.BRICK_BREAK ], - [ 36, Moves.SWAGGER ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.HIGH_JUMP_KICK ], - [ 54, Moves.FOCUS_PUNCH ], - [ 60, Moves.HEAD_SMASH ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.FEINT_ATTACK ], + [ 12, MoveId.SAND_ATTACK ], + [ 16, MoveId.FACADE ], + [ 20, MoveId.PROTECT ], + [ 24, MoveId.BEAT_UP ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.BRICK_BREAK ], + [ 36, MoveId.SWAGGER ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.HIGH_JUMP_KICK ], + [ 54, MoveId.FOCUS_PUNCH ], + [ 60, MoveId.HEAD_SMASH ], ], [Species.SIGILYPH]: [ - [ 1, Moves.GUST ], - [ 1, Moves.CONFUSION ], - [ 5, Moves.GRAVITY ], - [ 10, Moves.HYPNOSIS ], - [ 15, Moves.AIR_CUTTER ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.WHIRLWIND ], - [ 30, Moves.COSMIC_POWER ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.PSYCHIC ], - [ 45, Moves.TAILWIND ], - [ 50, Moves.LIGHT_SCREEN ], - [ 50, Moves.REFLECT ], - [ 55, Moves.SKY_ATTACK ], - [ 60, Moves.SKILL_SWAP ], + [ 1, MoveId.GUST ], + [ 1, MoveId.CONFUSION ], + [ 5, MoveId.GRAVITY ], + [ 10, MoveId.HYPNOSIS ], + [ 15, MoveId.AIR_CUTTER ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.WHIRLWIND ], + [ 30, MoveId.COSMIC_POWER ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.PSYCHIC ], + [ 45, MoveId.TAILWIND ], + [ 50, MoveId.LIGHT_SCREEN ], + [ 50, MoveId.REFLECT ], + [ 55, MoveId.SKY_ATTACK ], + [ 60, MoveId.SKILL_SWAP ], ], [Species.YAMASK]: [ - [ 1, Moves.PROTECT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HEAL_BLOCK ], - [ 4, Moves.HAZE ], - [ 8, Moves.NIGHT_SHADE ], - [ 12, Moves.DISABLE ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.CRAFTY_SHIELD ], - [ 24, Moves.HEX ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.GRUDGE ], - [ 36, Moves.CURSE ], - [ 40, Moves.SHADOW_BALL ], - [ 44, Moves.DARK_PULSE ], - [ 48, Moves.GUARD_SPLIT ], - [ 48, Moves.POWER_SPLIT ], - [ 52, Moves.DESTINY_BOND ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.HEAL_BLOCK ], + [ 4, MoveId.HAZE ], + [ 8, MoveId.NIGHT_SHADE ], + [ 12, MoveId.DISABLE ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.CRAFTY_SHIELD ], + [ 24, MoveId.HEX ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.GRUDGE ], + [ 36, MoveId.CURSE ], + [ 40, MoveId.SHADOW_BALL ], + [ 44, MoveId.DARK_PULSE ], + [ 48, MoveId.GUARD_SPLIT ], + [ 48, MoveId.POWER_SPLIT ], + [ 52, MoveId.DESTINY_BOND ], ], [Species.COFAGRIGUS]: [ - [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.HAZE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HEAL_BLOCK ], - [ 12, Moves.DISABLE ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.CRAFTY_SHIELD ], - [ 24, Moves.HEX ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.GRUDGE ], - [ 38, Moves.CURSE ], - [ 44, Moves.SHADOW_BALL ], - [ 50, Moves.DARK_PULSE ], - [ 56, Moves.GUARD_SPLIT ], - [ 56, Moves.POWER_SPLIT ], - [ 62, Moves.DESTINY_BOND ], + [ EVOLVE_MOVE, MoveId.SHADOW_CLAW ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.HAZE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.HEAL_BLOCK ], + [ 12, MoveId.DISABLE ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.CRAFTY_SHIELD ], + [ 24, MoveId.HEX ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.GRUDGE ], + [ 38, MoveId.CURSE ], + [ 44, MoveId.SHADOW_BALL ], + [ 50, MoveId.DARK_PULSE ], + [ 56, MoveId.GUARD_SPLIT ], + [ 56, MoveId.POWER_SPLIT ], + [ 62, MoveId.DESTINY_BOND ], ], [Species.TIRTOUGA]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.BIDE ], - [ 3, Moves.PROTECT ], - [ 6, Moves.AQUA_JET ], - [ 9, Moves.SMACK_DOWN ], - [ 12, Moves.ANCIENT_POWER ], - [ 15, Moves.BITE ], - [ 18, Moves.WIDE_GUARD ], - [ 21, Moves.BRINE ], - [ 24, Moves.ROCK_SLIDE ], - [ 27, Moves.CRUNCH ], - [ 30, Moves.CURSE ], - [ 33, Moves.IRON_DEFENSE ], - [ 36, Moves.AQUA_TAIL ], - [ 39, Moves.RAIN_DANCE ], - [ 42, Moves.HYDRO_PUMP ], - [ 45, Moves.SHELL_SMASH ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.BIDE ], + [ 3, MoveId.PROTECT ], + [ 6, MoveId.AQUA_JET ], + [ 9, MoveId.SMACK_DOWN ], + [ 12, MoveId.ANCIENT_POWER ], + [ 15, MoveId.BITE ], + [ 18, MoveId.WIDE_GUARD ], + [ 21, MoveId.BRINE ], + [ 24, MoveId.ROCK_SLIDE ], + [ 27, MoveId.CRUNCH ], + [ 30, MoveId.CURSE ], + [ 33, MoveId.IRON_DEFENSE ], + [ 36, MoveId.AQUA_TAIL ], + [ 39, MoveId.RAIN_DANCE ], + [ 42, MoveId.HYDRO_PUMP ], + [ 45, MoveId.SHELL_SMASH ], ], [Species.CARRACOSTA]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.PROTECT ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.BIDE ], - [ 9, Moves.SMACK_DOWN ], - [ 12, Moves.ANCIENT_POWER ], - [ 15, Moves.BITE ], - [ 18, Moves.WIDE_GUARD ], - [ 21, Moves.BRINE ], - [ 24, Moves.ROCK_SLIDE ], - [ 27, Moves.CRUNCH ], - [ 30, Moves.CURSE ], - [ 33, Moves.IRON_DEFENSE ], - [ 36, Moves.AQUA_TAIL ], - [ 41, Moves.RAIN_DANCE ], - [ 46, Moves.HYDRO_PUMP ], - [ 51, Moves.SHELL_SMASH ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.BIDE ], + [ 9, MoveId.SMACK_DOWN ], + [ 12, MoveId.ANCIENT_POWER ], + [ 15, MoveId.BITE ], + [ 18, MoveId.WIDE_GUARD ], + [ 21, MoveId.BRINE ], + [ 24, MoveId.ROCK_SLIDE ], + [ 27, MoveId.CRUNCH ], + [ 30, MoveId.CURSE ], + [ 33, MoveId.IRON_DEFENSE ], + [ 36, MoveId.AQUA_TAIL ], + [ 41, MoveId.RAIN_DANCE ], + [ 46, MoveId.HYDRO_PUMP ], + [ 51, MoveId.SHELL_SMASH ], ], [Species.ARCHEN]: [ - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 3, Moves.ROCK_THROW ], - [ 6, Moves.WING_ATTACK ], - [ 9, Moves.DRAGON_BREATH ], - [ 12, Moves.ANCIENT_POWER ], - [ 15, Moves.PLUCK ], - [ 18, Moves.QUICK_GUARD ], - [ 21, Moves.U_TURN ], - [ 24, Moves.ROCK_SLIDE ], - [ 27, Moves.SCARY_FACE ], - [ 30, Moves.CRUNCH ], - [ 33, Moves.AGILITY ], - [ 36, Moves.TAILWIND ], - [ 39, Moves.DRAGON_CLAW ], - [ 42, Moves.THRASH ], - [ 45, Moves.ENDEAVOR ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 3, MoveId.ROCK_THROW ], + [ 6, MoveId.WING_ATTACK ], + [ 9, MoveId.DRAGON_BREATH ], + [ 12, MoveId.ANCIENT_POWER ], + [ 15, MoveId.PLUCK ], + [ 18, MoveId.QUICK_GUARD ], + [ 21, MoveId.U_TURN ], + [ 24, MoveId.ROCK_SLIDE ], + [ 27, MoveId.SCARY_FACE ], + [ 30, MoveId.CRUNCH ], + [ 33, MoveId.AGILITY ], + [ 36, MoveId.TAILWIND ], + [ 39, MoveId.DRAGON_CLAW ], + [ 42, MoveId.THRASH ], + [ 45, MoveId.ENDEAVOR ], ], [Species.ARCHEOPS]: [ - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.QUICK_ATTACK ], - [ 9, Moves.DRAGON_BREATH ], - [ 12, Moves.ANCIENT_POWER ], - [ 15, Moves.PLUCK ], - [ 18, Moves.QUICK_GUARD ], - [ 21, Moves.U_TURN ], - [ 24, Moves.ROCK_SLIDE ], - [ 27, Moves.SCARY_FACE ], - [ 30, Moves.CRUNCH ], - [ 33, Moves.AGILITY ], - [ 36, Moves.TAILWIND ], - [ 41, Moves.DRAGON_CLAW ], - [ 46, Moves.THRASH ], - [ 51, Moves.ENDEAVOR ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.QUICK_ATTACK ], + [ 9, MoveId.DRAGON_BREATH ], + [ 12, MoveId.ANCIENT_POWER ], + [ 15, MoveId.PLUCK ], + [ 18, MoveId.QUICK_GUARD ], + [ 21, MoveId.U_TURN ], + [ 24, MoveId.ROCK_SLIDE ], + [ 27, MoveId.SCARY_FACE ], + [ 30, MoveId.CRUNCH ], + [ 33, MoveId.AGILITY ], + [ 36, MoveId.TAILWIND ], + [ 41, MoveId.DRAGON_CLAW ], + [ 46, MoveId.THRASH ], + [ 51, MoveId.ENDEAVOR ], ], [Species.TRUBBISH]: [ - [ 1, Moves.POUND ], - [ 1, Moves.POISON_GAS ], - [ 3, Moves.RECYCLE ], - [ 6, Moves.ACID_SPRAY ], - [ 9, Moves.AMNESIA ], - [ 12, Moves.CLEAR_SMOG ], - [ 15, Moves.TOXIC_SPIKES ], - [ 18, Moves.SLUDGE ], - [ 21, Moves.STOCKPILE ], - [ 21, Moves.SWALLOW ], - [ 24, Moves.TAKE_DOWN ], - [ 27, Moves.SLUDGE_BOMB ], - [ 30, Moves.TOXIC ], - [ 33, Moves.BELCH ], - [ 37, Moves.PAIN_SPLIT ], - [ 39, Moves.GUNK_SHOT ], - [ 42, Moves.EXPLOSION ], + [ 1, MoveId.POUND ], + [ 1, MoveId.POISON_GAS ], + [ 3, MoveId.RECYCLE ], + [ 6, MoveId.ACID_SPRAY ], + [ 9, MoveId.AMNESIA ], + [ 12, MoveId.CLEAR_SMOG ], + [ 15, MoveId.TOXIC_SPIKES ], + [ 18, MoveId.SLUDGE ], + [ 21, MoveId.STOCKPILE ], + [ 21, MoveId.SWALLOW ], + [ 24, MoveId.TAKE_DOWN ], + [ 27, MoveId.SLUDGE_BOMB ], + [ 30, MoveId.TOXIC ], + [ 33, MoveId.BELCH ], + [ 37, MoveId.PAIN_SPLIT ], + [ 39, MoveId.GUNK_SHOT ], + [ 42, MoveId.EXPLOSION ], ], [Species.GARBODOR]: [ - [ 1, Moves.POUND ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.ACID_SPRAY ], - [ 9, Moves.AMNESIA ], - [ 12, Moves.CLEAR_SMOG ], - [ 15, Moves.TOXIC_SPIKES ], - [ 18, Moves.SLUDGE ], - [ 21, Moves.STOCKPILE ], - [ 21, Moves.SWALLOW ], - [ 24, Moves.BODY_SLAM ], - [ 27, Moves.SLUDGE_BOMB ], - [ 30, Moves.TOXIC ], - [ 33, Moves.BELCH ], - [ 39, Moves.PAIN_SPLIT ], - [ 43, Moves.GUNK_SHOT ], - [ 48, Moves.EXPLOSION ], + [ 1, MoveId.POUND ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.ACID_SPRAY ], + [ 9, MoveId.AMNESIA ], + [ 12, MoveId.CLEAR_SMOG ], + [ 15, MoveId.TOXIC_SPIKES ], + [ 18, MoveId.SLUDGE ], + [ 21, MoveId.STOCKPILE ], + [ 21, MoveId.SWALLOW ], + [ 24, MoveId.BODY_SLAM ], + [ 27, MoveId.SLUDGE_BOMB ], + [ 30, MoveId.TOXIC ], + [ 33, MoveId.BELCH ], + [ 39, MoveId.PAIN_SPLIT ], + [ 43, MoveId.GUNK_SHOT ], + [ 48, MoveId.EXPLOSION ], ], [Species.ZORUA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 4, Moves.TORMENT ], - [ 8, Moves.HONE_CLAWS ], - [ 12, Moves.FURY_SWIPES ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.KNOCK_OFF ], - [ 28, Moves.FAKE_TEARS ], - [ 32, Moves.AGILITY ], - [ 36, Moves.IMPRISON ], - [ 40, Moves.NIGHT_DAZE ], - [ 44, Moves.NASTY_PLOT ], - [ 48, Moves.FOUL_PLAY ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 4, MoveId.TORMENT ], + [ 8, MoveId.HONE_CLAWS ], + [ 12, MoveId.FURY_SWIPES ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.KNOCK_OFF ], + [ 28, MoveId.FAKE_TEARS ], + [ 32, MoveId.AGILITY ], + [ 36, MoveId.IMPRISON ], + [ 40, MoveId.NIGHT_DAZE ], + [ 44, MoveId.NASTY_PLOT ], + [ 48, MoveId.FOUL_PLAY ], ], [Species.ZOROARK]: [ - [ EVOLVE_MOVE, Moves.NIGHT_SLASH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.TORMENT ], - [ 1, Moves.U_TURN ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.SCARY_FACE ], // Previous Stage Move - [ 1, Moves.PURSUIT ], - [ 12, Moves.FURY_SWIPES ], - [ 20, Moves.TAUNT ], - [ 24, Moves.KNOCK_OFF ], - [ 28, Moves.FAKE_TEARS ], - [ 34, Moves.AGILITY ], - [ 40, Moves.IMPRISON ], - [ 46, Moves.NIGHT_DAZE ], - [ 52, Moves.NASTY_PLOT ], - [ 58, Moves.FOUL_PLAY ], + [ EVOLVE_MOVE, MoveId.NIGHT_SLASH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.TORMENT ], + [ 1, MoveId.U_TURN ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.SCARY_FACE ], // Previous Stage Move + [ 1, MoveId.PURSUIT ], + [ 12, MoveId.FURY_SWIPES ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.KNOCK_OFF ], + [ 28, MoveId.FAKE_TEARS ], + [ 34, MoveId.AGILITY ], + [ 40, MoveId.IMPRISON ], + [ 46, MoveId.NIGHT_DAZE ], + [ 52, MoveId.NASTY_PLOT ], + [ 58, MoveId.FOUL_PLAY ], ], [Species.MINCCINO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 4, Moves.HELPING_HAND ], - [ 8, Moves.ECHOED_VOICE ], - [ 12, Moves.SING ], - [ 16, Moves.CHARM ], - [ 20, Moves.SWIFT ], - [ 24, Moves.ENCORE ], - [ 28, Moves.AFTER_YOU ], - [ 32, Moves.TAIL_SLAP ], - [ 36, Moves.TICKLE ], - [ 40, Moves.SLAM ], - [ 44, Moves.HYPER_VOICE ], - [ 48, Moves.LAST_RESORT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 4, MoveId.HELPING_HAND ], + [ 8, MoveId.ECHOED_VOICE ], + [ 12, MoveId.SING ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.SWIFT ], + [ 24, MoveId.ENCORE ], + [ 28, MoveId.AFTER_YOU ], + [ 32, MoveId.TAIL_SLAP ], + [ 36, MoveId.TICKLE ], + [ 40, MoveId.SLAM ], + [ 44, MoveId.HYPER_VOICE ], + [ 48, MoveId.LAST_RESORT ], ], [Species.CINCCINO]: [ - [ EVOLVE_MOVE, Moves.TAIL_SLAP ], - [ RELEARN_MOVE, Moves.SLAM ], - [ RELEARN_MOVE, Moves.SWIFT ], - [ RELEARN_MOVE, Moves.ENCORE ], - [ RELEARN_MOVE, Moves.HELPING_HAND ], - [ RELEARN_MOVE, Moves.HYPER_VOICE ], - [ RELEARN_MOVE, Moves.TICKLE ], - [ RELEARN_MOVE, Moves.ROCK_BLAST ], - [ RELEARN_MOVE, Moves.LAST_RESORT ], - [ RELEARN_MOVE, Moves.AFTER_YOU ], - [ RELEARN_MOVE, Moves.ECHOED_VOICE ], - [ RELEARN_MOVE, Moves.BABY_DOLL_EYES ], - [ 1, Moves.BULLET_SEED ], - [ 1, Moves.SING ], - [ 1, Moves.CHARM ], - [ 1, Moves.POUND ], + [ EVOLVE_MOVE, MoveId.TAIL_SLAP ], + [ RELEARN_MOVE, MoveId.SLAM ], + [ RELEARN_MOVE, MoveId.SWIFT ], + [ RELEARN_MOVE, MoveId.ENCORE ], + [ RELEARN_MOVE, MoveId.HELPING_HAND ], + [ RELEARN_MOVE, MoveId.HYPER_VOICE ], + [ RELEARN_MOVE, MoveId.TICKLE ], + [ RELEARN_MOVE, MoveId.ROCK_BLAST ], + [ RELEARN_MOVE, MoveId.LAST_RESORT ], + [ RELEARN_MOVE, MoveId.AFTER_YOU ], + [ RELEARN_MOVE, MoveId.ECHOED_VOICE ], + [ RELEARN_MOVE, MoveId.BABY_DOLL_EYES ], + [ 1, MoveId.BULLET_SEED ], + [ 1, MoveId.SING ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.POUND ], ], [Species.GOTHITA]: [ - [ 1, Moves.POUND ], - [ 1, Moves.CONFUSION ], - [ 4, Moves.PLAY_NICE ], - [ 8, Moves.TICKLE ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.HYPNOSIS ], - [ 28, Moves.FAKE_TEARS ], - [ 33, Moves.PSYCH_UP ], - [ 34, Moves.HEAL_BLOCK ], - [ 36, Moves.PSYCHIC ], - [ 40, Moves.FLATTER ], - [ 44, Moves.FUTURE_SIGHT ], - [ 48, Moves.MAGIC_ROOM ], + [ 1, MoveId.POUND ], + [ 1, MoveId.CONFUSION ], + [ 4, MoveId.PLAY_NICE ], + [ 8, MoveId.TICKLE ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.HYPNOSIS ], + [ 28, MoveId.FAKE_TEARS ], + [ 33, MoveId.PSYCH_UP ], + [ 34, MoveId.HEAL_BLOCK ], + [ 36, MoveId.PSYCHIC ], + [ 40, MoveId.FLATTER ], + [ 44, MoveId.FUTURE_SIGHT ], + [ 48, MoveId.MAGIC_ROOM ], ], [Species.GOTHORITA]: [ - [ 1, Moves.POUND ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.TICKLE ], - [ 1, Moves.PLAY_NICE ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.HYPNOSIS ], - [ 28, Moves.FAKE_TEARS ], - [ 34, Moves.HEAL_BLOCK ], - [ 35, Moves.PSYCH_UP ], - [ 40, Moves.PSYCHIC ], // Previous Stage Move, Gothitelle Level - [ 46, Moves.FLATTER ], - [ 52, Moves.FUTURE_SIGHT ], - [ 58, Moves.MAGIC_ROOM ], + [ 1, MoveId.POUND ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.TICKLE ], + [ 1, MoveId.PLAY_NICE ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.HYPNOSIS ], + [ 28, MoveId.FAKE_TEARS ], + [ 34, MoveId.HEAL_BLOCK ], + [ 35, MoveId.PSYCH_UP ], + [ 40, MoveId.PSYCHIC ], // Previous Stage Move, Gothitelle Level + [ 46, MoveId.FLATTER ], + [ 52, MoveId.FUTURE_SIGHT ], + [ 58, MoveId.MAGIC_ROOM ], ], [Species.GOTHITELLE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.TICKLE ], - [ 1, Moves.PLAY_NICE ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.HYPNOSIS ], - [ 28, Moves.FAKE_TEARS ], - [ 34, Moves.HEAL_BLOCK ], - [ 35, Moves.PSYCH_UP ], - [ 40, Moves.PSYCHIC ], - [ 48, Moves.FLATTER ], - [ 56, Moves.FUTURE_SIGHT ], - [ 64, Moves.MAGIC_ROOM ], + [ 1, MoveId.POUND ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.TICKLE ], + [ 1, MoveId.PLAY_NICE ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.HYPNOSIS ], + [ 28, MoveId.FAKE_TEARS ], + [ 34, MoveId.HEAL_BLOCK ], + [ 35, MoveId.PSYCH_UP ], + [ 40, MoveId.PSYCHIC ], + [ 48, MoveId.FLATTER ], + [ 56, MoveId.FUTURE_SIGHT ], + [ 64, MoveId.MAGIC_ROOM ], ], [Species.SOLOSIS]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.PROTECT ], - [ 1, Moves.PSYWAVE ], - [ 4, Moves.RECOVER ], - [ 8, Moves.ENDEAVOR ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.LIGHT_SCREEN ], - [ 24, Moves.REFLECT ], - [ 28, Moves.ALLY_SWITCH ], - [ 33, Moves.PAIN_SPLIT ], - [ 36, Moves.PSYCHIC ], - [ 40, Moves.SKILL_SWAP ], - [ 44, Moves.FUTURE_SIGHT ], - [ 46, Moves.HEAL_BLOCK ], - [ 48, Moves.WONDER_ROOM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.PSYWAVE ], + [ 4, MoveId.RECOVER ], + [ 8, MoveId.ENDEAVOR ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.LIGHT_SCREEN ], + [ 24, MoveId.REFLECT ], + [ 28, MoveId.ALLY_SWITCH ], + [ 33, MoveId.PAIN_SPLIT ], + [ 36, MoveId.PSYCHIC ], + [ 40, MoveId.SKILL_SWAP ], + [ 44, MoveId.FUTURE_SIGHT ], + [ 46, MoveId.HEAL_BLOCK ], + [ 48, MoveId.WONDER_ROOM ], ], [Species.DUOSION]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.RECOVER ], - [ 1, Moves.PSYWAVE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ENDEAVOR ], - [ 1, Moves.SNATCH ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.LIGHT_SCREEN ], - [ 24, Moves.REFLECT ], - [ 28, Moves.ALLY_SWITCH ], - [ 35, Moves.PAIN_SPLIT ], - [ 40, Moves.PSYCHIC ], - [ 46, Moves.SKILL_SWAP ], - [ 50, Moves.HEAL_BLOCK ], - [ 52, Moves.FUTURE_SIGHT ], - [ 58, Moves.WONDER_ROOM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.RECOVER ], + [ 1, MoveId.PSYWAVE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ENDEAVOR ], + [ 1, MoveId.SNATCH ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.LIGHT_SCREEN ], + [ 24, MoveId.REFLECT ], + [ 28, MoveId.ALLY_SWITCH ], + [ 35, MoveId.PAIN_SPLIT ], + [ 40, MoveId.PSYCHIC ], + [ 46, MoveId.SKILL_SWAP ], + [ 50, MoveId.HEAL_BLOCK ], + [ 52, MoveId.FUTURE_SIGHT ], + [ 58, MoveId.WONDER_ROOM ], ], [Species.REUNICLUS]: [ - [ EVOLVE_MOVE, Moves.HAMMER_ARM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.RECOVER ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ENDEAVOR ], - [ 1, Moves.DIZZY_PUNCH ], - [ 1, Moves.PSYWAVE ], - [ 1, Moves.SNATCH ], - [ 12, Moves.PSYBEAM ], - [ 16, Moves.CHARM ], - [ 20, Moves.PSYSHOCK ], - [ 24, Moves.LIGHT_SCREEN ], - [ 24, Moves.REFLECT ], - [ 28, Moves.ALLY_SWITCH ], - [ 35, Moves.PAIN_SPLIT ], - [ 40, Moves.PSYCHIC ], - [ 48, Moves.SKILL_SWAP ], - [ 54, Moves.HEAL_BLOCK ], - [ 56, Moves.FUTURE_SIGHT ], - [ 64, Moves.WONDER_ROOM ], + [ EVOLVE_MOVE, MoveId.HAMMER_ARM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.RECOVER ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ENDEAVOR ], + [ 1, MoveId.DIZZY_PUNCH ], + [ 1, MoveId.PSYWAVE ], + [ 1, MoveId.SNATCH ], + [ 12, MoveId.PSYBEAM ], + [ 16, MoveId.CHARM ], + [ 20, MoveId.PSYSHOCK ], + [ 24, MoveId.LIGHT_SCREEN ], + [ 24, MoveId.REFLECT ], + [ 28, MoveId.ALLY_SWITCH ], + [ 35, MoveId.PAIN_SPLIT ], + [ 40, MoveId.PSYCHIC ], + [ 48, MoveId.SKILL_SWAP ], + [ 54, MoveId.HEAL_BLOCK ], + [ 56, MoveId.FUTURE_SIGHT ], + [ 64, MoveId.WONDER_ROOM ], ], [Species.DUCKLETT]: [ - [ 1, Moves.WATER_GUN ], - [ 6, Moves.DEFOG ], - [ 9, Moves.WING_ATTACK ], - [ 13, Moves.WATER_PULSE ], - [ 15, Moves.AERIAL_ACE ], - [ 19, Moves.BUBBLE_BEAM ], - [ 21, Moves.FEATHER_DANCE ], - [ 24, Moves.AQUA_RING ], - [ 27, Moves.AIR_SLASH ], - [ 30, Moves.ROOST ], - [ 34, Moves.RAIN_DANCE ], - [ 37, Moves.TAILWIND ], - [ 41, Moves.BRAVE_BIRD ], - [ 46, Moves.HURRICANE ], + [ 1, MoveId.WATER_GUN ], + [ 6, MoveId.DEFOG ], + [ 9, MoveId.WING_ATTACK ], + [ 13, MoveId.WATER_PULSE ], + [ 15, MoveId.AERIAL_ACE ], + [ 19, MoveId.BUBBLE_BEAM ], + [ 21, MoveId.FEATHER_DANCE ], + [ 24, MoveId.AQUA_RING ], + [ 27, MoveId.AIR_SLASH ], + [ 30, MoveId.ROOST ], + [ 34, MoveId.RAIN_DANCE ], + [ 37, MoveId.TAILWIND ], + [ 41, MoveId.BRAVE_BIRD ], + [ 46, MoveId.HURRICANE ], ], [Species.SWANNA]: [ - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DEFOG ], - [ 13, Moves.WATER_PULSE ], - [ 15, Moves.AERIAL_ACE ], - [ 19, Moves.BUBBLE_BEAM ], - [ 21, Moves.FEATHER_DANCE ], - [ 24, Moves.AQUA_RING ], - [ 27, Moves.AIR_SLASH ], - [ 30, Moves.ROOST ], - [ 34, Moves.RAIN_DANCE ], - [ 40, Moves.TAILWIND ], - [ 47, Moves.BRAVE_BIRD ], - [ 55, Moves.HURRICANE ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DEFOG ], + [ 13, MoveId.WATER_PULSE ], + [ 15, MoveId.AERIAL_ACE ], + [ 19, MoveId.BUBBLE_BEAM ], + [ 21, MoveId.FEATHER_DANCE ], + [ 24, MoveId.AQUA_RING ], + [ 27, MoveId.AIR_SLASH ], + [ 30, MoveId.ROOST ], + [ 34, MoveId.RAIN_DANCE ], + [ 40, MoveId.TAILWIND ], + [ 47, MoveId.BRAVE_BIRD ], + [ 55, MoveId.HURRICANE ], ], [Species.VANILLITE]: [ - [ 1, Moves.HARDEN ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POWDER_SNOW ], // Custom - [ 4, Moves.TAUNT ], - [ 8, Moves.MIST ], - [ 12, Moves.ICY_WIND ], - [ 16, Moves.AVALANCHE ], - [ 20, Moves.HAIL ], - [ 24, Moves.ICICLE_SPEAR ], - [ 28, Moves.UPROAR ], - [ 32, Moves.ACID_ARMOR ], - [ 36, Moves.MIRROR_COAT ], - [ 40, Moves.ICE_BEAM ], - [ 44, Moves.BLIZZARD ], - [ 48, Moves.SHEER_COLD ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POWDER_SNOW ], // Custom + [ 4, MoveId.TAUNT ], + [ 8, MoveId.MIST ], + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.AVALANCHE ], + [ 20, MoveId.HAIL ], + [ 24, MoveId.ICICLE_SPEAR ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.ACID_ARMOR ], + [ 36, MoveId.MIRROR_COAT ], + [ 40, MoveId.ICE_BEAM ], + [ 44, MoveId.BLIZZARD ], + [ 48, MoveId.SHEER_COLD ], ], [Species.VANILLISH]: [ - [ 1, Moves.MIST ], - [ 1, Moves.HARDEN ], - [ 1, Moves.TAUNT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POWDER_SNOW ], // Previous Stage Move, Custom - [ 12, Moves.ICY_WIND ], - [ 16, Moves.AVALANCHE ], - [ 20, Moves.HAIL ], - [ 24, Moves.ICICLE_SPEAR ], - [ 28, Moves.UPROAR ], - [ 32, Moves.ACID_ARMOR ], - [ 38, Moves.MIRROR_COAT ], - [ 44, Moves.ICE_BEAM ], - [ 50, Moves.BLIZZARD ], - [ 56, Moves.SHEER_COLD ], + [ 1, MoveId.MIST ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POWDER_SNOW ], // Previous Stage Move, Custom + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.AVALANCHE ], + [ 20, MoveId.HAIL ], + [ 24, MoveId.ICICLE_SPEAR ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.ACID_ARMOR ], + [ 38, MoveId.MIRROR_COAT ], + [ 44, MoveId.ICE_BEAM ], + [ 50, MoveId.BLIZZARD ], + [ 56, MoveId.SHEER_COLD ], ], [Species.VANILLUXE]: [ - [ 1, Moves.MIST ], - [ 1, Moves.HARDEN ], - [ 1, Moves.TAUNT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POWDER_SNOW ], // Previous Stage Move, Custom - [ 1, Moves.WEATHER_BALL ], - [ 1, Moves.ICICLE_CRASH ], - [ 1, Moves.FREEZE_DRY ], - [ 12, Moves.ICY_WIND ], - [ 16, Moves.AVALANCHE ], - [ 20, Moves.HAIL ], - [ 24, Moves.ICICLE_SPEAR ], - [ 28, Moves.UPROAR ], - [ 32, Moves.ACID_ARMOR ], - [ 38, Moves.MIRROR_COAT ], - [ 44, Moves.ICE_BEAM ], - [ 52, Moves.BLIZZARD ], - [ 60, Moves.SHEER_COLD ], + [ 1, MoveId.MIST ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POWDER_SNOW ], // Previous Stage Move, Custom + [ 1, MoveId.WEATHER_BALL ], + [ 1, MoveId.ICICLE_CRASH ], + [ 1, MoveId.FREEZE_DRY ], + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.AVALANCHE ], + [ 20, MoveId.HAIL ], + [ 24, MoveId.ICICLE_SPEAR ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.ACID_ARMOR ], + [ 38, MoveId.MIRROR_COAT ], + [ 44, MoveId.ICE_BEAM ], + [ 52, MoveId.BLIZZARD ], + [ 60, MoveId.SHEER_COLD ], ], [Species.DEERLING]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CAMOUFLAGE ], - [ 4, Moves.GROWL ], - [ 7, Moves.SAND_ATTACK ], - [ 10, Moves.DOUBLE_KICK ], - [ 13, Moves.LEECH_SEED ], - [ 16, Moves.BULLET_SEED ], - [ 20, Moves.TAKE_DOWN ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 28, Moves.ENERGY_BALL ], - [ 32, Moves.CHARM ], - [ 37, Moves.DOUBLE_EDGE ], - [ 42, Moves.SOLAR_BEAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CAMOUFLAGE ], + [ 4, MoveId.GROWL ], + [ 7, MoveId.SAND_ATTACK ], + [ 10, MoveId.DOUBLE_KICK ], + [ 13, MoveId.LEECH_SEED ], + [ 16, MoveId.BULLET_SEED ], + [ 20, MoveId.TAKE_DOWN ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.ENERGY_BALL ], + [ 32, MoveId.CHARM ], + [ 37, MoveId.DOUBLE_EDGE ], + [ 42, MoveId.SOLAR_BEAM ], ], [Species.SAWSBUCK]: [ - [ EVOLVE_MOVE, Moves.HORN_LEECH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.CAMOUFLAGE ], - [ 1, Moves.MEGAHORN ], - [ 10, Moves.DOUBLE_KICK ], - [ 13, Moves.LEECH_SEED ], - [ 16, Moves.BULLET_SEED ], - [ 20, Moves.TAKE_DOWN ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 28, Moves.ENERGY_BALL ], - [ 36, Moves.CHARM ], - [ 44, Moves.DOUBLE_EDGE ], - [ 52, Moves.SOLAR_BEAM ], + [ EVOLVE_MOVE, MoveId.HORN_LEECH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CAMOUFLAGE ], + [ 1, MoveId.MEGAHORN ], + [ 10, MoveId.DOUBLE_KICK ], + [ 13, MoveId.LEECH_SEED ], + [ 16, MoveId.BULLET_SEED ], + [ 20, MoveId.TAKE_DOWN ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.ENERGY_BALL ], + [ 36, MoveId.CHARM ], + [ 44, MoveId.DOUBLE_EDGE ], + [ 52, MoveId.SOLAR_BEAM ], ], [Species.EMOLGA]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.NUZZLE ], - [ 5, Moves.DOUBLE_TEAM ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.CHARGE ], - [ 25, Moves.ACROBATICS ], - [ 30, Moves.SPARK ], - [ 35, Moves.ENCORE ], - [ 40, Moves.VOLT_SWITCH ], - [ 45, Moves.LIGHT_SCREEN ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.AGILITY ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.NUZZLE ], + [ 5, MoveId.DOUBLE_TEAM ], + [ 10, MoveId.QUICK_ATTACK ], + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.CHARGE ], + [ 25, MoveId.ACROBATICS ], + [ 30, MoveId.SPARK ], + [ 35, MoveId.ENCORE ], + [ 40, MoveId.VOLT_SWITCH ], + [ 45, MoveId.LIGHT_SCREEN ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.AGILITY ], ], [Species.KARRABLAST]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 4, Moves.FURY_CUTTER ], - [ 8, Moves.ENDURE ], - [ 12, Moves.FALSE_SWIPE ], - [ 16, Moves.ACID_SPRAY ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.FLAIL ], - [ 28, Moves.SCARY_FACE ], - [ 32, Moves.X_SCISSOR ], - [ 36, Moves.SWORDS_DANCE ], - [ 40, Moves.TAKE_DOWN ], - [ 44, Moves.BUG_BUZZ ], - [ 48, Moves.DOUBLE_EDGE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 4, MoveId.FURY_CUTTER ], + [ 8, MoveId.ENDURE ], + [ 12, MoveId.FALSE_SWIPE ], + [ 16, MoveId.ACID_SPRAY ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.FLAIL ], + [ 28, MoveId.SCARY_FACE ], + [ 32, MoveId.X_SCISSOR ], + [ 36, MoveId.SWORDS_DANCE ], + [ 40, MoveId.TAKE_DOWN ], + [ 44, MoveId.BUG_BUZZ ], + [ 48, MoveId.DOUBLE_EDGE ], ], [Species.ESCAVALIER]: [ - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.FLAIL ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.ENDURE ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.FELL_STINGER ], - [ 1, Moves.TWINEEDLE ], - [ 12, Moves.FALSE_SWIPE ], - [ 16, Moves.ACID_SPRAY ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.REVERSAL ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.X_SCISSOR ], - [ 36, Moves.SWORDS_DANCE ], - [ 40, Moves.IRON_HEAD ], - [ 44, Moves.BUG_BUZZ ], - [ 48, Moves.GIGA_IMPACT ], - [ 52, Moves.METAL_BURST ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.FELL_STINGER ], + [ 1, MoveId.TWINEEDLE ], + [ 12, MoveId.FALSE_SWIPE ], + [ 16, MoveId.ACID_SPRAY ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.REVERSAL ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.X_SCISSOR ], + [ 36, MoveId.SWORDS_DANCE ], + [ 40, MoveId.IRON_HEAD ], + [ 44, MoveId.BUG_BUZZ ], + [ 48, MoveId.GIGA_IMPACT ], + [ 52, MoveId.METAL_BURST ], ], [Species.FOONGUS]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.GROWTH ], - [ 8, Moves.STUN_SPORE ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.SYNTHESIS ], - [ 20, Moves.CLEAR_SMOG ], - [ 24, Moves.SWEET_SCENT ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.INGRAIN ], - [ 36, Moves.TOXIC ], - [ 40, Moves.RAGE_POWDER ], - [ 44, Moves.SOLAR_BEAM ], - [ 48, Moves.SPORE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.GROWTH ], + [ 8, MoveId.STUN_SPORE ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.SYNTHESIS ], + [ 20, MoveId.CLEAR_SMOG ], + [ 24, MoveId.SWEET_SCENT ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.INGRAIN ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.RAGE_POWDER ], + [ 44, MoveId.SOLAR_BEAM ], + [ 48, MoveId.SPORE ], ], [Species.AMOONGUSS]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.BIDE ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.SYNTHESIS ], - [ 20, Moves.CLEAR_SMOG ], - [ 24, Moves.SWEET_SCENT ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.INGRAIN ], - [ 36, Moves.TOXIC ], - [ 42, Moves.RAGE_POWDER ], - [ 48, Moves.SOLAR_BEAM ], - [ 54, Moves.SPORE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.BIDE ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.SYNTHESIS ], + [ 20, MoveId.CLEAR_SMOG ], + [ 24, MoveId.SWEET_SCENT ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.INGRAIN ], + [ 36, MoveId.TOXIC ], + [ 42, MoveId.RAGE_POWDER ], + [ 48, MoveId.SOLAR_BEAM ], + [ 54, MoveId.SPORE ], ], [Species.FRILLISH]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.WATER_SPORT ], - [ 4, Moves.POISON_STING ], - [ 8, Moves.NIGHT_SHADE ], - [ 12, Moves.WATER_PULSE ], - [ 16, Moves.RAIN_DANCE ], - [ 20, Moves.HEX ], - [ 24, Moves.BRINE ], - [ 28, Moves.RECOVER ], - [ 32, Moves.SHADOW_BALL ], - [ 36, Moves.WHIRLPOOL ], - [ 41, Moves.HYDRO_PUMP ], - [ 44, Moves.DESTINY_BOND ], - [ 48, Moves.WATER_SPOUT ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.WATER_SPORT ], + [ 4, MoveId.POISON_STING ], + [ 8, MoveId.NIGHT_SHADE ], + [ 12, MoveId.WATER_PULSE ], + [ 16, MoveId.RAIN_DANCE ], + [ 20, MoveId.HEX ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.RECOVER ], + [ 32, MoveId.SHADOW_BALL ], + [ 36, MoveId.WHIRLPOOL ], + [ 41, MoveId.HYDRO_PUMP ], + [ 44, MoveId.DESTINY_BOND ], + [ 48, MoveId.WATER_SPOUT ], ], [Species.JELLICENT]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WATER_SPORT ], - [ 1, Moves.WRING_OUT ], - [ 1, Moves.ABSORB ], - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.ACID_ARMOR ], - [ 12, Moves.WATER_PULSE ], - [ 16, Moves.RAIN_DANCE ], - [ 20, Moves.HEX ], - [ 24, Moves.BRINE ], - [ 28, Moves.RECOVER ], - [ 32, Moves.SHADOW_BALL ], - [ 36, Moves.WHIRLPOOL ], - [ 43, Moves.HYDRO_PUMP ], - [ 48, Moves.DESTINY_BOND ], - [ 54, Moves.WATER_SPOUT ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WATER_SPORT ], + [ 1, MoveId.WRING_OUT ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.ACID_ARMOR ], + [ 12, MoveId.WATER_PULSE ], + [ 16, MoveId.RAIN_DANCE ], + [ 20, MoveId.HEX ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.RECOVER ], + [ 32, MoveId.SHADOW_BALL ], + [ 36, MoveId.WHIRLPOOL ], + [ 43, MoveId.HYDRO_PUMP ], + [ 48, MoveId.DESTINY_BOND ], + [ 54, MoveId.WATER_SPOUT ], ], [Species.ALOMOMOLA]: [ - [ 1, Moves.POUND ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.WATER_SPORT ], - [ 5, Moves.AQUA_RING ], - [ 9, Moves.AQUA_JET ], - [ 13, Moves.HELPING_HAND ], - [ 13, Moves.WIDE_GUARD ], - [ 21, Moves.PROTECT ], - [ 25, Moves.WATER_PULSE ], - [ 29, Moves.HEALING_WISH ], - [ 33, Moves.SOAK ], - [ 37, Moves.WISH ], - [ 41, Moves.BRINE ], - [ 45, Moves.SAFEGUARD ], - [ 49, Moves.WHIRLPOOL ], - [ 55, Moves.HYDRO_PUMP ], + [ 1, MoveId.POUND ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.WATER_SPORT ], + [ 5, MoveId.AQUA_RING ], + [ 9, MoveId.AQUA_JET ], + [ 13, MoveId.HELPING_HAND ], + [ 13, MoveId.WIDE_GUARD ], + [ 21, MoveId.PROTECT ], + [ 25, MoveId.WATER_PULSE ], + [ 29, MoveId.HEALING_WISH ], + [ 33, MoveId.SOAK ], + [ 37, MoveId.WISH ], + [ 41, MoveId.BRINE ], + [ 45, MoveId.SAFEGUARD ], + [ 49, MoveId.WHIRLPOOL ], + [ 55, MoveId.HYDRO_PUMP ], ], [Species.JOLTIK]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.SPIDER_WEB ], - [ 4, Moves.ELECTROWEB ], - [ 8, Moves.BUG_BITE ], - [ 12, Moves.STRING_SHOT ], - [ 16, Moves.THUNDER_WAVE ], - [ 20, Moves.ELECTRO_BALL ], - [ 24, Moves.AGILITY ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.SLASH ], - [ 37, Moves.DISCHARGE ], - [ 40, Moves.SCREECH ], - [ 44, Moves.GASTRO_ACID ], - [ 48, Moves.BUG_BUZZ ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.SPIDER_WEB ], + [ 4, MoveId.ELECTROWEB ], + [ 8, MoveId.BUG_BITE ], + [ 12, MoveId.STRING_SHOT ], + [ 16, MoveId.THUNDER_WAVE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.SLASH ], + [ 37, MoveId.DISCHARGE ], + [ 40, MoveId.SCREECH ], + [ 44, MoveId.GASTRO_ACID ], + [ 48, MoveId.BUG_BUZZ ], ], [Species.GALVANTULA]: [ - [ EVOLVE_MOVE, Moves.STICKY_WEB ], - [ 1, Moves.ABSORB ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.ELECTROWEB ], - [ 1, Moves.SPIDER_WEB ], - [ 12, Moves.STRING_SHOT ], - [ 16, Moves.THUNDER_WAVE ], - [ 20, Moves.ELECTRO_BALL ], - [ 24, Moves.AGILITY ], - [ 28, Moves.SUCKER_PUNCH ], - [ 32, Moves.SLASH ], - [ 39, Moves.DISCHARGE ], - [ 44, Moves.SCREECH ], - [ 50, Moves.GASTRO_ACID ], - [ 56, Moves.BUG_BUZZ ], + [ EVOLVE_MOVE, MoveId.STICKY_WEB ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.ELECTROWEB ], + [ 1, MoveId.SPIDER_WEB ], + [ 12, MoveId.STRING_SHOT ], + [ 16, MoveId.THUNDER_WAVE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 32, MoveId.SLASH ], + [ 39, MoveId.DISCHARGE ], + [ 44, MoveId.SCREECH ], + [ 50, MoveId.GASTRO_ACID ], + [ 56, MoveId.BUG_BUZZ ], ], [Species.FERROSEED]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.METAL_CLAW ], - [ 10, Moves.PIN_MISSILE ], - [ 15, Moves.INGRAIN ], - [ 20, Moves.FLASH_CANNON ], - [ 25, Moves.IRON_HEAD ], - [ 30, Moves.SELF_DESTRUCT ], - [ 35, Moves.IRON_DEFENSE ], - [ 41, Moves.CURSE ], - [ 45, Moves.GYRO_BALL ], - [ 50, Moves.EXPLOSION ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.METAL_CLAW ], + [ 10, MoveId.PIN_MISSILE ], + [ 15, MoveId.INGRAIN ], + [ 20, MoveId.FLASH_CANNON ], + [ 25, MoveId.IRON_HEAD ], + [ 30, MoveId.SELF_DESTRUCT ], + [ 35, MoveId.IRON_DEFENSE ], + [ 41, MoveId.CURSE ], + [ 45, MoveId.GYRO_BALL ], + [ 50, MoveId.EXPLOSION ], ], [Species.FERROTHORN]: [ - [ EVOLVE_MOVE, Moves.POWER_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.PIN_MISSILE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.ROCK_CLIMB ], - [ 15, Moves.INGRAIN ], - [ 20, Moves.FLASH_CANNON ], - [ 25, Moves.IRON_HEAD ], - [ 30, Moves.SELF_DESTRUCT ], - [ 35, Moves.IRON_DEFENSE ], - [ 43, Moves.CURSE ], - [ 49, Moves.GYRO_BALL ], - [ 56, Moves.EXPLOSION ], + [ EVOLVE_MOVE, MoveId.POWER_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PIN_MISSILE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.ROCK_CLIMB ], + [ 15, MoveId.INGRAIN ], + [ 20, MoveId.FLASH_CANNON ], + [ 25, MoveId.IRON_HEAD ], + [ 30, MoveId.SELF_DESTRUCT ], + [ 35, MoveId.IRON_DEFENSE ], + [ 43, MoveId.CURSE ], + [ 49, MoveId.GYRO_BALL ], + [ 56, MoveId.EXPLOSION ], ], [Species.KLINK]: [ - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.THUNDER_SHOCK ], - [ 4, Moves.BIND ], - [ 8, Moves.CHARGE ], - [ 12, Moves.CHARGE_BEAM ], - [ 16, Moves.METAL_SOUND ], - [ 20, Moves.AUTOTOMIZE ], - [ 24, Moves.DISCHARGE ], - [ 28, Moves.SCREECH ], - [ 32, Moves.GEAR_GRIND ], - [ 36, Moves.LOCK_ON ], - [ 40, Moves.SHIFT_GEAR ], - [ 44, Moves.ZAP_CANNON ], - [ 48, Moves.HYPER_BEAM ], + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 4, MoveId.BIND ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.CHARGE_BEAM ], + [ 16, MoveId.METAL_SOUND ], + [ 20, MoveId.AUTOTOMIZE ], + [ 24, MoveId.DISCHARGE ], + [ 28, MoveId.SCREECH ], + [ 32, MoveId.GEAR_GRIND ], + [ 36, MoveId.LOCK_ON ], + [ 40, MoveId.SHIFT_GEAR ], + [ 44, MoveId.ZAP_CANNON ], + [ 48, MoveId.HYPER_BEAM ], ], [Species.KLANG]: [ - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.BIND ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.CHARGE ], - [ 12, Moves.CHARGE_BEAM ], - [ 16, Moves.METAL_SOUND ], - [ 20, Moves.AUTOTOMIZE ], - [ 24, Moves.DISCHARGE ], - [ 28, Moves.SCREECH ], - [ 32, Moves.GEAR_GRIND ], - [ 36, Moves.LOCK_ON ], - [ 42, Moves.SHIFT_GEAR ], - [ 48, Moves.ZAP_CANNON ], - [ 54, Moves.HYPER_BEAM ], + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.BIND ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.CHARGE ], + [ 12, MoveId.CHARGE_BEAM ], + [ 16, MoveId.METAL_SOUND ], + [ 20, MoveId.AUTOTOMIZE ], + [ 24, MoveId.DISCHARGE ], + [ 28, MoveId.SCREECH ], + [ 32, MoveId.GEAR_GRIND ], + [ 36, MoveId.LOCK_ON ], + [ 42, MoveId.SHIFT_GEAR ], + [ 48, MoveId.ZAP_CANNON ], + [ 54, MoveId.HYPER_BEAM ], ], [Species.KLINKLANG]: [ - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.BIND ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.CHARGE ], - [ 1, Moves.MAGNETIC_FLUX ], - [ 1, Moves.GEAR_UP ], - [ 12, Moves.CHARGE_BEAM ], - [ 16, Moves.METAL_SOUND ], - [ 20, Moves.AUTOTOMIZE ], - [ 24, Moves.DISCHARGE ], - [ 28, Moves.SCREECH ], - [ 32, Moves.GEAR_GRIND ], - [ 36, Moves.LOCK_ON ], - [ 42, Moves.SHIFT_GEAR ], - [ 48, Moves.ZAP_CANNON ], - [ 56, Moves.HYPER_BEAM ], - [ 64, Moves.ELECTRIC_TERRAIN ], + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.BIND ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.MAGNETIC_FLUX ], + [ 1, MoveId.GEAR_UP ], + [ 12, MoveId.CHARGE_BEAM ], + [ 16, MoveId.METAL_SOUND ], + [ 20, MoveId.AUTOTOMIZE ], + [ 24, MoveId.DISCHARGE ], + [ 28, MoveId.SCREECH ], + [ 32, MoveId.GEAR_GRIND ], + [ 36, MoveId.LOCK_ON ], + [ 42, MoveId.SHIFT_GEAR ], + [ 48, MoveId.ZAP_CANNON ], + [ 56, MoveId.HYPER_BEAM ], + [ 64, MoveId.ELECTRIC_TERRAIN ], ], [Species.TYNAMO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.SPARK ], - [ 1, Moves.CHARGE_BEAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.SPARK ], + [ 1, MoveId.CHARGE_BEAM ], ], [Species.EELEKTRIK]: [ - [ EVOLVE_MOVE, Moves.CRUNCH ], - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.HEADBUTT ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.SPARK ], - [ 1, Moves.CHARGE_BEAM ], - [ 1, Moves.ION_DELUGE ], - [ 9, Moves.BIND ], - [ 19, Moves.ACID ], - [ 29, Moves.DISCHARGE ], - [ 44, Moves.THUNDERBOLT ], - [ 49, Moves.ACID_SPRAY ], - [ 54, Moves.COIL ], - [ 59, Moves.WILD_CHARGE ], - [ 64, Moves.GASTRO_ACID ], - [ 69, Moves.ZAP_CANNON ], - [ 74, Moves.THRASH ], + [ EVOLVE_MOVE, MoveId.CRUNCH ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.SPARK ], + [ 1, MoveId.CHARGE_BEAM ], + [ 1, MoveId.ION_DELUGE ], + [ 9, MoveId.BIND ], + [ 19, MoveId.ACID ], + [ 29, MoveId.DISCHARGE ], + [ 44, MoveId.THUNDERBOLT ], + [ 49, MoveId.ACID_SPRAY ], + [ 54, MoveId.COIL ], + [ 59, MoveId.WILD_CHARGE ], + [ 64, MoveId.GASTRO_ACID ], + [ 69, MoveId.ZAP_CANNON ], + [ 74, MoveId.THRASH ], ], [Species.EELEKTROSS]: [ - [ RELEARN_MOVE, Moves.THUNDERBOLT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.ACID_SPRAY ], // Previous Stage Move - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.HEADBUTT ], - [ 1, Moves.THUNDER_WAVE ], // Previous Stage Move - [ 1, Moves.SPARK ], // Previous Stage Move - [ 1, Moves.CHARGE_BEAM ], // Previous Stage Move - [ 1, Moves.ION_DELUGE ], // Previous Stage Move - [ 1, Moves.BIND ], // Previous Stage Move - [ 1, Moves.THRASH ], - [ 1, Moves.ACID ], - [ 1, Moves.ZAP_CANNON ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.CRUSH_CLAW ], - [ 1, Moves.GASTRO_ACID ], - [ 1, Moves.DISCHARGE ], - [ 1, Moves.COIL ], - [ 5, Moves.WILD_CHARGE ], + [ RELEARN_MOVE, MoveId.THUNDERBOLT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.ACID_SPRAY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.THUNDER_WAVE ], // Previous Stage Move + [ 1, MoveId.SPARK ], // Previous Stage Move + [ 1, MoveId.CHARGE_BEAM ], // Previous Stage Move + [ 1, MoveId.ION_DELUGE ], // Previous Stage Move + [ 1, MoveId.BIND ], // Previous Stage Move + [ 1, MoveId.THRASH ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ZAP_CANNON ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.CRUSH_CLAW ], + [ 1, MoveId.GASTRO_ACID ], + [ 1, MoveId.DISCHARGE ], + [ 1, MoveId.COIL ], + [ 5, MoveId.WILD_CHARGE ], ], [Species.ELGYEM]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], - [ 6, Moves.IMPRISON ], - [ 8, Moves.HEAL_BLOCK ], - [ 12, Moves.TELEPORT ], - [ 18, Moves.PSYBEAM ], - [ 24, Moves.GUARD_SPLIT ], - [ 24, Moves.POWER_SPLIT ], - [ 30, Moves.HEADBUTT ], - [ 36, Moves.ZEN_HEADBUTT ], - [ 43, Moves.RECOVER ], - [ 48, Moves.CALM_MIND ], - [ 54, Moves.WONDER_ROOM ], - [ 60, Moves.PSYCHIC ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CONFUSION ], + [ 6, MoveId.IMPRISON ], + [ 8, MoveId.HEAL_BLOCK ], + [ 12, MoveId.TELEPORT ], + [ 18, MoveId.PSYBEAM ], + [ 24, MoveId.GUARD_SPLIT ], + [ 24, MoveId.POWER_SPLIT ], + [ 30, MoveId.HEADBUTT ], + [ 36, MoveId.ZEN_HEADBUTT ], + [ 43, MoveId.RECOVER ], + [ 48, MoveId.CALM_MIND ], + [ 54, MoveId.WONDER_ROOM ], + [ 60, MoveId.PSYCHIC ], ], [Species.BEHEEYEM]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SYNCHRONOISE ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.PSYCHIC_TERRAIN ], - [ 8, Moves.HEAL_BLOCK ], - [ 18, Moves.PSYBEAM ], - [ 24, Moves.GUARD_SPLIT ], - [ 24, Moves.POWER_SPLIT ], - [ 30, Moves.HEADBUTT ], - [ 36, Moves.ZEN_HEADBUTT ], - [ 45, Moves.RECOVER ], - [ 52, Moves.CALM_MIND ], - [ 60, Moves.WONDER_ROOM ], - [ 68, Moves.PSYCHIC ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.SYNCHRONOISE ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.PSYCHIC_TERRAIN ], + [ 8, MoveId.HEAL_BLOCK ], + [ 18, MoveId.PSYBEAM ], + [ 24, MoveId.GUARD_SPLIT ], + [ 24, MoveId.POWER_SPLIT ], + [ 30, MoveId.HEADBUTT ], + [ 36, MoveId.ZEN_HEADBUTT ], + [ 45, MoveId.RECOVER ], + [ 52, MoveId.CALM_MIND ], + [ 60, MoveId.WONDER_ROOM ], + [ 68, MoveId.PSYCHIC ], ], [Species.LITWICK]: [ - [ 1, Moves.SMOG ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.EMBER ], - [ 8, Moves.MINIMIZE ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.HEX ], - [ 20, Moves.WILL_O_WISP ], - [ 24, Moves.FIRE_SPIN ], - [ 28, Moves.NIGHT_SHADE ], - [ 32, Moves.CURSE ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.INFERNO ], - [ 44, Moves.IMPRISON ], - [ 48, Moves.PAIN_SPLIT ], - [ 52, Moves.OVERHEAT ], - [ 56, Moves.MEMENTO ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.EMBER ], + [ 8, MoveId.MINIMIZE ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.HEX ], + [ 20, MoveId.WILL_O_WISP ], + [ 24, MoveId.FIRE_SPIN ], + [ 28, MoveId.NIGHT_SHADE ], + [ 32, MoveId.CURSE ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.INFERNO ], + [ 44, MoveId.IMPRISON ], + [ 48, MoveId.PAIN_SPLIT ], + [ 52, MoveId.OVERHEAT ], + [ 56, MoveId.MEMENTO ], ], [Species.LAMPENT]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.MINIMIZE ], - [ 1, Moves.SMOG ], - [ 1, Moves.ASTONISH ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.HEX ], - [ 20, Moves.WILL_O_WISP ], - [ 24, Moves.FIRE_SPIN ], - [ 28, Moves.NIGHT_SHADE ], - [ 32, Moves.CURSE ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.INFERNO ], - [ 46, Moves.IMPRISON ], - [ 52, Moves.PAIN_SPLIT ], - [ 58, Moves.OVERHEAT ], - [ 64, Moves.MEMENTO ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.ASTONISH ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.HEX ], + [ 20, MoveId.WILL_O_WISP ], + [ 24, MoveId.FIRE_SPIN ], + [ 28, MoveId.NIGHT_SHADE ], + [ 32, MoveId.CURSE ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.INFERNO ], + [ 46, MoveId.IMPRISON ], + [ 52, MoveId.PAIN_SPLIT ], + [ 58, MoveId.OVERHEAT ], + [ 64, MoveId.MEMENTO ], ], [Species.CHANDELURE]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.MINIMIZE ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.SMOG ], - [ 1, Moves.CURSE ], - [ 1, Moves.PAIN_SPLIT ], - [ 1, Moves.SHADOW_BALL ], - [ 1, Moves.WILL_O_WISP ], - [ 1, Moves.MEMENTO ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.OVERHEAT ], - [ 1, Moves.HEX ], - [ 1, Moves.INFERNO ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.FIRE_SPIN ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.CURSE ], + [ 1, MoveId.PAIN_SPLIT ], + [ 1, MoveId.SHADOW_BALL ], + [ 1, MoveId.WILL_O_WISP ], + [ 1, MoveId.MEMENTO ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.OVERHEAT ], + [ 1, MoveId.HEX ], + [ 1, MoveId.INFERNO ], ], [Species.AXEW]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 3, Moves.BITE ], - [ 6, Moves.FALSE_SWIPE ], - [ 9, Moves.ASSURANCE ], - [ 12, Moves.TAUNT ], - [ 15, Moves.SLASH ], - [ 18, Moves.DRAGON_CLAW ], - [ 21, Moves.SCARY_FACE ], - [ 24, Moves.CRUNCH ], - [ 27, Moves.DRAGON_DANCE ], - [ 30, Moves.DUAL_CHOP ], - [ 33, Moves.FOCUS_ENERGY ], - [ 36, Moves.DRAGON_PULSE ], - [ 39, Moves.SWORDS_DANCE ], - [ 42, Moves.OUTRAGE ], - [ 45, Moves.GUILLOTINE ], - [ 48, Moves.GIGA_IMPACT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 3, MoveId.BITE ], + [ 6, MoveId.FALSE_SWIPE ], + [ 9, MoveId.ASSURANCE ], + [ 12, MoveId.TAUNT ], + [ 15, MoveId.SLASH ], + [ 18, MoveId.DRAGON_CLAW ], + [ 21, MoveId.SCARY_FACE ], + [ 24, MoveId.CRUNCH ], + [ 27, MoveId.DRAGON_DANCE ], + [ 30, MoveId.DUAL_CHOP ], + [ 33, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.DRAGON_PULSE ], + [ 39, MoveId.SWORDS_DANCE ], + [ 42, MoveId.OUTRAGE ], + [ 45, MoveId.GUILLOTINE ], + [ 48, MoveId.GIGA_IMPACT ], ], [Species.FRAXURE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.DUAL_CHOP ], - [ 9, Moves.ASSURANCE ], - [ 12, Moves.TAUNT ], - [ 15, Moves.SLASH ], - [ 18, Moves.DRAGON_CLAW ], - [ 21, Moves.SCARY_FACE ], - [ 24, Moves.CRUNCH ], - [ 27, Moves.DRAGON_DANCE ], - [ 30, Moves.BREAKING_SWIPE ], - [ 33, Moves.FOCUS_ENERGY ], - [ 36, Moves.DRAGON_PULSE ], - [ 41, Moves.SWORDS_DANCE ], - [ 46, Moves.OUTRAGE ], - [ 51, Moves.GUILLOTINE ], - [ 56, Moves.GIGA_IMPACT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FALSE_SWIPE ], + [ 1, MoveId.DUAL_CHOP ], + [ 9, MoveId.ASSURANCE ], + [ 12, MoveId.TAUNT ], + [ 15, MoveId.SLASH ], + [ 18, MoveId.DRAGON_CLAW ], + [ 21, MoveId.SCARY_FACE ], + [ 24, MoveId.CRUNCH ], + [ 27, MoveId.DRAGON_DANCE ], + [ 30, MoveId.BREAKING_SWIPE ], + [ 33, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.DRAGON_PULSE ], + [ 41, MoveId.SWORDS_DANCE ], + [ 46, MoveId.OUTRAGE ], + [ 51, MoveId.GUILLOTINE ], + [ 56, MoveId.GIGA_IMPACT ], ], [Species.HAXORUS]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.DUAL_CHOP ], - [ 9, Moves.ASSURANCE ], - [ 12, Moves.TAUNT ], - [ 15, Moves.SLASH ], - [ 18, Moves.DRAGON_CLAW ], - [ 21, Moves.SCARY_FACE ], - [ 24, Moves.CRUNCH ], - [ 27, Moves.DRAGON_DANCE ], - [ 30, Moves.BREAKING_SWIPE ], - [ 33, Moves.FOCUS_ENERGY ], - [ 36, Moves.DRAGON_PULSE ], - [ 41, Moves.SWORDS_DANCE ], - [ 46, Moves.OUTRAGE ], - [ 53, Moves.GUILLOTINE ], - [ 60, Moves.GIGA_IMPACT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FALSE_SWIPE ], + [ 1, MoveId.DUAL_CHOP ], + [ 9, MoveId.ASSURANCE ], + [ 12, MoveId.TAUNT ], + [ 15, MoveId.SLASH ], + [ 18, MoveId.DRAGON_CLAW ], + [ 21, MoveId.SCARY_FACE ], + [ 24, MoveId.CRUNCH ], + [ 27, MoveId.DRAGON_DANCE ], + [ 30, MoveId.BREAKING_SWIPE ], + [ 33, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.DRAGON_PULSE ], + [ 41, MoveId.SWORDS_DANCE ], + [ 46, MoveId.OUTRAGE ], + [ 53, MoveId.GUILLOTINE ], + [ 60, MoveId.GIGA_IMPACT ], ], [Species.CUBCHOO]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.POWDER_SNOW ], - [ 3, Moves.ENDURE ], - [ 6, Moves.FURY_SWIPES ], - [ 9, Moves.ICY_WIND ], - [ 12, Moves.PLAY_NICE ], - [ 15, Moves.BRINE ], - [ 18, Moves.FROST_BREATH ], - [ 21, Moves.SLASH ], - [ 24, Moves.FLAIL ], - [ 27, Moves.CHARM ], - [ 30, Moves.SNOWSCAPE ], - [ 33, Moves.THRASH ], - [ 36, Moves.REST ], - [ 39, Moves.BLIZZARD ], - [ 42, Moves.SHEER_COLD ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.POWDER_SNOW ], + [ 3, MoveId.ENDURE ], + [ 6, MoveId.FURY_SWIPES ], + [ 9, MoveId.ICY_WIND ], + [ 12, MoveId.PLAY_NICE ], + [ 15, MoveId.BRINE ], + [ 18, MoveId.FROST_BREATH ], + [ 21, MoveId.SLASH ], + [ 24, MoveId.FLAIL ], + [ 27, MoveId.CHARM ], + [ 30, MoveId.SNOWSCAPE ], + [ 33, MoveId.THRASH ], + [ 36, MoveId.REST ], + [ 39, MoveId.BLIZZARD ], + [ 42, MoveId.SHEER_COLD ], ], [Species.BEARTIC]: [ - [ EVOLVE_MOVE, Moves.ICICLE_CRASH ], - [ 1, Moves.GROWL ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ENDURE ], - [ 1, Moves.CHARM ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.BIDE ], - [ 9, Moves.ICY_WIND ], - [ 12, Moves.PLAY_NICE ], - [ 15, Moves.BRINE ], - [ 18, Moves.FROST_BREATH ], - [ 21, Moves.SLASH ], - [ 24, Moves.FLAIL ], - [ 27, Moves.SWAGGER ], - [ 30, Moves.SNOWSCAPE ], - [ 33, Moves.THRASH ], - [ 36, Moves.REST ], - [ 41, Moves.BLIZZARD ], - [ 46, Moves.SHEER_COLD ], - [ 51, Moves.SUPERPOWER ], + [ EVOLVE_MOVE, MoveId.ICICLE_CRASH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FURY_SWIPES ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.BIDE ], + [ 9, MoveId.ICY_WIND ], + [ 12, MoveId.PLAY_NICE ], + [ 15, MoveId.BRINE ], + [ 18, MoveId.FROST_BREATH ], + [ 21, MoveId.SLASH ], + [ 24, MoveId.FLAIL ], + [ 27, MoveId.SWAGGER ], + [ 30, MoveId.SNOWSCAPE ], + [ 33, MoveId.THRASH ], + [ 36, MoveId.REST ], + [ 41, MoveId.BLIZZARD ], + [ 46, MoveId.SHEER_COLD ], + [ 51, MoveId.SUPERPOWER ], ], [Species.CRYOGONAL]: [ - [ 1, Moves.BIND ], - [ 1, Moves.ICE_SHARD ], - [ 4, Moves.CONFUSE_RAY ], - [ 8, Moves.RAPID_SPIN ], - [ 12, Moves.ICY_WIND ], - [ 16, Moves.MIST ], - [ 16, Moves.HAZE ], - [ 20, Moves.ANCIENT_POWER ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.SLASH ], - [ 32, Moves.NIGHT_SLASH ], - [ 36, Moves.FREEZE_DRY ], - [ 40, Moves.LIGHT_SCREEN ], - [ 40, Moves.REFLECT ], - [ 44, Moves.RECOVER ], - [ 48, Moves.ICE_BEAM ], - [ 52, Moves.ACID_ARMOR ], - [ 56, Moves.SOLAR_BEAM ], - [ 60, Moves.SHEER_COLD ], + [ 1, MoveId.BIND ], + [ 1, MoveId.ICE_SHARD ], + [ 4, MoveId.CONFUSE_RAY ], + [ 8, MoveId.RAPID_SPIN ], + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.MIST ], + [ 16, MoveId.HAZE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.NIGHT_SLASH ], + [ 36, MoveId.FREEZE_DRY ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 40, MoveId.REFLECT ], + [ 44, MoveId.RECOVER ], + [ 48, MoveId.ICE_BEAM ], + [ 52, MoveId.ACID_ARMOR ], + [ 56, MoveId.SOLAR_BEAM ], + [ 60, MoveId.SHEER_COLD ], ], [Species.SHELMET]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.PROTECT ], - [ 4, Moves.ACID ], - [ 8, Moves.CURSE ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.STRUGGLE_BUG ], - [ 20, Moves.YAWN ], - [ 24, Moves.ACID_ARMOR ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.GUARD_SWAP ], - [ 36, Moves.BODY_SLAM ], - [ 40, Moves.RECOVER ], - [ 44, Moves.BUG_BUZZ ], - [ 48, Moves.FINAL_GAMBIT ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.PROTECT ], + [ 4, MoveId.ACID ], + [ 8, MoveId.CURSE ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.STRUGGLE_BUG ], + [ 20, MoveId.YAWN ], + [ 24, MoveId.ACID_ARMOR ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.GUARD_SWAP ], + [ 36, MoveId.BODY_SLAM ], + [ 40, MoveId.RECOVER ], + [ 44, MoveId.BUG_BUZZ ], + [ 48, MoveId.FINAL_GAMBIT ], ], [Species.ACCELGOR]: [ - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.ACID ], - [ 1, Moves.ABSORB ], - [ 1, Moves.PROTECT ], // Previous Stage Move - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ACID_ARMOR ], - [ 1, Moves.CURSE ], - [ 1, Moves.YAWN ], - [ 1, Moves.GUARD_SWAP ], - [ 1, Moves.ACID_SPRAY ], - [ 1, Moves.WATER_SHURIKEN ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.STRUGGLE_BUG ], - [ 20, Moves.SWIFT ], - [ 24, Moves.AGILITY ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.POWER_SWAP ], - [ 36, Moves.U_TURN ], - [ 40, Moves.RECOVER ], - [ 44, Moves.BUG_BUZZ ], - [ 48, Moves.FINAL_GAMBIT ], - [ 52, Moves.TOXIC ], + [ 1, MoveId.BODY_SLAM ], + [ 1, MoveId.ACID ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.PROTECT ], // Previous Stage Move + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ACID_ARMOR ], + [ 1, MoveId.CURSE ], + [ 1, MoveId.YAWN ], + [ 1, MoveId.GUARD_SWAP ], + [ 1, MoveId.ACID_SPRAY ], + [ 1, MoveId.WATER_SHURIKEN ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.STRUGGLE_BUG ], + [ 20, MoveId.SWIFT ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.POWER_SWAP ], + [ 36, MoveId.U_TURN ], + [ 40, MoveId.RECOVER ], + [ 44, MoveId.BUG_BUZZ ], + [ 48, MoveId.FINAL_GAMBIT ], + [ 52, MoveId.TOXIC ], ], [Species.STUNFISK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.MUD_SPORT ], - [ 5, Moves.ENDURE ], - [ 10, Moves.MUD_SHOT ], - [ 15, Moves.REVENGE ], - [ 20, Moves.CHARGE ], - [ 25, Moves.SUCKER_PUNCH ], - [ 30, Moves.ELECTRIC_TERRAIN ], - [ 35, Moves.BOUNCE ], - [ 40, Moves.MUDDY_WATER ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.FLAIL ], - [ 55, Moves.FISSURE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.MUD_SPORT ], + [ 5, MoveId.ENDURE ], + [ 10, MoveId.MUD_SHOT ], + [ 15, MoveId.REVENGE ], + [ 20, MoveId.CHARGE ], + [ 25, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.ELECTRIC_TERRAIN ], + [ 35, MoveId.BOUNCE ], + [ 40, MoveId.MUDDY_WATER ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.FLAIL ], + [ 55, MoveId.FISSURE ], ], [Species.MIENFOO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.DETECT ], - [ 5, Moves.FAKE_OUT ], - [ 10, Moves.REVERSAL ], - [ 15, Moves.FURY_SWIPES ], - [ 20, Moves.QUICK_GUARD ], - [ 25, Moves.FORCE_PALM ], - [ 30, Moves.U_TURN ], - [ 35, Moves.DRAIN_PUNCH ], - [ 40, Moves.HONE_CLAWS ], - [ 45, Moves.AURA_SPHERE ], - [ 51, Moves.BOUNCE ], - [ 55, Moves.CALM_MIND ], - [ 60, Moves.HIGH_JUMP_KICK ], + [ 1, MoveId.POUND ], + [ 1, MoveId.DETECT ], + [ 5, MoveId.FAKE_OUT ], + [ 10, MoveId.REVERSAL ], + [ 15, MoveId.FURY_SWIPES ], + [ 20, MoveId.QUICK_GUARD ], + [ 25, MoveId.FORCE_PALM ], + [ 30, MoveId.U_TURN ], + [ 35, MoveId.DRAIN_PUNCH ], + [ 40, MoveId.HONE_CLAWS ], + [ 45, MoveId.AURA_SPHERE ], + [ 51, MoveId.BOUNCE ], + [ 55, MoveId.CALM_MIND ], + [ 60, MoveId.HIGH_JUMP_KICK ], ], [Species.MIENSHAO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.DETECT ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.QUICK_GUARD ], - [ 15, Moves.FURY_SWIPES ], - [ 20, Moves.WIDE_GUARD ], - [ 25, Moves.FORCE_PALM ], - [ 30, Moves.U_TURN ], - [ 35, Moves.DRAIN_PUNCH ], - [ 40, Moves.HONE_CLAWS ], - [ 45, Moves.AURA_SPHERE ], - [ 53, Moves.BOUNCE ], - [ 59, Moves.CALM_MIND ], - [ 66, Moves.HIGH_JUMP_KICK ], + [ 1, MoveId.POUND ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.DETECT ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.QUICK_GUARD ], + [ 15, MoveId.FURY_SWIPES ], + [ 20, MoveId.WIDE_GUARD ], + [ 25, MoveId.FORCE_PALM ], + [ 30, MoveId.U_TURN ], + [ 35, MoveId.DRAIN_PUNCH ], + [ 40, MoveId.HONE_CLAWS ], + [ 45, MoveId.AURA_SPHERE ], + [ 53, MoveId.BOUNCE ], + [ 59, MoveId.CALM_MIND ], + [ 66, MoveId.HIGH_JUMP_KICK ], ], [Species.DRUDDIGON]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.BITE ], - [ 10, Moves.DRAGON_TAIL ], - [ 15, Moves.METAL_CLAW ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.SLASH ], - [ 30, Moves.DRAGON_CLAW ], - [ 35, Moves.HONE_CLAWS ], - [ 40, Moves.CRUNCH ], - [ 45, Moves.IRON_HEAD ], - [ 50, Moves.OUTRAGE ], - [ 55, Moves.SUPERPOWER ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.BITE ], + [ 10, MoveId.DRAGON_TAIL ], + [ 15, MoveId.METAL_CLAW ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.DRAGON_CLAW ], + [ 35, MoveId.HONE_CLAWS ], + [ 40, MoveId.CRUNCH ], + [ 45, MoveId.IRON_HEAD ], + [ 50, MoveId.OUTRAGE ], + [ 55, MoveId.SUPERPOWER ], ], [Species.GOLETT]: [ - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.POUND ], - [ 12, Moves.SHADOW_PUNCH ], - [ 16, Moves.CURSE ], - [ 20, Moves.NIGHT_SHADE ], - [ 24, Moves.STOMPING_TANTRUM ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.MEGA_PUNCH ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.HEAVY_SLAM ], - [ 44, Moves.PHANTOM_FORCE ], - [ 48, Moves.HAMMER_ARM ], - [ 52, Moves.EARTHQUAKE ], - [ 56, Moves.DYNAMIC_PUNCH ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.POUND ], + [ 12, MoveId.SHADOW_PUNCH ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.NIGHT_SHADE ], + [ 24, MoveId.STOMPING_TANTRUM ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.MEGA_PUNCH ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.HEAVY_SLAM ], + [ 44, MoveId.PHANTOM_FORCE ], + [ 48, MoveId.HAMMER_ARM ], + [ 52, MoveId.EARTHQUAKE ], + [ 56, MoveId.DYNAMIC_PUNCH ], ], [Species.GOLURK]: [ - [ RELEARN_MOVE, Moves.MUD_SLAP ], - [ RELEARN_MOVE, Moves.FOCUS_PUNCH ], - [ 1, Moves.POUND ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.HIGH_HORSEPOWER ], - [ 12, Moves.SHADOW_PUNCH ], - [ 16, Moves.CURSE ], - [ 20, Moves.NIGHT_SHADE ], - [ 24, Moves.STOMPING_TANTRUM ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.MEGA_PUNCH ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.HEAVY_SLAM ], - [ 46, Moves.PHANTOM_FORCE ], - [ 52, Moves.HAMMER_ARM ], - [ 58, Moves.EARTHQUAKE ], - [ 64, Moves.DYNAMIC_PUNCH ], + [ RELEARN_MOVE, MoveId.MUD_SLAP ], + [ RELEARN_MOVE, MoveId.FOCUS_PUNCH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.HIGH_HORSEPOWER ], + [ 12, MoveId.SHADOW_PUNCH ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.NIGHT_SHADE ], + [ 24, MoveId.STOMPING_TANTRUM ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.MEGA_PUNCH ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.HEAVY_SLAM ], + [ 46, MoveId.PHANTOM_FORCE ], + [ 52, MoveId.HAMMER_ARM ], + [ 58, MoveId.EARTHQUAKE ], + [ 64, MoveId.DYNAMIC_PUNCH ], ], [Species.PAWNIARD]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.FURY_CUTTER ], - [ 10, Moves.METAL_CLAW ], - [ 15, Moves.TORMENT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.METAL_SOUND ], - [ 35, Moves.SLASH ], - [ 40, Moves.NIGHT_SLASH ], - [ 45, Moves.IRON_DEFENSE ], - [ 50, Moves.RETALIATE ], - [ 55, Moves.IRON_HEAD ], - [ 60, Moves.SWORDS_DANCE ], - [ 65, Moves.GUILLOTINE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.FURY_CUTTER ], + [ 10, MoveId.METAL_CLAW ], + [ 15, MoveId.TORMENT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.ASSURANCE ], + [ 30, MoveId.METAL_SOUND ], + [ 35, MoveId.SLASH ], + [ 40, MoveId.NIGHT_SLASH ], + [ 45, MoveId.IRON_DEFENSE ], + [ 50, MoveId.RETALIATE ], + [ 55, MoveId.IRON_HEAD ], + [ 60, MoveId.SWORDS_DANCE ], + [ 65, MoveId.GUILLOTINE ], ], [Species.BISHARP]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.METAL_BURST ], - [ 15, Moves.TORMENT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.METAL_SOUND ], - [ 35, Moves.SLASH ], - [ 40, Moves.NIGHT_SLASH ], - [ 45, Moves.IRON_DEFENSE ], - [ 50, Moves.RETALIATE ], - [ 57, Moves.IRON_HEAD ], - [ 64, Moves.SWORDS_DANCE ], - [ 71, Moves.GUILLOTINE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.METAL_BURST ], + [ 15, MoveId.TORMENT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.ASSURANCE ], + [ 30, MoveId.METAL_SOUND ], + [ 35, MoveId.SLASH ], + [ 40, MoveId.NIGHT_SLASH ], + [ 45, MoveId.IRON_DEFENSE ], + [ 50, MoveId.RETALIATE ], + [ 57, MoveId.IRON_HEAD ], + [ 64, MoveId.SWORDS_DANCE ], + [ 71, MoveId.GUILLOTINE ], ], [Species.BOUFFALANT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.PURSUIT ], - [ 5, Moves.FOCUS_ENERGY ], - [ 10, Moves.FURY_ATTACK ], - [ 15, Moves.REVENGE ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.HORN_ATTACK ], - [ 30, Moves.REVERSAL ], - [ 35, Moves.THROAT_CHOP ], - [ 40, Moves.HEAD_CHARGE ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.MEGAHORN ], - [ 55, Moves.GIGA_IMPACT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PURSUIT ], + [ 5, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.FURY_ATTACK ], + [ 15, MoveId.REVENGE ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.HORN_ATTACK ], + [ 30, MoveId.REVERSAL ], + [ 35, MoveId.THROAT_CHOP ], + [ 40, MoveId.HEAD_CHARGE ], + [ 45, MoveId.SWORDS_DANCE ], + [ 50, MoveId.MEGAHORN ], + [ 55, MoveId.GIGA_IMPACT ], ], [Species.RUFFLET]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 6, Moves.HONE_CLAWS ], - [ 12, Moves.WING_ATTACK ], - [ 18, Moves.TAILWIND ], - [ 24, Moves.SCARY_FACE ], - [ 30, Moves.AERIAL_ACE ], - [ 36, Moves.SLASH ], - [ 42, Moves.WHIRLWIND ], - [ 48, Moves.CRUSH_CLAW ], - [ 55, Moves.AIR_SLASH ], - [ 60, Moves.DEFOG ], - [ 66, Moves.THRASH ], - [ 72, Moves.BRAVE_BIRD ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 6, MoveId.HONE_CLAWS ], + [ 12, MoveId.WING_ATTACK ], + [ 18, MoveId.TAILWIND ], + [ 24, MoveId.SCARY_FACE ], + [ 30, MoveId.AERIAL_ACE ], + [ 36, MoveId.SLASH ], + [ 42, MoveId.WHIRLWIND ], + [ 48, MoveId.CRUSH_CLAW ], + [ 55, MoveId.AIR_SLASH ], + [ 60, MoveId.DEFOG ], + [ 66, MoveId.THRASH ], + [ 72, MoveId.BRAVE_BIRD ], ], [Species.BRAVIARY]: [ - [ EVOLVE_MOVE, Moves.SUPERPOWER ], - [ RELEARN_MOVE, Moves.BRAVE_BIRD ], // Previous Stage Move - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.SKY_ATTACK ], - [ 1, Moves.HONE_CLAWS ], - [ 18, Moves.TAILWIND ], - [ 24, Moves.SCARY_FACE ], - [ 30, Moves.AERIAL_ACE ], - [ 36, Moves.SLASH ], - [ 42, Moves.WHIRLWIND ], - [ 48, Moves.CRUSH_CLAW ], - [ 57, Moves.AIR_SLASH ], - [ 64, Moves.DEFOG ], - [ 72, Moves.THRASH ], + [ EVOLVE_MOVE, MoveId.SUPERPOWER ], + [ RELEARN_MOVE, MoveId.BRAVE_BIRD ], // Previous Stage Move + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.SKY_ATTACK ], + [ 1, MoveId.HONE_CLAWS ], + [ 18, MoveId.TAILWIND ], + [ 24, MoveId.SCARY_FACE ], + [ 30, MoveId.AERIAL_ACE ], + [ 36, MoveId.SLASH ], + [ 42, MoveId.WHIRLWIND ], + [ 48, MoveId.CRUSH_CLAW ], + [ 57, MoveId.AIR_SLASH ], + [ 64, MoveId.DEFOG ], + [ 72, MoveId.THRASH ], ], [Species.VULLABY]: [ - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 6, Moves.FLATTER ], - [ 12, Moves.PLUCK ], - [ 18, Moves.TAILWIND ], - [ 24, Moves.KNOCK_OFF ], - [ 30, Moves.IRON_DEFENSE ], - [ 36, Moves.WHIRLWIND ], - [ 42, Moves.AIR_SLASH ], - [ 48, Moves.DARK_PULSE ], - [ 54, Moves.NASTY_PLOT ], - [ 60, Moves.DEFOG ], - [ 66, Moves.ATTRACT ], - [ 72, Moves.BRAVE_BIRD ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 6, MoveId.FLATTER ], + [ 12, MoveId.PLUCK ], + [ 18, MoveId.TAILWIND ], + [ 24, MoveId.KNOCK_OFF ], + [ 30, MoveId.IRON_DEFENSE ], + [ 36, MoveId.WHIRLWIND ], + [ 42, MoveId.AIR_SLASH ], + [ 48, MoveId.DARK_PULSE ], + [ 54, MoveId.NASTY_PLOT ], + [ 60, MoveId.DEFOG ], + [ 66, MoveId.ATTRACT ], + [ 72, MoveId.BRAVE_BIRD ], ], [Species.MANDIBUZZ]: [ - [ EVOLVE_MOVE, Moves.BONE_RUSH ], - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 1, Moves.TOXIC ], - [ 1, Moves.SKY_ATTACK ], - [ 1, Moves.FLATTER ], - [ 1, Moves.PLUCK ], - [ 18, Moves.TAILWIND ], - [ 24, Moves.KNOCK_OFF ], - [ 30, Moves.IRON_DEFENSE ], - [ 36, Moves.WHIRLWIND ], - [ 42, Moves.AIR_SLASH ], - [ 48, Moves.DARK_PULSE ], - [ 57, Moves.NASTY_PLOT ], - [ 64, Moves.DEFOG ], - [ 72, Moves.ATTRACT ], - [ 80, Moves.BRAVE_BIRD ], + [ EVOLVE_MOVE, MoveId.BONE_RUSH ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 1, MoveId.TOXIC ], + [ 1, MoveId.SKY_ATTACK ], + [ 1, MoveId.FLATTER ], + [ 1, MoveId.PLUCK ], + [ 18, MoveId.TAILWIND ], + [ 24, MoveId.KNOCK_OFF ], + [ 30, MoveId.IRON_DEFENSE ], + [ 36, MoveId.WHIRLWIND ], + [ 42, MoveId.AIR_SLASH ], + [ 48, MoveId.DARK_PULSE ], + [ 57, MoveId.NASTY_PLOT ], + [ 64, MoveId.DEFOG ], + [ 72, MoveId.ATTRACT ], + [ 80, MoveId.BRAVE_BIRD ], ], [Species.HEATMOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LICK ], - [ 5, Moves.FURY_SWIPES ], - [ 10, Moves.INCINERATE ], - [ 15, Moves.BUG_BITE ], - [ 20, Moves.STOCKPILE ], - [ 20, Moves.SPIT_UP ], - [ 20, Moves.SWALLOW ], - [ 25, Moves.SLASH ], - [ 30, Moves.BIND ], - [ 35, Moves.FIRE_LASH ], - [ 40, Moves.HONE_CLAWS ], - [ 45, Moves.AMNESIA ], - [ 50, Moves.FIRE_SPIN ], - [ 55, Moves.INFERNO ], - [ 60, Moves.FLARE_BLITZ ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LICK ], + [ 5, MoveId.FURY_SWIPES ], + [ 10, MoveId.INCINERATE ], + [ 15, MoveId.BUG_BITE ], + [ 20, MoveId.STOCKPILE ], + [ 20, MoveId.SPIT_UP ], + [ 20, MoveId.SWALLOW ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.BIND ], + [ 35, MoveId.FIRE_LASH ], + [ 40, MoveId.HONE_CLAWS ], + [ 45, MoveId.AMNESIA ], + [ 50, MoveId.FIRE_SPIN ], + [ 55, MoveId.INFERNO ], + [ 60, MoveId.FLARE_BLITZ ], ], [Species.DURANT]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.FURY_CUTTER ], - [ 4, Moves.VISE_GRIP ], - [ 8, Moves.METAL_CLAW ], - [ 12, Moves.BEAT_UP ], - [ 16, Moves.BUG_BITE ], - [ 20, Moves.BITE ], - [ 24, Moves.AGILITY ], - [ 28, Moves.DIG ], - [ 32, Moves.X_SCISSOR ], - [ 36, Moves.CRUNCH ], - [ 40, Moves.METAL_SOUND ], - [ 44, Moves.IRON_HEAD ], - [ 48, Moves.ENTRAINMENT ], - [ 52, Moves.IRON_DEFENSE ], - [ 56, Moves.GUILLOTINE ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.FURY_CUTTER ], + [ 4, MoveId.VISE_GRIP ], + [ 8, MoveId.METAL_CLAW ], + [ 12, MoveId.BEAT_UP ], + [ 16, MoveId.BUG_BITE ], + [ 20, MoveId.BITE ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.DIG ], + [ 32, MoveId.X_SCISSOR ], + [ 36, MoveId.CRUNCH ], + [ 40, MoveId.METAL_SOUND ], + [ 44, MoveId.IRON_HEAD ], + [ 48, MoveId.ENTRAINMENT ], + [ 52, MoveId.IRON_DEFENSE ], + [ 56, MoveId.GUILLOTINE ], ], [Species.DEINO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 4, Moves.DRAGON_BREATH ], - [ 8, Moves.BITE ], - [ 12, Moves.ROAR ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.WORK_UP ], - [ 28, Moves.SLAM ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.SCARY_FACE ], - [ 40, Moves.DRAGON_PULSE ], - [ 44, Moves.BODY_SLAM ], - [ 48, Moves.HYPER_VOICE ], - [ 52, Moves.DRAGON_RUSH ], - [ 56, Moves.NASTY_PLOT ], - [ 60, Moves.OUTRAGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 4, MoveId.DRAGON_BREATH ], + [ 8, MoveId.BITE ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.WORK_UP ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.SCARY_FACE ], + [ 40, MoveId.DRAGON_PULSE ], + [ 44, MoveId.BODY_SLAM ], + [ 48, MoveId.HYPER_VOICE ], + [ 52, MoveId.DRAGON_RUSH ], + [ 56, MoveId.NASTY_PLOT ], + [ 60, MoveId.OUTRAGE ], ], [Species.ZWEILOUS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.DOUBLE_HIT ], - [ 12, Moves.ROAR ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.WORK_UP ], - [ 28, Moves.SLAM ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.SCARY_FACE ], - [ 40, Moves.DRAGON_PULSE ], - [ 44, Moves.BODY_SLAM ], - [ 48, Moves.HYPER_VOICE ], - [ 54, Moves.DRAGON_RUSH ], - [ 60, Moves.NASTY_PLOT ], - [ 66, Moves.OUTRAGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.DOUBLE_HIT ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.WORK_UP ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.SCARY_FACE ], + [ 40, MoveId.DRAGON_PULSE ], + [ 44, MoveId.BODY_SLAM ], + [ 48, MoveId.HYPER_VOICE ], + [ 54, MoveId.DRAGON_RUSH ], + [ 60, MoveId.NASTY_PLOT ], + [ 66, MoveId.OUTRAGE ], ], [Species.HYDREIGON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.DOUBLE_HIT ], - [ 12, Moves.ROAR ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.WORK_UP ], - [ 28, Moves.SLAM ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.SCARY_FACE ], - [ 40, Moves.DRAGON_PULSE ], - [ 44, Moves.BODY_SLAM ], - [ 48, Moves.HYPER_VOICE ], - [ 54, Moves.DRAGON_RUSH ], - [ 60, Moves.NASTY_PLOT ], - [ 68, Moves.OUTRAGE ], - [ 76, Moves.HYPER_BEAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.DOUBLE_HIT ], + [ 12, MoveId.ROAR ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.WORK_UP ], + [ 28, MoveId.SLAM ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.SCARY_FACE ], + [ 40, MoveId.DRAGON_PULSE ], + [ 44, MoveId.BODY_SLAM ], + [ 48, MoveId.HYPER_VOICE ], + [ 54, MoveId.DRAGON_RUSH ], + [ 60, MoveId.NASTY_PLOT ], + [ 68, MoveId.OUTRAGE ], + [ 76, MoveId.HYPER_BEAM ], ], [Species.LARVESTA]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.STRING_SHOT ], - [ 6, Moves.FLAME_CHARGE ], - [ 12, Moves.STRUGGLE_BUG ], - [ 18, Moves.FLAME_WHEEL ], - [ 24, Moves.BUG_BITE ], - [ 30, Moves.SCREECH ], - [ 36, Moves.LEECH_LIFE ], - [ 42, Moves.BUG_BUZZ ], - [ 48, Moves.TAKE_DOWN ], - [ 54, Moves.AMNESIA ], - [ 60, Moves.DOUBLE_EDGE ], - [ 66, Moves.FLARE_BLITZ ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.STRING_SHOT ], + [ 6, MoveId.FLAME_CHARGE ], + [ 12, MoveId.STRUGGLE_BUG ], + [ 18, MoveId.FLAME_WHEEL ], + [ 24, MoveId.BUG_BITE ], + [ 30, MoveId.SCREECH ], + [ 36, MoveId.LEECH_LIFE ], + [ 42, MoveId.BUG_BUZZ ], + [ 48, MoveId.TAKE_DOWN ], + [ 54, MoveId.AMNESIA ], + [ 60, MoveId.DOUBLE_EDGE ], + [ 66, MoveId.FLARE_BLITZ ], ], [Species.VOLCARONA]: [ - [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], - [ 1, Moves.GUST ], - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.EMBER ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.FLARE_BLITZ ], - [ 1, Moves.FLAME_CHARGE ], - [ 1, Moves.STRUGGLE_BUG ], - [ 1, Moves.FIERY_DANCE ], - [ 18, Moves.FLAME_WHEEL ], - [ 24, Moves.BUG_BITE ], - [ 30, Moves.SCREECH ], - [ 36, Moves.LEECH_LIFE ], - [ 42, Moves.BUG_BUZZ ], - [ 48, Moves.HEAT_WAVE ], - [ 54, Moves.AMNESIA ], - [ 62, Moves.HURRICANE ], - [ 70, Moves.FIRE_BLAST ], - [ 78, Moves.RAGE_POWDER ], + [ EVOLVE_MOVE, MoveId.QUIVER_DANCE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.WHIRLWIND ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.FIRE_SPIN ], + [ 1, MoveId.FLARE_BLITZ ], + [ 1, MoveId.FLAME_CHARGE ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 1, MoveId.FIERY_DANCE ], + [ 18, MoveId.FLAME_WHEEL ], + [ 24, MoveId.BUG_BITE ], + [ 30, MoveId.SCREECH ], + [ 36, MoveId.LEECH_LIFE ], + [ 42, MoveId.BUG_BUZZ ], + [ 48, MoveId.HEAT_WAVE ], + [ 54, MoveId.AMNESIA ], + [ 62, MoveId.HURRICANE ], + [ 70, MoveId.FIRE_BLAST ], + [ 78, MoveId.RAGE_POWDER ], ], [Species.COBALION]: [ - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.WORK_UP ], - [ 7, Moves.METAL_CLAW ], - [ 14, Moves.QUICK_GUARD ], - [ 21, Moves.DOUBLE_KICK ], - [ 28, Moves.RETALIATE ], - [ 35, Moves.METAL_BURST ], - [ 42, Moves.TAKE_DOWN ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.SWORDS_DANCE ], - [ 63, Moves.IRON_HEAD ], - [ 70, Moves.CLOSE_COMBAT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.WORK_UP ], + [ 7, MoveId.METAL_CLAW ], + [ 14, MoveId.QUICK_GUARD ], + [ 21, MoveId.DOUBLE_KICK ], + [ 28, MoveId.RETALIATE ], + [ 35, MoveId.METAL_BURST ], + [ 42, MoveId.TAKE_DOWN ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.SWORDS_DANCE ], + [ 63, MoveId.IRON_HEAD ], + [ 70, MoveId.CLOSE_COMBAT ], ], [Species.TERRAKION]: [ - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.WORK_UP ], - [ 7, Moves.SMACK_DOWN ], - [ 14, Moves.QUICK_GUARD ], - [ 21, Moves.DOUBLE_KICK ], - [ 28, Moves.RETALIATE ], - [ 35, Moves.ROCK_SLIDE ], - [ 42, Moves.TAKE_DOWN ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.SWORDS_DANCE ], - [ 63, Moves.STONE_EDGE ], - [ 70, Moves.CLOSE_COMBAT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.WORK_UP ], + [ 7, MoveId.SMACK_DOWN ], + [ 14, MoveId.QUICK_GUARD ], + [ 21, MoveId.DOUBLE_KICK ], + [ 28, MoveId.RETALIATE ], + [ 35, MoveId.ROCK_SLIDE ], + [ 42, MoveId.TAKE_DOWN ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.SWORDS_DANCE ], + [ 63, MoveId.STONE_EDGE ], + [ 70, MoveId.CLOSE_COMBAT ], ], [Species.VIRIZION]: [ - [ RELEARN_MOVE, Moves.TAKE_DOWN ], - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.WORK_UP ], - [ 7, Moves.MAGICAL_LEAF ], - [ 14, Moves.QUICK_GUARD ], - [ 21, Moves.DOUBLE_KICK ], - [ 28, Moves.RETALIATE ], - [ 35, Moves.GIGA_DRAIN ], - [ 42, Moves.TAKE_DOWN ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.SWORDS_DANCE ], - [ 63, Moves.LEAF_BLADE ], - [ 70, Moves.CLOSE_COMBAT ], + [ RELEARN_MOVE, MoveId.TAKE_DOWN ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.WORK_UP ], + [ 7, MoveId.MAGICAL_LEAF ], + [ 14, MoveId.QUICK_GUARD ], + [ 21, MoveId.DOUBLE_KICK ], + [ 28, MoveId.RETALIATE ], + [ 35, MoveId.GIGA_DRAIN ], + [ 42, MoveId.TAKE_DOWN ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.SWORDS_DANCE ], + [ 63, MoveId.LEAF_BLADE ], + [ 70, MoveId.CLOSE_COMBAT ], ], [Species.TORNADUS]: [ - [ 1, Moves.GUST ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.LEER ], - [ 10, Moves.SWAGGER ], - [ 15, Moves.BITE ], - [ 20, Moves.AIR_CUTTER ], - [ 25, Moves.AGILITY ], - [ 30, Moves.TAILWIND ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.CRUNCH ], - [ 45, Moves.EXTRASENSORY ], - [ 50, Moves.UPROAR ], - [ 55, Moves.HAMMER_ARM ], - [ 60, Moves.RAIN_DANCE ], - [ 65, Moves.HURRICANE ], - [ 70, Moves.THRASH ], - [ 77, Moves.BLEAKWIND_STORM ], + [ 1, MoveId.GUST ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.LEER ], + [ 10, MoveId.SWAGGER ], + [ 15, MoveId.BITE ], + [ 20, MoveId.AIR_CUTTER ], + [ 25, MoveId.AGILITY ], + [ 30, MoveId.TAILWIND ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.CRUNCH ], + [ 45, MoveId.EXTRASENSORY ], + [ 50, MoveId.UPROAR ], + [ 55, MoveId.HAMMER_ARM ], + [ 60, MoveId.RAIN_DANCE ], + [ 65, MoveId.HURRICANE ], + [ 70, MoveId.THRASH ], + [ 77, MoveId.BLEAKWIND_STORM ], ], [Species.THUNDURUS]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.LEER ], - [ 10, Moves.SWAGGER ], - [ 15, Moves.BITE ], - [ 20, Moves.SHOCK_WAVE ], - [ 25, Moves.AGILITY ], - [ 30, Moves.CHARGE ], - [ 31, Moves.HEAL_BLOCK ], - [ 35, Moves.VOLT_SWITCH ], - [ 40, Moves.CRUNCH ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.UPROAR ], - [ 55, Moves.HAMMER_ARM ], - [ 60, Moves.RAIN_DANCE ], - [ 65, Moves.THUNDER ], - [ 70, Moves.THRASH ], - [ 75, Moves.WILDBOLT_STORM ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.LEER ], + [ 10, MoveId.SWAGGER ], + [ 15, MoveId.BITE ], + [ 20, MoveId.SHOCK_WAVE ], + [ 25, MoveId.AGILITY ], + [ 30, MoveId.CHARGE ], + [ 31, MoveId.HEAL_BLOCK ], + [ 35, MoveId.VOLT_SWITCH ], + [ 40, MoveId.CRUNCH ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.UPROAR ], + [ 55, MoveId.HAMMER_ARM ], + [ 60, MoveId.RAIN_DANCE ], + [ 65, MoveId.THUNDER ], + [ 70, MoveId.THRASH ], + [ 75, MoveId.WILDBOLT_STORM ], ], [Species.RESHIRAM]: [ - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.NOBLE_ROAR ], - [ 8, Moves.SLASH ], - [ 16, Moves.CRUNCH ], - [ 24, Moves.EXTRASENSORY ], - [ 32, Moves.DRAGON_PULSE ], - [ 40, Moves.FLAMETHROWER ], - [ 48, Moves.FUSION_FLARE ], - [ 56, Moves.HYPER_VOICE ], - [ 64, Moves.FIRE_BLAST ], - [ 72, Moves.IMPRISON ], - [ 80, Moves.OUTRAGE ], - [ 88, Moves.BLUE_FLARE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.NOBLE_ROAR ], + [ 8, MoveId.SLASH ], + [ 16, MoveId.CRUNCH ], + [ 24, MoveId.EXTRASENSORY ], + [ 32, MoveId.DRAGON_PULSE ], + [ 40, MoveId.FLAMETHROWER ], + [ 48, MoveId.FUSION_FLARE ], + [ 56, MoveId.HYPER_VOICE ], + [ 64, MoveId.FIRE_BLAST ], + [ 72, MoveId.IMPRISON ], + [ 80, MoveId.OUTRAGE ], + [ 88, MoveId.BLUE_FLARE ], ], [Species.ZEKROM]: [ - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.NOBLE_ROAR ], - [ 8, Moves.SLASH ], - [ 16, Moves.CRUNCH ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 32, Moves.DRAGON_CLAW ], - [ 40, Moves.THUNDERBOLT ], - [ 48, Moves.FUSION_BOLT ], - [ 56, Moves.HYPER_VOICE ], - [ 64, Moves.THUNDER ], - [ 72, Moves.IMPRISON ], - [ 80, Moves.OUTRAGE ], - [ 88, Moves.BOLT_STRIKE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.NOBLE_ROAR ], + [ 8, MoveId.SLASH ], + [ 16, MoveId.CRUNCH ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 32, MoveId.DRAGON_CLAW ], + [ 40, MoveId.THUNDERBOLT ], + [ 48, MoveId.FUSION_BOLT ], + [ 56, MoveId.HYPER_VOICE ], + [ 64, MoveId.THUNDER ], + [ 72, MoveId.IMPRISON ], + [ 80, MoveId.OUTRAGE ], + [ 88, MoveId.BOLT_STRIKE ], ], [Species.LANDORUS]: [ - [ 1, Moves.SAND_TOMB ], - [ 1, Moves.SMACK_DOWN ], - [ 5, Moves.LEER ], - [ 10, Moves.BLOCK ], - [ 15, Moves.BULLDOZE ], - [ 20, Moves.ROCK_TOMB ], - [ 30, Moves.IMPRISON ], - [ 35, Moves.ROCK_SLIDE ], - [ 40, Moves.EARTH_POWER ], - [ 45, Moves.EXTRASENSORY ], - [ 50, Moves.STONE_EDGE ], - [ 55, Moves.HAMMER_ARM ], - [ 60, Moves.SANDSTORM ], - [ 65, Moves.EARTHQUAKE ], - [ 70, Moves.OUTRAGE ], - [ 75, Moves.FISSURE ], - [ 80, Moves.SANDSEAR_STORM ], + [ 1, MoveId.SAND_TOMB ], + [ 1, MoveId.SMACK_DOWN ], + [ 5, MoveId.LEER ], + [ 10, MoveId.BLOCK ], + [ 15, MoveId.BULLDOZE ], + [ 20, MoveId.ROCK_TOMB ], + [ 30, MoveId.IMPRISON ], + [ 35, MoveId.ROCK_SLIDE ], + [ 40, MoveId.EARTH_POWER ], + [ 45, MoveId.EXTRASENSORY ], + [ 50, MoveId.STONE_EDGE ], + [ 55, MoveId.HAMMER_ARM ], + [ 60, MoveId.SANDSTORM ], + [ 65, MoveId.EARTHQUAKE ], + [ 70, MoveId.OUTRAGE ], + [ 75, MoveId.FISSURE ], + [ 80, MoveId.SANDSEAR_STORM ], ], [Species.KYUREM]: [ - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.FREEZE_DRY ], - [ 8, Moves.SLASH ], - [ 16, Moves.ENDEAVOR ], - [ 24, Moves.DRAGON_PULSE ], - [ 32, Moves.ICE_BEAM ], - [ 40, Moves.HYPER_VOICE ], - [ 48, Moves.SCARY_FACE ], - [ 56, Moves.BLIZZARD ], - [ 64, Moves.IMPRISON ], - [ 72, Moves.OUTRAGE ], - [ 80, Moves.GLACIATE ], - [ 88, Moves.SHEER_COLD ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.FREEZE_DRY ], + [ 8, MoveId.SLASH ], + [ 16, MoveId.ENDEAVOR ], + [ 24, MoveId.DRAGON_PULSE ], + [ 32, MoveId.ICE_BEAM ], + [ 40, MoveId.HYPER_VOICE ], + [ 48, MoveId.SCARY_FACE ], + [ 56, MoveId.BLIZZARD ], + [ 64, MoveId.IMPRISON ], + [ 72, MoveId.OUTRAGE ], + [ 80, MoveId.GLACIATE ], + [ 88, MoveId.SHEER_COLD ], ], [Species.KELDEO]: [ - [ 1, Moves.LEER ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.WORK_UP ], - [ 1, Moves.SECRET_SWORD ], - [ 7, Moves.BUBBLE_BEAM ], - [ 14, Moves.QUICK_GUARD ], - [ 21, Moves.DOUBLE_KICK ], - [ 28, Moves.RETALIATE ], - [ 35, Moves.AQUA_TAIL ], - [ 42, Moves.TAKE_DOWN ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.SWORDS_DANCE ], - [ 63, Moves.HYDRO_PUMP ], - [ 70, Moves.CLOSE_COMBAT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.WORK_UP ], + [ 1, MoveId.SECRET_SWORD ], + [ 7, MoveId.BUBBLE_BEAM ], + [ 14, MoveId.QUICK_GUARD ], + [ 21, MoveId.DOUBLE_KICK ], + [ 28, MoveId.RETALIATE ], + [ 35, MoveId.AQUA_TAIL ], + [ 42, MoveId.TAKE_DOWN ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.SWORDS_DANCE ], + [ 63, MoveId.HYDRO_PUMP ], + [ 70, MoveId.CLOSE_COMBAT ], ], [Species.MELOETTA]: [ - [ 1, Moves.SING ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ROUND ], - [ 21, Moves.TEETER_DANCE ], - [ 26, Moves.ACROBATICS ], - [ 31, Moves.PSYBEAM ], - [ 36, Moves.ECHOED_VOICE ], - [ 43, Moves.U_TURN ], - [ 50, Moves.RELIC_SONG ], - [ 57, Moves.PSYCHIC ], - [ 64, Moves.HYPER_VOICE ], - [ 71, Moves.ROLE_PLAY ], - [ 78, Moves.CLOSE_COMBAT ], - [ 85, Moves.PERISH_SONG ], + [ 1, MoveId.SING ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ROUND ], + [ 21, MoveId.TEETER_DANCE ], + [ 26, MoveId.ACROBATICS ], + [ 31, MoveId.PSYBEAM ], + [ 36, MoveId.ECHOED_VOICE ], + [ 43, MoveId.U_TURN ], + [ 50, MoveId.RELIC_SONG ], + [ 57, MoveId.PSYCHIC ], + [ 64, MoveId.HYPER_VOICE ], + [ 71, MoveId.ROLE_PLAY ], + [ 78, MoveId.CLOSE_COMBAT ], + [ 85, MoveId.PERISH_SONG ], ], [Species.GENESECT]: [ - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FURY_CUTTER ], - [ 7, Moves.SCREECH ], - [ 14, Moves.METAL_CLAW ], - [ 21, Moves.FELL_STINGER ], - [ 28, Moves.FLAME_CHARGE ], - [ 35, Moves.METAL_SOUND ], - [ 42, Moves.X_SCISSOR ], - [ 49, Moves.MAGNET_RISE ], - [ 56, Moves.BUG_BUZZ ], - [ 63, Moves.SIMPLE_BEAM ], - [ 70, Moves.ZAP_CANNON ], - [ 77, Moves.LOCK_ON ], - [ 84, Moves.TECHNO_BLAST ], - [ 91, Moves.SELF_DESTRUCT ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FURY_CUTTER ], + [ 7, MoveId.SCREECH ], + [ 14, MoveId.METAL_CLAW ], + [ 21, MoveId.FELL_STINGER ], + [ 28, MoveId.FLAME_CHARGE ], + [ 35, MoveId.METAL_SOUND ], + [ 42, MoveId.X_SCISSOR ], + [ 49, MoveId.MAGNET_RISE ], + [ 56, MoveId.BUG_BUZZ ], + [ 63, MoveId.SIMPLE_BEAM ], + [ 70, MoveId.ZAP_CANNON ], + [ 77, MoveId.LOCK_ON ], + [ 84, MoveId.TECHNO_BLAST ], + [ 91, MoveId.SELF_DESTRUCT ], ], [Species.CHESPIN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.VINE_WHIP ], - [ 8, Moves.ROLLOUT ], - [ 11, Moves.BITE ], - [ 15, Moves.LEECH_SEED ], - [ 18, Moves.PIN_MISSILE ], - [ 27, Moves.TAKE_DOWN ], - [ 32, Moves.SEED_BOMB ], - [ 35, Moves.MUD_SHOT ], - [ 42, Moves.BODY_SLAM ], - [ 45, Moves.PAIN_SPLIT ], - [ 48, Moves.WOOD_HAMMER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.VINE_WHIP ], + [ 8, MoveId.ROLLOUT ], + [ 11, MoveId.BITE ], + [ 15, MoveId.LEECH_SEED ], + [ 18, MoveId.PIN_MISSILE ], + [ 27, MoveId.TAKE_DOWN ], + [ 32, MoveId.SEED_BOMB ], + [ 35, MoveId.MUD_SHOT ], + [ 42, MoveId.BODY_SLAM ], + [ 45, MoveId.PAIN_SPLIT ], + [ 48, MoveId.WOOD_HAMMER ], ], [Species.QUILLADIN]: [ - [ EVOLVE_MOVE, Moves.NEEDLE_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.VINE_WHIP ], - [ 8, Moves.ROLLOUT ], - [ 11, Moves.BITE ], - [ 15, Moves.LEECH_SEED ], - [ 20, Moves.SEED_BOMB ], - [ 24, Moves.PIN_MISSILE ], - [ 29, Moves.TAKE_DOWN ], - [ 34, Moves.MUD_SHOT ], - [ 38, Moves.BULK_UP ], - [ 43, Moves.BODY_SLAM ], - [ 47, Moves.PAIN_SPLIT ], - [ 53, Moves.WOOD_HAMMER ], + [ EVOLVE_MOVE, MoveId.NEEDLE_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.VINE_WHIP ], + [ 8, MoveId.ROLLOUT ], + [ 11, MoveId.BITE ], + [ 15, MoveId.LEECH_SEED ], + [ 20, MoveId.SEED_BOMB ], + [ 24, MoveId.PIN_MISSILE ], + [ 29, MoveId.TAKE_DOWN ], + [ 34, MoveId.MUD_SHOT ], + [ 38, MoveId.BULK_UP ], + [ 43, MoveId.BODY_SLAM ], + [ 47, MoveId.PAIN_SPLIT ], + [ 53, MoveId.WOOD_HAMMER ], ], [Species.CHESNAUGHT]: [ - [ EVOLVE_MOVE, Moves.SPIKY_SHIELD ], - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.HAMMER_ARM ], - [ 1, Moves.FEINT ], - [ 1, Moves.NEEDLE_ARM ], - [ 11, Moves.BITE ], - [ 15, Moves.LEECH_SEED ], - [ 19, Moves.PIN_MISSILE ], - [ 29, Moves.TAKE_DOWN ], - [ 35, Moves.SEED_BOMB ], - [ 41, Moves.MUD_SHOT ], - [ 48, Moves.BULK_UP ], - [ 54, Moves.BODY_SLAM ], - [ 60, Moves.PAIN_SPLIT ], - [ 66, Moves.WOOD_HAMMER ], - [ 78, Moves.GIGA_IMPACT ], + [ EVOLVE_MOVE, MoveId.SPIKY_SHIELD ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.HAMMER_ARM ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.NEEDLE_ARM ], + [ 11, MoveId.BITE ], + [ 15, MoveId.LEECH_SEED ], + [ 19, MoveId.PIN_MISSILE ], + [ 29, MoveId.TAKE_DOWN ], + [ 35, MoveId.SEED_BOMB ], + [ 41, MoveId.MUD_SHOT ], + [ 48, MoveId.BULK_UP ], + [ 54, MoveId.BODY_SLAM ], + [ 60, MoveId.PAIN_SPLIT ], + [ 66, MoveId.WOOD_HAMMER ], + [ 78, MoveId.GIGA_IMPACT ], ], [Species.FENNEKIN]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.EMBER ], - [ 11, Moves.HOWL ], - [ 14, Moves.FLAME_CHARGE ], - [ 17, Moves.PSYBEAM ], - [ 20, Moves.FIRE_SPIN ], - [ 25, Moves.LIGHT_SCREEN ], - [ 31, Moves.PSYSHOCK ], - [ 35, Moves.FLAMETHROWER ], - [ 38, Moves.WILL_O_WISP ], - [ 41, Moves.PSYCHIC ], - [ 43, Moves.SUNNY_DAY ], - [ 48, Moves.FIRE_BLAST ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.EMBER ], + [ 11, MoveId.HOWL ], + [ 14, MoveId.FLAME_CHARGE ], + [ 17, MoveId.PSYBEAM ], + [ 20, MoveId.FIRE_SPIN ], + [ 25, MoveId.LIGHT_SCREEN ], + [ 31, MoveId.PSYSHOCK ], + [ 35, MoveId.FLAMETHROWER ], + [ 38, MoveId.WILL_O_WISP ], + [ 41, MoveId.PSYCHIC ], + [ 43, MoveId.SUNNY_DAY ], + [ 48, MoveId.FIRE_BLAST ], ], [Species.BRAIXEN]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.EMBER ], - [ 11, Moves.HOWL ], - [ 14, Moves.FLAME_CHARGE ], - [ 18, Moves.PSYBEAM ], - [ 22, Moves.FIRE_SPIN ], - [ 28, Moves.LIGHT_SCREEN ], - [ 36, Moves.PSYSHOCK ], - [ 41, Moves.FLAMETHROWER ], - [ 45, Moves.WILL_O_WISP ], - [ 49, Moves.PSYCHIC ], - [ 52, Moves.SUNNY_DAY ], - [ 56, Moves.MAGIC_ROOM ], - [ 59, Moves.FIRE_BLAST ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.EMBER ], + [ 11, MoveId.HOWL ], + [ 14, MoveId.FLAME_CHARGE ], + [ 18, MoveId.PSYBEAM ], + [ 22, MoveId.FIRE_SPIN ], + [ 28, MoveId.LIGHT_SCREEN ], + [ 36, MoveId.PSYSHOCK ], + [ 41, MoveId.FLAMETHROWER ], + [ 45, MoveId.WILL_O_WISP ], + [ 49, MoveId.PSYCHIC ], + [ 52, MoveId.SUNNY_DAY ], + [ 56, MoveId.MAGIC_ROOM ], + [ 59, MoveId.FIRE_BLAST ], ], [Species.DELPHOX]: [ - [ EVOLVE_MOVE, Moves.MYSTICAL_FIRE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.EMBER ], - [ 1, Moves.SHADOW_BALL ], - [ 1, Moves.FUTURE_SIGHT ], - [ 1, Moves.ROLE_PLAY ], - [ 1, Moves.HOWL ], - [ 1, Moves.SWITCHEROO ], - [ 14, Moves.FLAME_CHARGE ], - [ 18, Moves.PSYBEAM ], - [ 22, Moves.FIRE_SPIN ], - [ 28, Moves.LIGHT_SCREEN ], - [ 38, Moves.PSYSHOCK ], - [ 45, Moves.FLAMETHROWER ], - [ 51, Moves.WILL_O_WISP ], - [ 57, Moves.PSYCHIC ], - [ 62, Moves.SUNNY_DAY ], - [ 68, Moves.MAGIC_ROOM ], - [ 74, Moves.FIRE_BLAST ], + [ EVOLVE_MOVE, MoveId.MYSTICAL_FIRE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SHADOW_BALL ], + [ 1, MoveId.FUTURE_SIGHT ], + [ 1, MoveId.ROLE_PLAY ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.SWITCHEROO ], + [ 14, MoveId.FLAME_CHARGE ], + [ 18, MoveId.PSYBEAM ], + [ 22, MoveId.FIRE_SPIN ], + [ 28, MoveId.LIGHT_SCREEN ], + [ 38, MoveId.PSYSHOCK ], + [ 45, MoveId.FLAMETHROWER ], + [ 51, MoveId.WILL_O_WISP ], + [ 57, MoveId.PSYCHIC ], + [ 62, MoveId.SUNNY_DAY ], + [ 68, MoveId.MAGIC_ROOM ], + [ 74, MoveId.FIRE_BLAST ], ], [Species.FROAKIE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 5, Moves.WATER_GUN ], - [ 8, Moves.QUICK_ATTACK ], - [ 10, Moves.LICK ], - [ 14, Moves.WATER_PULSE ], - [ 18, Moves.SMOKESCREEN ], - [ 21, Moves.ROUND ], - [ 25, Moves.FLING ], - [ 29, Moves.SMACK_DOWN ], - [ 35, Moves.SUBSTITUTE ], - [ 39, Moves.BOUNCE ], - [ 43, Moves.DOUBLE_TEAM ], - [ 48, Moves.HYDRO_PUMP ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.WATER_GUN ], + [ 8, MoveId.QUICK_ATTACK ], + [ 10, MoveId.LICK ], + [ 14, MoveId.WATER_PULSE ], + [ 18, MoveId.SMOKESCREEN ], + [ 21, MoveId.ROUND ], + [ 25, MoveId.FLING ], + [ 29, MoveId.SMACK_DOWN ], + [ 35, MoveId.SUBSTITUTE ], + [ 39, MoveId.BOUNCE ], + [ 43, MoveId.DOUBLE_TEAM ], + [ 48, MoveId.HYDRO_PUMP ], ], [Species.FROGADIER]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 8, Moves.QUICK_ATTACK ], - [ 10, Moves.LICK ], - [ 14, Moves.WATER_PULSE ], - [ 19, Moves.SMOKESCREEN ], - [ 23, Moves.ROUND ], - [ 28, Moves.FLING ], - [ 33, Moves.SMACK_DOWN ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.BOUNCE ], - [ 50, Moves.DOUBLE_TEAM ], - [ 56, Moves.HYDRO_PUMP ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 8, MoveId.QUICK_ATTACK ], + [ 10, MoveId.LICK ], + [ 14, MoveId.WATER_PULSE ], + [ 19, MoveId.SMOKESCREEN ], + [ 23, MoveId.ROUND ], + [ 28, MoveId.FLING ], + [ 33, MoveId.SMACK_DOWN ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.BOUNCE ], + [ 50, MoveId.DOUBLE_TEAM ], + [ 56, MoveId.HYDRO_PUMP ], ], [Species.GRENINJA]: [ - [ EVOLVE_MOVE, Moves.WATER_SHURIKEN ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ROUND ], // Previous Stage Move - [ 1, Moves.FLING ], // Previous Stage Move - [ 1, Moves.SMACK_DOWN ], // Previous Stage Move - [ 1, Moves.BOUNCE ], // Previous Stage Move - [ 1, Moves.HAZE ], - [ 1, Moves.MAT_BLOCK ], - [ 1, Moves.ROLE_PLAY ], - [ 1, Moves.NIGHT_SLASH ], - [ 10, Moves.LICK ], - [ 14, Moves.WATER_PULSE ], - [ 19, Moves.SMOKESCREEN ], - [ 23, Moves.SHADOW_SNEAK ], - [ 28, Moves.SPIKES ], - [ 33, Moves.AERIAL_ACE ], - [ 42, Moves.SUBSTITUTE ], - [ 49, Moves.EXTRASENSORY ], - [ 56, Moves.DOUBLE_TEAM ], - [ 68, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.WATER_SHURIKEN ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ROUND ], // Previous Stage Move + [ 1, MoveId.FLING ], // Previous Stage Move + [ 1, MoveId.SMACK_DOWN ], // Previous Stage Move + [ 1, MoveId.BOUNCE ], // Previous Stage Move + [ 1, MoveId.HAZE ], + [ 1, MoveId.MAT_BLOCK ], + [ 1, MoveId.ROLE_PLAY ], + [ 1, MoveId.NIGHT_SLASH ], + [ 10, MoveId.LICK ], + [ 14, MoveId.WATER_PULSE ], + [ 19, MoveId.SMOKESCREEN ], + [ 23, MoveId.SHADOW_SNEAK ], + [ 28, MoveId.SPIKES ], + [ 33, MoveId.AERIAL_ACE ], + [ 42, MoveId.SUBSTITUTE ], + [ 49, MoveId.EXTRASENSORY ], + [ 56, MoveId.DOUBLE_TEAM ], + [ 68, MoveId.HYDRO_PUMP ], ], [Species.BUNNELBY]: [ - [ 1, Moves.LEER ], - [ 1, Moves.MUD_SLAP ], - [ 3, Moves.TACKLE ], - [ 6, Moves.LASER_FOCUS ], - [ 9, Moves.QUICK_ATTACK ], - [ 12, Moves.MUD_SHOT ], - [ 15, Moves.FLAIL ], - [ 18, Moves.DOUBLE_KICK ], - [ 21, Moves.BULLDOZE ], - [ 24, Moves.DIG ], - [ 27, Moves.BOUNCE ], - [ 30, Moves.TAKE_DOWN ], - [ 33, Moves.SWORDS_DANCE ], - [ 36, Moves.EARTHQUAKE ], - [ 39, Moves.SUPER_FANG ], + [ 1, MoveId.LEER ], + [ 1, MoveId.MUD_SLAP ], + [ 3, MoveId.TACKLE ], + [ 6, MoveId.LASER_FOCUS ], + [ 9, MoveId.QUICK_ATTACK ], + [ 12, MoveId.MUD_SHOT ], + [ 15, MoveId.FLAIL ], + [ 18, MoveId.DOUBLE_KICK ], + [ 21, MoveId.BULLDOZE ], + [ 24, MoveId.DIG ], + [ 27, MoveId.BOUNCE ], + [ 30, MoveId.TAKE_DOWN ], + [ 33, MoveId.SWORDS_DANCE ], + [ 36, MoveId.EARTHQUAKE ], + [ 39, MoveId.SUPER_FANG ], ], [Species.DIGGERSBY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.LASER_FOCUS ], - [ 1, Moves.ROTOTILLER ], - [ 9, Moves.QUICK_ATTACK ], - [ 12, Moves.MUD_SHOT ], - [ 15, Moves.FLAIL ], - [ 18, Moves.DOUBLE_KICK ], - [ 23, Moves.BULLDOZE ], - [ 28, Moves.DIG ], - [ 33, Moves.BOUNCE ], - [ 38, Moves.TAKE_DOWN ], - [ 43, Moves.SWORDS_DANCE ], - [ 48, Moves.EARTHQUAKE ], - [ 53, Moves.SUPER_FANG ], - [ 58, Moves.HAMMER_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.LASER_FOCUS ], + [ 1, MoveId.ROTOTILLER ], + [ 9, MoveId.QUICK_ATTACK ], + [ 12, MoveId.MUD_SHOT ], + [ 15, MoveId.FLAIL ], + [ 18, MoveId.DOUBLE_KICK ], + [ 23, MoveId.BULLDOZE ], + [ 28, MoveId.DIG ], + [ 33, MoveId.BOUNCE ], + [ 38, MoveId.TAKE_DOWN ], + [ 43, MoveId.SWORDS_DANCE ], + [ 48, MoveId.EARTHQUAKE ], + [ 53, MoveId.SUPER_FANG ], + [ 58, MoveId.HAMMER_ARM ], ], [Species.FLETCHLING]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 5, Moves.QUICK_ATTACK ], - [ 10, Moves.EMBER ], - [ 15, Moves.FLAIL ], - [ 20, Moves.ACROBATICS ], - [ 25, Moves.AGILITY ], - [ 30, Moves.AERIAL_ACE ], - [ 35, Moves.TAILWIND ], - [ 40, Moves.STEEL_WING ], - [ 45, Moves.ROOST ], - [ 50, Moves.FLY ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 5, MoveId.QUICK_ATTACK ], + [ 10, MoveId.EMBER ], + [ 15, MoveId.FLAIL ], + [ 20, MoveId.ACROBATICS ], + [ 25, MoveId.AGILITY ], + [ 30, MoveId.AERIAL_ACE ], + [ 35, MoveId.TAILWIND ], + [ 40, MoveId.STEEL_WING ], + [ 45, MoveId.ROOST ], + [ 50, MoveId.FLY ], ], [Species.FLETCHINDER]: [ - [ EVOLVE_MOVE, Moves.FLAME_CHARGE ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.PECK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FEINT ], - [ 15, Moves.FLAIL ], - [ 22, Moves.ACROBATICS ], - [ 29, Moves.AGILITY ], - [ 36, Moves.AERIAL_ACE ], - [ 43, Moves.TAILWIND ], - [ 50, Moves.STEEL_WING ], - [ 57, Moves.ROOST ], - [ 64, Moves.FLY ], + [ EVOLVE_MOVE, MoveId.FLAME_CHARGE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FEINT ], + [ 15, MoveId.FLAIL ], + [ 22, MoveId.ACROBATICS ], + [ 29, MoveId.AGILITY ], + [ 36, MoveId.AERIAL_ACE ], + [ 43, MoveId.TAILWIND ], + [ 50, MoveId.STEEL_WING ], + [ 57, MoveId.ROOST ], + [ 64, MoveId.FLY ], ], [Species.TALONFLAME]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.PECK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FEINT ], - [ 1, Moves.FLARE_BLITZ ], - [ 1, Moves.FLAME_CHARGE ], - [ 15, Moves.FLAIL ], - [ 22, Moves.ACROBATICS ], - [ 29, Moves.AGILITY ], - [ 38, Moves.AERIAL_ACE ], - [ 47, Moves.TAILWIND ], - [ 56, Moves.STEEL_WING ], - [ 65, Moves.ROOST ], - [ 74, Moves.FLY ], - [ 83, Moves.BRAVE_BIRD ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.FLARE_BLITZ ], + [ 1, MoveId.FLAME_CHARGE ], + [ 15, MoveId.FLAIL ], + [ 22, MoveId.ACROBATICS ], + [ 29, MoveId.AGILITY ], + [ 38, MoveId.AERIAL_ACE ], + [ 47, MoveId.TAILWIND ], + [ 56, MoveId.STEEL_WING ], + [ 65, MoveId.ROOST ], + [ 74, MoveId.FLY ], + [ 83, MoveId.BRAVE_BIRD ], ], [Species.SCATTERBUG]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 6, Moves.STUN_SPORE ], - [ 15, Moves.BUG_BITE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 6, MoveId.STUN_SPORE ], + [ 15, MoveId.BUG_BITE ], ], [Species.SPEWPA]: [ - [ EVOLVE_MOVE, Moves.PROTECT ], - [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move - [ RELEARN_MOVE, Moves.STUN_SPORE ], // Previous Stage Move - [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.HARDEN ], + [ EVOLVE_MOVE, MoveId.PROTECT ], + [ RELEARN_MOVE, MoveId.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.STUN_SPORE ], // Previous Stage Move + [ RELEARN_MOVE, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.HARDEN ], ], [Species.VIVILLON]: [ - [ EVOLVE_MOVE, Moves.GUST ], - [ 1, Moves.PROTECT ], // Previous Stage Move - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.STRING_SHOT ], // Previous Stage Move - [ 1, Moves.HARDEN ], // Previous Stage Move - [ 1, Moves.BUG_BITE ], // Previous Stage Move - [ 1, Moves.POISON_POWDER ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.STRUGGLE_BUG ], - [ 1, Moves.POWDER ], - [ 12, Moves.LIGHT_SCREEN ], - [ 17, Moves.PSYBEAM ], - [ 21, Moves.SUPERSONIC ], - [ 25, Moves.DRAINING_KISS ], - [ 31, Moves.SAFEGUARD ], - [ 35, Moves.BUG_BUZZ ], - [ 45, Moves.QUIVER_DANCE ], - [ 50, Moves.HURRICANE ], + [ EVOLVE_MOVE, MoveId.GUST ], + [ 1, MoveId.PROTECT ], // Previous Stage Move + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.STRING_SHOT ], // Previous Stage Move + [ 1, MoveId.HARDEN ], // Previous Stage Move + [ 1, MoveId.BUG_BITE ], // Previous Stage Move + [ 1, MoveId.POISON_POWDER ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 1, MoveId.POWDER ], + [ 12, MoveId.LIGHT_SCREEN ], + [ 17, MoveId.PSYBEAM ], + [ 21, MoveId.SUPERSONIC ], + [ 25, MoveId.DRAINING_KISS ], + [ 31, MoveId.SAFEGUARD ], + [ 35, MoveId.BUG_BUZZ ], + [ 45, MoveId.QUIVER_DANCE ], + [ 50, MoveId.HURRICANE ], ], [Species.LITLEO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 5, Moves.EMBER ], - [ 8, Moves.WORK_UP ], - [ 11, Moves.HEADBUTT ], - [ 15, Moves.NOBLE_ROAR ], - [ 20, Moves.TAKE_DOWN ], - [ 23, Moves.FIRE_FANG ], - [ 28, Moves.ENDEAVOR ], - [ 33, Moves.ECHOED_VOICE ], - [ 36, Moves.FLAMETHROWER ], - [ 39, Moves.CRUNCH ], - [ 43, Moves.HYPER_VOICE ], - [ 46, Moves.INCINERATE ], - [ 50, Moves.OVERHEAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 5, MoveId.EMBER ], + [ 8, MoveId.WORK_UP ], + [ 11, MoveId.HEADBUTT ], + [ 15, MoveId.NOBLE_ROAR ], + [ 20, MoveId.TAKE_DOWN ], + [ 23, MoveId.FIRE_FANG ], + [ 28, MoveId.ENDEAVOR ], + [ 33, MoveId.ECHOED_VOICE ], + [ 36, MoveId.FLAMETHROWER ], + [ 39, MoveId.CRUNCH ], + [ 43, MoveId.HYPER_VOICE ], + [ 46, MoveId.INCINERATE ], + [ 50, MoveId.OVERHEAT ], ], [Species.PYROAR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.HYPER_BEAM ], - [ 1, Moves.WORK_UP ], - [ 11, Moves.HEADBUTT ], - [ 15, Moves.NOBLE_ROAR ], - [ 20, Moves.TAKE_DOWN ], - [ 23, Moves.FIRE_FANG ], - [ 28, Moves.ENDEAVOR ], - [ 33, Moves.ECHOED_VOICE ], - [ 38, Moves.FLAMETHROWER ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.HYPER_VOICE ], - [ 51, Moves.INCINERATE ], - [ 57, Moves.OVERHEAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.HYPER_BEAM ], + [ 1, MoveId.WORK_UP ], + [ 11, MoveId.HEADBUTT ], + [ 15, MoveId.NOBLE_ROAR ], + [ 20, MoveId.TAKE_DOWN ], + [ 23, MoveId.FIRE_FANG ], + [ 28, MoveId.ENDEAVOR ], + [ 33, MoveId.ECHOED_VOICE ], + [ 38, MoveId.FLAMETHROWER ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.HYPER_VOICE ], + [ 51, MoveId.INCINERATE ], + [ 57, MoveId.OVERHEAT ], ], [Species.FLABEBE]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 6, Moves.FAIRY_WIND ], - [ 10, Moves.SAFEGUARD ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.WISH ], - [ 22, Moves.MAGICAL_LEAF ], - [ 24, Moves.GRASSY_TERRAIN ], - [ 28, Moves.PETAL_BLIZZARD ], - [ 33, Moves.SYNTHESIS ], - [ 37, Moves.MISTY_TERRAIN ], - [ 41, Moves.MOONBLAST ], - [ 45, Moves.PETAL_DANCE ], - [ 48, Moves.SOLAR_BEAM ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 6, MoveId.FAIRY_WIND ], + [ 10, MoveId.SAFEGUARD ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.WISH ], + [ 22, MoveId.MAGICAL_LEAF ], + [ 24, MoveId.GRASSY_TERRAIN ], + [ 28, MoveId.PETAL_BLIZZARD ], + [ 33, MoveId.SYNTHESIS ], + [ 37, MoveId.MISTY_TERRAIN ], + [ 41, MoveId.MOONBLAST ], + [ 45, MoveId.PETAL_DANCE ], + [ 48, MoveId.SOLAR_BEAM ], ], [Species.FLOETTE]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FAIRY_WIND ], - [ 10, Moves.SAFEGUARD ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.WISH ], - [ 25, Moves.MAGICAL_LEAF ], - [ 27, Moves.GRASSY_TERRAIN ], - [ 33, Moves.PETAL_BLIZZARD ], - [ 38, Moves.SYNTHESIS ], - [ 43, Moves.MISTY_TERRAIN ], - [ 46, Moves.MOONBLAST ], - [ 51, Moves.PETAL_DANCE ], - [ 58, Moves.SOLAR_BEAM ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FAIRY_WIND ], + [ 10, MoveId.SAFEGUARD ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.WISH ], + [ 25, MoveId.MAGICAL_LEAF ], + [ 27, MoveId.GRASSY_TERRAIN ], + [ 33, MoveId.PETAL_BLIZZARD ], + [ 38, MoveId.SYNTHESIS ], + [ 43, MoveId.MISTY_TERRAIN ], + [ 46, MoveId.MOONBLAST ], + [ 51, MoveId.PETAL_DANCE ], + [ 58, MoveId.SOLAR_BEAM ], ], [Species.FLORGES]: [ - [ 1, Moves.VINE_WHIP ], // Previous Stage Move - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.FAIRY_WIND ], // Previous Stage Move - [ 1, Moves.RAZOR_LEAF ], // Previous Stage Move - [ 1, Moves.SOLAR_BEAM ], - [ 1, Moves.PETAL_DANCE ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.WISH ], - [ 1, Moves.LUCKY_CHANT ], - [ 1, Moves.MAGICAL_LEAF ], - [ 1, Moves.GRASS_KNOT ], - [ 1, Moves.PETAL_BLIZZARD ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.GRASSY_TERRAIN ], - [ 1, Moves.MISTY_TERRAIN ], - [ 5, Moves.MOONBLAST ], + [ 1, MoveId.VINE_WHIP ], // Previous Stage Move + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.FAIRY_WIND ], // Previous Stage Move + [ 1, MoveId.RAZOR_LEAF ], // Previous Stage Move + [ 1, MoveId.SOLAR_BEAM ], + [ 1, MoveId.PETAL_DANCE ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.WISH ], + [ 1, MoveId.LUCKY_CHANT ], + [ 1, MoveId.MAGICAL_LEAF ], + [ 1, MoveId.GRASS_KNOT ], + [ 1, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.GRASSY_TERRAIN ], + [ 1, MoveId.MISTY_TERRAIN ], + [ 5, MoveId.MOONBLAST ], ], [Species.SKIDDO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWTH ], - [ 7, Moves.VINE_WHIP ], - [ 9, Moves.TAIL_WHIP ], - [ 12, Moves.LEECH_SEED ], - [ 13, Moves.RAZOR_LEAF ], - [ 16, Moves.WORRY_SEED ], - [ 20, Moves.SYNTHESIS ], - [ 22, Moves.TAKE_DOWN ], - [ 26, Moves.BULLDOZE ], - [ 30, Moves.SEED_BOMB ], - [ 34, Moves.BULK_UP ], - [ 38, Moves.DOUBLE_EDGE ], - [ 42, Moves.HORN_LEECH ], - [ 45, Moves.LEAF_BLADE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWTH ], + [ 7, MoveId.VINE_WHIP ], + [ 9, MoveId.TAIL_WHIP ], + [ 12, MoveId.LEECH_SEED ], + [ 13, MoveId.RAZOR_LEAF ], + [ 16, MoveId.WORRY_SEED ], + [ 20, MoveId.SYNTHESIS ], + [ 22, MoveId.TAKE_DOWN ], + [ 26, MoveId.BULLDOZE ], + [ 30, MoveId.SEED_BOMB ], + [ 34, MoveId.BULK_UP ], + [ 38, MoveId.DOUBLE_EDGE ], + [ 42, MoveId.HORN_LEECH ], + [ 45, MoveId.LEAF_BLADE ], ], [Species.GOGOAT]: [ - [ EVOLVE_MOVE, Moves.AERIAL_ACE ], - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWTH ], - [ 1, Moves.EARTHQUAKE ], - [ 12, Moves.LEECH_SEED ], - [ 13, Moves.RAZOR_LEAF ], - [ 16, Moves.WORRY_SEED ], - [ 20, Moves.SYNTHESIS ], - [ 22, Moves.TAKE_DOWN ], - [ 26, Moves.BULLDOZE ], - [ 30, Moves.SEED_BOMB ], - [ 34, Moves.BULK_UP ], - [ 40, Moves.DOUBLE_EDGE ], - [ 47, Moves.HORN_LEECH ], - [ 55, Moves.LEAF_BLADE ], - [ 58, Moves.MILK_DRINK ], + [ EVOLVE_MOVE, MoveId.AERIAL_ACE ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.EARTHQUAKE ], + [ 12, MoveId.LEECH_SEED ], + [ 13, MoveId.RAZOR_LEAF ], + [ 16, MoveId.WORRY_SEED ], + [ 20, MoveId.SYNTHESIS ], + [ 22, MoveId.TAKE_DOWN ], + [ 26, MoveId.BULLDOZE ], + [ 30, MoveId.SEED_BOMB ], + [ 34, MoveId.BULK_UP ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 47, MoveId.HORN_LEECH ], + [ 55, MoveId.LEAF_BLADE ], + [ 58, MoveId.MILK_DRINK ], ], [Species.PANCHAM]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.ARM_THRUST ], - [ 8, Moves.TAUNT ], - [ 12, Moves.CIRCLE_THROW ], - [ 16, Moves.LOW_SWEEP ], - [ 20, Moves.WORK_UP ], - [ 24, Moves.SLASH ], - [ 28, Moves.VITAL_THROW ], - [ 33, Moves.CRUNCH ], - [ 36, Moves.BODY_SLAM ], - [ 40, Moves.PARTING_SHOT ], - [ 44, Moves.ENTRAINMENT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.ARM_THRUST ], + [ 8, MoveId.TAUNT ], + [ 12, MoveId.CIRCLE_THROW ], + [ 16, MoveId.LOW_SWEEP ], + [ 20, MoveId.WORK_UP ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.VITAL_THROW ], + [ 33, MoveId.CRUNCH ], + [ 36, MoveId.BODY_SLAM ], + [ 40, MoveId.PARTING_SHOT ], + [ 44, MoveId.ENTRAINMENT ], ], [Species.PANGORO]: [ - [ EVOLVE_MOVE, Moves.NIGHT_SLASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.TAUNT ], - [ 1, Moves.ARM_THRUST ], - [ 1, Moves.BULLET_PUNCH ], - [ 12, Moves.CIRCLE_THROW ], - [ 16, Moves.LOW_SWEEP ], - [ 20, Moves.WORK_UP ], - [ 24, Moves.SLASH ], - [ 28, Moves.VITAL_THROW ], - [ 35, Moves.CRUNCH ], - [ 40, Moves.BODY_SLAM ], - [ 46, Moves.PARTING_SHOT ], - [ 52, Moves.ENTRAINMENT ], - [ 58, Moves.HAMMER_ARM ], + [ EVOLVE_MOVE, MoveId.NIGHT_SLASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.ARM_THRUST ], + [ 1, MoveId.BULLET_PUNCH ], + [ 12, MoveId.CIRCLE_THROW ], + [ 16, MoveId.LOW_SWEEP ], + [ 20, MoveId.WORK_UP ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.VITAL_THROW ], + [ 35, MoveId.CRUNCH ], + [ 40, MoveId.BODY_SLAM ], + [ 46, MoveId.PARTING_SHOT ], + [ 52, MoveId.ENTRAINMENT ], + [ 58, MoveId.HAMMER_ARM ], ], [Species.FURFROU]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.SAND_ATTACK ], - [ 9, Moves.BABY_DOLL_EYES ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.TAIL_WHIP ], - [ 22, Moves.BITE ], - [ 27, Moves.ODOR_SLEUTH ], - [ 33, Moves.RETALIATE ], - [ 35, Moves.TAKE_DOWN ], - [ 38, Moves.CHARM ], - [ 42, Moves.SUCKER_PUNCH ], - [ 48, Moves.COTTON_GUARD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.SAND_ATTACK ], + [ 9, MoveId.BABY_DOLL_EYES ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.TAIL_WHIP ], + [ 22, MoveId.BITE ], + [ 27, MoveId.ODOR_SLEUTH ], + [ 33, MoveId.RETALIATE ], + [ 35, MoveId.TAKE_DOWN ], + [ 38, MoveId.CHARM ], + [ 42, MoveId.SUCKER_PUNCH ], + [ 48, MoveId.COTTON_GUARD ], ], [Species.ESPURR]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 3, Moves.FAKE_OUT ], - [ 6, Moves.DISARMING_VOICE ], - [ 9, Moves.CONFUSION ], - [ 18, Moves.COVET ], - [ 21, Moves.PSYBEAM ], - [ 30, Moves.LIGHT_SCREEN ], - [ 30, Moves.REFLECT ], - [ 33, Moves.PSYSHOCK ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 3, MoveId.FAKE_OUT ], + [ 6, MoveId.DISARMING_VOICE ], + [ 9, MoveId.CONFUSION ], + [ 18, MoveId.COVET ], + [ 21, MoveId.PSYBEAM ], + [ 30, MoveId.LIGHT_SCREEN ], + [ 30, MoveId.REFLECT ], + [ 33, MoveId.PSYSHOCK ], ], [Species.MEOWSTIC]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.MEAN_LOOK ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.DISARMING_VOICE ], - [ 9, Moves.CONFUSION ], - [ 12, Moves.HELPING_HAND ], - [ 15, Moves.CHARM ], - [ 18, Moves.COVET ], - [ 21, Moves.PSYBEAM ], - [ 24, Moves.SUCKER_PUNCH ], - [ 29, Moves.ROLE_PLAY ], - [ 34, Moves.LIGHT_SCREEN ], - [ 34, Moves.REFLECT ], - [ 39, Moves.PSYSHOCK ], - [ 44, Moves.IMPRISON ], - [ 49, Moves.QUICK_GUARD ], - [ 54, Moves.PSYCHIC ], - [ 59, Moves.MISTY_TERRAIN ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.MEAN_LOOK ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.DISARMING_VOICE ], + [ 9, MoveId.CONFUSION ], + [ 12, MoveId.HELPING_HAND ], + [ 15, MoveId.CHARM ], + [ 18, MoveId.COVET ], + [ 21, MoveId.PSYBEAM ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 29, MoveId.ROLE_PLAY ], + [ 34, MoveId.LIGHT_SCREEN ], + [ 34, MoveId.REFLECT ], + [ 39, MoveId.PSYSHOCK ], + [ 44, MoveId.IMPRISON ], + [ 49, MoveId.QUICK_GUARD ], + [ 54, MoveId.PSYCHIC ], + [ 59, MoveId.MISTY_TERRAIN ], ], [Species.HONEDGE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.FURY_CUTTER ], - [ 4, Moves.SHADOW_SNEAK ], - [ 8, Moves.AUTOTOMIZE ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.METAL_SOUND ], - [ 20, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 28, Moves.RETALIATE ], - [ 32, Moves.IRON_DEFENSE ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.POWER_TRICK ], - [ 44, Moves.SWORDS_DANCE ], - [ 48, Moves.SACRED_SWORD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FURY_CUTTER ], + [ 4, MoveId.SHADOW_SNEAK ], + [ 8, MoveId.AUTOTOMIZE ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.METAL_SOUND ], + [ 20, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 28, MoveId.RETALIATE ], + [ 32, MoveId.IRON_DEFENSE ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.POWER_TRICK ], + [ 44, MoveId.SWORDS_DANCE ], + [ 48, MoveId.SACRED_SWORD ], ], [Species.DOUBLADE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.AUTOTOMIZE ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.METAL_SOUND ], - [ 20, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 28, Moves.RETALIATE ], - [ 32, Moves.IRON_DEFENSE ], - [ 38, Moves.IRON_HEAD ], - [ 44, Moves.POWER_TRICK ], - [ 50, Moves.SWORDS_DANCE ], - [ 56, Moves.SACRED_SWORD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 1, MoveId.AUTOTOMIZE ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.METAL_SOUND ], + [ 20, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 28, MoveId.RETALIATE ], + [ 32, MoveId.IRON_DEFENSE ], + [ 38, MoveId.IRON_HEAD ], + [ 44, MoveId.POWER_TRICK ], + [ 50, MoveId.SWORDS_DANCE ], + [ 56, MoveId.SACRED_SWORD ], ], [Species.AEGISLASH]: [ - [ EVOLVE_MOVE, Moves.KINGS_SHIELD ], - [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.PURSUIT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SLASH ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.METAL_SOUND ], - [ 1, Moves.AERIAL_ACE ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.POWER_TRICK ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.IRON_HEAD ], - [ 1, Moves.HEAD_SMASH ], - [ 1, Moves.AUTOTOMIZE ], - [ 1, Moves.RETALIATE ], - [ 1, Moves.SACRED_SWORD ], + [ EVOLVE_MOVE, MoveId.KINGS_SHIELD ], + [ 1, MoveId.SWORDS_DANCE ], + [ 1, MoveId.PURSUIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SLASH ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.METAL_SOUND ], + [ 1, MoveId.AERIAL_ACE ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.POWER_TRICK ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 1, MoveId.IRON_HEAD ], + [ 1, MoveId.HEAD_SMASH ], + [ 1, MoveId.AUTOTOMIZE ], + [ 1, MoveId.RETALIATE ], + [ 1, MoveId.SACRED_SWORD ], ], [Species.SPRITZEE]: [ - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.FAIRY_WIND ], - [ 3, Moves.SWEET_KISS ], - [ 6, Moves.ECHOED_VOICE ], - [ 9, Moves.DRAINING_KISS ], - [ 12, Moves.AROMATHERAPY ], - [ 18, Moves.ATTRACT ], - [ 21, Moves.FLAIL ], - [ 24, Moves.MISTY_TERRAIN ], - [ 27, Moves.PSYCHIC ], - [ 30, Moves.CHARM ], - [ 33, Moves.CALM_MIND ], - [ 36, Moves.MOONBLAST ], - [ 39, Moves.SKILL_SWAP ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.FAIRY_WIND ], + [ 3, MoveId.SWEET_KISS ], + [ 6, MoveId.ECHOED_VOICE ], + [ 9, MoveId.DRAINING_KISS ], + [ 12, MoveId.AROMATHERAPY ], + [ 18, MoveId.ATTRACT ], + [ 21, MoveId.FLAIL ], + [ 24, MoveId.MISTY_TERRAIN ], + [ 27, MoveId.PSYCHIC ], + [ 30, MoveId.CHARM ], + [ 33, MoveId.CALM_MIND ], + [ 36, MoveId.MOONBLAST ], + [ 39, MoveId.SKILL_SWAP ], ], [Species.AROMATISSE]: [ - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.HEAL_PULSE ], - [ 1, Moves.FAIRY_WIND ], - [ 1, Moves.AROMATIC_MIST ], - [ 9, Moves.DISARMING_VOICE ], - [ 12, Moves.AROMATHERAPY ], - [ 15, Moves.DRAINING_KISS ], - [ 18, Moves.ATTRACT ], - [ 21, Moves.FLAIL ], - [ 24, Moves.MISTY_TERRAIN ], - [ 27, Moves.PSYCHIC ], - [ 30, Moves.CHARM ], - [ 33, Moves.CALM_MIND ], - [ 36, Moves.MOONBLAST ], - [ 39, Moves.SKILL_SWAP ], - [ 42, Moves.PSYCH_UP ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.ECHOED_VOICE ], + [ 1, MoveId.HEAL_PULSE ], + [ 1, MoveId.FAIRY_WIND ], + [ 1, MoveId.AROMATIC_MIST ], + [ 9, MoveId.DISARMING_VOICE ], + [ 12, MoveId.AROMATHERAPY ], + [ 15, MoveId.DRAINING_KISS ], + [ 18, MoveId.ATTRACT ], + [ 21, MoveId.FLAIL ], + [ 24, MoveId.MISTY_TERRAIN ], + [ 27, MoveId.PSYCHIC ], + [ 30, MoveId.CHARM ], + [ 33, MoveId.CALM_MIND ], + [ 36, MoveId.MOONBLAST ], + [ 39, MoveId.SKILL_SWAP ], + [ 42, MoveId.PSYCH_UP ], ], [Species.SWIRLIX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SWEET_SCENT ], - [ 3, Moves.PLAY_NICE ], - [ 6, Moves.FAIRY_WIND ], - [ 9, Moves.AROMATHERAPY ], - [ 12, Moves.DRAINING_KISS ], - [ 15, Moves.FAKE_TEARS ], - [ 18, Moves.ROUND ], - [ 21, Moves.STRING_SHOT ], - [ 24, Moves.COTTON_SPORE ], - [ 27, Moves.ENERGY_BALL ], - [ 30, Moves.WISH ], - [ 33, Moves.PLAY_ROUGH ], - [ 36, Moves.COTTON_GUARD ], - [ 39, Moves.ENDEAVOR ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SWEET_SCENT ], + [ 3, MoveId.PLAY_NICE ], + [ 6, MoveId.FAIRY_WIND ], + [ 9, MoveId.AROMATHERAPY ], + [ 12, MoveId.DRAINING_KISS ], + [ 15, MoveId.FAKE_TEARS ], + [ 18, MoveId.ROUND ], + [ 21, MoveId.STRING_SHOT ], + [ 24, MoveId.COTTON_SPORE ], + [ 27, MoveId.ENERGY_BALL ], + [ 30, MoveId.WISH ], + [ 33, MoveId.PLAY_ROUGH ], + [ 36, MoveId.COTTON_GUARD ], + [ 39, MoveId.ENDEAVOR ], ], [Species.SLURPUFF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.FAIRY_WIND ], - [ 1, Moves.PLAY_NICE ], - [ 9, Moves.AROMATHERAPY ], - [ 12, Moves.DRAINING_KISS ], - [ 15, Moves.FAKE_TEARS ], - [ 18, Moves.ROUND ], - [ 21, Moves.STRING_SHOT ], - [ 24, Moves.COTTON_SPORE ], - [ 27, Moves.ENERGY_BALL ], - [ 30, Moves.WISH ], - [ 33, Moves.PLAY_ROUGH ], - [ 36, Moves.COTTON_GUARD ], - [ 39, Moves.ENDEAVOR ], - [ 42, Moves.STICKY_WEB ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.FAIRY_WIND ], + [ 1, MoveId.PLAY_NICE ], + [ 9, MoveId.AROMATHERAPY ], + [ 12, MoveId.DRAINING_KISS ], + [ 15, MoveId.FAKE_TEARS ], + [ 18, MoveId.ROUND ], + [ 21, MoveId.STRING_SHOT ], + [ 24, MoveId.COTTON_SPORE ], + [ 27, MoveId.ENERGY_BALL ], + [ 30, MoveId.WISH ], + [ 33, MoveId.PLAY_ROUGH ], + [ 36, MoveId.COTTON_GUARD ], + [ 39, MoveId.ENDEAVOR ], + [ 42, MoveId.STICKY_WEB ], ], [Species.INKAY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.PECK ], - [ 1, Moves.CONSTRICT ], - [ 3, Moves.HYPNOSIS ], - [ 6, Moves.WRAP ], - [ 9, Moves.PAYBACK ], - [ 12, Moves.PLUCK ], - [ 15, Moves.PSYBEAM ], - [ 18, Moves.SWAGGER ], - [ 21, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 27, Moves.PSYCHO_CUT ], - [ 31, Moves.SWITCHEROO ], - [ 33, Moves.FOUL_PLAY ], - [ 36, Moves.TOPSY_TURVY ], - [ 39, Moves.SUPERPOWER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PECK ], + [ 1, MoveId.CONSTRICT ], + [ 3, MoveId.HYPNOSIS ], + [ 6, MoveId.WRAP ], + [ 9, MoveId.PAYBACK ], + [ 12, MoveId.PLUCK ], + [ 15, MoveId.PSYBEAM ], + [ 18, MoveId.SWAGGER ], + [ 21, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 27, MoveId.PSYCHO_CUT ], + [ 31, MoveId.SWITCHEROO ], + [ 33, MoveId.FOUL_PLAY ], + [ 36, MoveId.TOPSY_TURVY ], + [ 39, MoveId.SUPERPOWER ], ], [Species.MALAMAR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WRAP ], - [ 1, Moves.PECK ], - [ 1, Moves.CONSTRICT ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.REVERSAL ], - [ 9, Moves.PAYBACK ], - [ 12, Moves.PLUCK ], - [ 15, Moves.PSYBEAM ], - [ 18, Moves.SWAGGER ], - [ 21, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 27, Moves.PSYCHO_CUT ], - [ 33, Moves.SWITCHEROO ], - [ 37, Moves.FOUL_PLAY ], - [ 42, Moves.TOPSY_TURVY ], - [ 47, Moves.SUPERPOWER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.PECK ], + [ 1, MoveId.CONSTRICT ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.REVERSAL ], + [ 9, MoveId.PAYBACK ], + [ 12, MoveId.PLUCK ], + [ 15, MoveId.PSYBEAM ], + [ 18, MoveId.SWAGGER ], + [ 21, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 27, MoveId.PSYCHO_CUT ], + [ 33, MoveId.SWITCHEROO ], + [ 37, MoveId.FOUL_PLAY ], + [ 42, MoveId.TOPSY_TURVY ], + [ 47, MoveId.SUPERPOWER ], ], [Species.BINACLE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.MUD_SLAP ], - [ 4, Moves.WITHDRAW ], - [ 8, Moves.WATER_GUN ], - [ 12, Moves.FURY_CUTTER ], - [ 16, Moves.FURY_SWIPES ], - [ 20, Moves.ANCIENT_POWER ], - [ 24, Moves.ROCK_POLISH ], - [ 28, Moves.SLASH ], - [ 32, Moves.HONE_CLAWS ], - [ 36, Moves.RAZOR_SHELL ], - [ 40, Moves.SHELL_SMASH ], - [ 44, Moves.CROSS_CHOP ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.MUD_SLAP ], + [ 4, MoveId.WITHDRAW ], + [ 8, MoveId.WATER_GUN ], + [ 12, MoveId.FURY_CUTTER ], + [ 16, MoveId.FURY_SWIPES ], + [ 20, MoveId.ANCIENT_POWER ], + [ 24, MoveId.ROCK_POLISH ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.HONE_CLAWS ], + [ 36, MoveId.RAZOR_SHELL ], + [ 40, MoveId.SHELL_SMASH ], + [ 44, MoveId.CROSS_CHOP ], ], [Species.BARBARACLE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.SKULL_BASH ], - [ 1, Moves.MUD_SLAP ], - [ 12, Moves.FURY_CUTTER ], - [ 16, Moves.FURY_SWIPES ], - [ 20, Moves.ANCIENT_POWER ], - [ 24, Moves.ROCK_POLISH ], - [ 28, Moves.SLASH ], - [ 32, Moves.HONE_CLAWS ], - [ 36, Moves.RAZOR_SHELL ], - [ 42, Moves.SHELL_SMASH ], - [ 48, Moves.CROSS_CHOP ], - [ 54, Moves.STONE_EDGE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.SKULL_BASH ], + [ 1, MoveId.MUD_SLAP ], + [ 12, MoveId.FURY_CUTTER ], + [ 16, MoveId.FURY_SWIPES ], + [ 20, MoveId.ANCIENT_POWER ], + [ 24, MoveId.ROCK_POLISH ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.HONE_CLAWS ], + [ 36, MoveId.RAZOR_SHELL ], + [ 42, MoveId.SHELL_SMASH ], + [ 48, MoveId.CROSS_CHOP ], + [ 54, MoveId.STONE_EDGE ], ], [Species.SKRELP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 5, Moves.ACID ], - [ 10, Moves.WATER_GUN ], - [ 15, Moves.TAIL_WHIP ], - [ 20, Moves.DOUBLE_TEAM ], - [ 25, Moves.POISON_TAIL ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.TOXIC ], - [ 40, Moves.DRAGON_PULSE ], - [ 45, Moves.AQUA_TAIL ], - [ 50, Moves.SLUDGE_BOMB ], - [ 55, Moves.HYDRO_PUMP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 5, MoveId.ACID ], + [ 10, MoveId.WATER_GUN ], + [ 15, MoveId.TAIL_WHIP ], + [ 20, MoveId.DOUBLE_TEAM ], + [ 25, MoveId.POISON_TAIL ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.TOXIC ], + [ 40, MoveId.DRAGON_PULSE ], + [ 45, MoveId.AQUA_TAIL ], + [ 50, MoveId.SLUDGE_BOMB ], + [ 55, MoveId.HYDRO_PUMP ], ], [Species.DRAGALGE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ACID ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.FEINT_ATTACK ], - [ 15, Moves.TAIL_WHIP ], - [ 20, Moves.DOUBLE_TEAM ], - [ 25, Moves.POISON_TAIL ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.TOXIC ], - [ 40, Moves.DRAGON_PULSE ], - [ 45, Moves.AQUA_TAIL ], - [ 52, Moves.SLUDGE_BOMB ], - [ 59, Moves.HYDRO_PUMP ], - [ 66, Moves.OUTRAGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ACID ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.FEINT_ATTACK ], + [ 15, MoveId.TAIL_WHIP ], + [ 20, MoveId.DOUBLE_TEAM ], + [ 25, MoveId.POISON_TAIL ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.TOXIC ], + [ 40, MoveId.DRAGON_PULSE ], + [ 45, MoveId.AQUA_TAIL ], + [ 52, MoveId.SLUDGE_BOMB ], + [ 59, MoveId.HYDRO_PUMP ], + [ 66, MoveId.OUTRAGE ], ], [Species.CLAUNCHER]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SPLASH ], - [ 10, Moves.FLAIL ], - [ 15, Moves.AQUA_JET ], - [ 20, Moves.SMACK_DOWN ], - [ 25, Moves.HONE_CLAWS ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.SWORDS_DANCE ], - [ 40, Moves.AURA_SPHERE ], - [ 45, Moves.BOUNCE ], - [ 50, Moves.MUDDY_WATER ], - [ 55, Moves.CRABHAMMER ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SPLASH ], + [ 10, MoveId.FLAIL ], + [ 15, MoveId.AQUA_JET ], + [ 20, MoveId.SMACK_DOWN ], + [ 25, MoveId.HONE_CLAWS ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.SWORDS_DANCE ], + [ 40, MoveId.AURA_SPHERE ], + [ 45, MoveId.BOUNCE ], + [ 50, MoveId.MUDDY_WATER ], + [ 55, MoveId.CRABHAMMER ], ], [Species.CLAWITZER]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SPLASH ], - [ 1, Moves.FLAIL ], - [ 1, Moves.DARK_PULSE ], - [ 1, Moves.DRAGON_PULSE ], - [ 1, Moves.HEAL_PULSE ], - [ 15, Moves.AQUA_JET ], - [ 20, Moves.SMACK_DOWN ], - [ 25, Moves.HONE_CLAWS ], - [ 30, Moves.WATER_PULSE ], - [ 35, Moves.SWORDS_DANCE ], - [ 42, Moves.AURA_SPHERE ], - [ 49, Moves.BOUNCE ], - [ 56, Moves.MUDDY_WATER ], - [ 63, Moves.CRABHAMMER ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.DARK_PULSE ], + [ 1, MoveId.DRAGON_PULSE ], + [ 1, MoveId.HEAL_PULSE ], + [ 15, MoveId.AQUA_JET ], + [ 20, MoveId.SMACK_DOWN ], + [ 25, MoveId.HONE_CLAWS ], + [ 30, MoveId.WATER_PULSE ], + [ 35, MoveId.SWORDS_DANCE ], + [ 42, MoveId.AURA_SPHERE ], + [ 49, MoveId.BOUNCE ], + [ 56, MoveId.MUDDY_WATER ], + [ 63, MoveId.CRABHAMMER ], ], [Species.HELIOPTILE]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.MUD_SLAP ], - [ 4, Moves.POUND ], - [ 8, Moves.THUNDER_SHOCK ], - [ 12, Moves.QUICK_ATTACK ], - [ 16, Moves.CHARGE ], - [ 20, Moves.BULLDOZE ], - [ 24, Moves.VOLT_SWITCH ], - [ 28, Moves.PARABOLIC_CHARGE ], - [ 32, Moves.THUNDER_WAVE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.ELECTRIFY ], - [ 44, Moves.THUNDER ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.MUD_SLAP ], + [ 4, MoveId.POUND ], + [ 8, MoveId.THUNDER_SHOCK ], + [ 12, MoveId.QUICK_ATTACK ], + [ 16, MoveId.CHARGE ], + [ 20, MoveId.BULLDOZE ], + [ 24, MoveId.VOLT_SWITCH ], + [ 28, MoveId.PARABOLIC_CHARGE ], + [ 32, MoveId.THUNDER_WAVE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.ELECTRIFY ], + [ 44, MoveId.THUNDER ], ], [Species.HELIOLISK]: [ - [ 1, Moves.POUND ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.RAZOR_WIND ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDERBOLT ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.THUNDER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.CHARGE ], - [ 1, Moves.DISCHARGE ], - [ 1, Moves.VOLT_SWITCH ], - [ 1, Moves.BULLDOZE ], - [ 1, Moves.PARABOLIC_CHARGE ], - [ 1, Moves.ELECTRIFY ], - [ 1, Moves.EERIE_IMPULSE ], + [ 1, MoveId.POUND ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.RAZOR_WIND ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDERBOLT ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.THUNDER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.DISCHARGE ], + [ 1, MoveId.VOLT_SWITCH ], + [ 1, MoveId.BULLDOZE ], + [ 1, MoveId.PARABOLIC_CHARGE ], + [ 1, MoveId.ELECTRIFY ], + [ 1, MoveId.EERIE_IMPULSE ], ], [Species.TYRUNT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 4, Moves.ROAR ], - [ 8, Moves.ANCIENT_POWER ], - [ 12, Moves.CHARM ], - [ 16, Moves.BITE ], - [ 20, Moves.DRAGON_TAIL ], - [ 24, Moves.STOMP ], - [ 28, Moves.ROCK_SLIDE ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.DRAGON_CLAW ], - [ 40, Moves.THRASH ], - [ 44, Moves.EARTHQUAKE ], - [ 48, Moves.HORN_DRILL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 4, MoveId.ROAR ], + [ 8, MoveId.ANCIENT_POWER ], + [ 12, MoveId.CHARM ], + [ 16, MoveId.BITE ], + [ 20, MoveId.DRAGON_TAIL ], + [ 24, MoveId.STOMP ], + [ 28, MoveId.ROCK_SLIDE ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.DRAGON_CLAW ], + [ 40, MoveId.THRASH ], + [ 44, MoveId.EARTHQUAKE ], + [ 48, MoveId.HORN_DRILL ], ], [Species.TYRANTRUM]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.ROAR ], - [ 1, Moves.ANCIENT_POWER ], - [ 12, Moves.CHARM ], - [ 16, Moves.BITE ], - [ 20, Moves.DRAGON_TAIL ], - [ 24, Moves.STOMP ], - [ 28, Moves.ROCK_SLIDE ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.DRAGON_CLAW ], - [ 42, Moves.THRASH ], - [ 48, Moves.EARTHQUAKE ], - [ 54, Moves.HORN_DRILL ], - [ 60, Moves.GIGA_IMPACT ], - [ 66, Moves.HEAD_SMASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.ROAR ], + [ 1, MoveId.ANCIENT_POWER ], + [ 12, MoveId.CHARM ], + [ 16, MoveId.BITE ], + [ 20, MoveId.DRAGON_TAIL ], + [ 24, MoveId.STOMP ], + [ 28, MoveId.ROCK_SLIDE ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.DRAGON_CLAW ], + [ 42, MoveId.THRASH ], + [ 48, MoveId.EARTHQUAKE ], + [ 54, MoveId.HORN_DRILL ], + [ 60, MoveId.GIGA_IMPACT ], + [ 66, MoveId.HEAD_SMASH ], ], [Species.AMAURA]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.POWDER_SNOW ], - [ 4, Moves.ENCORE ], - [ 8, Moves.ANCIENT_POWER ], - [ 12, Moves.ICY_WIND ], - [ 16, Moves.ROUND ], - [ 20, Moves.MIST ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.THUNDER_WAVE ], - [ 32, Moves.NATURE_POWER ], - [ 36, Moves.FREEZE_DRY ], - [ 40, Moves.ICE_BEAM ], - [ 44, Moves.LIGHT_SCREEN ], - [ 48, Moves.HAIL ], - [ 52, Moves.BLIZZARD ], - [ 56, Moves.HYPER_BEAM ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.POWDER_SNOW ], + [ 4, MoveId.ENCORE ], + [ 8, MoveId.ANCIENT_POWER ], + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.MIST ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.THUNDER_WAVE ], + [ 32, MoveId.NATURE_POWER ], + [ 36, MoveId.FREEZE_DRY ], + [ 40, MoveId.ICE_BEAM ], + [ 44, MoveId.LIGHT_SCREEN ], + [ 48, MoveId.HAIL ], + [ 52, MoveId.BLIZZARD ], + [ 56, MoveId.HYPER_BEAM ], ], [Species.AURORUS]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ENCORE ], - [ 1, Moves.ANCIENT_POWER ], - [ 12, Moves.ICY_WIND ], - [ 16, Moves.ROUND ], - [ 20, Moves.MIST ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.THUNDER_WAVE ], - [ 32, Moves.NATURE_POWER ], - [ 36, Moves.FREEZE_DRY ], - [ 42, Moves.ICE_BEAM ], - [ 48, Moves.LIGHT_SCREEN ], - [ 54, Moves.HAIL ], - [ 60, Moves.BLIZZARD ], - [ 66, Moves.HYPER_BEAM ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.ANCIENT_POWER ], + [ 12, MoveId.ICY_WIND ], + [ 16, MoveId.ROUND ], + [ 20, MoveId.MIST ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.THUNDER_WAVE ], + [ 32, MoveId.NATURE_POWER ], + [ 36, MoveId.FREEZE_DRY ], + [ 42, MoveId.ICE_BEAM ], + [ 48, MoveId.LIGHT_SCREEN ], + [ 54, MoveId.HAIL ], + [ 60, MoveId.BLIZZARD ], + [ 66, MoveId.HYPER_BEAM ], ], [Species.SYLVEON]: [ - [ EVOLVE_MOVE, Moves.SPARKLY_SWIRL ], - [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.GROWL ], - [ 1, Moves.CHARM ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.DISARMING_VOICE ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.BABY_DOLL_EYES ], - [ 25, Moves.SWIFT ], - [ 30, Moves.LIGHT_SCREEN ], - [ 35, Moves.DRAINING_KISS ], - [ 40, Moves.MISTY_TERRAIN ], - [ 45, Moves.SKILL_SWAP ], - [ 50, Moves.PSYCH_UP ], - [ 55, Moves.MOONBLAST ], - [ 60, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.SPARKLY_SWIRL ], + [ RELEARN_MOVE, MoveId.VEEVEE_VOLLEY ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.DISARMING_VOICE ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.BABY_DOLL_EYES ], + [ 25, MoveId.SWIFT ], + [ 30, MoveId.LIGHT_SCREEN ], + [ 35, MoveId.DRAINING_KISS ], + [ 40, MoveId.MISTY_TERRAIN ], + [ 45, MoveId.SKILL_SWAP ], + [ 50, MoveId.PSYCH_UP ], + [ 55, MoveId.MOONBLAST ], + [ 60, MoveId.LAST_RESORT ], ], [Species.HAWLUCHA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HONE_CLAWS ], - [ 4, Moves.WING_ATTACK ], - [ 8, Moves.DETECT ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.ENCORE ], - [ 20, Moves.FEATHER_DANCE ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.BOUNCE ], - [ 32, Moves.TAUNT ], - [ 36, Moves.ROOST ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.FLYING_PRESS ], - [ 48, Moves.HIGH_JUMP_KICK ], - [ 52, Moves.ENDEAVOR ], - [ 56, Moves.SKY_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HONE_CLAWS ], + [ 4, MoveId.WING_ATTACK ], + [ 8, MoveId.DETECT ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.ENCORE ], + [ 20, MoveId.FEATHER_DANCE ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.BOUNCE ], + [ 32, MoveId.TAUNT ], + [ 36, MoveId.ROOST ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.FLYING_PRESS ], + [ 48, MoveId.HIGH_JUMP_KICK ], + [ 52, MoveId.ENDEAVOR ], + [ 56, MoveId.SKY_ATTACK ], ], [Species.DEDENNE]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.NUZZLE ], - [ 5, Moves.TACKLE ], - [ 10, Moves.CHARGE ], - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.CHARM ], - [ 25, Moves.PARABOLIC_CHARGE ], - [ 30, Moves.VOLT_SWITCH ], - [ 35, Moves.REST ], - [ 35, Moves.SNORE ], - [ 40, Moves.DISCHARGE ], - [ 45, Moves.PLAY_ROUGH ], - [ 50, Moves.SUPER_FANG ], - [ 55, Moves.ENTRAINMENT ], - [ 60, Moves.THUNDER ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.NUZZLE ], + [ 5, MoveId.TACKLE ], + [ 10, MoveId.CHARGE ], + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.CHARM ], + [ 25, MoveId.PARABOLIC_CHARGE ], + [ 30, MoveId.VOLT_SWITCH ], + [ 35, MoveId.REST ], + [ 35, MoveId.SNORE ], + [ 40, MoveId.DISCHARGE ], + [ 45, MoveId.PLAY_ROUGH ], + [ 50, MoveId.SUPER_FANG ], + [ 55, MoveId.ENTRAINMENT ], + [ 60, MoveId.THUNDER ], ], [Species.CARBINK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.GUARD_SPLIT ], - [ 10, Moves.SMACK_DOWN ], - [ 15, Moves.FLAIL ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.ROCK_POLISH ], - [ 30, Moves.LIGHT_SCREEN ], - [ 35, Moves.ROCK_SLIDE ], - [ 40, Moves.SKILL_SWAP ], - [ 45, Moves.POWER_GEM ], - [ 50, Moves.STEALTH_ROCK ], - [ 55, Moves.MOONBLAST ], - [ 60, Moves.STONE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.GUARD_SPLIT ], + [ 10, MoveId.SMACK_DOWN ], + [ 15, MoveId.FLAIL ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.ROCK_POLISH ], + [ 30, MoveId.LIGHT_SCREEN ], + [ 35, MoveId.ROCK_SLIDE ], + [ 40, MoveId.SKILL_SWAP ], + [ 45, MoveId.POWER_GEM ], + [ 50, MoveId.STEALTH_ROCK ], + [ 55, MoveId.MOONBLAST ], + [ 60, MoveId.STONE_EDGE ], ], [Species.GOOMY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 5, Moves.WATER_GUN ], - [ 10, Moves.DRAGON_BREATH ], - [ 15, Moves.PROTECT ], - [ 20, Moves.FLAIL ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.RAIN_DANCE ], - [ 35, Moves.DRAGON_PULSE ], - [ 41, Moves.CURSE ], - [ 45, Moves.BODY_SLAM ], - [ 50, Moves.MUDDY_WATER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ABSORB ], + [ 5, MoveId.WATER_GUN ], + [ 10, MoveId.DRAGON_BREATH ], + [ 15, MoveId.PROTECT ], + [ 20, MoveId.FLAIL ], + [ 25, MoveId.WATER_PULSE ], + [ 30, MoveId.RAIN_DANCE ], + [ 35, MoveId.DRAGON_PULSE ], + [ 41, MoveId.CURSE ], + [ 45, MoveId.BODY_SLAM ], + [ 50, MoveId.MUDDY_WATER ], ], [Species.SLIGGOO]: [ - [ EVOLVE_MOVE, Moves.ACID_SPRAY ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.ACID_ARMOR ], - [ 1, Moves.DRAGON_BREATH ], - [ 15, Moves.PROTECT ], - [ 20, Moves.FLAIL ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.RAIN_DANCE ], - [ 35, Moves.DRAGON_PULSE ], - [ 43, Moves.CURSE ], - [ 49, Moves.BODY_SLAM ], - [ 56, Moves.MUDDY_WATER ], + [ EVOLVE_MOVE, MoveId.ACID_SPRAY ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ACID_ARMOR ], + [ 1, MoveId.DRAGON_BREATH ], + [ 15, MoveId.PROTECT ], + [ 20, MoveId.FLAIL ], + [ 25, MoveId.WATER_PULSE ], + [ 30, MoveId.RAIN_DANCE ], + [ 35, MoveId.DRAGON_PULSE ], + [ 43, MoveId.CURSE ], + [ 49, MoveId.BODY_SLAM ], + [ 56, MoveId.MUDDY_WATER ], ], [Species.GOODRA]: [ - [ EVOLVE_MOVE, Moves.AQUA_TAIL ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.ACID_ARMOR ], // Previous Stage Move - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.POISON_TAIL ], - [ 1, Moves.FEINT ], - [ 1, Moves.ACID_SPRAY ], - [ 1, Moves.TEARFUL_LOOK ], - [ 15, Moves.PROTECT ], - [ 20, Moves.FLAIL ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.RAIN_DANCE ], - [ 35, Moves.DRAGON_PULSE ], // Previous Stage Move, NatDex / Hisui Goodra Level - [ 43, Moves.CURSE ], - [ 49, Moves.BODY_SLAM ], - [ 58, Moves.MUDDY_WATER ], - [ 67, Moves.POWER_WHIP ], + [ EVOLVE_MOVE, MoveId.AQUA_TAIL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ACID_ARMOR ], // Previous Stage Move + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.POISON_TAIL ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.ACID_SPRAY ], + [ 1, MoveId.TEARFUL_LOOK ], + [ 15, MoveId.PROTECT ], + [ 20, MoveId.FLAIL ], + [ 25, MoveId.WATER_PULSE ], + [ 30, MoveId.RAIN_DANCE ], + [ 35, MoveId.DRAGON_PULSE ], // Previous Stage Move, NatDex / Hisui Goodra Level + [ 43, MoveId.CURSE ], + [ 49, MoveId.BODY_SLAM ], + [ 58, MoveId.MUDDY_WATER ], + [ 67, MoveId.POWER_WHIP ], ], [Species.KLEFKI]: [ - [ 1, Moves.ASTONISH ], - [ 4, Moves.TACKLE ], - [ 8, Moves.FAIRY_WIND ], - [ 12, Moves.TORMENT ], - [ 16, Moves.FAIRY_LOCK ], - [ 20, Moves.METAL_SOUND ], - [ 24, Moves.DRAINING_KISS ], - [ 28, Moves.RECYCLE ], - [ 32, Moves.IMPRISON ], - [ 36, Moves.FLASH_CANNON ], - [ 40, Moves.PLAY_ROUGH ], - [ 44, Moves.MAGIC_ROOM ], - [ 48, Moves.FOUL_PLAY ], - [ 50, Moves.HEAL_BLOCK ], - [ 52, Moves.LAST_RESORT ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.FAIRY_WIND ], + [ 12, MoveId.TORMENT ], + [ 16, MoveId.FAIRY_LOCK ], + [ 20, MoveId.METAL_SOUND ], + [ 24, MoveId.DRAINING_KISS ], + [ 28, MoveId.RECYCLE ], + [ 32, MoveId.IMPRISON ], + [ 36, MoveId.FLASH_CANNON ], + [ 40, MoveId.PLAY_ROUGH ], + [ 44, MoveId.MAGIC_ROOM ], + [ 48, MoveId.FOUL_PLAY ], + [ 50, MoveId.HEAL_BLOCK ], + [ 52, MoveId.LAST_RESORT ], ], [Species.PHANTUMP]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.BRANCH_POKE ], - [ 8, Moves.LEECH_SEED ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.HEX ], - [ 24, Moves.GROWTH ], - [ 28, Moves.HORN_LEECH ], - [ 32, Moves.CURSE ], - [ 36, Moves.PHANTOM_FORCE ], - [ 40, Moves.INGRAIN ], - [ 44, Moves.WOOD_HAMMER ], - [ 48, Moves.DESTINY_BOND ], - [ 52, Moves.FORESTS_CURSE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.BRANCH_POKE ], + [ 8, MoveId.LEECH_SEED ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.HEX ], + [ 24, MoveId.GROWTH ], + [ 28, MoveId.HORN_LEECH ], + [ 32, MoveId.CURSE ], + [ 36, MoveId.PHANTOM_FORCE ], + [ 40, MoveId.INGRAIN ], + [ 44, MoveId.WOOD_HAMMER ], + [ 48, MoveId.DESTINY_BOND ], + [ 52, MoveId.FORESTS_CURSE ], ], [Species.TREVENANT]: [ - [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.BRANCH_POKE ], - [ 12, Moves.CONFUSE_RAY ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.HEX ], - [ 24, Moves.GROWTH ], - [ 28, Moves.HORN_LEECH ], - [ 32, Moves.CURSE ], - [ 36, Moves.PHANTOM_FORCE ], - [ 40, Moves.INGRAIN ], - [ 44, Moves.WOOD_HAMMER ], - [ 48, Moves.DESTINY_BOND ], - [ 52, Moves.FORESTS_CURSE ], + [ EVOLVE_MOVE, MoveId.SHADOW_CLAW ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.BRANCH_POKE ], + [ 12, MoveId.CONFUSE_RAY ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.HEX ], + [ 24, MoveId.GROWTH ], + [ 28, MoveId.HORN_LEECH ], + [ 32, MoveId.CURSE ], + [ 36, MoveId.PHANTOM_FORCE ], + [ 40, MoveId.INGRAIN ], + [ 44, MoveId.WOOD_HAMMER ], + [ 48, MoveId.DESTINY_BOND ], + [ 52, MoveId.FORESTS_CURSE ], ], [Species.PUMPKABOO]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.TRICK_OR_TREAT ], - [ 1, Moves.LEAFAGE ], // Custom - [ 4, Moves.SHADOW_SNEAK ], - [ 8, Moves.CONFUSE_RAY ], - [ 12, Moves.RAZOR_LEAF ], - [ 16, Moves.LEECH_SEED ], - [ 20, Moves.BULLET_SEED ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.WORRY_SEED ], - [ 32, Moves.SEED_BOMB ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.TRICK ], - [ 44, Moves.PAIN_SPLIT ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.TRICK_OR_TREAT ], + [ 1, MoveId.LEAFAGE ], // Custom + [ 4, MoveId.SHADOW_SNEAK ], + [ 8, MoveId.CONFUSE_RAY ], + [ 12, MoveId.RAZOR_LEAF ], + [ 16, MoveId.LEECH_SEED ], + [ 20, MoveId.BULLET_SEED ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.WORRY_SEED ], + [ 32, MoveId.SEED_BOMB ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.TRICK ], + [ 44, MoveId.PAIN_SPLIT ], ], [Species.GOURGEIST]: [ - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.EXPLOSION ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.TRICK_OR_TREAT ], - [ 1, Moves.MOONBLAST ], - [ 12, Moves.RAZOR_LEAF ], - [ 16, Moves.LEECH_SEED ], - [ 20, Moves.BULLET_SEED ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.WORRY_SEED ], - [ 32, Moves.SEED_BOMB ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.TRICK ], - [ 44, Moves.PAIN_SPLIT ], - [ 48, Moves.PHANTOM_FORCE ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.EXPLOSION ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.SHADOW_SNEAK ], + [ 1, MoveId.TRICK_OR_TREAT ], + [ 1, MoveId.MOONBLAST ], + [ 12, MoveId.RAZOR_LEAF ], + [ 16, MoveId.LEECH_SEED ], + [ 20, MoveId.BULLET_SEED ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.WORRY_SEED ], + [ 32, MoveId.SEED_BOMB ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.TRICK ], + [ 44, MoveId.PAIN_SPLIT ], + [ 48, MoveId.PHANTOM_FORCE ], ], [Species.BERGMITE]: [ - [ 1, Moves.HARDEN ], - [ 1, Moves.RAPID_SPIN ], - [ 3, Moves.TACKLE ], - [ 6, Moves.POWDER_SNOW ], - [ 9, Moves.CURSE ], - [ 12, Moves.ICY_WIND ], - [ 15, Moves.PROTECT ], - [ 18, Moves.AVALANCHE ], - [ 21, Moves.BITE ], - [ 24, Moves.ICE_FANG ], - [ 27, Moves.IRON_DEFENSE ], - [ 30, Moves.RECOVER ], - [ 33, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 39, Moves.BLIZZARD ], - [ 42, Moves.DOUBLE_EDGE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.RAPID_SPIN ], + [ 3, MoveId.TACKLE ], + [ 6, MoveId.POWDER_SNOW ], + [ 9, MoveId.CURSE ], + [ 12, MoveId.ICY_WIND ], + [ 15, MoveId.PROTECT ], + [ 18, MoveId.AVALANCHE ], + [ 21, MoveId.BITE ], + [ 24, MoveId.ICE_FANG ], + [ 27, MoveId.IRON_DEFENSE ], + [ 30, MoveId.RECOVER ], + [ 33, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 39, MoveId.BLIZZARD ], + [ 42, MoveId.DOUBLE_EDGE ], ], [Species.AVALUGG]: [ - [ EVOLVE_MOVE, Moves.BODY_SLAM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.WIDE_GUARD ], - [ 9, Moves.CURSE ], - [ 12, Moves.ICY_WIND ], - [ 15, Moves.PROTECT ], - [ 18, Moves.AVALANCHE ], - [ 21, Moves.BITE ], - [ 24, Moves.ICE_FANG ], - [ 27, Moves.IRON_DEFENSE ], - [ 30, Moves.RECOVER ], - [ 33, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 41, Moves.BLIZZARD ], - [ 46, Moves.DOUBLE_EDGE ], - [ 51, Moves.ICICLE_CRASH ], + [ EVOLVE_MOVE, MoveId.BODY_SLAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.WIDE_GUARD ], + [ 9, MoveId.CURSE ], + [ 12, MoveId.ICY_WIND ], + [ 15, MoveId.PROTECT ], + [ 18, MoveId.AVALANCHE ], + [ 21, MoveId.BITE ], + [ 24, MoveId.ICE_FANG ], + [ 27, MoveId.IRON_DEFENSE ], + [ 30, MoveId.RECOVER ], + [ 33, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 41, MoveId.BLIZZARD ], + [ 46, MoveId.DOUBLE_EDGE ], + [ 51, MoveId.ICICLE_CRASH ], ], [Species.NOIBAT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 4, Moves.GUST ], - [ 8, Moves.SUPERSONIC ], - [ 12, Moves.DOUBLE_TEAM ], - [ 16, Moves.WING_ATTACK ], - [ 20, Moves.BITE ], - [ 24, Moves.AIR_CUTTER ], - [ 28, Moves.WHIRLWIND ], - [ 32, Moves.SUPER_FANG ], - [ 36, Moves.AIR_SLASH ], - [ 40, Moves.SCREECH ], - [ 44, Moves.ROOST ], - [ 49, Moves.TAILWIND ], - [ 52, Moves.HURRICANE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ABSORB ], + [ 4, MoveId.GUST ], + [ 8, MoveId.SUPERSONIC ], + [ 12, MoveId.DOUBLE_TEAM ], + [ 16, MoveId.WING_ATTACK ], + [ 20, MoveId.BITE ], + [ 24, MoveId.AIR_CUTTER ], + [ 28, MoveId.WHIRLWIND ], + [ 32, MoveId.SUPER_FANG ], + [ 36, MoveId.AIR_SLASH ], + [ 40, MoveId.SCREECH ], + [ 44, MoveId.ROOST ], + [ 49, MoveId.TAILWIND ], + [ 52, MoveId.HURRICANE ], ], [Species.NOIVERN]: [ - [ EVOLVE_MOVE, Moves.DRAGON_PULSE ], - [ 1, Moves.GUST ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MOONLIGHT ], - [ 12, Moves.DOUBLE_TEAM ], - [ 16, Moves.WING_ATTACK ], - [ 20, Moves.BITE ], - [ 24, Moves.AIR_CUTTER ], - [ 28, Moves.WHIRLWIND ], - [ 32, Moves.SUPER_FANG ], - [ 36, Moves.AIR_SLASH ], - [ 40, Moves.SCREECH ], - [ 44, Moves.ROOST ], - [ 51, Moves.TAILWIND ], - [ 56, Moves.HURRICANE ], - [ 62, Moves.BOOMBURST ], + [ EVOLVE_MOVE, MoveId.DRAGON_PULSE ], + [ 1, MoveId.GUST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MOONLIGHT ], + [ 12, MoveId.DOUBLE_TEAM ], + [ 16, MoveId.WING_ATTACK ], + [ 20, MoveId.BITE ], + [ 24, MoveId.AIR_CUTTER ], + [ 28, MoveId.WHIRLWIND ], + [ 32, MoveId.SUPER_FANG ], + [ 36, MoveId.AIR_SLASH ], + [ 40, MoveId.SCREECH ], + [ 44, MoveId.ROOST ], + [ 51, MoveId.TAILWIND ], + [ 56, MoveId.HURRICANE ], + [ 62, MoveId.BOOMBURST ], ], [Species.XERNEAS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GRAVITY ], - [ 5, Moves.LIGHT_SCREEN ], - [ 10, Moves.AURORA_BEAM ], - [ 15, Moves.NATURE_POWER ], - [ 20, Moves.NIGHT_SLASH ], - [ 25, Moves.AROMATHERAPY ], - [ 30, Moves.PSYCH_UP ], - [ 35, Moves.HORN_LEECH ], - [ 40, Moves.MISTY_TERRAIN ], - [ 45, Moves.INGRAIN ], - [ 50, Moves.TAKE_DOWN ], - [ 55, Moves.GEOMANCY ], - [ 60, Moves.MOONBLAST ], - [ 65, Moves.HEAL_PULSE ], - [ 70, Moves.MEGAHORN ], - [ 75, Moves.CLOSE_COMBAT ], - [ 80, Moves.OUTRAGE ], - [ 85, Moves.GIGA_IMPACT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GRAVITY ], + [ 5, MoveId.LIGHT_SCREEN ], + [ 10, MoveId.AURORA_BEAM ], + [ 15, MoveId.NATURE_POWER ], + [ 20, MoveId.NIGHT_SLASH ], + [ 25, MoveId.AROMATHERAPY ], + [ 30, MoveId.PSYCH_UP ], + [ 35, MoveId.HORN_LEECH ], + [ 40, MoveId.MISTY_TERRAIN ], + [ 45, MoveId.INGRAIN ], + [ 50, MoveId.TAKE_DOWN ], + [ 55, MoveId.GEOMANCY ], + [ 60, MoveId.MOONBLAST ], + [ 65, MoveId.HEAL_PULSE ], + [ 70, MoveId.MEGAHORN ], + [ 75, MoveId.CLOSE_COMBAT ], + [ 80, MoveId.OUTRAGE ], + [ 85, MoveId.GIGA_IMPACT ], ], [Species.YVELTAL]: [ - [ 1, Moves.GUST ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.RAZOR_WIND ], - [ 5, Moves.TAUNT ], - [ 10, Moves.SNARL ], - [ 15, Moves.DISABLE ], - [ 20, Moves.SUCKER_PUNCH ], - [ 25, Moves.TAILWIND ], - [ 30, Moves.ROOST ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.PSYCHIC ], - [ 50, Moves.OBLIVION_WING ], - [ 55, Moves.PHANTOM_FORCE ], - [ 60, Moves.FOUL_PLAY ], - [ 65, Moves.DRAGON_RUSH ], - [ 70, Moves.HURRICANE ], - [ 75, Moves.FOCUS_BLAST ], - [ 80, Moves.SKY_ATTACK ], - [ 85, Moves.HYPER_BEAM ], + [ 1, MoveId.GUST ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.RAZOR_WIND ], + [ 5, MoveId.TAUNT ], + [ 10, MoveId.SNARL ], + [ 15, MoveId.DISABLE ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 25, MoveId.TAILWIND ], + [ 30, MoveId.ROOST ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.DARK_PULSE ], + [ 45, MoveId.PSYCHIC ], + [ 50, MoveId.OBLIVION_WING ], + [ 55, MoveId.PHANTOM_FORCE ], + [ 60, MoveId.FOUL_PLAY ], + [ 65, MoveId.DRAGON_RUSH ], + [ 70, MoveId.HURRICANE ], + [ 75, MoveId.FOCUS_BLAST ], + [ 80, MoveId.SKY_ATTACK ], + [ 85, MoveId.HYPER_BEAM ], ], [Species.ZYGARDE]: [ - [ 1, Moves.BIND ], - [ 1, Moves.BITE ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.BULLDOZE ], - [ 1, Moves.THOUSAND_ARROWS ], - [ 1, Moves.THOUSAND_WAVES ], - [ 1, Moves.CORE_ENFORCER ], - [ 8, Moves.HAZE ], - [ 16, Moves.DIG ], - [ 24, Moves.SAFEGUARD ], - [ 32, Moves.CRUNCH ], - [ 40, Moves.DRAGON_PULSE ], - [ 48, Moves.LANDS_WRATH ], - [ 56, Moves.GLARE ], - [ 64, Moves.SANDSTORM ], - [ 72, Moves.COIL ], - [ 80, Moves.EARTHQUAKE ], - [ 88, Moves.OUTRAGE ], + [ 1, MoveId.BIND ], + [ 1, MoveId.BITE ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.BULLDOZE ], + [ 1, MoveId.THOUSAND_ARROWS ], + [ 1, MoveId.THOUSAND_WAVES ], + [ 1, MoveId.CORE_ENFORCER ], + [ 8, MoveId.HAZE ], + [ 16, MoveId.DIG ], + [ 24, MoveId.SAFEGUARD ], + [ 32, MoveId.CRUNCH ], + [ 40, MoveId.DRAGON_PULSE ], + [ 48, MoveId.LANDS_WRATH ], + [ 56, MoveId.GLARE ], + [ 64, MoveId.SANDSTORM ], + [ 72, MoveId.COIL ], + [ 80, MoveId.EARTHQUAKE ], + [ 88, MoveId.OUTRAGE ], ], [Species.DIANCIE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.DIAMOND_STORM ], - [ 7, Moves.GUARD_SPLIT ], - [ 14, Moves.SMACK_DOWN ], - [ 21, Moves.FLAIL ], - [ 28, Moves.ANCIENT_POWER ], - [ 35, Moves.ROCK_POLISH ], - [ 42, Moves.LIGHT_SCREEN ], - [ 49, Moves.ROCK_SLIDE ], - [ 56, Moves.SKILL_SWAP ], - [ 63, Moves.POWER_GEM ], - [ 70, Moves.STEALTH_ROCK ], - [ 77, Moves.MOONBLAST ], - [ 84, Moves.STONE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.DIAMOND_STORM ], + [ 7, MoveId.GUARD_SPLIT ], + [ 14, MoveId.SMACK_DOWN ], + [ 21, MoveId.FLAIL ], + [ 28, MoveId.ANCIENT_POWER ], + [ 35, MoveId.ROCK_POLISH ], + [ 42, MoveId.LIGHT_SCREEN ], + [ 49, MoveId.ROCK_SLIDE ], + [ 56, MoveId.SKILL_SWAP ], + [ 63, MoveId.POWER_GEM ], + [ 70, MoveId.STEALTH_ROCK ], + [ 77, MoveId.MOONBLAST ], + [ 84, MoveId.STONE_EDGE ], ], [Species.HOOPA]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.ALLY_SWITCH ], - [ 6, Moves.ASTONISH ], - [ 10, Moves.TRICK ], - [ 15, Moves.LIGHT_SCREEN ], - [ 19, Moves.PSYBEAM ], - [ 25, Moves.SKILL_SWAP ], - [ 29, Moves.GUARD_SPLIT ], - [ 29, Moves.POWER_SPLIT ], - [ 35, Moves.PHANTOM_FORCE ], - [ 46, Moves.ZEN_HEADBUTT ], - [ 50, Moves.TRICK_ROOM ], - [ 50, Moves.WONDER_ROOM ], - [ 55, Moves.SHADOW_BALL ], - [ 68, Moves.NASTY_PLOT ], - [ 75, Moves.PSYCHIC ], - [ 85, Moves.HYPERSPACE_HOLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.ALLY_SWITCH ], + [ 6, MoveId.ASTONISH ], + [ 10, MoveId.TRICK ], + [ 15, MoveId.LIGHT_SCREEN ], + [ 19, MoveId.PSYBEAM ], + [ 25, MoveId.SKILL_SWAP ], + [ 29, MoveId.GUARD_SPLIT ], + [ 29, MoveId.POWER_SPLIT ], + [ 35, MoveId.PHANTOM_FORCE ], + [ 46, MoveId.ZEN_HEADBUTT ], + [ 50, MoveId.TRICK_ROOM ], + [ 50, MoveId.WONDER_ROOM ], + [ 55, MoveId.SHADOW_BALL ], + [ 68, MoveId.NASTY_PLOT ], + [ 75, MoveId.PSYCHIC ], + [ 85, MoveId.HYPERSPACE_HOLE ], ], [Species.VOLCANION]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.STEAM_ERUPTION ], - [ 6, Moves.LEER ], - [ 12, Moves.WEATHER_BALL ], - [ 18, Moves.FLAME_CHARGE ], - [ 24, Moves.WATER_PULSE ], - [ 30, Moves.SCARY_FACE ], - [ 36, Moves.INCINERATE ], - [ 42, Moves.STOMP ], - [ 48, Moves.SCALD ], - [ 54, Moves.TAKE_DOWN ], - [ 60, Moves.MIST ], - [ 60, Moves.HAZE ], - [ 66, Moves.HYDRO_PUMP ], - [ 78, Moves.FLARE_BLITZ ], - [ 84, Moves.OVERHEAT ], - [ 90, Moves.EXPLOSION ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.FIRE_SPIN ], + [ 1, MoveId.STEAM_ERUPTION ], + [ 6, MoveId.LEER ], + [ 12, MoveId.WEATHER_BALL ], + [ 18, MoveId.FLAME_CHARGE ], + [ 24, MoveId.WATER_PULSE ], + [ 30, MoveId.SCARY_FACE ], + [ 36, MoveId.INCINERATE ], + [ 42, MoveId.STOMP ], + [ 48, MoveId.SCALD ], + [ 54, MoveId.TAKE_DOWN ], + [ 60, MoveId.MIST ], + [ 60, MoveId.HAZE ], + [ 66, MoveId.HYDRO_PUMP ], + [ 78, MoveId.FLARE_BLITZ ], + [ 84, MoveId.OVERHEAT ], + [ 90, MoveId.EXPLOSION ], ], [Species.ROWLET]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.LEAFAGE ], - [ 6, Moves.ASTONISH ], - [ 9, Moves.PECK ], - [ 12, Moves.SHADOW_SNEAK ], - [ 15, Moves.RAZOR_LEAF ], - [ 18, Moves.SYNTHESIS ], - [ 21, Moves.PLUCK ], - [ 24, Moves.NASTY_PLOT ], - [ 27, Moves.SUCKER_PUNCH ], - [ 30, Moves.LEAF_BLADE ], - [ 33, Moves.FEATHER_DANCE ], - [ 36, Moves.BRAVE_BIRD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.LEAFAGE ], + [ 6, MoveId.ASTONISH ], + [ 9, MoveId.PECK ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 15, MoveId.RAZOR_LEAF ], + [ 18, MoveId.SYNTHESIS ], + [ 21, MoveId.PLUCK ], + [ 24, MoveId.NASTY_PLOT ], + [ 27, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.LEAF_BLADE ], + [ 33, MoveId.FEATHER_DANCE ], + [ 36, MoveId.BRAVE_BIRD ], ], [Species.DARTRIX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEAFAGE ], - [ 9, Moves.PECK ], - [ 12, Moves.SHADOW_SNEAK ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.SYNTHESIS ], - [ 25, Moves.PLUCK ], - [ 30, Moves.NASTY_PLOT ], - [ 35, Moves.SUCKER_PUNCH ], - [ 40, Moves.LEAF_BLADE ], - [ 45, Moves.FEATHER_DANCE ], - [ 50, Moves.BRAVE_BIRD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEAFAGE ], + [ 9, MoveId.PECK ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.SYNTHESIS ], + [ 25, MoveId.PLUCK ], + [ 30, MoveId.NASTY_PLOT ], + [ 35, MoveId.SUCKER_PUNCH ], + [ 40, MoveId.LEAF_BLADE ], + [ 45, MoveId.FEATHER_DANCE ], + [ 50, MoveId.BRAVE_BIRD ], ], [Species.DECIDUEYE]: [ - [ EVOLVE_MOVE, Moves.SPIRIT_SHACKLE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.SPITE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.U_TURN ], - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.PHANTOM_FORCE ], - [ 1, Moves.LEAFAGE ], - [ 9, Moves.PECK ], - [ 12, Moves.SHADOW_SNEAK ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.SYNTHESIS ], - [ 25, Moves.PLUCK ], - [ 30, Moves.NASTY_PLOT ], - [ 37, Moves.SUCKER_PUNCH ], - [ 44, Moves.LEAF_BLADE ], - [ 51, Moves.FEATHER_DANCE ], - [ 58, Moves.BRAVE_BIRD ], + [ EVOLVE_MOVE, MoveId.SPIRIT_SHACKLE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.U_TURN ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.PHANTOM_FORCE ], + [ 1, MoveId.LEAFAGE ], + [ 9, MoveId.PECK ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.SYNTHESIS ], + [ 25, MoveId.PLUCK ], + [ 30, MoveId.NASTY_PLOT ], + [ 37, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.LEAF_BLADE ], + [ 51, MoveId.FEATHER_DANCE ], + [ 58, MoveId.BRAVE_BIRD ], ], [Species.LITTEN]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 3, Moves.EMBER ], - [ 6, Moves.LICK ], - [ 9, Moves.ROAR ], - [ 12, Moves.FURY_SWIPES ], - [ 15, Moves.BITE ], - [ 18, Moves.DOUBLE_KICK ], - [ 21, Moves.FIRE_FANG ], - [ 24, Moves.SCARY_FACE ], - [ 27, Moves.SWAGGER ], - [ 30, Moves.FLAMETHROWER ], - [ 33, Moves.THRASH ], - [ 36, Moves.FLARE_BLITZ ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.EMBER ], + [ 6, MoveId.LICK ], + [ 9, MoveId.ROAR ], + [ 12, MoveId.FURY_SWIPES ], + [ 15, MoveId.BITE ], + [ 18, MoveId.DOUBLE_KICK ], + [ 21, MoveId.FIRE_FANG ], + [ 24, MoveId.SCARY_FACE ], + [ 27, MoveId.SWAGGER ], + [ 30, MoveId.FLAMETHROWER ], + [ 33, MoveId.THRASH ], + [ 36, MoveId.FLARE_BLITZ ], ], [Species.TORRACAT]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.LICK ], - [ 9, Moves.ROAR ], - [ 12, Moves.FURY_SWIPES ], - [ 15, Moves.BITE ], - [ 20, Moves.DOUBLE_KICK ], - [ 25, Moves.FIRE_FANG ], - [ 30, Moves.SCARY_FACE ], - [ 35, Moves.SWAGGER ], - [ 40, Moves.FLAMETHROWER ], - [ 45, Moves.THRASH ], - [ 50, Moves.FLARE_BLITZ ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LICK ], + [ 9, MoveId.ROAR ], + [ 12, MoveId.FURY_SWIPES ], + [ 15, MoveId.BITE ], + [ 20, MoveId.DOUBLE_KICK ], + [ 25, MoveId.FIRE_FANG ], + [ 30, MoveId.SCARY_FACE ], + [ 35, MoveId.SWAGGER ], + [ 40, MoveId.FLAMETHROWER ], + [ 45, MoveId.THRASH ], + [ 50, MoveId.FLARE_BLITZ ], ], [Species.INCINEROAR]: [ - [ EVOLVE_MOVE, Moves.DARKEST_LARIAT ], - [ RELEARN_MOVE, Moves.SCRATCH ], - [ RELEARN_MOVE, Moves.GROWL ], - [ RELEARN_MOVE, Moves.THROAT_CHOP ], - [ 1, Moves.EMBER ], - [ 1, Moves.LICK ], - [ 1, Moves.CROSS_CHOP ], - [ 1, Moves.BULK_UP ], - [ 9, Moves.ROAR ], - [ 12, Moves.FURY_SWIPES ], - [ 15, Moves.BITE ], - [ 20, Moves.DOUBLE_KICK ], - [ 25, Moves.FIRE_FANG ], - [ 30, Moves.SCARY_FACE ], - [ 32, Moves.SWAGGER ], - [ 44, Moves.FLAMETHROWER ], - [ 51, Moves.THRASH ], - [ 58, Moves.FLARE_BLITZ ], + [ EVOLVE_MOVE, MoveId.DARKEST_LARIAT ], + [ RELEARN_MOVE, MoveId.SCRATCH ], + [ RELEARN_MOVE, MoveId.GROWL ], + [ RELEARN_MOVE, MoveId.THROAT_CHOP ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.CROSS_CHOP ], + [ 1, MoveId.BULK_UP ], + [ 9, MoveId.ROAR ], + [ 12, MoveId.FURY_SWIPES ], + [ 15, MoveId.BITE ], + [ 20, MoveId.DOUBLE_KICK ], + [ 25, MoveId.FIRE_FANG ], + [ 30, MoveId.SCARY_FACE ], + [ 32, MoveId.SWAGGER ], + [ 44, MoveId.FLAMETHROWER ], + [ 51, MoveId.THRASH ], + [ 58, MoveId.FLARE_BLITZ ], ], [Species.POPPLIO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 3, Moves.WATER_GUN ], - [ 6, Moves.DISARMING_VOICE ], - [ 9, Moves.AQUA_JET ], - [ 12, Moves.BABY_DOLL_EYES ], - [ 15, Moves.ICY_WIND ], - [ 18, Moves.SING ], - [ 21, Moves.BUBBLE_BEAM ], - [ 24, Moves.ENCORE ], - [ 27, Moves.MISTY_TERRAIN ], - [ 30, Moves.HYPER_VOICE ], - [ 33, Moves.MOONBLAST ], - [ 36, Moves.HYDRO_PUMP ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.WATER_GUN ], + [ 6, MoveId.DISARMING_VOICE ], + [ 9, MoveId.AQUA_JET ], + [ 12, MoveId.BABY_DOLL_EYES ], + [ 15, MoveId.ICY_WIND ], + [ 18, MoveId.SING ], + [ 21, MoveId.BUBBLE_BEAM ], + [ 24, MoveId.ENCORE ], + [ 27, MoveId.MISTY_TERRAIN ], + [ 30, MoveId.HYPER_VOICE ], + [ 33, MoveId.MOONBLAST ], + [ 36, MoveId.HYDRO_PUMP ], ], [Species.BRIONNE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DISARMING_VOICE ], - [ 9, Moves.AQUA_JET ], - [ 12, Moves.BABY_DOLL_EYES ], - [ 15, Moves.ICY_WIND ], - [ 20, Moves.SING ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.ENCORE ], - [ 35, Moves.MISTY_TERRAIN ], - [ 40, Moves.HYPER_VOICE ], - [ 45, Moves.MOONBLAST ], - [ 50, Moves.HYDRO_PUMP ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DISARMING_VOICE ], + [ 9, MoveId.AQUA_JET ], + [ 12, MoveId.BABY_DOLL_EYES ], + [ 15, MoveId.ICY_WIND ], + [ 20, MoveId.SING ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.ENCORE ], + [ 35, MoveId.MISTY_TERRAIN ], + [ 40, MoveId.HYPER_VOICE ], + [ 45, MoveId.MOONBLAST ], + [ 50, MoveId.HYDRO_PUMP ], ], [Species.PRIMARINA]: [ - [ EVOLVE_MOVE, Moves.SPARKLING_ARIA ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DISARMING_VOICE ], - [ 9, Moves.AQUA_JET ], - [ 12, Moves.BABY_DOLL_EYES ], - [ 15, Moves.ICY_WIND ], - [ 20, Moves.SING ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.ENCORE ], - [ 37, Moves.MISTY_TERRAIN ], - [ 44, Moves.HYPER_VOICE ], - [ 51, Moves.MOONBLAST ], - [ 58, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.SPARKLING_ARIA ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DISARMING_VOICE ], + [ 9, MoveId.AQUA_JET ], + [ 12, MoveId.BABY_DOLL_EYES ], + [ 15, MoveId.ICY_WIND ], + [ 20, MoveId.SING ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.ENCORE ], + [ 37, MoveId.MISTY_TERRAIN ], + [ 44, MoveId.HYPER_VOICE ], + [ 51, MoveId.MOONBLAST ], + [ 58, MoveId.HYDRO_PUMP ], ], [Species.PIKIPEK]: [ - [ 1, Moves.PECK ], - [ 3, Moves.GROWL ], - [ 7, Moves.ECHOED_VOICE ], - [ 9, Moves.ROCK_SMASH ], - [ 13, Moves.SUPERSONIC ], - [ 15, Moves.PLUCK ], - [ 19, Moves.ROOST ], - [ 21, Moves.FURY_ATTACK ], - [ 25, Moves.SCREECH ], - [ 27, Moves.DRILL_PECK ], - [ 31, Moves.BULLET_SEED ], - [ 33, Moves.FEATHER_DANCE ], - [ 37, Moves.HYPER_VOICE ], + [ 1, MoveId.PECK ], + [ 3, MoveId.GROWL ], + [ 7, MoveId.ECHOED_VOICE ], + [ 9, MoveId.ROCK_SMASH ], + [ 13, MoveId.SUPERSONIC ], + [ 15, MoveId.PLUCK ], + [ 19, MoveId.ROOST ], + [ 21, MoveId.FURY_ATTACK ], + [ 25, MoveId.SCREECH ], + [ 27, MoveId.DRILL_PECK ], + [ 31, MoveId.BULLET_SEED ], + [ 33, MoveId.FEATHER_DANCE ], + [ 37, MoveId.HYPER_VOICE ], ], [Species.TRUMBEAK]: [ - [ RELEARN_MOVE, Moves.ECHOED_VOICE ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.ROCK_BLAST ], - [ 13, Moves.SUPERSONIC ], - [ 16, Moves.PLUCK ], - [ 21, Moves.ROOST ], - [ 24, Moves.FURY_ATTACK ], - [ 29, Moves.SCREECH ], - [ 32, Moves.DRILL_PECK ], - [ 37, Moves.BULLET_SEED ], - [ 40, Moves.FEATHER_DANCE ], - [ 45, Moves.HYPER_VOICE ], + [ RELEARN_MOVE, MoveId.ECHOED_VOICE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.ROCK_BLAST ], + [ 13, MoveId.SUPERSONIC ], + [ 16, MoveId.PLUCK ], + [ 21, MoveId.ROOST ], + [ 24, MoveId.FURY_ATTACK ], + [ 29, MoveId.SCREECH ], + [ 32, MoveId.DRILL_PECK ], + [ 37, MoveId.BULLET_SEED ], + [ 40, MoveId.FEATHER_DANCE ], + [ 45, MoveId.HYPER_VOICE ], ], [Species.TOUCANNON]: [ - [ EVOLVE_MOVE, Moves.BEAK_BLAST ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.ROCK_BLAST ], - [ 1, Moves.ECHOED_VOICE ], - [ 13, Moves.SUPERSONIC ], - [ 16, Moves.PLUCK ], - [ 21, Moves.ROOST ], - [ 24, Moves.FURY_ATTACK ], - [ 30, Moves.SCREECH ], - [ 34, Moves.DRILL_PECK ], - [ 40, Moves.BULLET_SEED ], - [ 44, Moves.FEATHER_DANCE ], - [ 50, Moves.HYPER_VOICE ], + [ EVOLVE_MOVE, MoveId.BEAK_BLAST ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.ROCK_BLAST ], + [ 1, MoveId.ECHOED_VOICE ], + [ 13, MoveId.SUPERSONIC ], + [ 16, MoveId.PLUCK ], + [ 21, MoveId.ROOST ], + [ 24, MoveId.FURY_ATTACK ], + [ 30, MoveId.SCREECH ], + [ 34, MoveId.DRILL_PECK ], + [ 40, MoveId.BULLET_SEED ], + [ 44, MoveId.FEATHER_DANCE ], + [ 50, MoveId.HYPER_VOICE ], ], [Species.YUNGOOS]: [ - [ 1, Moves.TACKLE ], - [ 3, Moves.LEER ], - [ 7, Moves.PAYBACK ], - [ 10, Moves.SAND_ATTACK ], - [ 13, Moves.WORK_UP ], - [ 19, Moves.BITE ], - [ 22, Moves.MUD_SLAP ], - [ 25, Moves.SUPER_FANG ], - [ 28, Moves.TAKE_DOWN ], - [ 31, Moves.SCARY_FACE ], - [ 34, Moves.CRUNCH ], - [ 37, Moves.YAWN ], - [ 40, Moves.THRASH ], - [ 43, Moves.REST ], + [ 1, MoveId.TACKLE ], + [ 3, MoveId.LEER ], + [ 7, MoveId.PAYBACK ], + [ 10, MoveId.SAND_ATTACK ], + [ 13, MoveId.WORK_UP ], + [ 19, MoveId.BITE ], + [ 22, MoveId.MUD_SLAP ], + [ 25, MoveId.SUPER_FANG ], + [ 28, MoveId.TAKE_DOWN ], + [ 31, MoveId.SCARY_FACE ], + [ 34, MoveId.CRUNCH ], + [ 37, MoveId.YAWN ], + [ 40, MoveId.THRASH ], + [ 43, MoveId.REST ], ], [Species.GUMSHOOS]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.PURSUIT ], - [ 13, Moves.WORK_UP ], - [ 19, Moves.BITE ], - [ 23, Moves.MUD_SLAP ], - [ 27, Moves.SUPER_FANG ], - [ 31, Moves.TAKE_DOWN ], - [ 35, Moves.SCARY_FACE ], - [ 39, Moves.CRUNCH ], - [ 43, Moves.YAWN ], - [ 47, Moves.THRASH ], - [ 52, Moves.REST ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.PURSUIT ], + [ 13, MoveId.WORK_UP ], + [ 19, MoveId.BITE ], + [ 23, MoveId.MUD_SLAP ], + [ 27, MoveId.SUPER_FANG ], + [ 31, MoveId.TAKE_DOWN ], + [ 35, MoveId.SCARY_FACE ], + [ 39, MoveId.CRUNCH ], + [ 43, MoveId.YAWN ], + [ 47, MoveId.THRASH ], + [ 52, MoveId.REST ], ], [Species.GRUBBIN]: [ - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.MUD_SLAP ], - [ 5, Moves.STRING_SHOT ], - [ 10, Moves.BUG_BITE ], - [ 15, Moves.BITE ], - [ 21, Moves.SPARK ], - [ 25, Moves.STICKY_WEB ], - [ 30, Moves.X_SCISSOR ], - [ 35, Moves.CRUNCH ], - [ 40, Moves.DIG ], + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.MUD_SLAP ], + [ 5, MoveId.STRING_SHOT ], + [ 10, MoveId.BUG_BITE ], + [ 15, MoveId.BITE ], + [ 21, MoveId.SPARK ], + [ 25, MoveId.STICKY_WEB ], + [ 30, MoveId.X_SCISSOR ], + [ 35, MoveId.CRUNCH ], + [ 40, MoveId.DIG ], ], [Species.CHARJABUG]: [ - [ EVOLVE_MOVE, Moves.CHARGE ], - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.STRING_SHOT ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.BUG_BITE ], - [ 15, Moves.BITE ], - [ 23, Moves.SPARK ], - [ 29, Moves.STICKY_WEB ], - [ 36, Moves.X_SCISSOR ], - [ 43, Moves.CRUNCH ], - [ 50, Moves.DIG ], - [ 57, Moves.IRON_DEFENSE ], - [ 64, Moves.DISCHARGE ], + [ EVOLVE_MOVE, MoveId.CHARGE ], + [ 1, MoveId.VISE_GRIP ], + [ 1, MoveId.STRING_SHOT ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.BUG_BITE ], + [ 15, MoveId.BITE ], + [ 23, MoveId.SPARK ], + [ 29, MoveId.STICKY_WEB ], + [ 36, MoveId.X_SCISSOR ], + [ 43, MoveId.CRUNCH ], + [ 50, MoveId.DIG ], + [ 57, MoveId.IRON_DEFENSE ], + [ 64, MoveId.DISCHARGE ], ], [Species.VIKAVOLT]: [ - [ EVOLVE_MOVE, Moves.THUNDERBOLT ], - [ RELEARN_MOVE, Moves.VISE_GRIP ], - [ RELEARN_MOVE, Moves.DIG ], - [ RELEARN_MOVE, Moves.MUD_SLAP ], - [ RELEARN_MOVE, Moves.IRON_DEFENSE ], - [ RELEARN_MOVE, Moves.X_SCISSOR ], - [ RELEARN_MOVE, Moves.BUG_BITE ], - [ 1, Moves.CHARGE ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.DISCHARGE ], - [ 1, Moves.STRING_SHOT ], - [ 15, Moves.BITE ], - [ 23, Moves.SPARK ], - [ 29, Moves.STICKY_WEB ], - [ 36, Moves.BUG_BUZZ ], - [ 43, Moves.GUILLOTINE ], - [ 50, Moves.FLY ], - [ 57, Moves.AGILITY ], - [ 64, Moves.ZAP_CANNON ], + [ EVOLVE_MOVE, MoveId.THUNDERBOLT ], + [ RELEARN_MOVE, MoveId.VISE_GRIP ], + [ RELEARN_MOVE, MoveId.DIG ], + [ RELEARN_MOVE, MoveId.MUD_SLAP ], + [ RELEARN_MOVE, MoveId.IRON_DEFENSE ], + [ RELEARN_MOVE, MoveId.X_SCISSOR ], + [ RELEARN_MOVE, MoveId.BUG_BITE ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.DISCHARGE ], + [ 1, MoveId.STRING_SHOT ], + [ 15, MoveId.BITE ], + [ 23, MoveId.SPARK ], + [ 29, MoveId.STICKY_WEB ], + [ 36, MoveId.BUG_BUZZ ], + [ 43, MoveId.GUILLOTINE ], + [ 50, MoveId.FLY ], + [ 57, MoveId.AGILITY ], + [ 64, MoveId.ZAP_CANNON ], ], [Species.CRABRAWLER]: [ - [ 1, Moves.BUBBLE ], - [ 1, Moves.VISE_GRIP ], - [ 5, Moves.ROCK_SMASH ], - [ 9, Moves.LEER ], - [ 13, Moves.BUBBLE_BEAM ], - [ 17, Moves.PROTECT ], - [ 22, Moves.BRICK_BREAK ], - [ 25, Moves.SLAM ], - [ 29, Moves.PAYBACK ], - [ 33, Moves.REVERSAL ], - [ 37, Moves.CRABHAMMER ], - [ 42, Moves.IRON_DEFENSE ], - [ 45, Moves.DYNAMIC_PUNCH ], - [ 49, Moves.CLOSE_COMBAT ], + [ 1, MoveId.BUBBLE ], + [ 1, MoveId.VISE_GRIP ], + [ 5, MoveId.ROCK_SMASH ], + [ 9, MoveId.LEER ], + [ 13, MoveId.BUBBLE_BEAM ], + [ 17, MoveId.PROTECT ], + [ 22, MoveId.BRICK_BREAK ], + [ 25, MoveId.SLAM ], + [ 29, MoveId.PAYBACK ], + [ 33, MoveId.REVERSAL ], + [ 37, MoveId.CRABHAMMER ], + [ 42, MoveId.IRON_DEFENSE ], + [ 45, MoveId.DYNAMIC_PUNCH ], + [ 49, MoveId.CLOSE_COMBAT ], ], [Species.CRABOMINABLE]: [ - [ EVOLVE_MOVE, Moves.ICE_PUNCH ], - [ RELEARN_MOVE, Moves.CRABHAMMER ], // Previous Stage Move - [ 1, Moves.VISE_GRIP ], // Previous Stage Move - [ 1, Moves.LEER ], - [ 1, Moves.PROTECT ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.BUBBLE ], - [ 1, Moves.PURSUIT ], - [ 1, Moves.PAYBACK ], // Previous Stage Move - [ 17, Moves.BUBBLE_BEAM ], - [ 22, Moves.BRICK_BREAK ], - [ 25, Moves.SLAM ], - [ 29, Moves.AVALANCHE ], - [ 33, Moves.REVERSAL ], - [ 37, Moves.ICE_HAMMER ], - [ 42, Moves.IRON_DEFENSE ], - [ 45, Moves.DYNAMIC_PUNCH ], - [ 49, Moves.CLOSE_COMBAT ], + [ EVOLVE_MOVE, MoveId.ICE_PUNCH ], + [ RELEARN_MOVE, MoveId.CRABHAMMER ], // Previous Stage Move + [ 1, MoveId.VISE_GRIP ], // Previous Stage Move + [ 1, MoveId.LEER ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.BUBBLE ], + [ 1, MoveId.PURSUIT ], + [ 1, MoveId.PAYBACK ], // Previous Stage Move + [ 17, MoveId.BUBBLE_BEAM ], + [ 22, MoveId.BRICK_BREAK ], + [ 25, MoveId.SLAM ], + [ 29, MoveId.AVALANCHE ], + [ 33, MoveId.REVERSAL ], + [ 37, MoveId.ICE_HAMMER ], + [ 42, MoveId.IRON_DEFENSE ], + [ 45, MoveId.DYNAMIC_PUNCH ], + [ 49, MoveId.CLOSE_COMBAT ], ], [Species.ORICORIO]: [ - [ 1, Moves.POUND ], - [ 4, Moves.GROWL ], - [ 6, Moves.PECK ], - [ 10, Moves.HELPING_HAND ], - [ 13, Moves.AIR_CUTTER ], - [ 16, Moves.BATON_PASS ], - [ 20, Moves.FEATHER_DANCE ], - [ 23, Moves.ACROBATICS ], - [ 26, Moves.TEETER_DANCE ], - [ 30, Moves.ROOST ], - [ 33, Moves.FLATTER ], - [ 36, Moves.AIR_SLASH ], - [ 40, Moves.REVELATION_DANCE ], - [ 43, Moves.AGILITY ], - [ 47, Moves.HURRICANE ], + [ 1, MoveId.POUND ], + [ 4, MoveId.GROWL ], + [ 6, MoveId.PECK ], + [ 10, MoveId.HELPING_HAND ], + [ 13, MoveId.AIR_CUTTER ], + [ 16, MoveId.BATON_PASS ], + [ 20, MoveId.FEATHER_DANCE ], + [ 23, MoveId.ACROBATICS ], + [ 26, MoveId.TEETER_DANCE ], + [ 30, MoveId.ROOST ], + [ 33, MoveId.FLATTER ], + [ 36, MoveId.AIR_SLASH ], + [ 40, MoveId.REVELATION_DANCE ], + [ 43, MoveId.AGILITY ], + [ 47, MoveId.HURRICANE ], ], [Species.CUTIEFLY]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.FAIRY_WIND ], - [ 6, Moves.STUN_SPORE ], - [ 12, Moves.SWEET_SCENT ], - [ 18, Moves.DRAINING_KISS ], - [ 24, Moves.STRUGGLE_BUG ], - [ 30, Moves.COVET ], - [ 36, Moves.SWITCHEROO ], - [ 42, Moves.DAZZLING_GLEAM ], - [ 48, Moves.BUG_BUZZ ], - [ 54, Moves.QUIVER_DANCE ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.FAIRY_WIND ], + [ 6, MoveId.STUN_SPORE ], + [ 12, MoveId.SWEET_SCENT ], + [ 18, MoveId.DRAINING_KISS ], + [ 24, MoveId.STRUGGLE_BUG ], + [ 30, MoveId.COVET ], + [ 36, MoveId.SWITCHEROO ], + [ 42, MoveId.DAZZLING_GLEAM ], + [ 48, MoveId.BUG_BUZZ ], + [ 54, MoveId.QUIVER_DANCE ], ], [Species.RIBOMBEE]: [ - [ EVOLVE_MOVE, Moves.POLLEN_PUFF ], - [ 1, Moves.ABSORB ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.FAIRY_WIND ], - [ 18, Moves.DRAINING_KISS ], - [ 24, Moves.STRUGGLE_BUG ], - [ 32, Moves.COVET ], - [ 40, Moves.SWITCHEROO ], - [ 48, Moves.DAZZLING_GLEAM ], - [ 56, Moves.BUG_BUZZ ], - [ 64, Moves.QUIVER_DANCE ], + [ EVOLVE_MOVE, MoveId.POLLEN_PUFF ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.FAIRY_WIND ], + [ 18, MoveId.DRAINING_KISS ], + [ 24, MoveId.STRUGGLE_BUG ], + [ 32, MoveId.COVET ], + [ 40, MoveId.SWITCHEROO ], + [ 48, MoveId.DAZZLING_GLEAM ], + [ 56, MoveId.BUG_BUZZ ], + [ 64, MoveId.QUIVER_DANCE ], ], [Species.ROCKRUFF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.SAND_ATTACK ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ROCK_THROW ], - [ 16, Moves.HOWL ], - [ 20, Moves.BITE ], - [ 24, Moves.ROCK_TOMB ], - [ 28, Moves.ROAR ], - [ 32, Moves.ROCK_SLIDE ], - [ 36, Moves.CRUNCH ], - [ 40, Moves.SCARY_FACE ], - [ 44, Moves.STEALTH_ROCK ], - [ 48, Moves.STONE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.SAND_ATTACK ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ROCK_THROW ], + [ 16, MoveId.HOWL ], + [ 20, MoveId.BITE ], + [ 24, MoveId.ROCK_TOMB ], + [ 28, MoveId.ROAR ], + [ 32, MoveId.ROCK_SLIDE ], + [ 36, MoveId.CRUNCH ], + [ 40, MoveId.SCARY_FACE ], + [ 44, MoveId.STEALTH_ROCK ], + [ 48, MoveId.STONE_EDGE ], ], [Species.LYCANROC]: [ - [ EVOLVE_MOVE, Moves.SUCKER_PUNCH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.ACCELEROCK ], - [ 12, Moves.ROCK_THROW ], - [ 16, Moves.HOWL ], - [ 20, Moves.BITE ], - [ 24, Moves.ROCK_TOMB ], - [ 30, Moves.ROAR ], - [ 36, Moves.ROCK_SLIDE ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.SCARY_FACE ], - [ 54, Moves.STEALTH_ROCK ], - [ 60, Moves.STONE_EDGE ], + [ EVOLVE_MOVE, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.ACCELEROCK ], + [ 12, MoveId.ROCK_THROW ], + [ 16, MoveId.HOWL ], + [ 20, MoveId.BITE ], + [ 24, MoveId.ROCK_TOMB ], + [ 30, MoveId.ROAR ], + [ 36, MoveId.ROCK_SLIDE ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.SCARY_FACE ], + [ 54, MoveId.STEALTH_ROCK ], + [ 60, MoveId.STONE_EDGE ], ], [Species.WISHIWASHI]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.HELPING_HAND ], - [ 8, Moves.BEAT_UP ], - [ 12, Moves.BRINE ], - [ 16, Moves.TEARFUL_LOOK ], - [ 20, Moves.DIVE ], - [ 24, Moves.SOAK ], - [ 28, Moves.UPROAR ], - [ 32, Moves.AQUA_TAIL ], - [ 36, Moves.AQUA_RING ], - [ 40, Moves.ENDEAVOR ], - [ 44, Moves.HYDRO_PUMP ], - [ 48, Moves.DOUBLE_EDGE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.HELPING_HAND ], + [ 8, MoveId.BEAT_UP ], + [ 12, MoveId.BRINE ], + [ 16, MoveId.TEARFUL_LOOK ], + [ 20, MoveId.DIVE ], + [ 24, MoveId.SOAK ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.AQUA_TAIL ], + [ 36, MoveId.AQUA_RING ], + [ 40, MoveId.ENDEAVOR ], + [ 44, MoveId.HYDRO_PUMP ], + [ 48, MoveId.DOUBLE_EDGE ], ], [Species.MAREANIE]: [ - [ 1, Moves.POISON_STING ], - [ 1, Moves.PECK ], - [ 5, Moves.WIDE_GUARD ], - [ 10, Moves.BITE ], - [ 15, Moves.VENOSHOCK ], - [ 20, Moves.RECOVER ], - [ 25, Moves.PIN_MISSILE ], - [ 30, Moves.TOXIC_SPIKES ], - [ 35, Moves.LIQUIDATION ], - [ 40, Moves.ACID_SPRAY ], - [ 45, Moves.POISON_JAB ], - [ 50, Moves.TOXIC ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.PECK ], + [ 5, MoveId.WIDE_GUARD ], + [ 10, MoveId.BITE ], + [ 15, MoveId.VENOSHOCK ], + [ 20, MoveId.RECOVER ], + [ 25, MoveId.PIN_MISSILE ], + [ 30, MoveId.TOXIC_SPIKES ], + [ 35, MoveId.LIQUIDATION ], + [ 40, MoveId.ACID_SPRAY ], + [ 45, MoveId.POISON_JAB ], + [ 50, MoveId.TOXIC ], ], [Species.TOXAPEX]: [ - [ EVOLVE_MOVE, Moves.BANEFUL_BUNKER ], - [ 1, Moves.POISON_STING ], - [ 1, Moves.BITE ], - [ 1, Moves.PECK ], - [ 1, Moves.WIDE_GUARD ], - [ 15, Moves.VENOSHOCK ], - [ 20, Moves.RECOVER ], - [ 25, Moves.PIN_MISSILE ], - [ 30, Moves.TOXIC_SPIKES ], - [ 35, Moves.LIQUIDATION ], - [ 42, Moves.ACID_SPRAY ], - [ 49, Moves.POISON_JAB ], - [ 56, Moves.TOXIC ], + [ EVOLVE_MOVE, MoveId.BANEFUL_BUNKER ], + [ 1, MoveId.POISON_STING ], + [ 1, MoveId.BITE ], + [ 1, MoveId.PECK ], + [ 1, MoveId.WIDE_GUARD ], + [ 15, MoveId.VENOSHOCK ], + [ 20, MoveId.RECOVER ], + [ 25, MoveId.PIN_MISSILE ], + [ 30, MoveId.TOXIC_SPIKES ], + [ 35, MoveId.LIQUIDATION ], + [ 42, MoveId.ACID_SPRAY ], + [ 49, MoveId.POISON_JAB ], + [ 56, MoveId.TOXIC ], ], [Species.MUDBRAY]: [ - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ROCK_SMASH ], - [ 4, Moves.IRON_DEFENSE ], - [ 8, Moves.DOUBLE_KICK ], - [ 12, Moves.BULLDOZE ], - [ 16, Moves.STOMP ], - [ 20, Moves.STRENGTH ], - [ 24, Moves.COUNTER ], - [ 28, Moves.HIGH_HORSEPOWER ], - [ 32, Moves.HEAVY_SLAM ], - [ 36, Moves.EARTHQUAKE ], - [ 40, Moves.MEGA_KICK ], - [ 44, Moves.SUPERPOWER ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ROCK_SMASH ], + [ 4, MoveId.IRON_DEFENSE ], + [ 8, MoveId.DOUBLE_KICK ], + [ 12, MoveId.BULLDOZE ], + [ 16, MoveId.STOMP ], + [ 20, MoveId.STRENGTH ], + [ 24, MoveId.COUNTER ], + [ 28, MoveId.HIGH_HORSEPOWER ], + [ 32, MoveId.HEAVY_SLAM ], + [ 36, MoveId.EARTHQUAKE ], + [ 40, MoveId.MEGA_KICK ], + [ 44, MoveId.SUPERPOWER ], ], [Species.MUDSDALE]: [ - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.IRON_DEFENSE ], - [ 12, Moves.BULLDOZE ], - [ 16, Moves.STOMP ], - [ 20, Moves.STRENGTH ], - [ 24, Moves.COUNTER ], - [ 28, Moves.HIGH_HORSEPOWER ], - [ 34, Moves.HEAVY_SLAM ], - [ 40, Moves.EARTHQUAKE ], - [ 46, Moves.MEGA_KICK ], - [ 52, Moves.SUPERPOWER ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.IRON_DEFENSE ], + [ 12, MoveId.BULLDOZE ], + [ 16, MoveId.STOMP ], + [ 20, MoveId.STRENGTH ], + [ 24, MoveId.COUNTER ], + [ 28, MoveId.HIGH_HORSEPOWER ], + [ 34, MoveId.HEAVY_SLAM ], + [ 40, MoveId.EARTHQUAKE ], + [ 46, MoveId.MEGA_KICK ], + [ 52, MoveId.SUPERPOWER ], ], [Species.DEWPIDER]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.INFESTATION ], - [ 1, Moves.WATER_SPORT ], - [ 4, Moves.BUG_BITE ], - [ 8, Moves.BITE ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.AQUA_RING ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.CRUNCH ], - [ 28, Moves.SOAK ], - [ 32, Moves.ENTRAINMENT ], - [ 36, Moves.LUNGE ], - [ 40, Moves.LIQUIDATION ], - [ 44, Moves.LEECH_LIFE ], - [ 48, Moves.MIRROR_COAT ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.INFESTATION ], + [ 1, MoveId.WATER_SPORT ], + [ 4, MoveId.BUG_BITE ], + [ 8, MoveId.BITE ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.AQUA_RING ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.CRUNCH ], + [ 28, MoveId.SOAK ], + [ 32, MoveId.ENTRAINMENT ], + [ 36, MoveId.LUNGE ], + [ 40, MoveId.LIQUIDATION ], + [ 44, MoveId.LEECH_LIFE ], + [ 48, MoveId.MIRROR_COAT ], ], [Species.ARAQUANID]: [ - [ 1, Moves.BITE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.INFESTATION ], - [ 1, Moves.WATER_SPORT ], // Previous Stage Move - [ 1, Moves.SPIDER_WEB ], - [ 12, Moves.BUBBLE_BEAM ], - [ 16, Moves.AQUA_RING ], - [ 20, Moves.HEADBUTT ], - [ 26, Moves.CRUNCH ], - [ 32, Moves.SOAK ], - [ 38, Moves.ENTRAINMENT ], - [ 44, Moves.LUNGE ], - [ 50, Moves.LIQUIDATION ], - [ 56, Moves.LEECH_LIFE ], - [ 62, Moves.MIRROR_COAT ], + [ 1, MoveId.BITE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.INFESTATION ], + [ 1, MoveId.WATER_SPORT ], // Previous Stage Move + [ 1, MoveId.SPIDER_WEB ], + [ 12, MoveId.BUBBLE_BEAM ], + [ 16, MoveId.AQUA_RING ], + [ 20, MoveId.HEADBUTT ], + [ 26, MoveId.CRUNCH ], + [ 32, MoveId.SOAK ], + [ 38, MoveId.ENTRAINMENT ], + [ 44, MoveId.LUNGE ], + [ 50, MoveId.LIQUIDATION ], + [ 56, MoveId.LEECH_LIFE ], + [ 62, MoveId.MIRROR_COAT ], ], [Species.FOMANTIS]: [ - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.LEAFAGE ], - [ 5, Moves.GROWTH ], - [ 10, Moves.INGRAIN ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.SWEET_SCENT ], - [ 25, Moves.SLASH ], - [ 30, Moves.X_SCISSOR ], - [ 35, Moves.SYNTHESIS ], - [ 40, Moves.LEAF_BLADE ], - [ 45, Moves.SUNNY_DAY ], - [ 50, Moves.SOLAR_BEAM ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.LEAFAGE ], + [ 5, MoveId.GROWTH ], + [ 10, MoveId.INGRAIN ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.SWEET_SCENT ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.X_SCISSOR ], + [ 35, MoveId.SYNTHESIS ], + [ 40, MoveId.LEAF_BLADE ], + [ 45, MoveId.SUNNY_DAY ], + [ 50, MoveId.SOLAR_BEAM ], ], [Species.LURANTIS]: [ - [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], - [ 1, Moves.GROWTH ], - [ 1, Moves.SOLAR_BEAM ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.INGRAIN ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.LEAFAGE ], - [ 1, Moves.DUAL_CHOP ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.SWEET_SCENT ], - [ 25, Moves.SLASH ], - [ 30, Moves.X_SCISSOR ], - [ 37, Moves.SYNTHESIS ], - [ 44, Moves.LEAF_BLADE ], - [ 51, Moves.SUNNY_DAY ], - [ 63, Moves.SOLAR_BLADE ], + [ EVOLVE_MOVE, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.SOLAR_BEAM ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.INGRAIN ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.DUAL_CHOP ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.SWEET_SCENT ], + [ 25, MoveId.SLASH ], + [ 30, MoveId.X_SCISSOR ], + [ 37, MoveId.SYNTHESIS ], + [ 44, MoveId.LEAF_BLADE ], + [ 51, MoveId.SUNNY_DAY ], + [ 63, MoveId.SOLAR_BLADE ], ], [Species.MORELULL]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.CONFUSE_RAY ], - [ 8, Moves.INGRAIN ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.SLEEP_POWDER ], - [ 20, Moves.MOONLIGHT ], - [ 25, Moves.STRENGTH_SAP ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.DAZZLING_GLEAM ], - [ 36, Moves.SPORE ], - [ 40, Moves.MOONBLAST ], - [ 44, Moves.DREAM_EATER ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.CONFUSE_RAY ], + [ 8, MoveId.INGRAIN ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.SLEEP_POWDER ], + [ 20, MoveId.MOONLIGHT ], + [ 25, MoveId.STRENGTH_SAP ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.DAZZLING_GLEAM ], + [ 36, MoveId.SPORE ], + [ 40, MoveId.MOONBLAST ], + [ 44, MoveId.DREAM_EATER ], ], [Species.SHIINOTIC]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.INGRAIN ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.FLASH ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.SLEEP_POWDER ], - [ 20, Moves.MOONLIGHT ], - [ 27, Moves.STRENGTH_SAP ], - [ 32, Moves.GIGA_DRAIN ], - [ 38, Moves.DAZZLING_GLEAM ], - [ 44, Moves.SPORE ], - [ 50, Moves.MOONBLAST ], - [ 56, Moves.DREAM_EATER ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.INGRAIN ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.FLASH ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.SLEEP_POWDER ], + [ 20, MoveId.MOONLIGHT ], + [ 27, MoveId.STRENGTH_SAP ], + [ 32, MoveId.GIGA_DRAIN ], + [ 38, MoveId.DAZZLING_GLEAM ], + [ 44, MoveId.SPORE ], + [ 50, MoveId.MOONBLAST ], + [ 56, MoveId.DREAM_EATER ], ], [Species.SALANDIT]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.POISON_GAS ], - [ 5, Moves.SMOG ], - [ 10, Moves.EMBER ], - [ 15, Moves.POISON_FANG ], - [ 20, Moves.SWEET_SCENT ], - [ 25, Moves.NASTY_PLOT ], - [ 30, Moves.INCINERATE ], - [ 35, Moves.VENOSHOCK ], - [ 40, Moves.DRAGON_PULSE ], - [ 45, Moves.FLAMETHROWER ], - [ 50, Moves.TOXIC ], - [ 55, Moves.ENDEAVOR ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.POISON_GAS ], + [ 5, MoveId.SMOG ], + [ 10, MoveId.EMBER ], + [ 15, MoveId.POISON_FANG ], + [ 20, MoveId.SWEET_SCENT ], + [ 25, MoveId.NASTY_PLOT ], + [ 30, MoveId.INCINERATE ], + [ 35, MoveId.VENOSHOCK ], + [ 40, MoveId.DRAGON_PULSE ], + [ 45, MoveId.FLAMETHROWER ], + [ 50, MoveId.TOXIC ], + [ 55, MoveId.ENDEAVOR ], ], [Species.SALAZZLE]: [ - [ EVOLVE_MOVE, Moves.FIRE_LASH ], - [ 1, Moves.POUND ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.DISABLE ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOG ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.ENCORE ], - [ 1, Moves.TORMENT ], - [ 1, Moves.KNOCK_OFF ], - [ 1, Moves.ENDEAVOR ], - [ 1, Moves.CAPTIVATE ], - [ 15, Moves.POISON_FANG ], - [ 20, Moves.SWEET_SCENT ], - [ 25, Moves.NASTY_PLOT ], - [ 30, Moves.INCINERATE ], - [ 37, Moves.VENOSHOCK ], - [ 44, Moves.DRAGON_PULSE ], - [ 51, Moves.FLAMETHROWER ], - [ 58, Moves.TOXIC ], + [ EVOLVE_MOVE, MoveId.FIRE_LASH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.TORMENT ], + [ 1, MoveId.KNOCK_OFF ], + [ 1, MoveId.ENDEAVOR ], + [ 1, MoveId.CAPTIVATE ], + [ 15, MoveId.POISON_FANG ], + [ 20, MoveId.SWEET_SCENT ], + [ 25, MoveId.NASTY_PLOT ], + [ 30, MoveId.INCINERATE ], + [ 37, MoveId.VENOSHOCK ], + [ 44, MoveId.DRAGON_PULSE ], + [ 51, MoveId.FLAMETHROWER ], + [ 58, MoveId.TOXIC ], ], [Species.STUFFUL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.BABY_DOLL_EYES ], - [ 8, Moves.PAYBACK ], - [ 12, Moves.BRUTAL_SWING ], - [ 16, Moves.ENDURE ], - [ 20, Moves.STRENGTH ], - [ 24, Moves.TAKE_DOWN ], - [ 28, Moves.FLAIL ], - [ 32, Moves.HAMMER_ARM ], - [ 36, Moves.THRASH ], - [ 40, Moves.PAIN_SPLIT ], - [ 44, Moves.DOUBLE_EDGE ], - [ 48, Moves.SUPERPOWER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.BABY_DOLL_EYES ], + [ 8, MoveId.PAYBACK ], + [ 12, MoveId.BRUTAL_SWING ], + [ 16, MoveId.ENDURE ], + [ 20, MoveId.STRENGTH ], + [ 24, MoveId.TAKE_DOWN ], + [ 28, MoveId.FLAIL ], + [ 32, MoveId.HAMMER_ARM ], + [ 36, MoveId.THRASH ], + [ 40, MoveId.PAIN_SPLIT ], + [ 44, MoveId.DOUBLE_EDGE ], + [ 48, MoveId.SUPERPOWER ], ], [Species.BEWEAR]: [ - [ EVOLVE_MOVE, Moves.BIND ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.PAYBACK ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 12, Moves.BRUTAL_SWING ], - [ 16, Moves.ENDURE ], - [ 20, Moves.STRENGTH ], - [ 24, Moves.TAKE_DOWN ], - [ 30, Moves.FLAIL ], - [ 36, Moves.HAMMER_ARM ], - [ 42, Moves.THRASH ], - [ 48, Moves.PAIN_SPLIT ], - [ 54, Moves.DOUBLE_EDGE ], - [ 60, Moves.SUPERPOWER ], + [ EVOLVE_MOVE, MoveId.BIND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PAYBACK ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 12, MoveId.BRUTAL_SWING ], + [ 16, MoveId.ENDURE ], + [ 20, MoveId.STRENGTH ], + [ 24, MoveId.TAKE_DOWN ], + [ 30, MoveId.FLAIL ], + [ 36, MoveId.HAMMER_ARM ], + [ 42, MoveId.THRASH ], + [ 48, MoveId.PAIN_SPLIT ], + [ 54, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.SUPERPOWER ], ], [Species.BOUNSWEET]: [ - [ 1, Moves.SPLASH ], - [ 1, Moves.LEAFAGE ], // Custom - [ 4, Moves.PLAY_NICE ], - [ 8, Moves.RAPID_SPIN ], - [ 12, Moves.RAZOR_LEAF ], - [ 16, Moves.SWEET_SCENT ], - [ 20, Moves.MAGICAL_LEAF ], - [ 24, Moves.FLAIL ], - [ 28, Moves.TEETER_DANCE ], - [ 32, Moves.AROMATIC_MIST ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.LEAFAGE ], // Custom + [ 4, MoveId.PLAY_NICE ], + [ 8, MoveId.RAPID_SPIN ], + [ 12, MoveId.RAZOR_LEAF ], + [ 16, MoveId.SWEET_SCENT ], + [ 20, MoveId.MAGICAL_LEAF ], + [ 24, MoveId.FLAIL ], + [ 28, MoveId.TEETER_DANCE ], + [ 32, MoveId.AROMATIC_MIST ], ], [Species.STEENEE]: [ - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.SPLASH ], - [ 1, Moves.FLAIL ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.PLAY_NICE ], - [ 16, Moves.SWEET_SCENT ], - [ 22, Moves.MAGICAL_LEAF ], - [ 28, Moves.STOMP ], - [ 34, Moves.TEETER_DANCE ], - [ 40, Moves.AROMATIC_MIST ], - [ 46, Moves.LEAF_STORM ], + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.PLAY_NICE ], + [ 16, MoveId.SWEET_SCENT ], + [ 22, MoveId.MAGICAL_LEAF ], + [ 28, MoveId.STOMP ], + [ 34, MoveId.TEETER_DANCE ], + [ 40, MoveId.AROMATIC_MIST ], + [ 46, MoveId.LEAF_STORM ], ], [Species.TSAREENA]: [ - [ EVOLVE_MOVE, Moves.TROP_KICK ], - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.SPLASH ], - [ 1, Moves.FLAIL ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.POWER_WHIP ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.PUNISHMENT ], - [ 16, Moves.SWEET_SCENT ], - [ 22, Moves.MAGICAL_LEAF ], - [ 28, Moves.STOMP ], - [ 34, Moves.TEETER_DANCE ], - [ 40, Moves.AROMATIC_MIST ], - [ 46, Moves.LEAF_STORM ], - [ 58, Moves.HIGH_JUMP_KICK ], + [ EVOLVE_MOVE, MoveId.TROP_KICK ], + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.RAZOR_LEAF ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.POWER_WHIP ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.PUNISHMENT ], + [ 16, MoveId.SWEET_SCENT ], + [ 22, MoveId.MAGICAL_LEAF ], + [ 28, MoveId.STOMP ], + [ 34, MoveId.TEETER_DANCE ], + [ 40, MoveId.AROMATIC_MIST ], + [ 46, MoveId.LEAF_STORM ], + [ 58, MoveId.HIGH_JUMP_KICK ], ], [Species.COMFEY]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.GROWTH ], - [ 3, Moves.VINE_WHIP ], - [ 6, Moves.HELPING_HAND ], - [ 9, Moves.DRAINING_KISS ], - [ 12, Moves.FLOWER_SHIELD ], - [ 15, Moves.MAGICAL_LEAF ], - [ 18, Moves.SYNTHESIS ], - [ 21, Moves.LEECH_SEED ], - [ 24, Moves.GRASS_KNOT ], - [ 27, Moves.SWEET_KISS ], - [ 30, Moves.FLORAL_HEALING ], - [ 33, Moves.PETAL_BLIZZARD ], - [ 36, Moves.AROMATHERAPY ], - [ 39, Moves.PLAY_ROUGH ], - [ 42, Moves.SWEET_SCENT ], - [ 45, Moves.PETAL_DANCE ], - [ 48, Moves.GRASSY_TERRAIN ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.GROWTH ], + [ 3, MoveId.VINE_WHIP ], + [ 6, MoveId.HELPING_HAND ], + [ 9, MoveId.DRAINING_KISS ], + [ 12, MoveId.FLOWER_SHIELD ], + [ 15, MoveId.MAGICAL_LEAF ], + [ 18, MoveId.SYNTHESIS ], + [ 21, MoveId.LEECH_SEED ], + [ 24, MoveId.GRASS_KNOT ], + [ 27, MoveId.SWEET_KISS ], + [ 30, MoveId.FLORAL_HEALING ], + [ 33, MoveId.PETAL_BLIZZARD ], + [ 36, MoveId.AROMATHERAPY ], + [ 39, MoveId.PLAY_ROUGH ], + [ 42, MoveId.SWEET_SCENT ], + [ 45, MoveId.PETAL_DANCE ], + [ 48, MoveId.GRASSY_TERRAIN ], ], [Species.ORANGURU]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.TAUNT ], - [ 5, Moves.AFTER_YOU ], - [ 10, Moves.CALM_MIND ], - [ 15, Moves.STORED_POWER ], - [ 20, Moves.PSYCH_UP ], - [ 25, Moves.QUASH ], - [ 30, Moves.NASTY_PLOT ], - [ 35, Moves.ZEN_HEADBUTT ], - [ 40, Moves.TRICK_ROOM ], - [ 45, Moves.PSYCHIC ], - [ 50, Moves.INSTRUCT ], - [ 55, Moves.FOUL_PLAY ], - [ 60, Moves.FUTURE_SIGHT ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.TAUNT ], + [ 5, MoveId.AFTER_YOU ], + [ 10, MoveId.CALM_MIND ], + [ 15, MoveId.STORED_POWER ], + [ 20, MoveId.PSYCH_UP ], + [ 25, MoveId.QUASH ], + [ 30, MoveId.NASTY_PLOT ], + [ 35, MoveId.ZEN_HEADBUTT ], + [ 40, MoveId.TRICK_ROOM ], + [ 45, MoveId.PSYCHIC ], + [ 50, MoveId.INSTRUCT ], + [ 55, MoveId.FOUL_PLAY ], + [ 60, MoveId.FUTURE_SIGHT ], ], [Species.PASSIMIAN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 5, Moves.ROCK_SMASH ], - [ 10, Moves.FOCUS_ENERGY ], - [ 15, Moves.BEAT_UP ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.TAKE_DOWN ], - [ 30, Moves.FLING ], - [ 35, Moves.BULK_UP ], - [ 40, Moves.THRASH ], - [ 45, Moves.DOUBLE_EDGE ], - [ 50, Moves.CLOSE_COMBAT ], - [ 55, Moves.REVERSAL ], - [ 60, Moves.GIGA_IMPACT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 5, MoveId.ROCK_SMASH ], + [ 10, MoveId.FOCUS_ENERGY ], + [ 15, MoveId.BEAT_UP ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.TAKE_DOWN ], + [ 30, MoveId.FLING ], + [ 35, MoveId.BULK_UP ], + [ 40, MoveId.THRASH ], + [ 45, MoveId.DOUBLE_EDGE ], + [ 50, MoveId.CLOSE_COMBAT ], + [ 55, MoveId.REVERSAL ], + [ 60, MoveId.GIGA_IMPACT ], ], [Species.WIMPOD]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.STRUGGLE_BUG ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.STRUGGLE_BUG ], ], [Species.GOLISOPOD]: [ - [ EVOLVE_MOVE, Moves.FIRST_IMPRESSION ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SPITE ], - [ 1, Moves.STRUGGLE_BUG ], - [ 4, Moves.ROCK_SMASH ], - [ 8, Moves.FURY_CUTTER ], - [ 12, Moves.MUD_SHOT ], - [ 16, Moves.BUG_BITE ], - [ 20, Moves.IRON_DEFENSE ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.SLASH ], - [ 32, Moves.RAZOR_SHELL ], - [ 36, Moves.PIN_MISSILE ], - [ 40, Moves.SWORDS_DANCE ], - [ 44, Moves.LIQUIDATION ], + [ EVOLVE_MOVE, MoveId.FIRST_IMPRESSION ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 4, MoveId.ROCK_SMASH ], + [ 8, MoveId.FURY_CUTTER ], + [ 12, MoveId.MUD_SHOT ], + [ 16, MoveId.BUG_BITE ], + [ 20, MoveId.IRON_DEFENSE ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.RAZOR_SHELL ], + [ 36, MoveId.PIN_MISSILE ], + [ 40, MoveId.SWORDS_DANCE ], + [ 44, MoveId.LIQUIDATION ], ], [Species.SANDYGAST]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.HARDEN ], - [ 5, Moves.ASTONISH ], - [ 10, Moves.SAND_TOMB ], - [ 15, Moves.MEGA_DRAIN ], - [ 20, Moves.SAND_ATTACK ], - [ 25, Moves.BULLDOZE ], - [ 30, Moves.HYPNOSIS ], - [ 35, Moves.GIGA_DRAIN ], - [ 40, Moves.IRON_DEFENSE ], - [ 45, Moves.SHADOW_BALL ], - [ 50, Moves.EARTH_POWER ], - [ 55, Moves.SHORE_UP ], - [ 60, Moves.SANDSTORM ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.ASTONISH ], + [ 10, MoveId.SAND_TOMB ], + [ 15, MoveId.MEGA_DRAIN ], + [ 20, MoveId.SAND_ATTACK ], + [ 25, MoveId.BULLDOZE ], + [ 30, MoveId.HYPNOSIS ], + [ 35, MoveId.GIGA_DRAIN ], + [ 40, MoveId.IRON_DEFENSE ], + [ 45, MoveId.SHADOW_BALL ], + [ 50, MoveId.EARTH_POWER ], + [ 55, MoveId.SHORE_UP ], + [ 60, MoveId.SANDSTORM ], ], [Species.PALOSSAND]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.HARDEN ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.SAND_TOMB ], - [ 15, Moves.MEGA_DRAIN ], - [ 20, Moves.SAND_ATTACK ], - [ 25, Moves.BULLDOZE ], - [ 30, Moves.HYPNOSIS ], - [ 35, Moves.GIGA_DRAIN ], - [ 40, Moves.IRON_DEFENSE ], - [ 47, Moves.SHADOW_BALL ], - [ 54, Moves.EARTH_POWER ], - [ 61, Moves.SHORE_UP ], - [ 68, Moves.SANDSTORM ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.SAND_TOMB ], + [ 15, MoveId.MEGA_DRAIN ], + [ 20, MoveId.SAND_ATTACK ], + [ 25, MoveId.BULLDOZE ], + [ 30, MoveId.HYPNOSIS ], + [ 35, MoveId.GIGA_DRAIN ], + [ 40, MoveId.IRON_DEFENSE ], + [ 47, MoveId.SHADOW_BALL ], + [ 54, MoveId.EARTH_POWER ], + [ 61, MoveId.SHORE_UP ], + [ 68, MoveId.SANDSTORM ], ], [Species.PYUKUMUKU]: [ - [ 1, Moves.COUNTER ], // Custom, Moved from Level 20 to 1 - [ 1, Moves.HARDEN ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.BIDE ], - [ 1, Moves.MUD_SPORT ], - [ 1, Moves.WATER_SPORT ], - [ 5, Moves.HELPING_HAND ], - [ 10, Moves.TAUNT ], - [ 15, Moves.SAFEGUARD ], - [ 20, Moves.MIRROR_COAT ], // Custom - [ 25, Moves.PURIFY ], - [ 30, Moves.CURSE ], - [ 35, Moves.GASTRO_ACID ], - [ 40, Moves.PAIN_SPLIT ], - [ 45, Moves.RECOVER ], - [ 50, Moves.SOAK ], - [ 55, Moves.TOXIC ], - [ 60, Moves.MEMENTO ], + [ 1, MoveId.COUNTER ], // Custom, Moved from Level 20 to 1 + [ 1, MoveId.HARDEN ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.MUD_SPORT ], + [ 1, MoveId.WATER_SPORT ], + [ 5, MoveId.HELPING_HAND ], + [ 10, MoveId.TAUNT ], + [ 15, MoveId.SAFEGUARD ], + [ 20, MoveId.MIRROR_COAT ], // Custom + [ 25, MoveId.PURIFY ], + [ 30, MoveId.CURSE ], + [ 35, MoveId.GASTRO_ACID ], + [ 40, MoveId.PAIN_SPLIT ], + [ 45, MoveId.RECOVER ], + [ 50, MoveId.SOAK ], + [ 55, MoveId.TOXIC ], + [ 60, MoveId.MEMENTO ], ], [Species.TYPE_NULL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.IMPRISON ], - [ 5, Moves.AERIAL_ACE ], - [ 10, Moves.SCARY_FACE ], - [ 15, Moves.DOUBLE_HIT ], - [ 20, Moves.METAL_SOUND ], - [ 25, Moves.CRUSH_CLAW ], - [ 30, Moves.AIR_SLASH ], - [ 35, Moves.TRI_ATTACK ], - [ 40, Moves.X_SCISSOR ], - [ 45, Moves.IRON_HEAD ], - [ 50, Moves.TAKE_DOWN ], - [ 55, Moves.DOUBLE_EDGE ], - [ 60, Moves.HEAL_BLOCK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.IMPRISON ], + [ 5, MoveId.AERIAL_ACE ], + [ 10, MoveId.SCARY_FACE ], + [ 15, MoveId.DOUBLE_HIT ], + [ 20, MoveId.METAL_SOUND ], + [ 25, MoveId.CRUSH_CLAW ], + [ 30, MoveId.AIR_SLASH ], + [ 35, MoveId.TRI_ATTACK ], + [ 40, MoveId.X_SCISSOR ], + [ 45, MoveId.IRON_HEAD ], + [ 50, MoveId.TAKE_DOWN ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.HEAL_BLOCK ], ], [Species.SILVALLY]: [ - [ EVOLVE_MOVE, Moves.MULTI_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.EXPLOSION ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.POISON_FANG ], - [ 1, Moves.AERIAL_ACE ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.IRON_HEAD ], - [ 1, Moves.HEAL_BLOCK ], - [ 15, Moves.DOUBLE_HIT ], - [ 20, Moves.METAL_SOUND ], - [ 25, Moves.CRUSH_CLAW ], - [ 30, Moves.AIR_SLASH ], - [ 35, Moves.TRI_ATTACK ], - [ 40, Moves.X_SCISSOR ], - [ 45, Moves.CRUNCH ], - [ 50, Moves.TAKE_DOWN ], - [ 55, Moves.DOUBLE_EDGE ], - [ 60, Moves.PARTING_SHOT ], + [ EVOLVE_MOVE, MoveId.MULTI_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.EXPLOSION ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.POISON_FANG ], + [ 1, MoveId.AERIAL_ACE ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.IRON_HEAD ], + [ 1, MoveId.HEAL_BLOCK ], + [ 15, MoveId.DOUBLE_HIT ], + [ 20, MoveId.METAL_SOUND ], + [ 25, MoveId.CRUSH_CLAW ], + [ 30, MoveId.AIR_SLASH ], + [ 35, MoveId.TRI_ATTACK ], + [ 40, MoveId.X_SCISSOR ], + [ 45, MoveId.CRUNCH ], + [ 50, MoveId.TAKE_DOWN ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.PARTING_SHOT ], ], [Species.MINIOR]: [ - [ 1, Moves.TACKLE ], - [ 3, Moves.DEFENSE_CURL ], - [ 8, Moves.ROLLOUT ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.SWIFT ], - [ 17, Moves.ANCIENT_POWER ], - [ 22, Moves.SELF_DESTRUCT ], - [ 24, Moves.STEALTH_ROCK ], - [ 29, Moves.TAKE_DOWN ], - [ 31, Moves.AUTOTOMIZE ], - [ 36, Moves.COSMIC_POWER ], - [ 38, Moves.POWER_GEM ], - [ 43, Moves.DOUBLE_EDGE ], - [ 45, Moves.SHELL_SMASH ], - [ 50, Moves.EXPLOSION ], + [ 1, MoveId.TACKLE ], + [ 3, MoveId.DEFENSE_CURL ], + [ 8, MoveId.ROLLOUT ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.SWIFT ], + [ 17, MoveId.ANCIENT_POWER ], + [ 22, MoveId.SELF_DESTRUCT ], + [ 24, MoveId.STEALTH_ROCK ], + [ 29, MoveId.TAKE_DOWN ], + [ 31, MoveId.AUTOTOMIZE ], + [ 36, MoveId.COSMIC_POWER ], + [ 38, MoveId.POWER_GEM ], + [ 43, MoveId.DOUBLE_EDGE ], + [ 45, MoveId.SHELL_SMASH ], + [ 50, MoveId.EXPLOSION ], ], [Species.KOMALA]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 6, Moves.STOCKPILE ], - [ 6, Moves.SPIT_UP ], - [ 6, Moves.SWALLOW ], - [ 11, Moves.RAPID_SPIN ], - [ 16, Moves.YAWN ], - [ 21, Moves.SLAM ], - [ 26, Moves.FLAIL ], - [ 31, Moves.SUCKER_PUNCH ], - [ 36, Moves.PSYCH_UP ], - [ 41, Moves.WOOD_HAMMER ], - [ 46, Moves.THRASH ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 6, MoveId.STOCKPILE ], + [ 6, MoveId.SPIT_UP ], + [ 6, MoveId.SWALLOW ], + [ 11, MoveId.RAPID_SPIN ], + [ 16, MoveId.YAWN ], + [ 21, MoveId.SLAM ], + [ 26, MoveId.FLAIL ], + [ 31, MoveId.SUCKER_PUNCH ], + [ 36, MoveId.PSYCH_UP ], + [ 41, MoveId.WOOD_HAMMER ], + [ 46, MoveId.THRASH ], ], [Species.TURTONATOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOG ], - [ 4, Moves.EMBER ], - [ 8, Moves.PROTECT ], - [ 12, Moves.ENDURE ], - [ 16, Moves.FLAIL ], - [ 20, Moves.INCINERATE ], - [ 24, Moves.IRON_DEFENSE ], - [ 28, Moves.DRAGON_PULSE ], - [ 32, Moves.BODY_SLAM ], - [ 36, Moves.FLAMETHROWER ], - [ 40, Moves.SHELL_TRAP ], - [ 44, Moves.SHELL_SMASH ], - [ 48, Moves.OVERHEAT ], - [ 52, Moves.EXPLOSION ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOG ], + [ 4, MoveId.EMBER ], + [ 8, MoveId.PROTECT ], + [ 12, MoveId.ENDURE ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.INCINERATE ], + [ 24, MoveId.IRON_DEFENSE ], + [ 28, MoveId.DRAGON_PULSE ], + [ 32, MoveId.BODY_SLAM ], + [ 36, MoveId.FLAMETHROWER ], + [ 40, MoveId.SHELL_TRAP ], + [ 44, MoveId.SHELL_SMASH ], + [ 48, MoveId.OVERHEAT ], + [ 52, MoveId.EXPLOSION ], ], [Species.TOGEDEMARU]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.NUZZLE ], - [ 5, Moves.DEFENSE_CURL ], - [ 10, Moves.CHARGE ], - [ 15, Moves.THUNDER_SHOCK ], - [ 20, Moves.FELL_STINGER ], - [ 25, Moves.SPARK ], - [ 30, Moves.PIN_MISSILE ], - [ 35, Moves.MAGNET_RISE ], - [ 40, Moves.ZING_ZAP ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.ELECTRIC_TERRAIN ], - [ 55, Moves.WILD_CHARGE ], - [ 60, Moves.SPIKY_SHIELD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.NUZZLE ], + [ 5, MoveId.DEFENSE_CURL ], + [ 10, MoveId.CHARGE ], + [ 15, MoveId.THUNDER_SHOCK ], + [ 20, MoveId.FELL_STINGER ], + [ 25, MoveId.SPARK ], + [ 30, MoveId.PIN_MISSILE ], + [ 35, MoveId.MAGNET_RISE ], + [ 40, MoveId.ZING_ZAP ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.ELECTRIC_TERRAIN ], + [ 55, MoveId.WILD_CHARGE ], + [ 60, MoveId.SPIKY_SHIELD ], ], [Species.MIMIKYU]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.SPLASH ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.WOOD_HAMMER ], - [ 6, Moves.SHADOW_SNEAK ], - [ 12, Moves.DOUBLE_TEAM ], - [ 18, Moves.BABY_DOLL_EYES ], - [ 24, Moves.MIMIC ], - [ 30, Moves.HONE_CLAWS ], - [ 36, Moves.SLASH ], - [ 42, Moves.SHADOW_CLAW ], - [ 48, Moves.CHARM ], - [ 54, Moves.PLAY_ROUGH ], - [ 60, Moves.PAIN_SPLIT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.WOOD_HAMMER ], + [ 6, MoveId.SHADOW_SNEAK ], + [ 12, MoveId.DOUBLE_TEAM ], + [ 18, MoveId.BABY_DOLL_EYES ], + [ 24, MoveId.MIMIC ], + [ 30, MoveId.HONE_CLAWS ], + [ 36, MoveId.SLASH ], + [ 42, MoveId.SHADOW_CLAW ], + [ 48, MoveId.CHARM ], + [ 54, MoveId.PLAY_ROUGH ], + [ 60, MoveId.PAIN_SPLIT ], ], [Species.BRUXISH]: [ - [ 1, Moves.WATER_GUN ], - [ 4, Moves.ASTONISH ], - [ 9, Moves.CONFUSION ], - [ 12, Moves.BITE ], - [ 17, Moves.AQUA_JET ], - [ 20, Moves.DISABLE ], - [ 25, Moves.PSYSHOCK ], - [ 28, Moves.CRUNCH ], - [ 33, Moves.AQUA_TAIL ], - [ 36, Moves.SCREECH ], - [ 41, Moves.PSYCHIC_FANGS ], - [ 44, Moves.WAVE_CRASH ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.ASTONISH ], + [ 9, MoveId.CONFUSION ], + [ 12, MoveId.BITE ], + [ 17, MoveId.AQUA_JET ], + [ 20, MoveId.DISABLE ], + [ 25, MoveId.PSYSHOCK ], + [ 28, MoveId.CRUNCH ], + [ 33, MoveId.AQUA_TAIL ], + [ 36, MoveId.SCREECH ], + [ 41, MoveId.PSYCHIC_FANGS ], + [ 44, MoveId.WAVE_CRASH ], ], [Species.DRAMPA]: [ - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.PLAY_NICE ], - [ 5, Moves.TWISTER ], - [ 10, Moves.PROTECT ], - [ 15, Moves.GLARE ], - [ 20, Moves.SAFEGUARD ], - [ 25, Moves.DRAGON_BREATH ], - [ 30, Moves.EXTRASENSORY ], - [ 35, Moves.DRAGON_PULSE ], - [ 40, Moves.LIGHT_SCREEN ], - [ 45, Moves.FLY ], - [ 50, Moves.HYPER_VOICE ], - [ 55, Moves.OUTRAGE ], + [ 1, MoveId.ECHOED_VOICE ], + [ 1, MoveId.PLAY_NICE ], + [ 5, MoveId.TWISTER ], + [ 10, MoveId.PROTECT ], + [ 15, MoveId.GLARE ], + [ 20, MoveId.SAFEGUARD ], + [ 25, MoveId.DRAGON_BREATH ], + [ 30, MoveId.EXTRASENSORY ], + [ 35, MoveId.DRAGON_PULSE ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 45, MoveId.FLY ], + [ 50, MoveId.HYPER_VOICE ], + [ 55, MoveId.OUTRAGE ], ], [Species.DHELMISE]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.RAPID_SPIN ], - [ 4, Moves.ASTONISH ], - [ 8, Moves.WRAP ], - [ 12, Moves.MEGA_DRAIN ], - [ 16, Moves.GROWTH ], - [ 20, Moves.GYRO_BALL ], - [ 24, Moves.SWITCHEROO ], - [ 28, Moves.GIGA_DRAIN ], - [ 32, Moves.WHIRLPOOL ], - [ 36, Moves.HEAVY_SLAM ], - [ 40, Moves.SLAM ], - [ 44, Moves.SHADOW_BALL ], - [ 48, Moves.METAL_SOUND ], - [ 52, Moves.ANCHOR_SHOT ], - [ 56, Moves.ENERGY_BALL ], - [ 60, Moves.PHANTOM_FORCE ], - [ 64, Moves.POWER_WHIP ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.RAPID_SPIN ], + [ 4, MoveId.ASTONISH ], + [ 8, MoveId.WRAP ], + [ 12, MoveId.MEGA_DRAIN ], + [ 16, MoveId.GROWTH ], + [ 20, MoveId.GYRO_BALL ], + [ 24, MoveId.SWITCHEROO ], + [ 28, MoveId.GIGA_DRAIN ], + [ 32, MoveId.WHIRLPOOL ], + [ 36, MoveId.HEAVY_SLAM ], + [ 40, MoveId.SLAM ], + [ 44, MoveId.SHADOW_BALL ], + [ 48, MoveId.METAL_SOUND ], + [ 52, MoveId.ANCHOR_SHOT ], + [ 56, MoveId.ENERGY_BALL ], + [ 60, MoveId.PHANTOM_FORCE ], + [ 64, MoveId.POWER_WHIP ], ], [Species.JANGMO_O]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.PROTECT ], - [ 8, Moves.DRAGON_TAIL ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.WORK_UP ], - [ 24, Moves.SCREECH ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.DRAGON_CLAW ], - [ 36, Moves.NOBLE_ROAR ], - [ 40, Moves.DRAGON_DANCE ], - [ 44, Moves.OUTRAGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.PROTECT ], + [ 8, MoveId.DRAGON_TAIL ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.WORK_UP ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.DRAGON_CLAW ], + [ 36, MoveId.NOBLE_ROAR ], + [ 40, MoveId.DRAGON_DANCE ], + [ 44, MoveId.OUTRAGE ], ], [Species.HAKAMO_O]: [ - [ EVOLVE_MOVE, Moves.SKY_UPPERCUT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.PROTECT ], - [ 1, Moves.DRAGON_TAIL ], - [ 1, Moves.BIDE ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.WORK_UP ], - [ 24, Moves.SCREECH ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.DRAGON_CLAW ], - [ 38, Moves.NOBLE_ROAR ], - [ 44, Moves.DRAGON_DANCE ], - [ 50, Moves.OUTRAGE ], - [ 56, Moves.CLOSE_COMBAT ], + [ EVOLVE_MOVE, MoveId.SKY_UPPERCUT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.DRAGON_TAIL ], + [ 1, MoveId.BIDE ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.WORK_UP ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.DRAGON_CLAW ], + [ 38, MoveId.NOBLE_ROAR ], + [ 44, MoveId.DRAGON_DANCE ], + [ 50, MoveId.OUTRAGE ], + [ 56, MoveId.CLOSE_COMBAT ], ], [Species.KOMMO_O]: [ - [ EVOLVE_MOVE, Moves.CLANGING_SCALES ], - [ RELEARN_MOVE, Moves.BELLY_DRUM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.PROTECT ], - [ 1, Moves.DRAGON_TAIL ], - [ 1, Moves.BIDE ], - [ 1, Moves.SKY_UPPERCUT ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.WORK_UP ], - [ 24, Moves.SCREECH ], - [ 28, Moves.IRON_DEFENSE ], - [ 32, Moves.DRAGON_CLAW ], - [ 38, Moves.NOBLE_ROAR ], - [ 44, Moves.DRAGON_DANCE ], - [ 52, Moves.OUTRAGE ], - [ 60, Moves.CLOSE_COMBAT ], - [ 68, Moves.CLANGOROUS_SOUL ], - [ 76, Moves.BOOMBURST ], + [ EVOLVE_MOVE, MoveId.CLANGING_SCALES ], + [ RELEARN_MOVE, MoveId.BELLY_DRUM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.DRAGON_TAIL ], + [ 1, MoveId.BIDE ], + [ 1, MoveId.SKY_UPPERCUT ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.WORK_UP ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.IRON_DEFENSE ], + [ 32, MoveId.DRAGON_CLAW ], + [ 38, MoveId.NOBLE_ROAR ], + [ 44, MoveId.DRAGON_DANCE ], + [ 52, MoveId.OUTRAGE ], + [ 60, MoveId.CLOSE_COMBAT ], + [ 68, MoveId.CLANGOROUS_SOUL ], + [ 76, MoveId.BOOMBURST ], ], [Species.TAPU_KOKO]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 5, Moves.WITHDRAW ], - [ 10, Moves.FAIRY_WIND ], - [ 15, Moves.FALSE_SWIPE ], - [ 20, Moves.SPARK ], - [ 25, Moves.SHOCK_WAVE ], - [ 30, Moves.CHARGE ], - [ 35, Moves.AGILITY ], - [ 40, Moves.SCREECH ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.MEAN_LOOK ], - [ 55, Moves.NATURES_MADNESS ], - [ 60, Moves.WILD_CHARGE ], - [ 65, Moves.BRAVE_BIRD ], - [ 70, Moves.POWER_SWAP ], - [ 75, Moves.ELECTRIC_TERRAIN ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 5, MoveId.WITHDRAW ], + [ 10, MoveId.FAIRY_WIND ], + [ 15, MoveId.FALSE_SWIPE ], + [ 20, MoveId.SPARK ], + [ 25, MoveId.SHOCK_WAVE ], + [ 30, MoveId.CHARGE ], + [ 35, MoveId.AGILITY ], + [ 40, MoveId.SCREECH ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.MEAN_LOOK ], + [ 55, MoveId.NATURES_MADNESS ], + [ 60, MoveId.WILD_CHARGE ], + [ 65, MoveId.BRAVE_BIRD ], + [ 70, MoveId.POWER_SWAP ], + [ 75, MoveId.ELECTRIC_TERRAIN ], ], [Species.TAPU_LELE]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.WITHDRAW ], - [ 10, Moves.AROMATHERAPY ], - [ 15, Moves.DRAINING_KISS ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.FLATTER ], - [ 30, Moves.AROMATIC_MIST ], - [ 35, Moves.SWEET_SCENT ], - [ 40, Moves.EXTRASENSORY ], - [ 45, Moves.PSYSHOCK ], - [ 50, Moves.MEAN_LOOK ], - [ 55, Moves.NATURES_MADNESS ], - [ 60, Moves.MOONBLAST ], - [ 65, Moves.TICKLE ], - [ 70, Moves.SKILL_SWAP ], - [ 75, Moves.PSYCHIC_TERRAIN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.WITHDRAW ], + [ 10, MoveId.AROMATHERAPY ], + [ 15, MoveId.DRAINING_KISS ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.FLATTER ], + [ 30, MoveId.AROMATIC_MIST ], + [ 35, MoveId.SWEET_SCENT ], + [ 40, MoveId.EXTRASENSORY ], + [ 45, MoveId.PSYSHOCK ], + [ 50, MoveId.MEAN_LOOK ], + [ 55, MoveId.NATURES_MADNESS ], + [ 60, MoveId.MOONBLAST ], + [ 65, MoveId.TICKLE ], + [ 70, MoveId.SKILL_SWAP ], + [ 75, MoveId.PSYCHIC_TERRAIN ], ], [Species.TAPU_BULU]: [ - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.LEAFAGE ], - [ 5, Moves.WITHDRAW ], - [ 10, Moves.DISABLE ], - [ 15, Moves.LEECH_SEED ], - [ 20, Moves.MEGA_DRAIN ], - [ 25, Moves.WHIRLWIND ], - [ 30, Moves.HORN_ATTACK ], - [ 35, Moves.SCARY_FACE ], - [ 40, Moves.HORN_LEECH ], - [ 45, Moves.ZEN_HEADBUTT ], - [ 50, Moves.MEAN_LOOK ], - [ 55, Moves.NATURES_MADNESS ], - [ 60, Moves.WOOD_HAMMER ], - [ 65, Moves.MEGAHORN ], - [ 70, Moves.SKULL_BASH ], - [ 75, Moves.GRASSY_TERRAIN ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.LEAFAGE ], + [ 5, MoveId.WITHDRAW ], + [ 10, MoveId.DISABLE ], + [ 15, MoveId.LEECH_SEED ], + [ 20, MoveId.MEGA_DRAIN ], + [ 25, MoveId.WHIRLWIND ], + [ 30, MoveId.HORN_ATTACK ], + [ 35, MoveId.SCARY_FACE ], + [ 40, MoveId.HORN_LEECH ], + [ 45, MoveId.ZEN_HEADBUTT ], + [ 50, MoveId.MEAN_LOOK ], + [ 55, MoveId.NATURES_MADNESS ], + [ 60, MoveId.WOOD_HAMMER ], + [ 65, MoveId.MEGAHORN ], + [ 70, MoveId.SKULL_BASH ], + [ 75, MoveId.GRASSY_TERRAIN ], ], [Species.TAPU_FINI]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DISARMING_VOICE ], - [ 5, Moves.WITHDRAW ], - [ 10, Moves.MIST ], - [ 10, Moves.HAZE ], - [ 15, Moves.AQUA_RING ], - [ 20, Moves.WATER_PULSE ], - [ 25, Moves.BRINE ], - [ 30, Moves.DEFOG ], - [ 35, Moves.HEAL_PULSE ], - [ 40, Moves.SURF ], - [ 45, Moves.MUDDY_WATER ], - [ 50, Moves.MEAN_LOOK ], - [ 55, Moves.NATURES_MADNESS ], - [ 60, Moves.MOONBLAST ], - [ 65, Moves.HYDRO_PUMP ], - [ 70, Moves.SOAK ], - [ 75, Moves.MISTY_TERRAIN ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DISARMING_VOICE ], + [ 5, MoveId.WITHDRAW ], + [ 10, MoveId.MIST ], + [ 10, MoveId.HAZE ], + [ 15, MoveId.AQUA_RING ], + [ 20, MoveId.WATER_PULSE ], + [ 25, MoveId.BRINE ], + [ 30, MoveId.DEFOG ], + [ 35, MoveId.HEAL_PULSE ], + [ 40, MoveId.SURF ], + [ 45, MoveId.MUDDY_WATER ], + [ 50, MoveId.MEAN_LOOK ], + [ 55, MoveId.NATURES_MADNESS ], + [ 60, MoveId.MOONBLAST ], + [ 65, MoveId.HYDRO_PUMP ], + [ 70, MoveId.SOAK ], + [ 75, MoveId.MISTY_TERRAIN ], ], [Species.COSMOG]: [ - [ 1, Moves.TELEPORT ], - [ 1, Moves.SPLASH ], - [ 1, Moves.STORED_POWER ], // Custom + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.SPLASH ], + [ 1, MoveId.STORED_POWER ], // Custom ], [Species.COSMOEM]: [ - [ EVOLVE_MOVE, Moves.COSMIC_POWER ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.SPLASH ], // Previous Stage Move - [ 1, Moves.STORED_POWER ], // Previous Stage Move, Custom + [ EVOLVE_MOVE, MoveId.COSMIC_POWER ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.SPLASH ], // Previous Stage Move + [ 1, MoveId.STORED_POWER ], // Previous Stage Move, Custom ], [Species.SOLGALEO]: [ - [ EVOLVE_MOVE, Moves.SUNSTEEL_STRIKE ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.SPLASH ], // Previous Stage Move - [ 1, Moves.STORED_POWER ], // Previous Stage Move, Custom - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.COSMIC_POWER ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.WAKE_UP_SLAP ], - [ 7, Moves.IRON_HEAD ], - [ 14, Moves.METAL_SOUND ], - [ 21, Moves.ZEN_HEADBUTT ], - [ 28, Moves.FLASH_CANNON ], - [ 35, Moves.MORNING_SUN ], - [ 42, Moves.CRUNCH ], - [ 49, Moves.METAL_BURST ], - [ 56, Moves.WILD_CHARGE ], - [ 63, Moves.SOLAR_BEAM ], - [ 70, Moves.FLARE_BLITZ ], - [ 77, Moves.WIDE_GUARD ], - [ 84, Moves.GIGA_IMPACT ], + [ EVOLVE_MOVE, MoveId.SUNSTEEL_STRIKE ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.SPLASH ], // Previous Stage Move + [ 1, MoveId.STORED_POWER ], // Previous Stage Move, Custom + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.COSMIC_POWER ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.WAKE_UP_SLAP ], + [ 7, MoveId.IRON_HEAD ], + [ 14, MoveId.METAL_SOUND ], + [ 21, MoveId.ZEN_HEADBUTT ], + [ 28, MoveId.FLASH_CANNON ], + [ 35, MoveId.MORNING_SUN ], + [ 42, MoveId.CRUNCH ], + [ 49, MoveId.METAL_BURST ], + [ 56, MoveId.WILD_CHARGE ], + [ 63, MoveId.SOLAR_BEAM ], + [ 70, MoveId.FLARE_BLITZ ], + [ 77, MoveId.WIDE_GUARD ], + [ 84, MoveId.GIGA_IMPACT ], ], [Species.LUNALA]: [ - [ EVOLVE_MOVE, Moves.MOONGEIST_BEAM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.TELEPORT ], - [ 1, Moves.SPLASH ], // Previous Stage Move - [ 1, Moves.STORED_POWER ], // Previous Stage Move, Custom - [ 1, Moves.COSMIC_POWER ], - [ 7, Moves.NIGHT_SHADE ], - [ 14, Moves.CONFUSE_RAY ], - [ 21, Moves.AIR_SLASH ], - [ 28, Moves.SHADOW_BALL ], - [ 35, Moves.MOONLIGHT ], - [ 42, Moves.NIGHT_DAZE ], - [ 49, Moves.MAGIC_COAT ], - [ 56, Moves.MOONBLAST ], - [ 63, Moves.PHANTOM_FORCE ], - [ 70, Moves.DREAM_EATER ], - [ 77, Moves.WIDE_GUARD ], - [ 84, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, MoveId.MOONGEIST_BEAM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.TELEPORT ], + [ 1, MoveId.SPLASH ], // Previous Stage Move + [ 1, MoveId.STORED_POWER ], // Previous Stage Move, Custom + [ 1, MoveId.COSMIC_POWER ], + [ 7, MoveId.NIGHT_SHADE ], + [ 14, MoveId.CONFUSE_RAY ], + [ 21, MoveId.AIR_SLASH ], + [ 28, MoveId.SHADOW_BALL ], + [ 35, MoveId.MOONLIGHT ], + [ 42, MoveId.NIGHT_DAZE ], + [ 49, MoveId.MAGIC_COAT ], + [ 56, MoveId.MOONBLAST ], + [ 63, MoveId.PHANTOM_FORCE ], + [ 70, MoveId.DREAM_EATER ], + [ 77, MoveId.WIDE_GUARD ], + [ 84, MoveId.HYPER_BEAM ], ], [Species.NIHILEGO]: [ - [ 1, Moves.POUND ], - [ 1, Moves.WRAP ], - [ 1, Moves.CONSTRICT ], - [ 5, Moves.ACID ], - [ 10, Moves.TICKLE ], - [ 15, Moves.ACID_SPRAY ], - [ 20, Moves.CLEAR_SMOG ], - [ 25, Moves.GUARD_SPLIT ], - [ 25, Moves.POWER_SPLIT ], - [ 30, Moves.VENOSHOCK ], - [ 35, Moves.HEADBUTT ], - [ 40, Moves.TOXIC_SPIKES ], - [ 45, Moves.VENOM_DRENCH ], - [ 50, Moves.POWER_GEM ], - [ 55, Moves.STEALTH_ROCK ], - [ 60, Moves.MIRROR_COAT ], - [ 65, Moves.WONDER_ROOM ], - [ 70, Moves.HEAD_SMASH ], + [ 1, MoveId.POUND ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.CONSTRICT ], + [ 5, MoveId.ACID ], + [ 10, MoveId.TICKLE ], + [ 15, MoveId.ACID_SPRAY ], + [ 20, MoveId.CLEAR_SMOG ], + [ 25, MoveId.GUARD_SPLIT ], + [ 25, MoveId.POWER_SPLIT ], + [ 30, MoveId.VENOSHOCK ], + [ 35, MoveId.HEADBUTT ], + [ 40, MoveId.TOXIC_SPIKES ], + [ 45, MoveId.VENOM_DRENCH ], + [ 50, MoveId.POWER_GEM ], + [ 55, MoveId.STEALTH_ROCK ], + [ 60, MoveId.MIRROR_COAT ], + [ 65, MoveId.WONDER_ROOM ], + [ 70, MoveId.HEAD_SMASH ], ], [Species.BUZZWOLE]: [ - [ 1, Moves.HARDEN ], - [ 1, Moves.POWER_UP_PUNCH ], - [ 5, Moves.TAUNT ], - [ 10, Moves.FELL_STINGER ], - [ 15, Moves.VITAL_THROW ], - [ 20, Moves.BULK_UP ], - [ 25, Moves.ENDURE ], - [ 30, Moves.REVERSAL ], - [ 35, Moves.MEGA_PUNCH ], - [ 40, Moves.LUNGE ], - [ 45, Moves.FOCUS_ENERGY ], - [ 50, Moves.DYNAMIC_PUNCH ], - [ 55, Moves.COUNTER ], - [ 60, Moves.HAMMER_ARM ], - [ 65, Moves.SUPERPOWER ], - [ 70, Moves.FOCUS_PUNCH ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POWER_UP_PUNCH ], + [ 5, MoveId.TAUNT ], + [ 10, MoveId.FELL_STINGER ], + [ 15, MoveId.VITAL_THROW ], + [ 20, MoveId.BULK_UP ], + [ 25, MoveId.ENDURE ], + [ 30, MoveId.REVERSAL ], + [ 35, MoveId.MEGA_PUNCH ], + [ 40, MoveId.LUNGE ], + [ 45, MoveId.FOCUS_ENERGY ], + [ 50, MoveId.DYNAMIC_PUNCH ], + [ 55, MoveId.COUNTER ], + [ 60, MoveId.HAMMER_ARM ], + [ 65, MoveId.SUPERPOWER ], + [ 70, MoveId.FOCUS_PUNCH ], ], [Species.PHEROMOSA]: [ - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.FEINT ], - [ 5, Moves.LEER ], - [ 10, Moves.QUICK_GUARD ], - [ 15, Moves.BUG_BITE ], - [ 20, Moves.LOW_KICK ], - [ 25, Moves.DOUBLE_KICK ], - [ 30, Moves.TRIPLE_KICK ], - [ 35, Moves.STOMP ], - [ 40, Moves.AGILITY ], - [ 45, Moves.LUNGE ], - [ 50, Moves.BOUNCE ], - [ 55, Moves.SPEED_SWAP ], - [ 60, Moves.BUG_BUZZ ], - [ 65, Moves.QUIVER_DANCE ], - [ 70, Moves.HIGH_JUMP_KICK ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.FEINT ], + [ 5, MoveId.LEER ], + [ 10, MoveId.QUICK_GUARD ], + [ 15, MoveId.BUG_BITE ], + [ 20, MoveId.LOW_KICK ], + [ 25, MoveId.DOUBLE_KICK ], + [ 30, MoveId.TRIPLE_KICK ], + [ 35, MoveId.STOMP ], + [ 40, MoveId.AGILITY ], + [ 45, MoveId.LUNGE ], + [ 50, MoveId.BOUNCE ], + [ 55, MoveId.SPEED_SWAP ], + [ 60, MoveId.BUG_BUZZ ], + [ 65, MoveId.QUIVER_DANCE ], + [ 70, MoveId.HIGH_JUMP_KICK ], ], [Species.XURKITREE]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.THUNDER_SHOCK ], - [ 5, Moves.CHARGE ], - [ 10, Moves.THUNDER_WAVE ], - [ 15, Moves.INGRAIN ], - [ 20, Moves.SPARK ], - [ 25, Moves.SHOCK_WAVE ], - [ 30, Moves.HYPNOSIS ], - [ 35, Moves.EERIE_IMPULSE ], - [ 40, Moves.THUNDER_PUNCH ], - [ 45, Moves.DISCHARGE ], - [ 50, Moves.MAGNET_RISE ], - [ 55, Moves.THUNDERBOLT ], - [ 60, Moves.ELECTRIC_TERRAIN ], - [ 65, Moves.POWER_WHIP ], - [ 70, Moves.ZAP_CANNON ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 5, MoveId.CHARGE ], + [ 10, MoveId.THUNDER_WAVE ], + [ 15, MoveId.INGRAIN ], + [ 20, MoveId.SPARK ], + [ 25, MoveId.SHOCK_WAVE ], + [ 30, MoveId.HYPNOSIS ], + [ 35, MoveId.EERIE_IMPULSE ], + [ 40, MoveId.THUNDER_PUNCH ], + [ 45, MoveId.DISCHARGE ], + [ 50, MoveId.MAGNET_RISE ], + [ 55, MoveId.THUNDERBOLT ], + [ 60, MoveId.ELECTRIC_TERRAIN ], + [ 65, MoveId.POWER_WHIP ], + [ 70, MoveId.ZAP_CANNON ], ], [Species.CELESTEELA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 5, Moves.HARDEN ], - [ 10, Moves.WIDE_GUARD ], - [ 15, Moves.MEGA_DRAIN ], - [ 20, Moves.SMACK_DOWN ], - [ 25, Moves.INGRAIN ], - [ 30, Moves.AUTOTOMIZE ], - [ 35, Moves.GIGA_DRAIN ], - [ 40, Moves.FLASH_CANNON ], - [ 45, Moves.METAL_SOUND ], - [ 50, Moves.IRON_DEFENSE ], - [ 55, Moves.LEECH_SEED ], - [ 60, Moves.HEAVY_SLAM ], - [ 65, Moves.DOUBLE_EDGE ], - [ 70, Moves.SKULL_BASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ABSORB ], + [ 5, MoveId.HARDEN ], + [ 10, MoveId.WIDE_GUARD ], + [ 15, MoveId.MEGA_DRAIN ], + [ 20, MoveId.SMACK_DOWN ], + [ 25, MoveId.INGRAIN ], + [ 30, MoveId.AUTOTOMIZE ], + [ 35, MoveId.GIGA_DRAIN ], + [ 40, MoveId.FLASH_CANNON ], + [ 45, MoveId.METAL_SOUND ], + [ 50, MoveId.IRON_DEFENSE ], + [ 55, MoveId.LEECH_SEED ], + [ 60, MoveId.HEAVY_SLAM ], + [ 65, MoveId.DOUBLE_EDGE ], + [ 70, MoveId.SKULL_BASH ], ], [Species.KARTANA]: [ - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.VACUUM_WAVE ], - [ 5, Moves.RAZOR_LEAF ], - [ 10, Moves.FALSE_SWIPE ], - [ 15, Moves.CUT ], - [ 20, Moves.AIR_CUTTER ], - [ 25, Moves.AERIAL_ACE ], - [ 30, Moves.DETECT ], - [ 35, Moves.NIGHT_SLASH ], - [ 40, Moves.SYNTHESIS ], - [ 45, Moves.LASER_FOCUS ], - [ 50, Moves.DEFOG ], - [ 55, Moves.LEAF_BLADE ], - [ 60, Moves.SACRED_SWORD ], - [ 65, Moves.SWORDS_DANCE ], - [ 70, Moves.GUILLOTINE ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.VACUUM_WAVE ], + [ 5, MoveId.RAZOR_LEAF ], + [ 10, MoveId.FALSE_SWIPE ], + [ 15, MoveId.CUT ], + [ 20, MoveId.AIR_CUTTER ], + [ 25, MoveId.AERIAL_ACE ], + [ 30, MoveId.DETECT ], + [ 35, MoveId.NIGHT_SLASH ], + [ 40, MoveId.SYNTHESIS ], + [ 45, MoveId.LASER_FOCUS ], + [ 50, MoveId.DEFOG ], + [ 55, MoveId.LEAF_BLADE ], + [ 60, MoveId.SACRED_SWORD ], + [ 65, MoveId.SWORDS_DANCE ], + [ 70, MoveId.GUILLOTINE ], ], [Species.GUZZLORD]: [ - [ 1, Moves.BITE ], - [ 1, Moves.DRAGON_TAIL ], - [ 5, Moves.STOCKPILE ], - [ 5, Moves.SWALLOW ], - [ 10, Moves.KNOCK_OFF ], - [ 15, Moves.STOMP ], - [ 20, Moves.STOMPING_TANTRUM ], - [ 25, Moves.WIDE_GUARD ], - [ 30, Moves.CRUNCH ], - [ 35, Moves.BODY_SLAM ], - [ 40, Moves.GASTRO_ACID ], - [ 45, Moves.HAMMER_ARM ], - [ 50, Moves.HEAVY_SLAM ], - [ 55, Moves.DRAGON_RUSH ], - [ 60, Moves.BELCH ], - [ 65, Moves.THRASH ], - [ 70, Moves.GIGA_IMPACT ], + [ 1, MoveId.BITE ], + [ 1, MoveId.DRAGON_TAIL ], + [ 5, MoveId.STOCKPILE ], + [ 5, MoveId.SWALLOW ], + [ 10, MoveId.KNOCK_OFF ], + [ 15, MoveId.STOMP ], + [ 20, MoveId.STOMPING_TANTRUM ], + [ 25, MoveId.WIDE_GUARD ], + [ 30, MoveId.CRUNCH ], + [ 35, MoveId.BODY_SLAM ], + [ 40, MoveId.GASTRO_ACID ], + [ 45, MoveId.HAMMER_ARM ], + [ 50, MoveId.HEAVY_SLAM ], + [ 55, MoveId.DRAGON_RUSH ], + [ 60, MoveId.BELCH ], + [ 65, MoveId.THRASH ], + [ 70, MoveId.GIGA_IMPACT ], ], [Species.NECROZMA]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.CHARGE_BEAM ], - [ 1, Moves.MIRROR_SHOT ], - [ 8, Moves.STEALTH_ROCK ], - [ 16, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 32, Moves.PSYCHO_CUT ], - [ 40, Moves.STORED_POWER ], - [ 48, Moves.ROCK_BLAST ], - [ 56, Moves.IRON_DEFENSE ], - [ 64, Moves.POWER_GEM ], - [ 72, Moves.PHOTON_GEYSER ], - [ 80, Moves.AUTOTOMIZE ], - [ 88, Moves.PRISMATIC_LASER ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.CHARGE_BEAM ], + [ 1, MoveId.MIRROR_SHOT ], + [ 8, MoveId.STEALTH_ROCK ], + [ 16, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 32, MoveId.PSYCHO_CUT ], + [ 40, MoveId.STORED_POWER ], + [ 48, MoveId.ROCK_BLAST ], + [ 56, MoveId.IRON_DEFENSE ], + [ 64, MoveId.POWER_GEM ], + [ 72, MoveId.PHOTON_GEYSER ], + [ 80, MoveId.AUTOTOMIZE ], + [ 88, MoveId.PRISMATIC_LASER ], ], [Species.MAGEARNA]: [ - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.GYRO_BALL ], - [ 1, Moves.DISARMING_VOICE ], // Custom - [ 1, Moves.CRAFTY_SHIELD ], - [ 1, Moves.GEAR_UP ], - [ 6, Moves.DEFENSE_CURL ], - [ 12, Moves.ROLLOUT ], - [ 18, Moves.IRON_DEFENSE ], - [ 24, Moves.MAGNETIC_FLUX ], - [ 30, Moves.PSYBEAM ], - [ 36, Moves.AURORA_BEAM ], - [ 42, Moves.LOCK_ON ], - [ 48, Moves.SHIFT_GEAR ], - [ 54, Moves.TRICK ], - [ 60, Moves.IRON_HEAD ], - [ 66, Moves.AURA_SPHERE ], - [ 72, Moves.FLASH_CANNON ], - [ 78, Moves.PAIN_SPLIT ], - [ 84, Moves.ZAP_CANNON ], - [ 90, Moves.FLEUR_CANNON ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.GYRO_BALL ], + [ 1, MoveId.DISARMING_VOICE ], // Custom + [ 1, MoveId.CRAFTY_SHIELD ], + [ 1, MoveId.GEAR_UP ], + [ 6, MoveId.DEFENSE_CURL ], + [ 12, MoveId.ROLLOUT ], + [ 18, MoveId.IRON_DEFENSE ], + [ 24, MoveId.MAGNETIC_FLUX ], + [ 30, MoveId.PSYBEAM ], + [ 36, MoveId.AURORA_BEAM ], + [ 42, MoveId.LOCK_ON ], + [ 48, MoveId.SHIFT_GEAR ], + [ 54, MoveId.TRICK ], + [ 60, MoveId.IRON_HEAD ], + [ 66, MoveId.AURA_SPHERE ], + [ 72, MoveId.FLASH_CANNON ], + [ 78, MoveId.PAIN_SPLIT ], + [ 84, MoveId.ZAP_CANNON ], + [ 90, MoveId.FLEUR_CANNON ], ], [Species.MARSHADOW]: [ - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.ICE_PUNCH ], - [ 1, Moves.THUNDER_PUNCH ], - [ 1, Moves.COUNTER ], - [ 1, Moves.FEINT ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.PURSUIT ], - [ 9, Moves.ROLE_PLAY ], - [ 18, Moves.SHADOW_PUNCH ], - [ 27, Moves.FORCE_PALM ], - [ 36, Moves.ASSURANCE ], - [ 45, Moves.SUCKER_PUNCH ], - [ 54, Moves.DRAIN_PUNCH ], - [ 63, Moves.PSYCH_UP ], - [ 72, Moves.SPECTRAL_THIEF ], - [ 81, Moves.LASER_FOCUS ], - [ 90, Moves.ENDEAVOR ], - [ 99, Moves.CLOSE_COMBAT ], + [ 1, MoveId.FIRE_PUNCH ], + [ 1, MoveId.ICE_PUNCH ], + [ 1, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.COUNTER ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 1, MoveId.PURSUIT ], + [ 9, MoveId.ROLE_PLAY ], + [ 18, MoveId.SHADOW_PUNCH ], + [ 27, MoveId.FORCE_PALM ], + [ 36, MoveId.ASSURANCE ], + [ 45, MoveId.SUCKER_PUNCH ], + [ 54, MoveId.DRAIN_PUNCH ], + [ 63, MoveId.PSYCH_UP ], + [ 72, MoveId.SPECTRAL_THIEF ], + [ 81, MoveId.LASER_FOCUS ], + [ 90, MoveId.ENDEAVOR ], + [ 99, MoveId.CLOSE_COMBAT ], ], [Species.POIPOLE]: [ - [ RELEARN_MOVE, Moves.DRAGON_PULSE ], // Custom, made relearn - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.PECK ], - [ 1, Moves.HELPING_HAND ], - [ 7, Moves.FURY_ATTACK ], - [ 14, Moves.FELL_STINGER ], - [ 21, Moves.CHARM ], - [ 28, Moves.VENOSHOCK ], - [ 35, Moves.VENOM_DRENCH ], - [ 42, Moves.NASTY_PLOT ], - [ 49, Moves.POISON_JAB ], - [ 56, Moves.GASTRO_ACID ], - [ 63, Moves.TOXIC ], + [ RELEARN_MOVE, MoveId.DRAGON_PULSE ], // Custom, made relearn + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.PECK ], + [ 1, MoveId.HELPING_HAND ], + [ 7, MoveId.FURY_ATTACK ], + [ 14, MoveId.FELL_STINGER ], + [ 21, MoveId.CHARM ], + [ 28, MoveId.VENOSHOCK ], + [ 35, MoveId.VENOM_DRENCH ], + [ 42, MoveId.NASTY_PLOT ], + [ 49, MoveId.POISON_JAB ], + [ 56, MoveId.GASTRO_ACID ], + [ 63, MoveId.TOXIC ], ], [Species.NAGANADEL]: [ - [ EVOLVE_MOVE, Moves.AIR_CUTTER ], - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.PECK ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.DRAGON_PULSE ], - [ 7, Moves.FURY_ATTACK ], - [ 14, Moves.FELL_STINGER ], - [ 21, Moves.CHARM ], - [ 28, Moves.VENOSHOCK ], - [ 35, Moves.VENOM_DRENCH ], - [ 42, Moves.NASTY_PLOT ], - [ 49, Moves.POISON_JAB ], - [ 56, Moves.GASTRO_ACID ], - [ 63, Moves.TOXIC ], - [ 70, Moves.DRAGON_RUSH ], + [ EVOLVE_MOVE, MoveId.AIR_CUTTER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.PECK ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.DRAGON_PULSE ], + [ 7, MoveId.FURY_ATTACK ], + [ 14, MoveId.FELL_STINGER ], + [ 21, MoveId.CHARM ], + [ 28, MoveId.VENOSHOCK ], + [ 35, MoveId.VENOM_DRENCH ], + [ 42, MoveId.NASTY_PLOT ], + [ 49, MoveId.POISON_JAB ], + [ 56, MoveId.GASTRO_ACID ], + [ 63, MoveId.TOXIC ], + [ 70, MoveId.DRAGON_RUSH ], ], [Species.STAKATAKA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.ROCK_THROW ], - [ 10, Moves.PROTECT ], - [ 15, Moves.STOMP ], - [ 20, Moves.BLOCK ], - [ 25, Moves.ROCK_SLIDE ], - [ 30, Moves.WIDE_GUARD ], - [ 35, Moves.AUTOTOMIZE ], - [ 40, Moves.ROCK_BLAST ], - [ 45, Moves.MAGNET_RISE ], - [ 50, Moves.IRON_DEFENSE ], - [ 55, Moves.IRON_HEAD ], - [ 60, Moves.TAKE_DOWN ], - [ 65, Moves.STEALTH_ROCK ], - [ 70, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.ROCK_THROW ], + [ 10, MoveId.PROTECT ], + [ 15, MoveId.STOMP ], + [ 20, MoveId.BLOCK ], + [ 25, MoveId.ROCK_SLIDE ], + [ 30, MoveId.WIDE_GUARD ], + [ 35, MoveId.AUTOTOMIZE ], + [ 40, MoveId.ROCK_BLAST ], + [ 45, MoveId.MAGNET_RISE ], + [ 50, MoveId.IRON_DEFENSE ], + [ 55, MoveId.IRON_HEAD ], + [ 60, MoveId.TAKE_DOWN ], + [ 65, MoveId.STEALTH_ROCK ], + [ 70, MoveId.DOUBLE_EDGE ], ], [Species.BLACEPHALON]: [ - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.LIGHT_SCREEN ], - [ 10, Moves.EMBER ], - [ 15, Moves.NIGHT_SHADE ], - [ 20, Moves.CONFUSE_RAY ], - [ 25, Moves.MAGIC_COAT ], - [ 30, Moves.INCINERATE ], - [ 35, Moves.HYPNOSIS ], - [ 40, Moves.MYSTICAL_FIRE ], - [ 45, Moves.SHADOW_BALL ], - [ 50, Moves.CALM_MIND ], - [ 55, Moves.WILL_O_WISP ], - [ 60, Moves.TRICK ], - [ 65, Moves.FIRE_BLAST ], - [ 70, Moves.MIND_BLOWN ], + [ 1, MoveId.FIRE_SPIN ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.LIGHT_SCREEN ], + [ 10, MoveId.EMBER ], + [ 15, MoveId.NIGHT_SHADE ], + [ 20, MoveId.CONFUSE_RAY ], + [ 25, MoveId.MAGIC_COAT ], + [ 30, MoveId.INCINERATE ], + [ 35, MoveId.HYPNOSIS ], + [ 40, MoveId.MYSTICAL_FIRE ], + [ 45, MoveId.SHADOW_BALL ], + [ 50, MoveId.CALM_MIND ], + [ 55, MoveId.WILL_O_WISP ], + [ 60, MoveId.TRICK ], + [ 65, MoveId.FIRE_BLAST ], + [ 70, MoveId.MIND_BLOWN ], ], [Species.ZERAORA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SPARK ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.SNARL ], - [ 1, Moves.POWER_UP_PUNCH ], - [ 8, Moves.FURY_SWIPES ], - [ 16, Moves.QUICK_GUARD ], - [ 24, Moves.SLASH ], - [ 32, Moves.VOLT_SWITCH ], - [ 40, Moves.CHARGE ], - [ 48, Moves.THUNDER_PUNCH ], - [ 56, Moves.HONE_CLAWS ], - [ 64, Moves.DISCHARGE ], - [ 72, Moves.WILD_CHARGE ], - [ 80, Moves.AGILITY ], - [ 88, Moves.PLASMA_FISTS ], - [ 96, Moves.CLOSE_COMBAT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SPARK ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.SNARL ], + [ 1, MoveId.POWER_UP_PUNCH ], + [ 8, MoveId.FURY_SWIPES ], + [ 16, MoveId.QUICK_GUARD ], + [ 24, MoveId.SLASH ], + [ 32, MoveId.VOLT_SWITCH ], + [ 40, MoveId.CHARGE ], + [ 48, MoveId.THUNDER_PUNCH ], + [ 56, MoveId.HONE_CLAWS ], + [ 64, MoveId.DISCHARGE ], + [ 72, MoveId.WILD_CHARGE ], + [ 80, MoveId.AGILITY ], + [ 88, MoveId.PLASMA_FISTS ], + [ 96, MoveId.CLOSE_COMBAT ], ], [Species.MELTAN]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.HARDEN ], - [ 8, Moves.TAIL_WHIP ], - [ 16, Moves.HEADBUTT ], - [ 24, Moves.THUNDER_WAVE ], - [ 32, Moves.ACID_ARMOR ], - [ 40, Moves.FLASH_CANNON ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.HARDEN ], + [ 8, MoveId.TAIL_WHIP ], + [ 16, MoveId.HEADBUTT ], + [ 24, MoveId.THUNDER_WAVE ], + [ 32, MoveId.ACID_ARMOR ], + [ 40, MoveId.FLASH_CANNON ], ], [Species.MELMETAL]: [ - [ EVOLVE_MOVE, Moves.THUNDER_PUNCH ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.HARDEN ], - [ 24, Moves.THUNDER_WAVE ], - [ 32, Moves.ACID_ARMOR ], - [ 40, Moves.FLASH_CANNON ], - [ 48, Moves.MEGA_PUNCH ], - [ 56, Moves.PROTECT ], - [ 64, Moves.DISCHARGE ], - [ 72, Moves.DYNAMIC_PUNCH ], - [ 80, Moves.SUPERPOWER ], - [ 88, Moves.DOUBLE_IRON_BASH ], - [ 96, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, MoveId.THUNDER_PUNCH ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.HARDEN ], + [ 24, MoveId.THUNDER_WAVE ], + [ 32, MoveId.ACID_ARMOR ], + [ 40, MoveId.FLASH_CANNON ], + [ 48, MoveId.MEGA_PUNCH ], + [ 56, MoveId.PROTECT ], + [ 64, MoveId.DISCHARGE ], + [ 72, MoveId.DYNAMIC_PUNCH ], + [ 80, MoveId.SUPERPOWER ], + [ 88, MoveId.DOUBLE_IRON_BASH ], + [ 96, MoveId.HYPER_BEAM ], ], [Species.GROOKEY]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 5, Moves.BRANCH_POKE ], // Custom, moved from 6 to 5 - [ 8, Moves.TAUNT ], - [ 12, Moves.RAZOR_LEAF ], - [ 17, Moves.SCREECH ], - [ 20, Moves.KNOCK_OFF ], - [ 24, Moves.SLAM ], - [ 28, Moves.UPROAR ], - [ 32, Moves.WOOD_HAMMER ], - [ 36, Moves.ENDEAVOR ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.BRANCH_POKE ], // Custom, moved from 6 to 5 + [ 8, MoveId.TAUNT ], + [ 12, MoveId.RAZOR_LEAF ], + [ 17, MoveId.SCREECH ], + [ 20, MoveId.KNOCK_OFF ], + [ 24, MoveId.SLAM ], + [ 28, MoveId.UPROAR ], + [ 32, MoveId.WOOD_HAMMER ], + [ 36, MoveId.ENDEAVOR ], ], [Species.THWACKEY]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.TAUNT ], - [ 1, Moves.BRANCH_POKE ], - [ 12, Moves.RAZOR_LEAF ], - [ 19, Moves.SCREECH ], - [ 24, Moves.KNOCK_OFF ], - [ 30, Moves.SLAM ], - [ 36, Moves.UPROAR ], - [ 42, Moves.WOOD_HAMMER ], - [ 48, Moves.ENDEAVOR ], + [ EVOLVE_MOVE, MoveId.DOUBLE_HIT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.BRANCH_POKE ], + [ 12, MoveId.RAZOR_LEAF ], + [ 19, MoveId.SCREECH ], + [ 24, MoveId.KNOCK_OFF ], + [ 30, MoveId.SLAM ], + [ 36, MoveId.UPROAR ], + [ 42, MoveId.WOOD_HAMMER ], + [ 48, MoveId.ENDEAVOR ], ], [Species.RILLABOOM]: [ - [ EVOLVE_MOVE, Moves.DRUM_BEATING ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.TAUNT ], - [ 1, Moves.DOUBLE_HIT ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.GRASSY_TERRAIN ], - [ 1, Moves.BRANCH_POKE ], - [ 12, Moves.RAZOR_LEAF ], - [ 19, Moves.SCREECH ], - [ 24, Moves.KNOCK_OFF ], - [ 30, Moves.SLAM ], - [ 38, Moves.UPROAR ], - [ 46, Moves.WOOD_HAMMER ], - [ 54, Moves.ENDEAVOR ], - [ 62, Moves.BOOMBURST ], + [ EVOLVE_MOVE, MoveId.DRUM_BEATING ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.DOUBLE_HIT ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.GRASSY_TERRAIN ], + [ 1, MoveId.BRANCH_POKE ], + [ 12, MoveId.RAZOR_LEAF ], + [ 19, MoveId.SCREECH ], + [ 24, MoveId.KNOCK_OFF ], + [ 30, MoveId.SLAM ], + [ 38, MoveId.UPROAR ], + [ 46, MoveId.WOOD_HAMMER ], + [ 54, MoveId.ENDEAVOR ], + [ 62, MoveId.BOOMBURST ], ], [Species.SCORBUNNY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.EMBER ], // Custom, moved from 6 to 5 - [ 8, Moves.QUICK_ATTACK ], - [ 12, Moves.DOUBLE_KICK ], - [ 17, Moves.FLAME_CHARGE ], - [ 20, Moves.AGILITY ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.COUNTER ], - [ 32, Moves.BOUNCE ], - [ 36, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.EMBER ], // Custom, moved from 6 to 5 + [ 8, MoveId.QUICK_ATTACK ], + [ 12, MoveId.DOUBLE_KICK ], + [ 17, MoveId.FLAME_CHARGE ], + [ 20, MoveId.AGILITY ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.COUNTER ], + [ 32, MoveId.BOUNCE ], + [ 36, MoveId.DOUBLE_EDGE ], ], [Species.RABOOT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.QUICK_ATTACK ], - [ 12, Moves.DOUBLE_KICK ], - [ 19, Moves.FLAME_CHARGE ], - [ 24, Moves.AGILITY ], - [ 30, Moves.HEADBUTT ], - [ 36, Moves.COUNTER ], - [ 42, Moves.BOUNCE ], - [ 48, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 12, MoveId.DOUBLE_KICK ], + [ 19, MoveId.FLAME_CHARGE ], + [ 24, MoveId.AGILITY ], + [ 30, MoveId.HEADBUTT ], + [ 36, MoveId.COUNTER ], + [ 42, MoveId.BOUNCE ], + [ 48, MoveId.DOUBLE_EDGE ], ], [Species.CINDERACE]: [ - [ EVOLVE_MOVE, Moves.PYRO_BALL ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.EMBER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FEINT ], - [ 12, Moves.DOUBLE_KICK ], - [ 19, Moves.FLAME_CHARGE ], - [ 24, Moves.AGILITY ], - [ 30, Moves.HEADBUTT ], - [ 38, Moves.COUNTER ], - [ 46, Moves.BOUNCE ], - [ 54, Moves.DOUBLE_EDGE ], - [ 62, Moves.COURT_CHANGE ], + [ EVOLVE_MOVE, MoveId.PYRO_BALL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FEINT ], + [ 12, MoveId.DOUBLE_KICK ], + [ 19, MoveId.FLAME_CHARGE ], + [ 24, MoveId.AGILITY ], + [ 30, MoveId.HEADBUTT ], + [ 38, MoveId.COUNTER ], + [ 46, MoveId.BOUNCE ], + [ 54, MoveId.DOUBLE_EDGE ], + [ 62, MoveId.COURT_CHANGE ], ], [Species.SOBBLE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 5, Moves.WATER_GUN ], // Custom, moved from 6 to 5 - [ 8, Moves.BIND ], - [ 12, Moves.WATER_PULSE ], - [ 17, Moves.TEARFUL_LOOK ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.U_TURN ], - [ 28, Moves.LIQUIDATION ], - [ 32, Moves.SOAK ], - [ 36, Moves.RAIN_DANCE ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.WATER_GUN ], // Custom, moved from 6 to 5 + [ 8, MoveId.BIND ], + [ 12, MoveId.WATER_PULSE ], + [ 17, MoveId.TEARFUL_LOOK ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.U_TURN ], + [ 28, MoveId.LIQUIDATION ], + [ 32, MoveId.SOAK ], + [ 36, MoveId.RAIN_DANCE ], ], [Species.DRIZZILE]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BIND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 12, Moves.WATER_PULSE ], - [ 19, Moves.TEARFUL_LOOK ], - [ 24, Moves.SUCKER_PUNCH ], - [ 30, Moves.U_TURN ], - [ 36, Moves.LIQUIDATION ], - [ 42, Moves.SOAK ], - [ 48, Moves.RAIN_DANCE ], + [ 1, MoveId.POUND ], + [ 1, MoveId.BIND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 12, MoveId.WATER_PULSE ], + [ 19, MoveId.TEARFUL_LOOK ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.U_TURN ], + [ 36, MoveId.LIQUIDATION ], + [ 42, MoveId.SOAK ], + [ 48, MoveId.RAIN_DANCE ], ], [Species.INTELEON]: [ - [ EVOLVE_MOVE, Moves.SNIPE_SHOT ], - [ 1, Moves.POUND ], - [ 1, Moves.BIND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ACROBATICS ], - [ 12, Moves.WATER_PULSE ], - [ 19, Moves.TEARFUL_LOOK ], - [ 24, Moves.SUCKER_PUNCH ], - [ 30, Moves.U_TURN ], - [ 38, Moves.LIQUIDATION ], - [ 46, Moves.SOAK ], - [ 54, Moves.RAIN_DANCE ], - [ 62, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.SNIPE_SHOT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.BIND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ACROBATICS ], + [ 12, MoveId.WATER_PULSE ], + [ 19, MoveId.TEARFUL_LOOK ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.U_TURN ], + [ 38, MoveId.LIQUIDATION ], + [ 46, MoveId.SOAK ], + [ 54, MoveId.RAIN_DANCE ], + [ 62, MoveId.HYDRO_PUMP ], ], [Species.SKWOVET]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.BITE ], - [ 10, Moves.STUFF_CHEEKS ], - [ 15, Moves.STOCKPILE ], - [ 15, Moves.SPIT_UP ], - [ 15, Moves.SWALLOW ], - [ 20, Moves.BODY_SLAM ], - [ 25, Moves.REST ], - [ 30, Moves.COUNTER ], - [ 35, Moves.BULLET_SEED ], - [ 40, Moves.SUPER_FANG ], - [ 45, Moves.BELCH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.BITE ], + [ 10, MoveId.STUFF_CHEEKS ], + [ 15, MoveId.STOCKPILE ], + [ 15, MoveId.SPIT_UP ], + [ 15, MoveId.SWALLOW ], + [ 20, MoveId.BODY_SLAM ], + [ 25, MoveId.REST ], + [ 30, MoveId.COUNTER ], + [ 35, MoveId.BULLET_SEED ], + [ 40, MoveId.SUPER_FANG ], + [ 45, MoveId.BELCH ], ], [Species.GREEDENT]: [ - [ EVOLVE_MOVE, Moves.COVET ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.STUFF_CHEEKS ], - [ 15, Moves.STOCKPILE ], - [ 15, Moves.SPIT_UP ], - [ 15, Moves.SWALLOW ], - [ 20, Moves.BODY_SLAM ], - [ 27, Moves.REST ], - [ 34, Moves.COUNTER ], - [ 41, Moves.BULLET_SEED ], - [ 48, Moves.SUPER_FANG ], - [ 55, Moves.BELCH ], + [ EVOLVE_MOVE, MoveId.COVET ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.STUFF_CHEEKS ], + [ 15, MoveId.STOCKPILE ], + [ 15, MoveId.SPIT_UP ], + [ 15, MoveId.SWALLOW ], + [ 20, MoveId.BODY_SLAM ], + [ 27, MoveId.REST ], + [ 34, MoveId.COUNTER ], + [ 41, MoveId.BULLET_SEED ], + [ 48, MoveId.SUPER_FANG ], + [ 55, MoveId.BELCH ], ], [Species.ROOKIDEE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 4, Moves.POWER_TRIP ], - [ 8, Moves.HONE_CLAWS ], - [ 12, Moves.FURY_ATTACK ], - [ 16, Moves.PLUCK ], - [ 20, Moves.TAUNT ], - [ 24, Moves.SCARY_FACE ], - [ 28, Moves.DRILL_PECK ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.BRAVE_BIRD ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 4, MoveId.POWER_TRIP ], + [ 8, MoveId.HONE_CLAWS ], + [ 12, MoveId.FURY_ATTACK ], + [ 16, MoveId.PLUCK ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.SCARY_FACE ], + [ 28, MoveId.DRILL_PECK ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.BRAVE_BIRD ], ], [Species.CORVISQUIRE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.POWER_TRIP ], - [ 12, Moves.FURY_ATTACK ], - [ 16, Moves.PLUCK ], - [ 22, Moves.TAUNT ], - [ 28, Moves.SCARY_FACE ], - [ 34, Moves.DRILL_PECK ], - [ 40, Moves.SWAGGER ], - [ 46, Moves.BRAVE_BIRD ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.POWER_TRIP ], + [ 12, MoveId.FURY_ATTACK ], + [ 16, MoveId.PLUCK ], + [ 22, MoveId.TAUNT ], + [ 28, MoveId.SCARY_FACE ], + [ 34, MoveId.DRILL_PECK ], + [ 40, MoveId.SWAGGER ], + [ 46, MoveId.BRAVE_BIRD ], ], [Species.CORVIKNIGHT]: [ - [ EVOLVE_MOVE, Moves.STEEL_WING ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.SCREECH ], - [ 1, Moves.METAL_SOUND ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.HONE_CLAWS ], - [ 1, Moves.POWER_TRIP ], - [ 12, Moves.FURY_ATTACK ], - [ 16, Moves.PLUCK ], - [ 22, Moves.TAUNT ], - [ 28, Moves.SCARY_FACE ], - [ 34, Moves.DRILL_PECK ], - [ 42, Moves.SWAGGER ], - [ 50, Moves.BRAVE_BIRD ], + [ EVOLVE_MOVE, MoveId.STEEL_WING ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.SCREECH ], + [ 1, MoveId.METAL_SOUND ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.HONE_CLAWS ], + [ 1, MoveId.POWER_TRIP ], + [ 12, MoveId.FURY_ATTACK ], + [ 16, MoveId.PLUCK ], + [ 22, MoveId.TAUNT ], + [ 28, MoveId.SCARY_FACE ], + [ 34, MoveId.DRILL_PECK ], + [ 42, MoveId.SWAGGER ], + [ 50, MoveId.BRAVE_BIRD ], ], [Species.BLIPBUG]: [ - [ 1, Moves.STRUGGLE_BUG ], + [ 1, MoveId.STRUGGLE_BUG ], ], [Species.DOTTLER]: [ - [ EVOLVE_MOVE, Moves.CONFUSION ], - [ EVOLVE_MOVE, Moves.LIGHT_SCREEN ], - [ EVOLVE_MOVE, Moves.REFLECT ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.REFLECT ], - [ 1, Moves.STRUGGLE_BUG ], + [ EVOLVE_MOVE, MoveId.CONFUSION ], + [ EVOLVE_MOVE, MoveId.LIGHT_SCREEN ], + [ EVOLVE_MOVE, MoveId.REFLECT ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.STRUGGLE_BUG ], ], [Species.ORBEETLE]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.REFLECT ], - [ 1, Moves.STRUGGLE_BUG ], - [ 4, Moves.CONFUSE_RAY ], - [ 8, Moves.MAGIC_COAT ], - [ 12, Moves.AGILITY ], - [ 16, Moves.PSYBEAM ], - [ 20, Moves.HYPNOSIS ], - [ 24, Moves.ALLY_SWITCH ], - [ 28, Moves.BUG_BUZZ ], - [ 32, Moves.MIRROR_COAT ], - [ 36, Moves.PSYCHIC ], - [ 40, Moves.AFTER_YOU ], - [ 44, Moves.CALM_MIND ], - [ 48, Moves.PSYCHIC_TERRAIN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 4, MoveId.CONFUSE_RAY ], + [ 8, MoveId.MAGIC_COAT ], + [ 12, MoveId.AGILITY ], + [ 16, MoveId.PSYBEAM ], + [ 20, MoveId.HYPNOSIS ], + [ 24, MoveId.ALLY_SWITCH ], + [ 28, MoveId.BUG_BUZZ ], + [ 32, MoveId.MIRROR_COAT ], + [ 36, MoveId.PSYCHIC ], + [ 40, MoveId.AFTER_YOU ], + [ 44, MoveId.CALM_MIND ], + [ 48, MoveId.PSYCHIC_TERRAIN ], ], [Species.NICKIT]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.BEAT_UP ], - [ 8, Moves.HONE_CLAWS ], - [ 12, Moves.SNARL ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.NASTY_PLOT ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.NIGHT_SLASH ], - [ 32, Moves.TAIL_SLAP ], - [ 36, Moves.FOUL_PLAY ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.BEAT_UP ], + [ 8, MoveId.HONE_CLAWS ], + [ 12, MoveId.SNARL ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.NASTY_PLOT ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.NIGHT_SLASH ], + [ 32, MoveId.TAIL_SLAP ], + [ 36, MoveId.FOUL_PLAY ], ], [Species.THIEVUL]: [ - [ EVOLVE_MOVE, Moves.THIEF ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.BEAT_UP ], - [ 1, Moves.HONE_CLAWS ], - [ 12, Moves.SNARL ], - [ 16, Moves.ASSURANCE ], - [ 22, Moves.NASTY_PLOT ], - [ 28, Moves.SUCKER_PUNCH ], - [ 34, Moves.NIGHT_SLASH ], - [ 40, Moves.TAIL_SLAP ], - [ 46, Moves.FOUL_PLAY ], - [ 52, Moves.PARTING_SHOT ], + [ EVOLVE_MOVE, MoveId.THIEF ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.BEAT_UP ], + [ 1, MoveId.HONE_CLAWS ], + [ 12, MoveId.SNARL ], + [ 16, MoveId.ASSURANCE ], + [ 22, MoveId.NASTY_PLOT ], + [ 28, MoveId.SUCKER_PUNCH ], + [ 34, MoveId.NIGHT_SLASH ], + [ 40, MoveId.TAIL_SLAP ], + [ 46, MoveId.FOUL_PLAY ], + [ 52, MoveId.PARTING_SHOT ], ], [Species.GOSSIFLEUR]: [ - [ 1, Moves.SING ], - [ 1, Moves.LEAFAGE ], - [ 4, Moves.RAPID_SPIN ], - [ 8, Moves.SWEET_SCENT ], - [ 12, Moves.RAZOR_LEAF ], - [ 16, Moves.ROUND ], - [ 21, Moves.LEAF_TORNADO ], - [ 24, Moves.SYNTHESIS ], - [ 28, Moves.HYPER_VOICE ], - [ 32, Moves.AROMATHERAPY ], - [ 36, Moves.LEAF_STORM ], + [ 1, MoveId.SING ], + [ 1, MoveId.LEAFAGE ], + [ 4, MoveId.RAPID_SPIN ], + [ 8, MoveId.SWEET_SCENT ], + [ 12, MoveId.RAZOR_LEAF ], + [ 16, MoveId.ROUND ], + [ 21, MoveId.LEAF_TORNADO ], + [ 24, MoveId.SYNTHESIS ], + [ 28, MoveId.HYPER_VOICE ], + [ 32, MoveId.AROMATHERAPY ], + [ 36, MoveId.LEAF_STORM ], ], [Species.ELDEGOSS]: [ - [ EVOLVE_MOVE, Moves.COTTON_SPORE ], - [ 1, Moves.SING ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.LEAFAGE ], - [ 12, Moves.RAZOR_LEAF ], - [ 16, Moves.ROUND ], - [ 23, Moves.LEAF_TORNADO ], - [ 28, Moves.SYNTHESIS ], - [ 34, Moves.HYPER_VOICE ], - [ 40, Moves.AROMATHERAPY ], - [ 46, Moves.LEAF_STORM ], - [ 52, Moves.COTTON_GUARD ], + [ EVOLVE_MOVE, MoveId.COTTON_SPORE ], + [ 1, MoveId.SING ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.LEAFAGE ], + [ 12, MoveId.RAZOR_LEAF ], + [ 16, MoveId.ROUND ], + [ 23, MoveId.LEAF_TORNADO ], + [ 28, MoveId.SYNTHESIS ], + [ 34, MoveId.HYPER_VOICE ], + [ 40, MoveId.AROMATHERAPY ], + [ 46, MoveId.LEAF_STORM ], + [ 52, MoveId.COTTON_GUARD ], ], [Species.WOOLOO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 4, Moves.DEFENSE_CURL ], - [ 8, Moves.COPYCAT ], - [ 12, Moves.GUARD_SPLIT ], - [ 16, Moves.DOUBLE_KICK ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.TAKE_DOWN ], - [ 28, Moves.GUARD_SWAP ], - [ 32, Moves.REVERSAL ], - [ 36, Moves.COTTON_GUARD ], - [ 40, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 4, MoveId.DEFENSE_CURL ], + [ 8, MoveId.COPYCAT ], + [ 12, MoveId.GUARD_SPLIT ], + [ 16, MoveId.DOUBLE_KICK ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.TAKE_DOWN ], + [ 28, MoveId.GUARD_SWAP ], + [ 32, MoveId.REVERSAL ], + [ 36, MoveId.COTTON_GUARD ], + [ 40, MoveId.DOUBLE_EDGE ], ], [Species.DUBWOOL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.COPYCAT ], - [ 12, Moves.GUARD_SPLIT ], - [ 16, Moves.DOUBLE_KICK ], - [ 21, Moves.HEADBUTT ], - [ 27, Moves.TAKE_DOWN ], - [ 32, Moves.GUARD_SWAP ], - [ 38, Moves.REVERSAL ], - [ 44, Moves.COTTON_GUARD ], - [ 50, Moves.DOUBLE_EDGE ], - [ 56, Moves.LAST_RESORT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.COPYCAT ], + [ 12, MoveId.GUARD_SPLIT ], + [ 16, MoveId.DOUBLE_KICK ], + [ 21, MoveId.HEADBUTT ], + [ 27, MoveId.TAKE_DOWN ], + [ 32, MoveId.GUARD_SWAP ], + [ 38, MoveId.REVERSAL ], + [ 44, MoveId.COTTON_GUARD ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.LAST_RESORT ], ], [Species.CHEWTLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 7, Moves.BITE ], - [ 14, Moves.PROTECT ], - [ 21, Moves.HEADBUTT ], - [ 28, Moves.COUNTER ], - [ 35, Moves.JAW_LOCK ], - [ 42, Moves.LIQUIDATION ], - [ 49, Moves.BODY_SLAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 7, MoveId.BITE ], + [ 14, MoveId.PROTECT ], + [ 21, MoveId.HEADBUTT ], + [ 28, MoveId.COUNTER ], + [ 35, MoveId.JAW_LOCK ], + [ 42, MoveId.LIQUIDATION ], + [ 49, MoveId.BODY_SLAM ], ], [Species.DREDNAW]: [ - [ EVOLVE_MOVE, Moves.ROCK_TOMB ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.PROTECT ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.ROCK_POLISH ], - [ 1, Moves.RAZOR_SHELL ], - [ 21, Moves.HEADBUTT ], - [ 30, Moves.COUNTER ], - [ 39, Moves.JAW_LOCK ], - [ 48, Moves.LIQUIDATION ], - [ 57, Moves.BODY_SLAM ], - [ 66, Moves.HEAD_SMASH ], + [ EVOLVE_MOVE, MoveId.ROCK_TOMB ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.ROCK_POLISH ], + [ 1, MoveId.RAZOR_SHELL ], + [ 21, MoveId.HEADBUTT ], + [ 30, MoveId.COUNTER ], + [ 39, MoveId.JAW_LOCK ], + [ 48, MoveId.LIQUIDATION ], + [ 57, MoveId.BODY_SLAM ], + [ 66, MoveId.HEAD_SMASH ], ], [Species.YAMPER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.NUZZLE ], - [ 10, Moves.BITE ], - [ 15, Moves.ROAR ], - [ 20, Moves.SPARK ], - [ 26, Moves.CHARM ], - [ 30, Moves.CRUNCH ], - [ 35, Moves.CHARGE ], - [ 40, Moves.WILD_CHARGE ], - [ 45, Moves.PLAY_ROUGH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.NUZZLE ], + [ 10, MoveId.BITE ], + [ 15, MoveId.ROAR ], + [ 20, MoveId.SPARK ], + [ 26, MoveId.CHARM ], + [ 30, MoveId.CRUNCH ], + [ 35, MoveId.CHARGE ], + [ 40, MoveId.WILD_CHARGE ], + [ 45, MoveId.PLAY_ROUGH ], ], [Species.BOLTUND]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.BITE ], - [ 1, Moves.ELECTRIFY ], - [ 1, Moves.NUZZLE ], - [ 15, Moves.ROAR ], - [ 20, Moves.SPARK ], - [ 28, Moves.CHARM ], - [ 34, Moves.CRUNCH ], - [ 41, Moves.CHARGE ], - [ 48, Moves.WILD_CHARGE ], - [ 55, Moves.PLAY_ROUGH ], - [ 62, Moves.ELECTRIC_TERRAIN ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.ELECTRIFY ], + [ 1, MoveId.NUZZLE ], + [ 15, MoveId.ROAR ], + [ 20, MoveId.SPARK ], + [ 28, MoveId.CHARM ], + [ 34, MoveId.CRUNCH ], + [ 41, MoveId.CHARGE ], + [ 48, MoveId.WILD_CHARGE ], + [ 55, MoveId.PLAY_ROUGH ], + [ 62, MoveId.ELECTRIC_TERRAIN ], ], [Species.ROLYCOLY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 5, Moves.RAPID_SPIN ], - [ 10, Moves.SMACK_DOWN ], - [ 15, Moves.ROCK_POLISH ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.INCINERATE ], - [ 30, Moves.STEALTH_ROCK ], - [ 35, Moves.HEAT_CRASH ], - [ 40, Moves.ROCK_BLAST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 5, MoveId.RAPID_SPIN ], + [ 10, MoveId.SMACK_DOWN ], + [ 15, MoveId.ROCK_POLISH ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.INCINERATE ], + [ 30, MoveId.STEALTH_ROCK ], + [ 35, MoveId.HEAT_CRASH ], + [ 40, MoveId.ROCK_BLAST ], ], [Species.CARKOL]: [ - [ EVOLVE_MOVE, Moves.FLAME_CHARGE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.SMACK_DOWN ], - [ 15, Moves.ROCK_POLISH ], - [ 20, Moves.ANCIENT_POWER ], - [ 27, Moves.INCINERATE ], - [ 35, Moves.STEALTH_ROCK ], - [ 41, Moves.HEAT_CRASH ], - [ 48, Moves.ROCK_BLAST ], - [ 55, Moves.STONE_EDGE ], + [ EVOLVE_MOVE, MoveId.FLAME_CHARGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.SMACK_DOWN ], + [ 15, MoveId.ROCK_POLISH ], + [ 20, MoveId.ANCIENT_POWER ], + [ 27, MoveId.INCINERATE ], + [ 35, MoveId.STEALTH_ROCK ], + [ 41, MoveId.HEAT_CRASH ], + [ 48, MoveId.ROCK_BLAST ], + [ 55, MoveId.STONE_EDGE ], ], [Species.COALOSSAL]: [ - [ EVOLVE_MOVE, Moves.TAR_SHOT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.SMACK_DOWN ], - [ 1, Moves.FLAME_CHARGE ], - [ 15, Moves.ROCK_POLISH ], - [ 20, Moves.ANCIENT_POWER ], - [ 27, Moves.INCINERATE ], - [ 37, Moves.STEALTH_ROCK ], - [ 45, Moves.HEAT_CRASH ], - [ 54, Moves.ROCK_BLAST ], - [ 63, Moves.STONE_EDGE ], + [ EVOLVE_MOVE, MoveId.TAR_SHOT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.SMACK_DOWN ], + [ 1, MoveId.FLAME_CHARGE ], + [ 15, MoveId.ROCK_POLISH ], + [ 20, MoveId.ANCIENT_POWER ], + [ 27, MoveId.INCINERATE ], + [ 37, MoveId.STEALTH_ROCK ], + [ 45, MoveId.HEAT_CRASH ], + [ 54, MoveId.ROCK_BLAST ], + [ 63, MoveId.STONE_EDGE ], ], [Species.APPLIN]: [ - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.LEAFAGE ], // Custom + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.LEAFAGE ], // Custom ], [Species.FLAPPLE]: [ - [ EVOLVE_MOVE, Moves.WING_ATTACK ], - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.GROWTH ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.TWISTER ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.ACID_SPRAY ], - [ 8, Moves.ACROBATICS ], - [ 12, Moves.LEECH_SEED ], - [ 16, Moves.PROTECT ], - [ 20, Moves.DRAGON_BREATH ], - [ 24, Moves.DRAGON_DANCE ], - [ 28, Moves.DRAGON_PULSE ], - [ 32, Moves.GRAV_APPLE ], - [ 36, Moves.IRON_DEFENSE ], - [ 40, Moves.FLY ], - [ 44, Moves.DRAGON_RUSH ], + [ EVOLVE_MOVE, MoveId.WING_ATTACK ], + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.GROWTH ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.ACID_SPRAY ], + [ 8, MoveId.ACROBATICS ], + [ 12, MoveId.LEECH_SEED ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.DRAGON_BREATH ], + [ 24, MoveId.DRAGON_DANCE ], + [ 28, MoveId.DRAGON_PULSE ], + [ 32, MoveId.GRAV_APPLE ], + [ 36, MoveId.IRON_DEFENSE ], + [ 40, MoveId.FLY ], + [ 44, MoveId.DRAGON_RUSH ], ], [Species.APPLETUN]: [ - [ EVOLVE_MOVE, Moves.HEADBUTT ], - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.GROWTH ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.CURSE ], - [ 8, Moves.STOMP ], - [ 12, Moves.LEECH_SEED ], - [ 16, Moves.PROTECT ], - [ 20, Moves.BULLET_SEED ], - [ 24, Moves.RECOVER ], - [ 28, Moves.APPLE_ACID ], - [ 32, Moves.BODY_SLAM ], - [ 36, Moves.IRON_DEFENSE ], - [ 40, Moves.DRAGON_PULSE ], - [ 44, Moves.ENERGY_BALL ], + [ EVOLVE_MOVE, MoveId.HEADBUTT ], + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.GROWTH ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.CURSE ], + [ 8, MoveId.STOMP ], + [ 12, MoveId.LEECH_SEED ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.BULLET_SEED ], + [ 24, MoveId.RECOVER ], + [ 28, MoveId.APPLE_ACID ], + [ 32, MoveId.BODY_SLAM ], + [ 36, MoveId.IRON_DEFENSE ], + [ 40, MoveId.DRAGON_PULSE ], + [ 44, MoveId.ENERGY_BALL ], ], [Species.SILICOBRA]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.WRAP ], - [ 1, Moves.MUD_SLAP ], // Custom - [ 5, Moves.MINIMIZE ], - [ 10, Moves.BRUTAL_SWING ], - [ 15, Moves.BULLDOZE ], - [ 20, Moves.HEADBUTT ], - [ 25, Moves.GLARE ], - [ 30, Moves.DIG ], - [ 35, Moves.SANDSTORM ], - [ 40, Moves.SLAM ], - [ 45, Moves.COIL ], - [ 50, Moves.SAND_TOMB ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.MUD_SLAP ], // Custom + [ 5, MoveId.MINIMIZE ], + [ 10, MoveId.BRUTAL_SWING ], + [ 15, MoveId.BULLDOZE ], + [ 20, MoveId.HEADBUTT ], + [ 25, MoveId.GLARE ], + [ 30, MoveId.DIG ], + [ 35, MoveId.SANDSTORM ], + [ 40, MoveId.SLAM ], + [ 45, MoveId.COIL ], + [ 50, MoveId.SAND_TOMB ], ], [Species.SANDACONDA]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.WRAP ], - [ 1, Moves.MUD_SLAP ], // Previous Stage Move, Custom - [ 1, Moves.MINIMIZE ], - [ 1, Moves.BRUTAL_SWING ], - [ 15, Moves.BULLDOZE ], - [ 20, Moves.HEADBUTT ], - [ 25, Moves.GLARE ], - [ 30, Moves.DIG ], - [ 35, Moves.SANDSTORM ], - [ 42, Moves.SLAM ], - [ 49, Moves.COIL ], - [ 51, Moves.SAND_TOMB ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.MUD_SLAP ], // Previous Stage Move, Custom + [ 1, MoveId.MINIMIZE ], + [ 1, MoveId.BRUTAL_SWING ], + [ 15, MoveId.BULLDOZE ], + [ 20, MoveId.HEADBUTT ], + [ 25, MoveId.GLARE ], + [ 30, MoveId.DIG ], + [ 35, MoveId.SANDSTORM ], + [ 42, MoveId.SLAM ], + [ 49, MoveId.COIL ], + [ 51, MoveId.SAND_TOMB ], ], [Species.CRAMORANT]: [ - [ RELEARN_MOVE, Moves.BELCH ], - [ 1, Moves.PECK ], - [ 1, Moves.STOCKPILE ], - [ 1, Moves.SPIT_UP ], - [ 1, Moves.SWALLOW ], - [ 7, Moves.WATER_GUN ], - [ 14, Moves.FURY_ATTACK ], - [ 21, Moves.PLUCK ], - [ 28, Moves.DIVE ], - [ 35, Moves.DRILL_PECK ], - [ 42, Moves.AMNESIA ], - [ 49, Moves.THRASH ], - [ 56, Moves.HYDRO_PUMP ], + [ RELEARN_MOVE, MoveId.BELCH ], + [ 1, MoveId.PECK ], + [ 1, MoveId.STOCKPILE ], + [ 1, MoveId.SPIT_UP ], + [ 1, MoveId.SWALLOW ], + [ 7, MoveId.WATER_GUN ], + [ 14, MoveId.FURY_ATTACK ], + [ 21, MoveId.PLUCK ], + [ 28, MoveId.DIVE ], + [ 35, MoveId.DRILL_PECK ], + [ 42, MoveId.AMNESIA ], + [ 49, MoveId.THRASH ], + [ 56, MoveId.HYDRO_PUMP ], ], [Species.ARROKUDA]: [ - [ 1, Moves.PECK ], - [ 1, Moves.AQUA_JET ], - [ 6, Moves.FURY_ATTACK ], - [ 12, Moves.BITE ], - [ 18, Moves.AGILITY ], - [ 24, Moves.DIVE ], - [ 30, Moves.FOCUS_ENERGY ], - [ 36, Moves.CRUNCH ], - [ 42, Moves.LIQUIDATION ], - [ 48, Moves.DOUBLE_EDGE ], + [ 1, MoveId.PECK ], + [ 1, MoveId.AQUA_JET ], + [ 6, MoveId.FURY_ATTACK ], + [ 12, MoveId.BITE ], + [ 18, MoveId.AGILITY ], + [ 24, MoveId.DIVE ], + [ 30, MoveId.FOCUS_ENERGY ], + [ 36, MoveId.CRUNCH ], + [ 42, MoveId.LIQUIDATION ], + [ 48, MoveId.DOUBLE_EDGE ], ], [Species.BARRASKEWDA]: [ - [ 1, Moves.FURY_ATTACK ], - [ 1, Moves.BITE ], - [ 1, Moves.PECK ], - [ 1, Moves.AQUA_JET ], - [ 1, Moves.THROAT_CHOP ], - [ 18, Moves.AGILITY ], - [ 24, Moves.DIVE ], - [ 32, Moves.FOCUS_ENERGY ], - [ 40, Moves.CRUNCH ], - [ 48, Moves.LIQUIDATION ], - [ 56, Moves.DOUBLE_EDGE ], + [ 1, MoveId.FURY_ATTACK ], + [ 1, MoveId.BITE ], + [ 1, MoveId.PECK ], + [ 1, MoveId.AQUA_JET ], + [ 1, MoveId.THROAT_CHOP ], + [ 18, MoveId.AGILITY ], + [ 24, MoveId.DIVE ], + [ 32, MoveId.FOCUS_ENERGY ], + [ 40, MoveId.CRUNCH ], + [ 48, MoveId.LIQUIDATION ], + [ 56, MoveId.DOUBLE_EDGE ], ], [Species.TOXEL]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.FLAIL ], - [ 1, Moves.BELCH ], - [ 1, Moves.NUZZLE ], - [ 1, Moves.TEARFUL_LOOK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.BELCH ], + [ 1, MoveId.NUZZLE ], + [ 1, MoveId.TEARFUL_LOOK ], ], [Species.TOXTRICITY]: [ - [ EVOLVE_MOVE, Moves.SPARK ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.FLAIL ], - [ 1, Moves.ACID_SPRAY ], - [ 1, Moves.BELCH ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.NUZZLE ], - [ 1, Moves.TEARFUL_LOOK ], - [ 4, Moves.CHARGE ], - [ 8, Moves.SHOCK_WAVE ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.TAUNT ], - [ 24, Moves.SCREECH ], - [ 28, Moves.SWAGGER ], - [ 32, Moves.TOXIC ], - [ 36, Moves.DISCHARGE ], - [ 40, Moves.POISON_JAB ], - [ 44, Moves.OVERDRIVE ], - [ 48, Moves.BOOMBURST ], - [ 52, Moves.SHIFT_GEAR ], + [ EVOLVE_MOVE, MoveId.SPARK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.ACID_SPRAY ], + [ 1, MoveId.BELCH ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.NUZZLE ], + [ 1, MoveId.TEARFUL_LOOK ], + [ 4, MoveId.CHARGE ], + [ 8, MoveId.SHOCK_WAVE ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.TAUNT ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SWAGGER ], + [ 32, MoveId.TOXIC ], + [ 36, MoveId.DISCHARGE ], + [ 40, MoveId.POISON_JAB ], + [ 44, MoveId.OVERDRIVE ], + [ 48, MoveId.BOOMBURST ], + [ 52, MoveId.SHIFT_GEAR ], ], [Species.SIZZLIPEDE]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 5, Moves.WRAP ], - [ 10, Moves.BITE ], - [ 15, Moves.FLAME_WHEEL ], - [ 20, Moves.BUG_BITE ], - [ 25, Moves.COIL ], - [ 30, Moves.SLAM ], - [ 35, Moves.FIRE_SPIN ], - [ 40, Moves.CRUNCH ], - [ 45, Moves.FIRE_LASH ], - [ 50, Moves.LUNGE ], - [ 55, Moves.BURN_UP ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 5, MoveId.WRAP ], + [ 10, MoveId.BITE ], + [ 15, MoveId.FLAME_WHEEL ], + [ 20, MoveId.BUG_BITE ], + [ 25, MoveId.COIL ], + [ 30, MoveId.SLAM ], + [ 35, MoveId.FIRE_SPIN ], + [ 40, MoveId.CRUNCH ], + [ 45, MoveId.FIRE_LASH ], + [ 50, MoveId.LUNGE ], + [ 55, MoveId.BURN_UP ], ], [Species.CENTISKORCH]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.BITE ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.INFERNO ], - [ 15, Moves.FLAME_WHEEL ], - [ 20, Moves.BUG_BITE ], - [ 25, Moves.COIL ], - [ 32, Moves.SLAM ], - [ 39, Moves.FIRE_SPIN ], - [ 46, Moves.CRUNCH ], - [ 53, Moves.FIRE_LASH ], - [ 60, Moves.LUNGE ], - [ 67, Moves.BURN_UP ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.BITE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.INFERNO ], + [ 15, MoveId.FLAME_WHEEL ], + [ 20, MoveId.BUG_BITE ], + [ 25, MoveId.COIL ], + [ 32, MoveId.SLAM ], + [ 39, MoveId.FIRE_SPIN ], + [ 46, MoveId.CRUNCH ], + [ 53, MoveId.FIRE_LASH ], + [ 60, MoveId.LUNGE ], + [ 67, MoveId.BURN_UP ], ], [Species.CLOBBOPUS]: [ - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_SMASH ], - [ 5, Moves.FEINT ], - [ 10, Moves.BIND ], - [ 15, Moves.DETECT ], - [ 20, Moves.BRICK_BREAK ], - [ 25, Moves.BULK_UP ], - [ 30, Moves.SUBMISSION ], - [ 35, Moves.TAUNT ], - [ 40, Moves.REVERSAL ], - [ 45, Moves.SUPERPOWER ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_SMASH ], + [ 5, MoveId.FEINT ], + [ 10, MoveId.BIND ], + [ 15, MoveId.DETECT ], + [ 20, MoveId.BRICK_BREAK ], + [ 25, MoveId.BULK_UP ], + [ 30, MoveId.SUBMISSION ], + [ 35, MoveId.TAUNT ], + [ 40, MoveId.REVERSAL ], + [ 45, MoveId.SUPERPOWER ], ], [Species.GRAPPLOCT]: [ - [ EVOLVE_MOVE, Moves.OCTOLOCK ], - [ 1, Moves.BIND ], - [ 1, Moves.LEER ], - [ 1, Moves.OCTAZOOKA ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.FEINT ], - [ 15, Moves.DETECT ], - [ 20, Moves.BRICK_BREAK ], - [ 25, Moves.BULK_UP ], - [ 30, Moves.SUBMISSION ], - [ 35, Moves.TAUNT ], - [ 40, Moves.REVERSAL ], - [ 45, Moves.SUPERPOWER ], - [ 50, Moves.TOPSY_TURVY ], + [ EVOLVE_MOVE, MoveId.OCTOLOCK ], + [ 1, MoveId.BIND ], + [ 1, MoveId.LEER ], + [ 1, MoveId.OCTAZOOKA ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.FEINT ], + [ 15, MoveId.DETECT ], + [ 20, MoveId.BRICK_BREAK ], + [ 25, MoveId.BULK_UP ], + [ 30, MoveId.SUBMISSION ], + [ 35, MoveId.TAUNT ], + [ 40, MoveId.REVERSAL ], + [ 45, MoveId.SUPERPOWER ], + [ 50, MoveId.TOPSY_TURVY ], ], [Species.SINISTEA]: [ - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.ABSORB ], // Custom - [ 6, Moves.AROMATIC_MIST ], - [ 12, Moves.MEGA_DRAIN ], - [ 24, Moves.SUCKER_PUNCH ], - [ 30, Moves.SWEET_SCENT ], - [ 36, Moves.GIGA_DRAIN ], - [ 42, Moves.NASTY_PLOT ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.MEMENTO ], - [ 60, Moves.SHELL_SMASH ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.ABSORB ], // Custom + [ 6, MoveId.AROMATIC_MIST ], + [ 12, MoveId.MEGA_DRAIN ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.SWEET_SCENT ], + [ 36, MoveId.GIGA_DRAIN ], + [ 42, MoveId.NASTY_PLOT ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.MEMENTO ], + [ 60, MoveId.SHELL_SMASH ], ], [Species.POLTEAGEIST]: [ - [ EVOLVE_MOVE, Moves.TEATIME ], - [ 1, Moves.ABSORB ], // Previous Stage Move, Custom - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.AROMATIC_MIST ], - [ 1, Moves.STRENGTH_SAP ], - [ 18, Moves.PROTECT ], - [ 24, Moves.SUCKER_PUNCH ], - [ 30, Moves.SWEET_SCENT ], - [ 36, Moves.GIGA_DRAIN ], - [ 42, Moves.NASTY_PLOT ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.MEMENTO ], - [ 60, Moves.SHELL_SMASH ], - [ 66, Moves.CURSE ], + [ EVOLVE_MOVE, MoveId.TEATIME ], + [ 1, MoveId.ABSORB ], // Previous Stage Move, Custom + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.AROMATIC_MIST ], + [ 1, MoveId.STRENGTH_SAP ], + [ 18, MoveId.PROTECT ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.SWEET_SCENT ], + [ 36, MoveId.GIGA_DRAIN ], + [ 42, MoveId.NASTY_PLOT ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.MEMENTO ], + [ 60, MoveId.SHELL_SMASH ], + [ 66, MoveId.CURSE ], ], [Species.HATENNA]: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.PLAY_NICE ], - [ 5, Moves.LIFE_DEW ], - [ 10, Moves.DISARMING_VOICE ], - [ 15, Moves.AROMATIC_MIST ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.HEAL_PULSE ], - [ 30, Moves.DAZZLING_GLEAM ], - [ 35, Moves.CALM_MIND ], - [ 40, Moves.PSYCHIC ], - [ 45, Moves.HEALING_WISH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.PLAY_NICE ], + [ 5, MoveId.LIFE_DEW ], + [ 10, MoveId.DISARMING_VOICE ], + [ 15, MoveId.AROMATIC_MIST ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.HEAL_PULSE ], + [ 30, MoveId.DAZZLING_GLEAM ], + [ 35, MoveId.CALM_MIND ], + [ 40, MoveId.PSYCHIC ], + [ 45, MoveId.HEALING_WISH ], ], [Species.HATTREM]: [ - [ EVOLVE_MOVE, Moves.BRUTAL_SWING ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.LIFE_DEW ], - [ 15, Moves.AROMATIC_MIST ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.HEAL_PULSE ], - [ 30, Moves.DAZZLING_GLEAM ], - [ 37, Moves.CALM_MIND ], - [ 44, Moves.PSYCHIC ], - [ 51, Moves.HEALING_WISH ], + [ EVOLVE_MOVE, MoveId.BRUTAL_SWING ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.LIFE_DEW ], + [ 15, MoveId.AROMATIC_MIST ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.HEAL_PULSE ], + [ 30, MoveId.DAZZLING_GLEAM ], + [ 37, MoveId.CALM_MIND ], + [ 44, MoveId.PSYCHIC ], + [ 51, MoveId.HEALING_WISH ], ], [Species.HATTERENE]: [ - [ EVOLVE_MOVE, Moves.PSYCHO_CUT ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.DISARMING_VOICE ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.BRUTAL_SWING ], - [ 1, Moves.LIFE_DEW ], - [ 15, Moves.AROMATIC_MIST ], - [ 20, Moves.PSYBEAM ], - [ 25, Moves.HEAL_PULSE ], - [ 30, Moves.DAZZLING_GLEAM ], - [ 37, Moves.CALM_MIND ], - [ 46, Moves.PSYCHIC ], - [ 55, Moves.HEALING_WISH ], - [ 64, Moves.MAGIC_POWDER ], + [ EVOLVE_MOVE, MoveId.PSYCHO_CUT ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DISARMING_VOICE ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.BRUTAL_SWING ], + [ 1, MoveId.LIFE_DEW ], + [ 15, MoveId.AROMATIC_MIST ], + [ 20, MoveId.PSYBEAM ], + [ 25, MoveId.HEAL_PULSE ], + [ 30, MoveId.DAZZLING_GLEAM ], + [ 37, MoveId.CALM_MIND ], + [ 46, MoveId.PSYCHIC ], + [ 55, MoveId.HEALING_WISH ], + [ 64, MoveId.MAGIC_POWDER ], ], [Species.IMPIDIMP]: [ - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.CONFIDE ], - [ 4, Moves.BITE ], - [ 8, Moves.FLATTER ], - [ 12, Moves.FAKE_TEARS ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.TORMENT ], - [ 33, Moves.DARK_PULSE ], - [ 36, Moves.NASTY_PLOT ], - [ 40, Moves.PLAY_ROUGH ], - [ 44, Moves.FOUL_PLAY ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.CONFIDE ], + [ 4, MoveId.BITE ], + [ 8, MoveId.FLATTER ], + [ 12, MoveId.FAKE_TEARS ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.TORMENT ], + [ 33, MoveId.DARK_PULSE ], + [ 36, MoveId.NASTY_PLOT ], + [ 40, MoveId.PLAY_ROUGH ], + [ 44, MoveId.FOUL_PLAY ], ], [Species.MORGREM]: [ - [ EVOLVE_MOVE, Moves.FALSE_SURRENDER ], - [ 1, Moves.BITE ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.FLATTER ], - [ 1, Moves.CONFIDE ], - [ 12, Moves.FAKE_TEARS ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.TORMENT ], - [ 35, Moves.DARK_PULSE ], - [ 40, Moves.NASTY_PLOT ], - [ 46, Moves.PLAY_ROUGH ], - [ 52, Moves.FOUL_PLAY ], + [ EVOLVE_MOVE, MoveId.FALSE_SURRENDER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.FLATTER ], + [ 1, MoveId.CONFIDE ], + [ 12, MoveId.FAKE_TEARS ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.TORMENT ], + [ 35, MoveId.DARK_PULSE ], + [ 40, MoveId.NASTY_PLOT ], + [ 46, MoveId.PLAY_ROUGH ], + [ 52, MoveId.FOUL_PLAY ], ], [Species.GRIMMSNARL]: [ - [ EVOLVE_MOVE, Moves.SPIRIT_BREAK ], - [ 1, Moves.BITE ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.FLATTER ], - [ 1, Moves.BULK_UP ], - [ 1, Moves.CONFIDE ], - [ 1, Moves.FALSE_SURRENDER ], - [ 12, Moves.FAKE_TEARS ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SWAGGER ], - [ 24, Moves.SUCKER_PUNCH ], - [ 28, Moves.TORMENT ], - [ 35, Moves.DARK_PULSE ], - [ 40, Moves.NASTY_PLOT ], - [ 48, Moves.PLAY_ROUGH ], - [ 56, Moves.FOUL_PLAY ], - [ 64, Moves.HAMMER_ARM ], + [ EVOLVE_MOVE, MoveId.SPIRIT_BREAK ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.FLATTER ], + [ 1, MoveId.BULK_UP ], + [ 1, MoveId.CONFIDE ], + [ 1, MoveId.FALSE_SURRENDER ], + [ 12, MoveId.FAKE_TEARS ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SWAGGER ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.TORMENT ], + [ 35, MoveId.DARK_PULSE ], + [ 40, MoveId.NASTY_PLOT ], + [ 48, MoveId.PLAY_ROUGH ], + [ 56, MoveId.FOUL_PLAY ], + [ 64, MoveId.HAMMER_ARM ], ], [Species.OBSTAGOON]: [ - [ EVOLVE_MOVE, Moves.OBSTRUCT ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.PIN_MISSILE ], - [ 1, Moves.LEER ], - [ 1, Moves.SUBMISSION ], - [ 1, Moves.LICK ], - [ 1, Moves.CROSS_CHOP ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.SWITCHEROO ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 9, Moves.SNARL ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.HONE_CLAWS ], - [ 18, Moves.FURY_SWIPES ], - [ 23, Moves.REST ], - [ 28, Moves.TAKE_DOWN ], - [ 35, Moves.SCARY_FACE ], - [ 42, Moves.COUNTER ], - [ 49, Moves.TAUNT ], - [ 56, Moves.DOUBLE_EDGE ], + [ EVOLVE_MOVE, MoveId.OBSTRUCT ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PIN_MISSILE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SUBMISSION ], + [ 1, MoveId.LICK ], + [ 1, MoveId.CROSS_CHOP ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.SWITCHEROO ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 9, MoveId.SNARL ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.HONE_CLAWS ], + [ 18, MoveId.FURY_SWIPES ], + [ 23, MoveId.REST ], + [ 28, MoveId.TAKE_DOWN ], + [ 35, MoveId.SCARY_FACE ], + [ 42, MoveId.COUNTER ], + [ 49, MoveId.TAUNT ], + [ 56, MoveId.DOUBLE_EDGE ], ], [Species.PERRSERKER]: [ - [ EVOLVE_MOVE, Moves.IRON_HEAD ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.METAL_BURST ], - [ 1, Moves.HONE_CLAWS ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.METAL_CLAW ], - [ 20, Moves.TAUNT ], - [ 24, Moves.SWAGGER ], - [ 31, Moves.FURY_SWIPES ], - [ 36, Moves.SCREECH ], - [ 42, Moves.SLASH ], - [ 48, Moves.METAL_SOUND ], - [ 54, Moves.THRASH ], + [ EVOLVE_MOVE, MoveId.IRON_HEAD ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.METAL_BURST ], + [ 1, MoveId.HONE_CLAWS ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.METAL_CLAW ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.SWAGGER ], + [ 31, MoveId.FURY_SWIPES ], + [ 36, MoveId.SCREECH ], + [ 42, MoveId.SLASH ], + [ 48, MoveId.METAL_SOUND ], + [ 54, MoveId.THRASH ], ], [Species.CURSOLA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DISABLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.PERISH_SONG ], - [ 1, Moves.ASTONISH ], - [ 15, Moves.SPITE ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.HEX ], - [ 30, Moves.CURSE ], - [ 35, Moves.STRENGTH_SAP ], - [ 40, Moves.POWER_GEM ], - [ 45, Moves.NIGHT_SHADE ], - [ 50, Moves.GRUDGE ], - [ 55, Moves.MIRROR_COAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.PERISH_SONG ], + [ 1, MoveId.ASTONISH ], + [ 15, MoveId.SPITE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.HEX ], + [ 30, MoveId.CURSE ], + [ 35, MoveId.STRENGTH_SAP ], + [ 40, MoveId.POWER_GEM ], + [ 45, MoveId.NIGHT_SHADE ], + [ 50, MoveId.GRUDGE ], + [ 55, MoveId.MIRROR_COAT ], ], [Species.SIRFETCHD]: [ - [ EVOLVE_MOVE, Moves.IRON_DEFENSE ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.FIRST_IMPRESSION ], - [ 15, Moves.ROCK_SMASH ], - [ 20, Moves.BRUTAL_SWING ], - [ 25, Moves.DETECT ], - [ 30, Moves.KNOCK_OFF ], - [ 35, Moves.DEFOG ], - [ 40, Moves.BRICK_BREAK ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.SLAM ], - [ 55, Moves.LEAF_BLADE ], - [ 60, Moves.FINAL_GAMBIT ], - [ 65, Moves.BRAVE_BIRD ], - [ 70, Moves.METEOR_ASSAULT ], + [ EVOLVE_MOVE, MoveId.IRON_DEFENSE ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.FIRST_IMPRESSION ], + [ 15, MoveId.ROCK_SMASH ], + [ 20, MoveId.BRUTAL_SWING ], + [ 25, MoveId.DETECT ], + [ 30, MoveId.KNOCK_OFF ], + [ 35, MoveId.DEFOG ], + [ 40, MoveId.BRICK_BREAK ], + [ 45, MoveId.SWORDS_DANCE ], + [ 50, MoveId.SLAM ], + [ 55, MoveId.LEAF_BLADE ], + [ 60, MoveId.FINAL_GAMBIT ], + [ 65, MoveId.BRAVE_BIRD ], + [ 70, MoveId.METEOR_ASSAULT ], ], [Species.MR_RIME]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BARRIER ], // Previous Stage Move - [ 1, Moves.TICKLE ], // Previous Stage Move - [ 1, Moves.MIMIC ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.REFLECT ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.ENCORE ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.ROLE_PLAY ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.SLACK_OFF ], - [ 1, Moves.FAKE_TEARS ], - [ 1, Moves.BLOCK ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.MISTY_TERRAIN ], - [ 1, Moves.DAZZLING_GLEAM ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.ALLY_SWITCH ], - [ 20, Moves.ICY_WIND ], - [ 24, Moves.DOUBLE_KICK ], - [ 28, Moves.PSYBEAM ], - [ 32, Moves.HYPNOSIS ], - [ 36, Moves.MIRROR_COAT ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.FREEZE_DRY ], - [ 48, Moves.PSYCHIC ], - [ 52, Moves.TEETER_DANCE ], + [ 1, MoveId.POUND ], + [ 1, MoveId.BARRIER ], // Previous Stage Move + [ 1, MoveId.TICKLE ], // Previous Stage Move + [ 1, MoveId.MIMIC ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.ROLE_PLAY ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.SLACK_OFF ], + [ 1, MoveId.FAKE_TEARS ], + [ 1, MoveId.BLOCK ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.ICE_SHARD ], + [ 1, MoveId.AFTER_YOU ], + [ 1, MoveId.MISTY_TERRAIN ], + [ 1, MoveId.DAZZLING_GLEAM ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.ALLY_SWITCH ], + [ 20, MoveId.ICY_WIND ], + [ 24, MoveId.DOUBLE_KICK ], + [ 28, MoveId.PSYBEAM ], + [ 32, MoveId.HYPNOSIS ], + [ 36, MoveId.MIRROR_COAT ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.FREEZE_DRY ], + [ 48, MoveId.PSYCHIC ], + [ 52, MoveId.TEETER_DANCE ], ], [Species.RUNERIGUS]: [ - [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], - [ 1, Moves.NIGHT_SHADE ], - [ 1, Moves.HAZE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SCARY_FACE ], - [ 1, Moves.ASTONISH ], - [ 12, Moves.DISABLE ], - [ 16, Moves.BRUTAL_SWING ], - [ 20, Moves.CRAFTY_SHIELD ], - [ 24, Moves.HEX ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.SLAM ], - [ 38, Moves.CURSE ], - [ 44, Moves.SHADOW_BALL ], - [ 50, Moves.EARTHQUAKE ], - [ 56, Moves.GUARD_SPLIT ], - [ 56, Moves.POWER_SPLIT ], - [ 62, Moves.DESTINY_BOND ], + [ EVOLVE_MOVE, MoveId.SHADOW_CLAW ], + [ 1, MoveId.NIGHT_SHADE ], + [ 1, MoveId.HAZE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SCARY_FACE ], + [ 1, MoveId.ASTONISH ], + [ 12, MoveId.DISABLE ], + [ 16, MoveId.BRUTAL_SWING ], + [ 20, MoveId.CRAFTY_SHIELD ], + [ 24, MoveId.HEX ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.SLAM ], + [ 38, MoveId.CURSE ], + [ 44, MoveId.SHADOW_BALL ], + [ 50, MoveId.EARTHQUAKE ], + [ 56, MoveId.GUARD_SPLIT ], + [ 56, MoveId.POWER_SPLIT ], + [ 62, MoveId.DESTINY_BOND ], ], [Species.MILCERY]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.AROMATIC_MIST ], - [ 5, Moves.SWEET_KISS ], - [ 10, Moves.SWEET_SCENT ], - [ 15, Moves.DRAINING_KISS ], - [ 20, Moves.AROMATHERAPY ], - [ 25, Moves.ATTRACT ], - [ 30, Moves.ACID_ARMOR ], - [ 35, Moves.DAZZLING_GLEAM ], - [ 40, Moves.RECOVER ], - [ 45, Moves.MISTY_TERRAIN ], - [ 50, Moves.ENTRAINMENT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.AROMATIC_MIST ], + [ 5, MoveId.SWEET_KISS ], + [ 10, MoveId.SWEET_SCENT ], + [ 15, MoveId.DRAINING_KISS ], + [ 20, MoveId.AROMATHERAPY ], + [ 25, MoveId.ATTRACT ], + [ 30, MoveId.ACID_ARMOR ], + [ 35, MoveId.DAZZLING_GLEAM ], + [ 40, MoveId.RECOVER ], + [ 45, MoveId.MISTY_TERRAIN ], + [ 50, MoveId.ENTRAINMENT ], ], [Species.ALCREMIE]: [ - [ EVOLVE_MOVE, Moves.DECORATE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.AROMATIC_MIST ], - [ 15, Moves.DRAINING_KISS ], - [ 20, Moves.AROMATHERAPY ], - [ 25, Moves.ATTRACT ], - [ 30, Moves.ACID_ARMOR ], - [ 35, Moves.DAZZLING_GLEAM ], - [ 40, Moves.RECOVER ], - [ 45, Moves.MISTY_TERRAIN ], - [ 50, Moves.ENTRAINMENT ], + [ EVOLVE_MOVE, MoveId.DECORATE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.AROMATIC_MIST ], + [ 15, MoveId.DRAINING_KISS ], + [ 20, MoveId.AROMATHERAPY ], + [ 25, MoveId.ATTRACT ], + [ 30, MoveId.ACID_ARMOR ], + [ 35, MoveId.DAZZLING_GLEAM ], + [ 40, MoveId.RECOVER ], + [ 45, MoveId.MISTY_TERRAIN ], + [ 50, MoveId.ENTRAINMENT ], ], [Species.FALINKS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 5, Moves.ROCK_SMASH ], - [ 10, Moves.FOCUS_ENERGY ], - [ 15, Moves.HEADBUTT ], - [ 20, Moves.BULK_UP ], - [ 25, Moves.ENDURE ], - [ 30, Moves.REVERSAL ], - [ 35, Moves.FIRST_IMPRESSION ], - [ 40, Moves.NO_RETREAT ], - [ 45, Moves.IRON_DEFENSE ], - [ 50, Moves.CLOSE_COMBAT ], - [ 55, Moves.MEGAHORN ], - [ 60, Moves.COUNTER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 5, MoveId.ROCK_SMASH ], + [ 10, MoveId.FOCUS_ENERGY ], + [ 15, MoveId.HEADBUTT ], + [ 20, MoveId.BULK_UP ], + [ 25, MoveId.ENDURE ], + [ 30, MoveId.REVERSAL ], + [ 35, MoveId.FIRST_IMPRESSION ], + [ 40, MoveId.NO_RETREAT ], + [ 45, MoveId.IRON_DEFENSE ], + [ 50, MoveId.CLOSE_COMBAT ], + [ 55, MoveId.MEGAHORN ], + [ 60, MoveId.COUNTER ], ], [Species.PINCURCHIN]: [ - [ 1, Moves.PECK ], - [ 1, Moves.THUNDER_SHOCK ], - [ 5, Moves.WATER_GUN ], - [ 10, Moves.CHARGE ], - [ 15, Moves.FURY_ATTACK ], - [ 20, Moves.SPARK ], - [ 25, Moves.BUBBLE_BEAM ], - [ 30, Moves.RECOVER ], - [ 35, Moves.CURSE ], - [ 40, Moves.ELECTRIC_TERRAIN ], - [ 45, Moves.POISON_JAB ], - [ 50, Moves.ZING_ZAP ], - [ 55, Moves.ACUPRESSURE ], - [ 60, Moves.DISCHARGE ], + [ 1, MoveId.PECK ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 5, MoveId.WATER_GUN ], + [ 10, MoveId.CHARGE ], + [ 15, MoveId.FURY_ATTACK ], + [ 20, MoveId.SPARK ], + [ 25, MoveId.BUBBLE_BEAM ], + [ 30, MoveId.RECOVER ], + [ 35, MoveId.CURSE ], + [ 40, MoveId.ELECTRIC_TERRAIN ], + [ 45, MoveId.POISON_JAB ], + [ 50, MoveId.ZING_ZAP ], + [ 55, MoveId.ACUPRESSURE ], + [ 60, MoveId.DISCHARGE ], ], [Species.SNOM]: [ - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.STRUGGLE_BUG ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.STRUGGLE_BUG ], ], [Species.FROSMOTH]: [ - [ EVOLVE_MOVE, Moves.ICY_WIND ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ATTRACT ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.STRUGGLE_BUG ], - [ 4, Moves.STUN_SPORE ], - [ 8, Moves.INFESTATION ], - [ 12, Moves.MIST ], - [ 16, Moves.DEFOG ], - [ 21, Moves.FEATHER_DANCE ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.SNOWSCAPE ], - [ 32, Moves.BUG_BUZZ ], - [ 36, Moves.AURORA_VEIL ], - [ 40, Moves.BLIZZARD ], - [ 44, Moves.TAILWIND ], - [ 48, Moves.WIDE_GUARD ], - [ 52, Moves.QUIVER_DANCE ], + [ EVOLVE_MOVE, MoveId.ICY_WIND ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.ATTRACT ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.STRUGGLE_BUG ], + [ 4, MoveId.STUN_SPORE ], + [ 8, MoveId.INFESTATION ], + [ 12, MoveId.MIST ], + [ 16, MoveId.DEFOG ], + [ 21, MoveId.FEATHER_DANCE ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.SNOWSCAPE ], + [ 32, MoveId.BUG_BUZZ ], + [ 36, MoveId.AURORA_VEIL ], + [ 40, MoveId.BLIZZARD ], + [ 44, MoveId.TAILWIND ], + [ 48, MoveId.WIDE_GUARD ], + [ 52, MoveId.QUIVER_DANCE ], ], [Species.STONJOURNER]: [ - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.BLOCK ], - [ 6, Moves.ROCK_POLISH ], - [ 12, Moves.ROCK_TOMB ], - [ 18, Moves.GRAVITY ], - [ 24, Moves.STOMP ], - [ 30, Moves.STEALTH_ROCK ], - [ 36, Moves.ROCK_SLIDE ], - [ 42, Moves.BODY_SLAM ], - [ 48, Moves.WIDE_GUARD ], - [ 54, Moves.HEAVY_SLAM ], - [ 60, Moves.STONE_EDGE ], - [ 66, Moves.MEGA_KICK ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.BLOCK ], + [ 6, MoveId.ROCK_POLISH ], + [ 12, MoveId.ROCK_TOMB ], + [ 18, MoveId.GRAVITY ], + [ 24, MoveId.STOMP ], + [ 30, MoveId.STEALTH_ROCK ], + [ 36, MoveId.ROCK_SLIDE ], + [ 42, MoveId.BODY_SLAM ], + [ 48, MoveId.WIDE_GUARD ], + [ 54, MoveId.HEAVY_SLAM ], + [ 60, MoveId.STONE_EDGE ], + [ 66, MoveId.MEGA_KICK ], ], [Species.EISCUE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POWDER_SNOW ], - [ 6, Moves.MIST ], - [ 12, Moves.WEATHER_BALL ], - [ 18, Moves.ICY_WIND ], - [ 24, Moves.HEADBUTT ], - [ 30, Moves.AMNESIA ], - [ 36, Moves.FREEZE_DRY ], - [ 42, Moves.SNOWSCAPE ], - [ 48, Moves.AURORA_VEIL ], - [ 54, Moves.SURF ], - [ 60, Moves.BLIZZARD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POWDER_SNOW ], + [ 6, MoveId.MIST ], + [ 12, MoveId.WEATHER_BALL ], + [ 18, MoveId.ICY_WIND ], + [ 24, MoveId.HEADBUTT ], + [ 30, MoveId.AMNESIA ], + [ 36, MoveId.FREEZE_DRY ], + [ 42, MoveId.SNOWSCAPE ], + [ 48, MoveId.AURORA_VEIL ], + [ 54, MoveId.SURF ], + [ 60, MoveId.BLIZZARD ], ], [Species.INDEEDEE]: [ - [ 1, Moves.STORED_POWER ], - [ 1, Moves.PLAY_NICE ], - [ 5, Moves.ENCORE ], - [ 10, Moves.DISARMING_VOICE ], - [ 15, Moves.PSYBEAM ], - [ 20, Moves.HELPING_HAND ], - [ 25, Moves.AFTER_YOU ], - [ 30, Moves.HEALING_WISH ], - [ 35, Moves.PSYCHIC ], - [ 40, Moves.CALM_MIND ], - [ 45, Moves.POWER_SPLIT ], - [ 50, Moves.PSYCHIC_TERRAIN ], - [ 55, Moves.LAST_RESORT ], + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.PLAY_NICE ], + [ 5, MoveId.ENCORE ], + [ 10, MoveId.DISARMING_VOICE ], + [ 15, MoveId.PSYBEAM ], + [ 20, MoveId.HELPING_HAND ], + [ 25, MoveId.AFTER_YOU ], + [ 30, MoveId.HEALING_WISH ], + [ 35, MoveId.PSYCHIC ], + [ 40, MoveId.CALM_MIND ], + [ 45, MoveId.POWER_SPLIT ], + [ 50, MoveId.PSYCHIC_TERRAIN ], + [ 55, MoveId.LAST_RESORT ], ], [Species.MORPEKO]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.THUNDER_SHOCK ], - [ 5, Moves.LEER ], - [ 10, Moves.POWER_TRIP ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.FLATTER ], - [ 25, Moves.BITE ], - [ 30, Moves.SPARK ], - [ 35, Moves.TORMENT ], - [ 40, Moves.AGILITY ], - [ 45, Moves.BULLET_SEED ], - [ 50, Moves.CRUNCH ], - [ 55, Moves.AURA_WHEEL ], - [ 60, Moves.THRASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 5, MoveId.LEER ], + [ 10, MoveId.POWER_TRIP ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.FLATTER ], + [ 25, MoveId.BITE ], + [ 30, MoveId.SPARK ], + [ 35, MoveId.TORMENT ], + [ 40, MoveId.AGILITY ], + [ 45, MoveId.BULLET_SEED ], + [ 50, MoveId.CRUNCH ], + [ 55, MoveId.AURA_WHEEL ], + [ 60, MoveId.THRASH ], ], [Species.CUFANT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.ROLLOUT ], - [ 10, Moves.ROCK_SMASH ], - [ 15, Moves.BULLDOZE ], - [ 20, Moves.STOMP ], - [ 25, Moves.IRON_DEFENSE ], - [ 30, Moves.DIG ], - [ 35, Moves.STRENGTH ], - [ 40, Moves.IRON_HEAD ], - [ 45, Moves.PLAY_ROUGH ], - [ 50, Moves.HIGH_HORSEPOWER ], - [ 55, Moves.SUPERPOWER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.ROLLOUT ], + [ 10, MoveId.ROCK_SMASH ], + [ 15, MoveId.BULLDOZE ], + [ 20, MoveId.STOMP ], + [ 25, MoveId.IRON_DEFENSE ], + [ 30, MoveId.DIG ], + [ 35, MoveId.STRENGTH ], + [ 40, MoveId.IRON_HEAD ], + [ 45, MoveId.PLAY_ROUGH ], + [ 50, MoveId.HIGH_HORSEPOWER ], + [ 55, MoveId.SUPERPOWER ], ], [Species.COPPERAJAH]: [ - [ EVOLVE_MOVE, Moves.HEAVY_SLAM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.ROCK_SMASH ], - [ 15, Moves.BULLDOZE ], - [ 20, Moves.STOMP ], - [ 25, Moves.IRON_DEFENSE ], - [ 30, Moves.DIG ], - [ 37, Moves.STRENGTH ], - [ 44, Moves.IRON_HEAD ], - [ 51, Moves.PLAY_ROUGH ], - [ 58, Moves.HIGH_HORSEPOWER ], - [ 65, Moves.SUPERPOWER ], + [ EVOLVE_MOVE, MoveId.HEAVY_SLAM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.ROCK_SMASH ], + [ 15, MoveId.BULLDOZE ], + [ 20, MoveId.STOMP ], + [ 25, MoveId.IRON_DEFENSE ], + [ 30, MoveId.DIG ], + [ 37, MoveId.STRENGTH ], + [ 44, MoveId.IRON_HEAD ], + [ 51, MoveId.PLAY_ROUGH ], + [ 58, MoveId.HIGH_HORSEPOWER ], + [ 65, MoveId.SUPERPOWER ], ], [Species.DRACOZOLT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.THUNDER_SHOCK ], - [ 7, Moves.CHARGE ], - [ 14, Moves.AERIAL_ACE ], - [ 21, Moves.ANCIENT_POWER ], - [ 28, Moves.PLUCK ], - [ 35, Moves.DRAGON_TAIL ], - [ 42, Moves.STOMP ], - [ 49, Moves.SLAM ], - [ 56, Moves.DISCHARGE ], - [ 63, Moves.BOLT_BEAK ], - [ 70, Moves.DRAGON_PULSE ], - [ 77, Moves.DRAGON_RUSH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 7, MoveId.CHARGE ], + [ 14, MoveId.AERIAL_ACE ], + [ 21, MoveId.ANCIENT_POWER ], + [ 28, MoveId.PLUCK ], + [ 35, MoveId.DRAGON_TAIL ], + [ 42, MoveId.STOMP ], + [ 49, MoveId.SLAM ], + [ 56, MoveId.DISCHARGE ], + [ 63, MoveId.BOLT_BEAK ], + [ 70, MoveId.DRAGON_PULSE ], + [ 77, MoveId.DRAGON_RUSH ], ], [Species.ARCTOZOLT]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.POWDER_SNOW ], - [ 7, Moves.CHARGE ], - [ 14, Moves.ECHOED_VOICE ], - [ 21, Moves.ANCIENT_POWER ], - [ 28, Moves.PLUCK ], - [ 35, Moves.AVALANCHE ], - [ 42, Moves.FREEZE_DRY ], - [ 49, Moves.SLAM ], - [ 56, Moves.DISCHARGE ], - [ 63, Moves.BOLT_BEAK ], - [ 70, Moves.ICICLE_CRASH ], - [ 77, Moves.BLIZZARD ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.POWDER_SNOW ], + [ 7, MoveId.CHARGE ], + [ 14, MoveId.ECHOED_VOICE ], + [ 21, MoveId.ANCIENT_POWER ], + [ 28, MoveId.PLUCK ], + [ 35, MoveId.AVALANCHE ], + [ 42, MoveId.FREEZE_DRY ], + [ 49, MoveId.SLAM ], + [ 56, MoveId.DISCHARGE ], + [ 63, MoveId.BOLT_BEAK ], + [ 70, MoveId.ICICLE_CRASH ], + [ 77, MoveId.BLIZZARD ], ], [Species.DRACOVISH]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 7, Moves.PROTECT ], - [ 14, Moves.BRUTAL_SWING ], - [ 21, Moves.ANCIENT_POWER ], - [ 28, Moves.BITE ], - [ 35, Moves.DRAGON_BREATH ], - [ 42, Moves.STOMP ], - [ 49, Moves.SUPER_FANG ], - [ 56, Moves.CRUNCH ], - [ 63, Moves.FISHIOUS_REND ], - [ 70, Moves.DRAGON_PULSE ], - [ 77, Moves.DRAGON_RUSH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 7, MoveId.PROTECT ], + [ 14, MoveId.BRUTAL_SWING ], + [ 21, MoveId.ANCIENT_POWER ], + [ 28, MoveId.BITE ], + [ 35, MoveId.DRAGON_BREATH ], + [ 42, MoveId.STOMP ], + [ 49, MoveId.SUPER_FANG ], + [ 56, MoveId.CRUNCH ], + [ 63, MoveId.FISHIOUS_REND ], + [ 70, MoveId.DRAGON_PULSE ], + [ 77, MoveId.DRAGON_RUSH ], ], [Species.ARCTOVISH]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.POWDER_SNOW ], - [ 7, Moves.PROTECT ], - [ 14, Moves.ICY_WIND ], - [ 21, Moves.ANCIENT_POWER ], - [ 28, Moves.BITE ], - [ 35, Moves.AURORA_VEIL ], - [ 42, Moves.FREEZE_DRY ], - [ 49, Moves.SUPER_FANG ], - [ 56, Moves.CRUNCH ], - [ 63, Moves.FISHIOUS_REND ], - [ 70, Moves.ICICLE_CRASH ], - [ 77, Moves.BLIZZARD ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.POWDER_SNOW ], + [ 7, MoveId.PROTECT ], + [ 14, MoveId.ICY_WIND ], + [ 21, MoveId.ANCIENT_POWER ], + [ 28, MoveId.BITE ], + [ 35, MoveId.AURORA_VEIL ], + [ 42, MoveId.FREEZE_DRY ], + [ 49, MoveId.SUPER_FANG ], + [ 56, MoveId.CRUNCH ], + [ 63, MoveId.FISHIOUS_REND ], + [ 70, MoveId.ICICLE_CRASH ], + [ 77, MoveId.BLIZZARD ], ], [Species.DURALUDON]: [ - [ 1, Moves.LEER ], - [ 1, Moves.METAL_CLAW ], - [ 6, Moves.ROCK_SMASH ], - [ 12, Moves.HONE_CLAWS ], - [ 18, Moves.METAL_SOUND ], - [ 24, Moves.BREAKING_SWIPE ], - [ 30, Moves.DRAGON_TAIL ], - [ 36, Moves.IRON_DEFENSE ], - [ 42, Moves.LASER_FOCUS ], - [ 48, Moves.DRAGON_CLAW ], - [ 54, Moves.FLASH_CANNON ], - [ 60, Moves.METAL_BURST ], - [ 66, Moves.HYPER_BEAM ], + [ 1, MoveId.LEER ], + [ 1, MoveId.METAL_CLAW ], + [ 6, MoveId.ROCK_SMASH ], + [ 12, MoveId.HONE_CLAWS ], + [ 18, MoveId.METAL_SOUND ], + [ 24, MoveId.BREAKING_SWIPE ], + [ 30, MoveId.DRAGON_TAIL ], + [ 36, MoveId.IRON_DEFENSE ], + [ 42, MoveId.LASER_FOCUS ], + [ 48, MoveId.DRAGON_CLAW ], + [ 54, MoveId.FLASH_CANNON ], + [ 60, MoveId.METAL_BURST ], + [ 66, MoveId.HYPER_BEAM ], ], [Species.DREEPY]: [ - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.INFESTATION ], + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.INFESTATION ], ], [Species.DRAKLOAK]: [ - [ EVOLVE_MOVE, Moves.DRAGON_PULSE ], - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.INFESTATION ], - [ 6, Moves.LOCK_ON ], - [ 12, Moves.ASSURANCE ], - [ 18, Moves.HEX ], - [ 24, Moves.AGILITY ], - [ 30, Moves.DOUBLE_HIT ], - [ 36, Moves.U_TURN ], - [ 42, Moves.DRAGON_DANCE ], - [ 48, Moves.PHANTOM_FORCE ], - [ 54, Moves.TAKE_DOWN ], - [ 61, Moves.DRAGON_RUSH ], - [ 66, Moves.DOUBLE_EDGE ], - [ 72, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.DRAGON_PULSE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.INFESTATION ], + [ 6, MoveId.LOCK_ON ], + [ 12, MoveId.ASSURANCE ], + [ 18, MoveId.HEX ], + [ 24, MoveId.AGILITY ], + [ 30, MoveId.DOUBLE_HIT ], + [ 36, MoveId.U_TURN ], + [ 42, MoveId.DRAGON_DANCE ], + [ 48, MoveId.PHANTOM_FORCE ], + [ 54, MoveId.TAKE_DOWN ], + [ 61, MoveId.DRAGON_RUSH ], + [ 66, MoveId.DOUBLE_EDGE ], + [ 72, MoveId.LAST_RESORT ], ], [Species.DRAGAPULT]: [ - [ EVOLVE_MOVE, Moves.DRAGON_DARTS ], - [ RELEARN_MOVE, Moves.DRAGON_PULSE ], // Previous Stage Move - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.INFESTATION ], - [ 6, Moves.LOCK_ON ], - [ 12, Moves.ASSURANCE ], - [ 18, Moves.HEX ], - [ 24, Moves.AGILITY ], - [ 30, Moves.DOUBLE_HIT ], - [ 36, Moves.U_TURN ], - [ 42, Moves.DRAGON_DANCE ], - [ 48, Moves.PHANTOM_FORCE ], - [ 54, Moves.TAKE_DOWN ], - [ 63, Moves.DRAGON_RUSH ], - [ 70, Moves.DOUBLE_EDGE ], - [ 78, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.DRAGON_DARTS ], + [ RELEARN_MOVE, MoveId.DRAGON_PULSE ], // Previous Stage Move + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.INFESTATION ], + [ 6, MoveId.LOCK_ON ], + [ 12, MoveId.ASSURANCE ], + [ 18, MoveId.HEX ], + [ 24, MoveId.AGILITY ], + [ 30, MoveId.DOUBLE_HIT ], + [ 36, MoveId.U_TURN ], + [ 42, MoveId.DRAGON_DANCE ], + [ 48, MoveId.PHANTOM_FORCE ], + [ 54, MoveId.TAKE_DOWN ], + [ 63, MoveId.DRAGON_RUSH ], + [ 70, MoveId.DOUBLE_EDGE ], + [ 78, MoveId.LAST_RESORT ], ], [Species.ZACIAN]: [ - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.HOWL ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.SACRED_SWORD ], - [ 11, Moves.SLASH ], - [ 22, Moves.SWORDS_DANCE ], - [ 33, Moves.IRON_HEAD ], - [ 44, Moves.NOBLE_ROAR ], - [ 55, Moves.CRUNCH ], - [ 66, Moves.MOONBLAST ], - [ 77, Moves.CLOSE_COMBAT ], - [ 88, Moves.GIGA_IMPACT ], + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.SACRED_SWORD ], + [ 11, MoveId.SLASH ], + [ 22, MoveId.SWORDS_DANCE ], + [ 33, MoveId.IRON_HEAD ], + [ 44, MoveId.NOBLE_ROAR ], + [ 55, MoveId.CRUNCH ], + [ 66, MoveId.MOONBLAST ], + [ 77, MoveId.CLOSE_COMBAT ], + [ 88, MoveId.GIGA_IMPACT ], ], [Species.ZAMAZENTA]: [ - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.HOWL ], - [ 1, Moves.WIDE_GUARD ], - [ 11, Moves.SLASH ], - [ 22, Moves.IRON_DEFENSE ], - [ 33, Moves.IRON_HEAD ], - [ 44, Moves.METAL_BURST ], - [ 55, Moves.CRUNCH ], - [ 66, Moves.MOONBLAST ], - [ 77, Moves.CLOSE_COMBAT ], - [ 88, Moves.GIGA_IMPACT ], + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.WIDE_GUARD ], + [ 11, MoveId.SLASH ], + [ 22, MoveId.IRON_DEFENSE ], + [ 33, MoveId.IRON_HEAD ], + [ 44, MoveId.METAL_BURST ], + [ 55, MoveId.CRUNCH ], + [ 66, MoveId.MOONBLAST ], + [ 77, MoveId.CLOSE_COMBAT ], + [ 88, MoveId.GIGA_IMPACT ], ], [Species.ETERNATUS]: [ - [ 1, Moves.AGILITY ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.POISON_TAIL ], - [ 1, Moves.DRAGON_TAIL ], - [ 8, Moves.TOXIC ], - [ 16, Moves.VENOSHOCK ], - [ 24, Moves.DRAGON_DANCE ], - [ 32, Moves.CROSS_POISON ], - [ 40, Moves.DRAGON_PULSE ], - [ 48, Moves.FLAMETHROWER ], - [ 56, Moves.DYNAMAX_CANNON ], - [ 64, Moves.COSMIC_POWER ], - [ 72, Moves.RECOVER ], - [ 80, Moves.HYPER_BEAM ], - [ 88, Moves.OUTRAGE ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.POISON_TAIL ], + [ 1, MoveId.DRAGON_TAIL ], + [ 8, MoveId.TOXIC ], + [ 16, MoveId.VENOSHOCK ], + [ 24, MoveId.DRAGON_DANCE ], + [ 32, MoveId.CROSS_POISON ], + [ 40, MoveId.DRAGON_PULSE ], + [ 48, MoveId.FLAMETHROWER ], + [ 56, MoveId.DYNAMAX_CANNON ], + [ 64, MoveId.COSMIC_POWER ], + [ 72, MoveId.RECOVER ], + [ 80, MoveId.HYPER_BEAM ], + [ 88, MoveId.OUTRAGE ], ], [Species.KUBFU]: [ - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_SMASH ], - [ 4, Moves.ENDURE ], - [ 8, Moves.FOCUS_ENERGY ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.DETECT ], - [ 32, Moves.BULK_UP ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.DYNAMIC_PUNCH ], - [ 44, Moves.COUNTER ], - [ 48, Moves.CLOSE_COMBAT ], - [ 52, Moves.FOCUS_PUNCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_SMASH ], + [ 4, MoveId.ENDURE ], + [ 8, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.BULK_UP ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.DYNAMIC_PUNCH ], + [ 44, MoveId.COUNTER ], + [ 48, MoveId.CLOSE_COMBAT ], + [ 52, MoveId.FOCUS_PUNCH ], ], [Species.URSHIFU]: [ - [ EVOLVE_MOVE, Moves.WICKED_BLOW ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ENDURE ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.SUCKER_PUNCH ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.DETECT ], - [ 32, Moves.BULK_UP ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.DYNAMIC_PUNCH ], - [ 44, Moves.COUNTER ], - [ 48, Moves.CLOSE_COMBAT ], - [ 52, Moves.FOCUS_PUNCH ], + [ EVOLVE_MOVE, MoveId.WICKED_BLOW ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.BULK_UP ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.DYNAMIC_PUNCH ], + [ 44, MoveId.COUNTER ], + [ 48, MoveId.CLOSE_COMBAT ], + [ 52, MoveId.FOCUS_PUNCH ], ], [Species.ZARUDE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.BIND ], - [ 6, Moves.LEER ], - [ 12, Moves.VINE_WHIP ], - [ 18, Moves.GROWTH ], - [ 24, Moves.FURY_SWIPES ], - [ 30, Moves.SCARY_FACE ], - [ 36, Moves.GRASS_KNOT ], - [ 42, Moves.BITE ], - [ 48, Moves.U_TURN ], - [ 54, Moves.SWAGGER ], - [ 60, Moves.ENERGY_BALL ], - [ 66, Moves.SYNTHESIS ], - [ 72, Moves.HAMMER_ARM ], - [ 78, Moves.THRASH ], - [ 84, Moves.POWER_WHIP ], - [ 90, Moves.JUNGLE_HEALING ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.BIND ], + [ 6, MoveId.LEER ], + [ 12, MoveId.VINE_WHIP ], + [ 18, MoveId.GROWTH ], + [ 24, MoveId.FURY_SWIPES ], + [ 30, MoveId.SCARY_FACE ], + [ 36, MoveId.GRASS_KNOT ], + [ 42, MoveId.BITE ], + [ 48, MoveId.U_TURN ], + [ 54, MoveId.SWAGGER ], + [ 60, MoveId.ENERGY_BALL ], + [ 66, MoveId.SYNTHESIS ], + [ 72, MoveId.HAMMER_ARM ], + [ 78, MoveId.THRASH ], + [ 84, MoveId.POWER_WHIP ], + [ 90, MoveId.JUNGLE_HEALING ], ], [Species.REGIELEKI]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.RAPID_SPIN ], - [ 6, Moves.ELECTROWEB ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.SHOCK_WAVE ], - [ 24, Moves.THUNDER_WAVE ], - [ 30, Moves.EXTREME_SPEED ], - [ 36, Moves.THUNDER_CAGE ], - [ 42, Moves.THUNDERBOLT ], - [ 48, Moves.MAGNET_RISE ], - [ 54, Moves.THRASH ], - [ 60, Moves.LOCK_ON ], - [ 66, Moves.ZAP_CANNON ], - [ 72, Moves.HYPER_BEAM ], - [ 78, Moves.EXPLOSION ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.RAPID_SPIN ], + [ 6, MoveId.ELECTROWEB ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.SHOCK_WAVE ], + [ 24, MoveId.THUNDER_WAVE ], + [ 30, MoveId.EXTREME_SPEED ], + [ 36, MoveId.THUNDER_CAGE ], + [ 42, MoveId.THUNDERBOLT ], + [ 48, MoveId.MAGNET_RISE ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.LOCK_ON ], + [ 66, MoveId.ZAP_CANNON ], + [ 72, MoveId.HYPER_BEAM ], + [ 78, MoveId.EXPLOSION ], ], [Species.REGIDRAGO]: [ - [ 1, Moves.TWISTER ], - [ 6, Moves.BITE ], - [ 12, Moves.ANCIENT_POWER ], - [ 18, Moves.DRAGON_BREATH ], - [ 30, Moves.CRUNCH ], - [ 36, Moves.DRAGON_CLAW ], - [ 42, Moves.HAMMER_ARM ], - [ 48, Moves.DRAGON_DANCE ], - [ 54, Moves.THRASH ], - [ 60, Moves.FOCUS_ENERGY ], - [ 66, Moves.DRAGON_ENERGY ], - [ 72, Moves.HYPER_BEAM ], - [ 78, Moves.EXPLOSION ], + [ 1, MoveId.TWISTER ], + [ 6, MoveId.BITE ], + [ 12, MoveId.ANCIENT_POWER ], + [ 18, MoveId.DRAGON_BREATH ], + [ 30, MoveId.CRUNCH ], + [ 36, MoveId.DRAGON_CLAW ], + [ 42, MoveId.HAMMER_ARM ], + [ 48, MoveId.DRAGON_DANCE ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.FOCUS_ENERGY ], + [ 66, MoveId.DRAGON_ENERGY ], + [ 72, MoveId.HYPER_BEAM ], + [ 78, MoveId.EXPLOSION ], ], [Species.GLASTRIER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 6, Moves.DOUBLE_KICK ], - [ 12, Moves.AVALANCHE ], - [ 18, Moves.STOMP ], - [ 24, Moves.TORMENT ], - [ 30, Moves.MIST ], - [ 36, Moves.ICICLE_CRASH ], - [ 42, Moves.TAKE_DOWN ], - [ 48, Moves.IRON_DEFENSE ], - [ 54, Moves.THRASH ], - [ 60, Moves.TAUNT ], - [ 66, Moves.DOUBLE_EDGE ], - [ 72, Moves.SWORDS_DANCE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 6, MoveId.DOUBLE_KICK ], + [ 12, MoveId.AVALANCHE ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.TORMENT ], + [ 30, MoveId.MIST ], + [ 36, MoveId.ICICLE_CRASH ], + [ 42, MoveId.TAKE_DOWN ], + [ 48, MoveId.IRON_DEFENSE ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.TAUNT ], + [ 66, MoveId.DOUBLE_EDGE ], + [ 72, MoveId.SWORDS_DANCE ], ], [Species.SPECTRIER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 6, Moves.DOUBLE_KICK ], - [ 12, Moves.HEX ], - [ 18, Moves.STOMP ], - [ 24, Moves.CONFUSE_RAY ], - [ 30, Moves.HAZE ], - [ 36, Moves.SHADOW_BALL ], - [ 42, Moves.TAKE_DOWN ], - [ 48, Moves.AGILITY ], - [ 54, Moves.THRASH ], - [ 60, Moves.DISABLE ], - [ 66, Moves.DOUBLE_EDGE ], - [ 72, Moves.NASTY_PLOT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 6, MoveId.DOUBLE_KICK ], + [ 12, MoveId.HEX ], + [ 18, MoveId.STOMP ], + [ 24, MoveId.CONFUSE_RAY ], + [ 30, MoveId.HAZE ], + [ 36, MoveId.SHADOW_BALL ], + [ 42, MoveId.TAKE_DOWN ], + [ 48, MoveId.AGILITY ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.DISABLE ], + [ 66, MoveId.DOUBLE_EDGE ], + [ 72, MoveId.NASTY_PLOT ], ], [Species.CALYREX]: [ - [ 1, Moves.POUND ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.CONFUSION ], - [ 8, Moves.LIFE_DEW ], - [ 16, Moves.GIGA_DRAIN ], - [ 24, Moves.PSYSHOCK ], - [ 32, Moves.HELPING_HAND ], - [ 40, Moves.GRASSY_TERRAIN ], - [ 40, Moves.PSYCHIC_TERRAIN ], - [ 48, Moves.ENERGY_BALL ], - [ 56, Moves.PSYCHIC ], - [ 64, Moves.LEECH_SEED ], - [ 72, Moves.HEAL_PULSE ], - [ 80, Moves.SOLAR_BEAM ], - [ 88, Moves.FUTURE_SIGHT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.CONFUSION ], + [ 8, MoveId.LIFE_DEW ], + [ 16, MoveId.GIGA_DRAIN ], + [ 24, MoveId.PSYSHOCK ], + [ 32, MoveId.HELPING_HAND ], + [ 40, MoveId.GRASSY_TERRAIN ], + [ 40, MoveId.PSYCHIC_TERRAIN ], + [ 48, MoveId.ENERGY_BALL ], + [ 56, MoveId.PSYCHIC ], + [ 64, MoveId.LEECH_SEED ], + [ 72, MoveId.HEAL_PULSE ], + [ 80, MoveId.SOLAR_BEAM ], + [ 88, MoveId.FUTURE_SIGHT ], ], [Species.WYRDEER]: [ - [ EVOLVE_MOVE, Moves.PSYSHIELD_BASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ME_FIRST ], // Previous Stage Move - [ 3, Moves.LEER ], - [ 7, Moves.ASTONISH ], - [ 10, Moves.HYPNOSIS ], - [ 13, Moves.STOMP ], - [ 16, Moves.SAND_ATTACK ], - [ 21, Moves.TAKE_DOWN ], - [ 23, Moves.CONFUSE_RAY ], - [ 27, Moves.CALM_MIND ], - [ 32, Moves.ROLE_PLAY ], - [ 37, Moves.ZEN_HEADBUTT ], - [ 49, Moves.IMPRISON ], - [ 55, Moves.DOUBLE_EDGE ], - [ 62, Moves.MEGAHORN ], + [ EVOLVE_MOVE, MoveId.PSYSHIELD_BASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ME_FIRST ], // Previous Stage Move + [ 3, MoveId.LEER ], + [ 7, MoveId.ASTONISH ], + [ 10, MoveId.HYPNOSIS ], + [ 13, MoveId.STOMP ], + [ 16, MoveId.SAND_ATTACK ], + [ 21, MoveId.TAKE_DOWN ], + [ 23, MoveId.CONFUSE_RAY ], + [ 27, MoveId.CALM_MIND ], + [ 32, MoveId.ROLE_PLAY ], + [ 37, MoveId.ZEN_HEADBUTT ], + [ 49, MoveId.IMPRISON ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 62, MoveId.MEGAHORN ], ], [Species.KLEAVOR]: [ - [ EVOLVE_MOVE, Moves.STONE_AXE ], - [ 1, Moves.WING_ATTACK ], // Previous Stage Move - [ 1, Moves.AIR_SLASH ], // Previous Stage Move - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 4, Moves.FURY_CUTTER ], - [ 8, Moves.FALSE_SWIPE ], - [ 12, Moves.SMACK_DOWN ], - [ 16, Moves.DOUBLE_TEAM ], - [ 20, Moves.DOUBLE_HIT ], - [ 24, Moves.SLASH ], - [ 28, Moves.FOCUS_ENERGY ], - [ 30, Moves.STEEL_WING ], // Custom - [ 32, Moves.AGILITY ], - [ 36, Moves.ROCK_SLIDE ], - [ 40, Moves.X_SCISSOR ], - [ 44, Moves.SWORDS_DANCE ], + [ EVOLVE_MOVE, MoveId.STONE_AXE ], + [ 1, MoveId.WING_ATTACK ], // Previous Stage Move + [ 1, MoveId.AIR_SLASH ], // Previous Stage Move + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 4, MoveId.FURY_CUTTER ], + [ 8, MoveId.FALSE_SWIPE ], + [ 12, MoveId.SMACK_DOWN ], + [ 16, MoveId.DOUBLE_TEAM ], + [ 20, MoveId.DOUBLE_HIT ], + [ 24, MoveId.SLASH ], + [ 28, MoveId.FOCUS_ENERGY ], + [ 30, MoveId.STEEL_WING ], // Custom + [ 32, MoveId.AGILITY ], + [ 36, MoveId.ROCK_SLIDE ], + [ 40, MoveId.X_SCISSOR ], + [ 44, MoveId.SWORDS_DANCE ], ], [Species.URSALUNA]: [ - [ EVOLVE_MOVE, Moves.HEADLONG_RUSH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.COVET ], - [ 1, Moves.FLING ], // Previous Stage Move - [ 1, Moves.BABY_DOLL_EYES ], // Previous Stage Move - [ 1, Moves.FAKE_TEARS ], - [ 1, Moves.CHARM ], // Previous Stage Moves - [ 8, Moves.FURY_SWIPES ], - [ 13, Moves.PAYBACK ], - [ 17, Moves.SWEET_SCENT ], - [ 22, Moves.SLASH ], - [ 25, Moves.PLAY_NICE ], - [ 29, Moves.PLAY_ROUGH ], - [ 35, Moves.SCARY_FACE ], - [ 41, Moves.REST ], - [ 41, Moves.SNORE ], - [ 48, Moves.HIGH_HORSEPOWER ], - [ 56, Moves.THRASH ], - [ 64, Moves.HAMMER_ARM ], + [ EVOLVE_MOVE, MoveId.HEADLONG_RUSH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.COVET ], + [ 1, MoveId.FLING ], // Previous Stage Move + [ 1, MoveId.BABY_DOLL_EYES ], // Previous Stage Move + [ 1, MoveId.FAKE_TEARS ], + [ 1, MoveId.CHARM ], // Previous Stage Moves + [ 8, MoveId.FURY_SWIPES ], + [ 13, MoveId.PAYBACK ], + [ 17, MoveId.SWEET_SCENT ], + [ 22, MoveId.SLASH ], + [ 25, MoveId.PLAY_NICE ], + [ 29, MoveId.PLAY_ROUGH ], + [ 35, MoveId.SCARY_FACE ], + [ 41, MoveId.REST ], + [ 41, MoveId.SNORE ], + [ 48, MoveId.HIGH_HORSEPOWER ], + [ 56, MoveId.THRASH ], + [ 64, MoveId.HAMMER_ARM ], ], [Species.BASCULEGION]: [ - [ RELEARN_MOVE, Moves.FINAL_GAMBIT ], // Previous Stage Move, White Stripe currently shares moveset with other forms - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SHADOW_BALL ], - [ 1, Moves.PHANTOM_FORCE ], - [ 4, Moves.TACKLE ], - [ 8, Moves.FLAIL ], - [ 12, Moves.AQUA_JET ], - [ 16, Moves.BITE ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.SOAK ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.UPROAR ], - [ 44, Moves.WAVE_CRASH ], - [ 48, Moves.THRASH ], - [ 52, Moves.DOUBLE_EDGE ], - [ 56, Moves.HEAD_SMASH ], + [ RELEARN_MOVE, MoveId.FINAL_GAMBIT ], // Previous Stage Move, White Stripe currently shares moveset with other forms + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SHADOW_BALL ], + [ 1, MoveId.PHANTOM_FORCE ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.FLAIL ], + [ 12, MoveId.AQUA_JET ], + [ 16, MoveId.BITE ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.SOAK ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.UPROAR ], + [ 44, MoveId.WAVE_CRASH ], + [ 48, MoveId.THRASH ], + [ 52, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.HEAD_SMASH ], ], [Species.SNEASLER]: [ - [ EVOLVE_MOVE, Moves.DIRE_CLAW ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.FLING ], - [ 6, Moves.TAUNT ], - [ 12, Moves.QUICK_ATTACK ], - [ 18, Moves.METAL_CLAW ], - [ 24, Moves.POISON_JAB ], - [ 30, Moves.BRICK_BREAK ], - [ 36, Moves.HONE_CLAWS ], - [ 42, Moves.SLASH ], - [ 48, Moves.AGILITY ], - [ 54, Moves.SCREECH ], - [ 60, Moves.CLOSE_COMBAT ], + [ EVOLVE_MOVE, MoveId.DIRE_CLAW ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.FLING ], + [ 6, MoveId.TAUNT ], + [ 12, MoveId.QUICK_ATTACK ], + [ 18, MoveId.METAL_CLAW ], + [ 24, MoveId.POISON_JAB ], + [ 30, MoveId.BRICK_BREAK ], + [ 36, MoveId.HONE_CLAWS ], + [ 42, MoveId.SLASH ], + [ 48, MoveId.AGILITY ], + [ 54, MoveId.SCREECH ], + [ 60, MoveId.CLOSE_COMBAT ], ], [Species.OVERQWIL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POISON_STING ], - [ 4, Moves.HARDEN ], - [ 8, Moves.BITE ], - [ 12, Moves.FELL_STINGER ], - [ 16, Moves.MINIMIZE ], - [ 20, Moves.SPIKES ], - [ 24, Moves.BRINE ], - [ 28, Moves.BARB_BARRAGE ], - [ 32, Moves.PIN_MISSILE ], - [ 36, Moves.TOXIC_SPIKES ], - [ 40, Moves.STOCKPILE ], - [ 40, Moves.SPIT_UP ], - [ 44, Moves.TOXIC ], - [ 48, Moves.CRUNCH ], - [ 52, Moves.ACUPRESSURE ], - [ 56, Moves.DESTINY_BOND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POISON_STING ], + [ 4, MoveId.HARDEN ], + [ 8, MoveId.BITE ], + [ 12, MoveId.FELL_STINGER ], + [ 16, MoveId.MINIMIZE ], + [ 20, MoveId.SPIKES ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.BARB_BARRAGE ], + [ 32, MoveId.PIN_MISSILE ], + [ 36, MoveId.TOXIC_SPIKES ], + [ 40, MoveId.STOCKPILE ], + [ 40, MoveId.SPIT_UP ], + [ 44, MoveId.TOXIC ], + [ 48, MoveId.CRUNCH ], + [ 52, MoveId.ACUPRESSURE ], + [ 56, MoveId.DESTINY_BOND ], ], [Species.ENAMORUS]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.FAIRY_WIND ], - [ 5, Moves.TORMENT ], - [ 10, Moves.FLATTER ], - [ 15, Moves.TWISTER ], - [ 20, Moves.DRAINING_KISS ], - [ 25, Moves.IRON_DEFENSE ], - [ 30, Moves.IMPRISON ], - [ 35, Moves.MYSTICAL_FIRE ], - [ 40, Moves.DAZZLING_GLEAM ], - [ 45, Moves.EXTRASENSORY ], - [ 50, Moves.UPROAR ], - [ 55, Moves.SUPERPOWER ], - [ 60, Moves.HEALING_WISH ], - [ 65, Moves.MOONBLAST ], - [ 70, Moves.OUTRAGE ], - [ 75, Moves.SPRINGTIDE_STORM ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.FAIRY_WIND ], + [ 5, MoveId.TORMENT ], + [ 10, MoveId.FLATTER ], + [ 15, MoveId.TWISTER ], + [ 20, MoveId.DRAINING_KISS ], + [ 25, MoveId.IRON_DEFENSE ], + [ 30, MoveId.IMPRISON ], + [ 35, MoveId.MYSTICAL_FIRE ], + [ 40, MoveId.DAZZLING_GLEAM ], + [ 45, MoveId.EXTRASENSORY ], + [ 50, MoveId.UPROAR ], + [ 55, MoveId.SUPERPOWER ], + [ 60, MoveId.HEALING_WISH ], + [ 65, MoveId.MOONBLAST ], + [ 70, MoveId.OUTRAGE ], + [ 75, MoveId.SPRINGTIDE_STORM ], ], [Species.SPRIGATITO]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.LEAFAGE ], - [ 7, Moves.BITE ], - [ 10, Moves.HONE_CLAWS ], - [ 13, Moves.MAGICAL_LEAF ], - [ 15, Moves.QUICK_ATTACK ], - [ 17, Moves.SEED_BOMB ], - [ 21, Moves.U_TURN ], - [ 25, Moves.WORRY_SEED ], - [ 28, Moves.SLASH ], - [ 32, Moves.ENERGY_BALL ], - [ 36, Moves.PLAY_ROUGH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.LEAFAGE ], + [ 7, MoveId.BITE ], + [ 10, MoveId.HONE_CLAWS ], + [ 13, MoveId.MAGICAL_LEAF ], + [ 15, MoveId.QUICK_ATTACK ], + [ 17, MoveId.SEED_BOMB ], + [ 21, MoveId.U_TURN ], + [ 25, MoveId.WORRY_SEED ], + [ 28, MoveId.SLASH ], + [ 32, MoveId.ENERGY_BALL ], + [ 36, MoveId.PLAY_ROUGH ], ], [Species.FLORAGATO]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.LEAFAGE ], - [ 7, Moves.BITE ], - [ 10, Moves.HONE_CLAWS ], - [ 13, Moves.MAGICAL_LEAF ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.SEED_BOMB ], - [ 24, Moves.U_TURN ], - [ 28, Moves.WORRY_SEED ], - [ 33, Moves.SLASH ], - [ 38, Moves.ENERGY_BALL ], - [ 42, Moves.PLAY_ROUGH ], - [ 46, Moves.LEAF_STORM ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.LEAFAGE ], + [ 7, MoveId.BITE ], + [ 10, MoveId.HONE_CLAWS ], + [ 13, MoveId.MAGICAL_LEAF ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.SEED_BOMB ], + [ 24, MoveId.U_TURN ], + [ 28, MoveId.WORRY_SEED ], + [ 33, MoveId.SLASH ], + [ 38, MoveId.ENERGY_BALL ], + [ 42, MoveId.PLAY_ROUGH ], + [ 46, MoveId.LEAF_STORM ], ], [Species.MEOWSCARADA]: [ - [ EVOLVE_MOVE, Moves.FLOWER_TRICK ], - [ RELEARN_MOVE, Moves.DOUBLE_TEAM ], - [ RELEARN_MOVE, Moves.TRICK ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.LEAFAGE ], - [ 7, Moves.BITE ], - [ 10, Moves.HONE_CLAWS ], - [ 13, Moves.MAGICAL_LEAF ], - [ 15, Moves.QUICK_ATTACK ], - [ 20, Moves.SEED_BOMB ], - [ 24, Moves.U_TURN ], - [ 29, Moves.WORRY_SEED ], - [ 33, Moves.SLASH ], - [ 38, Moves.NIGHT_SLASH ], - [ 42, Moves.ENERGY_BALL ], - [ 47, Moves.PLAY_ROUGH ], - [ 52, Moves.KNOCK_OFF ], - [ 58, Moves.GRASSY_TERRAIN ], - [ 64, Moves.LEAF_STORM ], + [ EVOLVE_MOVE, MoveId.FLOWER_TRICK ], + [ RELEARN_MOVE, MoveId.DOUBLE_TEAM ], + [ RELEARN_MOVE, MoveId.TRICK ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.LEAFAGE ], + [ 7, MoveId.BITE ], + [ 10, MoveId.HONE_CLAWS ], + [ 13, MoveId.MAGICAL_LEAF ], + [ 15, MoveId.QUICK_ATTACK ], + [ 20, MoveId.SEED_BOMB ], + [ 24, MoveId.U_TURN ], + [ 29, MoveId.WORRY_SEED ], + [ 33, MoveId.SLASH ], + [ 38, MoveId.NIGHT_SLASH ], + [ 42, MoveId.ENERGY_BALL ], + [ 47, MoveId.PLAY_ROUGH ], + [ 52, MoveId.KNOCK_OFF ], + [ 58, MoveId.GRASSY_TERRAIN ], + [ 64, MoveId.LEAF_STORM ], ], [Species.FUECOCO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 7, Moves.ROUND ], - [ 12, Moves.BITE ], - [ 15, Moves.INCINERATE ], - [ 17, Moves.YAWN ], - [ 21, Moves.SNARL ], - [ 25, Moves.ROAR ], - [ 28, Moves.FLAMETHROWER ], - [ 32, Moves.HYPER_VOICE ], - [ 36, Moves.FIRE_BLAST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 7, MoveId.ROUND ], + [ 12, MoveId.BITE ], + [ 15, MoveId.INCINERATE ], + [ 17, MoveId.YAWN ], + [ 21, MoveId.SNARL ], + [ 25, MoveId.ROAR ], + [ 28, MoveId.FLAMETHROWER ], + [ 32, MoveId.HYPER_VOICE ], + [ 36, MoveId.FIRE_BLAST ], ], [Species.CROCALOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 7, Moves.LICK ], - [ 10, Moves.ROUND ], - [ 12, Moves.BITE ], - [ 15, Moves.YAWN ], - [ 17, Moves.INCINERATE ], - [ 24, Moves.SNARL ], - [ 28, Moves.ROAR ], - [ 32, Moves.FLAMETHROWER ], - [ 38, Moves.HYPER_VOICE ], - [ 42, Moves.WILL_O_WISP ], - [ 47, Moves.FIRE_BLAST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 7, MoveId.LICK ], + [ 10, MoveId.ROUND ], + [ 12, MoveId.BITE ], + [ 15, MoveId.YAWN ], + [ 17, MoveId.INCINERATE ], + [ 24, MoveId.SNARL ], + [ 28, MoveId.ROAR ], + [ 32, MoveId.FLAMETHROWER ], + [ 38, MoveId.HYPER_VOICE ], + [ 42, MoveId.WILL_O_WISP ], + [ 47, MoveId.FIRE_BLAST ], ], [Species.SKELEDIRGE]: [ - [ EVOLVE_MOVE, Moves.TORCH_SONG ], - [ RELEARN_MOVE, Moves.SING ], - [ RELEARN_MOVE, Moves.YAWN ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 7, Moves.LICK ], - [ 10, Moves.ROUND ], - [ 12, Moves.SCARY_FACE ], - [ 15, Moves.BITE ], - [ 17, Moves.INCINERATE ], - [ 24, Moves.SNARL ], - [ 28, Moves.ROAR ], - [ 32, Moves.FLAMETHROWER ], - [ 38, Moves.SHADOW_BALL ], - [ 42, Moves.HYPER_VOICE ], - [ 47, Moves.WILL_O_WISP ], - [ 47, Moves.HEX ], - [ 58, Moves.FIRE_BLAST ], - [ 64, Moves.OVERHEAT ], + [ EVOLVE_MOVE, MoveId.TORCH_SONG ], + [ RELEARN_MOVE, MoveId.SING ], + [ RELEARN_MOVE, MoveId.YAWN ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 7, MoveId.LICK ], + [ 10, MoveId.ROUND ], + [ 12, MoveId.SCARY_FACE ], + [ 15, MoveId.BITE ], + [ 17, MoveId.INCINERATE ], + [ 24, MoveId.SNARL ], + [ 28, MoveId.ROAR ], + [ 32, MoveId.FLAMETHROWER ], + [ 38, MoveId.SHADOW_BALL ], + [ 42, MoveId.HYPER_VOICE ], + [ 47, MoveId.WILL_O_WISP ], + [ 47, MoveId.HEX ], + [ 58, MoveId.FIRE_BLAST ], + [ 64, MoveId.OVERHEAT ], ], [Species.QUAXLY]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 7, Moves.WORK_UP ], - [ 10, Moves.WING_ATTACK ], - [ 13, Moves.AQUA_JET ], - [ 17, Moves.DOUBLE_HIT ], - [ 21, Moves.AQUA_CUTTER ], - [ 24, Moves.AIR_SLASH ], - [ 28, Moves.FOCUS_ENERGY ], - [ 31, Moves.ACROBATICS ], - [ 35, Moves.LIQUIDATION ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 7, MoveId.WORK_UP ], + [ 10, MoveId.WING_ATTACK ], + [ 13, MoveId.AQUA_JET ], + [ 17, MoveId.DOUBLE_HIT ], + [ 21, MoveId.AQUA_CUTTER ], + [ 24, MoveId.AIR_SLASH ], + [ 28, MoveId.FOCUS_ENERGY ], + [ 31, MoveId.ACROBATICS ], + [ 35, MoveId.LIQUIDATION ], ], [Species.QUAXWELL]: [ - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DOUBLE_HIT ], - [ 7, Moves.WORK_UP ], - [ 10, Moves.WING_ATTACK ], - [ 13, Moves.AQUA_JET ], - [ 17, Moves.WATER_PULSE ], - [ 19, Moves.LOW_SWEEP ], - [ 23, Moves.AQUA_CUTTER ], - [ 27, Moves.AIR_SLASH ], - [ 32, Moves.FOCUS_ENERGY ], - [ 38, Moves.ACROBATICS ], - [ 43, Moves.LIQUIDATION ], - [ 48, Moves.FEATHER_DANCE ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DOUBLE_HIT ], + [ 7, MoveId.WORK_UP ], + [ 10, MoveId.WING_ATTACK ], + [ 13, MoveId.AQUA_JET ], + [ 17, MoveId.WATER_PULSE ], + [ 19, MoveId.LOW_SWEEP ], + [ 23, MoveId.AQUA_CUTTER ], + [ 27, MoveId.AIR_SLASH ], + [ 32, MoveId.FOCUS_ENERGY ], + [ 38, MoveId.ACROBATICS ], + [ 43, MoveId.LIQUIDATION ], + [ 48, MoveId.FEATHER_DANCE ], ], [Species.QUAQUAVAL]: [ - [ EVOLVE_MOVE, Moves.AQUA_STEP ], - [ RELEARN_MOVE, Moves.COUNTER ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.DOUBLE_HIT ], - [ 7, Moves.WORK_UP ], - [ 10, Moves.WING_ATTACK ], - [ 13, Moves.AQUA_JET ], - [ 17, Moves.WATER_PULSE ], - [ 17, Moves.LOW_SWEEP ], - [ 21, Moves.AQUA_CUTTER ], - [ 27, Moves.AIR_SLASH ], - [ 32, Moves.FOCUS_ENERGY ], - [ 38, Moves.MEGA_KICK ], - [ 43, Moves.ACROBATICS ], - [ 47, Moves.LIQUIDATION ], - [ 52, Moves.FEATHER_DANCE ], - [ 58, Moves.CLOSE_COMBAT ], - [ 64, Moves.WAVE_CRASH ], + [ EVOLVE_MOVE, MoveId.AQUA_STEP ], + [ RELEARN_MOVE, MoveId.COUNTER ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.DOUBLE_HIT ], + [ 7, MoveId.WORK_UP ], + [ 10, MoveId.WING_ATTACK ], + [ 13, MoveId.AQUA_JET ], + [ 17, MoveId.WATER_PULSE ], + [ 17, MoveId.LOW_SWEEP ], + [ 21, MoveId.AQUA_CUTTER ], + [ 27, MoveId.AIR_SLASH ], + [ 32, MoveId.FOCUS_ENERGY ], + [ 38, MoveId.MEGA_KICK ], + [ 43, MoveId.ACROBATICS ], + [ 47, MoveId.LIQUIDATION ], + [ 52, MoveId.FEATHER_DANCE ], + [ 58, MoveId.CLOSE_COMBAT ], + [ 64, MoveId.WAVE_CRASH ], ], [Species.LECHONK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.DISARMING_VOICE ], - [ 8, Moves.ECHOED_VOICE ], - [ 12, Moves.MUD_SHOT ], - [ 15, Moves.COVET ], - [ 17, Moves.DIG ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.YAWN ], - [ 27, Moves.TAKE_DOWN ], - [ 30, Moves.WORK_UP ], - [ 32, Moves.UPROAR ], - [ 35, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.DISARMING_VOICE ], + [ 8, MoveId.ECHOED_VOICE ], + [ 12, MoveId.MUD_SHOT ], + [ 15, MoveId.COVET ], + [ 17, MoveId.DIG ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.YAWN ], + [ 27, MoveId.TAKE_DOWN ], + [ 30, MoveId.WORK_UP ], + [ 32, MoveId.UPROAR ], + [ 35, MoveId.DOUBLE_EDGE ], ], [Species.OINKOLOGNE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.DISARMING_VOICE ], - [ 8, Moves.ECHOED_VOICE ], - [ 12, Moves.MUD_SHOT ], - [ 15, Moves.COVET ], - [ 17, Moves.DIG ], - [ 23, Moves.HEADBUTT ], - [ 26, Moves.TAKE_DOWN ], - [ 27, Moves.YAWN ], - [ 34, Moves.WORK_UP ], - [ 38, Moves.UPROAR ], - [ 42, Moves.DOUBLE_EDGE ], - [ 48, Moves.EARTH_POWER ], - [ 54, Moves.BELCH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.DISARMING_VOICE ], + [ 8, MoveId.ECHOED_VOICE ], + [ 12, MoveId.MUD_SHOT ], + [ 15, MoveId.COVET ], + [ 17, MoveId.DIG ], + [ 23, MoveId.HEADBUTT ], + [ 26, MoveId.TAKE_DOWN ], + [ 27, MoveId.YAWN ], + [ 34, MoveId.WORK_UP ], + [ 38, MoveId.UPROAR ], + [ 42, MoveId.DOUBLE_EDGE ], + [ 48, MoveId.EARTH_POWER ], + [ 54, MoveId.BELCH ], ], [Species.TAROUNTULA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 5, Moves.STRUGGLE_BUG ], - [ 8, Moves.ASSURANCE ], - [ 11, Moves.FEINT ], - [ 14, Moves.BUG_BITE ], - [ 18, Moves.BLOCK ], - [ 22, Moves.COUNTER ], - [ 25, Moves.HEADBUTT ], - [ 29, Moves.STICKY_WEB ], - [ 33, Moves.GASTRO_ACID ], - [ 36, Moves.CIRCLE_THROW ], - [ 40, Moves.THROAT_CHOP ], - [ 44, Moves.SKITTER_SMACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 5, MoveId.STRUGGLE_BUG ], + [ 8, MoveId.ASSURANCE ], + [ 11, MoveId.FEINT ], + [ 14, MoveId.BUG_BITE ], + [ 18, MoveId.BLOCK ], + [ 22, MoveId.COUNTER ], + [ 25, MoveId.HEADBUTT ], + [ 29, MoveId.STICKY_WEB ], + [ 33, MoveId.GASTRO_ACID ], + [ 36, MoveId.CIRCLE_THROW ], + [ 40, MoveId.THROAT_CHOP ], + [ 44, MoveId.SKITTER_SMACK ], ], [Species.SPIDOPS]: [ - [ EVOLVE_MOVE, Moves.SILK_TRAP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.STRING_SHOT ], - [ 5, Moves.STRUGGLE_BUG ], - [ 8, Moves.ASSURANCE ], - [ 11, Moves.FEINT ], - [ 14, Moves.BUG_BITE ], - [ 19, Moves.BLOCK ], - [ 24, Moves.COUNTER ], - [ 28, Moves.HEADBUTT ], - [ 33, Moves.STICKY_WEB ], - [ 37, Moves.GASTRO_ACID ], - [ 41, Moves.CIRCLE_THROW ], - [ 45, Moves.THROAT_CHOP ], - [ 49, Moves.SKITTER_SMACK ], + [ EVOLVE_MOVE, MoveId.SILK_TRAP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.STRING_SHOT ], + [ 5, MoveId.STRUGGLE_BUG ], + [ 8, MoveId.ASSURANCE ], + [ 11, MoveId.FEINT ], + [ 14, MoveId.BUG_BITE ], + [ 19, MoveId.BLOCK ], + [ 24, MoveId.COUNTER ], + [ 28, MoveId.HEADBUTT ], + [ 33, MoveId.STICKY_WEB ], + [ 37, MoveId.GASTRO_ACID ], + [ 41, MoveId.CIRCLE_THROW ], + [ 45, MoveId.THROAT_CHOP ], + [ 49, MoveId.SKITTER_SMACK ], ], [Species.NYMBLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 4, Moves.STRUGGLE_BUG ], - [ 6, Moves.ASTONISH ], - [ 9, Moves.ASSURANCE ], - [ 11, Moves.DOUBLE_KICK ], - [ 14, Moves.SCREECH ], - [ 18, Moves.ENDURE ], - [ 22, Moves.BUG_BITE ], - [ 26, Moves.FEINT ], - [ 30, Moves.AGILITY ], - [ 38, Moves.SUCKER_PUNCH ], - [ 41, Moves.FIRST_IMPRESSION ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 4, MoveId.STRUGGLE_BUG ], + [ 6, MoveId.ASTONISH ], + [ 9, MoveId.ASSURANCE ], + [ 11, MoveId.DOUBLE_KICK ], + [ 14, MoveId.SCREECH ], + [ 18, MoveId.ENDURE ], + [ 22, MoveId.BUG_BITE ], + [ 26, MoveId.FEINT ], + [ 30, MoveId.AGILITY ], + [ 38, MoveId.SUCKER_PUNCH ], + [ 41, MoveId.FIRST_IMPRESSION ], ], [Species.LOKIX]: [ - [ EVOLVE_MOVE, Moves.LUNGE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.DETECT ], - [ 4, Moves.STRUGGLE_BUG ], - [ 6, Moves.ASTONISH ], - [ 9, Moves.ASSURANCE ], - [ 11, Moves.DOUBLE_KICK ], - [ 14, Moves.SCREECH ], - [ 18, Moves.ENDURE ], - [ 22, Moves.BUG_BITE ], - [ 28, Moves.FEINT ], - [ 32, Moves.AGILITY ], - [ 36, Moves.THROAT_CHOP ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.FIRST_IMPRESSION ], - [ 48, Moves.BOUNCE ], - [ 53, Moves.AXE_KICK ], + [ EVOLVE_MOVE, MoveId.LUNGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.DETECT ], + [ 4, MoveId.STRUGGLE_BUG ], + [ 6, MoveId.ASTONISH ], + [ 9, MoveId.ASSURANCE ], + [ 11, MoveId.DOUBLE_KICK ], + [ 14, MoveId.SCREECH ], + [ 18, MoveId.ENDURE ], + [ 22, MoveId.BUG_BITE ], + [ 28, MoveId.FEINT ], + [ 32, MoveId.AGILITY ], + [ 36, MoveId.THROAT_CHOP ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.FIRST_IMPRESSION ], + [ 48, MoveId.BOUNCE ], + [ 53, MoveId.AXE_KICK ], ], [Species.PAWMI]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 3, Moves.THUNDER_SHOCK ], - [ 6, Moves.QUICK_ATTACK ], - [ 8, Moves.CHARGE ], - [ 12, Moves.NUZZLE ], - [ 15, Moves.DIG ], - [ 19, Moves.BITE ], - [ 23, Moves.SPARK ], - [ 27, Moves.THUNDER_WAVE ], - [ 31, Moves.ENTRAINMENT ], - [ 35, Moves.SLAM ], - [ 38, Moves.DISCHARGE ], - [ 40, Moves.AGILITY ], - [ 44, Moves.WILD_CHARGE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.QUICK_ATTACK ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.NUZZLE ], + [ 15, MoveId.DIG ], + [ 19, MoveId.BITE ], + [ 23, MoveId.SPARK ], + [ 27, MoveId.THUNDER_WAVE ], + [ 31, MoveId.ENTRAINMENT ], + [ 35, MoveId.SLAM ], + [ 38, MoveId.DISCHARGE ], + [ 40, MoveId.AGILITY ], + [ 44, MoveId.WILD_CHARGE ], ], [Species.PAWMO]: [ - [ EVOLVE_MOVE, Moves.ARM_THRUST ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 3, Moves.THUNDER_SHOCK ], - [ 6, Moves.QUICK_ATTACK ], - [ 8, Moves.CHARGE ], - [ 12, Moves.NUZZLE ], - [ 15, Moves.DIG ], - [ 19, Moves.BITE ], - [ 23, Moves.SPARK ], - [ 27, Moves.THUNDER_WAVE ], - [ 32, Moves.SLAM ], - [ 38, Moves.ENTRAINMENT ], - [ 42, Moves.DISCHARGE ], - [ 46, Moves.AGILITY ], - [ 52, Moves.WILD_CHARGE ], + [ EVOLVE_MOVE, MoveId.ARM_THRUST ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.QUICK_ATTACK ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.NUZZLE ], + [ 15, MoveId.DIG ], + [ 19, MoveId.BITE ], + [ 23, MoveId.SPARK ], + [ 27, MoveId.THUNDER_WAVE ], + [ 32, MoveId.SLAM ], + [ 38, MoveId.ENTRAINMENT ], + [ 42, MoveId.DISCHARGE ], + [ 46, MoveId.AGILITY ], + [ 52, MoveId.WILD_CHARGE ], ], [Species.PAWMOT]: [ - [ EVOLVE_MOVE, Moves.REVIVAL_BLESSING ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.WILD_CHARGE ], - [ 3, Moves.THUNDER_SHOCK ], - [ 6, Moves.QUICK_ATTACK ], - [ 8, Moves.CHARGE ], - [ 12, Moves.NUZZLE ], - [ 15, Moves.DIG ], - [ 19, Moves.BITE ], - [ 23, Moves.SPARK ], - [ 25, Moves.ARM_THRUST ], - [ 29, Moves.THUNDER_WAVE ], - [ 33, Moves.SLAM ], - [ 39, Moves.ENTRAINMENT ], - [ 44, Moves.CLOSE_COMBAT ], - [ 49, Moves.DISCHARGE ], - [ 54, Moves.AGILITY ], - [ 60, Moves.DOUBLE_SHOCK ], + [ EVOLVE_MOVE, MoveId.REVIVAL_BLESSING ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WILD_CHARGE ], + [ 3, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.QUICK_ATTACK ], + [ 8, MoveId.CHARGE ], + [ 12, MoveId.NUZZLE ], + [ 15, MoveId.DIG ], + [ 19, MoveId.BITE ], + [ 23, MoveId.SPARK ], + [ 25, MoveId.ARM_THRUST ], + [ 29, MoveId.THUNDER_WAVE ], + [ 33, MoveId.SLAM ], + [ 39, MoveId.ENTRAINMENT ], + [ 44, MoveId.CLOSE_COMBAT ], + [ 49, MoveId.DISCHARGE ], + [ 54, MoveId.AGILITY ], + [ 60, MoveId.DOUBLE_SHOCK ], ], [Species.TANDEMAUS]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 5, Moves.ECHOED_VOICE ], - [ 8, Moves.HELPING_HAND ], - [ 11, Moves.SUPER_FANG ], - [ 14, Moves.DOUBLE_HIT ], - [ 18, Moves.BULLET_SEED ], - [ 22, Moves.ENCORE ], - [ 26, Moves.PLAY_ROUGH ], - [ 30, Moves.HYPER_VOICE ], - [ 33, Moves.CHARM ], - [ 37, Moves.BEAT_UP ], - [ 41, Moves.COPYCAT ], - [ 46, Moves.POPULATION_BOMB ], + [ 1, MoveId.POUND ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 5, MoveId.ECHOED_VOICE ], + [ 8, MoveId.HELPING_HAND ], + [ 11, MoveId.SUPER_FANG ], + [ 14, MoveId.DOUBLE_HIT ], + [ 18, MoveId.BULLET_SEED ], + [ 22, MoveId.ENCORE ], + [ 26, MoveId.PLAY_ROUGH ], + [ 30, MoveId.HYPER_VOICE ], + [ 33, MoveId.CHARM ], + [ 37, MoveId.BEAT_UP ], + [ 41, MoveId.COPYCAT ], + [ 46, MoveId.POPULATION_BOMB ], ], [Species.MAUSHOLD]: [ - [ 1, Moves.POUND ], - [ 1, Moves.FOLLOW_ME ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 1, Moves.TIDY_UP ], - [ 5, Moves.ECHOED_VOICE ], - [ 8, Moves.HELPING_HAND ], - [ 11, Moves.SUPER_FANG ], - [ 14, Moves.DOUBLE_HIT ], - [ 18, Moves.BULLET_SEED ], - [ 22, Moves.ENCORE ], - [ 29, Moves.PLAY_ROUGH ], - [ 33, Moves.HYPER_VOICE ], - [ 37, Moves.CHARM ], - [ 41, Moves.BEAT_UP ], - [ 46, Moves.COPYCAT ], - [ 53, Moves.POPULATION_BOMB ], + [ 1, MoveId.POUND ], + [ 1, MoveId.FOLLOW_ME ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 1, MoveId.TIDY_UP ], + [ 5, MoveId.ECHOED_VOICE ], + [ 8, MoveId.HELPING_HAND ], + [ 11, MoveId.SUPER_FANG ], + [ 14, MoveId.DOUBLE_HIT ], + [ 18, MoveId.BULLET_SEED ], + [ 22, MoveId.ENCORE ], + [ 29, MoveId.PLAY_ROUGH ], + [ 33, MoveId.HYPER_VOICE ], + [ 37, MoveId.CHARM ], + [ 41, MoveId.BEAT_UP ], + [ 46, MoveId.COPYCAT ], + [ 53, MoveId.POPULATION_BOMB ], ], [Species.FIDOUGH]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.LICK ], - [ 6, Moves.TAIL_WHIP ], - [ 8, Moves.COVET ], - [ 11, Moves.BITE ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.PLAY_ROUGH ], - [ 22, Moves.WORK_UP ], - [ 26, Moves.BATON_PASS ], - [ 30, Moves.ROAR ], - [ 33, Moves.DOUBLE_EDGE ], - [ 36, Moves.CHARM ], - [ 40, Moves.CRUNCH ], - [ 45, Moves.LAST_RESORT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.LICK ], + [ 6, MoveId.TAIL_WHIP ], + [ 8, MoveId.COVET ], + [ 11, MoveId.BITE ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.PLAY_ROUGH ], + [ 22, MoveId.WORK_UP ], + [ 26, MoveId.BATON_PASS ], + [ 30, MoveId.ROAR ], + [ 33, MoveId.DOUBLE_EDGE ], + [ 36, MoveId.CHARM ], + [ 40, MoveId.CRUNCH ], + [ 45, MoveId.LAST_RESORT ], ], [Species.DACHSBUN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.LICK ], - [ 6, Moves.TAIL_WHIP ], - [ 8, Moves.COVET ], - [ 11, Moves.BITE ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.PLAY_ROUGH ], - [ 22, Moves.WORK_UP ], - [ 29, Moves.BATON_PASS ], - [ 33, Moves.ROAR ], - [ 38, Moves.DOUBLE_EDGE ], - [ 42, Moves.CHARM ], - [ 47, Moves.CRUNCH ], - [ 53, Moves.LAST_RESORT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.LICK ], + [ 6, MoveId.TAIL_WHIP ], + [ 8, MoveId.COVET ], + [ 11, MoveId.BITE ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.PLAY_ROUGH ], + [ 22, MoveId.WORK_UP ], + [ 29, MoveId.BATON_PASS ], + [ 33, MoveId.ROAR ], + [ 38, MoveId.DOUBLE_EDGE ], + [ 42, MoveId.CHARM ], + [ 47, MoveId.CRUNCH ], + [ 53, MoveId.LAST_RESORT ], ], [Species.SMOLIV]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SWEET_SCENT ], - [ 5, Moves.ABSORB ], - [ 7, Moves.GROWTH ], - [ 10, Moves.RAZOR_LEAF ], - [ 13, Moves.HELPING_HAND ], - [ 16, Moves.FLAIL ], - [ 20, Moves.MEGA_DRAIN ], - [ 23, Moves.GRASSY_TERRAIN ], - [ 27, Moves.SEED_BOMB ], - [ 30, Moves.ENERGY_BALL ], - [ 34, Moves.LEECH_SEED ], - [ 38, Moves.TERRAIN_PULSE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SWEET_SCENT ], + [ 5, MoveId.ABSORB ], + [ 7, MoveId.GROWTH ], + [ 10, MoveId.RAZOR_LEAF ], + [ 13, MoveId.HELPING_HAND ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.MEGA_DRAIN ], + [ 23, MoveId.GRASSY_TERRAIN ], + [ 27, MoveId.SEED_BOMB ], + [ 30, MoveId.ENERGY_BALL ], + [ 34, MoveId.LEECH_SEED ], + [ 38, MoveId.TERRAIN_PULSE ], ], [Species.DOLLIV]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SWEET_SCENT ], - [ 5, Moves.ABSORB ], - [ 7, Moves.GROWTH ], - [ 10, Moves.RAZOR_LEAF ], - [ 13, Moves.HELPING_HAND ], - [ 16, Moves.FLAIL ], - [ 20, Moves.MEGA_DRAIN ], - [ 23, Moves.GRASSY_TERRAIN ], - [ 29, Moves.SEED_BOMB ], - [ 34, Moves.ENERGY_BALL ], - [ 37, Moves.LEECH_SEED ], - [ 42, Moves.TERRAIN_PULSE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SWEET_SCENT ], + [ 5, MoveId.ABSORB ], + [ 7, MoveId.GROWTH ], + [ 10, MoveId.RAZOR_LEAF ], + [ 13, MoveId.HELPING_HAND ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.MEGA_DRAIN ], + [ 23, MoveId.GRASSY_TERRAIN ], + [ 29, MoveId.SEED_BOMB ], + [ 34, MoveId.ENERGY_BALL ], + [ 37, MoveId.LEECH_SEED ], + [ 42, MoveId.TERRAIN_PULSE ], ], [Species.ARBOLIVA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.MIRROR_COAT ], - [ 5, Moves.ABSORB ], - [ 7, Moves.GROWTH ], - [ 10, Moves.RAZOR_LEAF ], - [ 13, Moves.HELPING_HAND ], - [ 16, Moves.FLAIL ], - [ 20, Moves.MEGA_DRAIN ], - [ 23, Moves.GRASSY_TERRAIN ], - [ 29, Moves.SEED_BOMB ], - [ 34, Moves.ENERGY_BALL ], - [ 39, Moves.LEECH_SEED ], - [ 46, Moves.TERRAIN_PULSE ], - [ 52, Moves.PETAL_BLIZZARD ], - [ 58, Moves.PETAL_DANCE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.MIRROR_COAT ], + [ 5, MoveId.ABSORB ], + [ 7, MoveId.GROWTH ], + [ 10, MoveId.RAZOR_LEAF ], + [ 13, MoveId.HELPING_HAND ], + [ 16, MoveId.FLAIL ], + [ 20, MoveId.MEGA_DRAIN ], + [ 23, MoveId.GRASSY_TERRAIN ], + [ 29, MoveId.SEED_BOMB ], + [ 34, MoveId.ENERGY_BALL ], + [ 39, MoveId.LEECH_SEED ], + [ 46, MoveId.TERRAIN_PULSE ], + [ 52, MoveId.PETAL_BLIZZARD ], + [ 58, MoveId.PETAL_DANCE ], ], [Species.SQUAWKABILLY]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.MIMIC ], - [ 6, Moves.QUICK_ATTACK ], - [ 10, Moves.TORMENT ], - [ 13, Moves.AERIAL_ACE ], - [ 17, Moves.FURY_ATTACK ], - [ 20, Moves.TAUNT ], - [ 24, Moves.UPROAR ], - [ 27, Moves.COPYCAT ], - [ 30, Moves.FLY ], - [ 34, Moves.FACADE ], - [ 38, Moves.SWAGGER ], - [ 42, Moves.BRAVE_BIRD ], - [ 47, Moves.ROOST ], - [ 52, Moves.REVERSAL ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.MIMIC ], + [ 6, MoveId.QUICK_ATTACK ], + [ 10, MoveId.TORMENT ], + [ 13, MoveId.AERIAL_ACE ], + [ 17, MoveId.FURY_ATTACK ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.UPROAR ], + [ 27, MoveId.COPYCAT ], + [ 30, MoveId.FLY ], + [ 34, MoveId.FACADE ], + [ 38, MoveId.SWAGGER ], + [ 42, MoveId.BRAVE_BIRD ], + [ 47, MoveId.ROOST ], + [ 52, MoveId.REVERSAL ], ], [Species.NACLI]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.ROCK_THROW ], - [ 7, Moves.MUD_SHOT ], - [ 10, Moves.SMACK_DOWN ], - [ 13, Moves.ROCK_POLISH ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.IRON_DEFENSE ], - [ 25, Moves.RECOVER ], - [ 30, Moves.ROCK_SLIDE ], - [ 33, Moves.STEALTH_ROCK ], - [ 35, Moves.HEAVY_SLAM ], - [ 40, Moves.EARTHQUAKE ], - [ 45, Moves.STONE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.ROCK_THROW ], + [ 7, MoveId.MUD_SHOT ], + [ 10, MoveId.SMACK_DOWN ], + [ 13, MoveId.ROCK_POLISH ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.IRON_DEFENSE ], + [ 25, MoveId.RECOVER ], + [ 30, MoveId.ROCK_SLIDE ], + [ 33, MoveId.STEALTH_ROCK ], + [ 35, MoveId.HEAVY_SLAM ], + [ 40, MoveId.EARTHQUAKE ], + [ 45, MoveId.STONE_EDGE ], ], [Species.NACLSTACK]: [ - [ EVOLVE_MOVE, Moves.SALT_CURE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.ROCK_THROW ], - [ 7, Moves.MUD_SHOT ], - [ 10, Moves.SMACK_DOWN ], - [ 13, Moves.ROCK_POLISH ], - [ 16, Moves.HEADBUTT ], - [ 20, Moves.IRON_DEFENSE ], - [ 30, Moves.RECOVER ], - [ 34, Moves.ROCK_SLIDE ], - [ 38, Moves.STEALTH_ROCK ], - [ 41, Moves.HEAVY_SLAM ], - [ 45, Moves.EARTHQUAKE ], - [ 51, Moves.STONE_EDGE ], + [ EVOLVE_MOVE, MoveId.SALT_CURE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.ROCK_THROW ], + [ 7, MoveId.MUD_SHOT ], + [ 10, MoveId.SMACK_DOWN ], + [ 13, MoveId.ROCK_POLISH ], + [ 16, MoveId.HEADBUTT ], + [ 20, MoveId.IRON_DEFENSE ], + [ 30, MoveId.RECOVER ], + [ 34, MoveId.ROCK_SLIDE ], + [ 38, MoveId.STEALTH_ROCK ], + [ 41, MoveId.HEAVY_SLAM ], + [ 45, MoveId.EARTHQUAKE ], + [ 51, MoveId.STONE_EDGE ], ], [Species.GARGANACL]: [ - [ EVOLVE_MOVE, Moves.HAMMER_ARM ], - [ RELEARN_MOVE, Moves.IRON_DEFENSE ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.BLOCK ], - [ 1, Moves.ROCK_BLAST ], - [ 1, Moves.SMACK_DOWN ], // Previous Stage Move - [ 1, Moves.WIDE_GUARD ], - [ 5, Moves.ROCK_THROW ], - [ 7, Moves.MUD_SHOT ], - [ 10, Moves.ROCK_TOMB ], - [ 13, Moves.ROCK_POLISH ], - [ 16, Moves.HEADBUTT ], - [ 24, Moves.SALT_CURE ], - [ 30, Moves.RECOVER ], - [ 34, Moves.ROCK_SLIDE ], - [ 40, Moves.STEALTH_ROCK ], - [ 44, Moves.HEAVY_SLAM ], - [ 49, Moves.EARTHQUAKE ], - [ 54, Moves.STONE_EDGE ], - [ 60, Moves.EXPLOSION ], + [ EVOLVE_MOVE, MoveId.HAMMER_ARM ], + [ RELEARN_MOVE, MoveId.IRON_DEFENSE ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.BLOCK ], + [ 1, MoveId.ROCK_BLAST ], + [ 1, MoveId.SMACK_DOWN ], // Previous Stage Move + [ 1, MoveId.WIDE_GUARD ], + [ 5, MoveId.ROCK_THROW ], + [ 7, MoveId.MUD_SHOT ], + [ 10, MoveId.ROCK_TOMB ], + [ 13, MoveId.ROCK_POLISH ], + [ 16, MoveId.HEADBUTT ], + [ 24, MoveId.SALT_CURE ], + [ 30, MoveId.RECOVER ], + [ 34, MoveId.ROCK_SLIDE ], + [ 40, MoveId.STEALTH_ROCK ], + [ 44, MoveId.HEAVY_SLAM ], + [ 49, MoveId.EARTHQUAKE ], + [ 54, MoveId.STONE_EDGE ], + [ 60, MoveId.EXPLOSION ], ], [Species.CHARCADET]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.ASTONISH ], - [ 8, Moves.CLEAR_SMOG ], - [ 12, Moves.FIRE_SPIN ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.NIGHT_SHADE ], - [ 24, Moves.FLAME_CHARGE ], - [ 28, Moves.INCINERATE ], - [ 32, Moves.LAVA_PLUME ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ASTONISH ], + [ 8, MoveId.CLEAR_SMOG ], + [ 12, MoveId.FIRE_SPIN ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.NIGHT_SHADE ], + [ 24, MoveId.FLAME_CHARGE ], + [ 28, MoveId.INCINERATE ], + [ 32, MoveId.LAVA_PLUME ], ], [Species.ARMAROUGE]: [ - [ EVOLVE_MOVE, Moves.PSYSHOCK ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.WIDE_GUARD ], - [ 1, Moves.MYSTICAL_FIRE ], - [ 8, Moves.CLEAR_SMOG ], - [ 12, Moves.FIRE_SPIN ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.NIGHT_SHADE ], - [ 24, Moves.FLAME_CHARGE ], - [ 28, Moves.INCINERATE ], - [ 32, Moves.LAVA_PLUME ], - [ 37, Moves.CALM_MIND ], - [ 42, Moves.ALLY_SWITCH ], - [ 48, Moves.FLAMETHROWER ], - [ 56, Moves.EXPANDING_FORCE ], - [ 62, Moves.ARMOR_CANNON ], + [ EVOLVE_MOVE, MoveId.PSYSHOCK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.WIDE_GUARD ], + [ 1, MoveId.MYSTICAL_FIRE ], + [ 8, MoveId.CLEAR_SMOG ], + [ 12, MoveId.FIRE_SPIN ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.NIGHT_SHADE ], + [ 24, MoveId.FLAME_CHARGE ], + [ 28, MoveId.INCINERATE ], + [ 32, MoveId.LAVA_PLUME ], + [ 37, MoveId.CALM_MIND ], + [ 42, MoveId.ALLY_SWITCH ], + [ 48, MoveId.FLAMETHROWER ], + [ 56, MoveId.EXPANDING_FORCE ], + [ 62, MoveId.ARMOR_CANNON ], ], [Species.CERULEDGE]: [ - [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], - [ RELEARN_MOVE, Moves.NIGHT_SLASH ], - [ RELEARN_MOVE, Moves.SHADOW_SNEAK ], - [ RELEARN_MOVE, Moves.QUICK_GUARD ], - [ RELEARN_MOVE, Moves.SOLAR_BLADE ], - [ 1, Moves.EMBER ], - [ 1, Moves.LEER ], - [ 1, Moves.ASTONISH ], - [ 8, Moves.CLEAR_SMOG ], - [ 12, Moves.FIRE_SPIN ], - [ 16, Moves.WILL_O_WISP ], - [ 20, Moves.NIGHT_SHADE ], - [ 24, Moves.FLAME_CHARGE ], - [ 28, Moves.INCINERATE ], - [ 32, Moves.LAVA_PLUME ], - [ 37, Moves.SWORDS_DANCE ], - [ 42, Moves.ALLY_SWITCH ], - [ 48, Moves.BITTER_BLADE ], - [ 56, Moves.PSYCHO_CUT ], - [ 62, Moves.FLARE_BLITZ ], + [ EVOLVE_MOVE, MoveId.SHADOW_CLAW ], + [ RELEARN_MOVE, MoveId.NIGHT_SLASH ], + [ RELEARN_MOVE, MoveId.SHADOW_SNEAK ], + [ RELEARN_MOVE, MoveId.QUICK_GUARD ], + [ RELEARN_MOVE, MoveId.SOLAR_BLADE ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ASTONISH ], + [ 8, MoveId.CLEAR_SMOG ], + [ 12, MoveId.FIRE_SPIN ], + [ 16, MoveId.WILL_O_WISP ], + [ 20, MoveId.NIGHT_SHADE ], + [ 24, MoveId.FLAME_CHARGE ], + [ 28, MoveId.INCINERATE ], + [ 32, MoveId.LAVA_PLUME ], + [ 37, MoveId.SWORDS_DANCE ], + [ 42, MoveId.ALLY_SWITCH ], + [ 48, MoveId.BITTER_BLADE ], + [ 56, MoveId.PSYCHO_CUT ], + [ 62, MoveId.FLARE_BLITZ ], ], [Species.TADBULB]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.MUD_SLAP ], - [ 7, Moves.THUNDER_SHOCK ], - [ 11, Moves.WATER_GUN ], - [ 17, Moves.CHARGE ], - [ 21, Moves.SPARK ], - [ 24, Moves.MUD_SHOT ], - [ 25, Moves.FLAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.WEATHER_BALL ], - [ 40, Moves.ELECTRIC_TERRAIN ], - [ 45, Moves.SUCKER_PUNCH ], - [ 50, Moves.ZAP_CANNON ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.MUD_SLAP ], + [ 7, MoveId.THUNDER_SHOCK ], + [ 11, MoveId.WATER_GUN ], + [ 17, MoveId.CHARGE ], + [ 21, MoveId.SPARK ], + [ 24, MoveId.MUD_SHOT ], + [ 25, MoveId.FLAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.WEATHER_BALL ], + [ 40, MoveId.ELECTRIC_TERRAIN ], + [ 45, MoveId.SUCKER_PUNCH ], + [ 50, MoveId.ZAP_CANNON ], ], [Species.BELLIBOLT]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.SLACK_OFF ], - [ 7, Moves.THUNDER_SHOCK ], - [ 11, Moves.WATER_GUN ], - [ 17, Moves.CHARGE ], - [ 21, Moves.SPARK ], - [ 24, Moves.MUD_SHOT ], - [ 25, Moves.FLAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.WEATHER_BALL ], - [ 40, Moves.ELECTRIC_TERRAIN ], - [ 45, Moves.SUCKER_PUNCH ], - [ 50, Moves.ZAP_CANNON ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.SLACK_OFF ], + [ 7, MoveId.THUNDER_SHOCK ], + [ 11, MoveId.WATER_GUN ], + [ 17, MoveId.CHARGE ], + [ 21, MoveId.SPARK ], + [ 24, MoveId.MUD_SHOT ], + [ 25, MoveId.FLAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.WEATHER_BALL ], + [ 40, MoveId.ELECTRIC_TERRAIN ], + [ 45, MoveId.SUCKER_PUNCH ], + [ 50, MoveId.ZAP_CANNON ], ], [Species.WATTREL]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 4, Moves.THUNDER_SHOCK ], - [ 7, Moves.QUICK_ATTACK ], - [ 11, Moves.PLUCK ], - [ 15, Moves.SPARK ], - [ 19, Moves.UPROAR ], - [ 23, Moves.ROOST ], - [ 27, Moves.DUAL_WINGBEAT ], - [ 32, Moves.AGILITY ], - [ 37, Moves.VOLT_SWITCH ], - [ 43, Moves.DISCHARGE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 7, MoveId.QUICK_ATTACK ], + [ 11, MoveId.PLUCK ], + [ 15, MoveId.SPARK ], + [ 19, MoveId.UPROAR ], + [ 23, MoveId.ROOST ], + [ 27, MoveId.DUAL_WINGBEAT ], + [ 32, MoveId.AGILITY ], + [ 37, MoveId.VOLT_SWITCH ], + [ 43, MoveId.DISCHARGE ], ], [Species.KILOWATTREL]: [ - [ EVOLVE_MOVE, Moves.ELECTRO_BALL ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 4, Moves.THUNDER_SHOCK ], - [ 7, Moves.QUICK_ATTACK ], - [ 11, Moves.PLUCK ], - [ 15, Moves.SPARK ], - [ 19, Moves.UPROAR ], - [ 24, Moves.ROOST ], - [ 30, Moves.DUAL_WINGBEAT ], - [ 36, Moves.AGILITY ], - [ 43, Moves.VOLT_SWITCH ], - [ 48, Moves.DISCHARGE ], - [ 55, Moves.HURRICANE ], + [ EVOLVE_MOVE, MoveId.ELECTRO_BALL ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 7, MoveId.QUICK_ATTACK ], + [ 11, MoveId.PLUCK ], + [ 15, MoveId.SPARK ], + [ 19, MoveId.UPROAR ], + [ 24, MoveId.ROOST ], + [ 30, MoveId.DUAL_WINGBEAT ], + [ 36, MoveId.AGILITY ], + [ 43, MoveId.VOLT_SWITCH ], + [ 48, MoveId.DISCHARGE ], + [ 55, MoveId.HURRICANE ], ], [Species.MASCHIFF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.SCARY_FACE ], - [ 4, Moves.LICK ], - [ 7, Moves.SNARL ], - [ 10, Moves.HONE_CLAWS ], - [ 14, Moves.BITE ], - [ 18, Moves.ROAR ], - [ 22, Moves.HEADBUTT ], - [ 26, Moves.PAYBACK ], - [ 31, Moves.CRUNCH ], - [ 35, Moves.SWAGGER ], - [ 39, Moves.REVERSAL ], - [ 43, Moves.JAW_LOCK ], - [ 49, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SCARY_FACE ], + [ 4, MoveId.LICK ], + [ 7, MoveId.SNARL ], + [ 10, MoveId.HONE_CLAWS ], + [ 14, MoveId.BITE ], + [ 18, MoveId.ROAR ], + [ 22, MoveId.HEADBUTT ], + [ 26, MoveId.PAYBACK ], + [ 31, MoveId.CRUNCH ], + [ 35, MoveId.SWAGGER ], + [ 39, MoveId.REVERSAL ], + [ 43, MoveId.JAW_LOCK ], + [ 49, MoveId.DOUBLE_EDGE ], ], [Species.MABOSSTIFF]: [ - [ EVOLVE_MOVE, Moves.COMEUPPANCE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.SCARY_FACE ], - [ 4, Moves.LICK ], - [ 7, Moves.SNARL ], - [ 10, Moves.HONE_CLAWS ], - [ 14, Moves.BITE ], - [ 18, Moves.ROAR ], - [ 22, Moves.HEADBUTT ], - [ 26, Moves.PAYBACK ], - [ 34, Moves.CRUNCH ], - [ 39, Moves.SWAGGER ], - [ 43, Moves.REVERSAL ], - [ 48, Moves.JAW_LOCK ], - [ 55, Moves.DOUBLE_EDGE ], - [ 60, Moves.OUTRAGE ], + [ EVOLVE_MOVE, MoveId.COMEUPPANCE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.SCARY_FACE ], + [ 4, MoveId.LICK ], + [ 7, MoveId.SNARL ], + [ 10, MoveId.HONE_CLAWS ], + [ 14, MoveId.BITE ], + [ 18, MoveId.ROAR ], + [ 22, MoveId.HEADBUTT ], + [ 26, MoveId.PAYBACK ], + [ 34, MoveId.CRUNCH ], + [ 39, MoveId.SWAGGER ], + [ 43, MoveId.REVERSAL ], + [ 48, MoveId.JAW_LOCK ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.OUTRAGE ], ], [Species.SHROODLE]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 5, Moves.ACID_SPRAY ], - [ 8, Moves.BITE ], - [ 8, Moves.FURY_SWIPES ], - [ 11, Moves.SWITCHEROO ], - [ 14, Moves.POISON_FANG ], - [ 18, Moves.FLATTER ], - [ 21, Moves.SLASH ], - [ 25, Moves.U_TURN ], - [ 29, Moves.POISON_JAB ], - [ 33, Moves.TAUNT ], - [ 36, Moves.SUBSTITUTE ], - [ 40, Moves.KNOCK_OFF ], - [ 45, Moves.GUNK_SHOT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 5, MoveId.ACID_SPRAY ], + [ 8, MoveId.BITE ], + [ 8, MoveId.FURY_SWIPES ], + [ 11, MoveId.SWITCHEROO ], + [ 14, MoveId.POISON_FANG ], + [ 18, MoveId.FLATTER ], + [ 21, MoveId.SLASH ], + [ 25, MoveId.U_TURN ], + [ 29, MoveId.POISON_JAB ], + [ 33, MoveId.TAUNT ], + [ 36, MoveId.SUBSTITUTE ], + [ 40, MoveId.KNOCK_OFF ], + [ 45, MoveId.GUNK_SHOT ], ], [Species.GRAFAIAI]: [ - [ EVOLVE_MOVE, Moves.DOODLE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], // Previous Stage Move - [ 5, Moves.ACID_SPRAY ], - [ 8, Moves.FURY_SWIPES ], - [ 11, Moves.SWITCHEROO ], - [ 14, Moves.POISON_FANG ], - [ 18, Moves.FLATTER ], - [ 21, Moves.SLASH ], - [ 25, Moves.U_TURN ], - [ 33, Moves.POISON_JAB ], - [ 37, Moves.TAUNT ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.KNOCK_OFF ], - [ 51, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.DOODLE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], // Previous Stage Move + [ 5, MoveId.ACID_SPRAY ], + [ 8, MoveId.FURY_SWIPES ], + [ 11, MoveId.SWITCHEROO ], + [ 14, MoveId.POISON_FANG ], + [ 18, MoveId.FLATTER ], + [ 21, MoveId.SLASH ], + [ 25, MoveId.U_TURN ], + [ 33, MoveId.POISON_JAB ], + [ 37, MoveId.TAUNT ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.KNOCK_OFF ], + [ 51, MoveId.GUNK_SHOT ], ], [Species.BRAMBLIN]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.ABSORB ], - [ 9, Moves.RAPID_SPIN ], - [ 13, Moves.BULLET_SEED ], - [ 17, Moves.INFESTATION ], - [ 21, Moves.HEX ], - [ 25, Moves.MEGA_DRAIN ], - [ 29, Moves.DISABLE ], - [ 35, Moves.PHANTOM_FORCE ], - [ 40, Moves.GIGA_DRAIN ], - [ 45, Moves.CURSE ], - [ 50, Moves.PAIN_SPLIT ], - [ 55, Moves.POWER_WHIP ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.ABSORB ], + [ 9, MoveId.RAPID_SPIN ], + [ 13, MoveId.BULLET_SEED ], + [ 17, MoveId.INFESTATION ], + [ 21, MoveId.HEX ], + [ 25, MoveId.MEGA_DRAIN ], + [ 29, MoveId.DISABLE ], + [ 35, MoveId.PHANTOM_FORCE ], + [ 40, MoveId.GIGA_DRAIN ], + [ 45, MoveId.CURSE ], + [ 50, MoveId.PAIN_SPLIT ], + [ 55, MoveId.POWER_WHIP ], ], [Species.BRAMBLEGHAST]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.ABSORB ], - [ 9, Moves.RAPID_SPIN ], - [ 13, Moves.BULLET_SEED ], - [ 17, Moves.INFESTATION ], - [ 21, Moves.HEX ], - [ 25, Moves.MEGA_DRAIN ], - [ 29, Moves.DISABLE ], - [ 35, Moves.PHANTOM_FORCE ], - [ 40, Moves.GIGA_DRAIN ], - [ 45, Moves.CURSE ], - [ 50, Moves.PAIN_SPLIT ], - [ 55, Moves.POWER_WHIP ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.ABSORB ], + [ 9, MoveId.RAPID_SPIN ], + [ 13, MoveId.BULLET_SEED ], + [ 17, MoveId.INFESTATION ], + [ 21, MoveId.HEX ], + [ 25, MoveId.MEGA_DRAIN ], + [ 29, MoveId.DISABLE ], + [ 35, MoveId.PHANTOM_FORCE ], + [ 40, MoveId.GIGA_DRAIN ], + [ 45, MoveId.CURSE ], + [ 50, MoveId.PAIN_SPLIT ], + [ 55, MoveId.POWER_WHIP ], ], [Species.TOEDSCOOL]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.MUD_SLAP ], - [ 4, Moves.ABSORB ], - [ 8, Moves.POISON_POWDER ], - [ 8, Moves.STUN_SPORE ], - [ 12, Moves.SUPERSONIC ], - [ 15, Moves.TACKLE ], - [ 16, Moves.MEGA_DRAIN ], - [ 20, Moves.SCREECH ], - [ 24, Moves.MUD_SHOT ], - [ 28, Moves.HEX ], - [ 32, Moves.SEED_BOMB ], - [ 36, Moves.SPORE ], - [ 40, Moves.GROWTH ], - [ 44, Moves.GIGA_DRAIN ], - [ 48, Moves.EARTH_POWER ], - [ 52, Moves.POWER_WHIP ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.MUD_SLAP ], + [ 4, MoveId.ABSORB ], + [ 8, MoveId.POISON_POWDER ], + [ 8, MoveId.STUN_SPORE ], + [ 12, MoveId.SUPERSONIC ], + [ 15, MoveId.TACKLE ], + [ 16, MoveId.MEGA_DRAIN ], + [ 20, MoveId.SCREECH ], + [ 24, MoveId.MUD_SHOT ], + [ 28, MoveId.HEX ], + [ 32, MoveId.SEED_BOMB ], + [ 36, MoveId.SPORE ], + [ 40, MoveId.GROWTH ], + [ 44, MoveId.GIGA_DRAIN ], + [ 48, MoveId.EARTH_POWER ], + [ 52, MoveId.POWER_WHIP ], ], [Species.TOEDSCRUEL]: [ - [ 1, Moves.WRAP ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.REFLECT_TYPE ], - [ 4, Moves.ABSORB ], - [ 8, Moves.POISON_POWDER ], - [ 8, Moves.STUN_SPORE ], - [ 12, Moves.SUPERSONIC ], - [ 15, Moves.TACKLE ], - [ 16, Moves.MEGA_DRAIN ], - [ 20, Moves.SCREECH ], - [ 24, Moves.MUD_SHOT ], - [ 28, Moves.HEX ], - [ 34, Moves.SEED_BOMB ], - [ 40, Moves.SPORE ], - [ 44, Moves.GROWTH ], - [ 48, Moves.GIGA_DRAIN ], - [ 54, Moves.EARTH_POWER ], - [ 58, Moves.POWER_WHIP ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.REFLECT_TYPE ], + [ 4, MoveId.ABSORB ], + [ 8, MoveId.POISON_POWDER ], + [ 8, MoveId.STUN_SPORE ], + [ 12, MoveId.SUPERSONIC ], + [ 15, MoveId.TACKLE ], + [ 16, MoveId.MEGA_DRAIN ], + [ 20, MoveId.SCREECH ], + [ 24, MoveId.MUD_SHOT ], + [ 28, MoveId.HEX ], + [ 34, MoveId.SEED_BOMB ], + [ 40, MoveId.SPORE ], + [ 44, MoveId.GROWTH ], + [ 48, MoveId.GIGA_DRAIN ], + [ 54, MoveId.EARTH_POWER ], + [ 58, MoveId.POWER_WHIP ], ], [Species.KLAWF]: [ - [ 1, Moves.ROCK_THROW ], - [ 6, Moves.HARDEN ], - [ 9, Moves.ROCK_SMASH ], - [ 13, Moves.ROCK_TOMB ], - [ 17, Moves.METAL_CLAW ], - [ 21, Moves.PROTECT ], - [ 24, Moves.ROCK_BLAST ], - [ 29, Moves.X_SCISSOR ], - [ 33, Moves.SWORDS_DANCE ], - [ 37, Moves.FLAIL ], - [ 42, Moves.ROCK_SLIDE ], - [ 47, Moves.HIGH_HORSEPOWER ], - [ 51, Moves.IRON_DEFENSE ], - [ 56, Moves.GUILLOTINE ], + [ 1, MoveId.ROCK_THROW ], + [ 6, MoveId.HARDEN ], + [ 9, MoveId.ROCK_SMASH ], + [ 13, MoveId.ROCK_TOMB ], + [ 17, MoveId.METAL_CLAW ], + [ 21, MoveId.PROTECT ], + [ 24, MoveId.ROCK_BLAST ], + [ 29, MoveId.X_SCISSOR ], + [ 33, MoveId.SWORDS_DANCE ], + [ 37, MoveId.FLAIL ], + [ 42, MoveId.ROCK_SLIDE ], + [ 47, MoveId.HIGH_HORSEPOWER ], + [ 51, MoveId.IRON_DEFENSE ], + [ 56, MoveId.GUILLOTINE ], ], [Species.CAPSAKID]: [ - [ 1, Moves.LEER ], - [ 1, Moves.LEAFAGE ], - [ 4, Moves.BITE ], - [ 10, Moves.GROWTH ], - [ 13, Moves.RAZOR_LEAF ], - [ 17, Moves.SUNNY_DAY ], - [ 21, Moves.BULLET_SEED ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.ZEN_HEADBUTT ], - [ 38, Moves.CRUNCH ], - [ 44, Moves.SEED_BOMB ], - [ 48, Moves.SOLAR_BEAM ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LEAFAGE ], + [ 4, MoveId.BITE ], + [ 10, MoveId.GROWTH ], + [ 13, MoveId.RAZOR_LEAF ], + [ 17, MoveId.SUNNY_DAY ], + [ 21, MoveId.BULLET_SEED ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.ZEN_HEADBUTT ], + [ 38, MoveId.CRUNCH ], + [ 44, MoveId.SEED_BOMB ], + [ 48, MoveId.SOLAR_BEAM ], ], [Species.SCOVILLAIN]: [ - [ EVOLVE_MOVE, Moves.FLAMETHROWER ], - [ EVOLVE_MOVE, Moves.SPICY_EXTRACT ], - [ 1, Moves.LEER ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.LEAFAGE ], - [ 4, Moves.BITE ], - [ 10, Moves.GROWTH ], - [ 13, Moves.RAZOR_LEAF ], - [ 17, Moves.SUNNY_DAY ], - [ 21, Moves.BULLET_SEED ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.ZEN_HEADBUTT ], - [ 33, Moves.WORRY_SEED ], - [ 38, Moves.CRUNCH ], - [ 44, Moves.SEED_BOMB ], - [ 48, Moves.SOLAR_BEAM ], - [ 48, Moves.OVERHEAT ], + [ EVOLVE_MOVE, MoveId.FLAMETHROWER ], + [ EVOLVE_MOVE, MoveId.SPICY_EXTRACT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.LEAFAGE ], + [ 4, MoveId.BITE ], + [ 10, MoveId.GROWTH ], + [ 13, MoveId.RAZOR_LEAF ], + [ 17, MoveId.SUNNY_DAY ], + [ 21, MoveId.BULLET_SEED ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.ZEN_HEADBUTT ], + [ 33, MoveId.WORRY_SEED ], + [ 38, MoveId.CRUNCH ], + [ 44, MoveId.SEED_BOMB ], + [ 48, MoveId.SOLAR_BEAM ], + [ 48, MoveId.OVERHEAT ], ], [Species.RELLOR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 4, Moves.SAND_ATTACK ], - [ 7, Moves.STRUGGLE_BUG ], - [ 11, Moves.ROLLOUT ], - [ 15, Moves.MUD_SHOT ], - [ 20, Moves.BUG_BITE ], - [ 24, Moves.TAKE_DOWN ], - [ 29, Moves.DIG ], - [ 35, Moves.LUNGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 4, MoveId.SAND_ATTACK ], + [ 7, MoveId.STRUGGLE_BUG ], + [ 11, MoveId.ROLLOUT ], + [ 15, MoveId.MUD_SHOT ], + [ 20, MoveId.BUG_BITE ], + [ 24, MoveId.TAKE_DOWN ], + [ 29, MoveId.DIG ], + [ 35, MoveId.LUNGE ], ], [Species.RABSCA]: [ - [ EVOLVE_MOVE, Moves.REVIVAL_BLESSING ], - [ RELEARN_MOVE, Moves.SAFEGUARD ], - [ RELEARN_MOVE, Moves.PSYCH_UP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.MUD_SHOT ], // Previous Stage Move - [ 1, Moves.DIG ], // Previous Stage Move - [ 4, Moves.SAND_ATTACK ], - [ 7, Moves.STRUGGLE_BUG ], - [ 11, Moves.ROLLOUT ], - [ 15, Moves.PSYBEAM ], - [ 20, Moves.BUG_BITE ], - [ 24, Moves.TAKE_DOWN ], - [ 29, Moves.EXTRASENSORY ], - [ 35, Moves.LUNGE ], - [ 40, Moves.POWER_SWAP ], - [ 40, Moves.GUARD_SWAP ], - [ 40, Moves.SPEED_SWAP ], - [ 45, Moves.BUG_BUZZ ], - [ 50, Moves.PSYCHIC ], + [ EVOLVE_MOVE, MoveId.REVIVAL_BLESSING ], + [ RELEARN_MOVE, MoveId.SAFEGUARD ], + [ RELEARN_MOVE, MoveId.PSYCH_UP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.MUD_SHOT ], // Previous Stage Move + [ 1, MoveId.DIG ], // Previous Stage Move + [ 4, MoveId.SAND_ATTACK ], + [ 7, MoveId.STRUGGLE_BUG ], + [ 11, MoveId.ROLLOUT ], + [ 15, MoveId.PSYBEAM ], + [ 20, MoveId.BUG_BITE ], + [ 24, MoveId.TAKE_DOWN ], + [ 29, MoveId.EXTRASENSORY ], + [ 35, MoveId.LUNGE ], + [ 40, MoveId.POWER_SWAP ], + [ 40, MoveId.GUARD_SWAP ], + [ 40, MoveId.SPEED_SWAP ], + [ 45, MoveId.BUG_BUZZ ], + [ 50, MoveId.PSYCHIC ], ], [Species.FLITTLE]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 5, Moves.CONFUSION ], - [ 8, Moves.BABY_DOLL_EYES ], - [ 11, Moves.DISARMING_VOICE ], - [ 15, Moves.QUICK_ATTACK ], - [ 19, Moves.PSYBEAM ], - [ 24, Moves.PLUCK ], - [ 29, Moves.AGILITY ], - [ 34, Moves.UPROAR ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 5, MoveId.CONFUSION ], + [ 8, MoveId.BABY_DOLL_EYES ], + [ 11, MoveId.DISARMING_VOICE ], + [ 15, MoveId.QUICK_ATTACK ], + [ 19, MoveId.PSYBEAM ], + [ 24, MoveId.PLUCK ], + [ 29, MoveId.AGILITY ], + [ 34, MoveId.UPROAR ], ], [Species.ESPATHRA]: [ - [ EVOLVE_MOVE, Moves.LUMINA_CRASH ], - [ 1, Moves.GROWL ], - [ 1, Moves.PECK ], - [ 1, Moves.DRILL_PECK ], - [ 1, Moves.FEATHER_DANCE ], - [ 5, Moves.CONFUSION ], - [ 8, Moves.BABY_DOLL_EYES ], - [ 11, Moves.DISARMING_VOICE ], - [ 15, Moves.QUICK_ATTACK ], - [ 19, Moves.PSYBEAM ], - [ 24, Moves.PLUCK ], - [ 29, Moves.AGILITY ], - [ 34, Moves.UPROAR ], - [ 43, Moves.DAZZLING_GLEAM ], - [ 49, Moves.PSYCHIC ], - [ 54, Moves.LAST_RESORT ], + [ EVOLVE_MOVE, MoveId.LUMINA_CRASH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.DRILL_PECK ], + [ 1, MoveId.FEATHER_DANCE ], + [ 5, MoveId.CONFUSION ], + [ 8, MoveId.BABY_DOLL_EYES ], + [ 11, MoveId.DISARMING_VOICE ], + [ 15, MoveId.QUICK_ATTACK ], + [ 19, MoveId.PSYBEAM ], + [ 24, MoveId.PLUCK ], + [ 29, MoveId.AGILITY ], + [ 34, MoveId.UPROAR ], + [ 43, MoveId.DAZZLING_GLEAM ], + [ 49, MoveId.PSYCHIC ], + [ 54, MoveId.LAST_RESORT ], ], [Species.TINKATINK]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.FAIRY_WIND ], - [ 5, Moves.BABY_DOLL_EYES ], - [ 8, Moves.METAL_CLAW ], - [ 11, Moves.COVET ], - [ 14, Moves.ROCK_SMASH ], - [ 17, Moves.DRAINING_KISS ], - [ 21, Moves.SWEET_KISS ], - [ 24, Moves.BRUTAL_SWING ], - [ 27, Moves.SLAM ], - [ 31, Moves.FLASH_CANNON ], - [ 35, Moves.PLAY_ROUGH ], - [ 39, Moves.FAKE_OUT ], - [ 43, Moves.FLATTER ], - [ 47, Moves.SKITTER_SMACK ], - [ 52, Moves.KNOCK_OFF ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.FAIRY_WIND ], + [ 5, MoveId.BABY_DOLL_EYES ], + [ 8, MoveId.METAL_CLAW ], + [ 11, MoveId.COVET ], + [ 14, MoveId.ROCK_SMASH ], + [ 17, MoveId.DRAINING_KISS ], + [ 21, MoveId.SWEET_KISS ], + [ 24, MoveId.BRUTAL_SWING ], + [ 27, MoveId.SLAM ], + [ 31, MoveId.FLASH_CANNON ], + [ 35, MoveId.PLAY_ROUGH ], + [ 39, MoveId.FAKE_OUT ], + [ 43, MoveId.FLATTER ], + [ 47, MoveId.SKITTER_SMACK ], + [ 52, MoveId.KNOCK_OFF ], ], [Species.TINKATUFF]: [ - [ 1, Moves.ASTONISH ], - [ 1, Moves.FAIRY_WIND ], - [ 5, Moves.BABY_DOLL_EYES ], - [ 8, Moves.METAL_CLAW ], - [ 11, Moves.COVET ], - [ 14, Moves.ROCK_SMASH ], - [ 17, Moves.DRAINING_KISS ], - [ 21, Moves.SWEET_KISS ], - [ 24, Moves.BRUTAL_SWING ], - [ 27, Moves.SLAM ], - [ 31, Moves.FLASH_CANNON ], - [ 35, Moves.PLAY_ROUGH ], - [ 39, Moves.FAKE_OUT ], - [ 43, Moves.FLATTER ], - [ 47, Moves.SKITTER_SMACK ], - [ 52, Moves.KNOCK_OFF ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.FAIRY_WIND ], + [ 5, MoveId.BABY_DOLL_EYES ], + [ 8, MoveId.METAL_CLAW ], + [ 11, MoveId.COVET ], + [ 14, MoveId.ROCK_SMASH ], + [ 17, MoveId.DRAINING_KISS ], + [ 21, MoveId.SWEET_KISS ], + [ 24, MoveId.BRUTAL_SWING ], + [ 27, MoveId.SLAM ], + [ 31, MoveId.FLASH_CANNON ], + [ 35, MoveId.PLAY_ROUGH ], + [ 39, MoveId.FAKE_OUT ], + [ 43, MoveId.FLATTER ], + [ 47, MoveId.SKITTER_SMACK ], + [ 52, MoveId.KNOCK_OFF ], ], [Species.TINKATON]: [ - [ EVOLVE_MOVE, Moves.GIGATON_HAMMER ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.FAIRY_WIND ], - [ 5, Moves.BABY_DOLL_EYES ], - [ 8, Moves.METAL_CLAW ], - [ 11, Moves.COVET ], - [ 14, Moves.ROCK_SMASH ], - [ 17, Moves.DRAINING_KISS ], - [ 21, Moves.SWEET_KISS ], - [ 24, Moves.BRUTAL_SWING ], - [ 27, Moves.SLAM ], - [ 31, Moves.FLASH_CANNON ], - [ 35, Moves.PLAY_ROUGH ], - [ 39, Moves.FAKE_OUT ], - [ 43, Moves.FLATTER ], - [ 47, Moves.SKITTER_SMACK ], - [ 52, Moves.KNOCK_OFF ], + [ EVOLVE_MOVE, MoveId.GIGATON_HAMMER ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.FAIRY_WIND ], + [ 5, MoveId.BABY_DOLL_EYES ], + [ 8, MoveId.METAL_CLAW ], + [ 11, MoveId.COVET ], + [ 14, MoveId.ROCK_SMASH ], + [ 17, MoveId.DRAINING_KISS ], + [ 21, MoveId.SWEET_KISS ], + [ 24, MoveId.BRUTAL_SWING ], + [ 27, MoveId.SLAM ], + [ 31, MoveId.FLASH_CANNON ], + [ 35, MoveId.PLAY_ROUGH ], + [ 39, MoveId.FAKE_OUT ], + [ 43, MoveId.FLATTER ], + [ 47, MoveId.SKITTER_SMACK ], + [ 52, MoveId.KNOCK_OFF ], ], [Species.WIGLETT]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.MUD_SLAP ], - [ 8, Moves.WRAP ], - [ 12, Moves.AQUA_JET ], - [ 20, Moves.SLAM ], - [ 20, Moves.WATER_PULSE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.DIG ], - [ 32, Moves.SUCKER_PUNCH ], - [ 36, Moves.THROAT_CHOP ], - [ 40, Moves.LIQUIDATION ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.MUD_SLAP ], + [ 8, MoveId.WRAP ], + [ 12, MoveId.AQUA_JET ], + [ 20, MoveId.SLAM ], + [ 20, MoveId.WATER_PULSE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.DIG ], + [ 32, MoveId.SUCKER_PUNCH ], + [ 36, MoveId.THROAT_CHOP ], + [ 40, MoveId.LIQUIDATION ], ], [Species.WUGTRIO]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.WRAP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.MUD_SLAP ], - [ 12, Moves.AQUA_JET ], - [ 16, Moves.SLAM ], - [ 20, Moves.WATER_PULSE ], - [ 24, Moves.HEADBUTT ], - [ 30, Moves.TRIPLE_DIVE ], - [ 36, Moves.DIG ], - [ 42, Moves.SUCKER_PUNCH ], - [ 48, Moves.THROAT_CHOP ], - [ 54, Moves.LIQUIDATION ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.MUD_SLAP ], + [ 12, MoveId.AQUA_JET ], + [ 16, MoveId.SLAM ], + [ 20, MoveId.WATER_PULSE ], + [ 24, MoveId.HEADBUTT ], + [ 30, MoveId.TRIPLE_DIVE ], + [ 36, MoveId.DIG ], + [ 42, MoveId.SUCKER_PUNCH ], + [ 48, MoveId.THROAT_CHOP ], + [ 54, MoveId.LIQUIDATION ], ], [Species.BOMBIRDIER]: [ - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.MEMENTO ], - [ 1, Moves.HONE_CLAWS ], - [ 7, Moves.THIEF ], - [ 11, Moves.ROCK_THROW ], - [ 16, Moves.WHIRLWIND ], - [ 20, Moves.PLUCK ], - [ 24, Moves.TORMENT ], - [ 29, Moves.ROCK_TOMB ], - [ 36, Moves.PAYBACK ], - [ 42, Moves.DUAL_WINGBEAT ], - [ 47, Moves.ROCK_SLIDE ], - [ 53, Moves.KNOCK_OFF ], - [ 60, Moves.PARTING_SHOT ], + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.MEMENTO ], + [ 1, MoveId.HONE_CLAWS ], + [ 7, MoveId.THIEF ], + [ 11, MoveId.ROCK_THROW ], + [ 16, MoveId.WHIRLWIND ], + [ 20, MoveId.PLUCK ], + [ 24, MoveId.TORMENT ], + [ 29, MoveId.ROCK_TOMB ], + [ 36, MoveId.PAYBACK ], + [ 42, MoveId.DUAL_WINGBEAT ], + [ 47, MoveId.ROCK_SLIDE ], + [ 53, MoveId.KNOCK_OFF ], + [ 60, MoveId.PARTING_SHOT ], ], [Species.FINIZEN]: [ - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 7, Moves.ASTONISH ], - [ 10, Moves.FOCUS_ENERGY ], - [ 13, Moves.AQUA_JET ], - [ 17, Moves.DOUBLE_HIT ], - [ 21, Moves.DIVE ], - [ 25, Moves.CHARM ], - [ 29, Moves.ACROBATICS ], - [ 34, Moves.ENCORE ], - [ 39, Moves.AQUA_TAIL ], - [ 44, Moves.MIST ], - [ 50, Moves.HYDRO_PUMP ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 7, MoveId.ASTONISH ], + [ 10, MoveId.FOCUS_ENERGY ], + [ 13, MoveId.AQUA_JET ], + [ 17, MoveId.DOUBLE_HIT ], + [ 21, MoveId.DIVE ], + [ 25, MoveId.CHARM ], + [ 29, MoveId.ACROBATICS ], + [ 34, MoveId.ENCORE ], + [ 39, MoveId.AQUA_TAIL ], + [ 44, MoveId.MIST ], + [ 50, MoveId.HYDRO_PUMP ], ], [Species.PALAFIN]: [ - [ EVOLVE_MOVE, Moves.FLIP_TURN ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.JET_PUNCH ], - [ 7, Moves.ASTONISH ], - [ 10, Moves.FOCUS_ENERGY ], - [ 13, Moves.AQUA_JET ], - [ 17, Moves.DOUBLE_HIT ], - [ 21, Moves.DIVE ], - [ 25, Moves.CHARM ], - [ 29, Moves.ACROBATICS ], - [ 34, Moves.ENCORE ], - [ 39, Moves.AQUA_TAIL ], - [ 44, Moves.MIST ], - [ 50, Moves.HYDRO_PUMP ], - [ 55, Moves.FOCUS_PUNCH ], - [ 61, Moves.WAVE_CRASH ], + [ EVOLVE_MOVE, MoveId.FLIP_TURN ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.JET_PUNCH ], + [ 7, MoveId.ASTONISH ], + [ 10, MoveId.FOCUS_ENERGY ], + [ 13, MoveId.AQUA_JET ], + [ 17, MoveId.DOUBLE_HIT ], + [ 21, MoveId.DIVE ], + [ 25, MoveId.CHARM ], + [ 29, MoveId.ACROBATICS ], + [ 34, MoveId.ENCORE ], + [ 39, MoveId.AQUA_TAIL ], + [ 44, MoveId.MIST ], + [ 50, MoveId.HYDRO_PUMP ], + [ 55, MoveId.FOCUS_PUNCH ], + [ 61, MoveId.WAVE_CRASH ], ], [Species.VAROOM]: [ - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 41, Moves.UPROAR ], - [ 46, Moves.SPIN_OUT ], - [ 50, Moves.GUNK_SHOT ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 41, MoveId.UPROAR ], + [ 46, MoveId.SPIN_OUT ], + [ 50, MoveId.GUNK_SHOT ], ], [Species.REVAVROOM]: [ - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], [Species.CYCLIZAR]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 7, Moves.RAPID_SPIN ], - [ 11, Moves.TAUNT ], - [ 14, Moves.BREAKING_SWIPE ], - [ 18, Moves.QUICK_ATTACK ], - [ 23, Moves.BITE ], - [ 27, Moves.U_TURN ], - [ 31, Moves.SHED_TAIL ], - [ 36, Moves.DRAGON_CLAW ], - [ 40, Moves.SHIFT_GEAR ], - [ 45, Moves.DRAGON_PULSE ], - [ 51, Moves.DOUBLE_EDGE ], - [ 57, Moves.DRAGON_RUSH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 7, MoveId.RAPID_SPIN ], + [ 11, MoveId.TAUNT ], + [ 14, MoveId.BREAKING_SWIPE ], + [ 18, MoveId.QUICK_ATTACK ], + [ 23, MoveId.BITE ], + [ 27, MoveId.U_TURN ], + [ 31, MoveId.SHED_TAIL ], + [ 36, MoveId.DRAGON_CLAW ], + [ 40, MoveId.SHIFT_GEAR ], + [ 45, MoveId.DRAGON_PULSE ], + [ 51, MoveId.DOUBLE_EDGE ], + [ 57, MoveId.DRAGON_RUSH ], ], [Species.ORTHWORM]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WRAP ], - [ 1, Moves.HARDEN ], - [ 7, Moves.MUD_SLAP ], - [ 12, Moves.SMACK_DOWN ], - [ 16, Moves.BULLDOZE ], - [ 21, Moves.IRON_HEAD ], - [ 26, Moves.TAKE_DOWN ], - [ 30, Moves.DIG ], - [ 34, Moves.SANDSTORM ], - [ 38, Moves.IRON_DEFENSE ], - [ 43, Moves.IRON_TAIL ], - [ 47, Moves.EARTHQUAKE ], - [ 52, Moves.SHED_TAIL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WRAP ], + [ 1, MoveId.HARDEN ], + [ 7, MoveId.MUD_SLAP ], + [ 12, MoveId.SMACK_DOWN ], + [ 16, MoveId.BULLDOZE ], + [ 21, MoveId.IRON_HEAD ], + [ 26, MoveId.TAKE_DOWN ], + [ 30, MoveId.DIG ], + [ 34, MoveId.SANDSTORM ], + [ 38, MoveId.IRON_DEFENSE ], + [ 43, MoveId.IRON_TAIL ], + [ 47, MoveId.EARTHQUAKE ], + [ 52, MoveId.SHED_TAIL ], ], [Species.GLIMMET]: [ - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.HARDEN ], - [ 1, Moves.SMACK_DOWN ], - [ 7, Moves.ACID_SPRAY ], - [ 11, Moves.ANCIENT_POWER ], - [ 15, Moves.ROCK_POLISH ], - [ 18, Moves.STEALTH_ROCK ], - [ 22, Moves.VENOSHOCK ], - [ 26, Moves.SANDSTORM ], - [ 29, Moves.SELF_DESTRUCT ], - [ 33, Moves.ROCK_SLIDE ], - [ 37, Moves.POWER_GEM ], - [ 41, Moves.ACID_ARMOR ], - [ 46, Moves.SLUDGE_WAVE ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.SMACK_DOWN ], + [ 7, MoveId.ACID_SPRAY ], + [ 11, MoveId.ANCIENT_POWER ], + [ 15, MoveId.ROCK_POLISH ], + [ 18, MoveId.STEALTH_ROCK ], + [ 22, MoveId.VENOSHOCK ], + [ 26, MoveId.SANDSTORM ], + [ 29, MoveId.SELF_DESTRUCT ], + [ 33, MoveId.ROCK_SLIDE ], + [ 37, MoveId.POWER_GEM ], + [ 41, MoveId.ACID_ARMOR ], + [ 46, MoveId.SLUDGE_WAVE ], ], [Species.GLIMMORA]: [ - [ EVOLVE_MOVE, Moves.MORTAL_SPIN ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.HARDEN ], - [ 1, Moves.TOXIC_SPIKES ], - [ 1, Moves.SMACK_DOWN ], - [ 1, Moves.SPIKY_SHIELD ], - [ 7, Moves.ACID_SPRAY ], - [ 11, Moves.ANCIENT_POWER ], - [ 15, Moves.ROCK_POLISH ], - [ 18, Moves.STEALTH_ROCK ], - [ 22, Moves.VENOSHOCK ], - [ 26, Moves.SANDSTORM ], - [ 29, Moves.SELF_DESTRUCT ], - [ 33, Moves.ROCK_SLIDE ], - [ 39, Moves.POWER_GEM ], - [ 44, Moves.ACID_ARMOR ], - [ 50, Moves.SLUDGE_WAVE ], + [ EVOLVE_MOVE, MoveId.MORTAL_SPIN ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.TOXIC_SPIKES ], + [ 1, MoveId.SMACK_DOWN ], + [ 1, MoveId.SPIKY_SHIELD ], + [ 7, MoveId.ACID_SPRAY ], + [ 11, MoveId.ANCIENT_POWER ], + [ 15, MoveId.ROCK_POLISH ], + [ 18, MoveId.STEALTH_ROCK ], + [ 22, MoveId.VENOSHOCK ], + [ 26, MoveId.SANDSTORM ], + [ 29, MoveId.SELF_DESTRUCT ], + [ 33, MoveId.ROCK_SLIDE ], + [ 39, MoveId.POWER_GEM ], + [ 44, MoveId.ACID_ARMOR ], + [ 50, MoveId.SLUDGE_WAVE ], ], [Species.GREAVARD]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.LICK ], - [ 6, Moves.TAIL_WHIP ], - [ 6, Moves.BITE ], - [ 9, Moves.ROAR ], - [ 12, Moves.HEADBUTT ], - [ 16, Moves.DIG ], - [ 24, Moves.REST ], - [ 28, Moves.CRUNCH ], - [ 32, Moves.PLAY_ROUGH ], - [ 37, Moves.HELPING_HAND ], - [ 41, Moves.PHANTOM_FORCE ], - [ 46, Moves.CHARM ], - [ 52, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.LICK ], + [ 6, MoveId.TAIL_WHIP ], + [ 6, MoveId.BITE ], + [ 9, MoveId.ROAR ], + [ 12, MoveId.HEADBUTT ], + [ 16, MoveId.DIG ], + [ 24, MoveId.REST ], + [ 28, MoveId.CRUNCH ], + [ 32, MoveId.PLAY_ROUGH ], + [ 37, MoveId.HELPING_HAND ], + [ 41, MoveId.PHANTOM_FORCE ], + [ 46, MoveId.CHARM ], + [ 52, MoveId.DOUBLE_EDGE ], ], [Species.HOUNDSTONE]: [ - [ EVOLVE_MOVE, Moves.LAST_RESPECTS ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 3, Moves.LICK ], - [ 6, Moves.TAIL_WHIP ], - [ 6, Moves.BITE ], - [ 9, Moves.ROAR ], - [ 12, Moves.HEADBUTT ], - [ 16, Moves.DIG ], - [ 24, Moves.REST ], - [ 28, Moves.CRUNCH ], - [ 36, Moves.PLAY_ROUGH ], - [ 41, Moves.HELPING_HAND ], - [ 46, Moves.PHANTOM_FORCE ], - [ 51, Moves.CHARM ], - [ 58, Moves.DOUBLE_EDGE ], + [ EVOLVE_MOVE, MoveId.LAST_RESPECTS ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 3, MoveId.LICK ], + [ 6, MoveId.TAIL_WHIP ], + [ 6, MoveId.BITE ], + [ 9, MoveId.ROAR ], + [ 12, MoveId.HEADBUTT ], + [ 16, MoveId.DIG ], + [ 24, MoveId.REST ], + [ 28, MoveId.CRUNCH ], + [ 36, MoveId.PLAY_ROUGH ], + [ 41, MoveId.HELPING_HAND ], + [ 46, MoveId.PHANTOM_FORCE ], + [ 51, MoveId.CHARM ], + [ 58, MoveId.DOUBLE_EDGE ], ], [Species.FLAMIGO]: [ - [ 1, Moves.PECK ], - [ 1, Moves.COPYCAT ], - [ 5, Moves.DOUBLE_KICK ], - [ 9, Moves.DETECT ], - [ 12, Moves.WING_ATTACK ], - [ 15, Moves.FOCUS_ENERGY ], - [ 18, Moves.LOW_KICK ], - [ 21, Moves.FEINT ], - [ 27, Moves.PAYBACK ], - [ 31, Moves.ROOST ], - [ 35, Moves.AIR_SLASH ], - [ 39, Moves.MEGA_KICK ], - [ 44, Moves.WIDE_GUARD ], - [ 48, Moves.THROAT_CHOP ], - [ 54, Moves.BRAVE_BIRD ], + [ 1, MoveId.PECK ], + [ 1, MoveId.COPYCAT ], + [ 5, MoveId.DOUBLE_KICK ], + [ 9, MoveId.DETECT ], + [ 12, MoveId.WING_ATTACK ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.LOW_KICK ], + [ 21, MoveId.FEINT ], + [ 27, MoveId.PAYBACK ], + [ 31, MoveId.ROOST ], + [ 35, MoveId.AIR_SLASH ], + [ 39, MoveId.MEGA_KICK ], + [ 44, MoveId.WIDE_GUARD ], + [ 48, MoveId.THROAT_CHOP ], + [ 54, MoveId.BRAVE_BIRD ], ], [Species.CETODDLE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POWDER_SNOW ], - [ 6, Moves.GROWL ], - [ 9, Moves.ECHOED_VOICE ], - [ 12, Moves.ICE_SHARD ], - [ 15, Moves.REST ], - [ 19, Moves.TAKE_DOWN ], - [ 25, Moves.FLAIL ], - [ 27, Moves.AVALANCHE ], - [ 31, Moves.BOUNCE ], - [ 36, Moves.BODY_SLAM ], - [ 40, Moves.AMNESIA ], - [ 44, Moves.ICE_SPINNER ], - [ 49, Moves.DOUBLE_EDGE ], - [ 53, Moves.BLIZZARD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POWDER_SNOW ], + [ 6, MoveId.GROWL ], + [ 9, MoveId.ECHOED_VOICE ], + [ 12, MoveId.ICE_SHARD ], + [ 15, MoveId.REST ], + [ 19, MoveId.TAKE_DOWN ], + [ 25, MoveId.FLAIL ], + [ 27, MoveId.AVALANCHE ], + [ 31, MoveId.BOUNCE ], + [ 36, MoveId.BODY_SLAM ], + [ 40, MoveId.AMNESIA ], + [ 44, MoveId.ICE_SPINNER ], + [ 49, MoveId.DOUBLE_EDGE ], + [ 53, MoveId.BLIZZARD ], ], [Species.CETITAN]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POWDER_SNOW ], - [ 6, Moves.GROWL ], - [ 9, Moves.ECHOED_VOICE ], - [ 12, Moves.ICE_SHARD ], - [ 15, Moves.REST ], - [ 19, Moves.TAKE_DOWN ], - [ 25, Moves.FLAIL ], - [ 27, Moves.AVALANCHE ], - [ 31, Moves.BOUNCE ], - [ 36, Moves.BODY_SLAM ], - [ 40, Moves.AMNESIA ], - [ 44, Moves.ICE_SPINNER ], - [ 49, Moves.DOUBLE_EDGE ], - [ 53, Moves.BLIZZARD ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POWDER_SNOW ], + [ 6, MoveId.GROWL ], + [ 9, MoveId.ECHOED_VOICE ], + [ 12, MoveId.ICE_SHARD ], + [ 15, MoveId.REST ], + [ 19, MoveId.TAKE_DOWN ], + [ 25, MoveId.FLAIL ], + [ 27, MoveId.AVALANCHE ], + [ 31, MoveId.BOUNCE ], + [ 36, MoveId.BODY_SLAM ], + [ 40, MoveId.AMNESIA ], + [ 44, MoveId.ICE_SPINNER ], + [ 49, MoveId.DOUBLE_EDGE ], + [ 53, MoveId.BLIZZARD ], ], [Species.VELUZA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.AQUA_JET ], - [ 7, Moves.PLUCK ], - [ 11, Moves.WATER_PULSE ], - [ 15, Moves.FOCUS_ENERGY ], - [ 20, Moves.SLASH ], - [ 25, Moves.AQUA_CUTTER ], - [ 30, Moves.FILLET_AWAY ], - [ 35, Moves.NIGHT_SLASH ], - [ 40, Moves.PSYCHO_CUT ], - [ 45, Moves.LIQUIDATION ], - [ 50, Moves.CRUNCH ], - [ 55, Moves.FINAL_GAMBIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.AQUA_JET ], + [ 7, MoveId.PLUCK ], + [ 11, MoveId.WATER_PULSE ], + [ 15, MoveId.FOCUS_ENERGY ], + [ 20, MoveId.SLASH ], + [ 25, MoveId.AQUA_CUTTER ], + [ 30, MoveId.FILLET_AWAY ], + [ 35, MoveId.NIGHT_SLASH ], + [ 40, MoveId.PSYCHO_CUT ], + [ 45, MoveId.LIQUIDATION ], + [ 50, MoveId.CRUNCH ], + [ 55, MoveId.FINAL_GAMBIT ], ], [Species.DONDOZO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.WATER_GUN ], - [ 5, Moves.TICKLE ], - [ 10, Moves.FLAIL ], - [ 15, Moves.REST ], - [ 15, Moves.SLEEP_TALK ], - [ 20, Moves.DIVE ], - [ 25, Moves.NOBLE_ROAR ], - [ 30, Moves.SOAK ], - [ 35, Moves.BODY_SLAM ], - [ 40, Moves.AQUA_TAIL ], - [ 45, Moves.RAIN_DANCE ], - [ 50, Moves.ORDER_UP ], - [ 55, Moves.HEAVY_SLAM ], - [ 60, Moves.DOUBLE_EDGE ], - [ 65, Moves.WAVE_CRASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.WATER_GUN ], + [ 5, MoveId.TICKLE ], + [ 10, MoveId.FLAIL ], + [ 15, MoveId.REST ], + [ 15, MoveId.SLEEP_TALK ], + [ 20, MoveId.DIVE ], + [ 25, MoveId.NOBLE_ROAR ], + [ 30, MoveId.SOAK ], + [ 35, MoveId.BODY_SLAM ], + [ 40, MoveId.AQUA_TAIL ], + [ 45, MoveId.RAIN_DANCE ], + [ 50, MoveId.ORDER_UP ], + [ 55, MoveId.HEAVY_SLAM ], + [ 60, MoveId.DOUBLE_EDGE ], + [ 65, MoveId.WAVE_CRASH ], ], [Species.TATSUGIRI]: [ - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SPLASH ], - [ 6, Moves.HARDEN ], - [ 12, Moves.HELPING_HAND ], - [ 17, Moves.WATER_PULSE ], - [ 23, Moves.SOAK ], - [ 28, Moves.TAUNT ], - [ 34, Moves.MEMENTO ], - [ 39, Moves.MUDDY_WATER ], - [ 43, Moves.NASTY_PLOT ], - [ 47, Moves.MIRROR_COAT ], - [ 52, Moves.DRAGON_PULSE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SPLASH ], + [ 6, MoveId.HARDEN ], + [ 12, MoveId.HELPING_HAND ], + [ 17, MoveId.WATER_PULSE ], + [ 23, MoveId.SOAK ], + [ 28, MoveId.TAUNT ], + [ 34, MoveId.MEMENTO ], + [ 39, MoveId.MUDDY_WATER ], + [ 43, MoveId.NASTY_PLOT ], + [ 47, MoveId.MIRROR_COAT ], + [ 52, MoveId.DRAGON_PULSE ], ], [Species.ANNIHILAPE]: [ - [ EVOLVE_MOVE, Moves.SHADOW_PUNCH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.COUNTER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.COVET ], // Previous Stage Move - [ 1, Moves.FLING ], - [ 5, Moves.FURY_SWIPES ], - [ 8, Moves.LOW_KICK ], - [ 12, Moves.SEISMIC_TOSS ], - [ 17, Moves.SWAGGER ], - [ 22, Moves.CROSS_CHOP ], - [ 26, Moves.ASSURANCE ], - [ 30, Moves.THRASH ], - [ 35, Moves.RAGE_FIST ], - [ 39, Moves.CLOSE_COMBAT ], - [ 44, Moves.SCREECH ], - [ 48, Moves.STOMPING_TANTRUM ], - [ 53, Moves.OUTRAGE ], - [ 57, Moves.FINAL_GAMBIT ], + [ EVOLVE_MOVE, MoveId.SHADOW_PUNCH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.COUNTER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.COVET ], // Previous Stage Move + [ 1, MoveId.FLING ], + [ 5, MoveId.FURY_SWIPES ], + [ 8, MoveId.LOW_KICK ], + [ 12, MoveId.SEISMIC_TOSS ], + [ 17, MoveId.SWAGGER ], + [ 22, MoveId.CROSS_CHOP ], + [ 26, MoveId.ASSURANCE ], + [ 30, MoveId.THRASH ], + [ 35, MoveId.RAGE_FIST ], + [ 39, MoveId.CLOSE_COMBAT ], + [ 44, MoveId.SCREECH ], + [ 48, MoveId.STOMPING_TANTRUM ], + [ 53, MoveId.OUTRAGE ], + [ 57, MoveId.FINAL_GAMBIT ], ], [Species.CLODSIRE]: [ - [ EVOLVE_MOVE, Moves.AMNESIA ], - [ 1, Moves.TACKLE ], // Previous Stage Move - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.POISON_STING ], - [ 4, Moves.TOXIC_SPIKES ], - [ 8, Moves.MUD_SHOT ], - [ 12, Moves.POISON_TAIL ], - [ 16, Moves.SLAM ], - [ 21, Moves.YAWN ], - [ 24, Moves.POISON_JAB ], - [ 30, Moves.SLUDGE_WAVE ], - [ 36, Moves.MEGAHORN ], - [ 40, Moves.TOXIC ], - [ 48, Moves.EARTHQUAKE ], + [ EVOLVE_MOVE, MoveId.AMNESIA ], + [ 1, MoveId.TACKLE ], // Previous Stage Move + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.POISON_STING ], + [ 4, MoveId.TOXIC_SPIKES ], + [ 8, MoveId.MUD_SHOT ], + [ 12, MoveId.POISON_TAIL ], + [ 16, MoveId.SLAM ], + [ 21, MoveId.YAWN ], + [ 24, MoveId.POISON_JAB ], + [ 30, MoveId.SLUDGE_WAVE ], + [ 36, MoveId.MEGAHORN ], + [ 40, MoveId.TOXIC ], + [ 48, MoveId.EARTHQUAKE ], ], [Species.FARIGIRAF]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.POWER_SWAP ], - [ 1, Moves.GUARD_SWAP ], - [ 5, Moves.CONFUSION ], - [ 10, Moves.ASSURANCE ], - [ 14, Moves.STOMP ], - [ 19, Moves.PSYBEAM ], - [ 23, Moves.AGILITY ], - [ 28, Moves.DOUBLE_HIT ], - [ 32, Moves.TWIN_BEAM ], - [ 37, Moves.CRUNCH ], - [ 41, Moves.BATON_PASS ], - [ 46, Moves.NASTY_PLOT ], - [ 50, Moves.PSYCHIC ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.POWER_SWAP ], + [ 1, MoveId.GUARD_SWAP ], + [ 5, MoveId.CONFUSION ], + [ 10, MoveId.ASSURANCE ], + [ 14, MoveId.STOMP ], + [ 19, MoveId.PSYBEAM ], + [ 23, MoveId.AGILITY ], + [ 28, MoveId.DOUBLE_HIT ], + [ 32, MoveId.TWIN_BEAM ], + [ 37, MoveId.CRUNCH ], + [ 41, MoveId.BATON_PASS ], + [ 46, MoveId.NASTY_PLOT ], + [ 50, MoveId.PSYCHIC ], ], [Species.DUDUNSPARCE]: [ - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.FLAIL ], - [ 1, Moves.TACKLE ], // Previous Stage Move, Custom - [ 4, Moves.MUD_SLAP ], - [ 8, Moves.ROLLOUT ], - [ 12, Moves.GLARE ], - [ 16, Moves.SCREECH ], - [ 20, Moves.ANCIENT_POWER ], - [ 24, Moves.DRILL_RUN ], - [ 28, Moves.YAWN ], - [ 32, Moves.HYPER_DRILL ], - [ 36, Moves.ROOST ], - [ 40, Moves.DRAGON_RUSH ], - [ 44, Moves.COIL ], - [ 48, Moves.DOUBLE_EDGE ], - [ 52, Moves.ENDEAVOR ], - [ 56, Moves.HURRICANE ], - [ 62, Moves.BOOMBURST ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.TACKLE ], // Previous Stage Move, Custom + [ 4, MoveId.MUD_SLAP ], + [ 8, MoveId.ROLLOUT ], + [ 12, MoveId.GLARE ], + [ 16, MoveId.SCREECH ], + [ 20, MoveId.ANCIENT_POWER ], + [ 24, MoveId.DRILL_RUN ], + [ 28, MoveId.YAWN ], + [ 32, MoveId.HYPER_DRILL ], + [ 36, MoveId.ROOST ], + [ 40, MoveId.DRAGON_RUSH ], + [ 44, MoveId.COIL ], + [ 48, MoveId.DOUBLE_EDGE ], + [ 52, MoveId.ENDEAVOR ], + [ 56, MoveId.HURRICANE ], + [ 62, MoveId.BOOMBURST ], ], [Species.KINGAMBIT]: [ - [ EVOLVE_MOVE, Moves.KOWTOW_CLEAVE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.METAL_BURST ], - [ 15, Moves.TORMENT ], - [ 20, Moves.SCARY_FACE ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.METAL_SOUND ], - [ 35, Moves.SLASH ], - [ 40, Moves.NIGHT_SLASH ], - [ 45, Moves.IRON_DEFENSE ], - [ 50, Moves.RETALIATE ], - [ 57, Moves.IRON_HEAD ], - [ 64, Moves.SWORDS_DANCE ], - [ 71, Moves.GUILLOTINE ], + [ EVOLVE_MOVE, MoveId.KOWTOW_CLEAVE ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.METAL_BURST ], + [ 15, MoveId.TORMENT ], + [ 20, MoveId.SCARY_FACE ], + [ 25, MoveId.ASSURANCE ], + [ 30, MoveId.METAL_SOUND ], + [ 35, MoveId.SLASH ], + [ 40, MoveId.NIGHT_SLASH ], + [ 45, MoveId.IRON_DEFENSE ], + [ 50, MoveId.RETALIATE ], + [ 57, MoveId.IRON_HEAD ], + [ 64, MoveId.SWORDS_DANCE ], + [ 71, MoveId.GUILLOTINE ], ], [Species.GREAT_TUSK]: [ - [ 1, Moves.HORN_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.SUNNY_DAY ], - [ 7, Moves.BULLDOZE ], - [ 14, Moves.TAUNT ], - [ 21, Moves.RAPID_SPIN ], - [ 28, Moves.BRICK_BREAK ], - [ 35, Moves.STOMPING_TANTRUM ], - [ 42, Moves.KNOCK_OFF ], - [ 49, Moves.EARTHQUAKE ], - [ 56, Moves.GIGA_IMPACT ], - [ 63, Moves.CLOSE_COMBAT ], - [ 70, Moves.ENDEAVOR ], - [ 77, Moves.MEGAHORN ], - [ 84, Moves.HEAD_SMASH ], - [ 91, Moves.HEADLONG_RUSH ], + [ 1, MoveId.HORN_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.SUNNY_DAY ], + [ 7, MoveId.BULLDOZE ], + [ 14, MoveId.TAUNT ], + [ 21, MoveId.RAPID_SPIN ], + [ 28, MoveId.BRICK_BREAK ], + [ 35, MoveId.STOMPING_TANTRUM ], + [ 42, MoveId.KNOCK_OFF ], + [ 49, MoveId.EARTHQUAKE ], + [ 56, MoveId.GIGA_IMPACT ], + [ 63, MoveId.CLOSE_COMBAT ], + [ 70, MoveId.ENDEAVOR ], + [ 77, MoveId.MEGAHORN ], + [ 84, MoveId.HEAD_SMASH ], + [ 91, MoveId.HEADLONG_RUSH ], ], [Species.SCREAM_TAIL]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.POUND ], - [ 1, Moves.SING ], - [ 1, Moves.DISABLE ], - [ 7, Moves.HOWL ], - [ 14, Moves.NOBLE_ROAR ], - [ 21, Moves.BITE ], - [ 28, Moves.BODY_SLAM ], - [ 35, Moves.REST ], - [ 42, Moves.PLAY_ROUGH ], - [ 49, Moves.HYPER_VOICE ], - [ 56, Moves.PSYCHIC_FANGS ], - [ 63, Moves.CRUNCH ], - [ 70, Moves.WISH ], - [ 77, Moves.GYRO_BALL ], - [ 84, Moves.PERISH_SONG ], - [ 91, Moves.BOOMBURST ], + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SING ], + [ 1, MoveId.DISABLE ], + [ 7, MoveId.HOWL ], + [ 14, MoveId.NOBLE_ROAR ], + [ 21, MoveId.BITE ], + [ 28, MoveId.BODY_SLAM ], + [ 35, MoveId.REST ], + [ 42, MoveId.PLAY_ROUGH ], + [ 49, MoveId.HYPER_VOICE ], + [ 56, MoveId.PSYCHIC_FANGS ], + [ 63, MoveId.CRUNCH ], + [ 70, MoveId.WISH ], + [ 77, MoveId.GYRO_BALL ], + [ 84, MoveId.PERISH_SONG ], + [ 91, MoveId.BOOMBURST ], ], [Species.BRUTE_BONNET]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.ABSORB ], - [ 1, Moves.GROWTH ], - [ 1, Moves.ASTONISH ], - [ 7, Moves.STUN_SPORE ], - [ 14, Moves.MEGA_DRAIN ], - [ 21, Moves.SYNTHESIS ], - [ 28, Moves.CLEAR_SMOG ], - [ 35, Moves.PAYBACK ], - [ 42, Moves.THRASH ], - [ 49, Moves.GIGA_DRAIN ], - [ 56, Moves.SUCKER_PUNCH ], - [ 63, Moves.SPORE ], - [ 70, Moves.INGRAIN ], - [ 77, Moves.RAGE_POWDER ], - [ 91, Moves.SOLAR_BEAM ], + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.ASTONISH ], + [ 7, MoveId.STUN_SPORE ], + [ 14, MoveId.MEGA_DRAIN ], + [ 21, MoveId.SYNTHESIS ], + [ 28, MoveId.CLEAR_SMOG ], + [ 35, MoveId.PAYBACK ], + [ 42, MoveId.THRASH ], + [ 49, MoveId.GIGA_DRAIN ], + [ 56, MoveId.SUCKER_PUNCH ], + [ 63, MoveId.SPORE ], + [ 70, MoveId.INGRAIN ], + [ 77, MoveId.RAGE_POWDER ], + [ 91, MoveId.SOLAR_BEAM ], ], [Species.FLUTTER_MANE]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.SPITE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.PSYBEAM ], // Custom, moved from 7 to 1 - [ 14, Moves.MEAN_LOOK ], - [ 21, Moves.MEMENTO ], - [ 28, Moves.WISH ], - [ 35, Moves.DAZZLING_GLEAM ], - [ 42, Moves.SHADOW_BALL ], - [ 49, Moves.MYSTICAL_FIRE ], - [ 56, Moves.POWER_GEM ], - [ 63, Moves.PSYSHOCK ], - [ 70, Moves.PHANTOM_FORCE ], - [ 77, Moves.PAIN_SPLIT ], - [ 84, Moves.MOONBLAST ], - [ 91, Moves.PERISH_SONG ], + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.PSYBEAM ], // Custom, moved from 7 to 1 + [ 14, MoveId.MEAN_LOOK ], + [ 21, MoveId.MEMENTO ], + [ 28, MoveId.WISH ], + [ 35, MoveId.DAZZLING_GLEAM ], + [ 42, MoveId.SHADOW_BALL ], + [ 49, MoveId.MYSTICAL_FIRE ], + [ 56, MoveId.POWER_GEM ], + [ 63, MoveId.PSYSHOCK ], + [ 70, MoveId.PHANTOM_FORCE ], + [ 77, MoveId.PAIN_SPLIT ], + [ 84, MoveId.MOONBLAST ], + [ 91, MoveId.PERISH_SONG ], ], [Species.SLITHER_WING]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.GUST ], - [ 1, Moves.EMBER ], - [ 1, Moves.BUG_BITE ], - [ 7, Moves.POISON_POWDER ], - [ 7, Moves.STUN_SPORE ], - [ 14, Moves.FLAME_CHARGE ], - [ 21, Moves.STOMP ], - [ 28, Moves.LOW_SWEEP ], - [ 35, Moves.MORNING_SUN ], - [ 42, Moves.LUNGE ], - [ 49, Moves.SUPERPOWER ], - [ 56, Moves.BULK_UP ], - [ 63, Moves.DUAL_WINGBEAT ], - [ 70, Moves.FIRST_IMPRESSION ], - [ 77, Moves.WHIRLWIND ], - [ 84, Moves.LEECH_LIFE ], - [ 91, Moves.THRASH ], + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.GUST ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.BUG_BITE ], + [ 7, MoveId.POISON_POWDER ], + [ 7, MoveId.STUN_SPORE ], + [ 14, MoveId.FLAME_CHARGE ], + [ 21, MoveId.STOMP ], + [ 28, MoveId.LOW_SWEEP ], + [ 35, MoveId.MORNING_SUN ], + [ 42, MoveId.LUNGE ], + [ 49, MoveId.SUPERPOWER ], + [ 56, MoveId.BULK_UP ], + [ 63, MoveId.DUAL_WINGBEAT ], + [ 70, MoveId.FIRST_IMPRESSION ], + [ 77, MoveId.WHIRLWIND ], + [ 84, MoveId.LEECH_LIFE ], + [ 91, MoveId.THRASH ], ], [Species.SANDY_SHOCKS]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 7, Moves.SPARK ], - [ 14, Moves.BULLDOZE ], - [ 21, Moves.CHARGE_BEAM ], - [ 28, Moves.TRI_ATTACK ], - [ 35, Moves.SCREECH ], - [ 42, Moves.HEAVY_SLAM ], - [ 49, Moves.METAL_SOUND ], - [ 56, Moves.DISCHARGE ], - [ 63, Moves.EARTH_POWER ], - [ 70, Moves.MIRROR_COAT ], - [ 77, Moves.GRAVITY ], - [ 84, Moves.ZAP_CANNON ], - [ 91, Moves.MAGNETIC_FLUX ], + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ 1, MoveId.SUPERSONIC ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 7, MoveId.SPARK ], + [ 14, MoveId.BULLDOZE ], + [ 21, MoveId.CHARGE_BEAM ], + [ 28, MoveId.TRI_ATTACK ], + [ 35, MoveId.SCREECH ], + [ 42, MoveId.HEAVY_SLAM ], + [ 49, MoveId.METAL_SOUND ], + [ 56, MoveId.DISCHARGE ], + [ 63, MoveId.EARTH_POWER ], + [ 70, MoveId.MIRROR_COAT ], + [ 77, MoveId.GRAVITY ], + [ 84, MoveId.ZAP_CANNON ], + [ 91, MoveId.MAGNETIC_FLUX ], ], [Species.IRON_TREADS]: [ - [ 1, Moves.HORN_ATTACK ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 7, Moves.BULLDOZE ], - [ 21, Moves.RAPID_SPIN ], - [ 28, Moves.IRON_HEAD ], - [ 35, Moves.STOMPING_TANTRUM ], - [ 42, Moves.KNOCK_OFF ], - [ 49, Moves.EARTHQUAKE ], - [ 56, Moves.HEAVY_SLAM ], - [ 63, Moves.WILD_CHARGE ], - [ 70, Moves.ENDEAVOR ], - [ 77, Moves.MEGAHORN ], - [ 84, Moves.GIGA_IMPACT ], - [ 91, Moves.STEEL_ROLLER ], + [ 1, MoveId.HORN_ATTACK ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.ROLLOUT ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 7, MoveId.BULLDOZE ], + [ 21, MoveId.RAPID_SPIN ], + [ 28, MoveId.IRON_HEAD ], + [ 35, MoveId.STOMPING_TANTRUM ], + [ 42, MoveId.KNOCK_OFF ], + [ 49, MoveId.EARTHQUAKE ], + [ 56, MoveId.HEAVY_SLAM ], + [ 63, MoveId.WILD_CHARGE ], + [ 70, MoveId.ENDEAVOR ], + [ 77, MoveId.MEGAHORN ], + [ 84, MoveId.GIGA_IMPACT ], + [ 91, MoveId.STEEL_ROLLER ], ], [Species.IRON_BUNDLE]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.PRESENT ], - [ 1, Moves.WATER_GUN ], // Custom - [ 7, Moves.POWDER_SNOW ], - [ 14, Moves.WHIRLPOOL ], - [ 21, Moves.TAKE_DOWN ], - [ 28, Moves.DRILL_PECK ], - [ 35, Moves.HELPING_HAND ], - [ 42, Moves.FREEZE_DRY ], - [ 49, Moves.FLIP_TURN ], - [ 56, Moves.ICE_BEAM ], - [ 63, Moves.AGILITY ], - [ 70, Moves.SNOWSCAPE ], - [ 77, Moves.HYDRO_PUMP ], - [ 84, Moves.AURORA_VEIL ], - [ 91, Moves.BLIZZARD ], + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.PRESENT ], + [ 1, MoveId.WATER_GUN ], // Custom + [ 7, MoveId.POWDER_SNOW ], + [ 14, MoveId.WHIRLPOOL ], + [ 21, MoveId.TAKE_DOWN ], + [ 28, MoveId.DRILL_PECK ], + [ 35, MoveId.HELPING_HAND ], + [ 42, MoveId.FREEZE_DRY ], + [ 49, MoveId.FLIP_TURN ], + [ 56, MoveId.ICE_BEAM ], + [ 63, MoveId.AGILITY ], + [ 70, MoveId.SNOWSCAPE ], + [ 77, MoveId.HYDRO_PUMP ], + [ 84, MoveId.AURORA_VEIL ], + [ 91, MoveId.BLIZZARD ], ], [Species.IRON_HANDS]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ARM_THRUST ], - [ 7, Moves.FAKE_OUT ], - [ 14, Moves.WHIRLWIND ], - [ 21, Moves.THUNDER_PUNCH ], - [ 28, Moves.SLAM ], - [ 35, Moves.FORCE_PALM ], - [ 42, Moves.SEISMIC_TOSS ], - [ 49, Moves.CHARGE ], - [ 56, Moves.WILD_CHARGE ], - [ 63, Moves.CLOSE_COMBAT ], - [ 70, Moves.DETECT ], - [ 77, Moves.HEAVY_SLAM ], - [ 84, Moves.BELLY_DRUM ], - [ 91, Moves.FOCUS_PUNCH ], + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ARM_THRUST ], + [ 7, MoveId.FAKE_OUT ], + [ 14, MoveId.WHIRLWIND ], + [ 21, MoveId.THUNDER_PUNCH ], + [ 28, MoveId.SLAM ], + [ 35, MoveId.FORCE_PALM ], + [ 42, MoveId.SEISMIC_TOSS ], + [ 49, MoveId.CHARGE ], + [ 56, MoveId.WILD_CHARGE ], + [ 63, MoveId.CLOSE_COMBAT ], + [ 70, MoveId.DETECT ], + [ 77, MoveId.HEAVY_SLAM ], + [ 84, MoveId.BELLY_DRUM ], + [ 91, MoveId.FOCUS_PUNCH ], ], [Species.IRON_JUGULIS]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.AIR_CUTTER ], - [ 1, Moves.WORK_UP ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 7, Moves.ROAR ], - [ 14, Moves.ASSURANCE ], - [ 21, Moves.DRAGON_BREATH ], - [ 28, Moves.SNARL ], - [ 35, Moves.CRUNCH ], - [ 42, Moves.HYPER_VOICE ], - [ 56, Moves.AIR_SLASH ], - [ 63, Moves.KNOCK_OFF ], - [ 70, Moves.DARK_PULSE ], - [ 77, Moves.OUTRAGE ], - [ 84, Moves.DRAGON_PULSE ], - [ 91, Moves.HYPER_BEAM ], + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.AIR_CUTTER ], + [ 1, MoveId.WORK_UP ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 7, MoveId.ROAR ], + [ 14, MoveId.ASSURANCE ], + [ 21, MoveId.DRAGON_BREATH ], + [ 28, MoveId.SNARL ], + [ 35, MoveId.CRUNCH ], + [ 42, MoveId.HYPER_VOICE ], + [ 56, MoveId.AIR_SLASH ], + [ 63, MoveId.KNOCK_OFF ], + [ 70, MoveId.DARK_PULSE ], + [ 77, MoveId.OUTRAGE ], + [ 84, MoveId.DRAGON_PULSE ], + [ 91, MoveId.HYPER_BEAM ], ], [Species.IRON_MOTH]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.GUST ], - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.EMBER ], - [ 1, Moves.ACID_SPRAY ], - [ 7, Moves.STRUGGLE_BUG ], - [ 14, Moves.FIRE_SPIN ], - [ 21, Moves.TAKE_DOWN ], - [ 28, Moves.LUNGE ], - [ 35, Moves.SCREECH ], - [ 42, Moves.DISCHARGE ], - [ 49, Moves.SLUDGE_WAVE ], - [ 56, Moves.FIERY_DANCE ], - [ 63, Moves.METAL_SOUND ], - [ 70, Moves.MORNING_SUN ], - [ 77, Moves.HURRICANE ], - [ 84, Moves.BUG_BUZZ ], - [ 91, Moves.OVERHEAT ], + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.GUST ], + [ 1, MoveId.WHIRLWIND ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ACID_SPRAY ], + [ 7, MoveId.STRUGGLE_BUG ], + [ 14, MoveId.FIRE_SPIN ], + [ 21, MoveId.TAKE_DOWN ], + [ 28, MoveId.LUNGE ], + [ 35, MoveId.SCREECH ], + [ 42, MoveId.DISCHARGE ], + [ 49, MoveId.SLUDGE_WAVE ], + [ 56, MoveId.FIERY_DANCE ], + [ 63, MoveId.METAL_SOUND ], + [ 70, MoveId.MORNING_SUN ], + [ 77, MoveId.HURRICANE ], + [ 84, MoveId.BUG_BUZZ ], + [ 91, MoveId.OVERHEAT ], ], [Species.IRON_THORNS]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.THUNDER_FANG ], - [ 1, Moves.ICE_FANG ], - [ 1, Moves.FIRE_FANG ], - [ 7, Moves.SCREECH ], - [ 21, Moves.ROCK_TOMB ], - [ 28, Moves.BITE ], - [ 35, Moves.CHARGE ], - [ 42, Moves.ROCK_SLIDE ], - [ 49, Moves.SANDSTORM ], - [ 56, Moves.WILD_CHARGE ], - [ 63, Moves.PIN_MISSILE ], - [ 70, Moves.EARTHQUAKE ], - [ 77, Moves.STEALTH_ROCK ], - [ 84, Moves.STONE_EDGE ], - [ 91, Moves.GIGA_IMPACT ], + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.THUNDER_FANG ], + [ 1, MoveId.ICE_FANG ], + [ 1, MoveId.FIRE_FANG ], + [ 7, MoveId.SCREECH ], + [ 21, MoveId.ROCK_TOMB ], + [ 28, MoveId.BITE ], + [ 35, MoveId.CHARGE ], + [ 42, MoveId.ROCK_SLIDE ], + [ 49, MoveId.SANDSTORM ], + [ 56, MoveId.WILD_CHARGE ], + [ 63, MoveId.PIN_MISSILE ], + [ 70, MoveId.EARTHQUAKE ], + [ 77, MoveId.STEALTH_ROCK ], + [ 84, MoveId.STONE_EDGE ], + [ 91, MoveId.GIGA_IMPACT ], ], [Species.FRIGIBAX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.DRAGON_TAIL ], - [ 6, Moves.ICY_WIND ], - [ 12, Moves.DRAGON_BREATH ], - [ 18, Moves.FOCUS_ENERGY ], - [ 24, Moves.BITE ], - [ 29, Moves.ICE_FANG ], - [ 32, Moves.DRAGON_CLAW ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.ICE_BEAM ], - [ 44, Moves.CRUNCH ], - [ 48, Moves.ICICLE_CRASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.DRAGON_TAIL ], + [ 6, MoveId.ICY_WIND ], + [ 12, MoveId.DRAGON_BREATH ], + [ 18, MoveId.FOCUS_ENERGY ], + [ 24, MoveId.BITE ], + [ 29, MoveId.ICE_FANG ], + [ 32, MoveId.DRAGON_CLAW ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.ICE_BEAM ], + [ 44, MoveId.CRUNCH ], + [ 48, MoveId.ICICLE_CRASH ], ], [Species.ARCTIBAX]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.DRAGON_TAIL ], - [ 6, Moves.ICY_WIND ], - [ 12, Moves.DRAGON_BREATH ], - [ 18, Moves.FOCUS_ENERGY ], - [ 24, Moves.BITE ], - [ 29, Moves.ICE_FANG ], - [ 32, Moves.DRAGON_CLAW ], // Previous Stage Move, Frigibax Level - [ 40, Moves.TAKE_DOWN ], - [ 45, Moves.ICE_BEAM ], - [ 50, Moves.CRUNCH ], - [ 55, Moves.ICICLE_CRASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.DRAGON_TAIL ], + [ 6, MoveId.ICY_WIND ], + [ 12, MoveId.DRAGON_BREATH ], + [ 18, MoveId.FOCUS_ENERGY ], + [ 24, MoveId.BITE ], + [ 29, MoveId.ICE_FANG ], + [ 32, MoveId.DRAGON_CLAW ], // Previous Stage Move, Frigibax Level + [ 40, MoveId.TAKE_DOWN ], + [ 45, MoveId.ICE_BEAM ], + [ 50, MoveId.CRUNCH ], + [ 55, MoveId.ICICLE_CRASH ], ], [Species.BAXCALIBUR]: [ - [ EVOLVE_MOVE, Moves.GLAIVE_RUSH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.DRAGON_TAIL ], - [ 1, Moves.BREAKING_SWIPE ], - [ 1, Moves.SNOWSCAPE ], - [ 6, Moves.ICY_WIND ], - [ 12, Moves.DRAGON_BREATH ], - [ 18, Moves.FOCUS_ENERGY ], - [ 24, Moves.BITE ], - [ 29, Moves.ICE_FANG ], - [ 35, Moves.DRAGON_CLAW ], - [ 42, Moves.TAKE_DOWN ], - [ 48, Moves.ICE_BEAM ], - [ 55, Moves.CRUNCH ], - [ 62, Moves.ICICLE_CRASH ], + [ EVOLVE_MOVE, MoveId.GLAIVE_RUSH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ICE_SHARD ], + [ 1, MoveId.DRAGON_TAIL ], + [ 1, MoveId.BREAKING_SWIPE ], + [ 1, MoveId.SNOWSCAPE ], + [ 6, MoveId.ICY_WIND ], + [ 12, MoveId.DRAGON_BREATH ], + [ 18, MoveId.FOCUS_ENERGY ], + [ 24, MoveId.BITE ], + [ 29, MoveId.ICE_FANG ], + [ 35, MoveId.DRAGON_CLAW ], + [ 42, MoveId.TAKE_DOWN ], + [ 48, MoveId.ICE_BEAM ], + [ 55, MoveId.CRUNCH ], + [ 62, MoveId.ICICLE_CRASH ], ], [Species.GIMMIGHOUL]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ASTONISH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ASTONISH ], ], [Species.GHOLDENGO]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.ASTONISH ], - [ 7, Moves.NIGHT_SHADE ], - [ 14, Moves.CONFUSE_RAY ], - [ 21, Moves.SUBSTITUTE ], - [ 28, Moves.METAL_SOUND ], - [ 35, Moves.SHADOW_BALL ], - [ 42, Moves.RECOVER ], - [ 49, Moves.POWER_GEM ], - [ 56, Moves.MAKE_IT_RAIN ], - [ 63, Moves.NASTY_PLOT ], - [ 70, Moves.MEMENTO ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.ASTONISH ], + [ 7, MoveId.NIGHT_SHADE ], + [ 14, MoveId.CONFUSE_RAY ], + [ 21, MoveId.SUBSTITUTE ], + [ 28, MoveId.METAL_SOUND ], + [ 35, MoveId.SHADOW_BALL ], + [ 42, MoveId.RECOVER ], + [ 49, MoveId.POWER_GEM ], + [ 56, MoveId.MAKE_IT_RAIN ], + [ 63, MoveId.NASTY_PLOT ], + [ 70, MoveId.MEMENTO ], ], [Species.WO_CHIEN]: [ - [ 1, Moves.ABSORB ], - [ 1, Moves.SPITE ], - [ 1, Moves.MEAN_LOOK ], - [ 5, Moves.TICKLE ], - [ 10, Moves.PAYBACK ], - [ 15, Moves.POISON_POWDER ], - [ 15, Moves.STUN_SPORE ], - [ 20, Moves.MEGA_DRAIN ], - [ 25, Moves.LEECH_SEED ], - [ 30, Moves.GROWTH ], - [ 35, Moves.INGRAIN ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.GIGA_DRAIN ], - [ 50, Moves.RUINATION ], - [ 55, Moves.FOUL_PLAY ], - [ 60, Moves.POWER_WHIP ], - [ 65, Moves.GRASSY_TERRAIN ], - [ 70, Moves.KNOCK_OFF ], - [ 75, Moves.LEAF_STORM ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.MEAN_LOOK ], + [ 5, MoveId.TICKLE ], + [ 10, MoveId.PAYBACK ], + [ 15, MoveId.POISON_POWDER ], + [ 15, MoveId.STUN_SPORE ], + [ 20, MoveId.MEGA_DRAIN ], + [ 25, MoveId.LEECH_SEED ], + [ 30, MoveId.GROWTH ], + [ 35, MoveId.INGRAIN ], + [ 40, MoveId.DARK_PULSE ], + [ 45, MoveId.GIGA_DRAIN ], + [ 50, MoveId.RUINATION ], + [ 55, MoveId.FOUL_PLAY ], + [ 60, MoveId.POWER_WHIP ], + [ 65, MoveId.GRASSY_TERRAIN ], + [ 70, MoveId.KNOCK_OFF ], + [ 75, MoveId.LEAF_STORM ], ], [Species.CHIEN_PAO]: [ - [ 1, Moves.SPITE ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.MEAN_LOOK ], - [ 5, Moves.ICY_WIND ], - [ 10, Moves.PAYBACK ], - [ 15, Moves.MIST ], - [ 15, Moves.HAZE ], - [ 20, Moves.ICE_SHARD ], - [ 25, Moves.SWORDS_DANCE ], - [ 30, Moves.SNOWSCAPE ], - [ 35, Moves.NIGHT_SLASH ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.ICICLE_CRASH ], - [ 50, Moves.RUINATION ], - [ 55, Moves.SUCKER_PUNCH ], - [ 60, Moves.SACRED_SWORD ], - [ 65, Moves.RECOVER ], - [ 70, Moves.THROAT_CHOP ], - [ 75, Moves.SHEER_COLD ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.MEAN_LOOK ], + [ 5, MoveId.ICY_WIND ], + [ 10, MoveId.PAYBACK ], + [ 15, MoveId.MIST ], + [ 15, MoveId.HAZE ], + [ 20, MoveId.ICE_SHARD ], + [ 25, MoveId.SWORDS_DANCE ], + [ 30, MoveId.SNOWSCAPE ], + [ 35, MoveId.NIGHT_SLASH ], + [ 40, MoveId.DARK_PULSE ], + [ 45, MoveId.ICICLE_CRASH ], + [ 50, MoveId.RUINATION ], + [ 55, MoveId.SUCKER_PUNCH ], + [ 60, MoveId.SACRED_SWORD ], + [ 65, MoveId.RECOVER ], + [ 70, MoveId.THROAT_CHOP ], + [ 75, MoveId.SHEER_COLD ], ], [Species.TING_LU]: [ - [ 1, Moves.SPITE ], - [ 1, Moves.MEAN_LOOK ], - [ 1, Moves.SAND_TOMB ], - [ 5, Moves.SPIKES ], - [ 10, Moves.PAYBACK ], - [ 15, Moves.STOMP ], - [ 20, Moves.BULLDOZE ], - [ 25, Moves.WHIRLWIND ], - [ 30, Moves.TAUNT ], - [ 35, Moves.THRASH ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.STOMPING_TANTRUM ], - [ 50, Moves.RUINATION ], - [ 55, Moves.THROAT_CHOP ], - [ 60, Moves.ROCK_SLIDE ], - [ 65, Moves.MEMENTO ], - [ 70, Moves.EARTHQUAKE ], - [ 75, Moves.FISSURE ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.MEAN_LOOK ], + [ 1, MoveId.SAND_TOMB ], + [ 5, MoveId.SPIKES ], + [ 10, MoveId.PAYBACK ], + [ 15, MoveId.STOMP ], + [ 20, MoveId.BULLDOZE ], + [ 25, MoveId.WHIRLWIND ], + [ 30, MoveId.TAUNT ], + [ 35, MoveId.THRASH ], + [ 40, MoveId.DARK_PULSE ], + [ 45, MoveId.STOMPING_TANTRUM ], + [ 50, MoveId.RUINATION ], + [ 55, MoveId.THROAT_CHOP ], + [ 60, MoveId.ROCK_SLIDE ], + [ 65, MoveId.MEMENTO ], + [ 70, MoveId.EARTHQUAKE ], + [ 75, MoveId.FISSURE ], ], [Species.CHI_YU]: [ - [ 1, Moves.EMBER ], - [ 1, Moves.SPITE ], - [ 1, Moves.MEAN_LOOK ], - [ 5, Moves.FLAME_WHEEL ], - [ 10, Moves.PAYBACK ], - [ 15, Moves.WILL_O_WISP ], - [ 20, Moves.FLAME_CHARGE ], - [ 25, Moves.INCINERATE ], - [ 30, Moves.CONFUSE_RAY ], - [ 35, Moves.NASTY_PLOT ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.LAVA_PLUME ], - [ 50, Moves.RUINATION ], - [ 55, Moves.BOUNCE ], - [ 60, Moves.SWAGGER ], - [ 65, Moves.INFERNO ], - [ 70, Moves.MEMENTO ], - [ 75, Moves.OVERHEAT ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SPITE ], + [ 1, MoveId.MEAN_LOOK ], + [ 5, MoveId.FLAME_WHEEL ], + [ 10, MoveId.PAYBACK ], + [ 15, MoveId.WILL_O_WISP ], + [ 20, MoveId.FLAME_CHARGE ], + [ 25, MoveId.INCINERATE ], + [ 30, MoveId.CONFUSE_RAY ], + [ 35, MoveId.NASTY_PLOT ], + [ 40, MoveId.DARK_PULSE ], + [ 45, MoveId.LAVA_PLUME ], + [ 50, MoveId.RUINATION ], + [ 55, MoveId.BOUNCE ], + [ 60, MoveId.SWAGGER ], + [ 65, MoveId.INFERNO ], + [ 70, MoveId.MEMENTO ], + [ 75, MoveId.OVERHEAT ], ], [Species.ROARING_MOON]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ RELEARN_MOVE, Moves.JAW_LOCK ], - [ RELEARN_MOVE, Moves.BREAKING_SWIPE ], - [ RELEARN_MOVE, Moves.SCALE_SHOT ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.DRAGON_BREATH ], - [ 7, Moves.INCINERATE ], - [ 14, Moves.HEADBUTT ], - [ 21, Moves.SCARY_FACE ], - [ 28, Moves.DRAGON_CLAW ], - [ 35, Moves.ZEN_HEADBUTT ], - [ 42, Moves.FLAMETHROWER ], - [ 49, Moves.NIGHT_SLASH ], - [ 56, Moves.DRAGON_DANCE ], - [ 63, Moves.DRAGON_RUSH ], - [ 70, Moves.FLY ], - [ 77, Moves.THROAT_CHOP ], - [ 84, Moves.ROOST ], - [ 91, Moves.DOUBLE_EDGE ], + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ RELEARN_MOVE, MoveId.JAW_LOCK ], + [ RELEARN_MOVE, MoveId.BREAKING_SWIPE ], + [ RELEARN_MOVE, MoveId.SCALE_SHOT ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.DRAGON_BREATH ], + [ 7, MoveId.INCINERATE ], + [ 14, MoveId.HEADBUTT ], + [ 21, MoveId.SCARY_FACE ], + [ 28, MoveId.DRAGON_CLAW ], + [ 35, MoveId.ZEN_HEADBUTT ], + [ 42, MoveId.FLAMETHROWER ], + [ 49, MoveId.NIGHT_SLASH ], + [ 56, MoveId.DRAGON_DANCE ], + [ 63, MoveId.DRAGON_RUSH ], + [ 70, MoveId.FLY ], + [ 77, MoveId.THROAT_CHOP ], + [ 84, MoveId.ROOST ], + [ 91, MoveId.DOUBLE_EDGE ], ], [Species.IRON_VALIANT]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.DISABLE ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.SHADOW_SNEAK ], - [ 7, Moves.HYPNOSIS ], - [ 14, Moves.FEINT ], - [ 21, Moves.FUTURE_SIGHT ], - [ 28, Moves.DAZZLING_GLEAM ], - [ 35, Moves.PSYCHO_CUT ], - [ 42, Moves.NIGHT_SLASH ], - [ 49, Moves.LEAF_BLADE ], - [ 56, Moves.MOONBLAST ], - [ 63, Moves.CLOSE_COMBAT ], - [ 70, Moves.KNOCK_OFF ], - [ 77, Moves.DESTINY_BOND ], - [ 84, Moves.WIDE_GUARD ], - [ 84, Moves.QUICK_GUARD ], - [ 91, Moves.SPIRIT_BREAK ], + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.FURY_CUTTER ], + [ 1, MoveId.SHADOW_SNEAK ], + [ 7, MoveId.HYPNOSIS ], + [ 14, MoveId.FEINT ], + [ 21, MoveId.FUTURE_SIGHT ], + [ 28, MoveId.DAZZLING_GLEAM ], + [ 35, MoveId.PSYCHO_CUT ], + [ 42, MoveId.NIGHT_SLASH ], + [ 49, MoveId.LEAF_BLADE ], + [ 56, MoveId.MOONBLAST ], + [ 63, MoveId.CLOSE_COMBAT ], + [ 70, MoveId.KNOCK_OFF ], + [ 77, MoveId.DESTINY_BOND ], + [ 84, MoveId.WIDE_GUARD ], + [ 84, MoveId.QUICK_GUARD ], + [ 91, MoveId.SPIRIT_BREAK ], ], [Species.KORAIDON]: [ - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.BREAKING_SWIPE ], - [ 7, Moves.ROCK_SMASH ], - [ 14, Moves.ANCIENT_POWER ], - [ 21, Moves.DRAIN_PUNCH ], - [ 28, Moves.BRICK_BREAK ], - [ 35, Moves.AGILITY ], - [ 42, Moves.DRAGON_CLAW ], - [ 49, Moves.FLAMETHROWER ], - [ 56, Moves.COLLISION_COURSE ], - [ 63, Moves.SCREECH ], - [ 70, Moves.COUNTER ], - [ 77, Moves.OUTRAGE ], - [ 84, Moves.CLOSE_COMBAT ], - [ 91, Moves.FLARE_BLITZ ], - [ 98, Moves.GIGA_IMPACT ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.BREAKING_SWIPE ], + [ 7, MoveId.ROCK_SMASH ], + [ 14, MoveId.ANCIENT_POWER ], + [ 21, MoveId.DRAIN_PUNCH ], + [ 28, MoveId.BRICK_BREAK ], + [ 35, MoveId.AGILITY ], + [ 42, MoveId.DRAGON_CLAW ], + [ 49, MoveId.FLAMETHROWER ], + [ 56, MoveId.COLLISION_COURSE ], + [ 63, MoveId.SCREECH ], + [ 70, MoveId.COUNTER ], + [ 77, MoveId.OUTRAGE ], + [ 84, MoveId.CLOSE_COMBAT ], + [ 91, MoveId.FLARE_BLITZ ], + [ 98, MoveId.GIGA_IMPACT ], ], [Species.MIRAIDON]: [ - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 7, Moves.SHOCK_WAVE ], - [ 14, Moves.CHARGE ], - [ 21, Moves.PARABOLIC_CHARGE ], - [ 28, Moves.DISCHARGE ], - [ 35, Moves.AGILITY ], - [ 42, Moves.DRAGON_PULSE ], - [ 56, Moves.ELECTRO_DRIFT ], - [ 63, Moves.METAL_SOUND ], - [ 70, Moves.MIRROR_COAT ], - [ 77, Moves.OUTRAGE ], - [ 84, Moves.THUNDER ], - [ 91, Moves.OVERHEAT ], - [ 98, Moves.HYPER_BEAM ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 7, MoveId.SHOCK_WAVE ], + [ 14, MoveId.CHARGE ], + [ 21, MoveId.PARABOLIC_CHARGE ], + [ 28, MoveId.DISCHARGE ], + [ 35, MoveId.AGILITY ], + [ 42, MoveId.DRAGON_PULSE ], + [ 56, MoveId.ELECTRO_DRIFT ], + [ 63, MoveId.METAL_SOUND ], + [ 70, MoveId.MIRROR_COAT ], + [ 77, MoveId.OUTRAGE ], + [ 84, MoveId.THUNDER ], + [ 91, MoveId.OVERHEAT ], + [ 98, MoveId.HYPER_BEAM ], ], [Species.WALKING_WAKE]: [ - [ RELEARN_MOVE, Moves.SUNNY_DAY ], - [ RELEARN_MOVE, Moves.HONE_CLAWS ], - [ 1, Moves.LEER ], - [ 1, Moves.ROAR ], - [ 1, Moves.TWISTER ], - [ 1, Moves.AQUA_JET ], - [ 7, Moves.BITE ], - [ 14, Moves.WATER_PULSE ], - [ 21, Moves.NOBLE_ROAR ], - [ 28, Moves.DRAGON_BREATH ], - [ 35, Moves.BREAKING_SWIPE ], - [ 42, Moves.DRAGON_RUSH ], - [ 56, Moves.HYDRO_STEAM ], - [ 63, Moves.DRAGON_PULSE ], - [ 70, Moves.OUTRAGE ], - [ 77, Moves.FLAMETHROWER ], - [ 84, Moves.HYDRO_PUMP ], + [ RELEARN_MOVE, MoveId.SUNNY_DAY ], + [ RELEARN_MOVE, MoveId.HONE_CLAWS ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROAR ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.AQUA_JET ], + [ 7, MoveId.BITE ], + [ 14, MoveId.WATER_PULSE ], + [ 21, MoveId.NOBLE_ROAR ], + [ 28, MoveId.DRAGON_BREATH ], + [ 35, MoveId.BREAKING_SWIPE ], + [ 42, MoveId.DRAGON_RUSH ], + [ 56, MoveId.HYDRO_STEAM ], + [ 63, MoveId.DRAGON_PULSE ], + [ 70, MoveId.OUTRAGE ], + [ 77, MoveId.FLAMETHROWER ], + [ 84, MoveId.HYDRO_PUMP ], ], [Species.IRON_LEAVES]: [ - [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], - [ RELEARN_MOVE, Moves.QUASH ], - [ 1, Moves.LEER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.WORK_UP ], - [ 7, Moves.MAGICAL_LEAF ], - [ 14, Moves.RETALIATE ], - [ 21, Moves.QUICK_GUARD ], - [ 28, Moves.NIGHT_SLASH ], - [ 35, Moves.SWORDS_DANCE ], - [ 42, Moves.SACRED_SWORD ], - [ 49, Moves.LEAF_BLADE ], - [ 56, Moves.PSYBLADE ], - [ 63, Moves.CLOSE_COMBAT ], - [ 70, Moves.IMPRISON ], - [ 77, Moves.MEGAHORN ], - [ 84, Moves.ALLY_SWITCH ], - [ 91, Moves.SOLAR_BLADE ], + [ RELEARN_MOVE, MoveId.ELECTRIC_TERRAIN ], + [ RELEARN_MOVE, MoveId.QUASH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.WORK_UP ], + [ 7, MoveId.MAGICAL_LEAF ], + [ 14, MoveId.RETALIATE ], + [ 21, MoveId.QUICK_GUARD ], + [ 28, MoveId.NIGHT_SLASH ], + [ 35, MoveId.SWORDS_DANCE ], + [ 42, MoveId.SACRED_SWORD ], + [ 49, MoveId.LEAF_BLADE ], + [ 56, MoveId.PSYBLADE ], + [ 63, MoveId.CLOSE_COMBAT ], + [ 70, MoveId.IMPRISON ], + [ 77, MoveId.MEGAHORN ], + [ 84, MoveId.ALLY_SWITCH ], + [ 91, MoveId.SOLAR_BLADE ], ], [Species.DIPPLIN]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], - [ RELEARN_MOVE, Moves.DRAGON_CHEER ], // Custom - [ 1, Moves.LEAFAGE ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.DRAGON_TAIL ], - [ 8, Moves.GROWTH ], - [ 12, Moves.DRAGON_BREATH ], - [ 16, Moves.PROTECT ], - [ 20, Moves.BULLET_SEED ], - [ 28, Moves.SYRUP_BOMB ], - [ 32, Moves.DRAGON_PULSE ], - [ 36, Moves.RECOVER ], - [ 40, Moves.ENERGY_BALL ], - [ 44, Moves.SUBSTITUTE ], + [ EVOLVE_MOVE, MoveId.DOUBLE_HIT ], + [ RELEARN_MOVE, MoveId.DRAGON_CHEER ], // Custom + [ 1, MoveId.LEAFAGE ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.DRAGON_TAIL ], + [ 8, MoveId.GROWTH ], + [ 12, MoveId.DRAGON_BREATH ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.BULLET_SEED ], + [ 28, MoveId.SYRUP_BOMB ], + [ 32, MoveId.DRAGON_PULSE ], + [ 36, MoveId.RECOVER ], + [ 40, MoveId.ENERGY_BALL ], + [ 44, MoveId.SUBSTITUTE ], ], [Species.POLTCHAGEIST]: [ - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.ABSORB ], // Custom, Moved from Level 6 to 5 - [ 12, Moves.LIFE_DEW ], - [ 18, Moves.FOUL_PLAY ], - [ 24, Moves.MEGA_DRAIN ], - [ 30, Moves.HEX ], - [ 36, Moves.RAGE_POWDER ], - [ 42, Moves.GIGA_DRAIN ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.MEMENTO ], - [ 60, Moves.LEAF_STORM ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.ABSORB ], // Custom, Moved from Level 6 to 5 + [ 12, MoveId.LIFE_DEW ], + [ 18, MoveId.FOUL_PLAY ], + [ 24, MoveId.MEGA_DRAIN ], + [ 30, MoveId.HEX ], + [ 36, MoveId.RAGE_POWDER ], + [ 42, MoveId.GIGA_DRAIN ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.MEMENTO ], + [ 60, MoveId.LEAF_STORM ], ], [Species.SINISTCHA]: [ - [ EVOLVE_MOVE, Moves.MATCHA_GOTCHA ], - [ RELEARN_MOVE, Moves.GIGA_DRAIN ], // Previous Stage Move - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.ASTONISH ], - [ 6, Moves.ABSORB ], - [ 12, Moves.LIFE_DEW ], - [ 18, Moves.FOUL_PLAY ], - [ 24, Moves.MEGA_DRAIN ], - [ 30, Moves.HEX ], - [ 36, Moves.RAGE_POWDER ], - [ 42, Moves.STRENGTH_SAP ], - [ 48, Moves.SHADOW_BALL ], - [ 54, Moves.MEMENTO ], - [ 60, Moves.LEAF_STORM ], + [ EVOLVE_MOVE, MoveId.MATCHA_GOTCHA ], + [ RELEARN_MOVE, MoveId.GIGA_DRAIN ], // Previous Stage Move + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.ASTONISH ], + [ 6, MoveId.ABSORB ], + [ 12, MoveId.LIFE_DEW ], + [ 18, MoveId.FOUL_PLAY ], + [ 24, MoveId.MEGA_DRAIN ], + [ 30, MoveId.HEX ], + [ 36, MoveId.RAGE_POWDER ], + [ 42, MoveId.STRENGTH_SAP ], + [ 48, MoveId.SHADOW_BALL ], + [ 54, MoveId.MEMENTO ], + [ 60, MoveId.LEAF_STORM ], ], [Species.OKIDOGI]: [ - [ 1, Moves.BITE ], - [ 1, Moves.LOW_KICK ], - [ 1, Moves.BULK_UP ], - [ 8, Moves.HOWL ], - [ 16, Moves.POISON_FANG ], - [ 24, Moves.FORCE_PALM ], - [ 32, Moves.COUNTER ], - [ 40, Moves.POISON_JAB ], - [ 48, Moves.BRUTAL_SWING ], - [ 56, Moves.CRUNCH ], - [ 64, Moves.SUPERPOWER ], - [ 72, Moves.GIGA_IMPACT ], + [ 1, MoveId.BITE ], + [ 1, MoveId.LOW_KICK ], + [ 1, MoveId.BULK_UP ], + [ 8, MoveId.HOWL ], + [ 16, MoveId.POISON_FANG ], + [ 24, MoveId.FORCE_PALM ], + [ 32, MoveId.COUNTER ], + [ 40, MoveId.POISON_JAB ], + [ 48, MoveId.BRUTAL_SWING ], + [ 56, MoveId.CRUNCH ], + [ 64, MoveId.SUPERPOWER ], + [ 72, MoveId.GIGA_IMPACT ], ], [Species.MUNKIDORI]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.FLATTER ], - [ 8, Moves.HELPING_HAND ], - [ 16, Moves.PSYBEAM ], - [ 24, Moves.CLEAR_SMOG ], - [ 32, Moves.POISON_JAB ], - [ 40, Moves.PSYCHIC ], - [ 48, Moves.SLUDGE_WAVE ], - [ 56, Moves.NASTY_PLOT ], - [ 64, Moves.FUTURE_SIGHT ], - [ 72, Moves.PARTING_SHOT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.FLATTER ], + [ 8, MoveId.HELPING_HAND ], + [ 16, MoveId.PSYBEAM ], + [ 24, MoveId.CLEAR_SMOG ], + [ 32, MoveId.POISON_JAB ], + [ 40, MoveId.PSYCHIC ], + [ 48, MoveId.SLUDGE_WAVE ], + [ 56, MoveId.NASTY_PLOT ], + [ 64, MoveId.FUTURE_SIGHT ], + [ 72, MoveId.PARTING_SHOT ], ], [Species.FEZANDIPITI]: [ - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.PECK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.DISARMING_VOICE ], - [ 8, Moves.QUICK_ATTACK ], - [ 16, Moves.ATTRACT ], - [ 24, Moves.WING_ATTACK ], - [ 32, Moves.CROSS_POISON ], - [ 40, Moves.TAIL_SLAP ], - [ 48, Moves.BEAT_UP ], - [ 56, Moves.SWAGGER ], - [ 56, Moves.FLATTER ], - [ 64, Moves.ROOST ], - [ 72, Moves.MOONBLAST ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.PECK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.DISARMING_VOICE ], + [ 8, MoveId.QUICK_ATTACK ], + [ 16, MoveId.ATTRACT ], + [ 24, MoveId.WING_ATTACK ], + [ 32, MoveId.CROSS_POISON ], + [ 40, MoveId.TAIL_SLAP ], + [ 48, MoveId.BEAT_UP ], + [ 56, MoveId.SWAGGER ], + [ 56, MoveId.FLATTER ], + [ 64, MoveId.ROOST ], + [ 72, MoveId.MOONBLAST ], ], [Species.OGERPON]: [ - [ RELEARN_MOVE, Moves.DOUBLE_KICK ], - [ RELEARN_MOVE, Moves.COUNTER ], - [ RELEARN_MOVE, Moves.RETALIATE ], - [ RELEARN_MOVE, Moves.HORN_LEECH ], - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FOLLOW_ME ], - [ 6, Moves.FOCUS_ENERGY ], - [ 12, Moves.GROWTH ], - [ 18, Moves.SLAM ], - [ 24, Moves.LOW_SWEEP ], - [ 30, Moves.IVY_CUDGEL ], - [ 36, Moves.THROAT_CHOP ], - [ 42, Moves.SYNTHESIS ], - [ 48, Moves.SPIKY_SHIELD ], - [ 54, Moves.POWER_WHIP ], - [ 60, Moves.SUPERPOWER ], - [ 66, Moves.WOOD_HAMMER ], + [ RELEARN_MOVE, MoveId.DOUBLE_KICK ], + [ RELEARN_MOVE, MoveId.COUNTER ], + [ RELEARN_MOVE, MoveId.RETALIATE ], + [ RELEARN_MOVE, MoveId.HORN_LEECH ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FOLLOW_ME ], + [ 6, MoveId.FOCUS_ENERGY ], + [ 12, MoveId.GROWTH ], + [ 18, MoveId.SLAM ], + [ 24, MoveId.LOW_SWEEP ], + [ 30, MoveId.IVY_CUDGEL ], + [ 36, MoveId.THROAT_CHOP ], + [ 42, MoveId.SYNTHESIS ], + [ 48, MoveId.SPIKY_SHIELD ], + [ 54, MoveId.POWER_WHIP ], + [ 60, MoveId.SUPERPOWER ], + [ 66, MoveId.WOOD_HAMMER ], ], [Species.ARCHALUDON]: [ - [ EVOLVE_MOVE, Moves.ELECTRO_SHOT ], - [ RELEARN_MOVE, Moves.LASER_FOCUS ], // Previous Stage Move - [ 1, Moves.LEER ], - [ 1, Moves.METAL_CLAW ], - [ 6, Moves.ROCK_SMASH ], - [ 12, Moves.HONE_CLAWS ], - [ 18, Moves.METAL_SOUND ], - [ 24, Moves.BREAKING_SWIPE ], - [ 30, Moves.DRAGON_TAIL ], - [ 36, Moves.IRON_DEFENSE ], - [ 42, Moves.FOCUS_ENERGY ], - [ 48, Moves.DRAGON_CLAW ], - [ 54, Moves.FLASH_CANNON ], - [ 60, Moves.METAL_BURST ], - [ 66, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, MoveId.ELECTRO_SHOT ], + [ RELEARN_MOVE, MoveId.LASER_FOCUS ], // Previous Stage Move + [ 1, MoveId.LEER ], + [ 1, MoveId.METAL_CLAW ], + [ 6, MoveId.ROCK_SMASH ], + [ 12, MoveId.HONE_CLAWS ], + [ 18, MoveId.METAL_SOUND ], + [ 24, MoveId.BREAKING_SWIPE ], + [ 30, MoveId.DRAGON_TAIL ], + [ 36, MoveId.IRON_DEFENSE ], + [ 42, MoveId.FOCUS_ENERGY ], + [ 48, MoveId.DRAGON_CLAW ], + [ 54, MoveId.FLASH_CANNON ], + [ 60, MoveId.METAL_BURST ], + [ 66, MoveId.HYPER_BEAM ], ], [Species.HYDRAPPLE]: [ - [ EVOLVE_MOVE, Moves.FICKLE_BEAM ], - [ RELEARN_MOVE, Moves.YAWN ], - [ RELEARN_MOVE, Moves.DOUBLE_HIT ], - [ RELEARN_MOVE, Moves.INFESTATION ], - [ RELEARN_MOVE, Moves.DRAGON_CHEER ], // Previous Stage Move, Custom - [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom - [ 1, Moves.WITHDRAW ], - [ 1, Moves.SWEET_SCENT ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.DRAGON_TAIL ], - [ 8, Moves.GROWTH ], - [ 12, Moves.DRAGON_BREATH ], - [ 16, Moves.PROTECT ], - [ 20, Moves.BULLET_SEED ], - [ 28, Moves.SYRUP_BOMB ], - [ 32, Moves.DRAGON_PULSE ], - [ 36, Moves.RECOVER ], - [ 40, Moves.ENERGY_BALL ], - [ 44, Moves.SUBSTITUTE ], - [ 54, Moves.POWER_WHIP ], + [ EVOLVE_MOVE, MoveId.FICKLE_BEAM ], + [ RELEARN_MOVE, MoveId.YAWN ], + [ RELEARN_MOVE, MoveId.DOUBLE_HIT ], + [ RELEARN_MOVE, MoveId.INFESTATION ], + [ RELEARN_MOVE, MoveId.DRAGON_CHEER ], // Previous Stage Move, Custom + [ 1, MoveId.LEAFAGE ], // Previous Stage Move, Custom + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.SWEET_SCENT ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.DRAGON_TAIL ], + [ 8, MoveId.GROWTH ], + [ 12, MoveId.DRAGON_BREATH ], + [ 16, MoveId.PROTECT ], + [ 20, MoveId.BULLET_SEED ], + [ 28, MoveId.SYRUP_BOMB ], + [ 32, MoveId.DRAGON_PULSE ], + [ 36, MoveId.RECOVER ], + [ 40, MoveId.ENERGY_BALL ], + [ 44, MoveId.SUBSTITUTE ], + [ 54, MoveId.POWER_WHIP ], ], [Species.GOUGING_FIRE]: [ - [ RELEARN_MOVE, Moves.DOUBLE_KICK ], - [ RELEARN_MOVE, Moves.ANCIENT_POWER ], - [ RELEARN_MOVE, Moves.NOBLE_ROAR ], - [ 1, Moves.STOMP ], - [ 1, Moves.LEER ], - [ 1, Moves.INCINERATE ], - [ 1, Moves.SUNNY_DAY ], - [ 7, Moves.FIRE_FANG ], - [ 14, Moves.HOWL ], - [ 21, Moves.BITE ], - [ 28, Moves.DRAGON_CLAW ], - [ 35, Moves.CRUSH_CLAW ], - [ 42, Moves.MORNING_SUN ], - [ 49, Moves.BURNING_BULWARK ], - [ 56, Moves.DRAGON_RUSH ], - [ 63, Moves.FIRE_BLAST ], - [ 70, Moves.LAVA_PLUME ], - [ 77, Moves.OUTRAGE ], - [ 84, Moves.FLARE_BLITZ ], - [ 91, Moves.RAGING_FURY ], + [ RELEARN_MOVE, MoveId.DOUBLE_KICK ], + [ RELEARN_MOVE, MoveId.ANCIENT_POWER ], + [ RELEARN_MOVE, MoveId.NOBLE_ROAR ], + [ 1, MoveId.STOMP ], + [ 1, MoveId.LEER ], + [ 1, MoveId.INCINERATE ], + [ 1, MoveId.SUNNY_DAY ], + [ 7, MoveId.FIRE_FANG ], + [ 14, MoveId.HOWL ], + [ 21, MoveId.BITE ], + [ 28, MoveId.DRAGON_CLAW ], + [ 35, MoveId.CRUSH_CLAW ], + [ 42, MoveId.MORNING_SUN ], + [ 49, MoveId.BURNING_BULWARK ], + [ 56, MoveId.DRAGON_RUSH ], + [ 63, MoveId.FIRE_BLAST ], + [ 70, MoveId.LAVA_PLUME ], + [ 77, MoveId.OUTRAGE ], + [ 84, MoveId.FLARE_BLITZ ], + [ 91, MoveId.RAGING_FURY ], ], [Species.RAGING_BOLT]: [ - [ RELEARN_MOVE, Moves.ANCIENT_POWER ], - [ 1, Moves.TWISTER ], - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.SHOCK_WAVE ], - [ 1, Moves.STOMP ], - [ 7, Moves.CHARGE ], - [ 14, Moves.DRAGON_BREATH ], - [ 21, Moves.ELECTRIC_TERRAIN ], - [ 28, Moves.DISCHARGE ], - [ 35, Moves.DRAGON_TAIL ], - [ 42, Moves.CALM_MIND ], - [ 49, Moves.THUNDERCLAP ], - [ 56, Moves.DRAGON_HAMMER ], - [ 63, Moves.RISING_VOLTAGE ], - [ 70, Moves.DRAGON_PULSE ], - [ 77, Moves.ZAP_CANNON ], - [ 84, Moves.BODY_PRESS ], - [ 91, Moves.THUNDER ], + [ RELEARN_MOVE, MoveId.ANCIENT_POWER ], + [ 1, MoveId.TWISTER ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.SHOCK_WAVE ], + [ 1, MoveId.STOMP ], + [ 7, MoveId.CHARGE ], + [ 14, MoveId.DRAGON_BREATH ], + [ 21, MoveId.ELECTRIC_TERRAIN ], + [ 28, MoveId.DISCHARGE ], + [ 35, MoveId.DRAGON_TAIL ], + [ 42, MoveId.CALM_MIND ], + [ 49, MoveId.THUNDERCLAP ], + [ 56, MoveId.DRAGON_HAMMER ], + [ 63, MoveId.RISING_VOLTAGE ], + [ 70, MoveId.DRAGON_PULSE ], + [ 77, MoveId.ZAP_CANNON ], + [ 84, MoveId.BODY_PRESS ], + [ 91, MoveId.THUNDER ], ], [Species.IRON_BOULDER]: [ - [ 1, Moves.HORN_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 7, Moves.QUICK_ATTACK ], - [ 14, Moves.SLASH ], - [ 21, Moves.AGILITY ], - [ 28, Moves.PSYCHO_CUT ], - [ 35, Moves.COUNTER ], - [ 42, Moves.ROCK_TOMB ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.MIGHTY_CLEAVE ], - [ 63, Moves.SWORDS_DANCE ], - [ 70, Moves.MEGAHORN ], - [ 77, Moves.QUICK_GUARD ], - [ 84, Moves.STONE_EDGE ], - [ 91, Moves.GIGA_IMPACT ], + [ 1, MoveId.HORN_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 7, MoveId.QUICK_ATTACK ], + [ 14, MoveId.SLASH ], + [ 21, MoveId.AGILITY ], + [ 28, MoveId.PSYCHO_CUT ], + [ 35, MoveId.COUNTER ], + [ 42, MoveId.ROCK_TOMB ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.MIGHTY_CLEAVE ], + [ 63, MoveId.SWORDS_DANCE ], + [ 70, MoveId.MEGAHORN ], + [ 77, MoveId.QUICK_GUARD ], + [ 84, MoveId.STONE_EDGE ], + [ 91, MoveId.GIGA_IMPACT ], ], [Species.IRON_CROWN]: [ - [ 1, Moves.LEER ], - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 7, Moves.SMART_STRIKE ], - [ 14, Moves.SLASH ], - [ 21, Moves.IRON_DEFENSE ], - [ 28, Moves.PSYSHOCK ], - [ 35, Moves.PSYCHO_CUT ], - [ 42, Moves.FLASH_CANNON ], - [ 49, Moves.SACRED_SWORD ], - [ 56, Moves.TACHYON_CUTTER ], - [ 63, Moves.FUTURE_SIGHT ], - [ 70, Moves.VOLT_SWITCH ], - [ 77, Moves.QUICK_GUARD ], - [ 84, Moves.METAL_BURST ], - [ 91, Moves.HYPER_BEAM ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 7, MoveId.SMART_STRIKE ], + [ 14, MoveId.SLASH ], + [ 21, MoveId.IRON_DEFENSE ], + [ 28, MoveId.PSYSHOCK ], + [ 35, MoveId.PSYCHO_CUT ], + [ 42, MoveId.FLASH_CANNON ], + [ 49, MoveId.SACRED_SWORD ], + [ 56, MoveId.TACHYON_CUTTER ], + [ 63, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.VOLT_SWITCH ], + [ 77, MoveId.QUICK_GUARD ], + [ 84, MoveId.METAL_BURST ], + [ 91, MoveId.HYPER_BEAM ], ], [Species.TERAPAGOS]: [ - [ 1, Moves.WITHDRAW ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.RAPID_SPIN ], - [ 10, Moves.ANCIENT_POWER ], - [ 20, Moves.HEADBUTT ], - [ 30, Moves.PROTECT ], - [ 40, Moves.EARTH_POWER ], - [ 50, Moves.HEAVY_SLAM ], - [ 60, Moves.TERA_STARSTORM ], - [ 70, Moves.DOUBLE_EDGE ], - [ 80, Moves.ROCK_POLISH ], - [ 90, Moves.GYRO_BALL ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.RAPID_SPIN ], + [ 10, MoveId.ANCIENT_POWER ], + [ 20, MoveId.HEADBUTT ], + [ 30, MoveId.PROTECT ], + [ 40, MoveId.EARTH_POWER ], + [ 50, MoveId.HEAVY_SLAM ], + [ 60, MoveId.TERA_STARSTORM ], + [ 70, MoveId.DOUBLE_EDGE ], + [ 80, MoveId.ROCK_POLISH ], + [ 90, MoveId.GYRO_BALL ], ], [Species.PECHARUNT]: [ - [ RELEARN_MOVE, Moves.DEFENSE_CURL ], - [ RELEARN_MOVE, Moves.ROLLOUT ], - [ RELEARN_MOVE, Moves.MEAN_LOOK ], - [ 1, Moves.SMOG ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MEMENTO ], - [ 1, Moves.ASTONISH ], - [ 8, Moves.WITHDRAW ], - [ 16, Moves.DESTINY_BOND ], - [ 24, Moves.FAKE_TEARS ], - [ 32, Moves.PARTING_SHOT ], - [ 40, Moves.SHADOW_BALL ], - [ 48, Moves.MALIGNANT_CHAIN ], - [ 56, Moves.TOXIC ], - [ 64, Moves.NASTY_PLOT ], - [ 72, Moves.RECOVER ], + [ RELEARN_MOVE, MoveId.DEFENSE_CURL ], + [ RELEARN_MOVE, MoveId.ROLLOUT ], + [ RELEARN_MOVE, MoveId.MEAN_LOOK ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MEMENTO ], + [ 1, MoveId.ASTONISH ], + [ 8, MoveId.WITHDRAW ], + [ 16, MoveId.DESTINY_BOND ], + [ 24, MoveId.FAKE_TEARS ], + [ 32, MoveId.PARTING_SHOT ], + [ 40, MoveId.SHADOW_BALL ], + [ 48, MoveId.MALIGNANT_CHAIN ], + [ 56, MoveId.TOXIC ], + [ 64, MoveId.NASTY_PLOT ], + [ 72, MoveId.RECOVER ], ], [Species.ALOLA_RATTATA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 4, Moves.QUICK_ATTACK ], - [ 7, Moves.FOCUS_ENERGY ], - [ 10, Moves.BITE ], - [ 13, Moves.PURSUIT ], - [ 16, Moves.HYPER_FANG ], - [ 19, Moves.ASSURANCE ], - [ 22, Moves.CRUNCH ], - [ 25, Moves.SUCKER_PUNCH ], - [ 28, Moves.SUPER_FANG ], - [ 31, Moves.DOUBLE_EDGE ], - [ 34, Moves.ENDEAVOR ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 4, MoveId.QUICK_ATTACK ], + [ 7, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.BITE ], + [ 13, MoveId.PURSUIT ], + [ 16, MoveId.HYPER_FANG ], + [ 19, MoveId.ASSURANCE ], + [ 22, MoveId.CRUNCH ], + [ 25, MoveId.SUCKER_PUNCH ], + [ 28, MoveId.SUPER_FANG ], + [ 31, MoveId.DOUBLE_EDGE ], + [ 34, MoveId.ENDEAVOR ], ], [Species.ALOLA_RATICATE]: [ - [ EVOLVE_MOVE, Moves.SCARY_FACE ], - [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 10, Moves.BITE ], - [ 13, Moves.PURSUIT ], - [ 16, Moves.HYPER_FANG ], - [ 19, Moves.ASSURANCE ], - [ 24, Moves.CRUNCH ], - [ 29, Moves.SUCKER_PUNCH ], - [ 34, Moves.SUPER_FANG ], - [ 39, Moves.DOUBLE_EDGE ], - [ 44, Moves.ENDEAVOR ], + [ EVOLVE_MOVE, MoveId.SCARY_FACE ], + [ 1, MoveId.SWORDS_DANCE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 10, MoveId.BITE ], + [ 13, MoveId.PURSUIT ], + [ 16, MoveId.HYPER_FANG ], + [ 19, MoveId.ASSURANCE ], + [ 24, MoveId.CRUNCH ], + [ 29, MoveId.SUCKER_PUNCH ], + [ 34, MoveId.SUPER_FANG ], + [ 39, MoveId.DOUBLE_EDGE ], + [ 44, MoveId.ENDEAVOR ], ], [Species.ALOLA_RAICHU]: [ - [ EVOLVE_MOVE, Moves.PSYCHIC ], - [ EVOLVE_MOVE, Moves.ZIPPY_ZAP ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.THUNDER_WAVE ], - [ 1, Moves.THUNDER ], - [ 1, Moves.AGILITY ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.SPARK ], - [ 1, Moves.IRON_TAIL ], - [ 1, Moves.FEINT ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.DISCHARGE ], - [ 1, Moves.ELECTRO_BALL ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 5, Moves.THUNDERBOLT ], - [ 50, Moves.PIKA_PAPOW ], + [ EVOLVE_MOVE, MoveId.PSYCHIC ], + [ EVOLVE_MOVE, MoveId.ZIPPY_ZAP ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.THUNDER_WAVE ], + [ 1, MoveId.THUNDER ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.SPARK ], + [ 1, MoveId.IRON_TAIL ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.DISCHARGE ], + [ 1, MoveId.ELECTRO_BALL ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 5, MoveId.THUNDERBOLT ], + [ 50, MoveId.PIKA_PAPOW ], ], [Species.ALOLA_SANDSHREW]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.DEFENSE_CURL ], - [ 3, Moves.MIST ], - [ 6, Moves.POWDER_SNOW ], - [ 9, Moves.ROLLOUT ], - [ 12, Moves.FURY_CUTTER ], - [ 15, Moves.RAPID_SPIN ], - [ 18, Moves.METAL_CLAW ], - [ 21, Moves.SWIFT ], - [ 24, Moves.FURY_SWIPES ], - [ 27, Moves.IRON_DEFENSE ], - [ 30, Moves.SLASH ], - [ 33, Moves.IRON_HEAD ], - [ 36, Moves.GYRO_BALL ], - [ 39, Moves.SWORDS_DANCE ], - [ 42, Moves.SNOWSCAPE ], - [ 45, Moves.BLIZZARD ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.DEFENSE_CURL ], + [ 3, MoveId.MIST ], + [ 6, MoveId.POWDER_SNOW ], + [ 9, MoveId.ROLLOUT ], + [ 12, MoveId.FURY_CUTTER ], + [ 15, MoveId.RAPID_SPIN ], + [ 18, MoveId.METAL_CLAW ], + [ 21, MoveId.SWIFT ], + [ 24, MoveId.FURY_SWIPES ], + [ 27, MoveId.IRON_DEFENSE ], + [ 30, MoveId.SLASH ], + [ 33, MoveId.IRON_HEAD ], + [ 36, MoveId.GYRO_BALL ], + [ 39, MoveId.SWORDS_DANCE ], + [ 42, MoveId.SNOWSCAPE ], + [ 45, MoveId.BLIZZARD ], ], [Species.ALOLA_SANDSLASH]: [ - [ EVOLVE_MOVE, Moves.ICICLE_SPEAR ], - [ RELEARN_MOVE, Moves.SCRATCH ], - [ RELEARN_MOVE, Moves.MIST ], - [ RELEARN_MOVE, Moves.BLIZZARD ], - [ RELEARN_MOVE, Moves.DEFENSE_CURL ], - [ RELEARN_MOVE, Moves.SWIFT ], - [ RELEARN_MOVE, Moves.FURY_SWIPES ], - [ RELEARN_MOVE, Moves.POWDER_SNOW ], - [ RELEARN_MOVE, Moves.ROLLOUT ], - [ RELEARN_MOVE, Moves.FURY_CUTTER ], - [ RELEARN_MOVE, Moves.RAPID_SPIN ], - [ RELEARN_MOVE, Moves.IRON_DEFENSE ], - [ RELEARN_MOVE, Moves.GYRO_BALL ], - [ RELEARN_MOVE, Moves.METAL_BURST ], - [ RELEARN_MOVE, Moves.IRON_HEAD ], - [ RELEARN_MOVE, Moves.SNOWSCAPE ], - [ 1, Moves.ICICLE_CRASH ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.SLASH ], - [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.ICE_BALL ], + [ EVOLVE_MOVE, MoveId.ICICLE_SPEAR ], + [ RELEARN_MOVE, MoveId.SCRATCH ], + [ RELEARN_MOVE, MoveId.MIST ], + [ RELEARN_MOVE, MoveId.BLIZZARD ], + [ RELEARN_MOVE, MoveId.DEFENSE_CURL ], + [ RELEARN_MOVE, MoveId.SWIFT ], + [ RELEARN_MOVE, MoveId.FURY_SWIPES ], + [ RELEARN_MOVE, MoveId.POWDER_SNOW ], + [ RELEARN_MOVE, MoveId.ROLLOUT ], + [ RELEARN_MOVE, MoveId.FURY_CUTTER ], + [ RELEARN_MOVE, MoveId.RAPID_SPIN ], + [ RELEARN_MOVE, MoveId.IRON_DEFENSE ], + [ RELEARN_MOVE, MoveId.GYRO_BALL ], + [ RELEARN_MOVE, MoveId.METAL_BURST ], + [ RELEARN_MOVE, MoveId.IRON_HEAD ], + [ RELEARN_MOVE, MoveId.SNOWSCAPE ], + [ 1, MoveId.ICICLE_CRASH ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.SLASH ], + [ 1, MoveId.SWORDS_DANCE ], + [ 1, MoveId.ICE_BALL ], ], [Species.ALOLA_VULPIX]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.POWDER_SNOW ], - [ 4, Moves.DISABLE ], - [ 8, Moves.ICE_SHARD ], - [ 12, Moves.SPITE ], - [ 16, Moves.ICY_WIND ], - [ 20, Moves.CONFUSE_RAY ], - [ 24, Moves.AURORA_BEAM ], - [ 28, Moves.EXTRASENSORY ], - [ 32, Moves.ICE_BEAM ], - [ 36, Moves.IMPRISON ], - [ 40, Moves.MIST ], - [ 44, Moves.AURORA_VEIL ], - [ 48, Moves.FREEZE_DRY ], - [ 52, Moves.BLIZZARD ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.POWDER_SNOW ], + [ 4, MoveId.DISABLE ], + [ 8, MoveId.ICE_SHARD ], + [ 12, MoveId.SPITE ], + [ 16, MoveId.ICY_WIND ], + [ 20, MoveId.CONFUSE_RAY ], + [ 24, MoveId.AURORA_BEAM ], + [ 28, MoveId.EXTRASENSORY ], + [ 32, MoveId.ICE_BEAM ], + [ 36, MoveId.IMPRISON ], + [ 40, MoveId.MIST ], + [ 44, MoveId.AURORA_VEIL ], + [ 48, MoveId.FREEZE_DRY ], + [ 52, MoveId.BLIZZARD ], ], [Species.ALOLA_NINETALES]: [ - [ EVOLVE_MOVE, Moves.DAZZLING_GLEAM ], - [ RELEARN_MOVE, Moves.DISABLE ], - [ RELEARN_MOVE, Moves.MIST ], - [ RELEARN_MOVE, Moves.ICE_BEAM ], - [ RELEARN_MOVE, Moves.AURORA_BEAM ], - [ RELEARN_MOVE, Moves.CONFUSE_RAY ], - [ RELEARN_MOVE, Moves.SPITE ], - [ RELEARN_MOVE, Moves.POWDER_SNOW ], - [ RELEARN_MOVE, Moves.EXTRASENSORY ], - [ RELEARN_MOVE, Moves.NASTY_PLOT ], - [ RELEARN_MOVE, Moves.ICE_SHARD ], - [ RELEARN_MOVE, Moves.FREEZE_DRY ], - [ RELEARN_MOVE, Moves.AURORA_VEIL ], - [ 1, Moves.ICY_WIND ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.BLIZZARD ], - [ 1, Moves.TAIL_WHIP ], + [ EVOLVE_MOVE, MoveId.DAZZLING_GLEAM ], + [ RELEARN_MOVE, MoveId.DISABLE ], + [ RELEARN_MOVE, MoveId.MIST ], + [ RELEARN_MOVE, MoveId.ICE_BEAM ], + [ RELEARN_MOVE, MoveId.AURORA_BEAM ], + [ RELEARN_MOVE, MoveId.CONFUSE_RAY ], + [ RELEARN_MOVE, MoveId.SPITE ], + [ RELEARN_MOVE, MoveId.POWDER_SNOW ], + [ RELEARN_MOVE, MoveId.EXTRASENSORY ], + [ RELEARN_MOVE, MoveId.NASTY_PLOT ], + [ RELEARN_MOVE, MoveId.ICE_SHARD ], + [ RELEARN_MOVE, MoveId.FREEZE_DRY ], + [ RELEARN_MOVE, MoveId.AURORA_VEIL ], + [ 1, MoveId.ICY_WIND ], + [ 1, MoveId.IMPRISON ], + [ 1, MoveId.BLIZZARD ], + [ 1, MoveId.TAIL_WHIP ], ], [Species.ALOLA_DIGLETT]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 4, Moves.GROWL ], - [ 8, Moves.ASTONISH ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.BULLDOZE ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.IRON_HEAD ], - [ 28, Moves.SANDSTORM ], - [ 32, Moves.DIG ], - [ 36, Moves.EARTH_POWER ], - [ 40, Moves.EARTHQUAKE ], - [ 44, Moves.FISSURE ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 4, MoveId.GROWL ], + [ 8, MoveId.ASTONISH ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.BULLDOZE ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.IRON_HEAD ], + [ 28, MoveId.SANDSTORM ], + [ 32, MoveId.DIG ], + [ 36, MoveId.EARTH_POWER ], + [ 40, MoveId.EARTHQUAKE ], + [ 44, MoveId.FISSURE ], ], [Species.ALOLA_DUGTRIO]: [ - [ EVOLVE_MOVE, Moves.SAND_TOMB ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.GROWL ], - [ 1, Moves.TRI_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.ROTOTILLER ], - [ 12, Moves.MUD_SLAP ], - [ 16, Moves.BULLDOZE ], - [ 20, Moves.SUCKER_PUNCH ], - [ 24, Moves.IRON_HEAD ], - [ 30, Moves.SANDSTORM ], - [ 36, Moves.DIG ], - [ 42, Moves.EARTH_POWER ], - [ 48, Moves.EARTHQUAKE ], - [ 54, Moves.FISSURE ], + [ EVOLVE_MOVE, MoveId.SAND_TOMB ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.TRI_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.ASTONISH ], + [ 1, MoveId.NIGHT_SLASH ], + [ 1, MoveId.ROTOTILLER ], + [ 12, MoveId.MUD_SLAP ], + [ 16, MoveId.BULLDOZE ], + [ 20, MoveId.SUCKER_PUNCH ], + [ 24, MoveId.IRON_HEAD ], + [ 30, MoveId.SANDSTORM ], + [ 36, MoveId.DIG ], + [ 42, MoveId.EARTH_POWER ], + [ 48, MoveId.EARTHQUAKE ], + [ 54, MoveId.FISSURE ], ], [Species.ALOLA_MEOWTH]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 4, Moves.FEINT ], - [ 8, Moves.SCRATCH ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.BITE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.ASSURANCE ], - [ 29, Moves.FURY_SWIPES ], - [ 32, Moves.SCREECH ], - [ 36, Moves.NIGHT_SLASH ], - [ 40, Moves.NASTY_PLOT ], - [ 44, Moves.PLAY_ROUGH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 4, MoveId.FEINT ], + [ 8, MoveId.SCRATCH ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.BITE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.ASSURANCE ], + [ 29, MoveId.FURY_SWIPES ], + [ 32, MoveId.SCREECH ], + [ 36, MoveId.NIGHT_SLASH ], + [ 40, MoveId.NASTY_PLOT ], + [ 44, MoveId.PLAY_ROUGH ], ], [Species.ALOLA_PERSIAN]: [ - [ EVOLVE_MOVE, Moves.POWER_GEM ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.FEINT ], - [ 1, Moves.SWITCHEROO ], - [ 1, Moves.QUASH ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.BITE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.ASSURANCE ], - [ 31, Moves.FURY_SWIPES ], - [ 36, Moves.SCREECH ], - [ 42, Moves.NIGHT_SLASH ], - [ 48, Moves.NASTY_PLOT ], - [ 54, Moves.PLAY_ROUGH ], + [ EVOLVE_MOVE, MoveId.POWER_GEM ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.SWITCHEROO ], + [ 1, MoveId.QUASH ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.BITE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.ASSURANCE ], + [ 31, MoveId.FURY_SWIPES ], + [ 36, MoveId.SCREECH ], + [ 42, MoveId.NIGHT_SLASH ], + [ 48, MoveId.NASTY_PLOT ], + [ 54, MoveId.PLAY_ROUGH ], ], [Species.ALOLA_GEODUDE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 4, Moves.CHARGE ], - [ 6, Moves.ROCK_POLISH ], - [ 10, Moves.ROLLOUT ], - [ 12, Moves.SPARK ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 22, Moves.THUNDER_PUNCH ], - [ 24, Moves.SELF_DESTRUCT ], - [ 28, Moves.STEALTH_ROCK ], - [ 30, Moves.ROCK_BLAST ], - [ 34, Moves.DISCHARGE ], - [ 36, Moves.EXPLOSION ], - [ 40, Moves.DOUBLE_EDGE ], - [ 42, Moves.STONE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 4, MoveId.CHARGE ], + [ 6, MoveId.ROCK_POLISH ], + [ 10, MoveId.ROLLOUT ], + [ 12, MoveId.SPARK ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 22, MoveId.THUNDER_PUNCH ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 28, MoveId.STEALTH_ROCK ], + [ 30, MoveId.ROCK_BLAST ], + [ 34, MoveId.DISCHARGE ], + [ 36, MoveId.EXPLOSION ], + [ 40, MoveId.DOUBLE_EDGE ], + [ 42, MoveId.STONE_EDGE ], ], [Species.ALOLA_GRAVELER]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.CHARGE ], - [ 1, Moves.ROCK_POLISH ], - [ 10, Moves.ROLLOUT ], - [ 12, Moves.SPARK ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 22, Moves.THUNDER_PUNCH ], - [ 24, Moves.SELF_DESTRUCT ], - [ 30, Moves.STEALTH_ROCK ], - [ 34, Moves.ROCK_BLAST ], - [ 40, Moves.DISCHARGE ], - [ 44, Moves.EXPLOSION ], - [ 50, Moves.DOUBLE_EDGE ], - [ 54, Moves.STONE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.ROCK_POLISH ], + [ 10, MoveId.ROLLOUT ], + [ 12, MoveId.SPARK ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 22, MoveId.THUNDER_PUNCH ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 30, MoveId.STEALTH_ROCK ], + [ 34, MoveId.ROCK_BLAST ], + [ 40, MoveId.DISCHARGE ], + [ 44, MoveId.EXPLOSION ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 54, MoveId.STONE_EDGE ], ], [Species.ALOLA_GOLEM]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.CHARGE ], - [ 1, Moves.ROCK_POLISH ], - [ 1, Moves.ROLLOUT ], // Previous Stage Move - [ 1, Moves.HEAVY_SLAM ], - [ 12, Moves.SPARK ], - [ 16, Moves.ROCK_THROW ], - [ 18, Moves.SMACK_DOWN ], - [ 22, Moves.THUNDER_PUNCH ], - [ 24, Moves.SELF_DESTRUCT ], - [ 30, Moves.STEALTH_ROCK ], - [ 34, Moves.ROCK_BLAST ], - [ 40, Moves.DISCHARGE ], - [ 44, Moves.EXPLOSION ], - [ 50, Moves.DOUBLE_EDGE ], - [ 54, Moves.STONE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DEFENSE_CURL ], + [ 1, MoveId.CHARGE ], + [ 1, MoveId.ROCK_POLISH ], + [ 1, MoveId.ROLLOUT ], // Previous Stage Move + [ 1, MoveId.HEAVY_SLAM ], + [ 12, MoveId.SPARK ], + [ 16, MoveId.ROCK_THROW ], + [ 18, MoveId.SMACK_DOWN ], + [ 22, MoveId.THUNDER_PUNCH ], + [ 24, MoveId.SELF_DESTRUCT ], + [ 30, MoveId.STEALTH_ROCK ], + [ 34, MoveId.ROCK_BLAST ], + [ 40, MoveId.DISCHARGE ], + [ 44, MoveId.EXPLOSION ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 54, MoveId.STONE_EDGE ], ], [Species.ALOLA_GRIMER]: [ - [ 1, Moves.POUND ], - [ 1, Moves.POISON_GAS ], - [ 4, Moves.HARDEN ], - [ 7, Moves.BITE ], - [ 12, Moves.DISABLE ], - [ 15, Moves.ACID_SPRAY ], - [ 18, Moves.POISON_FANG ], - [ 21, Moves.MINIMIZE ], - [ 26, Moves.TOXIC ], - [ 29, Moves.KNOCK_OFF ], - [ 32, Moves.CRUNCH ], - [ 37, Moves.SCREECH ], - [ 40, Moves.GUNK_SHOT ], - [ 43, Moves.ACID_ARMOR ], - [ 46, Moves.BELCH ], - [ 48, Moves.MEMENTO ], + [ 1, MoveId.POUND ], + [ 1, MoveId.POISON_GAS ], + [ 4, MoveId.HARDEN ], + [ 7, MoveId.BITE ], + [ 12, MoveId.DISABLE ], + [ 15, MoveId.ACID_SPRAY ], + [ 18, MoveId.POISON_FANG ], + [ 21, MoveId.MINIMIZE ], + [ 26, MoveId.TOXIC ], + [ 29, MoveId.KNOCK_OFF ], + [ 32, MoveId.CRUNCH ], + [ 37, MoveId.SCREECH ], + [ 40, MoveId.GUNK_SHOT ], + [ 43, MoveId.ACID_ARMOR ], + [ 46, MoveId.BELCH ], + [ 48, MoveId.MEMENTO ], ], [Species.ALOLA_MUK]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BITE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POISON_GAS ], - [ 12, Moves.DISABLE ], - [ 15, Moves.ACID_SPRAY ], - [ 18, Moves.POISON_FANG ], - [ 21, Moves.MINIMIZE ], - [ 26, Moves.TOXIC ], - [ 29, Moves.KNOCK_OFF ], - [ 32, Moves.CRUNCH ], - [ 37, Moves.SCREECH ], - [ 40, Moves.GUNK_SHOT ], - [ 46, Moves.ACID_ARMOR ], - [ 52, Moves.BELCH ], - [ 57, Moves.MEMENTO ], + [ 1, MoveId.POUND ], + [ 1, MoveId.BITE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POISON_GAS ], + [ 12, MoveId.DISABLE ], + [ 15, MoveId.ACID_SPRAY ], + [ 18, MoveId.POISON_FANG ], + [ 21, MoveId.MINIMIZE ], + [ 26, MoveId.TOXIC ], + [ 29, MoveId.KNOCK_OFF ], + [ 32, MoveId.CRUNCH ], + [ 37, MoveId.SCREECH ], + [ 40, MoveId.GUNK_SHOT ], + [ 46, MoveId.ACID_ARMOR ], + [ 52, MoveId.BELCH ], + [ 57, MoveId.MEMENTO ], ], [Species.ALOLA_EXEGGUTOR]: [ - [ EVOLVE_MOVE, Moves.DRAGON_HAMMER ], - [ RELEARN_MOVE, Moves.GROWTH ], - [ 1, Moves.BARRAGE ], - [ 1, Moves.SEED_BOMB ], - [ 1, Moves.PSYSHOCK ], - [ 1, Moves.WOOD_HAMMER ], - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.BULLET_SEED ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.EXTRASENSORY ], - [ 1, Moves.UPROAR ], - [ 1, Moves.WORRY_SEED ], - [ 1, Moves.SOLAR_BEAM ], - [ 1, Moves.ABSORB ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.REFLECT ], - [ 1, Moves.LEECH_SEED ], + [ EVOLVE_MOVE, MoveId.DRAGON_HAMMER ], + [ RELEARN_MOVE, MoveId.GROWTH ], + [ 1, MoveId.BARRAGE ], + [ 1, MoveId.SEED_BOMB ], + [ 1, MoveId.PSYSHOCK ], + [ 1, MoveId.WOOD_HAMMER ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.BULLET_SEED ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.EXTRASENSORY ], + [ 1, MoveId.UPROAR ], + [ 1, MoveId.WORRY_SEED ], + [ 1, MoveId.SOLAR_BEAM ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.HYPNOSIS ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.LEECH_SEED ], ], [Species.ALOLA_MAROWAK]: [ - [ EVOLVE_MOVE, Moves.SHADOW_BONE ], - [ 1, Moves.BONE_CLUB ], - [ 1, Moves.HEADBUTT ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.RETALIATE ], - [ 12, Moves.FLAME_WHEEL ], - [ 16, Moves.HEX ], - [ 20, Moves.FLING ], - [ 24, Moves.STOMPING_TANTRUM ], - [ 31, Moves.BONE_RUSH ], - [ 36, Moves.WILL_O_WISP ], - [ 42, Moves.ENDEAVOR ], - [ 48, Moves.BONEMERANG ], - [ 54, Moves.THRASH ], - [ 60, Moves.FLARE_BLITZ ], + [ EVOLVE_MOVE, MoveId.SHADOW_BONE ], + [ 1, MoveId.BONE_CLUB ], + [ 1, MoveId.HEADBUTT ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FIRE_SPIN ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.FALSE_SWIPE ], + [ 1, MoveId.RETALIATE ], + [ 12, MoveId.FLAME_WHEEL ], + [ 16, MoveId.HEX ], + [ 20, MoveId.FLING ], + [ 24, MoveId.STOMPING_TANTRUM ], + [ 31, MoveId.BONE_RUSH ], + [ 36, MoveId.WILL_O_WISP ], + [ 42, MoveId.ENDEAVOR ], + [ 48, MoveId.BONEMERANG ], + [ 54, MoveId.THRASH ], + [ 60, MoveId.FLARE_BLITZ ], ], [Species.ETERNAL_FLOETTE]: [ - [ 1, Moves.VINE_WHIP ], - [ 1, Moves.TACKLE ], - [ 1, Moves.FAIRY_WIND ], - [ 10, Moves.LUCKY_CHANT ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.WISH ], - [ 25, Moves.MAGICAL_LEAF ], - [ 27, Moves.GRASSY_TERRAIN ], - [ 33, Moves.PETAL_BLIZZARD ], - [ 38, Moves.AROMATHERAPY ], - [ 43, Moves.MISTY_TERRAIN ], - [ 46, Moves.MOONBLAST ], - [ 50, Moves.LIGHT_OF_RUIN ], - [ 51, Moves.PETAL_DANCE ], - [ 58, Moves.SOLAR_BEAM ], + [ 1, MoveId.VINE_WHIP ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.FAIRY_WIND ], + [ 10, MoveId.LUCKY_CHANT ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.WISH ], + [ 25, MoveId.MAGICAL_LEAF ], + [ 27, MoveId.GRASSY_TERRAIN ], + [ 33, MoveId.PETAL_BLIZZARD ], + [ 38, MoveId.AROMATHERAPY ], + [ 43, MoveId.MISTY_TERRAIN ], + [ 46, MoveId.MOONBLAST ], + [ 50, MoveId.LIGHT_OF_RUIN ], + [ 51, MoveId.PETAL_DANCE ], + [ 58, MoveId.SOLAR_BEAM ], ], [Species.GALAR_MEOWTH]: [ - [ 1, Moves.GROWL ], - [ 1, Moves.FAKE_OUT ], - [ 4, Moves.HONE_CLAWS ], - [ 8, Moves.SCRATCH ], - [ 12, Moves.PAY_DAY ], - [ 16, Moves.METAL_CLAW ], - [ 20, Moves.TAUNT ], - [ 24, Moves.SWAGGER ], - [ 29, Moves.FURY_SWIPES ], - [ 32, Moves.SCREECH ], - [ 36, Moves.SLASH ], - [ 40, Moves.METAL_SOUND ], - [ 44, Moves.THRASH ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.FAKE_OUT ], + [ 4, MoveId.HONE_CLAWS ], + [ 8, MoveId.SCRATCH ], + [ 12, MoveId.PAY_DAY ], + [ 16, MoveId.METAL_CLAW ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.SWAGGER ], + [ 29, MoveId.FURY_SWIPES ], + [ 32, MoveId.SCREECH ], + [ 36, MoveId.SLASH ], + [ 40, MoveId.METAL_SOUND ], + [ 44, MoveId.THRASH ], ], [Species.GALAR_PONYTA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 5, Moves.TAIL_WHIP ], - [ 10, Moves.CONFUSION ], - [ 15, Moves.FAIRY_WIND ], - [ 20, Moves.AGILITY ], - [ 25, Moves.PSYBEAM ], - [ 30, Moves.STOMP ], - [ 35, Moves.HEAL_PULSE ], - [ 41, Moves.TAKE_DOWN ], - [ 45, Moves.DAZZLING_GLEAM ], - [ 50, Moves.PSYCHIC ], - [ 55, Moves.HEALING_WISH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 5, MoveId.TAIL_WHIP ], + [ 10, MoveId.CONFUSION ], + [ 15, MoveId.FAIRY_WIND ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.PSYBEAM ], + [ 30, MoveId.STOMP ], + [ 35, MoveId.HEAL_PULSE ], + [ 41, MoveId.TAKE_DOWN ], + [ 45, MoveId.DAZZLING_GLEAM ], + [ 50, MoveId.PSYCHIC ], + [ 55, MoveId.HEALING_WISH ], ], [Species.GALAR_RAPIDASH]: [ - [ EVOLVE_MOVE, Moves.PSYCHO_CUT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.MEGAHORN ], - [ 15, Moves.FAIRY_WIND ], - [ 20, Moves.AGILITY ], - [ 25, Moves.PSYBEAM ], - [ 30, Moves.STOMP ], - [ 35, Moves.HEAL_PULSE ], - [ 43, Moves.TAKE_DOWN ], - [ 49, Moves.DAZZLING_GLEAM ], - [ 56, Moves.PSYCHIC ], - [ 63, Moves.HEALING_WISH ], + [ EVOLVE_MOVE, MoveId.PSYCHO_CUT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.MEGAHORN ], + [ 15, MoveId.FAIRY_WIND ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.PSYBEAM ], + [ 30, MoveId.STOMP ], + [ 35, MoveId.HEAL_PULSE ], + [ 43, MoveId.TAKE_DOWN ], + [ 49, MoveId.DAZZLING_GLEAM ], + [ 56, MoveId.PSYCHIC ], + [ 63, MoveId.HEALING_WISH ], ], [Species.GALAR_SLOWPOKE]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CURSE ], - [ 3, Moves.GROWL ], - [ 6, Moves.ACID ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 39, Moves.PSYCH_UP ], - [ 42, Moves.RAIN_DANCE ], - [ 45, Moves.HEAL_PULSE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CURSE ], + [ 3, MoveId.GROWL ], + [ 6, MoveId.ACID ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 39, MoveId.PSYCH_UP ], + [ 42, MoveId.RAIN_DANCE ], + [ 45, MoveId.HEAL_PULSE ], ], [Species.GALAR_SLOWBRO]: [ - [ EVOLVE_MOVE, Moves.SHELL_SIDE_ARM ], - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.WITHDRAW ], - [ 1, Moves.CURSE ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 39, Moves.PSYCH_UP ], - [ 42, Moves.RAIN_DANCE ], - [ 45, Moves.HEAL_PULSE ], + [ EVOLVE_MOVE, MoveId.SHELL_SIDE_ARM ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.WITHDRAW ], + [ 1, MoveId.CURSE ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 39, MoveId.PSYCH_UP ], + [ 42, MoveId.RAIN_DANCE ], + [ 45, MoveId.HEAL_PULSE ], ], [Species.GALAR_FARFETCHD]: [ - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.PECK ], - [ 5, Moves.LEER ], - [ 10, Moves.FURY_CUTTER ], - [ 15, Moves.ROCK_SMASH ], - [ 20, Moves.BRUTAL_SWING ], - [ 25, Moves.DETECT ], - [ 30, Moves.KNOCK_OFF ], - [ 35, Moves.DEFOG ], - [ 40, Moves.BRICK_BREAK ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.SLAM ], - [ 55, Moves.LEAF_BLADE ], - [ 60, Moves.FINAL_GAMBIT ], - [ 65, Moves.BRAVE_BIRD ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.PECK ], + [ 5, MoveId.LEER ], + [ 10, MoveId.FURY_CUTTER ], + [ 15, MoveId.ROCK_SMASH ], + [ 20, MoveId.BRUTAL_SWING ], + [ 25, MoveId.DETECT ], + [ 30, MoveId.KNOCK_OFF ], + [ 35, MoveId.DEFOG ], + [ 40, MoveId.BRICK_BREAK ], + [ 45, MoveId.SWORDS_DANCE ], + [ 50, MoveId.SLAM ], + [ 55, MoveId.LEAF_BLADE ], + [ 60, MoveId.FINAL_GAMBIT ], + [ 65, MoveId.BRAVE_BIRD ], ], [Species.GALAR_WEEZING]: [ - [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], - [ 1, Moves.TACKLE ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.HAZE ], - [ 1, Moves.SMOG ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.HEAT_WAVE ], - [ 1, Moves.DEFOG ], - [ 1, Moves.AROMATIC_MIST ], - [ 1, Moves.STRANGE_STEAM ], - [ 12, Moves.CLEAR_SMOG ], - [ 16, Moves.ASSURANCE ], - [ 20, Moves.SLUDGE ], - [ 24, Moves.FAIRY_WIND ], - [ 28, Moves.SELF_DESTRUCT ], - [ 32, Moves.SLUDGE_BOMB ], - [ 38, Moves.TOXIC ], - [ 44, Moves.BELCH ], - [ 50, Moves.EXPLOSION ], - [ 56, Moves.MEMENTO ], - [ 62, Moves.DESTINY_BOND ], - [ 68, Moves.MISTY_TERRAIN ], + [ EVOLVE_MOVE, MoveId.DOUBLE_HIT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.HAZE ], + [ 1, MoveId.SMOG ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.HEAT_WAVE ], + [ 1, MoveId.DEFOG ], + [ 1, MoveId.AROMATIC_MIST ], + [ 1, MoveId.STRANGE_STEAM ], + [ 12, MoveId.CLEAR_SMOG ], + [ 16, MoveId.ASSURANCE ], + [ 20, MoveId.SLUDGE ], + [ 24, MoveId.FAIRY_WIND ], + [ 28, MoveId.SELF_DESTRUCT ], + [ 32, MoveId.SLUDGE_BOMB ], + [ 38, MoveId.TOXIC ], + [ 44, MoveId.BELCH ], + [ 50, MoveId.EXPLOSION ], + [ 56, MoveId.MEMENTO ], + [ 62, MoveId.DESTINY_BOND ], + [ 68, MoveId.MISTY_TERRAIN ], ], [Species.GALAR_MR_MIME]: [ - [ 1, Moves.POUND ], - [ 1, Moves.BARRIER ], // Previous Stage Move - [ 1, Moves.TICKLE ], // Previous Stage Move - [ 1, Moves.MIMIC ], - [ 1, Moves.LIGHT_SCREEN ], - [ 1, Moves.REFLECT ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.BATON_PASS ], - [ 1, Moves.ENCORE ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.ROLE_PLAY ], - [ 1, Moves.RECYCLE ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.MISTY_TERRAIN ], - [ 1, Moves.DAZZLING_GLEAM ], - [ 12, Moves.CONFUSION ], - [ 16, Moves.ALLY_SWITCH ], - [ 20, Moves.ICY_WIND ], - [ 24, Moves.DOUBLE_KICK ], - [ 28, Moves.PSYBEAM ], - [ 32, Moves.HYPNOSIS ], - [ 36, Moves.MIRROR_COAT ], - [ 40, Moves.SUCKER_PUNCH ], - [ 44, Moves.FREEZE_DRY ], - [ 48, Moves.PSYCHIC ], - [ 52, Moves.TEETER_DANCE ], + [ 1, MoveId.POUND ], + [ 1, MoveId.BARRIER ], // Previous Stage Move + [ 1, MoveId.TICKLE ], // Previous Stage Move + [ 1, MoveId.MIMIC ], + [ 1, MoveId.LIGHT_SCREEN ], + [ 1, MoveId.REFLECT ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SAFEGUARD ], + [ 1, MoveId.BATON_PASS ], + [ 1, MoveId.ENCORE ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.ROLE_PLAY ], + [ 1, MoveId.RECYCLE ], + [ 1, MoveId.COPYCAT ], + [ 1, MoveId.ICE_SHARD ], + [ 1, MoveId.MISTY_TERRAIN ], + [ 1, MoveId.DAZZLING_GLEAM ], + [ 12, MoveId.CONFUSION ], + [ 16, MoveId.ALLY_SWITCH ], + [ 20, MoveId.ICY_WIND ], + [ 24, MoveId.DOUBLE_KICK ], + [ 28, MoveId.PSYBEAM ], + [ 32, MoveId.HYPNOSIS ], + [ 36, MoveId.MIRROR_COAT ], + [ 40, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.FREEZE_DRY ], + [ 48, MoveId.PSYCHIC ], + [ 52, MoveId.TEETER_DANCE ], ], [Species.GALAR_ARTICUNO]: [ - [ 1, Moves.GUST ], - [ 5, Moves.CONFUSION ], - [ 10, Moves.REFLECT ], - [ 15, Moves.HYPNOSIS ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.TAILWIND ], - [ 35, Moves.PSYCHO_CUT ], - [ 40, Moves.RECOVER ], - [ 45, Moves.FREEZING_GLARE ], - [ 50, Moves.DREAM_EATER ], - [ 55, Moves.HURRICANE ], - [ 60, Moves.DOUBLE_TEAM ], - [ 65, Moves.FUTURE_SIGHT ], - [ 70, Moves.TRICK_ROOM ], + [ 1, MoveId.GUST ], + [ 5, MoveId.CONFUSION ], + [ 10, MoveId.REFLECT ], + [ 15, MoveId.HYPNOSIS ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.TAILWIND ], + [ 35, MoveId.PSYCHO_CUT ], + [ 40, MoveId.RECOVER ], + [ 45, MoveId.FREEZING_GLARE ], + [ 50, MoveId.DREAM_EATER ], + [ 55, MoveId.HURRICANE ], + [ 60, MoveId.DOUBLE_TEAM ], + [ 65, MoveId.FUTURE_SIGHT ], + [ 70, MoveId.TRICK_ROOM ], ], [Species.GALAR_ZAPDOS]: [ - [ 1, Moves.PECK ], - [ 1, Moves.FOCUS_ENERGY ], - [ 5, Moves.ROCK_SMASH ], - [ 10, Moves.LIGHT_SCREEN ], - [ 15, Moves.PLUCK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.BRICK_BREAK ], - [ 35, Moves.DRILL_PECK ], - [ 40, Moves.QUICK_GUARD ], - [ 45, Moves.THUNDEROUS_KICK ], - [ 50, Moves.BULK_UP ], - [ 55, Moves.COUNTER ], - [ 60, Moves.DETECT ], - [ 65, Moves.CLOSE_COMBAT ], - [ 70, Moves.REVERSAL ], + [ 1, MoveId.PECK ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 5, MoveId.ROCK_SMASH ], + [ 10, MoveId.LIGHT_SCREEN ], + [ 15, MoveId.PLUCK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.BRICK_BREAK ], + [ 35, MoveId.DRILL_PECK ], + [ 40, MoveId.QUICK_GUARD ], + [ 45, MoveId.THUNDEROUS_KICK ], + [ 50, MoveId.BULK_UP ], + [ 55, MoveId.COUNTER ], + [ 60, MoveId.DETECT ], + [ 65, MoveId.CLOSE_COMBAT ], + [ 70, MoveId.REVERSAL ], ], [Species.GALAR_MOLTRES]: [ - [ 1, Moves.GUST ], - [ 1, Moves.LEER ], - [ 5, Moves.PAYBACK ], - [ 10, Moves.SAFEGUARD ], - [ 15, Moves.WING_ATTACK ], - [ 20, Moves.AGILITY ], - [ 25, Moves.ANCIENT_POWER ], - [ 30, Moves.SUCKER_PUNCH ], - [ 35, Moves.AIR_SLASH ], - [ 40, Moves.AFTER_YOU ], - [ 45, Moves.FIERY_WRATH ], - [ 50, Moves.NASTY_PLOT ], - [ 55, Moves.HURRICANE ], - [ 60, Moves.ENDURE ], - [ 65, Moves.MEMENTO ], - [ 70, Moves.SKY_ATTACK ], + [ 1, MoveId.GUST ], + [ 1, MoveId.LEER ], + [ 5, MoveId.PAYBACK ], + [ 10, MoveId.SAFEGUARD ], + [ 15, MoveId.WING_ATTACK ], + [ 20, MoveId.AGILITY ], + [ 25, MoveId.ANCIENT_POWER ], + [ 30, MoveId.SUCKER_PUNCH ], + [ 35, MoveId.AIR_SLASH ], + [ 40, MoveId.AFTER_YOU ], + [ 45, MoveId.FIERY_WRATH ], + [ 50, MoveId.NASTY_PLOT ], + [ 55, MoveId.HURRICANE ], + [ 60, MoveId.ENDURE ], + [ 65, MoveId.MEMENTO ], + [ 70, MoveId.SKY_ATTACK ], ], [Species.GALAR_SLOWKING]: [ - [ EVOLVE_MOVE, Moves.EERIE_SPELL ], - [ RELEARN_MOVE, Moves.FUTURE_SIGHT ], - [ RELEARN_MOVE, Moves.CHILLY_RECEPTION ], - [ RELEARN_MOVE, Moves.TOXIC ], - [ 1, Moves.POWER_GEM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CURSE ], - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 9, Moves.YAWN ], - [ 12, Moves.CONFUSION ], - [ 15, Moves.DISABLE ], - [ 18, Moves.WATER_PULSE ], - [ 21, Moves.HEADBUTT ], - [ 24, Moves.ZEN_HEADBUTT ], - [ 27, Moves.AMNESIA ], - [ 30, Moves.SURF ], - [ 33, Moves.SLACK_OFF ], - [ 36, Moves.PSYCHIC ], - [ 39, Moves.PSYCH_UP ], - [ 42, Moves.RAIN_DANCE ], - [ 45, Moves.HEAL_PULSE ], + [ EVOLVE_MOVE, MoveId.EERIE_SPELL ], + [ RELEARN_MOVE, MoveId.FUTURE_SIGHT ], + [ RELEARN_MOVE, MoveId.CHILLY_RECEPTION ], + [ RELEARN_MOVE, MoveId.TOXIC ], + [ 1, MoveId.POWER_GEM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.SWAGGER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CURSE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 9, MoveId.YAWN ], + [ 12, MoveId.CONFUSION ], + [ 15, MoveId.DISABLE ], + [ 18, MoveId.WATER_PULSE ], + [ 21, MoveId.HEADBUTT ], + [ 24, MoveId.ZEN_HEADBUTT ], + [ 27, MoveId.AMNESIA ], + [ 30, MoveId.SURF ], + [ 33, MoveId.SLACK_OFF ], + [ 36, MoveId.PSYCHIC ], + [ 39, MoveId.PSYCH_UP ], + [ 42, MoveId.RAIN_DANCE ], + [ 45, MoveId.HEAL_PULSE ], ], [Species.GALAR_CORSOLA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 5, Moves.ASTONISH ], - [ 10, Moves.DISABLE ], - [ 15, Moves.SPITE ], - [ 20, Moves.ANCIENT_POWER ], - [ 25, Moves.HEX ], - [ 30, Moves.CURSE ], - [ 35, Moves.STRENGTH_SAP ], - [ 40, Moves.POWER_GEM ], - [ 45, Moves.NIGHT_SHADE ], - [ 50, Moves.GRUDGE ], - [ 55, Moves.MIRROR_COAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 5, MoveId.ASTONISH ], + [ 10, MoveId.DISABLE ], + [ 15, MoveId.SPITE ], + [ 20, MoveId.ANCIENT_POWER ], + [ 25, MoveId.HEX ], + [ 30, MoveId.CURSE ], + [ 35, MoveId.STRENGTH_SAP ], + [ 40, MoveId.POWER_GEM ], + [ 45, MoveId.NIGHT_SHADE ], + [ 50, MoveId.GRUDGE ], + [ 55, MoveId.MIRROR_COAT ], ], [Species.GALAR_ZIGZAGOON]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 3, Moves.SAND_ATTACK ], - [ 6, Moves.LICK ], - [ 9, Moves.SNARL ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.PIN_MISSILE ], - [ 21, Moves.REST ], - [ 24, Moves.TAKE_DOWN ], - [ 27, Moves.SCARY_FACE ], - [ 30, Moves.COUNTER ], - [ 33, Moves.TAUNT ], - [ 36, Moves.DOUBLE_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 3, MoveId.SAND_ATTACK ], + [ 6, MoveId.LICK ], + [ 9, MoveId.SNARL ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.PIN_MISSILE ], + [ 21, MoveId.REST ], + [ 24, MoveId.TAKE_DOWN ], + [ 27, MoveId.SCARY_FACE ], + [ 30, MoveId.COUNTER ], + [ 33, MoveId.TAUNT ], + [ 36, MoveId.DOUBLE_EDGE ], ], [Species.GALAR_LINOONE]: [ - [ EVOLVE_MOVE, Moves.NIGHT_SLASH ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.PIN_MISSILE ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 1, Moves.SWITCHEROO ], - [ 1, Moves.BABY_DOLL_EYES ], - [ 9, Moves.SNARL ], - [ 12, Moves.HEADBUTT ], - [ 15, Moves.HONE_CLAWS ], - [ 18, Moves.FURY_SWIPES ], - [ 23, Moves.REST ], - [ 28, Moves.TAKE_DOWN ], - [ 33, Moves.SCARY_FACE ], - [ 38, Moves.COUNTER ], - [ 43, Moves.TAUNT ], - [ 48, Moves.DOUBLE_EDGE ], + [ EVOLVE_MOVE, MoveId.NIGHT_SLASH ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PIN_MISSILE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 1, MoveId.SWITCHEROO ], + [ 1, MoveId.BABY_DOLL_EYES ], + [ 9, MoveId.SNARL ], + [ 12, MoveId.HEADBUTT ], + [ 15, MoveId.HONE_CLAWS ], + [ 18, MoveId.FURY_SWIPES ], + [ 23, MoveId.REST ], + [ 28, MoveId.TAKE_DOWN ], + [ 33, MoveId.SCARY_FACE ], + [ 38, MoveId.COUNTER ], + [ 43, MoveId.TAUNT ], + [ 48, MoveId.DOUBLE_EDGE ], ], [Species.GALAR_DARUMAKA]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POWDER_SNOW ], - [ 4, Moves.TAUNT ], - [ 8, Moves.BITE ], - [ 12, Moves.AVALANCHE ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.ICE_FANG ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.ICE_PUNCH ], - [ 32, Moves.UPROAR ], - [ 36, Moves.BELLY_DRUM ], - [ 40, Moves.BLIZZARD ], - [ 44, Moves.THRASH ], - [ 48, Moves.SUPERPOWER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POWDER_SNOW ], + [ 4, MoveId.TAUNT ], + [ 8, MoveId.BITE ], + [ 12, MoveId.AVALANCHE ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.ICE_FANG ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.ICE_PUNCH ], + [ 32, MoveId.UPROAR ], + [ 36, MoveId.BELLY_DRUM ], + [ 40, MoveId.BLIZZARD ], + [ 44, MoveId.THRASH ], + [ 48, MoveId.SUPERPOWER ], ], [Species.GALAR_DARMANITAN]: [ - [ EVOLVE_MOVE, Moves.ICICLE_CRASH ], - [ 1, Moves.TACKLE ], - [ 1, Moves.BITE ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.TAUNT ], - [ 12, Moves.AVALANCHE ], - [ 16, Moves.WORK_UP ], - [ 20, Moves.ICE_FANG ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.ICE_PUNCH ], - [ 32, Moves.UPROAR ], - [ 38, Moves.BELLY_DRUM ], - [ 44, Moves.BLIZZARD ], - [ 50, Moves.THRASH ], - [ 56, Moves.SUPERPOWER ], + [ EVOLVE_MOVE, MoveId.ICICLE_CRASH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.TAUNT ], + [ 12, MoveId.AVALANCHE ], + [ 16, MoveId.WORK_UP ], + [ 20, MoveId.ICE_FANG ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.ICE_PUNCH ], + [ 32, MoveId.UPROAR ], + [ 38, MoveId.BELLY_DRUM ], + [ 44, MoveId.BLIZZARD ], + [ 50, MoveId.THRASH ], + [ 56, MoveId.SUPERPOWER ], ], [Species.GALAR_YAMASK]: [ - [ 1, Moves.PROTECT ], - [ 1, Moves.ASTONISH ], - [ 4, Moves.HAZE ], - [ 8, Moves.NIGHT_SHADE ], - [ 12, Moves.DISABLE ], - [ 16, Moves.BRUTAL_SWING ], - [ 20, Moves.CRAFTY_SHIELD ], - [ 24, Moves.HEX ], - [ 28, Moves.MEAN_LOOK ], - [ 32, Moves.SLAM ], - [ 36, Moves.CURSE ], - [ 40, Moves.SHADOW_BALL ], - [ 44, Moves.EARTHQUAKE ], - [ 48, Moves.GUARD_SPLIT ], - [ 48, Moves.POWER_SPLIT ], - [ 52, Moves.DESTINY_BOND ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.ASTONISH ], + [ 4, MoveId.HAZE ], + [ 8, MoveId.NIGHT_SHADE ], + [ 12, MoveId.DISABLE ], + [ 16, MoveId.BRUTAL_SWING ], + [ 20, MoveId.CRAFTY_SHIELD ], + [ 24, MoveId.HEX ], + [ 28, MoveId.MEAN_LOOK ], + [ 32, MoveId.SLAM ], + [ 36, MoveId.CURSE ], + [ 40, MoveId.SHADOW_BALL ], + [ 44, MoveId.EARTHQUAKE ], + [ 48, MoveId.GUARD_SPLIT ], + [ 48, MoveId.POWER_SPLIT ], + [ 52, MoveId.DESTINY_BOND ], ], [Species.GALAR_STUNFISK]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.METAL_CLAW ], - [ 5, Moves.ENDURE ], - [ 10, Moves.MUD_SHOT ], - [ 15, Moves.REVENGE ], - [ 20, Moves.METAL_SOUND ], - [ 25, Moves.SUCKER_PUNCH ], - [ 30, Moves.IRON_DEFENSE ], - [ 35, Moves.BOUNCE ], - [ 40, Moves.MUDDY_WATER ], - [ 45, Moves.SNAP_TRAP ], - [ 50, Moves.FLAIL ], - [ 55, Moves.FISSURE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.MUD_SLAP ], + [ 1, MoveId.METAL_CLAW ], + [ 5, MoveId.ENDURE ], + [ 10, MoveId.MUD_SHOT ], + [ 15, MoveId.REVENGE ], + [ 20, MoveId.METAL_SOUND ], + [ 25, MoveId.SUCKER_PUNCH ], + [ 30, MoveId.IRON_DEFENSE ], + [ 35, MoveId.BOUNCE ], + [ 40, MoveId.MUDDY_WATER ], + [ 45, MoveId.SNAP_TRAP ], + [ 50, MoveId.FLAIL ], + [ 55, MoveId.FISSURE ], ], [Species.HISUI_GROWLITHE]: [ - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 4, Moves.HOWL ], - [ 8, Moves.BITE ], - [ 12, Moves.FLAME_WHEEL ], - [ 16, Moves.HELPING_HAND ], - [ 24, Moves.FIRE_FANG ], - [ 28, Moves.RETALIATE ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.FLAMETHROWER ], - [ 44, Moves.ROAR ], - [ 48, Moves.ROCK_SLIDE ], - [ 52, Moves.REVERSAL ], - [ 56, Moves.FLARE_BLITZ ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 4, MoveId.HOWL ], + [ 8, MoveId.BITE ], + [ 12, MoveId.FLAME_WHEEL ], + [ 16, MoveId.HELPING_HAND ], + [ 24, MoveId.FIRE_FANG ], + [ 28, MoveId.RETALIATE ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.FLAMETHROWER ], + [ 44, MoveId.ROAR ], + [ 48, MoveId.ROCK_SLIDE ], + [ 52, MoveId.REVERSAL ], + [ 56, MoveId.FLARE_BLITZ ], ], [Species.HISUI_ARCANINE]: [ - [ EVOLVE_MOVE, Moves.EXTREME_SPEED ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.LEER ], - [ 1, Moves.BITE ], - [ 1, Moves.ROAR ], - [ 1, Moves.EMBER ], - [ 1, Moves.ROCK_THROW ], - [ 1, Moves.AGILITY ], - [ 1, Moves.ROCK_SLIDE ], - [ 1, Moves.FLAME_WHEEL ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.HOWL ], - [ 1, Moves.FLARE_BLITZ ], - [ 1, Moves.FIRE_FANG ], - [ 1, Moves.RETALIATE ], - [ 5, Moves.FLAMETHROWER ], - [ 64, Moves.RAGING_FURY ], + [ EVOLVE_MOVE, MoveId.EXTREME_SPEED ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.LEER ], + [ 1, MoveId.BITE ], + [ 1, MoveId.ROAR ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.ROCK_THROW ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.ROCK_SLIDE ], + [ 1, MoveId.FLAME_WHEEL ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.CRUNCH ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.FLARE_BLITZ ], + [ 1, MoveId.FIRE_FANG ], + [ 1, MoveId.RETALIATE ], + [ 5, MoveId.FLAMETHROWER ], + [ 64, MoveId.RAGING_FURY ], ], [Species.HISUI_VOLTORB]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.CHARGE ], - [ 4, Moves.THUNDER_SHOCK ], - [ 6, Moves.STUN_SPORE ], - [ 9, Moves.BULLET_SEED ], - [ 11, Moves.ROLLOUT ], - [ 13, Moves.SCREECH ], - [ 16, Moves.CHARGE_BEAM ], - [ 20, Moves.SWIFT ], - [ 22, Moves.ELECTRO_BALL ], - [ 26, Moves.SELF_DESTRUCT ], - [ 29, Moves.ENERGY_BALL ], - [ 34, Moves.SEED_BOMB ], - [ 34, Moves.DISCHARGE ], - [ 41, Moves.EXPLOSION ], - [ 46, Moves.GYRO_BALL ], - [ 50, Moves.GRASSY_TERRAIN ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CHARGE ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.STUN_SPORE ], + [ 9, MoveId.BULLET_SEED ], + [ 11, MoveId.ROLLOUT ], + [ 13, MoveId.SCREECH ], + [ 16, MoveId.CHARGE_BEAM ], + [ 20, MoveId.SWIFT ], + [ 22, MoveId.ELECTRO_BALL ], + [ 26, MoveId.SELF_DESTRUCT ], + [ 29, MoveId.ENERGY_BALL ], + [ 34, MoveId.SEED_BOMB ], + [ 34, MoveId.DISCHARGE ], + [ 41, MoveId.EXPLOSION ], + [ 46, MoveId.GYRO_BALL ], + [ 50, MoveId.GRASSY_TERRAIN ], ], [Species.HISUI_ELECTRODE]: [ - [ EVOLVE_MOVE, Moves.CHLOROBLAST ], - [ 1, Moves.TACKLE ], - [ 1, Moves.CHARGE ], - [ 4, Moves.THUNDER_SHOCK ], - [ 6, Moves.STUN_SPORE ], - [ 9, Moves.BULLET_SEED ], - [ 11, Moves.ROLLOUT ], - [ 13, Moves.SCREECH ], - [ 16, Moves.CHARGE_BEAM ], - [ 20, Moves.SWIFT ], - [ 22, Moves.ELECTRO_BALL ], - [ 26, Moves.SELF_DESTRUCT ], - [ 29, Moves.ENERGY_BALL ], - [ 34, Moves.SEED_BOMB ], - [ 34, Moves.DISCHARGE ], - [ 41, Moves.EXPLOSION ], - [ 46, Moves.GYRO_BALL ], - [ 50, Moves.GRASSY_TERRAIN ], + [ EVOLVE_MOVE, MoveId.CHLOROBLAST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.CHARGE ], + [ 4, MoveId.THUNDER_SHOCK ], + [ 6, MoveId.STUN_SPORE ], + [ 9, MoveId.BULLET_SEED ], + [ 11, MoveId.ROLLOUT ], + [ 13, MoveId.SCREECH ], + [ 16, MoveId.CHARGE_BEAM ], + [ 20, MoveId.SWIFT ], + [ 22, MoveId.ELECTRO_BALL ], + [ 26, MoveId.SELF_DESTRUCT ], + [ 29, MoveId.ENERGY_BALL ], + [ 34, MoveId.SEED_BOMB ], + [ 34, MoveId.DISCHARGE ], + [ 41, MoveId.EXPLOSION ], + [ 46, MoveId.GYRO_BALL ], + [ 50, MoveId.GRASSY_TERRAIN ], ], [Species.HISUI_TYPHLOSION]: [ - [ EVOLVE_MOVE, Moves.INFERNAL_PARADE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.LEER ], - [ 1, Moves.EMBER ], - [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.ERUPTION ], - [ 1, Moves.GYRO_BALL ], - [ 13, Moves.QUICK_ATTACK ], - [ 20, Moves.FLAME_WHEEL ], - [ 24, Moves.DEFENSE_CURL ], - [ 31, Moves.SWIFT ], - [ 35, Moves.FLAME_CHARGE ], - [ 43, Moves.LAVA_PLUME ], - [ 48, Moves.FLAMETHROWER ], - [ 56, Moves.INFERNO ], - [ 61, Moves.ROLLOUT ], - [ 74, Moves.OVERHEAT ], + [ EVOLVE_MOVE, MoveId.INFERNAL_PARADE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.EMBER ], + [ 1, MoveId.SMOKESCREEN ], + [ 1, MoveId.ERUPTION ], + [ 1, MoveId.GYRO_BALL ], + [ 13, MoveId.QUICK_ATTACK ], + [ 20, MoveId.FLAME_WHEEL ], + [ 24, MoveId.DEFENSE_CURL ], + [ 31, MoveId.SWIFT ], + [ 35, MoveId.FLAME_CHARGE ], + [ 43, MoveId.LAVA_PLUME ], + [ 48, MoveId.FLAMETHROWER ], + [ 56, MoveId.INFERNO ], + [ 61, MoveId.ROLLOUT ], + [ 74, MoveId.OVERHEAT ], ], [Species.HISUI_QWILFISH]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.POISON_STING ], - [ 4, Moves.HARDEN ], - [ 8, Moves.BITE ], - [ 12, Moves.FELL_STINGER ], - [ 16, Moves.MINIMIZE ], - [ 20, Moves.SPIKES ], - [ 24, Moves.BRINE ], - [ 28, Moves.BARB_BARRAGE ], - [ 32, Moves.PIN_MISSILE ], - [ 36, Moves.TOXIC_SPIKES ], - [ 40, Moves.STOCKPILE ], - [ 40, Moves.SPIT_UP ], - [ 44, Moves.TOXIC ], - [ 48, Moves.CRUNCH ], - [ 52, Moves.ACUPRESSURE ], - [ 56, Moves.DESTINY_BOND ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.POISON_STING ], + [ 4, MoveId.HARDEN ], + [ 8, MoveId.BITE ], + [ 12, MoveId.FELL_STINGER ], + [ 16, MoveId.MINIMIZE ], + [ 20, MoveId.SPIKES ], + [ 24, MoveId.BRINE ], + [ 28, MoveId.BARB_BARRAGE ], + [ 32, MoveId.PIN_MISSILE ], + [ 36, MoveId.TOXIC_SPIKES ], + [ 40, MoveId.STOCKPILE ], + [ 40, MoveId.SPIT_UP ], + [ 44, MoveId.TOXIC ], + [ 48, MoveId.CRUNCH ], + [ 52, MoveId.ACUPRESSURE ], + [ 56, MoveId.DESTINY_BOND ], ], [Species.HISUI_SNEASEL]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.ROCK_SMASH ], - [ 6, Moves.TAUNT ], - [ 12, Moves.QUICK_ATTACK ], - [ 18, Moves.METAL_CLAW ], - [ 24, Moves.POISON_JAB ], - [ 30, Moves.BRICK_BREAK ], - [ 36, Moves.HONE_CLAWS ], - [ 42, Moves.SLASH ], - [ 48, Moves.AGILITY ], - [ 54, Moves.SCREECH ], - [ 60, Moves.CLOSE_COMBAT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.ROCK_SMASH ], + [ 6, MoveId.TAUNT ], + [ 12, MoveId.QUICK_ATTACK ], + [ 18, MoveId.METAL_CLAW ], + [ 24, MoveId.POISON_JAB ], + [ 30, MoveId.BRICK_BREAK ], + [ 36, MoveId.HONE_CLAWS ], + [ 42, MoveId.SLASH ], + [ 48, MoveId.AGILITY ], + [ 54, MoveId.SCREECH ], + [ 60, MoveId.CLOSE_COMBAT ], ], [Species.HISUI_SAMUROTT]: [ - [ EVOLVE_MOVE, Moves.CEASELESS_EDGE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.SOAK ], // Previous Stage Move - [ 1, Moves.SLASH ], - [ 1, Moves.MEGAHORN ], - [ 1, Moves.SUCKER_PUNCH ], - [ 13, Moves.FOCUS_ENERGY ], - [ 18, Moves.RAZOR_SHELL ], - [ 21, Moves.FURY_CUTTER ], - [ 25, Moves.WATER_PULSE ], - [ 29, Moves.AERIAL_ACE ], - [ 34, Moves.AQUA_JET ], - [ 39, Moves.ENCORE ], - [ 46, Moves.AQUA_TAIL ], - [ 51, Moves.RETALIATE ], - [ 58, Moves.SWORDS_DANCE ], - [ 63, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.CEASELESS_EDGE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.SOAK ], // Previous Stage Move + [ 1, MoveId.SLASH ], + [ 1, MoveId.MEGAHORN ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 13, MoveId.FOCUS_ENERGY ], + [ 18, MoveId.RAZOR_SHELL ], + [ 21, MoveId.FURY_CUTTER ], + [ 25, MoveId.WATER_PULSE ], + [ 29, MoveId.AERIAL_ACE ], + [ 34, MoveId.AQUA_JET ], + [ 39, MoveId.ENCORE ], + [ 46, MoveId.AQUA_TAIL ], + [ 51, MoveId.RETALIATE ], + [ 58, MoveId.SWORDS_DANCE ], + [ 63, MoveId.HYDRO_PUMP ], ], [Species.HISUI_LILLIGANT]: [ - [ EVOLVE_MOVE, Moves.VICTORY_DANCE ], - [ 1, Moves.MEGA_KICK ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], - [ 1, Moves.STUN_SPORE ], - [ 1, Moves.SLEEP_POWDER ], - [ 1, Moves.GIGA_DRAIN ], - [ 1, Moves.CHARM ], // Previous Stage Move - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.TEETER_DANCE ], - [ 1, Moves.MAGICAL_LEAF ], - [ 1, Moves.LEAF_BLADE ], - [ 1, Moves.ENERGY_BALL ], - [ 1, Moves.DEFOG ], - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.ENTRAINMENT ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.PETAL_BLIZZARD ], - [ 1, Moves.SOLAR_BLADE ], - [ 5, Moves.AXE_KICK ], + [ EVOLVE_MOVE, MoveId.VICTORY_DANCE ], + [ 1, MoveId.MEGA_KICK ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.LEECH_SEED ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.STUN_SPORE ], + [ 1, MoveId.SLEEP_POWDER ], + [ 1, MoveId.GIGA_DRAIN ], + [ 1, MoveId.CHARM ], // Previous Stage Move + [ 1, MoveId.SYNTHESIS ], + [ 1, MoveId.SUNNY_DAY ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.TEETER_DANCE ], + [ 1, MoveId.MAGICAL_LEAF ], + [ 1, MoveId.LEAF_BLADE ], + [ 1, MoveId.ENERGY_BALL ], + [ 1, MoveId.DEFOG ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.ENTRAINMENT ], + [ 1, MoveId.AFTER_YOU ], + [ 1, MoveId.PETAL_BLIZZARD ], + [ 1, MoveId.SOLAR_BLADE ], + [ 5, MoveId.AXE_KICK ], ], [Species.HISUI_ZORUA]: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 4, Moves.TORMENT ], - [ 8, Moves.HONE_CLAWS ], - [ 12, Moves.SHADOW_SNEAK ], - [ 16, Moves.CURSE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.KNOCK_OFF ], - [ 28, Moves.SPITE ], - [ 32, Moves.AGILITY ], - [ 36, Moves.SHADOW_BALL ], - [ 40, Moves.BITTER_MALICE ], - [ 44, Moves.NASTY_PLOT ], - [ 48, Moves.FOUL_PLAY ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 4, MoveId.TORMENT ], + [ 8, MoveId.HONE_CLAWS ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.KNOCK_OFF ], + [ 28, MoveId.SPITE ], + [ 32, MoveId.AGILITY ], + [ 36, MoveId.SHADOW_BALL ], + [ 40, MoveId.BITTER_MALICE ], + [ 44, MoveId.NASTY_PLOT ], + [ 48, MoveId.FOUL_PLAY ], ], [Species.HISUI_ZOROARK]: [ - [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.TORMENT ], - [ 1, Moves.U_TURN ], - [ 1, Moves.HONE_CLAWS ], - [ 12, Moves.SHADOW_SNEAK ], - [ 16, Moves.CURSE ], - [ 20, Moves.TAUNT ], - [ 24, Moves.KNOCK_OFF ], - [ 28, Moves.SPITE ], - [ 34, Moves.AGILITY ], - [ 40, Moves.SHADOW_BALL ], - [ 46, Moves.BITTER_MALICE ], - [ 52, Moves.NASTY_PLOT ], - [ 58, Moves.FOUL_PLAY ], + [ EVOLVE_MOVE, MoveId.SHADOW_CLAW ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.TORMENT ], + [ 1, MoveId.U_TURN ], + [ 1, MoveId.HONE_CLAWS ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 16, MoveId.CURSE ], + [ 20, MoveId.TAUNT ], + [ 24, MoveId.KNOCK_OFF ], + [ 28, MoveId.SPITE ], + [ 34, MoveId.AGILITY ], + [ 40, MoveId.SHADOW_BALL ], + [ 46, MoveId.BITTER_MALICE ], + [ 52, MoveId.NASTY_PLOT ], + [ 58, MoveId.FOUL_PLAY ], ], [Species.HISUI_BRAVIARY]: [ - [ EVOLVE_MOVE, Moves.ESPER_WING ], - [ RELEARN_MOVE, Moves.BRAVE_BIRD ], // Previous Stage Move - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.LEER ], - [ 1, Moves.PECK ], - [ 1, Moves.SKY_ATTACK ], - [ 1, Moves.SUPERPOWER ], - [ 1, Moves.HONE_CLAWS ], - [ 18, Moves.TAILWIND ], - [ 24, Moves.SCARY_FACE ], - [ 30, Moves.AERIAL_ACE ], - [ 36, Moves.SLASH ], - [ 42, Moves.WHIRLWIND ], - [ 48, Moves.CRUSH_CLAW ], - [ 57, Moves.AIR_SLASH ], - [ 64, Moves.DEFOG ], - [ 72, Moves.THRASH ], - [ 80, Moves.HURRICANE ], + [ EVOLVE_MOVE, MoveId.ESPER_WING ], + [ RELEARN_MOVE, MoveId.BRAVE_BIRD ], // Previous Stage Move + [ 1, MoveId.WING_ATTACK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.PECK ], + [ 1, MoveId.SKY_ATTACK ], + [ 1, MoveId.SUPERPOWER ], + [ 1, MoveId.HONE_CLAWS ], + [ 18, MoveId.TAILWIND ], + [ 24, MoveId.SCARY_FACE ], + [ 30, MoveId.AERIAL_ACE ], + [ 36, MoveId.SLASH ], + [ 42, MoveId.WHIRLWIND ], + [ 48, MoveId.CRUSH_CLAW ], + [ 57, MoveId.AIR_SLASH ], + [ 64, MoveId.DEFOG ], + [ 72, MoveId.THRASH ], + [ 80, MoveId.HURRICANE ], ], [Species.HISUI_SLIGGOO]: [ - [ EVOLVE_MOVE, Moves.SHELTER ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.ACID_ARMOR ], - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.BODY_SLAM ], // Previous Stage Move - [ 15, Moves.PROTECT ], - [ 20, Moves.FLAIL ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.RAIN_DANCE ], - [ 35, Moves.DRAGON_PULSE ], - [ 43, Moves.CURSE ], - [ 49, Moves.IRON_HEAD ], - [ 56, Moves.MUDDY_WATER ], + [ EVOLVE_MOVE, MoveId.SHELTER ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ACID_ARMOR ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.BODY_SLAM ], // Previous Stage Move + [ 15, MoveId.PROTECT ], + [ 20, MoveId.FLAIL ], + [ 25, MoveId.WATER_PULSE ], + [ 30, MoveId.RAIN_DANCE ], + [ 35, MoveId.DRAGON_PULSE ], + [ 43, MoveId.CURSE ], + [ 49, MoveId.IRON_HEAD ], + [ 56, MoveId.MUDDY_WATER ], ], [Species.HISUI_GOODRA]: [ - [ EVOLVE_MOVE, Moves.IRON_TAIL ], - [ 1, Moves.TACKLE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.ABSORB ], - [ 1, Moves.ACID_ARMOR ], // Previous Stage Move - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.FEINT ], - [ 1, Moves.ACID_SPRAY ], - [ 1, Moves.TEARFUL_LOOK ], - [ 1, Moves.SHELTER ], - [ 15, Moves.PROTECT ], - [ 20, Moves.FLAIL ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.RAIN_DANCE ], - [ 35, Moves.DRAGON_PULSE ], - [ 43, Moves.CURSE ], - [ 49, Moves.BODY_SLAM ], - [ 49, Moves.IRON_HEAD ], - [ 58, Moves.MUDDY_WATER ], - [ 67, Moves.HEAVY_SLAM ], + [ EVOLVE_MOVE, MoveId.IRON_TAIL ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.ABSORB ], + [ 1, MoveId.ACID_ARMOR ], // Previous Stage Move + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.FEINT ], + [ 1, MoveId.ACID_SPRAY ], + [ 1, MoveId.TEARFUL_LOOK ], + [ 1, MoveId.SHELTER ], + [ 15, MoveId.PROTECT ], + [ 20, MoveId.FLAIL ], + [ 25, MoveId.WATER_PULSE ], + [ 30, MoveId.RAIN_DANCE ], + [ 35, MoveId.DRAGON_PULSE ], + [ 43, MoveId.CURSE ], + [ 49, MoveId.BODY_SLAM ], + [ 49, MoveId.IRON_HEAD ], + [ 58, MoveId.MUDDY_WATER ], + [ 67, MoveId.HEAVY_SLAM ], ], [Species.HISUI_AVALUGG]: [ - [ EVOLVE_MOVE, Moves.ROCK_SLIDE ], - [ 1, Moves.TACKLE ], - [ 1, Moves.HARDEN ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.WIDE_GUARD ], - [ 9, Moves.CURSE ], - [ 12, Moves.ICY_WIND ], - [ 15, Moves.PROTECT ], - [ 18, Moves.AVALANCHE ], - [ 21, Moves.BITE ], - [ 24, Moves.ICE_FANG ], - [ 27, Moves.IRON_DEFENSE ], - [ 30, Moves.RECOVER ], - [ 33, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 41, Moves.BLIZZARD ], - [ 46, Moves.DOUBLE_EDGE ], - [ 51, Moves.STONE_EDGE ], - [ 61, Moves.MOUNTAIN_GALE ], + [ EVOLVE_MOVE, MoveId.ROCK_SLIDE ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.HARDEN ], + [ 1, MoveId.POWDER_SNOW ], + [ 1, MoveId.RAPID_SPIN ], + [ 1, MoveId.WIDE_GUARD ], + [ 9, MoveId.CURSE ], + [ 12, MoveId.ICY_WIND ], + [ 15, MoveId.PROTECT ], + [ 18, MoveId.AVALANCHE ], + [ 21, MoveId.BITE ], + [ 24, MoveId.ICE_FANG ], + [ 27, MoveId.IRON_DEFENSE ], + [ 30, MoveId.RECOVER ], + [ 33, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 41, MoveId.BLIZZARD ], + [ 46, MoveId.DOUBLE_EDGE ], + [ 51, MoveId.STONE_EDGE ], + [ 61, MoveId.MOUNTAIN_GALE ], ], [Species.HISUI_DECIDUEYE]: [ - [ EVOLVE_MOVE, Moves.TRIPLE_ARROWS ], - [ RELEARN_MOVE, Moves.NASTY_PLOT ], // Previous Stage Move - [ 1, Moves.TACKLE ], - [ 1, Moves.GROWL ], - [ 1, Moves.U_TURN ], - [ 1, Moves.ASTONISH ], // Previous Stage Move - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.LEAFAGE ], - [ 9, Moves.PECK ], - [ 12, Moves.SHADOW_SNEAK ], - [ 15, Moves.RAZOR_LEAF ], - [ 20, Moves.SYNTHESIS ], - [ 25, Moves.PLUCK ], - [ 30, Moves.BULK_UP ], - [ 37, Moves.SUCKER_PUNCH ], - [ 44, Moves.LEAF_BLADE ], - [ 51, Moves.FEATHER_DANCE ], - [ 58, Moves.BRAVE_BIRD ], + [ EVOLVE_MOVE, MoveId.TRIPLE_ARROWS ], + [ RELEARN_MOVE, MoveId.NASTY_PLOT ], // Previous Stage Move + [ 1, MoveId.TACKLE ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.U_TURN ], + [ 1, MoveId.ASTONISH ], // Previous Stage Move + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.LEAFAGE ], + [ 9, MoveId.PECK ], + [ 12, MoveId.SHADOW_SNEAK ], + [ 15, MoveId.RAZOR_LEAF ], + [ 20, MoveId.SYNTHESIS ], + [ 25, MoveId.PLUCK ], + [ 30, MoveId.BULK_UP ], + [ 37, MoveId.SUCKER_PUNCH ], + [ 44, MoveId.LEAF_BLADE ], + [ 51, MoveId.FEATHER_DANCE ], + [ 58, MoveId.BRAVE_BIRD ], ], [Species.PALDEA_TAUROS]: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.WORK_UP ], - [ 10, Moves.DOUBLE_KICK ], - [ 15, Moves.ASSURANCE ], - [ 20, Moves.HEADBUTT ], - [ 25, Moves.SCARY_FACE ], - [ 30, Moves.ZEN_HEADBUTT ], - [ 35, Moves.RAGING_BULL ], - [ 40, Moves.REST ], - [ 45, Moves.SWAGGER ], - [ 50, Moves.THRASH ], - [ 55, Moves.DOUBLE_EDGE ], - [ 60, Moves.CLOSE_COMBAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.WORK_UP ], + [ 10, MoveId.DOUBLE_KICK ], + [ 15, MoveId.ASSURANCE ], + [ 20, MoveId.HEADBUTT ], + [ 25, MoveId.SCARY_FACE ], + [ 30, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.RAGING_BULL ], + [ 40, MoveId.REST ], + [ 45, MoveId.SWAGGER ], + [ 50, MoveId.THRASH ], + [ 55, MoveId.DOUBLE_EDGE ], + [ 60, MoveId.CLOSE_COMBAT ], ], [Species.PALDEA_WOOPER]: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.MUD_SHOT ], - [ 4, Moves.TACKLE ], - [ 8, Moves.POISON_TAIL ], - [ 12, Moves.TOXIC_SPIKES ], - [ 16, Moves.SLAM ], - [ 21, Moves.YAWN ], - [ 24, Moves.POISON_JAB ], - [ 28, Moves.SLUDGE_WAVE ], - [ 32, Moves.AMNESIA ], - [ 36, Moves.TOXIC ], - [ 40, Moves.EARTHQUAKE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.MUD_SHOT ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.POISON_TAIL ], + [ 12, MoveId.TOXIC_SPIKES ], + [ 16, MoveId.SLAM ], + [ 21, MoveId.YAWN ], + [ 24, MoveId.POISON_JAB ], + [ 28, MoveId.SLUDGE_WAVE ], + [ 32, MoveId.AMNESIA ], + [ 36, MoveId.TOXIC ], + [ 40, MoveId.EARTHQUAKE ], ], [Species.BLOODMOON_URSALUNA]: [ - [ RELEARN_MOVE, Moves.MOONLIGHT ], - [ 1, Moves.HEADLONG_RUSH ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.LICK ], - [ 8, Moves.FURY_SWIPES ], - [ 13, Moves.PAYBACK ], - [ 17, Moves.HARDEN ], - [ 22, Moves.SLASH ], - [ 25, Moves.PLAY_NICE ], - [ 35, Moves.SCARY_FACE ], - [ 41, Moves.REST ], - [ 41, Moves.SNORE ], - [ 48, Moves.EARTH_POWER ], - [ 56, Moves.MOONBLAST ], - [ 64, Moves.HAMMER_ARM ], - [ 70, Moves.BLOOD_MOON ], + [ RELEARN_MOVE, MoveId.MOONLIGHT ], + [ 1, MoveId.HEADLONG_RUSH ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.LICK ], + [ 8, MoveId.FURY_SWIPES ], + [ 13, MoveId.PAYBACK ], + [ 17, MoveId.HARDEN ], + [ 22, MoveId.SLASH ], + [ 25, MoveId.PLAY_NICE ], + [ 35, MoveId.SCARY_FACE ], + [ 41, MoveId.REST ], + [ 41, MoveId.SNORE ], + [ 48, MoveId.EARTH_POWER ], + [ 56, MoveId.MOONBLAST ], + [ 64, MoveId.HAMMER_ARM ], + [ 70, MoveId.BLOOD_MOON ], ] }; export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [Species.PIKACHU]: { // Custom 1: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.ZIPPY_ZAP ], // Custom - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 34, Moves.FLOATY_FALL ], // Custom - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 42, Moves.SPLISHY_SPLASH ], // Custom - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.ZIPPY_ZAP ], // Custom + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 34, MoveId.FLOATY_FALL ], // Custom + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 42, MoveId.SPLISHY_SPLASH ], // Custom + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 2: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 3: [ - [ 1, Moves.METEOR_MASH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.METEOR_MASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 4: [ - [ 1, Moves.ICICLE_CRASH ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.ICICLE_CRASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 5: [ - [ 1, Moves.DRAINING_KISS ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.DRAINING_KISS ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 6: [ - [ 1, Moves.ELECTRIC_TERRAIN ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.ELECTRIC_TERRAIN ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 7: [ - [ 1, Moves.FLYING_PRESS ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.SPARK ], - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.FLYING_PRESS ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.SPARK ], + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], 8: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.PLAY_NICE ], - [ 1, Moves.NUZZLE ], - [ 4, Moves.THUNDER_WAVE ], - [ 8, Moves.DOUBLE_TEAM ], - [ 12, Moves.ELECTRO_BALL ], - [ 16, Moves.FEINT ], - [ 20, Moves.ZIPPY_ZAP ], // Custom - [ 24, Moves.AGILITY ], - [ 28, Moves.IRON_TAIL ], - [ 32, Moves.DISCHARGE ], - [ 34, Moves.FLOATY_FALL ], // Custom - [ 36, Moves.THUNDERBOLT ], - [ 40, Moves.LIGHT_SCREEN ], - [ 42, Moves.SPLISHY_SPLASH ], // Custom - [ 44, Moves.THUNDER ], - [ 48, Moves.PIKA_PAPOW ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.SWEET_KISS ], + [ 1, MoveId.CHARM ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.PLAY_NICE ], + [ 1, MoveId.NUZZLE ], + [ 4, MoveId.THUNDER_WAVE ], + [ 8, MoveId.DOUBLE_TEAM ], + [ 12, MoveId.ELECTRO_BALL ], + [ 16, MoveId.FEINT ], + [ 20, MoveId.ZIPPY_ZAP ], // Custom + [ 24, MoveId.AGILITY ], + [ 28, MoveId.IRON_TAIL ], + [ 32, MoveId.DISCHARGE ], + [ 34, MoveId.FLOATY_FALL ], // Custom + [ 36, MoveId.THUNDERBOLT ], + [ 40, MoveId.LIGHT_SCREEN ], + [ 42, MoveId.SPLISHY_SPLASH ], // Custom + [ 44, MoveId.THUNDER ], + [ 48, MoveId.PIKA_PAPOW ], ], }, [Species.EEVEE]: { // Custom 1: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.BOUNCY_BUBBLE ], // Custom - [ 18, Moves.SIZZLY_SLIDE ], // Custom - [ 18, Moves.BUZZY_BUZZ ], // Custom - [ 20, Moves.SWIFT ], - [ 25, Moves.BITE ], - [ 30, Moves.COPYCAT ], - [ 33, Moves.BADDY_BAD ], // Custom - [ 33, Moves.GLITZY_GLOW ], // Custom - [ 35, Moves.BATON_PASS ], - [ 40, Moves.VEEVEE_VOLLEY ], // Custom, replaces Take Down - [ 43, Moves.FREEZY_FROST ], // Custom - [ 43, Moves.SAPPY_SEED ], // Custom - [ 45, Moves.CHARM ], - [ 50, Moves.DOUBLE_EDGE ], - [ 53, Moves.SPARKLY_SWIRL ], // Custom - [ 55, Moves.LAST_RESORT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.QUICK_ATTACK ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.BOUNCY_BUBBLE ], // Custom + [ 18, MoveId.SIZZLY_SLIDE ], // Custom + [ 18, MoveId.BUZZY_BUZZ ], // Custom + [ 20, MoveId.SWIFT ], + [ 25, MoveId.BITE ], + [ 30, MoveId.COPYCAT ], + [ 33, MoveId.BADDY_BAD ], // Custom + [ 33, MoveId.GLITZY_GLOW ], // Custom + [ 35, MoveId.BATON_PASS ], + [ 40, MoveId.VEEVEE_VOLLEY ], // Custom, replaces Take Down + [ 43, MoveId.FREEZY_FROST ], // Custom + [ 43, MoveId.SAPPY_SEED ], // Custom + [ 45, MoveId.CHARM ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 53, MoveId.SPARKLY_SWIRL ], // Custom + [ 55, MoveId.LAST_RESORT ], ], 2: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.GROWL ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.COVET ], - [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.BOUNCY_BUBBLE ], // Custom - [ 18, Moves.SIZZLY_SLIDE ], // Custom - [ 18, Moves.BUZZY_BUZZ ], // Custom - [ 20, Moves.SWIFT ], - [ 25, Moves.BITE ], - [ 30, Moves.COPYCAT ], - [ 33, Moves.BADDY_BAD ], // Custom - [ 33, Moves.GLITZY_GLOW ], // Custom - [ 35, Moves.BATON_PASS ], - [ 40, Moves.VEEVEE_VOLLEY ], // Custom, replaces Take Down - [ 43, Moves.FREEZY_FROST ], // Custom - [ 43, Moves.SAPPY_SEED ], // Custom - [ 45, Moves.CHARM ], - [ 50, Moves.DOUBLE_EDGE ], - [ 53, Moves.SPARKLY_SWIRL ], // Custom - [ 55, Moves.LAST_RESORT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.HELPING_HAND ], + [ 1, MoveId.COVET ], + [ 5, MoveId.SAND_ATTACK ], + [ 10, MoveId.QUICK_ATTACK ], + [ 15, MoveId.BABY_DOLL_EYES ], + [ 18, MoveId.BOUNCY_BUBBLE ], // Custom + [ 18, MoveId.SIZZLY_SLIDE ], // Custom + [ 18, MoveId.BUZZY_BUZZ ], // Custom + [ 20, MoveId.SWIFT ], + [ 25, MoveId.BITE ], + [ 30, MoveId.COPYCAT ], + [ 33, MoveId.BADDY_BAD ], // Custom + [ 33, MoveId.GLITZY_GLOW ], // Custom + [ 35, MoveId.BATON_PASS ], + [ 40, MoveId.VEEVEE_VOLLEY ], // Custom, replaces Take Down + [ 43, MoveId.FREEZY_FROST ], // Custom + [ 43, MoveId.SAPPY_SEED ], // Custom + [ 45, MoveId.CHARM ], + [ 50, MoveId.DOUBLE_EDGE ], + [ 53, MoveId.SPARKLY_SWIRL ], // Custom + [ 55, MoveId.LAST_RESORT ], ], }, [Species.DEOXYS]: { 1: [ - [ 1, Moves.CONFUSION ], // Custom - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 7, Moves.NIGHT_SHADE ], - [ 13, Moves.TELEPORT ], - [ 19, Moves.TAUNT ], - [ 25, Moves.PURSUIT ], - [ 31, Moves.PSYCHIC ], - [ 37, Moves.SUPERPOWER ], - [ 43, Moves.PSYCHO_SHIFT ], - [ 49, Moves.ZEN_HEADBUTT ], - [ 55, Moves.COSMIC_POWER ], - [ 61, Moves.ZAP_CANNON ], - [ 67, Moves.PSYCHO_BOOST ], - [ 73, Moves.HYPER_BEAM ], + [ 1, MoveId.CONFUSION ], // Custom + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 7, MoveId.NIGHT_SHADE ], + [ 13, MoveId.TELEPORT ], + [ 19, MoveId.TAUNT ], + [ 25, MoveId.PURSUIT ], + [ 31, MoveId.PSYCHIC ], + [ 37, MoveId.SUPERPOWER ], + [ 43, MoveId.PSYCHO_SHIFT ], + [ 49, MoveId.ZEN_HEADBUTT ], + [ 55, MoveId.COSMIC_POWER ], + [ 61, MoveId.ZAP_CANNON ], + [ 67, MoveId.PSYCHO_BOOST ], + [ 73, MoveId.HYPER_BEAM ], ], 2: [ - [ 1, Moves.CONFUSION ], // Custom - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 7, Moves.NIGHT_SHADE ], - [ 13, Moves.TELEPORT ], - [ 19, Moves.KNOCK_OFF ], - [ 25, Moves.SPIKES ], - [ 31, Moves.PSYCHIC ], - [ 37, Moves.SNATCH ], - [ 43, Moves.PSYCHO_SHIFT ], - [ 49, Moves.ZEN_HEADBUTT ], - [ 55, Moves.AMNESIA ], - [ 55, Moves.IRON_DEFENSE ], - [ 61, Moves.RECOVER ], - [ 67, Moves.PSYCHO_BOOST ], - [ 73, Moves.COUNTER ], - [ 73, Moves.MIRROR_COAT ], + [ 1, MoveId.CONFUSION ], // Custom + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 7, MoveId.NIGHT_SHADE ], + [ 13, MoveId.TELEPORT ], + [ 19, MoveId.KNOCK_OFF ], + [ 25, MoveId.SPIKES ], + [ 31, MoveId.PSYCHIC ], + [ 37, MoveId.SNATCH ], + [ 43, MoveId.PSYCHO_SHIFT ], + [ 49, MoveId.ZEN_HEADBUTT ], + [ 55, MoveId.AMNESIA ], + [ 55, MoveId.IRON_DEFENSE ], + [ 61, MoveId.RECOVER ], + [ 67, MoveId.PSYCHO_BOOST ], + [ 73, MoveId.COUNTER ], + [ 73, MoveId.MIRROR_COAT ], ], 3: [ - [ 1, Moves.CONFUSION ], // Custom - [ 1, Moves.WRAP ], - [ 1, Moves.LEER ], - [ 7, Moves.NIGHT_SHADE ], - [ 13, Moves.DOUBLE_TEAM ], - [ 19, Moves.KNOCK_OFF ], - [ 25, Moves.PURSUIT ], - [ 31, Moves.PSYCHIC ], - [ 37, Moves.SWIFT ], - [ 43, Moves.PSYCHO_SHIFT ], - [ 49, Moves.ZEN_HEADBUTT ], - [ 55, Moves.AGILITY ], - [ 61, Moves.RECOVER ], - [ 67, Moves.PSYCHO_BOOST ], - [ 73, Moves.EXTREME_SPEED ], + [ 1, MoveId.CONFUSION ], // Custom + [ 1, MoveId.WRAP ], + [ 1, MoveId.LEER ], + [ 7, MoveId.NIGHT_SHADE ], + [ 13, MoveId.DOUBLE_TEAM ], + [ 19, MoveId.KNOCK_OFF ], + [ 25, MoveId.PURSUIT ], + [ 31, MoveId.PSYCHIC ], + [ 37, MoveId.SWIFT ], + [ 43, MoveId.PSYCHO_SHIFT ], + [ 49, MoveId.ZEN_HEADBUTT ], + [ 55, MoveId.AGILITY ], + [ 61, MoveId.RECOVER ], + [ 67, MoveId.PSYCHO_BOOST ], + [ 73, MoveId.EXTREME_SPEED ], ], }, [Species.WORMADAM]: { 1: [ - [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], - [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move, Custom - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.PROTECT ], - [ 10, Moves.TACKLE ], - [ 20, Moves.STRING_SHOT ], - [ 23, Moves.CONFUSION ], - [ 26, Moves.ROCK_BLAST ], - [ 29, Moves.HARDEN ], - [ 32, Moves.PSYBEAM ], - [ 35, Moves.INFESTATION ], - [ 38, Moves.FLAIL ], - [ 41, Moves.ATTRACT ], - [ 44, Moves.PSYCHIC ], - [ 47, Moves.FISSURE ], - [ 50, Moves.BUG_BUZZ ], + [ EVOLVE_MOVE, MoveId.QUIVER_DANCE ], + [ 1, MoveId.STRUGGLE_BUG ], // Previous Stage Move, Custom + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.PROTECT ], + [ 10, MoveId.TACKLE ], + [ 20, MoveId.STRING_SHOT ], + [ 23, MoveId.CONFUSION ], + [ 26, MoveId.ROCK_BLAST ], + [ 29, MoveId.HARDEN ], + [ 32, MoveId.PSYBEAM ], + [ 35, MoveId.INFESTATION ], + [ 38, MoveId.FLAIL ], + [ 41, MoveId.ATTRACT ], + [ 44, MoveId.PSYCHIC ], + [ 47, MoveId.FISSURE ], + [ 50, MoveId.BUG_BUZZ ], ], 2: [ - [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], - [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move, Custom - [ 1, Moves.METAL_BURST ], - [ 1, Moves.TACKLE ], - [ 1, Moves.PROTECT ], - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.BUG_BITE ], - [ 1, Moves.PROTECT ], - [ 10, Moves.TACKLE ], - [ 20, Moves.STRING_SHOT ], - [ 23, Moves.CONFUSION ], - [ 26, Moves.METAL_BURST ], - [ 29, Moves.METAL_SOUND ], - [ 32, Moves.PSYBEAM ], - [ 35, Moves.INFESTATION ], - [ 38, Moves.FLAIL ], - [ 41, Moves.ATTRACT ], - [ 44, Moves.PSYCHIC ], - [ 47, Moves.IRON_HEAD ], - [ 50, Moves.BUG_BUZZ ], + [ EVOLVE_MOVE, MoveId.QUIVER_DANCE ], + [ 1, MoveId.STRUGGLE_BUG ], // Previous Stage Move, Custom + [ 1, MoveId.METAL_BURST ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.PROTECT ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.BUG_BITE ], + [ 1, MoveId.PROTECT ], + [ 10, MoveId.TACKLE ], + [ 20, MoveId.STRING_SHOT ], + [ 23, MoveId.CONFUSION ], + [ 26, MoveId.METAL_BURST ], + [ 29, MoveId.METAL_SOUND ], + [ 32, MoveId.PSYBEAM ], + [ 35, MoveId.INFESTATION ], + [ 38, MoveId.FLAIL ], + [ 41, MoveId.ATTRACT ], + [ 44, MoveId.PSYCHIC ], + [ 47, MoveId.IRON_HEAD ], + [ 50, MoveId.BUG_BUZZ ], ], }, [Species.ROTOM]: { 1: [ - [ 1, Moves.OVERHEAT ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.OVERHEAT ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], 2: [ - [ 1, Moves.HYDRO_PUMP ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.HYDRO_PUMP ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], 3: [ - [ 1, Moves.BLIZZARD ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.BLIZZARD ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], 4: [ - [ 1, Moves.AIR_SLASH ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.AIR_SLASH ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], 5: [ - [ 1, Moves.LEAF_STORM ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.ASTONISH ], - [ 5, Moves.THUNDER_SHOCK ], - [ 10, Moves.CONFUSE_RAY ], - [ 15, Moves.CHARGE ], - [ 20, Moves.ELECTRO_BALL ], - [ 25, Moves.THUNDER_WAVE ], - [ 30, Moves.SHOCK_WAVE ], - [ 35, Moves.HEX ], - [ 40, Moves.SUBSTITUTE ], - [ 45, Moves.TRICK ], - [ 50, Moves.DISCHARGE ], - [ 55, Moves.UPROAR ], + [ 1, MoveId.LEAF_STORM ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.ASTONISH ], + [ 5, MoveId.THUNDER_SHOCK ], + [ 10, MoveId.CONFUSE_RAY ], + [ 15, MoveId.CHARGE ], + [ 20, MoveId.ELECTRO_BALL ], + [ 25, MoveId.THUNDER_WAVE ], + [ 30, MoveId.SHOCK_WAVE ], + [ 35, MoveId.HEX ], + [ 40, MoveId.SUBSTITUTE ], + [ 45, MoveId.TRICK ], + [ 50, MoveId.DISCHARGE ], + [ 55, MoveId.UPROAR ], ], }, [Species.SHAYMIN]: { 1: [ - [ 1, Moves.LEAFAGE ], // Custom - [ 1, Moves.GROWTH ], - [ 10, Moves.MAGICAL_LEAF ], - [ 19, Moves.LEECH_SEED ], - [ 28, Moves.QUICK_ATTACK ], - [ 37, Moves.SWEET_SCENT ], - [ 46, Moves.NATURAL_GIFT ], - [ 55, Moves.WORRY_SEED ], - [ 64, Moves.AIR_SLASH ], - [ 73, Moves.ENERGY_BALL ], - [ 82, Moves.SWEET_KISS ], - [ 91, Moves.LEAF_STORM ], - [ 100, Moves.SEED_FLARE ], + [ 1, MoveId.LEAFAGE ], // Custom + [ 1, MoveId.GROWTH ], + [ 10, MoveId.MAGICAL_LEAF ], + [ 19, MoveId.LEECH_SEED ], + [ 28, MoveId.QUICK_ATTACK ], + [ 37, MoveId.SWEET_SCENT ], + [ 46, MoveId.NATURAL_GIFT ], + [ 55, MoveId.WORRY_SEED ], + [ 64, MoveId.AIR_SLASH ], + [ 73, MoveId.ENERGY_BALL ], + [ 82, MoveId.SWEET_KISS ], + [ 91, MoveId.LEAF_STORM ], + [ 100, MoveId.SEED_FLARE ], ] }, [Species.BASCULIN]: { 1: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.TACKLE ], - [ 8, Moves.FLAIL ], - [ 12, Moves.AQUA_JET ], - [ 16, Moves.BITE ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.SOAK ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.FINAL_GAMBIT ], - [ 44, Moves.WAVE_CRASH ], - [ 48, Moves.THRASH ], - [ 52, Moves.DOUBLE_EDGE ], - [ 56, Moves.HEAD_SMASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.FLAIL ], + [ 12, MoveId.AQUA_JET ], + [ 16, MoveId.BITE ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.SOAK ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.FINAL_GAMBIT ], + [ 44, MoveId.WAVE_CRASH ], + [ 48, MoveId.THRASH ], + [ 52, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.HEAD_SMASH ], ], 2: [ - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.WATER_GUN ], - [ 4, Moves.TACKLE ], - [ 8, Moves.FLAIL ], - [ 12, Moves.AQUA_JET ], - [ 16, Moves.BITE ], - [ 20, Moves.SCARY_FACE ], - [ 24, Moves.HEADBUTT ], - [ 28, Moves.SOAK ], - [ 32, Moves.CRUNCH ], - [ 36, Moves.TAKE_DOWN ], - [ 40, Moves.UPROAR ], - [ 44, Moves.WAVE_CRASH ], - [ 48, Moves.THRASH ], - [ 52, Moves.DOUBLE_EDGE ], - [ 56, Moves.HEAD_SMASH ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.WATER_GUN ], + [ 4, MoveId.TACKLE ], + [ 8, MoveId.FLAIL ], + [ 12, MoveId.AQUA_JET ], + [ 16, MoveId.BITE ], + [ 20, MoveId.SCARY_FACE ], + [ 24, MoveId.HEADBUTT ], + [ 28, MoveId.SOAK ], + [ 32, MoveId.CRUNCH ], + [ 36, MoveId.TAKE_DOWN ], + [ 40, MoveId.UPROAR ], + [ 44, MoveId.WAVE_CRASH ], + [ 48, MoveId.THRASH ], + [ 52, MoveId.DOUBLE_EDGE ], + [ 56, MoveId.HEAD_SMASH ], ] }, [Species.KYUREM]: { 1: [ - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.FREEZE_DRY ], - [ 8, Moves.SLASH ], - [ 16, Moves.ENDEAVOR ], - [ 24, Moves.DRAGON_PULSE ], - [ 32, Moves.ICE_BEAM ], - [ 40, Moves.HYPER_VOICE ], - [ 48, Moves.FUSION_BOLT ], - [ 56, Moves.BLIZZARD ], - [ 64, Moves.IMPRISON ], - [ 72, Moves.OUTRAGE ], - [ 80, Moves.FREEZE_SHOCK ], - [ 88, Moves.SHEER_COLD ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.FREEZE_DRY ], + [ 8, MoveId.SLASH ], + [ 16, MoveId.ENDEAVOR ], + [ 24, MoveId.DRAGON_PULSE ], + [ 32, MoveId.ICE_BEAM ], + [ 40, MoveId.HYPER_VOICE ], + [ 48, MoveId.FUSION_BOLT ], + [ 56, MoveId.BLIZZARD ], + [ 64, MoveId.IMPRISON ], + [ 72, MoveId.OUTRAGE ], + [ 80, MoveId.FREEZE_SHOCK ], + [ 88, MoveId.SHEER_COLD ], ], 2: [ - [ 1, Moves.DRAGON_BREATH ], - [ 1, Moves.ANCIENT_POWER ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.FREEZE_DRY ], - [ 8, Moves.SLASH ], - [ 16, Moves.ENDEAVOR ], - [ 24, Moves.DRAGON_PULSE ], - [ 32, Moves.ICE_BEAM ], - [ 40, Moves.HYPER_VOICE ], - [ 48, Moves.FUSION_FLARE ], - [ 56, Moves.BLIZZARD ], - [ 64, Moves.IMPRISON ], - [ 72, Moves.OUTRAGE ], - [ 80, Moves.ICE_BURN ], - [ 88, Moves.SHEER_COLD ], + [ 1, MoveId.DRAGON_BREATH ], + [ 1, MoveId.ANCIENT_POWER ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.FREEZE_DRY ], + [ 8, MoveId.SLASH ], + [ 16, MoveId.ENDEAVOR ], + [ 24, MoveId.DRAGON_PULSE ], + [ 32, MoveId.ICE_BEAM ], + [ 40, MoveId.HYPER_VOICE ], + [ 48, MoveId.FUSION_FLARE ], + [ 56, MoveId.BLIZZARD ], + [ 64, MoveId.IMPRISON ], + [ 72, MoveId.OUTRAGE ], + [ 80, MoveId.ICE_BURN ], + [ 88, MoveId.SHEER_COLD ], ], }, [Species.MEOWSTIC]: { 1: [ - [ 1, Moves.SCRATCH ], - [ 1, Moves.LEER ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.MAGICAL_LEAF ], - [ 1, Moves.DISARMING_VOICE ], - [ 9, Moves.CONFUSION ], - [ 12, Moves.STORED_POWER ], - [ 15, Moves.CHARGE_BEAM ], - [ 18, Moves.COVET ], - [ 21, Moves.PSYBEAM ], - [ 24, Moves.SUCKER_PUNCH ], - [ 29, Moves.ROLE_PLAY ], - [ 34, Moves.LIGHT_SCREEN ], - [ 34, Moves.REFLECT ], - [ 39, Moves.PSYSHOCK ], - [ 44, Moves.EXTRASENSORY ], - [ 49, Moves.SHADOW_BALL ], - [ 54, Moves.PSYCHIC ], - [ 59, Moves.FUTURE_SIGHT ], + [ 1, MoveId.SCRATCH ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FAKE_OUT ], + [ 1, MoveId.MAGICAL_LEAF ], + [ 1, MoveId.DISARMING_VOICE ], + [ 9, MoveId.CONFUSION ], + [ 12, MoveId.STORED_POWER ], + [ 15, MoveId.CHARGE_BEAM ], + [ 18, MoveId.COVET ], + [ 21, MoveId.PSYBEAM ], + [ 24, MoveId.SUCKER_PUNCH ], + [ 29, MoveId.ROLE_PLAY ], + [ 34, MoveId.LIGHT_SCREEN ], + [ 34, MoveId.REFLECT ], + [ 39, MoveId.PSYSHOCK ], + [ 44, MoveId.EXTRASENSORY ], + [ 49, MoveId.SHADOW_BALL ], + [ 54, MoveId.PSYCHIC ], + [ 59, MoveId.FUTURE_SIGHT ], ], }, [Species.HOOPA]: { 1: [ - [ 1, Moves.CONFUSION ], - [ 1, Moves.DESTINY_BOND ], - [ 1, Moves.ALLY_SWITCH ], - [ 6, Moves.ASTONISH ], - [ 10, Moves.TRICK ], - [ 15, Moves.LIGHT_SCREEN ], - [ 19, Moves.PSYBEAM ], - [ 25, Moves.SKILL_SWAP ], - [ 29, Moves.GUARD_SPLIT ], - [ 29, Moves.POWER_SPLIT ], - [ 46, Moves.KNOCK_OFF ], - [ 50, Moves.TRICK_ROOM ], - [ 50, Moves.WONDER_ROOM ], - [ 55, Moves.DARK_PULSE ], - [ 75, Moves.PSYCHIC ], - [ 85, Moves.HYPERSPACE_FURY ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.DESTINY_BOND ], + [ 1, MoveId.ALLY_SWITCH ], + [ 6, MoveId.ASTONISH ], + [ 10, MoveId.TRICK ], + [ 15, MoveId.LIGHT_SCREEN ], + [ 19, MoveId.PSYBEAM ], + [ 25, MoveId.SKILL_SWAP ], + [ 29, MoveId.GUARD_SPLIT ], + [ 29, MoveId.POWER_SPLIT ], + [ 46, MoveId.KNOCK_OFF ], + [ 50, MoveId.TRICK_ROOM ], + [ 50, MoveId.WONDER_ROOM ], + [ 55, MoveId.DARK_PULSE ], + [ 75, MoveId.PSYCHIC ], + [ 85, MoveId.HYPERSPACE_FURY ], ], }, [Species.GRENINJA]: { 1: [ - [ EVOLVE_MOVE, Moves.WATER_SHURIKEN ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.ROUND ], // Previous Stage Move - [ 1, Moves.FLING ], // Previous Stage Move - [ 1, Moves.SMACK_DOWN ], // Previous Stage Move - [ 1, Moves.BOUNCE ], // Previous Stage Move - [ 1, Moves.HAZE ], - [ 1, Moves.MAT_BLOCK ], - [ 1, Moves.ROLE_PLAY ], - [ 1, Moves.NIGHT_SLASH ], - [ 10, Moves.LICK ], - [ 14, Moves.WATER_PULSE ], - [ 19, Moves.SMOKESCREEN ], - [ 23, Moves.SHADOW_SNEAK ], - [ 28, Moves.SPIKES ], - [ 33, Moves.AERIAL_ACE ], - [ 42, Moves.SUBSTITUTE ], - [ 49, Moves.EXTRASENSORY ], - [ 56, Moves.DOUBLE_TEAM ], - [ 68, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, MoveId.WATER_SHURIKEN ], + [ 1, MoveId.POUND ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.WATER_GUN ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.ROUND ], // Previous Stage Move + [ 1, MoveId.FLING ], // Previous Stage Move + [ 1, MoveId.SMACK_DOWN ], // Previous Stage Move + [ 1, MoveId.BOUNCE ], // Previous Stage Move + [ 1, MoveId.HAZE ], + [ 1, MoveId.MAT_BLOCK ], + [ 1, MoveId.ROLE_PLAY ], + [ 1, MoveId.NIGHT_SLASH ], + [ 10, MoveId.LICK ], + [ 14, MoveId.WATER_PULSE ], + [ 19, MoveId.SMOKESCREEN ], + [ 23, MoveId.SHADOW_SNEAK ], + [ 28, MoveId.SPIKES ], + [ 33, MoveId.AERIAL_ACE ], + [ 42, MoveId.SUBSTITUTE ], + [ 49, MoveId.EXTRASENSORY ], + [ 56, MoveId.DOUBLE_TEAM ], + [ 68, MoveId.HYDRO_PUMP ], ], }, [Species.LYCANROC]: { 1: [ - [ EVOLVE_MOVE, Moves.COUNTER ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.ENDURE ], - [ 1, Moves.TAUNT ], - [ 12, Moves.ROCK_THROW ], - [ 16, Moves.HOWL ], - [ 20, Moves.BITE ], - [ 24, Moves.ROCK_TOMB ], - [ 30, Moves.ROAR ], - [ 36, Moves.ROCK_SLIDE ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.SCARY_FACE ], - [ 54, Moves.STEALTH_ROCK ], - [ 60, Moves.STONE_EDGE ], + [ EVOLVE_MOVE, MoveId.COUNTER ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.TAUNT ], + [ 12, MoveId.ROCK_THROW ], + [ 16, MoveId.HOWL ], + [ 20, MoveId.BITE ], + [ 24, MoveId.ROCK_TOMB ], + [ 30, MoveId.ROAR ], + [ 36, MoveId.ROCK_SLIDE ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.SCARY_FACE ], + [ 54, MoveId.STEALTH_ROCK ], + [ 60, MoveId.STONE_EDGE ], ], 2: [ - [ EVOLVE_MOVE, Moves.CRUSH_CLAW ], - [ 1, Moves.SAND_ATTACK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.LEER ], - [ 1, Moves.COUNTER ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DOUBLE_TEAM ], - [ 1, Moves.REVERSAL ], - [ 1, Moves.ENDURE ], - [ 1, Moves.TAUNT ], - [ 1, Moves.SUCKER_PUNCH ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.ACCELEROCK ], - [ 12, Moves.ROCK_THROW ], - [ 16, Moves.HOWL ], - [ 20, Moves.BITE ], - [ 24, Moves.ROCK_TOMB ], - [ 30, Moves.ROAR ], - [ 36, Moves.ROCK_SLIDE ], - [ 42, Moves.CRUNCH ], - [ 48, Moves.SCARY_FACE ], - [ 54, Moves.STEALTH_ROCK ], - [ 60, Moves.STONE_EDGE ], + [ EVOLVE_MOVE, MoveId.CRUSH_CLAW ], + [ 1, MoveId.SAND_ATTACK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.LEER ], + [ 1, MoveId.COUNTER ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.DOUBLE_TEAM ], + [ 1, MoveId.REVERSAL ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.ACCELEROCK ], + [ 12, MoveId.ROCK_THROW ], + [ 16, MoveId.HOWL ], + [ 20, MoveId.BITE ], + [ 24, MoveId.ROCK_TOMB ], + [ 30, MoveId.ROAR ], + [ 36, MoveId.ROCK_SLIDE ], + [ 42, MoveId.CRUNCH ], + [ 48, MoveId.SCARY_FACE ], + [ 54, MoveId.STEALTH_ROCK ], + [ 60, MoveId.STONE_EDGE ], ], }, [Species.NECROZMA]: { 1: [ - [ EVOLVE_MOVE, Moves.SUNSTEEL_STRIKE ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.CHARGE_BEAM ], - [ 8, Moves.STEALTH_ROCK ], - [ 16, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 32, Moves.PSYCHO_CUT ], - [ 40, Moves.STORED_POWER ], - [ 48, Moves.ROCK_BLAST ], - [ 56, Moves.IRON_DEFENSE ], - [ 64, Moves.POWER_GEM ], - [ 72, Moves.PHOTON_GEYSER ], - [ 80, Moves.AUTOTOMIZE ], - [ 88, Moves.PRISMATIC_LASER ], + [ EVOLVE_MOVE, MoveId.SUNSTEEL_STRIKE ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.CHARGE_BEAM ], + [ 8, MoveId.STEALTH_ROCK ], + [ 16, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 32, MoveId.PSYCHO_CUT ], + [ 40, MoveId.STORED_POWER ], + [ 48, MoveId.ROCK_BLAST ], + [ 56, MoveId.IRON_DEFENSE ], + [ 64, MoveId.POWER_GEM ], + [ 72, MoveId.PHOTON_GEYSER ], + [ 80, MoveId.AUTOTOMIZE ], + [ 88, MoveId.PRISMATIC_LASER ], ], 2: [ - [ EVOLVE_MOVE, Moves.MOONGEIST_BEAM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.CHARGE_BEAM ], - [ 8, Moves.STEALTH_ROCK ], - [ 16, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 32, Moves.PSYCHO_CUT ], - [ 40, Moves.STORED_POWER ], - [ 48, Moves.ROCK_BLAST ], - [ 56, Moves.IRON_DEFENSE ], - [ 64, Moves.POWER_GEM ], - [ 72, Moves.PHOTON_GEYSER ], - [ 80, Moves.AUTOTOMIZE ], - [ 88, Moves.PRISMATIC_LASER ], + [ EVOLVE_MOVE, MoveId.MOONGEIST_BEAM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.CHARGE_BEAM ], + [ 8, MoveId.STEALTH_ROCK ], + [ 16, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 32, MoveId.PSYCHO_CUT ], + [ 40, MoveId.STORED_POWER ], + [ 48, MoveId.ROCK_BLAST ], + [ 56, MoveId.IRON_DEFENSE ], + [ 64, MoveId.POWER_GEM ], + [ 72, MoveId.PHOTON_GEYSER ], + [ 80, MoveId.AUTOTOMIZE ], + [ 88, MoveId.PRISMATIC_LASER ], ], 3: [ - [ EVOLVE_MOVE, Moves.SUNSTEEL_STRIKE ], - [ EVOLVE_MOVE, Moves.MOONGEIST_BEAM ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.MORNING_SUN ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.CHARGE_BEAM ], - [ 8, Moves.STEALTH_ROCK ], - [ 16, Moves.SLASH ], - [ 24, Moves.NIGHT_SLASH ], - [ 32, Moves.PSYCHO_CUT ], - [ 40, Moves.STORED_POWER ], - [ 48, Moves.ROCK_BLAST ], - [ 56, Moves.IRON_DEFENSE ], - [ 64, Moves.POWER_GEM ], - [ 72, Moves.PHOTON_GEYSER ], - [ 80, Moves.AUTOTOMIZE ], - [ 88, Moves.PRISMATIC_LASER ], + [ EVOLVE_MOVE, MoveId.SUNSTEEL_STRIKE ], + [ EVOLVE_MOVE, MoveId.MOONGEIST_BEAM ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.MORNING_SUN ], + [ 1, MoveId.MOONLIGHT ], + [ 1, MoveId.GRAVITY ], + [ 1, MoveId.CHARGE_BEAM ], + [ 8, MoveId.STEALTH_ROCK ], + [ 16, MoveId.SLASH ], + [ 24, MoveId.NIGHT_SLASH ], + [ 32, MoveId.PSYCHO_CUT ], + [ 40, MoveId.STORED_POWER ], + [ 48, MoveId.ROCK_BLAST ], + [ 56, MoveId.IRON_DEFENSE ], + [ 64, MoveId.POWER_GEM ], + [ 72, MoveId.PHOTON_GEYSER ], + [ 80, MoveId.AUTOTOMIZE ], + [ 88, MoveId.PRISMATIC_LASER ], ], }, [Species.TOXTRICITY]: { 1: [ - [ EVOLVE_MOVE, Moves.SPARK ], - [ 1, Moves.LEER ], - [ 1, Moves.GROWL ], - [ 1, Moves.ACID ], - [ 1, Moves.THUNDER_SHOCK ], - [ 1, Moves.FLAIL ], - [ 1, Moves.ACID_SPRAY ], - [ 1, Moves.BELCH ], - [ 1, Moves.NOBLE_ROAR ], - [ 1, Moves.NUZZLE ], - [ 1, Moves.TEARFUL_LOOK ], - [ 4, Moves.CHARGE ], - [ 8, Moves.SHOCK_WAVE ], - [ 12, Moves.SCARY_FACE ], - [ 16, Moves.TAUNT ], - [ 24, Moves.SCREECH ], - [ 28, Moves.SWAGGER ], - [ 32, Moves.TOXIC ], - [ 36, Moves.DISCHARGE ], - [ 40, Moves.POISON_JAB ], - [ 44, Moves.OVERDRIVE ], - [ 48, Moves.BOOMBURST ], - [ 52, Moves.MAGNETIC_FLUX ], + [ EVOLVE_MOVE, MoveId.SPARK ], + [ 1, MoveId.LEER ], + [ 1, MoveId.GROWL ], + [ 1, MoveId.ACID ], + [ 1, MoveId.THUNDER_SHOCK ], + [ 1, MoveId.FLAIL ], + [ 1, MoveId.ACID_SPRAY ], + [ 1, MoveId.BELCH ], + [ 1, MoveId.NOBLE_ROAR ], + [ 1, MoveId.NUZZLE ], + [ 1, MoveId.TEARFUL_LOOK ], + [ 4, MoveId.CHARGE ], + [ 8, MoveId.SHOCK_WAVE ], + [ 12, MoveId.SCARY_FACE ], + [ 16, MoveId.TAUNT ], + [ 24, MoveId.SCREECH ], + [ 28, MoveId.SWAGGER ], + [ 32, MoveId.TOXIC ], + [ 36, MoveId.DISCHARGE ], + [ 40, MoveId.POISON_JAB ], + [ 44, MoveId.OVERDRIVE ], + [ 48, MoveId.BOOMBURST ], + [ 52, MoveId.MAGNETIC_FLUX ], ], }, [Species.INDEEDEE]: { 1: [ - [ 1, Moves.STORED_POWER ], - [ 1, Moves.PLAY_NICE ], - [ 5, Moves.BATON_PASS ], - [ 10, Moves.DISARMING_VOICE ], - [ 15, Moves.PSYBEAM ], - [ 20, Moves.HELPING_HAND ], - [ 25, Moves.FOLLOW_ME ], - [ 30, Moves.HEALING_WISH ], - [ 35, Moves.PSYCHIC ], - [ 40, Moves.CALM_MIND ], - [ 45, Moves.GUARD_SPLIT ], - [ 50, Moves.PSYCHIC_TERRAIN ], + [ 1, MoveId.STORED_POWER ], + [ 1, MoveId.PLAY_NICE ], + [ 5, MoveId.BATON_PASS ], + [ 10, MoveId.DISARMING_VOICE ], + [ 15, MoveId.PSYBEAM ], + [ 20, MoveId.HELPING_HAND ], + [ 25, MoveId.FOLLOW_ME ], + [ 30, MoveId.HEALING_WISH ], + [ 35, MoveId.PSYCHIC ], + [ 40, MoveId.CALM_MIND ], + [ 45, MoveId.GUARD_SPLIT ], + [ 50, MoveId.PSYCHIC_TERRAIN ], ], }, [Species.ZACIAN]: { 1: [ - [ EVOLVE_MOVE, Moves.BEHEMOTH_BLADE ], - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.HOWL ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.SACRED_SWORD ], - [ 11, Moves.SLASH ], - [ 22, Moves.SWORDS_DANCE ], - [ 33, Moves.IRON_HEAD ], - [ 44, Moves.NOBLE_ROAR ], - [ 55, Moves.CRUNCH ], - [ 66, Moves.MOONBLAST ], - [ 77, Moves.CLOSE_COMBAT ], - [ 88, Moves.GIGA_IMPACT ], + [ EVOLVE_MOVE, MoveId.BEHEMOTH_BLADE ], + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.QUICK_GUARD ], + [ 1, MoveId.SACRED_SWORD ], + [ 11, MoveId.SLASH ], + [ 22, MoveId.SWORDS_DANCE ], + [ 33, MoveId.IRON_HEAD ], + [ 44, MoveId.NOBLE_ROAR ], + [ 55, MoveId.CRUNCH ], + [ 66, MoveId.MOONBLAST ], + [ 77, MoveId.CLOSE_COMBAT ], + [ 88, MoveId.GIGA_IMPACT ], ], }, [Species.ZAMAZENTA]: { 1: [ - [ EVOLVE_MOVE, Moves.BEHEMOTH_BASH ], - [ 1, Moves.BITE ], - [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.METAL_CLAW ], - [ 1, Moves.HOWL ], - [ 1, Moves.WIDE_GUARD ], - [ 11, Moves.SLASH ], - [ 22, Moves.IRON_DEFENSE ], - [ 33, Moves.IRON_HEAD ], - [ 44, Moves.METAL_BURST ], - [ 55, Moves.CRUNCH ], - [ 66, Moves.MOONBLAST ], - [ 77, Moves.CLOSE_COMBAT ], - [ 88, Moves.GIGA_IMPACT ], + [ EVOLVE_MOVE, MoveId.BEHEMOTH_BASH ], + [ 1, MoveId.BITE ], + [ 1, MoveId.QUICK_ATTACK ], + [ 1, MoveId.METAL_CLAW ], + [ 1, MoveId.HOWL ], + [ 1, MoveId.WIDE_GUARD ], + [ 11, MoveId.SLASH ], + [ 22, MoveId.IRON_DEFENSE ], + [ 33, MoveId.IRON_HEAD ], + [ 44, MoveId.METAL_BURST ], + [ 55, MoveId.CRUNCH ], + [ 66, MoveId.MOONBLAST ], + [ 77, MoveId.CLOSE_COMBAT ], + [ 88, MoveId.GIGA_IMPACT ], ], }, [Species.ETERNATUS]: { 1: [ - [ 1, Moves.AGILITY ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.POISON_TAIL ], - [ 1, Moves.DRAGON_TAIL ], - [ 8, Moves.TOXIC ], - [ 16, Moves.VENOSHOCK ], - [ 24, Moves.DRAGON_DANCE ], - [ 32, Moves.CROSS_POISON ], - [ 40, Moves.DRAGON_PULSE ], - [ 48, Moves.FLAMETHROWER ], - [ 56, Moves.DYNAMAX_CANNON ], - [ 64, Moves.COSMIC_POWER ], - [ 72, Moves.RECOVER ], - [ 80, Moves.HYPER_BEAM ], - [ 88, Moves.ETERNABEAM ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.POISON_TAIL ], + [ 1, MoveId.DRAGON_TAIL ], + [ 8, MoveId.TOXIC ], + [ 16, MoveId.VENOSHOCK ], + [ 24, MoveId.DRAGON_DANCE ], + [ 32, MoveId.CROSS_POISON ], + [ 40, MoveId.DRAGON_PULSE ], + [ 48, MoveId.FLAMETHROWER ], + [ 56, MoveId.DYNAMAX_CANNON ], + [ 64, MoveId.COSMIC_POWER ], + [ 72, MoveId.RECOVER ], + [ 80, MoveId.HYPER_BEAM ], + [ 88, MoveId.ETERNABEAM ], ], }, [Species.URSHIFU]: { 1: [ - [ EVOLVE_MOVE, Moves.SURGING_STRIKES ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ENDURE ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.AQUA_JET ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.DETECT ], - [ 32, Moves.BULK_UP ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.DYNAMIC_PUNCH ], - [ 44, Moves.COUNTER ], - [ 48, Moves.CLOSE_COMBAT ], - [ 52, Moves.FOCUS_PUNCH ], + [ EVOLVE_MOVE, MoveId.SURGING_STRIKES ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.AQUA_JET ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.BULK_UP ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.DYNAMIC_PUNCH ], + [ 44, MoveId.COUNTER ], + [ 48, MoveId.CLOSE_COMBAT ], + [ 52, MoveId.FOCUS_PUNCH ], ], 2: [ - [ EVOLVE_MOVE, Moves.WICKED_BLOW ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ENDURE ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.SUCKER_PUNCH ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.DETECT ], - [ 32, Moves.BULK_UP ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.DYNAMIC_PUNCH ], - [ 44, Moves.COUNTER ], - [ 48, Moves.CLOSE_COMBAT ], - [ 52, Moves.FOCUS_PUNCH ], + [ EVOLVE_MOVE, MoveId.WICKED_BLOW ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.SUCKER_PUNCH ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.BULK_UP ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.DYNAMIC_PUNCH ], + [ 44, MoveId.COUNTER ], + [ 48, MoveId.CLOSE_COMBAT ], + [ 52, MoveId.FOCUS_PUNCH ], ], 3: [ - [ EVOLVE_MOVE, Moves.SURGING_STRIKES ], - [ 1, Moves.LEER ], - [ 1, Moves.FOCUS_ENERGY ], - [ 1, Moves.ENDURE ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.AQUA_JET ], - [ 12, Moves.AERIAL_ACE ], - [ 16, Moves.SCARY_FACE ], - [ 20, Moves.HEADBUTT ], - [ 24, Moves.BRICK_BREAK ], - [ 28, Moves.DETECT ], - [ 32, Moves.BULK_UP ], - [ 36, Moves.IRON_HEAD ], - [ 40, Moves.DYNAMIC_PUNCH ], - [ 44, Moves.COUNTER ], - [ 48, Moves.CLOSE_COMBAT ], - [ 52, Moves.FOCUS_PUNCH ], + [ EVOLVE_MOVE, MoveId.SURGING_STRIKES ], + [ 1, MoveId.LEER ], + [ 1, MoveId.FOCUS_ENERGY ], + [ 1, MoveId.ENDURE ], + [ 1, MoveId.ROCK_SMASH ], + [ 1, MoveId.AQUA_JET ], + [ 12, MoveId.AERIAL_ACE ], + [ 16, MoveId.SCARY_FACE ], + [ 20, MoveId.HEADBUTT ], + [ 24, MoveId.BRICK_BREAK ], + [ 28, MoveId.DETECT ], + [ 32, MoveId.BULK_UP ], + [ 36, MoveId.IRON_HEAD ], + [ 40, MoveId.DYNAMIC_PUNCH ], + [ 44, MoveId.COUNTER ], + [ 48, MoveId.CLOSE_COMBAT ], + [ 52, MoveId.FOCUS_PUNCH ], ], }, [Species.CALYREX]: { 1: [ - [ 1, Moves.POUND ], - [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.STOMP ], - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.THRASH ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.MIST ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.TORMENT ], - [ 1, Moves.TAUNT ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.AVALANCHE ], - [ 1, Moves.ICICLE_CRASH ], - [ 1, Moves.GLACIAL_LANCE ], - [ 8, Moves.LIFE_DEW ], - [ 16, Moves.GIGA_DRAIN ], - [ 24, Moves.PSYSHOCK ], - [ 32, Moves.HELPING_HAND ], - [ 40, Moves.AROMATHERAPY ], - [ 40, Moves.GRASSY_TERRAIN ], - [ 48, Moves.ENERGY_BALL ], - [ 56, Moves.PSYCHIC ], - [ 64, Moves.LEECH_SEED ], - [ 72, Moves.HEAL_PULSE ], - [ 80, Moves.SOLAR_BEAM ], - [ 88, Moves.FUTURE_SIGHT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.SWORDS_DANCE ], + [ 1, MoveId.STOMP ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.THRASH ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.MIST ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.TORMENT ], + [ 1, MoveId.TAUNT ], + [ 1, MoveId.IRON_DEFENSE ], + [ 1, MoveId.AVALANCHE ], + [ 1, MoveId.ICICLE_CRASH ], + [ 1, MoveId.GLACIAL_LANCE ], + [ 8, MoveId.LIFE_DEW ], + [ 16, MoveId.GIGA_DRAIN ], + [ 24, MoveId.PSYSHOCK ], + [ 32, MoveId.HELPING_HAND ], + [ 40, MoveId.AROMATHERAPY ], + [ 40, MoveId.GRASSY_TERRAIN ], + [ 48, MoveId.ENERGY_BALL ], + [ 56, MoveId.PSYCHIC ], + [ 64, MoveId.LEECH_SEED ], + [ 72, MoveId.HEAL_PULSE ], + [ 80, MoveId.SOLAR_BEAM ], + [ 88, MoveId.FUTURE_SIGHT ], ], 2: [ - [ 1, Moves.POUND ], - [ 1, Moves.STOMP ], - [ 1, Moves.DOUBLE_KICK ], - [ 1, Moves.TACKLE ], - [ 1, Moves.TAKE_DOWN ], - [ 1, Moves.THRASH ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.DISABLE ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.CONFUSION ], - [ 1, Moves.AGILITY ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.HAZE ], - [ 1, Moves.SHADOW_BALL ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.HEX ], - [ 1, Moves.ASTRAL_BARRAGE ], - [ 8, Moves.LIFE_DEW ], - [ 16, Moves.GIGA_DRAIN ], - [ 24, Moves.PSYSHOCK ], - [ 32, Moves.HELPING_HAND ], - [ 40, Moves.GRASSY_TERRAIN ], - [ 40, Moves.PSYCHIC_TERRAIN ], - [ 48, Moves.ENERGY_BALL ], - [ 56, Moves.PSYCHIC ], - [ 64, Moves.LEECH_SEED ], - [ 72, Moves.HEAL_PULSE ], - [ 80, Moves.SOLAR_BEAM ], - [ 88, Moves.FUTURE_SIGHT ], + [ 1, MoveId.POUND ], + [ 1, MoveId.STOMP ], + [ 1, MoveId.DOUBLE_KICK ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAKE_DOWN ], + [ 1, MoveId.THRASH ], + [ 1, MoveId.DOUBLE_EDGE ], + [ 1, MoveId.TAIL_WHIP ], + [ 1, MoveId.DISABLE ], + [ 1, MoveId.MEGA_DRAIN ], + [ 1, MoveId.GROWTH ], + [ 1, MoveId.CONFUSION ], + [ 1, MoveId.AGILITY ], + [ 1, MoveId.CONFUSE_RAY ], + [ 1, MoveId.HAZE ], + [ 1, MoveId.SHADOW_BALL ], + [ 1, MoveId.NASTY_PLOT ], + [ 1, MoveId.HEX ], + [ 1, MoveId.ASTRAL_BARRAGE ], + [ 8, MoveId.LIFE_DEW ], + [ 16, MoveId.GIGA_DRAIN ], + [ 24, MoveId.PSYSHOCK ], + [ 32, MoveId.HELPING_HAND ], + [ 40, MoveId.GRASSY_TERRAIN ], + [ 40, MoveId.PSYCHIC_TERRAIN ], + [ 48, MoveId.ENERGY_BALL ], + [ 56, MoveId.PSYCHIC ], + [ 64, MoveId.LEECH_SEED ], + [ 72, MoveId.HEAL_PULSE ], + [ 80, MoveId.SOLAR_BEAM ], + [ 88, MoveId.FUTURE_SIGHT ], ], }, [Species.OINKOLOGNE]: { 1: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 3, Moves.DISARMING_VOICE ], - [ 6, Moves.ECHOED_VOICE ], - [ 9, Moves.MUD_SHOT ], - [ 12, Moves.COVET ], - [ 15, Moves.DIG ], - [ 17, Moves.HEADBUTT ], - [ 23, Moves.YAWN ], - [ 28, Moves.TAKE_DOWN ], - [ 30, Moves.WORK_UP ], - [ 34, Moves.UPROAR ], - [ 39, Moves.DOUBLE_EDGE ], - [ 45, Moves.EARTH_POWER ], - [ 51, Moves.BELCH ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 3, MoveId.DISARMING_VOICE ], + [ 6, MoveId.ECHOED_VOICE ], + [ 9, MoveId.MUD_SHOT ], + [ 12, MoveId.COVET ], + [ 15, MoveId.DIG ], + [ 17, MoveId.HEADBUTT ], + [ 23, MoveId.YAWN ], + [ 28, MoveId.TAKE_DOWN ], + [ 30, MoveId.WORK_UP ], + [ 34, MoveId.UPROAR ], + [ 39, MoveId.DOUBLE_EDGE ], + [ 45, MoveId.EARTH_POWER ], + [ 51, MoveId.BELCH ], ], }, [Species.REVAVROOM]: { 1: [ - [ EVOLVE_MOVE, Moves.WICKED_TORQUE ], - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.WICKED_TORQUE ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], 2: [ - [ EVOLVE_MOVE, Moves.BLAZING_TORQUE ], - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.BLAZING_TORQUE ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], 3: [ - [ EVOLVE_MOVE, Moves.NOXIOUS_TORQUE ], - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.NOXIOUS_TORQUE ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], 4: [ - [ EVOLVE_MOVE, Moves.MAGICAL_TORQUE ], - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.MAGICAL_TORQUE ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], 5: [ - [ EVOLVE_MOVE, Moves.COMBAT_TORQUE ], - [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], - [ 1, Moves.LICK ], - [ 1, Moves.POISON_GAS ], - [ 1, Moves.MAGNET_RISE ], - [ 4, Moves.SMOG ], - [ 7, Moves.TAUNT ], - [ 10, Moves.ASSURANCE ], - [ 13, Moves.SLUDGE ], - [ 17, Moves.GYRO_BALL ], - [ 21, Moves.HEADBUTT ], - [ 25, Moves.SCREECH ], - [ 28, Moves.IRON_HEAD ], - [ 32, Moves.SWAGGER ], - [ 36, Moves.POISON_JAB ], - [ 46, Moves.UPROAR ], - [ 52, Moves.SPIN_OUT ], - [ 58, Moves.GUNK_SHOT ], + [ EVOLVE_MOVE, MoveId.COMBAT_TORQUE ], + [ EVOLVE_MOVE, MoveId.SHIFT_GEAR ], + [ 1, MoveId.LICK ], + [ 1, MoveId.POISON_GAS ], + [ 1, MoveId.MAGNET_RISE ], + [ 4, MoveId.SMOG ], + [ 7, MoveId.TAUNT ], + [ 10, MoveId.ASSURANCE ], + [ 13, MoveId.SLUDGE ], + [ 17, MoveId.GYRO_BALL ], + [ 21, MoveId.HEADBUTT ], + [ 25, MoveId.SCREECH ], + [ 28, MoveId.IRON_HEAD ], + [ 32, MoveId.SWAGGER ], + [ 36, MoveId.POISON_JAB ], + [ 46, MoveId.UPROAR ], + [ 52, MoveId.SPIN_OUT ], + [ 58, MoveId.GUNK_SHOT ], ], }, [Species.PALDEA_TAUROS]: { 1: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.WORK_UP ], - [ 10, Moves.DOUBLE_KICK ], - [ 15, Moves.FLAME_CHARGE ], - [ 20, Moves.HEADBUTT ], - [ 25, Moves.SCARY_FACE ], - [ 30, Moves.ZEN_HEADBUTT ], - [ 35, Moves.RAGING_BULL ], - [ 40, Moves.REST ], - [ 45, Moves.SWAGGER ], - [ 50, Moves.THRASH ], - [ 55, Moves.FLARE_BLITZ ], - [ 60, Moves.CLOSE_COMBAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.WORK_UP ], + [ 10, MoveId.DOUBLE_KICK ], + [ 15, MoveId.FLAME_CHARGE ], + [ 20, MoveId.HEADBUTT ], + [ 25, MoveId.SCARY_FACE ], + [ 30, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.RAGING_BULL ], + [ 40, MoveId.REST ], + [ 45, MoveId.SWAGGER ], + [ 50, MoveId.THRASH ], + [ 55, MoveId.FLARE_BLITZ ], + [ 60, MoveId.CLOSE_COMBAT ], ], 2: [ - [ 1, Moves.TACKLE ], - [ 1, Moves.TAIL_WHIP ], - [ 5, Moves.WORK_UP ], - [ 10, Moves.DOUBLE_KICK ], - [ 15, Moves.AQUA_JET ], - [ 20, Moves.HEADBUTT ], - [ 25, Moves.SCARY_FACE ], - [ 30, Moves.ZEN_HEADBUTT ], - [ 35, Moves.RAGING_BULL ], - [ 40, Moves.REST ], - [ 45, Moves.SWAGGER ], - [ 50, Moves.THRASH ], - [ 55, Moves.WAVE_CRASH ], - [ 60, Moves.CLOSE_COMBAT ], + [ 1, MoveId.TACKLE ], + [ 1, MoveId.TAIL_WHIP ], + [ 5, MoveId.WORK_UP ], + [ 10, MoveId.DOUBLE_KICK ], + [ 15, MoveId.AQUA_JET ], + [ 20, MoveId.HEADBUTT ], + [ 25, MoveId.SCARY_FACE ], + [ 30, MoveId.ZEN_HEADBUTT ], + [ 35, MoveId.RAGING_BULL ], + [ 40, MoveId.REST ], + [ 45, MoveId.SWAGGER ], + [ 50, MoveId.THRASH ], + [ 55, MoveId.WAVE_CRASH ], + [ 60, MoveId.CLOSE_COMBAT ], ] } }; diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index 06d191c3b2a..473d14e0652 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -1,12 +1,12 @@ import { ModifierTier } from "#app/modifier/modifier-tier"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; interface TmSpecies { [key: number]: Array> } -export const reverseCompatibleTms: Moves[] = [];/*[ +export const reverseCompatibleTms: MoveId[] = [];/*[ Moves.TAKE_DOWN, Moves.TOXIC, Moves.RAGE, @@ -32,7 +32,7 @@ export const reverseCompatibleTms: Moves[] = [];/*[ ];*/ export const tmSpecies: TmSpecies = { - [Moves.MEGA_PUNCH]: [ + [MoveId.MEGA_PUNCH]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -257,7 +257,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_DARUMAKA, Species.GALAR_DARMANITAN, ], - [Moves.PAY_DAY]: [ + [MoveId.PAY_DAY]: [ Species.PIKACHU, Species.RAICHU, Species.NIDOQUEEN, @@ -315,7 +315,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, ], - [Moves.FIRE_PUNCH]: [ + [MoveId.FIRE_PUNCH]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -502,7 +502,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.BLOODMOON_URSALUNA, ], - [Moves.ICE_PUNCH]: [ + [MoveId.ICE_PUNCH]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -698,7 +698,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_DARMANITAN, Species.BLOODMOON_URSALUNA, ], - [Moves.THUNDER_PUNCH]: [ + [MoveId.THUNDER_PUNCH]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -922,7 +922,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.BLOODMOON_URSALUNA, ], - [Moves.SWORDS_DANCE]: [ + [MoveId.SWORDS_DANCE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -1223,7 +1223,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.BLOODMOON_URSALUNA, ], - [Moves.CUT]: [ + [MoveId.CUT]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -1501,7 +1501,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.BLOODMOON_URSALUNA, ], - [Moves.FLY]: [ + [MoveId.FLY]: [ Species.CHARIZARD, Species.PIDGEY, Species.PIDGEOTTO, @@ -1613,7 +1613,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_MOLTRES, Species.HISUI_BRAVIARY, ], - [Moves.MEGA_KICK]: [ + [MoveId.MEGA_KICK]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -1844,7 +1844,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_DARMANITAN, Species.HISUI_LILLIGANT, ], - [Moves.BODY_SLAM]: [ + [MoveId.BODY_SLAM]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -2461,7 +2461,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.TAKE_DOWN]: [ + [MoveId.TAKE_DOWN]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -3153,7 +3153,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_TAUROS, Species.PALDEA_WOOPER, ], - [Moves.DOUBLE_EDGE]: [ + [MoveId.DOUBLE_EDGE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -3756,7 +3756,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.PIN_MISSILE]: [ + [MoveId.PIN_MISSILE]: [ Species.BEEDRILL, Species.SANDSLASH, Species.CLOYSTER, @@ -3806,7 +3806,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_LINOONE, Species.HISUI_QWILFISH, ], - [Moves.ROAR]: [ + [MoveId.ROAR]: [ Species.VENUSAUR, Species.CHARMANDER, Species.CHARMELEON, @@ -4045,7 +4045,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.BLOODMOON_URSALUNA, ], - [Moves.FLAMETHROWER]: [ + [MoveId.FLAMETHROWER]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -4272,7 +4272,7 @@ export const tmSpecies: TmSpecies = { "blaze", ], ], - [Moves.HYDRO_PUMP]: [ + [MoveId.HYDRO_PUMP]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -4469,7 +4469,7 @@ export const tmSpecies: TmSpecies = { ], Species.PALDEA_WOOPER, ], - [Moves.SURF]: [ + [MoveId.SURF]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -4718,7 +4718,7 @@ export const tmSpecies: TmSpecies = { ], Species.PALDEA_WOOPER, ], - [Moves.ICE_BEAM]: [ + [MoveId.ICE_BEAM]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -5020,7 +5020,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.HISUI_AVALUGG, ], - [Moves.BLIZZARD]: [ + [MoveId.BLIZZARD]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -5305,7 +5305,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.HISUI_AVALUGG, ], - [Moves.PSYBEAM]: [ + [MoveId.PSYBEAM]: [ Species.BUTTERFREE, Species.CLEFAIRY, Species.CLEFABLE, @@ -5433,7 +5433,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.HISUI_BRAVIARY, ], - [Moves.HYPER_BEAM]: [ + [MoveId.HYPER_BEAM]: [ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, @@ -6028,7 +6028,7 @@ export const tmSpecies: TmSpecies = { "red-striped", ] ], - [Moves.LOW_KICK]: [ + [MoveId.LOW_KICK]: [ Species.SANDSHREW, Species.SANDSLASH, Species.PSYDUCK, @@ -6255,7 +6255,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.COUNTER]: [ + [MoveId.COUNTER]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -6478,7 +6478,7 @@ export const tmSpecies: TmSpecies = { Species.OGERPON, Species.IRON_BOULDER, ], - [Moves.STRENGTH]: [ + [MoveId.STRENGTH]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -6862,7 +6862,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_TAUROS, Species.BLOODMOON_URSALUNA, ], - [Moves.SOLAR_BEAM]: [ + [MoveId.SOLAR_BEAM]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -7190,7 +7190,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.FIRE_SPIN]: [ + [MoveId.FIRE_SPIN]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -7292,7 +7292,7 @@ export const tmSpecies: TmSpecies = { "blaze", ], ], - [Moves.THUNDERBOLT]: [ + [MoveId.THUNDERBOLT]: [ Species.RATTATA, Species.RATICATE, Species.PIKACHU, @@ -7568,7 +7568,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SLIGGOO, Species.HISUI_GOODRA, ], - [Moves.THUNDER_WAVE]: [ + [MoveId.THUNDER_WAVE]: [ Species.RATTATA, Species.RATICATE, Species.PIKACHU, @@ -7859,7 +7859,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_VOLTORB, Species.HISUI_ELECTRODE, ], - [Moves.THUNDER]: [ + [MoveId.THUNDER]: [ Species.RATTATA, Species.RATICATE, Species.PIKACHU, @@ -8102,7 +8102,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SLIGGOO, Species.HISUI_GOODRA, ], - [Moves.EARTHQUAKE]: [ + [MoveId.EARTHQUAKE]: [ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, @@ -8420,7 +8420,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.DIG]: [ + [MoveId.DIG]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -8845,7 +8845,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.TOXIC]: [ + [MoveId.TOXIC]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -9679,7 +9679,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SNEASEL, Species.PALDEA_WOOPER, ], - [Moves.PSYCHIC]: [ + [MoveId.PSYCHIC]: [ Species.BUTTERFREE, Species.CLEFAIRY, Species.CLEFABLE, @@ -9935,7 +9935,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.HISUI_BRAVIARY, ], - [Moves.AGILITY]: [ + [MoveId.AGILITY]: [ Species.BEEDRILL, Species.PIDGEY, Species.PIDGEOTTO, @@ -10232,7 +10232,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.HISUI_BRAVIARY, ], - [Moves.NIGHT_SHADE]: [ + [MoveId.NIGHT_SHADE]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.NINETALES, @@ -10341,7 +10341,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.SCREECH]: [ + [MoveId.SCREECH]: [ Species.RATTATA, Species.EKANS, Species.ARBOK, @@ -10572,7 +10572,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ELECTRODE, Species.HISUI_SNEASEL, ], - [Moves.DOUBLE_TEAM]: [ + [MoveId.DOUBLE_TEAM]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -11629,7 +11629,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.CONFUSE_RAY]: [ + [MoveId.CONFUSE_RAY]: [ Species.VULPIX, Species.NINETALES, Species.ZUBAT, @@ -11813,7 +11813,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.LIGHT_SCREEN]: [ + [MoveId.LIGHT_SCREEN]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -12141,7 +12141,7 @@ export const tmSpecies: TmSpecies = { "female", ], ], - [Moves.HAZE]: [ + [MoveId.HAZE]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -12272,7 +12272,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.PALDEA_WOOPER, ], - [Moves.REFLECT]: [ + [MoveId.REFLECT]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -12598,7 +12598,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_VOLTORB, Species.HISUI_ELECTRODE, ], - [Moves.FOCUS_ENERGY]: [ + [MoveId.FOCUS_ENERGY]: [ Species.BEEDRILL, Species.RATTATA, Species.RATICATE, @@ -12770,7 +12770,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_DARMANITAN, Species.HISUI_SAMUROTT, ], - [Moves.METRONOME]: [ + [MoveId.METRONOME]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -12912,7 +12912,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.HISUI_LILLIGANT, ], - [Moves.SELF_DESTRUCT]: [ + [MoveId.SELF_DESTRUCT]: [ Species.JIGGLYPUFF, Species.WIGGLYTUFF, Species.GEODUDE, @@ -13015,7 +13015,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ELECTRODE, Species.HISUI_QWILFISH, ], - [Moves.FIRE_BLAST]: [ + [MoveId.FIRE_BLAST]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -13220,7 +13220,7 @@ export const tmSpecies: TmSpecies = { "blaze", ], ], - [Moves.WATERFALL]: [ + [MoveId.WATERFALL]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -13378,7 +13378,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SAMUROTT, Species.PALDEA_WOOPER, ], - [Moves.SWIFT]: [ + [MoveId.SWIFT]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -13897,7 +13897,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.BLOODMOON_URSALUNA, ], - [Moves.AMNESIA]: [ + [MoveId.AMNESIA]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -14056,7 +14056,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_CORSOLA, Species.PALDEA_WOOPER, ], - [Moves.DREAM_EATER]: [ + [MoveId.DREAM_EATER]: [ Species.BUTTERFREE, Species.CLEFAIRY, Species.CLEFABLE, @@ -14244,7 +14244,7 @@ export const tmSpecies: TmSpecies = { Species.MAROWAK, Species.GALAR_ARTICUNO, ], - [Moves.LEECH_LIFE]: [ + [MoveId.LEECH_LIFE]: [ Species.EKANS, Species.ARBOK, Species.SANDSHREW, @@ -14323,7 +14323,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_SANDSHREW, Species.ALOLA_SANDSLASH, ], - [Moves.FLASH]: [ + [MoveId.FLASH]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -14644,7 +14644,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_AVALUGG, Species.PALDEA_WOOPER, ], - [Moves.EXPLOSION]: [ + [MoveId.EXPLOSION]: [ Species.GEODUDE, Species.GRAVELER, Species.GOLEM, @@ -14743,7 +14743,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_VOLTORB, Species.HISUI_ELECTRODE, ], - [Moves.REST]: [ + [MoveId.REST]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -15799,7 +15799,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.ROCK_SLIDE]: [ + [MoveId.ROCK_SLIDE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -16196,7 +16196,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.TRI_ATTACK]: [ + [MoveId.TRI_ATTACK]: [ Species.SPEAROW, Species.FEAROW, Species.CLEFAIRY, @@ -16253,7 +16253,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, ], - [Moves.SUPER_FANG]: [ + [MoveId.SUPER_FANG]: [ Species.RATTATA, Species.RATICATE, Species.SANDSHREW, @@ -16344,7 +16344,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_SANDSHREW, Species.ALOLA_SANDSLASH, ], - [Moves.SUBSTITUTE]: [ + [MoveId.SUBSTITUTE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -17402,7 +17402,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.THIEF]: [ + [MoveId.THIEF]: [ Species.BUTTERFREE, Species.BEEDRILL, Species.PIDGEY, @@ -17881,7 +17881,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_TAUROS, Species.BLOODMOON_URSALUNA, ], - [Moves.SNORE]: [ + [MoveId.SNORE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -18800,7 +18800,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_YAMASK, Species.GALAR_STUNFISK, ], - [Moves.CURSE]: [ + [MoveId.CURSE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -19289,7 +19289,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_TAUROS, Species.PALDEA_WOOPER, ], - [Moves.REVERSAL]: [ + [MoveId.REVERSAL]: [ Species.RATTATA, Species.RATICATE, Species.PIKACHU, @@ -19500,7 +19500,7 @@ export const tmSpecies: TmSpecies = { "red-striped", ], ], - [Moves.SPITE]: [ + [MoveId.SPITE]: [ Species.EKANS, Species.ARBOK, Species.VULPIX, @@ -19694,7 +19694,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.PROTECT]: [ + [MoveId.PROTECT]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -20756,7 +20756,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.SCARY_FACE]: [ + [MoveId.SCARY_FACE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -21096,7 +21096,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_TAUROS, Species.BLOODMOON_URSALUNA, ], - [Moves.SLUDGE_BOMB]: [ + [MoveId.SLUDGE_BOMB]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -21283,7 +21283,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.PALDEA_WOOPER, ], - [Moves.MUD_SLAP]: [ + [MoveId.MUD_SLAP]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -21765,7 +21765,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_STUNFISK, Species.PALDEA_WOOPER, ], - [Moves.SPIKES]: [ + [MoveId.SPIKES]: [ Species.SANDSHREW, Species.SANDSLASH, Species.SHELLDER, @@ -21853,7 +21853,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_QWILFISH, Species.PALDEA_WOOPER, ], - [Moves.ICY_WIND]: [ + [MoveId.ICY_WIND]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -22180,7 +22180,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_AVALUGG, ], - [Moves.OUTRAGE]: [ + [MoveId.OUTRAGE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -22355,7 +22355,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.PALDEA_TAUROS, ], - [Moves.SANDSTORM]: [ + [MoveId.SANDSTORM]: [ Species.CHARIZARD, Species.SANDSHREW, Species.SANDSLASH, @@ -22623,7 +22623,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_TAUROS, Species.PALDEA_WOOPER, ], - [Moves.GIGA_DRAIN]: [ + [MoveId.GIGA_DRAIN]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -22853,7 +22853,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.ENDURE]: [ + [MoveId.ENDURE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -23889,7 +23889,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.CHARM]: [ + [MoveId.CHARM]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -24124,7 +24124,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SLIGGOO, Species.HISUI_GOODRA, ], - [Moves.FALSE_SWIPE]: [ + [MoveId.FALSE_SWIPE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -24258,7 +24258,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SAMUROTT, Species.HISUI_DECIDUEYE, ], - [Moves.SWAGGER]: [ + [MoveId.SWAGGER]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -25082,7 +25082,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.PALDEA_TAUROS, ], - [Moves.STEEL_WING]: [ + [MoveId.STEEL_WING]: [ Species.CHARIZARD, Species.PIDGEY, Species.PIDGEOTTO, @@ -25185,7 +25185,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES, ], - [Moves.ATTRACT]: [ + [MoveId.ATTRACT]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -26096,7 +26096,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.SLEEP_TALK]: [ + [MoveId.SLEEP_TALK]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -27157,7 +27157,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.HEAL_BELL]: [ + [MoveId.HEAL_BELL]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -27240,7 +27240,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.ETERNAL_FLOETTE, ], - [Moves.RETURN]: [ + [MoveId.RETURN]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -28299,7 +28299,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.FRUSTRATION]: [ + [MoveId.FRUSTRATION]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -29358,7 +29358,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.SAFEGUARD]: [ + [MoveId.SAFEGUARD]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -29638,7 +29638,7 @@ export const tmSpecies: TmSpecies = { "female", ], ], - [Moves.PAIN_SPLIT]: [ + [MoveId.PAIN_SPLIT]: [ Species.ARBOK, Species.VULPIX, Species.NINETALES, @@ -29790,7 +29790,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.MEGAHORN]: [ + [MoveId.MEGAHORN]: [ Species.NIDOKING, Species.RAPIDASH, Species.SEEL, @@ -29837,7 +29837,7 @@ export const tmSpecies: TmSpecies = { ], Species.HISUI_SAMUROTT, ], - [Moves.BATON_PASS]: [ + [MoveId.BATON_PASS]: [ Species.BUTTERFREE, Species.CLEFAIRY, Species.CLEFABLE, @@ -30021,7 +30021,7 @@ export const tmSpecies: TmSpecies = { ], Species.HISUI_DECIDUEYE, ], - [Moves.ENCORE]: [ + [MoveId.ENCORE]: [ Species.PIKACHU, Species.RAICHU, Species.CLEFAIRY, @@ -30220,7 +30220,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SAMUROTT, Species.HISUI_LILLIGANT, ], - [Moves.IRON_TAIL]: [ + [MoveId.IRON_TAIL]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -30563,7 +30563,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SLIGGOO, Species.HISUI_GOODRA, ], - [Moves.METAL_CLAW]: [ + [MoveId.METAL_CLAW]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -30669,7 +30669,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.BLOODMOON_URSALUNA, ], - [Moves.SYNTHESIS]: [ + [MoveId.SYNTHESIS]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -30781,7 +30781,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.HIDDEN_POWER]: [ + [MoveId.HIDDEN_POWER]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -31842,7 +31842,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.RAIN_DANCE]: [ + [MoveId.RAIN_DANCE]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -32575,7 +32575,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.SUNNY_DAY]: [ + [MoveId.SUNNY_DAY]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -33292,7 +33292,7 @@ export const tmSpecies: TmSpecies = { ], Species.BLOODMOON_URSALUNA, ], - [Moves.CRUNCH]: [ + [MoveId.CRUNCH]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -33541,7 +33541,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_AVALUGG, Species.BLOODMOON_URSALUNA, ], - [Moves.PSYCH_UP]: [ + [MoveId.PSYCH_UP]: [ Species.BUTTERFREE, Species.CLEFAIRY, Species.CLEFABLE, @@ -33805,7 +33805,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, ], - [Moves.SHADOW_BALL]: [ + [MoveId.SHADOW_BALL]: [ Species.BUTTERFREE, Species.RATTATA, Species.RATICATE, @@ -34146,7 +34146,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.HISUI_BRAVIARY, ], - [Moves.FUTURE_SIGHT]: [ + [MoveId.FUTURE_SIGHT]: [ Species.PSYDUCK, Species.GOLDUCK, Species.KADABRA, @@ -34249,7 +34249,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_ARTICUNO, Species.GALAR_SLOWKING, ], - [Moves.ROCK_SMASH]: [ + [MoveId.ROCK_SMASH]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -34719,7 +34719,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.WHIRLPOOL]: [ + [MoveId.WHIRLPOOL]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -34905,7 +34905,7 @@ export const tmSpecies: TmSpecies = { "aqua", ], ], - [Moves.BEAT_UP]: [ + [MoveId.BEAT_UP]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -34974,7 +34974,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_DUGTRIO, Species.ALOLA_PERSIAN, ], - [Moves.UPROAR]: [ + [MoveId.UPROAR]: [ Species.PIDGEY, Species.PIDGEOTTO, Species.PIDGEOT, @@ -35304,7 +35304,7 @@ export const tmSpecies: TmSpecies = { ], Species.BLOODMOON_URSALUNA, ], - [Moves.HEAT_WAVE]: [ + [MoveId.HEAT_WAVE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -35465,7 +35465,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_TYPHLOSION, Species.HISUI_BRAVIARY, ], - [Moves.HAIL]: [ + [MoveId.HAIL]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -35650,7 +35650,7 @@ export const tmSpecies: TmSpecies = { "ice", ], ], - [Moves.TORMENT]: [ + [MoveId.TORMENT]: [ Species.EKANS, Species.ARBOK, Species.NIDOQUEEN, @@ -35849,7 +35849,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.WILL_O_WISP]: [ + [MoveId.WILL_O_WISP]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -36001,7 +36001,7 @@ export const tmSpecies: TmSpecies = { "blaze", ], ], - [Moves.FACADE]: [ + [MoveId.FACADE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -37044,7 +37044,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.FOCUS_PUNCH]: [ + [MoveId.FOCUS_PUNCH]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -37290,7 +37290,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.BLOODMOON_URSALUNA, ], - [Moves.NATURE_POWER]: [ + [MoveId.NATURE_POWER]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -37437,7 +37437,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.CHARGE]: [ + [MoveId.CHARGE]: [ Species.PIKACHU, Species.RAICHU, Species.MAGNEMITE, @@ -37515,7 +37515,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_VOLTORB, Species.HISUI_ELECTRODE, ], - [Moves.TAUNT]: [ + [MoveId.TAUNT]: [ Species.RATTATA, Species.RATICATE, Species.NIDOQUEEN, @@ -37896,7 +37896,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.BLOODMOON_URSALUNA, ], - [Moves.HELPING_HAND]: [ + [MoveId.HELPING_HAND]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -38449,7 +38449,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.TRICK]: [ + [MoveId.TRICK]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.ABRA, @@ -38626,7 +38626,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.SUPERPOWER]: [ + [MoveId.SUPERPOWER]: [ Species.NIDOQUEEN, Species.NIDOKING, Species.ARCANINE, @@ -38824,7 +38824,7 @@ export const tmSpecies: TmSpecies = { ], Species.HISUI_BRAVIARY, ], - [Moves.RECYCLE]: [ + [MoveId.RECYCLE]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -38941,7 +38941,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_VOLTORB, Species.HISUI_ELECTRODE, ], - [Moves.REVENGE]: [ + [MoveId.REVENGE]: [ Species.RATTATA, Species.RATICATE, Species.MANKEY, @@ -39074,7 +39074,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SAMUROTT, Species.GALAR_STUNFISK, ], - [Moves.BRICK_BREAK]: [ + [MoveId.BRICK_BREAK]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -39430,7 +39430,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.BLOODMOON_URSALUNA, ], - [Moves.KNOCK_OFF]: [ + [MoveId.KNOCK_OFF]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -39757,7 +39757,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.HISUI_DECIDUEYE, ], - [Moves.ENDEAVOR]: [ + [MoveId.ENDEAVOR]: [ Species.BEEDRILL, Species.RATTATA, Species.RATICATE, @@ -40080,7 +40080,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_TYPHLOSION, Species.PALDEA_TAUROS, ], - [Moves.SKILL_SWAP]: [ + [MoveId.SKILL_SWAP]: [ Species.BUTTERFREE, Species.CLEFAIRY, Species.CLEFABLE, @@ -40238,7 +40238,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.GALAR_YAMASK, ], - [Moves.IMPRISON]: [ + [MoveId.IMPRISON]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.VULPIX, @@ -40399,7 +40399,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.SECRET_POWER]: [ + [MoveId.SECRET_POWER]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -41458,7 +41458,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.DIVE]: [ + [MoveId.DIVE]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -41607,7 +41607,7 @@ export const tmSpecies: TmSpecies = { "rapid-strike", ], ], - [Moves.FEATHER_DANCE]: [ + [MoveId.FEATHER_DANCE]: [ Species.PIDGEY, Species.PIDGEOTTO, Species.PIDGEOT, @@ -41674,7 +41674,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.BLAZE_KICK]: [ + [MoveId.BLAZE_KICK]: [ Species.CHARIZARD, Species.HITMONLEE, Species.MEW, @@ -41696,7 +41696,7 @@ export const tmSpecies: TmSpecies = { Species.CINDERACE, Species.GALAR_ZAPDOS, ], - [Moves.HYPER_VOICE]: [ + [MoveId.HYPER_VOICE]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -41901,7 +41901,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.BLOODMOON_URSALUNA, ], - [Moves.BLAST_BURN]: [ + [MoveId.BLAST_BURN]: [ Species.CHARIZARD, Species.MEW, Species.TYPHLOSION, @@ -41914,7 +41914,7 @@ export const tmSpecies: TmSpecies = { Species.SKELEDIRGE, Species.HISUI_TYPHLOSION, ], - [Moves.HYDRO_CANNON]: [ + [MoveId.HYDRO_CANNON]: [ Species.BLASTOISE, Species.MEW, Species.FERALIGATR, @@ -41927,7 +41927,7 @@ export const tmSpecies: TmSpecies = { Species.QUAQUAVAL, Species.HISUI_SAMUROTT, ], - [Moves.WEATHER_BALL]: [ + [MoveId.WEATHER_BALL]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -42086,7 +42086,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_GOODRA, ], - [Moves.FAKE_TEARS]: [ + [MoveId.FAKE_TEARS]: [ Species.PIKACHU, Species.CLEFAIRY, Species.CLEFABLE, @@ -42221,7 +42221,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.AIR_CUTTER]: [ + [MoveId.AIR_CUTTER]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -42349,7 +42349,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.OVERHEAT]: [ + [MoveId.OVERHEAT]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -42465,7 +42465,7 @@ export const tmSpecies: TmSpecies = { "blaze", ], ], - [Moves.ROCK_TOMB]: [ + [MoveId.ROCK_TOMB]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -42872,7 +42872,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.METAL_SOUND]: [ + [MoveId.METAL_SOUND]: [ Species.MAGNEMITE, Species.MAGNETON, Species.VOLTORB, @@ -42953,7 +42953,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_MEOWTH, Species.GALAR_STUNFISK, ], - [Moves.COSMIC_POWER]: [ + [MoveId.COSMIC_POWER]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.STARYU, @@ -42995,7 +42995,7 @@ export const tmSpecies: TmSpecies = { Species.RELLOR, Species.RABSCA, ], - [Moves.SIGNAL_BEAM]: [ + [MoveId.SIGNAL_BEAM]: [ Species.BLASTOISE, Species.BUTTERFREE, Species.PIKACHU, @@ -43220,7 +43220,7 @@ export const tmSpecies: TmSpecies = { Species.FARIGIRAF, Species.ALOLA_RAICHU, ], - [Moves.SAND_TOMB]: [ + [MoveId.SAND_TOMB]: [ Species.SANDSHREW, Species.SANDSLASH, Species.NIDOQUEEN, @@ -43310,7 +43310,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_DIGLETT, Species.ALOLA_DUGTRIO, ], - [Moves.MUDDY_WATER]: [ + [MoveId.MUDDY_WATER]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -43417,7 +43417,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SLIGGOO, Species.HISUI_GOODRA, ], - [Moves.BULLET_SEED]: [ + [MoveId.BULLET_SEED]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -43560,7 +43560,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.AERIAL_ACE]: [ + [MoveId.AERIAL_ACE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -43915,7 +43915,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.ICICLE_SPEAR]: [ + [MoveId.ICICLE_SPEAR]: [ Species.SEEL, Species.DEWGONG, Species.SHELLDER, @@ -43976,7 +43976,7 @@ export const tmSpecies: TmSpecies = { ], Species.HISUI_AVALUGG, ], - [Moves.IRON_DEFENSE]: [ + [MoveId.IRON_DEFENSE]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -44241,7 +44241,7 @@ export const tmSpecies: TmSpecies = { ], Species.HISUI_AVALUGG, ], - [Moves.DRAGON_CLAW]: [ + [MoveId.DRAGON_CLAW]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -44323,7 +44323,7 @@ export const tmSpecies: TmSpecies = { Species.GOUGING_FIRE, Species.HISUI_GOODRA, ], - [Moves.FRENZY_PLANT]: [ + [MoveId.FRENZY_PLANT]: [ Species.VENUSAUR, Species.MEW, Species.MEGANIUM, @@ -44336,7 +44336,7 @@ export const tmSpecies: TmSpecies = { Species.MEOWSCARADA, Species.HISUI_DECIDUEYE, ], - [Moves.BULK_UP]: [ + [MoveId.BULK_UP]: [ Species.MANKEY, Species.PRIMEAPE, Species.POLIWRATH, @@ -44471,7 +44471,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.PALDEA_TAUROS, ], - [Moves.BOUNCE]: [ + [MoveId.BOUNCE]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -44599,7 +44599,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_ZAPDOS, Species.GALAR_STUNFISK, ], - [Moves.MUD_SHOT]: [ + [MoveId.MUD_SHOT]: [ Species.EKANS, Species.ARBOK, Species.SANDSHREW, @@ -44853,7 +44853,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.POISON_TAIL]: [ + [MoveId.POISON_TAIL]: [ Species.EKANS, Species.ARBOK, Species.NIDORAN_F, @@ -44893,7 +44893,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SNEASEL, Species.PALDEA_WOOPER, ], - [Moves.COVET]: [ + [MoveId.COVET]: [ Species.RATTATA, Species.RATICATE, Species.PIKACHU, @@ -45117,7 +45117,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.ETERNAL_FLOETTE, ], - [Moves.MAGICAL_LEAF]: [ + [MoveId.MAGICAL_LEAF]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -45256,7 +45256,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.CALM_MIND]: [ + [MoveId.CALM_MIND]: [ Species.PIKACHU, Species.RAICHU, Species.CLEFAIRY, @@ -45501,7 +45501,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.BLOODMOON_URSALUNA, ], - [Moves.LEAF_BLADE]: [ + [MoveId.LEAF_BLADE]: [ Species.VICTREEBEL, Species.FARFETCHD, Species.MEW, @@ -45535,7 +45535,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.DRAGON_DANCE]: [ + [MoveId.DRAGON_DANCE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -45605,7 +45605,7 @@ export const tmSpecies: TmSpecies = { Species.WALKING_WAKE, Species.GOUGING_FIRE, ], - [Moves.ROCK_BLAST]: [ + [MoveId.ROCK_BLAST]: [ Species.NIDOQUEEN, Species.NIDOKING, Species.DIGLETT, @@ -45731,7 +45731,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ARCANINE, Species.HISUI_AVALUGG, ], - [Moves.WATER_PULSE]: [ + [MoveId.WATER_PULSE]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -46024,7 +46024,7 @@ export const tmSpecies: TmSpecies = { ], Species.PALDEA_WOOPER, ], - [Moves.ROOST]: [ + [MoveId.ROOST]: [ Species.CHARIZARD, Species.BUTTERFREE, Species.BEEDRILL, @@ -46158,7 +46158,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.GRAVITY]: [ + [MoveId.GRAVITY]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -46281,7 +46281,7 @@ export const tmSpecies: TmSpecies = { "male", ], ], - [Moves.GYRO_BALL]: [ + [MoveId.GYRO_BALL]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -46417,7 +46417,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.HISUI_AVALUGG, ], - [Moves.BRINE]: [ + [MoveId.BRINE]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -46533,7 +46533,7 @@ export const tmSpecies: TmSpecies = { ], Species.HISUI_QWILFISH, ], - [Moves.PLUCK]: [ + [MoveId.PLUCK]: [ Species.PIDGEY, Species.PIDGEOTTO, Species.PIDGEOT, @@ -46617,7 +46617,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.TAILWIND]: [ + [MoveId.TAILWIND]: [ Species.CHARIZARD, Species.BUTTERFREE, Species.BEEDRILL, @@ -46763,7 +46763,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.U_TURN]: [ + [MoveId.U_TURN]: [ Species.BUTTERFREE, Species.BEEDRILL, Species.PIDGEY, @@ -46989,7 +46989,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.CLOSE_COMBAT]: [ + [MoveId.CLOSE_COMBAT]: [ Species.MANKEY, Species.PRIMEAPE, Species.GROWLITHE, @@ -47127,7 +47127,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.PALDEA_TAUROS, ], - [Moves.PAYBACK]: [ + [MoveId.PAYBACK]: [ Species.BEEDRILL, Species.EKANS, Species.ARBOK, @@ -47442,7 +47442,7 @@ export const tmSpecies: TmSpecies = { "shadow", ], ], - [Moves.ASSURANCE]: [ + [MoveId.ASSURANCE]: [ Species.BEEDRILL, Species.RATTATA, Species.RATICATE, @@ -47647,7 +47647,7 @@ export const tmSpecies: TmSpecies = { "combat", ], ], - [Moves.EMBARGO]: [ + [MoveId.EMBARGO]: [ Species.PERSIAN, Species.ABRA, Species.KADABRA, @@ -47744,7 +47744,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_GRIMER, Species.ALOLA_MUK, ], - [Moves.FLING]: [ + [MoveId.FLING]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -48154,7 +48154,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.BLOODMOON_URSALUNA, ], - [Moves.GASTRO_ACID]: [ + [MoveId.GASTRO_ACID]: [ Species.EKANS, Species.ARBOK, Species.ODDISH, @@ -48210,7 +48210,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_GRIMER, Species.ALOLA_MUK, ], - [Moves.POWER_SWAP]: [ + [MoveId.POWER_SWAP]: [ Species.VULPIX, Species.NINETALES, Species.ABRA, @@ -48280,7 +48280,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_MR_MIME, Species.GALAR_ARTICUNO, ], - [Moves.GUARD_SWAP]: [ + [MoveId.GUARD_SWAP]: [ Species.ABRA, Species.KADABRA, Species.ALAKAZAM, @@ -48352,7 +48352,7 @@ export const tmSpecies: TmSpecies = { "female", ], ], - [Moves.WORRY_SEED]: [ + [MoveId.WORRY_SEED]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -48470,7 +48470,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.ETERNAL_FLOETTE, ], - [Moves.TOXIC_SPIKES]: [ + [MoveId.TOXIC_SPIKES]: [ Species.BEEDRILL, Species.EKANS, Species.ARBOK, @@ -48559,7 +48559,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SNEASEL, Species.PALDEA_WOOPER, ], - [Moves.FLARE_BLITZ]: [ + [MoveId.FLARE_BLITZ]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -48654,7 +48654,7 @@ export const tmSpecies: TmSpecies = { "blaze", ], ], - [Moves.AURA_SPHERE]: [ + [MoveId.AURA_SPHERE]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -48698,7 +48698,7 @@ export const tmSpecies: TmSpecies = { Species.TERAPAGOS, Species.HISUI_DECIDUEYE, ], - [Moves.ROCK_POLISH]: [ + [MoveId.ROCK_POLISH]: [ Species.GEODUDE, Species.GRAVELER, Species.GOLEM, @@ -48812,7 +48812,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_GRIMER, Species.ALOLA_MUK, ], - [Moves.POISON_JAB]: [ + [MoveId.POISON_JAB]: [ Species.BEEDRILL, Species.EKANS, Species.ARBOK, @@ -49008,7 +49008,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.PALDEA_WOOPER, ], - [Moves.DARK_PULSE]: [ + [MoveId.DARK_PULSE]: [ Species.BLASTOISE, Species.EKANS, Species.ARBOK, @@ -49210,7 +49210,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.AQUA_TAIL]: [ + [MoveId.AQUA_TAIL]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -49356,7 +49356,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_QWILFISH, Species.HISUI_SAMUROTT, ], - [Moves.SEED_BOMB]: [ + [MoveId.SEED_BOMB]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -49561,7 +49561,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.BLOODMOON_URSALUNA, ], - [Moves.AIR_SLASH]: [ + [MoveId.AIR_SLASH]: [ Species.CHARIZARD, Species.BUTTERFREE, Species.PIDGEY, @@ -49712,7 +49712,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.X_SCISSOR]: [ + [MoveId.X_SCISSOR]: [ Species.BEEDRILL, Species.SANDSHREW, Species.SANDSLASH, @@ -49836,7 +49836,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SNEASEL, Species.HISUI_SAMUROTT, ], - [Moves.BUG_BUZZ]: [ + [MoveId.BUG_BUZZ]: [ Species.BUTTERFREE, Species.VENONAT, Species.VENOMOTH, @@ -49909,7 +49909,7 @@ export const tmSpecies: TmSpecies = { Species.IRON_MOTH, Species.TERAPAGOS, ], - [Moves.DRAGON_PULSE]: [ + [MoveId.DRAGON_PULSE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -50038,7 +50038,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SLIGGOO, Species.HISUI_GOODRA, ], - [Moves.POWER_GEM]: [ + [MoveId.POWER_GEM]: [ Species.MEOWTH, Species.PERSIAN, Species.GOLDUCK, @@ -50114,7 +50114,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GROWLITHE, Species.HISUI_ARCANINE, ], - [Moves.DRAIN_PUNCH]: [ + [MoveId.DRAIN_PUNCH]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -50258,7 +50258,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_MR_MIME, Species.GALAR_SLOWKING, ], - [Moves.VACUUM_WAVE]: [ + [MoveId.VACUUM_WAVE]: [ Species.PSYDUCK, Species.GOLDUCK, Species.MANKEY, @@ -50319,7 +50319,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.BLOODMOON_URSALUNA, ], - [Moves.FOCUS_BLAST]: [ + [MoveId.FOCUS_BLAST]: [ Species.CHARMANDER, Species.CHARIZARD, Species.BLASTOISE, @@ -50556,7 +50556,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.BLOODMOON_URSALUNA, ], - [Moves.ENERGY_BALL]: [ + [MoveId.ENERGY_BALL]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -50813,7 +50813,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.BRAVE_BIRD]: [ + [MoveId.BRAVE_BIRD]: [ Species.PIDGEY, Species.PIDGEOTTO, Species.PIDGEOT, @@ -50885,7 +50885,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.EARTH_POWER]: [ + [MoveId.EARTH_POWER]: [ Species.VENUSAUR, Species.SANDSHREW, Species.SANDSLASH, @@ -51098,7 +51098,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.GIGA_IMPACT]: [ + [MoveId.GIGA_IMPACT]: [ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, @@ -51710,7 +51710,7 @@ export const tmSpecies: TmSpecies = { "red-striped", ], ], - [Moves.NASTY_PLOT]: [ + [MoveId.NASTY_PLOT]: [ Species.PIKACHU, Species.RAICHU, Species.VULPIX, @@ -51896,7 +51896,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.HISUI_DECIDUEYE, ], - [Moves.AVALANCHE]: [ + [MoveId.AVALANCHE]: [ Species.BLASTOISE, Species.NIDOQUEEN, Species.NIDOKING, @@ -52007,7 +52007,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_AVALUGG, Species.BLOODMOON_URSALUNA, ], - [Moves.SHADOW_CLAW]: [ + [MoveId.SHADOW_CLAW]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -52224,7 +52224,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.BLOODMOON_URSALUNA, ], - [Moves.THUNDER_FANG]: [ + [MoveId.THUNDER_FANG]: [ Species.ARBOK, Species.GROWLITHE, Species.ARCANINE, @@ -52327,7 +52327,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GROWLITHE, Species.HISUI_ARCANINE, ], - [Moves.ICE_FANG]: [ + [MoveId.ICE_FANG]: [ Species.ARBOK, Species.RHYHORN, Species.RHYDON, @@ -52429,7 +52429,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_STUNFISK, Species.HISUI_AVALUGG, ], - [Moves.FIRE_FANG]: [ + [MoveId.FIRE_FANG]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -52545,7 +52545,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ARCANINE, Species.HISUI_TYPHLOSION, ], - [Moves.PSYCHO_CUT]: [ + [MoveId.PSYCHO_CUT]: [ Species.KADABRA, Species.ALAKAZAM, Species.DROWZEE, @@ -52611,7 +52611,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SAMUROTT, Species.HISUI_DECIDUEYE, ], - [Moves.ZEN_HEADBUTT]: [ + [MoveId.ZEN_HEADBUTT]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -52940,7 +52940,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.PALDEA_TAUROS, ], - [Moves.FLASH_CANNON]: [ + [MoveId.FLASH_CANNON]: [ Species.BLASTOISE, Species.MAGNEMITE, Species.MAGNETON, @@ -53090,7 +53090,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SLIGGOO, Species.HISUI_GOODRA, ], - [Moves.ROCK_CLIMB]: [ + [MoveId.ROCK_CLIMB]: [ Species.VENUSAUR, Species.BLASTOISE, Species.SANDSHREW, @@ -53221,7 +53221,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_TAUROS, Species.BLOODMOON_URSALUNA, ], - [Moves.DEFOG]: [ + [MoveId.DEFOG]: [ Species.CHARIZARD, Species.BUTTERFREE, Species.BEEDRILL, @@ -53380,7 +53380,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.TRICK_ROOM]: [ + [MoveId.TRICK_ROOM]: [ Species.ABRA, Species.KADABRA, Species.ALAKAZAM, @@ -53533,7 +53533,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.GALAR_YAMASK, ], - [Moves.DRACO_METEOR]: [ + [MoveId.DRACO_METEOR]: [ Species.DRATINI, Species.DRAGONAIR, Species.DRAGONITE, @@ -53611,7 +53611,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SLIGGOO, Species.HISUI_GOODRA, ], - [Moves.LEAF_STORM]: [ + [MoveId.LEAF_STORM]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -53728,7 +53728,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.POWER_WHIP]: [ + [MoveId.POWER_WHIP]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -53770,7 +53770,7 @@ export const tmSpecies: TmSpecies = { Species.OGERPON, Species.ALOLA_EXEGGUTOR, ], - [Moves.CROSS_POISON]: [ + [MoveId.CROSS_POISON]: [ Species.PARAS, Species.PARASECT, Species.MACHAMP, @@ -53808,7 +53808,7 @@ export const tmSpecies: TmSpecies = { Species.GRAFAIAI, Species.FEZANDIPITI, ], - [Moves.GUNK_SHOT]: [ + [MoveId.GUNK_SHOT]: [ Species.EKANS, Species.ARBOK, Species.SANDSLASH, @@ -53944,7 +53944,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.IRON_HEAD]: [ + [MoveId.IRON_HEAD]: [ Species.ARCANINE, Species.GRAVELER, Species.GOLEM, @@ -54175,7 +54175,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_AVALUGG, Species.PALDEA_TAUROS, ], - [Moves.STONE_EDGE]: [ + [MoveId.STONE_EDGE]: [ Species.SANDSHREW, Species.SANDSLASH, Species.NIDOQUEEN, @@ -54423,7 +54423,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.STEALTH_ROCK]: [ + [MoveId.STEALTH_ROCK]: [ Species.SANDSHREW, Species.SANDSLASH, Species.NIDOQUEEN, @@ -54648,7 +54648,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_AVALUGG, Species.PALDEA_WOOPER, ], - [Moves.GRASS_KNOT]: [ + [MoveId.GRASS_KNOT]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -54998,7 +54998,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.HISUI_DECIDUEYE, ], - [Moves.BUG_BITE]: [ + [MoveId.BUG_BITE]: [ Species.CATERPIE, Species.METAPOD, Species.BUTTERFREE, @@ -55104,7 +55104,7 @@ export const tmSpecies: TmSpecies = { Species.DIPPLIN, Species.HYDRAPPLE, ], - [Moves.CHARGE_BEAM]: [ + [MoveId.CHARGE_BEAM]: [ Species.RATTATA, Species.RATICATE, Species.PIKACHU, @@ -55298,7 +55298,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_VOLTORB, Species.HISUI_ELECTRODE, ], - [Moves.HONE_CLAWS]: [ + [MoveId.HONE_CLAWS]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -55490,7 +55490,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.HISUI_BRAVIARY, ], - [Moves.WONDER_ROOM]: [ + [MoveId.WONDER_ROOM]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.PSYDUCK, @@ -55597,7 +55597,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.GALAR_YAMASK, ], - [Moves.PSYSHOCK]: [ + [MoveId.PSYSHOCK]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.NINETALES, @@ -55739,7 +55739,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.HISUI_BRAVIARY, ], - [Moves.VENOSHOCK]: [ + [MoveId.VENOSHOCK]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -55863,7 +55863,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SNEASEL, Species.PALDEA_WOOPER, ], - [Moves.MAGIC_ROOM]: [ + [MoveId.MAGIC_ROOM]: [ Species.WIGGLYTUFF, Species.ABRA, Species.KADABRA, @@ -55932,7 +55932,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_RAPIDASH, Species.GALAR_MR_MIME, ], - [Moves.SMACK_DOWN]: [ + [MoveId.SMACK_DOWN]: [ Species.BLASTOISE, Species.SANDSHREW, Species.SANDSLASH, @@ -56100,7 +56100,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_DECIDUEYE, Species.BLOODMOON_URSALUNA, ], - [Moves.SLUDGE_WAVE]: [ + [MoveId.SLUDGE_WAVE]: [ Species.EKANS, Species.ARBOK, Species.NIDOQUEEN, @@ -56202,7 +56202,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.PALDEA_WOOPER, ], - [Moves.HEAVY_SLAM]: [ + [MoveId.HEAVY_SLAM]: [ Species.MACHOP, Species.MACHOKE, Species.MACHAMP, @@ -56335,7 +56335,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_AVALUGG, Species.BLOODMOON_URSALUNA, ], - [Moves.ELECTRO_BALL]: [ + [MoveId.ELECTRO_BALL]: [ Species.PIKACHU, Species.RAICHU, Species.MAGNEMITE, @@ -56416,7 +56416,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_VOLTORB, Species.HISUI_ELECTRODE, ], - [Moves.FLAME_CHARGE]: [ + [MoveId.FLAME_CHARGE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -56519,7 +56519,7 @@ export const tmSpecies: TmSpecies = { "blaze", ], ], - [Moves.LOW_SWEEP]: [ + [MoveId.LOW_SWEEP]: [ Species.PSYDUCK, Species.GOLDUCK, Species.MANKEY, @@ -56668,7 +56668,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.HISUI_DECIDUEYE, ], - [Moves.ACID_SPRAY]: [ + [MoveId.ACID_SPRAY]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -56763,7 +56763,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.PALDEA_WOOPER, ], - [Moves.FOUL_PLAY]: [ + [MoveId.FOUL_PLAY]: [ Species.VULPIX, Species.NINETALES, Species.DIGLETT, @@ -56941,7 +56941,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.ROUND]: [ + [MoveId.ROUND]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -57857,7 +57857,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_YAMASK, Species.GALAR_STUNFISK, ], - [Moves.ECHOED_VOICE]: [ + [MoveId.ECHOED_VOICE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -58086,7 +58086,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_MAROWAK, Species.ETERNAL_FLOETTE, ], - [Moves.STORED_POWER]: [ + [MoveId.STORED_POWER]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.NINETALES, @@ -58238,7 +58238,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.HISUI_BRAVIARY, ], - [Moves.ALLY_SWITCH]: [ + [MoveId.ALLY_SWITCH]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -58416,7 +58416,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_ARTICUNO, Species.GALAR_YAMASK, ], - [Moves.SCALD]: [ + [MoveId.SCALD]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -58575,7 +58575,7 @@ export const tmSpecies: TmSpecies = { "rapid-strike", ], ], - [Moves.HEX]: [ + [MoveId.HEX]: [ Species.NIDOQUEEN, Species.NIDOKING, Species.VULPIX, @@ -58708,7 +58708,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.SKY_DROP]: [ + [MoveId.SKY_DROP]: [ Species.CHARIZARD, Species.AERODACTYL, Species.ARTICUNO, @@ -58732,7 +58732,7 @@ export const tmSpecies: TmSpecies = { Species.LUNALA, Species.NAGANADEL, ], - [Moves.INCINERATE]: [ + [MoveId.INCINERATE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -58934,7 +58934,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.PALDEA_TAUROS, ], - [Moves.QUASH]: [ + [MoveId.QUASH]: [ Species.NIDOQUEEN, Species.NIDOKING, Species.KINGLER, @@ -58975,7 +58975,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_GRIMER, Species.ALOLA_MUK, ], - [Moves.ACROBATICS]: [ + [MoveId.ACROBATICS]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -59156,7 +59156,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_BRAVIARY, ], - [Moves.RETALIATE]: [ + [MoveId.RETALIATE]: [ Species.RATTATA, Species.RATICATE, Species.CLEFAIRY, @@ -59369,7 +59369,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ARCANINE, Species.HISUI_SAMUROTT, ], - [Moves.WATER_PLEDGE]: [ + [MoveId.WATER_PLEDGE]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -59403,7 +59403,7 @@ export const tmSpecies: TmSpecies = { Species.QUAQUAVAL, Species.HISUI_SAMUROTT, ], - [Moves.FIRE_PLEDGE]: [ + [MoveId.FIRE_PLEDGE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -59437,7 +59437,7 @@ export const tmSpecies: TmSpecies = { Species.SKELEDIRGE, Species.HISUI_TYPHLOSION, ], - [Moves.GRASS_PLEDGE]: [ + [MoveId.GRASS_PLEDGE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -59471,7 +59471,7 @@ export const tmSpecies: TmSpecies = { Species.MEOWSCARADA, Species.HISUI_DECIDUEYE, ], - [Moves.VOLT_SWITCH]: [ + [MoveId.VOLT_SWITCH]: [ Species.PIKACHU, Species.RAICHU, Species.MAGNEMITE, @@ -59554,7 +59554,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_VOLTORB, Species.HISUI_ELECTRODE, ], - [Moves.STRUGGLE_BUG]: [ + [MoveId.STRUGGLE_BUG]: [ Species.BUTTERFREE, Species.BEEDRILL, Species.PARAS, @@ -59643,7 +59643,7 @@ export const tmSpecies: TmSpecies = { Species.RABSCA, Species.IRON_MOTH, ], - [Moves.BULLDOZE]: [ + [MoveId.BULLDOZE]: [ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, @@ -60020,7 +60020,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.FROST_BREATH]: [ + [MoveId.FROST_BREATH]: [ Species.DEWGONG, Species.CLOYSTER, Species.JYNX, @@ -60062,7 +60062,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_VULPIX, Species.ALOLA_NINETALES, ], - [Moves.DRAGON_TAIL]: [ + [MoveId.DRAGON_TAIL]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -60168,7 +60168,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_EXEGGUTOR, Species.HISUI_GOODRA, ], - [Moves.WORK_UP]: [ + [MoveId.WORK_UP]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -60476,7 +60476,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_DARMANITAN, Species.PALDEA_TAUROS, ], - [Moves.ELECTROWEB]: [ + [MoveId.ELECTROWEB]: [ Species.CATERPIE, Species.METAPOD, Species.BUTTERFREE, @@ -60555,7 +60555,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_GRAVELER, Species.ALOLA_GOLEM, ], - [Moves.WILD_CHARGE]: [ + [MoveId.WILD_CHARGE]: [ Species.RATTATA, Species.RATICATE, Species.PIKACHU, @@ -60705,7 +60705,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_TYPHLOSION, Species.PALDEA_TAUROS, ], - [Moves.DRILL_RUN]: [ + [MoveId.DRILL_RUN]: [ Species.BEEDRILL, Species.SPEAROW, Species.FEAROW, @@ -60760,7 +60760,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SAMUROTT, Species.PALDEA_TAUROS, ], - [Moves.RAZOR_SHELL]: [ + [MoveId.RAZOR_SHELL]: [ Species.SLOWBRO, Species.SHELLDER, Species.CLOYSTER, @@ -60784,7 +60784,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.HISUI_SAMUROTT, ], - [Moves.HEAT_CRASH]: [ + [MoveId.HEAT_CRASH]: [ Species.CHARIZARD, Species.ARCANINE, Species.RHYDON, @@ -60826,7 +60826,7 @@ export const tmSpecies: TmSpecies = { Species.TERAPAGOS, Species.HISUI_ARCANINE, ], - [Moves.TAIL_SLAP]: [ + [MoveId.TAIL_SLAP]: [ Species.VULPIX, Species.NINETALES, Species.MEW, @@ -60856,7 +60856,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_VULPIX, Species.ALOLA_NINETALES, ], - [Moves.HURRICANE]: [ + [MoveId.HURRICANE]: [ Species.CHARIZARD, Species.BUTTERFREE, Species.PIDGEY, @@ -60937,7 +60937,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_BRAVIARY, ], - [Moves.SNARL]: [ + [MoveId.SNARL]: [ Species.EKANS, Species.ARBOK, Species.VULPIX, @@ -61092,7 +61092,7 @@ export const tmSpecies: TmSpecies = { "single-strike", ], ], - [Moves.PHANTOM_FORCE]: [ + [MoveId.PHANTOM_FORCE]: [ Species.HAUNTER, Species.GENGAR, Species.MEW, @@ -61147,7 +61147,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.PETAL_BLIZZARD]: [ + [MoveId.PETAL_BLIZZARD]: [ Species.VENUSAUR, Species.GLOOM, Species.VILEPLUME, @@ -61184,7 +61184,7 @@ export const tmSpecies: TmSpecies = { Species.ETERNAL_FLOETTE, Species.HISUI_LILLIGANT, ], - [Moves.DISARMING_VOICE]: [ + [MoveId.DISARMING_VOICE]: [ Species.PIKACHU, Species.RAICHU, Species.CLEFAIRY, @@ -61265,7 +61265,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_NINETALES, Species.ETERNAL_FLOETTE, ], - [Moves.DRAINING_KISS]: [ + [MoveId.DRAINING_KISS]: [ Species.BUTTERFREE, Species.PIKACHU, Species.RAICHU, @@ -61359,7 +61359,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_NINETALES, Species.ETERNAL_FLOETTE, ], - [Moves.GRASSY_TERRAIN]: [ + [MoveId.GRASSY_TERRAIN]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -61474,7 +61474,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.MISTY_TERRAIN]: [ + [MoveId.MISTY_TERRAIN]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -61543,7 +61543,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_WEEZING, Species.GALAR_MR_MIME, ], - [Moves.PLAY_ROUGH]: [ + [MoveId.PLAY_ROUGH]: [ Species.PIKACHU, Species.RAICHU, Species.CLEFAIRY, @@ -61716,7 +61716,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_WEEZING, Species.HISUI_TYPHLOSION, ], - [Moves.CONFIDE]: [ + [MoveId.CONFIDE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -62523,7 +62523,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_MAROWAK, Species.ETERNAL_FLOETTE, ], - [Moves.MYSTICAL_FIRE]: [ + [MoveId.MYSTICAL_FIRE]: [ Species.CHARIZARD, Species.CLEFAIRY, Species.CLEFABLE, @@ -62572,7 +62572,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_PONYTA, Species.GALAR_RAPIDASH, ], - [Moves.EERIE_IMPULSE]: [ + [MoveId.EERIE_IMPULSE]: [ Species.PIKACHU, Species.RAICHU, Species.MAGNEMITE, @@ -62632,7 +62632,7 @@ export const tmSpecies: TmSpecies = { Species.RAGING_BOLT, Species.ALOLA_RAICHU, ], - [Moves.VENOM_DRENCH]: [ + [MoveId.VENOM_DRENCH]: [ Species.NIDORAN_F, Species.NIDORINA, Species.NIDOQUEEN, @@ -62685,7 +62685,7 @@ export const tmSpecies: TmSpecies = { "low-key", ], ], - [Moves.ELECTRIC_TERRAIN]: [ + [MoveId.ELECTRIC_TERRAIN]: [ Species.PIKACHU, Species.RAICHU, Species.MAGNEMITE, @@ -62758,7 +62758,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_VOLTORB, Species.HISUI_ELECTRODE, ], - [Moves.DAZZLING_GLEAM]: [ + [MoveId.DAZZLING_GLEAM]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -62928,7 +62928,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_MR_MIME, Species.HISUI_BRAVIARY, ], - [Moves.INFESTATION]: [ + [MoveId.INFESTATION]: [ Species.BUTTERFREE, Species.BEEDRILL, Species.EKANS, @@ -63048,7 +63048,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_MUK, Species.ALOLA_EXEGGUTOR, ], - [Moves.POWER_UP_PUNCH]: [ + [MoveId.POWER_UP_PUNCH]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -63269,7 +63269,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_DARUMAKA, Species.GALAR_DARMANITAN, ], - [Moves.DARKEST_LARIAT]: [ + [MoveId.DARKEST_LARIAT]: [ Species.POLIWRATH, Species.MACHAMP, Species.SNORLAX, @@ -63291,7 +63291,7 @@ export const tmSpecies: TmSpecies = { Species.URSHIFU, Species.ZARUDE, ], - [Moves.HIGH_HORSEPOWER]: [ + [MoveId.HIGH_HORSEPOWER]: [ Species.SANDSHREW, Species.SANDSLASH, Species.NIDOQUEEN, @@ -63413,7 +63413,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_TAUROS, Species.BLOODMOON_URSALUNA, ], - [Moves.SOLAR_BLADE]: [ + [MoveId.SOLAR_BLADE]: [ Species.PONYTA, Species.RAPIDASH, Species.FARFETCHD, @@ -63458,7 +63458,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_FARFETCHD, Species.HISUI_LILLIGANT, ], - [Moves.THROAT_CHOP]: [ + [MoveId.THROAT_CHOP]: [ Species.BEEDRILL, Species.RATICATE, Species.FEAROW, @@ -63605,7 +63605,7 @@ export const tmSpecies: TmSpecies = { "ice", ], ], - [Moves.POLLEN_PUFF]: [ + [MoveId.POLLEN_PUFF]: [ Species.BUTTERFREE, Species.GLOOM, Species.VILEPLUME, @@ -63646,7 +63646,7 @@ export const tmSpecies: TmSpecies = { Species.ETERNAL_FLOETTE, Species.HISUI_LILLIGANT, ], - [Moves.PSYCHIC_TERRAIN]: [ + [MoveId.PSYCHIC_TERRAIN]: [ Species.ABRA, Species.KADABRA, Species.ALAKAZAM, @@ -63721,7 +63721,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.HISUI_BRAVIARY, ], - [Moves.LUNGE]: [ + [MoveId.LUNGE]: [ Species.VENONAT, Species.VENOMOTH, Species.BELLSPROUT, @@ -63798,7 +63798,7 @@ export const tmSpecies: TmSpecies = { Species.SLITHER_WING, Species.IRON_MOTH, ], - [Moves.SPEED_SWAP]: [ + [MoveId.SPEED_SWAP]: [ Species.RAICHU, Species.ABRA, Species.KADABRA, @@ -63826,7 +63826,7 @@ export const tmSpecies: TmSpecies = { Species.RABSCA, Species.ALOLA_RAICHU, ], - [Moves.SMART_STRIKE]: [ + [MoveId.SMART_STRIKE]: [ Species.NIDORAN_M, Species.NIDORINO, Species.NIDOKING, @@ -63888,7 +63888,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SAMUROTT, Species.PALDEA_TAUROS, ], - [Moves.BRUTAL_SWING]: [ + [MoveId.BRUTAL_SWING]: [ Species.CHARIZARD, Species.BEEDRILL, Species.EKANS, @@ -64038,7 +64038,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_WEEZING, Species.GALAR_YAMASK, ], - [Moves.AURORA_VEIL]: [ + [MoveId.AURORA_VEIL]: [ Species.JYNX, Species.ARTICUNO, Species.MEW, @@ -64065,7 +64065,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_NINETALES, Species.HISUI_AVALUGG, ], - [Moves.PSYCHIC_FANGS]: [ + [MoveId.PSYCHIC_FANGS]: [ Species.EKANS, Species.ARBOK, Species.GROWLITHE, @@ -64140,7 +64140,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GROWLITHE, Species.HISUI_ARCANINE, ], - [Moves.STOMPING_TANTRUM]: [ + [MoveId.STOMPING_TANTRUM]: [ Species.VENUSAUR, Species.RATICATE, Species.ARBOK, @@ -64413,7 +64413,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.LIQUIDATION]: [ + [MoveId.LIQUIDATION]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -64576,7 +64576,7 @@ export const tmSpecies: TmSpecies = { ], Species.PALDEA_WOOPER, ], - [Moves.BODY_PRESS]: [ + [MoveId.BODY_PRESS]: [ Species.BLASTOISE, Species.NIDOQUEEN, Species.NIDOKING, @@ -64744,7 +64744,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.BREAKING_SWIPE]: [ + [MoveId.BREAKING_SWIPE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -64825,7 +64825,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_EXEGGUTOR, Species.HISUI_GOODRA, ], - [Moves.STEEL_BEAM]: [ + [MoveId.STEEL_BEAM]: [ Species.MAGNEMITE, Species.MAGNETON, Species.MEW, @@ -64904,7 +64904,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SLIGGOO, Species.HISUI_GOODRA, ], - [Moves.EXPANDING_FORCE]: [ + [MoveId.EXPANDING_FORCE]: [ Species.WIGGLYTUFF, Species.KADABRA, Species.ALAKAZAM, @@ -64999,7 +64999,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.HISUI_BRAVIARY, ], - [Moves.STEEL_ROLLER]: [ + [MoveId.STEEL_ROLLER]: [ Species.SANDSHREW, Species.SANDSLASH, Species.JIGGLYPUFF, @@ -65058,7 +65058,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_SANDSHREW, Species.ALOLA_SANDSLASH, ], - [Moves.SCALE_SHOT]: [ + [MoveId.SCALE_SHOT]: [ Species.CHARIZARD, Species.EKANS, Species.ARBOK, @@ -65139,7 +65139,7 @@ export const tmSpecies: TmSpecies = { Species.GOUGING_FIRE, Species.HISUI_QWILFISH, ], - [Moves.METEOR_BEAM]: [ + [MoveId.METEOR_BEAM]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.ONIX, @@ -65230,7 +65230,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_CORSOLA, Species.HISUI_AVALUGG, ], - [Moves.MISTY_EXPLOSION]: [ + [MoveId.MISTY_EXPLOSION]: [ Species.CLEFAIRY, Species.CLEFABLE, Species.JIGGLYPUFF, @@ -65257,7 +65257,7 @@ export const tmSpecies: TmSpecies = { Species.SCREAM_TAIL, Species.GALAR_WEEZING, ], - [Moves.GRASSY_GLIDE]: [ + [MoveId.GRASSY_GLIDE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -65358,7 +65358,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.RISING_VOLTAGE]: [ + [MoveId.RISING_VOLTAGE]: [ Species.PIKACHU, Species.RAICHU, Species.MAGNEMITE, @@ -65406,7 +65406,7 @@ export const tmSpecies: TmSpecies = { Species.RAGING_BOLT, Species.ALOLA_RAICHU, ], - [Moves.TERRAIN_PULSE]: [ + [MoveId.TERRAIN_PULSE]: [ Species.VENUSAUR, Species.BLASTOISE, Species.EXEGGUTOR, @@ -65436,7 +65436,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_EXEGGUTOR, Species.GALAR_STUNFISK, ], - [Moves.SKITTER_SMACK]: [ + [MoveId.SKITTER_SMACK]: [ Species.EKANS, Species.ARBOK, Species.VENONAT, @@ -65568,7 +65568,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SLIGGOO, Species.HISUI_GOODRA, ], - [Moves.BURNING_JEALOUSY]: [ + [MoveId.BURNING_JEALOUSY]: [ Species.VULPIX, Species.NINETALES, Species.MAGMAR, @@ -65627,7 +65627,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], - [Moves.LASH_OUT]: [ + [MoveId.LASH_OUT]: [ Species.EKANS, Species.ARBOK, Species.MEOWTH, @@ -65786,7 +65786,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.PALDEA_TAUROS, ], - [Moves.POLTERGEIST]: [ + [MoveId.POLTERGEIST]: [ Species.GASTLY, Species.HAUNTER, Species.GENGAR, @@ -65846,7 +65846,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_TYPHLOSION, Species.HISUI_ZOROARK, ], - [Moves.CORROSIVE_GAS]: [ + [MoveId.CORROSIVE_GAS]: [ Species.VILEPLUME, Species.TENTACRUEL, Species.GASTLY, @@ -65865,7 +65865,7 @@ export const tmSpecies: TmSpecies = { Species.GUZZLORD, Species.GALAR_WEEZING, ], - [Moves.COACHING]: [ + [MoveId.COACHING]: [ Species.POLIWRATH, Species.MACHOP, Species.MACHOKE, @@ -65936,7 +65936,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_DECIDUEYE, ], - [Moves.FLIP_TURN]: [ + [MoveId.FLIP_TURN]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -66006,7 +66006,7 @@ export const tmSpecies: TmSpecies = { Species.WALKING_WAKE, Species.HISUI_SAMUROTT, ], - [Moves.TRIPLE_AXEL]: [ + [MoveId.TRIPLE_AXEL]: [ Species.SEEL, Species.DEWGONG, Species.JYNX, @@ -66052,7 +66052,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_MR_MIME, Species.HISUI_LILLIGANT, ], - [Moves.DUAL_WINGBEAT]: [ + [MoveId.DUAL_WINGBEAT]: [ Species.CHARIZARD, Species.BUTTERFREE, Species.CLEFAIRY, @@ -66171,7 +66171,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.HISUI_DECIDUEYE, ], - [Moves.SCORCHING_SANDS]: [ + [MoveId.SCORCHING_SANDS]: [ Species.CHARIZARD, Species.SANDSHREW, Species.SANDSLASH, @@ -66258,7 +66258,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GROWLITHE, Species.HISUI_ARCANINE, ], - [Moves.TERA_BLAST]: [ + [MoveId.TERA_BLAST]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -67332,7 +67332,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.ICE_SPINNER]: [ + [MoveId.ICE_SPINNER]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -67406,7 +67406,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_GOODRA, Species.HISUI_AVALUGG, ], - [Moves.SNOWSCAPE]: [ + [MoveId.SNOWSCAPE]: [ Species.SLOWPOKE, Species.SLOWBRO, Species.SEEL, @@ -67504,7 +67504,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.HISUI_AVALUGG, ], - [Moves.POUNCE]: [ + [MoveId.POUNCE]: [ Species.VENONAT, Species.VENOMOTH, Species.BELLSPROUT, @@ -67583,7 +67583,7 @@ export const tmSpecies: TmSpecies = { Species.DIPPLIN, Species.HYDRAPPLE, ], - [Moves.TRAILBLAZE]: [ + [MoveId.TRAILBLAZE]: [ Species.BULBASAUR, Species.IVYSAUR, Species.VENUSAUR, @@ -67882,7 +67882,7 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], - [Moves.CHILLING_WATER]: [ + [MoveId.CHILLING_WATER]: [ Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, @@ -68100,7 +68100,7 @@ export const tmSpecies: TmSpecies = { ], Species.PALDEA_WOOPER, ], - [Moves.HARD_PRESS]: [ + [MoveId.HARD_PRESS]: [ Species.GRAVELER, Species.GOLEM, Species.SNORLAX, @@ -68149,7 +68149,7 @@ export const tmSpecies: TmSpecies = { Species.HISUI_AVALUGG, Species.BLOODMOON_URSALUNA, ], - [Moves.DRAGON_CHEER]: [ + [MoveId.DRAGON_CHEER]: [ Species.CHARIZARD, Species.GYARADOS, Species.LAPRAS, @@ -68209,7 +68209,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_EXEGGUTOR, Species.HISUI_GOODRA, ], - [Moves.ALLURING_VOICE]: [ + [MoveId.ALLURING_VOICE]: [ Species.PIKACHU, Species.RAICHU, Species.CLEFAIRY, @@ -68277,7 +68277,7 @@ export const tmSpecies: TmSpecies = { "female", ], ], - [Moves.TEMPER_FLARE]: [ + [MoveId.TEMPER_FLARE]: [ Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, @@ -68356,7 +68356,7 @@ export const tmSpecies: TmSpecies = { "blaze", ], ], - [Moves.SUPERCELL_SLAM]:[ + [MoveId.SUPERCELL_SLAM]:[ Species.ELECTRODE, Species.RHYHORN, Species.RHYDON, @@ -68403,7 +68403,7 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_GOLEM, Species.HISUI_ELECTRODE, ], - [Moves.PSYCHIC_NOISE]: [ + [MoveId.PSYCHIC_NOISE]: [ Species.JIGGLYPUFF, Species.WIGGLYTUFF, Species.VENONAT, @@ -68476,7 +68476,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWKING, Species.HISUI_BRAVIARY, ], - [Moves.UPPER_HAND]: [ + [MoveId.UPPER_HAND]: [ Species.PIKACHU, Species.RAICHU, Species.POLIWRATH, @@ -68544,7 +68544,7 @@ export const tmSpecies: TmSpecies = { }; interface SpeciesTmMoves { - [key: number]: (Moves | [string | Species, Moves])[]; + [key: number]: (MoveId | [string | Species, MoveId])[]; } function transposeTmSpecies(): SpeciesTmMoves { @@ -68588,320 +68588,320 @@ interface TmPoolTiers { } export const tmPoolTiers: TmPoolTiers = { - [Moves.MEGA_PUNCH]: ModifierTier.GREAT, - [Moves.PAY_DAY]: ModifierTier.ULTRA, - [Moves.FIRE_PUNCH]: ModifierTier.GREAT, - [Moves.ICE_PUNCH]: ModifierTier.GREAT, - [Moves.THUNDER_PUNCH]: ModifierTier.GREAT, - [Moves.SWORDS_DANCE]: ModifierTier.COMMON, - [Moves.CUT]: ModifierTier.COMMON, - [Moves.FLY]: ModifierTier.COMMON, - [Moves.MEGA_KICK]: ModifierTier.GREAT, - [Moves.BODY_SLAM]: ModifierTier.GREAT, - [Moves.TAKE_DOWN]: ModifierTier.GREAT, - [Moves.DOUBLE_EDGE]: ModifierTier.ULTRA, - [Moves.PIN_MISSILE]: ModifierTier.COMMON, - [Moves.ROAR]: ModifierTier.COMMON, - [Moves.FLAMETHROWER]: ModifierTier.ULTRA, - [Moves.HYDRO_PUMP]: ModifierTier.ULTRA, - [Moves.SURF]: ModifierTier.ULTRA, - [Moves.ICE_BEAM]: ModifierTier.ULTRA, - [Moves.BLIZZARD]: ModifierTier.ULTRA, - [Moves.PSYBEAM]: ModifierTier.GREAT, - [Moves.HYPER_BEAM]: ModifierTier.ULTRA, - [Moves.LOW_KICK]: ModifierTier.COMMON, - [Moves.COUNTER]: ModifierTier.COMMON, - [Moves.STRENGTH]: ModifierTier.GREAT, - [Moves.SOLAR_BEAM]: ModifierTier.ULTRA, - [Moves.FIRE_SPIN]: ModifierTier.COMMON, - [Moves.THUNDERBOLT]: ModifierTier.ULTRA, - [Moves.THUNDER_WAVE]: ModifierTier.COMMON, - [Moves.THUNDER]: ModifierTier.ULTRA, - [Moves.EARTHQUAKE]: ModifierTier.ULTRA, - [Moves.DIG]: ModifierTier.GREAT, - [Moves.TOXIC]: ModifierTier.GREAT, - [Moves.PSYCHIC]: ModifierTier.ULTRA, - [Moves.AGILITY]: ModifierTier.COMMON, - [Moves.NIGHT_SHADE]: ModifierTier.COMMON, - [Moves.SCREECH]: ModifierTier.COMMON, - [Moves.DOUBLE_TEAM]: ModifierTier.COMMON, - [Moves.CONFUSE_RAY]: ModifierTier.COMMON, - [Moves.LIGHT_SCREEN]: ModifierTier.COMMON, - [Moves.HAZE]: ModifierTier.COMMON, - [Moves.REFLECT]: ModifierTier.COMMON, - [Moves.FOCUS_ENERGY]: ModifierTier.COMMON, - [Moves.METRONOME]: ModifierTier.COMMON, - [Moves.SELF_DESTRUCT]: ModifierTier.GREAT, - [Moves.FIRE_BLAST]: ModifierTier.ULTRA, - [Moves.WATERFALL]: ModifierTier.GREAT, - [Moves.SWIFT]: ModifierTier.COMMON, - [Moves.AMNESIA]: ModifierTier.COMMON, - [Moves.DREAM_EATER]: ModifierTier.GREAT, - [Moves.LEECH_LIFE]: ModifierTier.ULTRA, - [Moves.FLASH]: ModifierTier.COMMON, - [Moves.EXPLOSION]: ModifierTier.GREAT, - [Moves.REST]: ModifierTier.COMMON, - [Moves.ROCK_SLIDE]: ModifierTier.GREAT, - [Moves.TRI_ATTACK]: ModifierTier.ULTRA, - [Moves.SUPER_FANG]: ModifierTier.COMMON, - [Moves.SUBSTITUTE]: ModifierTier.COMMON, - [Moves.THIEF]: ModifierTier.GREAT, - [Moves.SNORE]: ModifierTier.COMMON, - [Moves.CURSE]: ModifierTier.COMMON, - [Moves.REVERSAL]: ModifierTier.COMMON, - [Moves.SPITE]: ModifierTier.COMMON, - [Moves.PROTECT]: ModifierTier.COMMON, - [Moves.SCARY_FACE]: ModifierTier.COMMON, - [Moves.SLUDGE_BOMB]: ModifierTier.GREAT, - [Moves.MUD_SLAP]: ModifierTier.COMMON, - [Moves.SPIKES]: ModifierTier.COMMON, - [Moves.ICY_WIND]: ModifierTier.GREAT, - [Moves.OUTRAGE]: ModifierTier.ULTRA, - [Moves.SANDSTORM]: ModifierTier.COMMON, - [Moves.GIGA_DRAIN]: ModifierTier.ULTRA, - [Moves.ENDURE]: ModifierTier.COMMON, - [Moves.CHARM]: ModifierTier.COMMON, - [Moves.FALSE_SWIPE]: ModifierTier.COMMON, - [Moves.SWAGGER]: ModifierTier.COMMON, - [Moves.STEEL_WING]: ModifierTier.GREAT, - [Moves.ATTRACT]: ModifierTier.COMMON, - [Moves.SLEEP_TALK]: ModifierTier.COMMON, - [Moves.HEAL_BELL]: ModifierTier.COMMON, - [Moves.RETURN]: ModifierTier.ULTRA, - [Moves.FRUSTRATION]: ModifierTier.COMMON, - [Moves.SAFEGUARD]: ModifierTier.COMMON, - [Moves.PAIN_SPLIT]: ModifierTier.COMMON, - [Moves.MEGAHORN]: ModifierTier.ULTRA, - [Moves.BATON_PASS]: ModifierTier.COMMON, - [Moves.ENCORE]: ModifierTier.COMMON, - [Moves.IRON_TAIL]: ModifierTier.GREAT, - [Moves.METAL_CLAW]: ModifierTier.COMMON, - [Moves.SYNTHESIS]: ModifierTier.GREAT, - [Moves.HIDDEN_POWER]: ModifierTier.GREAT, - [Moves.RAIN_DANCE]: ModifierTier.COMMON, - [Moves.SUNNY_DAY]: ModifierTier.COMMON, - [Moves.CRUNCH]: ModifierTier.GREAT, - [Moves.PSYCH_UP]: ModifierTier.COMMON, - [Moves.SHADOW_BALL]: ModifierTier.ULTRA, - [Moves.FUTURE_SIGHT]: ModifierTier.GREAT, - [Moves.ROCK_SMASH]: ModifierTier.COMMON, - [Moves.WHIRLPOOL]: ModifierTier.COMMON, - [Moves.BEAT_UP]: ModifierTier.COMMON, - [Moves.UPROAR]: ModifierTier.GREAT, - [Moves.HEAT_WAVE]: ModifierTier.ULTRA, - [Moves.HAIL]: ModifierTier.COMMON, - [Moves.TORMENT]: ModifierTier.COMMON, - [Moves.WILL_O_WISP]: ModifierTier.COMMON, - [Moves.FACADE]: ModifierTier.GREAT, - [Moves.FOCUS_PUNCH]: ModifierTier.COMMON, - [Moves.NATURE_POWER]: ModifierTier.COMMON, - [Moves.CHARGE]: ModifierTier.COMMON, - [Moves.TAUNT]: ModifierTier.COMMON, - [Moves.HELPING_HAND]: ModifierTier.COMMON, - [Moves.TRICK]: ModifierTier.COMMON, - [Moves.SUPERPOWER]: ModifierTier.ULTRA, - [Moves.RECYCLE]: ModifierTier.COMMON, - [Moves.REVENGE]: ModifierTier.GREAT, - [Moves.BRICK_BREAK]: ModifierTier.GREAT, - [Moves.KNOCK_OFF]: ModifierTier.GREAT, - [Moves.ENDEAVOR]: ModifierTier.COMMON, - [Moves.SKILL_SWAP]: ModifierTier.COMMON, - [Moves.IMPRISON]: ModifierTier.COMMON, - [Moves.SECRET_POWER]: ModifierTier.COMMON, - [Moves.DIVE]: ModifierTier.GREAT, - [Moves.FEATHER_DANCE]: ModifierTier.COMMON, - [Moves.BLAZE_KICK]: ModifierTier.GREAT, - [Moves.HYPER_VOICE]: ModifierTier.ULTRA, - [Moves.BLAST_BURN]: ModifierTier.ULTRA, - [Moves.HYDRO_CANNON]: ModifierTier.ULTRA, - [Moves.WEATHER_BALL]: ModifierTier.COMMON, - [Moves.FAKE_TEARS]: ModifierTier.COMMON, - [Moves.AIR_CUTTER]: ModifierTier.GREAT, - [Moves.OVERHEAT]: ModifierTier.ULTRA, - [Moves.ROCK_TOMB]: ModifierTier.GREAT, - [Moves.METAL_SOUND]: ModifierTier.COMMON, - [Moves.COSMIC_POWER]: ModifierTier.COMMON, - [Moves.SIGNAL_BEAM]: ModifierTier.GREAT, - [Moves.SAND_TOMB]: ModifierTier.COMMON, - [Moves.MUDDY_WATER]: ModifierTier.GREAT, - [Moves.BULLET_SEED]: ModifierTier.GREAT, - [Moves.AERIAL_ACE]: ModifierTier.GREAT, - [Moves.ICICLE_SPEAR]: ModifierTier.GREAT, - [Moves.IRON_DEFENSE]: ModifierTier.GREAT, - [Moves.DRAGON_CLAW]: ModifierTier.ULTRA, - [Moves.FRENZY_PLANT]: ModifierTier.ULTRA, - [Moves.BULK_UP]: ModifierTier.COMMON, - [Moves.BOUNCE]: ModifierTier.GREAT, - [Moves.MUD_SHOT]: ModifierTier.GREAT, - [Moves.POISON_TAIL]: ModifierTier.GREAT, - [Moves.COVET]: ModifierTier.GREAT, - [Moves.MAGICAL_LEAF]: ModifierTier.GREAT, - [Moves.CALM_MIND]: ModifierTier.GREAT, - [Moves.LEAF_BLADE]: ModifierTier.ULTRA, - [Moves.DRAGON_DANCE]: ModifierTier.GREAT, - [Moves.ROCK_BLAST]: ModifierTier.GREAT, - [Moves.WATER_PULSE]: ModifierTier.GREAT, - [Moves.ROOST]: ModifierTier.GREAT, - [Moves.GRAVITY]: ModifierTier.COMMON, - [Moves.GYRO_BALL]: ModifierTier.COMMON, - [Moves.BRINE]: ModifierTier.GREAT, - [Moves.PLUCK]: ModifierTier.GREAT, - [Moves.TAILWIND]: ModifierTier.GREAT, - [Moves.U_TURN]: ModifierTier.GREAT, - [Moves.CLOSE_COMBAT]: ModifierTier.ULTRA, - [Moves.PAYBACK]: ModifierTier.COMMON, - [Moves.ASSURANCE]: ModifierTier.COMMON, - [Moves.EMBARGO]: ModifierTier.COMMON, - [Moves.FLING]: ModifierTier.COMMON, - [Moves.GASTRO_ACID]: ModifierTier.GREAT, - [Moves.POWER_SWAP]: ModifierTier.COMMON, - [Moves.GUARD_SWAP]: ModifierTier.COMMON, - [Moves.WORRY_SEED]: ModifierTier.GREAT, - [Moves.TOXIC_SPIKES]: ModifierTier.GREAT, - [Moves.FLARE_BLITZ]: ModifierTier.ULTRA, - [Moves.AURA_SPHERE]: ModifierTier.GREAT, - [Moves.ROCK_POLISH]: ModifierTier.COMMON, - [Moves.POISON_JAB]: ModifierTier.GREAT, - [Moves.DARK_PULSE]: ModifierTier.GREAT, - [Moves.AQUA_TAIL]: ModifierTier.GREAT, - [Moves.SEED_BOMB]: ModifierTier.GREAT, - [Moves.AIR_SLASH]: ModifierTier.GREAT, - [Moves.X_SCISSOR]: ModifierTier.GREAT, - [Moves.BUG_BUZZ]: ModifierTier.GREAT, - [Moves.DRAGON_PULSE]: ModifierTier.GREAT, - [Moves.POWER_GEM]: ModifierTier.GREAT, - [Moves.DRAIN_PUNCH]: ModifierTier.GREAT, - [Moves.VACUUM_WAVE]: ModifierTier.COMMON, - [Moves.FOCUS_BLAST]: ModifierTier.GREAT, - [Moves.ENERGY_BALL]: ModifierTier.GREAT, - [Moves.BRAVE_BIRD]: ModifierTier.ULTRA, - [Moves.EARTH_POWER]: ModifierTier.ULTRA, - [Moves.GIGA_IMPACT]: ModifierTier.GREAT, - [Moves.NASTY_PLOT]: ModifierTier.COMMON, - [Moves.AVALANCHE]: ModifierTier.GREAT, - [Moves.SHADOW_CLAW]: ModifierTier.GREAT, - [Moves.THUNDER_FANG]: ModifierTier.GREAT, - [Moves.ICE_FANG]: ModifierTier.GREAT, - [Moves.FIRE_FANG]: ModifierTier.GREAT, - [Moves.PSYCHO_CUT]: ModifierTier.GREAT, - [Moves.ZEN_HEADBUTT]: ModifierTier.GREAT, - [Moves.FLASH_CANNON]: ModifierTier.GREAT, - [Moves.ROCK_CLIMB]: ModifierTier.GREAT, - [Moves.DEFOG]: ModifierTier.COMMON, - [Moves.TRICK_ROOM]: ModifierTier.COMMON, - [Moves.DRACO_METEOR]: ModifierTier.ULTRA, - [Moves.LEAF_STORM]: ModifierTier.ULTRA, - [Moves.POWER_WHIP]: ModifierTier.ULTRA, - [Moves.CROSS_POISON]: ModifierTier.GREAT, - [Moves.GUNK_SHOT]: ModifierTier.ULTRA, - [Moves.IRON_HEAD]: ModifierTier.GREAT, - [Moves.STONE_EDGE]: ModifierTier.ULTRA, - [Moves.STEALTH_ROCK]: ModifierTier.COMMON, - [Moves.GRASS_KNOT]: ModifierTier.ULTRA, - [Moves.BUG_BITE]: ModifierTier.GREAT, - [Moves.CHARGE_BEAM]: ModifierTier.GREAT, - [Moves.HONE_CLAWS]: ModifierTier.COMMON, - [Moves.WONDER_ROOM]: ModifierTier.COMMON, - [Moves.PSYSHOCK]: ModifierTier.GREAT, - [Moves.VENOSHOCK]: ModifierTier.GREAT, - [Moves.MAGIC_ROOM]: ModifierTier.COMMON, - [Moves.SMACK_DOWN]: ModifierTier.COMMON, - [Moves.SLUDGE_WAVE]: ModifierTier.GREAT, - [Moves.HEAVY_SLAM]: ModifierTier.GREAT, - [Moves.ELECTRO_BALL]: ModifierTier.GREAT, - [Moves.FLAME_CHARGE]: ModifierTier.GREAT, - [Moves.LOW_SWEEP]: ModifierTier.GREAT, - [Moves.ACID_SPRAY]: ModifierTier.COMMON, - [Moves.FOUL_PLAY]: ModifierTier.ULTRA, - [Moves.ROUND]: ModifierTier.COMMON, - [Moves.ECHOED_VOICE]: ModifierTier.COMMON, - [Moves.STORED_POWER]: ModifierTier.COMMON, - [Moves.ALLY_SWITCH]: ModifierTier.COMMON, - [Moves.SCALD]: ModifierTier.GREAT, - [Moves.HEX]: ModifierTier.GREAT, - [Moves.SKY_DROP]: ModifierTier.GREAT, - [Moves.INCINERATE]: ModifierTier.GREAT, - [Moves.QUASH]: ModifierTier.COMMON, - [Moves.ACROBATICS]: ModifierTier.GREAT, - [Moves.RETALIATE]: ModifierTier.GREAT, - [Moves.WATER_PLEDGE]: ModifierTier.GREAT, - [Moves.FIRE_PLEDGE]: ModifierTier.GREAT, - [Moves.GRASS_PLEDGE]: ModifierTier.GREAT, - [Moves.VOLT_SWITCH]: ModifierTier.GREAT, - [Moves.STRUGGLE_BUG]: ModifierTier.COMMON, - [Moves.BULLDOZE]: ModifierTier.GREAT, - [Moves.FROST_BREATH]: ModifierTier.GREAT, - [Moves.DRAGON_TAIL]: ModifierTier.GREAT, - [Moves.WORK_UP]: ModifierTier.COMMON, - [Moves.ELECTROWEB]: ModifierTier.GREAT, - [Moves.WILD_CHARGE]: ModifierTier.GREAT, - [Moves.DRILL_RUN]: ModifierTier.GREAT, - [Moves.RAZOR_SHELL]: ModifierTier.GREAT, - [Moves.HEAT_CRASH]: ModifierTier.GREAT, - [Moves.TAIL_SLAP]: ModifierTier.GREAT, - [Moves.HURRICANE]: ModifierTier.ULTRA, - [Moves.SNARL]: ModifierTier.COMMON, - [Moves.PHANTOM_FORCE]: ModifierTier.ULTRA, - [Moves.PETAL_BLIZZARD]: ModifierTier.GREAT, - [Moves.DISARMING_VOICE]: ModifierTier.GREAT, - [Moves.DRAINING_KISS]: ModifierTier.GREAT, - [Moves.GRASSY_TERRAIN]: ModifierTier.COMMON, - [Moves.MISTY_TERRAIN]: ModifierTier.COMMON, - [Moves.PLAY_ROUGH]: ModifierTier.GREAT, - [Moves.CONFIDE]: ModifierTier.COMMON, - [Moves.MYSTICAL_FIRE]: ModifierTier.GREAT, - [Moves.EERIE_IMPULSE]: ModifierTier.COMMON, - [Moves.VENOM_DRENCH]: ModifierTier.COMMON, - [Moves.ELECTRIC_TERRAIN]: ModifierTier.COMMON, - [Moves.DAZZLING_GLEAM]: ModifierTier.ULTRA, - [Moves.INFESTATION]: ModifierTier.COMMON, - [Moves.POWER_UP_PUNCH]: ModifierTier.GREAT, - [Moves.DARKEST_LARIAT]: ModifierTier.GREAT, - [Moves.HIGH_HORSEPOWER]: ModifierTier.ULTRA, - [Moves.SOLAR_BLADE]: ModifierTier.GREAT, - [Moves.THROAT_CHOP]: ModifierTier.GREAT, - [Moves.POLLEN_PUFF]: ModifierTier.GREAT, - [Moves.PSYCHIC_TERRAIN]: ModifierTier.COMMON, - [Moves.LUNGE]: ModifierTier.GREAT, - [Moves.SPEED_SWAP]: ModifierTier.COMMON, - [Moves.SMART_STRIKE]: ModifierTier.GREAT, - [Moves.BRUTAL_SWING]: ModifierTier.GREAT, - [Moves.AURORA_VEIL]: ModifierTier.COMMON, - [Moves.PSYCHIC_FANGS]: ModifierTier.GREAT, - [Moves.STOMPING_TANTRUM]: ModifierTier.GREAT, - [Moves.LIQUIDATION]: ModifierTier.ULTRA, - [Moves.BODY_PRESS]: ModifierTier.ULTRA, - [Moves.BREAKING_SWIPE]: ModifierTier.GREAT, - [Moves.STEEL_BEAM]: ModifierTier.ULTRA, - [Moves.EXPANDING_FORCE]: ModifierTier.GREAT, - [Moves.STEEL_ROLLER]: ModifierTier.COMMON, - [Moves.SCALE_SHOT]: ModifierTier.ULTRA, - [Moves.METEOR_BEAM]: ModifierTier.GREAT, - [Moves.MISTY_EXPLOSION]: ModifierTier.COMMON, - [Moves.GRASSY_GLIDE]: ModifierTier.COMMON, - [Moves.RISING_VOLTAGE]: ModifierTier.COMMON, - [Moves.TERRAIN_PULSE]: ModifierTier.COMMON, - [Moves.SKITTER_SMACK]: ModifierTier.GREAT, - [Moves.BURNING_JEALOUSY]: ModifierTier.GREAT, - [Moves.LASH_OUT]: ModifierTier.GREAT, - [Moves.POLTERGEIST]: ModifierTier.ULTRA, - [Moves.CORROSIVE_GAS]: ModifierTier.COMMON, - [Moves.COACHING]: ModifierTier.COMMON, - [Moves.FLIP_TURN]: ModifierTier.COMMON, - [Moves.TRIPLE_AXEL]: ModifierTier.COMMON, - [Moves.DUAL_WINGBEAT]: ModifierTier.COMMON, - [Moves.SCORCHING_SANDS]: ModifierTier.GREAT, - [Moves.TERA_BLAST]: ModifierTier.GREAT, - [Moves.ICE_SPINNER]: ModifierTier.GREAT, - [Moves.SNOWSCAPE]: ModifierTier.COMMON, - [Moves.POUNCE]: ModifierTier.COMMON, - [Moves.TRAILBLAZE]: ModifierTier.COMMON, - [Moves.CHILLING_WATER]: ModifierTier.COMMON, - [Moves.HARD_PRESS]: ModifierTier.GREAT, - [Moves.DRAGON_CHEER]: ModifierTier.COMMON, - [Moves.ALLURING_VOICE]: ModifierTier.GREAT, - [Moves.TEMPER_FLARE]: ModifierTier.GREAT, - [Moves.SUPERCELL_SLAM]: ModifierTier.GREAT, - [Moves.PSYCHIC_NOISE]: ModifierTier.GREAT, - [Moves.UPPER_HAND]: ModifierTier.COMMON, + [MoveId.MEGA_PUNCH]: ModifierTier.GREAT, + [MoveId.PAY_DAY]: ModifierTier.ULTRA, + [MoveId.FIRE_PUNCH]: ModifierTier.GREAT, + [MoveId.ICE_PUNCH]: ModifierTier.GREAT, + [MoveId.THUNDER_PUNCH]: ModifierTier.GREAT, + [MoveId.SWORDS_DANCE]: ModifierTier.COMMON, + [MoveId.CUT]: ModifierTier.COMMON, + [MoveId.FLY]: ModifierTier.COMMON, + [MoveId.MEGA_KICK]: ModifierTier.GREAT, + [MoveId.BODY_SLAM]: ModifierTier.GREAT, + [MoveId.TAKE_DOWN]: ModifierTier.GREAT, + [MoveId.DOUBLE_EDGE]: ModifierTier.ULTRA, + [MoveId.PIN_MISSILE]: ModifierTier.COMMON, + [MoveId.ROAR]: ModifierTier.COMMON, + [MoveId.FLAMETHROWER]: ModifierTier.ULTRA, + [MoveId.HYDRO_PUMP]: ModifierTier.ULTRA, + [MoveId.SURF]: ModifierTier.ULTRA, + [MoveId.ICE_BEAM]: ModifierTier.ULTRA, + [MoveId.BLIZZARD]: ModifierTier.ULTRA, + [MoveId.PSYBEAM]: ModifierTier.GREAT, + [MoveId.HYPER_BEAM]: ModifierTier.ULTRA, + [MoveId.LOW_KICK]: ModifierTier.COMMON, + [MoveId.COUNTER]: ModifierTier.COMMON, + [MoveId.STRENGTH]: ModifierTier.GREAT, + [MoveId.SOLAR_BEAM]: ModifierTier.ULTRA, + [MoveId.FIRE_SPIN]: ModifierTier.COMMON, + [MoveId.THUNDERBOLT]: ModifierTier.ULTRA, + [MoveId.THUNDER_WAVE]: ModifierTier.COMMON, + [MoveId.THUNDER]: ModifierTier.ULTRA, + [MoveId.EARTHQUAKE]: ModifierTier.ULTRA, + [MoveId.DIG]: ModifierTier.GREAT, + [MoveId.TOXIC]: ModifierTier.GREAT, + [MoveId.PSYCHIC]: ModifierTier.ULTRA, + [MoveId.AGILITY]: ModifierTier.COMMON, + [MoveId.NIGHT_SHADE]: ModifierTier.COMMON, + [MoveId.SCREECH]: ModifierTier.COMMON, + [MoveId.DOUBLE_TEAM]: ModifierTier.COMMON, + [MoveId.CONFUSE_RAY]: ModifierTier.COMMON, + [MoveId.LIGHT_SCREEN]: ModifierTier.COMMON, + [MoveId.HAZE]: ModifierTier.COMMON, + [MoveId.REFLECT]: ModifierTier.COMMON, + [MoveId.FOCUS_ENERGY]: ModifierTier.COMMON, + [MoveId.METRONOME]: ModifierTier.COMMON, + [MoveId.SELF_DESTRUCT]: ModifierTier.GREAT, + [MoveId.FIRE_BLAST]: ModifierTier.ULTRA, + [MoveId.WATERFALL]: ModifierTier.GREAT, + [MoveId.SWIFT]: ModifierTier.COMMON, + [MoveId.AMNESIA]: ModifierTier.COMMON, + [MoveId.DREAM_EATER]: ModifierTier.GREAT, + [MoveId.LEECH_LIFE]: ModifierTier.ULTRA, + [MoveId.FLASH]: ModifierTier.COMMON, + [MoveId.EXPLOSION]: ModifierTier.GREAT, + [MoveId.REST]: ModifierTier.COMMON, + [MoveId.ROCK_SLIDE]: ModifierTier.GREAT, + [MoveId.TRI_ATTACK]: ModifierTier.ULTRA, + [MoveId.SUPER_FANG]: ModifierTier.COMMON, + [MoveId.SUBSTITUTE]: ModifierTier.COMMON, + [MoveId.THIEF]: ModifierTier.GREAT, + [MoveId.SNORE]: ModifierTier.COMMON, + [MoveId.CURSE]: ModifierTier.COMMON, + [MoveId.REVERSAL]: ModifierTier.COMMON, + [MoveId.SPITE]: ModifierTier.COMMON, + [MoveId.PROTECT]: ModifierTier.COMMON, + [MoveId.SCARY_FACE]: ModifierTier.COMMON, + [MoveId.SLUDGE_BOMB]: ModifierTier.GREAT, + [MoveId.MUD_SLAP]: ModifierTier.COMMON, + [MoveId.SPIKES]: ModifierTier.COMMON, + [MoveId.ICY_WIND]: ModifierTier.GREAT, + [MoveId.OUTRAGE]: ModifierTier.ULTRA, + [MoveId.SANDSTORM]: ModifierTier.COMMON, + [MoveId.GIGA_DRAIN]: ModifierTier.ULTRA, + [MoveId.ENDURE]: ModifierTier.COMMON, + [MoveId.CHARM]: ModifierTier.COMMON, + [MoveId.FALSE_SWIPE]: ModifierTier.COMMON, + [MoveId.SWAGGER]: ModifierTier.COMMON, + [MoveId.STEEL_WING]: ModifierTier.GREAT, + [MoveId.ATTRACT]: ModifierTier.COMMON, + [MoveId.SLEEP_TALK]: ModifierTier.COMMON, + [MoveId.HEAL_BELL]: ModifierTier.COMMON, + [MoveId.RETURN]: ModifierTier.ULTRA, + [MoveId.FRUSTRATION]: ModifierTier.COMMON, + [MoveId.SAFEGUARD]: ModifierTier.COMMON, + [MoveId.PAIN_SPLIT]: ModifierTier.COMMON, + [MoveId.MEGAHORN]: ModifierTier.ULTRA, + [MoveId.BATON_PASS]: ModifierTier.COMMON, + [MoveId.ENCORE]: ModifierTier.COMMON, + [MoveId.IRON_TAIL]: ModifierTier.GREAT, + [MoveId.METAL_CLAW]: ModifierTier.COMMON, + [MoveId.SYNTHESIS]: ModifierTier.GREAT, + [MoveId.HIDDEN_POWER]: ModifierTier.GREAT, + [MoveId.RAIN_DANCE]: ModifierTier.COMMON, + [MoveId.SUNNY_DAY]: ModifierTier.COMMON, + [MoveId.CRUNCH]: ModifierTier.GREAT, + [MoveId.PSYCH_UP]: ModifierTier.COMMON, + [MoveId.SHADOW_BALL]: ModifierTier.ULTRA, + [MoveId.FUTURE_SIGHT]: ModifierTier.GREAT, + [MoveId.ROCK_SMASH]: ModifierTier.COMMON, + [MoveId.WHIRLPOOL]: ModifierTier.COMMON, + [MoveId.BEAT_UP]: ModifierTier.COMMON, + [MoveId.UPROAR]: ModifierTier.GREAT, + [MoveId.HEAT_WAVE]: ModifierTier.ULTRA, + [MoveId.HAIL]: ModifierTier.COMMON, + [MoveId.TORMENT]: ModifierTier.COMMON, + [MoveId.WILL_O_WISP]: ModifierTier.COMMON, + [MoveId.FACADE]: ModifierTier.GREAT, + [MoveId.FOCUS_PUNCH]: ModifierTier.COMMON, + [MoveId.NATURE_POWER]: ModifierTier.COMMON, + [MoveId.CHARGE]: ModifierTier.COMMON, + [MoveId.TAUNT]: ModifierTier.COMMON, + [MoveId.HELPING_HAND]: ModifierTier.COMMON, + [MoveId.TRICK]: ModifierTier.COMMON, + [MoveId.SUPERPOWER]: ModifierTier.ULTRA, + [MoveId.RECYCLE]: ModifierTier.COMMON, + [MoveId.REVENGE]: ModifierTier.GREAT, + [MoveId.BRICK_BREAK]: ModifierTier.GREAT, + [MoveId.KNOCK_OFF]: ModifierTier.GREAT, + [MoveId.ENDEAVOR]: ModifierTier.COMMON, + [MoveId.SKILL_SWAP]: ModifierTier.COMMON, + [MoveId.IMPRISON]: ModifierTier.COMMON, + [MoveId.SECRET_POWER]: ModifierTier.COMMON, + [MoveId.DIVE]: ModifierTier.GREAT, + [MoveId.FEATHER_DANCE]: ModifierTier.COMMON, + [MoveId.BLAZE_KICK]: ModifierTier.GREAT, + [MoveId.HYPER_VOICE]: ModifierTier.ULTRA, + [MoveId.BLAST_BURN]: ModifierTier.ULTRA, + [MoveId.HYDRO_CANNON]: ModifierTier.ULTRA, + [MoveId.WEATHER_BALL]: ModifierTier.COMMON, + [MoveId.FAKE_TEARS]: ModifierTier.COMMON, + [MoveId.AIR_CUTTER]: ModifierTier.GREAT, + [MoveId.OVERHEAT]: ModifierTier.ULTRA, + [MoveId.ROCK_TOMB]: ModifierTier.GREAT, + [MoveId.METAL_SOUND]: ModifierTier.COMMON, + [MoveId.COSMIC_POWER]: ModifierTier.COMMON, + [MoveId.SIGNAL_BEAM]: ModifierTier.GREAT, + [MoveId.SAND_TOMB]: ModifierTier.COMMON, + [MoveId.MUDDY_WATER]: ModifierTier.GREAT, + [MoveId.BULLET_SEED]: ModifierTier.GREAT, + [MoveId.AERIAL_ACE]: ModifierTier.GREAT, + [MoveId.ICICLE_SPEAR]: ModifierTier.GREAT, + [MoveId.IRON_DEFENSE]: ModifierTier.GREAT, + [MoveId.DRAGON_CLAW]: ModifierTier.ULTRA, + [MoveId.FRENZY_PLANT]: ModifierTier.ULTRA, + [MoveId.BULK_UP]: ModifierTier.COMMON, + [MoveId.BOUNCE]: ModifierTier.GREAT, + [MoveId.MUD_SHOT]: ModifierTier.GREAT, + [MoveId.POISON_TAIL]: ModifierTier.GREAT, + [MoveId.COVET]: ModifierTier.GREAT, + [MoveId.MAGICAL_LEAF]: ModifierTier.GREAT, + [MoveId.CALM_MIND]: ModifierTier.GREAT, + [MoveId.LEAF_BLADE]: ModifierTier.ULTRA, + [MoveId.DRAGON_DANCE]: ModifierTier.GREAT, + [MoveId.ROCK_BLAST]: ModifierTier.GREAT, + [MoveId.WATER_PULSE]: ModifierTier.GREAT, + [MoveId.ROOST]: ModifierTier.GREAT, + [MoveId.GRAVITY]: ModifierTier.COMMON, + [MoveId.GYRO_BALL]: ModifierTier.COMMON, + [MoveId.BRINE]: ModifierTier.GREAT, + [MoveId.PLUCK]: ModifierTier.GREAT, + [MoveId.TAILWIND]: ModifierTier.GREAT, + [MoveId.U_TURN]: ModifierTier.GREAT, + [MoveId.CLOSE_COMBAT]: ModifierTier.ULTRA, + [MoveId.PAYBACK]: ModifierTier.COMMON, + [MoveId.ASSURANCE]: ModifierTier.COMMON, + [MoveId.EMBARGO]: ModifierTier.COMMON, + [MoveId.FLING]: ModifierTier.COMMON, + [MoveId.GASTRO_ACID]: ModifierTier.GREAT, + [MoveId.POWER_SWAP]: ModifierTier.COMMON, + [MoveId.GUARD_SWAP]: ModifierTier.COMMON, + [MoveId.WORRY_SEED]: ModifierTier.GREAT, + [MoveId.TOXIC_SPIKES]: ModifierTier.GREAT, + [MoveId.FLARE_BLITZ]: ModifierTier.ULTRA, + [MoveId.AURA_SPHERE]: ModifierTier.GREAT, + [MoveId.ROCK_POLISH]: ModifierTier.COMMON, + [MoveId.POISON_JAB]: ModifierTier.GREAT, + [MoveId.DARK_PULSE]: ModifierTier.GREAT, + [MoveId.AQUA_TAIL]: ModifierTier.GREAT, + [MoveId.SEED_BOMB]: ModifierTier.GREAT, + [MoveId.AIR_SLASH]: ModifierTier.GREAT, + [MoveId.X_SCISSOR]: ModifierTier.GREAT, + [MoveId.BUG_BUZZ]: ModifierTier.GREAT, + [MoveId.DRAGON_PULSE]: ModifierTier.GREAT, + [MoveId.POWER_GEM]: ModifierTier.GREAT, + [MoveId.DRAIN_PUNCH]: ModifierTier.GREAT, + [MoveId.VACUUM_WAVE]: ModifierTier.COMMON, + [MoveId.FOCUS_BLAST]: ModifierTier.GREAT, + [MoveId.ENERGY_BALL]: ModifierTier.GREAT, + [MoveId.BRAVE_BIRD]: ModifierTier.ULTRA, + [MoveId.EARTH_POWER]: ModifierTier.ULTRA, + [MoveId.GIGA_IMPACT]: ModifierTier.GREAT, + [MoveId.NASTY_PLOT]: ModifierTier.COMMON, + [MoveId.AVALANCHE]: ModifierTier.GREAT, + [MoveId.SHADOW_CLAW]: ModifierTier.GREAT, + [MoveId.THUNDER_FANG]: ModifierTier.GREAT, + [MoveId.ICE_FANG]: ModifierTier.GREAT, + [MoveId.FIRE_FANG]: ModifierTier.GREAT, + [MoveId.PSYCHO_CUT]: ModifierTier.GREAT, + [MoveId.ZEN_HEADBUTT]: ModifierTier.GREAT, + [MoveId.FLASH_CANNON]: ModifierTier.GREAT, + [MoveId.ROCK_CLIMB]: ModifierTier.GREAT, + [MoveId.DEFOG]: ModifierTier.COMMON, + [MoveId.TRICK_ROOM]: ModifierTier.COMMON, + [MoveId.DRACO_METEOR]: ModifierTier.ULTRA, + [MoveId.LEAF_STORM]: ModifierTier.ULTRA, + [MoveId.POWER_WHIP]: ModifierTier.ULTRA, + [MoveId.CROSS_POISON]: ModifierTier.GREAT, + [MoveId.GUNK_SHOT]: ModifierTier.ULTRA, + [MoveId.IRON_HEAD]: ModifierTier.GREAT, + [MoveId.STONE_EDGE]: ModifierTier.ULTRA, + [MoveId.STEALTH_ROCK]: ModifierTier.COMMON, + [MoveId.GRASS_KNOT]: ModifierTier.ULTRA, + [MoveId.BUG_BITE]: ModifierTier.GREAT, + [MoveId.CHARGE_BEAM]: ModifierTier.GREAT, + [MoveId.HONE_CLAWS]: ModifierTier.COMMON, + [MoveId.WONDER_ROOM]: ModifierTier.COMMON, + [MoveId.PSYSHOCK]: ModifierTier.GREAT, + [MoveId.VENOSHOCK]: ModifierTier.GREAT, + [MoveId.MAGIC_ROOM]: ModifierTier.COMMON, + [MoveId.SMACK_DOWN]: ModifierTier.COMMON, + [MoveId.SLUDGE_WAVE]: ModifierTier.GREAT, + [MoveId.HEAVY_SLAM]: ModifierTier.GREAT, + [MoveId.ELECTRO_BALL]: ModifierTier.GREAT, + [MoveId.FLAME_CHARGE]: ModifierTier.GREAT, + [MoveId.LOW_SWEEP]: ModifierTier.GREAT, + [MoveId.ACID_SPRAY]: ModifierTier.COMMON, + [MoveId.FOUL_PLAY]: ModifierTier.ULTRA, + [MoveId.ROUND]: ModifierTier.COMMON, + [MoveId.ECHOED_VOICE]: ModifierTier.COMMON, + [MoveId.STORED_POWER]: ModifierTier.COMMON, + [MoveId.ALLY_SWITCH]: ModifierTier.COMMON, + [MoveId.SCALD]: ModifierTier.GREAT, + [MoveId.HEX]: ModifierTier.GREAT, + [MoveId.SKY_DROP]: ModifierTier.GREAT, + [MoveId.INCINERATE]: ModifierTier.GREAT, + [MoveId.QUASH]: ModifierTier.COMMON, + [MoveId.ACROBATICS]: ModifierTier.GREAT, + [MoveId.RETALIATE]: ModifierTier.GREAT, + [MoveId.WATER_PLEDGE]: ModifierTier.GREAT, + [MoveId.FIRE_PLEDGE]: ModifierTier.GREAT, + [MoveId.GRASS_PLEDGE]: ModifierTier.GREAT, + [MoveId.VOLT_SWITCH]: ModifierTier.GREAT, + [MoveId.STRUGGLE_BUG]: ModifierTier.COMMON, + [MoveId.BULLDOZE]: ModifierTier.GREAT, + [MoveId.FROST_BREATH]: ModifierTier.GREAT, + [MoveId.DRAGON_TAIL]: ModifierTier.GREAT, + [MoveId.WORK_UP]: ModifierTier.COMMON, + [MoveId.ELECTROWEB]: ModifierTier.GREAT, + [MoveId.WILD_CHARGE]: ModifierTier.GREAT, + [MoveId.DRILL_RUN]: ModifierTier.GREAT, + [MoveId.RAZOR_SHELL]: ModifierTier.GREAT, + [MoveId.HEAT_CRASH]: ModifierTier.GREAT, + [MoveId.TAIL_SLAP]: ModifierTier.GREAT, + [MoveId.HURRICANE]: ModifierTier.ULTRA, + [MoveId.SNARL]: ModifierTier.COMMON, + [MoveId.PHANTOM_FORCE]: ModifierTier.ULTRA, + [MoveId.PETAL_BLIZZARD]: ModifierTier.GREAT, + [MoveId.DISARMING_VOICE]: ModifierTier.GREAT, + [MoveId.DRAINING_KISS]: ModifierTier.GREAT, + [MoveId.GRASSY_TERRAIN]: ModifierTier.COMMON, + [MoveId.MISTY_TERRAIN]: ModifierTier.COMMON, + [MoveId.PLAY_ROUGH]: ModifierTier.GREAT, + [MoveId.CONFIDE]: ModifierTier.COMMON, + [MoveId.MYSTICAL_FIRE]: ModifierTier.GREAT, + [MoveId.EERIE_IMPULSE]: ModifierTier.COMMON, + [MoveId.VENOM_DRENCH]: ModifierTier.COMMON, + [MoveId.ELECTRIC_TERRAIN]: ModifierTier.COMMON, + [MoveId.DAZZLING_GLEAM]: ModifierTier.ULTRA, + [MoveId.INFESTATION]: ModifierTier.COMMON, + [MoveId.POWER_UP_PUNCH]: ModifierTier.GREAT, + [MoveId.DARKEST_LARIAT]: ModifierTier.GREAT, + [MoveId.HIGH_HORSEPOWER]: ModifierTier.ULTRA, + [MoveId.SOLAR_BLADE]: ModifierTier.GREAT, + [MoveId.THROAT_CHOP]: ModifierTier.GREAT, + [MoveId.POLLEN_PUFF]: ModifierTier.GREAT, + [MoveId.PSYCHIC_TERRAIN]: ModifierTier.COMMON, + [MoveId.LUNGE]: ModifierTier.GREAT, + [MoveId.SPEED_SWAP]: ModifierTier.COMMON, + [MoveId.SMART_STRIKE]: ModifierTier.GREAT, + [MoveId.BRUTAL_SWING]: ModifierTier.GREAT, + [MoveId.AURORA_VEIL]: ModifierTier.COMMON, + [MoveId.PSYCHIC_FANGS]: ModifierTier.GREAT, + [MoveId.STOMPING_TANTRUM]: ModifierTier.GREAT, + [MoveId.LIQUIDATION]: ModifierTier.ULTRA, + [MoveId.BODY_PRESS]: ModifierTier.ULTRA, + [MoveId.BREAKING_SWIPE]: ModifierTier.GREAT, + [MoveId.STEEL_BEAM]: ModifierTier.ULTRA, + [MoveId.EXPANDING_FORCE]: ModifierTier.GREAT, + [MoveId.STEEL_ROLLER]: ModifierTier.COMMON, + [MoveId.SCALE_SHOT]: ModifierTier.ULTRA, + [MoveId.METEOR_BEAM]: ModifierTier.GREAT, + [MoveId.MISTY_EXPLOSION]: ModifierTier.COMMON, + [MoveId.GRASSY_GLIDE]: ModifierTier.COMMON, + [MoveId.RISING_VOLTAGE]: ModifierTier.COMMON, + [MoveId.TERRAIN_PULSE]: ModifierTier.COMMON, + [MoveId.SKITTER_SMACK]: ModifierTier.GREAT, + [MoveId.BURNING_JEALOUSY]: ModifierTier.GREAT, + [MoveId.LASH_OUT]: ModifierTier.GREAT, + [MoveId.POLTERGEIST]: ModifierTier.ULTRA, + [MoveId.CORROSIVE_GAS]: ModifierTier.COMMON, + [MoveId.COACHING]: ModifierTier.COMMON, + [MoveId.FLIP_TURN]: ModifierTier.COMMON, + [MoveId.TRIPLE_AXEL]: ModifierTier.COMMON, + [MoveId.DUAL_WINGBEAT]: ModifierTier.COMMON, + [MoveId.SCORCHING_SANDS]: ModifierTier.GREAT, + [MoveId.TERA_BLAST]: ModifierTier.GREAT, + [MoveId.ICE_SPINNER]: ModifierTier.GREAT, + [MoveId.SNOWSCAPE]: ModifierTier.COMMON, + [MoveId.POUNCE]: ModifierTier.COMMON, + [MoveId.TRAILBLAZE]: ModifierTier.COMMON, + [MoveId.CHILLING_WATER]: ModifierTier.COMMON, + [MoveId.HARD_PRESS]: ModifierTier.GREAT, + [MoveId.DRAGON_CHEER]: ModifierTier.COMMON, + [MoveId.ALLURING_VOICE]: ModifierTier.GREAT, + [MoveId.TEMPER_FLARE]: ModifierTier.GREAT, + [MoveId.SUPERCELL_SLAM]: ModifierTier.GREAT, + [MoveId.PSYCHIC_NOISE]: ModifierTier.GREAT, + [MoveId.UPPER_HAND]: ModifierTier.COMMON, }; diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index f395c3bb832..2be2fdca10f 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -5,7 +5,7 @@ import { MoveFlags } from "#enums/MoveFlags"; import type Pokemon from "../field/pokemon"; import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils/common"; import type { BattlerIndex } from "../battle"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { SubstituteTag } from "./battler-tags"; import { isNullOrUndefined } from "../utils/common"; import Phaser from "phaser"; @@ -498,7 +498,7 @@ class AnimTimedAddBgEvent extends AnimTimedBgEvent { } } -export const moveAnims = new Map(); +export const moveAnims = new Map(); export const chargeAnims = new Map(); export const commonAnims = new Map(); export const encounterAnims = new Map(); @@ -521,7 +521,7 @@ export function initCommonAnims(): Promise { }); } -export function initMoveAnim(move: Moves): Promise { +export function initMoveAnim(move: MoveId): Promise { return new Promise(resolve => { if (moveAnims.has(move)) { if (moveAnims.get(move) !== null) { @@ -544,12 +544,12 @@ export function initMoveAnim(move: Moves): Promise { moveAnims.set(move, null); const defaultMoveAnim = allMoves[move] instanceof AttackMove - ? Moves.TACKLE + ? MoveId.TACKLE : allMoves[move] instanceof SelfStatusMove - ? Moves.FOCUS_ENERGY - : Moves.TAIL_WHIP; + ? MoveId.FOCUS_ENERGY + : MoveId.TAIL_WHIP; - const fetchAnimAndResolve = (move: Moves) => { + const fetchAnimAndResolve = (move: MoveId) => { globalScene .cachedFetch(`./battle-anims/${animationFileName(move)}.json`) .then(response => { @@ -594,7 +594,7 @@ export function initMoveAnim(move: Moves): Promise { * @param move the move to populate an animation for * @param defaultMoveAnim the move to use as the default animation */ -function useDefaultAnim(move: Moves, defaultMoveAnim: Moves) { +function useDefaultAnim(move: MoveId, defaultMoveAnim: MoveId) { populateMoveAnim(move, moveAnims.get(defaultMoveAnim)); } @@ -606,7 +606,7 @@ function useDefaultAnim(move: Moves, defaultMoveAnim: Moves) { * * @remarks use {@linkcode useDefaultAnim} to use a default animation */ -function logMissingMoveAnim(move: Moves, ...optionalParams: any[]) { +function logMissingMoveAnim(move: MoveId, ...optionalParams: any[]) { const moveName = animationFileName(move); console.warn(`Could not load animation file for move '${moveName}'`, ...optionalParams); } @@ -664,7 +664,7 @@ export function initMoveChargeAnim(chargeAnim: ChargeAnim): Promise { }); } -function populateMoveAnim(move: Moves, animSource: any): void { +function populateMoveAnim(move: MoveId, animSource: any): void { const moveAnim = new AnimConfig(animSource); if (moveAnims.get(move) === null) { moveAnims.set(move, moveAnim); @@ -697,7 +697,7 @@ export async function loadEncounterAnimAssets(startLoad?: boolean): Promise { +export function loadMoveAnimAssets(moveIds: MoveId[], startLoad?: boolean): Promise { return new Promise(resolve => { const moveAnimations = moveIds.flatMap(m => moveAnims.get(m) as AnimConfig); for (const moveId of moveIds) { @@ -1425,9 +1425,9 @@ export class CommonBattleAnim extends BattleAnim { } export class MoveAnim extends BattleAnim { - public move: Moves; + public move: MoveId; - constructor(move: Moves, user: Pokemon, target: BattlerIndex, playOnEmptyField = false) { + constructor(move: MoveId, user: Pokemon, target: BattlerIndex, playOnEmptyField = false) { // Set target to the user pokemon if no target is found to avoid crashes super(user, globalScene.getField()[target] ?? user, playOnEmptyField); @@ -1456,7 +1456,7 @@ export class MoveAnim extends BattleAnim { export class MoveChargeAnim extends MoveAnim { private chargeAnim: ChargeAnim; - constructor(chargeAnim: ChargeAnim, move: Moves, user: Pokemon) { + constructor(chargeAnim: ChargeAnim, move: MoveId, user: Pokemon) { super(move, user, 0); this.chargeAnim = chargeAnim; @@ -1502,8 +1502,8 @@ export async function populateAnims() { const chargeAnimIds = getEnumValues(ChargeAnim) as ChargeAnim[]; const commonNamePattern = /name: (?:Common:)?(Opp )?(.*)/; const moveNameToId = {}; - for (const move of getEnumValues(Moves).slice(1)) { - const moveName = Moves[move].toUpperCase().replace(/\_/g, ""); + for (const move of getEnumValues(MoveId).slice(1)) { + const moveName = MoveId[move].toUpperCase().replace(/\_/g, ""); moveNameToId[moveName] = move; } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index b9795ab5a85..cf5e6e01b45 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -37,7 +37,7 @@ import i18next from "#app/plugins/i18n"; import { BooleanHolder, getFrameMs, NumberHolder, toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { Species } from "#enums/species"; import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat } from "#enums/stat"; @@ -62,7 +62,7 @@ export class BattlerTag { public tagType: BattlerTagType; public lapseTypes: BattlerTagLapseType[]; public turnCount: number; - public sourceMove: Moves; + public sourceMove: MoveId; public sourceId?: number; public isBatonPassable: boolean; @@ -70,7 +70,7 @@ export class BattlerTag { tagType: BattlerTagType, lapseType: BattlerTagLapseType | BattlerTagLapseType[], turnCount: number, - sourceMove?: Moves, + sourceMove?: MoveId, sourceId?: number, isBatonPassable = false, ) { @@ -143,7 +143,7 @@ export interface TerrainBattlerTag { /** * Base class for tags that restrict the usage of moves. This effect is generally referred to as "disabling" a move - * in-game. This is not to be confused with {@linkcode Moves.DISABLE}. + * in-game. This is not to be confused with {@linkcode MoveId.DISABLE}. * * Descendants can override {@linkcode isMoveRestricted} to restrict moves that * match a condition. A restricted move gets cancelled before it is used. @@ -154,7 +154,7 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { tagType: BattlerTagType, lapseType: BattlerTagLapseType | BattlerTagLapseType[], turnCount: number, - sourceMove?: Moves, + sourceMove?: MoveId, sourceId?: number, ) { super(tagType, lapseType, turnCount, sourceMove, sourceId); @@ -183,21 +183,21 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { /** * Gets whether this tag is restricting a move. * - * @param move - {@linkcode Moves} ID to check restriction for. + * @param move - {@linkcode MoveId} ID to check restriction for. * @param user - The {@linkcode Pokemon} involved * @returns `true` if the move is restricted by this tag, otherwise `false`. */ - public abstract isMoveRestricted(move: Moves, user?: Pokemon): boolean; + public abstract isMoveRestricted(move: MoveId, user?: Pokemon): boolean; /** * Checks if this tag is restricting a move based on a user's decisions during the target selection phase * - * @param {Moves} _move {@linkcode Moves} move ID to check restriction for + * @param {MoveId} _move {@linkcode MoveId} move ID to check restriction for * @param {Pokemon} _user {@linkcode Pokemon} the user of the above move * @param {Pokemon} _target {@linkcode Pokemon} the target of the above move * @returns {boolean} `false` unless overridden by the child tag */ - isMoveTargetRestricted(_move: Moves, _user: Pokemon, _target: Pokemon): boolean { + isMoveTargetRestricted(_move: MoveId, _user: Pokemon, _target: Pokemon): boolean { return false; } @@ -205,10 +205,10 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { * Gets the text to display when the player attempts to select a move that is restricted by this tag. * * @param {Pokemon} pokemon {@linkcode Pokemon} for which the player is attempting to select the restricted move - * @param {Moves} move {@linkcode Moves} ID of the move that is having its selection denied + * @param {MoveId} move {@linkcode MoveId} ID of the move that is having its selection denied * @returns {string} text to display when the player attempts to select the restricted move */ - abstract selectionDeniedText(pokemon: Pokemon, move: Moves): string; + abstract selectionDeniedText(pokemon: Pokemon, move: MoveId): string; /** * Gets the text to display when a move's execution is prevented as a result of the restriction. @@ -216,10 +216,10 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { * pokemon first selects a move, then gets outsped by a pokemon using a move that restricts the selected move. * * @param {Pokemon} _pokemon {@linkcode Pokemon} attempting to use the restricted move - * @param {Moves} _move {@linkcode Moves} ID of the move being interrupted + * @param {MoveId} _move {@linkcode MoveId} ID of the move being interrupted * @returns {string} text to display when the move is interrupted */ - interruptedText(_pokemon: Pokemon, _move: Moves): string { + interruptedText(_pokemon: Pokemon, _move: MoveId): string { return ""; } } @@ -235,17 +235,17 @@ export class ThroatChoppedTag extends MoveRestrictionBattlerTag { BattlerTagType.THROAT_CHOPPED, [BattlerTagLapseType.TURN_END, BattlerTagLapseType.PRE_MOVE], 2, - Moves.THROAT_CHOP, + MoveId.THROAT_CHOP, ); } /** - * Checks if a {@linkcode Moves | move} is restricted by Throat Chop. + * Checks if a {@linkcode MoveId | move} is restricted by Throat Chop. * @override - * @param {Moves} move the {@linkcode Moves | move} to check for sound-based restriction + * @param {MoveId} move the {@linkcode MoveId | move} to check for sound-based restriction * @returns true if the move is sound-based */ - override isMoveRestricted(move: Moves): boolean { + override isMoveRestricted(move: MoveId): boolean { return allMoves[move].hasFlag(MoveFlags.SOUND_BASED); } @@ -253,10 +253,10 @@ export class ThroatChoppedTag extends MoveRestrictionBattlerTag { * Shows a message when the player attempts to select a move that is restricted by Throat Chop. * @override * @param {Pokemon} _pokemon the {@linkcode Pokemon} that is attempting to select the restricted move - * @param {Moves} move the {@linkcode Moves | move} that is being restricted + * @param {MoveId} move the {@linkcode MoveId | move} that is being restricted * @returns the message to display when the player attempts to select the restricted move */ - override selectionDeniedText(_pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(_pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveCannotBeSelected", { moveName: allMoves[move].name, }); @@ -266,10 +266,10 @@ export class ThroatChoppedTag extends MoveRestrictionBattlerTag { * Shows a message when a move is interrupted by Throat Chop. * @override * @param {Pokemon} pokemon the interrupted {@linkcode Pokemon} - * @param {Moves} _move the {@linkcode Moves | move} that was interrupted + * @param {MoveId} _move the {@linkcode MoveId | move} that was interrupted * @returns the message to display when the move is interrupted */ - override interruptedText(pokemon: Pokemon, _move: Moves): string { + override interruptedText(pokemon: Pokemon, _move: MoveId): string { return i18next.t("battle:throatChopInterruptedMove", { pokemonName: getPokemonNameWithAffix(pokemon), }); @@ -277,25 +277,25 @@ export class ThroatChoppedTag extends MoveRestrictionBattlerTag { } /** - * Tag representing the "disabling" effect performed by {@linkcode Moves.DISABLE} and {@linkcode AbilityId.CURSED_BODY}. + * Tag representing the "disabling" effect performed by {@linkcode MoveId.DISABLE} and {@linkcode AbilityId.CURSED_BODY}. * When the tag is added, the last-used move of the tag holder is set as the disabled move. */ export class DisabledTag extends MoveRestrictionBattlerTag { /** The move being disabled. Gets set when {@linkcode onAdd} is called for this tag. */ - private moveId: Moves = Moves.NONE; + private moveId: MoveId = MoveId.NONE; constructor(sourceId: number) { super( BattlerTagType.DISABLED, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END], 4, - Moves.DISABLE, + MoveId.DISABLE, sourceId, ); } /** @override */ - override isMoveRestricted(move: Moves): boolean { + override isMoveRestricted(move: MoveId): boolean { return move === this.moveId; } @@ -309,7 +309,7 @@ export class DisabledTag extends MoveRestrictionBattlerTag { super.onAdd(pokemon); const move = pokemon.getLastXMoves(-1).find(m => !m.virtual); - if (isNullOrUndefined(move) || move.move === Moves.STRUGGLE || move.move === Moves.NONE) { + if (isNullOrUndefined(move) || move.move === MoveId.STRUGGLE || move.move === MoveId.NONE) { return; } @@ -336,17 +336,17 @@ export class DisabledTag extends MoveRestrictionBattlerTag { } /** @override */ - override selectionDeniedText(_pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(_pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabled", { moveName: allMoves[move].name }); } /** * @override * @param {Pokemon} pokemon {@linkcode Pokemon} attempting to use the restricted move - * @param {Moves} move {@linkcode Moves} ID of the move being interrupted + * @param {MoveId} move {@linkcode MoveId} ID of the move being interrupted * @returns {string} text to display when the move is interrupted */ - override interruptedText(pokemon: Pokemon, move: Moves): string { + override interruptedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:disableInterruptedMove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, @@ -365,14 +365,14 @@ export class DisabledTag extends MoveRestrictionBattlerTag { * @extends MoveRestrictionBattlerTag */ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { - private moveId = Moves.NONE; + private moveId = MoveId.NONE; constructor() { super(BattlerTagType.GORILLA_TACTICS, BattlerTagLapseType.CUSTOM, 0); } /** @override */ - override isMoveRestricted(move: Moves): boolean { + override isMoveRestricted(move: MoveId): boolean { return move !== this.moveId; } @@ -416,10 +416,10 @@ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { * * @override * @param {Pokemon} pokemon n/a - * @param {Moves} _move {@linkcode Moves} ID of the move being denied + * @param {MoveId} _move {@linkcode MoveId} ID of the move being denied * @returns {string} text to display when the move is denied */ - override selectionDeniedText(pokemon: Pokemon, _move: Moves): string { + override selectionDeniedText(pokemon: Pokemon, _move: MoveId): string { return i18next.t("battle:canOnlyUseMove", { moveName: allMoves[this.moveId].name, pokemonName: getPokemonNameWithAffix(pokemon), @@ -429,10 +429,10 @@ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { /** * Gets the last valid move from the pokemon's move history. * @param {Pokemon} pokemon {@linkcode Pokemon} to get the last valid move from - * @returns {Moves | undefined} the last valid move from the pokemon's move history + * @returns {MoveId | undefined} the last valid move from the pokemon's move history */ - getLastValidMove(pokemon: Pokemon): Moves | undefined { - const move = pokemon.getLastXMoves().find(m => m.move !== Moves.NONE && m.move !== Moves.STRUGGLE && !m.virtual); + getLastValidMove(pokemon: Pokemon): MoveId | undefined { + const move = pokemon.getLastXMoves().find(m => m.move !== MoveId.NONE && m.move !== MoveId.STRUGGLE && !m.virtual); return move?.move; } @@ -442,7 +442,7 @@ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { * BattlerTag that represents the "recharge" effects of moves like Hyper Beam. */ export class RechargingTag extends BattlerTag { - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super(BattlerTagType.RECHARGING, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END], 2, sourceMove); } @@ -450,7 +450,7 @@ export class RechargingTag extends BattlerTag { super.onAdd(pokemon); // Queue a placeholder move for the Pokemon to "use" next turn - pokemon.getMoveQueue().push({ move: Moves.NONE, targets: [] }); + pokemon.getMoveQueue().push({ move: MoveId.NONE, targets: [] }); } /** Cancels the source's move this turn and queues a "__ must recharge!" message */ @@ -479,7 +479,7 @@ export class BeakBlastChargingTag extends BattlerTag { BattlerTagType.BEAK_BLAST_CHARGING, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END, BattlerTagLapseType.AFTER_HIT], 1, - Moves.BEAK_BLAST, + MoveId.BEAK_BLAST, ); } @@ -578,7 +578,7 @@ export class TrappedTag extends BattlerTag { tagType: BattlerTagType, lapseType: BattlerTagLapseType, turnCount: number, - sourceMove: Moves, + sourceMove: MoveId, sourceId: number, ) { super(tagType, lapseType, turnCount, sourceMove, sourceId, true); @@ -635,7 +635,7 @@ export class TrappedTag extends BattlerTag { */ class NoRetreatTag extends TrappedTag { constructor(sourceId: number) { - super(BattlerTagType.NO_RETREAT, BattlerTagLapseType.CUSTOM, 0, Moves.NO_RETREAT, sourceId); + super(BattlerTagType.NO_RETREAT, BattlerTagLapseType.CUSTOM, 0, MoveId.NO_RETREAT, sourceId); } /** overrides {@linkcode TrappedTag.apply}, removing the Ghost-type condition */ @@ -648,7 +648,7 @@ class NoRetreatTag extends TrappedTag { * BattlerTag that represents the {@link https://bulbapedia.bulbagarden.net/wiki/Flinch Flinch} status condition */ export class FlinchedTag extends BattlerTag { - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super(BattlerTagType.FLINCHED, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END], 0, sourceMove); } @@ -683,7 +683,7 @@ export class FlinchedTag extends BattlerTag { } export class InterruptedTag extends BattlerTag { - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super(BattlerTagType.INTERRUPTED, BattlerTagLapseType.PRE_MOVE, 0, sourceMove); } @@ -696,7 +696,7 @@ export class InterruptedTag extends BattlerTag { pokemon.getMoveQueue().shift(); pokemon.pushMoveHistory({ - move: Moves.NONE, + move: MoveId.NONE, result: MoveResult.OTHER, targets: [], }); @@ -712,7 +712,7 @@ export class InterruptedTag extends BattlerTag { * BattlerTag that represents the {@link https://bulbapedia.bulbagarden.net/wiki/Confusion_(status_condition) Confusion} status condition */ export class ConfusedTag extends BattlerTag { - constructor(turnCount: number, sourceMove: Moves) { + constructor(turnCount: number, sourceMove: MoveId) { super(BattlerTagType.CONFUSED, BattlerTagLapseType.MOVE, turnCount, sourceMove, undefined, true); } @@ -792,7 +792,7 @@ export class ConfusedTag extends BattlerTag { * @see {@linkcode apply} */ export class DestinyBondTag extends BattlerTag { - constructor(sourceMove: Moves, sourceId: number) { + constructor(sourceMove: MoveId, sourceId: number) { super(BattlerTagType.DESTINY_BOND, BattlerTagLapseType.PRE_MOVE, 1, sourceMove, sourceId, true); } @@ -926,7 +926,7 @@ export class SeedTag extends BattlerTag { private sourceIndex: number; constructor(sourceId: number) { - super(BattlerTagType.SEEDED, BattlerTagLapseType.TURN_END, 1, Moves.LEECH_SEED, sourceId, true); + super(BattlerTagType.SEEDED, BattlerTagLapseType.TURN_END, 1, MoveId.LEECH_SEED, sourceId, true); } /** @@ -1059,7 +1059,7 @@ export class PowderTag extends BattlerTag { export class NightmareTag extends BattlerTag { constructor() { - super(BattlerTagType.NIGHTMARE, BattlerTagLapseType.TURN_END, 1, Moves.NIGHTMARE); + super(BattlerTagType.NIGHTMARE, BattlerTagLapseType.TURN_END, 1, MoveId.NIGHTMARE); } onAdd(pokemon: Pokemon): void { @@ -1110,7 +1110,7 @@ export class NightmareTag extends BattlerTag { } export class FrenzyTag extends BattlerTag { - constructor(turnCount: number, sourceMove: Moves, sourceId: number) { + constructor(turnCount: number, sourceMove: MoveId, sourceId: number) { super(BattlerTagType.FRENZY, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); } @@ -1125,25 +1125,25 @@ export class FrenzyTag extends BattlerTag { } /** - * Applies the effects of {@linkcode Moves.ENCORE} onto the target Pokemon. + * Applies the effects of {@linkcode MoveId.ENCORE} onto the target Pokemon. * Encore forces the target Pokemon to use its most-recent move for 3 turns. */ export class EncoreTag extends MoveRestrictionBattlerTag { - public moveId: Moves; + public moveId: MoveId; constructor(sourceId: number) { super( BattlerTagType.ENCORE, [BattlerTagLapseType.CUSTOM, BattlerTagLapseType.AFTER_MOVE], 3, - Moves.ENCORE, + MoveId.ENCORE, sourceId, ); } loadTag(source: BattlerTag | any): void { super.loadTag(source); - this.moveId = source.moveId as Moves; + this.moveId = source.moveId as MoveId; } canAdd(pokemon: Pokemon): boolean { @@ -1159,13 +1159,13 @@ export class EncoreTag extends MoveRestrictionBattlerTag { } switch (repeatableMove.move) { - case Moves.MIMIC: - case Moves.MIRROR_MOVE: - case Moves.TRANSFORM: - case Moves.STRUGGLE: - case Moves.SKETCH: - case Moves.SLEEP_TALK: - case Moves.ENCORE: + case MoveId.MIMIC: + case MoveId.MIRROR_MOVE: + case MoveId.TRANSFORM: + case MoveId.STRUGGLE: + case MoveId.SKETCH: + case MoveId.SLEEP_TALK: + case MoveId.ENCORE: return false; } @@ -1213,18 +1213,18 @@ export class EncoreTag extends MoveRestrictionBattlerTag { /** * Checks if the move matches the moveId stored within the tag and returns a boolean value - * @param move {@linkcode Moves} the move selected + * @param move {@linkcode MoveId} the move selected * @param user N/A * @returns `true` if the move does not match with the moveId stored and as a result, restricted */ - override isMoveRestricted(move: Moves, _user?: Pokemon): boolean { + override isMoveRestricted(move: MoveId, _user?: Pokemon): boolean { if (move !== this.moveId) { return true; } return false; } - override selectionDeniedText(_pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(_pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabled", { moveName: allMoves[move].name }); } @@ -1241,7 +1241,7 @@ export class EncoreTag extends MoveRestrictionBattlerTag { export class HelpingHandTag extends BattlerTag { constructor(sourceId: number) { - super(BattlerTagType.HELPING_HAND, BattlerTagLapseType.TURN_END, 1, Moves.HELPING_HAND, sourceId); + super(BattlerTagType.HELPING_HAND, BattlerTagLapseType.TURN_END, 1, MoveId.HELPING_HAND, sourceId); } onAdd(pokemon: Pokemon): void { @@ -1260,7 +1260,7 @@ export class HelpingHandTag extends BattlerTag { */ export class IngrainTag extends TrappedTag { constructor(sourceId: number) { - super(BattlerTagType.INGRAIN, BattlerTagLapseType.TURN_END, 1, Moves.INGRAIN, sourceId); + super(BattlerTagType.INGRAIN, BattlerTagLapseType.TURN_END, 1, MoveId.INGRAIN, sourceId); } /** @@ -1310,7 +1310,7 @@ export class IngrainTag extends TrappedTag { */ export class OctolockTag extends TrappedTag { constructor(sourceId: number) { - super(BattlerTagType.OCTOLOCK, BattlerTagLapseType.TURN_END, 1, Moves.OCTOLOCK, sourceId); + super(BattlerTagType.OCTOLOCK, BattlerTagLapseType.TURN_END, 1, MoveId.OCTOLOCK, sourceId); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { @@ -1327,7 +1327,7 @@ export class OctolockTag extends TrappedTag { export class AquaRingTag extends BattlerTag { constructor() { - super(BattlerTagType.AQUA_RING, BattlerTagLapseType.TURN_END, 1, Moves.AQUA_RING, undefined, true); + super(BattlerTagType.AQUA_RING, BattlerTagLapseType.TURN_END, 1, MoveId.AQUA_RING, undefined, true); } onAdd(pokemon: Pokemon): void { @@ -1361,10 +1361,10 @@ export class AquaRingTag extends BattlerTag { } } -/** Tag used to allow moves that interact with {@link Moves.MINIMIZE} to function */ +/** Tag used to allow moves that interact with {@link MoveId.MINIMIZE} to function */ export class MinimizeTag extends BattlerTag { constructor() { - super(BattlerTagType.MINIMIZED, BattlerTagLapseType.TURN_END, 1, Moves.MINIMIZE); + super(BattlerTagType.MINIMIZED, BattlerTagLapseType.TURN_END, 1, MoveId.MINIMIZE); } onAdd(pokemon: Pokemon): void { @@ -1382,7 +1382,7 @@ export class MinimizeTag extends BattlerTag { export class DrowsyTag extends BattlerTag { constructor() { - super(BattlerTagType.DROWSY, BattlerTagLapseType.TURN_END, 2, Moves.YAWN); + super(BattlerTagType.DROWSY, BattlerTagLapseType.TURN_END, 2, MoveId.YAWN); } canAdd(pokemon: Pokemon): boolean { @@ -1416,7 +1416,13 @@ export class DrowsyTag extends BattlerTag { export abstract class DamagingTrapTag extends TrappedTag { private commonAnim: CommonAnim; - constructor(tagType: BattlerTagType, commonAnim: CommonAnim, turnCount: number, sourceMove: Moves, sourceId: number) { + constructor( + tagType: BattlerTagType, + commonAnim: CommonAnim, + turnCount: number, + sourceMove: MoveId, + sourceId: number, + ) { super(tagType, BattlerTagLapseType.TURN_END, turnCount, sourceMove, sourceId); this.commonAnim = commonAnim; @@ -1461,7 +1467,7 @@ export abstract class DamagingTrapTag extends TrappedTag { export class BindTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.BIND, CommonAnim.BIND, turnCount, Moves.BIND, sourceId); + super(BattlerTagType.BIND, CommonAnim.BIND, turnCount, MoveId.BIND, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1475,7 +1481,7 @@ export class BindTag extends DamagingTrapTag { export class WrapTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.WRAP, CommonAnim.WRAP, turnCount, Moves.WRAP, sourceId); + super(BattlerTagType.WRAP, CommonAnim.WRAP, turnCount, MoveId.WRAP, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1487,7 +1493,13 @@ export class WrapTag extends DamagingTrapTag { } export abstract class VortexTrapTag extends DamagingTrapTag { - constructor(tagType: BattlerTagType, commonAnim: CommonAnim, turnCount: number, sourceMove: Moves, sourceId: number) { + constructor( + tagType: BattlerTagType, + commonAnim: CommonAnim, + turnCount: number, + sourceMove: MoveId, + sourceId: number, + ) { super(tagType, commonAnim, turnCount, sourceMove, sourceId); } @@ -1500,19 +1512,19 @@ export abstract class VortexTrapTag extends DamagingTrapTag { export class FireSpinTag extends VortexTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.FIRE_SPIN, CommonAnim.FIRE_SPIN, turnCount, Moves.FIRE_SPIN, sourceId); + super(BattlerTagType.FIRE_SPIN, CommonAnim.FIRE_SPIN, turnCount, MoveId.FIRE_SPIN, sourceId); } } export class WhirlpoolTag extends VortexTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.WHIRLPOOL, CommonAnim.WHIRLPOOL, turnCount, Moves.WHIRLPOOL, sourceId); + super(BattlerTagType.WHIRLPOOL, CommonAnim.WHIRLPOOL, turnCount, MoveId.WHIRLPOOL, sourceId); } } export class ClampTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.CLAMP, CommonAnim.CLAMP, turnCount, Moves.CLAMP, sourceId); + super(BattlerTagType.CLAMP, CommonAnim.CLAMP, turnCount, MoveId.CLAMP, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1525,7 +1537,7 @@ export class ClampTag extends DamagingTrapTag { export class SandTombTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.SAND_TOMB, CommonAnim.SAND_TOMB, turnCount, Moves.SAND_TOMB, sourceId); + super(BattlerTagType.SAND_TOMB, CommonAnim.SAND_TOMB, turnCount, MoveId.SAND_TOMB, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1538,7 +1550,7 @@ export class SandTombTag extends DamagingTrapTag { export class MagmaStormTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.MAGMA_STORM, CommonAnim.MAGMA_STORM, turnCount, Moves.MAGMA_STORM, sourceId); + super(BattlerTagType.MAGMA_STORM, CommonAnim.MAGMA_STORM, turnCount, MoveId.MAGMA_STORM, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1550,7 +1562,7 @@ export class MagmaStormTag extends DamagingTrapTag { export class SnapTrapTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.SNAP_TRAP, CommonAnim.SNAP_TRAP, turnCount, Moves.SNAP_TRAP, sourceId); + super(BattlerTagType.SNAP_TRAP, CommonAnim.SNAP_TRAP, turnCount, MoveId.SNAP_TRAP, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1562,7 +1574,7 @@ export class SnapTrapTag extends DamagingTrapTag { export class ThunderCageTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.THUNDER_CAGE, CommonAnim.THUNDER_CAGE, turnCount, Moves.THUNDER_CAGE, sourceId); + super(BattlerTagType.THUNDER_CAGE, CommonAnim.THUNDER_CAGE, turnCount, MoveId.THUNDER_CAGE, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1575,7 +1587,7 @@ export class ThunderCageTag extends DamagingTrapTag { export class InfestationTag extends DamagingTrapTag { constructor(turnCount: number, sourceId: number) { - super(BattlerTagType.INFESTATION, CommonAnim.INFESTATION, turnCount, Moves.INFESTATION, sourceId); + super(BattlerTagType.INFESTATION, CommonAnim.INFESTATION, turnCount, MoveId.INFESTATION, sourceId); } getTrapMessage(pokemon: Pokemon): string { @@ -1587,7 +1599,7 @@ export class InfestationTag extends DamagingTrapTag { } export class ProtectedTag extends BattlerTag { - constructor(sourceMove: Moves, tagType: BattlerTagType = BattlerTagType.PROTECTED) { + constructor(sourceMove: MoveId, tagType: BattlerTagType = BattlerTagType.PROTECTED) { super(tagType, BattlerTagLapseType.TURN_END, 0, sourceMove); } @@ -1659,12 +1671,12 @@ export class ContactProtectedTag extends ProtectedTag { /** * `BattlerTag` class for moves that block damaging moves damage the enemy if the enemy's move makes contact - * Used by {@linkcode Moves.SPIKY_SHIELD} + * Used by {@linkcode MoveId.SPIKY_SHIELD} */ export class ContactDamageProtectedTag extends ContactProtectedTag { private damageRatio: number; - constructor(sourceMove: Moves, damageRatio: number) { + constructor(sourceMove: MoveId, damageRatio: number) { super(sourceMove, BattlerTagType.SPIKY_SHIELD); this.damageRatio = damageRatio; } @@ -1704,7 +1716,7 @@ export class ContactSetStatusProtectedTag extends DamageProtectedTag { * @param statusEffect The status effect to apply to the attacker */ constructor( - sourceMove: Moves, + sourceMove: MoveId, tagType: BattlerTagType, private statusEffect: StatusEffect, ) { @@ -1723,13 +1735,13 @@ export class ContactSetStatusProtectedTag extends DamageProtectedTag { /** * `BattlerTag` class for moves that block damaging moves and lower enemy stats if the enemy's move makes contact - * Used by {@linkcode Moves.KINGS_SHIELD}, {@linkcode Moves.OBSTRUCT}, {@linkcode Moves.SILK_TRAP} + * Used by {@linkcode MoveId.KINGS_SHIELD}, {@linkcode MoveId.OBSTRUCT}, {@linkcode MoveId.SILK_TRAP} */ export class ContactStatStageChangeProtectedTag extends DamageProtectedTag { private stat: BattleStat; private levels: number; - constructor(sourceMove: Moves, tagType: BattlerTagType, stat: BattleStat, levels: number) { + constructor(sourceMove: MoveId, tagType: BattlerTagType, stat: BattleStat, levels: number) { super(sourceMove, tagType); this.stat = stat; @@ -1762,7 +1774,7 @@ export class ContactStatStageChangeProtectedTag extends DamageProtectedTag { * Endure Tokens. */ export class EnduringTag extends BattlerTag { - constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: Moves) { + constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: MoveId) { super(tagType, lapseType, 0, sourceMove); } @@ -1791,7 +1803,7 @@ export class EnduringTag extends BattlerTag { } export class SturdyTag extends BattlerTag { - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super(BattlerTagType.STURDY, BattlerTagLapseType.TURN_END, 0, sourceMove); } @@ -1811,7 +1823,7 @@ export class SturdyTag extends BattlerTag { export class PerishSongTag extends BattlerTag { constructor(turnCount: number) { - super(BattlerTagType.PERISH_SONG, BattlerTagLapseType.TURN_END, turnCount, Moves.PERISH_SONG, undefined, true); + super(BattlerTagType.PERISH_SONG, BattlerTagLapseType.TURN_END, turnCount, MoveId.PERISH_SONG, undefined, true); } canAdd(pokemon: Pokemon): boolean { @@ -1843,10 +1855,10 @@ export class PerishSongTag extends BattlerTag { export class CenterOfAttentionTag extends BattlerTag { public powder: boolean; - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super(BattlerTagType.CENTER_OF_ATTENTION, BattlerTagLapseType.TURN_END, 1, sourceMove); - this.powder = this.sourceMove === Moves.RAGE_POWDER; + this.powder = this.sourceMove === MoveId.RAGE_POWDER; } /** "Center of Attention" can't be added if an ally is already the Center of Attention. */ @@ -1915,7 +1927,7 @@ export class TruantTag extends AbilityBattlerTag { const lastMove = pokemon.getLastXMoves().find(() => true); - if (lastMove && lastMove.move !== Moves.NONE) { + if (lastMove && lastMove.move !== MoveId.NONE) { (globalScene.getCurrentPhase() as MovePhase).cancel(); // TODO: Ability displays should be handled by the ability globalScene.queueAbilityDisplay(pokemon, passive, true); @@ -2065,7 +2077,7 @@ export class TerrainHighestStatBoostTag extends HighestStatBoostTag implements T } export class SemiInvulnerableTag extends BattlerTag { - constructor(tagType: BattlerTagType, turnCount: number, sourceMove: Moves) { + constructor(tagType: BattlerTagType, turnCount: number, sourceMove: MoveId) { super(tagType, BattlerTagLapseType.MOVE_EFFECT, turnCount, sourceMove); } @@ -2087,7 +2099,7 @@ export class SemiInvulnerableTag extends BattlerTag { export class TypeImmuneTag extends BattlerTag { public immuneType: PokemonType; - constructor(tagType: BattlerTagType, sourceMove: Moves, immuneType: PokemonType, length = 1) { + constructor(tagType: BattlerTagType, sourceMove: MoveId, immuneType: PokemonType, length = 1) { super(tagType, BattlerTagLapseType.TURN_END, length, sourceMove, undefined, true); this.immuneType = immuneType; @@ -2109,14 +2121,14 @@ export class TypeImmuneTag extends BattlerTag { * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | Moves.TELEKINESIS} */ export class FloatingTag extends TypeImmuneTag { - constructor(tagType: BattlerTagType, sourceMove: Moves, turnCount: number) { + constructor(tagType: BattlerTagType, sourceMove: MoveId, turnCount: number) { super(tagType, sourceMove, PokemonType.GROUND, turnCount); } onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - if (this.sourceMove === Moves.MAGNET_RISE) { + if (this.sourceMove === MoveId.MAGNET_RISE) { globalScene.queueMessage( i18next.t("battlerTags:magnetRisenOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -2127,7 +2139,7 @@ export class FloatingTag extends TypeImmuneTag { onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - if (this.sourceMove === Moves.MAGNET_RISE) { + if (this.sourceMove === MoveId.MAGNET_RISE) { globalScene.queueMessage( i18next.t("battlerTags:magnetRisenOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -2144,7 +2156,7 @@ export class TypeBoostTag extends BattlerTag { constructor( tagType: BattlerTagType, - sourceMove: Moves, + sourceMove: MoveId, boostedType: PokemonType, boostValue: number, oneUse: boolean, @@ -2188,7 +2200,7 @@ export class TypeBoostTag extends BattlerTag { } export class CritBoostTag extends BattlerTag { - constructor(tagType: BattlerTagType, sourceMove: Moves) { + constructor(tagType: BattlerTagType, sourceMove: MoveId) { super(tagType, BattlerTagLapseType.TURN_END, 1, sourceMove, undefined, true); } @@ -2226,7 +2238,7 @@ export class DragonCheerTag extends CritBoostTag { public typesOnAdd: PokemonType[]; constructor() { - super(BattlerTagType.CRIT_BOOST, Moves.DRAGON_CHEER); + super(BattlerTagType.CRIT_BOOST, MoveId.DRAGON_CHEER); } onAdd(pokemon: Pokemon): void { @@ -2240,7 +2252,7 @@ export class SaltCuredTag extends BattlerTag { private sourceIndex: number; constructor(sourceId: number) { - super(BattlerTagType.SALT_CURED, BattlerTagLapseType.TURN_END, 1, Moves.SALT_CURE, sourceId); + super(BattlerTagType.SALT_CURED, BattlerTagLapseType.TURN_END, 1, MoveId.SALT_CURE, sourceId); } /** @@ -2297,7 +2309,7 @@ export class CursedTag extends BattlerTag { private sourceIndex: number; constructor(sourceId: number) { - super(BattlerTagType.CURSED, BattlerTagLapseType.TURN_END, 1, Moves.CURSE, sourceId, true); + super(BattlerTagType.CURSED, BattlerTagLapseType.TURN_END, 1, MoveId.CURSE, sourceId, true); } /** @@ -2342,7 +2354,7 @@ export class CursedTag extends BattlerTag { * Battler tag for attacks that remove a type post use. */ export class RemovedTypeTag extends BattlerTag { - constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: Moves) { + constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: MoveId) { super(tagType, lapseType, 1, sourceMove); } } @@ -2352,7 +2364,7 @@ export class RemovedTypeTag extends BattlerTag { * @description `IGNORE_FLYING`: Persistent grounding effects (i.e. from Smack Down and Thousand Waves) */ export class GroundedTag extends BattlerTag { - constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: Moves) { + constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: MoveId) { super(tagType, lapseType, 1, sourceMove); } } @@ -2367,7 +2379,7 @@ export class RoostedTag extends BattlerTag { private isBasePureFlying: boolean; constructor() { - super(BattlerTagType.ROOSTED, BattlerTagLapseType.TURN_END, 1, Moves.ROOST); + super(BattlerTagType.ROOSTED, BattlerTagLapseType.TURN_END, 1, MoveId.ROOST); } onRemove(pokemon: Pokemon): void { @@ -2485,7 +2497,7 @@ export class CommandedTag extends BattlerTag { private _tatsugiriFormKey: string; constructor(sourceId: number) { - super(BattlerTagType.COMMANDED, BattlerTagLapseType.CUSTOM, 0, Moves.NONE, sourceId); + super(BattlerTagType.COMMANDED, BattlerTagLapseType.CUSTOM, 0, MoveId.NONE, sourceId); } public get tatsugiriFormKey(): string { @@ -2535,7 +2547,7 @@ export class StockpilingTag extends BattlerTag { [Stat.SPDEF]: 0, }; - constructor(sourceMove: Moves = Moves.NONE) { + constructor(sourceMove: MoveId = MoveId.NONE) { super(BattlerTagType.STOCKPILING, BattlerTagLapseType.CUSTOM, 1, sourceMove); } @@ -2624,7 +2636,7 @@ export class StockpilingTag extends BattlerTag { * @extends BattlerTag */ export class GulpMissileTag extends BattlerTag { - constructor(tagType: BattlerTagType, sourceMove: Moves) { + constructor(tagType: BattlerTagType, sourceMove: MoveId) { super(tagType, BattlerTagLapseType.HIT, 0, sourceMove); } @@ -2667,7 +2679,7 @@ export class GulpMissileTag extends BattlerTag { * @returns Whether the BattlerTag can be added. */ canAdd(pokemon: Pokemon): boolean { - const isSurfOrDive = [Moves.SURF, Moves.DIVE].includes(this.sourceMove); + const isSurfOrDive = [MoveId.SURF, MoveId.DIVE].includes(this.sourceMove); const isNormalForm = pokemon.formIndex === 0 && !pokemon.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA) && @@ -2692,8 +2704,8 @@ export class GulpMissileTag extends BattlerTag { * Tag that makes the target drop all of it type immunities * and all accuracy checks ignore its evasiveness stat. * - * Applied by moves: {@linkcode Moves.ODOR_SLEUTH | Odor Sleuth}, - * {@linkcode Moves.MIRACLE_EYE | Miracle Eye} and {@linkcode Moves.FORESIGHT | Foresight}. + * Applied by moves: {@linkcode MoveId.ODOR_SLEUTH | Odor Sleuth}, + * {@linkcode MoveId.MIRACLE_EYE | Miracle Eye} and {@linkcode MoveId.FORESIGHT | Foresight}. * * @extends BattlerTag * @see {@linkcode ignoreImmunity} @@ -2702,7 +2714,7 @@ export class ExposedTag extends BattlerTag { private defenderType: PokemonType; private allowedTypes: PokemonType[]; - constructor(tagType: BattlerTagType, sourceMove: Moves, defenderType: PokemonType, allowedTypes: PokemonType[]) { + constructor(tagType: BattlerTagType, sourceMove: MoveId, defenderType: PokemonType, allowedTypes: PokemonType[]) { super(tagType, BattlerTagLapseType.CUSTOM, 1, sourceMove); this.defenderType = defenderType; this.allowedTypes = allowedTypes; @@ -2730,12 +2742,12 @@ export class ExposedTag extends BattlerTag { /** * Tag that prevents HP recovery from held items and move effects. It also blocks the usage of recovery moves. - * Applied by moves: {@linkcode Moves.HEAL_BLOCK | Heal Block (5 turns)}, {@linkcode Moves.PSYCHIC_NOISE | Psychic Noise (2 turns)} + * Applied by moves: {@linkcode MoveId.HEAL_BLOCK | Heal Block (5 turns)}, {@linkcode MoveId.PSYCHIC_NOISE | Psychic Noise (2 turns)} * * @extends MoveRestrictionBattlerTag */ export class HealBlockTag extends MoveRestrictionBattlerTag { - constructor(turnCount: number, sourceMove: Moves) { + constructor(turnCount: number, sourceMove: MoveId) { super( BattlerTagType.HEAL_BLOCK, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END], @@ -2752,10 +2764,10 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { /** * Checks if a move is disabled under Heal Block - * @param {Moves} move {@linkcode Moves} the move ID + * @param {MoveId} move {@linkcode MoveId} the move ID * @returns `true` if the move has a TRIAGE_MOVE flag and is a status move */ - override isMoveRestricted(move: Moves): boolean { + override isMoveRestricted(move: MoveId): boolean { if (allMoves[move].hasFlag(MoveFlags.TRIAGE_MOVE) && allMoves[move].category === MoveCategory.STATUS) { return true; } @@ -2765,12 +2777,12 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { /** * Checks if a move is disabled under Heal Block because of its choice of target * Implemented b/c of Pollen Puff - * @param {Moves} move {@linkcode Moves} the move ID + * @param {MoveId} move {@linkcode MoveId} the move ID * @param {Pokemon} user {@linkcode Pokemon} the move user * @param {Pokemon} target {@linkcode Pokemon} the target of the move * @returns `true` if the move cannot be used because the target is an ally */ - override isMoveTargetRestricted(move: Moves, user: Pokemon, target: Pokemon) { + override isMoveTargetRestricted(move: MoveId, user: Pokemon, target: Pokemon) { const moveCategory = new NumberHolder(allMoves[move].category); applyMoveAttrs(StatusCategoryOnAllyAttr, user, target, allMoves[move], moveCategory); if (allMoves[move].hasAttr(HealOnAllyAttr) && moveCategory.value === MoveCategory.STATUS) { @@ -2782,25 +2794,25 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { /** * Uses its own unique selectionDeniedText() message */ - override selectionDeniedText(pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledHealBlock", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, - healBlockName: allMoves[Moves.HEAL_BLOCK].name, + healBlockName: allMoves[MoveId.HEAL_BLOCK].name, }); } /** * @override * @param {Pokemon} pokemon {@linkcode Pokemon} attempting to use the restricted move - * @param {Moves} move {@linkcode Moves} ID of the move being interrupted + * @param {MoveId} move {@linkcode MoveId} ID of the move being interrupted * @returns {string} text to display when the move is interrupted */ - override interruptedText(pokemon: Pokemon, move: Moves): string { + override interruptedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledHealBlock", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, - healBlockName: allMoves[Moves.HEAL_BLOCK].name, + healBlockName: allMoves[MoveId.HEAL_BLOCK].name, }); } @@ -2851,7 +2863,7 @@ export class TarShotTag extends BattlerTag { */ export class ElectrifiedTag extends BattlerTag { constructor() { - super(BattlerTagType.ELECTRIFIED, BattlerTagLapseType.TURN_END, 1, Moves.ELECTRIFY); + super(BattlerTagType.ELECTRIFIED, BattlerTagLapseType.TURN_END, 1, MoveId.ELECTRIFY); } override onAdd(pokemon: Pokemon): void { @@ -2870,7 +2882,7 @@ export class ElectrifiedTag extends BattlerTag { */ export class AutotomizedTag extends BattlerTag { public autotomizeCount = 0; - constructor(sourceMove: Moves = Moves.AUTOTOMIZE) { + constructor(sourceMove: MoveId = MoveId.AUTOTOMIZE) { super(BattlerTagType.AUTOTOMIZED, BattlerTagLapseType.CUSTOM, 1, sourceMove); } @@ -2909,7 +2921,7 @@ export class SubstituteTag extends BattlerTag { /** Is the source Pokemon "in focus," i.e. is it fully visible on the field? */ public sourceInFocus: boolean; - constructor(sourceMove: Moves, sourceId: number) { + constructor(sourceMove: MoveId, sourceId: number) { super( BattlerTagType.SUBSTITUTE, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE, BattlerTagLapseType.HIT], @@ -2927,7 +2939,7 @@ export class SubstituteTag extends BattlerTag { // Queue battle animation and message globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_ADD); - if (this.sourceMove === Moves.SHED_TAIL) { + if (this.sourceMove === MoveId.SHED_TAIL) { globalScene.queueMessage( i18next.t("battlerTags:shedTailOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -3068,7 +3080,7 @@ export class MysteryEncounterPostSummonTag extends BattlerTag { */ export class TormentTag extends MoveRestrictionBattlerTag { constructor(sourceId: number) { - super(BattlerTagType.TORMENT, BattlerTagLapseType.AFTER_MOVE, 1, Moves.TORMENT, sourceId); + super(BattlerTagType.TORMENT, BattlerTagLapseType.AFTER_MOVE, 1, MoveId.TORMENT, sourceId); } /** @@ -3098,10 +3110,10 @@ export class TormentTag extends MoveRestrictionBattlerTag { /** * This checks if the current move used is identical to the last used move with a {@linkcode MoveResult} of `SUCCESS`/`MISS` - * @param {Moves} move the move under investigation + * @param {MoveId} move the move under investigation * @returns `true` if there is valid consecutive usage | `false` if the moves are different from each other */ - public override isMoveRestricted(move: Moves, user: Pokemon): boolean { + public override isMoveRestricted(move: MoveId, user: Pokemon): boolean { if (!user) { return false; } @@ -3114,13 +3126,13 @@ export class TormentTag extends MoveRestrictionBattlerTag { const moveObj = allMoves[lastMove.move]; const isUnaffected = moveObj.hasAttr(ConsecutiveUseDoublePowerAttr) || user.getTag(BattlerTagType.FRENZY); const validLastMoveResult = lastMove.result === MoveResult.SUCCESS || lastMove.result === MoveResult.MISS; - if (lastMove.move === move && validLastMoveResult && lastMove.move !== Moves.STRUGGLE && !isUnaffected) { + if (lastMove.move === move && validLastMoveResult && lastMove.move !== MoveId.STRUGGLE && !isUnaffected) { return true; } return false; } - override selectionDeniedText(pokemon: Pokemon, _move: Moves): string { + override selectionDeniedText(pokemon: Pokemon, _move: MoveId): string { return i18next.t("battle:moveDisabledTorment", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }); @@ -3134,7 +3146,7 @@ export class TormentTag extends MoveRestrictionBattlerTag { */ export class TauntTag extends MoveRestrictionBattlerTag { constructor() { - super(BattlerTagType.TAUNT, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE], 4, Moves.TAUNT); + super(BattlerTagType.TAUNT, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE], 4, MoveId.TAUNT); } override onAdd(pokemon: Pokemon) { @@ -3159,21 +3171,21 @@ export class TauntTag extends MoveRestrictionBattlerTag { /** * Checks if a move is a status move and determines its restriction status on that basis - * @param {Moves} move the move under investigation + * @param {MoveId} move the move under investigation * @returns `true` if the move is a status move */ - override isMoveRestricted(move: Moves): boolean { + override isMoveRestricted(move: MoveId): boolean { return allMoves[move].category === MoveCategory.STATUS; } - override selectionDeniedText(pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledTaunt", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, }); } - override interruptedText(pokemon: Pokemon, move: Moves): string { + override interruptedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledTaunt", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, @@ -3192,7 +3204,7 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { BattlerTagType.IMPRISON, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE], 1, - Moves.IMPRISON, + MoveId.IMPRISON, sourceId, ); } @@ -3217,10 +3229,10 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { /** * Checks if the source of the tag has the parameter move in its moveset and that the source is still active * @override - * @param {Moves} move the move under investigation + * @param {MoveId} move the move under investigation * @returns `false` if either condition is not met */ - public override isMoveRestricted(move: Moves, _user: Pokemon): boolean { + public override isMoveRestricted(move: MoveId, _user: Pokemon): boolean { const source = this.getSourcePokemon(); if (source) { const sourceMoveset = source.getMoveset().map(m => m.moveId); @@ -3229,14 +3241,14 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { return false; } - override selectionDeniedText(pokemon: Pokemon, move: Moves): string { + override selectionDeniedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledImprison", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, }); } - override interruptedText(pokemon: Pokemon, move: Moves): string { + override interruptedText(pokemon: Pokemon, move: MoveId): string { return i18next.t("battle:moveDisabledImprison", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, @@ -3251,7 +3263,7 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { */ export class SyrupBombTag extends BattlerTag { constructor(sourceId: number) { - super(BattlerTagType.SYRUP_BOMB, BattlerTagLapseType.TURN_END, 3, Moves.SYRUP_BOMB, sourceId); + super(BattlerTagType.SYRUP_BOMB, BattlerTagLapseType.TURN_END, 3, MoveId.SYRUP_BOMB, sourceId); } /** @@ -3297,7 +3309,7 @@ export class SyrupBombTag extends BattlerTag { * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | Moves.TELEKINESIS} */ export class TelekinesisTag extends BattlerTag { - constructor(sourceMove: Moves) { + constructor(sourceMove: MoveId) { super( BattlerTagType.TELEKINESIS, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE], @@ -3322,7 +3334,7 @@ export class TelekinesisTag extends BattlerTag { * @extends BattlerTag */ export class PowerTrickTag extends BattlerTag { - constructor(sourceMove: Moves, sourceId: number) { + constructor(sourceMove: MoveId, sourceId: number) { super(BattlerTagType.POWER_TRICK, BattlerTagLapseType.CUSTOM, 0, sourceMove, sourceId, true); } @@ -3370,7 +3382,7 @@ export class PowerTrickTag extends BattlerTag { */ export class GrudgeTag extends BattlerTag { constructor() { - super(BattlerTagType.GRUDGE, [BattlerTagLapseType.CUSTOM, BattlerTagLapseType.PRE_MOVE], 1, Moves.GRUDGE); + super(BattlerTagType.GRUDGE, [BattlerTagLapseType.CUSTOM, BattlerTagLapseType.PRE_MOVE], 1, MoveId.GRUDGE); } onAdd(pokemon: Pokemon) { @@ -3394,7 +3406,7 @@ export class GrudgeTag extends BattlerTag { if (sourcePokemon.isActive() && pokemon.isOpponent(sourcePokemon)) { const lastMove = pokemon.turnData.attacksReceived[0]; const lastMoveData = sourcePokemon.getMoveset().find(m => m.moveId === lastMove.move); - if (lastMoveData && lastMove.move !== Moves.STRUGGLE) { + if (lastMoveData && lastMove.move !== MoveId.STRUGGLE) { lastMoveData.ppUsed = lastMoveData.getMovePp(); globalScene.queueMessage( i18next.t("battlerTags:grudgeLapse", { @@ -3415,7 +3427,7 @@ export class GrudgeTag extends BattlerTag { */ export class PsychoShiftTag extends BattlerTag { constructor() { - super(BattlerTagType.PSYCHO_SHIFT, BattlerTagLapseType.AFTER_MOVE, 1, Moves.PSYCHO_SHIFT); + super(BattlerTagType.PSYCHO_SHIFT, BattlerTagLapseType.AFTER_MOVE, 1, MoveId.PSYCHO_SHIFT); } /** @@ -3437,7 +3449,7 @@ export class PsychoShiftTag extends BattlerTag { */ export class MagicCoatTag extends BattlerTag { constructor() { - super(BattlerTagType.MAGIC_COAT, BattlerTagLapseType.TURN_END, 1, Moves.MAGIC_COAT); + super(BattlerTagType.MAGIC_COAT, BattlerTagLapseType.TURN_END, 1, MoveId.MAGIC_COAT); } /** @@ -3462,7 +3474,7 @@ export class MagicCoatTag extends BattlerTag { export function getBattlerTag( tagType: BattlerTagType, turnCount: number, - sourceMove: Moves, + sourceMove: MoveId, sourceId: number, ): BattlerTag { switch (tagType) { diff --git a/src/data/challenge.ts b/src/data/challenge.ts index b4b8db2cc10..3de99b98dda 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -18,7 +18,7 @@ import { Challenges } from "#enums/challenges"; import { Species } from "#enums/species"; import { TrainerType } from "#enums/trainer-type"; import { Nature } from "#enums/nature"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import { TypeColor, TypeShadow } from "#enums/color"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { globalScene } from "#app/global-scene"; @@ -395,11 +395,11 @@ export abstract class Challenge { * An apply function for MOVE_ACCESS. Derived classes should alter this. * @param _pokemon {@link Pokemon} What pokemon would learn the move. * @param _moveSource {@link MoveSourceType} What source the pokemon would get the move from. - * @param _move {@link Moves} The move in question. + * @param _move {@link MoveId} The move in question. * @param _level {@link NumberHolder} The level threshold for access. * @returns {@link boolean} Whether this function did anything. */ - applyMoveAccessLevel(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: Moves, _level: NumberHolder): boolean { + applyMoveAccessLevel(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: MoveId, _level: NumberHolder): boolean { return false; } @@ -407,11 +407,11 @@ export abstract class Challenge { * An apply function for MOVE_WEIGHT. Derived classes should alter this. * @param _pokemon {@link Pokemon} What pokemon would learn the move. * @param _moveSource {@link MoveSourceType} What source the pokemon would get the move from. - * @param _move {@link Moves} The move in question. + * @param _move {@link MoveId} The move in question. * @param _weight {@link NumberHolder} The base weight of the move * @returns {@link boolean} Whether this function did anything. */ - applyMoveWeight(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: Moves, _level: NumberHolder): boolean { + applyMoveWeight(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: MoveId, _level: NumberHolder): boolean { return false; } @@ -1090,7 +1090,7 @@ export function applyChallenges(challengeType: ChallengeType.GAME_MODE_MODIFY): * @param challengeType {@link ChallengeType} ChallengeType.MOVE_ACCESS * @param pokemon {@link Pokemon} What pokemon would learn the move. * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. - * @param move {@link Moves} The move in question. + * @param move {@link MoveId} The move in question. * @param level {@link NumberHolder} The level threshold for access. * @returns True if any challenge was successfully applied. */ @@ -1098,7 +1098,7 @@ export function applyChallenges( challengeType: ChallengeType.MOVE_ACCESS, pokemon: Pokemon, moveSource: MoveSourceType, - move: Moves, + move: MoveId, level: NumberHolder, ): boolean; /** @@ -1106,7 +1106,7 @@ export function applyChallenges( * @param challengeType {@link ChallengeType} ChallengeType.MOVE_WEIGHT * @param pokemon {@link Pokemon} What pokemon would learn the move. * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. - * @param move {@link Moves} The move in question. + * @param move {@link MoveId} The move in question. * @param weight {@link NumberHolder} The weight of the move. * @returns True if any challenge was successfully applied. */ @@ -1114,7 +1114,7 @@ export function applyChallenges( challengeType: ChallengeType.MOVE_WEIGHT, pokemon: Pokemon, moveSource: MoveSourceType, - move: Moves, + move: MoveId, weight: NumberHolder, ): boolean; diff --git a/src/data/moves/invalid-moves.ts b/src/data/moves/invalid-moves.ts index 025c0383f43..af88cb9fa5b 100644 --- a/src/data/moves/invalid-moves.ts +++ b/src/data/moves/invalid-moves.ts @@ -1,257 +1,257 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; -/** Set of moves that cannot be called by {@linkcode Moves.METRONOME Metronome} */ -export const invalidMetronomeMoves: ReadonlySet = new Set([ - Moves.AFTER_YOU, - Moves.ASSIST, - Moves.BANEFUL_BUNKER, - Moves.BEAK_BLAST, - Moves.BELCH, - Moves.BESTOW, - Moves.COMEUPPANCE, - Moves.COPYCAT, - Moves.COUNTER, - Moves.CRAFTY_SHIELD, - Moves.DESTINY_BOND, - Moves.DETECT, - Moves.ENDURE, - Moves.FEINT, - Moves.FOCUS_PUNCH, - Moves.FOLLOW_ME, - Moves.HELPING_HAND, - Moves.INSTRUCT, - Moves.KINGS_SHIELD, - Moves.MAT_BLOCK, - Moves.ME_FIRST, - Moves.METRONOME, - Moves.MIMIC, - Moves.MIRROR_COAT, - Moves.MIRROR_MOVE, - Moves.OBSTRUCT, - Moves.PROTECT, - Moves.QUASH, - Moves.QUICK_GUARD, - Moves.RAGE_POWDER, - Moves.REVIVAL_BLESSING, - Moves.SHELL_TRAP, - Moves.SILK_TRAP, - Moves.SKETCH, - Moves.SLEEP_TALK, - Moves.SNATCH, - Moves.SNORE, - Moves.SPIKY_SHIELD, - Moves.SPOTLIGHT, - Moves.STRUGGLE, - Moves.TRANSFORM, - Moves.WIDE_GUARD, +/** Set of moves that cannot be called by {@linkcode MoveId.METRONOME Metronome} */ +export const invalidMetronomeMoves: ReadonlySet = new Set([ + MoveId.AFTER_YOU, + MoveId.ASSIST, + MoveId.BANEFUL_BUNKER, + MoveId.BEAK_BLAST, + MoveId.BELCH, + MoveId.BESTOW, + MoveId.COMEUPPANCE, + MoveId.COPYCAT, + MoveId.COUNTER, + MoveId.CRAFTY_SHIELD, + MoveId.DESTINY_BOND, + MoveId.DETECT, + MoveId.ENDURE, + MoveId.FEINT, + MoveId.FOCUS_PUNCH, + MoveId.FOLLOW_ME, + MoveId.HELPING_HAND, + MoveId.INSTRUCT, + MoveId.KINGS_SHIELD, + MoveId.MAT_BLOCK, + MoveId.ME_FIRST, + MoveId.METRONOME, + MoveId.MIMIC, + MoveId.MIRROR_COAT, + MoveId.MIRROR_MOVE, + MoveId.OBSTRUCT, + MoveId.PROTECT, + MoveId.QUASH, + MoveId.QUICK_GUARD, + MoveId.RAGE_POWDER, + MoveId.REVIVAL_BLESSING, + MoveId.SHELL_TRAP, + MoveId.SILK_TRAP, + MoveId.SKETCH, + MoveId.SLEEP_TALK, + MoveId.SNATCH, + MoveId.SNORE, + MoveId.SPIKY_SHIELD, + MoveId.SPOTLIGHT, + MoveId.STRUGGLE, + MoveId.TRANSFORM, + MoveId.WIDE_GUARD, ]); -/** Set of moves that cannot be called by {@linkcode Moves.ASSIST Assist} */ -export const invalidAssistMoves: ReadonlySet = new Set([ - Moves.ASSIST, - Moves.BANEFUL_BUNKER, - Moves.BEAK_BLAST, - Moves.BELCH, - Moves.BESTOW, - Moves.BOUNCE, - Moves.CELEBRATE, - Moves.CHATTER, - Moves.CIRCLE_THROW, - Moves.COPYCAT, - Moves.COUNTER, - Moves.DESTINY_BOND, - Moves.DETECT, - Moves.DIG, - Moves.DIVE, - Moves.DRAGON_TAIL, - Moves.ENDURE, - Moves.FEINT, - Moves.FLY, - Moves.FOCUS_PUNCH, - Moves.FOLLOW_ME, - Moves.HELPING_HAND, - Moves.HOLD_HANDS, - Moves.KINGS_SHIELD, - Moves.MAT_BLOCK, - Moves.ME_FIRST, - Moves.METRONOME, - Moves.MIMIC, - Moves.MIRROR_COAT, - Moves.MIRROR_MOVE, - Moves.NATURE_POWER, - Moves.PHANTOM_FORCE, - Moves.PROTECT, - Moves.RAGE_POWDER, - Moves.ROAR, - Moves.SHADOW_FORCE, - Moves.SHELL_TRAP, - Moves.SKETCH, - Moves.SKY_DROP, - Moves.SLEEP_TALK, - Moves.SNATCH, - Moves.SPIKY_SHIELD, - Moves.SPOTLIGHT, - Moves.STRUGGLE, - Moves.SWITCHEROO, - Moves.TRANSFORM, - Moves.TRICK, - Moves.WHIRLWIND, +/** Set of moves that cannot be called by {@linkcode MoveId.ASSIST Assist} */ +export const invalidAssistMoves: ReadonlySet = new Set([ + MoveId.ASSIST, + MoveId.BANEFUL_BUNKER, + MoveId.BEAK_BLAST, + MoveId.BELCH, + MoveId.BESTOW, + MoveId.BOUNCE, + MoveId.CELEBRATE, + MoveId.CHATTER, + MoveId.CIRCLE_THROW, + MoveId.COPYCAT, + MoveId.COUNTER, + MoveId.DESTINY_BOND, + MoveId.DETECT, + MoveId.DIG, + MoveId.DIVE, + MoveId.DRAGON_TAIL, + MoveId.ENDURE, + MoveId.FEINT, + MoveId.FLY, + MoveId.FOCUS_PUNCH, + MoveId.FOLLOW_ME, + MoveId.HELPING_HAND, + MoveId.HOLD_HANDS, + MoveId.KINGS_SHIELD, + MoveId.MAT_BLOCK, + MoveId.ME_FIRST, + MoveId.METRONOME, + MoveId.MIMIC, + MoveId.MIRROR_COAT, + MoveId.MIRROR_MOVE, + MoveId.NATURE_POWER, + MoveId.PHANTOM_FORCE, + MoveId.PROTECT, + MoveId.RAGE_POWDER, + MoveId.ROAR, + MoveId.SHADOW_FORCE, + MoveId.SHELL_TRAP, + MoveId.SKETCH, + MoveId.SKY_DROP, + MoveId.SLEEP_TALK, + MoveId.SNATCH, + MoveId.SPIKY_SHIELD, + MoveId.SPOTLIGHT, + MoveId.STRUGGLE, + MoveId.SWITCHEROO, + MoveId.TRANSFORM, + MoveId.TRICK, + MoveId.WHIRLWIND, ]); -/** Set of moves that cannot be called by {@linkcode Moves.SLEEP_TALK Sleep Talk} */ -export const invalidSleepTalkMoves: ReadonlySet = new Set([ - Moves.ASSIST, - Moves.BELCH, - Moves.BEAK_BLAST, - Moves.BIDE, - Moves.BOUNCE, - Moves.COPYCAT, - Moves.DIG, - Moves.DIVE, - Moves.FREEZE_SHOCK, - Moves.FLY, - Moves.FOCUS_PUNCH, - Moves.GEOMANCY, - Moves.ICE_BURN, - Moves.ME_FIRST, - Moves.METRONOME, - Moves.MIRROR_MOVE, - Moves.MIMIC, - Moves.PHANTOM_FORCE, - Moves.RAZOR_WIND, - Moves.SHADOW_FORCE, - Moves.SHELL_TRAP, - Moves.SKETCH, - Moves.SKULL_BASH, - Moves.SKY_ATTACK, - Moves.SKY_DROP, - Moves.SLEEP_TALK, - Moves.SOLAR_BLADE, - Moves.SOLAR_BEAM, - Moves.STRUGGLE, - Moves.UPROAR, +/** Set of moves that cannot be called by {@linkcode MoveId.SLEEP_TALK Sleep Talk} */ +export const invalidSleepTalkMoves: ReadonlySet = new Set([ + MoveId.ASSIST, + MoveId.BELCH, + MoveId.BEAK_BLAST, + MoveId.BIDE, + MoveId.BOUNCE, + MoveId.COPYCAT, + MoveId.DIG, + MoveId.DIVE, + MoveId.FREEZE_SHOCK, + MoveId.FLY, + MoveId.FOCUS_PUNCH, + MoveId.GEOMANCY, + MoveId.ICE_BURN, + MoveId.ME_FIRST, + MoveId.METRONOME, + MoveId.MIRROR_MOVE, + MoveId.MIMIC, + MoveId.PHANTOM_FORCE, + MoveId.RAZOR_WIND, + MoveId.SHADOW_FORCE, + MoveId.SHELL_TRAP, + MoveId.SKETCH, + MoveId.SKULL_BASH, + MoveId.SKY_ATTACK, + MoveId.SKY_DROP, + MoveId.SLEEP_TALK, + MoveId.SOLAR_BLADE, + MoveId.SOLAR_BEAM, + MoveId.STRUGGLE, + MoveId.UPROAR, ]); -/** Set of moves that cannot be copied by {@linkcode Moves.COPYCAT Copycat} */ -export const invalidCopycatMoves: ReadonlySet = new Set([ - Moves.ASSIST, - Moves.BANEFUL_BUNKER, - Moves.BEAK_BLAST, - Moves.BESTOW, - Moves.CELEBRATE, - Moves.CHATTER, - Moves.CIRCLE_THROW, - Moves.COPYCAT, - Moves.COUNTER, - Moves.DESTINY_BOND, - Moves.DETECT, - Moves.DRAGON_TAIL, - Moves.ENDURE, - Moves.FEINT, - Moves.FOCUS_PUNCH, - Moves.FOLLOW_ME, - Moves.HELPING_HAND, - Moves.HOLD_HANDS, - Moves.KINGS_SHIELD, - Moves.MAT_BLOCK, - Moves.ME_FIRST, - Moves.METRONOME, - Moves.MIMIC, - Moves.MIRROR_COAT, - Moves.MIRROR_MOVE, - Moves.PROTECT, - Moves.RAGE_POWDER, - Moves.ROAR, - Moves.SHELL_TRAP, - Moves.SKETCH, - Moves.SLEEP_TALK, - Moves.SNATCH, - Moves.SPIKY_SHIELD, - Moves.SPOTLIGHT, - Moves.STRUGGLE, - Moves.SWITCHEROO, - Moves.TRANSFORM, - Moves.TRICK, - Moves.WHIRLWIND, +/** Set of moves that cannot be copied by {@linkcode MoveId.COPYCAT Copycat} */ +export const invalidCopycatMoves: ReadonlySet = new Set([ + MoveId.ASSIST, + MoveId.BANEFUL_BUNKER, + MoveId.BEAK_BLAST, + MoveId.BESTOW, + MoveId.CELEBRATE, + MoveId.CHATTER, + MoveId.CIRCLE_THROW, + MoveId.COPYCAT, + MoveId.COUNTER, + MoveId.DESTINY_BOND, + MoveId.DETECT, + MoveId.DRAGON_TAIL, + MoveId.ENDURE, + MoveId.FEINT, + MoveId.FOCUS_PUNCH, + MoveId.FOLLOW_ME, + MoveId.HELPING_HAND, + MoveId.HOLD_HANDS, + MoveId.KINGS_SHIELD, + MoveId.MAT_BLOCK, + MoveId.ME_FIRST, + MoveId.METRONOME, + MoveId.MIMIC, + MoveId.MIRROR_COAT, + MoveId.MIRROR_MOVE, + MoveId.PROTECT, + MoveId.RAGE_POWDER, + MoveId.ROAR, + MoveId.SHELL_TRAP, + MoveId.SKETCH, + MoveId.SLEEP_TALK, + MoveId.SNATCH, + MoveId.SPIKY_SHIELD, + MoveId.SPOTLIGHT, + MoveId.STRUGGLE, + MoveId.SWITCHEROO, + MoveId.TRANSFORM, + MoveId.TRICK, + MoveId.WHIRLWIND, ]); -export const invalidMirrorMoveMoves: ReadonlySet = new Set([ - Moves.ACUPRESSURE, - Moves.AFTER_YOU, - Moves.AROMATIC_MIST, - Moves.BEAK_BLAST, - Moves.BELCH, - Moves.CHILLY_RECEPTION, - Moves.COACHING, - Moves.CONVERSION_2, - Moves.COUNTER, - Moves.CRAFTY_SHIELD, - Moves.CURSE, - Moves.DECORATE, - Moves.DOODLE, - Moves.DOOM_DESIRE, - Moves.DRAGON_CHEER, - Moves.ELECTRIC_TERRAIN, - Moves.FINAL_GAMBIT, - Moves.FLORAL_HEALING, - Moves.FLOWER_SHIELD, - Moves.FOCUS_PUNCH, - Moves.FUTURE_SIGHT, - Moves.GEAR_UP, - Moves.GRASSY_TERRAIN, - Moves.GRAVITY, - Moves.GUARD_SPLIT, - Moves.HAIL, - Moves.HAZE, - Moves.HEAL_PULSE, - Moves.HELPING_HAND, - Moves.HOLD_HANDS, - Moves.INSTRUCT, - Moves.ION_DELUGE, - Moves.MAGNETIC_FLUX, - Moves.MAT_BLOCK, - Moves.ME_FIRST, - Moves.MIMIC, - Moves.MIRROR_COAT, - Moves.MIRROR_MOVE, - Moves.MIST, - Moves.MISTY_TERRAIN, - Moves.MUD_SPORT, - Moves.PERISH_SONG, - Moves.POWER_SPLIT, - Moves.PSYCH_UP, - Moves.PSYCHIC_TERRAIN, - Moves.PURIFY, - Moves.QUICK_GUARD, - Moves.RAIN_DANCE, - Moves.REFLECT_TYPE, - Moves.ROLE_PLAY, - Moves.ROTOTILLER, - Moves.SANDSTORM, - Moves.SHELL_TRAP, - Moves.SKETCH, - Moves.SNOWSCAPE, - Moves.SPIT_UP, - Moves.SPOTLIGHT, - Moves.STRUGGLE, - Moves.SUNNY_DAY, - Moves.TEATIME, - Moves.TRANSFORM, - Moves.WATER_SPORT, - Moves.WIDE_GUARD, +export const invalidMirrorMoveMoves: ReadonlySet = new Set([ + MoveId.ACUPRESSURE, + MoveId.AFTER_YOU, + MoveId.AROMATIC_MIST, + MoveId.BEAK_BLAST, + MoveId.BELCH, + MoveId.CHILLY_RECEPTION, + MoveId.COACHING, + MoveId.CONVERSION_2, + MoveId.COUNTER, + MoveId.CRAFTY_SHIELD, + MoveId.CURSE, + MoveId.DECORATE, + MoveId.DOODLE, + MoveId.DOOM_DESIRE, + MoveId.DRAGON_CHEER, + MoveId.ELECTRIC_TERRAIN, + MoveId.FINAL_GAMBIT, + MoveId.FLORAL_HEALING, + MoveId.FLOWER_SHIELD, + MoveId.FOCUS_PUNCH, + MoveId.FUTURE_SIGHT, + MoveId.GEAR_UP, + MoveId.GRASSY_TERRAIN, + MoveId.GRAVITY, + MoveId.GUARD_SPLIT, + MoveId.HAIL, + MoveId.HAZE, + MoveId.HEAL_PULSE, + MoveId.HELPING_HAND, + MoveId.HOLD_HANDS, + MoveId.INSTRUCT, + MoveId.ION_DELUGE, + MoveId.MAGNETIC_FLUX, + MoveId.MAT_BLOCK, + MoveId.ME_FIRST, + MoveId.MIMIC, + MoveId.MIRROR_COAT, + MoveId.MIRROR_MOVE, + MoveId.MIST, + MoveId.MISTY_TERRAIN, + MoveId.MUD_SPORT, + MoveId.PERISH_SONG, + MoveId.POWER_SPLIT, + MoveId.PSYCH_UP, + MoveId.PSYCHIC_TERRAIN, + MoveId.PURIFY, + MoveId.QUICK_GUARD, + MoveId.RAIN_DANCE, + MoveId.REFLECT_TYPE, + MoveId.ROLE_PLAY, + MoveId.ROTOTILLER, + MoveId.SANDSTORM, + MoveId.SHELL_TRAP, + MoveId.SKETCH, + MoveId.SNOWSCAPE, + MoveId.SPIT_UP, + MoveId.SPOTLIGHT, + MoveId.STRUGGLE, + MoveId.SUNNY_DAY, + MoveId.TEATIME, + MoveId.TRANSFORM, + MoveId.WATER_SPORT, + MoveId.WIDE_GUARD, ]); /** Set of moves that can never have their type overridden by an ability like Pixilate or Normalize * * Excludes tera blast and tera starstorm, as these are only conditionally forbidden */ -export const noAbilityTypeOverrideMoves: ReadonlySet = new Set([ - Moves.WEATHER_BALL, - Moves.JUDGMENT, - Moves.REVELATION_DANCE, - Moves.MULTI_ATTACK, - Moves.TERRAIN_PULSE, - Moves.NATURAL_GIFT, - Moves.TECHNO_BLAST, - Moves.HIDDEN_POWER, +export const noAbilityTypeOverrideMoves: ReadonlySet = new Set([ + MoveId.WEATHER_BALL, + MoveId.JUDGMENT, + MoveId.REVELATION_DANCE, + MoveId.MULTI_ATTACK, + MoveId.TERRAIN_PULSE, + MoveId.NATURAL_GIFT, + MoveId.TECHNO_BLAST, + MoveId.HIDDEN_POWER, ]); diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 036441b8910..fc7b088d2c8 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -87,7 +87,7 @@ import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { MoveUsedEvent } from "#app/events/battle-scene"; import { @@ -128,7 +128,7 @@ type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; export default class Move implements Localizable { - public id: Moves; + public id: MoveId; public name: string; private _type: PokemonType; private _category: MoveCategory; @@ -147,7 +147,7 @@ export default class Move implements Localizable { private flags: number = 0; private nameAppend: string = ""; - constructor(id: Moves, type: PokemonType, category: MoveCategory, defaultMoveTarget: MoveTarget, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { + constructor(id: MoveId, type: PokemonType, category: MoveCategory, defaultMoveTarget: MoveTarget, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { this.id = id; this._type = type; this._category = category; @@ -177,7 +177,7 @@ export default class Move implements Localizable { } localize(): void { - const i18nKey = Moves[this.id].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join("") as unknown as string; + const i18nKey = MoveId[this.id].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join("") as unknown as string; this.name = this.id ? `${i18next.t(`move:${i18nKey}.name`)}${this.nameAppend}` : ""; this.effect = this.id ? `${i18next.t(`move:${i18nKey}.effect`)}${this.nameAppend}` : ""; @@ -428,7 +428,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.IGNORE_PROTECT} flag for the calling Move - * @see {@linkcode Moves.CURSE} + * @see {@linkcode MoveId.CURSE} * @returns The {@linkcode Move} that called this function */ ignoresProtect(): this { @@ -438,7 +438,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.SOUND_BASED} flag for the calling Move - * @see {@linkcode Moves.UPROAR} + * @see {@linkcode MoveId.UPROAR} * @returns The {@linkcode Move} that called this function */ soundBased(): this { @@ -448,7 +448,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.HIDE_USER} flag for the calling Move - * @see {@linkcode Moves.TELEPORT} + * @see {@linkcode MoveId.TELEPORT} * @returns The {@linkcode Move} that called this function */ hidesUser(): this { @@ -458,7 +458,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.HIDE_TARGET} flag for the calling Move - * @see {@linkcode Moves.WHIRLWIND} + * @see {@linkcode MoveId.WHIRLWIND} * @returns The {@linkcode Move} that called this function */ hidesTarget(): this { @@ -468,7 +468,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.BITING_MOVE} flag for the calling Move - * @see {@linkcode Moves.BITE} + * @see {@linkcode MoveId.BITE} * @returns The {@linkcode Move} that called this function */ bitingMove(): this { @@ -478,7 +478,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.PULSE_MOVE} flag for the calling Move - * @see {@linkcode Moves.WATER_PULSE} + * @see {@linkcode MoveId.WATER_PULSE} * @returns The {@linkcode Move} that called this function */ pulseMove(): this { @@ -488,7 +488,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.PUNCHING_MOVE} flag for the calling Move - * @see {@linkcode Moves.DRAIN_PUNCH} + * @see {@linkcode MoveId.DRAIN_PUNCH} * @returns The {@linkcode Move} that called this function */ punchingMove(): this { @@ -498,7 +498,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.SLICING_MOVE} flag for the calling Move - * @see {@linkcode Moves.X_SCISSOR} + * @see {@linkcode MoveId.X_SCISSOR} * @returns The {@linkcode Move} that called this function */ slicingMove(): this { @@ -518,7 +518,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.BALLBOMB_MOVE} flag for the calling Move - * @see {@linkcode Moves.ELECTRO_BALL} + * @see {@linkcode MoveId.ELECTRO_BALL} * @returns The {@linkcode Move} that called this function */ ballBombMove(): this { @@ -528,7 +528,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.POWDER_MOVE} flag for the calling Move - * @see {@linkcode Moves.STUN_SPORE} + * @see {@linkcode MoveId.STUN_SPORE} * @returns The {@linkcode Move} that called this function */ powderMove(): this { @@ -538,7 +538,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.DANCE_MOVE} flag for the calling Move - * @see {@linkcode Moves.PETAL_DANCE} + * @see {@linkcode MoveId.PETAL_DANCE} * @returns The {@linkcode Move} that called this function */ danceMove(): this { @@ -548,7 +548,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.WIND_MOVE} flag for the calling Move - * @see {@linkcode Moves.HURRICANE} + * @see {@linkcode MoveId.HURRICANE} * @returns The {@linkcode Move} that called this function */ windMove(): this { @@ -558,7 +558,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.TRIAGE_MOVE} flag for the calling Move - * @see {@linkcode Moves.ABSORB} + * @see {@linkcode MoveId.ABSORB} * @returns The {@linkcode Move} that called this function */ triageMove(): this { @@ -568,7 +568,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.IGNORE_ABILITIES} flag for the calling Move - * @see {@linkcode Moves.SUNSTEEL_STRIKE} + * @see {@linkcode MoveId.SUNSTEEL_STRIKE} * @returns The {@linkcode Move} that called this function */ ignoresAbilities(): this { @@ -578,7 +578,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.CHECK_ALL_HITS} flag for the calling Move - * @see {@linkcode Moves.TRIPLE_AXEL} + * @see {@linkcode MoveId.TRIPLE_AXEL} * @returns The {@linkcode Move} that called this function */ checkAllHits(): this { @@ -588,7 +588,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.IGNORE_SUBSTITUTE} flag for the calling Move - * @see {@linkcode Moves.WHIRLWIND} + * @see {@linkcode MoveId.WHIRLWIND} * @returns The {@linkcode Move} that called this function */ ignoresSubstitute(): this { @@ -598,7 +598,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.REDIRECT_COUNTER} flag for the calling Move - * @see {@linkcode Moves.METAL_BURST} + * @see {@linkcode MoveId.METAL_BURST} * @returns The {@linkcode Move} that called this function */ redirectCounter(): this { @@ -608,7 +608,7 @@ export default class Move implements Localizable { /** * Sets the {@linkcode MoveFlags.REFLECTABLE} flag for the calling Move - * @see {@linkcode Moves.ATTRACT} + * @see {@linkcode MoveId.ATTRACT} * @returns The {@linkcode Move} that called this function */ reflectable(): this { @@ -880,9 +880,9 @@ export default class Move implements Localizable { calculateEffectivePower(): number { let effectivePower: number; // Triple axel and triple kick are easier to special case. - if (this.id === Moves.TRIPLE_AXEL) { + if (this.id === MoveId.TRIPLE_AXEL) { effectivePower = 94.14; - } else if (this.id === Moves.TRIPLE_KICK) { + } else if (this.id === MoveId.TRIPLE_KICK) { effectivePower = 47.07; } else { const multiHitAttr = this.getAttrs(MultiHitAttr)[0]; @@ -934,17 +934,17 @@ export default class Move implements Localizable { ]; // ...and cannot enhance these specific moves - const exceptMoves: Moves[] = [ - Moves.FLING, - Moves.UPROAR, - Moves.ROLLOUT, - Moves.ICE_BALL, - Moves.ENDEAVOR + const exceptMoves: MoveId[] = [ + MoveId.FLING, + MoveId.UPROAR, + MoveId.ROLLOUT, + MoveId.ICE_BALL, + MoveId.ENDEAVOR ]; // ...and cannot enhance Pollen Puff when targeting an ally. const ally = user.getAlly(); - const exceptPollenPuffAlly: boolean = this.id === Moves.POLLEN_PUFF && !isNullOrUndefined(ally) && targets.includes(ally.getBattlerIndex()) + const exceptPollenPuffAlly: boolean = this.id === MoveId.POLLEN_PUFF && !isNullOrUndefined(ally) && targets.includes(ally.getBattlerIndex()) return (!restrictSpread || !isMultiTarget) && !this.isChargingMove() @@ -956,7 +956,7 @@ export default class Move implements Localizable { } export class AttackMove extends Move { - constructor(id: Moves, type: PokemonType, category: MoveCategory, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { + constructor(id: MoveId, type: PokemonType, category: MoveCategory, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, category, MoveTarget.NEAR_OTHER, power, accuracy, pp, chance, priority, generation); /** @@ -1003,13 +1003,13 @@ export class AttackMove extends Move { } export class StatusMove extends Move { - constructor(id: Moves, type: PokemonType, accuracy: number, pp: number, chance: number, priority: number, generation: number) { + constructor(id: MoveId, type: PokemonType, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, MoveCategory.STATUS, MoveTarget.NEAR_OTHER, -1, accuracy, pp, chance, priority, generation); } } export class SelfStatusMove extends Move { - constructor(id: Moves, type: PokemonType, accuracy: number, pp: number, chance: number, priority: number, generation: number) { + constructor(id: MoveId, type: PokemonType, accuracy: number, pp: number, chance: number, priority: number, generation: number) { super(id, type, MoveCategory.STATUS, MoveTarget.USER, -1, accuracy, pp, chance, priority, generation); } } @@ -1019,7 +1019,7 @@ type SubMove = new (...args: any[]) => Move; function ChargeMove(Base: TBase) { return class extends Base { /** The animation to play during the move's charging phase */ - public readonly chargeAnim: ChargeAnim = ChargeAnim[`${Moves[this.id]}_CHARGING`]; + public readonly chargeAnim: ChargeAnim = ChargeAnim[`${MoveId[this.id]}_CHARGING`]; /** The message to show during the move's charging phase */ private _chargeText: string; @@ -2385,7 +2385,7 @@ export class MultiHitAttr extends MoveAttr { * the move's accuracy, and a number of situational parameters. * * @param move - The move that this attribtue is applied to - * @param partySize - The size of the user's party, used for {@linkcode Moves.BEAT_UP | Beat Up} (default: `1`) + * @param partySize - The size of the user's party, used for {@linkcode MoveId.BEAT_UP | Beat Up} (default: `1`) * @param maxMultiHit - Whether the move should always hit the maximum number of times, e.g. due to {@linkcode AbilityId.SKILL_LINK | Skill Link} (default: `false`) * @param ignoreAcc - `true` if the move should ignore accuracy checks, e.g. due to {@linkcode AbilityId.NO_GUARD | No Guard} (default: `false`) */ @@ -2536,7 +2536,7 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr { /** * Attribute to steal items upon this move's use. - * Used for {@linkcode Moves.THIEF} and {@linkcode Moves.COVET}. + * Used for {@linkcode MoveId.THIEF} and {@linkcode MoveId.COVET}. */ export class StealHeldItemChanceAttr extends MoveEffectAttr { private chance: number; @@ -2743,7 +2743,7 @@ export class EatBerryAttr extends MoveEffectAttr { /** * Attribute used for moves that steal and eat a random berry from the target. - * Used for {@linkcode Moves.PLUCK} & {@linkcode Moves.BUG_BITE}. + * Used for {@linkcode MoveId.PLUCK} & {@linkcode MoveId.BUG_BITE}. */ export class StealEatBerryAttr extends EatBerryAttr { constructor() { @@ -2816,7 +2816,7 @@ export class HealStatusEffectAttr extends MoveEffectAttr { // Special edge case for shield dust blocking Sparkling Aria curing burn const moveTargets = getMoveTargets(user, move.id); - if (target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && move.id === Moves.SPARKLING_ARIA && moveTargets.targets.length === 1) { + if (target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && move.id === MoveId.SPARKLING_ARIA && moveTargets.targets.length === 1) { return false; } @@ -3800,7 +3800,7 @@ export class DoublePowerChanceAttr extends VariablePowerAttr { } export abstract class ConsecutiveUsePowerMultiplierAttr extends MovePowerMultiplierAttr { - constructor(limit: number, resetOnFail: boolean, resetOnLimit?: boolean, ...comboMoves: Moves[]) { + constructor(limit: number, resetOnFail: boolean, resetOnLimit?: boolean, ...comboMoves: MoveId[]) { super((user: Pokemon, target: Pokemon, move: Move): number => { const moveHistory = user.getLastXMoves(limit + 1).slice(1); @@ -3810,7 +3810,7 @@ export abstract class ConsecutiveUsePowerMultiplierAttr extends MovePowerMultipl while ( ( (turnMove = moveHistory.shift())?.move === move.id - || (comboMoves.length && comboMoves.includes(turnMove?.move ?? Moves.NONE)) + || (comboMoves.length && comboMoves.includes(turnMove?.move ?? MoveId.NONE)) ) && (!resetOnFail || turnMove?.result === MoveResult.SUCCESS) ) { @@ -4133,7 +4133,7 @@ export class FriendshipPowerAttr extends VariablePowerAttr { } /** - * This Attribute calculates the current power of {@linkcode Moves.RAGE_FIST}. + * This Attribute calculates the current power of {@linkcode MoveId.RAGE_FIST}. * The counter for power calculation does not reset on every wave but on every new arena encounter. * Self-inflicted confusion damage and hits taken by a Subsitute are ignored. */ @@ -4350,9 +4350,9 @@ export class MultiHitPowerIncrementAttr extends VariablePowerAttr { */ export class LastMoveDoublePowerAttr extends VariablePowerAttr { /** The move that must precede the current move */ - private move: Moves; + private move: MoveId; - constructor(move: Moves) { + constructor(move: MoveId) { super(); this.move = move; @@ -4477,7 +4477,7 @@ export class CueNextRoundAttr extends MoveEffectAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { const nextRoundPhase = globalScene.findPhase(phase => - phase instanceof MovePhase && phase.move.moveId === Moves.ROUND + phase instanceof MovePhase && phase.move.moveId === MoveId.ROUND ); if (!nextRoundPhase) { @@ -4518,7 +4518,7 @@ export class StatChangeBeforeDmgCalcAttr extends MoveAttr { /** * Steals the postitive Stat stages of the target before damage calculation so stat changes - * apply to damage calculation (e.g. {@linkcode Moves.SPECTRAL_THIEF}) + * apply to damage calculation (e.g. {@linkcode MoveId.SPECTRAL_THIEF}) * {@link https://bulbapedia.bulbagarden.net/wiki/Spectral_Thief_(move) | Spectral Thief} */ export class SpectralThiefAttr extends StatChangeBeforeDmgCalcAttr { @@ -5188,20 +5188,20 @@ export class CombinedPledgeTypeAttr extends VariableMoveTypeAttr { } switch (move.id) { - case Moves.FIRE_PLEDGE: - if (combinedPledgeMove === Moves.WATER_PLEDGE) { + case MoveId.FIRE_PLEDGE: + if (combinedPledgeMove === MoveId.WATER_PLEDGE) { moveType.value = PokemonType.WATER; return true; } return false; - case Moves.WATER_PLEDGE: - if (combinedPledgeMove === Moves.GRASS_PLEDGE) { + case MoveId.WATER_PLEDGE: + if (combinedPledgeMove === MoveId.GRASS_PLEDGE) { moveType.value = PokemonType.GRASS; return true; } return false; - case Moves.GRASS_PLEDGE: - if (combinedPledgeMove === Moves.FIRE_PLEDGE) { + case MoveId.GRASS_PLEDGE: + if (combinedPledgeMove === MoveId.FIRE_PLEDGE) { moveType.value = PokemonType.FIRE; return true; } @@ -5786,7 +5786,7 @@ export class ProtectAttr extends AddBattlerTagAttr { while (moveHistory.length) { turnMove = moveHistory.shift(); - if (!allMoves[turnMove?.move ?? Moves.NONE].hasAttr(ProtectAttr) || turnMove?.result !== MoveResult.SUCCESS) { + if (!allMoves[turnMove?.move ?? MoveId.NONE].hasAttr(ProtectAttr) || turnMove?.result !== MoveResult.SUCCESS) { break; } timesUsed++; @@ -6119,9 +6119,9 @@ export class SwapArenaTagsAttr extends MoveEffectAttr { * are combined. The effect added varies based on the two Pledge moves combined. */ export class AddPledgeEffectAttr extends AddArenaTagAttr { - private readonly requiredPledge: Moves; + private readonly requiredPledge: MoveId; - constructor(tagType: ArenaTagType, requiredPledge: Moves, selfSideTarget: boolean = false) { + constructor(tagType: ArenaTagType, requiredPledge: MoveId, selfSideTarget: boolean = false) { super(tagType, 4, false, selfSideTarget); this.requiredPledge = requiredPledge; @@ -6241,7 +6241,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { * If it did, the user of U-turn or Volt Switch will not be switched out. */ if (target.getAbility().hasAttr(PostDamageForceSwitchAbAttr) - && [ Moves.U_TURN, Moves.VOLT_SWITCH, Moves.FLIP_TURN ].includes(move.id) + && [ MoveId.U_TURN, MoveId.VOLT_SWITCH, MoveId.FLIP_TURN ].includes(move.id) ) { if (this.hpDroppedBelowHalf(target)) { return false; @@ -6337,7 +6337,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { * If it did, the user of U-turn or Volt Switch will not be switched out. */ if (target.getAbility().hasAttr(PostDamageForceSwitchAbAttr) - && [ Moves.U_TURN, Moves.VOLT_SWITCH, Moves.FLIP_TURN ].includes(move.id) + && [ MoveId.U_TURN, MoveId.VOLT_SWITCH, MoveId.FLIP_TURN ].includes(move.id) ) { if (this.hpDroppedBelowHalf(target)) { return false; @@ -6728,7 +6728,7 @@ export class FirstMoveTypeAttr extends MoveEffectAttr { * @extends OverrideMoveEffectAttr */ class CallMoveAttr extends OverrideMoveEffectAttr { - protected invalidMoves: ReadonlySet; + protected invalidMoves: ReadonlySet; protected hasTarget: boolean; apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const replaceMoveTarget = move.moveTarget === MoveTarget.NEAR_OTHER ? MoveTarget.NEAR_ENEMY : undefined; @@ -6750,12 +6750,12 @@ class CallMoveAttr extends OverrideMoveEffectAttr { /** * Attribute used to call a random move. - * Used for {@linkcode Moves.METRONOME} + * Used for {@linkcode MoveId.METRONOME} * @see {@linkcode apply} for move selection and move call * @extends CallMoveAttr to call a selected move */ export class RandomMoveAttr extends CallMoveAttr { - constructor(invalidMoves: ReadonlySet) { + constructor(invalidMoves: ReadonlySet) { super(); this.invalidMoves = invalidMoves; } @@ -6763,7 +6763,7 @@ export class RandomMoveAttr extends CallMoveAttr { /** * This function exists solely to allow tests to override the randomly selected move by mocking this function. */ - public getMoveOverride(): Moves | null { + public getMoveOverride(): MoveId | null { return null; } @@ -6777,19 +6777,19 @@ export class RandomMoveAttr extends CallMoveAttr { * @param args Unused */ override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const moveIds = getEnumValues(Moves).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : Moves.NONE); - let moveId: Moves = Moves.NONE; + const moveIds = getEnumValues(MoveId).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : MoveId.NONE); + let moveId: MoveId = MoveId.NONE; do { moveId = this.getMoveOverride() ?? moveIds[user.randBattleSeedInt(moveIds.length)]; } - while (moveId === Moves.NONE); + while (moveId === MoveId.NONE); return super.apply(user, target, allMoves[moveId], args); } } /** * Attribute used to call a random move in the user or party's moveset. - * Used for {@linkcode Moves.ASSIST} and {@linkcode Moves.SLEEP_TALK} + * Used for {@linkcode MoveId.ASSIST} and {@linkcode MoveId.SLEEP_TALK} * * Fails if the user has no callable moves. * @@ -6800,7 +6800,7 @@ export class RandomMoveAttr extends CallMoveAttr { export class RandomMovesetMoveAttr extends CallMoveAttr { private includeParty: boolean; private moveId: number; - constructor(invalidMoves: ReadonlySet, includeParty: boolean = false) { + constructor(invalidMoves: ReadonlySet, includeParty: boolean = false) { super(); this.includeParty = includeParty; this.invalidMoves = invalidMoves; @@ -6846,127 +6846,127 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { case TerrainType.NONE: switch (globalScene.arena.biomeType) { case Biome.TOWN: - moveId = Moves.ROUND; + moveId = MoveId.ROUND; break; case Biome.METROPOLIS: - moveId = Moves.TRI_ATTACK; + moveId = MoveId.TRI_ATTACK; break; case Biome.SLUM: - moveId = Moves.SLUDGE_BOMB; + moveId = MoveId.SLUDGE_BOMB; break; case Biome.PLAINS: - moveId = Moves.SILVER_WIND; + moveId = MoveId.SILVER_WIND; break; case Biome.GRASS: - moveId = Moves.GRASS_KNOT; + moveId = MoveId.GRASS_KNOT; break; case Biome.TALL_GRASS: - moveId = Moves.POLLEN_PUFF; + moveId = MoveId.POLLEN_PUFF; break; case Biome.MEADOW: - moveId = Moves.GIGA_DRAIN; + moveId = MoveId.GIGA_DRAIN; break; case Biome.FOREST: - moveId = Moves.BUG_BUZZ; + moveId = MoveId.BUG_BUZZ; break; case Biome.JUNGLE: - moveId = Moves.LEAF_STORM; + moveId = MoveId.LEAF_STORM; break; case Biome.SEA: - moveId = Moves.HYDRO_PUMP; + moveId = MoveId.HYDRO_PUMP; break; case Biome.SWAMP: - moveId = Moves.MUD_BOMB; + moveId = MoveId.MUD_BOMB; break; case Biome.BEACH: - moveId = Moves.SCALD; + moveId = MoveId.SCALD; break; case Biome.LAKE: - moveId = Moves.BUBBLE_BEAM; + moveId = MoveId.BUBBLE_BEAM; break; case Biome.SEABED: - moveId = Moves.BRINE; + moveId = MoveId.BRINE; break; case Biome.ISLAND: - moveId = Moves.LEAF_TORNADO; + moveId = MoveId.LEAF_TORNADO; break; case Biome.MOUNTAIN: - moveId = Moves.AIR_SLASH; + moveId = MoveId.AIR_SLASH; break; case Biome.BADLANDS: - moveId = Moves.EARTH_POWER; + moveId = MoveId.EARTH_POWER; break; case Biome.DESERT: - moveId = Moves.SCORCHING_SANDS; + moveId = MoveId.SCORCHING_SANDS; break; case Biome.WASTELAND: - moveId = Moves.DRAGON_PULSE; + moveId = MoveId.DRAGON_PULSE; break; case Biome.CONSTRUCTION_SITE: - moveId = Moves.STEEL_BEAM; + moveId = MoveId.STEEL_BEAM; break; case Biome.CAVE: - moveId = Moves.POWER_GEM; + moveId = MoveId.POWER_GEM; break; case Biome.ICE_CAVE: - moveId = Moves.ICE_BEAM; + moveId = MoveId.ICE_BEAM; break; case Biome.SNOWY_FOREST: - moveId = Moves.FROST_BREATH; + moveId = MoveId.FROST_BREATH; break; case Biome.VOLCANO: - moveId = Moves.LAVA_PLUME; + moveId = MoveId.LAVA_PLUME; break; case Biome.GRAVEYARD: - moveId = Moves.SHADOW_BALL; + moveId = MoveId.SHADOW_BALL; break; case Biome.RUINS: - moveId = Moves.ANCIENT_POWER; + moveId = MoveId.ANCIENT_POWER; break; case Biome.TEMPLE: - moveId = Moves.EXTRASENSORY; + moveId = MoveId.EXTRASENSORY; break; case Biome.DOJO: - moveId = Moves.FOCUS_BLAST; + moveId = MoveId.FOCUS_BLAST; break; case Biome.FAIRY_CAVE: - moveId = Moves.ALLURING_VOICE; + moveId = MoveId.ALLURING_VOICE; break; case Biome.ABYSS: - moveId = Moves.OMINOUS_WIND; + moveId = MoveId.OMINOUS_WIND; break; case Biome.SPACE: - moveId = Moves.DRACO_METEOR; + moveId = MoveId.DRACO_METEOR; break; case Biome.FACTORY: - moveId = Moves.FLASH_CANNON; + moveId = MoveId.FLASH_CANNON; break; case Biome.LABORATORY: - moveId = Moves.ZAP_CANNON; + moveId = MoveId.ZAP_CANNON; break; case Biome.POWER_PLANT: - moveId = Moves.CHARGE_BEAM; + moveId = MoveId.CHARGE_BEAM; break; case Biome.END: - moveId = Moves.ETERNABEAM; + moveId = MoveId.ETERNABEAM; break; } break; case TerrainType.MISTY: - moveId = Moves.MOONBLAST; + moveId = MoveId.MOONBLAST; break; case TerrainType.ELECTRIC: - moveId = Moves.THUNDERBOLT; + moveId = MoveId.THUNDERBOLT; break; case TerrainType.GRASSY: - moveId = Moves.ENERGY_BALL; + moveId = MoveId.ENERGY_BALL; break; case TerrainType.PSYCHIC: - moveId = Moves.PSYCHIC; + moveId = MoveId.PSYCHIC; break; default: // Just in case there's no match - moveId = Moves.TRI_ATTACK; + moveId = MoveId.TRI_ATTACK; break; } @@ -6979,13 +6979,13 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { /** * Attribute used to copy a previously-used move. - * Used for {@linkcode Moves.COPYCAT} and {@linkcode Moves.MIRROR_MOVE} + * Used for {@linkcode MoveId.COPYCAT} and {@linkcode MoveId.MIRROR_MOVE} * @see {@linkcode apply} for move selection and move call * @extends CallMoveAttr to call a selected move */ export class CopyMoveAttr extends CallMoveAttr { private mirrorMove: boolean; - constructor(mirrorMove: boolean, invalidMoves: ReadonlySet = new Set()) { + constructor(mirrorMove: boolean, invalidMoves: ReadonlySet = new Set()) { super(); this.mirrorMove = mirrorMove; this.invalidMoves = invalidMoves; @@ -7031,7 +7031,7 @@ export class RepeatMoveAttr extends MoveEffectAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { // get the last move used (excluding status based failures) as well as the corresponding moveset slot - const lastMove = target.getLastXMoves(-1).find(m => m.move !== Moves.NONE)!; + const lastMove = target.getLastXMoves(-1).find(m => m.move !== MoveId.NONE)!; const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move)!; // If the last move used can hit more than one target or has variable targets, // re-compute the targets for the attack @@ -7065,60 +7065,60 @@ export class RepeatMoveAttr extends MoveEffectAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { - const lastMove = target.getLastXMoves(-1).find(m => m.move !== Moves.NONE); + const lastMove = target.getLastXMoves(-1).find(m => m.move !== MoveId.NONE); const movesetMove = target.getMoveset().find(m => m.moveId === lastMove?.move); const uninstructableMoves = [ // Locking/Continually Executed moves - Moves.OUTRAGE, - Moves.RAGING_FURY, - Moves.ROLLOUT, - Moves.PETAL_DANCE, - Moves.THRASH, - Moves.ICE_BALL, + MoveId.OUTRAGE, + MoveId.RAGING_FURY, + MoveId.ROLLOUT, + MoveId.PETAL_DANCE, + MoveId.THRASH, + MoveId.ICE_BALL, // Multi-turn Moves - Moves.BIDE, - Moves.SHELL_TRAP, - Moves.BEAK_BLAST, - Moves.FOCUS_PUNCH, + MoveId.BIDE, + MoveId.SHELL_TRAP, + MoveId.BEAK_BLAST, + MoveId.FOCUS_PUNCH, // "First Turn Only" moves - Moves.FAKE_OUT, - Moves.FIRST_IMPRESSION, - Moves.MAT_BLOCK, + MoveId.FAKE_OUT, + MoveId.FIRST_IMPRESSION, + MoveId.MAT_BLOCK, // Moves with a recharge turn - Moves.HYPER_BEAM, - Moves.ETERNABEAM, - Moves.FRENZY_PLANT, - Moves.BLAST_BURN, - Moves.HYDRO_CANNON, - Moves.GIGA_IMPACT, - Moves.PRISMATIC_LASER, - Moves.ROAR_OF_TIME, - Moves.ROCK_WRECKER, - Moves.METEOR_ASSAULT, + MoveId.HYPER_BEAM, + MoveId.ETERNABEAM, + MoveId.FRENZY_PLANT, + MoveId.BLAST_BURN, + MoveId.HYDRO_CANNON, + MoveId.GIGA_IMPACT, + MoveId.PRISMATIC_LASER, + MoveId.ROAR_OF_TIME, + MoveId.ROCK_WRECKER, + MoveId.METEOR_ASSAULT, // Charging & 2-turn moves - Moves.DIG, - Moves.FLY, - Moves.BOUNCE, - Moves.SHADOW_FORCE, - Moves.PHANTOM_FORCE, - Moves.DIVE, - Moves.ELECTRO_SHOT, - Moves.ICE_BURN, - Moves.GEOMANCY, - Moves.FREEZE_SHOCK, - Moves.SKY_DROP, - Moves.SKY_ATTACK, - Moves.SKULL_BASH, - Moves.SOLAR_BEAM, - Moves.SOLAR_BLADE, - Moves.METEOR_BEAM, + MoveId.DIG, + MoveId.FLY, + MoveId.BOUNCE, + MoveId.SHADOW_FORCE, + MoveId.PHANTOM_FORCE, + MoveId.DIVE, + MoveId.ELECTRO_SHOT, + MoveId.ICE_BURN, + MoveId.GEOMANCY, + MoveId.FREEZE_SHOCK, + MoveId.SKY_DROP, + MoveId.SKY_ATTACK, + MoveId.SKULL_BASH, + MoveId.SOLAR_BEAM, + MoveId.SOLAR_BLADE, + MoveId.METEOR_BEAM, // Other moves - Moves.INSTRUCT, - Moves.KINGS_SHIELD, - Moves.SKETCH, - Moves.TRANSFORM, - Moves.MIMIC, - Moves.STRUGGLE, + MoveId.INSTRUCT, + MoveId.KINGS_SHIELD, + MoveId.SKETCH, + MoveId.TRANSFORM, + MoveId.MIMIC, + MoveId.STRUGGLE, // TODO: Add Max/G-Move blockage if or when they are implemented ]; @@ -7296,7 +7296,7 @@ export class MovesetCopyMoveAttr extends OverrideMoveEffectAttr { } /** - * Attribute for {@linkcode Moves.SKETCH} that causes the user to copy the opponent's last used move + * Attribute for {@linkcode MoveId.SKETCH} that causes the user to copy the opponent's last used move * This move copies the last used non-virtual move * e.g. if Metronome is used, it copies Metronome itself, not the virtual move called by Metronome * Fails if the opponent has not yet used a move. @@ -7322,7 +7322,7 @@ export class SketchAttr extends MoveEffectAttr { } const targetMove = target.getLastXMoves(-1) - .find(m => m.move !== Moves.NONE && m.move !== Moves.STRUGGLE && !m.virtual); + .find(m => m.move !== MoveId.NONE && m.move !== MoveId.STRUGGLE && !m.virtual); if (!targetMove) { return false; } @@ -7352,15 +7352,15 @@ export class SketchAttr extends MoveEffectAttr { } const unsketchableMoves = [ - Moves.CHATTER, - Moves.MIRROR_MOVE, - Moves.SLEEP_TALK, - Moves.STRUGGLE, - Moves.SKETCH, - Moves.REVIVAL_BLESSING, - Moves.TERA_STARSTORM, - Moves.BREAKNECK_BLITZ__PHYSICAL, - Moves.BREAKNECK_BLITZ__SPECIAL + MoveId.CHATTER, + MoveId.MIRROR_MOVE, + MoveId.SLEEP_TALK, + MoveId.STRUGGLE, + MoveId.SKETCH, + MoveId.REVIVAL_BLESSING, + MoveId.TERA_STARSTORM, + MoveId.BREAKNECK_BLITZ__PHYSICAL, + MoveId.BREAKNECK_BLITZ__SPECIAL ]; if (unsketchableMoves.includes(targetMove.move)) { @@ -7496,7 +7496,7 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr { } /** - * Attribute used for moves that suppress abilities like {@linkcode Moves.GASTRO_ACID}. + * Attribute used for moves that suppress abilities like {@linkcode MoveId.GASTRO_ACID}. * A suppressed ability cannot be activated. * * @extends MoveEffectAttr @@ -7528,7 +7528,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr { /** * Applies the effects of {@linkcode SuppressAbilitiesAttr} if the target has already moved this turn. * @extends MoveEffectAttr - * @see {@linkcode Moves.CORE_ENFORCER} (the move which uses this effect) + * @see {@linkcode MoveId.CORE_ENFORCER} (the move which uses this effect) */ export class SuppressAbilitiesIfActedAttr extends MoveEffectAttr { /** @@ -7805,13 +7805,13 @@ export class StatusIfBoostedAttr extends MoveEffectAttr { /** * Attribute to fail move usage unless all of the user's other moves have been used at least once. - * Used by {@linkcode Moves.LAST_RESORT}. + * Used by {@linkcode MoveId.LAST_RESORT}. */ export class LastResortAttr extends MoveAttr { // TODO: Verify behavior as Bulbapedia page is _extremely_ poorly documented getCondition(): MoveConditionFunc { return (user: Pokemon, _target: Pokemon, move: Move) => { - const movesInMoveset = new Set(user.getMoveset().map(m => m.moveId)); + const movesInMoveset = new Set(user.getMoveset().map(m => m.moveId)); if (!movesInMoveset.delete(move.id) || !movesInMoveset.size) { return false; // Last resort fails if used when not in user's moveset or no other moves exist } @@ -7845,7 +7845,7 @@ export class VariableTargetAttr extends MoveAttr { } /** - * Attribute for {@linkcode Moves.AFTER_YOU} + * Attribute for {@linkcode MoveId.AFTER_YOU} * * [After You - Move | Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/After_You_(move)) */ @@ -7855,7 +7855,7 @@ export class AfterYouAttr extends MoveEffectAttr { * * @param user {@linkcode Pokemon} that is using the move. * @param target {@linkcode Pokemon} that will move right after this move is used. - * @param move {@linkcode Move} {@linkcode Moves.AFTER_YOU} + * @param move {@linkcode Move} {@linkcode MoveId.AFTER_YOU} * @param _args N/A * @returns true */ @@ -7883,7 +7883,7 @@ export class ForceLastAttr extends MoveEffectAttr { * * @param user {@linkcode Pokemon} that is using the move. * @param target {@linkcode Pokemon} that will be forced to move last. - * @param move {@linkcode Move} {@linkcode Moves.QUASH} + * @param move {@linkcode Move} {@linkcode MoveId.QUASH} * @param _args N/A * @returns true */ @@ -8085,7 +8085,7 @@ export class HitsSameTypeAttr extends VariableMoveTypeMultiplierAttr { * Fails if the type is unknown or stellar * * TODO: - * If a move has its type changed (e.g. {@linkcode Moves.HIDDEN_POWER}), it will check the new type. + * If a move has its type changed (e.g. {@linkcode MoveId.HIDDEN_POWER}), it will check the new type. */ export class ResistLastMoveTypeAttr extends MoveEffectAttr { constructor() { @@ -8156,7 +8156,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { /** * Drops the target's immunity to types it is immune to * and makes its evasiveness be ignored during accuracy - * checks. Used by: {@linkcode Moves.ODOR_SLEUTH | Odor Sleuth}, {@linkcode Moves.MIRACLE_EYE | Miracle Eye} and {@linkcode Moves.FORESIGHT | Foresight} + * checks. Used by: {@linkcode MoveId.ODOR_SLEUTH | Odor Sleuth}, {@linkcode MoveId.MIRACLE_EYE | Miracle Eye} and {@linkcode MoveId.FORESIGHT | Foresight} * * @extends AddBattlerTagAttr * @see {@linkcode apply} @@ -8193,7 +8193,7 @@ export type MoveTargetSet = { multiple: boolean; }; -export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveTarget): MoveTargetSet { +export function getMoveTargets(user: Pokemon, move: MoveId, replaceTarget?: MoveTarget): MoveTargetSet { const variableTarget = new NumberHolder(0); user.getOpponents(false).forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget)); @@ -8261,420 +8261,420 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT return { targets: set.filter(p => p?.isActive(true)).map(p => p.getBattlerIndex()).filter(t => t !== undefined), multiple }; } -export const selfStatLowerMoves: Moves[] = []; +export const selfStatLowerMoves: MoveId[] = []; export function initMoves() { allMoves.push( - new SelfStatusMove(Moves.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1), - new AttackMove(Moves.POUND, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), - new AttackMove(Moves.KARATE_CHOP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 1) + new SelfStatusMove(MoveId.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1), + new AttackMove(MoveId.POUND, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), + new AttackMove(MoveId.KARATE_CHOP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 1) .attr(HighCritAttr), - new AttackMove(Moves.DOUBLE_SLAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 10, -1, 0, 1) + new AttackMove(MoveId.DOUBLE_SLAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 10, -1, 0, 1) .attr(MultiHitAttr), - new AttackMove(Moves.COMET_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 18, 85, 15, -1, 0, 1) + new AttackMove(MoveId.COMET_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 18, 85, 15, -1, 0, 1) .attr(MultiHitAttr) .punchingMove(), - new AttackMove(Moves.MEGA_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 85, 20, -1, 0, 1) + new AttackMove(MoveId.MEGA_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 85, 20, -1, 0, 1) .punchingMove(), - new AttackMove(Moves.PAY_DAY, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 1) + new AttackMove(MoveId.PAY_DAY, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 1) .attr(MoneyAttr) .makesContact(false), - new AttackMove(Moves.FIRE_PUNCH, PokemonType.FIRE, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) + new AttackMove(MoveId.FIRE_PUNCH, PokemonType.FIRE, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.BURN) .punchingMove(), - new AttackMove(Moves.ICE_PUNCH, PokemonType.ICE, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) + new AttackMove(MoveId.ICE_PUNCH, PokemonType.ICE, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.FREEZE) .punchingMove(), - new AttackMove(Moves.THUNDER_PUNCH, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) + new AttackMove(MoveId.THUNDER_PUNCH, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 75, 100, 15, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .punchingMove(), - new AttackMove(Moves.SCRATCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), - new AttackMove(Moves.VISE_GRIP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 55, 100, 30, -1, 0, 1), - new AttackMove(Moves.GUILLOTINE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) + new AttackMove(MoveId.SCRATCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), + new AttackMove(MoveId.VISE_GRIP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 55, 100, 30, -1, 0, 1), + new AttackMove(MoveId.GUILLOTINE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) .attr(OneHitKOAttr) .attr(OneHitKOAccuracyAttr), - new ChargingAttackMove(Moves.RAZOR_WIND, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1) + new ChargingAttackMove(MoveId.RAZOR_WIND, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:whippedUpAWhirlwind", { pokemonName: "{USER}" })) .attr(HighCritAttr) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new SelfStatusMove(Moves.SWORDS_DANCE, PokemonType.NORMAL, -1, 20, -1, 0, 1) + new SelfStatusMove(MoveId.SWORDS_DANCE, PokemonType.NORMAL, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], 2, true) .danceMove(), - new AttackMove(Moves.CUT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, 95, 30, -1, 0, 1) + new AttackMove(MoveId.CUT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, 95, 30, -1, 0, 1) .slicingMove(), - new AttackMove(Moves.GUST, PokemonType.FLYING, MoveCategory.SPECIAL, 40, 100, 35, -1, 0, 1) + new AttackMove(MoveId.GUST, PokemonType.FLYING, MoveCategory.SPECIAL, 40, 100, 35, -1, 0, 1) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.FLYING) .windMove(), - new AttackMove(Moves.WING_ATTACK, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 35, -1, 0, 1), - new StatusMove(Moves.WHIRLWIND, PokemonType.NORMAL, -1, 20, -1, -6, 1) + new AttackMove(MoveId.WING_ATTACK, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 35, -1, 0, 1), + new StatusMove(MoveId.WHIRLWIND, PokemonType.NORMAL, -1, 20, -1, -6, 1) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .ignoresSubstitute() .hidesTarget() .windMove() .reflectable(), - new ChargingAttackMove(Moves.FLY, PokemonType.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) + new ChargingAttackMove(MoveId.FLY, PokemonType.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) .chargeText(i18next.t("moveTriggers:flewUpHigh", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .condition(failOnGravityCondition), - new AttackMove(Moves.BIND, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) + new AttackMove(MoveId.BIND, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) .attr(TrapAttr, BattlerTagType.BIND), - new AttackMove(Moves.SLAM, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 75, 20, -1, 0, 1), - new AttackMove(Moves.VINE_WHIP, PokemonType.GRASS, MoveCategory.PHYSICAL, 45, 100, 25, -1, 0, 1), - new AttackMove(Moves.STOMP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 1) + new AttackMove(MoveId.SLAM, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 75, 20, -1, 0, 1), + new AttackMove(MoveId.VINE_WHIP, PokemonType.GRASS, MoveCategory.PHYSICAL, 45, 100, 25, -1, 0, 1), + new AttackMove(MoveId.STOMP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 1) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(FlinchAttr), - new AttackMove(Moves.DOUBLE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 30, 100, 30, -1, 0, 1) + new AttackMove(MoveId.DOUBLE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 30, 100, 30, -1, 0, 1) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.MEGA_KICK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 75, 5, -1, 0, 1), - new AttackMove(Moves.JUMP_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 1) + new AttackMove(MoveId.MEGA_KICK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 75, 5, -1, 0, 1), + new AttackMove(MoveId.JUMP_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 1) .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) .condition(failOnGravityCondition) .recklessMove(), - new AttackMove(Moves.ROLLING_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 85, 15, 30, 0, 1) + new AttackMove(MoveId.ROLLING_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 85, 15, 30, 0, 1) .attr(FlinchAttr), - new StatusMove(Moves.SAND_ATTACK, PokemonType.GROUND, 100, 15, -1, 0, 1) + new StatusMove(MoveId.SAND_ATTACK, PokemonType.GROUND, 100, 15, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .reflectable(), - new AttackMove(Moves.HEADBUTT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 15, 30, 0, 1) + new AttackMove(MoveId.HEADBUTT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 15, 30, 0, 1) .attr(FlinchAttr), - new AttackMove(Moves.HORN_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 65, 100, 25, -1, 0, 1), - new AttackMove(Moves.FURY_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) + new AttackMove(MoveId.HORN_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 65, 100, 25, -1, 0, 1), + new AttackMove(MoveId.FURY_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) .attr(MultiHitAttr), - new AttackMove(Moves.HORN_DRILL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) + new AttackMove(MoveId.HORN_DRILL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) .attr(OneHitKOAttr) .attr(OneHitKOAccuracyAttr), - new AttackMove(Moves.TACKLE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), - new AttackMove(Moves.BODY_SLAM, PokemonType.NORMAL, MoveCategory.PHYSICAL, 85, 100, 15, 30, 0, 1) + new AttackMove(MoveId.TACKLE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), + new AttackMove(MoveId.BODY_SLAM, PokemonType.NORMAL, MoveCategory.PHYSICAL, 85, 100, 15, 30, 0, 1) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.WRAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 90, 20, -1, 0, 1) + new AttackMove(MoveId.WRAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 90, 20, -1, 0, 1) .attr(TrapAttr, BattlerTagType.WRAP), - new AttackMove(Moves.TAKE_DOWN, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 85, 20, -1, 0, 1) + new AttackMove(MoveId.TAKE_DOWN, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 85, 20, -1, 0, 1) .attr(RecoilAttr) .recklessMove(), - new AttackMove(Moves.THRASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 1) + new AttackMove(MoveId.THRASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 1) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) .attr(NoEffectAttr, frenzyMissFunc) .target(MoveTarget.RANDOM_NEAR_ENEMY), - new AttackMove(Moves.DOUBLE_EDGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 1) + new AttackMove(MoveId.DOUBLE_EDGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 1) .attr(RecoilAttr, false, 0.33) .recklessMove(), - new StatusMove(Moves.TAIL_WHIP, PokemonType.NORMAL, 100, 30, -1, 0, 1) + new StatusMove(MoveId.TAIL_WHIP, PokemonType.NORMAL, 100, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.POISON_STING, PokemonType.POISON, MoveCategory.PHYSICAL, 15, 100, 35, 30, 0, 1) + new AttackMove(MoveId.POISON_STING, PokemonType.POISON, MoveCategory.PHYSICAL, 15, 100, 35, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) .makesContact(false), - new AttackMove(Moves.TWINEEDLE, PokemonType.BUG, MoveCategory.PHYSICAL, 25, 100, 20, 20, 0, 1) + new AttackMove(MoveId.TWINEEDLE, PokemonType.BUG, MoveCategory.PHYSICAL, 25, 100, 20, 20, 0, 1) .attr(MultiHitAttr, MultiHitType._2) .attr(StatusEffectAttr, StatusEffect.POISON) .makesContact(false), - new AttackMove(Moves.PIN_MISSILE, PokemonType.BUG, MoveCategory.PHYSICAL, 25, 95, 20, -1, 0, 1) + new AttackMove(MoveId.PIN_MISSILE, PokemonType.BUG, MoveCategory.PHYSICAL, 25, 95, 20, -1, 0, 1) .attr(MultiHitAttr) .makesContact(false), - new StatusMove(Moves.LEER, PokemonType.NORMAL, 100, 30, -1, 0, 1) + new StatusMove(MoveId.LEER, PokemonType.NORMAL, 100, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.BITE, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 25, 30, 0, 1) + new AttackMove(MoveId.BITE, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 25, 30, 0, 1) .attr(FlinchAttr) .bitingMove(), - new StatusMove(Moves.GROWL, PokemonType.NORMAL, 100, 40, -1, 0, 1) + new StatusMove(MoveId.GROWL, PokemonType.NORMAL, 100, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new StatusMove(Moves.ROAR, PokemonType.NORMAL, -1, 20, -1, -6, 1) + new StatusMove(MoveId.ROAR, PokemonType.NORMAL, -1, 20, -1, -6, 1) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .soundBased() .hidesTarget() .reflectable(), - new StatusMove(Moves.SING, PokemonType.NORMAL, 55, 15, -1, 0, 1) + new StatusMove(MoveId.SING, PokemonType.NORMAL, 55, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .soundBased() .reflectable(), - new StatusMove(Moves.SUPERSONIC, PokemonType.NORMAL, 55, 20, -1, 0, 1) + new StatusMove(MoveId.SUPERSONIC, PokemonType.NORMAL, 55, 20, -1, 0, 1) .attr(ConfuseAttr) .soundBased() .reflectable(), - new AttackMove(Moves.SONIC_BOOM, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, 90, 20, -1, 0, 1) + new AttackMove(MoveId.SONIC_BOOM, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, 90, 20, -1, 0, 1) .attr(FixedDamageAttr, 20), - new StatusMove(Moves.DISABLE, PokemonType.NORMAL, 100, 20, -1, 0, 1) + new StatusMove(MoveId.DISABLE, PokemonType.NORMAL, 100, 20, -1, 0, 1) .attr(AddBattlerTagAttr, BattlerTagType.DISABLED, false, true) .condition((user, target, move) => { const lastRealMove = target.getLastXMoves(-1).find(m => !m.virtual); - return !isNullOrUndefined(lastRealMove) && lastRealMove.move !== Moves.NONE && lastRealMove.move !== Moves.STRUGGLE; + return !isNullOrUndefined(lastRealMove) && lastRealMove.move !== MoveId.NONE && lastRealMove.move !== MoveId.STRUGGLE; }) .ignoresSubstitute() .reflectable(), - new AttackMove(Moves.ACID, PokemonType.POISON, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) + new AttackMove(MoveId.ACID, PokemonType.POISON, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.EMBER, PokemonType.FIRE, MoveCategory.SPECIAL, 40, 100, 25, 10, 0, 1) + new AttackMove(MoveId.EMBER, PokemonType.FIRE, MoveCategory.SPECIAL, 40, 100, 25, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.FLAMETHROWER, PokemonType.FIRE, MoveCategory.SPECIAL, 90, 100, 15, 10, 0, 1) + new AttackMove(MoveId.FLAMETHROWER, PokemonType.FIRE, MoveCategory.SPECIAL, 90, 100, 15, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.BURN), - new StatusMove(Moves.MIST, PokemonType.ICE, -1, 30, -1, 0, 1) + new StatusMove(MoveId.MIST, PokemonType.ICE, -1, 30, -1, 0, 1) .attr(AddArenaTagAttr, ArenaTagType.MIST, 5, true) .target(MoveTarget.USER_SIDE), - new AttackMove(Moves.WATER_GUN, PokemonType.WATER, MoveCategory.SPECIAL, 40, 100, 25, -1, 0, 1), - new AttackMove(Moves.HYDRO_PUMP, PokemonType.WATER, MoveCategory.SPECIAL, 110, 80, 5, -1, 0, 1), - new AttackMove(Moves.SURF, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 1) + new AttackMove(MoveId.WATER_GUN, PokemonType.WATER, MoveCategory.SPECIAL, 40, 100, 25, -1, 0, 1), + new AttackMove(MoveId.HYDRO_PUMP, PokemonType.WATER, MoveCategory.SPECIAL, 110, 80, 5, -1, 0, 1), + new AttackMove(MoveId.SURF, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 1) .target(MoveTarget.ALL_NEAR_OTHERS) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERWATER) .attr(GulpMissileTagAttr), - new AttackMove(Moves.ICE_BEAM, PokemonType.ICE, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) + new AttackMove(MoveId.ICE_BEAM, PokemonType.ICE, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.FREEZE), - new AttackMove(Moves.BLIZZARD, PokemonType.ICE, MoveCategory.SPECIAL, 110, 70, 5, 10, 0, 1) + new AttackMove(MoveId.BLIZZARD, PokemonType.ICE, MoveCategory.SPECIAL, 110, 70, 5, 10, 0, 1) .attr(BlizzardAccuracyAttr) .attr(StatusEffectAttr, StatusEffect.FREEZE) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.PSYBEAM, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) + new AttackMove(MoveId.PSYBEAM, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) .attr(ConfuseAttr), - new AttackMove(Moves.BUBBLE_BEAM, PokemonType.WATER, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) + new AttackMove(MoveId.BUBBLE_BEAM, PokemonType.WATER, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), - new AttackMove(Moves.AURORA_BEAM, PokemonType.ICE, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) + new AttackMove(MoveId.AURORA_BEAM, PokemonType.ICE, MoveCategory.SPECIAL, 65, 100, 20, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new AttackMove(Moves.HYPER_BEAM, PokemonType.NORMAL, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 1) + new AttackMove(MoveId.HYPER_BEAM, PokemonType.NORMAL, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 1) .attr(RechargeAttr), - new AttackMove(Moves.PECK, PokemonType.FLYING, MoveCategory.PHYSICAL, 35, 100, 35, -1, 0, 1), - new AttackMove(Moves.DRILL_PECK, PokemonType.FLYING, MoveCategory.PHYSICAL, 80, 100, 20, -1, 0, 1), - new AttackMove(Moves.SUBMISSION, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 80, 80, 20, -1, 0, 1) + new AttackMove(MoveId.PECK, PokemonType.FLYING, MoveCategory.PHYSICAL, 35, 100, 35, -1, 0, 1), + new AttackMove(MoveId.DRILL_PECK, PokemonType.FLYING, MoveCategory.PHYSICAL, 80, 100, 20, -1, 0, 1), + new AttackMove(MoveId.SUBMISSION, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 80, 80, 20, -1, 0, 1) .attr(RecoilAttr) .recklessMove(), - new AttackMove(Moves.LOW_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 1) + new AttackMove(MoveId.LOW_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 1) .attr(WeightPowerAttr), - new AttackMove(Moves.COUNTER, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, -5, 1) + new AttackMove(MoveId.COUNTER, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, -5, 1) .attr(CounterDamageAttr, (move: Move) => move.category === MoveCategory.PHYSICAL, 2) .target(MoveTarget.ATTACKER), - new AttackMove(Moves.SEISMIC_TOSS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 1) + new AttackMove(MoveId.SEISMIC_TOSS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 1) .attr(LevelDamageAttr), - new AttackMove(Moves.STRENGTH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 1), - new AttackMove(Moves.ABSORB, PokemonType.GRASS, MoveCategory.SPECIAL, 20, 100, 25, -1, 0, 1) + new AttackMove(MoveId.STRENGTH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 1), + new AttackMove(MoveId.ABSORB, PokemonType.GRASS, MoveCategory.SPECIAL, 20, 100, 25, -1, 0, 1) .attr(HitHealAttr) .triageMove(), - new AttackMove(Moves.MEGA_DRAIN, PokemonType.GRASS, MoveCategory.SPECIAL, 40, 100, 15, -1, 0, 1) + new AttackMove(MoveId.MEGA_DRAIN, PokemonType.GRASS, MoveCategory.SPECIAL, 40, 100, 15, -1, 0, 1) .attr(HitHealAttr) .triageMove(), - new StatusMove(Moves.LEECH_SEED, PokemonType.GRASS, 90, 10, -1, 0, 1) + new StatusMove(MoveId.LEECH_SEED, PokemonType.GRASS, 90, 10, -1, 0, 1) .attr(LeechSeedAttr) .condition((user, target, move) => !target.getTag(BattlerTagType.SEEDED) && !target.isOfType(PokemonType.GRASS)) .reflectable(), - new SelfStatusMove(Moves.GROWTH, PokemonType.NORMAL, -1, 20, -1, 0, 1) + new SelfStatusMove(MoveId.GROWTH, PokemonType.NORMAL, -1, 20, -1, 0, 1) .attr(GrowthStatStageChangeAttr), - new AttackMove(Moves.RAZOR_LEAF, PokemonType.GRASS, MoveCategory.PHYSICAL, 55, 95, 25, -1, 0, 1) + new AttackMove(MoveId.RAZOR_LEAF, PokemonType.GRASS, MoveCategory.PHYSICAL, 55, 95, 25, -1, 0, 1) .attr(HighCritAttr) .makesContact(false) .slicingMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new ChargingAttackMove(Moves.SOLAR_BEAM, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) + new ChargingAttackMove(MoveId.SOLAR_BEAM, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:tookInSunlight", { pokemonName: "{USER}" })) .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]) .attr(AntiSunlightPowerDecreaseAttr), - new StatusMove(Moves.POISON_POWDER, PokemonType.POISON, 75, 35, -1, 0, 1) + new StatusMove(MoveId.POISON_POWDER, PokemonType.POISON, 75, 35, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) .powderMove() .reflectable(), - new StatusMove(Moves.STUN_SPORE, PokemonType.GRASS, 75, 30, -1, 0, 1) + new StatusMove(MoveId.STUN_SPORE, PokemonType.GRASS, 75, 30, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .powderMove() .reflectable(), - new StatusMove(Moves.SLEEP_POWDER, PokemonType.GRASS, 75, 15, -1, 0, 1) + new StatusMove(MoveId.SLEEP_POWDER, PokemonType.GRASS, 75, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .powderMove() .reflectable(), - new AttackMove(Moves.PETAL_DANCE, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) + new AttackMove(MoveId.PETAL_DANCE, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) .attr(NoEffectAttr, frenzyMissFunc) .makesContact() .danceMove() .target(MoveTarget.RANDOM_NEAR_ENEMY), - new StatusMove(Moves.STRING_SHOT, PokemonType.BUG, 95, 40, -1, 0, 1) + new StatusMove(MoveId.STRING_SHOT, PokemonType.BUG, 95, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -2) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.DRAGON_RAGE, PokemonType.DRAGON, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 1) + new AttackMove(MoveId.DRAGON_RAGE, PokemonType.DRAGON, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 1) .attr(FixedDamageAttr, 40), - new AttackMove(Moves.FIRE_SPIN, PokemonType.FIRE, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 1) + new AttackMove(MoveId.FIRE_SPIN, PokemonType.FIRE, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 1) .attr(TrapAttr, BattlerTagType.FIRE_SPIN), - new AttackMove(Moves.THUNDER_SHOCK, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) + new AttackMove(MoveId.THUNDER_SHOCK, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.THUNDERBOLT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 90, 100, 15, 10, 0, 1) + new AttackMove(MoveId.THUNDERBOLT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 90, 100, 15, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new StatusMove(Moves.THUNDER_WAVE, PokemonType.ELECTRIC, 90, 20, -1, 0, 1) + new StatusMove(MoveId.THUNDER_WAVE, PokemonType.ELECTRIC, 90, 20, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(RespectAttackTypeImmunityAttr) .reflectable(), - new AttackMove(Moves.THUNDER, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 1) + new AttackMove(MoveId.THUNDER, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(ThunderAccuracyAttr) .attr(HitsTagAttr, BattlerTagType.FLYING), - new AttackMove(Moves.ROCK_THROW, PokemonType.ROCK, MoveCategory.PHYSICAL, 50, 90, 15, -1, 0, 1) + new AttackMove(MoveId.ROCK_THROW, PokemonType.ROCK, MoveCategory.PHYSICAL, 50, 90, 15, -1, 0, 1) .makesContact(false), - new AttackMove(Moves.EARTHQUAKE, PokemonType.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1) + new AttackMove(MoveId.EARTHQUAKE, PokemonType.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERGROUND) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.FISSURE, PokemonType.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) + new AttackMove(MoveId.FISSURE, PokemonType.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) .attr(OneHitKOAttr) .attr(OneHitKOAccuracyAttr) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND) .makesContact(false), - new ChargingAttackMove(Moves.DIG, PokemonType.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) + new ChargingAttackMove(MoveId.DIG, PokemonType.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:dugAHole", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.UNDERGROUND), - new StatusMove(Moves.TOXIC, PokemonType.POISON, 90, 10, -1, 0, 1) + new StatusMove(MoveId.TOXIC, PokemonType.POISON, 90, 10, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.TOXIC) .attr(ToxicAccuracyAttr) .reflectable(), - new AttackMove(Moves.CONFUSION, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 50, 100, 25, 10, 0, 1) + new AttackMove(MoveId.CONFUSION, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 50, 100, 25, 10, 0, 1) .attr(ConfuseAttr), - new AttackMove(Moves.PSYCHIC, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) + new AttackMove(MoveId.PSYCHIC, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), - new StatusMove(Moves.HYPNOSIS, PokemonType.PSYCHIC, 60, 20, -1, 0, 1) + new StatusMove(MoveId.HYPNOSIS, PokemonType.PSYCHIC, 60, 20, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .reflectable(), - new SelfStatusMove(Moves.MEDITATE, PokemonType.PSYCHIC, -1, 40, -1, 0, 1) + new SelfStatusMove(MoveId.MEDITATE, PokemonType.PSYCHIC, -1, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true), - new SelfStatusMove(Moves.AGILITY, PokemonType.PSYCHIC, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.AGILITY, PokemonType.PSYCHIC, -1, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true), - new AttackMove(Moves.QUICK_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 1), - new AttackMove(Moves.RAGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 100, 20, -1, 0, 1) + new AttackMove(MoveId.QUICK_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 1), + new AttackMove(MoveId.RAGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 100, 20, -1, 0, 1) .partial(), // No effect implemented - new SelfStatusMove(Moves.TELEPORT, PokemonType.PSYCHIC, -1, 20, -1, -6, 1) + new SelfStatusMove(MoveId.TELEPORT, PokemonType.PSYCHIC, -1, 20, -1, -6, 1) .attr(ForceSwitchOutAttr, true) .hidesUser(), - new AttackMove(Moves.NIGHT_SHADE, PokemonType.GHOST, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) + new AttackMove(MoveId.NIGHT_SHADE, PokemonType.GHOST, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) .attr(LevelDamageAttr), - new StatusMove(Moves.MIMIC, PokemonType.NORMAL, -1, 10, -1, 0, 1) + new StatusMove(MoveId.MIMIC, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(MovesetCopyMoveAttr) .ignoresSubstitute(), - new StatusMove(Moves.SCREECH, PokemonType.NORMAL, 85, 40, -1, 0, 1) + new StatusMove(MoveId.SCREECH, PokemonType.NORMAL, 85, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -2) .soundBased() .reflectable(), - new SelfStatusMove(Moves.DOUBLE_TEAM, PokemonType.NORMAL, -1, 15, -1, 0, 1) + new SelfStatusMove(MoveId.DOUBLE_TEAM, PokemonType.NORMAL, -1, 15, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.EVA ], 1, true), - new SelfStatusMove(Moves.RECOVER, PokemonType.NORMAL, -1, 5, -1, 0, 1) + new SelfStatusMove(MoveId.RECOVER, PokemonType.NORMAL, -1, 5, -1, 0, 1) .attr(HealAttr, 0.5) .triageMove(), - new SelfStatusMove(Moves.HARDEN, PokemonType.NORMAL, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.HARDEN, PokemonType.NORMAL, -1, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new SelfStatusMove(Moves.MINIMIZE, PokemonType.NORMAL, -1, 10, -1, 0, 1) + new SelfStatusMove(MoveId.MINIMIZE, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(AddBattlerTagAttr, BattlerTagType.MINIMIZED, true, false) .attr(StatStageChangeAttr, [ Stat.EVA ], 2, true), - new StatusMove(Moves.SMOKESCREEN, PokemonType.NORMAL, 100, 20, -1, 0, 1) + new StatusMove(MoveId.SMOKESCREEN, PokemonType.NORMAL, 100, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .reflectable(), - new StatusMove(Moves.CONFUSE_RAY, PokemonType.GHOST, 100, 10, -1, 0, 1) + new StatusMove(MoveId.CONFUSE_RAY, PokemonType.GHOST, 100, 10, -1, 0, 1) .attr(ConfuseAttr) .reflectable(), - new SelfStatusMove(Moves.WITHDRAW, PokemonType.WATER, -1, 40, -1, 0, 1) + new SelfStatusMove(MoveId.WITHDRAW, PokemonType.WATER, -1, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new SelfStatusMove(Moves.DEFENSE_CURL, PokemonType.NORMAL, -1, 40, -1, 0, 1) + new SelfStatusMove(MoveId.DEFENSE_CURL, PokemonType.NORMAL, -1, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new SelfStatusMove(Moves.BARRIER, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) + new SelfStatusMove(MoveId.BARRIER, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), - new StatusMove(Moves.LIGHT_SCREEN, PokemonType.PSYCHIC, -1, 30, -1, 0, 1) + new StatusMove(MoveId.LIGHT_SCREEN, PokemonType.PSYCHIC, -1, 30, -1, 0, 1) .attr(AddArenaTagAttr, ArenaTagType.LIGHT_SCREEN, 5, true) .target(MoveTarget.USER_SIDE), - new SelfStatusMove(Moves.HAZE, PokemonType.ICE, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.HAZE, PokemonType.ICE, -1, 30, -1, 0, 1) .ignoresSubstitute() .attr(ResetStatsAttr, true), - new StatusMove(Moves.REFLECT, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) + new StatusMove(MoveId.REFLECT, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) .attr(AddArenaTagAttr, ArenaTagType.REFLECT, 5, true) .target(MoveTarget.USER_SIDE), - new SelfStatusMove(Moves.FOCUS_ENERGY, PokemonType.NORMAL, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.FOCUS_ENERGY, PokemonType.NORMAL, -1, 30, -1, 0, 1) .attr(AddBattlerTagAttr, BattlerTagType.CRIT_BOOST, true, true), - new AttackMove(Moves.BIDE, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 10, -1, 1, 1) + new AttackMove(MoveId.BIDE, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 10, -1, 1, 1) .target(MoveTarget.USER) .unimplemented(), - new SelfStatusMove(Moves.METRONOME, PokemonType.NORMAL, -1, 10, -1, 0, 1) + new SelfStatusMove(MoveId.METRONOME, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(RandomMoveAttr, invalidMetronomeMoves), - new StatusMove(Moves.MIRROR_MOVE, PokemonType.FLYING, -1, 20, -1, 0, 1) + new StatusMove(MoveId.MIRROR_MOVE, PokemonType.FLYING, -1, 20, -1, 0, 1) .attr(CopyMoveAttr, true, invalidMirrorMoveMoves), - new AttackMove(Moves.SELF_DESTRUCT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 100, 5, -1, 0, 1) + new AttackMove(MoveId.SELF_DESTRUCT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 100, 5, -1, 0, 1) .attr(SacrificialAttr) .makesContact(false) .condition(failIfDampCondition) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.EGG_BOMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 100, 75, 10, -1, 0, 1) + new AttackMove(MoveId.EGG_BOMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 100, 75, 10, -1, 0, 1) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.LICK, PokemonType.GHOST, MoveCategory.PHYSICAL, 30, 100, 30, 30, 0, 1) + new AttackMove(MoveId.LICK, PokemonType.GHOST, MoveCategory.PHYSICAL, 30, 100, 30, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.SMOG, PokemonType.POISON, MoveCategory.SPECIAL, 30, 70, 20, 40, 0, 1) + new AttackMove(MoveId.SMOG, PokemonType.POISON, MoveCategory.SPECIAL, 30, 70, 20, 40, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON), - new AttackMove(Moves.SLUDGE, PokemonType.POISON, MoveCategory.SPECIAL, 65, 100, 20, 30, 0, 1) + new AttackMove(MoveId.SLUDGE, PokemonType.POISON, MoveCategory.SPECIAL, 65, 100, 20, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON), - new AttackMove(Moves.BONE_CLUB, PokemonType.GROUND, MoveCategory.PHYSICAL, 65, 85, 20, 10, 0, 1) + new AttackMove(MoveId.BONE_CLUB, PokemonType.GROUND, MoveCategory.PHYSICAL, 65, 85, 20, 10, 0, 1) .attr(FlinchAttr) .makesContact(false), - new AttackMove(Moves.FIRE_BLAST, PokemonType.FIRE, MoveCategory.SPECIAL, 110, 85, 5, 10, 0, 1) + new AttackMove(MoveId.FIRE_BLAST, PokemonType.FIRE, MoveCategory.SPECIAL, 110, 85, 5, 10, 0, 1) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.WATERFALL, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 15, 20, 0, 1) + new AttackMove(MoveId.WATERFALL, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 15, 20, 0, 1) .attr(FlinchAttr), - new AttackMove(Moves.CLAMP, PokemonType.WATER, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 1) + new AttackMove(MoveId.CLAMP, PokemonType.WATER, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 1) .attr(TrapAttr, BattlerTagType.CLAMP), - new AttackMove(Moves.SWIFT, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 1) + new AttackMove(MoveId.SWIFT, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new ChargingAttackMove(Moves.SKULL_BASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 130, 100, 10, -1, 0, 1) + new ChargingAttackMove(MoveId.SKULL_BASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 130, 100, 10, -1, 0, 1) .chargeText(i18next.t("moveTriggers:loweredItsHead", { pokemonName: "{USER}" })) .chargeAttr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new AttackMove(Moves.SPIKE_CANNON, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 100, 15, -1, 0, 1) + new AttackMove(MoveId.SPIKE_CANNON, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 100, 15, -1, 0, 1) .attr(MultiHitAttr) .makesContact(false), - new AttackMove(Moves.CONSTRICT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 10, 100, 35, 10, 0, 1) + new AttackMove(MoveId.CONSTRICT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 10, 100, 35, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), - new SelfStatusMove(Moves.AMNESIA, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) + new SelfStatusMove(MoveId.AMNESIA, PokemonType.PSYCHIC, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 2, true), - new StatusMove(Moves.KINESIS, PokemonType.PSYCHIC, 80, 15, -1, 0, 1) + new StatusMove(MoveId.KINESIS, PokemonType.PSYCHIC, 80, 15, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .reflectable(), - new SelfStatusMove(Moves.SOFT_BOILED, PokemonType.NORMAL, -1, 5, -1, 0, 1) + new SelfStatusMove(MoveId.SOFT_BOILED, PokemonType.NORMAL, -1, 5, -1, 0, 1) .attr(HealAttr, 0.5) .triageMove(), - new AttackMove(Moves.HIGH_JUMP_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 130, 90, 10, -1, 0, 1) + new AttackMove(MoveId.HIGH_JUMP_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 130, 90, 10, -1, 0, 1) .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) .condition(failOnGravityCondition) .recklessMove(), - new StatusMove(Moves.GLARE, PokemonType.NORMAL, 100, 30, -1, 0, 1) + new StatusMove(MoveId.GLARE, PokemonType.NORMAL, 100, 30, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .reflectable(), - new AttackMove(Moves.DREAM_EATER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 15, -1, 0, 1) + new AttackMove(MoveId.DREAM_EATER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 15, -1, 0, 1) .attr(HitHealAttr) .condition(targetSleptOrComatoseCondition) .triageMove(), - new StatusMove(Moves.POISON_GAS, PokemonType.POISON, 90, 40, -1, 0, 1) + new StatusMove(MoveId.POISON_GAS, PokemonType.POISON, 90, 40, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.BARRAGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) + new AttackMove(MoveId.BARRAGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) .attr(MultiHitAttr) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.LEECH_LIFE, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) + new AttackMove(MoveId.LEECH_LIFE, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) .attr(HitHealAttr) .triageMove(), - new StatusMove(Moves.LOVELY_KISS, PokemonType.NORMAL, 75, 10, -1, 0, 1) + new StatusMove(MoveId.LOVELY_KISS, PokemonType.NORMAL, 75, 10, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .reflectable(), - new ChargingAttackMove(Moves.SKY_ATTACK, PokemonType.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1) + new ChargingAttackMove(MoveId.SKY_ATTACK, PokemonType.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1) .chargeText(i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .attr(HighCritAttr) .attr(FlinchAttr) .makesContact(false), - new StatusMove(Moves.TRANSFORM, PokemonType.NORMAL, -1, 10, -1, 0, 1) + new StatusMove(MoveId.TRANSFORM, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(TransformAttr) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) .condition((user, target, move) => !target.summonData.illusion && !user.summonData.illusion) @@ -8683,160 +8683,160 @@ export function initMoves() { .ignoresProtect() // Transforming should copy the target's rage fist hit count .edgeCase(), - new AttackMove(Moves.BUBBLE, PokemonType.WATER, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) + new AttackMove(MoveId.BUBBLE, PokemonType.WATER, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.DIZZY_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, 20, 0, 1) + new AttackMove(MoveId.DIZZY_PUNCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, 20, 0, 1) .attr(ConfuseAttr) .punchingMove(), - new StatusMove(Moves.SPORE, PokemonType.GRASS, 100, 15, -1, 0, 1) + new StatusMove(MoveId.SPORE, PokemonType.GRASS, 100, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .powderMove() .reflectable(), - new StatusMove(Moves.FLASH, PokemonType.NORMAL, 100, 20, -1, 0, 1) + new StatusMove(MoveId.FLASH, PokemonType.NORMAL, 100, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .reflectable(), - new AttackMove(Moves.PSYWAVE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) + new AttackMove(MoveId.PSYWAVE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) .attr(RandomLevelDamageAttr), - new SelfStatusMove(Moves.SPLASH, PokemonType.NORMAL, -1, 40, -1, 0, 1) + new SelfStatusMove(MoveId.SPLASH, PokemonType.NORMAL, -1, 40, -1, 0, 1) .attr(SplashAttr) .condition(failOnGravityCondition), - new SelfStatusMove(Moves.ACID_ARMOR, PokemonType.POISON, -1, 20, -1, 0, 1) + new SelfStatusMove(MoveId.ACID_ARMOR, PokemonType.POISON, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), - new AttackMove(Moves.CRABHAMMER, PokemonType.WATER, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 1) + new AttackMove(MoveId.CRABHAMMER, PokemonType.WATER, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 1) .attr(HighCritAttr), - new AttackMove(Moves.EXPLOSION, PokemonType.NORMAL, MoveCategory.PHYSICAL, 250, 100, 5, -1, 0, 1) + new AttackMove(MoveId.EXPLOSION, PokemonType.NORMAL, MoveCategory.PHYSICAL, 250, 100, 5, -1, 0, 1) .condition(failIfDampCondition) .attr(SacrificialAttr) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.FURY_SWIPES, PokemonType.NORMAL, MoveCategory.PHYSICAL, 18, 80, 15, -1, 0, 1) + new AttackMove(MoveId.FURY_SWIPES, PokemonType.NORMAL, MoveCategory.PHYSICAL, 18, 80, 15, -1, 0, 1) .attr(MultiHitAttr), - new AttackMove(Moves.BONEMERANG, PokemonType.GROUND, MoveCategory.PHYSICAL, 50, 90, 10, -1, 0, 1) + new AttackMove(MoveId.BONEMERANG, PokemonType.GROUND, MoveCategory.PHYSICAL, 50, 90, 10, -1, 0, 1) .attr(MultiHitAttr, MultiHitType._2) .makesContact(false), - new SelfStatusMove(Moves.REST, PokemonType.PSYCHIC, -1, 5, -1, 0, 1) + new SelfStatusMove(MoveId.REST, PokemonType.PSYCHIC, -1, 5, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP, true, 3, true) .attr(HealAttr, 1, true) .condition((user, target, move) => !user.isFullHp() && user.canSetStatus(StatusEffect.SLEEP, true, true, user)) .triageMove(), - new AttackMove(Moves.ROCK_SLIDE, PokemonType.ROCK, MoveCategory.PHYSICAL, 75, 90, 10, 30, 0, 1) + new AttackMove(MoveId.ROCK_SLIDE, PokemonType.ROCK, MoveCategory.PHYSICAL, 75, 90, 10, 30, 0, 1) .attr(FlinchAttr) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.HYPER_FANG, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 90, 15, 10, 0, 1) + new AttackMove(MoveId.HYPER_FANG, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 90, 15, 10, 0, 1) .attr(FlinchAttr) .bitingMove(), - new SelfStatusMove(Moves.SHARPEN, PokemonType.NORMAL, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.SHARPEN, PokemonType.NORMAL, -1, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true), - new SelfStatusMove(Moves.CONVERSION, PokemonType.NORMAL, -1, 30, -1, 0, 1) + new SelfStatusMove(MoveId.CONVERSION, PokemonType.NORMAL, -1, 30, -1, 0, 1) .attr(FirstMoveTypeAttr), - new AttackMove(Moves.TRI_ATTACK, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, 20, 0, 1) + new AttackMove(MoveId.TRI_ATTACK, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, 20, 0, 1) .attr(MultiStatusEffectAttr, [ StatusEffect.BURN, StatusEffect.FREEZE, StatusEffect.PARALYSIS ]), - new AttackMove(Moves.SUPER_FANG, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 90, 10, -1, 0, 1) + new AttackMove(MoveId.SUPER_FANG, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 90, 10, -1, 0, 1) .attr(TargetHalfHpDamageAttr), - new AttackMove(Moves.SLASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 1) + new AttackMove(MoveId.SLASH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 1) .attr(HighCritAttr) .slicingMove(), - new SelfStatusMove(Moves.SUBSTITUTE, PokemonType.NORMAL, -1, 10, -1, 0, 1) + new SelfStatusMove(MoveId.SUBSTITUTE, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(AddSubstituteAttr, 0.25, false), - new AttackMove(Moves.STRUGGLE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, -1, 1, -1, 0, 1) + new AttackMove(MoveId.STRUGGLE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, -1, 1, -1, 0, 1) .attr(RecoilAttr, true, 0.25, true) .attr(TypelessAttr) .target(MoveTarget.RANDOM_NEAR_ENEMY), - new StatusMove(Moves.SKETCH, PokemonType.NORMAL, -1, 1, -1, 0, 2) + new StatusMove(MoveId.SKETCH, PokemonType.NORMAL, -1, 1, -1, 0, 2) .ignoresSubstitute() .attr(SketchAttr), - new AttackMove(Moves.TRIPLE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 10, 90, 10, -1, 0, 2) + new AttackMove(MoveId.TRIPLE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 10, 90, 10, -1, 0, 2) .attr(MultiHitAttr, MultiHitType._3) .attr(MultiHitPowerIncrementAttr, 3) .checkAllHits(), - new AttackMove(Moves.THIEF, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 25, -1, 0, 2) + new AttackMove(MoveId.THIEF, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 25, -1, 0, 2) .attr(StealHeldItemChanceAttr, 0.3) .edgeCase(), // Should not be able to steal held item if user faints due to Rough Skin, Iron Barbs, etc. // Should be able to steal items from pokemon with Sticky Hold if the damage causes them to faint - new StatusMove(Moves.SPIDER_WEB, PokemonType.BUG, -1, 10, -1, 0, 2) + new StatusMove(MoveId.SPIDER_WEB, PokemonType.BUG, -1, 10, -1, 0, 2) .condition(failIfGhostTypeCondition) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) .reflectable(), - new StatusMove(Moves.MIND_READER, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new StatusMove(MoveId.MIND_READER, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(IgnoreAccuracyAttr), - new StatusMove(Moves.NIGHTMARE, PokemonType.GHOST, 100, 15, -1, 0, 2) + new StatusMove(MoveId.NIGHTMARE, PokemonType.GHOST, 100, 15, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.NIGHTMARE) .condition(targetSleptOrComatoseCondition), - new AttackMove(Moves.FLAME_WHEEL, PokemonType.FIRE, MoveCategory.PHYSICAL, 60, 100, 25, 10, 0, 2) + new AttackMove(MoveId.FLAME_WHEEL, PokemonType.FIRE, MoveCategory.PHYSICAL, 60, 100, 25, 10, 0, 2) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.SNORE, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 15, 30, 0, 2) + new AttackMove(MoveId.SNORE, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 15, 30, 0, 2) .attr(BypassSleepAttr) .attr(FlinchAttr) .condition(userSleptOrComatoseCondition) .soundBased(), - new StatusMove(Moves.CURSE, PokemonType.GHOST, -1, 10, -1, 0, 2) + new StatusMove(MoveId.CURSE, PokemonType.GHOST, -1, 10, -1, 0, 2) .attr(CurseAttr) .ignoresSubstitute() .ignoresProtect() .target(MoveTarget.CURSE), - new AttackMove(Moves.FLAIL, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) + new AttackMove(MoveId.FLAIL, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) .attr(LowHpPowerAttr), - new StatusMove(Moves.CONVERSION_2, PokemonType.NORMAL, -1, 30, -1, 0, 2) + new StatusMove(MoveId.CONVERSION_2, PokemonType.NORMAL, -1, 30, -1, 0, 2) .attr(ResistLastMoveTypeAttr) .ignoresSubstitute() .partial(), // Checks the move's original typing and not if its type is changed through some other means - new AttackMove(Moves.AEROBLAST, PokemonType.FLYING, MoveCategory.SPECIAL, 100, 95, 5, -1, 0, 2) + new AttackMove(MoveId.AEROBLAST, PokemonType.FLYING, MoveCategory.SPECIAL, 100, 95, 5, -1, 0, 2) .windMove() .attr(HighCritAttr), - new StatusMove(Moves.COTTON_SPORE, PokemonType.GRASS, 100, 40, -1, 0, 2) + new StatusMove(MoveId.COTTON_SPORE, PokemonType.GRASS, 100, 40, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], -2) .powderMove() .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.REVERSAL, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) + new AttackMove(MoveId.REVERSAL, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) .attr(LowHpPowerAttr), - new StatusMove(Moves.SPITE, PokemonType.GHOST, 100, 10, -1, 0, 2) + new StatusMove(MoveId.SPITE, PokemonType.GHOST, 100, 10, -1, 0, 2) .ignoresSubstitute() .attr(ReducePpMoveAttr, 4) .reflectable(), - new AttackMove(Moves.POWDER_SNOW, PokemonType.ICE, MoveCategory.SPECIAL, 40, 100, 25, 10, 0, 2) + new AttackMove(MoveId.POWDER_SNOW, PokemonType.ICE, MoveCategory.SPECIAL, 40, 100, 25, 10, 0, 2) .attr(StatusEffectAttr, StatusEffect.FREEZE) .target(MoveTarget.ALL_NEAR_ENEMIES), - new SelfStatusMove(Moves.PROTECT, PokemonType.NORMAL, -1, 10, -1, 4, 2) + new SelfStatusMove(MoveId.PROTECT, PokemonType.NORMAL, -1, 10, -1, 4, 2) .attr(ProtectAttr) .condition(failIfLastCondition), - new AttackMove(Moves.MACH_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 2) + new AttackMove(MoveId.MACH_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 2) .punchingMove(), - new StatusMove(Moves.SCARY_FACE, PokemonType.NORMAL, 100, 10, -1, 0, 2) + new StatusMove(MoveId.SCARY_FACE, PokemonType.NORMAL, 100, 10, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], -2) .reflectable(), - new AttackMove(Moves.FEINT_ATTACK, PokemonType.DARK, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 2), - new StatusMove(Moves.SWEET_KISS, PokemonType.FAIRY, 75, 10, -1, 0, 2) + new AttackMove(MoveId.FEINT_ATTACK, PokemonType.DARK, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 2), + new StatusMove(MoveId.SWEET_KISS, PokemonType.FAIRY, 75, 10, -1, 0, 2) .attr(ConfuseAttr) .reflectable(), - new SelfStatusMove(Moves.BELLY_DRUM, PokemonType.NORMAL, -1, 10, -1, 0, 2) + new SelfStatusMove(MoveId.BELLY_DRUM, PokemonType.NORMAL, -1, 10, -1, 0, 2) .attr(CutHpStatStageBoostAttr, [ Stat.ATK ], 12, 2, (user) => { globalScene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", { pokemonName: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.ATK)) })); }), - new AttackMove(Moves.SLUDGE_BOMB, PokemonType.POISON, MoveCategory.SPECIAL, 90, 100, 10, 30, 0, 2) + new AttackMove(MoveId.SLUDGE_BOMB, PokemonType.POISON, MoveCategory.SPECIAL, 90, 100, 10, 30, 0, 2) .attr(StatusEffectAttr, StatusEffect.POISON) .ballBombMove(), - new AttackMove(Moves.MUD_SLAP, PokemonType.GROUND, MoveCategory.SPECIAL, 20, 100, 10, 100, 0, 2) + new AttackMove(MoveId.MUD_SLAP, PokemonType.GROUND, MoveCategory.SPECIAL, 20, 100, 10, 100, 0, 2) .attr(StatStageChangeAttr, [ Stat.ACC ], -1), - new AttackMove(Moves.OCTAZOOKA, PokemonType.WATER, MoveCategory.SPECIAL, 65, 85, 10, 50, 0, 2) + new AttackMove(MoveId.OCTAZOOKA, PokemonType.WATER, MoveCategory.SPECIAL, 65, 85, 10, 50, 0, 2) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .ballBombMove(), - new StatusMove(Moves.SPIKES, PokemonType.GROUND, -1, 20, -1, 0, 2) + new StatusMove(MoveId.SPIKES, PokemonType.GROUND, -1, 20, -1, 0, 2) .attr(AddArenaTrapTagAttr, ArenaTagType.SPIKES) .target(MoveTarget.ENEMY_SIDE) .reflectable(), - new AttackMove(Moves.ZAP_CANNON, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 120, 50, 5, 100, 0, 2) + new AttackMove(MoveId.ZAP_CANNON, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 120, 50, 5, 100, 0, 2) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .ballBombMove(), - new StatusMove(Moves.FORESIGHT, PokemonType.NORMAL, -1, 40, -1, 0, 2) + new StatusMove(MoveId.FORESIGHT, PokemonType.NORMAL, -1, 40, -1, 0, 2) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_GHOST) .ignoresSubstitute() .reflectable(), - new SelfStatusMove(Moves.DESTINY_BOND, PokemonType.GHOST, -1, 5, -1, 0, 2) + new SelfStatusMove(MoveId.DESTINY_BOND, PokemonType.GHOST, -1, 5, -1, 0, 2) .ignoresProtect() .attr(DestinyBondAttr) .condition((user, target, move) => { @@ -8848,120 +8848,120 @@ export function initMoves() { // - the previous move was unsuccessful return lastTurnMove.length === 0 || lastTurnMove[0].move !== move.id || lastTurnMove[0].result !== MoveResult.SUCCESS; }), - new StatusMove(Moves.PERISH_SONG, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new StatusMove(MoveId.PERISH_SONG, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(FaintCountdownAttr) .ignoresProtect() .soundBased() .condition(failOnBossCondition) .target(MoveTarget.ALL), - new AttackMove(Moves.ICY_WIND, PokemonType.ICE, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 2) + new AttackMove(MoveId.ICY_WIND, PokemonType.ICE, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new SelfStatusMove(Moves.DETECT, PokemonType.FIGHTING, -1, 5, -1, 4, 2) + new SelfStatusMove(MoveId.DETECT, PokemonType.FIGHTING, -1, 5, -1, 4, 2) .attr(ProtectAttr) .condition(failIfLastCondition), - new AttackMove(Moves.BONE_RUSH, PokemonType.GROUND, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 2) + new AttackMove(MoveId.BONE_RUSH, PokemonType.GROUND, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 2) .attr(MultiHitAttr) .makesContact(false), - new StatusMove(Moves.LOCK_ON, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new StatusMove(MoveId.LOCK_ON, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(IgnoreAccuracyAttr), - new AttackMove(Moves.OUTRAGE, PokemonType.DRAGON, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 2) + new AttackMove(MoveId.OUTRAGE, PokemonType.DRAGON, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 2) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) .attr(NoEffectAttr, frenzyMissFunc) .target(MoveTarget.RANDOM_NEAR_ENEMY), - new StatusMove(Moves.SANDSTORM, PokemonType.ROCK, -1, 10, -1, 0, 2) + new StatusMove(MoveId.SANDSTORM, PokemonType.ROCK, -1, 10, -1, 0, 2) .attr(WeatherChangeAttr, WeatherType.SANDSTORM) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.GIGA_DRAIN, PokemonType.GRASS, MoveCategory.SPECIAL, 75, 100, 10, -1, 0, 2) + new AttackMove(MoveId.GIGA_DRAIN, PokemonType.GRASS, MoveCategory.SPECIAL, 75, 100, 10, -1, 0, 2) .attr(HitHealAttr) .triageMove(), - new SelfStatusMove(Moves.ENDURE, PokemonType.NORMAL, -1, 10, -1, 4, 2) + new SelfStatusMove(MoveId.ENDURE, PokemonType.NORMAL, -1, 10, -1, 4, 2) .attr(ProtectAttr, BattlerTagType.ENDURING) .condition(failIfLastCondition), - new StatusMove(Moves.CHARM, PokemonType.FAIRY, 100, 20, -1, 0, 2) + new StatusMove(MoveId.CHARM, PokemonType.FAIRY, 100, 20, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], -2) .reflectable(), - new AttackMove(Moves.ROLLOUT, PokemonType.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2) + new AttackMove(MoveId.ROLLOUT, PokemonType.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2) .partial() // Does not lock the user, also does not increase damage properly - .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, Moves.DEFENSE_CURL), - new AttackMove(Moves.FALSE_SWIPE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 2) + .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, MoveId.DEFENSE_CURL), + new AttackMove(MoveId.FALSE_SWIPE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 2) .attr(SurviveDamageAttr), - new StatusMove(Moves.SWAGGER, PokemonType.NORMAL, 85, 15, -1, 0, 2) + new StatusMove(MoveId.SWAGGER, PokemonType.NORMAL, 85, 15, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], 2) .attr(ConfuseAttr) .reflectable(), - new SelfStatusMove(Moves.MILK_DRINK, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new SelfStatusMove(MoveId.MILK_DRINK, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(HealAttr, 0.5) .triageMove(), - new AttackMove(Moves.SPARK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 2) + new AttackMove(MoveId.SPARK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 2) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.FURY_CUTTER, PokemonType.BUG, MoveCategory.PHYSICAL, 40, 95, 20, -1, 0, 2) + new AttackMove(MoveId.FURY_CUTTER, PokemonType.BUG, MoveCategory.PHYSICAL, 40, 95, 20, -1, 0, 2) .attr(ConsecutiveUseDoublePowerAttr, 3, true) .slicingMove(), - new AttackMove(Moves.STEEL_WING, PokemonType.STEEL, MoveCategory.PHYSICAL, 70, 90, 25, 10, 0, 2) + new AttackMove(MoveId.STEEL_WING, PokemonType.STEEL, MoveCategory.PHYSICAL, 70, 90, 25, 10, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new StatusMove(Moves.MEAN_LOOK, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new StatusMove(MoveId.MEAN_LOOK, PokemonType.NORMAL, -1, 5, -1, 0, 2) .condition(failIfGhostTypeCondition) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) .reflectable(), - new StatusMove(Moves.ATTRACT, PokemonType.NORMAL, 100, 15, -1, 0, 2) + new StatusMove(MoveId.ATTRACT, PokemonType.NORMAL, 100, 15, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.INFATUATED) .ignoresSubstitute() .condition((user, target, move) => user.isOppositeGender(target)) .reflectable(), - new SelfStatusMove(Moves.SLEEP_TALK, PokemonType.NORMAL, -1, 10, -1, 0, 2) + new SelfStatusMove(MoveId.SLEEP_TALK, PokemonType.NORMAL, -1, 10, -1, 0, 2) .attr(BypassSleepAttr) .attr(RandomMovesetMoveAttr, invalidSleepTalkMoves, false) .condition(userSleptOrComatoseCondition) .target(MoveTarget.NEAR_ENEMY), - new StatusMove(Moves.HEAL_BELL, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new StatusMove(MoveId.HEAL_BELL, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(PartyStatusCureAttr, i18next.t("moveTriggers:bellChimed"), AbilityId.SOUNDPROOF) .soundBased() .target(MoveTarget.PARTY), - new AttackMove(Moves.RETURN, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2) + new AttackMove(MoveId.RETURN, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2) .attr(FriendshipPowerAttr), - new AttackMove(Moves.PRESENT, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 90, 15, -1, 0, 2) + new AttackMove(MoveId.PRESENT, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 90, 15, -1, 0, 2) .attr(PresentPowerAttr) .makesContact(false), - new AttackMove(Moves.FRUSTRATION, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2) + new AttackMove(MoveId.FRUSTRATION, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2) .attr(FriendshipPowerAttr, true), - new StatusMove(Moves.SAFEGUARD, PokemonType.NORMAL, -1, 25, -1, 0, 2) + new StatusMove(MoveId.SAFEGUARD, PokemonType.NORMAL, -1, 25, -1, 0, 2) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.SAFEGUARD, 5, true, true), - new StatusMove(Moves.PAIN_SPLIT, PokemonType.NORMAL, -1, 20, -1, 0, 2) + new StatusMove(MoveId.PAIN_SPLIT, PokemonType.NORMAL, -1, 20, -1, 0, 2) .attr(HpSplitAttr) .condition(failOnBossCondition), - new AttackMove(Moves.SACRED_FIRE, PokemonType.FIRE, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 2) + new AttackMove(MoveId.SACRED_FIRE, PokemonType.FIRE, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 2) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .makesContact(false), - new AttackMove(Moves.MAGNITUDE, PokemonType.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2) + new AttackMove(MoveId.MAGNITUDE, PokemonType.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2) .attr(PreMoveMessageAttr, magnitudeMessageFunc) .attr(MagnitudePowerAttr) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERGROUND) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.DYNAMIC_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 50, 5, 100, 0, 2) + new AttackMove(MoveId.DYNAMIC_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 50, 5, 100, 0, 2) .attr(ConfuseAttr) .punchingMove(), - new AttackMove(Moves.MEGAHORN, PokemonType.BUG, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 2), - new AttackMove(Moves.DRAGON_BREATH, PokemonType.DRAGON, MoveCategory.SPECIAL, 60, 100, 20, 30, 0, 2) + new AttackMove(MoveId.MEGAHORN, PokemonType.BUG, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 2), + new AttackMove(MoveId.DRAGON_BREATH, PokemonType.DRAGON, MoveCategory.SPECIAL, 60, 100, 20, 30, 0, 2) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new SelfStatusMove(Moves.BATON_PASS, PokemonType.NORMAL, -1, 40, -1, 0, 2) + new SelfStatusMove(MoveId.BATON_PASS, PokemonType.NORMAL, -1, 40, -1, 0, 2) .attr(ForceSwitchOutAttr, true, SwitchType.BATON_PASS) .condition(failIfLastInPartyCondition) .hidesUser(), - new StatusMove(Moves.ENCORE, PokemonType.NORMAL, 100, 5, -1, 0, 2) + new StatusMove(MoveId.ENCORE, PokemonType.NORMAL, 100, 5, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.ENCORE, false, true) .ignoresSubstitute() .condition((user, target, move) => new EncoreTag(user.id).canAdd(target)) .reflectable(), - new AttackMove(Moves.PURSUIT, PokemonType.DARK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 2) + new AttackMove(MoveId.PURSUIT, PokemonType.DARK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 2) .partial(), // No effect implemented - new AttackMove(Moves.RAPID_SPIN, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, 100, 40, 100, 0, 2) + new AttackMove(MoveId.RAPID_SPIN, PokemonType.NORMAL, MoveCategory.PHYSICAL, 50, 100, 40, 100, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true) .attr(RemoveBattlerTagAttr, [ BattlerTagType.BIND, @@ -8977,256 +8977,256 @@ export function initMoves() { BattlerTagType.INFESTATION ], true) .attr(RemoveArenaTrapAttr), - new StatusMove(Moves.SWEET_SCENT, PokemonType.NORMAL, 100, 20, -1, 0, 2) + new StatusMove(MoveId.SWEET_SCENT, PokemonType.NORMAL, 100, 20, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.EVA ], -2) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.IRON_TAIL, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 75, 15, 30, 0, 2) + new AttackMove(MoveId.IRON_TAIL, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 75, 15, 30, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.METAL_CLAW, PokemonType.STEEL, MoveCategory.PHYSICAL, 50, 95, 35, 10, 0, 2) + new AttackMove(MoveId.METAL_CLAW, PokemonType.STEEL, MoveCategory.PHYSICAL, 50, 95, 35, 10, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true), - new AttackMove(Moves.VITAL_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 70, -1, 10, -1, -1, 2), - new SelfStatusMove(Moves.MORNING_SUN, PokemonType.NORMAL, -1, 5, -1, 0, 2) + new AttackMove(MoveId.VITAL_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 70, -1, 10, -1, -1, 2), + new SelfStatusMove(MoveId.MORNING_SUN, PokemonType.NORMAL, -1, 5, -1, 0, 2) .attr(PlantHealAttr) .triageMove(), - new SelfStatusMove(Moves.SYNTHESIS, PokemonType.GRASS, -1, 5, -1, 0, 2) + new SelfStatusMove(MoveId.SYNTHESIS, PokemonType.GRASS, -1, 5, -1, 0, 2) .attr(PlantHealAttr) .triageMove(), - new SelfStatusMove(Moves.MOONLIGHT, PokemonType.FAIRY, -1, 5, -1, 0, 2) + new SelfStatusMove(MoveId.MOONLIGHT, PokemonType.FAIRY, -1, 5, -1, 0, 2) .attr(PlantHealAttr) .triageMove(), - new AttackMove(Moves.HIDDEN_POWER, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 2) + new AttackMove(MoveId.HIDDEN_POWER, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 2) .attr(HiddenPowerTypeAttr), - new AttackMove(Moves.CROSS_CHOP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 2) + new AttackMove(MoveId.CROSS_CHOP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 2) .attr(HighCritAttr), - new AttackMove(Moves.TWISTER, PokemonType.DRAGON, MoveCategory.SPECIAL, 40, 100, 20, 20, 0, 2) + new AttackMove(MoveId.TWISTER, PokemonType.DRAGON, MoveCategory.SPECIAL, 40, 100, 20, 20, 0, 2) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.FLYING) .attr(FlinchAttr) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.RAIN_DANCE, PokemonType.WATER, -1, 5, -1, 0, 2) + new StatusMove(MoveId.RAIN_DANCE, PokemonType.WATER, -1, 5, -1, 0, 2) .attr(WeatherChangeAttr, WeatherType.RAIN) .target(MoveTarget.BOTH_SIDES), - new StatusMove(Moves.SUNNY_DAY, PokemonType.FIRE, -1, 5, -1, 0, 2) + new StatusMove(MoveId.SUNNY_DAY, PokemonType.FIRE, -1, 5, -1, 0, 2) .attr(WeatherChangeAttr, WeatherType.SUNNY) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.CRUNCH, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 20, 0, 2) + new AttackMove(MoveId.CRUNCH, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 20, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .bitingMove(), - new AttackMove(Moves.MIRROR_COAT, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 20, -1, -5, 2) + new AttackMove(MoveId.MIRROR_COAT, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 20, -1, -5, 2) .attr(CounterDamageAttr, (move: Move) => move.category === MoveCategory.SPECIAL, 2) .target(MoveTarget.ATTACKER), - new StatusMove(Moves.PSYCH_UP, PokemonType.NORMAL, -1, 10, -1, 0, 2) + new StatusMove(MoveId.PSYCH_UP, PokemonType.NORMAL, -1, 10, -1, 0, 2) .ignoresSubstitute() .attr(CopyStatsAttr), - new AttackMove(Moves.EXTREME_SPEED, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 100, 5, -1, 2, 2), - new AttackMove(Moves.ANCIENT_POWER, PokemonType.ROCK, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 2) + new AttackMove(MoveId.EXTREME_SPEED, PokemonType.NORMAL, MoveCategory.PHYSICAL, 80, 100, 5, -1, 2, 2), + new AttackMove(MoveId.ANCIENT_POWER, PokemonType.ROCK, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true), - new AttackMove(Moves.SHADOW_BALL, PokemonType.GHOST, MoveCategory.SPECIAL, 80, 100, 15, 20, 0, 2) + new AttackMove(MoveId.SHADOW_BALL, PokemonType.GHOST, MoveCategory.SPECIAL, 80, 100, 15, 20, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .ballBombMove(), - new AttackMove(Moves.FUTURE_SIGHT, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 2) + new AttackMove(MoveId.FUTURE_SIGHT, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 2) .partial() // cannot be used on multiple Pokemon on the same side in a double battle, hits immediately when called by Metronome/etc, should not apply abilities or held items if user is off the field .ignoresProtect() .attr(DelayedAttackAttr, ArenaTagType.FUTURE_SIGHT, ChargeAnim.FUTURE_SIGHT_CHARGING, i18next.t("moveTriggers:foresawAnAttack", { pokemonName: "{USER}" })), - new AttackMove(Moves.ROCK_SMASH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2) + new AttackMove(MoveId.ROCK_SMASH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.WHIRLPOOL, PokemonType.WATER, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 2) + new AttackMove(MoveId.WHIRLPOOL, PokemonType.WATER, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 2) .attr(TrapAttr, BattlerTagType.WHIRLPOOL) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.UNDERWATER), - new AttackMove(Moves.BEAT_UP, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 2) + new AttackMove(MoveId.BEAT_UP, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 2) .attr(MultiHitAttr, MultiHitType.BEAT_UP) .attr(BeatUpAttr) .makesContact(false), - new AttackMove(Moves.FAKE_OUT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 10, 100, 3, 3) + new AttackMove(MoveId.FAKE_OUT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 10, 100, 3, 3) .attr(FlinchAttr) .condition(new FirstMoveCondition()), - new AttackMove(Moves.UPROAR, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 10, -1, 0, 3) + new AttackMove(MoveId.UPROAR, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 10, -1, 0, 3) .soundBased() .target(MoveTarget.RANDOM_NEAR_ENEMY) .partial(), // Does not lock the user, does not stop Pokemon from sleeping // Likely can make use of FrenzyAttr and an ArenaTag (just without the FrenzyMissFunc) - new SelfStatusMove(Moves.STOCKPILE, PokemonType.NORMAL, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.STOCKPILE, PokemonType.NORMAL, -1, 20, -1, 0, 3) .condition(user => (user.getTag(StockpilingTag)?.stockpiledCount ?? 0) < 3) .attr(AddBattlerTagAttr, BattlerTagType.STOCKPILING, true), - new AttackMove(Moves.SPIT_UP, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 10, -1, 0, 3) + new AttackMove(MoveId.SPIT_UP, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 10, -1, 0, 3) .condition(hasStockpileStacksCondition) .attr(SpitUpPowerAttr, 100) .attr(RemoveBattlerTagAttr, [ BattlerTagType.STOCKPILING ], true), - new SelfStatusMove(Moves.SWALLOW, PokemonType.NORMAL, -1, 10, -1, 0, 3) + new SelfStatusMove(MoveId.SWALLOW, PokemonType.NORMAL, -1, 10, -1, 0, 3) .condition(hasStockpileStacksCondition) .attr(SwallowHealAttr) .attr(RemoveBattlerTagAttr, [ BattlerTagType.STOCKPILING ], true) .triageMove(), - new AttackMove(Moves.HEAT_WAVE, PokemonType.FIRE, MoveCategory.SPECIAL, 95, 90, 10, 10, 0, 3) + new AttackMove(MoveId.HEAT_WAVE, PokemonType.FIRE, MoveCategory.SPECIAL, 95, 90, 10, 10, 0, 3) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.HAIL, PokemonType.ICE, -1, 10, -1, 0, 3) + new StatusMove(MoveId.HAIL, PokemonType.ICE, -1, 10, -1, 0, 3) .attr(WeatherChangeAttr, WeatherType.HAIL) .target(MoveTarget.BOTH_SIDES), - new StatusMove(Moves.TORMENT, PokemonType.DARK, 100, 15, -1, 0, 3) + new StatusMove(MoveId.TORMENT, PokemonType.DARK, 100, 15, -1, 0, 3) .ignoresSubstitute() .edgeCase() // Incomplete implementation because of Uproar's partial implementation .attr(AddBattlerTagAttr, BattlerTagType.TORMENT, false, true, 1) .reflectable(), - new StatusMove(Moves.FLATTER, PokemonType.DARK, 100, 15, -1, 0, 3) + new StatusMove(MoveId.FLATTER, PokemonType.DARK, 100, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1) .attr(ConfuseAttr) .reflectable(), - new StatusMove(Moves.WILL_O_WISP, PokemonType.FIRE, 85, 15, -1, 0, 3) + new StatusMove(MoveId.WILL_O_WISP, PokemonType.FIRE, 85, 15, -1, 0, 3) .attr(StatusEffectAttr, StatusEffect.BURN) .reflectable(), - new StatusMove(Moves.MEMENTO, PokemonType.DARK, 100, 10, -1, 0, 3) + new StatusMove(MoveId.MEMENTO, PokemonType.DARK, 100, 10, -1, 0, 3) .attr(SacrificialAttrOnHit) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -2), - new AttackMove(Moves.FACADE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 3) + new AttackMove(MoveId.FACADE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => user.status && (user.status.effect === StatusEffect.BURN || user.status.effect === StatusEffect.POISON || user.status.effect === StatusEffect.TOXIC || user.status.effect === StatusEffect.PARALYSIS) ? 2 : 1) .attr(BypassBurnDamageReductionAttr), - new AttackMove(Moves.FOCUS_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 20, -1, -3, 3) + new AttackMove(MoveId.FOCUS_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 20, -1, -3, 3) .attr(MessageHeaderAttr, (user, move) => i18next.t("moveTriggers:isTighteningFocus", { pokemonName: getPokemonNameWithAffix(user) })) .attr(PreUseInterruptAttr, (user, target, move) => i18next.t("moveTriggers:lostFocus", { pokemonName: getPokemonNameWithAffix(user) }), user => !!user.turnData.attacksReceived.find(r => r.damage)) .punchingMove(), - new AttackMove(Moves.SMELLING_SALTS, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 3) + new AttackMove(MoveId.SMELLING_SALTS, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status?.effect === StatusEffect.PARALYSIS ? 2 : 1) .attr(HealStatusEffectAttr, true, StatusEffect.PARALYSIS), - new SelfStatusMove(Moves.FOLLOW_ME, PokemonType.NORMAL, -1, 20, -1, 2, 3) + new SelfStatusMove(MoveId.FOLLOW_ME, PokemonType.NORMAL, -1, 20, -1, 2, 3) .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, true), - new StatusMove(Moves.NATURE_POWER, PokemonType.NORMAL, -1, 20, -1, 0, 3) + new StatusMove(MoveId.NATURE_POWER, PokemonType.NORMAL, -1, 20, -1, 0, 3) .attr(NaturePowerAttr), - new SelfStatusMove(Moves.CHARGE, PokemonType.ELECTRIC, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.CHARGE, PokemonType.ELECTRIC, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 1, true) .attr(AddBattlerTagAttr, BattlerTagType.CHARGED, true, false), - new StatusMove(Moves.TAUNT, PokemonType.DARK, 100, 20, -1, 0, 3) + new StatusMove(MoveId.TAUNT, PokemonType.DARK, 100, 20, -1, 0, 3) .ignoresSubstitute() .attr(AddBattlerTagAttr, BattlerTagType.TAUNT, false, true, 4) .reflectable(), - new StatusMove(Moves.HELPING_HAND, PokemonType.NORMAL, -1, 20, -1, 5, 3) + new StatusMove(MoveId.HELPING_HAND, PokemonType.NORMAL, -1, 20, -1, 5, 3) .attr(AddBattlerTagAttr, BattlerTagType.HELPING_HAND) .ignoresSubstitute() .target(MoveTarget.NEAR_ALLY) .condition(failIfSingleBattle), - new StatusMove(Moves.TRICK, PokemonType.PSYCHIC, 100, 10, -1, 0, 3) + new StatusMove(MoveId.TRICK, PokemonType.PSYCHIC, 100, 10, -1, 0, 3) .unimplemented(), - new StatusMove(Moves.ROLE_PLAY, PokemonType.PSYCHIC, -1, 10, -1, 0, 3) + new StatusMove(MoveId.ROLE_PLAY, PokemonType.PSYCHIC, -1, 10, -1, 0, 3) .ignoresSubstitute() .attr(AbilityCopyAttr), - new SelfStatusMove(Moves.WISH, PokemonType.NORMAL, -1, 10, -1, 0, 3) + new SelfStatusMove(MoveId.WISH, PokemonType.NORMAL, -1, 10, -1, 0, 3) .triageMove() .attr(AddArenaTagAttr, ArenaTagType.WISH, 2, true), - new SelfStatusMove(Moves.ASSIST, PokemonType.NORMAL, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.ASSIST, PokemonType.NORMAL, -1, 20, -1, 0, 3) .attr(RandomMovesetMoveAttr, invalidAssistMoves, true), - new SelfStatusMove(Moves.INGRAIN, PokemonType.GRASS, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.INGRAIN, PokemonType.GRASS, -1, 20, -1, 0, 3) .attr(AddBattlerTagAttr, BattlerTagType.INGRAIN, true, true) .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, true, true) .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLOATING ], true), - new AttackMove(Moves.SUPERPOWER, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 3) + new AttackMove(MoveId.SUPERPOWER, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1, true), - new SelfStatusMove(Moves.MAGIC_COAT, PokemonType.PSYCHIC, -1, 15, -1, 4, 3) + new SelfStatusMove(MoveId.MAGIC_COAT, PokemonType.PSYCHIC, -1, 15, -1, 4, 3) .attr(AddBattlerTagAttr, BattlerTagType.MAGIC_COAT, true, true, 0) .condition(failIfLastCondition) // Interactions with stomping tantrum, instruct, and other moves that // rely on move history // Also will not reflect roar / whirlwind if the target has ForceSwitchOutImmunityAbAttr .edgeCase(), - new SelfStatusMove(Moves.RECYCLE, PokemonType.NORMAL, -1, 10, -1, 0, 3) + new SelfStatusMove(MoveId.RECYCLE, PokemonType.NORMAL, -1, 10, -1, 0, 3) .unimplemented(), - new AttackMove(Moves.REVENGE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, -4, 3) + new AttackMove(MoveId.REVENGE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, -4, 3) .attr(TurnDamagedDoublePowerAttr), - new AttackMove(Moves.BRICK_BREAK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 15, -1, 0, 3) + new AttackMove(MoveId.BRICK_BREAK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 15, -1, 0, 3) .attr(RemoveScreensAttr), - new StatusMove(Moves.YAWN, PokemonType.NORMAL, -1, 10, -1, 0, 3) + new StatusMove(MoveId.YAWN, PokemonType.NORMAL, -1, 10, -1, 0, 3) .attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true) .condition((user, target, move) => !target.status && !target.isSafeguarded(user)) .reflectable(), - new AttackMove(Moves.KNOCK_OFF, PokemonType.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) + new AttackMove(MoveId.KNOCK_OFF, PokemonType.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHeldItems().filter(i => i.isTransferable).length > 0 ? 1.5 : 1) .attr(RemoveHeldItemAttr, false) .edgeCase(), // Should not be able to remove held item if user faints due to Rough Skin, Iron Barbs, etc. // Should be able to remove items from pokemon with Sticky Hold if the damage causes them to faint - new AttackMove(Moves.ENDEAVOR, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3) + new AttackMove(MoveId.ENDEAVOR, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3) .attr(MatchHpAttr) .condition(failOnBossCondition), - new AttackMove(Moves.ERUPTION, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) + new AttackMove(MoveId.ERUPTION, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) .attr(HpPowerAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.SKILL_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 3) + new StatusMove(MoveId.SKILL_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 3) .ignoresSubstitute() .attr(SwitchAbilitiesAttr), - new StatusMove(Moves.IMPRISON, PokemonType.PSYCHIC, 100, 10, -1, 0, 3) + new StatusMove(MoveId.IMPRISON, PokemonType.PSYCHIC, 100, 10, -1, 0, 3) .ignoresSubstitute() .attr(AddArenaTagAttr, ArenaTagType.IMPRISON, 1, true, false) .target(MoveTarget.ENEMY_SIDE), - new SelfStatusMove(Moves.REFRESH, PokemonType.NORMAL, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.REFRESH, PokemonType.NORMAL, -1, 20, -1, 0, 3) .attr(HealStatusEffectAttr, true, [ StatusEffect.PARALYSIS, StatusEffect.POISON, StatusEffect.TOXIC, StatusEffect.BURN ]) .condition((user, target, move) => !!user.status && (user.status.effect === StatusEffect.PARALYSIS || user.status.effect === StatusEffect.POISON || user.status.effect === StatusEffect.TOXIC || user.status.effect === StatusEffect.BURN)), - new SelfStatusMove(Moves.GRUDGE, PokemonType.GHOST, -1, 5, -1, 0, 3) + new SelfStatusMove(MoveId.GRUDGE, PokemonType.GHOST, -1, 5, -1, 0, 3) .attr(AddBattlerTagAttr, BattlerTagType.GRUDGE, true, undefined, 1), - new SelfStatusMove(Moves.SNATCH, PokemonType.DARK, -1, 10, -1, 4, 3) + new SelfStatusMove(MoveId.SNATCH, PokemonType.DARK, -1, 10, -1, 4, 3) .unimplemented(), - new AttackMove(Moves.SECRET_POWER, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, 30, 0, 3) + new AttackMove(MoveId.SECRET_POWER, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, 30, 0, 3) .makesContact(false) .attr(SecretPowerAttr), - new ChargingAttackMove(Moves.DIVE, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) + new ChargingAttackMove(MoveId.DIVE, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) .chargeText(i18next.t("moveTriggers:hidUnderwater", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.UNDERWATER) .chargeAttr(GulpMissileTagAttr), - new AttackMove(Moves.ARM_THRUST, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 15, 100, 20, -1, 0, 3) + new AttackMove(MoveId.ARM_THRUST, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 15, 100, 20, -1, 0, 3) .attr(MultiHitAttr), - new SelfStatusMove(Moves.CAMOUFLAGE, PokemonType.NORMAL, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.CAMOUFLAGE, PokemonType.NORMAL, -1, 20, -1, 0, 3) .attr(CopyBiomeTypeAttr), - new SelfStatusMove(Moves.TAIL_GLOW, PokemonType.BUG, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.TAIL_GLOW, PokemonType.BUG, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], 3, true), - new AttackMove(Moves.LUSTER_PURGE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 95, 100, 5, 50, 0, 3) + new AttackMove(MoveId.LUSTER_PURGE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 95, 100, 5, 50, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), - new AttackMove(Moves.MIST_BALL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 95, 100, 5, 50, 0, 3) + new AttackMove(MoveId.MIST_BALL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 95, 100, 5, 50, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) .ballBombMove(), - new StatusMove(Moves.FEATHER_DANCE, PokemonType.FLYING, 100, 15, -1, 0, 3) + new StatusMove(MoveId.FEATHER_DANCE, PokemonType.FLYING, 100, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK ], -2) .danceMove() .reflectable(), - new StatusMove(Moves.TEETER_DANCE, PokemonType.NORMAL, 100, 20, -1, 0, 3) + new StatusMove(MoveId.TEETER_DANCE, PokemonType.NORMAL, 100, 20, -1, 0, 3) .attr(ConfuseAttr) .danceMove() .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.BLAZE_KICK, PokemonType.FIRE, MoveCategory.PHYSICAL, 85, 90, 10, 10, 0, 3) + new AttackMove(MoveId.BLAZE_KICK, PokemonType.FIRE, MoveCategory.PHYSICAL, 85, 90, 10, 10, 0, 3) .attr(HighCritAttr) .attr(StatusEffectAttr, StatusEffect.BURN), - new StatusMove(Moves.MUD_SPORT, PokemonType.GROUND, -1, 15, -1, 0, 3) + new StatusMove(MoveId.MUD_SPORT, PokemonType.GROUND, -1, 15, -1, 0, 3) .ignoresProtect() .attr(AddArenaTagAttr, ArenaTagType.MUD_SPORT, 5) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.ICE_BALL, PokemonType.ICE, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 3) + new AttackMove(MoveId.ICE_BALL, PokemonType.ICE, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 3) .partial() // Does not lock the user properly, does not increase damage correctly - .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, Moves.DEFENSE_CURL) + .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, MoveId.DEFENSE_CURL) .ballBombMove(), - new AttackMove(Moves.NEEDLE_ARM, PokemonType.GRASS, MoveCategory.PHYSICAL, 60, 100, 15, 30, 0, 3) + new AttackMove(MoveId.NEEDLE_ARM, PokemonType.GRASS, MoveCategory.PHYSICAL, 60, 100, 15, 30, 0, 3) .attr(FlinchAttr), - new SelfStatusMove(Moves.SLACK_OFF, PokemonType.NORMAL, -1, 5, -1, 0, 3) + new SelfStatusMove(MoveId.SLACK_OFF, PokemonType.NORMAL, -1, 5, -1, 0, 3) .attr(HealAttr, 0.5) .triageMove(), - new AttackMove(Moves.HYPER_VOICE, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 10, -1, 0, 3) + new AttackMove(MoveId.HYPER_VOICE, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 10, -1, 0, 3) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.POISON_FANG, PokemonType.POISON, MoveCategory.PHYSICAL, 50, 100, 15, 50, 0, 3) + new AttackMove(MoveId.POISON_FANG, PokemonType.POISON, MoveCategory.PHYSICAL, 50, 100, 15, 50, 0, 3) .attr(StatusEffectAttr, StatusEffect.TOXIC) .bitingMove(), - new AttackMove(Moves.CRUSH_CLAW, PokemonType.NORMAL, MoveCategory.PHYSICAL, 75, 95, 10, 50, 0, 3) + new AttackMove(MoveId.CRUSH_CLAW, PokemonType.NORMAL, MoveCategory.PHYSICAL, 75, 95, 10, 50, 0, 3) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.BLAST_BURN, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) + new AttackMove(MoveId.BLAST_BURN, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) .attr(RechargeAttr), - new AttackMove(Moves.HYDRO_CANNON, PokemonType.WATER, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) + new AttackMove(MoveId.HYDRO_CANNON, PokemonType.WATER, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) .attr(RechargeAttr), - new AttackMove(Moves.METEOR_MASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 90, 90, 10, 20, 0, 3) + new AttackMove(MoveId.METEOR_MASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 90, 90, 10, 20, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true) .punchingMove(), - new AttackMove(Moves.ASTONISH, PokemonType.GHOST, MoveCategory.PHYSICAL, 30, 100, 15, 30, 0, 3) + new AttackMove(MoveId.ASTONISH, PokemonType.GHOST, MoveCategory.PHYSICAL, 30, 100, 15, 30, 0, 3) .attr(FlinchAttr), - new AttackMove(Moves.WEATHER_BALL, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 3) + new AttackMove(MoveId.WEATHER_BALL, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 3) .attr(WeatherBallTypeAttr) .attr(MovePowerMultiplierAttr, (user, target, move) => { const weather = globalScene.arena.weather; @@ -9240,163 +9240,163 @@ export function initMoves() { return 1; }) .ballBombMove(), - new StatusMove(Moves.AROMATHERAPY, PokemonType.GRASS, -1, 5, -1, 0, 3) + new StatusMove(MoveId.AROMATHERAPY, PokemonType.GRASS, -1, 5, -1, 0, 3) .attr(PartyStatusCureAttr, i18next.t("moveTriggers:soothingAromaWaftedThroughArea"), AbilityId.SAP_SIPPER) .target(MoveTarget.PARTY), - new StatusMove(Moves.FAKE_TEARS, PokemonType.DARK, 100, 20, -1, 0, 3) + new StatusMove(MoveId.FAKE_TEARS, PokemonType.DARK, 100, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2) .reflectable(), - new AttackMove(Moves.AIR_CUTTER, PokemonType.FLYING, MoveCategory.SPECIAL, 60, 95, 25, -1, 0, 3) + new AttackMove(MoveId.AIR_CUTTER, PokemonType.FLYING, MoveCategory.SPECIAL, 60, 95, 25, -1, 0, 3) .attr(HighCritAttr) .slicingMove() .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.OVERHEAT, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 3) + new AttackMove(MoveId.OVERHEAT, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE), - new StatusMove(Moves.ODOR_SLEUTH, PokemonType.NORMAL, -1, 40, -1, 0, 3) + new StatusMove(MoveId.ODOR_SLEUTH, PokemonType.NORMAL, -1, 40, -1, 0, 3) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_GHOST) .ignoresSubstitute() .reflectable(), - new AttackMove(Moves.ROCK_TOMB, PokemonType.ROCK, MoveCategory.PHYSICAL, 60, 95, 15, 100, 0, 3) + new AttackMove(MoveId.ROCK_TOMB, PokemonType.ROCK, MoveCategory.PHYSICAL, 60, 95, 15, 100, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .makesContact(false), - new AttackMove(Moves.SILVER_WIND, PokemonType.BUG, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 3) + new AttackMove(MoveId.SILVER_WIND, PokemonType.BUG, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .windMove(), - new StatusMove(Moves.METAL_SOUND, PokemonType.STEEL, 85, 40, -1, 0, 3) + new StatusMove(MoveId.METAL_SOUND, PokemonType.STEEL, 85, 40, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2) .soundBased() .reflectable(), - new StatusMove(Moves.GRASS_WHISTLE, PokemonType.GRASS, 55, 15, -1, 0, 3) + new StatusMove(MoveId.GRASS_WHISTLE, PokemonType.GRASS, 55, 15, -1, 0, 3) .attr(StatusEffectAttr, StatusEffect.SLEEP) .soundBased() .reflectable(), - new StatusMove(Moves.TICKLE, PokemonType.NORMAL, 100, 20, -1, 0, 3) + new StatusMove(MoveId.TICKLE, PokemonType.NORMAL, 100, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1) .reflectable(), - new SelfStatusMove(Moves.COSMIC_POWER, PokemonType.PSYCHIC, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.COSMIC_POWER, PokemonType.PSYCHIC, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, true), - new AttackMove(Moves.WATER_SPOUT, PokemonType.WATER, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) + new AttackMove(MoveId.WATER_SPOUT, PokemonType.WATER, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) .attr(HpPowerAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.SIGNAL_BEAM, PokemonType.BUG, MoveCategory.SPECIAL, 75, 100, 15, 10, 0, 3) + new AttackMove(MoveId.SIGNAL_BEAM, PokemonType.BUG, MoveCategory.SPECIAL, 75, 100, 15, 10, 0, 3) .attr(ConfuseAttr), - new AttackMove(Moves.SHADOW_PUNCH, PokemonType.GHOST, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 3) + new AttackMove(MoveId.SHADOW_PUNCH, PokemonType.GHOST, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 3) .punchingMove(), - new AttackMove(Moves.EXTRASENSORY, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 20, 10, 0, 3) + new AttackMove(MoveId.EXTRASENSORY, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 20, 10, 0, 3) .attr(FlinchAttr), - new AttackMove(Moves.SKY_UPPERCUT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 85, 90, 15, -1, 0, 3) + new AttackMove(MoveId.SKY_UPPERCUT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 85, 90, 15, -1, 0, 3) .attr(HitsTagAttr, BattlerTagType.FLYING) .punchingMove(), - new AttackMove(Moves.SAND_TOMB, PokemonType.GROUND, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 3) + new AttackMove(MoveId.SAND_TOMB, PokemonType.GROUND, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 3) .attr(TrapAttr, BattlerTagType.SAND_TOMB) .makesContact(false), - new AttackMove(Moves.SHEER_COLD, PokemonType.ICE, MoveCategory.SPECIAL, 200, 20, 5, -1, 0, 3) + new AttackMove(MoveId.SHEER_COLD, PokemonType.ICE, MoveCategory.SPECIAL, 200, 20, 5, -1, 0, 3) .attr(IceNoEffectTypeAttr) .attr(OneHitKOAttr) .attr(SheerColdAccuracyAttr), - new AttackMove(Moves.MUDDY_WATER, PokemonType.WATER, MoveCategory.SPECIAL, 90, 85, 10, 30, 0, 3) + new AttackMove(MoveId.MUDDY_WATER, PokemonType.WATER, MoveCategory.SPECIAL, 90, 85, 10, 30, 0, 3) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.BULLET_SEED, PokemonType.GRASS, MoveCategory.PHYSICAL, 25, 100, 30, -1, 0, 3) + new AttackMove(MoveId.BULLET_SEED, PokemonType.GRASS, MoveCategory.PHYSICAL, 25, 100, 30, -1, 0, 3) .attr(MultiHitAttr) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.AERIAL_ACE, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 3) + new AttackMove(MoveId.AERIAL_ACE, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 3) .slicingMove(), - new AttackMove(Moves.ICICLE_SPEAR, PokemonType.ICE, MoveCategory.PHYSICAL, 25, 100, 30, -1, 0, 3) + new AttackMove(MoveId.ICICLE_SPEAR, PokemonType.ICE, MoveCategory.PHYSICAL, 25, 100, 30, -1, 0, 3) .attr(MultiHitAttr) .makesContact(false), - new SelfStatusMove(Moves.IRON_DEFENSE, PokemonType.STEEL, -1, 15, -1, 0, 3) + new SelfStatusMove(MoveId.IRON_DEFENSE, PokemonType.STEEL, -1, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), - new StatusMove(Moves.BLOCK, PokemonType.NORMAL, -1, 5, -1, 0, 3) + new StatusMove(MoveId.BLOCK, PokemonType.NORMAL, -1, 5, -1, 0, 3) .condition(failIfGhostTypeCondition) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) .reflectable(), - new StatusMove(Moves.HOWL, PokemonType.NORMAL, -1, 40, -1, 0, 3) + new StatusMove(MoveId.HOWL, PokemonType.NORMAL, -1, 40, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK ], 1) .soundBased() .target(MoveTarget.USER_AND_ALLIES), - new AttackMove(Moves.DRAGON_CLAW, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 3), - new AttackMove(Moves.FRENZY_PLANT, PokemonType.GRASS, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) + new AttackMove(MoveId.DRAGON_CLAW, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 3), + new AttackMove(MoveId.FRENZY_PLANT, PokemonType.GRASS, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 3) .attr(RechargeAttr), - new SelfStatusMove(Moves.BULK_UP, PokemonType.FIGHTING, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.BULK_UP, PokemonType.FIGHTING, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], 1, true), - new ChargingAttackMove(Moves.BOUNCE, PokemonType.FLYING, MoveCategory.PHYSICAL, 85, 85, 5, 30, 0, 3) + new ChargingAttackMove(MoveId.BOUNCE, PokemonType.FLYING, MoveCategory.PHYSICAL, 85, 85, 5, 30, 0, 3) .chargeText(i18next.t("moveTriggers:sprangUp", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .condition(failOnGravityCondition), - new AttackMove(Moves.MUD_SHOT, PokemonType.GROUND, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 3) + new AttackMove(MoveId.MUD_SHOT, PokemonType.GROUND, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), - new AttackMove(Moves.POISON_TAIL, PokemonType.POISON, MoveCategory.PHYSICAL, 50, 100, 25, 10, 0, 3) + new AttackMove(MoveId.POISON_TAIL, PokemonType.POISON, MoveCategory.PHYSICAL, 50, 100, 25, 10, 0, 3) .attr(HighCritAttr) .attr(StatusEffectAttr, StatusEffect.POISON), - new AttackMove(Moves.COVET, PokemonType.NORMAL, MoveCategory.PHYSICAL, 60, 100, 25, -1, 0, 3) + new AttackMove(MoveId.COVET, PokemonType.NORMAL, MoveCategory.PHYSICAL, 60, 100, 25, -1, 0, 3) .attr(StealHeldItemChanceAttr, 0.3) .edgeCase(), // Should not be able to steal held item if user faints due to Rough Skin, Iron Barbs, etc. // Should be able to steal items from pokemon with Sticky Hold if the damage causes them to faint - new AttackMove(Moves.VOLT_TACKLE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 3) + new AttackMove(MoveId.VOLT_TACKLE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 3) .attr(RecoilAttr, false, 0.33) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .recklessMove(), - new AttackMove(Moves.MAGICAL_LEAF, PokemonType.GRASS, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 3), - new StatusMove(Moves.WATER_SPORT, PokemonType.WATER, -1, 15, -1, 0, 3) + new AttackMove(MoveId.MAGICAL_LEAF, PokemonType.GRASS, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 3), + new StatusMove(MoveId.WATER_SPORT, PokemonType.WATER, -1, 15, -1, 0, 3) .ignoresProtect() .attr(AddArenaTagAttr, ArenaTagType.WATER_SPORT, 5) .target(MoveTarget.BOTH_SIDES), - new SelfStatusMove(Moves.CALM_MIND, PokemonType.PSYCHIC, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.CALM_MIND, PokemonType.PSYCHIC, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF ], 1, true), - new AttackMove(Moves.LEAF_BLADE, PokemonType.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 3) + new AttackMove(MoveId.LEAF_BLADE, PokemonType.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 3) .attr(HighCritAttr) .slicingMove(), - new SelfStatusMove(Moves.DRAGON_DANCE, PokemonType.DRAGON, -1, 20, -1, 0, 3) + new SelfStatusMove(MoveId.DRAGON_DANCE, PokemonType.DRAGON, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPD ], 1, true) .danceMove(), - new AttackMove(Moves.ROCK_BLAST, PokemonType.ROCK, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 3) + new AttackMove(MoveId.ROCK_BLAST, PokemonType.ROCK, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 3) .attr(MultiHitAttr) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.SHOCK_WAVE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 3), - new AttackMove(Moves.WATER_PULSE, PokemonType.WATER, MoveCategory.SPECIAL, 60, 100, 20, 20, 0, 3) + new AttackMove(MoveId.SHOCK_WAVE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 3), + new AttackMove(MoveId.WATER_PULSE, PokemonType.WATER, MoveCategory.SPECIAL, 60, 100, 20, 20, 0, 3) .attr(ConfuseAttr) .pulseMove(), - new AttackMove(Moves.DOOM_DESIRE, PokemonType.STEEL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 3) + new AttackMove(MoveId.DOOM_DESIRE, PokemonType.STEEL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 3) .partial() // cannot be used on multiple Pokemon on the same side in a double battle, hits immediately when called by Metronome/etc, should not apply abilities or held items if user is off the field .ignoresProtect() .attr(DelayedAttackAttr, ArenaTagType.DOOM_DESIRE, ChargeAnim.DOOM_DESIRE_CHARGING, i18next.t("moveTriggers:choseDoomDesireAsDestiny", { pokemonName: "{USER}" })), - new AttackMove(Moves.PSYCHO_BOOST, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3) + new AttackMove(MoveId.PSYCHO_BOOST, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true), - new SelfStatusMove(Moves.ROOST, PokemonType.FLYING, -1, 5, -1, 0, 4) + new SelfStatusMove(MoveId.ROOST, PokemonType.FLYING, -1, 5, -1, 0, 4) .attr(HealAttr, 0.5) .attr(AddBattlerTagAttr, BattlerTagType.ROOSTED, true, false) .triageMove(), - new StatusMove(Moves.GRAVITY, PokemonType.PSYCHIC, -1, 5, -1, 0, 4) + new StatusMove(MoveId.GRAVITY, PokemonType.PSYCHIC, -1, 5, -1, 0, 4) .ignoresProtect() .attr(AddArenaTagAttr, ArenaTagType.GRAVITY, 5) .target(MoveTarget.BOTH_SIDES), - new StatusMove(Moves.MIRACLE_EYE, PokemonType.PSYCHIC, -1, 40, -1, 0, 4) + new StatusMove(MoveId.MIRACLE_EYE, PokemonType.PSYCHIC, -1, 40, -1, 0, 4) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_DARK) .ignoresSubstitute() .reflectable(), - new AttackMove(Moves.WAKE_UP_SLAP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 4) + new AttackMove(MoveId.WAKE_UP_SLAP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => targetSleptOrComatoseCondition(user, target, move) ? 2 : 1) .attr(HealStatusEffectAttr, false, StatusEffect.SLEEP), - new AttackMove(Moves.HAMMER_ARM, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 4) + new AttackMove(MoveId.HAMMER_ARM, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPD ], -1, true) .punchingMove(), - new AttackMove(Moves.GYRO_BALL, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) + new AttackMove(MoveId.GYRO_BALL, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) .attr(GyroBallPowerAttr) .ballBombMove(), - new SelfStatusMove(Moves.HEALING_WISH, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) + new SelfStatusMove(MoveId.HEALING_WISH, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) .attr(SacrificialFullRestoreAttr, false, "moveTriggers:sacrificialFullRestore") .triageMove() .condition(failIfLastInPartyCondition), - new AttackMove(Moves.BRINE, PokemonType.WATER, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 4) + new AttackMove(MoveId.BRINE, PokemonType.WATER, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHpRatio() < 0.5 ? 2 : 1), - new AttackMove(Moves.NATURAL_GIFT, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 4) + new AttackMove(MoveId.NATURAL_GIFT, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 4) .makesContact(false) .unimplemented(), /* @@ -9404,40 +9404,40 @@ export function initMoves() { and enable the harvest test.. Do NOT push to berriesEatenLast or else cud chew will puke the berry. */ - new AttackMove(Moves.FEINT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 30, 100, 10, -1, 2, 4) + new AttackMove(MoveId.FEINT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 30, 100, 10, -1, 2, 4) .attr(RemoveBattlerTagAttr, [ BattlerTagType.PROTECTED ]) .attr(RemoveArenaTagsAttr, [ ArenaTagType.QUICK_GUARD, ArenaTagType.WIDE_GUARD, ArenaTagType.MAT_BLOCK, ArenaTagType.CRAFTY_SHIELD ], false) .makesContact(false) .ignoresProtect(), - new AttackMove(Moves.PLUCK, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 4) + new AttackMove(MoveId.PLUCK, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 4) .attr(StealEatBerryAttr), - new StatusMove(Moves.TAILWIND, PokemonType.FLYING, -1, 15, -1, 0, 4) + new StatusMove(MoveId.TAILWIND, PokemonType.FLYING, -1, 15, -1, 0, 4) .windMove() .attr(AddArenaTagAttr, ArenaTagType.TAILWIND, 4, true) .target(MoveTarget.USER_SIDE), - new StatusMove(Moves.ACUPRESSURE, PokemonType.NORMAL, -1, 30, -1, 0, 4) + new StatusMove(MoveId.ACUPRESSURE, PokemonType.NORMAL, -1, 30, -1, 0, 4) .attr(AcupressureStatStageChangeAttr) .target(MoveTarget.USER_OR_NEAR_ALLY), - new AttackMove(Moves.METAL_BURST, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) + new AttackMove(MoveId.METAL_BURST, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) .attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5) .redirectCounter() .makesContact(false) .target(MoveTarget.ATTACKER), - new AttackMove(Moves.U_TURN, PokemonType.BUG, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 4) + new AttackMove(MoveId.U_TURN, PokemonType.BUG, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 4) .attr(ForceSwitchOutAttr, true), - new AttackMove(Moves.CLOSE_COMBAT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) + new AttackMove(MoveId.CLOSE_COMBAT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true), - new AttackMove(Moves.PAYBACK, PokemonType.DARK, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 4) + new AttackMove(MoveId.PAYBACK, PokemonType.DARK, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getLastXMoves(1).find(m => m.turn === globalScene.currentBattle.turn) || globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.BALL ? 2 : 1), - new AttackMove(Moves.ASSURANCE, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 4) + new AttackMove(MoveId.ASSURANCE, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => target.turnData.damageTaken > 0 ? 2 : 1), - new StatusMove(Moves.EMBARGO, PokemonType.DARK, 100, 15, -1, 0, 4) + new StatusMove(MoveId.EMBARGO, PokemonType.DARK, 100, 15, -1, 0, 4) .reflectable() .unimplemented(), - new AttackMove(Moves.FLING, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) + new AttackMove(MoveId.FLING, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) .makesContact(false) .unimplemented(), - new StatusMove(Moves.PSYCHO_SHIFT, PokemonType.PSYCHIC, 100, 10, -1, 0, 4) + new StatusMove(MoveId.PSYCHO_SHIFT, PokemonType.PSYCHIC, 100, 10, -1, 0, 4) .attr(PsychoShiftEffectAttr) .condition((user, target, move) => { let statusToApply = user.hasAbility(AbilityId.COMATOSE) ? StatusEffect.SLEEP : undefined; @@ -9447,46 +9447,46 @@ export function initMoves() { return !!statusToApply && target.canSetStatus(statusToApply, false, false, user); } ), - new AttackMove(Moves.TRUMP_CARD, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 5, -1, 0, 4) + new AttackMove(MoveId.TRUMP_CARD, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 5, -1, 0, 4) .makesContact() .attr(LessPPMorePowerAttr), - new StatusMove(Moves.HEAL_BLOCK, PokemonType.PSYCHIC, 100, 15, -1, 0, 4) + new StatusMove(MoveId.HEAL_BLOCK, PokemonType.PSYCHIC, 100, 15, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.HEAL_BLOCK, false, true, 5) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.WRING_OUT, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 4) + new AttackMove(MoveId.WRING_OUT, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 4) .attr(OpponentHighHpPowerAttr, 120) .makesContact(), - new SelfStatusMove(Moves.POWER_TRICK, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) + new SelfStatusMove(MoveId.POWER_TRICK, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.POWER_TRICK, true), - new StatusMove(Moves.GASTRO_ACID, PokemonType.POISON, 100, 10, -1, 0, 4) + new StatusMove(MoveId.GASTRO_ACID, PokemonType.POISON, 100, 10, -1, 0, 4) .attr(SuppressAbilitiesAttr) .reflectable(), - new StatusMove(Moves.LUCKY_CHANT, PokemonType.NORMAL, -1, 30, -1, 0, 4) + new StatusMove(MoveId.LUCKY_CHANT, PokemonType.NORMAL, -1, 30, -1, 0, 4) .attr(AddArenaTagAttr, ArenaTagType.NO_CRIT, 5, true, true) .target(MoveTarget.USER_SIDE), - new StatusMove(Moves.ME_FIRST, PokemonType.NORMAL, -1, 20, -1, 0, 4) + new StatusMove(MoveId.ME_FIRST, PokemonType.NORMAL, -1, 20, -1, 0, 4) .ignoresSubstitute() .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new SelfStatusMove(Moves.COPYCAT, PokemonType.NORMAL, -1, 20, -1, 0, 4) + new SelfStatusMove(MoveId.COPYCAT, PokemonType.NORMAL, -1, 20, -1, 0, 4) .attr(CopyMoveAttr, false, invalidCopycatMoves), - new StatusMove(Moves.POWER_SWAP, PokemonType.PSYCHIC, -1, 10, 100, 0, 4) + new StatusMove(MoveId.POWER_SWAP, PokemonType.PSYCHIC, -1, 10, 100, 0, 4) .attr(SwapStatStagesAttr, [ Stat.ATK, Stat.SPATK ]) .ignoresSubstitute(), - new StatusMove(Moves.GUARD_SWAP, PokemonType.PSYCHIC, -1, 10, 100, 0, 4) + new StatusMove(MoveId.GUARD_SWAP, PokemonType.PSYCHIC, -1, 10, 100, 0, 4) .attr(SwapStatStagesAttr, [ Stat.DEF, Stat.SPDEF ]) .ignoresSubstitute(), - new AttackMove(Moves.PUNISHMENT, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) + new AttackMove(MoveId.PUNISHMENT, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) .makesContact(true) .attr(PunishmentPowerAttr), - new AttackMove(Moves.LAST_RESORT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4) + new AttackMove(MoveId.LAST_RESORT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4) .attr(LastResortAttr) .edgeCase(), // May or may not need to ignore remotely called moves depending on how it works - new StatusMove(Moves.WORRY_SEED, PokemonType.GRASS, 100, 10, -1, 0, 4) + new StatusMove(MoveId.WORRY_SEED, PokemonType.GRASS, 100, 10, -1, 0, 4) .attr(AbilityChangeAttr, AbilityId.INSOMNIA) .reflectable(), - new AttackMove(Moves.SUCKER_PUNCH, PokemonType.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4) + new AttackMove(MoveId.SUCKER_PUNCH, PokemonType.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4) .condition((user, target, move) => { const turnCommand = globalScene.currentBattle.turnCommands[target.getBattlerIndex()]; if (!turnCommand || !turnCommand.move) { @@ -9494,116 +9494,116 @@ export function initMoves() { } return (turnCommand.command === Command.FIGHT && !target.turnData.acted && allMoves[turnCommand.move.move].category !== MoveCategory.STATUS); }), - new StatusMove(Moves.TOXIC_SPIKES, PokemonType.POISON, -1, 20, -1, 0, 4) + new StatusMove(MoveId.TOXIC_SPIKES, PokemonType.POISON, -1, 20, -1, 0, 4) .attr(AddArenaTrapTagAttr, ArenaTagType.TOXIC_SPIKES) .target(MoveTarget.ENEMY_SIDE) .reflectable(), - new StatusMove(Moves.HEART_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) + new StatusMove(MoveId.HEART_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) .attr(SwapStatStagesAttr, BATTLE_STATS) .ignoresSubstitute(), - new SelfStatusMove(Moves.AQUA_RING, PokemonType.WATER, -1, 20, -1, 0, 4) + new SelfStatusMove(MoveId.AQUA_RING, PokemonType.WATER, -1, 20, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true), - new SelfStatusMove(Moves.MAGNET_RISE, PokemonType.ELECTRIC, -1, 10, -1, 0, 4) + new SelfStatusMove(MoveId.MAGNET_RISE, PokemonType.ELECTRIC, -1, 10, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, true, true, 5) .condition((user, target, move) => !globalScene.arena.getTag(ArenaTagType.GRAVITY) && [ BattlerTagType.FLOATING, BattlerTagType.IGNORE_FLYING, BattlerTagType.INGRAIN ].every((tag) => !user.getTag(tag))), - new AttackMove(Moves.FLARE_BLITZ, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4) + new AttackMove(MoveId.FLARE_BLITZ, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4) .attr(RecoilAttr, false, 0.33) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .recklessMove(), - new AttackMove(Moves.FORCE_PALM, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, 30, 0, 4) + new AttackMove(MoveId.FORCE_PALM, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, 30, 0, 4) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.AURA_SPHERE, PokemonType.FIGHTING, MoveCategory.SPECIAL, 80, -1, 20, -1, 0, 4) + new AttackMove(MoveId.AURA_SPHERE, PokemonType.FIGHTING, MoveCategory.SPECIAL, 80, -1, 20, -1, 0, 4) .pulseMove() .ballBombMove(), - new SelfStatusMove(Moves.ROCK_POLISH, PokemonType.ROCK, -1, 20, -1, 0, 4) + new SelfStatusMove(MoveId.ROCK_POLISH, PokemonType.ROCK, -1, 20, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true), - new AttackMove(Moves.POISON_JAB, PokemonType.POISON, MoveCategory.PHYSICAL, 80, 100, 20, 30, 0, 4) + new AttackMove(MoveId.POISON_JAB, PokemonType.POISON, MoveCategory.PHYSICAL, 80, 100, 20, 30, 0, 4) .attr(StatusEffectAttr, StatusEffect.POISON), - new AttackMove(Moves.DARK_PULSE, PokemonType.DARK, MoveCategory.SPECIAL, 80, 100, 15, 20, 0, 4) + new AttackMove(MoveId.DARK_PULSE, PokemonType.DARK, MoveCategory.SPECIAL, 80, 100, 15, 20, 0, 4) .attr(FlinchAttr) .pulseMove(), - new AttackMove(Moves.NIGHT_SLASH, PokemonType.DARK, MoveCategory.PHYSICAL, 70, 100, 15, -1, 0, 4) + new AttackMove(MoveId.NIGHT_SLASH, PokemonType.DARK, MoveCategory.PHYSICAL, 70, 100, 15, -1, 0, 4) .attr(HighCritAttr) .slicingMove(), - new AttackMove(Moves.AQUA_TAIL, PokemonType.WATER, MoveCategory.PHYSICAL, 90, 90, 10, -1, 0, 4), - new AttackMove(Moves.SEED_BOMB, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 4) + new AttackMove(MoveId.AQUA_TAIL, PokemonType.WATER, MoveCategory.PHYSICAL, 90, 90, 10, -1, 0, 4), + new AttackMove(MoveId.SEED_BOMB, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 4) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.AIR_SLASH, PokemonType.FLYING, MoveCategory.SPECIAL, 75, 95, 15, 30, 0, 4) + new AttackMove(MoveId.AIR_SLASH, PokemonType.FLYING, MoveCategory.SPECIAL, 75, 95, 15, 30, 0, 4) .attr(FlinchAttr) .slicingMove(), - new AttackMove(Moves.X_SCISSOR, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 4) + new AttackMove(MoveId.X_SCISSOR, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 4) .slicingMove(), - new AttackMove(Moves.BUG_BUZZ, PokemonType.BUG, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) + new AttackMove(MoveId.BUG_BUZZ, PokemonType.BUG, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .soundBased(), - new AttackMove(Moves.DRAGON_PULSE, PokemonType.DRAGON, MoveCategory.SPECIAL, 85, 100, 10, -1, 0, 4) + new AttackMove(MoveId.DRAGON_PULSE, PokemonType.DRAGON, MoveCategory.SPECIAL, 85, 100, 10, -1, 0, 4) .pulseMove(), - new AttackMove(Moves.DRAGON_RUSH, PokemonType.DRAGON, MoveCategory.PHYSICAL, 100, 75, 10, 20, 0, 4) + new AttackMove(MoveId.DRAGON_RUSH, PokemonType.DRAGON, MoveCategory.PHYSICAL, 100, 75, 10, 20, 0, 4) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(FlinchAttr), - new AttackMove(Moves.POWER_GEM, PokemonType.ROCK, MoveCategory.SPECIAL, 80, 100, 20, -1, 0, 4), - new AttackMove(Moves.DRAIN_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 4) + new AttackMove(MoveId.POWER_GEM, PokemonType.ROCK, MoveCategory.SPECIAL, 80, 100, 20, -1, 0, 4), + new AttackMove(MoveId.DRAIN_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 4) .attr(HitHealAttr) .punchingMove() .triageMove(), - new AttackMove(Moves.VACUUM_WAVE, PokemonType.FIGHTING, MoveCategory.SPECIAL, 40, 100, 30, -1, 1, 4), - new AttackMove(Moves.FOCUS_BLAST, PokemonType.FIGHTING, MoveCategory.SPECIAL, 120, 70, 5, 10, 0, 4) + new AttackMove(MoveId.VACUUM_WAVE, PokemonType.FIGHTING, MoveCategory.SPECIAL, 40, 100, 30, -1, 1, 4), + new AttackMove(MoveId.FOCUS_BLAST, PokemonType.FIGHTING, MoveCategory.SPECIAL, 120, 70, 5, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .ballBombMove(), - new AttackMove(Moves.ENERGY_BALL, PokemonType.GRASS, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) + new AttackMove(MoveId.ENERGY_BALL, PokemonType.GRASS, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .ballBombMove(), - new AttackMove(Moves.BRAVE_BIRD, PokemonType.FLYING, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 4) + new AttackMove(MoveId.BRAVE_BIRD, PokemonType.FLYING, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 4) .attr(RecoilAttr, false, 0.33) .recklessMove(), - new AttackMove(Moves.EARTH_POWER, PokemonType.GROUND, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) + new AttackMove(MoveId.EARTH_POWER, PokemonType.GROUND, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), - new StatusMove(Moves.SWITCHEROO, PokemonType.DARK, 100, 10, -1, 0, 4) + new StatusMove(MoveId.SWITCHEROO, PokemonType.DARK, 100, 10, -1, 0, 4) .unimplemented(), - new AttackMove(Moves.GIGA_IMPACT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 150, 90, 5, -1, 0, 4) + new AttackMove(MoveId.GIGA_IMPACT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 150, 90, 5, -1, 0, 4) .attr(RechargeAttr), - new SelfStatusMove(Moves.NASTY_PLOT, PokemonType.DARK, -1, 20, -1, 0, 4) + new SelfStatusMove(MoveId.NASTY_PLOT, PokemonType.DARK, -1, 20, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], 2, true), - new AttackMove(Moves.BULLET_PUNCH, PokemonType.STEEL, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4) + new AttackMove(MoveId.BULLET_PUNCH, PokemonType.STEEL, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4) .punchingMove(), - new AttackMove(Moves.AVALANCHE, PokemonType.ICE, MoveCategory.PHYSICAL, 60, 100, 10, -1, -4, 4) + new AttackMove(MoveId.AVALANCHE, PokemonType.ICE, MoveCategory.PHYSICAL, 60, 100, 10, -1, -4, 4) .attr(TurnDamagedDoublePowerAttr), - new AttackMove(Moves.ICE_SHARD, PokemonType.ICE, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4) + new AttackMove(MoveId.ICE_SHARD, PokemonType.ICE, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4) .makesContact(false), - new AttackMove(Moves.SHADOW_CLAW, PokemonType.GHOST, MoveCategory.PHYSICAL, 70, 100, 15, -1, 0, 4) + new AttackMove(MoveId.SHADOW_CLAW, PokemonType.GHOST, MoveCategory.PHYSICAL, 70, 100, 15, -1, 0, 4) .attr(HighCritAttr), - new AttackMove(Moves.THUNDER_FANG, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) + new AttackMove(MoveId.THUNDER_FANG, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) .attr(FlinchAttr) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .bitingMove(), - new AttackMove(Moves.ICE_FANG, PokemonType.ICE, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) + new AttackMove(MoveId.ICE_FANG, PokemonType.ICE, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) .attr(FlinchAttr) .attr(StatusEffectAttr, StatusEffect.FREEZE) .bitingMove(), - new AttackMove(Moves.FIRE_FANG, PokemonType.FIRE, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) + new AttackMove(MoveId.FIRE_FANG, PokemonType.FIRE, MoveCategory.PHYSICAL, 65, 95, 15, 10, 0, 4) .attr(FlinchAttr) .attr(StatusEffectAttr, StatusEffect.BURN) .bitingMove(), - new AttackMove(Moves.SHADOW_SNEAK, PokemonType.GHOST, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4), - new AttackMove(Moves.MUD_BOMB, PokemonType.GROUND, MoveCategory.SPECIAL, 65, 85, 10, 30, 0, 4) + new AttackMove(MoveId.SHADOW_SNEAK, PokemonType.GHOST, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 4), + new AttackMove(MoveId.MUD_BOMB, PokemonType.GROUND, MoveCategory.SPECIAL, 65, 85, 10, 30, 0, 4) .attr(StatStageChangeAttr, [ Stat.ACC ], -1) .ballBombMove(), - new AttackMove(Moves.PSYCHO_CUT, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 4) + new AttackMove(MoveId.PSYCHO_CUT, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 4) .attr(HighCritAttr) .slicingMove() .makesContact(false), - new AttackMove(Moves.ZEN_HEADBUTT, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 80, 90, 15, 20, 0, 4) + new AttackMove(MoveId.ZEN_HEADBUTT, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 80, 90, 15, 20, 0, 4) .attr(FlinchAttr), - new AttackMove(Moves.MIRROR_SHOT, PokemonType.STEEL, MoveCategory.SPECIAL, 65, 85, 10, 30, 0, 4) + new AttackMove(MoveId.MIRROR_SHOT, PokemonType.STEEL, MoveCategory.SPECIAL, 65, 85, 10, 30, 0, 4) .attr(StatStageChangeAttr, [ Stat.ACC ], -1), - new AttackMove(Moves.FLASH_CANNON, PokemonType.STEEL, MoveCategory.SPECIAL, 80, 100, 10, 10, 0, 4) + new AttackMove(MoveId.FLASH_CANNON, PokemonType.STEEL, MoveCategory.SPECIAL, 80, 100, 10, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), - new AttackMove(Moves.ROCK_CLIMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 85, 20, 20, 0, 4) + new AttackMove(MoveId.ROCK_CLIMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 85, 20, 20, 0, 4) .attr(ConfuseAttr), - new StatusMove(Moves.DEFOG, PokemonType.FLYING, -1, 15, -1, 0, 4) + new StatusMove(MoveId.DEFOG, PokemonType.FLYING, -1, 15, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.EVA ], -1) .attr(ClearWeatherAttr, WeatherType.FOG) .attr(ClearTerrainAttr) @@ -9611,129 +9611,129 @@ export function initMoves() { .attr(RemoveArenaTrapAttr, true) .attr(RemoveArenaTagsAttr, [ ArenaTagType.MIST, ArenaTagType.SAFEGUARD ], false) .reflectable(), - new StatusMove(Moves.TRICK_ROOM, PokemonType.PSYCHIC, -1, 5, -1, -7, 4) + new StatusMove(MoveId.TRICK_ROOM, PokemonType.PSYCHIC, -1, 5, -1, -7, 4) .attr(AddArenaTagAttr, ArenaTagType.TRICK_ROOM, 5) .ignoresProtect() .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.DRACO_METEOR, PokemonType.DRAGON, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 4) + new AttackMove(MoveId.DRACO_METEOR, PokemonType.DRAGON, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true), - new AttackMove(Moves.DISCHARGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 4) + new AttackMove(MoveId.DISCHARGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 4) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.LAVA_PLUME, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 4) + new AttackMove(MoveId.LAVA_PLUME, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 4) .attr(StatusEffectAttr, StatusEffect.BURN) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.LEAF_STORM, PokemonType.GRASS, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 4) + new AttackMove(MoveId.LEAF_STORM, PokemonType.GRASS, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true), - new AttackMove(Moves.POWER_WHIP, PokemonType.GRASS, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 4), - new AttackMove(Moves.ROCK_WRECKER, PokemonType.ROCK, MoveCategory.PHYSICAL, 150, 90, 5, -1, 0, 4) + new AttackMove(MoveId.POWER_WHIP, PokemonType.GRASS, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 4), + new AttackMove(MoveId.ROCK_WRECKER, PokemonType.ROCK, MoveCategory.PHYSICAL, 150, 90, 5, -1, 0, 4) .attr(RechargeAttr) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.CROSS_POISON, PokemonType.POISON, MoveCategory.PHYSICAL, 70, 100, 20, 10, 0, 4) + new AttackMove(MoveId.CROSS_POISON, PokemonType.POISON, MoveCategory.PHYSICAL, 70, 100, 20, 10, 0, 4) .attr(HighCritAttr) .attr(StatusEffectAttr, StatusEffect.POISON) .slicingMove(), - new AttackMove(Moves.GUNK_SHOT, PokemonType.POISON, MoveCategory.PHYSICAL, 120, 80, 5, 30, 0, 4) + new AttackMove(MoveId.GUNK_SHOT, PokemonType.POISON, MoveCategory.PHYSICAL, 120, 80, 5, 30, 0, 4) .attr(StatusEffectAttr, StatusEffect.POISON) .makesContact(false), - new AttackMove(Moves.IRON_HEAD, PokemonType.STEEL, MoveCategory.PHYSICAL, 80, 100, 15, 30, 0, 4) + new AttackMove(MoveId.IRON_HEAD, PokemonType.STEEL, MoveCategory.PHYSICAL, 80, 100, 15, 30, 0, 4) .attr(FlinchAttr), - new AttackMove(Moves.MAGNET_BOMB, PokemonType.STEEL, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 4) + new AttackMove(MoveId.MAGNET_BOMB, PokemonType.STEEL, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 4) .makesContact(false) .ballBombMove(), - new AttackMove(Moves.STONE_EDGE, PokemonType.ROCK, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 4) + new AttackMove(MoveId.STONE_EDGE, PokemonType.ROCK, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 4) .attr(HighCritAttr) .makesContact(false), - new StatusMove(Moves.CAPTIVATE, PokemonType.NORMAL, 100, 20, -1, 0, 4) + new StatusMove(MoveId.CAPTIVATE, PokemonType.NORMAL, 100, 20, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2) .condition((user, target, move) => target.isOppositeGender(user)) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new StatusMove(Moves.STEALTH_ROCK, PokemonType.ROCK, -1, 20, -1, 0, 4) + new StatusMove(MoveId.STEALTH_ROCK, PokemonType.ROCK, -1, 20, -1, 0, 4) .attr(AddArenaTrapTagAttr, ArenaTagType.STEALTH_ROCK) .target(MoveTarget.ENEMY_SIDE) .reflectable(), - new AttackMove(Moves.GRASS_KNOT, PokemonType.GRASS, MoveCategory.SPECIAL, -1, 100, 20, -1, 0, 4) + new AttackMove(MoveId.GRASS_KNOT, PokemonType.GRASS, MoveCategory.SPECIAL, -1, 100, 20, -1, 0, 4) .attr(WeightPowerAttr) .makesContact(), - new AttackMove(Moves.CHATTER, PokemonType.FLYING, MoveCategory.SPECIAL, 65, 100, 20, 100, 0, 4) + new AttackMove(MoveId.CHATTER, PokemonType.FLYING, MoveCategory.SPECIAL, 65, 100, 20, 100, 0, 4) .attr(ConfuseAttr) .soundBased(), - new AttackMove(Moves.JUDGMENT, PokemonType.NORMAL, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 4) + new AttackMove(MoveId.JUDGMENT, PokemonType.NORMAL, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 4) .attr(FormChangeItemTypeAttr), - new AttackMove(Moves.BUG_BITE, PokemonType.BUG, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 4) + new AttackMove(MoveId.BUG_BITE, PokemonType.BUG, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 4) .attr(StealEatBerryAttr), - new AttackMove(Moves.CHARGE_BEAM, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 50, 90, 10, 70, 0, 4) + new AttackMove(MoveId.CHARGE_BEAM, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 50, 90, 10, 70, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true), - new AttackMove(Moves.WOOD_HAMMER, PokemonType.GRASS, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 4) + new AttackMove(MoveId.WOOD_HAMMER, PokemonType.GRASS, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 4) .attr(RecoilAttr, false, 0.33) .recklessMove(), - new AttackMove(Moves.AQUA_JET, PokemonType.WATER, MoveCategory.PHYSICAL, 40, 100, 20, -1, 1, 4), - new AttackMove(Moves.ATTACK_ORDER, PokemonType.BUG, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 4) + new AttackMove(MoveId.AQUA_JET, PokemonType.WATER, MoveCategory.PHYSICAL, 40, 100, 20, -1, 1, 4), + new AttackMove(MoveId.ATTACK_ORDER, PokemonType.BUG, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 4) .attr(HighCritAttr) .makesContact(false), - new SelfStatusMove(Moves.DEFEND_ORDER, PokemonType.BUG, -1, 10, -1, 0, 4) + new SelfStatusMove(MoveId.DEFEND_ORDER, PokemonType.BUG, -1, 10, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, true), - new SelfStatusMove(Moves.HEAL_ORDER, PokemonType.BUG, -1, 5, -1, 0, 4) + new SelfStatusMove(MoveId.HEAL_ORDER, PokemonType.BUG, -1, 5, -1, 0, 4) .attr(HealAttr, 0.5) .triageMove(), - new AttackMove(Moves.HEAD_SMASH, PokemonType.ROCK, MoveCategory.PHYSICAL, 150, 80, 5, -1, 0, 4) + new AttackMove(MoveId.HEAD_SMASH, PokemonType.ROCK, MoveCategory.PHYSICAL, 150, 80, 5, -1, 0, 4) .attr(RecoilAttr, false, 0.5) .recklessMove(), - new AttackMove(Moves.DOUBLE_HIT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 35, 90, 10, -1, 0, 4) + new AttackMove(MoveId.DOUBLE_HIT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 35, 90, 10, -1, 0, 4) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.ROAR_OF_TIME, PokemonType.DRAGON, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 4) + new AttackMove(MoveId.ROAR_OF_TIME, PokemonType.DRAGON, MoveCategory.SPECIAL, 150, 90, 5, -1, 0, 4) .attr(RechargeAttr), - new AttackMove(Moves.SPACIAL_REND, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 95, 5, -1, 0, 4) + new AttackMove(MoveId.SPACIAL_REND, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 95, 5, -1, 0, 4) .attr(HighCritAttr), - new SelfStatusMove(Moves.LUNAR_DANCE, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) + new SelfStatusMove(MoveId.LUNAR_DANCE, PokemonType.PSYCHIC, -1, 10, -1, 0, 4) .attr(SacrificialFullRestoreAttr, true, "moveTriggers:lunarDanceRestore") .danceMove() .triageMove() .condition(failIfLastInPartyCondition), - new AttackMove(Moves.CRUSH_GRIP, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) + new AttackMove(MoveId.CRUSH_GRIP, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) .attr(OpponentHighHpPowerAttr, 120), - new AttackMove(Moves.MAGMA_STORM, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 75, 5, -1, 0, 4) + new AttackMove(MoveId.MAGMA_STORM, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 75, 5, -1, 0, 4) .attr(TrapAttr, BattlerTagType.MAGMA_STORM), - new StatusMove(Moves.DARK_VOID, PokemonType.DARK, 80, 10, -1, 0, 4) //Accuracy from Generations 4-6 + new StatusMove(MoveId.DARK_VOID, PokemonType.DARK, 80, 10, -1, 0, 4) //Accuracy from Generations 4-6 .attr(StatusEffectAttr, StatusEffect.SLEEP) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new AttackMove(Moves.SEED_FLARE, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 85, 5, 40, 0, 4) + new AttackMove(MoveId.SEED_FLARE, PokemonType.GRASS, MoveCategory.SPECIAL, 120, 85, 5, 40, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), - new AttackMove(Moves.OMINOUS_WIND, PokemonType.GHOST, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 4) + new AttackMove(MoveId.OMINOUS_WIND, PokemonType.GHOST, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .windMove(), - new ChargingAttackMove(Moves.SHADOW_FORCE, PokemonType.GHOST, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) + new ChargingAttackMove(MoveId.SHADOW_FORCE, PokemonType.GHOST, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) .chargeText(i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.HIDDEN) .ignoresProtect(), - new SelfStatusMove(Moves.HONE_CLAWS, PokemonType.DARK, -1, 15, -1, 0, 5) + new SelfStatusMove(MoveId.HONE_CLAWS, PokemonType.DARK, -1, 15, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.ACC ], 1, true), - new StatusMove(Moves.WIDE_GUARD, PokemonType.ROCK, -1, 10, -1, 3, 5) + new StatusMove(MoveId.WIDE_GUARD, PokemonType.ROCK, -1, 10, -1, 3, 5) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.WIDE_GUARD, 1, true, true) .condition(failIfLastCondition), - new StatusMove(Moves.GUARD_SPLIT, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) + new StatusMove(MoveId.GUARD_SPLIT, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) .attr(AverageStatsAttr, [ Stat.DEF, Stat.SPDEF ], "moveTriggers:sharedGuard"), - new StatusMove(Moves.POWER_SPLIT, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) + new StatusMove(MoveId.POWER_SPLIT, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) .attr(AverageStatsAttr, [ Stat.ATK, Stat.SPATK ], "moveTriggers:sharedPower"), - new StatusMove(Moves.WONDER_ROOM, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) + new StatusMove(MoveId.WONDER_ROOM, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) .ignoresProtect() .target(MoveTarget.BOTH_SIDES) .unimplemented(), - new AttackMove(Moves.PSYSHOCK, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) + new AttackMove(MoveId.PSYSHOCK, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) .attr(DefDefAttr), - new AttackMove(Moves.VENOSHOCK, PokemonType.POISON, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) + new AttackMove(MoveId.VENOSHOCK, PokemonType.POISON, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status && (target.status.effect === StatusEffect.POISON || target.status.effect === StatusEffect.TOXIC) ? 2 : 1), - new SelfStatusMove(Moves.AUTOTOMIZE, PokemonType.STEEL, -1, 15, -1, 0, 5) + new SelfStatusMove(MoveId.AUTOTOMIZE, PokemonType.STEEL, -1, 15, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true) .attr(AddBattlerTagAttr, BattlerTagType.AUTOTOMIZED, true), - new SelfStatusMove(Moves.RAGE_POWDER, PokemonType.BUG, -1, 20, -1, 2, 5) + new SelfStatusMove(MoveId.RAGE_POWDER, PokemonType.BUG, -1, 20, -1, 2, 5) .powderMove() .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, true), - new StatusMove(Moves.TELEKINESIS, PokemonType.PSYCHIC, -1, 15, -1, 0, 5) + new StatusMove(MoveId.TELEKINESIS, PokemonType.PSYCHIC, -1, 15, -1, 0, 5) .condition(failOnGravityCondition) .condition((_user, target, _move) => ![ Species.DIGLETT, Species.DUGTRIO, Species.ALOLA_DIGLETT, Species.ALOLA_DUGTRIO, Species.SANDYGAST, Species.PALOSSAND, Species.WIGLETT, Species.WUGTRIO ].includes(target.species.speciesId)) .condition((_user, target, _move) => !(target.species.speciesId === Species.GENGAR && target.getFormKey() === "mega")) @@ -9741,127 +9741,127 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.TELEKINESIS, false, true, 3) .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3) .reflectable(), - new StatusMove(Moves.MAGIC_ROOM, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) + new StatusMove(MoveId.MAGIC_ROOM, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) .ignoresProtect() .target(MoveTarget.BOTH_SIDES) .unimplemented(), - new AttackMove(Moves.SMACK_DOWN, PokemonType.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, -1, 0, 5) + new AttackMove(MoveId.SMACK_DOWN, PokemonType.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, -1, 0, 5) .attr(FallDownAttr) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.FLOATING, BattlerTagType.TELEKINESIS ]) .attr(HitsTagAttr, BattlerTagType.FLYING) .makesContact(false), - new AttackMove(Moves.STORM_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) + new AttackMove(MoveId.STORM_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) .attr(CritOnlyAttr), - new AttackMove(Moves.FLAME_BURST, PokemonType.FIRE, MoveCategory.SPECIAL, 70, 100, 15, -1, 0, 5) + new AttackMove(MoveId.FLAME_BURST, PokemonType.FIRE, MoveCategory.SPECIAL, 70, 100, 15, -1, 0, 5) .attr(FlameBurstAttr), - new AttackMove(Moves.SLUDGE_WAVE, PokemonType.POISON, MoveCategory.SPECIAL, 95, 100, 10, 10, 0, 5) + new AttackMove(MoveId.SLUDGE_WAVE, PokemonType.POISON, MoveCategory.SPECIAL, 95, 100, 10, 10, 0, 5) .attr(StatusEffectAttr, StatusEffect.POISON) .target(MoveTarget.ALL_NEAR_OTHERS), - new SelfStatusMove(Moves.QUIVER_DANCE, PokemonType.BUG, -1, 20, -1, 0, 5) + new SelfStatusMove(MoveId.QUIVER_DANCE, PokemonType.BUG, -1, 20, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .danceMove(), - new AttackMove(Moves.HEAVY_SLAM, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5) + new AttackMove(MoveId.HEAVY_SLAM, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5) .attr(AlwaysHitMinimizeAttr) .attr(CompareWeightPowerAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED), - new AttackMove(Moves.SYNCHRONOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5) + new AttackMove(MoveId.SYNCHRONOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5) .target(MoveTarget.ALL_NEAR_OTHERS) .condition(unknownTypeCondition) .attr(HitsSameTypeAttr), - new AttackMove(Moves.ELECTRO_BALL, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5) + new AttackMove(MoveId.ELECTRO_BALL, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5) .attr(ElectroBallPowerAttr) .ballBombMove(), - new StatusMove(Moves.SOAK, PokemonType.WATER, 100, 20, -1, 0, 5) + new StatusMove(MoveId.SOAK, PokemonType.WATER, 100, 20, -1, 0, 5) .attr(ChangeTypeAttr, PokemonType.WATER) .reflectable(), - new AttackMove(Moves.FLAME_CHARGE, PokemonType.FIRE, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 5) + new AttackMove(MoveId.FLAME_CHARGE, PokemonType.FIRE, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true), - new SelfStatusMove(Moves.COIL, PokemonType.POISON, -1, 20, -1, 0, 5) + new SelfStatusMove(MoveId.COIL, PokemonType.POISON, -1, 20, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.ACC ], 1, true), - new AttackMove(Moves.LOW_SWEEP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 65, 100, 20, 100, 0, 5) + new AttackMove(MoveId.LOW_SWEEP, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 65, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), - new AttackMove(Moves.ACID_SPRAY, PokemonType.POISON, MoveCategory.SPECIAL, 40, 100, 20, 100, 0, 5) + new AttackMove(MoveId.ACID_SPRAY, PokemonType.POISON, MoveCategory.SPECIAL, 40, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2) .ballBombMove(), - new AttackMove(Moves.FOUL_PLAY, PokemonType.DARK, MoveCategory.PHYSICAL, 95, 100, 15, -1, 0, 5) + new AttackMove(MoveId.FOUL_PLAY, PokemonType.DARK, MoveCategory.PHYSICAL, 95, 100, 15, -1, 0, 5) .attr(TargetAtkUserAtkAttr), - new StatusMove(Moves.SIMPLE_BEAM, PokemonType.NORMAL, 100, 15, -1, 0, 5) + new StatusMove(MoveId.SIMPLE_BEAM, PokemonType.NORMAL, 100, 15, -1, 0, 5) .attr(AbilityChangeAttr, AbilityId.SIMPLE) .reflectable(), - new StatusMove(Moves.ENTRAINMENT, PokemonType.NORMAL, 100, 15, -1, 0, 5) + new StatusMove(MoveId.ENTRAINMENT, PokemonType.NORMAL, 100, 15, -1, 0, 5) .attr(AbilityGiveAttr) .reflectable(), - new StatusMove(Moves.AFTER_YOU, PokemonType.NORMAL, -1, 15, -1, 0, 5) + new StatusMove(MoveId.AFTER_YOU, PokemonType.NORMAL, -1, 15, -1, 0, 5) .ignoresProtect() .ignoresSubstitute() .target(MoveTarget.NEAR_OTHER) .condition(failIfSingleBattle) .condition((user, target, move) => !target.turnData.acted) .attr(AfterYouAttr), - new AttackMove(Moves.ROUND, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) + new AttackMove(MoveId.ROUND, PokemonType.NORMAL, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) .attr(CueNextRoundAttr) .attr(RoundPowerAttr) .soundBased(), - new AttackMove(Moves.ECHOED_VOICE, PokemonType.NORMAL, MoveCategory.SPECIAL, 40, 100, 15, -1, 0, 5) + new AttackMove(MoveId.ECHOED_VOICE, PokemonType.NORMAL, MoveCategory.SPECIAL, 40, 100, 15, -1, 0, 5) .attr(ConsecutiveUseMultiBasePowerAttr, 5, false) .soundBased(), - new AttackMove(Moves.CHIP_AWAY, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 5) + new AttackMove(MoveId.CHIP_AWAY, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 5) .attr(IgnoreOpponentStatStagesAttr), - new AttackMove(Moves.CLEAR_SMOG, PokemonType.POISON, MoveCategory.SPECIAL, 50, -1, 15, -1, 0, 5) + new AttackMove(MoveId.CLEAR_SMOG, PokemonType.POISON, MoveCategory.SPECIAL, 50, -1, 15, -1, 0, 5) .attr(ResetStatsAttr, false), - new AttackMove(Moves.STORED_POWER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 20, 100, 10, -1, 0, 5) + new AttackMove(MoveId.STORED_POWER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 20, 100, 10, -1, 0, 5) .attr(PositiveStatStagePowerAttr), - new StatusMove(Moves.QUICK_GUARD, PokemonType.FIGHTING, -1, 15, -1, 3, 5) + new StatusMove(MoveId.QUICK_GUARD, PokemonType.FIGHTING, -1, 15, -1, 3, 5) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.QUICK_GUARD, 1, true, true) .condition(failIfLastCondition), - new SelfStatusMove(Moves.ALLY_SWITCH, PokemonType.PSYCHIC, -1, 15, -1, 2, 5) + new SelfStatusMove(MoveId.ALLY_SWITCH, PokemonType.PSYCHIC, -1, 15, -1, 2, 5) .ignoresProtect() .unimplemented(), - new AttackMove(Moves.SCALD, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 5) + new AttackMove(MoveId.SCALD, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, 30, 0, 5) .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN), - new SelfStatusMove(Moves.SHELL_SMASH, PokemonType.NORMAL, -1, 15, -1, 0, 5) + new SelfStatusMove(MoveId.SHELL_SMASH, PokemonType.NORMAL, -1, 15, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK, Stat.SPD ], 2, true) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true), - new StatusMove(Moves.HEAL_PULSE, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) + new StatusMove(MoveId.HEAL_PULSE, PokemonType.PSYCHIC, -1, 10, -1, 0, 5) .attr(HealAttr, 0.5, false, false) .pulseMove() .triageMove() .reflectable(), - new AttackMove(Moves.HEX, PokemonType.GHOST, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) + new AttackMove(MoveId.HEX, PokemonType.GHOST, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) .attr( MovePowerMultiplierAttr, (user, target, move) => target.status || target.hasAbility(AbilityId.COMATOSE) ? 2 : 1), - new ChargingAttackMove(Moves.SKY_DROP, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) + new ChargingAttackMove(MoveId.SKY_DROP, PokemonType.FLYING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) .chargeText(i18next.t("moveTriggers:tookTargetIntoSky", { pokemonName: "{USER}", targetName: "{TARGET}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .condition(failOnGravityCondition) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) .partial(), // Should immobilize the target, Flying types should take no damage. cf https://bulbapedia.bulbagarden.net/wiki/Sky_Drop_(move) and https://www.smogon.com/dex/sv/moves/sky-drop/ - new SelfStatusMove(Moves.SHIFT_GEAR, PokemonType.STEEL, -1, 10, -1, 0, 5) + new SelfStatusMove(MoveId.SHIFT_GEAR, PokemonType.STEEL, -1, 10, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true), - new AttackMove(Moves.CIRCLE_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) + new AttackMove(MoveId.CIRCLE_THROW, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .hidesTarget(), - new AttackMove(Moves.INCINERATE, PokemonType.FIRE, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) + new AttackMove(MoveId.INCINERATE, PokemonType.FIRE, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) .target(MoveTarget.ALL_NEAR_ENEMIES) .attr(RemoveHeldItemAttr, true) .edgeCase(), // Should be able to remove items from pokemon with Sticky Hold if the damage causes them to faint - new StatusMove(Moves.QUASH, PokemonType.DARK, 100, 15, -1, 0, 5) + new StatusMove(MoveId.QUASH, PokemonType.DARK, 100, 15, -1, 0, 5) .condition(failIfSingleBattle) .condition((user, target, move) => !target.turnData.acted) .attr(ForceLastAttr), - new AttackMove(Moves.ACROBATICS, PokemonType.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5) + new AttackMove(MoveId.ACROBATICS, PokemonType.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5) .attr(MovePowerMultiplierAttr, (user, target, move) => Math.max(1, 2 - 0.2 * user.getHeldItems().filter(i => i.isTransferable).reduce((v, m) => v + m.stackCount, 0))), - new StatusMove(Moves.REFLECT_TYPE, PokemonType.NORMAL, -1, 15, -1, 0, 5) + new StatusMove(MoveId.REFLECT_TYPE, PokemonType.NORMAL, -1, 15, -1, 0, 5) .ignoresSubstitute() .attr(CopyTypeAttr), - new AttackMove(Moves.RETALIATE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5) + new AttackMove(MoveId.RETALIATE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5) .attr(MovePowerMultiplierAttr, (user, target, move) => { const turn = globalScene.currentBattle.turn; const lastPlayerFaint = globalScene.currentBattle.playerFaintsHistory[globalScene.currentBattle.playerFaintsHistory.length - 1]; @@ -9871,333 +9871,333 @@ export function initMoves() { (lastEnemyFaint !== undefined && turn - lastEnemyFaint.turn === 1 && !user.isPlayer()) ) ? 2 : 1; }), - new AttackMove(Moves.FINAL_GAMBIT, PokemonType.FIGHTING, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 5) + new AttackMove(MoveId.FINAL_GAMBIT, PokemonType.FIGHTING, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 5) .attr(UserHpDamageAttr) .attr(SacrificialAttrOnHit), - new StatusMove(Moves.BESTOW, PokemonType.NORMAL, -1, 15, -1, 0, 5) + new StatusMove(MoveId.BESTOW, PokemonType.NORMAL, -1, 15, -1, 0, 5) .ignoresProtect() .ignoresSubstitute() .unimplemented(), - new AttackMove(Moves.INFERNO, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 50, 5, 100, 0, 5) + new AttackMove(MoveId.INFERNO, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 50, 5, 100, 0, 5) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.WATER_PLEDGE, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) + new AttackMove(MoveId.WATER_PLEDGE, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) .attr(AwaitCombinedPledgeAttr) .attr(CombinedPledgeTypeAttr) .attr(CombinedPledgePowerAttr) .attr(CombinedPledgeStabBoostAttr) - .attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, Moves.FIRE_PLEDGE, true) - .attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, Moves.GRASS_PLEDGE) + .attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, MoveId.FIRE_PLEDGE, true) + .attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, MoveId.GRASS_PLEDGE) .attr(BypassRedirectAttr, true), - new AttackMove(Moves.FIRE_PLEDGE, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) + new AttackMove(MoveId.FIRE_PLEDGE, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) .attr(AwaitCombinedPledgeAttr) .attr(CombinedPledgeTypeAttr) .attr(CombinedPledgePowerAttr) .attr(CombinedPledgeStabBoostAttr) - .attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, Moves.GRASS_PLEDGE) - .attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, Moves.WATER_PLEDGE, true) + .attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, MoveId.GRASS_PLEDGE) + .attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, MoveId.WATER_PLEDGE, true) .attr(BypassRedirectAttr, true), - new AttackMove(Moves.GRASS_PLEDGE, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) + new AttackMove(MoveId.GRASS_PLEDGE, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) .attr(AwaitCombinedPledgeAttr) .attr(CombinedPledgeTypeAttr) .attr(CombinedPledgePowerAttr) .attr(CombinedPledgeStabBoostAttr) - .attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, Moves.WATER_PLEDGE) - .attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, Moves.FIRE_PLEDGE) + .attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, MoveId.WATER_PLEDGE) + .attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, MoveId.FIRE_PLEDGE) .attr(BypassRedirectAttr, true), - new AttackMove(Moves.VOLT_SWITCH, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 5) + new AttackMove(MoveId.VOLT_SWITCH, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 5) .attr(ForceSwitchOutAttr, true), - new AttackMove(Moves.STRUGGLE_BUG, PokemonType.BUG, MoveCategory.SPECIAL, 50, 100, 20, 100, 0, 5) + new AttackMove(MoveId.STRUGGLE_BUG, PokemonType.BUG, MoveCategory.SPECIAL, 50, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.BULLDOZE, PokemonType.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5) + new AttackMove(MoveId.BULLDOZE, PokemonType.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.FROST_BREATH, PokemonType.ICE, MoveCategory.SPECIAL, 60, 90, 10, -1, 0, 5) + new AttackMove(MoveId.FROST_BREATH, PokemonType.ICE, MoveCategory.SPECIAL, 60, 90, 10, -1, 0, 5) .attr(CritOnlyAttr), - new AttackMove(Moves.DRAGON_TAIL, PokemonType.DRAGON, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) + new AttackMove(MoveId.DRAGON_TAIL, PokemonType.DRAGON, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .hidesTarget(), - new SelfStatusMove(Moves.WORK_UP, PokemonType.NORMAL, -1, 30, -1, 0, 5) + new SelfStatusMove(MoveId.WORK_UP, PokemonType.NORMAL, -1, 30, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, true), - new AttackMove(Moves.ELECTROWEB, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) + new AttackMove(MoveId.ELECTROWEB, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.WILD_CHARGE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 5) + new AttackMove(MoveId.WILD_CHARGE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 5) .attr(RecoilAttr) .recklessMove(), - new AttackMove(Moves.DRILL_RUN, PokemonType.GROUND, MoveCategory.PHYSICAL, 80, 95, 10, -1, 0, 5) + new AttackMove(MoveId.DRILL_RUN, PokemonType.GROUND, MoveCategory.PHYSICAL, 80, 95, 10, -1, 0, 5) .attr(HighCritAttr), - new AttackMove(Moves.DUAL_CHOP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 40, 90, 15, -1, 0, 5) + new AttackMove(MoveId.DUAL_CHOP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 40, 90, 15, -1, 0, 5) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.HEART_STAMP, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 60, 100, 25, 30, 0, 5) + new AttackMove(MoveId.HEART_STAMP, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 60, 100, 25, 30, 0, 5) .attr(FlinchAttr), - new AttackMove(Moves.HORN_LEECH, PokemonType.GRASS, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 5) + new AttackMove(MoveId.HORN_LEECH, PokemonType.GRASS, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 5) .attr(HitHealAttr) .triageMove(), - new AttackMove(Moves.SACRED_SWORD, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 5) + new AttackMove(MoveId.SACRED_SWORD, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 5) .attr(IgnoreOpponentStatStagesAttr) .slicingMove(), - new AttackMove(Moves.RAZOR_SHELL, PokemonType.WATER, MoveCategory.PHYSICAL, 75, 95, 10, 50, 0, 5) + new AttackMove(MoveId.RAZOR_SHELL, PokemonType.WATER, MoveCategory.PHYSICAL, 75, 95, 10, 50, 0, 5) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .slicingMove(), - new AttackMove(Moves.HEAT_CRASH, PokemonType.FIRE, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5) + new AttackMove(MoveId.HEAT_CRASH, PokemonType.FIRE, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5) .attr(AlwaysHitMinimizeAttr) .attr(CompareWeightPowerAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED), - new AttackMove(Moves.LEAF_TORNADO, PokemonType.GRASS, MoveCategory.SPECIAL, 65, 90, 10, 50, 0, 5) + new AttackMove(MoveId.LEAF_TORNADO, PokemonType.GRASS, MoveCategory.SPECIAL, 65, 90, 10, 50, 0, 5) .attr(StatStageChangeAttr, [ Stat.ACC ], -1), - new AttackMove(Moves.STEAMROLLER, PokemonType.BUG, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 5) + new AttackMove(MoveId.STEAMROLLER, PokemonType.BUG, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 5) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(FlinchAttr), - new SelfStatusMove(Moves.COTTON_GUARD, PokemonType.GRASS, -1, 10, -1, 0, 5) + new SelfStatusMove(MoveId.COTTON_GUARD, PokemonType.GRASS, -1, 10, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.DEF ], 3, true), - new AttackMove(Moves.NIGHT_DAZE, PokemonType.DARK, MoveCategory.SPECIAL, 85, 95, 10, 40, 0, 5) + new AttackMove(MoveId.NIGHT_DAZE, PokemonType.DARK, MoveCategory.SPECIAL, 85, 95, 10, 40, 0, 5) .attr(StatStageChangeAttr, [ Stat.ACC ], -1), - new AttackMove(Moves.PSYSTRIKE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 5) + new AttackMove(MoveId.PSYSTRIKE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 5) .attr(DefDefAttr), - new AttackMove(Moves.TAIL_SLAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 25, 85, 10, -1, 0, 5) + new AttackMove(MoveId.TAIL_SLAP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 25, 85, 10, -1, 0, 5) .attr(MultiHitAttr), - new AttackMove(Moves.HURRICANE, PokemonType.FLYING, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 5) + new AttackMove(MoveId.HURRICANE, PokemonType.FLYING, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 5) .attr(ThunderAccuracyAttr) .attr(ConfuseAttr) .attr(HitsTagAttr, BattlerTagType.FLYING) .windMove(), - new AttackMove(Moves.HEAD_CHARGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 5) + new AttackMove(MoveId.HEAD_CHARGE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 5) .attr(RecoilAttr) .recklessMove(), - new AttackMove(Moves.GEAR_GRIND, PokemonType.STEEL, MoveCategory.PHYSICAL, 50, 85, 15, -1, 0, 5) + new AttackMove(MoveId.GEAR_GRIND, PokemonType.STEEL, MoveCategory.PHYSICAL, 50, 85, 15, -1, 0, 5) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.SEARING_SHOT, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 100, 5, 30, 0, 5) + new AttackMove(MoveId.SEARING_SHOT, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 100, 5, 30, 0, 5) .attr(StatusEffectAttr, StatusEffect.BURN) .ballBombMove() .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.TECHNO_BLAST, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 5) + new AttackMove(MoveId.TECHNO_BLAST, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 5) .attr(TechnoBlastTypeAttr), - new AttackMove(Moves.RELIC_SONG, PokemonType.NORMAL, MoveCategory.SPECIAL, 75, 100, 10, 10, 0, 5) + new AttackMove(MoveId.RELIC_SONG, PokemonType.NORMAL, MoveCategory.SPECIAL, 75, 100, 10, 10, 0, 5) .attr(StatusEffectAttr, StatusEffect.SLEEP) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.SECRET_SWORD, PokemonType.FIGHTING, MoveCategory.SPECIAL, 85, 100, 10, -1, 0, 5) + new AttackMove(MoveId.SECRET_SWORD, PokemonType.FIGHTING, MoveCategory.SPECIAL, 85, 100, 10, -1, 0, 5) .attr(DefDefAttr) .slicingMove(), - new AttackMove(Moves.GLACIATE, PokemonType.ICE, MoveCategory.SPECIAL, 65, 95, 10, 100, 0, 5) + new AttackMove(MoveId.GLACIATE, PokemonType.ICE, MoveCategory.SPECIAL, 65, 95, 10, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.BOLT_STRIKE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 130, 85, 5, 20, 0, 5) + new AttackMove(MoveId.BOLT_STRIKE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 130, 85, 5, 20, 0, 5) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.BLUE_FLARE, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 85, 5, 20, 0, 5) + new AttackMove(MoveId.BLUE_FLARE, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 85, 5, 20, 0, 5) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.FIERY_DANCE, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, 50, 0, 5) + new AttackMove(MoveId.FIERY_DANCE, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, 50, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) .danceMove(), - new ChargingAttackMove(Moves.FREEZE_SHOCK, PokemonType.ICE, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 5) + new ChargingAttackMove(MoveId.FREEZE_SHOCK, PokemonType.ICE, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 5) .chargeText(i18next.t("moveTriggers:becameCloakedInFreezingLight", { pokemonName: "{USER}" })) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .makesContact(false), - new ChargingAttackMove(Moves.ICE_BURN, PokemonType.ICE, MoveCategory.SPECIAL, 140, 90, 5, 30, 0, 5) + new ChargingAttackMove(MoveId.ICE_BURN, PokemonType.ICE, MoveCategory.SPECIAL, 140, 90, 5, 30, 0, 5) .chargeText(i18next.t("moveTriggers:becameCloakedInFreezingAir", { pokemonName: "{USER}" })) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.SNARL, PokemonType.DARK, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) + new AttackMove(MoveId.SNARL, PokemonType.DARK, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.ICICLE_CRASH, PokemonType.ICE, MoveCategory.PHYSICAL, 85, 90, 10, 30, 0, 5) + new AttackMove(MoveId.ICICLE_CRASH, PokemonType.ICE, MoveCategory.PHYSICAL, 85, 90, 10, 30, 0, 5) .attr(FlinchAttr) .makesContact(false), - new AttackMove(Moves.V_CREATE, PokemonType.FIRE, MoveCategory.PHYSICAL, 180, 95, 5, -1, 0, 5) + new AttackMove(MoveId.V_CREATE, PokemonType.FIRE, MoveCategory.PHYSICAL, 180, 95, 5, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF, Stat.SPD ], -1, true), - new AttackMove(Moves.FUSION_FLARE, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 5) + new AttackMove(MoveId.FUSION_FLARE, PokemonType.FIRE, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 5) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) - .attr(LastMoveDoublePowerAttr, Moves.FUSION_BOLT), - new AttackMove(Moves.FUSION_BOLT, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 5) - .attr(LastMoveDoublePowerAttr, Moves.FUSION_FLARE) + .attr(LastMoveDoublePowerAttr, MoveId.FUSION_BOLT), + new AttackMove(MoveId.FUSION_BOLT, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 5) + .attr(LastMoveDoublePowerAttr, MoveId.FUSION_FLARE) .makesContact(false), - new AttackMove(Moves.FLYING_PRESS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 6) + new AttackMove(MoveId.FLYING_PRESS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 6) .attr(AlwaysHitMinimizeAttr) .attr(FlyingTypeMultiplierAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .condition(failOnGravityCondition), - new StatusMove(Moves.MAT_BLOCK, PokemonType.FIGHTING, -1, 10, -1, 0, 6) + new StatusMove(MoveId.MAT_BLOCK, PokemonType.FIGHTING, -1, 10, -1, 0, 6) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.MAT_BLOCK, 1, true, true) .condition(new FirstMoveCondition()) .condition(failIfLastCondition), - new AttackMove(Moves.BELCH, PokemonType.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6) + new AttackMove(MoveId.BELCH, PokemonType.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6) .condition((user, target, move) => user.battleData.hasEatenBerry), - new StatusMove(Moves.ROTOTILLER, PokemonType.GROUND, -1, 10, -1, 0, 6) + new StatusMove(MoveId.ROTOTILLER, PokemonType.GROUND, -1, 10, -1, 0, 6) .target(MoveTarget.ALL) .condition((user, target, move) => { // If any fielded pokémon is grass-type and grounded. return [ ...globalScene.getEnemyParty(), ...globalScene.getPlayerParty() ].some((poke) => poke.isOfType(PokemonType.GRASS) && poke.isGrounded()); }) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, { condition: (user, target, move) => target.isOfType(PokemonType.GRASS) && target.isGrounded() }), - new StatusMove(Moves.STICKY_WEB, PokemonType.BUG, -1, 20, -1, 0, 6) + new StatusMove(MoveId.STICKY_WEB, PokemonType.BUG, -1, 20, -1, 0, 6) .attr(AddArenaTrapTagAttr, ArenaTagType.STICKY_WEB) .target(MoveTarget.ENEMY_SIDE) .reflectable(), - new AttackMove(Moves.FELL_STINGER, PokemonType.BUG, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 6) + new AttackMove(MoveId.FELL_STINGER, PokemonType.BUG, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 6) .attr(PostVictoryStatStageChangeAttr, [ Stat.ATK ], 3, true ), - new ChargingAttackMove(Moves.PHANTOM_FORCE, PokemonType.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) + new ChargingAttackMove(MoveId.PHANTOM_FORCE, PokemonType.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) .chargeText(i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.HIDDEN) .ignoresProtect(), - new StatusMove(Moves.TRICK_OR_TREAT, PokemonType.GHOST, 100, 20, -1, 0, 6) + new StatusMove(MoveId.TRICK_OR_TREAT, PokemonType.GHOST, 100, 20, -1, 0, 6) .attr(AddTypeAttr, PokemonType.GHOST) .reflectable(), - new StatusMove(Moves.NOBLE_ROAR, PokemonType.NORMAL, 100, 30, -1, 0, 6) + new StatusMove(MoveId.NOBLE_ROAR, PokemonType.NORMAL, 100, 30, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) .soundBased() .reflectable(), - new StatusMove(Moves.ION_DELUGE, PokemonType.ELECTRIC, -1, 25, -1, 1, 6) + new StatusMove(MoveId.ION_DELUGE, PokemonType.ELECTRIC, -1, 25, -1, 1, 6) .attr(AddArenaTagAttr, ArenaTagType.ION_DELUGE) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.PARABOLIC_CHARGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 65, 100, 20, -1, 0, 6) + new AttackMove(MoveId.PARABOLIC_CHARGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 65, 100, 20, -1, 0, 6) .attr(HitHealAttr) .target(MoveTarget.ALL_NEAR_OTHERS) .triageMove(), - new StatusMove(Moves.FORESTS_CURSE, PokemonType.GRASS, 100, 20, -1, 0, 6) + new StatusMove(MoveId.FORESTS_CURSE, PokemonType.GRASS, 100, 20, -1, 0, 6) .attr(AddTypeAttr, PokemonType.GRASS) .reflectable(), - new AttackMove(Moves.PETAL_BLIZZARD, PokemonType.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 6) + new AttackMove(MoveId.PETAL_BLIZZARD, PokemonType.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 6) .windMove() .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.FREEZE_DRY, PokemonType.ICE, MoveCategory.SPECIAL, 70, 100, 20, 10, 0, 6) + new AttackMove(MoveId.FREEZE_DRY, PokemonType.ICE, MoveCategory.SPECIAL, 70, 100, 20, 10, 0, 6) .attr(StatusEffectAttr, StatusEffect.FREEZE) .attr(FreezeDryAttr), - new AttackMove(Moves.DISARMING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 40, -1, 15, -1, 0, 6) + new AttackMove(MoveId.DISARMING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 40, -1, 15, -1, 0, 6) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.PARTING_SHOT, PokemonType.DARK, 100, 20, -1, 0, 6) + new StatusMove(MoveId.PARTING_SHOT, PokemonType.DARK, 100, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, false, { trigger: MoveEffectTrigger.PRE_APPLY }) .attr(ForceSwitchOutAttr, true) .soundBased() .reflectable(), - new StatusMove(Moves.TOPSY_TURVY, PokemonType.DARK, -1, 20, -1, 0, 6) + new StatusMove(MoveId.TOPSY_TURVY, PokemonType.DARK, -1, 20, -1, 0, 6) .attr(InvertStatsAttr) .reflectable(), - new AttackMove(Moves.DRAINING_KISS, PokemonType.FAIRY, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 6) + new AttackMove(MoveId.DRAINING_KISS, PokemonType.FAIRY, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 6) .attr(HitHealAttr, 0.75) .makesContact() .triageMove(), - new StatusMove(Moves.CRAFTY_SHIELD, PokemonType.FAIRY, -1, 10, -1, 3, 6) + new StatusMove(MoveId.CRAFTY_SHIELD, PokemonType.FAIRY, -1, 10, -1, 3, 6) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.CRAFTY_SHIELD, 1, true, true) .condition(failIfLastCondition), - new StatusMove(Moves.FLOWER_SHIELD, PokemonType.FAIRY, -1, 10, -1, 0, 6) + new StatusMove(MoveId.FLOWER_SHIELD, PokemonType.FAIRY, -1, 10, -1, 0, 6) .target(MoveTarget.ALL) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, false, { condition: (user, target, move) => target.getTypes().includes(PokemonType.GRASS) && !target.getTag(SemiInvulnerableTag) }), - new StatusMove(Moves.GRASSY_TERRAIN, PokemonType.GRASS, -1, 10, -1, 0, 6) + new StatusMove(MoveId.GRASSY_TERRAIN, PokemonType.GRASS, -1, 10, -1, 0, 6) .attr(TerrainChangeAttr, TerrainType.GRASSY) .target(MoveTarget.BOTH_SIDES), - new StatusMove(Moves.MISTY_TERRAIN, PokemonType.FAIRY, -1, 10, -1, 0, 6) + new StatusMove(MoveId.MISTY_TERRAIN, PokemonType.FAIRY, -1, 10, -1, 0, 6) .attr(TerrainChangeAttr, TerrainType.MISTY) .target(MoveTarget.BOTH_SIDES), - new StatusMove(Moves.ELECTRIFY, PokemonType.ELECTRIC, -1, 20, -1, 0, 6) + new StatusMove(MoveId.ELECTRIFY, PokemonType.ELECTRIC, -1, 20, -1, 0, 6) .attr(AddBattlerTagAttr, BattlerTagType.ELECTRIFIED, false, true), - new AttackMove(Moves.PLAY_ROUGH, PokemonType.FAIRY, MoveCategory.PHYSICAL, 90, 90, 10, 10, 0, 6) + new AttackMove(MoveId.PLAY_ROUGH, PokemonType.FAIRY, MoveCategory.PHYSICAL, 90, 90, 10, 10, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new AttackMove(Moves.FAIRY_WIND, PokemonType.FAIRY, MoveCategory.SPECIAL, 40, 100, 30, -1, 0, 6) + new AttackMove(MoveId.FAIRY_WIND, PokemonType.FAIRY, MoveCategory.SPECIAL, 40, 100, 30, -1, 0, 6) .windMove(), - new AttackMove(Moves.MOONBLAST, PokemonType.FAIRY, MoveCategory.SPECIAL, 95, 100, 15, 30, 0, 6) + new AttackMove(MoveId.MOONBLAST, PokemonType.FAIRY, MoveCategory.SPECIAL, 95, 100, 15, 30, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), - new AttackMove(Moves.BOOMBURST, PokemonType.NORMAL, MoveCategory.SPECIAL, 140, 100, 10, -1, 0, 6) + new AttackMove(MoveId.BOOMBURST, PokemonType.NORMAL, MoveCategory.SPECIAL, 140, 100, 10, -1, 0, 6) .soundBased() .target(MoveTarget.ALL_NEAR_OTHERS), - new StatusMove(Moves.FAIRY_LOCK, PokemonType.FAIRY, -1, 10, -1, 0, 6) + new StatusMove(MoveId.FAIRY_LOCK, PokemonType.FAIRY, -1, 10, -1, 0, 6) .ignoresSubstitute() .ignoresProtect() .target(MoveTarget.BOTH_SIDES) .attr(AddArenaTagAttr, ArenaTagType.FAIRY_LOCK, 2, true), - new SelfStatusMove(Moves.KINGS_SHIELD, PokemonType.STEEL, -1, 10, -1, 4, 6) + new SelfStatusMove(MoveId.KINGS_SHIELD, PokemonType.STEEL, -1, 10, -1, 4, 6) .attr(ProtectAttr, BattlerTagType.KINGS_SHIELD) .condition(failIfLastCondition), - new StatusMove(Moves.PLAY_NICE, PokemonType.NORMAL, -1, 20, -1, 0, 6) + new StatusMove(MoveId.PLAY_NICE, PokemonType.NORMAL, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .ignoresSubstitute() .reflectable(), - new StatusMove(Moves.CONFIDE, PokemonType.NORMAL, -1, 20, -1, 0, 6) + new StatusMove(MoveId.CONFIDE, PokemonType.NORMAL, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) .soundBased() .reflectable(), - new AttackMove(Moves.DIAMOND_STORM, PokemonType.ROCK, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 6) + new AttackMove(MoveId.DIAMOND_STORM, PokemonType.ROCK, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 6) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true, { firstTargetOnly: true }) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.STEAM_ERUPTION, PokemonType.WATER, MoveCategory.SPECIAL, 110, 95, 5, 30, 0, 6) + new AttackMove(MoveId.STEAM_ERUPTION, PokemonType.WATER, MoveCategory.SPECIAL, 110, 95, 5, 30, 0, 6) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.HYPERSPACE_HOLE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, -1, 5, -1, 0, 6) + new AttackMove(MoveId.HYPERSPACE_HOLE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, -1, 5, -1, 0, 6) .ignoresProtect() .ignoresSubstitute(), - new AttackMove(Moves.WATER_SHURIKEN, PokemonType.WATER, MoveCategory.SPECIAL, 15, 100, 20, -1, 1, 6) + new AttackMove(MoveId.WATER_SHURIKEN, PokemonType.WATER, MoveCategory.SPECIAL, 15, 100, 20, -1, 1, 6) .attr(MultiHitAttr) .attr(WaterShurikenPowerAttr) .attr(WaterShurikenMultiHitTypeAttr), - new AttackMove(Moves.MYSTICAL_FIRE, PokemonType.FIRE, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 6) + new AttackMove(MoveId.MYSTICAL_FIRE, PokemonType.FIRE, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), - new SelfStatusMove(Moves.SPIKY_SHIELD, PokemonType.GRASS, -1, 10, -1, 4, 6) + new SelfStatusMove(MoveId.SPIKY_SHIELD, PokemonType.GRASS, -1, 10, -1, 4, 6) .attr(ProtectAttr, BattlerTagType.SPIKY_SHIELD) .condition(failIfLastCondition), - new StatusMove(Moves.AROMATIC_MIST, PokemonType.FAIRY, -1, 20, -1, 0, 6) + new StatusMove(MoveId.AROMATIC_MIST, PokemonType.FAIRY, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 1) .ignoresSubstitute() .condition(failIfSingleBattle) .target(MoveTarget.NEAR_ALLY), - new StatusMove(Moves.EERIE_IMPULSE, PokemonType.ELECTRIC, 100, 15, -1, 0, 6) + new StatusMove(MoveId.EERIE_IMPULSE, PokemonType.ELECTRIC, 100, 15, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2) .reflectable(), - new StatusMove(Moves.VENOM_DRENCH, PokemonType.POISON, 100, 20, -1, 0, 6) + new StatusMove(MoveId.VENOM_DRENCH, PokemonType.POISON, 100, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK, Stat.SPD ], -1, false, { condition: (user, target, move) => target.status?.effect === StatusEffect.POISON || target.status?.effect === StatusEffect.TOXIC }) .target(MoveTarget.ALL_NEAR_ENEMIES) .reflectable(), - new StatusMove(Moves.POWDER, PokemonType.BUG, 100, 20, -1, 1, 6) + new StatusMove(MoveId.POWDER, PokemonType.BUG, 100, 20, -1, 1, 6) .attr(AddBattlerTagAttr, BattlerTagType.POWDER, false, true) .ignoresSubstitute() .powderMove() .reflectable(), - new ChargingSelfStatusMove(Moves.GEOMANCY, PokemonType.FAIRY, -1, 10, -1, 0, 6) + new ChargingSelfStatusMove(MoveId.GEOMANCY, PokemonType.FAIRY, -1, 10, -1, 0, 6) .chargeText(i18next.t("moveTriggers:isChargingPower", { pokemonName: "{USER}" })) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true), - new StatusMove(Moves.MAGNETIC_FLUX, PokemonType.ELECTRIC, -1, 20, -1, 0, 6) + new StatusMove(MoveId.MAGNETIC_FLUX, PokemonType.ELECTRIC, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, false, { condition: (user, target, move) => !![ AbilityId.PLUS, AbilityId.MINUS ].find(a => target.hasAbility(a, false)) }) .ignoresSubstitute() .target(MoveTarget.USER_AND_ALLIES) .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ AbilityId.PLUS, AbilityId.MINUS ].find(a => p?.hasAbility(a, false)))), - new StatusMove(Moves.HAPPY_HOUR, PokemonType.NORMAL, -1, 30, -1, 0, 6) // No animation + new StatusMove(MoveId.HAPPY_HOUR, PokemonType.NORMAL, -1, 30, -1, 0, 6) // No animation .attr(AddArenaTagAttr, ArenaTagType.HAPPY_HOUR, null, true) .target(MoveTarget.USER_SIDE), - new StatusMove(Moves.ELECTRIC_TERRAIN, PokemonType.ELECTRIC, -1, 10, -1, 0, 6) + new StatusMove(MoveId.ELECTRIC_TERRAIN, PokemonType.ELECTRIC, -1, 10, -1, 0, 6) .attr(TerrainChangeAttr, TerrainType.ELECTRIC) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.DAZZLING_GLEAM, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6) + new AttackMove(MoveId.DAZZLING_GLEAM, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6) .target(MoveTarget.ALL_NEAR_ENEMIES), - new SelfStatusMove(Moves.CELEBRATE, PokemonType.NORMAL, -1, 40, -1, 0, 6) + new SelfStatusMove(MoveId.CELEBRATE, PokemonType.NORMAL, -1, 40, -1, 0, 6) .attr(CelebrateAttr), - new StatusMove(Moves.HOLD_HANDS, PokemonType.NORMAL, -1, 40, -1, 0, 6) + new StatusMove(MoveId.HOLD_HANDS, PokemonType.NORMAL, -1, 40, -1, 0, 6) .ignoresSubstitute() .target(MoveTarget.NEAR_ALLY), - new StatusMove(Moves.BABY_DOLL_EYES, PokemonType.FAIRY, 100, 30, -1, 1, 6) + new StatusMove(MoveId.BABY_DOLL_EYES, PokemonType.FAIRY, 100, 30, -1, 1, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .reflectable(), - new AttackMove(Moves.NUZZLE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 20, 100, 20, 100, 0, 6) + new AttackMove(MoveId.NUZZLE, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 20, 100, 20, 100, 0, 6) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.HOLD_BACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 6) + new AttackMove(MoveId.HOLD_BACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 6) .attr(SurviveDamageAttr), - new AttackMove(Moves.INFESTATION, PokemonType.BUG, MoveCategory.SPECIAL, 20, 100, 20, -1, 0, 6) + new AttackMove(MoveId.INFESTATION, PokemonType.BUG, MoveCategory.SPECIAL, 20, 100, 20, -1, 0, 6) .makesContact() .attr(TrapAttr, BattlerTagType.INFESTATION), - new AttackMove(Moves.POWER_UP_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 20, 100, 0, 6) + new AttackMove(MoveId.POWER_UP_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 20, 100, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true) .punchingMove(), - new AttackMove(Moves.OBLIVION_WING, PokemonType.FLYING, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6) + new AttackMove(MoveId.OBLIVION_WING, PokemonType.FLYING, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6) .attr(HitHealAttr, 0.75) .triageMove(), - new AttackMove(Moves.THOUSAND_ARROWS, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) + new AttackMove(MoveId.THOUSAND_ARROWS, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) .attr(NeutralDamageAgainstFlyingTypeMultiplierAttr) .attr(FallDownAttr) .attr(HitsTagAttr, BattlerTagType.FLYING) @@ -10206,176 +10206,176 @@ export function initMoves() { .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.FLOATING, BattlerTagType.TELEKINESIS ]) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.THOUSAND_WAVES, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) + new AttackMove(MoveId.THOUSAND_WAVES, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.LANDS_WRATH, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) + new AttackMove(MoveId.LANDS_WRATH, PokemonType.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.LIGHT_OF_RUIN, PokemonType.FAIRY, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 6) + new AttackMove(MoveId.LIGHT_OF_RUIN, PokemonType.FAIRY, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 6) .attr(RecoilAttr, false, 0.5) .recklessMove(), - new AttackMove(Moves.ORIGIN_PULSE, PokemonType.WATER, MoveCategory.SPECIAL, 110, 85, 10, -1, 0, 6) + new AttackMove(MoveId.ORIGIN_PULSE, PokemonType.WATER, MoveCategory.SPECIAL, 110, 85, 10, -1, 0, 6) .pulseMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.PRECIPICE_BLADES, PokemonType.GROUND, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 6) + new AttackMove(MoveId.PRECIPICE_BLADES, PokemonType.GROUND, MoveCategory.PHYSICAL, 120, 85, 10, -1, 0, 6) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.DRAGON_ASCENT, PokemonType.FLYING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 6) + new AttackMove(MoveId.DRAGON_ASCENT, PokemonType.FLYING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true), - new AttackMove(Moves.HYPERSPACE_FURY, PokemonType.DARK, MoveCategory.PHYSICAL, 100, -1, 5, -1, 0, 6) + new AttackMove(MoveId.HYPERSPACE_FURY, PokemonType.DARK, MoveCategory.PHYSICAL, 100, -1, 5, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.DEF ], -1, true) .ignoresSubstitute() .makesContact(false) .ignoresProtect(), /* Unused */ - new AttackMove(Moves.BREAKNECK_BLITZ__PHYSICAL, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BREAKNECK_BLITZ__PHYSICAL, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.BREAKNECK_BLITZ__SPECIAL, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BREAKNECK_BLITZ__SPECIAL, PokemonType.NORMAL, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.ALL_OUT_PUMMELING__PHYSICAL, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.ALL_OUT_PUMMELING__PHYSICAL, PokemonType.FIGHTING, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.ALL_OUT_PUMMELING__SPECIAL, PokemonType.FIGHTING, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.ALL_OUT_PUMMELING__SPECIAL, PokemonType.FIGHTING, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SUPERSONIC_SKYSTRIKE__PHYSICAL, PokemonType.FLYING, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SUPERSONIC_SKYSTRIKE__PHYSICAL, PokemonType.FLYING, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SUPERSONIC_SKYSTRIKE__SPECIAL, PokemonType.FLYING, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SUPERSONIC_SKYSTRIKE__SPECIAL, PokemonType.FLYING, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.ACID_DOWNPOUR__PHYSICAL, PokemonType.POISON, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.ACID_DOWNPOUR__PHYSICAL, PokemonType.POISON, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.ACID_DOWNPOUR__SPECIAL, PokemonType.POISON, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.ACID_DOWNPOUR__SPECIAL, PokemonType.POISON, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.TECTONIC_RAGE__PHYSICAL, PokemonType.GROUND, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.TECTONIC_RAGE__PHYSICAL, PokemonType.GROUND, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.TECTONIC_RAGE__SPECIAL, PokemonType.GROUND, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.TECTONIC_RAGE__SPECIAL, PokemonType.GROUND, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.CONTINENTAL_CRUSH__PHYSICAL, PokemonType.ROCK, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.CONTINENTAL_CRUSH__PHYSICAL, PokemonType.ROCK, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.CONTINENTAL_CRUSH__SPECIAL, PokemonType.ROCK, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.CONTINENTAL_CRUSH__SPECIAL, PokemonType.ROCK, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SAVAGE_SPIN_OUT__PHYSICAL, PokemonType.BUG, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SAVAGE_SPIN_OUT__PHYSICAL, PokemonType.BUG, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SAVAGE_SPIN_OUT__SPECIAL, PokemonType.BUG, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SAVAGE_SPIN_OUT__SPECIAL, PokemonType.BUG, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.NEVER_ENDING_NIGHTMARE__PHYSICAL, PokemonType.GHOST, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.NEVER_ENDING_NIGHTMARE__PHYSICAL, PokemonType.GHOST, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.NEVER_ENDING_NIGHTMARE__SPECIAL, PokemonType.GHOST, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.NEVER_ENDING_NIGHTMARE__SPECIAL, PokemonType.GHOST, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.CORKSCREW_CRASH__PHYSICAL, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.CORKSCREW_CRASH__PHYSICAL, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.CORKSCREW_CRASH__SPECIAL, PokemonType.STEEL, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.CORKSCREW_CRASH__SPECIAL, PokemonType.STEEL, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.INFERNO_OVERDRIVE__PHYSICAL, PokemonType.FIRE, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.INFERNO_OVERDRIVE__PHYSICAL, PokemonType.FIRE, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.INFERNO_OVERDRIVE__SPECIAL, PokemonType.FIRE, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.INFERNO_OVERDRIVE__SPECIAL, PokemonType.FIRE, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.HYDRO_VORTEX__PHYSICAL, PokemonType.WATER, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.HYDRO_VORTEX__PHYSICAL, PokemonType.WATER, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.HYDRO_VORTEX__SPECIAL, PokemonType.WATER, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.HYDRO_VORTEX__SPECIAL, PokemonType.WATER, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.BLOOM_DOOM__PHYSICAL, PokemonType.GRASS, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BLOOM_DOOM__PHYSICAL, PokemonType.GRASS, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.BLOOM_DOOM__SPECIAL, PokemonType.GRASS, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BLOOM_DOOM__SPECIAL, PokemonType.GRASS, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.GIGAVOLT_HAVOC__PHYSICAL, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.GIGAVOLT_HAVOC__PHYSICAL, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.GIGAVOLT_HAVOC__SPECIAL, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.GIGAVOLT_HAVOC__SPECIAL, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SHATTERED_PSYCHE__PHYSICAL, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SHATTERED_PSYCHE__PHYSICAL, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SHATTERED_PSYCHE__SPECIAL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SHATTERED_PSYCHE__SPECIAL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SUBZERO_SLAMMER__PHYSICAL, PokemonType.ICE, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SUBZERO_SLAMMER__PHYSICAL, PokemonType.ICE, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SUBZERO_SLAMMER__SPECIAL, PokemonType.ICE, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SUBZERO_SLAMMER__SPECIAL, PokemonType.ICE, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.DEVASTATING_DRAKE__PHYSICAL, PokemonType.DRAGON, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.DEVASTATING_DRAKE__PHYSICAL, PokemonType.DRAGON, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.DEVASTATING_DRAKE__SPECIAL, PokemonType.DRAGON, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.DEVASTATING_DRAKE__SPECIAL, PokemonType.DRAGON, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.BLACK_HOLE_ECLIPSE__PHYSICAL, PokemonType.DARK, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BLACK_HOLE_ECLIPSE__PHYSICAL, PokemonType.DARK, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.BLACK_HOLE_ECLIPSE__SPECIAL, PokemonType.DARK, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.BLACK_HOLE_ECLIPSE__SPECIAL, PokemonType.DARK, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.TWINKLE_TACKLE__PHYSICAL, PokemonType.FAIRY, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.TWINKLE_TACKLE__PHYSICAL, PokemonType.FAIRY, MoveCategory.PHYSICAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.TWINKLE_TACKLE__SPECIAL, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.TWINKLE_TACKLE__SPECIAL, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.CATASTROPIKA, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) + new AttackMove(MoveId.CATASTROPIKA, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) .unimplemented(), /* End Unused */ - new SelfStatusMove(Moves.SHORE_UP, PokemonType.GROUND, -1, 5, -1, 0, 7) + new SelfStatusMove(MoveId.SHORE_UP, PokemonType.GROUND, -1, 5, -1, 0, 7) .attr(SandHealAttr) .triageMove(), - new AttackMove(Moves.FIRST_IMPRESSION, PokemonType.BUG, MoveCategory.PHYSICAL, 90, 100, 10, -1, 2, 7) + new AttackMove(MoveId.FIRST_IMPRESSION, PokemonType.BUG, MoveCategory.PHYSICAL, 90, 100, 10, -1, 2, 7) .condition(new FirstMoveCondition()), - new SelfStatusMove(Moves.BANEFUL_BUNKER, PokemonType.POISON, -1, 10, -1, 4, 7) + new SelfStatusMove(MoveId.BANEFUL_BUNKER, PokemonType.POISON, -1, 10, -1, 4, 7) .attr(ProtectAttr, BattlerTagType.BANEFUL_BUNKER) .condition(failIfLastCondition), - new AttackMove(Moves.SPIRIT_SHACKLE, PokemonType.GHOST, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 7) + new AttackMove(MoveId.SPIRIT_SHACKLE, PokemonType.GHOST, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true) .makesContact(false), - new AttackMove(Moves.DARKEST_LARIAT, PokemonType.DARK, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 7) + new AttackMove(MoveId.DARKEST_LARIAT, PokemonType.DARK, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 7) .attr(IgnoreOpponentStatStagesAttr), - new AttackMove(Moves.SPARKLING_ARIA, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 10, 100, 0, 7) + new AttackMove(MoveId.SPARKLING_ARIA, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 10, 100, 0, 7) .attr(HealStatusEffectAttr, false, StatusEffect.BURN) .soundBased() .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.ICE_HAMMER, PokemonType.ICE, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 7) + new AttackMove(MoveId.ICE_HAMMER, PokemonType.ICE, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.SPD ], -1, true) .punchingMove(), - new StatusMove(Moves.FLORAL_HEALING, PokemonType.FAIRY, -1, 10, -1, 0, 7) + new StatusMove(MoveId.FLORAL_HEALING, PokemonType.FAIRY, -1, 10, -1, 0, 7) .attr(BoostHealAttr, 0.5, 2 / 3, true, false, (user, target, move) => globalScene.arena.terrain?.terrainType === TerrainType.GRASSY) .triageMove() .reflectable(), - new AttackMove(Moves.HIGH_HORSEPOWER, PokemonType.GROUND, MoveCategory.PHYSICAL, 95, 95, 10, -1, 0, 7), - new StatusMove(Moves.STRENGTH_SAP, PokemonType.GRASS, 100, 10, -1, 0, 7) + new AttackMove(MoveId.HIGH_HORSEPOWER, PokemonType.GROUND, MoveCategory.PHYSICAL, 95, 95, 10, -1, 0, 7), + new StatusMove(MoveId.STRENGTH_SAP, PokemonType.GRASS, 100, 10, -1, 0, 7) .attr(HitHealAttr, null, Stat.ATK) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .condition((user, target, move) => target.getStatStage(Stat.ATK) > -6) .triageMove() .reflectable(), - new ChargingAttackMove(Moves.SOLAR_BLADE, PokemonType.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) + new ChargingAttackMove(MoveId.SOLAR_BLADE, PokemonType.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) .chargeText(i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]) .attr(AntiSunlightPowerDecreaseAttr) .slicingMove(), - new AttackMove(Moves.LEAFAGE, PokemonType.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 7) + new AttackMove(MoveId.LEAFAGE, PokemonType.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 7) .makesContact(false), - new StatusMove(Moves.SPOTLIGHT, PokemonType.NORMAL, -1, 15, -1, 3, 7) + new StatusMove(MoveId.SPOTLIGHT, PokemonType.NORMAL, -1, 15, -1, 3, 7) .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, false) .condition(failIfSingleBattle) .reflectable(), - new StatusMove(Moves.TOXIC_THREAD, PokemonType.POISON, 100, 20, -1, 0, 7) + new StatusMove(MoveId.TOXIC_THREAD, PokemonType.POISON, 100, 20, -1, 0, 7) .attr(StatusEffectAttr, StatusEffect.POISON) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .reflectable(), - new SelfStatusMove(Moves.LASER_FOCUS, PokemonType.NORMAL, -1, 30, -1, 0, 7) + new SelfStatusMove(MoveId.LASER_FOCUS, PokemonType.NORMAL, -1, 30, -1, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_CRIT, true, false), - new StatusMove(Moves.GEAR_UP, PokemonType.STEEL, -1, 20, -1, 0, 7) + new StatusMove(MoveId.GEAR_UP, PokemonType.STEEL, -1, 20, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, { condition: (user, target, move) => !![ AbilityId.PLUS, AbilityId.MINUS ].find(a => target.hasAbility(a, false)) }) .ignoresSubstitute() .target(MoveTarget.USER_AND_ALLIES) .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ AbilityId.PLUS, AbilityId.MINUS ].find(a => p?.hasAbility(a, false)))), - new AttackMove(Moves.THROAT_CHOP, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) + new AttackMove(MoveId.THROAT_CHOP, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.THROAT_CHOPPED), - new AttackMove(Moves.POLLEN_PUFF, PokemonType.BUG, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) + new AttackMove(MoveId.POLLEN_PUFF, PokemonType.BUG, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) .attr(StatusCategoryOnAllyAttr) .attr(HealOnAllyAttr, 0.5, true, false) .ballBombMove(), - new AttackMove(Moves.ANCHOR_SHOT, PokemonType.STEEL, MoveCategory.PHYSICAL, 80, 100, 20, 100, 0, 7) + new AttackMove(MoveId.ANCHOR_SHOT, PokemonType.STEEL, MoveCategory.PHYSICAL, 80, 100, 20, 100, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true), - new StatusMove(Moves.PSYCHIC_TERRAIN, PokemonType.PSYCHIC, -1, 10, -1, 0, 7) + new StatusMove(MoveId.PSYCHIC_TERRAIN, PokemonType.PSYCHIC, -1, 10, -1, 0, 7) .attr(TerrainChangeAttr, TerrainType.PSYCHIC) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.LUNGE, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) + new AttackMove(MoveId.LUNGE, PokemonType.BUG, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new AttackMove(Moves.FIRE_LASH, PokemonType.FIRE, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) + new AttackMove(MoveId.FIRE_LASH, PokemonType.FIRE, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.POWER_TRIP, PokemonType.DARK, MoveCategory.PHYSICAL, 20, 100, 10, -1, 0, 7) + new AttackMove(MoveId.POWER_TRIP, PokemonType.DARK, MoveCategory.PHYSICAL, 20, 100, 10, -1, 0, 7) .attr(PositiveStatStagePowerAttr), - new AttackMove(Moves.BURN_UP, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 100, 5, -1, 0, 7) + new AttackMove(MoveId.BURN_UP, PokemonType.FIRE, MoveCategory.SPECIAL, 130, 100, 5, -1, 0, 7) .condition((user) => { const userTypes = user.getTypes(true); return userTypes.includes(PokemonType.FIRE); @@ -10385,11 +10385,11 @@ export function initMoves() { .attr(RemoveTypeAttr, PokemonType.FIRE, (user) => { globalScene.queueMessage(i18next.t("moveTriggers:burnedItselfOut", { pokemonName: getPokemonNameWithAffix(user) })); }), - new StatusMove(Moves.SPEED_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 7) + new StatusMove(MoveId.SPEED_SWAP, PokemonType.PSYCHIC, -1, 10, -1, 0, 7) .attr(SwapStatAttr, Stat.SPD) .ignoresSubstitute(), - new AttackMove(Moves.SMART_STRIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 7), - new StatusMove(Moves.PURIFY, PokemonType.POISON, -1, 20, -1, 0, 7) + new AttackMove(MoveId.SMART_STRIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 7), + new StatusMove(MoveId.PURIFY, PokemonType.POISON, -1, 20, -1, 0, 7) .condition((user, target, move) => { if (!target.status) { return false; @@ -10400,182 +10400,182 @@ export function initMoves() { .attr(HealStatusEffectAttr, false, getNonVolatileStatusEffects()) .triageMove() .reflectable(), - new AttackMove(Moves.REVELATION_DANCE, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) + new AttackMove(MoveId.REVELATION_DANCE, PokemonType.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) .danceMove() .attr(MatchUserTypeAttr), - new AttackMove(Moves.CORE_ENFORCER, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 7) + new AttackMove(MoveId.CORE_ENFORCER, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 7) .target(MoveTarget.ALL_NEAR_ENEMIES) .attr(SuppressAbilitiesIfActedAttr), - new AttackMove(Moves.TROP_KICK, PokemonType.GRASS, MoveCategory.PHYSICAL, 70, 100, 15, 100, 0, 7) + new AttackMove(MoveId.TROP_KICK, PokemonType.GRASS, MoveCategory.PHYSICAL, 70, 100, 15, 100, 0, 7) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new StatusMove(Moves.INSTRUCT, PokemonType.PSYCHIC, -1, 15, -1, 0, 7) + new StatusMove(MoveId.INSTRUCT, PokemonType.PSYCHIC, -1, 15, -1, 0, 7) .ignoresSubstitute() .attr(RepeatMoveAttr) // incorrect interactions with Gigaton Hammer, Blood Moon & Torment // Also has incorrect interactions with Dancer due to the latter // erroneously adding copied moves to move history. .edgeCase(), - new AttackMove(Moves.BEAK_BLAST, PokemonType.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, -3, 7) + new AttackMove(MoveId.BEAK_BLAST, PokemonType.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, -3, 7) .attr(BeakBlastHeaderAttr) .ballBombMove() .makesContact(false), - new AttackMove(Moves.CLANGING_SCALES, PokemonType.DRAGON, MoveCategory.SPECIAL, 110, 100, 5, -1, 0, 7) + new AttackMove(MoveId.CLANGING_SCALES, PokemonType.DRAGON, MoveCategory.SPECIAL, 110, 100, 5, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.DEF ], -1, true, { firstTargetOnly: true }) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.DRAGON_HAMMER, PokemonType.DRAGON, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 7), - new AttackMove(Moves.BRUTAL_SWING, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 7) + new AttackMove(MoveId.DRAGON_HAMMER, PokemonType.DRAGON, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 7), + new AttackMove(MoveId.BRUTAL_SWING, PokemonType.DARK, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 7) .target(MoveTarget.ALL_NEAR_OTHERS), - new StatusMove(Moves.AURORA_VEIL, PokemonType.ICE, -1, 20, -1, 0, 7) + new StatusMove(MoveId.AURORA_VEIL, PokemonType.ICE, -1, 20, -1, 0, 7) .condition((user, target, move) => (globalScene.arena.weather?.weatherType === WeatherType.HAIL || globalScene.arena.weather?.weatherType === WeatherType.SNOW) && !globalScene.arena.weather?.isEffectSuppressed()) .attr(AddArenaTagAttr, ArenaTagType.AURORA_VEIL, 5, true) .target(MoveTarget.USER_SIDE), /* Unused */ - new AttackMove(Moves.SINISTER_ARROW_RAID, PokemonType.GHOST, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SINISTER_ARROW_RAID, PokemonType.GHOST, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) .unimplemented() .makesContact(false) .edgeCase(), // I assume it's because the user needs spirit shackle and decidueye - new AttackMove(Moves.MALICIOUS_MOONSAULT, PokemonType.DARK, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) + new AttackMove(MoveId.MALICIOUS_MOONSAULT, PokemonType.DARK, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) .unimplemented() .attr(AlwaysHitMinimizeAttr) .attr(HitsTagAttr, BattlerTagType.MINIMIZED, true) .edgeCase(), // I assume it's because it needs darkest lariat and incineroar - new AttackMove(Moves.OCEANIC_OPERETTA, PokemonType.WATER, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) + new AttackMove(MoveId.OCEANIC_OPERETTA, PokemonType.WATER, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) .unimplemented() .edgeCase(), // I assume it's because it needs sparkling aria and primarina - new AttackMove(Moves.GUARDIAN_OF_ALOLA, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) + new AttackMove(MoveId.GUARDIAN_OF_ALOLA, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.SOUL_STEALING_7_STAR_STRIKE, PokemonType.GHOST, MoveCategory.PHYSICAL, 195, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SOUL_STEALING_7_STAR_STRIKE, PokemonType.GHOST, MoveCategory.PHYSICAL, 195, -1, 1, -1, 0, 7) .unimplemented(), - new AttackMove(Moves.STOKED_SPARKSURFER, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 175, -1, 1, 100, 0, 7) + new AttackMove(MoveId.STOKED_SPARKSURFER, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 175, -1, 1, 100, 0, 7) .unimplemented() .edgeCase(), // I assume it's because it needs thunderbolt and Alola Raichu - new AttackMove(Moves.PULVERIZING_PANCAKE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) + new AttackMove(MoveId.PULVERIZING_PANCAKE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) .unimplemented() .edgeCase(), // I assume it's because it needs giga impact and snorlax - new SelfStatusMove(Moves.EXTREME_EVOBOOST, PokemonType.NORMAL, -1, 1, -1, 0, 7) + new SelfStatusMove(MoveId.EXTREME_EVOBOOST, PokemonType.NORMAL, -1, 1, -1, 0, 7) .unimplemented() .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true), - new AttackMove(Moves.GENESIS_SUPERNOVA, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) + new AttackMove(MoveId.GENESIS_SUPERNOVA, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) .unimplemented() .attr(TerrainChangeAttr, TerrainType.PSYCHIC), /* End Unused */ - new AttackMove(Moves.SHELL_TRAP, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, -3, 7) + new AttackMove(MoveId.SHELL_TRAP, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, -3, 7) .attr(AddBattlerTagHeaderAttr, BattlerTagType.SHELL_TRAP) .target(MoveTarget.ALL_NEAR_ENEMIES) // Fails if the user was not hit by a physical attack during the turn .condition((user, target, move) => user.getTag(ShellTrapTag)?.activated === true), - new AttackMove(Moves.FLEUR_CANNON, PokemonType.FAIRY, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 7) + new AttackMove(MoveId.FLEUR_CANNON, PokemonType.FAIRY, MoveCategory.SPECIAL, 130, 90, 5, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true), - new AttackMove(Moves.PSYCHIC_FANGS, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 7) + new AttackMove(MoveId.PSYCHIC_FANGS, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 7) .bitingMove() .attr(RemoveScreensAttr), - new AttackMove(Moves.STOMPING_TANTRUM, PokemonType.GROUND, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 7) + new AttackMove(MoveId.STOMPING_TANTRUM, PokemonType.GROUND, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 7) .attr(MovePowerMultiplierAttr, (user, target, move) => user.getLastXMoves(2)[1]?.result === MoveResult.MISS || user.getLastXMoves(2)[1]?.result === MoveResult.FAIL ? 2 : 1), - new AttackMove(Moves.SHADOW_BONE, PokemonType.GHOST, MoveCategory.PHYSICAL, 85, 100, 10, 20, 0, 7) + new AttackMove(MoveId.SHADOW_BONE, PokemonType.GHOST, MoveCategory.PHYSICAL, 85, 100, 10, 20, 0, 7) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .makesContact(false), - new AttackMove(Moves.ACCELEROCK, PokemonType.ROCK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 1, 7), - new AttackMove(Moves.LIQUIDATION, PokemonType.WATER, MoveCategory.PHYSICAL, 85, 100, 10, 20, 0, 7) + new AttackMove(MoveId.ACCELEROCK, PokemonType.ROCK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 1, 7), + new AttackMove(MoveId.LIQUIDATION, PokemonType.WATER, MoveCategory.PHYSICAL, 85, 100, 10, 20, 0, 7) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.PRISMATIC_LASER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 160, 100, 10, -1, 0, 7) + new AttackMove(MoveId.PRISMATIC_LASER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 160, 100, 10, -1, 0, 7) .attr(RechargeAttr), - new AttackMove(Moves.SPECTRAL_THIEF, PokemonType.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 7) + new AttackMove(MoveId.SPECTRAL_THIEF, PokemonType.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 7) .attr(SpectralThiefAttr) .ignoresSubstitute(), - new AttackMove(Moves.SUNSTEEL_STRIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 7) + new AttackMove(MoveId.SUNSTEEL_STRIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 7) .ignoresAbilities(), - new AttackMove(Moves.MOONGEIST_BEAM, PokemonType.GHOST, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) + new AttackMove(MoveId.MOONGEIST_BEAM, PokemonType.GHOST, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) .ignoresAbilities(), - new StatusMove(Moves.TEARFUL_LOOK, PokemonType.NORMAL, -1, 20, -1, 0, 7) + new StatusMove(MoveId.TEARFUL_LOOK, PokemonType.NORMAL, -1, 20, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) .reflectable(), - new AttackMove(Moves.ZING_ZAP, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 7) + new AttackMove(MoveId.ZING_ZAP, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 7) .attr(FlinchAttr), - new AttackMove(Moves.NATURES_MADNESS, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 7) + new AttackMove(MoveId.NATURES_MADNESS, PokemonType.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 7) .attr(TargetHalfHpDamageAttr), - new AttackMove(Moves.MULTI_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 7) + new AttackMove(MoveId.MULTI_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 7) .attr(FormChangeItemTypeAttr), /* Unused */ - new AttackMove(Moves.TEN_MILLION_VOLT_THUNDERBOLT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) + new AttackMove(MoveId.TEN_MILLION_VOLT_THUNDERBOLT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) .unimplemented() .edgeCase(), // I assume it's because it needs thunderbolt and pikachu in a cap /* End Unused */ - new AttackMove(Moves.MIND_BLOWN, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 7) + new AttackMove(MoveId.MIND_BLOWN, PokemonType.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 7) .condition(failIfDampCondition) .attr(HalfSacrificialAttr) .target(MoveTarget.ALL_NEAR_OTHERS), - new AttackMove(Moves.PLASMA_FISTS, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 100, 15, -1, 0, 7) + new AttackMove(MoveId.PLASMA_FISTS, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 100, 15, -1, 0, 7) .attr(AddArenaTagAttr, ArenaTagType.ION_DELUGE, 1) .punchingMove(), - new AttackMove(Moves.PHOTON_GEYSER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) + new AttackMove(MoveId.PHOTON_GEYSER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) .attr(PhotonGeyserCategoryAttr) .ignoresAbilities(), /* Unused */ - new AttackMove(Moves.LIGHT_THAT_BURNS_THE_SKY, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) + new AttackMove(MoveId.LIGHT_THAT_BURNS_THE_SKY, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) .unimplemented() .attr(PhotonGeyserCategoryAttr) .ignoresAbilities(), - new AttackMove(Moves.SEARING_SUNRAZE_SMASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 200, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SEARING_SUNRAZE_SMASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 200, -1, 1, -1, 0, 7) .unimplemented() .ignoresAbilities(), - new AttackMove(Moves.MENACING_MOONRAZE_MAELSTROM, PokemonType.GHOST, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) + new AttackMove(MoveId.MENACING_MOONRAZE_MAELSTROM, PokemonType.GHOST, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) .unimplemented() .ignoresAbilities(), - new AttackMove(Moves.LETS_SNUGGLE_FOREVER, PokemonType.FAIRY, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) + new AttackMove(MoveId.LETS_SNUGGLE_FOREVER, PokemonType.FAIRY, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) .unimplemented() .edgeCase(), // I assume it needs play rough and mimikyu - new AttackMove(Moves.SPLINTERED_STORMSHARDS, PokemonType.ROCK, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) + new AttackMove(MoveId.SPLINTERED_STORMSHARDS, PokemonType.ROCK, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) .unimplemented() .attr(ClearTerrainAttr) .makesContact(false), - new AttackMove(Moves.CLANGOROUS_SOULBLAZE, PokemonType.DRAGON, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) + new AttackMove(MoveId.CLANGOROUS_SOULBLAZE, PokemonType.DRAGON, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) .unimplemented() .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true, { firstTargetOnly: true }) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES) .edgeCase(), // I assume it needs clanging scales and Kommo-O /* End Unused */ - new AttackMove(Moves.ZIPPY_ZAP, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, -1, 2, 7) // LGPE Implementation + new AttackMove(MoveId.ZIPPY_ZAP, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, -1, 2, 7) // LGPE Implementation .attr(CritOnlyAttr), - new AttackMove(Moves.SPLISHY_SPLASH, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 15, 30, 0, 7) + new AttackMove(MoveId.SPLISHY_SPLASH, PokemonType.WATER, MoveCategory.SPECIAL, 90, 100, 15, 30, 0, 7) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.FLOATY_FALL, PokemonType.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, 30, 0, 7) + new AttackMove(MoveId.FLOATY_FALL, PokemonType.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, 30, 0, 7) .attr(FlinchAttr), - new AttackMove(Moves.PIKA_PAPOW, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 20, -1, 0, 7) + new AttackMove(MoveId.PIKA_PAPOW, PokemonType.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 20, -1, 0, 7) .attr(FriendshipPowerAttr), - new AttackMove(Moves.BOUNCY_BUBBLE, PokemonType.WATER, MoveCategory.SPECIAL, 60, 100, 20, -1, 0, 7) + new AttackMove(MoveId.BOUNCY_BUBBLE, PokemonType.WATER, MoveCategory.SPECIAL, 60, 100, 20, -1, 0, 7) .attr(HitHealAttr, 1) .triageMove(), - new AttackMove(Moves.BUZZY_BUZZ, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 60, 100, 20, 100, 0, 7) + new AttackMove(MoveId.BUZZY_BUZZ, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 60, 100, 20, 100, 0, 7) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), - new AttackMove(Moves.SIZZLY_SLIDE, PokemonType.FIRE, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 7) + new AttackMove(MoveId.SIZZLY_SLIDE, PokemonType.FIRE, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 7) .attr(StatusEffectAttr, StatusEffect.BURN), - new AttackMove(Moves.GLITZY_GLOW, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 95, 15, -1, 0, 7) + new AttackMove(MoveId.GLITZY_GLOW, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 95, 15, -1, 0, 7) .attr(AddArenaTagAttr, ArenaTagType.LIGHT_SCREEN, 5, false, true), - new AttackMove(Moves.BADDY_BAD, PokemonType.DARK, MoveCategory.SPECIAL, 80, 95, 15, -1, 0, 7) + new AttackMove(MoveId.BADDY_BAD, PokemonType.DARK, MoveCategory.SPECIAL, 80, 95, 15, -1, 0, 7) .attr(AddArenaTagAttr, ArenaTagType.REFLECT, 5, false, true), - new AttackMove(Moves.SAPPY_SEED, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 7) + new AttackMove(MoveId.SAPPY_SEED, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 90, 10, -1, 0, 7) .attr(LeechSeedAttr) .makesContact(false), - new AttackMove(Moves.FREEZY_FROST, PokemonType.ICE, MoveCategory.SPECIAL, 100, 90, 10, -1, 0, 7) + new AttackMove(MoveId.FREEZY_FROST, PokemonType.ICE, MoveCategory.SPECIAL, 100, 90, 10, -1, 0, 7) .attr(ResetStatsAttr, true), - new AttackMove(Moves.SPARKLY_SWIRL, PokemonType.FAIRY, MoveCategory.SPECIAL, 120, 85, 5, -1, 0, 7) + new AttackMove(MoveId.SPARKLY_SWIRL, PokemonType.FAIRY, MoveCategory.SPECIAL, 120, 85, 5, -1, 0, 7) .attr(PartyStatusCureAttr, null, AbilityId.NONE), - new AttackMove(Moves.VEEVEE_VOLLEY, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 20, -1, 0, 7) + new AttackMove(MoveId.VEEVEE_VOLLEY, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 20, -1, 0, 7) .attr(FriendshipPowerAttr), - new AttackMove(Moves.DOUBLE_IRON_BASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 60, 100, 5, 30, 0, 7) + new AttackMove(MoveId.DOUBLE_IRON_BASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 60, 100, 5, 30, 0, 7) .attr(MultiHitAttr, MultiHitType._2) .attr(FlinchAttr) .punchingMove(), /* Unused */ - new SelfStatusMove(Moves.MAX_GUARD, PokemonType.NORMAL, -1, 10, -1, 4, 8) + new SelfStatusMove(MoveId.MAX_GUARD, PokemonType.NORMAL, -1, 10, -1, 4, 8) .unimplemented() .attr(ProtectAttr) .condition(failIfLastCondition), /* End Unused */ - new AttackMove(Moves.DYNAMAX_CANNON, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) + new AttackMove(MoveId.DYNAMAX_CANNON, PokemonType.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => { // Move is only stronger against overleveled foes. if (target.level > globalScene.getMaxExpLevel()) { @@ -10587,13 +10587,13 @@ export function initMoves() { } }), - new AttackMove(Moves.SNIPE_SHOT, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 8) + new AttackMove(MoveId.SNIPE_SHOT, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 8) .attr(HighCritAttr) .attr(BypassRedirectAttr), - new AttackMove(Moves.JAW_LOCK, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) + new AttackMove(MoveId.JAW_LOCK, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) .attr(JawLockAttr) .bitingMove(), - new SelfStatusMove(Moves.STUFF_CHEEKS, PokemonType.NORMAL, -1, 10, -1, 0, 8) + new SelfStatusMove(MoveId.STUFF_CHEEKS, PokemonType.NORMAL, -1, 10, -1, 0, 8) .attr(EatBerryAttr, true) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true) .condition((user) => { @@ -10601,322 +10601,322 @@ export function initMoves() { return userBerries.length > 0; }) .edgeCase(), // Stuff Cheeks should not be selectable when the user does not have a berry, see wiki - new SelfStatusMove(Moves.NO_RETREAT, PokemonType.FIGHTING, -1, 5, -1, 0, 8) + new SelfStatusMove(MoveId.NO_RETREAT, PokemonType.FIGHTING, -1, 5, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .attr(AddBattlerTagAttr, BattlerTagType.NO_RETREAT, true, false) - .condition((user, target, move) => user.getTag(TrappedTag)?.sourceMove !== Moves.NO_RETREAT), // fails if the user is currently trapped by No Retreat - new StatusMove(Moves.TAR_SHOT, PokemonType.ROCK, 100, 15, -1, 0, 8) + .condition((user, target, move) => user.getTag(TrappedTag)?.sourceMove !== MoveId.NO_RETREAT), // fails if the user is currently trapped by No Retreat + new StatusMove(MoveId.TAR_SHOT, PokemonType.ROCK, 100, 15, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .attr(AddBattlerTagAttr, BattlerTagType.TAR_SHOT, false) .reflectable(), - new StatusMove(Moves.MAGIC_POWDER, PokemonType.PSYCHIC, 100, 20, -1, 0, 8) + new StatusMove(MoveId.MAGIC_POWDER, PokemonType.PSYCHIC, 100, 20, -1, 0, 8) .attr(ChangeTypeAttr, PokemonType.PSYCHIC) .powderMove() .reflectable(), - new AttackMove(Moves.DRAGON_DARTS, PokemonType.DRAGON, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 8) + new AttackMove(MoveId.DRAGON_DARTS, PokemonType.DRAGON, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._2) .makesContact(false) .partial(), // smart targetting is unimplemented - new StatusMove(Moves.TEATIME, PokemonType.NORMAL, -1, 10, -1, 0, 8) + new StatusMove(MoveId.TEATIME, PokemonType.NORMAL, -1, 10, -1, 0, 8) .attr(EatBerryAttr, false) .target(MoveTarget.ALL), - new StatusMove(Moves.OCTOLOCK, PokemonType.FIGHTING, 100, 15, -1, 0, 8) + new StatusMove(MoveId.OCTOLOCK, PokemonType.FIGHTING, 100, 15, -1, 0, 8) .condition(failIfGhostTypeCondition) .attr(AddBattlerTagAttr, BattlerTagType.OCTOLOCK, false, true, 1), - new AttackMove(Moves.BOLT_BEAK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 8) + new AttackMove(MoveId.BOLT_BEAK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 8) .attr(FirstAttackDoublePowerAttr), - new AttackMove(Moves.FISHIOUS_REND, PokemonType.WATER, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 8) + new AttackMove(MoveId.FISHIOUS_REND, PokemonType.WATER, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 8) .attr(FirstAttackDoublePowerAttr) .bitingMove(), - new StatusMove(Moves.COURT_CHANGE, PokemonType.NORMAL, 100, 10, -1, 0, 8) + new StatusMove(MoveId.COURT_CHANGE, PokemonType.NORMAL, 100, 10, -1, 0, 8) .attr(SwapArenaTagsAttr, [ ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.MIST, ArenaTagType.REFLECT, ArenaTagType.SPIKES, ArenaTagType.STEALTH_ROCK, ArenaTagType.STICKY_WEB, ArenaTagType.TAILWIND, ArenaTagType.TOXIC_SPIKES ]), /* Unused */ - new AttackMove(Moves.MAX_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_FLUTTERBY, PokemonType.BUG, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_FLUTTERBY, PokemonType.BUG, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_LIGHTNING, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_LIGHTNING, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_STRIKE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_STRIKE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_KNUCKLE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_KNUCKLE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_PHANTASM, PokemonType.GHOST, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_PHANTASM, PokemonType.GHOST, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_HAILSTORM, PokemonType.ICE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_HAILSTORM, PokemonType.ICE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_OOZE, PokemonType.POISON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_OOZE, PokemonType.POISON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_GEYSER, PokemonType.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_GEYSER, PokemonType.WATER, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_AIRSTREAM, PokemonType.FLYING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_AIRSTREAM, PokemonType.FLYING, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_STARFALL, PokemonType.FAIRY, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_STARFALL, PokemonType.FAIRY, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_WYRMWIND, PokemonType.DRAGON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_WYRMWIND, PokemonType.DRAGON, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_MINDSTORM, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_MINDSTORM, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_ROCKFALL, PokemonType.ROCK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_ROCKFALL, PokemonType.ROCK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_QUAKE, PokemonType.GROUND, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_QUAKE, PokemonType.GROUND, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_DARKNESS, PokemonType.DARK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_DARKNESS, PokemonType.DARK, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_OVERGROWTH, PokemonType.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_OVERGROWTH, PokemonType.GRASS, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), - new AttackMove(Moves.MAX_STEELSPIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) + new AttackMove(MoveId.MAX_STEELSPIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented(), /* End Unused */ - new SelfStatusMove(Moves.CLANGOROUS_SOUL, PokemonType.DRAGON, 100, 5, -1, 0, 8) + new SelfStatusMove(MoveId.CLANGOROUS_SOUL, PokemonType.DRAGON, 100, 5, -1, 0, 8) .attr(CutHpStatStageBoostAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, 3) .soundBased() .danceMove(), - new AttackMove(Moves.BODY_PRESS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) + new AttackMove(MoveId.BODY_PRESS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) .attr(DefAtkAttr), - new StatusMove(Moves.DECORATE, PokemonType.FAIRY, -1, 15, -1, 0, 8) + new StatusMove(MoveId.DECORATE, PokemonType.FAIRY, -1, 15, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 2) .ignoresProtect(), - new AttackMove(Moves.DRUM_BEATING, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) + new AttackMove(MoveId.DRUM_BEATING, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .makesContact(false), - new AttackMove(Moves.SNAP_TRAP, PokemonType.GRASS, MoveCategory.PHYSICAL, 35, 100, 15, -1, 0, 8) + new AttackMove(MoveId.SNAP_TRAP, PokemonType.GRASS, MoveCategory.PHYSICAL, 35, 100, 15, -1, 0, 8) .attr(TrapAttr, BattlerTagType.SNAP_TRAP), - new AttackMove(Moves.PYRO_BALL, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 90, 5, 10, 0, 8) + new AttackMove(MoveId.PYRO_BALL, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 90, 5, 10, 0, 8) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .ballBombMove() .makesContact(false), - new AttackMove(Moves.BEHEMOTH_BLADE, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 8) + new AttackMove(MoveId.BEHEMOTH_BLADE, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 8) .slicingMove(), - new AttackMove(Moves.BEHEMOTH_BASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 8), - new AttackMove(Moves.AURA_WHEEL, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 110, 100, 10, 100, 0, 8) + new AttackMove(MoveId.BEHEMOTH_BASH, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 8), + new AttackMove(MoveId.AURA_WHEEL, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 110, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true) .makesContact(false) .attr(AuraWheelTypeAttr), - new AttackMove(Moves.BREAKING_SWIPE, PokemonType.DRAGON, MoveCategory.PHYSICAL, 60, 100, 15, 100, 0, 8) + new AttackMove(MoveId.BREAKING_SWIPE, PokemonType.DRAGON, MoveCategory.PHYSICAL, 60, 100, 15, 100, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new AttackMove(Moves.BRANCH_POKE, PokemonType.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 8), - new AttackMove(Moves.OVERDRIVE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) + new AttackMove(MoveId.BRANCH_POKE, PokemonType.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 8), + new AttackMove(MoveId.OVERDRIVE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.APPLE_ACID, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 8) + new AttackMove(MoveId.APPLE_ACID, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), - new AttackMove(Moves.GRAV_APPLE, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) + new AttackMove(MoveId.GRAV_APPLE, PokemonType.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTag(ArenaTagType.GRAVITY) ? 1.5 : 1) .makesContact(false), - new AttackMove(Moves.SPIRIT_BREAK, PokemonType.FAIRY, MoveCategory.PHYSICAL, 75, 100, 15, 100, 0, 8) + new AttackMove(MoveId.SPIRIT_BREAK, PokemonType.FAIRY, MoveCategory.PHYSICAL, 75, 100, 15, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), - new AttackMove(Moves.STRANGE_STEAM, PokemonType.FAIRY, MoveCategory.SPECIAL, 90, 95, 10, 20, 0, 8) + new AttackMove(MoveId.STRANGE_STEAM, PokemonType.FAIRY, MoveCategory.SPECIAL, 90, 95, 10, 20, 0, 8) .attr(ConfuseAttr), - new StatusMove(Moves.LIFE_DEW, PokemonType.WATER, -1, 10, -1, 0, 8) + new StatusMove(MoveId.LIFE_DEW, PokemonType.WATER, -1, 10, -1, 0, 8) .attr(HealAttr, 0.25, true, false) .target(MoveTarget.USER_AND_ALLIES) .ignoresProtect(), - new SelfStatusMove(Moves.OBSTRUCT, PokemonType.DARK, 100, 10, -1, 4, 8) + new SelfStatusMove(MoveId.OBSTRUCT, PokemonType.DARK, 100, 10, -1, 4, 8) .attr(ProtectAttr, BattlerTagType.OBSTRUCT) .condition(failIfLastCondition), - new AttackMove(Moves.FALSE_SURRENDER, PokemonType.DARK, MoveCategory.PHYSICAL, 80, -1, 10, -1, 0, 8), - new AttackMove(Moves.METEOR_ASSAULT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 5, -1, 0, 8) + new AttackMove(MoveId.FALSE_SURRENDER, PokemonType.DARK, MoveCategory.PHYSICAL, 80, -1, 10, -1, 0, 8), + new AttackMove(MoveId.METEOR_ASSAULT, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 5, -1, 0, 8) .attr(RechargeAttr) .makesContact(false), - new AttackMove(Moves.ETERNABEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 160, 90, 5, -1, 0, 8) + new AttackMove(MoveId.ETERNABEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 160, 90, 5, -1, 0, 8) .attr(RechargeAttr), - new AttackMove(Moves.STEEL_BEAM, PokemonType.STEEL, MoveCategory.SPECIAL, 140, 95, 5, -1, 0, 8) + new AttackMove(MoveId.STEEL_BEAM, PokemonType.STEEL, MoveCategory.SPECIAL, 140, 95, 5, -1, 0, 8) .attr(HalfSacrificialAttr), - new AttackMove(Moves.EXPANDING_FORCE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) + new AttackMove(MoveId.EXPANDING_FORCE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? 1.5 : 1) .attr(VariableTargetAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER), - new AttackMove(Moves.STEEL_ROLLER, PokemonType.STEEL, MoveCategory.PHYSICAL, 130, 100, 5, -1, 0, 8) + new AttackMove(MoveId.STEEL_ROLLER, PokemonType.STEEL, MoveCategory.PHYSICAL, 130, 100, 5, -1, 0, 8) .attr(ClearTerrainAttr) .condition((user, target, move) => !!globalScene.arena.terrain), - new AttackMove(Moves.SCALE_SHOT, PokemonType.DRAGON, MoveCategory.PHYSICAL, 25, 90, 20, -1, 0, 8) + new AttackMove(MoveId.SCALE_SHOT, PokemonType.DRAGON, MoveCategory.PHYSICAL, 25, 90, 20, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true, { lastHitOnly: true }) .attr(StatStageChangeAttr, [ Stat.DEF ], -1, true, { lastHitOnly: true }) .attr(MultiHitAttr) .makesContact(false), - new ChargingAttackMove(Moves.METEOR_BEAM, PokemonType.ROCK, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 8) + new ChargingAttackMove(MoveId.METEOR_BEAM, PokemonType.ROCK, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 8) .chargeText(i18next.t("moveTriggers:isOverflowingWithSpacePower", { pokemonName: "{USER}" })) .chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1, true), - new AttackMove(Moves.SHELL_SIDE_ARM, PokemonType.POISON, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) + new AttackMove(MoveId.SHELL_SIDE_ARM, PokemonType.POISON, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) .attr(ShellSideArmCategoryAttr) .attr(StatusEffectAttr, StatusEffect.POISON) .partial(), // Physical version of the move does not make contact - new AttackMove(Moves.MISTY_EXPLOSION, PokemonType.FAIRY, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) + new AttackMove(MoveId.MISTY_EXPLOSION, PokemonType.FAIRY, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) .attr(SacrificialAttr) .target(MoveTarget.ALL_NEAR_OTHERS) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.MISTY && user.isGrounded() ? 1.5 : 1) .condition(failIfDampCondition) .makesContact(false), - new AttackMove(Moves.GRASSY_GLIDE, PokemonType.GRASS, MoveCategory.PHYSICAL, 55, 100, 20, -1, 0, 8) + new AttackMove(MoveId.GRASSY_GLIDE, PokemonType.GRASS, MoveCategory.PHYSICAL, 55, 100, 20, -1, 0, 8) .attr(IncrementMovePriorityAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && user.isGrounded()), - new AttackMove(Moves.RISING_VOLTAGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 8) + new AttackMove(MoveId.RISING_VOLTAGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.ELECTRIC && target.isGrounded() ? 2 : 1), - new AttackMove(Moves.TERRAIN_PULSE, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 8) + new AttackMove(MoveId.TERRAIN_PULSE, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 8) .attr(TerrainPulseTypeAttr) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() !== TerrainType.NONE && user.isGrounded() ? 2 : 1) .pulseMove(), - new AttackMove(Moves.SKITTER_SMACK, PokemonType.BUG, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) + new AttackMove(MoveId.SKITTER_SMACK, PokemonType.BUG, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), - new AttackMove(Moves.BURNING_JEALOUSY, PokemonType.FIRE, MoveCategory.SPECIAL, 70, 100, 5, 100, 0, 8) + new AttackMove(MoveId.BURNING_JEALOUSY, PokemonType.FIRE, MoveCategory.SPECIAL, 70, 100, 5, 100, 0, 8) .attr(StatusIfBoostedAttr, StatusEffect.BURN) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.LASH_OUT, PokemonType.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8) + new AttackMove(MoveId.LASH_OUT, PokemonType.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, _target, _move) => user.turnData.statStagesDecreased ? 2 : 1), - new AttackMove(Moves.POLTERGEIST, PokemonType.GHOST, MoveCategory.PHYSICAL, 110, 90, 5, -1, 0, 8) + new AttackMove(MoveId.POLTERGEIST, PokemonType.GHOST, MoveCategory.PHYSICAL, 110, 90, 5, -1, 0, 8) .condition(failIfNoTargetHeldItemsCondition) .attr(PreMoveMessageAttr, attackedByItemMessageFunc) .makesContact(false), - new StatusMove(Moves.CORROSIVE_GAS, PokemonType.POISON, 100, 40, -1, 0, 8) + new StatusMove(MoveId.CORROSIVE_GAS, PokemonType.POISON, 100, 40, -1, 0, 8) .target(MoveTarget.ALL_NEAR_OTHERS) .reflectable() .unimplemented(), - new StatusMove(Moves.COACHING, PokemonType.FIGHTING, -1, 10, -1, 0, 8) + new StatusMove(MoveId.COACHING, PokemonType.FIGHTING, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], 1) .target(MoveTarget.NEAR_ALLY) .condition(failIfSingleBattle), - new AttackMove(Moves.FLIP_TURN, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 8) + new AttackMove(MoveId.FLIP_TURN, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 8) .attr(ForceSwitchOutAttr, true), - new AttackMove(Moves.TRIPLE_AXEL, PokemonType.ICE, MoveCategory.PHYSICAL, 20, 90, 10, -1, 0, 8) + new AttackMove(MoveId.TRIPLE_AXEL, PokemonType.ICE, MoveCategory.PHYSICAL, 20, 90, 10, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._3) .attr(MultiHitPowerIncrementAttr, 3) .checkAllHits(), - new AttackMove(Moves.DUAL_WINGBEAT, PokemonType.FLYING, MoveCategory.PHYSICAL, 40, 90, 10, -1, 0, 8) + new AttackMove(MoveId.DUAL_WINGBEAT, PokemonType.FLYING, MoveCategory.PHYSICAL, 40, 90, 10, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.SCORCHING_SANDS, PokemonType.GROUND, MoveCategory.SPECIAL, 70, 100, 10, 30, 0, 8) + new AttackMove(MoveId.SCORCHING_SANDS, PokemonType.GROUND, MoveCategory.SPECIAL, 70, 100, 10, 30, 0, 8) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN), - new StatusMove(Moves.JUNGLE_HEALING, PokemonType.GRASS, -1, 10, -1, 0, 8) + new StatusMove(MoveId.JUNGLE_HEALING, PokemonType.GRASS, -1, 10, -1, 0, 8) .attr(HealAttr, 0.25, true, false) .attr(HealStatusEffectAttr, false, getNonVolatileStatusEffects()) .target(MoveTarget.USER_AND_ALLIES), - new AttackMove(Moves.WICKED_BLOW, PokemonType.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8) + new AttackMove(MoveId.WICKED_BLOW, PokemonType.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8) .attr(CritOnlyAttr) .punchingMove(), - new AttackMove(Moves.SURGING_STRIKES, PokemonType.WATER, MoveCategory.PHYSICAL, 25, 100, 5, -1, 0, 8) + new AttackMove(MoveId.SURGING_STRIKES, PokemonType.WATER, MoveCategory.PHYSICAL, 25, 100, 5, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._3) .attr(CritOnlyAttr) .punchingMove(), - new AttackMove(Moves.THUNDER_CAGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 90, 15, -1, 0, 8) + new AttackMove(MoveId.THUNDER_CAGE, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 80, 90, 15, -1, 0, 8) .attr(TrapAttr, BattlerTagType.THUNDER_CAGE), - new AttackMove(Moves.DRAGON_ENERGY, PokemonType.DRAGON, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 8) + new AttackMove(MoveId.DRAGON_ENERGY, PokemonType.DRAGON, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 8) .attr(HpPowerAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.FREEZING_GLARE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 8) + new AttackMove(MoveId.FREEZING_GLARE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 8) .attr(StatusEffectAttr, StatusEffect.FREEZE), - new AttackMove(Moves.FIERY_WRATH, PokemonType.DARK, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) + new AttackMove(MoveId.FIERY_WRATH, PokemonType.DARK, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) .attr(FlinchAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.THUNDEROUS_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 100, 0, 8) + new AttackMove(MoveId.THUNDEROUS_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), - new AttackMove(Moves.GLACIAL_LANCE, PokemonType.ICE, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 8) + new AttackMove(MoveId.GLACIAL_LANCE, PokemonType.ICE, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .makesContact(false), - new AttackMove(Moves.ASTRAL_BARRAGE, PokemonType.GHOST, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 8) + new AttackMove(MoveId.ASTRAL_BARRAGE, PokemonType.GHOST, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.EERIE_SPELL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 5, 100, 0, 8) + new AttackMove(MoveId.EERIE_SPELL, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 5, 100, 0, 8) .attr(AttackReducePpMoveAttr, 3) .soundBased(), - new AttackMove(Moves.DIRE_CLAW, PokemonType.POISON, MoveCategory.PHYSICAL, 80, 100, 15, 50, 0, 8) + new AttackMove(MoveId.DIRE_CLAW, PokemonType.POISON, MoveCategory.PHYSICAL, 80, 100, 15, 50, 0, 8) .attr(MultiStatusEffectAttr, [ StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP ]), - new AttackMove(Moves.PSYSHIELD_BASH, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) + new AttackMove(MoveId.PSYSHIELD_BASH, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), - new SelfStatusMove(Moves.POWER_SHIFT, PokemonType.NORMAL, -1, 10, -1, 0, 8) + new SelfStatusMove(MoveId.POWER_SHIFT, PokemonType.NORMAL, -1, 10, -1, 0, 8) .target(MoveTarget.USER) .attr(ShiftStatAttr, Stat.ATK, Stat.DEF), - new AttackMove(Moves.STONE_AXE, PokemonType.ROCK, MoveCategory.PHYSICAL, 65, 90, 15, 100, 0, 8) + new AttackMove(MoveId.STONE_AXE, PokemonType.ROCK, MoveCategory.PHYSICAL, 65, 90, 15, 100, 0, 8) .attr(AddArenaTrapTagHitAttr, ArenaTagType.STEALTH_ROCK) .slicingMove(), - new AttackMove(Moves.SPRINGTIDE_STORM, PokemonType.FAIRY, MoveCategory.SPECIAL, 100, 80, 5, 30, 0, 8) + new AttackMove(MoveId.SPRINGTIDE_STORM, PokemonType.FAIRY, MoveCategory.SPECIAL, 100, 80, 5, 30, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.MYSTICAL_POWER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 70, 90, 10, 100, 0, 8) + new AttackMove(MoveId.MYSTICAL_POWER, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 70, 90, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true), - new AttackMove(Moves.RAGING_FURY, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 8) + new AttackMove(MoveId.RAGING_FURY, PokemonType.FIRE, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 8) .makesContact(false) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) .attr(NoEffectAttr, frenzyMissFunc) .target(MoveTarget.RANDOM_NEAR_ENEMY), - new AttackMove(Moves.WAVE_CRASH, PokemonType.WATER, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 8) + new AttackMove(MoveId.WAVE_CRASH, PokemonType.WATER, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 8) .attr(RecoilAttr, false, 0.33) .recklessMove(), - new AttackMove(Moves.CHLOROBLAST, PokemonType.GRASS, MoveCategory.SPECIAL, 150, 95, 5, -1, 0, 8) + new AttackMove(MoveId.CHLOROBLAST, PokemonType.GRASS, MoveCategory.SPECIAL, 150, 95, 5, -1, 0, 8) .attr(RecoilAttr, true, 0.5), - new AttackMove(Moves.MOUNTAIN_GALE, PokemonType.ICE, MoveCategory.PHYSICAL, 100, 85, 10, 30, 0, 8) + new AttackMove(MoveId.MOUNTAIN_GALE, PokemonType.ICE, MoveCategory.PHYSICAL, 100, 85, 10, 30, 0, 8) .makesContact(false) .attr(FlinchAttr), - new SelfStatusMove(Moves.VICTORY_DANCE, PokemonType.FIGHTING, -1, 10, -1, 0, 8) + new SelfStatusMove(MoveId.VICTORY_DANCE, PokemonType.FIGHTING, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPD ], 1, true) .danceMove(), - new AttackMove(Moves.HEADLONG_RUSH, PokemonType.GROUND, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 8) + new AttackMove(MoveId.HEADLONG_RUSH, PokemonType.GROUND, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true) .punchingMove(), - new AttackMove(Moves.BARB_BARRAGE, PokemonType.POISON, MoveCategory.PHYSICAL, 60, 100, 10, 50, 0, 8) + new AttackMove(MoveId.BARB_BARRAGE, PokemonType.POISON, MoveCategory.PHYSICAL, 60, 100, 10, 50, 0, 8) .makesContact(false) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status && (target.status.effect === StatusEffect.POISON || target.status.effect === StatusEffect.TOXIC) ? 2 : 1) .attr(StatusEffectAttr, StatusEffect.POISON), - new AttackMove(Moves.ESPER_WING, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 8) + new AttackMove(MoveId.ESPER_WING, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 8) .attr(HighCritAttr) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true), - new AttackMove(Moves.BITTER_MALICE, PokemonType.GHOST, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 8) + new AttackMove(MoveId.BITTER_MALICE, PokemonType.GHOST, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new SelfStatusMove(Moves.SHELTER, PokemonType.STEEL, -1, 10, -1, 0, 8) + new SelfStatusMove(MoveId.SHELTER, PokemonType.STEEL, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), - new AttackMove(Moves.TRIPLE_ARROWS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 30, 0, 8) + new AttackMove(MoveId.TRIPLE_ARROWS, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 30, 0, 8) .makesContact(false) .attr(HighCritAttr) .attr(StatStageChangeAttr, [ Stat.DEF ], -1, false, { effectChanceOverride: 50 }) .attr(FlinchAttr), - new AttackMove(Moves.INFERNAL_PARADE, PokemonType.GHOST, MoveCategory.SPECIAL, 60, 100, 15, 30, 0, 8) + new AttackMove(MoveId.INFERNAL_PARADE, PokemonType.GHOST, MoveCategory.SPECIAL, 60, 100, 15, 30, 0, 8) .attr(StatusEffectAttr, StatusEffect.BURN) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status ? 2 : 1), - new AttackMove(Moves.CEASELESS_EDGE, PokemonType.DARK, MoveCategory.PHYSICAL, 65, 90, 15, 100, 0, 8) + new AttackMove(MoveId.CEASELESS_EDGE, PokemonType.DARK, MoveCategory.PHYSICAL, 65, 90, 15, 100, 0, 8) .attr(AddArenaTrapTagHitAttr, ArenaTagType.SPIKES) .slicingMove(), - new AttackMove(Moves.BLEAKWIND_STORM, PokemonType.FLYING, MoveCategory.SPECIAL, 100, 80, 10, 30, 0, 8) + new AttackMove(MoveId.BLEAKWIND_STORM, PokemonType.FLYING, MoveCategory.SPECIAL, 100, 80, 10, 30, 0, 8) .attr(StormAccuracyAttr) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.WILDBOLT_STORM, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 100, 80, 10, 20, 0, 8) + new AttackMove(MoveId.WILDBOLT_STORM, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 100, 80, 10, 20, 0, 8) .attr(StormAccuracyAttr) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.SANDSEAR_STORM, PokemonType.GROUND, MoveCategory.SPECIAL, 100, 80, 10, 20, 0, 8) + new AttackMove(MoveId.SANDSEAR_STORM, PokemonType.GROUND, MoveCategory.SPECIAL, 100, 80, 10, 20, 0, 8) .attr(StormAccuracyAttr) .attr(StatusEffectAttr, StatusEffect.BURN) .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.LUNAR_BLESSING, PokemonType.PSYCHIC, -1, 5, -1, 0, 8) + new StatusMove(MoveId.LUNAR_BLESSING, PokemonType.PSYCHIC, -1, 5, -1, 0, 8) .attr(HealAttr, 0.25, true, false) .attr(HealStatusEffectAttr, false, getNonVolatileStatusEffects()) .target(MoveTarget.USER_AND_ALLIES) .triageMove(), - new SelfStatusMove(Moves.TAKE_HEART, PokemonType.PSYCHIC, -1, 10, -1, 0, 8) + new SelfStatusMove(MoveId.TAKE_HEART, PokemonType.PSYCHIC, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF ], 1, true) .attr(HealStatusEffectAttr, true, [ StatusEffect.PARALYSIS, StatusEffect.POISON, StatusEffect.TOXIC, StatusEffect.BURN, StatusEffect.SLEEP ]), /* Unused @@ -11020,56 +11020,56 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), End Unused */ - new AttackMove(Moves.TERA_BLAST, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 9) + new AttackMove(MoveId.TERA_BLAST, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 9) .attr(TeraMoveCategoryAttr) .attr(TeraBlastTypeAttr) .attr(TeraBlastPowerAttr) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, { condition: (user, target, move) => user.isTerastallized && user.isOfType(PokemonType.STELLAR) }), - new SelfStatusMove(Moves.SILK_TRAP, PokemonType.BUG, -1, 10, -1, 4, 9) + new SelfStatusMove(MoveId.SILK_TRAP, PokemonType.BUG, -1, 10, -1, 4, 9) .attr(ProtectAttr, BattlerTagType.SILK_TRAP) .condition(failIfLastCondition), - new AttackMove(Moves.AXE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 90, 10, 30, 0, 9) + new AttackMove(MoveId.AXE_KICK, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 120, 90, 10, 30, 0, 9) .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) .attr(ConfuseAttr) .recklessMove(), - new AttackMove(Moves.LAST_RESPECTS, PokemonType.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) + new AttackMove(MoveId.LAST_RESPECTS, PokemonType.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => 1 + Math.min(user.isPlayer() ? globalScene.arena.playerFaints : globalScene.currentBattle.enemyFaints, 100)) .makesContact(false), - new AttackMove(Moves.LUMINA_CRASH, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) + new AttackMove(MoveId.LUMINA_CRASH, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), - new AttackMove(Moves.ORDER_UP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) + new AttackMove(MoveId.ORDER_UP, PokemonType.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) .attr(OrderUpStatBoostAttr) .makesContact(false), - new AttackMove(Moves.JET_PUNCH, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 15, -1, 1, 9) + new AttackMove(MoveId.JET_PUNCH, PokemonType.WATER, MoveCategory.PHYSICAL, 60, 100, 15, -1, 1, 9) .punchingMove(), - new StatusMove(Moves.SPICY_EXTRACT, PokemonType.GRASS, -1, 15, -1, 0, 9) + new StatusMove(MoveId.SPICY_EXTRACT, PokemonType.GRASS, -1, 15, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.ATK ], 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -2), - new AttackMove(Moves.SPIN_OUT, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) + new AttackMove(MoveId.SPIN_OUT, PokemonType.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPD ], -2, true), - new AttackMove(Moves.POPULATION_BOMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 90, 10, -1, 0, 9) + new AttackMove(MoveId.POPULATION_BOMB, PokemonType.NORMAL, MoveCategory.PHYSICAL, 20, 90, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._10) .slicingMove() .checkAllHits(), - new AttackMove(Moves.ICE_SPINNER, PokemonType.ICE, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) + new AttackMove(MoveId.ICE_SPINNER, PokemonType.ICE, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) .attr(ClearTerrainAttr), - new AttackMove(Moves.GLAIVE_RUSH, PokemonType.DRAGON, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 9) + new AttackMove(MoveId.GLAIVE_RUSH, PokemonType.DRAGON, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_GET_HIT, true, false, 0, 0, true) .attr(AddBattlerTagAttr, BattlerTagType.RECEIVE_DOUBLE_DAMAGE, true, false, 0, 0, true) .condition((user, target, move) => { return !(target.getTag(BattlerTagType.PROTECTED)?.tagType === "PROTECTED" || globalScene.arena.getTag(ArenaTagType.MAT_BLOCK)?.tagType === "MAT_BLOCK"); }), - new StatusMove(Moves.REVIVAL_BLESSING, PokemonType.NORMAL, -1, 1, -1, 0, 9) + new StatusMove(MoveId.REVIVAL_BLESSING, PokemonType.NORMAL, -1, 1, -1, 0, 9) .triageMove() .attr(RevivalBlessingAttr) .target(MoveTarget.USER), - new AttackMove(Moves.SALT_CURE, PokemonType.ROCK, MoveCategory.PHYSICAL, 40, 100, 15, 100, 0, 9) + new AttackMove(MoveId.SALT_CURE, PokemonType.ROCK, MoveCategory.PHYSICAL, 40, 100, 15, 100, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.SALT_CURED) .makesContact(false), - new AttackMove(Moves.TRIPLE_DIVE, PokemonType.WATER, MoveCategory.PHYSICAL, 30, 95, 10, -1, 0, 9) + new AttackMove(MoveId.TRIPLE_DIVE, PokemonType.WATER, MoveCategory.PHYSICAL, 30, 95, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._3), - new AttackMove(Moves.MORTAL_SPIN, PokemonType.POISON, MoveCategory.PHYSICAL, 30, 100, 15, 100, 0, 9) + new AttackMove(MoveId.MORTAL_SPIN, PokemonType.POISON, MoveCategory.PHYSICAL, 30, 100, 15, 100, 0, 9) .attr(LapseBattlerTagAttr, [ BattlerTagType.BIND, BattlerTagType.WRAP, @@ -11086,32 +11086,32 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.POISON) .attr(RemoveArenaTrapAttr) .target(MoveTarget.ALL_NEAR_ENEMIES), - new StatusMove(Moves.DOODLE, PokemonType.NORMAL, 100, 10, -1, 0, 9) + new StatusMove(MoveId.DOODLE, PokemonType.NORMAL, 100, 10, -1, 0, 9) .attr(AbilityCopyAttr, true), - new SelfStatusMove(Moves.FILLET_AWAY, PokemonType.NORMAL, -1, 10, -1, 0, 9) + new SelfStatusMove(MoveId.FILLET_AWAY, PokemonType.NORMAL, -1, 10, -1, 0, 9) .attr(CutHpStatStageBoostAttr, [ Stat.ATK, Stat.SPATK, Stat.SPD ], 2, 2), - new AttackMove(Moves.KOWTOW_CLEAVE, PokemonType.DARK, MoveCategory.PHYSICAL, 85, -1, 10, -1, 0, 9) + new AttackMove(MoveId.KOWTOW_CLEAVE, PokemonType.DARK, MoveCategory.PHYSICAL, 85, -1, 10, -1, 0, 9) .slicingMove(), - new AttackMove(Moves.FLOWER_TRICK, PokemonType.GRASS, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 9) + new AttackMove(MoveId.FLOWER_TRICK, PokemonType.GRASS, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 9) .attr(CritOnlyAttr) .makesContact(false), - new AttackMove(Moves.TORCH_SONG, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) + new AttackMove(MoveId.TORCH_SONG, PokemonType.FIRE, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) .soundBased(), - new AttackMove(Moves.AQUA_STEP, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) + new AttackMove(MoveId.AQUA_STEP, PokemonType.WATER, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true) .danceMove(), - new AttackMove(Moves.RAGING_BULL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 9) + new AttackMove(MoveId.RAGING_BULL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 9) .attr(RagingBullTypeAttr) .attr(RemoveScreensAttr), - new AttackMove(Moves.MAKE_IT_RAIN, PokemonType.STEEL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) + new AttackMove(MoveId.MAKE_IT_RAIN, PokemonType.STEEL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(MoneyAttr) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1, true, { firstTargetOnly: true }) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.PSYBLADE, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) + new AttackMove(MoveId.PSYBLADE, PokemonType.PSYCHIC, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.ELECTRIC && user.isGrounded() ? 1.5 : 1) .slicingMove(), - new AttackMove(Moves.HYDRO_STEAM, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 9) + new AttackMove(MoveId.HYDRO_STEAM, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 9) .attr(IgnoreWeatherTypeDebuffAttr, WeatherType.SUNNY) .attr(MovePowerMultiplierAttr, (user, target, move) => { const weather = globalScene.arena.weather; @@ -11120,47 +11120,47 @@ export function initMoves() { } return [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(weather.weatherType) && !weather.isEffectSuppressed() ? 1.5 : 1; }), - new AttackMove(Moves.RUINATION, PokemonType.DARK, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 9) + new AttackMove(MoveId.RUINATION, PokemonType.DARK, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 9) .attr(TargetHalfHpDamageAttr), - new AttackMove(Moves.COLLISION_COURSE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) + new AttackMove(MoveId.COLLISION_COURSE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461 / 4096 : 1), - new AttackMove(Moves.ELECTRO_DRIFT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 9) + new AttackMove(MoveId.ELECTRO_DRIFT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461 / 4096 : 1) .makesContact(), - new SelfStatusMove(Moves.SHED_TAIL, PokemonType.NORMAL, -1, 10, -1, 0, 9) + new SelfStatusMove(MoveId.SHED_TAIL, PokemonType.NORMAL, -1, 10, -1, 0, 9) .attr(AddSubstituteAttr, 0.5, true) .attr(ForceSwitchOutAttr, true, SwitchType.SHED_TAIL) .condition(failIfLastInPartyCondition), - new SelfStatusMove(Moves.CHILLY_RECEPTION, PokemonType.ICE, -1, 10, -1, 0, 9) + new SelfStatusMove(MoveId.CHILLY_RECEPTION, PokemonType.ICE, -1, 10, -1, 0, 9) .attr(PreMoveMessageAttr, (user, move) => i18next.t("moveTriggers:chillyReception", { pokemonName: getPokemonNameWithAffix(user) })) .attr(ChillyReceptionAttr, true), - new SelfStatusMove(Moves.TIDY_UP, PokemonType.NORMAL, -1, 10, -1, 0, 9) + new SelfStatusMove(MoveId.TIDY_UP, PokemonType.NORMAL, -1, 10, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPD ], 1, true) .attr(RemoveArenaTrapAttr, true) .attr(RemoveAllSubstitutesAttr), - new StatusMove(Moves.SNOWSCAPE, PokemonType.ICE, -1, 10, -1, 0, 9) + new StatusMove(MoveId.SNOWSCAPE, PokemonType.ICE, -1, 10, -1, 0, 9) .attr(WeatherChangeAttr, WeatherType.SNOW) .target(MoveTarget.BOTH_SIDES), - new AttackMove(Moves.POUNCE, PokemonType.BUG, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 9) + new AttackMove(MoveId.POUNCE, PokemonType.BUG, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPD ], -1), - new AttackMove(Moves.TRAILBLAZE, PokemonType.GRASS, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 9) + new AttackMove(MoveId.TRAILBLAZE, PokemonType.GRASS, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true), - new AttackMove(Moves.CHILLING_WATER, PokemonType.WATER, MoveCategory.SPECIAL, 50, 100, 20, 100, 0, 9) + new AttackMove(MoveId.CHILLING_WATER, PokemonType.WATER, MoveCategory.SPECIAL, 50, 100, 20, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), - new AttackMove(Moves.HYPER_DRILL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) + new AttackMove(MoveId.HYPER_DRILL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) .ignoresProtect(), - new AttackMove(Moves.TWIN_BEAM, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 40, 100, 10, -1, 0, 9) + new AttackMove(MoveId.TWIN_BEAM, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 40, 100, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._2), - new AttackMove(Moves.RAGE_FIST, PokemonType.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) + new AttackMove(MoveId.RAGE_FIST, PokemonType.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) .attr(RageFistPowerAttr) .punchingMove(), - new AttackMove(Moves.ARMOR_CANNON, PokemonType.FIRE, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) + new AttackMove(MoveId.ARMOR_CANNON, PokemonType.FIRE, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], -1, true), - new AttackMove(Moves.BITTER_BLADE, PokemonType.FIRE, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 9) + new AttackMove(MoveId.BITTER_BLADE, PokemonType.FIRE, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 9) .attr(HitHealAttr) .slicingMove() .triageMove(), - new AttackMove(Moves.DOUBLE_SHOCK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 9) + new AttackMove(MoveId.DOUBLE_SHOCK, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 9) .condition((user) => { const userTypes = user.getTypes(true); return userTypes.includes(PokemonType.ELECTRIC); @@ -11169,71 +11169,71 @@ export function initMoves() { .attr(RemoveTypeAttr, PokemonType.ELECTRIC, (user) => { globalScene.queueMessage(i18next.t("moveTriggers:usedUpAllElectricity", { pokemonName: getPokemonNameWithAffix(user) })); }), - new AttackMove(Moves.GIGATON_HAMMER, PokemonType.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9) + new AttackMove(MoveId.GIGATON_HAMMER, PokemonType.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9) .makesContact(false) .condition((user, target, move) => { const turnMove = user.getLastXMoves(1); return !turnMove.length || turnMove[0].move !== move.id || turnMove[0].result !== MoveResult.SUCCESS; }), // TODO Add Instruct/Encore interaction - new AttackMove(Moves.COMEUPPANCE, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9) + new AttackMove(MoveId.COMEUPPANCE, PokemonType.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9) .attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5) .redirectCounter() .target(MoveTarget.ATTACKER), - new AttackMove(Moves.AQUA_CUTTER, PokemonType.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9) + new AttackMove(MoveId.AQUA_CUTTER, PokemonType.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9) .attr(HighCritAttr) .slicingMove() .makesContact(false), - new AttackMove(Moves.BLAZING_TORQUE, PokemonType.FIRE, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 9) + new AttackMove(MoveId.BLAZING_TORQUE, PokemonType.FIRE, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 9) .attr(StatusEffectAttr, StatusEffect.BURN) .makesContact(false), - new AttackMove(Moves.WICKED_TORQUE, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 10, 10, 0, 9) + new AttackMove(MoveId.WICKED_TORQUE, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 10, 10, 0, 9) .attr(StatusEffectAttr, StatusEffect.SLEEP) .makesContact(false), - new AttackMove(Moves.NOXIOUS_TORQUE, PokemonType.POISON, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) + new AttackMove(MoveId.NOXIOUS_TORQUE, PokemonType.POISON, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) .attr(StatusEffectAttr, StatusEffect.POISON) .makesContact(false), - new AttackMove(Moves.COMBAT_TORQUE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) + new AttackMove(MoveId.COMBAT_TORQUE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .makesContact(false), - new AttackMove(Moves.MAGICAL_TORQUE, PokemonType.FAIRY, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) + new AttackMove(MoveId.MAGICAL_TORQUE, PokemonType.FAIRY, MoveCategory.PHYSICAL, 100, 100, 10, 30, 0, 9) .attr(ConfuseAttr) .makesContact(false), - new AttackMove(Moves.BLOOD_MOON, PokemonType.NORMAL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 9) + new AttackMove(MoveId.BLOOD_MOON, PokemonType.NORMAL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 9) .condition((user, target, move) => { const turnMove = user.getLastXMoves(1); return !turnMove.length || turnMove[0].move !== move.id || turnMove[0].result !== MoveResult.SUCCESS; }), // TODO Add Instruct/Encore interaction - new AttackMove(Moves.MATCHA_GOTCHA, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 90, 15, 20, 0, 9) + new AttackMove(MoveId.MATCHA_GOTCHA, PokemonType.GRASS, MoveCategory.SPECIAL, 80, 90, 15, 20, 0, 9) .attr(HitHealAttr) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .target(MoveTarget.ALL_NEAR_ENEMIES) .triageMove(), - new AttackMove(Moves.SYRUP_BOMB, PokemonType.GRASS, MoveCategory.SPECIAL, 60, 85, 10, 100, 0, 9) + new AttackMove(MoveId.SYRUP_BOMB, PokemonType.GRASS, MoveCategory.SPECIAL, 60, 85, 10, 100, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.SYRUP_BOMB, false, false, 3) .ballBombMove(), - new AttackMove(Moves.IVY_CUDGEL, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 9) + new AttackMove(MoveId.IVY_CUDGEL, PokemonType.GRASS, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 9) .attr(IvyCudgelTypeAttr) .attr(HighCritAttr) .makesContact(false), - new ChargingAttackMove(Moves.ELECTRO_SHOT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 130, 100, 10, 100, 0, 9) + new ChargingAttackMove(MoveId.ELECTRO_SHOT, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 130, 100, 10, 100, 0, 9) .chargeText(i18next.t("moveTriggers:absorbedElectricity", { pokemonName: "{USER}" })) .chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), - new AttackMove(Moves.TERA_STARSTORM, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) + new AttackMove(MoveId.TERA_STARSTORM, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(TeraMoveCategoryAttr) .attr(TeraStarstormTypeAttr) .attr(VariableTargetAttr, (user, target, move) => user.hasSpecies(Species.TERAPAGOS) && (user.isTerastallized || globalScene.currentBattle.preTurnCommands[user.getFieldIndex()]?.command === Command.TERA) ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER) .partial(), /** Does not ignore abilities that affect stats, relevant in determining the move's category {@see TeraMoveCategoryAttr} */ - new AttackMove(Moves.FICKLE_BEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 80, 100, 5, 30, 0, 9) + new AttackMove(MoveId.FICKLE_BEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 80, 100, 5, 30, 0, 9) .attr(PreMoveMessageAttr, doublePowerChanceMessageFunc) .attr(DoublePowerChanceAttr) .edgeCase(), // Should not interact with Sheer Force - new SelfStatusMove(Moves.BURNING_BULWARK, PokemonType.FIRE, -1, 10, -1, 4, 9) + new SelfStatusMove(MoveId.BURNING_BULWARK, PokemonType.FIRE, -1, 10, -1, 4, 9) .attr(ProtectAttr, BattlerTagType.BURNING_BULWARK) .condition(failIfLastCondition), - new AttackMove(Moves.THUNDERCLAP, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9) + new AttackMove(MoveId.THUNDERCLAP, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9) .condition((user, target, move) => { const turnCommand = globalScene.currentBattle.turnCommands[target.getBattlerIndex()]; if (!turnCommand || !turnCommand.move) { @@ -11241,35 +11241,35 @@ export function initMoves() { } return (turnCommand.command === Command.FIGHT && !target.turnData.acted && allMoves[turnCommand.move.move].category !== MoveCategory.STATUS); }), - new AttackMove(Moves.MIGHTY_CLEAVE, PokemonType.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) + new AttackMove(MoveId.MIGHTY_CLEAVE, PokemonType.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) .slicingMove() .ignoresProtect(), - new AttackMove(Moves.TACHYON_CUTTER, PokemonType.STEEL, MoveCategory.SPECIAL, 50, -1, 10, -1, 0, 9) + new AttackMove(MoveId.TACHYON_CUTTER, PokemonType.STEEL, MoveCategory.SPECIAL, 50, -1, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._2) .slicingMove(), - new AttackMove(Moves.HARD_PRESS, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9) + new AttackMove(MoveId.HARD_PRESS, PokemonType.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9) .attr(OpponentHighHpPowerAttr, 100), - new StatusMove(Moves.DRAGON_CHEER, PokemonType.DRAGON, -1, 15, -1, 0, 9) + new StatusMove(MoveId.DRAGON_CHEER, PokemonType.DRAGON, -1, 15, -1, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.DRAGON_CHEER, false, true) .target(MoveTarget.NEAR_ALLY), - new AttackMove(Moves.ALLURING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) + new AttackMove(MoveId.ALLURING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(AddBattlerTagIfBoostedAttr, BattlerTagType.CONFUSED) .soundBased(), - new AttackMove(Moves.TEMPER_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 9) + new AttackMove(MoveId.TEMPER_FLARE, PokemonType.FIRE, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 9) .attr(MovePowerMultiplierAttr, (user, target, move) => user.getLastXMoves(2)[1]?.result === MoveResult.MISS || user.getLastXMoves(2)[1]?.result === MoveResult.FAIL ? 2 : 1), - new AttackMove(Moves.SUPERCELL_SLAM, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 95, 15, -1, 0, 9) + new AttackMove(MoveId.SUPERCELL_SLAM, PokemonType.ELECTRIC, MoveCategory.PHYSICAL, 100, 95, 15, -1, 0, 9) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagForDoubleDamageAttr, BattlerTagType.MINIMIZED) .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) .recklessMove(), - new AttackMove(Moves.PSYCHIC_NOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 9) + new AttackMove(MoveId.PSYCHIC_NOISE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 9) .soundBased() .attr(AddBattlerTagAttr, BattlerTagType.HEAL_BLOCK, false, false, 2), - new AttackMove(Moves.UPPER_HAND, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 65, 100, 15, 100, 3, 9) + new AttackMove(MoveId.UPPER_HAND, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 65, 100, 15, 100, 3, 9) .attr(FlinchAttr) .condition(new UpperHandCondition()), - new AttackMove(Moves.MALIGNANT_CHAIN, PokemonType.POISON, MoveCategory.SPECIAL, 100, 100, 5, 50, 0, 9) + new AttackMove(MoveId.MALIGNANT_CHAIN, PokemonType.POISON, MoveCategory.SPECIAL, 100, 100, 5, 50, 0, 9) .attr(StatusEffectAttr, StatusEffect.TOXIC) ); allMoves.map(m => { diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index acfc8cb16a1..c948ccefc93 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -22,7 +22,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { BerryModifier, PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { BattlerTagType } from "#enums/battler-tag-type"; import { randInt } from "#app/utils/common"; import { BattlerIndex } from "#app/battle"; @@ -232,7 +232,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde isBoss: true, bossSegments: 3, shiny: false, // Shiny lock because of consistency issues between the different options - moveSet: [Moves.THRASH, Moves.CRUNCH, Moves.BODY_PRESS, Moves.SLACK_OFF], + moveSet: [MoveId.THRASH, MoveId.CRUNCH, MoveId.BODY_PRESS, MoveId.SLACK_OFF], modifierConfigs: bossModifierConfigs, tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { @@ -302,7 +302,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde encounter.startOfBattleEffects.push({ sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.ENEMY], - move: new PokemonMove(Moves.STUFF_CHEEKS), + move: new PokemonMove(MoveId.STUFF_CHEEKS), ignorePp: true, }); @@ -375,10 +375,10 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde const level = getHighestLevelPlayerPokemon(false, true).level - 2; const greedent = new EnemyPokemon(getPokemonSpecies(Species.GREEDENT), level, TrainerSlot.NONE, false, true); greedent.moveset = [ - new PokemonMove(Moves.THRASH), - new PokemonMove(Moves.BODY_PRESS), - new PokemonMove(Moves.STUFF_CHEEKS), - new PokemonMove(Moves.SLACK_OFF), + new PokemonMove(MoveId.THRASH), + new PokemonMove(MoveId.BODY_PRESS), + new PokemonMove(MoveId.STUFF_CHEEKS), + new PokemonMove(MoveId.SLACK_OFF), ]; greedent.passive = true; diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 17c1c31d55e..d8abf9c5e6e 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -27,7 +27,7 @@ import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import { getEncounterText, showEncounterDialogue } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; @@ -144,25 +144,31 @@ const POOL_3_POKEMON: { species: Species; formIndex?: number }[] = [ const POOL_4_POKEMON = [Species.GENESECT, Species.SLITHER_WING, Species.BUZZWOLE, Species.PHEROMOSA]; -const PHYSICAL_TUTOR_MOVES = [Moves.MEGAHORN, Moves.ATTACK_ORDER, Moves.BUG_BITE, Moves.FIRST_IMPRESSION, Moves.LUNGE]; +const PHYSICAL_TUTOR_MOVES = [ + MoveId.MEGAHORN, + MoveId.ATTACK_ORDER, + MoveId.BUG_BITE, + MoveId.FIRST_IMPRESSION, + MoveId.LUNGE, +]; const SPECIAL_TUTOR_MOVES = [ - Moves.SILVER_WIND, - Moves.SIGNAL_BEAM, - Moves.BUG_BUZZ, - Moves.POLLEN_PUFF, - Moves.STRUGGLE_BUG, + MoveId.SILVER_WIND, + MoveId.SIGNAL_BEAM, + MoveId.BUG_BUZZ, + MoveId.POLLEN_PUFF, + MoveId.STRUGGLE_BUG, ]; const STATUS_TUTOR_MOVES = [ - Moves.STRING_SHOT, - Moves.DEFEND_ORDER, - Moves.RAGE_POWDER, - Moves.STICKY_WEB, - Moves.SILK_TRAP, + MoveId.STRING_SHOT, + MoveId.DEFEND_ORDER, + MoveId.RAGE_POWDER, + MoveId.STICKY_WEB, + MoveId.SILK_TRAP, ]; -const MISC_TUTOR_MOVES = [Moves.LEECH_LIFE, Moves.U_TURN, Moves.HEAL_ORDER, Moves.QUIVER_DANCE, Moves.INFESTATION]; +const MISC_TUTOR_MOVES = [MoveId.LEECH_LIFE, MoveId.U_TURN, MoveId.HEAL_ORDER, MoveId.QUIVER_DANCE, MoveId.INFESTATION]; /** * Wave breakpoints that determine how strong to make the Bug-Type Superfan's team diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index bace0d82dda..20c8fd8f1a7 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -42,7 +42,7 @@ import { Ability } from "#app/data/abilities/ability-class"; import { BerryModifier } from "#app/modifier/modifier"; import { BerryType } from "#enums/berry-type"; import { BattlerIndex } from "#app/battle"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { MoveCategory } from "#enums/MoveCategory"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; @@ -156,7 +156,7 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder { species: getPokemonSpecies(Species.MR_MIME), isBoss: true, - moveSet: [Moves.TEETER_DANCE, Moves.ALLY_SWITCH, Moves.DAZZLING_GLEAM, Moves.PSYCHIC], + moveSet: [MoveId.TEETER_DANCE, MoveId.ALLY_SWITCH, MoveId.DAZZLING_GLEAM, MoveId.PSYCHIC], }, { // Blacephalon has the random ability from pool, and 2 entirely random types to fit with the theme of the encounter @@ -166,14 +166,14 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder types: [firstType, secondType], }), isBoss: true, - moveSet: [Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN], + moveSet: [MoveId.TRICK, MoveId.HYPNOSIS, MoveId.SHADOW_BALL, MoveId.MIND_BLOWN], }, ], doubleBattle: true, }); // Load animations/sfx for start of fight moves - loadCustomMovesForEncounter([Moves.ROLE_PLAY, Moves.TAUNT]); + loadCustomMovesForEncounter([MoveId.ROLE_PLAY, MoveId.TAUNT]); encounter.setDialogueToken("blacephalonName", getPokemonSpecies(Species.BLACEPHALON).getName()); @@ -208,19 +208,19 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder // Mr. Mime copies the Blacephalon's random ability sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.ENEMY_2], - move: new PokemonMove(Moves.ROLE_PLAY), + move: new PokemonMove(MoveId.ROLE_PLAY), ignorePp: true, }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.TAUNT), + move: new PokemonMove(MoveId.TAUNT), ignorePp: true, }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, targets: [BattlerIndex.PLAYER_2], - move: new PokemonMove(Moves.TAUNT), + move: new PokemonMove(MoveId.TAUNT), ignorePp: true, }, ); diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index bdd4bfaacaa..8db255bbf45 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -33,7 +33,7 @@ import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler" import { BattlerTagType } from "#enums/battler-tag-type"; import { Biome } from "#enums/biome"; import { EncounterAnim } from "#enums/encounter-anims"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; @@ -130,11 +130,11 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder const species = getPokemonSpecies(Species.ORICORIO); const level = getEncounterPokemonLevelForWave(STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER); const enemyPokemon = new EnemyPokemon(species, level, TrainerSlot.NONE, false); - if (!enemyPokemon.moveset.some(m => m && m.getMove().id === Moves.REVELATION_DANCE)) { + if (!enemyPokemon.moveset.some(m => m && m.getMove().id === MoveId.REVELATION_DANCE)) { if (enemyPokemon.moveset.length < 4) { - enemyPokemon.moveset.push(new PokemonMove(Moves.REVELATION_DANCE)); + enemyPokemon.moveset.push(new PokemonMove(MoveId.REVELATION_DANCE)); } else { - enemyPokemon.moveset[0] = new PokemonMove(Moves.REVELATION_DANCE); + enemyPokemon.moveset[0] = new PokemonMove(MoveId.REVELATION_DANCE); } } @@ -215,7 +215,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder encounter.startOfBattleEffects.push({ sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.REVELATION_DANCE), + move: new PokemonMove(MoveId.REVELATION_DANCE), ignorePp: true, }); @@ -246,7 +246,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder const onPokemonSelected = (pokemon: PlayerPokemon) => { encounter.setDialogueToken("selectedPokemon", pokemon.getNameToRender()); globalScene.unshiftPhase( - new LearnMovePhase(globalScene.getPlayerParty().indexOf(pokemon), Moves.REVELATION_DANCE), + new LearnMovePhase(globalScene.getPlayerParty().indexOf(pokemon), MoveId.REVELATION_DANCE), ); // Play animation again to "learn" the dance diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index e3bdfe3ec40..3d658d0bfab 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -27,7 +27,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { BattlerIndex } from "#app/battle"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { WeatherType } from "#enums/weather-type"; import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; @@ -138,7 +138,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w ]; // Load animations/sfx for Volcarona moves - loadCustomMovesForEncounter([Moves.FIRE_SPIN, Moves.QUIVER_DANCE]); + loadCustomMovesForEncounter([MoveId.FIRE_SPIN, MoveId.QUIVER_DANCE]); const pokemon = globalScene.getEnemyPokemon(); globalScene.arena.trySetWeather(WeatherType.SUNNY, pokemon); @@ -193,13 +193,13 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.FIRE_SPIN), + move: new PokemonMove(MoveId.FIRE_SPIN), ignorePp: true, }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, targets: [BattlerIndex.PLAYER_2], - move: new PokemonMove(Moves.FIRE_SPIN), + move: new PokemonMove(MoveId.FIRE_SPIN), ignorePp: true, }, ); diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 6d8a1fc8c6b..82e560cdcb0 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -1,5 +1,5 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; @@ -13,8 +13,8 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { PokemonMove } from "#app/field/pokemon"; -const OPTION_1_REQUIRED_MOVE = Moves.SURF; -const OPTION_2_REQUIRED_MOVE = Moves.FLY; +const OPTION_1_REQUIRED_MOVE = MoveId.SURF; +const OPTION_2_REQUIRED_MOVE = MoveId.FLY; /** * Damage percentage taken when wandering aimlessly. * Can be a number between `0` - `100`. diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index e6c11378163..b59fa680227 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -19,7 +19,7 @@ import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { GameOverPhase } from "#app/phases/game-over-phase"; import { randSeedInt } from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; @@ -89,7 +89,7 @@ export const MysteriousChestEncounter: MysteryEncounter = MysteryEncounterBuilde species: getPokemonSpecies(Species.GIMMIGHOUL), formIndex: 0, isBoss: true, - moveSet: [Moves.NASTY_PLOT, Moves.SHADOW_BALL, Moves.POWER_GEM, Moves.THIEF], + moveSet: [MoveId.NASTY_PLOT, MoveId.SHADOW_BALL, MoveId.POWER_GEM, MoveId.THIEF], }, ], }; diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 2654f6b18d8..df7eacee1d9 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -20,7 +20,7 @@ import { } from "../utils/encounter-phase-utils"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { Nature } from "#enums/nature"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { AiType, PokemonMove } from "#app/field/pokemon"; import { getPokemonSpecies } from "#app/data/pokemon-species"; @@ -76,7 +76,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil shiny: false, // Shiny lock because shiny is rolled only if the battle option is picked status: [StatusEffect.SLEEP, 6], // Extra turns on timer for Snorlax's start of fight moves nature: Nature.DOCILE, - moveSet: [Moves.BODY_SLAM, Moves.CRUNCH, Moves.SLEEP_TALK, Moves.REST], + moveSet: [MoveId.BODY_SLAM, MoveId.CRUNCH, MoveId.SLEEP_TALK, MoveId.REST], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType, @@ -106,7 +106,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil encounter.enemyPartyConfigs = [config]; // Load animations/sfx for Snorlax fight start moves - loadCustomMovesForEncounter([Moves.SNORE]); + loadCustomMovesForEncounter([MoveId.SNORE]); encounter.setDialogueToken("snorlaxName", getPokemonSpecies(Species.SNORLAX).getName()); @@ -133,14 +133,12 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], fillRemaining: true, }); - encounter.startOfBattleEffects.push( - { - sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.SNORE), - ignorePp: true, - }, - ); + encounter.startOfBattleEffects.push({ + sourceBattlerIndex: BattlerIndex.ENEMY, + targets: [BattlerIndex.PLAYER], + move: new PokemonMove(MoveId.SNORE), + ignorePp: true, + }); await initBattleWithEnemyConfig(encounter.enemyPartyConfigs[0]); }, ) diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 74cda6fd205..70ca7586fcc 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -18,7 +18,7 @@ import { Species } from "#enums/species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { Nature } from "#enums/nature"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type { PlayerPokemon } from "#app/field/pokemon"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import type { IEggOptions } from "#app/data/egg"; @@ -482,7 +482,7 @@ function getPartyConfig(): EnemyPartyConfig { abilityIndex: 1, // Magic Guard shiny: false, nature: Nature.ADAMANT, - moveSet: [Moves.FIRE_PUNCH, Moves.ICE_PUNCH, Moves.THUNDER_PUNCH, Moves.METEOR_MASH], + moveSet: [MoveId.FIRE_PUNCH, MoveId.ICE_PUNCH, MoveId.THUNDER_PUNCH, MoveId.METEOR_MASH], ivs: [31, 31, 31, 31, 31, 31], tera: PokemonType.FAIRY, }, @@ -502,7 +502,7 @@ function getPartyConfig(): EnemyPartyConfig { shiny: true, variant: 1, nature: Nature.MODEST, - moveSet: [Moves.MOONBLAST, Moves.MYSTICAL_FIRE, Moves.ICE_BEAM, Moves.THUNDERBOLT], + moveSet: [MoveId.MOONBLAST, MoveId.MYSTICAL_FIRE, MoveId.ICE_BEAM, MoveId.THUNDERBOLT], ivs: [31, 31, 31, 31, 31, 31], }, { @@ -515,7 +515,7 @@ function getPartyConfig(): EnemyPartyConfig { shiny: true, variant: 2, nature: Nature.BOLD, - moveSet: [Moves.TRI_ATTACK, Moves.STORED_POWER, Moves.TAKE_HEART, Moves.MOONLIGHT], + moveSet: [MoveId.TRI_ATTACK, MoveId.STORED_POWER, MoveId.TAKE_HEART, MoveId.MOONLIGHT], ivs: [31, 31, 31, 31, 31, 31], }, ); diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index 294f1a78b34..09c3778c218 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -20,7 +20,7 @@ import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { modifyPlayerPokemonBST } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; @@ -94,7 +94,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder shiny: false, // Shiny lock because shiny is rolled only if the battle option is picked customPokemonData: new CustomPokemonData({ spriteScale: 1.25 }), nature: Nature.HARDY, - moveSet: [Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER], + moveSet: [MoveId.INFESTATION, MoveId.SALT_CURE, MoveId.GASTRO_ACID, MoveId.HEAL_ORDER], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType, @@ -126,7 +126,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder encounter.enemyPartyConfigs = [config]; - loadCustomMovesForEncounter([Moves.GASTRO_ACID, Moves.STEALTH_ROCK]); + loadCustomMovesForEncounter([MoveId.GASTRO_ACID, MoveId.STEALTH_ROCK]); encounter.setDialogueToken("shuckleName", getPokemonSpecies(Species.SHUCKLE).getName()); @@ -210,13 +210,13 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.GASTRO_ACID), + move: new PokemonMove(MoveId.GASTRO_ACID), ignorePp: true, }, { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.STEALTH_ROCK), + move: new PokemonMove(MoveId.STEALTH_ROCK), ignorePp: true, }, ); diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index 37c77741f6e..c0a5bc42e77 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -18,7 +18,7 @@ import { TrainerType } from "#enums/trainer-type"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Nature } from "#enums/nature"; import { PokemonType } from "#enums/pokemon-type"; import { BerryType } from "#enums/berry-type"; @@ -260,7 +260,7 @@ function getVictorTrainerConfig(): EnemyPartyConfig { isBoss: false, abilityIndex: 0, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.BRAVE_BIRD, Moves.PROTECT, Moves.QUICK_ATTACK], + moveSet: [MoveId.FACADE, MoveId.BRAVE_BIRD, MoveId.PROTECT, MoveId.QUICK_ATTACK], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType, @@ -278,7 +278,7 @@ function getVictorTrainerConfig(): EnemyPartyConfig { isBoss: false, abilityIndex: 1, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.OBSTRUCT, Moves.NIGHT_SLASH, Moves.FIRE_PUNCH], + moveSet: [MoveId.FACADE, MoveId.OBSTRUCT, MoveId.NIGHT_SLASH, MoveId.FIRE_PUNCH], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType, @@ -304,7 +304,7 @@ function getVictoriaTrainerConfig(): EnemyPartyConfig { isBoss: false, abilityIndex: 0, // Natural Cure nature: Nature.CALM, - moveSet: [Moves.SYNTHESIS, Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.SLEEP_POWDER], + moveSet: [MoveId.SYNTHESIS, MoveId.SLUDGE_BOMB, MoveId.GIGA_DRAIN, MoveId.SLEEP_POWDER], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType, @@ -322,7 +322,7 @@ function getVictoriaTrainerConfig(): EnemyPartyConfig { isBoss: false, formIndex: 1, nature: Nature.TIMID, - moveSet: [Moves.PSYSHOCK, Moves.MOONBLAST, Moves.SHADOW_BALL, Moves.WILL_O_WISP], + moveSet: [MoveId.PSYSHOCK, MoveId.MOONBLAST, MoveId.SHADOW_BALL, MoveId.WILL_O_WISP], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, [ @@ -353,7 +353,7 @@ function getViviTrainerConfig(): EnemyPartyConfig { isBoss: false, abilityIndex: 3, // Lightning Rod nature: Nature.ADAMANT, - moveSet: [Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST], + moveSet: [MoveId.WATERFALL, MoveId.MEGAHORN, MoveId.KNOCK_OFF, MoveId.REST], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType, @@ -372,7 +372,7 @@ function getViviTrainerConfig(): EnemyPartyConfig { isBoss: false, abilityIndex: 1, // Poison Heal nature: Nature.JOLLY, - moveSet: [Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH], + moveSet: [MoveId.SPORE, MoveId.SWORDS_DANCE, MoveId.SEED_BOMB, MoveId.DRAIN_PUNCH], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType, @@ -390,7 +390,7 @@ function getViviTrainerConfig(): EnemyPartyConfig { isBoss: false, formIndex: 1, nature: Nature.CALM, - moveSet: [Moves.EARTH_POWER, Moves.FIRE_BLAST, Moves.YAWN, Moves.PROTECT], + moveSet: [MoveId.EARTH_POWER, MoveId.FIRE_BLAST, MoveId.YAWN, MoveId.PROTECT], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, @@ -412,7 +412,7 @@ function getVickyTrainerConfig(): EnemyPartyConfig { isBoss: false, formIndex: 1, nature: Nature.IMPISH, - moveSet: [Moves.AXE_KICK, Moves.ICE_PUNCH, Moves.ZEN_HEADBUTT, Moves.BULLET_PUNCH], + moveSet: [MoveId.AXE_KICK, MoveId.ICE_PUNCH, MoveId.ZEN_HEADBUTT, MoveId.BULLET_PUNCH], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType, @@ -433,7 +433,7 @@ function getVitoTrainerConfig(): EnemyPartyConfig { isBoss: false, abilityIndex: 0, // Soundproof nature: Nature.MODEST, - moveSet: [Moves.THUNDERBOLT, Moves.GIGA_DRAIN, Moves.FOUL_PLAY, Moves.THUNDER_WAVE], + moveSet: [MoveId.THUNDERBOLT, MoveId.GIGA_DRAIN, MoveId.FOUL_PLAY, MoveId.THUNDER_WAVE], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER, [Stat.SPD]) as PokemonHeldItemModifierType, @@ -447,7 +447,7 @@ function getVitoTrainerConfig(): EnemyPartyConfig { isBoss: false, abilityIndex: 2, // Gluttony nature: Nature.QUIET, - moveSet: [Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE], + moveSet: [MoveId.SLUDGE_BOMB, MoveId.GIGA_DRAIN, MoveId.ICE_BEAM, MoveId.EARTHQUAKE], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType, @@ -500,7 +500,7 @@ function getVitoTrainerConfig(): EnemyPartyConfig { isBoss: false, abilityIndex: 2, // Tangled Feet nature: Nature.JOLLY, - moveSet: [Moves.DRILL_PECK, Moves.QUICK_ATTACK, Moves.THRASH, Moves.KNOCK_OFF], + moveSet: [MoveId.DRILL_PECK, MoveId.QUICK_ATTACK, MoveId.THRASH, MoveId.KNOCK_OFF], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.KINGS_ROCK) as PokemonHeldItemModifierType, @@ -514,7 +514,7 @@ function getVitoTrainerConfig(): EnemyPartyConfig { isBoss: false, formIndex: 1, nature: Nature.BOLD, - moveSet: [Moves.PSYCHIC, Moves.SHADOW_BALL, Moves.FOCUS_BLAST, Moves.THUNDERBOLT], + moveSet: [MoveId.PSYCHIC, MoveId.SHADOW_BALL, MoveId.FOCUS_BLAST, MoveId.THUNDERBOLT], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.WIDE_LENS) as PokemonHeldItemModifierType, @@ -528,7 +528,7 @@ function getVitoTrainerConfig(): EnemyPartyConfig { isBoss: false, abilityIndex: 0, // Sheer Force nature: Nature.IMPISH, - moveSet: [Moves.EARTHQUAKE, Moves.U_TURN, Moves.FLARE_BLITZ, Moves.ROCK_SLIDE], + moveSet: [MoveId.EARTHQUAKE, MoveId.U_TURN, MoveId.FLARE_BLITZ, MoveId.ROCK_SLIDE], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 1e1db14705a..08959e7c0df 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -23,7 +23,7 @@ import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter- import i18next from "#app/plugins/i18n"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { PokemonMove } from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/constants"; @@ -81,7 +81,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde shiny: false, // Shiny lock because of custom intro sprite formIndex: 1, // Gmax bossSegmentModifier: 1, // +1 Segment from normal - moveSet: [Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.HAMMER_ARM, Moves.PAYBACK], + moveSet: [MoveId.GUNK_SHOT, MoveId.STOMPING_TANTRUM, MoveId.HAMMER_ARM, MoveId.PAYBACK], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, @@ -127,7 +127,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde encounter.enemyPartyConfigs = [config]; // Load animations/sfx for Garbodor fight start moves - loadCustomMovesForEncounter([Moves.TOXIC, Moves.STOCKPILE]); + loadCustomMovesForEncounter([MoveId.TOXIC, MoveId.STOCKPILE]); globalScene.loadSe("PRSFX- Dig2", "battle_anims", "PRSFX- Dig2.wav"); globalScene.loadSe("PRSFX- Venom Drench", "battle_anims", "PRSFX- Venom Drench.wav"); @@ -206,13 +206,13 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.PLAYER], - move: new PokemonMove(Moves.TOXIC), + move: new PokemonMove(MoveId.TOXIC), ignorePp: true, }, { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.ENEMY], - move: new PokemonMove(Moves.STOCKPILE), + move: new PokemonMove(MoveId.STOCKPILE), ignorePp: true, }, ); diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index f4eec5b0923..aff90a9480a 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -28,7 +28,7 @@ import { } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import PokemonData from "#app/system/pokemon-data"; import { isNullOrUndefined, randSeedInt } from "#app/utils/common"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { SelfStatusMove } from "#app/data/moves/move"; import { PokeballType } from "#enums/pokeball"; @@ -73,7 +73,7 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder. const eggMoves = pokemon.getEggMoves(); if (eggMoves) { const eggMoveIndex = randSeedInt(4); - const randomEggMove: Moves = eggMoves[eggMoveIndex]; + const randomEggMove: MoveId = eggMoves[eggMoveIndex]; encounter.misc = { eggMove: randomEggMove, pokemon: pokemon, @@ -270,10 +270,10 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder. ) .build(); -function givePokemonExtraEggMove(pokemon: EnemyPokemon, previousEggMove: Moves) { +function givePokemonExtraEggMove(pokemon: EnemyPokemon, previousEggMove: MoveId) { const eggMoves = pokemon.getEggMoves(); if (eggMoves) { - let randomEggMove: Moves = eggMoves[randSeedInt(4)]; + let randomEggMove: MoveId = eggMoves[randSeedInt(4)]; while (randomEggMove === previousEggMove) { randomEggMove = eggMoves[randSeedInt(4)]; } diff --git a/src/data/mystery-encounters/mystery-encounter-option.ts b/src/data/mystery-encounters/mystery-encounter-option.ts index 57dd50fa972..17b744bf7ed 100644 --- a/src/data/mystery-encounters/mystery-encounter-option.ts +++ b/src/data/mystery-encounters/mystery-encounter-option.ts @@ -1,5 +1,5 @@ import type { OptionTextDisplay } from "#app/data/mystery-encounters/mystery-encounter-dialogue"; -import type { Moves } from "#app/enums/moves"; +import type { MoveId } from "#app/enums/moves"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { globalScene } from "#app/global-scene"; @@ -300,7 +300,7 @@ export class MysteryEncounterOptionBuilder implements Partial !pokemon.moveset.find(m => m.moveId === tm)).includes(reqMove), ); if (includedCompatMoves.length > 0) { - return ["compatibleMove", Moves[includedCompatMoves[0]]]; + return ["compatibleMove", MoveId[includedCompatMoves[0]]]; } return ["compatibleMove", ""]; } diff --git a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts index 37194aef78e..a03f6a6462c 100644 --- a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts +++ b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts @@ -1,4 +1,4 @@ -import type { Moves } from "#app/enums/moves"; +import type { MoveId } from "#app/enums/moves"; import type { PlayerPokemon } from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import { isNullOrUndefined } from "#app/utils/common"; @@ -21,13 +21,13 @@ export interface CanLearnMoveRequirementOptions { * Requires that a pokemon can learn a specific move/moveset. */ export class CanLearnMoveRequirement extends EncounterPokemonRequirement { - private readonly requiredMoves: Moves[]; + private readonly requiredMoves: MoveId[]; private readonly excludeLevelMoves?: boolean; private readonly excludeTmMoves?: boolean; private readonly excludeEggMoves?: boolean; private readonly includeFainted?: boolean; - constructor(requiredMoves: Moves | Moves[], options: CanLearnMoveRequirementOptions = {}) { + constructor(requiredMoves: MoveId | MoveId[], options: CanLearnMoveRequirementOptions = {}) { super(); this.requiredMoves = Array.isArray(requiredMoves) ? requiredMoves : [requiredMoves]; @@ -69,12 +69,12 @@ export class CanLearnMoveRequirement extends EncounterPokemonRequirement { return ["requiredMoves", this.requiredMoves.map(m => new PokemonMove(m).getName()).join(", ")]; } - private getPokemonLevelMoves(pkm: PlayerPokemon): Moves[] { + private getPokemonLevelMoves(pkm: PlayerPokemon): MoveId[] { return pkm.getLevelMoves().map(([_level, move]) => move); } - private getAllPokemonMoves(pkm: PlayerPokemon): Moves[] { - const allPokemonMoves: Moves[] = []; + private getAllPokemonMoves(pkm: PlayerPokemon): MoveId[] { + const allPokemonMoves: MoveId[] = []; if (!this.excludeLevelMoves) { allPokemonMoves.push(...(this.getPokemonLevelMoves(pkm) ?? [])); diff --git a/src/data/mystery-encounters/requirements/requirement-groups.ts b/src/data/mystery-encounters/requirements/requirement-groups.ts index e429be64c19..53d4b25e7b7 100644 --- a/src/data/mystery-encounters/requirements/requirement-groups.ts +++ b/src/data/mystery-encounters/requirements/requirement-groups.ts @@ -1,104 +1,111 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { AbilityId } from "#enums/ability-id"; /** * Moves that "steal" things */ -export const STEALING_MOVES = [Moves.PLUCK, Moves.COVET, Moves.KNOCK_OFF, Moves.THIEF, Moves.TRICK, Moves.SWITCHEROO]; +export const STEALING_MOVES = [ + MoveId.PLUCK, + MoveId.COVET, + MoveId.KNOCK_OFF, + MoveId.THIEF, + MoveId.TRICK, + MoveId.SWITCHEROO, +]; /** * Moves that "charm" someone */ export const CHARMING_MOVES = [ - Moves.CHARM, - Moves.FLATTER, - Moves.DRAGON_CHEER, - Moves.ALLURING_VOICE, - Moves.ATTRACT, - Moves.SWEET_SCENT, - Moves.CAPTIVATE, - Moves.AROMATIC_MIST, + MoveId.CHARM, + MoveId.FLATTER, + MoveId.DRAGON_CHEER, + MoveId.ALLURING_VOICE, + MoveId.ATTRACT, + MoveId.SWEET_SCENT, + MoveId.CAPTIVATE, + MoveId.AROMATIC_MIST, ]; /** * Moves for the Dancer ability */ export const DANCING_MOVES = [ - Moves.AQUA_STEP, - Moves.CLANGOROUS_SOUL, - Moves.DRAGON_DANCE, - Moves.FEATHER_DANCE, - Moves.FIERY_DANCE, - Moves.LUNAR_DANCE, - Moves.PETAL_DANCE, - Moves.REVELATION_DANCE, - Moves.QUIVER_DANCE, - Moves.SWORDS_DANCE, - Moves.TEETER_DANCE, - Moves.VICTORY_DANCE, + MoveId.AQUA_STEP, + MoveId.CLANGOROUS_SOUL, + MoveId.DRAGON_DANCE, + MoveId.FEATHER_DANCE, + MoveId.FIERY_DANCE, + MoveId.LUNAR_DANCE, + MoveId.PETAL_DANCE, + MoveId.REVELATION_DANCE, + MoveId.QUIVER_DANCE, + MoveId.SWORDS_DANCE, + MoveId.TEETER_DANCE, + MoveId.VICTORY_DANCE, ]; /** * Moves that can distract someone/something */ export const DISTRACTION_MOVES = [ - Moves.FAKE_OUT, - Moves.FOLLOW_ME, - Moves.TAUNT, - Moves.ROAR, - Moves.TELEPORT, - Moves.CHARM, - Moves.FAKE_TEARS, - Moves.TICKLE, - Moves.CAPTIVATE, - Moves.RAGE_POWDER, - Moves.SUBSTITUTE, - Moves.SHED_TAIL, + MoveId.FAKE_OUT, + MoveId.FOLLOW_ME, + MoveId.TAUNT, + MoveId.ROAR, + MoveId.TELEPORT, + MoveId.CHARM, + MoveId.FAKE_TEARS, + MoveId.TICKLE, + MoveId.CAPTIVATE, + MoveId.RAGE_POWDER, + MoveId.SUBSTITUTE, + MoveId.SHED_TAIL, ]; /** * Moves that protect in some way */ export const PROTECTING_MOVES = [ - Moves.PROTECT, - Moves.WIDE_GUARD, - Moves.MAX_GUARD, - Moves.SAFEGUARD, - Moves.REFLECT, - Moves.BARRIER, - Moves.QUICK_GUARD, - Moves.FLOWER_SHIELD, - Moves.KINGS_SHIELD, - Moves.CRAFTY_SHIELD, - Moves.SPIKY_SHIELD, - Moves.OBSTRUCT, - Moves.DETECT, + MoveId.PROTECT, + MoveId.WIDE_GUARD, + MoveId.MAX_GUARD, + MoveId.SAFEGUARD, + MoveId.REFLECT, + MoveId.BARRIER, + MoveId.QUICK_GUARD, + MoveId.FLOWER_SHIELD, + MoveId.KINGS_SHIELD, + MoveId.CRAFTY_SHIELD, + MoveId.SPIKY_SHIELD, + MoveId.OBSTRUCT, + MoveId.DETECT, ]; /** * Moves that (loosely) can be used to trap/rob someone */ export const EXTORTION_MOVES = [ - Moves.BIND, - Moves.CLAMP, - Moves.INFESTATION, - Moves.SAND_TOMB, - Moves.SNAP_TRAP, - Moves.THUNDER_CAGE, - Moves.WRAP, - Moves.SPIRIT_SHACKLE, - Moves.MEAN_LOOK, - Moves.JAW_LOCK, - Moves.BLOCK, - Moves.SPIDER_WEB, - Moves.ANCHOR_SHOT, - Moves.OCTOLOCK, - Moves.PURSUIT, - Moves.CONSTRICT, - Moves.BEAT_UP, - Moves.COIL, - Moves.WRING_OUT, - Moves.STRING_SHOT, + MoveId.BIND, + MoveId.CLAMP, + MoveId.INFESTATION, + MoveId.SAND_TOMB, + MoveId.SNAP_TRAP, + MoveId.THUNDER_CAGE, + MoveId.WRAP, + MoveId.SPIRIT_SHACKLE, + MoveId.MEAN_LOOK, + MoveId.JAW_LOCK, + MoveId.BLOCK, + MoveId.SPIDER_WEB, + MoveId.ANCHOR_SHOT, + MoveId.OCTOLOCK, + MoveId.PURSUIT, + MoveId.CONSTRICT, + MoveId.BEAT_UP, + MoveId.COIL, + MoveId.WRING_OUT, + MoveId.STRING_SHOT, ]; /** diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 0215928bbe8..1f5b0a3e8e6 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -39,7 +39,7 @@ import i18next from "i18next"; import Trainer, { TrainerVariant } from "#app/field/trainer"; import type { Gender } from "#app/data/gender"; import type { Nature } from "#enums/nature"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { Status } from "#app/data/status-effect"; @@ -106,7 +106,7 @@ export interface EnemyPokemonConfig { level?: number; gender?: Gender; passive?: boolean; - moveSet?: Moves[]; + moveSet?: MoveId[]; nature?: Nature; ivs?: [number, number, number, number, number, number]; shiny?: boolean; @@ -460,7 +460,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): * This promise does not need to be awaited on if called in an encounter onInit (will just load lazily) * @param moves */ -export function loadCustomMovesForEncounter(moves: Moves | Moves[]) { +export function loadCustomMovesForEncounter(moves: MoveId | MoveId[]) { moves = Array.isArray(moves) ? moves : [moves]; return Promise.all(moves.map(move => initMoveAnim(move))).then(() => loadMoveAnimAssets(moves)); } diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index af2e5a20439..76271c21d29 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -5,7 +5,7 @@ import { allMoves } from "./data-lists"; import { MoveCategory } from "#enums/MoveCategory"; import type { Constructor, nil } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import type { TimeOfDay } from "#enums/time-of-day"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -341,14 +341,14 @@ export class SpeciesFormChangeStatusEffectTrigger extends SpeciesFormChangeTrigg } export class SpeciesFormChangeMoveLearnedTrigger extends SpeciesFormChangeTrigger { - public move: Moves; + public move: MoveId; public known: boolean; - constructor(move: Moves, known = true) { + constructor(move: MoveId, known = true) { super(); this.move = move; this.known = known; - const moveKey = Moves[this.move] + const moveKey = MoveId[this.move] .split("_") .filter(f => f) .map((f, i) => (i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase())) @@ -368,12 +368,12 @@ export class SpeciesFormChangeMoveLearnedTrigger extends SpeciesFormChangeTrigge } export abstract class SpeciesFormChangeMoveTrigger extends SpeciesFormChangeTrigger { - public movePredicate: (m: Moves) => boolean; + public movePredicate: (m: MoveId) => boolean; public used: boolean; - constructor(move: Moves | ((m: Moves) => boolean), used = true) { + constructor(move: MoveId | ((m: MoveId) => boolean), used = true) { super(); - this.movePredicate = typeof move === "function" ? move : (m: Moves) => m === move; + this.movePredicate = typeof move === "function" ? move : (m: MoveId) => m === move; this.used = used; } } @@ -827,12 +827,12 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.KYUREM, "", "white", new SpeciesFormChangeItemTrigger(FormChangeItem.LIGHT_STONE), false, getSpeciesDependentFormChangeCondition(Species.RESHIRAM)) ], [Species.KELDEO]: [ - new SpeciesFormChange(Species.KELDEO, "ordinary", "resolute", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)), - new SpeciesFormChange(Species.KELDEO, "resolute", "ordinary", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD, false), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)) + new SpeciesFormChange(Species.KELDEO, "ordinary", "resolute", new SpeciesFormChangeMoveLearnedTrigger(MoveId.SECRET_SWORD), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)), + new SpeciesFormChange(Species.KELDEO, "resolute", "ordinary", new SpeciesFormChangeMoveLearnedTrigger(MoveId.SECRET_SWORD, false), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)) ], [Species.MELOETTA]: [ - new SpeciesFormChange(Species.MELOETTA, "aria", "pirouette", new MeloettaFormChangePostMoveTrigger(Moves.RELIC_SONG), true), - new SpeciesFormChange(Species.MELOETTA, "pirouette", "aria", new MeloettaFormChangePostMoveTrigger(Moves.RELIC_SONG), true) + new SpeciesFormChange(Species.MELOETTA, "aria", "pirouette", new MeloettaFormChangePostMoveTrigger(MoveId.RELIC_SONG), true), + new SpeciesFormChange(Species.MELOETTA, "pirouette", "aria", new MeloettaFormChangePostMoveTrigger(MoveId.RELIC_SONG), true) ], [Species.GENESECT]: [ new SpeciesFormChange(Species.GENESECT, "", "shock", new SpeciesFormChangeItemTrigger(FormChangeItem.SHOCK_DRIVE)), @@ -849,7 +849,7 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.PALAFIN, "hero", "zero", new SpeciesFormChangeAbilityTrigger(), true) ], [Species.AEGISLASH]: [ - new SpeciesFormChange(Species.AEGISLASH, "blade", "shield", new SpeciesFormChangePreMoveTrigger(Moves.KINGS_SHIELD), true, new SpeciesFormChangeCondition(p => p.hasAbility(AbilityId.STANCE_CHANGE))), + new SpeciesFormChange(Species.AEGISLASH, "blade", "shield", new SpeciesFormChangePreMoveTrigger(MoveId.KINGS_SHIELD), true, new SpeciesFormChangeCondition(p => p.hasAbility(AbilityId.STANCE_CHANGE))), new SpeciesFormChange(Species.AEGISLASH, "shield", "blade", new SpeciesFormChangePreMoveTrigger(m => allMoves[m].category !== MoveCategory.STATUS), true, new SpeciesFormChangeCondition(p => p.hasAbility(AbilityId.STANCE_CHANGE))), new SpeciesFormChange(Species.AEGISLASH, "blade", "shield", new SpeciesFormChangeActiveTrigger(false), true) ], diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 0f1660c4c4c..0b4dd8eb705 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -26,7 +26,7 @@ import { PartyMemberStrength } from "#enums/party-member-strength"; import { Species } from "#enums/species"; import { PokeballType } from "#enums/pokeball"; import { PokemonType } from "#enums/pokemon-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { AbilityId } from "#enums/ability-id"; import { TeraAIMode } from "#enums/tera-ai-mode"; import { TrainerPoolTier } from "#enums/trainer-pool-tier"; @@ -1127,7 +1127,7 @@ export const trainerConfigs: TrainerConfigs = { s .getLevelMoves() .some(plm => - [Moves.SOFT_BOILED, Moves.SPORE, Moves.MILK_DRINK, Moves.OVERHEAT, Moves.TEATIME].includes(plm[1]), + [MoveId.SOFT_BOILED, MoveId.SPORE, MoveId.MILK_DRINK, MoveId.OVERHEAT, MoveId.TEATIME].includes(plm[1]), ), ), // Mons with baking related abilities or who learn Overheat, Teatime, Milk Drink, Spore, or Soft-Boiled by level [TrainerType.BEAUTY]: new TrainerConfig(++t) @@ -1333,11 +1333,11 @@ export const trainerConfigs: TrainerConfigs = { .setHasDouble("Medical Team") .setMoneyMultiplier(3) .setEncounterBgm(TrainerType.CLERK) - .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.HEAL_PULSE)), + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === MoveId.HEAL_PULSE)), [TrainerType.FIREBREATHER]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) .setEncounterBgm(TrainerType.ROUGHNECK) - .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SMOG) || s.isOfType(PokemonType.FIRE)), + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === MoveId.SMOG) || s.isOfType(PokemonType.FIRE)), [TrainerType.FISHERMAN]: new TrainerConfig(++t) .setMoneyMultiplier(1.25) .setEncounterBgm(TrainerType.BACKPACKER) @@ -1394,7 +1394,7 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesFilter(s => s.isOfType(PokemonType.ELECTRIC)), [TrainerType.HARLEQUIN]: new TrainerConfig(++t) .setEncounterBgm(TrainerType.PSYCHIC) - .setSpeciesFilter(s => tmSpecies[Moves.TRICK_ROOM].indexOf(s.speciesId) > -1), + .setSpeciesFilter(s => tmSpecies[MoveId.TRICK_ROOM].indexOf(s.speciesId) > -1), [TrainerType.HIKER]: new TrainerConfig(++t) .setEncounterBgm(TrainerType.BACKPACKER) .setPartyTemplates( @@ -1466,7 +1466,7 @@ export const trainerConfigs: TrainerConfigs = { trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_AVG, ) - .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)), + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === MoveId.SING)), [TrainerType.HEX_MANIAC]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) .setEncounterBgm(TrainerType.PSYCHIC) @@ -1527,7 +1527,7 @@ export const trainerConfigs: TrainerConfigs = { AbilityId.DRY_SKIN, AbilityId.WIND_POWER, ].includes(a), - ) || s.getLevelMoves().some(plm => plm[1] === Moves.RAIN_DANCE), + ) || s.getLevelMoves().some(plm => plm[1] === MoveId.RAIN_DANCE), ), // Mons with rain abilities or who learn Rain Dance by level [TrainerType.PILOT]: new TrainerConfig(++t) .setMoneyMultiplier(1.75) @@ -1538,7 +1538,7 @@ export const trainerConfigs: TrainerConfigs = { trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG, ) - .setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), + .setSpeciesFilter(s => tmSpecies[MoveId.FLY].indexOf(s.speciesId) > -1), [TrainerType.POKEFAN]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) .setName("PokéFan") @@ -1554,7 +1554,7 @@ export const trainerConfigs: TrainerConfigs = { trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.SIX_WEAKER_SAME, ) - .setSpeciesFilter(s => tmSpecies[Moves.HELPING_HAND].indexOf(s.speciesId) > -1), + .setSpeciesFilter(s => tmSpecies[MoveId.HELPING_HAND].indexOf(s.speciesId) > -1), [TrainerType.PRESCHOOLER]: new TrainerConfig(++t) .setMoneyMultiplier(0.2) .setEncounterBgm(TrainerType.YOUNGSTER) @@ -2490,10 +2490,10 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Segin Starmobile p.moveset = [ - new PokemonMove(Moves.WICKED_TORQUE), - new PokemonMove(Moves.SPIN_OUT), - new PokemonMove(Moves.SHIFT_GEAR), - new PokemonMove(Moves.HIGH_HORSEPOWER), + new PokemonMove(MoveId.WICKED_TORQUE), + new PokemonMove(MoveId.SPIN_OUT), + new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), ), @@ -2510,10 +2510,10 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 2; // Schedar Starmobile p.moveset = [ - new PokemonMove(Moves.BLAZING_TORQUE), - new PokemonMove(Moves.SPIN_OUT), - new PokemonMove(Moves.SHIFT_GEAR), - new PokemonMove(Moves.HIGH_HORSEPOWER), + new PokemonMove(MoveId.BLAZING_TORQUE), + new PokemonMove(MoveId.SPIN_OUT), + new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), ), @@ -2530,10 +2530,10 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 3; // Navi Starmobile p.moveset = [ - new PokemonMove(Moves.NOXIOUS_TORQUE), - new PokemonMove(Moves.SPIN_OUT), - new PokemonMove(Moves.SHIFT_GEAR), - new PokemonMove(Moves.HIGH_HORSEPOWER), + new PokemonMove(MoveId.NOXIOUS_TORQUE), + new PokemonMove(MoveId.SPIN_OUT), + new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), ), @@ -2550,10 +2550,10 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 4; // Ruchbah Starmobile p.moveset = [ - new PokemonMove(Moves.MAGICAL_TORQUE), - new PokemonMove(Moves.SPIN_OUT), - new PokemonMove(Moves.SHIFT_GEAR), - new PokemonMove(Moves.HIGH_HORSEPOWER), + new PokemonMove(MoveId.MAGICAL_TORQUE), + new PokemonMove(MoveId.SPIN_OUT), + new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), ), @@ -2570,10 +2570,10 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { p.formIndex = 5; // Caph Starmobile p.moveset = [ - new PokemonMove(Moves.COMBAT_TORQUE), - new PokemonMove(Moves.SPIN_OUT), - new PokemonMove(Moves.SHIFT_GEAR), - new PokemonMove(Moves.HIGH_HORSEPOWER), + new PokemonMove(MoveId.COMBAT_TORQUE), + new PokemonMove(MoveId.SPIN_OUT), + new PokemonMove(MoveId.SHIFT_GEAR), + new PokemonMove(MoveId.HIGH_HORSEPOWER), ]; }), ), @@ -2868,9 +2868,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.SLOWBRO, Species.GALAR_SLOWBRO], TrainerSlot.TRAINER, true, p => { // Tera Ice Slowbro/G-Slowbro p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.ICE_BEAM)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.ICE_BEAM)) { // Check if Ice Beam is in the moveset, if not, replace the third move with Ice Beam. - p.moveset[2] = new PokemonMove(Moves.ICE_BEAM); + p.moveset[2] = new PokemonMove(MoveId.ICE_BEAM); } }), ) @@ -2893,9 +2893,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.STEELIX], TrainerSlot.TRAINER, true, p => { // Tera Fighting Steelix p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BODY_PRESS)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.BODY_PRESS)) { // Check if Body Press is in the moveset, if not, replace the third move with Body Press. - p.moveset[2] = new PokemonMove(Moves.BODY_PRESS); + p.moveset[2] = new PokemonMove(MoveId.BODY_PRESS); } }), ) @@ -2918,9 +2918,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.ARBOK, Species.WEEZING], TrainerSlot.TRAINER, true, p => { // Tera Ghost Arbok/Weezing p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) @@ -2944,9 +2944,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.GYARADOS, Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { // Tera Dragon Gyarados/Aerodactyl p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) @@ -3005,9 +3005,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => { // Tera Dark Gengar p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DARK_PULSE)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.DARK_PULSE)) { // Check if Dark Pulse is in the moveset, if not, replace the third move with Dark Pulse. - p.moveset[2] = new PokemonMove(Moves.DARK_PULSE); + p.moveset[2] = new PokemonMove(MoveId.DARK_PULSE); } }), ) @@ -3089,9 +3089,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.DHELMISE], TrainerSlot.TRAINER, true, p => { // Tera Dragon Dhelmise p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) @@ -3119,9 +3119,9 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.abilityIndex = 1; // Sniper p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.X_SCISSOR)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.X_SCISSOR)) { // Check if X-Scissor is in the moveset, if not, replace the third move with X-Scissor. - p.moveset[2] = new PokemonMove(Moves.X_SCISSOR); + p.moveset[2] = new PokemonMove(MoveId.X_SCISSOR); } }), ), @@ -3158,9 +3158,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.STEELIX, Species.LOPUNNY], TrainerSlot.TRAINER, true, p => { // Tera Fire Steelix/Lopunny p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) @@ -3301,9 +3301,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.CERULEDGE], TrainerSlot.TRAINER, true, p => { // Tera Steel Ceruledge p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.IRON_HEAD)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.IRON_HEAD)) { // Check if Iron Head is in the moveset, if not, replace the third move with Iron Head. - p.moveset[2] = new PokemonMove(Moves.IRON_HEAD); + p.moveset[2] = new PokemonMove(MoveId.IRON_HEAD); } }), ) @@ -3339,9 +3339,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.INCINEROAR], TrainerSlot.TRAINER, true, p => { // Tera Fighting Incineroar p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.CROSS_CHOP)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.CROSS_CHOP)) { // Check if Cross Chop is in the moveset, if not, replace the third move with Cross Chop. - p.moveset[2] = new PokemonMove(Moves.CROSS_CHOP); + p.moveset[2] = new PokemonMove(MoveId.CROSS_CHOP); } }), ) @@ -3412,9 +3412,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.DECIDUEYE], TrainerSlot.TRAINER, true, p => { // Tera Flying Decidueye p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BRAVE_BIRD)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.BRAVE_BIRD)) { // Check if Brave Bird is in the moveset, if not, replace the third move with Brave Bird. - p.moveset[2] = new PokemonMove(Moves.BRAVE_BIRD); + p.moveset[2] = new PokemonMove(MoveId.BRAVE_BIRD); } }), ) @@ -3437,9 +3437,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.TOXICROAK], TrainerSlot.TRAINER, true, p => { // Tera Dark Toxicroak p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUCKER_PUNCH)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.SUCKER_PUNCH)) { // Check if Sucker Punch is in the moveset, if not, replace the third move with Sucker Punch. - p.moveset[2] = new PokemonMove(Moves.SUCKER_PUNCH); + p.moveset[2] = new PokemonMove(MoveId.SUCKER_PUNCH); } }), ) @@ -3462,9 +3462,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.EISCUE], TrainerSlot.TRAINER, true, p => { // Tera Water Eiscue p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.LIQUIDATION)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.LIQUIDATION)) { // Check if Liquidation is in the moveset, if not, replace the third move with Liquidation. - p.moveset[2] = new PokemonMove(Moves.LIQUIDATION); + p.moveset[2] = new PokemonMove(MoveId.LIQUIDATION); } }), ) @@ -3524,9 +3524,9 @@ export const trainerConfigs: TrainerConfigs = { // Tera Dragon Torkoal p.abilityIndex = 1; // Drought p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) @@ -3621,9 +3621,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.EXEGGUTOR], TrainerSlot.TRAINER, true, p => { // Tera Fire Exeggutor p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ) @@ -3631,9 +3631,9 @@ export const trainerConfigs: TrainerConfigs = { 3, getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUNNY_DAY)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.SUNNY_DAY)) { // Check if Sunny Day is in the moveset, if not, replace the third move with Sunny Day. - p.moveset[2] = new PokemonMove(Moves.SUNNY_DAY); + p.moveset[2] = new PokemonMove(MoveId.SUNNY_DAY); } }), ) @@ -3654,9 +3654,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.REUNICLUS], TrainerSlot.TRAINER, true, p => { // Tera Steel Reuniclus p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.FLASH_CANNON)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.FLASH_CANNON)) { // Check if Flash Cannon is in the moveset, if not, replace the third move with Flash Cannon. - p.moveset[2] = new PokemonMove(Moves.FLASH_CANNON); + p.moveset[2] = new PokemonMove(MoveId.FLASH_CANNON); } }), ) @@ -3682,9 +3682,9 @@ export const trainerConfigs: TrainerConfigs = { // Tera Fairy Excadrill p.setBoss(true, 2); p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } }), ), @@ -3697,9 +3697,9 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.SCEPTILE], TrainerSlot.TRAINER, true, p => { // Tera Dragon Sceptile p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DUAL_CHOP)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.DUAL_CHOP)) { // Check if Dual Chop is in the moveset, if not, replace the third move with Dual Chop. - p.moveset[2] = new PokemonMove(Moves.DUAL_CHOP); + p.moveset[2] = new PokemonMove(MoveId.DUAL_CHOP); } }), ) @@ -4287,9 +4287,9 @@ export const trainerConfigs: TrainerConfigs = { 5, getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TERA_BLAST)) { // Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast. - p.moveset[2] = new PokemonMove(Moves.TERA_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TERA_BLAST); } p.abilityIndex = 1; // Supreme Overlord p.teraType = PokemonType.FLYING; @@ -4367,9 +4367,9 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = randSeedInt(4); // Random Ogerpon Tera Mask p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.IVY_CUDGEL)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.IVY_CUDGEL)) { // Check if Ivy Cudgel is in the moveset, if not, replace the first move with Ivy Cudgel. - p.moveset[0] = new PokemonMove(Moves.IVY_CUDGEL); + p.moveset[0] = new PokemonMove(MoveId.IVY_CUDGEL); } }), ) @@ -5419,9 +5419,9 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = randSeedInt(18); // Random Silvally Form p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.MULTI_ATTACK)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.MULTI_ATTACK)) { // Check if Multi Attack is in the moveset, if not, replace the first move with Multi Attack. - p.moveset[0] = new PokemonMove(Moves.MULTI_ATTACK); + p.moveset[0] = new PokemonMove(MoveId.MULTI_ATTACK); } }), ) @@ -5537,9 +5537,9 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive - if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TECHNO_BLAST)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.TECHNO_BLAST)) { // Check if Techno Blast is in the moveset, if not, replace the third move with Techno Blast. - p.moveset[2] = new PokemonMove(Moves.TECHNO_BLAST); + p.moveset[2] = new PokemonMove(MoveId.TECHNO_BLAST); } }), ) diff --git a/src/enums/moves.ts b/src/enums/moves.ts index ee685e85fbe..e9894d9138d 100644 --- a/src/enums/moves.ts +++ b/src/enums/moves.ts @@ -1,4 +1,4 @@ -export enum Moves { +export enum MoveId { /**{@link https://bulbapedia.bulbagarden.net/wiki/None_(move) | Source} */ NONE, /**{@link https://bulbapedia.bulbagarden.net/wiki/Pound_(move) | Source} */ diff --git a/src/field/arena.ts b/src/field/arena.ts index 1e281ebc643..b263c9a7852 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -32,7 +32,7 @@ import Overrides from "#app/overrides"; import { TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; import type { ArenaTagType } from "#enums/arena-tag-type"; import { Biome } from "#enums/biome"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { TimeOfDay } from "#enums/time-of-day"; import { TrainerType } from "#enums/trainer-type"; @@ -674,7 +674,7 @@ export class Arena { * Adds a new tag to the arena * @param tagType {@linkcode ArenaTagType} the tag being added * @param turnCount How many turns the tag lasts - * @param sourceMove {@linkcode Moves} the move the tag came from, or `undefined` if not from a move + * @param sourceMove {@linkcode MoveId} the move the tag came from, or `undefined` if not from a move * @param sourceId The ID of the pokemon in play the tag came from (see {@linkcode BattleScene.getPokemonById}) * @param side {@linkcode ArenaTagSide} which side(s) the tag applies to * @param quiet If a message should be queued on screen to announce the tag being added @@ -684,7 +684,7 @@ export class Arena { addTag( tagType: ArenaTagType, turnCount: number, - sourceMove: Moves | undefined, + sourceMove: MoveId | undefined, sourceId: number, side: ArenaTagSide = ArenaTagSide.BOTH, quiet = false, diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index fe2bb5d148b..dabce198ce1 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -226,7 +226,7 @@ import { BattleSpec } from "#enums/battle-spec"; import { BattlerTagType } from "#enums/battler-tag-type"; import type { BerryType } from "#enums/berry-type"; import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { getPokemonNameWithAffix } from "#app/messages"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; @@ -381,7 +381,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public maskEnabled: boolean; public maskSprite: Phaser.GameObjects.Sprite | null; - public usedTMs: Moves[]; + public usedTMs: MoveId[]; private shinySparkle: Phaser.GameObjects.Sprite; @@ -1123,7 +1123,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Get this {@linkcode Pokemon}'s {@linkcode PokemonSpeciesForm}. - * @param ignoreOverride - Whether to ignore overridden species from {@linkcode Moves.TRANSFORM}, default `false`. + * @param ignoreOverride - Whether to ignore overridden species from {@linkcode MoveId.TRANSFORM}, default `false`. * This overrides `useIllusion` if `true`. * @param useIllusion - `true` to use the speciesForm of the illusion; default `false`. */ @@ -1848,7 +1848,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const ret = !ignoreOverride && this.summonData.moveset ? this.summonData.moveset : this.moveset; // Overrides moveset based on arrays specified in overrides.ts - let overrideArray: Moves | Array = this.isPlayer() + let overrideArray: MoveId | Array = this.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE; if (!Array.isArray(overrideArray)) { @@ -1858,7 +1858,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.isPlayer()) { this.moveset = []; } - overrideArray.forEach((move: Moves, index: number) => { + overrideArray.forEach((move: MoveId, index: number) => { const ppUsed = this.moveset[index]?.ppUsed ?? 0; this.moveset[index] = new PokemonMove(move, Math.min(ppUsed, allMoves[move].pp)); }); @@ -1871,11 +1871,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Checks which egg moves have been unlocked for the {@linkcode Pokemon} based * on the species it was met at or by the first {@linkcode Pokemon} in its evolution * line that can act as a starter and provides those egg moves. - * @returns an array of {@linkcode Moves}, the length of which is determined by how many + * @returns an array of {@linkcode MoveId}, the length of which is determined by how many * egg moves are unlocked for that species. */ - getUnlockedEggMoves(): Moves[] { - const moves: Moves[] = []; + getUnlockedEggMoves(): MoveId[] { + const moves: MoveId[] = []; const species = this.metSpecies in speciesEggMoves ? this.metSpecies : this.getSpeciesForm(true).getRootSpeciesId(true); if (species in speciesEggMoves) { @@ -1894,10 +1894,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * Available egg moves are only included if the {@linkcode Pokemon} was * in the starting party of the run and if Fresh Start is not active. - * @returns an array of {@linkcode Moves}, the length of which is determined + * @returns an array of {@linkcode MoveId}, the length of which is determined * by how many learnable moves there are for the {@linkcode Pokemon}. */ - public getLearnableLevelMoves(): Moves[] { + public getLearnableLevelMoves(): MoveId[] { let levelMoves = this.getLevelMoves(1, true, false, true).map(lm => lm[1]); if (this.metBiome === -1 && !globalScene.gameMode.isFreshStartChallenge() && !globalScene.gameMode.isDaily) { levelMoves = this.getUnlockedEggMoves().concat(levelMoves); @@ -2382,8 +2382,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // then bypass the check for ion deluge and electrify if ( this.isTerastallized && - (move.id === Moves.TERA_BLAST || - (move.id === Moves.TERA_STARSTORM && moveTypeHolder.value === PokemonType.STELLAR)) + (move.id === MoveId.TERA_BLAST || + (move.id === MoveId.TERA_STARSTORM && moveTypeHolder.value === PokemonType.STELLAR)) ) { return moveTypeHolder.value as PokemonType; } @@ -2780,7 +2780,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ret the output array to be pushed into. */ private getUniqueMoves(levelMoves: LevelMoves, ret: LevelMoves): void { - const uniqueMoves: Moves[] = []; + const uniqueMoves: MoveId[] = []; for (const lm of levelMoves) { if (!uniqueMoves.find(m => m === lm[1])) { uniqueMoves.push(lm[1]); @@ -2794,12 +2794,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * @returns list of egg moves */ - getEggMoves(): Moves[] | undefined { + getEggMoves(): MoveId[] | undefined { return speciesEggMoves[this.getSpeciesForm().getRootSpeciesId()]; } - setMove(moveIndex: number, moveId: Moves): void { - if (moveId === Moves.NONE) { + setMove(moveIndex: number, moveId: MoveId): void { + if (moveId === MoveId.NONE) { return; } const move = new PokemonMove(moveId); @@ -3050,7 +3050,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Generates a semi-random moveset for a Pokemon */ public generateAndPopulateMoveset(): void { this.moveset = []; - let movePool: [Moves, number][] = []; + let movePool: [MoveId, number][] = []; const allLevelMoves = this.getLevelMoves(1, true, true); if (!allLevelMoves) { console.warn("Error encountered trying to generate moveset for:", this.species.name); @@ -3079,7 +3079,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.hasTrainer()) { const tms = Object.keys(tmSpecies); for (const tm of tms) { - const moveId = Number.parseInt(tm) as Moves; + const moveId = Number.parseInt(tm) as MoveId; let compatible = false; for (const p of tmSpecies[tm]) { if (Array.isArray(p)) { @@ -3202,7 +3202,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isBoss()) { weightMultiplier += 0.4; } - const baseWeights: [Moves, number][] = movePool.map(m => [m[0], Math.ceil(Math.pow(m[1], weightMultiplier) * 100)]); + const baseWeights: [MoveId, number][] = movePool.map(m => [ + m[0], + Math.ceil(Math.pow(m[1], weightMultiplier) * 100), + ]); // All Pokemon force a STAB move first const stabMovePool = baseWeights.filter( @@ -3724,7 +3727,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (cancelled.value || isTypeImmune) { return { cancelled: cancelled.value, - result: move.id === Moves.SHEER_COLD ? HitResult.IMMUNE : HitResult.NO_EFFECT, + result: move.id === MoveId.SHEER_COLD ? HitResult.IMMUNE : HitResult.NO_EFFECT, damage: 0, }; } @@ -4131,7 +4134,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return !cancelled.value; } - addTag(tagType: BattlerTagType, turnCount = 0, sourceMove?: Moves, sourceId?: number): boolean { + addTag(tagType: BattlerTagType, turnCount = 0, sourceMove?: MoveId, sourceId?: number): boolean { const existingTag = this.getTag(tagType); if (existingTag) { existingTag.onOverlap(this); @@ -4300,19 +4303,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Gets whether the given move is currently disabled for this Pokemon. * - * @param moveId - The {@linkcode Moves} ID of the move to check + * @param moveId - The {@linkcode MoveId} ID of the move to check * @returns `true` if the move is disabled for this Pokemon, otherwise `false` * * @see {@linkcode MoveRestrictionBattlerTag} */ - public isMoveRestricted(moveId: Moves, pokemon?: Pokemon): boolean { + public isMoveRestricted(moveId: MoveId, pokemon?: Pokemon): boolean { return this.getRestrictingTag(moveId, pokemon) !== null; } /** * Gets whether the given move is currently disabled for the user based on the player's target selection * - * @param moveId - The {@linkcode Moves} ID of the move to check + * @param moveId - The {@linkcode MoveId} ID of the move to check * @param user - The move user * @param target - The target of the move * @@ -4320,7 +4323,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * @see {@linkcode MoveRestrictionBattlerTag} */ - isMoveTargetRestricted(moveId: Moves, user: Pokemon, target: Pokemon): boolean { + isMoveTargetRestricted(moveId: MoveId, user: Pokemon, target: Pokemon): boolean { for (const tag of this.findTags(t => t instanceof MoveRestrictionBattlerTag)) { if ((tag as MoveRestrictionBattlerTag).isMoveTargetRestricted(moveId, user, target)) { return (tag as MoveRestrictionBattlerTag) !== null; @@ -4332,12 +4335,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Gets the {@link MoveRestrictionBattlerTag} that is restricting a move, if it exists. * - * @param moveId - {@linkcode Moves} ID of the move to check + * @param moveId - {@linkcode MoveId} ID of the move to check * @param user - {@linkcode Pokemon} the move user, optional and used when the target is a factor in the move's restricted status * @param target - {@linkcode Pokemon} the target of the move, optional and used when the target is a factor in the move's restricted status * @returns The first tag on this Pokemon that restricts the move, or `null` if the move is not restricted. */ - getRestrictingTag(moveId: Moves, user?: Pokemon, target?: Pokemon): MoveRestrictionBattlerTag | null { + getRestrictingTag(moveId: MoveId, user?: Pokemon, target?: Pokemon): MoveRestrictionBattlerTag | null { for (const tag of this.findTags(t => t instanceof MoveRestrictionBattlerTag)) { if ((tag as MoveRestrictionBattlerTag).isMoveRestricted(moveId, user)) { return tag as MoveRestrictionBattlerTag; @@ -5509,7 +5512,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { export class PlayerPokemon extends Pokemon { protected battleInfo: PlayerBattleInfo; - public compatibleTms: Moves[]; + public compatibleTms: MoveId[]; constructor( species: PokemonSpecies, @@ -5580,7 +5583,7 @@ export class PlayerPokemon extends Pokemon { const tms = Object.keys(tmSpecies); for (const tm of tms) { - const moveId = Number.parseInt(tm) as Moves; + const moveId = Number.parseInt(tm) as MoveId; let compatible = false; for (const p of tmSpecies[tm]) { if (Array.isArray(p)) { @@ -6166,28 +6169,28 @@ export class EnemyPokemon extends Pokemon { switch (true) { case this.species.speciesId === Species.SMEARGLE: this.moveset = [ - new PokemonMove(Moves.SKETCH), - new PokemonMove(Moves.SKETCH), - new PokemonMove(Moves.SKETCH), - new PokemonMove(Moves.SKETCH), + new PokemonMove(MoveId.SKETCH), + new PokemonMove(MoveId.SKETCH), + new PokemonMove(MoveId.SKETCH), + new PokemonMove(MoveId.SKETCH), ]; break; case this.species.speciesId === Species.ETERNATUS: this.moveset = (formIndex !== undefined ? formIndex : this.formIndex) ? [ - new PokemonMove(Moves.DYNAMAX_CANNON), - new PokemonMove(Moves.CROSS_POISON), - new PokemonMove(Moves.FLAMETHROWER), - new PokemonMove(Moves.RECOVER, 0, -4), + new PokemonMove(MoveId.DYNAMAX_CANNON), + new PokemonMove(MoveId.CROSS_POISON), + new PokemonMove(MoveId.FLAMETHROWER), + new PokemonMove(MoveId.RECOVER, 0, -4), ] : [ - new PokemonMove(Moves.ETERNABEAM), - new PokemonMove(Moves.SLUDGE_BOMB), - new PokemonMove(Moves.FLAMETHROWER), - new PokemonMove(Moves.COSMIC_POWER), + new PokemonMove(MoveId.ETERNABEAM), + new PokemonMove(MoveId.SLUDGE_BOMB), + new PokemonMove(MoveId.FLAMETHROWER), + new PokemonMove(MoveId.COSMIC_POWER), ]; if (globalScene.gameMode.hasChallenge(Challenges.INVERSE_BATTLE)) { - this.moveset[2] = new PokemonMove(Moves.THUNDERBOLT); + this.moveset[2] = new PokemonMove(MoveId.THUNDERBOLT); } break; default: @@ -6273,7 +6276,7 @@ export class EnemyPokemon extends Pokemon { moveTargets.some(p => { const doesNotFail = move.applyConditions(this, p, move) || - [Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP].includes(move.id); + [MoveId.SUCKER_PUNCH, MoveId.UPPER_HAND, MoveId.THUNDERCLAP].includes(move.id); return ( doesNotFail && p.getAttackDamage({ @@ -6332,7 +6335,7 @@ export class EnemyPokemon extends Pokemon { */ if ( (move.name.endsWith(" (N)") || !move.applyConditions(this, target, move)) && - ![Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP].includes(move.id) + ![MoveId.SUCKER_PUNCH, MoveId.UPPER_HAND, MoveId.THUNDERCLAP].includes(move.id) ) { targetScore = -20; } else if (move instanceof AttackMove) { @@ -6417,17 +6420,17 @@ export class EnemyPokemon extends Pokemon { } return { - move: Moves.STRUGGLE, - targets: this.getNextTargets(Moves.STRUGGLE), + move: MoveId.STRUGGLE, + targets: this.getNextTargets(MoveId.STRUGGLE), }; } /** * Determines the Pokemon the given move would target if used by this Pokemon - * @param moveId {@linkcode Moves} The move to be used + * @param moveId {@linkcode MoveId} The move to be used * @returns The indexes of the Pokemon the given move would target */ - getNextTargets(moveId: Moves): BattlerIndex[] { + getNextTargets(moveId: MoveId): BattlerIndex[] { const moveTargets = getMoveTargets(this, moveId); const targets = globalScene.getField(true).filter(p => moveTargets.targets.indexOf(p.getBattlerIndex()) > -1); // If the move is multi-target, return all targets' indexes @@ -6752,7 +6755,7 @@ interface IllusionData { } export interface TurnMove { - move: Moves; + move: MoveId; targets: BattlerIndex[]; result?: MoveResult; virtual?: boolean; @@ -6761,7 +6764,7 @@ export interface TurnMove { } export interface AttackMoveResult { - move: Moves; + move: MoveId; result: DamageResult; damage: number; critical: boolean; @@ -6848,7 +6851,7 @@ export class PokemonTempSummonData { * Reset on switch and new wave, but not stored in `SummonData` to avoid being written to the save file. * Used to evaluate "first turn only" conditions such as - * {@linkcode Moves.FAKE_OUT | Fake Out} and {@linkcode Moves.FIRST_IMPRESSION | First Impression}). + * {@linkcode MoveId.FAKE_OUT | Fake Out} and {@linkcode MoveId.FIRST_IMPRESSION | First Impression}). */ waveTurnCount = 1; } @@ -6858,9 +6861,9 @@ export class PokemonTempSummonData { * Resets at the start of a new battle (but not on switch). */ export class PokemonBattleData { - /** Counter tracking direct hits this Pokemon has received during this battle; used for {@linkcode Moves.RAGE_FIST} */ + /** Counter tracking direct hits this Pokemon has received during this battle; used for {@linkcode MoveId.RAGE_FIST} */ public hitCount = 0; - /** Whether this Pokemon has eaten a berry this battle; used for {@linkcode Moves.BELCH} */ + /** Whether this Pokemon has eaten a berry this battle; used for {@linkcode MoveId.BELCH} */ public hasEatenBerry = false; /** Array containing all berries eaten and not yet recovered during this current battle; used by {@linkcode AbilityId.HARVEST} */ public berriesEaten: BerryType[] = []; @@ -6912,7 +6915,7 @@ export class PokemonTurnData { public statStagesIncreased = false; public statStagesDecreased = false; public moveEffectiveness: TypeDamageMultiplier | null = null; - public combiningPledge?: Moves; + public combiningPledge?: MoveId; public switchedInThisTurn = false; public failedRunAway = false; public joinedRound = false; @@ -6992,7 +6995,7 @@ export interface DamageCalculationResult { * @see {@linkcode getName} - returns name of {@linkcode Move}. **/ export class PokemonMove { - public moveId: Moves; + public moveId: MoveId; public ppUsed: number; public ppUp: number; public virtual: boolean; @@ -7003,7 +7006,7 @@ export class PokemonMove { */ public maxPpOverride?: number; - constructor(moveId: Moves, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) { + constructor(moveId: MoveId, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) { this.moveId = moveId; this.ppUsed = ppUsed; this.ppUp = ppUp; diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 423453d5408..b09b99aed63 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -119,7 +119,7 @@ import { import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Nature } from "#enums/nature"; import { PokeballType } from "#enums/pokeball"; import { Species } from "#enums/species"; @@ -1165,9 +1165,9 @@ export class PokemonMultiHitModifierType extends PokemonHeldItemModifierType { } export class TmModifierType extends PokemonModifierType { - public moveId: Moves; + public moveId: MoveId; - constructor(moveId: Moves) { + constructor(moveId: MoveId) { super( "", `tm_${PokemonType[allMoves[moveId].type].toLowerCase()}`, @@ -1553,8 +1553,8 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { class TmModifierTypeGenerator extends ModifierTypeGenerator { constructor(tier: ModifierTier) { super((party: Pokemon[], pregenArgs?: any[]) => { - if (pregenArgs && pregenArgs.length === 1 && pregenArgs[0] in Moves) { - return new TmModifierType(pregenArgs[0] as Moves); + if (pregenArgs && pregenArgs.length === 1 && pregenArgs[0] in MoveId) { + return new TmModifierType(pregenArgs[0] as MoveId); } const partyMemberCompatibleTms = party.map(p => { const previousLevelMoves = p.getLearnableLevelMoves(); @@ -1904,7 +1904,7 @@ export type GeneratorModifierOverride = { } | { name: keyof Pick; - type?: Moves; + type?: MoveId; } ); @@ -2771,7 +2771,7 @@ const modifierPool: ModifierPool = { const canSetStatus = p.canSetStatus(StatusEffect.TOXIC, true, true, null, true); // Moves that take advantage of obtaining the actual status effect - const hasStatusMoves = [Moves.FACADE, Moves.PSYCHO_SHIFT].some(m => moveset.includes(m)); + const hasStatusMoves = [MoveId.FACADE, MoveId.PSYCHO_SHIFT].some(m => moveset.includes(m)); // Moves that take advantage of being able to give the target a status orb // TODO: Take moves (Trick, Fling, Switcheroo) from comment when they are implemented const hasItemMoves = [ @@ -2817,7 +2817,7 @@ const modifierPool: ModifierPool = { const canSetStatus = p.canSetStatus(StatusEffect.BURN, true, true, null, true); // Moves that take advantage of obtaining the actual status effect - const hasStatusMoves = [Moves.FACADE, Moves.PSYCHO_SHIFT].some(m => moveset.includes(m)); + const hasStatusMoves = [MoveId.FACADE, MoveId.PSYCHO_SHIFT].some(m => moveset.includes(m)); // Moves that take advantage of being able to give the target a status orb // TODO: Take moves (Trick, Fling, Switcheroo) from comment when they are implemented const hasItemMoves = [ @@ -2880,16 +2880,16 @@ const modifierPool: ModifierPool = { ].some(a => p.hasAbility(a, false, true)); const hasMoves = [ - Moves.SUNNY_DAY, - Moves.RAIN_DANCE, - Moves.SANDSTORM, - Moves.SNOWSCAPE, - Moves.HAIL, - Moves.CHILLY_RECEPTION, - Moves.ELECTRIC_TERRAIN, - Moves.PSYCHIC_TERRAIN, - Moves.GRASSY_TERRAIN, - Moves.MISTY_TERRAIN, + MoveId.SUNNY_DAY, + MoveId.RAIN_DANCE, + MoveId.SANDSTORM, + MoveId.SNOWSCAPE, + MoveId.HAIL, + MoveId.CHILLY_RECEPTION, + MoveId.ELECTRIC_TERRAIN, + MoveId.PSYCHIC_TERRAIN, + MoveId.GRASSY_TERRAIN, + MoveId.MISTY_TERRAIN, ].some(m => moveset.includes(m)); return hasAbility || hasMoves; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 42e0155bdd8..fd534c633d9 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -18,7 +18,7 @@ import { addTextObject, TextStyle } from "#app/ui/text"; import { BooleanHolder, hslToHex, isNullOrUndefined, NumberHolder, toDmgValue } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import type { Nature } from "#enums/nature"; import type { PokeballType } from "#enums/pokeball"; import { Species } from "#enums/species"; @@ -2774,14 +2774,14 @@ export class PokemonMultiHitModifier extends PokemonHeldItemModifier { /** * For each stack, converts 25 percent of attack damage into an additional strike. * @param pokemon The {@linkcode Pokemon} using the move - * @param moveId The {@linkcode Moves | identifier} for the move being used + * @param moveId The {@linkcode MoveId | identifier} for the move being used * @param count {@linkcode NumberHolder} holding the move's hit count for this turn * @param damageMultiplier {@linkcode NumberHolder} holding a damage multiplier applied to a strike of this move * @returns always `true` */ override apply( pokemon: Pokemon, - moveId: Moves, + moveId: MoveId, count: NumberHolder | null = null, damageMultiplier: NumberHolder | null = null, ): boolean { diff --git a/src/overrides.ts b/src/overrides.ts index 7219f2b0ed6..cf6521b9213 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -10,7 +10,7 @@ import { BattleType } from "#enums/battle-type"; import { BerryType } from "#enums/berry-type"; import { Biome } from "#enums/biome"; import { EggTier } from "#enums/egg-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PokeballType } from "#enums/pokeball"; @@ -152,7 +152,7 @@ class DefaultOverrides { readonly HAS_PASSIVE_ABILITY_OVERRIDE: boolean | null = null; readonly STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; readonly GENDER_OVERRIDE: Gender | null = null; - readonly MOVESET_OVERRIDE: Moves | Array = []; + readonly MOVESET_OVERRIDE: MoveId | Array = []; readonly SHINY_OVERRIDE: boolean | null = null; readonly VARIANT_OVERRIDE: Variant | null = null; @@ -174,7 +174,7 @@ class DefaultOverrides { readonly OPP_HAS_PASSIVE_ABILITY_OVERRIDE: boolean | null = null; readonly OPP_STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; readonly OPP_GENDER_OVERRIDE: Gender | null = null; - readonly OPP_MOVESET_OVERRIDE: Moves | Array = []; + readonly OPP_MOVESET_OVERRIDE: MoveId | Array = []; readonly OPP_SHINY_OVERRIDE: boolean | null = null; readonly OPP_VARIANT_OVERRIDE: Variant | null = null; readonly OPP_IVS_OVERRIDE: number | number[] = []; diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index d0edf7f2712..a4003c2ee46 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -9,7 +9,7 @@ import { speciesStarterCosts } from "#app/data/balance/starters"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Biome } from "#app/enums/biome"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { PokeballType } from "#enums/pokeball"; import type { PlayerPokemon, TurnMove } from "#app/field/pokemon"; import { FieldPosition } from "#app/field/pokemon"; @@ -80,7 +80,7 @@ export class CommandPhase extends FieldPhase { ) { globalScene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.FIGHT, - move: { move: Moves.NONE, targets: [] }, + move: { move: MoveId.NONE, targets: [] }, skip: true, }; } @@ -157,15 +157,15 @@ export class CommandPhase extends FieldPhase { playerPokemon.trySelectMove(cursor, args[0] as boolean) || (useStruggle = cursor > -1 && !playerPokemon.getMoveset().filter(m => m.isUsable(playerPokemon)).length) ) { - let moveId: Moves; + let moveId: MoveId; if (useStruggle) { - moveId = Moves.STRUGGLE; + moveId = MoveId.STRUGGLE; } else if (turnMove !== undefined) { moveId = turnMove.move; } else if (cursor > -1) { moveId = playerPokemon.getMoveset()[cursor].moveId; } else { - moveId = Moves.NONE; + moveId = MoveId.NONE; } const turnCommand: TurnCommand = { diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index c585679ba4f..a7ba6bf20c6 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -3,7 +3,7 @@ import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import type Move from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import EvolutionSceneHandler from "#app/ui/evolution-scene-handler"; @@ -24,14 +24,14 @@ export enum LearnMoveType { } export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { - private moveId: Moves; + private moveId: MoveId; private messageMode: UiMode; private learnMoveType: LearnMoveType; private cost: number; constructor( partyMemberIndex: number, - moveId: Moves, + moveId: MoveId, learnMoveType: LearnMoveType = LearnMoveType.LEARN_MOVE, cost = -1, ) { @@ -49,7 +49,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { const currentMoveset = pokemon.getMoveset(); // The game first checks if the Pokemon already has the move and ends the phase if it does. - const hasMoveAlready = currentMoveset.some(m => m.moveId === move.id) && this.moveId !== Moves.SKETCH; + const hasMoveAlready = currentMoveset.some(m => m.moveId === move.id) && this.moveId !== MoveId.SKETCH; if (hasMoveAlready) { return this.end(); } diff --git a/src/phases/load-move-anim-phase.ts b/src/phases/load-move-anim-phase.ts index 3d914f738a7..0b0ead353e6 100644 --- a/src/phases/load-move-anim-phase.ts +++ b/src/phases/load-move-anim-phase.ts @@ -1,5 +1,5 @@ import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import { Phase } from "#app/phase"; /** @@ -8,7 +8,7 @@ import { Phase } from "#app/phase"; * isn't already loaded (e.g. for Metronome) */ export class LoadMoveAnimPhase extends Phase { - constructor(protected moveId: Moves) { + constructor(protected moveId: MoveId) { super(); } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index e3773952214..fd337e1a1c2 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -48,7 +48,7 @@ import { MoveTarget } from "#enums/MoveTarget"; import { MoveCategory } from "#enums/MoveCategory"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { PokemonType } from "#enums/pokemon-type"; -import { DamageResult, PokemonMove, type TurnMove } from "#app/field/pokemon"; +import { type DamageResult, PokemonMove, type TurnMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { HitResult, MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -65,14 +65,14 @@ import { PokemonPhase } from "#app/phases/pokemon-phase"; import { BooleanHolder, isNullOrUndefined, NumberHolder } from "#app/utils/common"; import type { nil } from "#app/utils/common"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import i18next from "i18next"; import type { Phase } from "#app/phase"; import { ShowAbilityPhase } from "./show-ability-phase"; import { MovePhase } from "./move-phase"; import { MoveEndPhase } from "./move-end-phase"; import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; -import { TypeDamageMultiplier } from "#app/data/type"; +import type { TypeDamageMultiplier } from "#app/data/type"; import { HitCheckResult } from "#enums/hit-check-result"; import type Move from "#app/data/moves/move"; import { isFieldTargeted } from "#app/data/moves/move-utils"; @@ -220,7 +220,7 @@ export class MoveEffectPhase extends PokemonPhase { break; case HitCheckResult.NO_EFFECT: globalScene.queueMessage( - i18next.t(this.move.id === Moves.SHEER_COLD ? "battle:hitResultImmune" : "battle:hitResultNoEffect", { + i18next.t(this.move.id === MoveId.SHEER_COLD ? "battle:hitResultImmune" : "battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(target), }), ); @@ -351,7 +351,7 @@ export class MoveEffectPhase extends PokemonPhase { ) { const firstTarget = this.getFirstTarget(); new MoveAnim( - move.id as Moves, + move.id as MoveId, user, firstTarget?.getBattlerIndex() ?? BattlerIndex.ATTACKER, // Some moves used in mystery encounters should be played even on an empty field @@ -610,11 +610,11 @@ export class MoveEffectPhase extends PokemonPhase { * * Accuracy and semi-invulnerability can be bypassed by: * - An ability like {@linkcode Abilities.NO_GUARD | No Guard} - * - A poison type using {@linkcode Moves.TOXIC | Toxic} - * - A move like {@linkcode Moves.LOCK_ON | Lock-On} or {@linkcode Moves.MIND_READER | Mind Reader}. + * - A poison type using {@linkcode MoveId.TOXIC | Toxic} + * - A move like {@linkcode MoveId.LOCK_ON | Lock-On} or {@linkcode MoveId.MIND_READER | Mind Reader}. * - A field-targeted move like spikes * - * Does *not* check against effects {@linkcode Moves.GLAIVE_RUSH | Glaive Rush} status (which + * Does *not* check against effects {@linkcode MoveId.GLAIVE_RUSH | Glaive Rush} status (which * should not bypass semi-invulnerability), or interactions like Earthquake hitting against Dig, * (which should not bypass the accuracy check). * @@ -809,7 +809,7 @@ export class MoveEffectPhase extends PokemonPhase { */ applyMoveAttrs(StatChangeBeforeDmgCalcAttr, user, target, this.move); - const { result: result, damage: dmg } = target.getAttackDamage({ + const { result, damage: dmg } = target.getAttackDamage({ source: user, move: this.move, ignoreAbility: false, diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index ccddaf3c857..a87919ff4c7 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -47,7 +47,7 @@ import { NumberHolder } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; @@ -138,7 +138,7 @@ export class MovePhase extends BattlePhase { /** * Shows whether the current move has been forced to the end of the turn - * Needed for speed order, see {@linkcode Moves.QUASH} + * Needed for speed order, see {@linkcode MoveId.QUASH} * */ public isForcedLast(): boolean { return this.forcedLast; @@ -147,7 +147,7 @@ export class MovePhase extends BattlePhase { public start(): void { super.start(); - console.log(Moves[this.move.moveId]); + console.log(MoveId[this.move.moveId]); // Check if move is unusable (e.g. because it's out of PP due to a mid-turn Spite). if (!this.canMove(true)) { @@ -201,14 +201,14 @@ export class MovePhase extends BattlePhase { this.end(); } - /** Check for cancellation edge cases - no targets remaining, or {@linkcode Moves.NONE} is in the queue */ + /** Check for cancellation edge cases - no targets remaining, or {@linkcode MoveId.NONE} is in the queue */ protected resolveFinalPreMoveCancellationChecks(): void { const targets = this.getActiveTargetPokemon(); const moveQueue = this.pokemon.getMoveQueue(); if ( (targets.length === 0 && !this.move.getMove().hasAttr(AddArenaTrapTagAttr)) || - (moveQueue.length && moveQueue[0].move === Moves.NONE) + (moveQueue.length && moveQueue[0].move === MoveId.NONE) ) { this.showMoveText(); this.showFailedText(); @@ -410,7 +410,7 @@ export class MovePhase extends BattlePhase { new MoveEffectPhase(this.pokemon.getBattlerIndex(), this.targets, move, this.reflected, this.move.virtual), ); } else { - if ([Moves.ROAR, Moves.WHIRLWIND, Moves.TRICK_OR_TREAT, Moves.FORESTS_CURSE].includes(this.move.moveId)) { + if ([MoveId.ROAR, MoveId.WHIRLWIND, MoveId.TRICK_OR_TREAT, MoveId.FORESTS_CURSE].includes(this.move.moveId)) { applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); } @@ -603,7 +603,7 @@ export class MovePhase extends BattlePhase { * * TODO: ...this seems weird. * - Lapses `AFTER_MOVE` tags: - * - This handles the effects of {@link Moves.SUBSTITUTE Substitute} + * - This handles the effects of {@link MoveId.SUBSTITUTE Substitute} * - Removes the second turn of charge moves */ protected handlePreMoveFailures(): void { @@ -623,7 +623,7 @@ export class MovePhase extends BattlePhase { } this.pokemon.pushMoveHistory({ - move: Moves.NONE, + move: MoveId.NONE, result: MoveResult.FAIL, targets: this.targets, }); @@ -636,11 +636,11 @@ export class MovePhase extends BattlePhase { } /** - * Displays the move's usage text to the player, unless it's a charge turn (ie: {@link Moves.SOLAR_BEAM Solar Beam}), - * the pokemon is on a recharge turn (ie: {@link Moves.HYPER_BEAM Hyper Beam}), or a 2-turn move was interrupted (ie: {@link Moves.FLY Fly}). + * Displays the move's usage text to the player, unless it's a charge turn (ie: {@link MoveId.SOLAR_BEAM Solar Beam}), + * the pokemon is on a recharge turn (ie: {@link MoveId.HYPER_BEAM Hyper Beam}), or a 2-turn move was interrupted (ie: {@link MoveId.FLY Fly}). */ public showMoveText(): void { - if (this.move.moveId === Moves.NONE) { + if (this.move.moveId === MoveId.NONE) { return; } diff --git a/src/phases/pokemon-transform-phase.ts b/src/phases/pokemon-transform-phase.ts index b33689321b5..df71d70f930 100644 --- a/src/phases/pokemon-transform-phase.ts +++ b/src/phases/pokemon-transform-phase.ts @@ -1,6 +1,6 @@ import type { BattlerIndex } from "#app/battle"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { EFFECTIVE_STATS, BATTLE_STATS } from "#enums/stat"; import { PokemonMove } from "#app/field/pokemon"; import { globalScene } from "#app/global-scene"; @@ -54,7 +54,7 @@ export class PokemonTransformPhase extends PokemonPhase { return new PokemonMove(m.moveId, 0, 0, false, Math.min(m.getMove().pp, 5)); } console.warn(`Transform: somehow iterating over a ${m} value when copying moveset!`); - return new PokemonMove(Moves.NONE); + return new PokemonMove(MoveId.NONE); }); user.summonData.types = target.getTypes(); diff --git a/src/sprites/pokemon-asset-loader.ts b/src/sprites/pokemon-asset-loader.ts index 4ce88f4f1fb..dcc5f499d45 100644 --- a/src/sprites/pokemon-asset-loader.ts +++ b/src/sprites/pokemon-asset-loader.ts @@ -1,11 +1,11 @@ -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; /** * Asynchronously load the animations and assets for the provided moves. * @param moveIds - An array of move IDs to load assets for. */ -export async function loadMoveAnimations(moveIds: Moves[]): Promise { +export async function loadMoveAnimations(moveIds: MoveId[]): Promise { await Promise.allSettled(moveIds.map(m => initMoveAnim(m))); await loadMoveAnimAssets(moveIds); } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 5711ad338c3..06d8588514e 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -43,7 +43,7 @@ import { StatusEffect } from "#enums/status-effect"; import ChallengeData from "#app/system/challenge-data"; import { Device } from "#enums/devices"; import { GameDataType } from "#enums/game-data-type"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; @@ -205,7 +205,7 @@ export interface DexEntry { ivs: number[]; } -export type StarterMoveset = [Moves] | [Moves, Moves] | [Moves, Moves, Moves] | [Moves, Moves, Moves, Moves]; +export type StarterMoveset = [MoveId] | [MoveId, MoveId] | [MoveId, MoveId, MoveId] | [MoveId, MoveId, MoveId, MoveId]; export interface StarterFormMoveData { [key: number]: StarterMoveset; diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 00169678ed0..26ffcff83f1 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -9,7 +9,7 @@ import Pokemon, { EnemyPokemon, PokemonBattleData, PokemonMove, PokemonSummonDat import { TrainerSlot } from "#enums/trainer-slot"; import type { Variant } from "#app/sprites/variant"; import type { Biome } from "#enums/biome"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import type { Species } from "#enums/species"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import type { PokemonType } from "#enums/pokemon-type"; @@ -43,7 +43,7 @@ export default class PokemonData { public luck: number; public pauseEvolutions: boolean; public pokerus: boolean; - public usedTMs: Moves[]; + public usedTMs: MoveId[]; public evoCounter: number; public teraType: PokemonType; public isTerastallized: boolean; diff --git a/src/system/version_migration/versions/v1_9_0.ts b/src/system/version_migration/versions/v1_9_0.ts index c517896cf45..e66cea257fc 100644 --- a/src/system/version_migration/versions/v1_9_0.ts +++ b/src/system/version_migration/versions/v1_9_0.ts @@ -2,7 +2,7 @@ import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; import { PokemonMove } from "#app/field/pokemon"; import type { SessionSaveData } from "#app/system/game-data"; import type PokemonData from "#app/system/pokemon-data"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; /** * Migrate all lingering rage fist data inside `CustomPokemonData`, @@ -15,7 +15,7 @@ const migratePartyData: SessionSaveMigrator = { // this stuff is copied straight from the constructor fwiw const mapParty = (pkmnData: PokemonData) => { // remove empty moves from moveset - pkmnData.moveset = (pkmnData.moveset ?? [new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.GROWL)]) + pkmnData.moveset = (pkmnData.moveset ?? [new PokemonMove(MoveId.TACKLE), new PokemonMove(MoveId.GROWL)]) .filter(m => !!m) .map(m => PokemonMove.loadMove(m)); // only edit summondata moveset if exists diff --git a/src/ui/battle-flyout.ts b/src/ui/battle-flyout.ts index f8ef5fc1ec4..ed830c777c5 100644 --- a/src/ui/battle-flyout.ts +++ b/src/ui/battle-flyout.ts @@ -6,7 +6,7 @@ import type Move from "#app/data/moves/move"; import type { BerryUsedEvent, MoveUsedEvent } from "../events/battle-scene"; import { BattleSceneEventType } from "../events/battle-scene"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { UiTheme } from "#enums/ui-theme"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -154,7 +154,7 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { /** Updates all of the {@linkcode MoveInfo} objects in the moveInfo array */ private onMoveUsed(event: Event) { const moveUsedEvent = event as MoveUsedEvent; - if (!moveUsedEvent || moveUsedEvent.pokemonId !== this.pokemon?.id || moveUsedEvent.move.id === Moves.STRUGGLE) { + if (!moveUsedEvent || moveUsedEvent.pokemonId !== this.pokemon?.id || moveUsedEvent.move.id === MoveId.STRUGGLE) { // Ignore Struggle return; } diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 74d4e5bcb17..1ee0bea431a 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -25,7 +25,7 @@ import { applyChallenges, ChallengeType } from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import i18next from "i18next"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { getPokemonNameWithAffix } from "#app/messages"; import type { CommandPhase } from "#app/phases/command-phase"; @@ -184,7 +184,7 @@ export default class PartyUiHandler extends MessageUiHandler { private selectCallback: PartySelectCallback | PartyModifierTransferSelectCallback | null; private selectFilter: PokemonSelectFilter | PokemonModifierTransferSelectFilter; private moveSelectFilter: PokemonMoveSelectFilter; - private tmMoveId: Moves; + private tmMoveId: MoveId; private showMovePp: boolean; private iconAnimHandler: PokemonIconAnimHandler; @@ -346,7 +346,7 @@ export default class PartyUiHandler extends MessageUiHandler { args.length > 4 && args[4] instanceof Function ? (args[4] as PokemonMoveSelectFilter) : PartyUiHandler.FilterAllMoves; - this.tmMoveId = args.length > 5 && args[5] ? args[5] : Moves.NONE; + this.tmMoveId = args.length > 5 && args[5] ? args[5] : MoveId.NONE; this.showMovePp = args.length > 6 && args[6]; this.partyContainer.setVisible(true); @@ -1165,8 +1165,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.partyUiMode !== PartyUiMode.FAINT_SWITCH && globalScene.findModifier( m => - m instanceof SwitchEffectTransferModifier && - m.pokemonId === globalScene.getPlayerField()[this.fieldIndex].id, + m instanceof SwitchEffectTransferModifier && m.pokemonId === globalScene.getPlayerField()[this.fieldIndex].id, ) ); } @@ -1654,7 +1653,7 @@ class PartySlot extends Phaser.GameObjects.Container { pokemon: PlayerPokemon, iconAnimHandler: PokemonIconAnimHandler, partyUiMode: PartyUiMode, - tmMoveId: Moves, + tmMoveId: MoveId, ) { super( globalScene, @@ -1677,7 +1676,7 @@ class PartySlot extends Phaser.GameObjects.Container { return this.pokemon; } - setup(partyUiMode: PartyUiMode, tmMoveId: Moves) { + setup(partyUiMode: PartyUiMode, tmMoveId: MoveId) { const currentLanguage = i18next.resolvedLanguage ?? "en"; const offsetJa = currentLanguage === "ja"; diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index e3348a3f794..f7ce0440b27 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -36,7 +36,7 @@ import MoveInfoOverlay from "#app/ui/move-info-overlay"; import PokedexInfoOverlay from "#app/ui/pokedex-info-overlay"; import { getEggTierForSpecies } from "#app/data/egg"; import { Device } from "#enums/devices"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Button } from "#enums/buttons"; import { EggSourceType } from "#enums/egg-source-types"; @@ -205,9 +205,9 @@ export default class PokedexPageUiHandler extends MessageUiHandler { private formIndex: number; private speciesLoaded: Map = new Map(); private levelMoves: LevelMoves; - private eggMoves: Moves[] = []; + private eggMoves: MoveId[] = []; private hasEggMoves: boolean[] = []; - private tmMoves: Moves[] = []; + private tmMoves: MoveId[] = []; private ability1: AbilityId; private ability2: AbilityId | undefined; private abilityHidden: AbilityId | undefined; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index ca01df0775e..641d2ef55bd 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -47,7 +47,7 @@ import { applyChallenges, ChallengeType } from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import { getEggTierForSpecies } from "#app/data/egg"; import { Device } from "#enums/devices"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Button } from "#enums/buttons"; import { EggSourceType } from "#enums/egg-source-types"; @@ -365,7 +365,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private starterTeras: PokemonType[] = []; private starterMovesets: StarterMoveset[] = []; private speciesStarterDexEntry: DexEntry | null; - private speciesStarterMoves: Moves[]; + private speciesStarterMoves: MoveId[]; private canCycleShiny: boolean; private canCycleForm: boolean; private canCycleGender: boolean; @@ -1970,7 +1970,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ui.setModeWithoutClear(UiMode.OPTION_SELECT, { options: moveset - .map((m: Moves, i: number) => { + .map((m: MoveId, i: number) => { const option: OptionSelectItem = { label: allMoves[m].name, handler: () => { @@ -1980,7 +1980,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { `${i18next.t("starterSelectUiHandler:selectMoveSwapWith")} ${allMoves[m].name}.`, null, () => { - const possibleMoves = this.speciesStarterMoves.filter((sm: Moves) => sm !== m); + const possibleMoves = this.speciesStarterMoves.filter((sm: MoveId) => sm !== m); this.moveInfoOverlay.show(allMoves[possibleMoves[0]]); ui.setModeWithoutClear(UiMode.OPTION_SELECT, { @@ -2765,7 +2765,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.checkIconId(this.starterIcons[index], species, props.female, props.formIndex, props.shiny, props.variant); } - switchMoveHandler(i: number, newMove: Moves, move: Moves) { + switchMoveHandler(i: number, newMove: MoveId, move: MoveId) { const speciesId = this.lastSpecies.speciesId; const existingMoveIndex = this.starterMoveset?.indexOf(newMove)!; // TODO: is this bang correct? this.starterMoveset![i] = newMove; // TODO: is this bang correct? diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index 5e14e5f7771..412b148610f 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -4,7 +4,7 @@ import UiHandler from "./ui-handler"; import { isNullOrUndefined, fixedInt } from "#app/utils/common"; import { getMoveTargets } from "../data/moves/move"; import { Button } from "#enums/buttons"; -import type { Moves } from "#enums/moves"; +import type { MoveId } from "#enums/moves"; import type Pokemon from "#app/field/pokemon"; import type { ModifierBar } from "#app/modifier/modifier"; import { SubstituteTag } from "#app/data/battler-tags"; @@ -14,7 +14,7 @@ export type TargetSelectCallback = (targets: BattlerIndex[]) => void; export default class TargetSelectUiHandler extends UiHandler { private fieldIndex: number; - private move: Moves; + private move: MoveId; private targetSelectCallback: TargetSelectCallback; private cursor0: number; // associated with BattlerIndex.PLAYER private cursor1: number; // associated with BattlerIndex.PLAYER_2 @@ -42,7 +42,7 @@ export default class TargetSelectUiHandler extends UiHandler { super.show(args); this.fieldIndex = args[0] as number; - this.move = args[1] as Moves; + this.move = args[1] as MoveId; this.targetSelectCallback = args[2] as TargetSelectCallback; const user = globalScene.getPlayerField()[this.fieldIndex]; diff --git a/src/utils/common.ts b/src/utils/common.ts index 1c7ea60da16..8389af4dd4c 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -1,5 +1,5 @@ import { MoneyFormat } from "#enums/money-format"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import i18next from "i18next"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type { Variant } from "#app/sprites/variant"; @@ -567,8 +567,8 @@ export function isBetween(num: number, min: number, max: number): boolean { * * @param move the move for which the animation filename is needed */ -export function animationFileName(move: Moves): string { - return Moves[move].toLowerCase().replace(/\_/g, "-"); +export function animationFileName(move: MoveId): string { + return MoveId[move].toLowerCase().replace(/\_/g, "-"); } /** diff --git a/test/abilities/ability_duplication.test.ts b/test/abilities/ability_duplication.test.ts index 38f5a3b1df7..e422f389332 100644 --- a/test/abilities/ability_duplication.test.ts +++ b/test/abilities/ability_duplication.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,11 +23,11 @@ describe("Ability Duplication", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .battleStyle("single") .ability(AbilityId.HUGE_POWER) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("huge power should only be applied once if both normal and passive", async () => { diff --git a/test/abilities/analytic.test.ts b/test/abilities/analytic.test.ts index f1b018cbb24..d56d91d1d98 100644 --- a/test/abilities/analytic.test.ts +++ b/test/abilities/analytic.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { isBetween, toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,7 +24,7 @@ describe("Abilities - Analytic", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.TACKLE]) + .moveset([MoveId.SPLASH, MoveId.TACKLE]) .ability(AbilityId.ANALYTIC) .battleStyle("single") .disableCrits() @@ -32,7 +32,7 @@ describe("Abilities - Analytic", () => { .enemyLevel(200) .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should increase damage if the user moves last", async () => { @@ -40,13 +40,13 @@ describe("Abilities - Analytic", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); const damage1 = enemy.getInverseHp(); enemy.hp = enemy.getMaxHp(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(isBetween(enemy.getInverseHp(), toDmgValue(damage1 * 1.3) - 3, toDmgValue(damage1 * 1.3) + 3)).toBe(true); @@ -58,22 +58,22 @@ describe("Abilities - Analytic", () => { const [enemy] = game.scene.getEnemyField(); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.toNextTurn(); const damage1 = enemy.getInverseHp(); enemy.hp = enemy.getMaxHp(); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(isBetween(enemy.getInverseHp(), toDmgValue(damage1 * 1.3) - 3, toDmgValue(damage1 * 1.3) + 3)).toBe(true); enemy.hp = enemy.getMaxHp(); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.getInverseHp()).toBe(damage1); diff --git a/test/abilities/arena_trap.test.ts b/test/abilities/arena_trap.test.ts index fd003d7213b..e3b7744b73d 100644 --- a/test/abilities/arena_trap.test.ts +++ b/test/abilities/arena_trap.test.ts @@ -1,6 +1,6 @@ import { allAbilities } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,11 +23,11 @@ describe("Abilities - Arena Trap", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.SPLASH) + .moveset(MoveId.SPLASH) .ability(AbilityId.ARENA_TRAP) .enemySpecies(Species.RALTS) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TELEPORT); + .enemyMoveset(MoveId.TELEPORT); }); // TODO: Enable test when Issue #935 is addressed @@ -38,7 +38,7 @@ describe("Abilities - Arena Trap", () => { const enemy = game.scene.getEnemyPokemon(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); @@ -55,15 +55,15 @@ describe("Abilities - Arena Trap", () => { /** * This checks if the Player Pokemon is able to switch out/run away after the Enemy Pokemon with {@linkcode AbilityId.ARENA_TRAP} - * is forcefully moved out of the field from moves such as Roar {@linkcode Moves.ROAR} + * is forcefully moved out of the field from moves such as Roar {@linkcode MoveId.ROAR} * * Note: It should be able to switch out/run away */ it("should lift if pokemon with this ability leaves the field", async () => { game.override .battleStyle("double") - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.ROAR, Moves.SPLASH]) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.ROAR, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH); await game.classicMode.startBattle([Species.MAGIKARP, Species.SUDOWOODO, Species.LUNATONE]); @@ -72,14 +72,14 @@ describe("Abilities - Arena Trap", () => { vi.spyOn(enemy1, "getAbility").mockReturnValue(allAbilities[AbilityId.ARENA_TRAP]); - game.move.select(Moves.ROAR); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.ROAR); + game.move.select(MoveId.SPLASH, 1); // This runs the fist command phase where the moves are selected await game.toNextTurn(); // During the next command phase the player pokemons should not be trapped anymore - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(player1.isTrapped()).toBe(false); diff --git a/test/abilities/aroma_veil.test.ts b/test/abilities/aroma_veil.test.ts index 4b827bb19c0..ccc28ae1f6d 100644 --- a/test/abilities/aroma_veil.test.ts +++ b/test/abilities/aroma_veil.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; @@ -27,10 +27,10 @@ describe("Moves - Aroma Veil", () => { game.override .battleStyle("double") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.HEAL_BLOCK, Moves.IMPRISON, Moves.SPLASH]) + .enemyMoveset([MoveId.HEAL_BLOCK, MoveId.IMPRISON, MoveId.SPLASH]) .enemySpecies(Species.SHUCKLE) .ability(AbilityId.AROMA_VEIL) - .moveset([Moves.GROWL]); + .moveset([MoveId.GROWL]); }); it("Aroma Veil protects the Pokemon's side against most Move Restriction Battler Tags", async () => { @@ -38,9 +38,9 @@ describe("Moves - Aroma Veil", () => { const party = game.scene.getPlayerParty()! as PlayerPokemon[]; - game.move.select(Moves.GROWL); - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.HEAL_BLOCK); + game.move.select(MoveId.GROWL); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.HEAL_BLOCK); await game.toNextTurn(); party.forEach(p => { expect(p.getTag(BattlerTagType.HEAL_BLOCK)).toBeUndefined(); @@ -52,10 +52,10 @@ describe("Moves - Aroma Veil", () => { const party = game.scene.getPlayerParty()! as PlayerPokemon[]; - game.move.select(Moves.GROWL); - game.move.select(Moves.GROWL, 1); - await game.move.selectEnemyMove(Moves.IMPRISON, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.GROWL); + game.move.select(MoveId.GROWL, 1); + await game.move.selectEnemyMove(MoveId.IMPRISON, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.getTag(ArenaTagType.IMPRISON)).toBeDefined(); party.forEach(p => { diff --git a/test/abilities/aura_break.test.ts b/test/abilities/aura_break.test.ts index 59e31990886..df85ee0814f 100644 --- a/test/abilities/aura_break.test.ts +++ b/test/abilities/aura_break.test.ts @@ -1,6 +1,6 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,49 +26,49 @@ describe("Abilities - Aura Break", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.MOONBLAST, Moves.DARK_PULSE]) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.MOONBLAST, MoveId.DARK_PULSE]) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.AURA_BREAK) .enemySpecies(Species.SHUCKLE); }); it("reverses the effect of Fairy Aura", async () => { - const moveToCheck = allMoves[Moves.MOONBLAST]; + const moveToCheck = allMoves[MoveId.MOONBLAST]; const basePower = moveToCheck.power; game.override.ability(AbilityId.FAIRY_AURA); vi.spyOn(moveToCheck, "calculateBattlePower"); await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.MOONBLAST); + game.move.select(MoveId.MOONBLAST); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(expect.closeTo(basePower * auraBreakMultiplier)); }); it("reverses the effect of Dark Aura", async () => { - const moveToCheck = allMoves[Moves.DARK_PULSE]; + const moveToCheck = allMoves[MoveId.DARK_PULSE]; const basePower = moveToCheck.power; game.override.ability(AbilityId.DARK_AURA); vi.spyOn(moveToCheck, "calculateBattlePower"); await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.DARK_PULSE); + game.move.select(MoveId.DARK_PULSE); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(expect.closeTo(basePower * auraBreakMultiplier)); }); it("has no effect if neither Fairy Aura nor Dark Aura are present", async () => { - const moveToCheck = allMoves[Moves.MOONBLAST]; + const moveToCheck = allMoves[MoveId.MOONBLAST]; const basePower = moveToCheck.power; game.override.ability(AbilityId.BALL_FETCH); vi.spyOn(moveToCheck, "calculateBattlePower"); await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.MOONBLAST); + game.move.select(MoveId.MOONBLAST); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); diff --git a/test/abilities/battery.test.ts b/test/abilities/battery.test.ts index e0cc2d2108e..55cad8dd9d5 100644 --- a/test/abilities/battery.test.ts +++ b/test/abilities/battery.test.ts @@ -2,7 +2,7 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,50 +29,50 @@ describe("Abilities - Battery", () => { game.override.battleStyle("double"); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.moveset([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.TACKLE, MoveId.BREAKING_SWIPE, MoveId.SPLASH, MoveId.DAZZLING_GLEAM]); + game.override.enemyMoveset(MoveId.SPLASH); }); it("raises the power of allies' special moves by 30%", async () => { - const moveToCheck = allMoves[Moves.DAZZLING_GLEAM]; + const moveToCheck = allMoves[MoveId.DAZZLING_GLEAM]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); await game.classicMode.startBattle([Species.PIKACHU, Species.CHARJABUG]); - game.move.select(Moves.DAZZLING_GLEAM); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DAZZLING_GLEAM); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower * batteryMultiplier); }); it("does not raise the power of allies' non-special moves", async () => { - const moveToCheck = allMoves[Moves.BREAKING_SWIPE]; + const moveToCheck = allMoves[MoveId.BREAKING_SWIPE]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); await game.classicMode.startBattle([Species.PIKACHU, Species.CHARJABUG]); - game.move.select(Moves.BREAKING_SWIPE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.BREAKING_SWIPE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); }); it("does not raise the power of the ability owner's special moves", async () => { - const moveToCheck = allMoves[Moves.DAZZLING_GLEAM]; + const moveToCheck = allMoves[MoveId.DAZZLING_GLEAM]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); await game.classicMode.startBattle([Species.CHARJABUG, Species.PIKACHU]); - game.move.select(Moves.DAZZLING_GLEAM); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DAZZLING_GLEAM); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); diff --git a/test/abilities/battle_bond.test.ts b/test/abilities/battle_bond.test.ts index 7de50b51995..4f98e48af91 100644 --- a/test/abilities/battle_bond.test.ts +++ b/test/abilities/battle_bond.test.ts @@ -3,7 +3,7 @@ import { allMoves } from "#app/data/data-lists"; import { MultiHitType } from "#enums/MultiHitType"; import { Status } from "#app/data/status-effect"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -33,9 +33,9 @@ describe("Abilities - BATTLE BOND", () => { .startingWave(4) // Leads to arena reset on Wave 5 trainer battle .ability(AbilityId.BATTLE_BOND) .starterForms({ [Species.GRENINJA]: ashForm }) - .moveset([Moves.SPLASH, Moves.WATER_SHURIKEN]) + .moveset([MoveId.SPLASH, MoveId.WATER_SHURIKEN]) .enemySpecies(Species.BULBASAUR) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) // Avoid levelling up .enemyLevel(1000); // Avoid opponent dying before `doKillOpponents()` }); @@ -50,7 +50,7 @@ describe("Abilities - BATTLE BOND", () => { greninja.status = new Status(StatusEffect.FAINT); expect(greninja.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("TurnEndPhase"); game.doSelectModifier(); @@ -62,7 +62,7 @@ describe("Abilities - BATTLE BOND", () => { it("should not keep buffing Water Shuriken after Greninja switches to base form", async () => { await game.classicMode.startBattle([Species.GRENINJA]); - const waterShuriken = allMoves[Moves.WATER_SHURIKEN]; + const waterShuriken = allMoves[MoveId.WATER_SHURIKEN]; vi.spyOn(waterShuriken, "calculateBattlePower"); let actualMultiHitType: MultiHitType | null = null; @@ -76,7 +76,7 @@ describe("Abilities - BATTLE BOND", () => { let expectedBattlePower = 20; let expectedMultiHitType = MultiHitType._3; - game.move.select(Moves.WATER_SHURIKEN); + game.move.select(MoveId.WATER_SHURIKEN); await game.phaseInterceptor.to("BerryPhase", false); expect(waterShuriken.calculateBattlePower).toHaveLastReturnedWith(expectedBattlePower); expect(actualMultiHitType).toBe(expectedMultiHitType); @@ -88,7 +88,7 @@ describe("Abilities - BATTLE BOND", () => { expectedBattlePower = 15; expectedMultiHitType = MultiHitType._2_TO_5; - game.move.select(Moves.WATER_SHURIKEN); + game.move.select(MoveId.WATER_SHURIKEN); await game.phaseInterceptor.to("BerryPhase", false); expect(waterShuriken.calculateBattlePower).toHaveLastReturnedWith(expectedBattlePower); expect(actualMultiHitType).toBe(expectedMultiHitType); diff --git a/test/abilities/beast_boost.test.ts b/test/abilities/beast_boost.test.ts index a0759a32035..88b7156e372 100644 --- a/test/abilities/beast_boost.test.ts +++ b/test/abilities/beast_boost.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -29,8 +29,8 @@ describe("Abilities - Beast Boost", () => { .enemyAbility(AbilityId.BEAST_BOOST) .ability(AbilityId.BEAST_BOOST) .startingLevel(2000) - .moveset([Moves.FLAMETHROWER]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.FLAMETHROWER]) + .enemyMoveset(MoveId.SPLASH); }); it("should prefer highest stat to boost its corresponding stat stage by 1 when winning a battle", async () => { @@ -43,14 +43,14 @@ describe("Abilities - Beast Boost", () => { expect(playerPokemon.getStatStage(Stat.DEF)).toBe(0); - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to("VictoryPhase"); expect(playerPokemon.getStatStage(Stat.DEF)).toBe(1); }, 20000); it("should use in-battle overriden stats when determining the stat stage to raise by 1", async () => { - game.override.enemyMoveset([Moves.GUARD_SPLIT]); + game.override.enemyMoveset([MoveId.GUARD_SPLIT]); await game.classicMode.startBattle([Species.SLOWBRO]); @@ -60,7 +60,7 @@ describe("Abilities - Beast Boost", () => { expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(0); - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("VictoryPhase"); @@ -79,7 +79,7 @@ describe("Abilities - Beast Boost", () => { expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(0); - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to("VictoryPhase"); diff --git a/test/abilities/commander.test.ts b/test/abilities/commander.test.ts index 27adf2702ce..245645c5e8d 100644 --- a/test/abilities/commander.test.ts +++ b/test/abilities/commander.test.ts @@ -7,7 +7,7 @@ import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -32,13 +32,13 @@ describe("Abilities - Commander", () => { game.override .startingLevel(100) .enemyLevel(100) - .moveset([Moves.LIQUIDATION, Moves.MEMENTO, Moves.SPLASH, Moves.FLIP_TURN]) + .moveset([MoveId.LIQUIDATION, MoveId.MEMENTO, MoveId.SPLASH, MoveId.FLIP_TURN]) .ability(AbilityId.COMMANDER) .battleStyle("double") .disableCrits() .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); vi.spyOn(game.scene, "triggerPokemonBattleAnim").mockReturnValue(true); }); @@ -54,13 +54,13 @@ describe("Abilities - Commander", () => { expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); affectedStats.forEach(stat => expect(dondozo.getStatStage(stat)).toBe(2)); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); // Force both enemies to target the Tatsugiri - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); await game.phaseInterceptor.to("BerryPhase", false); game.scene.getEnemyField().forEach(enemy => expect(enemy.getLastXMoves(1)[0].result).toBe(MoveResult.MISS)); @@ -68,13 +68,13 @@ describe("Abilities - Commander", () => { }); it("should activate when a Dondozo switches in and cancel the source's move", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.TATSUGIRI, Species.MAGIKARP, Species.DONDOZO]); const tatsugiri = game.scene.getPlayerField()[0]; - game.move.select(Moves.LIQUIDATION, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.LIQUIDATION, 0, BattlerIndex.ENEMY); game.doSwitchPokemon(2); await game.phaseInterceptor.to("MovePhase", false); @@ -96,12 +96,12 @@ describe("Abilities - Commander", () => { expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.MEMENTO, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.MEMENTO, 1, BattlerIndex.ENEMY); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); @@ -114,7 +114,7 @@ describe("Abilities - Commander", () => { }); it("source should still take damage from Poison while hidden", async () => { - game.override.statusEffect(StatusEffect.POISON).enemyMoveset(Moves.SPLASH); + game.override.statusEffect(StatusEffect.POISON).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); @@ -123,7 +123,7 @@ describe("Abilities - Commander", () => { expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); @@ -132,7 +132,7 @@ describe("Abilities - Commander", () => { }); it("source should still take damage from Salt Cure while hidden", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); @@ -141,9 +141,9 @@ describe("Abilities - Commander", () => { expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - tatsugiri.addTag(BattlerTagType.SALT_CURED, 0, Moves.NONE, game.scene.getField()[BattlerIndex.ENEMY].id); + tatsugiri.addTag(BattlerTagType.SALT_CURED, 0, MoveId.NONE, game.scene.getField()[BattlerIndex.ENEMY].id); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); @@ -152,7 +152,7 @@ describe("Abilities - Commander", () => { }); it("source should still take damage from Sandstorm while hidden", async () => { - game.override.weather(WeatherType.SANDSTORM).enemyMoveset(Moves.SPLASH); + game.override.weather(WeatherType.SANDSTORM).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); @@ -161,7 +161,7 @@ describe("Abilities - Commander", () => { expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); @@ -170,7 +170,7 @@ describe("Abilities - Commander", () => { }); it("should make Dondozo immune to being forced out", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.WHIRLWIND]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]); await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]); @@ -179,12 +179,12 @@ describe("Abilities - Commander", () => { expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); - await game.move.selectEnemyMove(Moves.WHIRLWIND, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); // Test may time out here if Whirlwind forced out a Pokemon await game.phaseInterceptor.to("TurnEndPhase"); @@ -192,14 +192,14 @@ describe("Abilities - Commander", () => { }); it("should interrupt the source's semi-invulnerability", async () => { - game.override.moveset([Moves.SPLASH, Moves.DIVE]).enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.SPLASH, MoveId.DIVE]).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.TATSUGIRI, Species.MAGIKARP, Species.DONDOZO]); const tatsugiri = game.scene.getPlayerField()[0]; - game.move.select(Moves.DIVE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DIVE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("CommandPhase"); await game.toNextTurn(); diff --git a/test/abilities/competitive.test.ts b/test/abilities/competitive.test.ts index e308cfc671a..deb9da1c3fe 100644 --- a/test/abilities/competitive.test.ts +++ b/test/abilities/competitive.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,9 +27,9 @@ describe("Abilities - Competitive", () => { game.override .battleStyle("single") .enemySpecies(Species.BEEDRILL) - .enemyMoveset(Moves.TICKLE) + .enemyMoveset(MoveId.TICKLE) .startingLevel(1) - .moveset([Moves.SPLASH, Moves.CLOSE_COMBAT]) + .moveset([MoveId.SPLASH, MoveId.CLOSE_COMBAT]) .ability(AbilityId.COMPETITIVE); }); @@ -37,7 +37,7 @@ describe("Abilities - Competitive", () => { await game.classicMode.startBattle([Species.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -46,11 +46,11 @@ describe("Abilities - Competitive", () => { }); it("lowering your own stats should not trigger competitive", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.CLOSE_COMBAT); + game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.SPDEF)).toBe(-1); @@ -63,7 +63,7 @@ describe("Abilities - Competitive", () => { await game.classicMode.startBattle([Species.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(0); diff --git a/test/abilities/contrary.test.ts b/test/abilities/contrary.test.ts index d5562c6014c..c1d1b036e0a 100644 --- a/test/abilities/contrary.test.ts +++ b/test/abilities/contrary.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { AbilityId } from "#enums/ability-id"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; @@ -27,7 +27,7 @@ describe("Abilities - Contrary", () => { .enemySpecies(Species.BULBASAUR) .enemyAbility(AbilityId.CONTRARY) .ability(AbilityId.INTIMIDATE) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should invert stat changes when applied", async () => { @@ -40,28 +40,28 @@ describe("Abilities - Contrary", () => { describe("With Clear Body", () => { it("should apply positive effects", async () => { - game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).moveset([Moves.TAIL_WHIP]); + game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).moveset([MoveId.TAIL_WHIP]); await game.classicMode.startBattle([Species.SLOWBRO]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); - game.move.select(Moves.TAIL_WHIP); + game.move.select(MoveId.TAIL_WHIP); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(1); }); it("should block negative effects", async () => { - game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).enemyMoveset(Moves.HOWL).moveset([Moves.SPLASH]); + game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).enemyMoveset(MoveId.HOWL).moveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.SLOWBRO]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); diff --git a/test/abilities/corrosion.test.ts b/test/abilities/corrosion.test.ts index 564e49b2484..778e20a06ea 100644 --- a/test/abilities/corrosion.test.ts +++ b/test/abilities/corrosion.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -22,12 +22,12 @@ describe("Abilities - Corrosion", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .battleStyle("single") .disableCrits() .enemySpecies(Species.GRIMER) .enemyAbility(AbilityId.CORROSION) - .enemyMoveset(Moves.TOXIC); + .enemyMoveset(MoveId.TOXIC); }); it("If a Poison- or Steel-type Pokémon with this Ability poisons a target with Synchronize, Synchronize does not gain the ability to poison Poison- or Steel-type Pokémon.", async () => { @@ -38,7 +38,7 @@ describe("Abilities - Corrosion", () => { const enemyPokemon = game.scene.getEnemyPokemon(); expect(playerPokemon!.status).toBeUndefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(playerPokemon!.status).toBeDefined(); expect(enemyPokemon!.status).toBeUndefined(); diff --git a/test/abilities/costar.test.ts b/test/abilities/costar.test.ts index aea3fb73b32..a34a2f37017 100644 --- a/test/abilities/costar.test.ts +++ b/test/abilities/costar.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { CommandPhase } from "#app/phases/command-phase"; import { MessagePhase } from "#app/phases/message-phase"; @@ -26,8 +26,8 @@ describe("Abilities - COSTAR", () => { game = new GameManager(phaserGame); game.override.battleStyle("double"); game.override.ability(AbilityId.COSTAR); - game.override.moveset([Moves.SPLASH, Moves.NASTY_PLOT]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.SPLASH, MoveId.NASTY_PLOT]); + game.override.enemyMoveset(MoveId.SPLASH); }); test("ability copies positive stat stages", async () => { @@ -37,15 +37,15 @@ describe("Abilities - COSTAR", () => { let [leftPokemon, rightPokemon] = game.scene.getPlayerField(); - game.move.select(Moves.NASTY_PLOT); + game.move.select(MoveId.NASTY_PLOT); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPokemon.getStatStage(Stat.SPATK)).toBe(2); expect(rightPokemon.getStatStage(Stat.SPATK)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(CommandPhase); game.doSwitchPokemon(2); await game.phaseInterceptor.to(MessagePhase); @@ -65,7 +65,7 @@ describe("Abilities - COSTAR", () => { expect(leftPokemon.getStatStage(Stat.ATK)).toBe(-2); expect(leftPokemon.getStatStage(Stat.ATK)).toBe(-2); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(CommandPhase); game.doSwitchPokemon(2); await game.phaseInterceptor.to(MessagePhase); diff --git a/test/abilities/cud_chew.test.ts b/test/abilities/cud_chew.test.ts index ac722aea711..991ea5eae84 100644 --- a/test/abilities/cud_chew.test.ts +++ b/test/abilities/cud_chew.test.ts @@ -4,7 +4,7 @@ import { globalScene } from "#app/global-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { AbilityId } from "#enums/ability-id"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -29,14 +29,14 @@ describe("Abilities - Cud Chew", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.BUG_BITE, Moves.SPLASH, Moves.HYPER_VOICE, Moves.STUFF_CHEEKS]) + .moveset([MoveId.BUG_BITE, MoveId.SPLASH, MoveId.HYPER_VOICE, MoveId.STUFF_CHEEKS]) .startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS, count: 1 }]) .ability(AbilityId.CUD_CHEW) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); describe("tracks berries eaten", () => { @@ -46,7 +46,7 @@ describe("Abilities - Cud Chew", () => { const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; // needed to allow sitrus procs - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // berries tracked in turnData; not moved to battleData yet @@ -68,15 +68,15 @@ describe("Abilities - Cud Chew", () => { it("shows ability popup for eating berry, even if berry is useless", async () => { const abDisplaySpy = vi.spyOn(globalScene, "queueAbilityDisplay"); - game.override.enemyMoveset([Moves.SPLASH, Moves.HEAL_PULSE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.HEAL_PULSE]); await game.classicMode.startBattle([Species.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; // Dip below half to eat berry farigiraf.hp = farigiraf.getMaxHp() / 2 - 1; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // doesn't trigger since cud chew hasn't eaten berry yet @@ -85,8 +85,8 @@ describe("Abilities - Cud Chew", () => { await game.toNextTurn(); // get heal pulsed back to full before the cud chew proc - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.HEAL_PULSE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.HEAL_PULSE); await game.phaseInterceptor.to("TurnEndPhase"); // globalScene.queueAbilityDisplay should be called twice: @@ -117,13 +117,13 @@ describe("Abilities - Cud Chew", () => { { name: "BERRY", type: BerryType.PETAYA, count: 3 }, { name: "BERRY", type: BerryType.LIECHI, count: 3 }, ]) - .enemyMoveset(Moves.TEATIME); + .enemyMoveset(MoveId.TEATIME); await game.classicMode.startBattle([Species.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; // needed to allow berry procs - game.move.select(Moves.STUFF_CHEEKS); + game.move.select(MoveId.STUFF_CHEEKS); await game.toNextTurn(); // Ate 2 petayas from moves + 1 of each at turn end; all 4 get tallied on turn end @@ -135,7 +135,7 @@ describe("Abilities - Cud Chew", () => { ]); expect(farigiraf.turnData.berriesEaten).toEqual([]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // previous berries eaten and deleted from summon data as remaining eaten berries move to replace them @@ -152,7 +152,7 @@ describe("Abilities - Cud Chew", () => { farigiraf.hp = 1; // eat berry turn 1, switch out turn 2 - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); const turn1Hp = farigiraf.hp; @@ -180,7 +180,7 @@ describe("Abilities - Cud Chew", () => { const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(farigiraf.summonData.berriesEatenLast).toEqual([]); @@ -202,7 +202,7 @@ describe("Abilities - Cud Chew", () => { const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // ate 1 sitrus the turn prior, spitball pending @@ -212,7 +212,7 @@ describe("Abilities - Cud Chew", () => { const turn1Hp = farigiraf.hp; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // healed back up to half without adding any more to array @@ -228,9 +228,9 @@ describe("Abilities - Cud Chew", () => { const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // Turn end proc set the berriesEatenLast array back to being empty @@ -240,13 +240,13 @@ describe("Abilities - Cud Chew", () => { }); it("doesn't trigger on non-eating removal", async () => { - game.override.enemyMoveset(Moves.INCINERATE); + game.override.enemyMoveset(MoveId.INCINERATE); await game.classicMode.startBattle([Species.FARIGIRAF]); const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = farigiraf.getMaxHp() / 4; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // no berries eaten due to getting cooked @@ -264,10 +264,10 @@ describe("Abilities - Cud Chew", () => { const farigiraf = game.scene.getPlayerPokemon()!; - game.move.select(Moves.BUG_BITE); + game.move.select(MoveId.BUG_BITE); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // berry effect triggered twice - once for bug bite, once for cud chew @@ -281,9 +281,9 @@ describe("Abilities - Cud Chew", () => { const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Rounding errors only ever cost a maximum of 4 hp @@ -297,7 +297,7 @@ describe("Abilities - Cud Chew", () => { const farigiraf = game.scene.getPlayerPokemon()!; farigiraf.hp = 1; - game.move.select(Moves.HYPER_VOICE); + game.move.select(MoveId.HYPER_VOICE); await game.toNextWave(); // berry went yummy yummy in big fat giraffe tummy @@ -313,7 +313,7 @@ describe("Abilities - Cud Chew", () => { const wave1Hp = farigirafReloaded.hp; // blow up next wave and we should proc the repeat eating - game.move.select(Moves.HYPER_VOICE); + game.move.select(MoveId.HYPER_VOICE); await game.toNextWave(); expect(farigirafReloaded.hp).toBeGreaterThan(wave1Hp); diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index d4ff977189b..3572cd3de76 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import type { MovePhase } from "#app/phases/move-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,22 +29,22 @@ describe("Abilities - Dancer", () => { // Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability) it("triggers when dance moves are used, doesn't consume extra PP", async () => { - game.override.enemyAbility(AbilityId.DANCER).enemySpecies(Species.MAGIKARP).enemyMoveset(Moves.VICTORY_DANCE); + game.override.enemyAbility(AbilityId.DANCER).enemySpecies(Species.MAGIKARP).enemyMoveset(MoveId.VICTORY_DANCE); await game.classicMode.startBattle([Species.ORICORIO, Species.FEEBAS]); const [oricorio, feebas] = game.scene.getPlayerField(); - game.move.changeMoveset(oricorio, [Moves.SWORDS_DANCE, Moves.VICTORY_DANCE, Moves.SPLASH]); - game.move.changeMoveset(feebas, [Moves.SWORDS_DANCE, Moves.SPLASH]); + game.move.changeMoveset(oricorio, [MoveId.SWORDS_DANCE, MoveId.VICTORY_DANCE, MoveId.SPLASH]); + game.move.changeMoveset(feebas, [MoveId.SWORDS_DANCE, MoveId.SPLASH]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SWORDS_DANCE, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SWORDS_DANCE, 1); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("MovePhase"); // feebas uses swords dance await game.phaseInterceptor.to("MovePhase", false); // oricorio copies swords dance let currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); - expect(currentPhase.move.moveId).toBe(Moves.SWORDS_DANCE); + expect(currentPhase.move.moveId).toBe(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to("MoveEndPhase"); // end oricorio's move await game.phaseInterceptor.to("MovePhase"); // magikarp 1 copies swords dance @@ -54,7 +54,7 @@ describe("Abilities - Dancer", () => { currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); - expect(currentPhase.move.moveId).toBe(Moves.VICTORY_DANCE); + expect(currentPhase.move.moveId).toBe(MoveId.VICTORY_DANCE); await game.phaseInterceptor.to("BerryPhase"); // finish the turn @@ -66,8 +66,8 @@ describe("Abilities - Dancer", () => { // TODO: Enable after Dancer rework to not push to move history it.todo("should not count as the last move used for mirror move/instruct", async () => { game.override - .moveset([Moves.FIERY_DANCE, Moves.REVELATION_DANCE]) - .enemyMoveset([Moves.INSTRUCT, Moves.MIRROR_MOVE, Moves.SPLASH]) + .moveset([MoveId.FIERY_DANCE, MoveId.REVELATION_DANCE]) + .enemyMoveset([MoveId.INSTRUCT, MoveId.MIRROR_MOVE, MoveId.SPLASH]) .enemySpecies(Species.SHUCKLE) .enemyLevel(10); await game.classicMode.startBattle([Species.ORICORIO, Species.FEEBAS]); @@ -75,28 +75,28 @@ describe("Abilities - Dancer", () => { const [oricorio] = game.scene.getPlayerField(); const [, shuckle2] = game.scene.getEnemyField(); - game.move.select(Moves.REVELATION_DANCE, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2); - game.move.select(Moves.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.INSTRUCT, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.MIRROR_MOVE, BattlerIndex.PLAYER); + game.move.select(MoveId.REVELATION_DANCE, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2); + game.move.select(MoveId.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2); + await game.move.selectEnemyMove(MoveId.INSTRUCT, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.MIRROR_MOVE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MovePhase"); // Oricorio rev dance await game.phaseInterceptor.to("MovePhase"); // Feebas fiery dance await game.phaseInterceptor.to("MovePhase"); // Oricorio fiery dance (from dancer) await game.phaseInterceptor.to("MoveEndPhase", false); // dancer copied move doesn't appear in move history - expect(oricorio.getLastXMoves(-1)[0].move).toBe(Moves.REVELATION_DANCE); + expect(oricorio.getLastXMoves(-1)[0].move).toBe(MoveId.REVELATION_DANCE); await game.phaseInterceptor.to("MovePhase"); // shuckle 2 mirror moves oricorio await game.phaseInterceptor.to("MovePhase"); // calls instructed rev dance let currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(shuckle2); - expect(currentPhase.move.moveId).toBe(Moves.REVELATION_DANCE); + expect(currentPhase.move.moveId).toBe(MoveId.REVELATION_DANCE); await game.phaseInterceptor.to("MovePhase"); // shuckle 1 instructs oricorio await game.phaseInterceptor.to("MovePhase"); currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); - expect(currentPhase.move.moveId).toBe(Moves.REVELATION_DANCE); + expect(currentPhase.move.moveId).toBe(MoveId.REVELATION_DANCE); }); }); diff --git a/test/abilities/defiant.test.ts b/test/abilities/defiant.test.ts index 73025a39e95..41dadb72217 100644 --- a/test/abilities/defiant.test.ts +++ b/test/abilities/defiant.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,9 +27,9 @@ describe("Abilities - Defiant", () => { game.override .battleStyle("single") .enemySpecies(Species.BEEDRILL) - .enemyMoveset(Moves.TICKLE) + .enemyMoveset(MoveId.TICKLE) .startingLevel(1) - .moveset([Moves.SPLASH, Moves.CLOSE_COMBAT]) + .moveset([MoveId.SPLASH, MoveId.CLOSE_COMBAT]) .ability(AbilityId.DEFIANT); }); @@ -37,7 +37,7 @@ describe("Abilities - Defiant", () => { await game.classicMode.startBattle([Species.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(3); @@ -45,11 +45,11 @@ describe("Abilities - Defiant", () => { }); it("lowering your own stats should not trigger defiant", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.CLOSE_COMBAT); + game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.SPDEF)).toBe(-1); @@ -62,7 +62,7 @@ describe("Abilities - Defiant", () => { await game.classicMode.startBattle([Species.FLYGON]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index 82dba211842..dacfe3013ec 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -3,7 +3,7 @@ import { WeatherType } from "#app/enums/weather-type"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,19 +26,19 @@ describe("Abilities - Desolate Land", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.SPLASH) + .moveset(MoveId.SPLASH) .hasPassiveAbility(true) .enemySpecies(Species.RALTS) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); /** * This checks that the weather has changed after the Enemy Pokemon with {@linkcode AbilityId.DESOLATE_LAND} - * is forcefully moved out of the field from moves such as Roar {@linkcode Moves.ROAR} + * is forcefully moved out of the field from moves such as Roar {@linkcode MoveId.ROAR} */ it("should lift only when all pokemon with this ability leave the field", async () => { - game.override.battleStyle("double").enemyMoveset([Moves.SPLASH, Moves.ROAR]); + game.override.battleStyle("double").enemyMoveset([MoveId.SPLASH, MoveId.ROAR]); await game.classicMode.startBattle([Species.MAGCARGO, Species.MAGCARGO, Species.MAGIKARP, Species.MAGIKARP]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); @@ -47,11 +47,11 @@ describe("Abilities - Desolate Land", () => { return min; }); - game.move.select(Moves.SPLASH, 0, 2); - game.move.select(Moves.SPLASH, 1, 2); + game.move.select(MoveId.SPLASH, 0, 2); + game.move.select(MoveId.SPLASH, 1, 2); - await game.move.selectEnemyMove(Moves.ROAR, 0); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.ROAR, 0); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -63,11 +63,11 @@ describe("Abilities - Desolate Land", () => { return min + 1; }); - game.move.select(Moves.SPLASH, 0, 2); - game.move.select(Moves.SPLASH, 1, 2); + game.move.select(MoveId.SPLASH, 0, 2); + game.move.select(MoveId.SPLASH, 1, 2); - await game.move.selectEnemyMove(Moves.ROAR, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 0); + await game.move.selectEnemyMove(MoveId.ROAR, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 0); await game.phaseInterceptor.to("TurnEndPhase"); @@ -77,18 +77,18 @@ describe("Abilities - Desolate Land", () => { it("should lift when enemy faints", async () => { game.override .battleStyle("single") - .moveset([Moves.SHEER_COLD]) + .moveset([MoveId.SHEER_COLD]) .ability(AbilityId.NO_GUARD) .startingLevel(100) .enemyLevel(1) - .enemyMoveset([Moves.SPLASH]) + .enemyMoveset([MoveId.SPLASH]) .enemySpecies(Species.MAGCARGO) .enemyHasPassiveAbility(true); await game.classicMode.startBattle([Species.MAGIKARP]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); - game.move.select(Moves.SHEER_COLD); + game.move.select(MoveId.SHEER_COLD); await game.phaseInterceptor.to("TurnEndPhase"); @@ -96,15 +96,15 @@ describe("Abilities - Desolate Land", () => { }); it("should lift when pokemon returns upon switching from double to single battle", async () => { - game.override.battleStyle("even-doubles").enemyMoveset([Moves.SPLASH, Moves.MEMENTO]).startingWave(12); + game.override.battleStyle("even-doubles").enemyMoveset([MoveId.SPLASH, MoveId.MEMENTO]).startingWave(12); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGCARGO]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); - game.move.select(Moves.SPLASH, 0, 2); - game.move.select(Moves.SPLASH, 1, 2); - await game.move.selectEnemyMove(Moves.MEMENTO, 0); - await game.move.selectEnemyMove(Moves.MEMENTO, 1); + game.move.select(MoveId.SPLASH, 0, 2); + game.move.select(MoveId.SPLASH, 1, 2); + await game.move.selectEnemyMove(MoveId.MEMENTO, 0); + await game.move.selectEnemyMove(MoveId.MEMENTO, 1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -118,7 +118,7 @@ describe("Abilities - Desolate Land", () => { it("should lift when enemy is captured", async () => { game.override .battleStyle("single") - .enemyMoveset([Moves.SPLASH]) + .enemyMoveset([MoveId.SPLASH]) .enemySpecies(Species.MAGCARGO) .enemyHasPassiveAbility(true); await game.classicMode.startBattle([Species.MAGIKARP]); diff --git a/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts index ab6d942e703..47658550e22 100644 --- a/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; @@ -29,9 +29,9 @@ describe("Abilities - Disguise", () => { game.override .battleStyle("single") .enemySpecies(Species.MIMIKYU) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .starterSpecies(Species.REGIELEKI) - .moveset([Moves.SHADOW_SNEAK, Moves.VACUUM_WAVE, Moves.TOXIC_THREAD, Moves.SPLASH]); + .moveset([MoveId.SHADOW_SNEAK, MoveId.VACUUM_WAVE, MoveId.TOXIC_THREAD, MoveId.SPLASH]); }); it("takes no damage from attacking move and transforms to Busted form, takes 1/8 max HP damage from the disguise breaking", async () => { @@ -43,7 +43,7 @@ describe("Abilities - Disguise", () => { expect(mimikyu.formIndex).toBe(disguisedForm); - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.phaseInterceptor.to("MoveEndPhase"); @@ -58,7 +58,7 @@ describe("Abilities - Disguise", () => { expect(mimikyu.formIndex).toBe(disguisedForm); - game.move.select(Moves.VACUUM_WAVE); + game.move.select(MoveId.VACUUM_WAVE); await game.phaseInterceptor.to("MoveEndPhase"); @@ -66,7 +66,7 @@ describe("Abilities - Disguise", () => { }); it("takes no damage from the first hit of a multihit move and transforms to Busted form, then takes damage from the second hit", async () => { - game.override.moveset([Moves.SURGING_STRIKES]); + game.override.moveset([MoveId.SURGING_STRIKES]); game.override.enemyLevel(5); await game.classicMode.startBattle(); @@ -76,7 +76,7 @@ describe("Abilities - Disguise", () => { expect(mimikyu.formIndex).toBe(disguisedForm); - game.move.select(Moves.SURGING_STRIKES); + game.move.select(MoveId.SURGING_STRIKES); // First hit await game.phaseInterceptor.to("MoveEffectPhase"); @@ -95,7 +95,7 @@ describe("Abilities - Disguise", () => { const mimikyu = game.scene.getEnemyPokemon()!; expect(mimikyu.hp).toBe(mimikyu.getMaxHp()); - game.move.select(Moves.TOXIC_THREAD); + game.move.select(MoveId.TOXIC_THREAD); await game.phaseInterceptor.to("TurnEndPhase"); @@ -106,7 +106,7 @@ describe("Abilities - Disguise", () => { }); it("persists form change when switched out", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]); + game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); game.override.starterSpecies(0); await game.classicMode.startBattle([Species.MIMIKYU, Species.FURRET]); @@ -115,7 +115,7 @@ describe("Abilities - Disguise", () => { const maxHp = mimikyu.getMaxHp(); const disguiseDamage = toDmgValue(maxHp / 8); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); @@ -140,7 +140,7 @@ describe("Abilities - Disguise", () => { const mimikyu = game.scene.getPlayerParty()[1]!; expect(mimikyu.formIndex).toBe(bustedForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); @@ -160,7 +160,7 @@ describe("Abilities - Disguise", () => { expect(mimikyu.formIndex).toBe(bustedForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); @@ -180,11 +180,11 @@ describe("Abilities - Disguise", () => { expect(mimikyu1.formIndex).toBe(bustedForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.killPokemon(mimikyu1); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("QuietFormChangePhase"); @@ -192,13 +192,13 @@ describe("Abilities - Disguise", () => { }); it("doesn't faint twice when fainting due to Disguise break damage, nor prevent faint from Disguise break damage if using Endure", async () => { - game.override.enemyMoveset([Moves.ENDURE]); + game.override.enemyMoveset([MoveId.ENDURE]); await game.classicMode.startBattle(); const mimikyu = game.scene.getEnemyPokemon()!; mimikyu.hp = 1; - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.toNextWave(); expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); @@ -207,7 +207,7 @@ describe("Abilities - Disguise", () => { it("activates when Aerilate circumvents immunity to the move's base type", async () => { game.override.ability(AbilityId.AERILATE); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); await game.classicMode.startBattle(); @@ -215,7 +215,7 @@ describe("Abilities - Disguise", () => { const maxHp = mimikyu.getMaxHp(); const disguiseDamage = toDmgValue(maxHp / 8); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("MoveEndPhase"); @@ -224,10 +224,10 @@ describe("Abilities - Disguise", () => { }); it("doesn't trigger if user is behind a substitute", async () => { - game.override.enemyMoveset(Moves.SUBSTITUTE).moveset(Moves.POWER_TRIP); + game.override.enemyMoveset(MoveId.SUBSTITUTE).moveset(MoveId.POWER_TRIP); await game.classicMode.startBattle(); - game.move.select(Moves.POWER_TRIP); + game.move.select(MoveId.POWER_TRIP); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); diff --git a/test/abilities/dry_skin.test.ts b/test/abilities/dry_skin.test.ts index 6c1e9b6d9cb..4b02c618d26 100644 --- a/test/abilities/dry_skin.test.ts +++ b/test/abilities/dry_skin.test.ts @@ -1,6 +1,6 @@ import { Species } from "#app/enums/species"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,10 +25,10 @@ describe("Abilities - Dry Skin", () => { .battleStyle("single") .disableCrits() .enemyAbility(AbilityId.DRY_SKIN) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.CHARMANDER) .ability(AbilityId.BALL_FETCH) - .moveset([Moves.SUNNY_DAY, Moves.RAIN_DANCE, Moves.SPLASH, Moves.WATER_GUN]) + .moveset([MoveId.SUNNY_DAY, MoveId.RAIN_DANCE, MoveId.SPLASH, MoveId.WATER_GUN]) .starterSpecies(Species.CHANDELURE); }); @@ -38,13 +38,13 @@ describe("Abilities - Dry Skin", () => { const enemy = game.scene.getEnemyPokemon()!; // first turn - game.move.select(Moves.SUNNY_DAY); + game.move.select(MoveId.SUNNY_DAY); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); // second turn enemy.hp = enemy.getMaxHp(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); }); @@ -57,19 +57,19 @@ describe("Abilities - Dry Skin", () => { enemy.hp = 1; // first turn - game.move.select(Moves.RAIN_DANCE); + game.move.select(MoveId.RAIN_DANCE); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeGreaterThan(1); // second turn enemy.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeGreaterThan(1); }); it("opposing fire attacks do 25% more damage", async () => { - game.override.moveset([Moves.FLAMETHROWER]); + game.override.moveset([MoveId.FLAMETHROWER]); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; @@ -77,7 +77,7 @@ describe("Abilities - Dry Skin", () => { enemy.hp = initialHP; // first turn - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to("TurnEndPhase"); const fireDamageTakenWithDrySkin = initialHP - enemy.hp; @@ -85,7 +85,7 @@ describe("Abilities - Dry Skin", () => { game.override.enemyAbility(AbilityId.NONE); // second turn - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to("TurnEndPhase"); const fireDamageTakenWithoutDrySkin = initialHP - enemy.hp; @@ -99,13 +99,13 @@ describe("Abilities - Dry Skin", () => { enemy.hp = 1; - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeGreaterThan(1); }); it("opposing water attacks do not heal if they were protected from", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([MoveId.PROTECT]); await game.classicMode.startBattle(); @@ -113,13 +113,13 @@ describe("Abilities - Dry Skin", () => { enemy.hp = 1; - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBe(1); }); it("multi-strike water attacks only heal once", async () => { - game.override.moveset([Moves.WATER_GUN, Moves.WATER_SHURIKEN]); + game.override.moveset([MoveId.WATER_GUN, MoveId.WATER_SHURIKEN]); await game.classicMode.startBattle(); @@ -128,14 +128,14 @@ describe("Abilities - Dry Skin", () => { enemy.hp = 1; // first turn - game.move.select(Moves.WATER_SHURIKEN); + game.move.select(MoveId.WATER_SHURIKEN); await game.phaseInterceptor.to("TurnEndPhase"); const healthGainedFromWaterShuriken = enemy.hp - 1; enemy.hp = 1; // second turn - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.phaseInterceptor.to("TurnEndPhase"); const healthGainedFromWaterGun = enemy.hp - 1; @@ -147,7 +147,7 @@ describe("Abilities - Dry Skin", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); enemy.hp = enemy.hp - 1; await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/abilities/early_bird.test.ts b/test/abilities/early_bird.test.ts index 7d5d5d75483..bf54e68bf6f 100644 --- a/test/abilities/early_bird.test.ts +++ b/test/abilities/early_bird.test.ts @@ -1,7 +1,7 @@ import { Status } from "#app/data/status-effect"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -25,13 +25,13 @@ describe("Abilities - Early Bird", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.REST, Moves.BELLY_DRUM, Moves.SPLASH]) + .moveset([MoveId.REST, MoveId.BELLY_DRUM, MoveId.SPLASH]) .ability(AbilityId.EARLY_BIRD) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("reduces Rest's sleep time to 1 turn", async () => { @@ -39,20 +39,20 @@ describe("Abilities - Early Bird", () => { const player = game.scene.getPlayerPokemon()!; - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.toNextTurn(); - game.move.select(Moves.REST); + game.move.select(MoveId.REST); await game.toNextTurn(); expect(player.status?.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBe(StatusEffect.SLEEP); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBeUndefined(); @@ -65,13 +65,13 @@ describe("Abilities - Early Bird", () => { const player = game.scene.getPlayerPokemon()!; player.status = new Status(StatusEffect.SLEEP, 0, 4); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBe(StatusEffect.SLEEP); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBeUndefined(); @@ -84,7 +84,7 @@ describe("Abilities - Early Bird", () => { const player = game.scene.getPlayerPokemon()!; player.status = new Status(StatusEffect.SLEEP, 0, 2); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBeUndefined(); diff --git a/test/abilities/flash_fire.test.ts b/test/abilities/flash_fire.test.ts index 2e98dac471c..56e8b8ac9db 100644 --- a/test/abilities/flash_fire.test.ts +++ b/test/abilities/flash_fire.test.ts @@ -4,7 +4,7 @@ import { Species } from "#app/enums/species"; import { MovePhase } from "#app/phases/move-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -36,34 +36,34 @@ describe("Abilities - Flash Fire", () => { }); it("immune to Fire-type moves", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset(Moves.SPLASH); + game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(blissey.hp).toBe(blissey.getMaxHp()); }, 20000); it("not activate if the Pokémon is protected from the Fire-type move", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset([Moves.PROTECT]); + game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.PROTECT]); await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to(TurnEndPhase); expect(blissey!.getTag(BattlerTagType.FIRE_BOOST)).toBeUndefined(); }, 20000); it("activated by Will-O-Wisp", async () => { - game.override.enemyMoveset([Moves.WILL_O_WISP]).moveset(Moves.SPLASH); + game.override.enemyMoveset([MoveId.WILL_O_WISP]).moveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.move.forceHit(); await game.phaseInterceptor.to(MovePhase, false); await game.move.forceHit(); @@ -73,24 +73,24 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("activated after being frozen", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset(Moves.SPLASH); + game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH); game.override.statusEffect(StatusEffect.FREEZE); await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(blissey!.getTag(BattlerTagType.FIRE_BOOST)).toBeDefined(); }, 20000); it("not passing with baton pass", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset([Moves.BATON_PASS]); + game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.BATON_PASS]); await game.classicMode.startBattle([Species.BLISSEY, Species.CHANSEY]); // ensure use baton pass after enemy moved - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); @@ -102,7 +102,7 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("boosts Fire-type move when the ability is activated", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE]).moveset([Moves.EMBER, Moves.SPLASH]); + game.override.enemyMoveset([MoveId.FIRE_PLEDGE]).moveset([MoveId.EMBER, MoveId.SPLASH]); game.override.enemyAbility(AbilityId.FLASH_FIRE).ability(AbilityId.NONE); await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; @@ -110,7 +110,7 @@ describe("Abilities - Flash Fire", () => { blissey.hp = initialHP; // first turn - game.move.select(Moves.EMBER); + game.move.select(MoveId.EMBER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(TurnEndPhase); const originalDmg = initialHP - blissey.hp; @@ -119,7 +119,7 @@ describe("Abilities - Flash Fire", () => { blissey.hp = initialHP; // second turn - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const flashFireDmg = initialHP - blissey.hp; @@ -127,7 +127,7 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("still activates regardless of accuracy check", async () => { - game.override.moveset(Moves.FIRE_PLEDGE).enemyMoveset(Moves.EMBER); + game.override.moveset(MoveId.FIRE_PLEDGE).enemyMoveset(MoveId.EMBER); game.override.enemyAbility(AbilityId.NONE).ability(AbilityId.FLASH_FIRE); game.override.enemySpecies(Species.BLISSEY); await game.classicMode.startBattle([Species.RATTATA]); @@ -137,7 +137,7 @@ describe("Abilities - Flash Fire", () => { blissey.hp = initialHP; // first turn - game.move.select(Moves.FIRE_PLEDGE); + game.move.select(MoveId.FIRE_PLEDGE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); @@ -148,7 +148,7 @@ describe("Abilities - Flash Fire", () => { blissey.hp = initialHP; // second turn - game.move.select(Moves.FIRE_PLEDGE); + game.move.select(MoveId.FIRE_PLEDGE); await game.phaseInterceptor.to(TurnEndPhase); const flashFireDmg = initialHP - blissey.hp; diff --git a/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts index 3d9c0f7adcd..5b87096b7f9 100644 --- a/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -4,7 +4,7 @@ import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; import { WeatherType } from "#app/enums/weather-type"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,7 +25,7 @@ describe("Abilities - Flower Gift", () => { game.override.starterForms({ [Species.CASTFORM]: SUNSHINE_FORM }).enemyAbility(ability); await game.classicMode.startBattle([Species.CASTFORM]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); expect(game.scene.getPlayerPokemon()?.formIndex).toBe(OVERCAST_FORM); }; @@ -42,18 +42,18 @@ describe("Abilities - Flower Gift", () => { */ const testDamageDealt = async ( game: GameManager, - move: Moves, + move: MoveId, allyAttacker: boolean, allyAbility = AbilityId.BALL_FETCH, enemyAbility = AbilityId.BALL_FETCH, ): Promise<[number, number]> => { game.override.battleStyle("double"); - game.override.moveset([Moves.SPLASH, Moves.SUNNY_DAY, move, Moves.HEAL_PULSE]); - game.override.enemyMoveset([Moves.SPLASH, Moves.HEAL_PULSE]); + game.override.moveset([MoveId.SPLASH, MoveId.SUNNY_DAY, move, MoveId.HEAL_PULSE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.HEAL_PULSE]); const target_index = allyAttacker ? BattlerIndex.ENEMY : BattlerIndex.PLAYER_2; const attacker_index = allyAttacker ? BattlerIndex.PLAYER_2 : BattlerIndex.ENEMY; - const ally_move = allyAttacker ? move : Moves.SPLASH; - const enemy_move = allyAttacker ? Moves.SPLASH : move; + const ally_move = allyAttacker ? move : MoveId.SPLASH; + const enemy_move = allyAttacker ? MoveId.SPLASH : move; const ally_target = allyAttacker ? BattlerIndex.ENEMY : null; await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); @@ -65,10 +65,10 @@ describe("Abilities - Flower Gift", () => { vi.spyOn(game.scene.getEnemyField()[0], "getAbility").mockReturnValue(allAbilities[enemyAbility]); // turn 1 - game.move.select(Moves.SUNNY_DAY, 0); + game.move.select(MoveId.SUNNY_DAY, 0); game.move.select(ally_move, 1, ally_target); await game.move.selectEnemyMove(enemy_move, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); // Ensure sunny day is used last. await game.setTurnOrder([attacker_index, target_index, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(TurnEndPhase); @@ -77,10 +77,10 @@ describe("Abilities - Flower Gift", () => { target.hp = initialHp; // turn 2. Make target use recover to reset hp calculation. - game.move.select(Moves.SPLASH, 0, target_index); + game.move.select(MoveId.SPLASH, 0, target_index); game.move.select(ally_move, 1, ally_target); await game.move.selectEnemyMove(enemy_move, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, target_index, attacker_index]); await game.phaseInterceptor.to(TurnEndPhase); const damageWithGift = initialHp - target.hp; @@ -101,9 +101,9 @@ describe("Abilities - Flower Gift", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SUNSTEEL_STRIKE, Moves.SUNNY_DAY, Moves.MUD_SLAP]) + .moveset([MoveId.SPLASH, MoveId.SUNSTEEL_STRIKE, MoveId.SUNNY_DAY, MoveId.MUD_SLAP]) .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) .enemyLevel(100) .startingLevel(100); @@ -120,8 +120,8 @@ describe("Abilities - Flower Gift", () => { const magikarpAtkStat = magikarp.getEffectiveStat(Stat.ATK); const magikarpSpDefStat = magikarp.getEffectiveStat(Stat.SPDEF); - game.move.select(Moves.SUNNY_DAY, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SUNNY_DAY, 0); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -134,24 +134,29 @@ describe("Abilities - Flower Gift", () => { }); it("should not increase the damage of an ally using an ability ignoring move", async () => { - const [damageWithGift, damageWithoutGift] = await testDamageDealt(game, Moves.SUNSTEEL_STRIKE, true); + const [damageWithGift, damageWithoutGift] = await testDamageDealt(game, MoveId.SUNSTEEL_STRIKE, true); expect(damageWithGift).toBe(damageWithoutGift); }); it("should not increase the damage of a mold breaker ally", async () => { - const [damageWithGift, damageWithoutGift] = await testDamageDealt(game, Moves.TACKLE, true, AbilityId.MOLD_BREAKER); + const [damageWithGift, damageWithoutGift] = await testDamageDealt( + game, + MoveId.TACKLE, + true, + AbilityId.MOLD_BREAKER, + ); expect(damageWithGift).toBe(damageWithoutGift); }); it("should decrease the damage an ally takes from a special attack", async () => { - const [damageWithoutGift, damageWithGift] = await testDamageDealt(game, Moves.MUD_SLAP, false); + const [damageWithoutGift, damageWithGift] = await testDamageDealt(game, MoveId.MUD_SLAP, false); expect(damageWithGift).toBeLessThan(damageWithoutGift); }); it("should not decrease the damage an ally takes from a mold breaker enemy using a special attack", async () => { const [damageWithoutGift, damageWithGift] = await testDamageDealt( game, - Moves.MUD_SLAP, + MoveId.MUD_SLAP, false, AbilityId.BALL_FETCH, AbilityId.MOLD_BREAKER, @@ -166,7 +171,7 @@ describe("Abilities - Flower Gift", () => { const cherrim = game.scene.getPlayerPokemon()!; expect(cherrim.formIndex).toBe(SUNSHINE_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); }); it("reverts to Overcast Form if a Pokémon on the field has Air Lock", async () => { @@ -178,7 +183,7 @@ describe("Abilities - Flower Gift", () => { }); it("reverts to Overcast Form when the Flower Gift is suppressed, changes form under Harsh Sunlight/Sunny when it regains it", async () => { - game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.HARSH_SUN); + game.override.enemyMoveset([MoveId.GASTRO_ACID]).weather(WeatherType.HARSH_SUN); await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); @@ -186,7 +191,7 @@ describe("Abilities - Flower Gift", () => { expect(cherrim.formIndex).toBe(SUNSHINE_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts index 95caf0e117f..bf80726cc08 100644 --- a/test/abilities/flower_veil.test.ts +++ b/test/abilities/flower_veil.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; @@ -28,14 +28,14 @@ describe("Abilities - Flower Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .enemySpecies(Species.BULBASAUR) .ability(AbilityId.FLOWER_VEIL) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); /*********************************************** @@ -43,36 +43,36 @@ describe("Abilities - Flower Veil", () => { ***********************************************/ it("should not prevent any source of self-inflicted status conditions", async () => { game.override - .enemyMoveset([Moves.TACKLE, Moves.SPLASH]) - .moveset([Moves.REST, Moves.SPLASH]) + .enemyMoveset([MoveId.TACKLE, MoveId.SPLASH]) + .moveset([MoveId.REST, MoveId.SPLASH]) .startingHeldItems([{ name: "FLAME_ORB" }]); await game.classicMode.startBattle([Species.BULBASAUR]); const user = game.scene.getPlayerPokemon()!; - game.move.select(Moves.REST); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.REST); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(user.status?.effect).toBe(StatusEffect.SLEEP); // remove sleep status so we can get burn from the orb user.resetStatus(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(user.status?.effect).toBe(StatusEffect.BURN); }); it("should prevent drowsiness from yawn for a grass user and its grass allies", async () => { - game.override.enemyMoveset([Moves.YAWN]).moveset([Moves.SPLASH]).battleStyle("double"); + game.override.enemyMoveset([MoveId.YAWN]).moveset([MoveId.SPLASH]).battleStyle("double"); await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); // Clear the ability of the ally to isolate the test const ally = game.scene.getPlayerField()[1]!; vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.YAWN, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.YAWN, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.YAWN, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.YAWN, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); const user = game.scene.getPlayerPokemon()!; @@ -81,28 +81,28 @@ describe("Abilities - Flower Veil", () => { }); it("should prevent status conditions from moves like Thunder Wave for a grass user and its grass allies", async () => { - game.override.enemyMoveset([Moves.THUNDER_WAVE]).moveset([Moves.SPLASH]).battleStyle("double"); - vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + game.override.enemyMoveset([MoveId.THUNDER_WAVE]).moveset([MoveId.SPLASH]).battleStyle("double"); + vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); await game.classicMode.startBattle([Species.BULBASAUR]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.THUNDER_WAVE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.THUNDER_WAVE); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); - vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockClear(); + vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockClear(); }); it("should not prevent status conditions for a non-grass user and its non-grass allies", async () => { - game.override.enemyMoveset([Moves.THUNDER_WAVE]).moveset([Moves.SPLASH]).battleStyle("double"); + game.override.enemyMoveset([MoveId.THUNDER_WAVE]).moveset([MoveId.SPLASH]).battleStyle("double"); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); const [user, ally] = game.scene.getPlayerField(); - vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); // Clear the ally ability to isolate the test vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.THUNDER_WAVE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.THUNDER_WAVE, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.THUNDER_WAVE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.THUNDER_WAVE, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(user.status?.effect).toBe(StatusEffect.PARALYSIS); expect(ally.status?.effect).toBe(StatusEffect.PARALYSIS); @@ -113,40 +113,40 @@ describe("Abilities - Flower Veil", () => { *******************************************/ it("should prevent the status drops from enemies for the a grass user and its grass allies", async () => { - game.override.enemyMoveset([Moves.GROWL]).moveset([Moves.SPLASH]).battleStyle("double"); + game.override.enemyMoveset([MoveId.GROWL]).moveset([MoveId.SPLASH]).battleStyle("double"); await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); const [user, ally] = game.scene.getPlayerField(); // Clear the ally ability to isolate the test vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(user.getStatStage(Stat.ATK)).toBe(0); expect(ally.getStatStage(Stat.ATK)).toBe(0); }); it("should not prevent status drops for a non-grass user and its non-grass allies", async () => { - game.override.enemyMoveset([Moves.GROWL]).moveset([Moves.SPLASH]).battleStyle("double"); + game.override.enemyMoveset([MoveId.GROWL]).moveset([MoveId.SPLASH]).battleStyle("double"); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); const [user, ally] = game.scene.getPlayerField(); // Clear the ally ability to isolate the test vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(user.getStatStage(Stat.ATK)).toBe(-2); expect(ally.getStatStage(Stat.ATK)).toBe(-2); }); it("should not prevent self-inflicted stat drops from moves like Close Combat for a user or its allies", async () => { - game.override.moveset([Moves.CLOSE_COMBAT]).battleStyle("double"); + game.override.moveset([MoveId.CLOSE_COMBAT]).battleStyle("double"); await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); const [user, ally] = game.scene.getPlayerField(); // Clear the ally ability to isolate the test vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); - game.move.select(Moves.CLOSE_COMBAT, 0, BattlerIndex.ENEMY); - game.move.select(Moves.CLOSE_COMBAT, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.CLOSE_COMBAT, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.CLOSE_COMBAT, 1, BattlerIndex.ENEMY_2); await game.phaseInterceptor.to("BerryPhase"); expect(user.getStatStage(Stat.DEF)).toBe(-1); expect(user.getStatStage(Stat.SPDEF)).toBe(-1); @@ -155,10 +155,10 @@ describe("Abilities - Flower Veil", () => { }); it("should prevent the drops while retaining the boosts from spicy extract", async () => { - game.override.enemyMoveset([Moves.SPICY_EXTRACT]).moveset([Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPICY_EXTRACT]).moveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.BULBASAUR]); const user = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(user.getStatStage(Stat.ATK)).toBe(2); expect(user.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/abilities/forecast.test.ts b/test/abilities/forecast.test.ts index a182eb85378..8d9bb373998 100644 --- a/test/abilities/forecast.test.ts +++ b/test/abilities/forecast.test.ts @@ -7,7 +7,7 @@ import { MovePhase } from "#app/phases/move-phase"; import { PostSummonPhase } from "#app/phases/post-summon-phase"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -32,7 +32,7 @@ describe("Abilities - Forecast", () => { game.override.weather(weather).starterForms({ [Species.CASTFORM]: initialForm }); await game.classicMode.startBattle([Species.CASTFORM]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); expect(game.scene.getPlayerPokemon()?.formIndex).toBe(form); }; @@ -46,7 +46,7 @@ describe("Abilities - Forecast", () => { game.override.starterForms({ [Species.CASTFORM]: SUNNY_FORM }).enemyAbility(ability); await game.classicMode.startBattle([Species.CASTFORM]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); expect(game.scene.getPlayerPokemon()?.formIndex).toBe(NORMAL_FORM); }; @@ -64,9 +64,9 @@ describe("Abilities - Forecast", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.TACKLE]) + .moveset([MoveId.SPLASH, MoveId.RAIN_DANCE, MoveId.SUNNY_DAY, MoveId.TACKLE]) .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH); }); @@ -74,7 +74,7 @@ describe("Abilities - Forecast", () => { "changes form based on weather", async () => { game.override - .moveset([Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SNOWSCAPE, Moves.SPLASH]) + .moveset([MoveId.RAIN_DANCE, MoveId.SUNNY_DAY, MoveId.SNOWSCAPE, MoveId.SPLASH]) .battleStyle("double") .starterForms({ [Species.KYOGRE]: 1, @@ -95,86 +95,86 @@ describe("Abilities - Forecast", () => { const castform = game.scene.getPlayerField()[0]; expect(castform.formIndex).toBe(NORMAL_FORM); - game.move.select(Moves.RAIN_DANCE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.RAIN_DANCE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(RAINY_FORM); - game.move.select(Moves.SUNNY_DAY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SUNNY_DAY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(SUNNY_FORM); - game.move.select(Moves.SNOWSCAPE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SNOWSCAPE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(SNOWY_FORM); - game.override.moveset([Moves.HAIL, Moves.SANDSTORM, Moves.SNOWSCAPE, Moves.SPLASH]); + game.override.moveset([MoveId.HAIL, MoveId.SANDSTORM, MoveId.SNOWSCAPE, MoveId.SPLASH]); - game.move.select(Moves.SANDSTORM); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SANDSTORM); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(NORMAL_FORM); - game.move.select(Moves.HAIL); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.HAIL); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(SNOWY_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); // Feebas now 2, Kyogre 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(RAINY_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(3); // Kyogre now 3, Groudon 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(SUNNY_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(4); // Groudon now 4, Rayquaza 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(NORMAL_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); // Rayquaza now 2, Feebas 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(NORMAL_FORM); - game.move.select(Moves.SNOWSCAPE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SNOWSCAPE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(SNOWY_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(5); // Feebas now 5, Altaria 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); expect(castform.formIndex).toBe(NORMAL_FORM); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(5); // Altaria now 5, Feebas 1 await game.phaseInterceptor.to("MovePhase"); await game.toNextTurn(); @@ -182,8 +182,8 @@ describe("Abilities - Forecast", () => { expect(castform.formIndex).toBe(SNOWY_FORM); game.scene.arena.trySetWeather(WeatherType.FOG); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnStartPhase"); expect(castform.formIndex).toBe(NORMAL_FORM); @@ -203,7 +203,7 @@ describe("Abilities - Forecast", () => { game.override.enemyAbility(AbilityId.FORECAST).enemySpecies(Species.SHUCKLE); await game.classicMode.startBattle([Species.CASTFORM]); - game.move.select(Moves.RAIN_DANCE); + game.move.select(MoveId.RAIN_DANCE); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()?.formIndex).toBe(RAINY_FORM); @@ -211,14 +211,14 @@ describe("Abilities - Forecast", () => { }); it("reverts to Normal Form when Forecast is suppressed, changes form to match the weather when it regains it", async () => { - game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.RAIN); + game.override.enemyMoveset([MoveId.GASTRO_ACID]).weather(WeatherType.RAIN); await game.classicMode.startBattle([Species.CASTFORM, Species.PIKACHU]); const castform = game.scene.getPlayerPokemon()!; expect(castform.formIndex).toBe(RAINY_FORM); // First turn - Forecast is suppressed - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.move.forceHit(); @@ -242,11 +242,11 @@ describe("Abilities - Forecast", () => { }); it("does not change Castform's form until after Stealth Rock deals damage", async () => { - game.override.weather(WeatherType.RAIN).enemyMoveset([Moves.STEALTH_ROCK]); + game.override.weather(WeatherType.RAIN).enemyMoveset([MoveId.STEALTH_ROCK]); await game.classicMode.startBattle([Species.PIKACHU, Species.CASTFORM]); // First turn - set up stealth rock - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Second turn - switch in Castform, regains Forecast diff --git a/test/abilities/friend_guard.test.ts b/test/abilities/friend_guard.test.ts index 87d40aba360..5537aa05f74 100644 --- a/test/abilities/friend_guard.test.ts +++ b/test/abilities/friend_guard.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; @@ -28,9 +28,9 @@ describe("Moves - Friend Guard", () => { game.override .battleStyle("double") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.TACKLE, Moves.SPLASH, Moves.DRAGON_RAGE]) + .enemyMoveset([MoveId.TACKLE, MoveId.SPLASH, MoveId.DRAGON_RAGE]) .enemySpecies(Species.SHUCKLE) - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .startingLevel(100); }); @@ -41,10 +41,10 @@ describe("Moves - Friend Guard", () => { const enemy1 = game.scene.getEnemyField()[0]; - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Get the last return value from `getAttackDamage` @@ -52,16 +52,16 @@ describe("Moves - Friend Guard", () => { // Making sure the test is controlled; turn 1 damage is equal to base damage (after rounding) expect(turn1Damage).toBe( Math.floor( - player1.getBaseDamage({ source: enemy1, move: allMoves[Moves.TACKLE], moveCategory: MoveCategory.PHYSICAL }), + player1.getBaseDamage({ source: enemy1, move: allMoves[MoveId.TACKLE], moveCategory: MoveCategory.PHYSICAL }), ), ); vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[AbilityId.FRIEND_GUARD]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Get the last return value from `getAttackDamage` @@ -69,7 +69,7 @@ describe("Moves - Friend Guard", () => { // With the ally's Friend Guard, damage should have been reduced from base damage by 25% expect(turn2Damage).toBe( Math.floor( - player1.getBaseDamage({ source: enemy1, move: allMoves[Moves.TACKLE], moveCategory: MoveCategory.PHYSICAL }) * + player1.getBaseDamage({ source: enemy1, move: allMoves[MoveId.TACKLE], moveCategory: MoveCategory.PHYSICAL }) * 0.75, ), ); @@ -81,20 +81,20 @@ describe("Moves - Friend Guard", () => { const player2 = game.scene.getPlayerField()[1]; const spy = vi.spyOn(player2, "getAttackDamage"); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[AbilityId.FRIEND_GUARD]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; @@ -107,10 +107,10 @@ describe("Moves - Friend Guard", () => { const [player1, player2] = game.scene.getPlayerField(); const spy = vi.spyOn(player1, "getAttackDamage"); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.DRAGON_RAGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; @@ -118,10 +118,10 @@ describe("Moves - Friend Guard", () => { vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[AbilityId.FRIEND_GUARD]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.DRAGON_RAGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index abb0220c28f..d20d47ec046 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -7,7 +7,7 @@ import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { WeatherType } from "#app/enums/weather-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,22 +30,22 @@ describe("Abilities - Good As Gold", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.GOOD_AS_GOLD) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should block normal status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); await game.classicMode.startBattle([Species.MAGIKARP]); const player = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH, 0); + game.move.select(MoveId.SPLASH, 0); await game.phaseInterceptor.to("BerryPhase"); @@ -54,9 +54,9 @@ describe("Abilities - Good As Gold", () => { }); it("should block memento and prevent the user from fainting", async () => { - game.override.enemyMoveset([Moves.MEMENTO]); + game.override.enemyMoveset([MoveId.MEMENTO]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.isFainted()).toBe(false); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(0); @@ -64,18 +64,18 @@ describe("Abilities - Good As Gold", () => { it("should not block any status moves that target the field, one side, or all pokemon", async () => { game.override.battleStyle("double"); - game.override.enemyMoveset([Moves.STEALTH_ROCK, Moves.HAZE]); - game.override.moveset([Moves.SWORDS_DANCE, Moves.SAFEGUARD]); + game.override.enemyMoveset([MoveId.STEALTH_ROCK, MoveId.HAZE]); + game.override.moveset([MoveId.SWORDS_DANCE, MoveId.SAFEGUARD]); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const [good_as_gold, ball_fetch] = game.scene.getPlayerField(); // Force second pokemon to have ball fetch to isolate to a single mon. vi.spyOn(ball_fetch, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]); - game.move.select(Moves.SWORDS_DANCE, 0); - game.move.select(Moves.SAFEGUARD, 1); - await game.move.selectEnemyMove(Moves.STEALTH_ROCK); - await game.move.selectEnemyMove(Moves.HAZE); + game.move.select(MoveId.SWORDS_DANCE, 0); + game.move.select(MoveId.SAFEGUARD, 1); + await game.move.selectEnemyMove(MoveId.STEALTH_ROCK); + await game.move.selectEnemyMove(MoveId.HAZE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(good_as_gold.getAbility().id).toBe(AbilityId.GOOD_AS_GOLD); @@ -86,10 +86,10 @@ describe("Abilities - Good As Gold", () => { it("should not block field targeted effects in singles", async () => { game.override.battleStyle("single"); - game.override.enemyMoveset([Moves.SPIKES]); + game.override.enemyMoveset([MoveId.SPIKES]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SPLASH, 0); + game.move.select(MoveId.SPLASH, 0); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)).toBeDefined(); @@ -97,11 +97,11 @@ describe("Abilities - Good As Gold", () => { it("should block the ally's helping hand", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.HELPING_HAND, Moves.TACKLE]); + game.override.moveset([MoveId.HELPING_HAND, MoveId.TACKLE]); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); - game.move.select(Moves.HELPING_HAND, 0); - game.move.select(Moves.TACKLE, 1); + game.move.select(MoveId.HELPING_HAND, 0); + game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.to("MoveEndPhase", true); expect(game.scene.getPlayerField()[1].getTag(BattlerTagType.HELPING_HAND)).toBeUndefined(); @@ -117,23 +117,23 @@ describe("Abilities - Good As Gold", () => { game.field.mockAbility(abra, AbilityId.BALL_FETCH); // turn 1 - game.move.use(Moves.SPLASH, 0); - game.move.use(Moves.HEAL_BELL, 1); + game.move.use(MoveId.SPLASH, 0); + game.move.use(MoveId.HEAL_BELL, 1); await game.toNextTurn(); expect(milotic.status?.effect).toBe(StatusEffect.BURN); game.doSwitchPokemon(2); - game.move.use(Moves.HEAL_BELL, 1); + game.move.use(MoveId.HEAL_BELL, 1); await game.toNextTurn(); expect(milotic.status?.effect).toBeUndefined(); }); it("should not block field targeted effects like rain dance", async () => { game.override.battleStyle("single"); - game.override.enemyMoveset([Moves.RAIN_DANCE]); + game.override.enemyMoveset([MoveId.RAIN_DANCE]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.use(Moves.SPLASH, 0); + game.move.use(MoveId.SPLASH, 0); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.RAIN); diff --git a/test/abilities/gorilla_tactics.test.ts b/test/abilities/gorilla_tactics.test.ts index 1a253884e80..f76fe82c877 100644 --- a/test/abilities/gorilla_tactics.test.ts +++ b/test/abilities/gorilla_tactics.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; @@ -25,10 +25,10 @@ describe("Abilities - Gorilla Tactics", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.DISABLE]) + .enemyMoveset([MoveId.SPLASH, MoveId.DISABLE]) .enemySpecies(Species.MAGIKARP) .enemyLevel(30) - .moveset([Moves.SPLASH, Moves.TACKLE, Moves.GROWL]) + .moveset([MoveId.SPLASH, MoveId.TACKLE, MoveId.GROWL]) .ability(AbilityId.GORILLA_TACTICS); }); @@ -38,15 +38,15 @@ describe("Abilities - Gorilla Tactics", () => { const darmanitan = game.scene.getPlayerPokemon()!; const initialAtkStat = darmanitan.getStat(Stat.ATK); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(darmanitan.getStat(Stat.ATK, false)).toBeCloseTo(initialAtkStat * 1.5); // Other moves should be restricted - expect(darmanitan.isMoveRestricted(Moves.TACKLE)).toBe(true); - expect(darmanitan.isMoveRestricted(Moves.SPLASH)).toBe(false); + expect(darmanitan.isMoveRestricted(MoveId.TACKLE)).toBe(true); + expect(darmanitan.isMoveRestricted(MoveId.SPLASH)).toBe(false); }); it("should struggle if the only usable move is disabled", async () => { @@ -56,14 +56,14 @@ describe("Abilities - Gorilla Tactics", () => { const enemy = game.scene.getEnemyPokemon()!; // First turn, lock move to Growl - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.SPLASH); // Second turn, Growl is interrupted by Disable await game.toNextTurn(); - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.DISABLE); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -72,7 +72,7 @@ describe("Abilities - Gorilla Tactics", () => { // Third turn, Struggle is used await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/abilities/gulp_missile.test.ts b/test/abilities/gulp_missile.test.ts index c75268fc33e..8622e9fb830 100644 --- a/test/abilities/gulp_missile.test.ts +++ b/test/abilities/gulp_missile.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import type Pokemon from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; @@ -43,10 +43,10 @@ describe("Abilities - Gulp Missile", () => { game.override .disableCrits() .battleStyle("single") - .moveset([Moves.SURF, Moves.DIVE, Moves.SPLASH, Moves.SUBSTITUTE]) + .moveset([MoveId.SURF, MoveId.DIVE, MoveId.SPLASH, MoveId.SUBSTITUTE]) .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(5); }); @@ -54,9 +54,9 @@ describe("Abilities - Gulp Missile", () => { await game.classicMode.startBattle([Species.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.toNextTurn(); - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getHpRatio()).toBeGreaterThanOrEqual(0.5); @@ -71,7 +71,7 @@ describe("Abilities - Gulp Missile", () => { vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.49); expect(cramorant.getHpRatio()).toBe(0.49); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_PIKACHU)).toBeDefined(); @@ -82,7 +82,7 @@ describe("Abilities - Gulp Missile", () => { await game.classicMode.startBattle([Species.CRAMORANT, Species.MAGIKARP]); const cramorant = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.toNextTurn(); game.doSwitchPokemon(1); @@ -97,7 +97,7 @@ describe("Abilities - Gulp Missile", () => { await game.classicMode.startBattle([Species.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -105,26 +105,26 @@ describe("Abilities - Gulp Missile", () => { }); it("deals 1/4 of the attacker's maximum HP when hit by a damaging attack", async () => { - game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([Species.CRAMORANT]); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "damageAndUpdate"); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.damageAndUpdate).toHaveReturnedWith(getEffectDamage(enemy)); }); it("does not have any effect when hit by non-damaging attack", async () => { - game.override.enemyMoveset(Moves.TAIL_WHIP); + game.override.enemyMoveset(MoveId.TAIL_WHIP); await game.classicMode.startBattle([Species.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -137,7 +137,7 @@ describe("Abilities - Gulp Missile", () => { }); it("lowers attacker's DEF stat stage by 1 when hit in Gulping form", async () => { - game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([Species.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; @@ -146,7 +146,7 @@ describe("Abilities - Gulp Missile", () => { vi.spyOn(enemy, "damageAndUpdate"); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -161,7 +161,7 @@ describe("Abilities - Gulp Missile", () => { }); it("paralyzes the enemy when hit in Gorging form", async () => { - game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([Species.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; @@ -170,7 +170,7 @@ describe("Abilities - Gulp Missile", () => { vi.spyOn(enemy, "damageAndUpdate"); vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.45); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_PIKACHU)).toBeDefined(); @@ -185,12 +185,12 @@ describe("Abilities - Gulp Missile", () => { }); it("does not activate the ability when underwater", async () => { - game.override.enemyMoveset(Moves.SURF); + game.override.enemyMoveset(MoveId.SURF); await game.classicMode.startBattle([Species.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("BerryPhase", false); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -198,7 +198,7 @@ describe("Abilities - Gulp Missile", () => { }); it("prevents effect damage but inflicts secondary effect on attacker with Magic Guard", async () => { - game.override.enemyMoveset(Moves.TACKLE).enemyAbility(AbilityId.MAGIC_GUARD); + game.override.enemyMoveset(MoveId.TACKLE).enemyAbility(AbilityId.MAGIC_GUARD); await game.classicMode.startBattle([Species.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; @@ -206,7 +206,7 @@ describe("Abilities - Gulp Missile", () => { vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); const enemyHpPreEffect = enemy.hp; @@ -222,12 +222,12 @@ describe("Abilities - Gulp Missile", () => { }); it("activates on faint", async () => { - game.override.enemyMoveset(Moves.THUNDERBOLT); + game.override.enemyMoveset(MoveId.THUNDERBOLT); await game.classicMode.startBattle([Species.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("FaintPhase"); expect(cramorant.hp).toBe(0); @@ -237,17 +237,17 @@ describe("Abilities - Gulp Missile", () => { }); it("doesn't trigger if user is behind a substitute", async () => { - game.override.enemyAbility(AbilityId.STURDY).enemyMoveset([Moves.SPLASH, Moves.POWER_TRIP]); + game.override.enemyAbility(AbilityId.STURDY).enemyMoveset([MoveId.SPLASH, MoveId.POWER_TRIP]); await game.classicMode.startBattle([Species.CRAMORANT]); - game.move.select(Moves.SURF); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SURF); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.formIndex).toBe(GULPING_FORM); - game.move.select(Moves.SUBSTITUTE); - await game.move.selectEnemyMove(Moves.POWER_TRIP); + game.move.select(MoveId.SUBSTITUTE); + await game.move.selectEnemyMove(MoveId.POWER_TRIP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); @@ -255,13 +255,13 @@ describe("Abilities - Gulp Missile", () => { }); it("cannot be suppressed", async () => { - game.override.enemyMoveset(Moves.GASTRO_ACID); + game.override.enemyMoveset(MoveId.GASTRO_ACID); await game.classicMode.startBattle([Species.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -275,13 +275,13 @@ describe("Abilities - Gulp Missile", () => { }); it("cannot be swapped with another ability", async () => { - game.override.enemyMoveset(Moves.SKILL_SWAP); + game.override.enemyMoveset(MoveId.SKILL_SWAP); await game.classicMode.startBattle([Species.CRAMORANT]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(0.55); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("MoveEndPhase"); expect(cramorant.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA)).toBeDefined(); @@ -298,7 +298,7 @@ describe("Abilities - Gulp Missile", () => { game.override.enemyAbility(AbilityId.TRACE); await game.classicMode.startBattle([Species.CRAMORANT]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnStartPhase"); expect(game.scene.getEnemyPokemon()?.hasAbility(AbilityId.GULP_MISSILE)).toBe(false); diff --git a/test/abilities/harvest.test.ts b/test/abilities/harvest.test.ts index cfa33a76f48..31fac3dc5a7 100644 --- a/test/abilities/harvest.test.ts +++ b/test/abilities/harvest.test.ts @@ -6,7 +6,7 @@ import type { ModifierOverride } from "#app/modifier/modifier-type"; import type { BooleanHolder } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { WeatherType } from "#enums/weather-type"; @@ -43,7 +43,7 @@ describe("Abilities - Harvest", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.NATURAL_GIFT, Moves.FALSE_SWIPE, Moves.GASTRO_ACID]) + .moveset([MoveId.SPLASH, MoveId.NATURAL_GIFT, MoveId.FALSE_SWIPE, MoveId.GASTRO_ACID]) .ability(AbilityId.HARVEST) .startingLevel(100) .battleStyle("single") @@ -53,15 +53,15 @@ describe("Abilities - Harvest", () => { .enemyLevel(1) .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.NUZZLE, Moves.KNOCK_OFF, Moves.INCINERATE]); + .enemyMoveset([MoveId.SPLASH, MoveId.NUZZLE, MoveId.KNOCK_OFF, MoveId.INCINERATE]); }); it("replenishes eaten berries", async () => { game.override.startingHeldItems([{ name: "BERRY", type: BerryType.LUM, count: 1 }]); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.NUZZLE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.NUZZLE); await game.phaseInterceptor.to("BerryPhase"); expect(getPlayerBerries()).toHaveLength(0); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toHaveLength(1); @@ -86,8 +86,8 @@ describe("Abilities - Harvest", () => { expect(milotic).toBeDefined(); // Chug a few berries without harvest (should get tracked) - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.NUZZLE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.NUZZLE); await game.toNextTurn(); expect(milotic.battleData.berriesEaten).toEqual(expect.arrayContaining([BerryType.ENIGMA, BerryType.LUM])); @@ -97,8 +97,8 @@ describe("Abilities - Harvest", () => { // but force our roll to fail so we don't accidentally recover anything vi.spyOn(PostTurnRestoreBerryAbAttr.prototype, "canApplyPostTurn").mockReturnValueOnce(false); game.override.ability(AbilityId.HARVEST); - game.move.select(Moves.GASTRO_ACID); - await game.move.selectEnemyMove(Moves.NUZZLE); + game.move.select(MoveId.GASTRO_ACID); + await game.move.selectEnemyMove(MoveId.NUZZLE); await game.toNextTurn(); @@ -108,8 +108,8 @@ describe("Abilities - Harvest", () => { expect(getPlayerBerries()).toHaveLength(0); // proc a high roll and we _should_ get a berry back! - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(milotic.battleData.berriesEaten).toHaveLength(3); @@ -125,8 +125,8 @@ describe("Abilities - Harvest", () => { const regieleki = game.scene.getPlayerPokemon()!; regieleki.hp = 1; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("TurnEndPhase"); @@ -145,16 +145,16 @@ describe("Abilities - Harvest", () => { it("keeps harvested berries across reloads", async () => { game.override .startingHeldItems([{ name: "BERRY", type: BerryType.PETAYA, count: 1 }]) - .moveset([Moves.SPLASH, Moves.EARTHQUAKE]) - .enemyMoveset([Moves.SUPER_FANG, Moves.HEAL_PULSE]) + .moveset([MoveId.SPLASH, MoveId.EARTHQUAKE]) + .enemyMoveset([MoveId.SUPER_FANG, MoveId.HEAL_PULSE]) .enemyAbility(AbilityId.COMPOUND_EYES); await game.classicMode.startBattle([Species.REGIELEKI]); const regieleki = game.scene.getPlayerPokemon()!; regieleki.hp = regieleki.getMaxHp() / 4 + 1; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SUPER_FANG); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -164,8 +164,8 @@ describe("Abilities - Harvest", () => { expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.SPATK)).toBe(1); // heal up so harvest doesn't proc and kill enemy - game.move.select(Moves.EARTHQUAKE); - await game.move.selectEnemyMove(Moves.HEAL_PULSE); + game.move.select(MoveId.EARTHQUAKE); + await game.move.selectEnemyMove(MoveId.HEAL_PULSE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); @@ -190,8 +190,8 @@ describe("Abilities - Harvest", () => { const feebas = game.scene.getPlayerPokemon()!; feebas.battleData.berriesEaten = [BerryType.LUM, BerryType.STARF]; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // Force RNG roll to hit the first berry we find that matches. @@ -218,8 +218,8 @@ describe("Abilities - Harvest", () => { const player = game.scene.getPlayerPokemon()!; player.battleData.berriesEaten = [BerryType.LUM, BerryType.STARF]; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expectBerriesContaining(...initBerries); @@ -230,8 +230,8 @@ describe("Abilities - Harvest", () => { game.override.startingHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 3 }]); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.INCINERATE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.INCINERATE); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); @@ -241,8 +241,8 @@ describe("Abilities - Harvest", () => { game.override.startingHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 3 }]); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.KNOCK_OFF); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.KNOCK_OFF); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); @@ -250,11 +250,11 @@ describe("Abilities - Harvest", () => { it("can restore berries eaten by Teatime", async () => { const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.STARF, count: 1 }]; - game.override.startingHeldItems(initBerries).enemyMoveset(Moves.TEATIME); + game.override.startingHeldItems(initBerries).enemyMoveset(MoveId.TEATIME); await game.classicMode.startBattle([Species.FEEBAS]); // nom nom the berr berr yay yay - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toEqual([]); @@ -263,11 +263,11 @@ describe("Abilities - Harvest", () => { it("cannot restore Plucked berries for either side", async () => { const initBerries: ModifierOverride[] = [{ name: "BERRY", type: BerryType.PETAYA, count: 1 }]; - game.override.startingHeldItems(initBerries).enemyAbility(AbilityId.HARVEST).enemyMoveset(Moves.PLUCK); + game.override.startingHeldItems(initBerries).enemyAbility(AbilityId.HARVEST).enemyMoveset(MoveId.PLUCK); await game.classicMode.startBattle([Species.FEEBAS]); // gobble gobble gobble - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // pluck triggers harvest for neither side @@ -289,7 +289,7 @@ describe("Abilities - Harvest", () => { game.override.startingHeldItems(initBerries).startingModifier([{ name: "BERRY_POUCH", count: 1 }]); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase", false); // won't trigger harvest since we didn't lose the berry (it just doesn't ever add it to the array) @@ -307,8 +307,8 @@ describe("Abilities - Harvest", () => { player.hp = 1; // steal a sitrus and immediately consume it - game.move.select(Moves.FALSE_SWIPE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.FALSE_SWIPE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(player.battleData.berriesEaten).toEqual([BerryType.SITRUS]); @@ -320,10 +320,10 @@ describe("Abilities - Harvest", () => { // TODO: Enable once fling actually works...??? it.todo("can restore berries flung at user", async () => { - game.override.enemyHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 1 }]).enemyMoveset(Moves.FLING); + game.override.enemyHeldItems([{ name: "BERRY", type: BerryType.STARF, count: 1 }]).enemyMoveset(MoveId.FLING); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toBe([]); @@ -336,7 +336,7 @@ describe("Abilities - Harvest", () => { game.override.startingHeldItems(initBerries); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.NATURAL_GIFT); + game.move.select(MoveId.NATURAL_GIFT); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.battleData.berriesEaten).toHaveLength(0); diff --git a/test/abilities/healer.test.ts b/test/abilities/healer.test.ts index 0be6fbe4ac1..1c0cdf2e871 100644 --- a/test/abilities/healer.test.ts +++ b/test/abilities/healer.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -30,13 +30,13 @@ describe("Abilities - Healer", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); healerAttr = allAbilities[AbilityId.HEALER].getAttrs(PostTurnResetStatusAbAttr)[0]; healerAttrSpy = vi @@ -45,14 +45,14 @@ describe("Abilities - Healer", () => { }); it("should not queue a message phase for healing if the ally has fainted", async () => { - game.override.moveset([Moves.SPLASH, Moves.LUNAR_DANCE]); + game.override.moveset([MoveId.SPLASH, MoveId.LUNAR_DANCE]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); const user = game.scene.getPlayerPokemon()!; // Only want one magikarp to have the ability. vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[AbilityId.HEALER]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); // faint the ally - game.move.select(Moves.LUNAR_DANCE, 1); + game.move.select(MoveId.LUNAR_DANCE, 1); const abSpy = vi.spyOn(healerAttr, "canApplyPostTurn"); await game.phaseInterceptor.to("TurnEndPhase"); @@ -70,8 +70,8 @@ describe("Abilities - Healer", () => { // Only want one magikarp to have the ability. vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[AbilityId.HEALER]); expect(ally.trySetStatus(StatusEffect.BURN)).toBe(true); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); await game.toNextTurn(); @@ -86,8 +86,8 @@ describe("Abilities - Healer", () => { // Only want one magikarp to have the ability. vi.spyOn(user, "getAbility").mockReturnValue(allAbilities[AbilityId.HEALER]); expect(ally.trySetStatus(StatusEffect.BURN)).toBe(true); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); await game.toNextTurn(); diff --git a/test/abilities/heatproof.test.ts b/test/abilities/heatproof.test.ts index 1f6f0fc2744..eb4940e6bbc 100644 --- a/test/abilities/heatproof.test.ts +++ b/test/abilities/heatproof.test.ts @@ -3,7 +3,7 @@ import { StatusEffect } from "#app/enums/status-effect"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -29,11 +29,11 @@ describe("Abilities - Heatproof", () => { .disableCrits() .enemySpecies(Species.CHARMANDER) .enemyAbility(AbilityId.HEATPROOF) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(100) .starterSpecies(Species.CHANDELURE) .ability(AbilityId.BALL_FETCH) - .moveset([Moves.FLAMETHROWER, Moves.SPLASH]) + .moveset([MoveId.FLAMETHROWER, MoveId.SPLASH]) .startingLevel(100); }); @@ -44,14 +44,14 @@ describe("Abilities - Heatproof", () => { const initialHP = 1000; enemy.hp = initialHP; - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to(TurnEndPhase); const heatproofDamage = initialHP - enemy.hp; enemy.hp = initialHP; game.override.enemyAbility(AbilityId.BALL_FETCH); - game.move.select(Moves.FLAMETHROWER); + game.move.select(MoveId.FLAMETHROWER); await game.phaseInterceptor.to(TurnEndPhase); const regularDamage = initialHP - enemy.hp; @@ -65,7 +65,7 @@ describe("Abilities - Heatproof", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Normal burn damage is /16 diff --git a/test/abilities/honey_gather.test.ts b/test/abilities/honey_gather.test.ts index eabba4484a4..d9f5e153f98 100644 --- a/test/abilities/honey_gather.test.ts +++ b/test/abilities/honey_gather.test.ts @@ -1,7 +1,7 @@ import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,7 +24,7 @@ describe("Abilities - Honey Gather", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.ROAR, Moves.THUNDERBOLT]) + .moveset([MoveId.SPLASH, MoveId.ROAR, MoveId.THUNDERBOLT]) .startingLevel(100) .ability(AbilityId.HONEY_GATHER) .passiveAbility(AbilityId.RUN_AWAY) @@ -32,14 +32,14 @@ describe("Abilities - Honey Gather", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should give money when winning a battle", async () => { await game.classicMode.startBattle([Species.MILOTIC]); game.scene.money = 1000; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.toNextWave(); expect(game.scene.money).toBeGreaterThan(1000); @@ -49,7 +49,7 @@ describe("Abilities - Honey Gather", () => { await game.classicMode.startBattle([Species.MILOTIC]); game.scene.money = 1000; - game.move.select(Moves.ROAR); + game.move.select(MoveId.ROAR); await game.toNextTurn(); expect(game.scene.money).toBe(1000); diff --git a/test/abilities/hustle.test.ts b/test/abilities/hustle.test.ts index 907b555b3aa..2ecb30daaa5 100644 --- a/test/abilities/hustle.test.ts +++ b/test/abilities/hustle.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,10 +25,10 @@ describe("Abilities - Hustle", () => { game = new GameManager(phaserGame); game.override .ability(AbilityId.HUSTLE) - .moveset([Moves.TACKLE, Moves.GIGA_DRAIN, Moves.FISSURE]) + .moveset([MoveId.TACKLE, MoveId.GIGA_DRAIN, MoveId.FISSURE]) .disableCrits() .battleStyle("single") - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.SHUCKLE) .enemyAbility(AbilityId.BALL_FETCH); }); @@ -40,7 +40,7 @@ describe("Abilities - Hustle", () => { vi.spyOn(pikachu, "getEffectiveStat"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -53,7 +53,7 @@ describe("Abilities - Hustle", () => { vi.spyOn(pikachu, "getAccuracyMultiplier"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("MoveEffectPhase"); expect(pikachu.getAccuracyMultiplier).toHaveReturnedWith(0.8); @@ -67,7 +67,7 @@ describe("Abilities - Hustle", () => { vi.spyOn(pikachu, "getEffectiveStat"); vi.spyOn(pikachu, "getAccuracyMultiplier"); - game.move.select(Moves.GIGA_DRAIN); + game.move.select(MoveId.GIGA_DRAIN); await game.phaseInterceptor.to("DamageAnimPhase"); expect(pikachu.getEffectiveStat).toHaveReturnedWith(spatk); @@ -83,13 +83,13 @@ describe("Abilities - Hustle", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(pikachu, "getAccuracyMultiplier"); - vi.spyOn(allMoves[Moves.FISSURE], "calculateBattleAccuracy"); + vi.spyOn(allMoves[MoveId.FISSURE], "calculateBattleAccuracy"); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to("DamageAnimPhase"); expect(enemyPokemon.turnData.damageTaken).toBe(enemyPokemon.getMaxHp()); expect(pikachu.getAccuracyMultiplier).toHaveReturnedWith(1); - expect(allMoves[Moves.FISSURE].calculateBattleAccuracy).toHaveReturnedWith(100); + expect(allMoves[MoveId.FISSURE].calculateBattleAccuracy).toHaveReturnedWith(100); }); }); diff --git a/test/abilities/hyper_cutter.test.ts b/test/abilities/hyper_cutter.test.ts index 57d43459344..dae6331beb1 100644 --- a/test/abilities/hyper_cutter.test.ts +++ b/test/abilities/hyper_cutter.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,11 +24,11 @@ describe("Abilities - Hyper Cutter", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.SAND_ATTACK, Moves.NOBLE_ROAR, Moves.DEFOG, Moves.OCTOLOCK]) + .moveset([MoveId.SAND_ATTACK, MoveId.NOBLE_ROAR, MoveId.DEFOG, MoveId.OCTOLOCK]) .ability(AbilityId.BALL_FETCH) .enemySpecies(Species.SHUCKLE) .enemyAbility(AbilityId.HYPER_CUTTER) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); // Reference Link: https://bulbapedia.bulbagarden.net/wiki/Hyper_Cutter_(Ability) @@ -38,16 +38,16 @@ describe("Abilities - Hyper Cutter", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); - game.move.select(Moves.DEFOG); + game.move.select(MoveId.DEFOG); await game.toNextTurn(); - game.move.select(Moves.NOBLE_ROAR); + game.move.select(MoveId.NOBLE_ROAR); await game.toNextTurn(); - game.move.select(Moves.SAND_ATTACK); + game.move.select(MoveId.SAND_ATTACK); await game.toNextTurn(); - game.override.moveset([Moves.STRING_SHOT]); - game.move.select(Moves.STRING_SHOT); + game.override.moveset([MoveId.STRING_SHOT]); + game.move.select(MoveId.STRING_SHOT); await game.toNextTurn(); expect(enemy.getStatStage(Stat.ATK)).toEqual(0); diff --git a/test/abilities/ice_face.test.ts b/test/abilities/ice_face.test.ts index a07ca173727..6282363d887 100644 --- a/test/abilities/ice_face.test.ts +++ b/test/abilities/ice_face.test.ts @@ -6,7 +6,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -33,13 +33,13 @@ describe("Abilities - Ice Face", () => { game.override.battleStyle("single"); game.override.enemySpecies(Species.EISCUE); game.override.enemyAbility(AbilityId.ICE_FACE); - game.override.moveset([Moves.TACKLE, Moves.ICE_BEAM, Moves.TOXIC_THREAD, Moves.HAIL]); + game.override.moveset([MoveId.TACKLE, MoveId.ICE_BEAM, MoveId.TOXIC_THREAD, MoveId.HAIL]); }); it("takes no damage from physical move and transforms to Noice", async () => { await game.classicMode.startBattle([Species.HITMONLEE]); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(MoveEndPhase); @@ -51,11 +51,11 @@ describe("Abilities - Ice Face", () => { }); it("takes no damage from the first hit of multihit physical move and transforms to Noice", async () => { - game.override.moveset([Moves.SURGING_STRIKES]); + game.override.moveset([MoveId.SURGING_STRIKES]); game.override.enemyLevel(1); await game.classicMode.startBattle([Species.HITMONLEE]); - game.move.select(Moves.SURGING_STRIKES); + game.move.select(MoveId.SURGING_STRIKES); const eiscue = game.scene.getEnemyPokemon()!; expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeDefined(); @@ -81,7 +81,7 @@ describe("Abilities - Ice Face", () => { it("takes damage from special moves", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.phaseInterceptor.to(MoveEndPhase); @@ -95,7 +95,7 @@ describe("Abilities - Ice Face", () => { it("takes effects from status moves", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.TOXIC_THREAD); + game.move.select(MoveId.TOXIC_THREAD); await game.phaseInterceptor.to(MoveEndPhase); @@ -106,11 +106,11 @@ describe("Abilities - Ice Face", () => { }); it("transforms to Ice Face when Hail or Snow starts", async () => { - game.override.moveset([Moves.QUICK_ATTACK]).enemyMoveset(Moves.HAIL); + game.override.moveset([MoveId.QUICK_ATTACK]).enemyMoveset(MoveId.HAIL); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.phaseInterceptor.to(MoveEndPhase); @@ -127,11 +127,11 @@ describe("Abilities - Ice Face", () => { }); it("transforms to Ice Face when summoned on arena with active Snow or Hail", async () => { - game.override.enemyMoveset(Moves.TACKLE).moveset([Moves.SNOWSCAPE]); + game.override.enemyMoveset(MoveId.TACKLE).moveset([MoveId.SNOWSCAPE]); await game.classicMode.startBattle([Species.EISCUE, Species.NINJASK]); - game.move.select(Moves.SNOWSCAPE); + game.move.select(MoveId.SNOWSCAPE); await game.phaseInterceptor.to(TurnEndPhase); let eiscue = game.scene.getPlayerPokemon()!; @@ -153,11 +153,11 @@ describe("Abilities - Ice Face", () => { }); it("will not revert to its Ice Face if there is already Hail when it changes into Noice", async () => { - game.override.enemySpecies(Species.SHUCKLE).enemyMoveset(Moves.TACKLE); + game.override.enemySpecies(Species.SHUCKLE).enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([Species.EISCUE]); - game.move.select(Moves.HAIL); + game.move.select(MoveId.HAIL); const eiscue = game.scene.getPlayerPokemon()!; await game.phaseInterceptor.to(QuietFormChangePhase); @@ -172,11 +172,11 @@ describe("Abilities - Ice Face", () => { }); it("persists form change when switched out", async () => { - game.override.enemyMoveset(Moves.QUICK_ATTACK); + game.override.enemyMoveset(MoveId.QUICK_ATTACK); await game.classicMode.startBattle([Species.EISCUE, Species.MAGIKARP]); - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.phaseInterceptor.to(TurnEndPhase); let eiscue = game.scene.getPlayerPokemon()!; @@ -210,7 +210,7 @@ describe("Abilities - Ice Face", () => { expect(eiscue.formIndex).toBe(noiceForm); expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeUndefined(); - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); @@ -221,10 +221,10 @@ describe("Abilities - Ice Face", () => { }); it("doesn't trigger if user is behind a substitute", async () => { - game.override.enemyMoveset(Moves.SUBSTITUTE).moveset(Moves.POWER_TRIP); + game.override.enemyMoveset(MoveId.SUBSTITUTE).moveset(MoveId.POWER_TRIP); await game.classicMode.startBattle(); - game.move.select(Moves.POWER_TRIP); + game.move.select(MoveId.POWER_TRIP); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -232,11 +232,11 @@ describe("Abilities - Ice Face", () => { }); it("cannot be suppressed", async () => { - game.override.moveset([Moves.GASTRO_ACID]); + game.override.moveset([MoveId.GASTRO_ACID]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.GASTRO_ACID); + game.move.select(MoveId.GASTRO_ACID); await game.phaseInterceptor.to(TurnEndPhase); @@ -248,11 +248,11 @@ describe("Abilities - Ice Face", () => { }); it("cannot be swapped with another ability", async () => { - game.override.moveset([Moves.SKILL_SWAP]); + game.override.moveset([MoveId.SKILL_SWAP]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to(TurnEndPhase); @@ -268,7 +268,7 @@ describe("Abilities - Ice Face", () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SIMPLE_BEAM); + game.move.select(MoveId.SIMPLE_BEAM); await game.phaseInterceptor.to(TurnInitPhase); diff --git a/test/abilities/illuminate.test.ts b/test/abilities/illuminate.test.ts index 4ff54fd4c38..59f09804c3d 100644 --- a/test/abilities/illuminate.test.ts +++ b/test/abilities/illuminate.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; @@ -22,10 +22,10 @@ describe("Abilities - Illuminate", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.SPLASH) + .moveset(MoveId.SPLASH) .ability(AbilityId.ILLUMINATE) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SAND_ATTACK); + .enemyMoveset(MoveId.SAND_ATTACK); }); it("should prevent ACC stat stage from being lowered", async () => { @@ -37,7 +37,7 @@ describe("Abilities - Illuminate", () => { expect(player.getStatStage(Stat.ACC)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts index 23cb6a3d874..1822229b65b 100644 --- a/test/abilities/illusion.test.ts +++ b/test/abilities/illusion.test.ts @@ -1,7 +1,7 @@ import { Gender } from "#app/data/gender"; import { PokeballType } from "#app/enums/pokeball"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,9 +27,9 @@ describe("Abilities - Illusion", () => { .battleStyle("single") .enemySpecies(Species.ZORUA) .enemyAbility(AbilityId.ILLUSION) - .enemyMoveset(Moves.TACKLE) + .enemyMoveset(MoveId.TACKLE) .enemyHeldItems([{ name: "WIDE_LENS", count: 3 }]) - .moveset([Moves.WORRY_SEED, Moves.SOAK, Moves.TACKLE]) + .moveset([MoveId.WORRY_SEED, MoveId.SOAK, MoveId.TACKLE]) .startingHeldItems([{ name: "WIDE_LENS", count: 3 }]); }); @@ -44,7 +44,7 @@ describe("Abilities - Illusion", () => { it("break after receiving damaging move", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("TurnEndPhase"); @@ -56,7 +56,7 @@ describe("Abilities - Illusion", () => { it("break after getting ability changed", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.WORRY_SEED); + game.move.select(MoveId.WORRY_SEED); await game.phaseInterceptor.to("TurnEndPhase"); @@ -78,8 +78,8 @@ describe("Abilities - Illusion", () => { game.override .enemyAbility(AbilityId.NEUTRALIZING_GAS) .ability(AbilityId.ILLUSION) - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS, Species.MAGIKARP]); game.doSwitchPokemon(1); @@ -89,7 +89,7 @@ describe("Abilities - Illusion", () => { }); it("causes enemy AI to consider the illusion's type instead of the actual type when considering move effectiveness", async () => { - game.override.enemyMoveset([Moves.FLAMETHROWER, Moves.PSYCHIC, Moves.TACKLE]); + game.override.enemyMoveset([MoveId.FLAMETHROWER, MoveId.PSYCHIC, MoveId.TACKLE]); await game.classicMode.startBattle([Species.ZOROARK, Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; @@ -119,12 +119,12 @@ describe("Abilities - Illusion", () => { it("does not break from indirect damage", async () => { game.override.enemySpecies(Species.GIGALITH); game.override.enemyAbility(AbilityId.SAND_STREAM); - game.override.enemyMoveset(Moves.WILL_O_WISP); - game.override.moveset([Moves.FLARE_BLITZ]); + game.override.enemyMoveset(MoveId.WILL_O_WISP); + game.override.moveset([MoveId.FLARE_BLITZ]); await game.classicMode.startBattle([Species.ZOROARK, Species.AZUMARILL]); - game.move.select(Moves.FLARE_BLITZ); + game.move.select(MoveId.FLARE_BLITZ); await game.phaseInterceptor.to("TurnEndPhase"); @@ -134,7 +134,7 @@ describe("Abilities - Illusion", () => { }); it("copies the the name, nickname, gender, shininess, and pokeball from the illusion source", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.ABRA, Species.ZOROARK, Species.AXEW]); const axew = game.scene.getPlayerParty().at(2)!; axew.shiny = true; @@ -156,13 +156,13 @@ describe("Abilities - Illusion", () => { }); it("breaks when suppressed", async () => { - game.override.moveset(Moves.GASTRO_ACID); + game.override.moveset(MoveId.GASTRO_ACID); await game.classicMode.startBattle([Species.MAGIKARP]); const zorua = game.scene.getEnemyPokemon()!; expect(!!zorua.summonData?.illusion).toBe(true); - game.move.select(Moves.GASTRO_ACID); + game.move.select(MoveId.GASTRO_ACID); await game.phaseInterceptor.to("BerryPhase"); expect(zorua.isFullHp()).toBe(true); diff --git a/test/abilities/immunity.test.ts b/test/abilities/immunity.test.ts index 6df8121fe9f..e085491a70d 100644 --- a/test/abilities/immunity.test.ts +++ b/test/abilities/immunity.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -23,27 +23,27 @@ describe("Abilities - Immunity", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should remove poison when gained", async () => { game.override .ability(AbilityId.IMMUNITY) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.POISON); expect(enemy?.status?.effect).toBe(StatusEffect.POISON); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/imposter.test.ts b/test/abilities/imposter.test.ts index 1b904c46ba6..a2d1817d821 100644 --- a/test/abilities/imposter.test.ts +++ b/test/abilities/imposter.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; @@ -30,15 +30,15 @@ describe("Abilities - Imposter", () => { .enemyLevel(200) .enemyAbility(AbilityId.BEAST_BOOST) .enemyPassiveAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .ability(AbilityId.IMPOSTER) - .moveset(Moves.SPLASH); + .moveset(MoveId.SPLASH); }); it("should copy species, ability, gender, all stats except HP, all stat stages, moveset, and types of target", async () => { await game.classicMode.startBattle([Species.DITTO]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const player = game.scene.getPlayerPokemon()!; @@ -75,7 +75,7 @@ describe("Abilities - Imposter", () => { }); it("should copy in-battle overridden stats", async () => { - game.override.enemyMoveset([Moves.POWER_SPLIT]); + game.override.enemyMoveset([MoveId.POWER_SPLIT]); await game.classicMode.startBattle([Species.DITTO]); @@ -85,7 +85,7 @@ describe("Abilities - Imposter", () => { const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.ATK, false)).toBe(avgAtk); @@ -96,18 +96,18 @@ describe("Abilities - Imposter", () => { }); it("should set each move's pp to a maximum of 5", async () => { - game.override.enemyMoveset([Moves.SWORDS_DANCE, Moves.GROWL, Moves.SKETCH, Moves.RECOVER]); + game.override.enemyMoveset([MoveId.SWORDS_DANCE, MoveId.GROWL, MoveId.SKETCH, MoveId.RECOVER]); await game.classicMode.startBattle([Species.DITTO]); const player = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); player.getMoveset().forEach(move => { // Should set correct maximum PP without touching `ppUp` if (move) { - if (move.moveId === Moves.SKETCH) { + if (move.moveId === MoveId.SKETCH) { expect(move.getMovePp()).toBe(1); } else { expect(move.getMovePp()).toBe(5); @@ -122,21 +122,21 @@ describe("Abilities - Imposter", () => { await game.classicMode.startBattle([Species.DITTO]); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("MoveEndPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); }); it("should persist transformed attributes across reloads", async () => { - game.override.moveset([Moves.ABSORB]); + game.override.moveset([MoveId.ABSORB]); await game.classicMode.startBattle([Species.DITTO]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); @@ -158,11 +158,11 @@ describe("Abilities - Imposter", () => { } expect(playerMoveset.length).toEqual(1); - expect(playerMoveset[0]?.moveId).toEqual(Moves.SPLASH); + expect(playerMoveset[0]?.moveId).toEqual(MoveId.SPLASH); }); it("should stay transformed with the correct form after reload", async () => { - game.override.moveset([Moves.ABSORB]); + game.override.moveset([MoveId.ABSORB]); game.override.enemySpecies(Species.UNOWN); await game.classicMode.startBattle([Species.DITTO]); @@ -172,7 +172,7 @@ describe("Abilities - Imposter", () => { enemy.species.forms[5]; enemy.species.formIndex = 5; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index 3f79b0e2f1f..5bbd0938e5f 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -5,7 +5,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,13 +28,13 @@ describe("Abilities - Infiltrator", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TACKLE, Moves.WATER_GUN, Moves.SPORE, Moves.BABY_DOLL_EYES]) + .moveset([MoveId.TACKLE, MoveId.WATER_GUN, MoveId.SPORE, MoveId.BABY_DOLL_EYES]) .ability(AbilityId.INFILTRATOR) .battleStyle("single") .disableCrits() .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100); }); @@ -43,17 +43,17 @@ describe("Abilities - Infiltrator", () => { { effectName: "Light Screen", tagType: ArenaTagType.LIGHT_SCREEN, - move: Moves.WATER_GUN, + move: MoveId.WATER_GUN, }, { effectName: "Reflect", tagType: ArenaTagType.REFLECT, - move: Moves.TACKLE, + move: MoveId.TACKLE, }, { effectName: "Aurora Veil", tagType: ArenaTagType.AURORA_VEIL, - move: Moves.TACKLE, + move: MoveId.TACKLE, }, ])("should bypass the target's $effectName", async ({ tagType, move }) => { await game.classicMode.startBattle([Species.MAGIKARP]); @@ -63,7 +63,7 @@ describe("Abilities - Infiltrator", () => { const preScreenDmg = enemy.getAttackDamage({ source: player, move: allMoves[move] }).damage; - game.scene.arena.addTag(tagType, 1, Moves.NONE, enemy.id, ArenaTagSide.ENEMY, true); + game.scene.arena.addTag(tagType, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); const postScreenDmg = enemy.getAttackDamage({ source: player, move: allMoves[move] }).damage; @@ -77,9 +77,9 @@ describe("Abilities - Infiltrator", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.scene.arena.addTag(ArenaTagType.SAFEGUARD, 1, Moves.NONE, enemy.id, ArenaTagSide.ENEMY, true); + game.scene.arena.addTag(ArenaTagType.SAFEGUARD, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase", false); expect(enemy.status?.effect).toBe(StatusEffect.SLEEP); @@ -93,9 +93,9 @@ describe("Abilities - Infiltrator", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.scene.arena.addTag(ArenaTagType.MIST, 1, Moves.NONE, enemy.id, ArenaTagSide.ENEMY, true); + game.scene.arena.addTag(ArenaTagType.MIST, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); - game.move.select(Moves.BABY_DOLL_EYES); + game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getStatStage(Stat.ATK)).toBe(-1); @@ -108,9 +108,9 @@ describe("Abilities - Infiltrator", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - enemy.addTag(BattlerTagType.SUBSTITUTE, 1, Moves.NONE, enemy.id); + enemy.addTag(BattlerTagType.SUBSTITUTE, 1, MoveId.NONE, enemy.id); - game.move.select(Moves.BABY_DOLL_EYES); + game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/abilities/insomnia.test.ts b/test/abilities/insomnia.test.ts index 3a21e3dae27..4c9b4f63e5f 100644 --- a/test/abilities/insomnia.test.ts +++ b/test/abilities/insomnia.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -23,27 +23,27 @@ describe("Abilities - Insomnia", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should remove sleep when gained", async () => { game.override .ability(AbilityId.INSOMNIA) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.SLEEP); expect(enemy?.status?.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/intimidate.test.ts b/test/abilities/intimidate.test.ts index 705128321ac..be27576107b 100644 --- a/test/abilities/intimidate.test.ts +++ b/test/abilities/intimidate.test.ts @@ -5,7 +5,7 @@ import { UiMode } from "#enums/ui-mode"; import { Stat } from "#enums/stat"; import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; describe("Abilities - Intimidate", () => { @@ -31,7 +31,7 @@ describe("Abilities - Intimidate", () => { .enemyPassiveAbility(AbilityId.HYDRATION) .ability(AbilityId.INTIMIDATE) .startingWave(3) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should lower ATK stat stage by 1 of enemy Pokemon on entry and player switch", async () => { @@ -89,7 +89,7 @@ describe("Abilities - Intimidate", () => { it("should not activate again if there is no switch or new entry", async () => { game.override.startingWave(2); - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -98,7 +98,7 @@ describe("Abilities - Intimidate", () => { expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -106,7 +106,7 @@ describe("Abilities - Intimidate", () => { }, 20000); it("should lower ATK stat stage by 1 for every switch", async () => { - game.override.moveset([Moves.SPLASH]).enemyMoveset([Moves.VOLT_SWITCH]).startingWave(5); + game.override.moveset([MoveId.SPLASH]).enemyMoveset([MoveId.VOLT_SWITCH]).startingWave(5); await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -115,7 +115,7 @@ describe("Abilities - Intimidate", () => { expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); - game.move.select(getMovePosition(game.scene, 0, Moves.SPLASH)); + game.move.select(getMovePosition(game.scene, 0, MoveId.SPLASH)); await game.toNextTurn(); enemyPokemon = game.scene.getEnemyPokemon()!; @@ -123,7 +123,7 @@ describe("Abilities - Intimidate", () => { expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-2); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index 21ebed2093a..ebbd8822292 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -6,7 +6,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; @@ -34,43 +34,43 @@ describe("Abilities - Libero", () => { .ability(AbilityId.LIBERO) .startingLevel(100) .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.ENDURE); + .enemyMoveset(MoveId.ENDURE); }); test("ability applies and changes a pokemon's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); }); // Test for Gen9+ functionality, we are using previous funcionality test.skip("ability applies only once per switch in", async () => { - game.override.moveset([Moves.SPLASH, Moves.AGILITY]); + game.override.moveset([MoveId.SPLASH, MoveId.AGILITY]); await game.classicMode.startBattle([Species.MAGIKARP, Species.BULBASAUR]); let leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); - game.move.select(Moves.AGILITY); + game.move.select(MoveId.AGILITY); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.LIBERO); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]]; - const moveType = PokemonType[allMoves[Moves.AGILITY].type]; + const moveType = PokemonType[allMoves[MoveId.AGILITY].type]; expect(leadPokemonType).not.toBe(moveType); await game.toNextTurn(); @@ -82,14 +82,14 @@ describe("Abilities - Libero", () => { leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); }); test("ability applies correctly even if the pokemon's move has a variable type", async () => { - game.override.moveset([Moves.WEATHER_BALL]); + game.override.moveset([MoveId.WEATHER_BALL]); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -97,7 +97,7 @@ describe("Abilities - Libero", () => { expect(leadPokemon).not.toBe(undefined); game.scene.arena.weather = new Weather(WeatherType.SUNNY); - game.move.select(Moves.WEATHER_BALL); + game.move.select(MoveId.WEATHER_BALL); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.LIBERO); @@ -108,7 +108,7 @@ describe("Abilities - Libero", () => { }); test("ability applies correctly even if the type has changed by another ability", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.passiveAbility(AbilityId.REFRIGERATE); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -116,7 +116,7 @@ describe("Abilities - Libero", () => { const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.LIBERO); @@ -127,7 +127,7 @@ describe("Abilities - Libero", () => { }); test("ability applies correctly even if the pokemon's move calls another move", async () => { - game.override.moveset([Moves.NATURE_POWER]); + game.override.moveset([MoveId.NATURE_POWER]); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -135,60 +135,60 @@ describe("Abilities - Libero", () => { expect(leadPokemon).not.toBe(undefined); game.scene.arena.biomeType = Biome.MOUNTAIN; - game.move.select(Moves.NATURE_POWER); + game.move.select(MoveId.NATURE_POWER); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.AIR_SLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.AIR_SLASH); }); test("ability applies correctly even if the pokemon's move is delayed / charging", async () => { - game.override.moveset([Moves.DIG]); + game.override.moveset([MoveId.DIG]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.DIG); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.DIG); }); test("ability applies correctly even if the pokemon's move misses", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.TACKLE]); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.move.forceMiss(); await game.phaseInterceptor.to(TurnEndPhase); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.isFullHp()).toBe(true); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability applies correctly even if the pokemon's move is protected against", async () => { - game.override.moveset([Moves.TACKLE]).enemyMoveset(Moves.PROTECT); + game.override.moveset([MoveId.TACKLE]).enemyMoveset(MoveId.PROTECT); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability applies correctly even if the pokemon's move fails because of type immunity", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.enemySpecies(Species.GASTLY); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -196,29 +196,29 @@ describe("Abilities - Libero", () => { const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability is not applied if pokemon's type is the same as the move's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - leadPokemon.summonData.types = [allMoves[Moves.SPLASH].type]; - game.move.select(Moves.SPLASH); + leadPokemon.summonData.types = [allMoves[MoveId.SPLASH].type]; + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.LIBERO); }); test("ability is not applied if pokemon is terastallized", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -227,42 +227,42 @@ describe("Abilities - Libero", () => { leadPokemon.isTerastallized = true; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.LIBERO); }); test("ability is not applied if pokemon uses struggle", async () => { - game.override.moveset([Moves.STRUGGLE]); + game.override.moveset([MoveId.STRUGGLE]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.STRUGGLE); + game.move.select(MoveId.STRUGGLE); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.LIBERO); }); test("ability is not applied if the pokemon's move fails", async () => { - game.override.moveset([Moves.BURN_UP]); + game.override.moveset([MoveId.BURN_UP]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.BURN_UP); + game.move.select(MoveId.BURN_UP); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.LIBERO); }); test("ability applies correctly even if the pokemon's Trick-or-Treat fails", async () => { - game.override.moveset([Moves.TRICK_OR_TREAT]); + game.override.moveset([MoveId.TRICK_OR_TREAT]); game.override.enemySpecies(Species.GASTLY); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -270,29 +270,29 @@ describe("Abilities - Libero", () => { const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TRICK_OR_TREAT); + game.move.select(MoveId.TRICK_OR_TREAT); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TRICK_OR_TREAT); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TRICK_OR_TREAT); }); test("ability applies correctly and the pokemon curses itself", async () => { - game.override.moveset([Moves.CURSE]); + game.override.moveset([MoveId.CURSE]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.CURSE); + game.move.select(MoveId.CURSE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.CURSE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.CURSE); expect(leadPokemon.getTag(BattlerTagType.CURSED)).not.toBe(undefined); }); }); -function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: Moves) { +function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: MoveId) { expect(pokemon.waveData.abilitiesApplied).toContain(AbilityId.LIBERO); expect(pokemon.getTypes()).toHaveLength(1); const pokemonType = PokemonType[pokemon.getTypes()[0]], diff --git a/test/abilities/lightningrod.test.ts b/test/abilities/lightningrod.test.ts index 4fa63ac7f53..0e0398d021e 100644 --- a/test/abilities/lightningrod.test.ts +++ b/test/abilities/lightningrod.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -24,13 +24,13 @@ describe("Abilities - Lightningrod", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SHOCK_WAVE]) + .moveset([MoveId.SPLASH, MoveId.SHOCK_WAVE]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should redirect electric type moves", async () => { @@ -41,15 +41,15 @@ describe("Abilities - Lightningrod", () => { enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - game.move.select(Moves.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(true); }); it("should not redirect non-electric type moves", async () => { - game.override.moveset([Moves.SPLASH, Moves.AERIAL_ACE]); + game.override.moveset([MoveId.SPLASH, MoveId.AERIAL_ACE]); await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; @@ -57,8 +57,8 @@ describe("Abilities - Lightningrod", () => { enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - game.move.select(Moves.AERIAL_ACE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.AERIAL_ACE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(false); @@ -71,8 +71,8 @@ describe("Abilities - Lightningrod", () => { enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - game.move.select(Moves.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy2.isFullHp()).toBe(true); @@ -88,15 +88,15 @@ describe("Abilities - Lightningrod", () => { enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - game.move.select(Moves.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(false); }); it("should redirect moves changed to electric type via ability", async () => { - game.override.ability(AbilityId.GALVANIZE).moveset(Moves.TACKLE); + game.override.ability(AbilityId.GALVANIZE).moveset(MoveId.TACKLE); await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; @@ -104,8 +104,8 @@ describe("Abilities - Lightningrod", () => { enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - game.move.select(Moves.TACKLE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.TACKLE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(true); diff --git a/test/abilities/limber.test.ts b/test/abilities/limber.test.ts index 292edf8c80e..d7a0d0f14cf 100644 --- a/test/abilities/limber.test.ts +++ b/test/abilities/limber.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -23,27 +23,27 @@ describe("Abilities - Limber", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should remove paralysis when gained", async () => { game.override .ability(AbilityId.LIMBER) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.PARALYSIS); expect(enemy?.status?.effect).toBe(StatusEffect.PARALYSIS); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/magic_bounce.test.ts b/test/abilities/magic_bounce.test.ts index ad0ce88a60b..085ba1f38aa 100644 --- a/test/abilities/magic_bounce.test.ts +++ b/test/abilities/magic_bounce.test.ts @@ -7,7 +7,7 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,28 +31,28 @@ describe("Abilities - Magic Bounce", () => { game.override .ability(AbilityId.BALL_FETCH) .battleStyle("single") - .moveset([Moves.GROWL, Moves.SPLASH]) + .moveset([MoveId.GROWL, MoveId.SPLASH]) .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.MAGIC_BOUNCE) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should reflect basic status moves", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should not bounce moves while the target is in the semi-invulnerable state", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.override.moveset([Moves.GROWL]); - game.override.enemyMoveset([Moves.FLY]); + game.override.moveset([MoveId.GROWL]); + game.override.enemyMoveset([MoveId.FLY]); - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.FLY); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.FLY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -61,11 +61,11 @@ describe("Abilities - Magic Bounce", () => { it("should individually bounce back multi-target moves", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.GROWL, Moves.SPLASH]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); - game.move.select(Moves.GROWL, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.GROWL, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); const user = game.scene.getPlayerField()[0]; @@ -75,9 +75,9 @@ describe("Abilities - Magic Bounce", () => { it("should still bounce back a move that would otherwise fail", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); - game.override.moveset([Moves.GROWL]); + game.override.moveset([MoveId.GROWL]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); @@ -87,7 +87,7 @@ describe("Abilities - Magic Bounce", () => { game.override.ability(AbilityId.MAGIC_BOUNCE); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); @@ -97,7 +97,7 @@ describe("Abilities - Magic Bounce", () => { game.override.ability(AbilityId.MIRROR_ARMOR); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); @@ -107,7 +107,7 @@ describe("Abilities - Magic Bounce", () => { game.override.ability(AbilityId.MOLD_BREAKER); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); @@ -115,12 +115,12 @@ describe("Abilities - Magic Bounce", () => { it("should bounce back a spread status move against both pokemon", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.GROWL, Moves.SPLASH]); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); - game.move.select(Moves.GROWL, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.GROWL, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField().every(p => p.getStatStage(Stat.ATK) === -2)).toBeTruthy(); @@ -129,9 +129,9 @@ describe("Abilities - Magic Bounce", () => { it("should only bounce spikes back once in doubles when both targets have magic bounce", async () => { game.override.battleStyle("double"); await game.classicMode.startBattle([Species.MAGIKARP]); - game.override.moveset([Moves.SPIKES]); + game.override.moveset([MoveId.SPIKES]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); @@ -139,21 +139,21 @@ describe("Abilities - Magic Bounce", () => { }); it("should bounce spikes even when the target is protected", async () => { - game.override.moveset([Moves.SPIKES]); - game.override.enemyMoveset([Moves.PROTECT]); + game.override.moveset([MoveId.SPIKES]); + game.override.enemyMoveset([MoveId.PROTECT]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); }); it("should not bounce spikes when the target is in the semi-invulnerable state", async () => { - game.override.moveset([Moves.SPIKES]); - game.override.enemyMoveset([Moves.FLY]); + game.override.moveset([MoveId.SPIKES]); + game.override.enemyMoveset([MoveId.FLY]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)!["layers"]).toBe(1); @@ -162,17 +162,17 @@ describe("Abilities - Magic Bounce", () => { it("should not bounce back curse", async () => { game.override.starterSpecies(Species.GASTLY); await game.classicMode.startBattle([Species.GASTLY]); - game.override.moveset([Moves.CURSE]); + game.override.moveset([MoveId.CURSE]); - game.move.select(Moves.CURSE); + game.move.select(MoveId.CURSE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getTag(BattlerTagType.CURSED)).toBeDefined(); }); it("should not cause encore to be interrupted after bouncing", async () => { - game.override.moveset([Moves.SPLASH, Moves.GROWL, Moves.ENCORE]); - game.override.enemyMoveset([Moves.TACKLE, Moves.GROWL]); + game.override.moveset([MoveId.SPLASH, MoveId.GROWL, MoveId.ENCORE]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.GROWL]); // game.override.ability(Abilities.MOLD_BREAKER); await game.classicMode.startBattle([Species.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -182,25 +182,25 @@ describe("Abilities - Magic Bounce", () => { vi.spyOn(playerPokemon, "getAbility").mockReturnValue(allAbilities[AbilityId.MOLD_BREAKER]); // turn 1 - game.move.select(Moves.ENCORE); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.ENCORE); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(MoveId.TACKLE); // turn 2 vi.spyOn(playerPokemon, "getAbility").mockRestore(); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); - expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(MoveId.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(MoveId.TACKLE); }); // TODO: encore is failing if the last move was virtual. it.todo("should not cause the bounced move to count for encore", async () => { - game.override.moveset([Moves.SPLASH, Moves.GROWL, Moves.ENCORE]); - game.override.enemyMoveset([Moves.GROWL, Moves.TACKLE]); + game.override.moveset([MoveId.SPLASH, MoveId.GROWL, MoveId.ENCORE]); + game.override.enemyMoveset([MoveId.GROWL, MoveId.TACKLE]); game.override.enemyAbility(AbilityId.MAGIC_BOUNCE); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -208,8 +208,8 @@ describe("Abilities - Magic Bounce", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; // turn 1 - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -217,27 +217,27 @@ describe("Abilities - Magic Bounce", () => { vi.spyOn(playerPokemon, "getAbility").mockReturnValue(allAbilities[AbilityId.MOLD_BREAKER]); // turn 2 - game.move.select(Moves.ENCORE); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.ENCORE); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); - expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(MoveId.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(MoveId.TACKLE); }); // TODO: stomping tantrum should consider moves that were bounced. it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { game.override.battleStyle("single"); await game.classicMode.startBattle([Species.MAGIKARP]); - game.override.moveset([Moves.STOMPING_TANTRUM, Moves.CHARM]); + game.override.moveset([MoveId.STOMPING_TANTRUM, MoveId.CHARM]); - const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; vi.spyOn(stomping_tantrum, "calculateBattlePower"); - game.move.select(Moves.CHARM); + game.move.select(MoveId.CHARM); await game.toNextTurn(); - game.move.select(Moves.STOMPING_TANTRUM); + game.move.select(MoveId.STOMPING_TANTRUM); await game.phaseInterceptor.to("BerryPhase"); expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(150); }); @@ -246,15 +246,15 @@ describe("Abilities - Magic Bounce", () => { it.todo( "should properly cause the enemy's stomping tantrum to be doubled in power after bouncing and failing", async () => { - game.override.enemyMoveset([Moves.STOMPING_TANTRUM, Moves.SPLASH, Moves.CHARM]); + game.override.enemyMoveset([MoveId.STOMPING_TANTRUM, MoveId.SPLASH, MoveId.CHARM]); await game.classicMode.startBattle([Species.BULBASAUR]); - const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(stomping_tantrum, "calculateBattlePower"); - game.move.select(Moves.SPORE); - await game.move.selectEnemyMove(Moves.CHARM); + game.move.select(MoveId.SPORE); + await game.move.selectEnemyMove(MoveId.CHARM); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getLastXMoves(1)[0].result).toBe("success"); @@ -262,55 +262,55 @@ describe("Abilities - Magic Bounce", () => { expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); await game.toNextTurn(); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); }, ); it("should respect immunities when bouncing a move", async () => { - vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); - game.override.moveset([Moves.THUNDER_WAVE, Moves.GROWL]); + vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + game.override.moveset([MoveId.THUNDER_WAVE, MoveId.GROWL]); game.override.ability(AbilityId.SOUNDPROOF); await game.classicMode.startBattle([Species.PHANPY]); // Turn 1 - thunder wave immunity test - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); // Turn 2 - soundproof immunity test - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); }); it("should bounce back a move before the accuracy check", async () => { - game.override.moveset([Moves.SPORE]); + game.override.moveset([MoveId.SPORE]); await game.classicMode.startBattle([Species.MAGIKARP]); const attacker = game.scene.getPlayerPokemon()!; vi.spyOn(attacker, "getAccuracyMultiplier").mockReturnValue(0.0); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); }); it("should take the accuracy of the magic bounce user into account", async () => { - game.override.moveset([Moves.SPORE]); + game.override.moveset([MoveId.SPORE]); await game.classicMode.startBattle([Species.MAGIKARP]); const opponent = game.scene.getEnemyPokemon()!; vi.spyOn(opponent, "getAccuracyMultiplier").mockReturnValue(0); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); }); it("should always apply the leftmost available target's magic bounce when bouncing moves like sticky webs in doubles", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.STICKY_WEB, Moves.SPLASH, Moves.TRICK_ROOM]); + game.override.moveset([MoveId.STICKY_WEB, MoveId.SPLASH, MoveId.TRICK_ROOM]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); const [enemy_1, enemy_2] = game.scene.getEnemyField(); @@ -318,8 +318,8 @@ describe("Abilities - Magic Bounce", () => { enemy_1.setStat(Stat.SPD, enemy_2.getStat(Stat.SPD) + 1); // turn 1 - game.move.select(Moves.STICKY_WEB, 0); - game.move.select(Moves.TRICK_ROOM, 1); + game.move.select(MoveId.STICKY_WEB, 0); + game.move.select(MoveId.TRICK_ROOM, 1); await game.phaseInterceptor.to("TurnEndPhase"); expect( @@ -331,8 +331,8 @@ describe("Abilities - Magic Bounce", () => { game.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER, true); // turn 2 - game.move.select(Moves.STICKY_WEB, 0); - game.move.select(Moves.TRICK_ROOM, 1); + game.move.select(MoveId.STICKY_WEB, 0); + game.move.select(MoveId.TRICK_ROOM, 1); await game.phaseInterceptor.to("BerryPhase"); expect( game.scene.arena @@ -343,17 +343,17 @@ describe("Abilities - Magic Bounce", () => { }); it("should not bounce back status moves that hit through semi-invulnerable states", async () => { - game.override.moveset([Moves.TOXIC, Moves.CHARM]); + game.override.moveset([MoveId.TOXIC, MoveId.CHARM]); await game.classicMode.startBattle([Species.BULBASAUR]); - game.move.select(Moves.TOXIC); - await game.move.selectEnemyMove(Moves.FLY); + game.move.select(MoveId.TOXIC); + await game.move.selectEnemyMove(MoveId.FLY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); game.override.ability(AbilityId.NO_GUARD); - game.move.select(Moves.CHARM); + game.move.select(MoveId.CHARM); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-2); diff --git a/test/abilities/magic_guard.test.ts b/test/abilities/magic_guard.test.ts index 038f0586af5..b21e19b3efe 100644 --- a/test/abilities/magic_guard.test.ts +++ b/test/abilities/magic_guard.test.ts @@ -4,7 +4,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; @@ -31,13 +31,13 @@ describe("Abilities - Magic Guard", () => { /** Player Pokemon overrides */ game.override.ability(AbilityId.MAGIC_GUARD); - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); game.override.startingLevel(100); /** Enemy Pokemon overrides */ game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(AbilityId.INSOMNIA); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemyLevel(100); }); @@ -53,7 +53,7 @@ describe("Abilities - Magic Guard", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -74,7 +74,7 @@ describe("Abilities - Magic Guard", () => { const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -88,14 +88,14 @@ describe("Abilities - Magic Guard", () => { }); it("ability effect should not persist when the ability is replaced", async () => { - game.override.enemyMoveset([Moves.WORRY_SEED, Moves.WORRY_SEED, Moves.WORRY_SEED, Moves.WORRY_SEED]); + game.override.enemyMoveset([MoveId.WORRY_SEED, MoveId.WORRY_SEED, MoveId.WORRY_SEED, MoveId.WORRY_SEED]); game.override.statusEffect(StatusEffect.POISON); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -112,7 +112,7 @@ describe("Abilities - Magic Guard", () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -134,7 +134,7 @@ describe("Abilities - Magic Guard", () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -156,13 +156,13 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage caused by entry hazards", async () => { //Adds and applies Spikes to both sides of the arena - const newTag = getArenaTag(ArenaTagType.SPIKES, 5, Moves.SPIKES, 0, 0, ArenaTagSide.BOTH)!; + const newTag = getArenaTag(ArenaTagType.SPIKES, 5, MoveId.SPIKES, 0, 0, ArenaTagSide.BOTH)!; game.scene.arena.tags.push(newTag); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -179,15 +179,15 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard does not prevent poison from Toxic Spikes", async () => { //Adds and applies Spikes to both sides of the arena - const playerTag = getArenaTag(ArenaTagType.TOXIC_SPIKES, 5, Moves.TOXIC_SPIKES, 0, 0, ArenaTagSide.PLAYER)!; - const enemyTag = getArenaTag(ArenaTagType.TOXIC_SPIKES, 5, Moves.TOXIC_SPIKES, 0, 0, ArenaTagSide.ENEMY)!; + const playerTag = getArenaTag(ArenaTagType.TOXIC_SPIKES, 5, MoveId.TOXIC_SPIKES, 0, 0, ArenaTagSide.PLAYER)!; + const enemyTag = getArenaTag(ArenaTagType.TOXIC_SPIKES, 5, MoveId.TOXIC_SPIKES, 0, 0, ArenaTagSide.ENEMY)!; game.scene.arena.tags.push(playerTag); game.scene.arena.tags.push(enemyTag); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -207,12 +207,12 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents against damage from volatile status effects", async () => { await game.classicMode.startBattle([Species.DUSKULL]); - game.override.moveset([Moves.CURSE]); + game.override.moveset([MoveId.CURSE]); game.override.enemyAbility(AbilityId.MAGIC_GUARD); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.CURSE); + game.move.select(MoveId.CURSE); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -230,12 +230,12 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard prevents crash damage", async () => { - game.override.moveset([Moves.HIGH_JUMP_KICK]); + game.override.moveset([MoveId.HIGH_JUMP_KICK]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.HIGH_JUMP_KICK); + game.move.select(MoveId.HIGH_JUMP_KICK); await game.move.forceMiss(); await game.phaseInterceptor.to(TurnEndPhase); @@ -248,12 +248,12 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard prevents damage from recoil", async () => { - game.override.moveset([Moves.TAKE_DOWN]); + game.override.moveset([MoveId.TAKE_DOWN]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TAKE_DOWN); + game.move.select(MoveId.TAKE_DOWN); await game.phaseInterceptor.to(TurnEndPhase); @@ -265,12 +265,12 @@ describe("Abilities - Magic Guard", () => { }); it("Magic Guard does not prevent damage from Struggle's recoil", async () => { - game.override.moveset([Moves.STRUGGLE]); + game.override.moveset([MoveId.STRUGGLE]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.STRUGGLE); + game.move.select(MoveId.STRUGGLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -283,12 +283,12 @@ describe("Abilities - Magic Guard", () => { //This tests different move attributes than the recoil tests above it("Magic Guard prevents self-damage from attacking moves", async () => { - game.override.moveset([Moves.STEEL_BEAM]); + game.override.moveset([MoveId.STEEL_BEAM]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.STEEL_BEAM); + game.move.select(MoveId.STEEL_BEAM); await game.phaseInterceptor.to(TurnEndPhase); @@ -310,12 +310,12 @@ describe("Abilities - Magic Guard", () => { */ it("Magic Guard does not prevent self-damage from non-attacking moves", async () => { - game.override.moveset([Moves.BELLY_DRUM]); + game.override.moveset([MoveId.BELLY_DRUM]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.phaseInterceptor.to(TurnEndPhase); @@ -330,14 +330,14 @@ describe("Abilities - Magic Guard", () => { //Tests the ability Bad Dreams game.override.statusEffect(StatusEffect.SLEEP); //enemy pokemon is given Spore just in case player pokemon somehow awakens during test - game.override.enemyMoveset([Moves.SPORE, Moves.SPORE, Moves.SPORE, Moves.SPORE]); + game.override.enemyMoveset([MoveId.SPORE, MoveId.SPORE, MoveId.SPORE, MoveId.SPORE]); game.override.enemyAbility(AbilityId.BAD_DREAMS); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -352,7 +352,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with PostFaintContactDamageAbAttr", async () => { //Tests the abilities Innards Out/Aftermath - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.enemyAbility(AbilityId.AFTERMATH); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -362,7 +362,7 @@ describe("Abilities - Magic Guard", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.hp = 1; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); /** @@ -376,7 +376,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with PostDefendContactDamageAbAttr", async () => { //Tests the abilities Iron Barbs/Rough Skin - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.enemyAbility(AbilityId.IRON_BARBS); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -385,7 +385,7 @@ describe("Abilities - Magic Guard", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); /** @@ -399,7 +399,7 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with ReverseDrainAbAttr", async () => { //Tests the ability Liquid Ooze - game.override.moveset([Moves.ABSORB]); + game.override.moveset([MoveId.ABSORB]); game.override.enemyAbility(AbilityId.LIQUID_OOZE); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -408,7 +408,7 @@ describe("Abilities - Magic Guard", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ABSORB); + game.move.select(MoveId.ABSORB); await game.phaseInterceptor.to(TurnEndPhase); /** @@ -427,7 +427,7 @@ describe("Abilities - Magic Guard", () => { await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); /** diff --git a/test/abilities/magma_armor.test.ts b/test/abilities/magma_armor.test.ts index 4a146248aab..d917f040fc6 100644 --- a/test/abilities/magma_armor.test.ts +++ b/test/abilities/magma_armor.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -23,27 +23,27 @@ describe("Abilities - Magma Armor", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should remove freeze when gained", async () => { game.override .ability(AbilityId.MAGMA_ARMOR) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.FREEZE); expect(enemy?.status?.effect).toBe(StatusEffect.FREEZE); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/mimicry.test.ts b/test/abilities/mimicry.test.ts index 1e7a2df5e86..7f5b41c7391 100644 --- a/test/abilities/mimicry.test.ts +++ b/test/abilities/mimicry.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { PokemonType } from "#enums/pokemon-type"; import GameManager from "#test/testUtils/gameManager"; @@ -23,12 +23,12 @@ describe("Abilities - Mimicry", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.MIMICRY) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("Mimicry activates after the Pokémon with Mimicry is switched in while terrain is present, or whenever there is a change in terrain", async () => { @@ -36,7 +36,7 @@ describe("Abilities - Mimicry", () => { await game.classicMode.startBattle([Species.FEEBAS, Species.ABRA]); const [playerPokemon1, playerPokemon2] = game.scene.getPlayerParty(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon1.getTypes().includes(PokemonType.FAIRY)).toBe(true); @@ -48,14 +48,14 @@ describe("Abilities - Mimicry", () => { it("Pokemon should revert back to its original, root type once terrain ends", async () => { game.override - .moveset([Moves.SPLASH, Moves.TRANSFORM]) + .moveset([MoveId.SPLASH, MoveId.TRANSFORM]) .enemyAbility(AbilityId.MIMICRY) - .enemyMoveset([Moves.SPLASH, Moves.PSYCHIC_TERRAIN]); + .enemyMoveset([MoveId.SPLASH, MoveId.PSYCHIC_TERRAIN]); await game.classicMode.startBattle([Species.REGIELEKI]); const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.TRANSFORM); - await game.move.selectEnemyMove(Moves.PSYCHIC_TERRAIN); + game.move.select(MoveId.TRANSFORM); + await game.move.selectEnemyMove(MoveId.PSYCHIC_TERRAIN); await game.toNextTurn(); expect(playerPokemon?.getTypes().includes(PokemonType.PSYCHIC)).toBe(true); @@ -63,25 +63,25 @@ describe("Abilities - Mimicry", () => { game.scene.arena.terrain.turnsLeft = 1; } - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon?.getTypes().includes(PokemonType.ELECTRIC)).toBe(true); }); it("If the Pokemon is under the effect of a type-adding move and an equivalent terrain activates, the move's effect disappears", async () => { - game.override.enemyMoveset([Moves.FORESTS_CURSE, Moves.GRASSY_TERRAIN]); + game.override.enemyMoveset([MoveId.FORESTS_CURSE, MoveId.GRASSY_TERRAIN]); await game.classicMode.startBattle([Species.FEEBAS]); const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.FORESTS_CURSE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.FORESTS_CURSE); await game.toNextTurn(); expect(playerPokemon?.summonData.addedType).toBe(PokemonType.GRASS); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.GRASSY_TERRAIN); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.GRASSY_TERRAIN); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon?.summonData.addedType).toBeNull(); diff --git a/test/abilities/mirror_armor.test.ts b/test/abilities/mirror_armor.test.ts index 408fadce5d1..f20d1caed17 100644 --- a/test/abilities/mirror_armor.test.ts +++ b/test/abilities/mirror_armor.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,10 +29,10 @@ describe("Ability - Mirror Armor", () => { game.override .battleStyle("single") .enemySpecies(Species.RATTATA) - .enemyMoveset([Moves.SPLASH, Moves.STICKY_WEB, Moves.TICKLE, Moves.OCTOLOCK]) + .enemyMoveset([MoveId.SPLASH, MoveId.STICKY_WEB, MoveId.TICKLE, MoveId.OCTOLOCK]) .enemyAbility(AbilityId.BALL_FETCH) .startingLevel(2000) - .moveset([Moves.SPLASH, Moves.STICKY_WEB, Moves.TICKLE, Moves.OCTOLOCK]) + .moveset([MoveId.SPLASH, MoveId.STICKY_WEB, MoveId.TICKLE, MoveId.OCTOLOCK]) .ability(AbilityId.BALL_FETCH); }); @@ -45,8 +45,8 @@ describe("Ability - Mirror Armor", () => { const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate, enemy should lose -1 atk - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -62,8 +62,8 @@ describe("Ability - Mirror Armor", () => { const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate, enemy should lose -1 atk - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -80,10 +80,10 @@ describe("Ability - Mirror Armor", () => { const [player1, player2] = game.scene.getPlayerField(); // Enemy has intimidate, enemy should lose -2 atk each - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(enemy1.getStatStage(Stat.ATK)).toBe(-2); @@ -102,10 +102,10 @@ describe("Ability - Mirror Armor", () => { const [player1, player2] = game.scene.getPlayerField(); // Enemy has intimidate, enemy should lose -1 atk - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(enemy1.getStatStage(Stat.ATK)).toBe(0); @@ -123,8 +123,8 @@ describe("Ability - Mirror Armor", () => { const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate and uses tickle, enemy receives -2 atk and -1 defense - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.TICKLE, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(-1); @@ -142,10 +142,10 @@ describe("Ability - Mirror Armor", () => { const [enemy1, enemy2] = game.scene.getEnemyField(); const [player1, player2] = game.scene.getPlayerField(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TICKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TICKLE, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(player1.getStatStage(Stat.ATK)).toBe(0); @@ -167,8 +167,8 @@ describe("Ability - Mirror Armor", () => { const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate and uses tickle, enemy receives -2 atk and -1 defense - game.move.select(Moves.TICKLE); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.TICKLE); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.DEF)).toBe(-1); @@ -186,8 +186,8 @@ describe("Ability - Mirror Armor", () => { const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate and uses tickle, enemy has white smoke, no one loses stats - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.TICKLE, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.TICKLE, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -205,8 +205,8 @@ describe("Ability - Mirror Armor", () => { const userPokemon = game.scene.getPlayerPokemon()!; // Enemy has intimidate and uses tickle, enemy has white smoke, no one loses stats - game.move.select(Moves.TICKLE); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.TICKLE); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -223,8 +223,8 @@ describe("Ability - Mirror Armor", () => { const userPokemon = game.scene.getPlayerPokemon()!; // Enemy uses octolock, player loses stats at end of turn - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.OCTOLOCK, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.OCTOLOCK, BattlerIndex.PLAYER); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -241,8 +241,8 @@ describe("Ability - Mirror Armor", () => { const userPokemon = game.scene.getPlayerPokemon()!; // Player uses octolock, enemy loses stats at end of turn - game.move.select(Moves.OCTOLOCK); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.OCTOLOCK); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -260,8 +260,8 @@ describe("Ability - Mirror Armor", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -275,12 +275,12 @@ describe("Ability - Mirror Armor", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; const userPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.STICKY_WEB, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.STICKY_WEB, BattlerIndex.PLAYER); await game.toNextTurn(); game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.toNextTurn(); expect(userPokemon.getStatStage(Stat.SPD)).toBe(0); @@ -295,16 +295,16 @@ describe("Ability - Mirror Armor", () => { const [enemy1, enemy2] = game.scene.getEnemyField(); const [player1, player2] = game.scene.getPlayerField(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.STICKY_WEB, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.STICKY_WEB, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); game.doSwitchPokemon(2); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.toNextTurn(); expect(enemy1.getStatStage(Stat.SPD)).toBe(-1); diff --git a/test/abilities/mold_breaker.test.ts b/test/abilities/mold_breaker.test.ts index a6c1081b9b2..24d56e73907 100644 --- a/test/abilities/mold_breaker.test.ts +++ b/test/abilities/mold_breaker.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { globalScene } from "#app/global-scene"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,27 +24,27 @@ describe("Abilities - Mold Breaker", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.MOLD_BREAKER) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should turn off the ignore abilities arena variable after the user's move", async () => { game.override - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .ability(AbilityId.MOLD_BREAKER) - .moveset([Moves.ERUPTION]) + .moveset([MoveId.ERUPTION]) .startingLevel(100) .enemyLevel(2); await game.classicMode.startBattle([Species.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; expect(enemy.isFainted()).toBe(false); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase", true); expect(globalScene.arena.ignoreAbilities).toBe(false); diff --git a/test/abilities/moody.test.ts b/test/abilities/moody.test.ts index 78212b01a8a..1663aff5d9e 100644 --- a/test/abilities/moody.test.ts +++ b/test/abilities/moody.test.ts @@ -1,6 +1,6 @@ import { BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,15 +28,15 @@ describe("Abilities - Moody", () => { .enemySpecies(Species.RATTATA) .enemyAbility(AbilityId.BALL_FETCH) .ability(AbilityId.MOODY) - .enemyMoveset(Moves.SPLASH) - .moveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH) + .moveset(MoveId.SPLASH); }); it("should increase one stat stage by 2 and decrease a different stat stage by 1", async () => { await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Find the increased and decreased stats, make sure they are different. @@ -57,7 +57,7 @@ describe("Abilities - Moody", () => { // Set all stat stages to -6 vi.spyOn(playerPokemon.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(-6)); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Should increase one stat stage by 2 (from -6, meaning it will be -4) @@ -75,7 +75,7 @@ describe("Abilities - Moody", () => { // Set all stat stages to 6 vi.spyOn(playerPokemon.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(6)); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Should decrease one stat stage by 1 (from 6, meaning it will be 5) diff --git a/test/abilities/moxie.test.ts b/test/abilities/moxie.test.ts index 0ffeef1c8e2..86b168c6c6f 100644 --- a/test/abilities/moxie.test.ts +++ b/test/abilities/moxie.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,18 +26,18 @@ describe("Abilities - Moxie", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.AERIAL_ACE; + const moveToUse = MoveId.AERIAL_ACE; game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); game.override.enemyAbility(AbilityId.MOXIE); game.override.ability(AbilityId.MOXIE); game.override.startingLevel(2000); game.override.moveset([moveToUse]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); }); it("should raise ATK stat stage by 1 when winning a battle", async () => { - const moveToUse = Moves.AERIAL_ACE; + const moveToUse = MoveId.AERIAL_ACE; await game.classicMode.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -55,7 +55,7 @@ describe("Abilities - Moxie", () => { "should raise ATK stat stage by 1 when defeating an ally Pokemon", async () => { game.override.battleStyle("double"); - const moveToUse = Moves.AERIAL_ACE; + const moveToUse = MoveId.AERIAL_ACE; await game.classicMode.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); const [firstPokemon, secondPokemon] = game.scene.getPlayerField(); diff --git a/test/abilities/mummy.test.ts b/test/abilities/mummy.test.ts index dc1419a3562..7e03933a56c 100644 --- a/test/abilities/mummy.test.ts +++ b/test/abilities/mummy.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -22,29 +22,29 @@ describe("Abilities - Mummy", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.MUMMY) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); }); it("should set the enemy's ability to mummy when hit by a contact move", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.MUMMY); }); it("should not change the enemy's ability hit by a non-contact move", async () => { - game.override.enemyMoveset(Moves.EARTHQUAKE); + game.override.enemyMoveset(MoveId.EARTHQUAKE); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); diff --git a/test/abilities/mycelium_might.test.ts b/test/abilities/mycelium_might.test.ts index 71276ab06b3..cdea7fd6f19 100644 --- a/test/abilities/mycelium_might.test.ts +++ b/test/abilities/mycelium_might.test.ts @@ -3,7 +3,7 @@ import { TurnStartPhase } from "#app/phases/turn-start-phase"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; import { Stat } from "#enums/stat"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -30,9 +30,9 @@ describe("Abilities - Mycelium Might", () => { .enemySpecies(Species.SHUCKLE) .enemyAbility(AbilityId.CLEAR_BODY) - .enemyMoveset(Moves.QUICK_ATTACK) + .enemyMoveset(MoveId.QUICK_ATTACK) .ability(AbilityId.MYCELIUM_MIGHT) - .moveset([Moves.QUICK_ATTACK, Moves.BABY_DOLL_EYES]); + .moveset([MoveId.QUICK_ATTACK, MoveId.BABY_DOLL_EYES]); }); /** @@ -49,7 +49,7 @@ describe("Abilities - Mycelium Might", () => { const playerIndex = game.scene.getPlayerPokemon()?.getBattlerIndex(); const enemyIndex = enemyPokemon?.getBattlerIndex(); - game.move.select(Moves.BABY_DOLL_EYES); + game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -66,14 +66,14 @@ describe("Abilities - Mycelium Might", () => { }, 20000); it("will still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => { - game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([Species.REGIELEKI]); const enemyPokemon = game.scene.getEnemyPokemon(); const playerIndex = game.scene.getPlayerPokemon()?.getBattlerIndex(); const enemyIndex = enemyPokemon?.getBattlerIndex(); - game.move.select(Moves.BABY_DOLL_EYES); + game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -94,7 +94,7 @@ describe("Abilities - Mycelium Might", () => { const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index 5c98bef0f19..07d0998a9ef 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -4,7 +4,7 @@ import { Command } from "#app/ui/command-ui-handler"; import { PostSummonWeatherChangeAbAttr } from "#app/data/abilities/ability"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { PokeballType } from "#enums/pokeball"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; @@ -29,20 +29,20 @@ describe("Abilities - Neutralizing Gas", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.NEUTRALIZING_GAS) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should prevent other abilities from activating", async () => { game.override.enemyAbility(AbilityId.INTIMIDATE); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // Intimidate is suppressed, so the attack stat should not be lowered @@ -53,7 +53,7 @@ describe("Abilities - Neutralizing Gas", () => { game.override.passiveAbility(AbilityId.INTREPID_SWORD); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(1); @@ -64,7 +64,7 @@ describe("Abilities - Neutralizing Gas", () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); // Intimidate is suppressed even when the user's speed is lower @@ -75,7 +75,7 @@ describe("Abilities - Neutralizing Gas", () => { game.override .enemyAbility(AbilityId.INTREPID_SWORD) .enemyPassiveAbility(AbilityId.DAUNTLESS_SHIELD) - .enemyMoveset(Moves.ENTRAINMENT); + .enemyMoveset(MoveId.ENTRAINMENT); await game.classicMode.startBattle([Species.FEEBAS]); @@ -83,7 +83,7 @@ describe("Abilities - Neutralizing Gas", () => { expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(0); expect(enemyPokemon?.getStatStage(Stat.DEF)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // Enemy removes user's ability, so both abilities are activated expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(1); @@ -91,46 +91,46 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should not activate the user's other ability when removed", async () => { - game.override.passiveAbility(AbilityId.INTIMIDATE).enemyMoveset(Moves.ENTRAINMENT); + game.override.passiveAbility(AbilityId.INTIMIDATE).enemyMoveset(MoveId.ENTRAINMENT); await game.classicMode.startBattle([Species.FEEBAS]); // Neutralising gas user's passive is still active const enemyPokemon = game.scene.getEnemyPokemon(); expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); // Intimidate did not reactivate after neutralizing gas was removed expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); }); it("should only deactivate when all setters are off the field", async () => { - game.override.enemyMoveset([Moves.ENTRAINMENT, Moves.SPLASH]).battleStyle("double"); + game.override.enemyMoveset([MoveId.ENTRAINMENT, MoveId.SPLASH]).battleStyle("double"); await game.classicMode.startBattle([Species.ACCELGOR, Species.ACCELGOR]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.ENTRAINMENT, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.ENTRAINMENT, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); // Now one neut gas user is left - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.ENTRAINMENT, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.ENTRAINMENT, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); // No neut gas users are left }); it("should deactivate when suppressed by gastro acid", async () => { - game.override.enemyMoveset(Moves.GASTRO_ACID); + game.override.enemyMoveset(MoveId.GASTRO_ACID); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); @@ -140,7 +140,7 @@ describe("Abilities - Neutralizing Gas", () => { game.override.ability(AbilityId.BALL_FETCH).enemyAbility(AbilityId.NEUTRALIZING_GAS); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); await game.doKillOpponents(); @@ -183,7 +183,7 @@ describe("Abilities - Neutralizing Gas", () => { expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.killPokemon(enemy); await game.killPokemon(game.scene.getPlayerPokemon()!); diff --git a/test/abilities/no_guard.test.ts b/test/abilities/no_guard.test.ts index b1036ad2554..f5b0068a0ed 100644 --- a/test/abilities/no_guard.test.ts +++ b/test/abilities/no_guard.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { HitCheckResult } from "#enums/hit-check-result"; import GameManager from "#test/testUtils/gameManager"; @@ -26,12 +26,12 @@ describe("Abilities - No Guard", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.ZAP_CANNON) + .moveset(MoveId.ZAP_CANNON) .ability(AbilityId.NO_GUARD) .enemyLevel(200) .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should make moves always hit regardless of move accuracy", async () => { @@ -39,7 +39,7 @@ describe("Abilities - No Guard", () => { await game.classicMode.startBattle([Species.REGIELEKI]); - game.move.select(Moves.ZAP_CANNON); + game.move.select(MoveId.ZAP_CANNON); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/abilities/normal-move-type-change.test.ts b/test/abilities/normal-move-type-change.test.ts index 35a9b1b146c..68f01293a39 100644 --- a/test/abilities/normal-move-type-change.test.ts +++ b/test/abilities/normal-move-type-change.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -50,10 +50,10 @@ describe.each([ .startingLevel(100) .starterSpecies(Species.MAGIKARP) .ability(ab) - .moveset([Moves.TACKLE, Moves.REVELATION_DANCE, Moves.FURY_SWIPES]) + .moveset([MoveId.TACKLE, MoveId.REVELATION_DANCE, MoveId.FURY_SWIPES]) .enemySpecies(Species.DUSCLOPS) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(100); }); @@ -65,9 +65,9 @@ describe.each([ const enemyPokemon = game.scene.getEnemyPokemon()!; const enemySpy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); - const powerSpy = vi.spyOn(allMoves[Moves.TACKLE], "calculateBattlePower"); + const powerSpy = vi.spyOn(allMoves[MoveId.TACKLE], "calculateBattlePower"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -92,7 +92,7 @@ describe.each([ enemyPokemon.hp = Math.floor(enemyPokemon.getMaxHp() * 0.8); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -103,12 +103,12 @@ describe.each([ } it.each([ - { moveName: "Revelation Dance", move: Moves.REVELATION_DANCE, expected_ty: PokemonType.WATER }, - { moveName: "Judgement", move: Moves.JUDGMENT, expected_ty: PokemonType.NORMAL }, - { moveName: "Terrain Pulse", move: Moves.TERRAIN_PULSE, expected_ty: PokemonType.NORMAL }, - { moveName: "Weather Ball", move: Moves.WEATHER_BALL, expected_ty: PokemonType.NORMAL }, - { moveName: "Multi Attack", move: Moves.MULTI_ATTACK, expected_ty: PokemonType.NORMAL }, - { moveName: "Techno Blast", move: Moves.TECHNO_BLAST, expected_ty: PokemonType.NORMAL }, + { moveName: "Revelation Dance", move: MoveId.REVELATION_DANCE, expected_ty: PokemonType.WATER }, + { moveName: "Judgement", move: MoveId.JUDGMENT, expected_ty: PokemonType.NORMAL }, + { moveName: "Terrain Pulse", move: MoveId.TERRAIN_PULSE, expected_ty: PokemonType.NORMAL }, + { moveName: "Weather Ball", move: MoveId.WEATHER_BALL, expected_ty: PokemonType.NORMAL }, + { moveName: "Multi Attack", move: MoveId.MULTI_ATTACK, expected_ty: PokemonType.NORMAL }, + { moveName: "Techno Blast", move: MoveId.TECHNO_BLAST, expected_ty: PokemonType.NORMAL }, ])("should not change the type of $moveName", async ({ move, expected_ty: expectedTy }) => { game.override .enemySpecies(Species.MAGIKARP) @@ -135,7 +135,7 @@ describe.each([ const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FURY_SWIPES); + game.move.select(MoveId.FURY_SWIPES); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); @@ -156,7 +156,7 @@ describe.each([ game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.NORMAL }]); await game.classicMode.startBattle(); - const testMoveInstance = allMoves[Moves.TACKLE]; + const testMoveInstance = allMoves[MoveId.TACKLE]; // get the power boost from the ability so we can compare it to the item // @ts-expect-error power multiplier is private @@ -165,7 +165,7 @@ describe.each([ const powerSpy = vi.spyOn(testMoveInstance, "calculateBattlePower"); const typeSpy = vi.spyOn(game.scene.getPlayerPokemon()!, "getMoveType"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); expect(typeSpy, "type was not changed").toHaveLastReturnedWith(ty); expect(powerSpy).toHaveLastReturnedWith(toDmgValue(testMoveInstance.power * boost)); @@ -180,10 +180,10 @@ describe.each([ const boost = allAbilities[ab]?.getAttrs(MoveTypeChangeAbAttr)[0]?.powerMultiplier; expect(boost, "power boost should be defined").toBeDefined(); - const tackle = allMoves[Moves.TACKLE]; + const tackle = allMoves[MoveId.TACKLE]; const spy = vi.spyOn(tackle, "calculateBattlePower"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); expect(spy).toHaveLastReturnedWith(toDmgValue(tackle.power * boost * (1 + TYPE_BOOST_ITEM_BOOST_PERCENT / 100))); }); diff --git a/test/abilities/normalize.test.ts b/test/abilities/normalize.test.ts index 1647e5e3c27..fab94ad256d 100644 --- a/test/abilities/normalize.test.ts +++ b/test/abilities/normalize.test.ts @@ -2,7 +2,7 @@ import { TYPE_BOOST_ITEM_BOOST_PERCENT } from "#app/constants"; import { allMoves } from "#app/data/data-lists"; import { toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { PokemonType } from "#enums/pokemon-type"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -26,60 +26,60 @@ describe("Abilities - Normalize", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TACKLE]) + .moveset([MoveId.TACKLE]) .ability(AbilityId.NORMALIZE) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should boost the power of normal type moves by 20%", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); - const powerSpy = vi.spyOn(allMoves[Moves.TACKLE], "calculateBattlePower"); + const powerSpy = vi.spyOn(allMoves[MoveId.TACKLE], "calculateBattlePower"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase"); - expect(powerSpy).toHaveLastReturnedWith(toDmgValue(allMoves[Moves.TACKLE].power * 1.2)); + expect(powerSpy).toHaveLastReturnedWith(toDmgValue(allMoves[MoveId.TACKLE].power * 1.2)); }); it("should not apply the old type boost item after changing a move's type", async () => { game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.GRASS }]); - game.override.moveset([Moves.LEAFAGE]); + game.override.moveset([MoveId.LEAFAGE]); - const powerSpy = vi.spyOn(allMoves[Moves.LEAFAGE], "calculateBattlePower"); + const powerSpy = vi.spyOn(allMoves[MoveId.LEAFAGE], "calculateBattlePower"); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.LEAFAGE); + game.move.select(MoveId.LEAFAGE); await game.phaseInterceptor.to("BerryPhase"); // It should return with 1.2 (that is, only the power boost from the ability) - expect(powerSpy).toHaveLastReturnedWith(toDmgValue(allMoves[Moves.LEAFAGE].power * 1.2)); + expect(powerSpy).toHaveLastReturnedWith(toDmgValue(allMoves[MoveId.LEAFAGE].power * 1.2)); }); it("should apply silk scarf's power boost after changing a move's type", async () => { game.override.startingHeldItems([{ name: "ATTACK_TYPE_BOOSTER", count: 1, type: PokemonType.NORMAL }]); - game.override.moveset([Moves.LEAFAGE]); + game.override.moveset([MoveId.LEAFAGE]); - const powerSpy = vi.spyOn(allMoves[Moves.LEAFAGE], "calculateBattlePower"); + const powerSpy = vi.spyOn(allMoves[MoveId.LEAFAGE], "calculateBattlePower"); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.LEAFAGE); + game.move.select(MoveId.LEAFAGE); await game.phaseInterceptor.to("BerryPhase"); // 1.2 from normalize boost, second 1.2 from expect(powerSpy).toHaveLastReturnedWith( - toDmgValue(allMoves[Moves.LEAFAGE].power * 1.2 * (1 + TYPE_BOOST_ITEM_BOOST_PERCENT / 100)), + toDmgValue(allMoves[MoveId.LEAFAGE].power * 1.2 * (1 + TYPE_BOOST_ITEM_BOOST_PERCENT / 100)), ); }); it.each([ - { moveName: "Revelation Dance", move: Moves.REVELATION_DANCE }, - { moveName: "Judgement", move: Moves.JUDGMENT, expected_ty: PokemonType.NORMAL }, - { moveName: "Terrain Pulse", move: Moves.TERRAIN_PULSE }, - { moveName: "Weather Ball", move: Moves.WEATHER_BALL }, - { moveName: "Multi Attack", move: Moves.MULTI_ATTACK }, - { moveName: "Techno Blast", move: Moves.TECHNO_BLAST }, - { moveName: "Hidden Power", move: Moves.HIDDEN_POWER }, + { moveName: "Revelation Dance", move: MoveId.REVELATION_DANCE }, + { moveName: "Judgement", move: MoveId.JUDGMENT, expected_ty: PokemonType.NORMAL }, + { moveName: "Terrain Pulse", move: MoveId.TERRAIN_PULSE }, + { moveName: "Weather Ball", move: MoveId.WEATHER_BALL }, + { moveName: "Multi Attack", move: MoveId.MULTI_ATTACK }, + { moveName: "Techno Blast", move: MoveId.TECHNO_BLAST }, + { moveName: "Hidden Power", move: MoveId.HIDDEN_POWER }, ])("should not boost the power of $moveName", async ({ move }) => { game.override.moveset([move]); await game.classicMode.startBattle([Species.MAGIKARP]); diff --git a/test/abilities/oblivious.test.ts b/test/abilities/oblivious.test.ts index 1a3729fc982..66137ec4eaf 100644 --- a/test/abilities/oblivious.test.ts +++ b/test/abilities/oblivious.test.ts @@ -1,6 +1,6 @@ import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,27 +23,27 @@ describe("Abilities - Oblivious", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should remove taunt when gained", async () => { game.override .ability(AbilityId.OBLIVIOUS) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.addTag(BattlerTagType.TAUNT); expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeTruthy(); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeFalsy(); @@ -53,15 +53,15 @@ describe("Abilities - Oblivious", () => { game.override .ability(AbilityId.OBLIVIOUS) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); vi.spyOn(enemy!, "isOppositeGender").mockReturnValue(true); - enemy?.addTag(BattlerTagType.INFATUATED, 5, Moves.JUDGMENT, game.scene.getPlayerPokemon()?.id); // sourceID needs to be defined + enemy?.addTag(BattlerTagType.INFATUATED, 5, MoveId.JUDGMENT, game.scene.getPlayerPokemon()?.id); // sourceID needs to be defined expect(enemy?.getTag(BattlerTagType.INFATUATED)).toBeTruthy(); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.getTag(BattlerTagType.INFATUATED)).toBeFalsy(); diff --git a/test/abilities/own_tempo.test.ts b/test/abilities/own_tempo.test.ts index e7963c09a29..37865668b11 100644 --- a/test/abilities/own_tempo.test.ts +++ b/test/abilities/own_tempo.test.ts @@ -1,6 +1,6 @@ import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,27 +23,27 @@ describe("Abilities - Own Tempo", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should remove confusion when gained", async () => { game.override .ability(AbilityId.OWN_TEMPO) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.addTag(BattlerTagType.CONFUSED); expect(enemy?.getTag(BattlerTagType.CONFUSED)).toBeTruthy(); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.getTag(BattlerTagType.CONFUSED)).toBeFalsy(); diff --git a/test/abilities/parental_bond.test.ts b/test/abilities/parental_bond.test.ts index 66280698f8a..2b285e72d21 100644 --- a/test/abilities/parental_bond.test.ts +++ b/test/abilities/parental_bond.test.ts @@ -2,7 +2,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; @@ -31,13 +31,13 @@ describe("Abilities - Parental Bond", () => { game.override.ability(AbilityId.PARENTAL_BOND); game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(AbilityId.FUR_COAT); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.startingLevel(100); game.override.enemyLevel(100); }); it("should add second strike to attack move", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -46,7 +46,7 @@ describe("Abilities - Parental Bond", () => { let enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("DamageAnimPhase"); const firstStrikeDamage = enemyStartingHp - enemyPokemon.hp; @@ -61,14 +61,14 @@ describe("Abilities - Parental Bond", () => { }); it("should apply secondary effects to both strikes", async () => { - game.override.moveset([Moves.POWER_UP_PUNCH]); + game.override.moveset([MoveId.POWER_UP_PUNCH]); game.override.enemySpecies(Species.AMOONGUSS); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.POWER_UP_PUNCH); + game.move.select(MoveId.POWER_UP_PUNCH); await game.phaseInterceptor.to("BerryPhase", false); @@ -77,13 +77,13 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply to Status moves", async () => { - game.override.moveset([Moves.BABY_DOLL_EYES]); + game.override.moveset([MoveId.BABY_DOLL_EYES]); await game.classicMode.startBattle([Species.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BABY_DOLL_EYES); + game.move.select(MoveId.BABY_DOLL_EYES); await game.phaseInterceptor.to("BerryPhase", false); @@ -91,13 +91,13 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply to multi-hit moves", async () => { - game.override.moveset([Moves.DOUBLE_HIT]); + game.override.moveset([MoveId.DOUBLE_HIT]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DOUBLE_HIT); + game.move.select(MoveId.DOUBLE_HIT); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -106,13 +106,13 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply to self-sacrifice moves", async () => { - game.override.moveset([Moves.SELF_DESTRUCT]); + game.override.moveset([MoveId.SELF_DESTRUCT]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SELF_DESTRUCT); + game.move.select(MoveId.SELF_DESTRUCT); await game.phaseInterceptor.to("DamageAnimPhase", false); @@ -120,13 +120,13 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply to Rollout", async () => { - game.override.moveset([Moves.ROLLOUT]); + game.override.moveset([MoveId.ROLLOUT]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.ROLLOUT); + game.move.select(MoveId.ROLLOUT); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase", false); @@ -135,28 +135,28 @@ describe("Abilities - Parental Bond", () => { }); it("should not apply multiplier to fixed-damage moves", async () => { - game.override.moveset([Moves.DRAGON_RAGE]); + game.override.moveset([MoveId.DRAGON_RAGE]); await game.classicMode.startBattle([Species.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp() - 80); }); it("should not apply multiplier to counter moves", async () => { - game.override.moveset([Moves.COUNTER]); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.moveset([MoveId.COUNTER]); + game.override.enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle([Species.SHUCKLE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.COUNTER); + game.move.select(MoveId.COUNTER); await game.phaseInterceptor.to("DamageAnimPhase"); const playerDamage = leadPokemon.getMaxHp() - leadPokemon.hp; @@ -168,15 +168,15 @@ describe("Abilities - Parental Bond", () => { it("should not apply to multi-target moves", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.EARTHQUAKE]); + game.override.moveset([MoveId.EARTHQUAKE]); game.override.passiveAbility(AbilityId.LEVITATE); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.EARTHQUAKE); - game.move.select(Moves.EARTHQUAKE, 1); + game.move.select(MoveId.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -184,26 +184,26 @@ describe("Abilities - Parental Bond", () => { }); it("should apply to multi-target moves when hitting only one target", async () => { - game.override.moveset([Moves.EARTHQUAKE]); + game.override.moveset([MoveId.EARTHQUAKE]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("DamageAnimPhase", false); expect(leadPokemon.turnData.hitCount).toBe(2); }); it("should only trigger post-target move effects once", async () => { - game.override.moveset([Moves.MIND_BLOWN]); + game.override.moveset([MoveId.MIND_BLOWN]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.MIND_BLOWN); + game.move.select(MoveId.MIND_BLOWN); await game.phaseInterceptor.to("DamageAnimPhase", false); @@ -216,14 +216,14 @@ describe("Abilities - Parental Bond", () => { }); it("Burn Up only removes type after the second strike", async () => { - game.override.moveset([Moves.BURN_UP]); + game.override.moveset([MoveId.BURN_UP]); await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BURN_UP); + game.move.select(MoveId.BURN_UP); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -237,14 +237,14 @@ describe("Abilities - Parental Bond", () => { }); it("Moves boosted by this ability and Multi-Lens should strike 3 times", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -252,7 +252,7 @@ describe("Abilities - Parental Bond", () => { }); it("Seismic Toss boosted by this ability and Multi-Lens should strike 3 times", async () => { - game.override.moveset([Moves.SEISMIC_TOSS]); + game.override.moveset([MoveId.SEISMIC_TOSS]); game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -262,7 +262,7 @@ describe("Abilities - Parental Bond", () => { const enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.SEISMIC_TOSS); + game.move.select(MoveId.SEISMIC_TOSS); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -275,13 +275,13 @@ describe("Abilities - Parental Bond", () => { }); it("Hyper Beam boosted by this ability should strike twice, then recharge", async () => { - game.override.moveset([Moves.HYPER_BEAM]); + game.override.moveset([MoveId.HYPER_BEAM]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.HYPER_BEAM); + game.move.select(MoveId.HYPER_BEAM); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -295,14 +295,14 @@ describe("Abilities - Parental Bond", () => { }); it("Anchor Shot boosted by this ability should only trap the target after the second hit", async () => { - game.override.moveset([Moves.ANCHOR_SHOT]); + game.override.moveset([MoveId.ANCHOR_SHOT]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ANCHOR_SHOT); + game.move.select(MoveId.ANCHOR_SHOT); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -319,14 +319,14 @@ describe("Abilities - Parental Bond", () => { }); it("Smack Down boosted by this ability should only ground the target after the second hit", async () => { - game.override.moveset([Moves.SMACK_DOWN]); + game.override.moveset([MoveId.SMACK_DOWN]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SMACK_DOWN); + game.move.select(MoveId.SMACK_DOWN); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -340,13 +340,13 @@ describe("Abilities - Parental Bond", () => { }); it("U-turn boosted by this ability should strike twice before forcing a switch", async () => { - game.override.moveset([Moves.U_TURN]); + game.override.moveset([MoveId.U_TURN]); await game.classicMode.startBattle([Species.MAGIKARP, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); await game.move.forceHit(); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -357,14 +357,14 @@ describe("Abilities - Parental Bond", () => { }); it("Wake-Up Slap boosted by this ability should only wake up the target after the second hit", async () => { - game.override.moveset([Moves.WAKE_UP_SLAP]).enemyStatusEffect(StatusEffect.SLEEP); + game.override.moveset([MoveId.WAKE_UP_SLAP]).enemyStatusEffect(StatusEffect.SLEEP); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.WAKE_UP_SLAP); + game.move.select(MoveId.WAKE_UP_SLAP); await game.move.forceHit(); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -378,14 +378,14 @@ describe("Abilities - Parental Bond", () => { }); it("should not cause user to hit into King's Shield more than once", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset([Moves.KINGS_SHIELD]); + game.override.moveset([MoveId.TACKLE]); + game.override.enemyMoveset([MoveId.KINGS_SHIELD]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -393,14 +393,14 @@ describe("Abilities - Parental Bond", () => { }); it("should not cause user to hit into Storm Drain more than once", async () => { - game.override.moveset([Moves.WATER_GUN]); + game.override.moveset([MoveId.WATER_GUN]); game.override.enemyAbility(AbilityId.STORM_DRAIN); await game.classicMode.startBattle([Species.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.phaseInterceptor.to("BerryPhase", false); @@ -408,13 +408,13 @@ describe("Abilities - Parental Bond", () => { }); it("should not allow Future Sight to hit infinitely many times if the user switches out", async () => { - game.override.enemyLevel(1000).moveset(Moves.FUTURE_SIGHT); + game.override.enemyLevel(1000).moveset(MoveId.FUTURE_SIGHT); await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "damageAndUpdate"); - game.move.select(Moves.FUTURE_SIGHT); + game.move.select(MoveId.FUTURE_SIGHT); await game.toNextTurn(); game.doSwitchPokemon(1); diff --git a/test/abilities/pastel_veil.test.ts b/test/abilities/pastel_veil.test.ts index 4ac0934b5c3..e8cea4e6a98 100644 --- a/test/abilities/pastel_veil.test.ts +++ b/test/abilities/pastel_veil.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -27,10 +27,10 @@ describe("Abilities - Pastel Veil", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .moveset([Moves.TOXIC_THREAD, Moves.SPLASH]) + .moveset([MoveId.TOXIC_THREAD, MoveId.SPLASH]) .enemyAbility(AbilityId.BALL_FETCH) .enemySpecies(Species.SUNKERN) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("prevents the user and its allies from being afflicted by poison", async () => { @@ -41,8 +41,8 @@ describe("Abilities - Pastel Veil", () => { expect(ponyta.hasAbility(AbilityId.PASTEL_VEIL)).toBe(true); - game.move.select(Moves.SPLASH); - game.move.select(Moves.TOXIC_THREAD, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.TOXIC_THREAD, 1, BattlerIndex.PLAYER); await game.phaseInterceptor.to(TurnEndPhase); @@ -57,14 +57,14 @@ describe("Abilities - Pastel Veil", () => { expect(ponyta.hasAbility(AbilityId.PASTEL_VEIL)).toBe(true); - game.move.select(Moves.SPLASH); - game.move.select(Moves.TOXIC_THREAD, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.TOXIC_THREAD, 1, BattlerIndex.PLAYER); await game.phaseInterceptor.to(TurnEndPhase); expect(magikarp.status?.effect).toBe(StatusEffect.POISON); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/abilities/perish_body.test.ts b/test/abilities/perish_body.test.ts index 8395032b84e..f13a9a80515 100644 --- a/test/abilities/perish_body.test.ts +++ b/test/abilities/perish_body.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,16 +29,16 @@ describe("Abilities - Perish Song", () => { game.override.starterSpecies(Species.CURSOLA); game.override.ability(AbilityId.PERISH_BODY); - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); }); it("should trigger when hit with damaging move", async () => { - game.override.enemyMoveset([Moves.AQUA_JET]); + game.override.enemyMoveset([MoveId.AQUA_JET]); await game.classicMode.startBattle(); const cursola = game.scene.getPlayerPokemon(); const magikarp = game.scene.getEnemyPokemon(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(cursola?.summonData.tags[0].turnCount).toBe(3); @@ -46,11 +46,11 @@ describe("Abilities - Perish Song", () => { }); it("should trigger even when fainting", async () => { - game.override.enemyMoveset([Moves.AQUA_JET]).enemyLevel(100).startingLevel(1); + game.override.enemyMoveset([MoveId.AQUA_JET]).enemyLevel(100).startingLevel(1); await game.classicMode.startBattle([Species.CURSOLA, Species.FEEBAS]); const magikarp = game.scene.getEnemyPokemon(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -58,28 +58,28 @@ describe("Abilities - Perish Song", () => { }); it("should not activate if attacker already has perish song", async () => { - game.override.enemyMoveset([Moves.PERISH_SONG, Moves.AQUA_JET, Moves.SPLASH]); + game.override.enemyMoveset([MoveId.PERISH_SONG, MoveId.AQUA_JET, MoveId.SPLASH]); await game.classicMode.startBattle([Species.FEEBAS, Species.CURSOLA]); const feebas = game.scene.getPlayerPokemon(); const magikarp = game.scene.getEnemyPokemon(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.PERISH_SONG); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.PERISH_SONG); await game.toNextTurn(); expect(feebas?.summonData.tags[0].turnCount).toBe(3); expect(magikarp?.summonData.tags[0].turnCount).toBe(3); game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const cursola = game.scene.getPlayerPokemon(); expect(cursola?.summonData.tags.length).toBe(0); expect(magikarp?.summonData.tags[0].turnCount).toBe(2); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.AQUA_JET); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.AQUA_JET); await game.toNextTurn(); expect(cursola?.summonData.tags.length).toBe(0); @@ -87,22 +87,22 @@ describe("Abilities - Perish Song", () => { }); it("should activate if cursola already has perish song, but not reset its counter", async () => { - game.override.enemyMoveset([Moves.PERISH_SONG, Moves.AQUA_JET, Moves.SPLASH]); - game.override.moveset([Moves.WHIRLWIND, Moves.SPLASH]); + game.override.enemyMoveset([MoveId.PERISH_SONG, MoveId.AQUA_JET, MoveId.SPLASH]); + game.override.moveset([MoveId.WHIRLWIND, MoveId.SPLASH]); game.override.startingWave(5); await game.classicMode.startBattle([Species.CURSOLA]); const cursola = game.scene.getPlayerPokemon(); - game.move.select(Moves.WHIRLWIND); - await game.move.selectEnemyMove(Moves.PERISH_SONG); + game.move.select(MoveId.WHIRLWIND); + await game.move.selectEnemyMove(MoveId.PERISH_SONG); await game.toNextTurn(); const magikarp = game.scene.getEnemyPokemon(); expect(cursola?.summonData.tags[0].turnCount).toBe(3); expect(magikarp?.summonData.tags.length).toBe(0); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.AQUA_JET); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.AQUA_JET); await game.toNextTurn(); expect(cursola?.summonData.tags[0].turnCount).toBe(2); diff --git a/test/abilities/power_construct.test.ts b/test/abilities/power_construct.test.ts index 289459c5fc3..b9cc66a8c96 100644 --- a/test/abilities/power_construct.test.ts +++ b/test/abilities/power_construct.test.ts @@ -2,7 +2,7 @@ import { Status } from "#app/data/status-effect"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -24,12 +24,12 @@ describe("Abilities - POWER CONSTRUCT", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.SPLASH; + const moveToUse = MoveId.SPLASH; game.override .battleStyle("single") .ability(AbilityId.POWER_CONSTRUCT) .moveset([moveToUse]) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); }); test("check if fainted 50% Power Construct Pokemon switches to base form on arena reset", async () => { @@ -50,7 +50,7 @@ describe("Abilities - POWER CONSTRUCT", () => { zygarde!.status = new Status(StatusEffect.FAINT); expect(zygarde!.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); @@ -77,7 +77,7 @@ describe("Abilities - POWER CONSTRUCT", () => { zygarde!.status = new Status(StatusEffect.FAINT); expect(zygarde!.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); diff --git a/test/abilities/power_spot.test.ts b/test/abilities/power_spot.test.ts index d80d36fa903..abe0d05ebb2 100644 --- a/test/abilities/power_spot.test.ts +++ b/test/abilities/power_spot.test.ts @@ -2,7 +2,7 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,49 +27,49 @@ describe("Abilities - Power Spot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.moveset([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.TACKLE, MoveId.BREAKING_SWIPE, MoveId.SPLASH, MoveId.DAZZLING_GLEAM]); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(AbilityId.BALL_FETCH); }); it("raises the power of allies' special moves by 30%", async () => { - const moveToCheck = allMoves[Moves.DAZZLING_GLEAM]; + const moveToCheck = allMoves[MoveId.DAZZLING_GLEAM]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); await game.classicMode.startBattle([Species.REGIELEKI, Species.STONJOURNER]); - game.move.select(Moves.DAZZLING_GLEAM); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DAZZLING_GLEAM); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower * powerSpotMultiplier); }); it("raises the power of allies' physical moves by 30%", async () => { - const moveToCheck = allMoves[Moves.BREAKING_SWIPE]; + const moveToCheck = allMoves[MoveId.BREAKING_SWIPE]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); await game.classicMode.startBattle([Species.REGIELEKI, Species.STONJOURNER]); - game.move.select(Moves.BREAKING_SWIPE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.BREAKING_SWIPE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower * powerSpotMultiplier); }); it("does not raise the power of the ability owner's moves", async () => { - const moveToCheck = allMoves[Moves.BREAKING_SWIPE]; + const moveToCheck = allMoves[MoveId.BREAKING_SWIPE]; const basePower = moveToCheck.power; vi.spyOn(moveToCheck, "calculateBattlePower"); await game.classicMode.startBattle([Species.STONJOURNER, Species.REGIELEKI]); - game.move.select(Moves.BREAKING_SWIPE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.BREAKING_SWIPE); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index e3b4e6e6ac0..d510071eba8 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -6,7 +6,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; @@ -34,43 +34,43 @@ describe("Abilities - Protean", () => { .ability(AbilityId.PROTEAN) .startingLevel(100) .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.ENDURE); + .enemyMoveset(MoveId.ENDURE); }); test("ability applies and changes a pokemon's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); }); // Test for Gen9+ functionality, we are using previous funcionality test.skip("ability applies only once per switch in", async () => { - game.override.moveset([Moves.SPLASH, Moves.AGILITY]); + game.override.moveset([MoveId.SPLASH, MoveId.AGILITY]); await game.classicMode.startBattle([Species.MAGIKARP, Species.BULBASAUR]); let leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); - game.move.select(Moves.AGILITY); + game.move.select(MoveId.AGILITY); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.PROTEAN); const leadPokemonType = PokemonType[leadPokemon.getTypes()[0]]; - const moveType = PokemonType[allMoves[Moves.AGILITY].type]; + const moveType = PokemonType[allMoves[MoveId.AGILITY].type]; expect(leadPokemonType).not.toBe(moveType); await game.toNextTurn(); @@ -82,14 +82,14 @@ describe("Abilities - Protean", () => { leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.SPLASH); }); test("ability applies correctly even if the pokemon's move has a variable type", async () => { - game.override.moveset([Moves.WEATHER_BALL]); + game.override.moveset([MoveId.WEATHER_BALL]); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -97,7 +97,7 @@ describe("Abilities - Protean", () => { expect(leadPokemon).not.toBe(undefined); game.scene.arena.weather = new Weather(WeatherType.SUNNY); - game.move.select(Moves.WEATHER_BALL); + game.move.select(MoveId.WEATHER_BALL); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.PROTEAN); @@ -108,7 +108,7 @@ describe("Abilities - Protean", () => { }); test("ability applies correctly even if the type has changed by another ability", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.passiveAbility(AbilityId.REFRIGERATE); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -116,7 +116,7 @@ describe("Abilities - Protean", () => { const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).toContain(AbilityId.PROTEAN); @@ -127,7 +127,7 @@ describe("Abilities - Protean", () => { }); test("ability applies correctly even if the pokemon's move calls another move", async () => { - game.override.moveset([Moves.NATURE_POWER]); + game.override.moveset([MoveId.NATURE_POWER]); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -135,60 +135,60 @@ describe("Abilities - Protean", () => { expect(leadPokemon).not.toBe(undefined); game.scene.arena.biomeType = Biome.MOUNTAIN; - game.move.select(Moves.NATURE_POWER); + game.move.select(MoveId.NATURE_POWER); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.AIR_SLASH); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.AIR_SLASH); }); test("ability applies correctly even if the pokemon's move is delayed / charging", async () => { - game.override.moveset([Moves.DIG]); + game.override.moveset([MoveId.DIG]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.DIG); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.DIG); }); test("ability applies correctly even if the pokemon's move misses", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.TACKLE]); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.move.forceMiss(); await game.phaseInterceptor.to(TurnEndPhase); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.isFullHp()).toBe(true); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability applies correctly even if the pokemon's move is protected against", async () => { - game.override.moveset([Moves.TACKLE]).enemyMoveset(Moves.PROTECT); + game.override.moveset([MoveId.TACKLE]).enemyMoveset(MoveId.PROTECT); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability applies correctly even if the pokemon's move fails because of type immunity", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.enemySpecies(Species.GASTLY); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -196,29 +196,29 @@ describe("Abilities - Protean", () => { const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TACKLE); }); test("ability is not applied if pokemon's type is the same as the move's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - leadPokemon.summonData.types = [allMoves[Moves.SPLASH].type]; - game.move.select(Moves.SPLASH); + leadPokemon.summonData.types = [allMoves[MoveId.SPLASH].type]; + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.PROTEAN); }); test("ability is not applied if pokemon is terastallized", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -227,42 +227,42 @@ describe("Abilities - Protean", () => { leadPokemon.isTerastallized = true; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.PROTEAN); }); test("ability is not applied if pokemon uses struggle", async () => { - game.override.moveset([Moves.STRUGGLE]); + game.override.moveset([MoveId.STRUGGLE]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.STRUGGLE); + game.move.select(MoveId.STRUGGLE); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.PROTEAN); }); test("ability is not applied if the pokemon's move fails", async () => { - game.override.moveset([Moves.BURN_UP]); + game.override.moveset([MoveId.BURN_UP]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.BURN_UP); + game.move.select(MoveId.BURN_UP); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.waveData.abilitiesApplied).not.toContain(AbilityId.PROTEAN); }); test("ability applies correctly even if the pokemon's Trick-or-Treat fails", async () => { - game.override.moveset([Moves.TRICK_OR_TREAT]); + game.override.moveset([MoveId.TRICK_OR_TREAT]); game.override.enemySpecies(Species.GASTLY); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -270,29 +270,29 @@ describe("Abilities - Protean", () => { const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.TRICK_OR_TREAT); + game.move.select(MoveId.TRICK_OR_TREAT); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TRICK_OR_TREAT); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.TRICK_OR_TREAT); }); test("ability applies correctly and the pokemon curses itself", async () => { - game.override.moveset([Moves.CURSE]); + game.override.moveset([MoveId.CURSE]); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - game.move.select(Moves.CURSE); + game.move.select(MoveId.CURSE); await game.phaseInterceptor.to(TurnEndPhase); - testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.CURSE); + testPokemonTypeMatchesDefaultMoveType(leadPokemon, MoveId.CURSE); expect(leadPokemon.getTag(BattlerTagType.CURSED)).not.toBe(undefined); }); }); -function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: Moves) { +function testPokemonTypeMatchesDefaultMoveType(pokemon: PlayerPokemon, move: MoveId) { expect(pokemon.waveData.abilitiesApplied).toContain(AbilityId.PROTEAN); expect(pokemon.getTypes()).toHaveLength(1); const pokemonType = PokemonType[pokemon.getTypes()[0]], diff --git a/test/abilities/protosynthesis.test.ts b/test/abilities/protosynthesis.test.ts index 6642a04fc18..23b5043b280 100644 --- a/test/abilities/protosynthesis.test.ts +++ b/test/abilities/protosynthesis.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Nature } from "#enums/nature"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; @@ -25,20 +25,20 @@ describe("Abilities - Protosynthesis", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.TACKLE]) + .moveset([MoveId.SPLASH, MoveId.TACKLE]) .ability(AbilityId.PROTOSYNTHESIS) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should not consider temporary items when determining which stat to boost", async () => { // Mew has uniform base stats game.override .startingModifier([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.DEF }]) - .enemyMoveset(Moves.SUNNY_DAY) + .enemyMoveset(MoveId.SUNNY_DAY) .startingLevel(100) .enemyLevel(100); await game.classicMode.startBattle([Species.MEW]); @@ -69,7 +69,7 @@ describe("Abilities - Protosynthesis", () => { true, ); const initialHp = enemy.hp; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); const unboosted_dmg = initialHp - enemy.hp; @@ -96,7 +96,7 @@ describe("Abilities - Protosynthesis", () => { false, true, ); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); const boosted_dmg = initialHp - enemy.hp; diff --git a/test/abilities/quick_draw.test.ts b/test/abilities/quick_draw.test.ts index 35261899a96..dda60c8794d 100644 --- a/test/abilities/quick_draw.test.ts +++ b/test/abilities/quick_draw.test.ts @@ -2,7 +2,7 @@ import { BypassSpeedChanceAbAttr } from "#app/data/abilities/ability"; import { allAbilities } from "#app/data/data-lists"; import { FaintPhase } from "#app/phases/faint-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,12 +28,12 @@ describe("Abilities - Quick Draw", () => { game.override.starterSpecies(Species.MAGIKARP); game.override.ability(AbilityId.QUICK_DRAW); - game.override.moveset([Moves.TACKLE, Moves.TAIL_WHIP]); + game.override.moveset([MoveId.TACKLE, MoveId.TAIL_WHIP]); game.override.enemyLevel(100); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); vi.spyOn(allAbilities[AbilityId.QUICK_DRAW].getAttrs(BypassSpeedChanceAbAttr)[0], "chance", "get").mockReturnValue( 100, @@ -49,7 +49,7 @@ describe("Abilities - Quick Draw", () => { pokemon.hp = 1; enemy.hp = 1; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(FaintPhase, false); expect(pokemon.isFainted()).toBe(false); @@ -71,7 +71,7 @@ describe("Abilities - Quick Draw", () => { pokemon.hp = 1; enemy.hp = 1; - game.move.select(Moves.TAIL_WHIP); + game.move.select(MoveId.TAIL_WHIP); await game.phaseInterceptor.to(FaintPhase, false); expect(pokemon.isFainted()).toBe(true); @@ -81,7 +81,7 @@ describe("Abilities - Quick Draw", () => { ); test("does not increase priority", async () => { - game.override.enemyMoveset([Moves.EXTREME_SPEED]); + game.override.enemyMoveset([MoveId.EXTREME_SPEED]); await game.classicMode.startBattle(); @@ -91,7 +91,7 @@ describe("Abilities - Quick Draw", () => { pokemon.hp = 1; enemy.hp = 1; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(FaintPhase, false); expect(pokemon.isFainted()).toBe(true); diff --git a/test/abilities/sand_spit.test.ts b/test/abilities/sand_spit.test.ts index 433355700d9..bb5daee51e1 100644 --- a/test/abilities/sand_spit.test.ts +++ b/test/abilities/sand_spit.test.ts @@ -1,6 +1,6 @@ import { WeatherType } from "#app/enums/weather-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,24 +30,24 @@ describe("Abilities - Sand Spit", () => { game.override.starterSpecies(Species.SILICOBRA); game.override.ability(AbilityId.SAND_SPIT); - game.override.moveset([Moves.SPLASH, Moves.COIL]); + game.override.moveset([MoveId.SPLASH, MoveId.COIL]); }); it("should trigger when hit with damaging move", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SANDSTORM); }, 20000); it("should trigger even when fainting", async () => { - game.override.enemyMoveset([Moves.TACKLE]).enemyLevel(100).startingLevel(1); + game.override.enemyMoveset([MoveId.TACKLE]).enemyLevel(100).startingLevel(1); await game.classicMode.startBattle([Species.SILICOBRA, Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -55,10 +55,10 @@ describe("Abilities - Sand Spit", () => { }); it("should not trigger when targetted with status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); await game.classicMode.startBattle(); - game.move.select(Moves.COIL); + game.move.select(MoveId.COIL); await game.toNextTurn(); expect(game.scene.arena.weather?.weatherType).not.toBe(WeatherType.SANDSTORM); diff --git a/test/abilities/sand_veil.test.ts b/test/abilities/sand_veil.test.ts index 93183d47acb..bc8a1e61897 100644 --- a/test/abilities/sand_veil.test.ts +++ b/test/abilities/sand_veil.test.ts @@ -4,7 +4,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { WeatherType } from "#enums/weather-type"; @@ -29,10 +29,10 @@ describe("Abilities - Sand Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .enemySpecies(Species.MEOWSCARADA) .enemyAbility(AbilityId.INSOMNIA) - .enemyMoveset(Moves.TWISTER) + .enemyMoveset(MoveId.TWISTER) .startingLevel(100) .enemyLevel(100) .weather(WeatherType.SANDSTORM) @@ -60,11 +60,11 @@ describe("Abilities - Sand Veil", () => { expect(leadPokemon[0].hasAbility(AbilityId.SAND_VEIL)).toBe(true); expect(leadPokemon[1].hasAbility(AbilityId.SAND_VEIL)).toBe(false); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase, false); diff --git a/test/abilities/sap_sipper.test.ts b/test/abilities/sap_sipper.test.ts index 1d78b04da5f..32a01f0527d 100644 --- a/test/abilities/sap_sipper.test.ts +++ b/test/abilities/sap_sipper.test.ts @@ -4,7 +4,7 @@ import { MoveEndPhase } from "#app/phases/move-end-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -35,11 +35,11 @@ describe("Abilities - Sap Sipper", () => { .ability(AbilityId.SAP_SIPPER) .enemySpecies(Species.RATTATA) .enemyAbility(AbilityId.SAP_SIPPER) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("raises ATK stat stage by 1 and block effects when activated against a grass attack", async () => { - const moveToUse = Moves.LEAFAGE; + const moveToUse = MoveId.LEAFAGE; game.override.moveset(moveToUse); @@ -57,7 +57,7 @@ describe("Abilities - Sap Sipper", () => { }); it("raises ATK stat stage by 1 and block effects when activated against a grass status move", async () => { - const moveToUse = Moves.SPORE; + const moveToUse = MoveId.SPORE; game.override.moveset(moveToUse); @@ -74,7 +74,7 @@ describe("Abilities - Sap Sipper", () => { }); it("do not activate against status moves that target the field", async () => { - const moveToUse = Moves.GRASSY_TERRAIN; + const moveToUse = MoveId.GRASSY_TERRAIN; game.override.moveset(moveToUse); @@ -90,7 +90,7 @@ describe("Abilities - Sap Sipper", () => { }); it("activate once against multi-hit grass attacks", async () => { - const moveToUse = Moves.BULLET_SEED; + const moveToUse = MoveId.BULLET_SEED; game.override.moveset(moveToUse); @@ -108,7 +108,7 @@ describe("Abilities - Sap Sipper", () => { }); it("do not activate against status moves that target the user", async () => { - const moveToUse = Moves.SPIKY_SHIELD; + const moveToUse = MoveId.SPIKY_SHIELD; game.override.moveset(moveToUse); @@ -129,10 +129,12 @@ describe("Abilities - Sap Sipper", () => { }); it("activate once against multi-hit grass attacks (metronome)", async () => { - const moveToUse = Moves.METRONOME; + const moveToUse = MoveId.METRONOME; - const randomMoveAttr = allMoves[Moves.METRONOME].findAttr(attr => attr instanceof RandomMoveAttr) as RandomMoveAttr; - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.BULLET_SEED); + const randomMoveAttr = allMoves[MoveId.METRONOME].findAttr( + attr => attr instanceof RandomMoveAttr, + ) as RandomMoveAttr; + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.BULLET_SEED); game.override.moveset(moveToUse); @@ -150,13 +152,13 @@ describe("Abilities - Sap Sipper", () => { }); it("still activates regardless of accuracy check", async () => { - game.override.moveset(Moves.LEAF_BLADE); + game.override.moveset(MoveId.LEAF_BLADE); await game.classicMode.startBattle([Species.BULBASAUR]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.LEAF_BLADE); + game.move.select(MoveId.LEAF_BLADE); await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); diff --git a/test/abilities/schooling.test.ts b/test/abilities/schooling.test.ts index de3a47c5be3..9509493b03a 100644 --- a/test/abilities/schooling.test.ts +++ b/test/abilities/schooling.test.ts @@ -2,7 +2,7 @@ import { Status } from "#app/data/status-effect"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -24,8 +24,8 @@ describe("Abilities - SCHOOLING", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.SPLASH; - game.override.battleStyle("single").ability(AbilityId.SCHOOLING).moveset([moveToUse]).enemyMoveset(Moves.TACKLE); + const moveToUse = MoveId.SPLASH; + game.override.battleStyle("single").ability(AbilityId.SCHOOLING).moveset([moveToUse]).enemyMoveset(MoveId.TACKLE); }); test("check if fainted pokemon switches to base form on arena reset", async () => { @@ -46,7 +46,7 @@ describe("Abilities - SCHOOLING", () => { wishiwashi.status = new Status(StatusEffect.FAINT); expect(wishiwashi.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); diff --git a/test/abilities/screen_cleaner.test.ts b/test/abilities/screen_cleaner.test.ts index 1187441142b..cd3e25cdbb4 100644 --- a/test/abilities/screen_cleaner.test.ts +++ b/test/abilities/screen_cleaner.test.ts @@ -2,7 +2,7 @@ import { ArenaTagType } from "#app/enums/arena-tag-type"; import { PostSummonPhase } from "#app/phases/post-summon-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,11 +30,11 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Aurora Veil", async () => { - game.override.moveset([Moves.HAIL]).enemyMoveset(Moves.AURORA_VEIL); + game.override.moveset([MoveId.HAIL]).enemyMoveset(MoveId.AURORA_VEIL); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); - game.move.select(Moves.HAIL); + game.move.select(MoveId.HAIL); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.arena.getTag(ArenaTagType.AURORA_VEIL)).toBeDefined(); @@ -47,11 +47,11 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Light Screen", async () => { - game.override.enemyMoveset(Moves.LIGHT_SCREEN); + game.override.enemyMoveset(MoveId.LIGHT_SCREEN); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.arena.getTag(ArenaTagType.LIGHT_SCREEN)).toBeDefined(); @@ -64,11 +64,11 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Reflect", async () => { - game.override.enemyMoveset(Moves.REFLECT); + game.override.enemyMoveset(MoveId.REFLECT); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.arena.getTag(ArenaTagType.REFLECT)).toBeDefined(); diff --git a/test/abilities/seed_sower.test.ts b/test/abilities/seed_sower.test.ts index 7d0b6f72f29..a34ea2d9788 100644 --- a/test/abilities/seed_sower.test.ts +++ b/test/abilities/seed_sower.test.ts @@ -1,6 +1,6 @@ import { TerrainType } from "#app/data/terrain"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,24 +30,24 @@ describe("Abilities - Seed Sower", () => { game.override.starterSpecies(Species.ARBOLIVA); game.override.ability(AbilityId.SEED_SOWER); - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); }); it("should trigger when hit with damaging move", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.terrain?.terrainType).toBe(TerrainType.GRASSY); }); it("should trigger even when fainting", async () => { - game.override.enemyMoveset([Moves.TACKLE]).enemyLevel(100).startingLevel(1); + game.override.enemyMoveset([MoveId.TACKLE]).enemyLevel(100).startingLevel(1); await game.classicMode.startBattle([Species.ARBOLIVA, Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -55,10 +55,10 @@ describe("Abilities - Seed Sower", () => { }); it("should not trigger when targetted with status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); await game.classicMode.startBattle(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.terrain?.terrainType).not.toBe(TerrainType.GRASSY); diff --git a/test/abilities/serene_grace.test.ts b/test/abilities/serene_grace.test.ts index 25de95f61cf..84e447e01fd 100644 --- a/test/abilities/serene_grace.test.ts +++ b/test/abilities/serene_grace.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,21 +28,21 @@ describe("Abilities - Serene Grace", () => { .disableCrits() .battleStyle("single") .ability(AbilityId.SERENE_GRACE) - .moveset([Moves.AIR_SLASH]) + .moveset([MoveId.AIR_SLASH]) .enemySpecies(Species.ALOLA_GEODUDE) .enemyLevel(10) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.SPLASH]); + .enemyMoveset([MoveId.SPLASH]); }); it("Serene Grace should double the secondary effect chance of a move", async () => { await game.classicMode.startBattle([Species.SHUCKLE]); - const airSlashMove = allMoves[Moves.AIR_SLASH]; + const airSlashMove = allMoves[MoveId.AIR_SLASH]; const airSlashFlinchAttr = airSlashMove.getAttrs(FlinchAttr)[0]; vi.spyOn(airSlashFlinchAttr, "getMoveChance"); - game.move.select(Moves.AIR_SLASH); + game.move.select(MoveId.AIR_SLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/abilities/sheer_force.test.ts b/test/abilities/sheer_force.test.ts index 714489fb40a..626dc13bb8e 100644 --- a/test/abilities/sheer_force.test.ts +++ b/test/abilities/sheer_force.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -31,22 +31,22 @@ describe("Abilities - Sheer Force", () => { .ability(AbilityId.SHEER_FORCE) .enemySpecies(Species.ONIX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.SPLASH]) + .enemyMoveset([MoveId.SPLASH]) .disableCrits(); }); const SHEER_FORCE_MULT = 1.3; it("Sheer Force should boost the power of the move but disable secondary effects", async () => { - game.override.moveset([Moves.AIR_SLASH]); + game.override.moveset([MoveId.AIR_SLASH]); await game.classicMode.startBattle([Species.SHUCKLE]); - const airSlashMove = allMoves[Moves.AIR_SLASH]; + const airSlashMove = allMoves[MoveId.AIR_SLASH]; vi.spyOn(airSlashMove, "calculateBattlePower"); const airSlashFlinchAttr = airSlashMove.getAttrs(FlinchAttr)[0]; vi.spyOn(airSlashFlinchAttr, "getMoveChance"); - game.move.select(Moves.AIR_SLASH); + game.move.select(MoveId.AIR_SLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); @@ -57,13 +57,13 @@ describe("Abilities - Sheer Force", () => { }); it("Sheer Force does not affect the base damage or secondary effects of binding moves", async () => { - game.override.moveset([Moves.BIND]); + game.override.moveset([MoveId.BIND]); await game.classicMode.startBattle([Species.SHUCKLE]); - const bindMove = allMoves[Moves.BIND]; + const bindMove = allMoves[MoveId.BIND]; vi.spyOn(bindMove, "calculateBattlePower"); - game.move.select(Moves.BIND); + game.move.select(MoveId.BIND); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); @@ -73,13 +73,13 @@ describe("Abilities - Sheer Force", () => { }, 20000); it("Sheer Force does not boost the base damage of moves with no secondary effect", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); await game.classicMode.startBattle([Species.PIDGEOT]); - const tackleMove = allMoves[Moves.TACKLE]; + const tackleMove = allMoves[MoveId.TACKLE]; vi.spyOn(tackleMove, "calculateBattlePower"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -89,19 +89,19 @@ describe("Abilities - Sheer Force", () => { it("Sheer Force can disable the on-hit activation of specific abilities", async () => { game.override - .moveset([Moves.HEADBUTT]) + .moveset([MoveId.HEADBUTT]) .enemySpecies(Species.SQUIRTLE) .enemyLevel(10) .enemyAbility(AbilityId.COLOR_CHANGE); await game.classicMode.startBattle([Species.PIDGEOT]); const enemyPokemon = game.scene.getEnemyPokemon(); - const headbuttMove = allMoves[Moves.HEADBUTT]; + const headbuttMove = allMoves[MoveId.HEADBUTT]; vi.spyOn(headbuttMove, "calculateBattlePower"); const headbuttFlinchAttr = headbuttMove.getAttrs(FlinchAttr)[0]; vi.spyOn(headbuttFlinchAttr, "getMoveChance"); - game.move.select(Moves.HEADBUTT); + game.move.select(MoveId.HEADBUTT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); @@ -113,7 +113,7 @@ describe("Abilities - Sheer Force", () => { }); it("Two Pokemon with abilities disabled by Sheer Force hitting each other should not cause a crash", async () => { - const moveToUse = Moves.CRUNCH; + const moveToUse = MoveId.CRUNCH; game.override .enemyAbility(AbilityId.COLOR_CHANGE) .ability(AbilityId.COLOR_CHANGE) @@ -140,15 +140,15 @@ describe("Abilities - Sheer Force", () => { it("Sheer Force should disable Meloetta's transformation from Relic Song", async () => { game.override .ability(AbilityId.SHEER_FORCE) - .moveset([Moves.RELIC_SONG]) - .enemyMoveset([Moves.SPLASH]) + .moveset([MoveId.RELIC_SONG]) + .enemyMoveset([MoveId.SPLASH]) .enemyLevel(100); await game.classicMode.startBattle([Species.MELOETTA]); const playerPokemon = game.scene.getPlayerPokemon(); const formKeyStart = playerPokemon?.getFormKey(); - game.move.select(Moves.RELIC_SONG); + game.move.select(MoveId.RELIC_SONG); await game.phaseInterceptor.to("TurnEndPhase"); expect(formKeyStart).toBe(playerPokemon?.getFormKey()); }); diff --git a/test/abilities/shield_dust.test.ts b/test/abilities/shield_dust.test.ts index beb62322580..0d9e2f06980 100644 --- a/test/abilities/shield_dust.test.ts +++ b/test/abilities/shield_dust.test.ts @@ -8,7 +8,7 @@ import { import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { NumberHolder } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -35,8 +35,8 @@ describe("Abilities - Shield Dust", () => { game.override.enemySpecies(Species.ONIX); game.override.enemyAbility(AbilityId.SHIELD_DUST); game.override.startingLevel(100); - game.override.moveset(Moves.AIR_SLASH); - game.override.enemyMoveset(Moves.TACKLE); + game.override.moveset(MoveId.AIR_SLASH); + game.override.enemyMoveset(MoveId.TACKLE); }); it("Shield Dust", async () => { @@ -45,7 +45,7 @@ describe("Abilities - Shield Dust", () => { game.scene.getEnemyPokemon()!.stats[Stat.SPDEF] = 10000; expect(game.scene.getPlayerPokemon()!.formIndex).toBe(0); - game.move.select(Moves.AIR_SLASH); + game.move.select(MoveId.AIR_SLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); @@ -53,7 +53,7 @@ describe("Abilities - Shield Dust", () => { // Shield Dust negates secondary effect const phase = game.scene.getCurrentPhase() as MoveEffectPhase; const move = phase.move; - expect(move.id).toBe(Moves.AIR_SLASH); + expect(move.id).toBe(MoveId.AIR_SLASH); const chance = new NumberHolder(move.chance); await applyAbAttrs( diff --git a/test/abilities/shields_down.test.ts b/test/abilities/shields_down.test.ts index 8fa6ba9319e..b2a2638a216 100644 --- a/test/abilities/shields_down.test.ts +++ b/test/abilities/shields_down.test.ts @@ -3,7 +3,7 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -25,11 +25,11 @@ describe("Abilities - SHIELDS DOWN", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.SPLASH; + const moveToUse = MoveId.SPLASH; game.override.battleStyle("single"); game.override.ability(AbilityId.SHIELDS_DOWN); game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); }); test("check if fainted pokemon switched to base form on arena reset", async () => { @@ -50,7 +50,7 @@ describe("Abilities - SHIELDS DOWN", () => { minior.status = new Status(StatusEffect.FAINT); expect(minior.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); @@ -60,10 +60,10 @@ describe("Abilities - SHIELDS DOWN", () => { }); test("should ignore non-volatile status moves", async () => { - game.override.enemyMoveset([Moves.SPORE]); + game.override.enemyMoveset([MoveId.SPORE]); await game.classicMode.startBattle([Species.MINIOR]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); @@ -71,35 +71,35 @@ describe("Abilities - SHIELDS DOWN", () => { test("should still ignore non-volatile status moves used by a pokemon with mold breaker", async () => { game.override.enemyAbility(AbilityId.MOLD_BREAKER); - game.override.enemyMoveset([Moves.SPORE]); + game.override.enemyMoveset([MoveId.SPORE]); await game.classicMode.startBattle([Species.MINIOR]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPORE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPORE); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); }); test("should ignore non-volatile secondary status effects", async () => { - game.override.enemyMoveset([Moves.NUZZLE]); + game.override.enemyMoveset([MoveId.NUZZLE]); await game.classicMode.startBattle([Species.MINIOR]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()!.status).toBe(undefined); }); test("should ignore status moves even through mold breaker", async () => { - game.override.enemyMoveset([Moves.SPORE]); + game.override.enemyMoveset([MoveId.SPORE]); game.override.enemyAbility(AbilityId.MOLD_BREAKER); await game.classicMode.startBattle([Species.MINIOR]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -108,19 +108,19 @@ describe("Abilities - SHIELDS DOWN", () => { // toxic spikes currently does not poison flying types when gravity is in effect test.todo("should become poisoned by toxic spikes when grounded", async () => { - game.override.enemyMoveset([Moves.GRAVITY, Moves.TOXIC_SPIKES, Moves.SPLASH]); - game.override.moveset([Moves.GRAVITY, Moves.SPLASH]); + game.override.enemyMoveset([MoveId.GRAVITY, MoveId.TOXIC_SPIKES, MoveId.SPLASH]); + game.override.moveset([MoveId.GRAVITY, MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MINIOR]); // turn 1 - game.move.select(Moves.GRAVITY); - await game.move.selectEnemyMove(Moves.TOXIC_SPIKES); + game.move.select(MoveId.GRAVITY); + await game.move.selectEnemyMove(MoveId.TOXIC_SPIKES); await game.toNextTurn(); // turn 2 game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.MINIOR); @@ -129,24 +129,24 @@ describe("Abilities - SHIELDS DOWN", () => { }); test("should ignore yawn", async () => { - game.override.enemyMoveset([Moves.YAWN]); + game.override.enemyMoveset([MoveId.YAWN]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MINIOR]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.YAWN); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.YAWN); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getPlayerPokemon()!.findTag(tag => tag.tagType === BattlerTagType.DROWSY)).toBe(undefined); }); test("should not ignore volatile status effects", async () => { - game.override.enemyMoveset([Moves.CONFUSE_RAY]); + game.override.enemyMoveset([MoveId.CONFUSE_RAY]); await game.classicMode.startBattle([Species.MINIOR]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.CONFUSE_RAY); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.CONFUSE_RAY); await game.phaseInterceptor.to(TurnEndPhase); @@ -157,27 +157,27 @@ describe("Abilities - SHIELDS DOWN", () => { test.todo("ditto should not be immune to status after transforming", async () => { game.override.enemySpecies(Species.DITTO); game.override.enemyAbility(AbilityId.IMPOSTER); - game.override.moveset([Moves.SPLASH, Moves.SPORE]); + game.override.moveset([MoveId.SPLASH, MoveId.SPORE]); await game.classicMode.startBattle([Species.MINIOR]); - game.move.select(Moves.SPORE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPORE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); }); test("should not prevent minior from receiving the fainted status effect in trainer battles", async () => { - game.override.enemyMoveset([Moves.TACKLE]); - game.override.moveset([Moves.THUNDERBOLT]); + game.override.enemyMoveset([MoveId.TACKLE]); + game.override.moveset([MoveId.THUNDERBOLT]); game.override.startingLevel(100); game.override.startingWave(5); game.override.enemySpecies(Species.MINIOR); await game.classicMode.startBattle([Species.REGIELEKI]); const minior = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.toNextTurn(); expect(minior.isFainted()).toBe(true); expect(minior.status?.effect).toBe(StatusEffect.FAINT); diff --git a/test/abilities/simple.test.ts b/test/abilities/simple.test.ts index ed019eab4a0..77d82e541ce 100644 --- a/test/abilities/simple.test.ts +++ b/test/abilities/simple.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { AbilityId } from "#enums/ability-id"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; @@ -27,7 +27,7 @@ describe("Abilities - Simple", () => { .enemySpecies(Species.BULBASAUR) .enemyAbility(AbilityId.SIMPLE) .ability(AbilityId.INTIMIDATE) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should double stat changes when applied", async () => { diff --git a/test/abilities/speed_boost.test.ts b/test/abilities/speed_boost.test.ts index 4f686cbe608..56cd2956e13 100644 --- a/test/abilities/speed_boost.test.ts +++ b/test/abilities/speed_boost.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -32,15 +32,15 @@ describe("Abilities - Speed Boost", () => { .enemyAbility(AbilityId.BALL_FETCH) .enemyLevel(100) .ability(AbilityId.SPEED_BOOST) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.SPLASH, Moves.U_TURN]); + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.SPLASH, MoveId.U_TURN]); }); it("should increase speed by 1 stage at end of turn", async () => { await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); @@ -49,13 +49,13 @@ describe("Abilities - Speed Boost", () => { it("should not trigger this turn if pokemon was switched into combat via attack, but the turn after", async () => { await game.classicMode.startBattle([Species.SHUCKLE, Species.NINJASK]); - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.toNextTurn(); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); }); @@ -65,19 +65,19 @@ describe("Abilities - Speed Boost", () => { const [shuckle, ninjask] = game.scene.getPlayerParty(); - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!).toBe(ninjask); expect(ninjask.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!).toBe(shuckle); expect(shuckle.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(shuckle.getStatStage(Stat.SPD)).toBe(1); }); @@ -90,7 +90,7 @@ describe("Abilities - Speed Boost", () => { const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); }); @@ -108,7 +108,7 @@ describe("Abilities - Speed Boost", () => { const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); }); diff --git a/test/abilities/stakeout.test.ts b/test/abilities/stakeout.test.ts index 3543768b932..cd4d3c65a8c 100644 --- a/test/abilities/stakeout.test.ts +++ b/test/abilities/stakeout.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { isBetween } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,7 +24,7 @@ describe("Abilities - Stakeout", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SURF]) + .moveset([MoveId.SPLASH, MoveId.SURF]) .ability(AbilityId.STAKEOUT) .battleStyle("single") .disableCrits() @@ -32,7 +32,7 @@ describe("Abilities - Stakeout", () => { .enemyLevel(100) .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.FLIP_TURN]) + .enemyMoveset([MoveId.SPLASH, MoveId.FLIP_TURN]) .startingWave(5); }); @@ -41,17 +41,17 @@ describe("Abilities - Stakeout", () => { const [enemy1] = game.scene.getEnemyParty(); - game.move.select(Moves.SURF); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SURF); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const damage1 = enemy1.getInverseHp(); enemy1.hp = enemy1.getMaxHp(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.forceEnemyToSwitch(); await game.toNextTurn(); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); game.forceEnemyToSwitch(); await game.toNextTurn(); @@ -64,18 +64,18 @@ describe("Abilities - Stakeout", () => { const [enemy1] = game.scene.getEnemyParty(); - game.move.select(Moves.SURF); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SURF); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const damage1 = enemy1.getInverseHp(); enemy1.hp = enemy1.getMaxHp(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.FLIP_TURN); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.FLIP_TURN); await game.toNextTurn(); - game.move.select(Moves.SURF); - await game.move.selectEnemyMove(Moves.FLIP_TURN); + game.move.select(MoveId.SURF); + await game.move.selectEnemyMove(MoveId.FLIP_TURN); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); diff --git a/test/abilities/stall.test.ts b/test/abilities/stall.test.ts index d49f2d7fb6d..ec6ab2bc5b8 100644 --- a/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,8 +27,8 @@ describe("Abilities - Stall", () => { .disableCrits() .enemySpecies(Species.REGIELEKI) .enemyAbility(AbilityId.STALL) - .enemyMoveset(Moves.QUICK_ATTACK) - .moveset([Moves.QUICK_ATTACK, Moves.TACKLE]); + .enemyMoveset(MoveId.QUICK_ATTACK) + .moveset([MoveId.QUICK_ATTACK, MoveId.TACKLE]); }); /** @@ -43,7 +43,7 @@ describe("Abilities - Stall", () => { const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -61,7 +61,7 @@ describe("Abilities - Stall", () => { const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -80,7 +80,7 @@ describe("Abilities - Stall", () => { const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; diff --git a/test/abilities/steely_spirit.test.ts b/test/abilities/steely_spirit.test.ts index 9613ea27914..be4b0d7856c 100644 --- a/test/abilities/steely_spirit.test.ts +++ b/test/abilities/steely_spirit.test.ts @@ -1,7 +1,7 @@ import { allAbilities } from "#app/data/data-lists"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -11,7 +11,7 @@ describe("Abilities - Steely Spirit", () => { let phaserGame: Phaser.Game; let game: GameManager; const steelySpiritMultiplier = 1.5; - const moveToCheck = Moves.IRON_HEAD; + const moveToCheck = MoveId.IRON_HEAD; let ironHeadPower: number; @@ -31,8 +31,8 @@ describe("Abilities - Steely Spirit", () => { game.override.battleStyle("double"); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.moveset([Moves.IRON_HEAD, Moves.SPLASH]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.IRON_HEAD, MoveId.SPLASH]); + game.override.enemyMoveset(MoveId.SPLASH); vi.spyOn(allMoves[moveToCheck], "calculateBattlePower"); }); @@ -46,7 +46,7 @@ describe("Abilities - Steely Spirit", () => { expect(boostSource.hasAbility(AbilityId.STEELY_SPIRIT)).toBe(true); game.move.select(moveToCheck, 0, enemyToCheck.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MoveEffectPhase"); expect(allMoves[moveToCheck].calculateBattlePower).toHaveReturnedWith(ironHeadPower * steelySpiritMultiplier); @@ -85,21 +85,21 @@ describe("Abilities - Steely Spirit", () => { expect(boostSource.summonData.abilitySuppressed).toBe(true); game.move.select(moveToCheck, 0, enemyToCheck.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MoveEffectPhase"); expect(allMoves[moveToCheck].calculateBattlePower).toHaveReturnedWith(ironHeadPower); }); it("affects variable-type moves if their resolved type is Steel", async () => { - game.override.ability(AbilityId.STEELY_SPIRIT).moveset([Moves.REVELATION_DANCE]); + game.override.ability(AbilityId.STEELY_SPIRIT).moveset([MoveId.REVELATION_DANCE]); - const revelationDance = allMoves[Moves.REVELATION_DANCE]; + const revelationDance = allMoves[MoveId.REVELATION_DANCE]; vi.spyOn(revelationDance, "calculateBattlePower"); await game.classicMode.startBattle([Species.KLINKLANG]); - game.move.select(Moves.REVELATION_DANCE); + game.move.select(MoveId.REVELATION_DANCE); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/abilities/storm_drain.test.ts b/test/abilities/storm_drain.test.ts index abf2fdfbda2..4433399bdef 100644 --- a/test/abilities/storm_drain.test.ts +++ b/test/abilities/storm_drain.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -24,13 +24,13 @@ describe("Abilities - Storm Drain", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.WATER_GUN]) + .moveset([MoveId.SPLASH, MoveId.WATER_GUN]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should redirect water type moves", async () => { @@ -41,15 +41,15 @@ describe("Abilities - Storm Drain", () => { enemy2.summonData.ability = AbilityId.STORM_DRAIN; - game.move.select(Moves.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(true); }); it("should not redirect non-water type moves", async () => { - game.override.moveset([Moves.SPLASH, Moves.AERIAL_ACE]); + game.override.moveset([MoveId.SPLASH, MoveId.AERIAL_ACE]); await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; @@ -57,8 +57,8 @@ describe("Abilities - Storm Drain", () => { enemy2.summonData.ability = AbilityId.STORM_DRAIN; - game.move.select(Moves.AERIAL_ACE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.AERIAL_ACE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(false); @@ -71,8 +71,8 @@ describe("Abilities - Storm Drain", () => { enemy2.summonData.ability = AbilityId.STORM_DRAIN; - game.move.select(Moves.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy2.isFullHp()).toBe(true); @@ -88,15 +88,15 @@ describe("Abilities - Storm Drain", () => { enemy2.summonData.ability = AbilityId.STORM_DRAIN; - game.move.select(Moves.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(false); }); it("should redirect moves changed to water type via ability", async () => { - game.override.ability(AbilityId.LIQUID_VOICE).moveset(Moves.PSYCHIC_NOISE); + game.override.ability(AbilityId.LIQUID_VOICE).moveset(MoveId.PSYCHIC_NOISE); await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; @@ -104,8 +104,8 @@ describe("Abilities - Storm Drain", () => { enemy2.summonData.ability = AbilityId.STORM_DRAIN; - game.move.select(Moves.PSYCHIC_NOISE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); + game.move.select(MoveId.PSYCHIC_NOISE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(true); diff --git a/test/abilities/sturdy.test.ts b/test/abilities/sturdy.test.ts index 63622f25e0c..99addb56b4b 100644 --- a/test/abilities/sturdy.test.ts +++ b/test/abilities/sturdy.test.ts @@ -2,7 +2,7 @@ import type { EnemyPokemon } from "#app/field/pokemon"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,7 +28,7 @@ describe("Abilities - Sturdy", () => { game.override.starterSpecies(Species.LUCARIO); game.override.startingLevel(100); - game.override.moveset([Moves.CLOSE_COMBAT, Moves.FISSURE]); + game.override.moveset([MoveId.CLOSE_COMBAT, MoveId.FISSURE]); game.override.enemySpecies(Species.ARON); game.override.enemyLevel(5); @@ -37,7 +37,7 @@ describe("Abilities - Sturdy", () => { test("Sturdy activates when user is at full HP", async () => { await game.classicMode.startBattle(); - game.move.select(Moves.CLOSE_COMBAT); + game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.getEnemyParty()[0].hp).toBe(1); }); @@ -48,7 +48,7 @@ describe("Abilities - Sturdy", () => { const enemyPokemon: EnemyPokemon = game.scene.getEnemyParty()[0]; enemyPokemon.hp = enemyPokemon.getMaxHp() - 1; - game.move.select(Moves.CLOSE_COMBAT); + game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(DamageAnimPhase); expect(enemyPokemon.hp).toBe(0); @@ -57,7 +57,7 @@ describe("Abilities - Sturdy", () => { test("Sturdy pokemon should be immune to OHKO moves", async () => { await game.classicMode.startBattle(); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to(MoveEndPhase); const enemyPokemon: EnemyPokemon = game.scene.getEnemyParty()[0]; @@ -68,7 +68,7 @@ describe("Abilities - Sturdy", () => { game.override.ability(AbilityId.MOLD_BREAKER); await game.classicMode.startBattle(); - game.move.select(Moves.CLOSE_COMBAT); + game.move.select(MoveId.CLOSE_COMBAT); await game.phaseInterceptor.to(DamageAnimPhase); const enemyPokemon: EnemyPokemon = game.scene.getEnemyParty()[0]; diff --git a/test/abilities/super_luck.test.ts b/test/abilities/super_luck.test.ts index 549c91b87e4..02fdc89cccc 100644 --- a/test/abilities/super_luck.test.ts +++ b/test/abilities/super_luck.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -22,19 +22,19 @@ describe("Abilities - Super Luck", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TACKLE]) + .moveset([MoveId.TACKLE]) .ability(AbilityId.SUPER_LUCK) .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should increase the crit stage of a user by 1", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; const fn = vi.spyOn(enemy, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase"); expect(fn).toHaveReturnedWith(1); fn.mockRestore(); diff --git a/test/abilities/supreme_overlord.test.ts b/test/abilities/supreme_overlord.test.ts index e5d44b1858d..85e06c06cea 100644 --- a/test/abilities/supreme_overlord.test.ts +++ b/test/abilities/supreme_overlord.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import type Move from "#app/data/moves/move"; import { AbilityId } from "#enums/ability-id"; import { Species } from "#enums/species"; @@ -27,7 +27,7 @@ describe("Abilities - Supreme Overlord", () => { }); beforeEach(() => { - move = allMoves[Moves.TACKLE]; + move = allMoves[MoveId.TACKLE]; basePower = move.power; game = new GameManager(phaserGame); game.override @@ -37,8 +37,8 @@ describe("Abilities - Supreme Overlord", () => { .startingLevel(1) .enemyAbility(AbilityId.BALL_FETCH) .ability(AbilityId.SUPREME_OVERLORD) - .enemyMoveset([Moves.SPLASH]) - .moveset([Moves.TACKLE, Moves.EXPLOSION, Moves.LUNAR_DANCE]); + .enemyMoveset([MoveId.SPLASH]) + .moveset([MoveId.TACKLE, MoveId.EXPLOSION, MoveId.LUNAR_DANCE]); vi.spyOn(move, "calculateBattlePower"); }); @@ -46,17 +46,17 @@ describe("Abilities - Supreme Overlord", () => { it("should increase Power by 20% if 2 Pokemon are fainted in the party", async () => { await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(2); await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -69,7 +69,7 @@ describe("Abilities - Supreme Overlord", () => { /** * Bulbasur faints once */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -78,7 +78,7 @@ describe("Abilities - Supreme Overlord", () => { * Charmander faints once */ game.doRevivePokemon(1); - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -86,12 +86,12 @@ describe("Abilities - Supreme Overlord", () => { /** * Bulbasur faints twice */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(2); await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -106,7 +106,7 @@ describe("Abilities - Supreme Overlord", () => { /** * The first Pokemon faints and another Pokemon in the party is selected. */ - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -114,11 +114,11 @@ describe("Abilities - Supreme Overlord", () => { /** * Enemy Pokemon faints and new wave is entered. */ - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -130,16 +130,16 @@ describe("Abilities - Supreme Overlord", () => { await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); @@ -151,16 +151,16 @@ describe("Abilities - Supreme Overlord", () => { await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/abilities/sweet_veil.test.ts b/test/abilities/sweet_veil.test.ts index 08da5956124..881310463ab 100644 --- a/test/abilities/sweet_veil.test.ts +++ b/test/abilities/sweet_veil.test.ts @@ -3,7 +3,7 @@ import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,17 +27,17 @@ describe("Abilities - Sweet Veil", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .moveset([Moves.SPLASH, Moves.REST, Moves.YAWN]) + .moveset([MoveId.SPLASH, MoveId.REST, MoveId.YAWN]) .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.POWDER); + .enemyMoveset(MoveId.POWDER); }); it("prevents the user and its allies from falling asleep", async () => { await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); @@ -45,11 +45,11 @@ describe("Abilities - Sweet Veil", () => { }); it("causes Rest to fail when used by the user or its allies", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.REST, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.REST, 1); await game.phaseInterceptor.to(TurnEndPhase); @@ -57,11 +57,11 @@ describe("Abilities - Sweet Veil", () => { }); it("causes Yawn to fail if used on the user or its allies", async () => { - game.override.enemyMoveset(Moves.YAWN); + game.override.enemyMoveset(MoveId.YAWN); await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); @@ -72,19 +72,19 @@ describe("Abilities - Sweet Veil", () => { game.override.enemySpecies(Species.PIKACHU); game.override.enemyLevel(5); game.override.startingLevel(5); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE, Species.SWIRLIX]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.YAWN, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.YAWN, 1, BattlerIndex.PLAYER); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField().some(p => !!p.getTag(BattlerTagType.DROWSY))).toBe(true); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); expect(game.scene.getPlayerField().every(p => p.status?.effect)).toBe(false); diff --git a/test/abilities/synchronize.test.ts b/test/abilities/synchronize.test.ts index 31e0ef684f7..14ea90111b0 100644 --- a/test/abilities/synchronize.test.ts +++ b/test/abilities/synchronize.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -28,14 +28,14 @@ describe("Abilities - Synchronize", () => { .startingLevel(100) .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.SYNCHRONIZE) - .moveset([Moves.SPLASH, Moves.THUNDER_WAVE, Moves.SPORE, Moves.PSYCHO_SHIFT]) + .moveset([MoveId.SPLASH, MoveId.THUNDER_WAVE, MoveId.SPORE, MoveId.PSYCHO_SHIFT]) .ability(AbilityId.NO_GUARD); }); it("does not trigger when no status is applied by opponent Pokemon", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); @@ -45,7 +45,7 @@ describe("Abilities - Synchronize", () => { it("sets the status of the source pokemon to Paralysis when paralyzed by it", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.PARALYSIS); @@ -56,7 +56,7 @@ describe("Abilities - Synchronize", () => { it("does not trigger on Sleep", async () => { await game.classicMode.startBattle(); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); @@ -66,11 +66,11 @@ describe("Abilities - Synchronize", () => { }); it("does not trigger when Pokemon is statused by Toxic Spikes", async () => { - game.override.ability(AbilityId.SYNCHRONIZE).enemyAbility(AbilityId.BALL_FETCH).enemyMoveset(Moves.TOXIC_SPIKES); + game.override.ability(AbilityId.SYNCHRONIZE).enemyAbility(AbilityId.BALL_FETCH).enemyMoveset(MoveId.TOXIC_SPIKES); await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); game.doSwitchPokemon(1); @@ -84,7 +84,7 @@ describe("Abilities - Synchronize", () => { it("shows ability even if it fails to set the status of the opponent Pokemon", async () => { await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status?.effect).toBeUndefined(); diff --git a/test/abilities/tera_shell.test.ts b/test/abilities/tera_shell.test.ts index 85df738f836..3fe8e1863d7 100644 --- a/test/abilities/tera_shell.test.ts +++ b/test/abilities/tera_shell.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,10 +25,10 @@ describe("Abilities - Tera Shell", () => { game.override .battleStyle("single") .ability(AbilityId.TERA_SHELL) - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.INSOMNIA) - .enemyMoveset([Moves.MACH_PUNCH]) + .enemyMoveset([MoveId.MACH_PUNCH]) .startingLevel(100) .enemyLevel(100); }); @@ -39,56 +39,56 @@ describe("Abilities - Tera Shell", () => { const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.getMoveEffectiveness).toHaveLastReturnedWith(0.5); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.getMoveEffectiveness).toHaveLastReturnedWith(2); }); it("should not override type immunities", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]); + game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); await game.classicMode.startBattle([Species.SNORLAX]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.getMoveEffectiveness).toHaveLastReturnedWith(0); }); it("should not override type multipliers less than 0.5x", async () => { - game.override.enemyMoveset([Moves.QUICK_ATTACK]); + game.override.enemyMoveset([MoveId.QUICK_ATTACK]); await game.classicMode.startBattle([Species.AGGRON]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.getMoveEffectiveness).toHaveLastReturnedWith(0.25); }); it("should not affect the effectiveness of fixed-damage moves", async () => { - game.override.enemyMoveset([Moves.DRAGON_RAGE]); + game.override.enemyMoveset([MoveId.DRAGON_RAGE]); await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const spy = vi.spyOn(playerPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); expect(spy).toHaveLastReturnedWith(1); @@ -98,14 +98,14 @@ describe("Abilities - Tera Shell", () => { }); it("should change the effectiveness of all strikes of a multi-strike move", async () => { - game.override.enemyMoveset([Moves.DOUBLE_HIT]); + game.override.enemyMoveset([MoveId.DOUBLE_HIT]); await game.classicMode.startBattle([Species.SNORLAX]); const playerPokemon = game.scene.getPlayerPokemon()!; const spy = vi.spyOn(playerPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.move.forceHit(); diff --git a/test/abilities/thermal_exchange.test.ts b/test/abilities/thermal_exchange.test.ts index 62d5f18f0b7..881b0ef8cfc 100644 --- a/test/abilities/thermal_exchange.test.ts +++ b/test/abilities/thermal_exchange.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -23,27 +23,27 @@ describe("Abilities - Thermal Exchange", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should remove burn when gained", async () => { game.override .ability(AbilityId.THERMAL_EXCHANGE) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.BURN); expect(enemy?.status?.effect).toBe(StatusEffect.BURN); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/trace.test.ts b/test/abilities/trace.test.ts index e109dd7d9cc..b01d5187e17 100644 --- a/test/abilities/trace.test.ts +++ b/test/abilities/trace.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,19 +23,19 @@ describe("Abilities - Trace", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.TRACE) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should copy the opponent's ability", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); @@ -45,7 +45,7 @@ describe("Abilities - Trace", () => { game.override.enemyAbility(AbilityId.INTIMIDATE); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/abilities/unburden.test.ts b/test/abilities/unburden.test.ts index f5d5cc3aec3..fb43a53e51e 100644 --- a/test/abilities/unburden.test.ts +++ b/test/abilities/unburden.test.ts @@ -7,7 +7,7 @@ import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifi import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -45,7 +45,7 @@ describe("Abilities - Unburden", () => { .battleStyle("single") .startingLevel(1) .ability(AbilityId.UNBURDEN) - .moveset([Moves.SPLASH, Moves.KNOCK_OFF, Moves.PLUCK, Moves.FALSE_SWIPE]) + .moveset([MoveId.SPLASH, MoveId.KNOCK_OFF, MoveId.PLUCK, MoveId.FALSE_SWIPE]) .startingHeldItems([ { name: "BERRY", count: 1, type: BerryType.SITRUS }, { name: "BERRY", count: 2, type: BerryType.APICOT }, @@ -53,7 +53,7 @@ describe("Abilities - Unburden", () => { ]) .enemySpecies(Species.NINJASK) .enemyLevel(100) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.UNBURDEN) .enemyPassiveAbility(AbilityId.NO_GUARD) .enemyHeldItems([ @@ -61,11 +61,11 @@ describe("Abilities - Unburden", () => { { name: "BERRY", type: BerryType.LUM, count: 1 }, ]); // For the various tests that use Thief, give it a 100% steal rate - vi.spyOn(allMoves[Moves.THIEF], "attrs", "get").mockReturnValue([new StealHeldItemChanceAttr(1.0)]); + vi.spyOn(allMoves[MoveId.THIEF], "attrs", "get").mockReturnValue([new StealHeldItemChanceAttr(1.0)]); }); it("should activate when a berry is eaten", async () => { - game.override.enemyMoveset(Moves.FALSE_SWIPE); + game.override.enemyMoveset(MoveId.FALSE_SWIPE); await game.classicMode.startBattle([Species.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -73,7 +73,7 @@ describe("Abilities - Unburden", () => { const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Player gets hit by False Swipe and eats its own Sitrus Berry - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -81,7 +81,7 @@ describe("Abilities - Unburden", () => { }); it("should activate when a berry is eaten, even if Berry Pouch preserves the berry", async () => { - game.override.enemyMoveset(Moves.FALSE_SWIPE).startingModifier([{ name: "BERRY_POUCH", count: 5850 }]); + game.override.enemyMoveset(MoveId.FALSE_SWIPE).startingModifier([{ name: "BERRY_POUCH", count: 5850 }]); await game.classicMode.startBattle([Species.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -89,7 +89,7 @@ describe("Abilities - Unburden", () => { const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Player gets hit by False Swipe and eats its own Sitrus Berry - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBe(playerHeldItems); @@ -106,7 +106,7 @@ describe("Abilities - Unburden", () => { const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); // Player uses Pluck and eats the opponent's berry - game.move.select(Moves.PLUCK); + game.move.select(MoveId.PLUCK); await game.toNextTurn(); expect(getHeldItemCount(enemyPokemon)).toBeLessThan(enemyHeldItemCt); @@ -122,7 +122,7 @@ describe("Abilities - Unburden", () => { const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); // Player uses Knock Off and removes the opponent's item - game.move.select(Moves.KNOCK_OFF); + game.move.select(MoveId.KNOCK_OFF); await game.toNextTurn(); expect(getHeldItemCount(enemyPokemon)).toBeLessThan(enemyHeldItemCt); @@ -138,7 +138,7 @@ describe("Abilities - Unburden", () => { const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); // Player steals the opponent's item via ability Magician - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); expect(getHeldItemCount(enemyPokemon)).toBeLessThan(enemyHeldItemCt); @@ -154,7 +154,7 @@ describe("Abilities - Unburden", () => { const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Player's item gets stolen via ability Pickpocket - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -162,7 +162,7 @@ describe("Abilities - Unburden", () => { }); it("should activate when an item is stolen via move", async () => { - game.override.moveset(Moves.THIEF).startingHeldItems([]); // Remove player's full stacks of held items so it can steal opponent's held items + game.override.moveset(MoveId.THIEF).startingHeldItems([]); // Remove player's full stacks of held items so it can steal opponent's held items await game.classicMode.startBattle([Species.TREECKO]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -170,7 +170,7 @@ describe("Abilities - Unburden", () => { const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); // Player uses Thief and steals the opponent's item - game.move.select(Moves.THIEF); + game.move.select(MoveId.THIEF); await game.toNextTurn(); expect(getHeldItemCount(enemyPokemon)).toBeLessThan(enemyHeldItemCt); @@ -190,7 +190,7 @@ describe("Abilities - Unburden", () => { const initialEnemySpeed = enemyPokemon.getStat(Stat.SPD); // Player steals the opponent's item using Grip Claw - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); expect(getHeldItemCount(enemyPokemon)).toBeLessThan(enemyHeldItemCt); @@ -198,7 +198,7 @@ describe("Abilities - Unburden", () => { }); it("should not activate when a neutralizing ability is present", async () => { - game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS).enemyMoveset(Moves.FALSE_SWIPE); + game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS).enemyMoveset(MoveId.FALSE_SWIPE); await game.classicMode.startBattle([Species.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -206,7 +206,7 @@ describe("Abilities - Unburden", () => { const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Player gets hit by False Swipe and eats Sitrus Berry, which should not trigger Unburden - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -215,7 +215,7 @@ describe("Abilities - Unburden", () => { }); it("should activate when a move that consumes a berry is used", async () => { - game.override.moveset(Moves.STUFF_CHEEKS); + game.override.moveset(MoveId.STUFF_CHEEKS); await game.classicMode.startBattle([Species.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -224,7 +224,7 @@ describe("Abilities - Unburden", () => { // Player uses Stuff Cheeks and eats its own berry // Caution: Do not test this using opponent, there is a known issue where opponent can randomly generate with Salac Berry - game.move.select(Moves.STUFF_CHEEKS); + game.move.select(MoveId.STUFF_CHEEKS); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItemCt); @@ -242,10 +242,10 @@ describe("Abilities - Unburden", () => { const initialPlayerSpeed = treecko.getStat(Stat.SPD); // Turn 1: Treecko gets hit by False Swipe and eats Sitrus Berry, activating Unburden - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.FALSE_SWIPE, 0); - await game.move.selectEnemyMove(Moves.FALSE_SWIPE, 0); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.FALSE_SWIPE, 0); + await game.move.selectEnemyMove(MoveId.FALSE_SWIPE, 0); await game.phaseInterceptor.to("TurnEndPhase"); expect(getHeldItemCount(treecko)).toBeLessThan(playerHeldItems); @@ -253,7 +253,7 @@ describe("Abilities - Unburden", () => { // Turn 2: Switch Meowth to Weezing, activating Neutralizing Gas await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); await game.phaseInterceptor.to("TurnEndPhase"); @@ -262,7 +262,7 @@ describe("Abilities - Unburden", () => { // Turn 3: Switch Weezing to Meowth, deactivating Neutralizing Gas await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); await game.phaseInterceptor.to("TurnEndPhase"); @@ -271,7 +271,7 @@ describe("Abilities - Unburden", () => { }); it("should not activate when passing a baton to a teammate switching in", async () => { - game.override.startingHeldItems([{ name: "BATON" }]).moveset(Moves.BATON_PASS); + game.override.startingHeldItems([{ name: "BATON" }]).moveset(MoveId.BATON_PASS); await game.classicMode.startBattle([Species.TREECKO, Species.PURRLOIN]); const [treecko, purrloin] = game.scene.getPlayerParty(); @@ -281,7 +281,7 @@ describe("Abilities - Unburden", () => { vi.spyOn(unburdenAttr, "applyPostItemLost"); // Player uses Baton Pass, which also passes the Baton item - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -293,7 +293,7 @@ describe("Abilities - Unburden", () => { }); it("should not speed up a Pokemon after it loses the ability Unburden", async () => { - game.override.enemyMoveset([Moves.FALSE_SWIPE, Moves.WORRY_SEED]); + game.override.enemyMoveset([MoveId.FALSE_SWIPE, MoveId.WORRY_SEED]); await game.classicMode.startBattle([Species.PURRLOIN]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -301,16 +301,16 @@ describe("Abilities - Unburden", () => { const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Turn 1: Get hit by False Swipe and eat Sitrus Berry, activating Unburden - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.FALSE_SWIPE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.FALSE_SWIPE); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); expect(playerPokemon.getEffectiveStat(Stat.SPD)).toBe(initialPlayerSpeed * 2); // Turn 2: Get hit by Worry Seed, deactivating Unburden - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WORRY_SEED); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WORRY_SEED); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -318,7 +318,7 @@ describe("Abilities - Unburden", () => { }); it("should activate when a reviver seed is used", async () => { - game.override.startingHeldItems([{ name: "REVIVER_SEED" }]).enemyMoveset([Moves.WING_ATTACK]); + game.override.startingHeldItems([{ name: "REVIVER_SEED" }]).enemyMoveset([MoveId.WING_ATTACK]); await game.classicMode.startBattle([Species.TREECKO]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -326,7 +326,7 @@ describe("Abilities - Unburden", () => { const initialPlayerSpeed = playerPokemon.getStat(Stat.SPD); // Turn 1: Get hit by Wing Attack and faint, activating Reviver Seed - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(getHeldItemCount(playerPokemon)).toBeLessThan(playerHeldItems); @@ -335,21 +335,21 @@ describe("Abilities - Unburden", () => { // test for `.bypassFaint()` - singles it("shouldn't persist when revived normally if activated while fainting", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.THIEF]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.THIEF]); await game.classicMode.startBattle([Species.TREECKO, Species.FEEBAS]); const treecko = game.scene.getPlayerPokemon()!; const treeckoInitialHeldItems = getHeldItemCount(treecko); const initialSpeed = treecko.getStat(Stat.SPD); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.THIEF); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.THIEF); game.doSelectPartyPokemon(1); await game.toNextTurn(); game.doRevivePokemon(1); game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!).toBe(treecko); @@ -361,8 +361,8 @@ describe("Abilities - Unburden", () => { it("shouldn't persist when revived by revival blessing if activated while fainting", async () => { game.override .battleStyle("double") - .enemyMoveset([Moves.SPLASH, Moves.THIEF]) - .moveset([Moves.SPLASH, Moves.REVIVAL_BLESSING]) + .enemyMoveset([MoveId.SPLASH, MoveId.THIEF]) + .moveset([MoveId.SPLASH, MoveId.REVIVAL_BLESSING]) .startingHeldItems([{ name: "WIDE_LENS" }]); await game.classicMode.startBattle([Species.TREECKO, Species.FEEBAS, Species.MILOTIC]); @@ -370,10 +370,10 @@ describe("Abilities - Unburden", () => { const treeckoInitialHeldItems = getHeldItemCount(treecko); const initialSpeed = treecko.getStat(Stat.SPD); - game.move.select(Moves.SPLASH); - game.move.select(Moves.REVIVAL_BLESSING, 1); - await game.move.selectEnemyMove(Moves.THIEF, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.REVIVAL_BLESSING, 1); + await game.move.selectEnemyMove(MoveId.THIEF, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); game.doSelectPartyPokemon(0, "RevivalBlessingPhase"); await game.toNextTurn(); diff --git a/test/abilities/unseen_fist.test.ts b/test/abilities/unseen_fist.test.ts index 8a2c146adfb..750cdf68bbd 100644 --- a/test/abilities/unseen_fist.test.ts +++ b/test/abilities/unseen_fist.test.ts @@ -1,6 +1,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,38 +28,38 @@ describe("Abilities - Unseen Fist", () => { .battleStyle("single") .starterSpecies(Species.URSHIFU) .enemySpecies(Species.SNORLAX) - .enemyMoveset(Moves.PROTECT) + .enemyMoveset(MoveId.PROTECT) .startingLevel(100) .enemyLevel(100); }); it("should cause a contact move to ignore Protect", async () => - await testUnseenFistHitResult(game, Moves.QUICK_ATTACK, Moves.PROTECT, true)); + await testUnseenFistHitResult(game, MoveId.QUICK_ATTACK, MoveId.PROTECT, true)); it("should not cause a non-contact move to ignore Protect", async () => - await testUnseenFistHitResult(game, Moves.ABSORB, Moves.PROTECT, false)); + await testUnseenFistHitResult(game, MoveId.ABSORB, MoveId.PROTECT, false)); it("should not apply if the source has Long Reach", async () => { game.override.passiveAbility(AbilityId.LONG_REACH); - await testUnseenFistHitResult(game, Moves.QUICK_ATTACK, Moves.PROTECT, false); + await testUnseenFistHitResult(game, MoveId.QUICK_ATTACK, MoveId.PROTECT, false); }); it("should cause a contact move to ignore Wide Guard", async () => - await testUnseenFistHitResult(game, Moves.BREAKING_SWIPE, Moves.WIDE_GUARD, true)); + await testUnseenFistHitResult(game, MoveId.BREAKING_SWIPE, MoveId.WIDE_GUARD, true)); it("should not cause a non-contact move to ignore Wide Guard", async () => - await testUnseenFistHitResult(game, Moves.BULLDOZE, Moves.WIDE_GUARD, false)); + await testUnseenFistHitResult(game, MoveId.BULLDOZE, MoveId.WIDE_GUARD, false)); it("should cause a contact move to ignore Protect, but not Substitute", async () => { game.override.enemyLevel(1); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, enemyPokemon.id); + enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, enemyPokemon.id); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(BerryPhase, false); @@ -70,8 +70,8 @@ describe("Abilities - Unseen Fist", () => { async function testUnseenFistHitResult( game: GameManager, - attackMove: Moves, - protectMove: Moves, + attackMove: MoveId, + protectMove: MoveId, shouldSucceed = true, ): Promise { game.override.moveset([attackMove]).enemyMoveset(protectMove); diff --git a/test/abilities/victory_star.test.ts b/test/abilities/victory_star.test.ts index 998688438cb..a5009068394 100644 --- a/test/abilities/victory_star.test.ts +++ b/test/abilities/victory_star.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,12 +24,12 @@ describe("Abilities - Victory Star", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TACKLE, Moves.SPLASH]) + .moveset([MoveId.TACKLE, MoveId.SPLASH]) .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should increase the accuracy of its user", async () => { @@ -38,8 +38,8 @@ describe("Abilities - Victory Star", () => { const user = game.scene.getPlayerField()[0]; vi.spyOn(user, "getAccuracyMultiplier"); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(user.getAccuracyMultiplier).toHaveReturnedWith(1.1); @@ -51,8 +51,8 @@ describe("Abilities - Victory Star", () => { const ally = game.scene.getPlayerField()[0]; vi.spyOn(ally, "getAccuracyMultiplier"); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(ally.getAccuracyMultiplier).toHaveReturnedWith(1.1); diff --git a/test/abilities/vital_spirit.test.ts b/test/abilities/vital_spirit.test.ts index 9acef0d66ad..0c1ed2a9bf5 100644 --- a/test/abilities/vital_spirit.test.ts +++ b/test/abilities/vital_spirit.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -23,27 +23,27 @@ describe("Abilities - Vital Spirit", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should remove sleep when gained", async () => { game.override .ability(AbilityId.INSOMNIA) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.SLEEP); expect(enemy?.status?.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/volt_absorb.test.ts b/test/abilities/volt_absorb.test.ts index 8188fa36f44..6789ffa4d31 100644 --- a/test/abilities/volt_absorb.test.ts +++ b/test/abilities/volt_absorb.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -31,12 +31,12 @@ describe("Abilities - Volt Absorb", () => { }); it("does not activate when CHARGE is used", async () => { - const moveToUse = Moves.CHARGE; + const moveToUse = MoveId.CHARGE; const ability = AbilityId.VOLT_ABSORB; game.override.moveset([moveToUse]); game.override.ability(ability); - game.override.enemyMoveset([Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.NONE, MoveId.NONE, MoveId.NONE]); game.override.enemySpecies(Species.DUSKULL); game.override.enemyAbility(AbilityId.BALL_FETCH); @@ -54,8 +54,8 @@ describe("Abilities - Volt Absorb", () => { }); it("should activate regardless of accuracy checks", async () => { - game.override.moveset(Moves.THUNDERBOLT); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset(MoveId.THUNDERBOLT); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyAbility(AbilityId.VOLT_ABSORB); @@ -63,7 +63,7 @@ describe("Abilities - Volt Absorb", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); enemyPokemon.hp = enemyPokemon.hp - 1; await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -74,8 +74,8 @@ describe("Abilities - Volt Absorb", () => { }); it("regardless of accuracy should not trigger on pokemon in semi invulnerable state", async () => { - game.override.moveset(Moves.THUNDERBOLT); - game.override.enemyMoveset(Moves.DIVE); + game.override.moveset(MoveId.THUNDERBOLT); + game.override.enemyMoveset(MoveId.DIVE); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyAbility(AbilityId.VOLT_ABSORB); @@ -83,7 +83,7 @@ describe("Abilities - Volt Absorb", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); enemyPokemon.hp = enemyPokemon.hp - 1; await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/abilities/wandering_spirit.test.ts b/test/abilities/wandering_spirit.test.ts index 10f36054078..54149911f3a 100644 --- a/test/abilities/wandering_spirit.test.ts +++ b/test/abilities/wandering_spirit.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,19 +23,19 @@ describe("Abilities - Wandering Spirit", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.WANDERING_SPIRIT) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); }); it("should exchange abilities when hit with a contact move", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); @@ -43,10 +43,10 @@ describe("Abilities - Wandering Spirit", () => { }); it("should not exchange abilities when hit with a non-contact move", async () => { - game.override.enemyMoveset(Moves.EARTHQUAKE); + game.override.enemyMoveset(MoveId.EARTHQUAKE); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.WANDERING_SPIRIT); @@ -57,7 +57,7 @@ describe("Abilities - Wandering Spirit", () => { game.override.enemyAbility(AbilityId.INTIMIDATE); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/abilities/water_bubble.test.ts b/test/abilities/water_bubble.test.ts index ea8c4702743..e4a5e954c56 100644 --- a/test/abilities/water_bubble.test.ts +++ b/test/abilities/water_bubble.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -23,27 +23,27 @@ describe("Abilities - Water Bubble", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should remove burn when gained", async () => { game.override .ability(AbilityId.THERMAL_EXCHANGE) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.BURN); expect(enemy?.status?.effect).toBe(StatusEffect.BURN); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/water_veil.test.ts b/test/abilities/water_veil.test.ts index 45e54618868..b441ae24775 100644 --- a/test/abilities/water_veil.test.ts +++ b/test/abilities/water_veil.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -23,27 +23,27 @@ describe("Abilities - Water Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should remove burn when gained", async () => { game.override .ability(AbilityId.THERMAL_EXCHANGE) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SKILL_SWAP) - .enemyMoveset(Moves.SPLASH); + .moveset(MoveId.SKILL_SWAP) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon(); enemy?.trySetStatus(StatusEffect.BURN); expect(enemy?.status?.effect).toBe(StatusEffect.BURN); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(enemy?.status).toBeNull(); diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index 51b4ecdecc7..dc3655953a2 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -6,7 +6,7 @@ import { toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; @@ -37,8 +37,8 @@ describe("Abilities - Wimp Out", () => { .enemyPassiveAbility(AbilityId.NO_GUARD) .startingLevel(90) .enemyLevel(70) - .moveset([Moves.SPLASH, Moves.FALSE_SWIPE, Moves.ENDURE]) - .enemyMoveset(Moves.FALSE_SWIPE) + .moveset([MoveId.SPLASH, MoveId.FALSE_SWIPE, MoveId.ENDURE]) + .enemyMoveset(MoveId.FALSE_SWIPE) .disableCrits(); }); @@ -72,7 +72,7 @@ describe("Abilities - Wimp Out", () => { const wimpod = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -87,7 +87,7 @@ describe("Abilities - Wimp Out", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.hp *= 0.52; - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.phaseInterceptor.to("BerryPhase"); const isVisible = enemyPokemon.visible; @@ -100,7 +100,7 @@ describe("Abilities - Wimp Out", () => { const wimpod = game.scene.getPlayerPokemon()!; wimpod.hp = 5; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(wimpod.hp).toEqual(1); @@ -108,10 +108,10 @@ describe("Abilities - Wimp Out", () => { }); it("Trapping moves do not prevent Wimp Out from activating.", async () => { - game.override.enemyMoveset([Moves.SPIRIT_SHACKLE]).startingLevel(53).enemyLevel(45); + game.override.enemyMoveset([MoveId.SPIRIT_SHACKLE]).startingLevel(53).enemyLevel(45); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -123,10 +123,10 @@ describe("Abilities - Wimp Out", () => { }); it("If this Ability activates due to being hit by U-turn or Volt Switch, the user of that move will not be switched out.", async () => { - game.override.startingLevel(95).enemyMoveset([Moves.U_TURN]); + game.override.startingLevel(95).enemyMoveset([MoveId.U_TURN]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -137,21 +137,21 @@ describe("Abilities - Wimp Out", () => { }); it("If this Ability does not activate due to being hit by U-turn or Volt Switch, the user of that move will be switched out.", async () => { - game.override.startingLevel(190).startingWave(8).enemyMoveset([Moves.U_TURN]); + game.override.startingLevel(190).startingWave(8).enemyMoveset([MoveId.U_TURN]); await game.classicMode.startBattle([Species.GOLISOPOD, Species.TYRUNT]); const RIVAL_NINJASK1 = game.scene.getEnemyPokemon()?.id; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.getEnemyPokemon()?.id !== RIVAL_NINJASK1); }); it("Dragon Tail and Circle Throw switch out Pokémon before the Ability activates.", async () => { - game.override.startingLevel(69).enemyMoveset([Moves.DRAGON_TAIL]); + game.override.startingLevel(69).enemyMoveset([MoveId.DRAGON_TAIL]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); const wimpod = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("SwitchSummonPhase", false); @@ -163,10 +163,10 @@ describe("Abilities - Wimp Out", () => { }); it("triggers when recoil damage is taken", async () => { - game.override.moveset([Moves.HEAD_SMASH]).enemyMoveset([Moves.SPLASH]); + game.override.moveset([MoveId.HEAD_SMASH]).enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); - game.move.select(Moves.HEAD_SMASH); + game.move.select(MoveId.HEAD_SMASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -174,13 +174,13 @@ describe("Abilities - Wimp Out", () => { }); it("It does not activate when the Pokémon cuts its own HP", async () => { - game.override.moveset([Moves.SUBSTITUTE]).enemyMoveset([Moves.SPLASH]); + game.override.moveset([MoveId.SUBSTITUTE]).enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); const wimpod = game.scene.getPlayerPokemon()!; wimpod.hp *= 0.52; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("TurnEndPhase"); confirmNoSwitch(); @@ -190,7 +190,7 @@ describe("Abilities - Wimp Out", () => { game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS).startingLevel(5); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); confirmNoSwitch(); @@ -203,8 +203,8 @@ describe("Abilities - Wimp Out", () => { "If it falls below half and recovers back above half from a Shell Bell, Wimp Out will activate even after the Shell Bell recovery", async () => { game.override - .moveset([Moves.DOUBLE_EDGE]) - .enemyMoveset([Moves.SPLASH]) + .moveset([MoveId.DOUBLE_EDGE]) + .enemyMoveset([MoveId.SPLASH]) .startingHeldItems([{ name: "SHELL_BELL", count: 4 }]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); @@ -212,7 +212,7 @@ describe("Abilities - Wimp Out", () => { wimpod.damageAndUpdate(toDmgValue(wimpod.getMaxHp() * 0.4)); - game.move.select(Moves.DOUBLE_EDGE); + game.move.select(MoveId.DOUBLE_EDGE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -224,12 +224,12 @@ describe("Abilities - Wimp Out", () => { ); it("Wimp Out will activate due to weather damage", async () => { - game.override.weather(WeatherType.HAIL).enemyMoveset([Moves.SPLASH]); + game.override.weather(WeatherType.HAIL).enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -237,24 +237,24 @@ describe("Abilities - Wimp Out", () => { }); it("Does not trigger when enemy has sheer force", async () => { - game.override.enemyAbility(AbilityId.SHEER_FORCE).enemyMoveset(Moves.SLUDGE_BOMB).startingLevel(95); + game.override.enemyAbility(AbilityId.SHEER_FORCE).enemyMoveset(MoveId.SLUDGE_BOMB).startingLevel(95); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.ENDURE); + game.move.select(MoveId.ENDURE); await game.phaseInterceptor.to("TurnEndPhase"); confirmNoSwitch(); }); it("Wimp Out will activate due to post turn status damage", async () => { - game.override.statusEffect(StatusEffect.POISON).enemyMoveset([Moves.SPLASH]); + game.override.statusEffect(StatusEffect.POISON).enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -267,7 +267,7 @@ describe("Abilities - Wimp Out", () => { game.scene.getPlayerPokemon()!.hp *= 0.52; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -275,11 +275,11 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out will activate due to leech seed", async () => { - game.override.enemyMoveset([Moves.LEECH_SEED]); + game.override.enemyMoveset([MoveId.LEECH_SEED]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.52; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -287,11 +287,11 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out will activate due to curse damage", async () => { - game.override.enemySpecies(Species.DUSKNOIR).enemyMoveset([Moves.CURSE]); + game.override.enemySpecies(Species.DUSKNOIR).enemyMoveset([MoveId.CURSE]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.52; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -299,11 +299,11 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out will activate due to salt cure damage", async () => { - game.override.enemySpecies(Species.NACLI).enemyMoveset([Moves.SALT_CURE]).enemyLevel(1); + game.override.enemySpecies(Species.NACLI).enemyMoveset([MoveId.SALT_CURE]).enemyLevel(1); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.7; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -311,11 +311,11 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out will activate due to damaging trap damage", async () => { - game.override.enemySpecies(Species.MAGIKARP).enemyMoveset([Moves.WHIRLPOOL]).enemyLevel(1); + game.override.enemySpecies(Species.MAGIKARP).enemyMoveset([MoveId.WHIRLPOOL]).enemyLevel(1); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.55; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -323,17 +323,17 @@ describe("Abilities - Wimp Out", () => { }); it("Magic Guard passive should not allow indirect damage to trigger Wimp Out", async () => { - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, Moves.STEALTH_ROCK, 0, ArenaTagSide.ENEMY); - game.scene.arena.addTag(ArenaTagType.SPIKES, 1, Moves.SPIKES, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.SPIKES, 1, MoveId.SPIKES, 0, ArenaTagSide.ENEMY); game.override .passiveAbility(AbilityId.MAGIC_GUARD) - .enemyMoveset([Moves.LEECH_SEED]) + .enemyMoveset([MoveId.LEECH_SEED]) .weather(WeatherType.HAIL) .statusEffect(StatusEffect.POISON); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerParty()[0].getHpRatio()).toEqual(0.51); @@ -342,13 +342,13 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out activating should not cancel a double battle", async () => { - game.override.battleStyle("double").enemyAbility(AbilityId.WIMP_OUT).enemyMoveset([Moves.SPLASH]).enemyLevel(1); + game.override.battleStyle("double").enemyAbility(AbilityId.WIMP_OUT).enemyMoveset([MoveId.SPLASH]).enemyLevel(1); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); const enemyLeadPokemon = game.scene.getEnemyParty()[0]; const enemySecPokemon = game.scene.getEnemyParty()[1]; - game.move.select(Moves.FALSE_SWIPE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FALSE_SWIPE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); @@ -363,15 +363,15 @@ describe("Abilities - Wimp Out", () => { it("Wimp Out will activate due to aftermath", async () => { game.override - .moveset([Moves.THUNDER_PUNCH]) + .moveset([MoveId.THUNDER_PUNCH]) .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.AFTERMATH) - .enemyMoveset([Moves.SPLASH]) + .enemyMoveset([MoveId.SPLASH]) .enemyLevel(1); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.THUNDER_PUNCH); + game.move.select(MoveId.THUNDER_PUNCH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -379,8 +379,8 @@ describe("Abilities - Wimp Out", () => { }); it("Activates due to entry hazards", async () => { - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, Moves.STEALTH_ROCK, 0, ArenaTagSide.ENEMY); - game.scene.arena.addTag(ArenaTagType.SPIKES, 1, Moves.SPIKES, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.SPIKES, 1, MoveId.SPIKES, 0, ArenaTagSide.ENEMY); game.override.enemySpecies(Species.CENTISKORCH).enemyAbility(AbilityId.WIMP_OUT).startingWave(4); await game.classicMode.startBattle([Species.TYRUNT]); @@ -389,11 +389,11 @@ describe("Abilities - Wimp Out", () => { }); it("Wimp Out will activate due to Nightmare", async () => { - game.override.enemyMoveset([Moves.NIGHTMARE]).statusEffect(StatusEffect.SLEEP); + game.override.enemyMoveset([MoveId.NIGHTMARE]).statusEffect(StatusEffect.SLEEP); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.65; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -401,11 +401,11 @@ describe("Abilities - Wimp Out", () => { }); it("triggers status on the wimp out user before a new pokemon is switched in", async () => { - game.override.enemyMoveset(Moves.SLUDGE_BOMB).startingLevel(80); + game.override.enemyMoveset(MoveId.SLUDGE_BOMB).startingLevel(80); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); - vi.spyOn(allMoves[Moves.SLUDGE_BOMB], "chance", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.SLUDGE_BOMB], "chance", "get").mockReturnValue(100); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -414,12 +414,12 @@ describe("Abilities - Wimp Out", () => { }); it("triggers after last hit of multi hit move", async () => { - game.override.enemyMoveset(Moves.BULLET_SEED).enemyAbility(AbilityId.SKILL_LINK); + game.override.enemyMoveset(MoveId.BULLET_SEED).enemyAbility(AbilityId.SKILL_LINK); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.ENDURE); + game.move.select(MoveId.ENDURE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -430,12 +430,12 @@ describe("Abilities - Wimp Out", () => { }); it("triggers after last hit of multi hit move (multi lens)", async () => { - game.override.enemyMoveset(Moves.TACKLE).enemyHeldItems([{ name: "MULTI_LENS", count: 1 }]); + game.override.enemyMoveset(MoveId.TACKLE).enemyHeldItems([{ name: "MULTI_LENS", count: 1 }]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.ENDURE); + game.move.select(MoveId.ENDURE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -445,12 +445,12 @@ describe("Abilities - Wimp Out", () => { confirmSwitch(); }); it("triggers after last hit of Parental Bond", async () => { - game.override.enemyMoveset(Moves.TACKLE).enemyAbility(AbilityId.PARENTAL_BOND); + game.override.enemyMoveset(MoveId.TACKLE).enemyAbility(AbilityId.PARENTAL_BOND); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); game.scene.getPlayerPokemon()!.hp *= 0.51; - game.move.select(Moves.ENDURE); + game.move.select(MoveId.ENDURE); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -464,7 +464,7 @@ describe("Abilities - Wimp Out", () => { it.todo( "Wimp Out will not activate if the Pokémon's HP falls below half due to hurting itself in confusion", async () => { - game.override.moveset([Moves.SWORDS_DANCE]).enemyMoveset([Moves.SWAGGER]); + game.override.moveset([MoveId.SWORDS_DANCE]).enemyMoveset([MoveId.SWAGGER]); await game.classicMode.startBattle([Species.WIMPOD, Species.TYRUNT]); const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.hp *= 0.51; @@ -474,7 +474,7 @@ describe("Abilities - Wimp Out", () => { // TODO: add helper function to force confusion self-hits while (playerPokemon.getHpRatio() > 0.49) { - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to("TurnEndPhase"); } @@ -489,9 +489,9 @@ describe("Abilities - Wimp Out", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; // Use 2 turns of False Swipe due to opponent's health bar shield - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); const isVisible = enemyPokemon.visible; @@ -502,10 +502,10 @@ describe("Abilities - Wimp Out", () => { it("wimp out will not skip battles when triggered in a double battle", async () => { const wave = 2; game.override - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.WIMPOD) .enemyAbility(AbilityId.WIMP_OUT) - .moveset([Moves.MATCHA_GOTCHA, Moves.FALSE_SWIPE]) + .moveset([MoveId.MATCHA_GOTCHA, MoveId.FALSE_SWIPE]) .startingLevel(50) .enemyLevel(1) .battleStyle("double") @@ -513,8 +513,8 @@ describe("Abilities - Wimp Out", () => { await game.classicMode.startBattle([Species.RAICHU, Species.PIKACHU]); const [wimpod0, wimpod1] = game.scene.getEnemyField(); - game.move.select(Moves.FALSE_SWIPE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.MATCHA_GOTCHA, 1); + game.move.select(MoveId.FALSE_SWIPE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.MATCHA_GOTCHA, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -534,18 +534,18 @@ describe("Abilities - Wimp Out", () => { .enemyAbility(AbilityId.WIMP_OUT) .startingLevel(50) .enemyLevel(1) - .enemyMoveset([Moves.SPLASH, Moves.ENDURE]) + .enemyMoveset([MoveId.SPLASH, MoveId.ENDURE]) .battleStyle("double") - .moveset([Moves.DRAGON_ENERGY, Moves.SPLASH]) + .moveset([MoveId.DRAGON_ENERGY, MoveId.SPLASH]) .startingWave(wave); await game.classicMode.startBattle([Species.REGIDRAGO, Species.MAGIKARP]); // turn 1 - game.move.select(Moves.DRAGON_ENERGY, 0); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.ENDURE); + game.move.select(MoveId.DRAGON_ENERGY, 0); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.ENDURE); await game.phaseInterceptor.to("SelectModifierPhase"); expect(game.scene.currentBattle.waveIndex).toBe(wave + 1); diff --git a/test/abilities/wind_power.test.ts b/test/abilities/wind_power.test.ts index e2a2dc84ba9..82b13504af4 100644 --- a/test/abilities/wind_power.test.ts +++ b/test/abilities/wind_power.test.ts @@ -1,7 +1,7 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,8 +26,8 @@ describe("Abilities - Wind Power", () => { game.override.battleStyle("single"); game.override.enemySpecies(Species.SHIFTRY); game.override.enemyAbility(AbilityId.WIND_POWER); - game.override.moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.TAILWIND, MoveId.SPLASH, MoveId.PETAL_BLIZZARD, MoveId.SANDSTORM]); + game.override.enemyMoveset(MoveId.SPLASH); }); it("it becomes charged when hit by wind moves", async () => { @@ -36,7 +36,7 @@ describe("Abilities - Wind Power", () => { expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); - game.move.select(Moves.PETAL_BLIZZARD); + game.move.select(MoveId.PETAL_BLIZZARD); await game.phaseInterceptor.to(TurnEndPhase); expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeDefined(); @@ -51,7 +51,7 @@ describe("Abilities - Wind Power", () => { expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to(TurnEndPhase); expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeDefined(); @@ -68,7 +68,7 @@ describe("Abilities - Wind Power", () => { expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); expect(magikarp.getTag(BattlerTagType.CHARGED)).toBeUndefined(); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to(TurnEndPhase); @@ -84,7 +84,7 @@ describe("Abilities - Wind Power", () => { expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); - game.move.select(Moves.SANDSTORM); + game.move.select(MoveId.SANDSTORM); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/abilities/wind_rider.test.ts b/test/abilities/wind_rider.test.ts index 3cdce2c1da1..bedd2d4faa8 100644 --- a/test/abilities/wind_rider.test.ts +++ b/test/abilities/wind_rider.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,8 +26,8 @@ describe("Abilities - Wind Rider", () => { .battleStyle("single") .enemySpecies(Species.SHIFTRY) .enemyAbility(AbilityId.WIND_RIDER) - .moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.TAILWIND, MoveId.SPLASH, MoveId.PETAL_BLIZZARD, MoveId.SANDSTORM]) + .enemyMoveset(MoveId.SPLASH); }); it("takes no damage from wind moves and its ATK stat stage is raised by 1 when hit by one", async () => { @@ -36,7 +36,7 @@ describe("Abilities - Wind Rider", () => { expect(shiftry.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.PETAL_BLIZZARD); + game.move.select(MoveId.PETAL_BLIZZARD); await game.phaseInterceptor.to("TurnEndPhase"); @@ -52,7 +52,7 @@ describe("Abilities - Wind Rider", () => { expect(shiftry.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to("TurnEndPhase"); @@ -69,7 +69,7 @@ describe("Abilities - Wind Rider", () => { expect(shiftry.getStatStage(Stat.ATK)).toBe(0); expect(magikarp.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to("TurnEndPhase"); @@ -87,7 +87,7 @@ describe("Abilities - Wind Rider", () => { expect(shiftry.getStatStage(Stat.ATK)).toBe(0); expect(magikarp.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to("TurnEndPhase"); @@ -104,7 +104,7 @@ describe("Abilities - Wind Rider", () => { expect(shiftry.getStatStage(Stat.ATK)).toBe(0); expect(shiftry.isFullHp()).toBe(true); - game.move.select(Moves.SANDSTORM); + game.move.select(MoveId.SANDSTORM); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts index ae531cc7fac..447aee1feac 100644 --- a/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,32 +24,32 @@ describe("Abilities - Wonder Skin", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.moveset([Moves.TACKLE, Moves.CHARM]); + game.override.moveset([MoveId.TACKLE, MoveId.CHARM]); game.override.ability(AbilityId.BALL_FETCH); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(AbilityId.WONDER_SKIN); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); }); it("lowers accuracy of status moves to 50%", async () => { - const moveToCheck = allMoves[Moves.CHARM]; + const moveToCheck = allMoves[MoveId.CHARM]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.CHARM); + game.move.select(MoveId.CHARM); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(50); }); it("does not lower accuracy of non-status moves", async () => { - const moveToCheck = allMoves[Moves.TACKLE]; + const moveToCheck = allMoves[MoveId.TACKLE]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100); @@ -63,14 +63,14 @@ describe("Abilities - Wonder Skin", () => { bypassAbilities.forEach(ability => { it(`does not affect pokemon with ${ability[1]}`, async () => { - const moveToCheck = allMoves[Moves.CHARM]; + const moveToCheck = allMoves[MoveId.CHARM]; // @ts-ignore ts doesn't know that ability[0] is an ability and not a string... game.override.ability(ability[0]); vi.spyOn(moveToCheck, "calculateBattleAccuracy"); await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.CHARM); + game.move.select(MoveId.CHARM); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100); diff --git a/test/abilities/zen_mode.test.ts b/test/abilities/zen_mode.test.ts index d6af164b4e0..475e764af13 100644 --- a/test/abilities/zen_mode.test.ts +++ b/test/abilities/zen_mode.test.ts @@ -1,6 +1,6 @@ import { Status } from "#app/data/status-effect"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -32,8 +32,8 @@ describe("Abilities - ZEN MODE", () => { .enemyAbility(AbilityId.BALL_FETCH) .enemyLevel(5) .ability(AbilityId.ZEN_MODE) - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SEISMIC_TOSS); + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SEISMIC_TOSS); }); it("shouldn't change form when taking damage if not dropping below 50% HP", async () => { @@ -41,7 +41,7 @@ describe("Abilities - ZEN MODE", () => { const darmanitan = game.scene.getPlayerPokemon()!; expect(darmanitan.formIndex).toBe(baseForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(darmanitan.getHpRatio()).toBeLessThan(1); @@ -56,7 +56,7 @@ describe("Abilities - ZEN MODE", () => { darmanitan.hp = darmanitan.getMaxHp() / 2 + 1; expect(darmanitan.formIndex).toBe(baseForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(darmanitan.getHpRatio()).toBeLessThan(0.5); @@ -69,13 +69,13 @@ describe("Abilities - ZEN MODE", () => { darmanitan.hp = darmanitan.getMaxHp() / 2 + 1; expect(darmanitan.formIndex).toBe(baseForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(darmanitan.getHpRatio()).toBeLessThan(0.5); expect(darmanitan.formIndex).toBe(zenForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.killPokemon(darmanitan); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -100,7 +100,7 @@ describe("Abilities - ZEN MODE", () => { darmanitan.status = new Status(StatusEffect.FAINT); expect(darmanitan.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); diff --git a/test/abilities/zero_to_hero.test.ts b/test/abilities/zero_to_hero.test.ts index 217d1a415a0..d2c80111f3e 100644 --- a/test/abilities/zero_to_hero.test.ts +++ b/test/abilities/zero_to_hero.test.ts @@ -2,7 +2,7 @@ import { Status } from "#app/data/status-effect"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -28,8 +28,8 @@ describe("Abilities - ZERO TO HERO", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SPLASH) + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH); }); @@ -49,7 +49,7 @@ describe("Abilities - ZERO TO HERO", () => { palafin2.status = new Status(StatusEffect.FAINT); expect(palafin2.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(TurnEndPhase); game.doSelectModifier(); @@ -77,7 +77,7 @@ describe("Abilities - ZERO TO HERO", () => { const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(baseForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.killPokemon(palafin); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -94,7 +94,7 @@ describe("Abilities - ZERO TO HERO", () => { const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(heroForm); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.killPokemon(palafin); game.doSelectPartyPokemon(1); await game.toNextTurn(); diff --git a/test/arena/arena_gravity.test.ts b/test/arena/arena_gravity.test.ts index 1097054687d..16c9693c69d 100644 --- a/test/arena/arena_gravity.test.ts +++ b/test/arena/arena_gravity.test.ts @@ -3,7 +3,7 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,31 +27,31 @@ describe("Arena - Gravity", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.TACKLE, Moves.GRAVITY, Moves.FISSURE]) + .moveset([MoveId.TACKLE, MoveId.GRAVITY, MoveId.FISSURE]) .ability(AbilityId.UNNERVE) .enemyAbility(AbilityId.BALL_FETCH) .enemySpecies(Species.SHUCKLE) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(5); }); // Reference: https://bulbapedia.bulbagarden.net/wiki/Gravity_(move) it("non-OHKO move accuracy is multiplied by 1.67", async () => { - const moveToCheck = allMoves[Moves.TACKLE]; + const moveToCheck = allMoves[MoveId.TACKLE]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); // Setup Gravity on first turn await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.GRAVITY); + game.move.select(MoveId.GRAVITY); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use non-OHKO move on second turn await game.toNextTurn(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattleAccuracy).toHaveLastReturnedWith(100 * 1.67); @@ -59,20 +59,20 @@ describe("Arena - Gravity", () => { it("OHKO move accuracy is not affected", async () => { /** See Fissure {@link https://bulbapedia.bulbagarden.net/wiki/Fissure_(move)} */ - const moveToCheck = allMoves[Moves.FISSURE]; + const moveToCheck = allMoves[MoveId.FISSURE]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); // Setup Gravity on first turn await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.GRAVITY); + game.move.select(MoveId.GRAVITY); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use OHKO move on second turn await game.toNextTurn(); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattleAccuracy).toHaveLastReturnedWith(30); @@ -80,7 +80,7 @@ describe("Arena - Gravity", () => { describe("Against flying types", () => { it("can be hit by ground-type moves now", async () => { - game.override.enemySpecies(Species.PIDGEOT).moveset([Moves.GRAVITY, Moves.EARTHQUAKE]); + game.override.enemySpecies(Species.PIDGEOT).moveset([MoveId.GRAVITY, MoveId.EARTHQUAKE]); await game.classicMode.startBattle([Species.PIKACHU]); @@ -88,28 +88,28 @@ describe("Arena - Gravity", () => { vi.spyOn(pidgeot, "getAttackTypeEffectiveness"); // Try earthquake on 1st turn (fails!); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("TurnEndPhase"); expect(pidgeot.getAttackTypeEffectiveness).toHaveLastReturnedWith(0); // Setup Gravity on 2nd turn await game.toNextTurn(); - game.move.select(Moves.GRAVITY); + game.move.select(MoveId.GRAVITY); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use ground move on 3rd turn await game.toNextTurn(); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("TurnEndPhase"); expect(pidgeot.getAttackTypeEffectiveness).toHaveLastReturnedWith(1); }); it("keeps super-effective moves super-effective after using gravity", async () => { - game.override.enemySpecies(Species.PIDGEOT).moveset([Moves.GRAVITY, Moves.THUNDERBOLT]); + game.override.enemySpecies(Species.PIDGEOT).moveset([MoveId.GRAVITY, MoveId.THUNDERBOLT]); await game.classicMode.startBattle([Species.PIKACHU]); @@ -117,14 +117,14 @@ describe("Arena - Gravity", () => { vi.spyOn(pidgeot, "getAttackTypeEffectiveness"); // Setup Gravity on 1st turn - game.move.select(Moves.GRAVITY); + game.move.select(MoveId.GRAVITY); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use electric move on 2nd turn await game.toNextTurn(); - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.phaseInterceptor.to("TurnEndPhase"); expect(pidgeot.getAttackTypeEffectiveness).toHaveLastReturnedWith(2); @@ -132,19 +132,19 @@ describe("Arena - Gravity", () => { }); it("cancels Fly if its user is semi-invulnerable", async () => { - game.override.enemySpecies(Species.SNORLAX).enemyMoveset(Moves.FLY).moveset([Moves.GRAVITY, Moves.SPLASH]); + game.override.enemySpecies(Species.SNORLAX).enemyMoveset(MoveId.FLY).moveset([MoveId.GRAVITY, MoveId.SPLASH]); await game.classicMode.startBattle([Species.CHARIZARD]); const charizard = game.scene.getPlayerPokemon()!; const snorlax = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(snorlax.getTag(BattlerTagType.FLYING)).toBeDefined(); - game.move.select(Moves.GRAVITY); + game.move.select(MoveId.GRAVITY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/arena/grassy_terrain.test.ts b/test/arena/grassy_terrain.test.ts index 0fa711c5c91..93bbf04eaa9 100644 --- a/test/arena/grassy_terrain.test.ts +++ b/test/arena/grassy_terrain.test.ts @@ -1,6 +1,6 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,26 +27,26 @@ describe("Arena - Grassy Terrain", () => { .enemyLevel(1) .enemySpecies(Species.SHUCKLE) .enemyAbility(AbilityId.STURDY) - .enemyMoveset(Moves.FLY) - .moveset([Moves.GRASSY_TERRAIN, Moves.EARTHQUAKE]) + .enemyMoveset(MoveId.FLY) + .moveset([MoveId.GRASSY_TERRAIN, MoveId.EARTHQUAKE]) .ability(AbilityId.NO_GUARD); }); it("halves the damage of Earthquake", async () => { await game.classicMode.startBattle([Species.TAUROS]); - const eq = allMoves[Moves.EARTHQUAKE]; + const eq = allMoves[MoveId.EARTHQUAKE]; vi.spyOn(eq, "calculateBattlePower"); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.toNextTurn(); expect(eq.calculateBattlePower).toHaveReturnedWith(100); - game.move.select(Moves.GRASSY_TERRAIN); + game.move.select(MoveId.GRASSY_TERRAIN); await game.toNextTurn(); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("BerryPhase"); expect(eq.calculateBattlePower).toHaveReturnedWith(50); @@ -55,13 +55,13 @@ describe("Arena - Grassy Terrain", () => { it("Does not halve the damage of Earthquake if opponent is not grounded", async () => { await game.classicMode.startBattle([Species.NINJASK]); - const eq = allMoves[Moves.EARTHQUAKE]; + const eq = allMoves[MoveId.EARTHQUAKE]; vi.spyOn(eq, "calculateBattlePower"); - game.move.select(Moves.GRASSY_TERRAIN); + game.move.select(MoveId.GRASSY_TERRAIN); await game.toNextTurn(); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.phaseInterceptor.to("BerryPhase"); expect(eq.calculateBattlePower).toHaveReturnedWith(100); diff --git a/test/arena/weather_fog.test.ts b/test/arena/weather_fog.test.ts index 0cd47c32d00..dcb5d9b327c 100644 --- a/test/arena/weather_fog.test.ts +++ b/test/arena/weather_fog.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; @@ -25,20 +25,20 @@ describe("Weather - Fog", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.weather(WeatherType.FOG).battleStyle("single"); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.ability(AbilityId.BALL_FETCH); game.override.enemyAbility(AbilityId.BALL_FETCH); game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); }); it("move accuracy is multiplied by 90%", async () => { - const moveToCheck = allMoves[Moves.TACKLE]; + const moveToCheck = allMoves[MoveId.TACKLE]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100 * 0.9); diff --git a/test/arena/weather_hail.test.ts b/test/arena/weather_hail.test.ts index 2fa4f71d8ca..dc66404f404 100644 --- a/test/arena/weather_hail.test.ts +++ b/test/arena/weather_hail.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; @@ -25,15 +25,15 @@ describe("Weather - Hail", () => { game.override .weather(WeatherType.HAIL) .battleStyle("single") - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SPLASH) + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.MAGIKARP); }); it("inflicts damage equal to 1/16 of Pokemon's max HP at turn end", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -44,10 +44,10 @@ describe("Weather - Hail", () => { }); it("does not inflict damage to a Pokemon that is underwater (Dive) or underground (Dig)", async () => { - game.override.moveset([Moves.DIG]); + game.override.moveset([MoveId.DIG]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -62,7 +62,7 @@ describe("Weather - Hail", () => { it("does not inflict damage to Ice type Pokemon", async () => { await game.classicMode.startBattle([Species.CLOYSTER]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/arena/weather_sandstorm.test.ts b/test/arena/weather_sandstorm.test.ts index 8b59c5c8c34..fcb1b52ccb3 100644 --- a/test/arena/weather_sandstorm.test.ts +++ b/test/arena/weather_sandstorm.test.ts @@ -1,6 +1,6 @@ import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; @@ -26,15 +26,15 @@ describe("Weather - Sandstorm", () => { game.override .weather(WeatherType.SANDSTORM) .battleStyle("single") - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SPLASH) + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.MAGIKARP); }); it("inflicts damage equal to 1/16 of Pokemon's max HP at turn end", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); @@ -44,10 +44,10 @@ describe("Weather - Sandstorm", () => { }); it("does not inflict damage to a Pokemon that is underwater (Dive) or underground (Dig)", async () => { - game.override.moveset([Moves.DIVE]); + game.override.moveset([MoveId.DIVE]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); @@ -67,8 +67,8 @@ describe("Weather - Sandstorm", () => { await game.classicMode.startBattle([Species.ROCKRUFF, Species.KLINK]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/arena/weather_strong_winds.test.ts b/test/arena/weather_strong_winds.test.ts index 320bb266c56..80ca76ae055 100644 --- a/test/arena/weather_strong_winds.test.ts +++ b/test/arena/weather_strong_winds.test.ts @@ -2,7 +2,7 @@ import { allMoves } from "#app/data/data-lists"; import { StatusEffect } from "#app/enums/status-effect"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,7 +28,7 @@ describe("Weather - Strong Winds", () => { game.override.startingLevel(10); game.override.enemySpecies(Species.TAILLOW); game.override.enemyAbility(AbilityId.DELTA_STREAM); - game.override.moveset([Moves.THUNDERBOLT, Moves.ICE_BEAM, Moves.ROCK_SLIDE]); + game.override.moveset([MoveId.THUNDERBOLT, MoveId.ICE_BEAM, MoveId.ROCK_SLIDE]); }); it("electric type move is not very effective on Rayquaza", async () => { @@ -38,10 +38,10 @@ describe("Weather - Strong Winds", () => { const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.phaseInterceptor.to(TurnStartPhase); - expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.THUNDERBOLT].type, pikachu)).toBe(0.5); + expect(enemy.getAttackTypeEffectiveness(allMoves[MoveId.THUNDERBOLT].type, pikachu)).toBe(0.5); }); it("electric type move is neutral for flying type pokemon", async () => { @@ -49,10 +49,10 @@ describe("Weather - Strong Winds", () => { const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.phaseInterceptor.to(TurnStartPhase); - expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.THUNDERBOLT].type, pikachu)).toBe(1); + expect(enemy.getAttackTypeEffectiveness(allMoves[MoveId.THUNDERBOLT].type, pikachu)).toBe(1); }); it("ice type move is neutral for flying type pokemon", async () => { @@ -60,10 +60,10 @@ describe("Weather - Strong Winds", () => { const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.phaseInterceptor.to(TurnStartPhase); - expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.ICE_BEAM].type, pikachu)).toBe(1); + expect(enemy.getAttackTypeEffectiveness(allMoves[MoveId.ICE_BEAM].type, pikachu)).toBe(1); }); it("rock type move is neutral for flying type pokemon", async () => { @@ -71,10 +71,10 @@ describe("Weather - Strong Winds", () => { const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ROCK_SLIDE); + game.move.select(MoveId.ROCK_SLIDE); await game.phaseInterceptor.to(TurnStartPhase); - expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.ROCK_SLIDE].type, pikachu)).toBe(1); + expect(enemy.getAttackTypeEffectiveness(allMoves[MoveId.ROCK_SLIDE].type, pikachu)).toBe(1); }); it("weather goes away when last trainer pokemon dies to indirect damage", async () => { @@ -85,7 +85,7 @@ describe("Weather - Strong Winds", () => { const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.weather?.weatherType).toBeUndefined(); diff --git a/test/battle/ability_swap.test.ts b/test/battle/ability_swap.test.ts index ffdf3fe0c7f..a815b1a36d8 100644 --- a/test/battle/ability_swap.test.ts +++ b/test/battle/ability_swap.test.ts @@ -1,7 +1,7 @@ import { allAbilities } from "#app/data/data-lists"; import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,19 +24,19 @@ describe("Test Ability Swapping", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should activate post-summon abilities", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[AbilityId.INTIMIDATE]); await game.phaseInterceptor.to("BerryPhase"); @@ -47,7 +47,7 @@ describe("Test Ability Swapping", () => { game.override.ability(AbilityId.DESOLATE_LAND); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[AbilityId.BALL_FETCH]); await game.phaseInterceptor.to("BerryPhase"); @@ -58,7 +58,7 @@ describe("Test Ability Swapping", () => { game.override.passiveAbility(AbilityId.INTREPID_SWORD); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.scene.getPlayerPokemon()?.setTempAbility(allAbilities[AbilityId.BALL_FETCH]); await game.phaseInterceptor.to("BerryPhase"); @@ -67,10 +67,10 @@ describe("Test Ability Swapping", () => { // Pickup and Honey Gather are special cases as they're the only abilities to be Unsuppressable but not Unswappable it("should be able to swap pickup", async () => { - game.override.ability(AbilityId.PICKUP).enemyAbility(AbilityId.INTIMIDATE).moveset(Moves.ROLE_PLAY); + game.override.ability(AbilityId.PICKUP).enemyAbility(AbilityId.INTIMIDATE).moveset(MoveId.ROLE_PLAY); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.ROLE_PLAY); + game.move.select(MoveId.ROLE_PLAY); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/battle/battle-order.test.ts b/test/battle/battle-order.test.ts index c4c21d9e122..939eafdad91 100644 --- a/test/battle/battle-order.test.ts +++ b/test/battle/battle-order.test.ts @@ -2,7 +2,7 @@ import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { SelectTargetPhase } from "#app/phases/select-target-phase"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,7 +28,7 @@ describe("Battle order", () => { game.override.enemySpecies(Species.MEWTWO); game.override.enemyAbility(AbilityId.INSOMNIA); game.override.ability(AbilityId.INSOMNIA); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); }); it("opponent faster than player 50 vs 150", async () => { @@ -39,7 +39,7 @@ describe("Battle order", () => { vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 50]); // set playerPokemon's speed to 50 vi.spyOn(enemyPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set enemyPokemon's speed to 150 - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.run(EnemyCommandPhase); const playerPokemonIndex = playerPokemon.getBattlerIndex(); @@ -58,7 +58,7 @@ describe("Battle order", () => { vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set playerPokemon's speed to 150 vi.spyOn(enemyPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 50]); // set enemyPokemon's speed to 50 - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.run(EnemyCommandPhase); const playerPokemonIndex = playerPokemon.getBattlerIndex(); @@ -81,8 +81,8 @@ describe("Battle order", () => { const playerIndices = playerPokemon.map(p => p?.getBattlerIndex()); const enemyIndices = enemyPokemon.map(p => p?.getBattlerIndex()); - game.move.select(Moves.TACKLE); - game.move.select(Moves.TACKLE, 1); + game.move.select(MoveId.TACKLE); + game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.runFrom(SelectTargetPhase).to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -105,8 +105,8 @@ describe("Battle order", () => { const playerIndices = playerPokemon.map(p => p?.getBattlerIndex()); const enemyIndices = enemyPokemon.map(p => p?.getBattlerIndex()); - game.move.select(Moves.TACKLE); - game.move.select(Moves.TACKLE, 1); + game.move.select(MoveId.TACKLE); + game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.runFrom(SelectTargetPhase).to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; @@ -130,8 +130,8 @@ describe("Battle order", () => { const playerIndices = playerPokemon.map(p => p?.getBattlerIndex()); const enemyIndices = enemyPokemon.map(p => p?.getBattlerIndex()); - game.move.select(Moves.TACKLE); - game.move.select(Moves.TACKLE, 1); + game.move.select(MoveId.TACKLE); + game.move.select(MoveId.TACKLE, 1); await game.phaseInterceptor.runFrom(SelectTargetPhase).to(TurnStartPhase, false); const phase = game.scene.getCurrentPhase() as TurnStartPhase; diff --git a/test/battle/battle.test.ts b/test/battle/battle.test.ts index aad389b3efb..5ef9c610712 100644 --- a/test/battle/battle.test.ts +++ b/test/battle/battle.test.ts @@ -20,7 +20,7 @@ import GameManager from "#test/testUtils/gameManager"; import { generateStarter } from "#test/testUtils/gameManagerUtils"; import { UiMode } from "#enums/ui-mode"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import Phaser from "phaser"; @@ -95,11 +95,11 @@ describe("Test Battle Phase", () => { game.override.enemySpecies(Species.RATTATA); game.override.startingLevel(2000); game.override.startingWave(3).battleStyle("single"); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.enemyAbility(AbilityId.HYDRATION); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); await game.classicMode.startBattle(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(SelectModifierPhase, false); }, 20000); @@ -108,12 +108,12 @@ describe("Test Battle Phase", () => { game.override.enemySpecies(Species.RATTATA); game.override.startingLevel(5); game.override.startingWave(3); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); game.override.enemyAbility(AbilityId.HYDRATION); - game.override.enemyMoveset([Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP]); + game.override.enemyMoveset([MoveId.TAIL_WHIP, MoveId.TAIL_WHIP, MoveId.TAIL_WHIP, MoveId.TAIL_WHIP]); game.override.battleStyle("single"); await game.classicMode.startBattle(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnInitPhase, false); }, 20000); @@ -245,7 +245,7 @@ describe("Test Battle Phase", () => { }, 20000); it("kill opponent pokemon", async () => { - const moveToUse = Moves.SPLASH; + const moveToUse = MoveId.SPLASH; game.override.battleStyle("single"); game.override.starterSpecies(Species.MEWTWO); game.override.enemySpecies(Species.RATTATA); @@ -254,7 +254,7 @@ describe("Test Battle Phase", () => { game.override.startingLevel(2000); game.override.startingWave(3); game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); await game.classicMode.startBattle([Species.DARMANITAN, Species.CHARIZARD]); game.move.select(moveToUse); @@ -265,7 +265,7 @@ describe("Test Battle Phase", () => { }, 200000); it("to next turn", async () => { - const moveToUse = Moves.SPLASH; + const moveToUse = MoveId.SPLASH; game.override.battleStyle("single"); game.override.starterSpecies(Species.MEWTWO); game.override.enemySpecies(Species.RATTATA); @@ -274,7 +274,7 @@ describe("Test Battle Phase", () => { game.override.startingLevel(2000); game.override.startingWave(3); game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); await game.classicMode.startBattle(); const turn = game.scene.currentBattle.turn; game.move.select(moveToUse); @@ -283,7 +283,7 @@ describe("Test Battle Phase", () => { }, 20000); it("does not set new weather if staying in same biome", async () => { - const moveToUse = Moves.SPLASH; + const moveToUse = MoveId.SPLASH; game.override .battleStyle("single") .starterSpecies(Species.MEWTWO) @@ -294,7 +294,7 @@ describe("Test Battle Phase", () => { .startingWave(3) .startingBiome(Biome.LAKE) .moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE, MoveId.TACKLE]); await game.classicMode.startBattle(); const waveIndex = game.scene.currentBattle.waveIndex; game.move.select(moveToUse); @@ -307,7 +307,7 @@ describe("Test Battle Phase", () => { }, 20000); it("does not force switch if active pokemon faints at same time as enemy mon and is revived in post-battle", async () => { - const moveToUse = Moves.TAKE_DOWN; + const moveToUse = MoveId.TAKE_DOWN; game.override .battleStyle("single") .starterSpecies(Species.SAWK) @@ -315,7 +315,7 @@ describe("Test Battle Phase", () => { .startingWave(1) .startingLevel(100) .moveset([moveToUse]) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingHeldItems([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ACC }]); await game.classicMode.startBattle(); diff --git a/test/battle/damage_calculation.test.ts b/test/battle/damage_calculation.test.ts index 65379de0248..0671d752128 100644 --- a/test/battle/damage_calculation.test.ts +++ b/test/battle/damage_calculation.test.ts @@ -3,7 +3,7 @@ import type { EnemyPersistentModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,11 +29,11 @@ describe("Battle Mechanics - Damage Calculation", () => { .battleStyle("single") .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100) .disableCrits() - .moveset([Moves.TACKLE, Moves.DRAGON_RAGE, Moves.FISSURE, Moves.JUMP_KICK]); + .moveset([MoveId.TACKLE, MoveId.DRAGON_RAGE, MoveId.FISSURE, MoveId.JUMP_KICK]); }); it("Tackle deals expected base damage", async () => { @@ -47,7 +47,7 @@ describe("Battle Mechanics - Damage Calculation", () => { // expected base damage = [(2*level/5 + 2) * power * playerATK / enemyDEF / 50] + 2 // = 31.8666... - expect(enemyPokemon.getAttackDamage({ source: playerPokemon, move: allMoves[Moves.TACKLE] }).damage).toBeCloseTo( + expect(enemyPokemon.getAttackDamage({ source: playerPokemon, move: allMoves[MoveId.TACKLE] }).damage).toBeCloseTo( 31, ); }); @@ -59,7 +59,7 @@ describe("Battle Mechanics - Damage Calculation", () => { const aggron = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -78,7 +78,7 @@ describe("Battle Mechanics - Damage Calculation", () => { const aggron = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -93,7 +93,7 @@ describe("Battle Mechanics - Damage Calculation", () => { const magikarp = game.scene.getPlayerPokemon()!; const dragonite = game.scene.getEnemyPokemon()!; - expect(dragonite.getAttackDamage({ source: magikarp, move: allMoves[Moves.DRAGON_RAGE] }).damage).toBe(40); + expect(dragonite.getAttackDamage({ source: magikarp, move: allMoves[MoveId.DRAGON_RAGE] }).damage).toBe(40); }); it("One-hit KO moves ignore damage multipliers", async () => { @@ -104,7 +104,7 @@ describe("Battle Mechanics - Damage Calculation", () => { const magikarp = game.scene.getPlayerPokemon()!; const aggron = game.scene.getEnemyPokemon()!; - expect(aggron.getAttackDamage({ source: magikarp, move: allMoves[Moves.FISSURE] }).damage).toBe(aggron.hp); + expect(aggron.getAttackDamage({ source: magikarp, move: allMoves[MoveId.FISSURE] }).damage).toBe(aggron.hp); }); it("When the user fails to use Jump Kick with Wonder Guard ability, the damage should be 1.", async () => { @@ -114,7 +114,7 @@ describe("Battle Mechanics - Damage Calculation", () => { const shedinja = game.scene.getPlayerPokemon()!; - game.move.select(Moves.JUMP_KICK); + game.move.select(MoveId.JUMP_KICK); await game.phaseInterceptor.to("DamageAnimPhase"); @@ -122,7 +122,7 @@ describe("Battle Mechanics - Damage Calculation", () => { }); it("Charizard with odd HP survives Stealth Rock damage twice", async () => { - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, Moves.STEALTH_ROCK, 0); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0); game.override.seed("Charizard Stealth Rock test").enemySpecies(Species.CHARIZARD).enemyAbility(AbilityId.BLAZE); await game.classicMode.startBattle([Species.PIKACHU]); diff --git a/test/battle/double_battle.test.ts b/test/battle/double_battle.test.ts index abf43761718..c2bdba14f89 100644 --- a/test/battle/double_battle.test.ts +++ b/test/battle/double_battle.test.ts @@ -3,7 +3,7 @@ import { AbilityId } from "#enums/ability-id"; import { GameModes, getGameMode } from "#app/game-mode"; import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -33,11 +33,11 @@ describe("Double Battles", () => { // double-battle player's pokemon both fainted in same round, then revive one, and next double battle summons two player's pokemon successfully. // (There were bugs that either only summon one when can summon two, player stuck in switchPhase etc) it("3v2 edge case: player summons 2 pokemon on the next battle after being fainted and revived", async () => { - game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).moveset(Moves.SPLASH); + game.override.battleStyle("double").enemyMoveset(MoveId.SPLASH).moveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARIZARD, Species.SQUIRTLE]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH, 1); for (const pokemon of game.scene.getPlayerField()) { pokemon.hp = 0; @@ -67,8 +67,8 @@ describe("Double Battles", () => { }); game.override - .enemyMoveset(Moves.SPLASH) - .moveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) + .moveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) .ability(AbilityId.BALL_FETCH); @@ -79,7 +79,7 @@ describe("Double Battles", () => { for (let i = 0; i < DOUBLE_CHANCE; i++) { rngSweepProgress = (i + 0.5) / DOUBLE_CHANCE; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); diff --git a/test/battle/inverse_battle.test.ts b/test/battle/inverse_battle.test.ts index 64355dd108a..4f0d73db441 100644 --- a/test/battle/inverse_battle.test.ts +++ b/test/battle/inverse_battle.test.ts @@ -3,7 +3,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Challenges } from "#enums/challenges"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -35,18 +35,18 @@ describe("Inverse Battle", () => { .ability(AbilityId.BALL_FETCH) .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("Immune types are 2x effective - Thunderbolt against Ground Type", async () => { - game.override.moveset([Moves.THUNDERBOLT]).enemySpecies(Species.SANDSHREW); + game.override.moveset([MoveId.THUNDERBOLT]).enemySpecies(Species.SANDSHREW); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -54,14 +54,14 @@ describe("Inverse Battle", () => { }); it("2x effective types are 0.5x effective - Thunderbolt against Flying Type", async () => { - game.override.moveset([Moves.THUNDERBOLT]).enemySpecies(Species.PIDGEY); + game.override.moveset([MoveId.THUNDERBOLT]).enemySpecies(Species.PIDGEY); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -69,14 +69,14 @@ describe("Inverse Battle", () => { }); it("0.5x effective types are 2x effective - Thunderbolt against Electric Type", async () => { - game.override.moveset([Moves.THUNDERBOLT]).enemySpecies(Species.CHIKORITA); + game.override.moveset([MoveId.THUNDERBOLT]).enemySpecies(Species.CHIKORITA); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -84,7 +84,7 @@ describe("Inverse Battle", () => { }); it("Stealth Rock follows the inverse matchups - Stealth Rock against Charizard deals 1/32 of max HP", async () => { - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, Moves.STEALTH_ROCK, 0); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0); game.override.enemySpecies(Species.CHARIZARD).enemyLevel(100); await game.challengeMode.startBattle(); @@ -107,14 +107,14 @@ describe("Inverse Battle", () => { }); it("Freeze Dry is 2x effective against Water Type like other Ice type Move - Freeze Dry against Squirtle", async () => { - game.override.moveset([Moves.FREEZE_DRY]).enemySpecies(Species.SQUIRTLE); + game.override.moveset([MoveId.FREEZE_DRY]).enemySpecies(Species.SQUIRTLE); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -122,13 +122,13 @@ describe("Inverse Battle", () => { }); it("Water Absorb should heal against water moves - Water Absorb against Water gun", async () => { - game.override.moveset([Moves.WATER_GUN]).enemyAbility(AbilityId.WATER_ABSORB); + game.override.moveset([MoveId.WATER_GUN]).enemyAbility(AbilityId.WATER_ABSORB); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; enemy.hp = enemy.getMaxHp() - 1; - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -136,13 +136,13 @@ describe("Inverse Battle", () => { }); it("Fire type does not get burned - Will-O-Wisp against Charmander", async () => { - game.override.moveset([Moves.WILL_O_WISP]).enemySpecies(Species.CHARMANDER); + game.override.moveset([MoveId.WILL_O_WISP]).enemySpecies(Species.CHARMANDER); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.WILL_O_WISP); + game.move.select(MoveId.WILL_O_WISP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.phaseInterceptor.to("MoveEndPhase"); @@ -151,13 +151,13 @@ describe("Inverse Battle", () => { }); it("Electric type does not get paralyzed - Nuzzle against Pikachu", async () => { - game.override.moveset([Moves.NUZZLE]).enemySpecies(Species.PIKACHU).enemyLevel(50); + game.override.moveset([MoveId.NUZZLE]).enemySpecies(Species.PIKACHU).enemyLevel(50); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.NUZZLE); + game.move.select(MoveId.NUZZLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -165,13 +165,13 @@ describe("Inverse Battle", () => { }); it("Ground type is not immune to Thunder Wave - Thunder Wave against Sandshrew", async () => { - game.override.moveset([Moves.THUNDER_WAVE]).enemySpecies(Species.SANDSHREW); + game.override.moveset([MoveId.THUNDER_WAVE]).enemySpecies(Species.SANDSHREW); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.phaseInterceptor.to("MoveEndPhase"); @@ -180,7 +180,7 @@ describe("Inverse Battle", () => { }); it("Anticipation should trigger on 2x effective moves", async () => { - game.override.moveset([Moves.THUNDERBOLT]).enemySpecies(Species.SANDSHREW).enemyAbility(AbilityId.ANTICIPATION); + game.override.moveset([MoveId.THUNDERBOLT]).enemySpecies(Species.SANDSHREW).enemyAbility(AbilityId.ANTICIPATION); await game.challengeMode.startBattle(); @@ -188,13 +188,13 @@ describe("Inverse Battle", () => { }); it("Conversion 2 should change the type to the resistive type - Conversion 2 against Dragonite", async () => { - game.override.moveset([Moves.CONVERSION_2]).enemyMoveset(Moves.DRAGON_CLAW); + game.override.moveset([MoveId.CONVERSION_2]).enemyMoveset(MoveId.DRAGON_CLAW); await game.challengeMode.startBattle(); const player = game.scene.getPlayerPokemon()!; - game.move.select(Moves.CONVERSION_2); + game.move.select(MoveId.CONVERSION_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -203,14 +203,14 @@ describe("Inverse Battle", () => { }); it("Flying Press should be 0.25x effective against Grass + Dark Type - Flying Press against Meowscarada", async () => { - game.override.moveset([Moves.FLYING_PRESS]).enemySpecies(Species.MEOWSCARADA); + game.override.moveset([MoveId.FLYING_PRESS]).enemySpecies(Species.MEOWSCARADA); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FLYING_PRESS); + game.move.select(MoveId.FLYING_PRESS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -218,14 +218,14 @@ describe("Inverse Battle", () => { }); it("Scrappy ability has no effect - Tackle against Ghost Type still 2x effective with Scrappy", async () => { - game.override.moveset([Moves.TACKLE]).ability(AbilityId.SCRAPPY).enemySpecies(Species.GASTLY); + game.override.moveset([MoveId.TACKLE]).ability(AbilityId.SCRAPPY).enemySpecies(Species.GASTLY); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -233,18 +233,18 @@ describe("Inverse Battle", () => { }); it("FORESIGHT has no effect - Tackle against Ghost Type still 2x effective with Foresight", async () => { - game.override.moveset([Moves.FORESIGHT, Moves.TACKLE]).enemySpecies(Species.GASTLY); + game.override.moveset([MoveId.FORESIGHT, MoveId.TACKLE]).enemySpecies(Species.GASTLY); await game.challengeMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FORESIGHT); + game.move.select(MoveId.FORESIGHT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/battle/special_battle.test.ts b/test/battle/special_battle.test.ts index e11917591fc..5b3ca1d2500 100644 --- a/test/battle/special_battle.test.ts +++ b/test/battle/special_battle.test.ts @@ -1,7 +1,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { UiMode } from "#enums/ui-mode"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,10 +26,10 @@ describe("Test Battle Phase", () => { game.override .enemySpecies(Species.RATTATA) .startingLevel(2000) - .moveset([Moves.TACKLE]) + .moveset([MoveId.TACKLE]) .enemyAbility(AbilityId.HYDRATION) .ability(AbilityId.HYDRATION) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); }); it("startBattle 2vs1 boss", async () => { diff --git a/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts index 827b9f48f85..89878af56a1 100644 --- a/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -4,7 +4,7 @@ import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import type BattleScene from "#app/battle-scene"; import { BattlerTagLapseType, BindTag, SubstituteTag } from "#app/data/battler-tags"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { PokemonAnimType } from "#app/enums/pokemon-anim-type"; import * as messages from "#app/messages"; import { allMoves } from "#app/data/data-lists"; @@ -52,7 +52,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("sets the tag's HP to 1/4 of the source's max HP (rounded down)", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); @@ -63,7 +63,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("triggers on-add effects that bring the source out of focus", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( (_pokemon, battleAnimType, _fieldAssets?, _delayed?) => { @@ -82,7 +82,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("removes effects that trap the source", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); @@ -104,7 +104,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("triggers on-remove animation and message", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); subject.sourceInFocus = false; vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( @@ -133,7 +133,7 @@ describe("BattlerTag - SubstituteTag", () => { getLastXMoves: vi .fn() .mockReturnValue([ - { move: Moves.TACKLE, result: MoveResult.SUCCESS } as TurnMove, + { move: MoveId.TACKLE, result: MoveResult.SUCCESS } as TurnMove, ]) as Pokemon["getLastXMoves"], } as unknown as Pokemon; @@ -141,7 +141,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("PRE_MOVE lapse triggers pre-move animation", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( (_pokemon, battleAnimType, _fieldAssets?, _delayed?) => { @@ -160,7 +160,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("AFTER_MOVE lapse triggers post-move animation", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockImplementation( (_pokemon, battleAnimType, _fieldAssets?, _delayed?) => { @@ -180,18 +180,18 @@ describe("BattlerTag - SubstituteTag", () => { // TODO: Figure out how to mock a MoveEffectPhase correctly for this test it.todo("HIT lapse triggers on-hit message", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); const moveEffectPhase = { - move: allMoves[Moves.TACKLE], + move: allMoves[MoveId.TACKLE], getUserPokemon: vi.fn().mockReturnValue(undefined) as MoveEffectPhase["getUserPokemon"], } as MoveEffectPhase; vi.spyOn(mockPokemon.scene as BattleScene, "getCurrentPhase").mockReturnValue(moveEffectPhase); - vi.spyOn(allMoves[Moves.TACKLE], "hitsSubstitute").mockReturnValue(true); + vi.spyOn(allMoves[MoveId.TACKLE], "hitsSubstitute").mockReturnValue(true); expect(subject.lapse(mockPokemon, BattlerTagLapseType.HIT)).toBeTruthy(); @@ -200,7 +200,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("CUSTOM lapse flags the tag for removal", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); @@ -209,7 +209,7 @@ describe("BattlerTag - SubstituteTag", () => { }); it("Unsupported lapse type does nothing", async () => { - const subject = new SubstituteTag(Moves.SUBSTITUTE, mockPokemon.id); + const subject = new SubstituteTag(MoveId.SUBSTITUTE, mockPokemon.id); vi.spyOn(mockPokemon.scene as BattleScene, "triggerPokemonBattleAnim").mockReturnValue(true); vi.spyOn(mockPokemon.scene as BattleScene, "queueMessage").mockReturnValue(); diff --git a/test/boss-pokemon.test.ts b/test/boss-pokemon.test.ts index a83c0155480..fa798253404 100644 --- a/test/boss-pokemon.test.ts +++ b/test/boss-pokemon.test.ts @@ -3,7 +3,7 @@ import GameManager from "#test/testUtils/gameManager"; import { Species } from "#app/enums/species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { EFFECTIVE_STATS } from "#app/enums/stat"; import type { EnemyPokemon } from "#app/field/pokemon"; import { toDmgValue } from "#app/utils/common"; @@ -30,10 +30,10 @@ describe("Boss Pokemon / Shields", () => { .disableTrainerWaves() .disableCrits() .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyHeldItems([]) .startingLevel(1000) - .moveset([Moves.FALSE_SWIPE, Moves.SUPER_FANG, Moves.SPLASH, Moves.PSYCHIC]) + .moveset([MoveId.FALSE_SWIPE, MoveId.SUPER_FANG, MoveId.SPLASH, MoveId.PSYCHIC]) .ability(AbilityId.NO_GUARD); }); @@ -86,7 +86,7 @@ describe("Boss Pokemon / Shields", () => { expect(enemyPokemon.bossSegments).toBe(3); expect(getTotalStatStageBoosts(enemyPokemon)).toBe(0); - game.move.select(Moves.SUPER_FANG); // Enough to break the first shield + game.move.select(MoveId.SUPER_FANG); // Enough to break the first shield await game.toNextTurn(); // Broke 1st of 2 shields, health at 2/3rd @@ -95,7 +95,7 @@ describe("Boss Pokemon / Shields", () => { // Breaking the shield gives a +1 boost to ATK, DEF, SP ATK, SP DEF or SPD expect(getTotalStatStageBoosts(enemyPokemon)).toBe(1); - game.move.select(Moves.FALSE_SWIPE); // Enough to break last shield but not kill + game.move.select(MoveId.FALSE_SWIPE); // Enough to break last shield but not kill await game.toNextTurn(); expect(enemyPokemon.bossSegmentIndex).toBe(0); @@ -160,7 +160,7 @@ describe("Boss Pokemon / Shields", () => { expect(boss1.bossSegmentIndex).toBe(shieldsToBreak - i); expect(boss1.hp).toBe(boss1.getMaxHp() - toDmgValue(boss1SegmentHp * i)); // Do nothing and go to next turn so that the StatStageChangePhase gets applied - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // All broken shields give +1 stat boost, except the last two that gives +2 totalStatStages += i >= shieldsToBreak - 1 ? 2 : 1; @@ -181,7 +181,7 @@ describe("Boss Pokemon / Shields", () => { expect(boss2.bossSegmentIndex).toBe(0); expect(boss2.hp).toBe(boss2.getMaxHp() - toDmgValue(boss2SegmentHp * shieldsToBreak)); // Do nothing and go to next turn so that the StatStageChangePhase gets applied - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(getTotalStatStageBoosts(boss2)).toBe(totalStatStages); }); @@ -196,7 +196,7 @@ describe("Boss Pokemon / Shields", () => { expect(enemyPokemon.bossSegments).toBe(2); expect(getTotalStatStageBoosts(enemyPokemon)).toBe(0); - game.move.select(Moves.PSYCHIC); + game.move.select(MoveId.PSYCHIC); await game.toNextTurn(); // Enemy survived with Sturdy diff --git a/test/daily_mode.test.ts b/test/daily_mode.test.ts index a5901da4821..820a5b5ddb6 100644 --- a/test/daily_mode.test.ts +++ b/test/daily_mode.test.ts @@ -1,5 +1,5 @@ import { Biome } from "#app/enums/biome"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { MapModifier } from "#app/modifier/modifier"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; @@ -60,8 +60,8 @@ describe("Shop modifications", async () => { .battleStyle("single") .startingLevel(100) // Avoid levelling up .disableTrainerWaves() - .moveset([Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH); game.modifiers.addCheck("EVIOLITE").addCheck("MINI_BLACK_HOLE"); vi.spyOn(pokerogueApi.daily, "getSeed").mockResolvedValue("test-seed"); }); @@ -73,7 +73,7 @@ describe("Shop modifications", async () => { it("should not have Eviolite and Mini Black Hole available in Classic if not unlocked", async () => { await game.classicMode.startBattle([Species.BULBASAUR]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("BattleEndPhase"); game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { @@ -84,7 +84,7 @@ describe("Shop modifications", async () => { it("should have Eviolite and Mini Black Hole available in Daily", async () => { await game.dailyMode.startBattle(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("BattleEndPhase"); game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { diff --git a/test/data/status_effect.test.ts b/test/data/status_effect.test.ts index 7c3ff3c25ea..3ae6cfffff6 100644 --- a/test/data/status_effect.test.ts +++ b/test/data/status_effect.test.ts @@ -8,7 +8,7 @@ import { } from "#app/data/status-effect"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -320,9 +320,9 @@ describe("Status Effects", () => { game.override .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) - .moveset([Moves.QUICK_ATTACK]) + .moveset([MoveId.QUICK_ATTACK]) .ability(AbilityId.BALL_FETCH) .statusEffect(StatusEffect.PARALYSIS); }); @@ -330,7 +330,7 @@ describe("Status Effects", () => { it("causes the pokemon's move to fail when activated", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.move.forceStatusActivation(true); await game.toNextTurn(); @@ -356,13 +356,13 @@ describe("Status Effects", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should last the appropriate number of turns", async () => { @@ -371,23 +371,23 @@ describe("Status Effects", () => { const player = game.scene.getPlayerPokemon()!; player.status = new Status(StatusEffect.SLEEP, 0, 4); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status.effect).toBe(StatusEffect.SLEEP); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(player.status?.effect).toBeUndefined(); @@ -412,13 +412,13 @@ describe("Status Effects", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.NUZZLE) + .enemyMoveset(MoveId.NUZZLE) .enemyLevel(2000); }); diff --git a/test/enemy_command.test.ts b/test/enemy_command.test.ts index f9ec51f51dc..24d1bc70b08 100644 --- a/test/enemy_command.test.ts +++ b/test/enemy_command.test.ts @@ -2,7 +2,7 @@ import type BattleScene from "#app/battle-scene"; import { allMoves } from "#app/data/data-lists"; import { MoveCategory } from "#enums/MoveCategory"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import type { EnemyPokemon } from "#app/field/pokemon"; import { AiType } from "#app/field/pokemon"; @@ -55,7 +55,7 @@ describe("Enemy Commands - Move Selection", () => { it("should never use Status moves if an attack can KO", async () => { game.override .enemySpecies(Species.ETERNATUS) - .enemyMoveset([Moves.ETERNABEAM, Moves.SLUDGE_BOMB, Moves.DRAGON_DANCE, Moves.COSMIC_POWER]) + .enemyMoveset([MoveId.ETERNABEAM, MoveId.SLUDGE_BOMB, MoveId.DRAGON_DANCE, MoveId.COSMIC_POWER]) .startingLevel(1) .enemyLevel(100); @@ -79,7 +79,7 @@ describe("Enemy Commands - Move Selection", () => { it("should not select Last Resort if it would fail, even if the move KOs otherwise", async () => { game.override .enemySpecies(Species.KANGASKHAN) - .enemyMoveset([Moves.LAST_RESORT, Moves.GIGA_IMPACT, Moves.SPLASH, Moves.SWORDS_DANCE]) + .enemyMoveset([MoveId.LAST_RESORT, MoveId.GIGA_IMPACT, MoveId.SPLASH, MoveId.SWORDS_DANCE]) .startingLevel(1) .enemyLevel(100); @@ -94,7 +94,7 @@ describe("Enemy Commands - Move Selection", () => { getEnemyMoveChoices(enemyPokemon, moveChoices); enemyMoveset.forEach(mv => { - if (mv?.getMove().category === MoveCategory.STATUS || mv?.moveId === Moves.LAST_RESORT) { + if (mv?.getMove().category === MoveCategory.STATUS || mv?.moveId === MoveId.LAST_RESORT) { expect(moveChoices[mv.moveId]).toBe(0); } }); diff --git a/test/evolution.test.ts b/test/evolution.test.ts index f5ccc29a54f..074ac054e7b 100644 --- a/test/evolution.test.ts +++ b/test/evolution.test.ts @@ -4,7 +4,7 @@ import { SpeciesWildEvolutionDelay, } from "#app/data/balance/pokemon-evolutions"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import * as Utils from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; @@ -103,9 +103,9 @@ describe("Evolution", () => { it("should increase both HP and max HP when evolving", async () => { game.override - .moveset([Moves.SURF]) + .moveset([MoveId.SURF]) .enemySpecies(Species.GOLEM) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingWave(21) .startingLevel(16) .enemyLevel(50); @@ -122,7 +122,7 @@ describe("Evolution", () => { expect(golem.hp).toBe(1); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("EndEvolutionPhase"); expect(totodile.hp).toBe(totodile.getMaxHp()); @@ -131,9 +131,9 @@ describe("Evolution", () => { it("should not fully heal HP when evolving", async () => { game.override - .moveset([Moves.SURF]) + .moveset([MoveId.SURF]) .enemySpecies(Species.GOLEM) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingWave(21) .startingLevel(13) .enemyLevel(30); @@ -152,7 +152,7 @@ describe("Evolution", () => { expect(golem.hp).toBe(1); - game.move.select(Moves.SURF); + game.move.select(MoveId.SURF); await game.phaseInterceptor.to("EndEvolutionPhase"); expect(cyndaquil.getMaxHp()).toBeGreaterThan(maxHpBefore); diff --git a/test/field/pokemon.test.ts b/test/field/pokemon.test.ts index f763ab2c401..ce467d8d16c 100644 --- a/test/field/pokemon.test.ts +++ b/test/field/pokemon.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import GameManager from "#test/testUtils/gameManager"; import { PokeballType } from "#enums/pokeball"; import type BattleScene from "#app/battle-scene"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { PokemonType } from "#enums/pokemon-type"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; @@ -74,8 +74,8 @@ describe("Spec - Pokemon", () => { const fanRotom = game.scene.getPlayerPokemon()!; - expect(fanRotom.compatibleTms).not.toContain(Moves.BLIZZARD); - expect(fanRotom.compatibleTms).toContain(Moves.AIR_SLASH); + expect(fanRotom.compatibleTms).not.toContain(MoveId.BLIZZARD); + expect(fanRotom.compatibleTms).toContain(MoveId.AIR_SLASH); }); describe("Get correct fusion type", () => { diff --git a/test/final_boss.test.ts b/test/final_boss.test.ts index 6ade7724518..bb0b54c4d24 100644 --- a/test/final_boss.test.ts +++ b/test/final_boss.test.ts @@ -2,7 +2,7 @@ import { GameModes } from "#app/game-mode"; import { TurnHeldItemTransferModifier } from "#app/modifier/modifier"; import { AbilityId } from "#enums/ability-id"; import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -28,8 +28,8 @@ describe("Final Boss", () => { .startingWave(FinalWave.Classic) .startingBiome(Biome.END) .disableCrits() - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.SPLASH, Moves.WILL_O_WISP, Moves.DRAGON_PULSE]) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.SPLASH, MoveId.WILL_O_WISP, MoveId.DRAGON_PULSE]) .startingLevel(10000); }); @@ -83,7 +83,7 @@ describe("Final Boss", () => { expect(eternatus.bossSegments).toBe(4); expect(eternatus.bossSegmentIndex).toBe(3); - game.move.select(Moves.DRAGON_PULSE); + game.move.select(MoveId.DRAGON_PULSE); await game.toNextTurn(); // Eternatus phase 2: changed form, healed and restored its shields @@ -112,7 +112,7 @@ describe("Final Boss", () => { expect(eternatus.bossSegments).toBe(4); expect(eternatus.bossSegmentIndex).toBe(3); - game.move.select(Moves.WILL_O_WISP); + game.move.select(MoveId.WILL_O_WISP); await game.toNextTurn(); expect(eternatus.status?.effect).toBe(StatusEffect.BURN); @@ -120,13 +120,13 @@ describe("Final Boss", () => { const lastShieldHp = Math.ceil(phase1Hp / eternatus.bossSegments); // Stall until the burn is one hit away from breaking the last shield while (eternatus.hp - tickDamage > lastShieldHp) { - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); } expect(eternatus.bossSegmentIndex).toBe(1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Eternatus phase 2: changed form, healed and restored its shields diff --git a/test/items/dire_hit.test.ts b/test/items/dire_hit.test.ts index e848bceb514..8f4e178468f 100644 --- a/test/items/dire_hit.test.ts +++ b/test/items/dire_hit.test.ts @@ -1,5 +1,5 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -33,8 +33,8 @@ describe("Items - Dire Hit", () => { game.override .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.POUND]) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.POUND]) .startingHeldItems([{ name: "DIRE_HIT" }]) .battleStyle("single"); }, 20000); @@ -46,7 +46,7 @@ describe("Items - Dire Hit", () => { vi.spyOn(enemyPokemon, "getCritStage"); - game.move.select(Moves.POUND); + game.move.select(MoveId.POUND); await game.phaseInterceptor.to(TurnEndPhase); @@ -58,7 +58,7 @@ describe("Items - Dire Hit", () => { await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); diff --git a/test/items/double_battle_chance_booster.test.ts b/test/items/double_battle_chance_booster.test.ts index 68a29ef823e..8fcc039def6 100644 --- a/test/items/double_battle_chance_booster.test.ts +++ b/test/items/double_battle_chance_booster.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { DoubleBattleChanceBoosterModifier } from "#app/modifier/modifier"; import GameManager from "#test/testUtils/gameManager"; @@ -50,12 +50,12 @@ describe("Items - Double Battle Chance Boosters", () => { game.override .startingModifier([{ name: "LURE" }]) .itemRewards([{ name: "LURE" }]) - .moveset(Moves.SPLASH) + .moveset(MoveId.SPLASH) .startingLevel(200); await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); diff --git a/test/items/grip_claw.test.ts b/test/items/grip_claw.test.ts index d16de60185e..21b477036b6 100644 --- a/test/items/grip_claw.test.ts +++ b/test/items/grip_claw.test.ts @@ -3,7 +3,7 @@ import type Pokemon from "#app/field/pokemon"; import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; import { AbilityId } from "#enums/ability-id"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -28,12 +28,12 @@ describe("Items - Grip Claw", () => { game.override .battleStyle("double") - .moveset([Moves.TACKLE, Moves.SPLASH, Moves.ATTRACT]) + .moveset([MoveId.TACKLE, MoveId.SPLASH, MoveId.ATTRACT]) .startingHeldItems([{ name: "GRIP_CLAW", count: 1 }]) .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.UNNERVE) .ability(AbilityId.UNNERVE) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyHeldItems([ { name: "BERRY", type: BerryType.SITRUS, count: 2 }, { name: "BERRY", type: BerryType.LUM, count: 2 }, @@ -56,8 +56,8 @@ describe("Items - Grip Claw", () => { const enemy2HeldItemCount = getHeldItemCount(enemyPokemon[1]); expect(enemy2HeldItemCount).toBeGreaterThan(0); - game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TACKLE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -85,8 +85,8 @@ describe("Items - Grip Claw", () => { const enemy2HeldItemCount = getHeldItemCount(enemyPokemon[1]); expect(enemy2HeldItemCount).toBeGreaterThan(0); - game.move.select(Moves.ATTRACT, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.ATTRACT, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -102,7 +102,7 @@ describe("Items - Grip Claw", () => { it("should not allow Pollen Puff to steal items when healing ally", async () => { game.override .battleStyle("double") - .moveset([Moves.POLLEN_PUFF, Moves.ENDURE]) + .moveset([MoveId.POLLEN_PUFF, MoveId.ENDURE]) .startingHeldItems([ { name: "GRIP_CLAW", count: 1 }, { name: "BERRY", type: BerryType.LUM, count: 1 }, @@ -116,8 +116,8 @@ describe("Items - Grip Claw", () => { const heldItemCountBefore = getHeldItemCount(rightPokemon); - game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.ENDURE, 1); + game.move.select(MoveId.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(MoveId.ENDURE, 1); await game.toNextTurn(); diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index be2aa73299c..7ec24a45173 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -1,6 +1,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { randInt } from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -25,9 +25,9 @@ describe("Items - Leek", () => { game.override .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingHeldItems([{ name: "LEEK" }]) - .moveset([Moves.TACKLE]) + .moveset([MoveId.TACKLE]) .battleStyle("single"); }); @@ -38,7 +38,7 @@ describe("Items - Leek", () => { vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -52,7 +52,7 @@ describe("Items - Leek", () => { vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -66,7 +66,7 @@ describe("Items - Leek", () => { vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -94,7 +94,7 @@ describe("Items - Leek", () => { vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -122,7 +122,7 @@ describe("Items - Leek", () => { vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -136,7 +136,7 @@ describe("Items - Leek", () => { vi.spyOn(enemyMember, "getCritStage"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/items/leftovers.test.ts b/test/items/leftovers.test.ts index 60fd976a1b1..12649d9d2ac 100644 --- a/test/items/leftovers.test.ts +++ b/test/items/leftovers.test.ts @@ -1,7 +1,7 @@ import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,10 +27,10 @@ describe("Items - Leftovers", () => { .battleStyle("single") .startingLevel(2000) .ability(AbilityId.UNNERVE) - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .enemySpecies(Species.SHUCKLE) .enemyAbility(AbilityId.UNNERVE) - .enemyMoveset(Moves.TACKLE) + .enemyMoveset(MoveId.TACKLE) .startingHeldItems([{ name: "LEFTOVERS", count: 1 }]); }); @@ -45,7 +45,7 @@ describe("Items - Leftovers", () => { // We should have full hp expect(leadPokemon.isFullHp()).toBe(true); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); // We should have less hp after the attack await game.phaseInterceptor.to(DamageAnimPhase, false); diff --git a/test/items/lock_capsule.test.ts b/test/items/lock_capsule.test.ts index 90b55c7b933..2a2f3593a57 100644 --- a/test/items/lock_capsule.test.ts +++ b/test/items/lock_capsule.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { UiMode } from "#enums/ui-mode"; @@ -27,7 +27,7 @@ describe("Items - Lock Capsule", () => { game.override .battleStyle("single") .startingLevel(200) - .moveset([Moves.SURF]) + .moveset([MoveId.SURF]) .enemyAbility(AbilityId.BALL_FETCH) .startingModifier([{ name: "LOCK_CAPSULE" }]); }); diff --git a/test/items/multi_lens.test.ts b/test/items/multi_lens.test.ts index b7be8675d00..a4833bb0512 100644 --- a/test/items/multi_lens.test.ts +++ b/test/items/multi_lens.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,14 +24,14 @@ describe("Items - Multi Lens", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TACKLE, Moves.TRAILBLAZE, Moves.TACHYON_CUTTER, Moves.FUTURE_SIGHT]) + .moveset([MoveId.TACKLE, MoveId.TRAILBLAZE, MoveId.TACHYON_CUTTER, MoveId.FUTURE_SIGHT]) .ability(AbilityId.BALL_FETCH) .startingHeldItems([{ name: "MULTI_LENS" }]) .battleStyle("single") .disableCrits() .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(99) // Check for proper rounding on Seismic Toss damage reduction .enemyLevel(99); }); @@ -50,7 +50,7 @@ describe("Items - Multi Lens", () => { const spy = vi.spyOn(enemyPokemon, "getAttackDamage"); vi.spyOn(enemyPokemon, "getBaseDamage").mockReturnValue(100); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -69,7 +69,7 @@ describe("Items - Multi Lens", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -81,7 +81,7 @@ describe("Items - Multi Lens", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TRAILBLAZE); + game.move.select(MoveId.TRAILBLAZE); await game.phaseInterceptor.to("BerryPhase", false); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(2); @@ -92,21 +92,21 @@ describe("Items - Multi Lens", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TACHYON_CUTTER); + game.move.select(MoveId.TACHYON_CUTTER); await game.phaseInterceptor.to("BerryPhase", false); expect(playerPokemon.turnData.hitCount).toBe(2); }); it("should enhance multi-target moves", async () => { - game.override.battleStyle("double").moveset([Moves.SWIFT, Moves.SPLASH]); + game.override.battleStyle("double").moveset([MoveId.SWIFT, MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const [magikarp] = game.scene.getPlayerField(); - game.move.select(Moves.SWIFT, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SWIFT, 0); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -116,7 +116,7 @@ describe("Items - Multi Lens", () => { }); it("should enhance fixed-damage moves while also applying damage reduction", async () => { - game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]).moveset(Moves.SEISMIC_TOSS); + game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]).moveset(MoveId.SEISMIC_TOSS); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -124,7 +124,7 @@ describe("Items - Multi Lens", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; const spy = vi.spyOn(enemyPokemon, "getAttackDamage"); - game.move.select(Moves.SEISMIC_TOSS); + game.move.select(MoveId.SEISMIC_TOSS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -138,7 +138,7 @@ describe("Items - Multi Lens", () => { it("should result in correct damage for hp% attacks with 1 lens", async () => { game.override .startingHeldItems([{ name: "MULTI_LENS", count: 1 }]) - .moveset(Moves.SUPER_FANG) + .moveset(MoveId.SUPER_FANG) .ability(AbilityId.COMPOUND_EYES) .enemyLevel(1000) .enemySpecies(Species.BLISSEY); // allows for unrealistically high levels of accuracy @@ -147,7 +147,7 @@ describe("Items - Multi Lens", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SUPER_FANG); + game.move.select(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemyPokemon.getHpRatio()).toBeCloseTo(0.5, 5); @@ -156,9 +156,9 @@ describe("Items - Multi Lens", () => { it("should result in correct damage for hp% attacks with 2 lenses", async () => { game.override .startingHeldItems([{ name: "MULTI_LENS", count: 2 }]) - .moveset(Moves.SUPER_FANG) + .moveset(MoveId.SUPER_FANG) .ability(AbilityId.COMPOUND_EYES) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(1000) .enemySpecies(Species.BLISSEY); // allows for unrealistically high levels of accuracy @@ -166,7 +166,7 @@ describe("Items - Multi Lens", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SUPER_FANG); + game.move.select(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemyPokemon.getHpRatio()).toBeCloseTo(0.5, 5); @@ -175,10 +175,10 @@ describe("Items - Multi Lens", () => { it("should result in correct damage for hp% attacks with 2 lenses + Parental Bond", async () => { game.override .startingHeldItems([{ name: "MULTI_LENS", count: 2 }]) - .moveset(Moves.SUPER_FANG) + .moveset(MoveId.SUPER_FANG) .ability(AbilityId.PARENTAL_BOND) .passiveAbility(AbilityId.COMPOUND_EYES) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(1000) .enemySpecies(Species.BLISSEY); // allows for unrealistically high levels of accuracy @@ -186,7 +186,7 @@ describe("Items - Multi Lens", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SUPER_FANG); + game.move.select(MoveId.SUPER_FANG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemyPokemon.getHpRatio()).toBeCloseTo(0.25, 5); @@ -199,7 +199,7 @@ describe("Items - Multi Lens", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "damageAndUpdate"); - game.move.select(Moves.FUTURE_SIGHT); + game.move.select(MoveId.FUTURE_SIGHT); await game.toNextTurn(); game.doSwitchPokemon(1); @@ -213,15 +213,15 @@ describe("Items - Multi Lens", () => { }); it("should not allow Pollen Puff to heal ally more than once", async () => { - game.override.battleStyle("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]); + game.override.battleStyle("double").moveset([MoveId.POLLEN_PUFF, MoveId.ENDURE]); await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); const [, rightPokemon] = game.scene.getPlayerField(); rightPokemon.damageAndUpdate(rightPokemon.hp - 1); - game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.ENDURE, 1); + game.move.select(MoveId.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(MoveId.ENDURE, 1); await game.toNextTurn(); diff --git a/test/items/mystical_rock.test.ts b/test/items/mystical_rock.test.ts index 2eb52ad9958..f68ef999fc7 100644 --- a/test/items/mystical_rock.test.ts +++ b/test/items/mystical_rock.test.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { AbilityId } from "#enums/ability-id"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -25,9 +25,9 @@ describe("Items - Mystical Rock", () => { game.override .enemySpecies(Species.SHUCKLE) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) - .moveset([Moves.SUNNY_DAY, Moves.GRASSY_TERRAIN]) + .moveset([MoveId.SUNNY_DAY, MoveId.GRASSY_TERRAIN]) .startingHeldItems([{ name: "MYSTICAL_ROCK", count: 2 }]) .battleStyle("single"); }); @@ -35,7 +35,7 @@ describe("Items - Mystical Rock", () => { it("should increase weather duration by +2 turns per stack", async () => { await game.classicMode.startBattle([Species.GASTLY]); - game.move.select(Moves.SUNNY_DAY); + game.move.select(MoveId.SUNNY_DAY); await game.phaseInterceptor.to("MoveEndPhase"); @@ -48,7 +48,7 @@ describe("Items - Mystical Rock", () => { it("should increase terrain duration by +2 turns per stack", async () => { await game.classicMode.startBattle([Species.GASTLY]); - game.move.select(Moves.GRASSY_TERRAIN); + game.move.select(MoveId.GRASSY_TERRAIN); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index 621fd20ca0f..5111efc5d9d 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -3,7 +3,7 @@ import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { PokemonInstantReviveModifier } from "#app/modifier/modifier"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,7 +26,7 @@ describe("Items - Reviver Seed", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.TACKLE, Moves.ENDURE]) + .moveset([MoveId.SPLASH, MoveId.TACKLE, MoveId.ENDURE]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() @@ -34,20 +34,20 @@ describe("Items - Reviver Seed", () => { .enemyAbility(AbilityId.BALL_FETCH) .startingHeldItems([{ name: "REVIVER_SEED" }]) .enemyHeldItems([{ name: "REVIVER_SEED" }]) - .enemyMoveset(Moves.SPLASH); - vi.spyOn(allMoves[Moves.SHEER_COLD], "accuracy", "get").mockReturnValue(100); - vi.spyOn(allMoves[Moves.LEECH_SEED], "accuracy", "get").mockReturnValue(100); - vi.spyOn(allMoves[Moves.WHIRLPOOL], "accuracy", "get").mockReturnValue(100); - vi.spyOn(allMoves[Moves.WILL_O_WISP], "accuracy", "get").mockReturnValue(100); + .enemyMoveset(MoveId.SPLASH); + vi.spyOn(allMoves[MoveId.SHEER_COLD], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.LEECH_SEED], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.WHIRLPOOL], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.WILL_O_WISP], "accuracy", "get").mockReturnValue(100); }); it.each([ - { moveType: "Special Move", move: Moves.WATER_GUN }, - { moveType: "Physical Move", move: Moves.TACKLE }, - { moveType: "Fixed Damage Move", move: Moves.SEISMIC_TOSS }, - { moveType: "Final Gambit", move: Moves.FINAL_GAMBIT }, - { moveType: "Counter", move: Moves.COUNTER }, - { moveType: "OHKO", move: Moves.SHEER_COLD }, + { moveType: "Special Move", move: MoveId.WATER_GUN }, + { moveType: "Physical Move", move: MoveId.TACKLE }, + { moveType: "Fixed Damage Move", move: MoveId.SEISMIC_TOSS }, + { moveType: "Final Gambit", move: MoveId.FINAL_GAMBIT }, + { moveType: "Counter", move: MoveId.COUNTER }, + { moveType: "OHKO", move: MoveId.SHEER_COLD }, ])("should activate the holder's reviver seed from a $moveType", async ({ move }) => { game.override.enemyLevel(100).startingLevel(1).enemyMoveset(move); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); @@ -57,14 +57,14 @@ describe("Items - Reviver Seed", () => { const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; vi.spyOn(reviverSeed, "apply"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase"); expect(player.isFainted()).toBeFalsy(); }); it("should activate the holder's reviver seed from confusion self-hit", async () => { - game.override.enemyLevel(1).startingLevel(100).enemyMoveset(Moves.SPLASH); + game.override.enemyLevel(1).startingLevel(100).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); @@ -74,7 +74,7 @@ describe("Items - Reviver Seed", () => { vi.spyOn(reviverSeed, "apply"); vi.spyOn(player, "randBattleSeedInt").mockReturnValue(0); // Force confusion self-hit - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase"); expect(player.isFainted()).toBeFalsy(); @@ -82,18 +82,18 @@ describe("Items - Reviver Seed", () => { // Damaging opponents tests it.each([ - { moveType: "Damaging Move Chip Damage", move: Moves.SALT_CURE }, - { moveType: "Chip Damage", move: Moves.LEECH_SEED }, - { moveType: "Trapping Chip Damage", move: Moves.WHIRLPOOL }, - { moveType: "Status Effect Damage", move: Moves.WILL_O_WISP }, - { moveType: "Weather", move: Moves.SANDSTORM }, + { moveType: "Damaging Move Chip Damage", move: MoveId.SALT_CURE }, + { moveType: "Chip Damage", move: MoveId.LEECH_SEED }, + { moveType: "Trapping Chip Damage", move: MoveId.WHIRLPOOL }, + { moveType: "Status Effect Damage", move: MoveId.WILL_O_WISP }, + { moveType: "Weather", move: MoveId.SANDSTORM }, ])("should not activate the holder's reviver seed from $moveType", async ({ move }) => { game.override .enemyLevel(1) .startingLevel(100) .enemySpecies(Species.MAGIKARP) .moveset(move) - .enemyMoveset(Moves.ENDURE); + .enemyMoveset(MoveId.ENDURE); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; enemy.damageAndUpdate(enemy.hp - 1); @@ -106,10 +106,10 @@ describe("Items - Reviver Seed", () => { // Self-damage tests it.each([ - { moveType: "Recoil", move: Moves.DOUBLE_EDGE }, - { moveType: "Self-KO", move: Moves.EXPLOSION }, - { moveType: "Self-Deduction", move: Moves.CURSE }, - { moveType: "Liquid Ooze", move: Moves.GIGA_DRAIN }, + { moveType: "Recoil", move: MoveId.DOUBLE_EDGE }, + { moveType: "Self-KO", move: MoveId.EXPLOSION }, + { moveType: "Self-Deduction", move: MoveId.CURSE }, + { moveType: "Liquid Ooze", move: MoveId.GIGA_DRAIN }, ])("should not activate the holder's reviver seed from $moveType", async ({ move }) => { game.override .enemyLevel(100) @@ -117,7 +117,7 @@ describe("Items - Reviver Seed", () => { .enemySpecies(Species.MAGIKARP) .moveset(move) .enemyAbility(AbilityId.LIQUID_OOZE) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.GASTLY, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); @@ -136,15 +136,15 @@ describe("Items - Reviver Seed", () => { .enemyLevel(100) .startingLevel(1) .enemySpecies(Species.MAGIKARP) - .moveset(Moves.DESTINY_BOND) + .moveset(MoveId.DESTINY_BOND) .startingHeldItems([]) // reset held items to nothing so user doesn't revive and not trigger Destiny Bond - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DESTINY_BOND); + game.move.select(MoveId.DESTINY_BOND); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/items/scope_lens.test.ts b/test/items/scope_lens.test.ts index c8061ea3696..6b3c5cd6068 100644 --- a/test/items/scope_lens.test.ts +++ b/test/items/scope_lens.test.ts @@ -1,5 +1,5 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -24,8 +24,8 @@ describe("Items - Scope Lens", () => { game.override .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.POUND]) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.POUND]) .startingHeldItems([{ name: "SCOPE_LENS" }]) .battleStyle("single"); }, 20000); @@ -37,7 +37,7 @@ describe("Items - Scope Lens", () => { vi.spyOn(enemyPokemon, "getCritStage"); - game.move.select(Moves.POUND); + game.move.select(MoveId.POUND); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/items/temp_stat_stage_booster.test.ts b/test/items/temp_stat_stage_booster.test.ts index 0958db676d2..6ccebce2225 100644 --- a/test/items/temp_stat_stage_booster.test.ts +++ b/test/items/temp_stat_stage_booster.test.ts @@ -3,7 +3,7 @@ import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; import { TempStatStageBoosterModifier } from "#app/modifier/modifier"; @@ -32,9 +32,9 @@ describe("Items - Temporary Stat Stage Boosters", () => { game.override .battleStyle("single") .enemySpecies(Species.SHUCKLE) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) - .moveset([Moves.TACKLE, Moves.SPLASH, Moves.HONE_CLAWS, Moves.BELLY_DRUM]) + .moveset([MoveId.TACKLE, MoveId.SPLASH, MoveId.HONE_CLAWS, MoveId.BELLY_DRUM]) .startingModifier([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ATK }]); }); @@ -45,7 +45,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { vi.spyOn(partyMember, "getStatStageMultiplier"); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.runFrom("EnemyCommandPhase").to(TurnEndPhase); @@ -62,11 +62,11 @@ describe("Items - Temporary Stat Stage Boosters", () => { vi.spyOn(partyMember, "getAccuracyMultiplier"); // Raise ACC by +2 stat stages - game.move.select(Moves.HONE_CLAWS); + game.move.select(MoveId.HONE_CLAWS); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -82,11 +82,11 @@ describe("Items - Temporary Stat Stage Boosters", () => { vi.spyOn(partyMember, "getStatStageMultiplier"); // Raise ATK by +1 stat stage - game.move.select(Moves.HONE_CLAWS); + game.move.select(MoveId.HONE_CLAWS); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -110,7 +110,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { // Set all stat stages to 6 vi.spyOn(partyMember.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(6)); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(TurnEndPhase); @@ -123,7 +123,7 @@ describe("Items - Temporary Stat Stage Boosters", () => { await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); diff --git a/test/items/toxic_orb.test.ts b/test/items/toxic_orb.test.ts index 67814b98e8d..ae1faa34346 100644 --- a/test/items/toxic_orb.test.ts +++ b/test/items/toxic_orb.test.ts @@ -1,6 +1,6 @@ import i18next from "#app/plugins/i18n"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -28,8 +28,8 @@ describe("Items - Toxic orb", () => { .enemySpecies(Species.MAGIKARP) .ability(AbilityId.BALL_FETCH) .enemyAbility(AbilityId.BALL_FETCH) - .moveset(Moves.SPLASH) - .enemyMoveset(Moves.SPLASH) + .moveset(MoveId.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingHeldItems([ { name: "TOXIC_ORB", @@ -45,7 +45,7 @@ describe("Items - Toxic orb", () => { const player = game.scene.getPlayerPokemon()!; expect(player.getHeldItems()[0].type.id).toBe("TOXIC_ORB"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("MessagePhase"); diff --git a/test/moves/after_you.test.ts b/test/moves/after_you.test.ts index fa7563c3f52..b742e57b4c3 100644 --- a/test/moves/after_you.test.ts +++ b/test/moves/after_you.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; import { MoveResult } from "#app/field/pokemon"; import { MovePhase } from "#app/phases/move-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,16 +29,16 @@ describe("Moves - After You", () => { .enemyLevel(5) .enemySpecies(Species.PIKACHU) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .ability(AbilityId.BALL_FETCH) - .moveset([Moves.AFTER_YOU, Moves.SPLASH]); + .moveset([MoveId.AFTER_YOU, MoveId.SPLASH]); }); it("makes the target move immediately after the user", async () => { await game.classicMode.startBattle([Species.REGIELEKI, Species.SHUCKLE]); - game.move.select(Moves.AFTER_YOU, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.AFTER_YOU, 0, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("MoveEffectPhase"); await game.phaseInterceptor.to(MovePhase, false); @@ -51,8 +51,8 @@ describe("Moves - After You", () => { game.override.enemySpecies(Species.SHUCKLE); await game.classicMode.startBattle([Species.REGIELEKI, Species.PIKACHU]); - game.move.select(Moves.SPLASH); - game.move.select(Moves.AFTER_YOU, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.AFTER_YOU, 1, BattlerIndex.PLAYER); await game.phaseInterceptor.to("MoveEndPhase"); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/moves/alluring_voice.test.ts b/test/moves/alluring_voice.test.ts index 05fe4d5586f..5cd1549cfee 100644 --- a/test/moves/alluring_voice.test.ts +++ b/test/moves/alluring_voice.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,7 +29,7 @@ describe("Moves - Alluring Voice", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.ICE_SCALES) - .enemyMoveset(Moves.HOWL) + .enemyMoveset(MoveId.HOWL) .startingLevel(10) .enemyLevel(10) .ability(AbilityId.BALL_FETCH); @@ -40,7 +40,7 @@ describe("Moves - Alluring Voice", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.use(Moves.ALLURING_VOICE); + game.move.use(MoveId.ALLURING_VOICE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(BerryPhase); diff --git a/test/moves/aromatherapy.test.ts b/test/moves/aromatherapy.test.ts index 0eaf8455c77..5661f9a96f0 100644 --- a/test/moves/aromatherapy.test.ts +++ b/test/moves/aromatherapy.test.ts @@ -1,7 +1,7 @@ import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,11 +24,11 @@ describe("Moves - Aromatherapy", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.AROMATHERAPY, Moves.SPLASH]) + .moveset([MoveId.AROMATHERAPY, MoveId.SPLASH]) .statusEffect(StatusEffect.BURN) .battleStyle("double") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should cure status effect of the user, its ally, and all party pokemon", async () => { @@ -39,9 +39,9 @@ describe("Moves - Aromatherapy", () => { vi.spyOn(rightPlayer, "resetStatus"); vi.spyOn(partyPokemon, "resetStatus"); - game.move.select(Moves.AROMATHERAPY, 0); + game.move.select(MoveId.AROMATHERAPY, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); @@ -61,9 +61,9 @@ describe("Moves - Aromatherapy", () => { vi.spyOn(leftOpp, "resetStatus"); vi.spyOn(rightOpp, "resetStatus"); - game.move.select(Moves.AROMATHERAPY, 0); + game.move.select(MoveId.AROMATHERAPY, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftOpp.resetStatus).toHaveBeenCalledTimes(0); @@ -85,9 +85,9 @@ describe("Moves - Aromatherapy", () => { vi.spyOn(rightPlayer, "resetStatus"); vi.spyOn(partyPokemon, "resetStatus"); - game.move.select(Moves.AROMATHERAPY, 0); + game.move.select(MoveId.AROMATHERAPY, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); diff --git a/test/moves/assist.test.ts b/test/moves/assist.test.ts index 5c1a2a60775..772d11cb7aa 100644 --- a/test/moves/assist.test.ts +++ b/test/moves/assist.test.ts @@ -3,7 +3,7 @@ import { Stat } from "#app/enums/stat"; import { MoveResult } from "#app/field/pokemon"; import { CommandPhase } from "#app/phases/command-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -34,20 +34,20 @@ describe("Moves - Assist", () => { .enemySpecies(Species.MAGIKARP) .enemyLevel(100) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should only use an ally's moves", async () => { - game.override.enemyMoveset(Moves.SWORDS_DANCE); + game.override.enemyMoveset(MoveId.SWORDS_DANCE); await game.classicMode.startBattle([Species.FEEBAS, Species.SHUCKLE]); const [feebas, shuckle] = game.scene.getPlayerField(); // These are all moves Assist cannot call; Sketch will be used to test that it can call other moves properly - game.move.changeMoveset(feebas, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); - game.move.changeMoveset(shuckle, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); + game.move.changeMoveset(feebas, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); + game.move.changeMoveset(shuckle, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); - game.move.select(Moves.ASSIST, 0); - game.move.select(Moves.SKETCH, 1); + game.move.select(MoveId.ASSIST, 0); + game.move.select(MoveId.SKETCH, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER]); // Player_2 uses Sketch, copies Swords Dance, Player_1 uses Assist, uses Player_2's Sketched Swords Dance await game.toNextTurn(); @@ -59,45 +59,45 @@ describe("Moves - Assist", () => { await game.classicMode.startBattle([Species.FEEBAS]); const feebas = game.scene.getPlayerPokemon()!; - game.move.changeMoveset(feebas, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); + game.move.changeMoveset(feebas, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); - game.move.select(Moves.ASSIST, 0); + game.move.select(MoveId.ASSIST, 0); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should fail if ally has no usable moves and user has usable moves", async () => { - game.override.enemyMoveset(Moves.SWORDS_DANCE); + game.override.enemyMoveset(MoveId.SWORDS_DANCE); await game.classicMode.startBattle([Species.FEEBAS, Species.SHUCKLE]); const [feebas, shuckle] = game.scene.getPlayerField(); - game.move.changeMoveset(feebas, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); - game.move.changeMoveset(shuckle, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); + game.move.changeMoveset(feebas, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); + game.move.changeMoveset(shuckle, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); - game.move.select(Moves.SKETCH, 0); - game.move.select(Moves.PROTECT, 1); + game.move.select(MoveId.SKETCH, 0); + game.move.select(MoveId.PROTECT, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); // Player uses Sketch to copy Swords Dance, Player_2 stalls a turn. Player will attempt Assist and should have no usable moves await game.toNextTurn(); - game.move.select(Moves.ASSIST, 0); + game.move.select(MoveId.ASSIST, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.PROTECT, 1); + game.move.select(MoveId.PROTECT, 1); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should apply secondary effects of a move", async () => { - game.override.moveset([Moves.ASSIST, Moves.WOOD_HAMMER, Moves.WOOD_HAMMER, Moves.WOOD_HAMMER]); + game.override.moveset([MoveId.ASSIST, MoveId.WOOD_HAMMER, MoveId.WOOD_HAMMER, MoveId.WOOD_HAMMER]); await game.classicMode.startBattle([Species.FEEBAS, Species.SHUCKLE]); const [feebas, shuckle] = game.scene.getPlayerField(); - game.move.changeMoveset(feebas, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); - game.move.changeMoveset(shuckle, [Moves.ASSIST, Moves.SKETCH, Moves.PROTECT, Moves.DRAGON_TAIL]); + game.move.changeMoveset(feebas, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); + game.move.changeMoveset(shuckle, [MoveId.ASSIST, MoveId.SKETCH, MoveId.PROTECT, MoveId.DRAGON_TAIL]); - game.move.select(Moves.ASSIST, 0); + game.move.select(MoveId.ASSIST, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.ASSIST, 1); + game.move.select(MoveId.ASSIST, 1); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.isFullHp()).toBeFalsy(); // should receive recoil damage from Wood Hammer diff --git a/test/moves/astonish.test.ts b/test/moves/astonish.test.ts index 9635f7cb85d..3dbb382e278 100644 --- a/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -5,7 +5,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,14 +29,14 @@ describe("Moves - Astonish", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.ASTONISH, Moves.SPLASH]) + .moveset([MoveId.ASTONISH, MoveId.SPLASH]) .enemySpecies(Species.BLASTOISE) .enemyAbility(AbilityId.INSOMNIA) - .enemyMoveset(Moves.TACKLE) + .enemyMoveset(MoveId.TACKLE) .startingLevel(100) .enemyLevel(100); - vi.spyOn(allMoves[Moves.ASTONISH], "chance", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.ASTONISH], "chance", "get").mockReturnValue(100); }); test("move effect should cancel the target's move on the turn it applies", async () => { @@ -46,7 +46,7 @@ describe("Moves - Astonish", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ASTONISH); + game.move.select(MoveId.ASTONISH); await game.phaseInterceptor.to(MoveEndPhase, false); @@ -59,7 +59,7 @@ describe("Moves - Astonish", () => { await game.phaseInterceptor.to(CommandPhase, false); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index 83a74c2b963..5542a244f0e 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -8,7 +8,7 @@ import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { NumberHolder } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; @@ -39,16 +39,16 @@ describe("Moves - Aurora Veil", () => { game.override .battleStyle("single") .ability(AbilityId.BALL_FETCH) - .moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]) + .moveset([MoveId.ABSORB, MoveId.ROCK_SLIDE, MoveId.TACKLE]) .enemyLevel(100) .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.AURORA_VEIL) + .enemyMoveset(MoveId.AURORA_VEIL) .disableCrits() .weather(WeatherType.HAIL); }); it("reduces damage of physical attacks by half in a single battle", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -66,7 +66,7 @@ describe("Moves - Aurora Veil", () => { it("reduces damage of physical attacks by a third in a double battle", async () => { game.override.battleStyle("double"); - const moveToUse = Moves.ROCK_SLIDE; + const moveToUse = MoveId.ROCK_SLIDE; await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); game.move.select(moveToUse); @@ -83,7 +83,7 @@ describe("Moves - Aurora Veil", () => { }); it("reduces damage of special attacks by half in a single battle", async () => { - const moveToUse = Moves.ABSORB; + const moveToUse = MoveId.ABSORB; await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -102,7 +102,7 @@ describe("Moves - Aurora Veil", () => { it("reduces damage of special attacks by a third in a double battle", async () => { game.override.battleStyle("double"); - const moveToUse = Moves.DAZZLING_GLEAM; + const moveToUse = MoveId.DAZZLING_GLEAM; await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); game.move.select(moveToUse); @@ -119,8 +119,8 @@ describe("Moves - Aurora Veil", () => { }); it("does not affect physical critical hits", async () => { - game.override.moveset([Moves.WICKED_BLOW]); - const moveToUse = Moves.WICKED_BLOW; + game.override.moveset([MoveId.WICKED_BLOW]); + const moveToUse = MoveId.WICKED_BLOW; await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -135,9 +135,9 @@ describe("Moves - Aurora Veil", () => { }); it("does not affect critical hits", async () => { - game.override.moveset([Moves.FROST_BREATH]); - const moveToUse = Moves.FROST_BREATH; - vi.spyOn(allMoves[Moves.FROST_BREATH], "accuracy", "get").mockReturnValue(100); + game.override.moveset([MoveId.FROST_BREATH]); + const moveToUse = MoveId.FROST_BREATH; + vi.spyOn(allMoves[MoveId.FROST_BREATH], "accuracy", "get").mockReturnValue(100); await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -153,7 +153,7 @@ describe("Moves - Aurora Veil", () => { }); /** - * Calculates the damage of a move multiplied by screen's multiplier, Auroa Veil in this case {@linkcode Moves.AURORA_VEIL}. + * Calculates the damage of a move multiplied by screen's multiplier, Auroa Veil in this case {@linkcode MoveId.AURORA_VEIL}. * Please note this does not consider other damage calculations except the screen multiplier. * * @param defender - The defending Pokémon. diff --git a/test/moves/autotomize.test.ts b/test/moves/autotomize.test.ts index 403086678e3..29440fdd79f 100644 --- a/test/moves/autotomize.test.ts +++ b/test/moves/autotomize.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,10 +23,10 @@ describe("Moves - Autotomize", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.AUTOTOMIZE, Moves.KINGS_SHIELD, Moves.FALSE_SWIPE]) + .moveset([MoveId.AUTOTOMIZE, MoveId.KINGS_SHIELD, MoveId.FALSE_SWIPE]) .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it( @@ -40,15 +40,15 @@ describe("Moves - Autotomize", () => { await game.classicMode.startBattle([Species.DRACOZOLT]); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getWeight()).toBe(baseDracozoltWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(oneAutotomizeDracozoltWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(twoAutotomizeDracozoltWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(threeAutotomizeDracozoltWeight); }, @@ -66,25 +66,25 @@ describe("Moves - Autotomize", () => { expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(autotomizeAegislashWeight); // Transform to sword form - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(autotomizeAegislashWeight); // Transform to shield form - game.move.select(Moves.KINGS_SHIELD); + game.move.select(MoveId.KINGS_SHIELD); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(autotomizeAegislashWeight); }, @@ -100,7 +100,7 @@ describe("Moves - Autotomize", () => { await game.classicMode.startBattle([Species.GROUDON]); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getWeight()).toBe(baseLightGroudonWeight); - game.move.select(Moves.AUTOTOMIZE); + game.move.select(MoveId.AUTOTOMIZE); await game.toNextTurn(); expect(playerPokemon.getWeight()).toBe(autotomizeLightGroudonWeight); }, diff --git a/test/moves/baddy_bad.test.ts b/test/moves/baddy_bad.test.ts index 4ec84aa423f..93377802cac 100644 --- a/test/moves/baddy_bad.test.ts +++ b/test/moves/baddy_bad.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -21,19 +21,19 @@ describe("Moves - Baddy Bad", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .ability(AbilityId.BALL_FETCH); }); it("should not activate Reflect if the move fails due to Protect", async () => { - game.override.enemyMoveset(Moves.PROTECT); + game.override.enemyMoveset(MoveId.PROTECT); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.BADDY_BAD); + game.move.select(MoveId.BADDY_BAD); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.tags.length).toBe(0); diff --git a/test/moves/baneful_bunker.test.ts b/test/moves/baneful_bunker.test.ts index d9a77420a58..9d9bd9f8ed2 100644 --- a/test/moves/baneful_bunker.test.ts +++ b/test/moves/baneful_bunker.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { StatusEffect } from "#app/enums/status-effect"; @@ -26,11 +26,11 @@ describe("Moves - Baneful Bunker", () => { game.override.battleStyle("single"); - game.override.moveset(Moves.SLASH); + game.override.moveset(MoveId.SLASH); game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(AbilityId.INSOMNIA); - game.override.enemyMoveset(Moves.BANEFUL_BUNKER); + game.override.enemyMoveset(MoveId.BANEFUL_BUNKER); game.override.startingLevel(100); game.override.enemyLevel(100); @@ -41,7 +41,7 @@ describe("Moves - Baneful Bunker", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SLASH); + game.move.select(MoveId.SLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); @@ -53,7 +53,7 @@ describe("Moves - Baneful Bunker", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SLASH); + game.move.select(MoveId.SLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -64,13 +64,13 @@ describe("Moves - Baneful Bunker", () => { }); test("should not poison attackers that don't make contact", async () => { - game.override.moveset(Moves.FLASH_CANNON); + game.override.moveset(MoveId.FLASH_CANNON); await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FLASH_CANNON); + game.move.select(MoveId.FLASH_CANNON); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/test/moves/baton_pass.test.ts b/test/moves/baton_pass.test.ts index 03485c5d09d..df6a62ff490 100644 --- a/test/moves/baton_pass.test.ts +++ b/test/moves/baton_pass.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import Phaser from "phaser"; @@ -28,9 +28,9 @@ describe("Moves - Baton Pass", () => { .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .moveset([Moves.BATON_PASS, Moves.NASTY_PLOT, Moves.SPLASH]) + .moveset([MoveId.BATON_PASS, MoveId.NASTY_PLOT, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .disableCrits(); }); @@ -39,7 +39,7 @@ describe("Moves - Baton Pass", () => { await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); // round 1 - buff - game.move.select(Moves.NASTY_PLOT); + game.move.select(MoveId.NASTY_PLOT); await game.toNextTurn(); let playerPokemon = game.scene.getPlayerPokemon()!; @@ -47,7 +47,7 @@ describe("Moves - Baton Pass", () => { expect(playerPokemon.getStatStage(Stat.SPATK)).toEqual(2); // round 2 - baton pass - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -59,20 +59,20 @@ describe("Moves - Baton Pass", () => { it("passes stat stage buffs when AI uses it", async () => { // arrange - game.override.startingWave(5).enemyMoveset(new Array(4).fill([Moves.NASTY_PLOT])); + game.override.startingWave(5).enemyMoveset(new Array(4).fill([MoveId.NASTY_PLOT])); await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); // round 1 - ai buffs - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // round 2 - baton pass game.scene.getEnemyPokemon()!.hp = 100; - game.override.enemyMoveset([Moves.BATON_PASS]); + game.override.enemyMoveset([MoveId.BATON_PASS]); // Force moveset to update mid-battle // TODO: replace with enemy ai control function when it's added game.scene.getEnemyParty()[0].getMoveset(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("PostSummonPhase", false); // assert @@ -90,12 +90,12 @@ describe("Moves - Baton Pass", () => { }, 20000); it("doesn't transfer effects that aren't transferrable", async () => { - game.override.enemyMoveset([Moves.SALT_CURE]); + game.override.enemyMoveset([MoveId.SALT_CURE]); await game.classicMode.startBattle([Species.PIKACHU, Species.FEEBAS]); const [player1, player2] = game.scene.getPlayerParty(); - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase"); expect(player1.findTag(t => t.tagType === BattlerTagType.SALT_CURED)).toBeTruthy(); @@ -106,13 +106,13 @@ describe("Moves - Baton Pass", () => { }, 20000); it("doesn't allow binding effects from the user to persist", async () => { - game.override.moveset([Moves.FIRE_SPIN, Moves.BATON_PASS]); + game.override.moveset([MoveId.FIRE_SPIN, MoveId.BATON_PASS]); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FIRE_SPIN); + game.move.select(MoveId.FIRE_SPIN); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); @@ -120,7 +120,7 @@ describe("Moves - Baton Pass", () => { expect(enemy.getTag(BattlerTagType.FIRE_SPIN)).toBeDefined(); - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); diff --git a/test/moves/beak_blast.test.ts b/test/moves/beak_blast.test.ts index 4309fdd2be4..945c83240ab 100644 --- a/test/moves/beak_blast.test.ts +++ b/test/moves/beak_blast.test.ts @@ -4,7 +4,7 @@ import { BerryPhase } from "#app/phases/berry-phase"; import { MovePhase } from "#app/phases/move-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,10 +29,10 @@ describe("Moves - Beak Blast", () => { game.override .battleStyle("single") .ability(AbilityId.UNNERVE) - .moveset([Moves.BEAK_BLAST]) + .moveset([MoveId.BEAK_BLAST]) .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.INSOMNIA) - .enemyMoveset([Moves.TACKLE]) + .enemyMoveset([MoveId.TACKLE]) .startingLevel(100) .enemyLevel(100); }); @@ -43,7 +43,7 @@ describe("Moves - Beak Blast", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to(MovePhase, false); expect(leadPokemon.getTag(BattlerTagType.BEAK_BLAST_CHARGING)).toBeDefined(); @@ -60,7 +60,7 @@ describe("Moves - Beak Blast", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to(MovePhase, false); expect(leadPokemon.getTag(BattlerTagType.BEAK_BLAST_CHARGING)).toBeDefined(); @@ -70,14 +70,14 @@ describe("Moves - Beak Blast", () => { }); it("should not burn attackers that don't make contact", async () => { - game.override.enemyMoveset([Moves.WATER_GUN]); + game.override.enemyMoveset([MoveId.WATER_GUN]); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to(MovePhase, false); expect(leadPokemon.getTag(BattlerTagType.BEAK_BLAST_CHARGING)).toBeDefined(); @@ -93,21 +93,21 @@ describe("Moves - Beak Blast", () => { const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to(BerryPhase, false); expect(leadPokemon.turnData.hitCount).toBe(2); }); it("should be blocked by Protect", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([MoveId.PROTECT]); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to(MovePhase, false); expect(leadPokemon.getTag(BattlerTagType.BEAK_BLAST_CHARGING)).toBeDefined(); @@ -123,16 +123,16 @@ describe("Moves - Beak Blast", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; const user = game.scene.getPlayerPokemon()!; user.hp = 1; - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.status?.effect).toBe(StatusEffect.BURN); }); it("should not burn a long reach enemy that hits the user with a contact move", async () => { game.override.enemyAbility(AbilityId.LONG_REACH); - game.override.enemyMoveset([Moves.FALSE_SWIPE]).enemyLevel(100); + game.override.enemyMoveset([MoveId.FALSE_SWIPE]).enemyLevel(100); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to("BerryPhase", false); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon.status?.effect).not.toBe(StatusEffect.BURN); diff --git a/test/moves/beat_up.test.ts b/test/moves/beat_up.test.ts index bc165035e1d..d057fa69d6b 100644 --- a/test/moves/beat_up.test.ts +++ b/test/moves/beat_up.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { StatusEffect } from "#app/enums/status-effect"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; @@ -27,11 +27,11 @@ describe("Moves - Beat Up", () => { game.override.enemySpecies(Species.SNORLAX); game.override.enemyLevel(100); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); game.override.enemyAbility(AbilityId.INSOMNIA); game.override.startingLevel(100); - game.override.moveset([Moves.BEAT_UP]); + game.override.moveset([MoveId.BEAT_UP]); }); it("should hit once for each healthy player Pokemon", async () => { @@ -48,7 +48,7 @@ describe("Moves - Beat Up", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; let enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.BEAT_UP); + game.move.select(MoveId.BEAT_UP); await game.phaseInterceptor.to(MoveEffectPhase); @@ -76,7 +76,7 @@ describe("Moves - Beat Up", () => { game.scene.getPlayerParty()[1].trySetStatus(StatusEffect.BURN); - game.move.select(Moves.BEAT_UP); + game.move.select(MoveId.BEAT_UP); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/test/moves/belly_drum.test.ts b/test/moves/belly_drum.test.ts index 1e281ebac4b..7643f457f98 100644 --- a/test/moves/belly_drum.test.ts +++ b/test/moves/belly_drum.test.ts @@ -1,6 +1,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { toDmgValue } from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -34,8 +34,8 @@ describe("Moves - BELLY DRUM", () => { .enemySpecies(Species.SNORLAX) .startingLevel(100) .enemyLevel(100) - .moveset([Moves.BELLY_DRUM]) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.BELLY_DRUM]) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH); }); @@ -47,7 +47,7 @@ describe("Moves - BELLY DRUM", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -64,7 +64,7 @@ describe("Moves - BELLY DRUM", () => { leadPokemon.setStatStage(Stat.ATK, -3); leadPokemon.setStatStage(Stat.SPATK, 6); - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -79,7 +79,7 @@ describe("Moves - BELLY DRUM", () => { leadPokemon.setStatStage(Stat.ATK, 6); - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); @@ -93,7 +93,7 @@ describe("Moves - BELLY DRUM", () => { const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); leadPokemon.hp = hpLost - PREDAMAGE; - game.move.select(Moves.BELLY_DRUM); + game.move.select(MoveId.BELLY_DRUM); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(hpLost - PREDAMAGE); diff --git a/test/moves/burning_jealousy.test.ts b/test/moves/burning_jealousy.test.ts index 64c5cfc10f8..d830baf3cc8 100644 --- a/test/moves/burning_jealousy.test.ts +++ b/test/moves/burning_jealousy.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { StatusEffect } from "#app/enums/status-effect"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,12 +29,12 @@ describe("Moves - Burning Jealousy", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.ICE_SCALES) - .enemyMoveset([Moves.HOWL]) + .enemyMoveset([MoveId.HOWL]) .startingLevel(10) .enemyLevel(10) .starterSpecies(Species.FEEBAS) .ability(AbilityId.BALL_FETCH) - .moveset([Moves.BURNING_JEALOUSY, Moves.GROWL]); + .moveset([MoveId.BURNING_JEALOUSY, MoveId.GROWL]); }); it("should burn the opponent if their stat stages were raised", async () => { @@ -42,7 +42,7 @@ describe("Moves - Burning Jealousy", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BURNING_JEALOUSY); + game.move.select(MoveId.BURNING_JEALOUSY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -55,8 +55,8 @@ describe("Moves - Burning Jealousy", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BURNING_JEALOUSY); - game.move.select(Moves.GROWL, 1); + game.move.select(MoveId.BURNING_JEALOUSY); + game.move.select(MoveId.GROWL, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); @@ -64,12 +64,12 @@ describe("Moves - Burning Jealousy", () => { }); it("should ignore stat stages raised by IMPOSTER", async () => { - game.override.enemySpecies(Species.DITTO).enemyAbility(AbilityId.IMPOSTER).enemyMoveset(Moves.SPLASH); + game.override.enemySpecies(Species.DITTO).enemyAbility(AbilityId.IMPOSTER).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.BURNING_JEALOUSY); + game.move.select(MoveId.BURNING_JEALOUSY); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.status?.effect).toBeUndefined(); @@ -81,15 +81,15 @@ describe("Moves - Burning Jealousy", () => { }); it("should be boosted by Sheer Force even if opponent didn't raise stat stages", async () => { - game.override.ability(AbilityId.SHEER_FORCE).enemyMoveset(Moves.SPLASH); - vi.spyOn(allMoves[Moves.BURNING_JEALOUSY], "calculateBattlePower"); + game.override.ability(AbilityId.SHEER_FORCE).enemyMoveset(MoveId.SPLASH); + vi.spyOn(allMoves[MoveId.BURNING_JEALOUSY], "calculateBattlePower"); await game.classicMode.startBattle(); - game.move.select(Moves.BURNING_JEALOUSY); + game.move.select(MoveId.BURNING_JEALOUSY); await game.phaseInterceptor.to("BerryPhase"); - expect(allMoves[Moves.BURNING_JEALOUSY].calculateBattlePower).toHaveReturnedWith( - allMoves[Moves.BURNING_JEALOUSY].power * 1.3, + expect(allMoves[MoveId.BURNING_JEALOUSY].calculateBattlePower).toHaveReturnedWith( + allMoves[MoveId.BURNING_JEALOUSY].power * 1.3, ); }); }); diff --git a/test/moves/camouflage.test.ts b/test/moves/camouflage.test.ts index a766c439f3b..138fdf1bf02 100644 --- a/test/moves/camouflage.test.ts +++ b/test/moves/camouflage.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { TerrainType } from "#app/data/terrain"; import { PokemonType } from "#enums/pokemon-type"; @@ -25,13 +25,13 @@ describe("Moves - Camouflage", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.CAMOUFLAGE]) + .moveset([MoveId.CAMOUFLAGE]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.REGIELEKI) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.PSYCHIC_TERRAIN); + .enemyMoveset(MoveId.PSYCHIC_TERRAIN); }); it("Camouflage should look at terrain first when selecting a type to change into", async () => { @@ -39,7 +39,7 @@ describe("Moves - Camouflage", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.CAMOUFLAGE); + game.move.select(MoveId.CAMOUFLAGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTerrainType()).toBe(TerrainType.PSYCHIC); diff --git a/test/moves/ceaseless_edge.test.ts b/test/moves/ceaseless_edge.test.ts index 31539d82b73..fda62929664 100644 --- a/test/moves/ceaseless_edge.test.ts +++ b/test/moves/ceaseless_edge.test.ts @@ -4,7 +4,7 @@ import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -32,9 +32,9 @@ describe("Moves - Ceaseless Edge", () => { game.override.enemyPassiveAbility(AbilityId.RUN_AWAY); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.CEASELESS_EDGE, Moves.SPLASH, Moves.ROAR]); - game.override.enemyMoveset(Moves.SPLASH); - vi.spyOn(allMoves[Moves.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); + game.override.moveset([MoveId.CEASELESS_EDGE, MoveId.SPLASH, MoveId.ROAR]); + game.override.enemyMoveset(MoveId.SPLASH); + vi.spyOn(allMoves[MoveId.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); }); test("move should hit and apply spikes", async () => { @@ -44,7 +44,7 @@ describe("Moves - Ceaseless Edge", () => { const enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.CEASELESS_EDGE); + game.move.select(MoveId.CEASELESS_EDGE); await game.phaseInterceptor.to(MoveEffectPhase, false); // Spikes should not have any layers before move effect is applied @@ -66,7 +66,7 @@ describe("Moves - Ceaseless Edge", () => { const enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.CEASELESS_EDGE); + game.move.select(MoveId.CEASELESS_EDGE); await game.phaseInterceptor.to(MoveEffectPhase, false); // Spikes should not have any layers before move effect is applied @@ -86,7 +86,7 @@ describe("Moves - Ceaseless Edge", () => { await game.classicMode.startBattle([Species.ILLUMISE]); - game.move.select(Moves.CEASELESS_EDGE); + game.move.select(MoveId.CEASELESS_EDGE); await game.phaseInterceptor.to(MoveEffectPhase, false); // Spikes should not have any layers before move effect is applied const tagBefore = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as ArenaTrapTag; @@ -100,7 +100,7 @@ describe("Moves - Ceaseless Edge", () => { const hpBeforeSpikes = game.scene.currentBattle.enemyParty[1].hp; // Check HP of pokemon that WILL BE switched in (index 1) game.forceEnemyToSwitch(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); expect(game.scene.currentBattle.enemyParty[0].hp).toBeLessThan(hpBeforeSpikes); }); diff --git a/test/moves/chilly_reception.test.ts b/test/moves/chilly_reception.test.ts index 0304e8515dd..1f8696191a7 100644 --- a/test/moves/chilly_reception.test.ts +++ b/test/moves/chilly_reception.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; @@ -25,8 +25,8 @@ describe("Moves - Chilly Reception", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.CHILLY_RECEPTION, Moves.SNOWSCAPE]) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.CHILLY_RECEPTION, MoveId.SNOWSCAPE]) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) .ability(AbilityId.BALL_FETCH); }); @@ -34,7 +34,7 @@ describe("Moves - Chilly Reception", () => { it("should still change the weather if user can't switch out", async () => { await game.classicMode.startBattle([Species.SLOWKING]); - game.move.select(Moves.CHILLY_RECEPTION); + game.move.select(MoveId.CHILLY_RECEPTION); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); @@ -43,12 +43,12 @@ describe("Moves - Chilly Reception", () => { it("should switch out even if it's snowing", async () => { await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); // first turn set up snow with snowscape, try chilly reception on second turn - game.move.select(Moves.SNOWSCAPE); + game.move.select(MoveId.SNOWSCAPE); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); await game.phaseInterceptor.to("TurnInitPhase", false); - game.move.select(Moves.CHILLY_RECEPTION); + game.move.select(MoveId.CHILLY_RECEPTION); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("BerryPhase", false); @@ -59,7 +59,7 @@ describe("Moves - Chilly Reception", () => { it("happy case - switch out and weather changes", async () => { await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); - game.move.select(Moves.CHILLY_RECEPTION); + game.move.select(MoveId.CHILLY_RECEPTION); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("BerryPhase", false); @@ -69,12 +69,12 @@ describe("Moves - Chilly Reception", () => { // enemy uses another move and weather doesn't change it("check case - enemy not selecting chilly reception doesn't change weather ", async () => { - game.override.battleStyle("single").enemyMoveset([Moves.CHILLY_RECEPTION, Moves.TACKLE]).moveset(Moves.SPLASH); + game.override.battleStyle("single").enemyMoveset([MoveId.CHILLY_RECEPTION, MoveId.TACKLE]).moveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(undefined); @@ -84,27 +84,27 @@ describe("Moves - Chilly Reception", () => { game.override .battleStyle("single") .startingWave(8) - .enemyMoveset(Moves.CHILLY_RECEPTION) + .enemyMoveset(MoveId.CHILLY_RECEPTION) .enemySpecies(Species.MAGIKARP) - .moveset([Moves.SPLASH, Moves.THUNDERBOLT]); + .moveset([MoveId.SPLASH, MoveId.THUNDERBOLT]); await game.classicMode.startBattle([Species.JOLTEON]); const RIVAL_MAGIKARP1 = game.scene.getEnemyPokemon()?.id; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); expect(game.scene.getEnemyPokemon()?.id !== RIVAL_MAGIKARP1); await game.phaseInterceptor.to("TurnInitPhase", false); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); // second chilly reception should still switch out await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); await game.phaseInterceptor.to("TurnInitPhase", false); expect(game.scene.getEnemyPokemon()?.id === RIVAL_MAGIKARP1); - game.move.select(Moves.THUNDERBOLT); + game.move.select(MoveId.THUNDERBOLT); // enemy chilly recep move should fail: it's snowing and no option to switch out // no crashing @@ -112,7 +112,7 @@ describe("Moves - Chilly Reception", () => { expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); await game.phaseInterceptor.to("TurnInitPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); }); diff --git a/test/moves/chloroblast.test.ts b/test/moves/chloroblast.test.ts index bda20bbfe94..81240d461c7 100644 --- a/test/moves/chloroblast.test.ts +++ b/test/moves/chloroblast.test.ts @@ -1,6 +1,6 @@ import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -33,13 +33,13 @@ describe("Moves - Chloroblast", () => { it("should not deal recoil damage if the opponent uses protect", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.use(Moves.CHLOROBLAST); - await game.move.forceEnemyMove(Moves.PROTECT); + game.move.use(MoveId.CHLOROBLAST); + await game.move.forceEnemyMove(MoveId.PROTECT); await game.toEndOfTurn(); const player = game.field.getPlayerPokemon(); expect(player.isFullHp()).toBe(true); - expect(player.getLastXMoves()[0]).toMatchObject({ result: MoveResult.MISS, move: Moves.CHLOROBLAST }); + expect(player.getLastXMoves()[0]).toMatchObject({ result: MoveResult.MISS, move: MoveId.CHLOROBLAST }); }); }); diff --git a/test/moves/clangorous_soul.test.ts b/test/moves/clangorous_soul.test.ts index c7165a0a881..d2f833ceff7 100644 --- a/test/moves/clangorous_soul.test.ts +++ b/test/moves/clangorous_soul.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; @@ -31,8 +31,8 @@ describe("Moves - Clangorous Soul", () => { game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.CLANGOROUS_SOUL]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.CLANGOROUS_SOUL]); + game.override.enemyMoveset(MoveId.SPLASH); }); //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Clangorous_Soul_(move) @@ -43,7 +43,7 @@ describe("Moves - Clangorous Soul", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); - game.move.select(Moves.CLANGOROUS_SOUL); + game.move.select(MoveId.CLANGOROUS_SOUL); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -66,7 +66,7 @@ describe("Moves - Clangorous Soul", () => { leadPokemon.setStatStage(Stat.SPATK, 6); leadPokemon.setStatStage(Stat.SPDEF, 4); - game.move.select(Moves.CLANGOROUS_SOUL); + game.move.select(MoveId.CLANGOROUS_SOUL); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -88,7 +88,7 @@ describe("Moves - Clangorous Soul", () => { leadPokemon.setStatStage(Stat.SPDEF, 6); leadPokemon.setStatStage(Stat.SPD, 6); - game.move.select(Moves.CLANGOROUS_SOUL); + game.move.select(MoveId.CLANGOROUS_SOUL); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); @@ -106,7 +106,7 @@ describe("Moves - Clangorous Soul", () => { const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); leadPokemon.hp = hpLost - PREDAMAGE; - game.move.select(Moves.CLANGOROUS_SOUL); + game.move.select(MoveId.CLANGOROUS_SOUL); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(hpLost - PREDAMAGE); diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index 1d2067cfea9..4b2a15d7996 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -4,7 +4,7 @@ import { allMoves } from "#app/data/data-lists"; import { Stat } from "#app/enums/stat"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,51 +27,51 @@ describe("Moves - Copycat", () => { }); beforeEach(() => { - randomMoveAttr = allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0]; + randomMoveAttr = allMoves[MoveId.METRONOME].getAttrs(RandomMoveAttr)[0]; game = new GameManager(phaserGame); game.override - .moveset([Moves.COPYCAT, Moves.SPIKY_SHIELD, Moves.SWORDS_DANCE, Moves.SPLASH]) + .moveset([MoveId.COPYCAT, MoveId.SPIKY_SHIELD, MoveId.SWORDS_DANCE, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .starterSpecies(Species.FEEBAS) .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should copy the last move successfully executed", async () => { - game.override.enemyMoveset(Moves.SUCKER_PUNCH); + game.override.enemyMoveset(MoveId.SUCKER_PUNCH); await game.classicMode.startBattle(); - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.toNextTurn(); - game.move.select(Moves.COPYCAT); // Last successful move should be Swords Dance + game.move.select(MoveId.COPYCAT); // Last successful move should be Swords Dance await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(4); }); it("should fail when the last move used is not a valid Copycat move", async () => { - game.override.enemyMoveset(Moves.PROTECT); // Protect is not a valid move for Copycat to copy + game.override.enemyMoveset(MoveId.PROTECT); // Protect is not a valid move for Copycat to copy await game.classicMode.startBattle(); - game.move.select(Moves.SPIKY_SHIELD); // Spiky Shield is not a valid move for Copycat to copy + game.move.select(MoveId.SPIKY_SHIELD); // Spiky Shield is not a valid move for Copycat to copy await game.toNextTurn(); - game.move.select(Moves.COPYCAT); + game.move.select(MoveId.COPYCAT); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should copy the called move when the last move successfully calls another", async () => { - game.override.moveset([Moves.SPLASH, Moves.METRONOME]).enemyMoveset(Moves.COPYCAT); + game.override.moveset([MoveId.SPLASH, MoveId.METRONOME]).enemyMoveset(MoveId.COPYCAT); await game.classicMode.startBattle(); - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.SWORDS_DANCE); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.SWORDS_DANCE); - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); // Player moves first, so enemy can copy Swords Dance await game.toNextTurn(); @@ -79,10 +79,10 @@ describe("Moves - Copycat", () => { }); it("should apply secondary effects of a move", async () => { - game.override.enemyMoveset(Moves.ACID_SPRAY); // Secondary effect lowers SpDef by 2 stages + game.override.enemyMoveset(MoveId.ACID_SPRAY); // Secondary effect lowers SpDef by 2 stages await game.classicMode.startBattle(); - game.move.select(Moves.COPYCAT); + game.move.select(MoveId.COPYCAT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); diff --git a/test/moves/crafty_shield.test.ts b/test/moves/crafty_shield.test.ts index 1630dc2e94f..9b415282e43 100644 --- a/test/moves/crafty_shield.test.ts +++ b/test/moves/crafty_shield.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; @@ -28,10 +28,10 @@ describe("Moves - Crafty Shield", () => { game.override.battleStyle("double"); - game.override.moveset([Moves.CRAFTY_SHIELD, Moves.SPLASH, Moves.SWORDS_DANCE]); + game.override.moveset([MoveId.CRAFTY_SHIELD, MoveId.SPLASH, MoveId.SWORDS_DANCE]); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); game.override.enemyAbility(AbilityId.INSOMNIA); game.override.startingLevel(100); @@ -43,11 +43,11 @@ describe("Moves - Crafty Shield", () => { const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.CRAFTY_SHIELD); + game.move.select(MoveId.CRAFTY_SHIELD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -55,17 +55,17 @@ describe("Moves - Crafty Shield", () => { }); test("should not protect the user and allies from attack moves", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.CRAFTY_SHIELD); + game.move.select(MoveId.CRAFTY_SHIELD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -74,17 +74,17 @@ describe("Moves - Crafty Shield", () => { test("should protect the user and allies from moves that ignore other protection", async () => { game.override.enemySpecies(Species.DUSCLOPS); - game.override.enemyMoveset([Moves.CURSE]); + game.override.enemyMoveset([MoveId.CURSE]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.CRAFTY_SHIELD); + game.move.select(MoveId.CRAFTY_SHIELD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -96,11 +96,11 @@ describe("Moves - Crafty Shield", () => { const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.CRAFTY_SHIELD); + game.move.select(MoveId.CRAFTY_SHIELD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SWORDS_DANCE, 1); + game.move.select(MoveId.SWORDS_DANCE, 1); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/defog.test.ts b/test/moves/defog.test.ts index e8b1026abb9..0c581372f78 100644 --- a/test/moves/defog.test.ts +++ b/test/moves/defog.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,13 +23,13 @@ describe("Moves - Defog", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.MIST, Moves.SAFEGUARD, Moves.SPLASH]) + .moveset([MoveId.MIST, MoveId.SAFEGUARD, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.SHUCKLE) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.DEFOG, Moves.GROWL]); + .enemyMoveset([MoveId.DEFOG, MoveId.GROWL]); }); it("should not allow Safeguard to be active", async () => { @@ -38,8 +38,8 @@ describe("Moves - Defog", () => { const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SAFEGUARD); - await game.move.selectEnemyMove(Moves.DEFOG); + game.move.select(MoveId.SAFEGUARD); + await game.move.selectEnemyMove(MoveId.DEFOG); await game.phaseInterceptor.to("BerryPhase"); expect(playerPokemon[0].isSafeguarded(enemyPokemon[0])).toBe(false); @@ -52,13 +52,13 @@ describe("Moves - Defog", () => { const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.MIST); - await game.move.selectEnemyMove(Moves.DEFOG); + game.move.select(MoveId.MIST); + await game.move.selectEnemyMove(MoveId.DEFOG); await game.toNextTurn(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.GROWL); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/destiny_bond.test.ts b/test/moves/destiny_bond.test.ts index 696c221cd2b..4a9317429ed 100644 --- a/test/moves/destiny_bond.test.ts +++ b/test/moves/destiny_bond.test.ts @@ -3,7 +3,7 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -39,11 +39,11 @@ describe("Moves - Destiny Bond", () => { .enemyAbility(AbilityId.RUN_AWAY) .startingLevel(100) // Make sure tested moves KO .enemyLevel(5) - .enemyMoveset(Moves.DESTINY_BOND); + .enemyMoveset(MoveId.DESTINY_BOND); }); it("should KO the opponent on the same turn", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; game.override.moveset(moveToUse); await game.classicMode.startBattle(defaultParty); @@ -60,16 +60,16 @@ describe("Moves - Destiny Bond", () => { }); it("should KO the opponent on the next turn", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; - game.override.moveset([Moves.SPLASH, moveToUse]); + game.override.moveset([MoveId.SPLASH, moveToUse]); await game.classicMode.startBattle(defaultParty); const enemyPokemon = game.scene.getEnemyPokemon(); const playerPokemon = game.scene.getPlayerPokemon(); // Turn 1: Enemy uses Destiny Bond and doesn't faint - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder(playerFirst); await game.toNextTurn(); @@ -86,16 +86,16 @@ describe("Moves - Destiny Bond", () => { }); it("should fail if used twice in a row", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; - game.override.moveset([Moves.SPLASH, moveToUse]); + game.override.moveset([MoveId.SPLASH, moveToUse]); await game.classicMode.startBattle(defaultParty); const enemyPokemon = game.scene.getEnemyPokemon(); const playerPokemon = game.scene.getPlayerPokemon(); // Turn 1: Enemy uses Destiny Bond and doesn't faint - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder(enemyFirst); await game.toNextTurn(); @@ -113,7 +113,7 @@ describe("Moves - Destiny Bond", () => { it("should not KO the opponent if the user dies to weather", async () => { // Opponent will be reduced to 1 HP by False Swipe, then faint to Sandstorm - const moveToUse = Moves.FALSE_SWIPE; + const moveToUse = MoveId.FALSE_SWIPE; game.override.moveset(moveToUse).ability(AbilityId.SAND_STREAM); await game.classicMode.startBattle(defaultParty); @@ -130,16 +130,16 @@ describe("Moves - Destiny Bond", () => { }); it("should not KO the opponent if the user had another turn", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; - game.override.moveset([Moves.SPORE, moveToUse]); + game.override.moveset([MoveId.SPORE, moveToUse]); await game.classicMode.startBattle(defaultParty); const enemyPokemon = game.scene.getEnemyPokemon(); const playerPokemon = game.scene.getPlayerPokemon(); // Turn 1: Enemy uses Destiny Bond and doesn't faint - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.setTurnOrder(enemyFirst); await game.toNextTurn(); @@ -157,7 +157,7 @@ describe("Moves - Destiny Bond", () => { }); it("should not KO an ally", async () => { - game.override.moveset([Moves.DESTINY_BOND, Moves.CRUNCH]).battleStyle("double"); + game.override.moveset([MoveId.DESTINY_BOND, MoveId.CRUNCH]).battleStyle("double"); await game.classicMode.startBattle([Species.SHEDINJA, Species.BULBASAUR, Species.SQUIRTLE]); const enemyPokemon0 = game.scene.getEnemyField()[0]; @@ -166,8 +166,8 @@ describe("Moves - Destiny Bond", () => { const playerPokemon1 = game.scene.getPlayerField()[1]; // Shedinja uses Destiny Bond, then ally Bulbasaur KO's Shedinja with Crunch - game.move.select(Moves.DESTINY_BOND, 0); - game.move.select(Moves.CRUNCH, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.DESTINY_BOND, 0); + game.move.select(MoveId.CRUNCH, 1, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); @@ -178,7 +178,7 @@ describe("Moves - Destiny Bond", () => { }); it("should not cause a crash if the user is KO'd by Ceaseless Edge", async () => { - const moveToUse = Moves.CEASELESS_EDGE; + const moveToUse = MoveId.CEASELESS_EDGE; vi.spyOn(allMoves[moveToUse], "accuracy", "get").mockReturnValue(100); game.override.moveset(moveToUse); @@ -201,7 +201,7 @@ describe("Moves - Destiny Bond", () => { }); it("should not cause a crash if the user is KO'd by Pledge moves", async () => { - game.override.moveset([Moves.GRASS_PLEDGE, Moves.WATER_PLEDGE]).battleStyle("double"); + game.override.moveset([MoveId.GRASS_PLEDGE, MoveId.WATER_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle(defaultParty); const enemyPokemon0 = game.scene.getEnemyField()[0]; @@ -209,8 +209,8 @@ describe("Moves - Destiny Bond", () => { const playerPokemon0 = game.scene.getPlayerField()[0]; const playerPokemon1 = game.scene.getPlayerField()[1]; - game.move.select(Moves.GRASS_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.WATER_PLEDGE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.GRASS_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.WATER_PLEDGE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); await game.phaseInterceptor.to("BerryPhase"); @@ -230,7 +230,7 @@ describe("Moves - Destiny Bond", () => { * from occurring with fainting by KO'ing a Destiny Bond user with U-Turn. */ it("should not allow the opponent to revive via Reviver Seed", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; game.override.moveset(moveToUse).startingHeldItems([{ name: "REVIVER_SEED" }]); await game.classicMode.startBattle(defaultParty); diff --git a/test/moves/diamond_storm.test.ts b/test/moves/diamond_storm.test.ts index 3a1b8e7eaea..75b5bf7a182 100644 --- a/test/moves/diamond_storm.test.ts +++ b/test/moves/diamond_storm.test.ts @@ -1,6 +1,6 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -24,21 +24,21 @@ describe("Moves - Diamond Storm", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.DIAMOND_STORM]) + .moveset([MoveId.DIAMOND_STORM]) .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should only increase defense once even if hitting 2 pokemon", async () => { game.override.battleStyle("double"); - const diamondStorm = allMoves[Moves.DIAMOND_STORM]; + const diamondStorm = allMoves[MoveId.DIAMOND_STORM]; vi.spyOn(diamondStorm, "chance", "get").mockReturnValue(100); vi.spyOn(diamondStorm, "accuracy", "get").mockReturnValue(100); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.DIAMOND_STORM); + game.move.select(MoveId.DIAMOND_STORM); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.DEF)).toBe(2); diff --git a/test/moves/dig.test.ts b/test/moves/dig.test.ts index 2daa11a97c2..0e39cae0859 100644 --- a/test/moves/dig.test.ts +++ b/test/moves/dig.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; @@ -26,13 +26,13 @@ describe("Moves - Dig", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.DIG) + .moveset(MoveId.DIG) .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); }); it("should make the user semi-invulnerable, then attack over 2 turns", async () => { @@ -41,21 +41,21 @@ describe("Moves - Dig", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeDefined(); expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - expect(playerPokemon.getMoveQueue()[0].move).toBe(Moves.DIG); + expect(playerPokemon.getMoveQueue()[0].move).toBe(MoveId.DIG); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeUndefined(); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); expect(playerPokemon.getMoveHistory()).toHaveLength(2); - const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIG); + const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIG); expect(playerDig?.ppUsed).toBe(1); }); @@ -67,7 +67,7 @@ describe("Moves - Dig", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); @@ -75,19 +75,19 @@ describe("Moves - Dig", () => { }); it("should not expend PP when the attack phase is cancelled", async () => { - game.override.enemyAbility(AbilityId.NO_GUARD).enemyMoveset(Moves.SPORE); + game.override.enemyAbility(AbilityId.NO_GUARD).enemyMoveset(MoveId.SPORE); await game.classicMode.startBattle([Species.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeUndefined(); expect(playerPokemon.status?.effect).toBe(StatusEffect.SLEEP); - const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIG); + const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIG); expect(playerDig?.ppUsed).toBe(0); }); @@ -99,17 +99,17 @@ describe("Moves - Dig", () => { const preDigEarthquakeDmg = playerPokemon.getAttackDamage({ source: enemyPokemon, - move: allMoves[Moves.EARTHQUAKE], + move: allMoves[MoveId.EARTHQUAKE], }).damage; - game.move.select(Moves.DIG); + game.move.select(MoveId.DIG); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); const postDigEarthquakeDmg = playerPokemon.getAttackDamage({ source: enemyPokemon, - move: allMoves[Moves.EARTHQUAKE], + move: allMoves[MoveId.EARTHQUAKE], }).damage; // these hopefully get avoid rounding errors :shrug: expect(postDigEarthquakeDmg).toBeGreaterThanOrEqual(2 * preDigEarthquakeDmg); diff --git a/test/moves/disable.test.ts b/test/moves/disable.test.ts index d1b95349b53..8adf2383c8d 100644 --- a/test/moves/disable.test.ts +++ b/test/moves/disable.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,8 +26,8 @@ describe("Moves - Disable", () => { .battleStyle("single") .ability(AbilityId.BALL_FETCH) .enemyAbility(AbilityId.BALL_FETCH) - .moveset([Moves.DISABLE, Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.DISABLE, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH) .starterSpecies(Species.PIKACHU) .enemySpecies(Species.SHUCKLE); }); @@ -37,12 +37,12 @@ describe("Moves - Disable", () => { const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(enemyMon.getMoveHistory()).toHaveLength(1); - expect(enemyMon.isMoveRestricted(Moves.SPLASH)).toBe(true); + expect(enemyMon.isMoveRestricted(MoveId.SPLASH)).toBe(true); }); it("fails if enemy has no move history", async () => { @@ -51,15 +51,15 @@ describe("Moves - Disable", () => { const playerMon = game.scene.getPlayerPokemon()!; const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); expect(playerMon.getMoveHistory()[0]).toMatchObject({ - move: Moves.DISABLE, + move: MoveId.DISABLE, result: MoveResult.FAIL, }); - expect(enemyMon.isMoveRestricted(Moves.SPLASH)).toBe(false); + expect(enemyMon.isMoveRestricted(MoveId.SPLASH)).toBe(false); }, 20000); it("causes STRUGGLE if all usable moves are disabled", async () => { @@ -67,33 +67,33 @@ describe("Moves - Disable", () => { const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); const enemyHistory = enemyMon.getMoveHistory(); expect(enemyHistory).toHaveLength(2); - expect(enemyHistory[0].move).toBe(Moves.SPLASH); - expect(enemyHistory[1].move).toBe(Moves.STRUGGLE); + expect(enemyHistory[0].move).toBe(MoveId.SPLASH); + expect(enemyHistory[1].move).toBe(MoveId.STRUGGLE); }, 20000); it("cannot disable STRUGGLE", async () => { - game.override.enemyMoveset([Moves.STRUGGLE]); + game.override.enemyMoveset([MoveId.STRUGGLE]); await game.classicMode.startBattle(); const playerMon = game.scene.getPlayerPokemon()!; const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(playerMon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); - expect(enemyMon.getLastXMoves()[0].move).toBe(Moves.STRUGGLE); - expect(enemyMon.isMoveRestricted(Moves.STRUGGLE)).toBe(false); + expect(enemyMon.getLastXMoves()[0].move).toBe(MoveId.STRUGGLE); + expect(enemyMon.isMoveRestricted(MoveId.STRUGGLE)).toBe(false); }, 20000); it("interrupts target's move when target moves after", async () => { @@ -101,54 +101,54 @@ describe("Moves - Disable", () => { const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // Both mons just used Splash last turn; now have player use Disable. - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); const enemyHistory = enemyMon.getMoveHistory(); expect(enemyHistory).toHaveLength(2); expect(enemyHistory[0]).toMatchObject({ - move: Moves.SPLASH, + move: MoveId.SPLASH, result: MoveResult.SUCCESS, }); expect(enemyHistory[1].result).toBe(MoveResult.FAIL); }, 20000); it("disables NATURE POWER, not the move invoked by it", async () => { - game.override.enemyMoveset([Moves.NATURE_POWER]); + game.override.enemyMoveset([MoveId.NATURE_POWER]); await game.classicMode.startBattle(); const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DISABLE); + game.move.select(MoveId.DISABLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(enemyMon.isMoveRestricted(Moves.NATURE_POWER)).toBe(true); + expect(enemyMon.isMoveRestricted(MoveId.NATURE_POWER)).toBe(true); expect(enemyMon.isMoveRestricted(enemyMon.getLastXMoves(2)[0].move)).toBe(false); }, 20000); it("disables most recent move", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.TACKLE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.TACKLE]); await game.classicMode.startBattle(); const enemyMon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - game.move.select(Moves.DISABLE); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + game.move.select(MoveId.DISABLE); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - expect(enemyMon.isMoveRestricted(Moves.TACKLE)).toBe(true); - expect(enemyMon.isMoveRestricted(Moves.SPLASH)).toBe(false); + expect(enemyMon.isMoveRestricted(MoveId.TACKLE)).toBe(true); + expect(enemyMon.isMoveRestricted(MoveId.SPLASH)).toBe(false); }, 20000); }); diff --git a/test/moves/dive.test.ts b/test/moves/dive.test.ts index e67f439adf4..4091678997a 100644 --- a/test/moves/dive.test.ts +++ b/test/moves/dive.test.ts @@ -2,7 +2,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { StatusEffect } from "#enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,13 +26,13 @@ describe("Moves - Dive", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.DIVE) + .moveset(MoveId.DIVE) .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); }); it("should make the user semi-invulnerable, then attack over 2 turns", async () => { @@ -41,21 +41,21 @@ describe("Moves - Dive", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeDefined(); expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - expect(playerPokemon.getMoveQueue()[0].move).toBe(Moves.DIVE); + expect(playerPokemon.getMoveQueue()[0].move).toBe(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeUndefined(); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); expect(playerPokemon.getMoveHistory()).toHaveLength(2); - const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIVE); + const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIVE); expect(playerDive?.ppUsed).toBe(1); }); @@ -67,7 +67,7 @@ describe("Moves - Dive", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); @@ -75,31 +75,31 @@ describe("Moves - Dive", () => { }); it("should not expend PP when the attack phase is cancelled", async () => { - game.override.enemyAbility(AbilityId.NO_GUARD).enemyMoveset(Moves.SPORE); + game.override.enemyAbility(AbilityId.NO_GUARD).enemyMoveset(MoveId.SPORE); await game.classicMode.startBattle([Species.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeUndefined(); expect(playerPokemon.status?.effect).toBe(StatusEffect.SLEEP); - const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIVE); + const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIVE); expect(playerDive?.ppUsed).toBe(0); }); it("should trigger on-contact post-defend ability effects", async () => { - game.override.enemyAbility(AbilityId.ROUGH_SKIN).enemyMoveset(Moves.SPLASH); + game.override.enemyAbility(AbilityId.ROUGH_SKIN).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); @@ -109,14 +109,14 @@ describe("Moves - Dive", () => { }); it("should cancel attack after Harsh Sunlight is set", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DIVE); + game.move.select(MoveId.DIVE); await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnStartPhase", false); @@ -127,7 +127,7 @@ describe("Moves - Dive", () => { expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeUndefined(); - const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIVE); + const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.DIVE); expect(playerDive?.ppUsed).toBe(1); }); }); diff --git a/test/moves/doodle.test.ts b/test/moves/doodle.test.ts index 2caf6487844..1c5939fb434 100644 --- a/test/moves/doodle.test.ts +++ b/test/moves/doodle.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,19 +24,19 @@ describe("Moves - Doodle", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.DOODLE]) + .moveset([MoveId.SPLASH, MoveId.DOODLE]) .ability(AbilityId.ADAPTABILITY) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should copy the opponent's ability in singles", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.DOODLE); + game.move.select(MoveId.DOODLE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); @@ -46,8 +46,8 @@ describe("Moves - Doodle", () => { game.override.battleStyle("double"); await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); - game.move.select(Moves.DOODLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DOODLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField()[0].getAbility().id).toBe(AbilityId.BALL_FETCH); @@ -59,8 +59,8 @@ describe("Moves - Doodle", () => { await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); - game.move.select(Moves.DOODLE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DOODLE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); // Enemies should have been intimidated twice diff --git a/test/moves/double_team.test.ts b/test/moves/double_team.test.ts index 530324b8e12..d873d4fe4d4 100644 --- a/test/moves/double_team.test.ts +++ b/test/moves/double_team.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,12 +25,12 @@ describe("Moves - Double Team", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.DOUBLE_TEAM]) + .moveset([MoveId.DOUBLE_TEAM]) .disableCrits() .ability(AbilityId.BALL_FETCH) .enemySpecies(Species.SHUCKLE) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); }); it("raises the user's EVA stat stage by 1", async () => { @@ -42,7 +42,7 @@ describe("Moves - Double Team", () => { vi.spyOn(enemy, "getAccuracyMultiplier"); expect(ally.getStatStage(Stat.EVA)).toBe(0); - game.move.select(Moves.DOUBLE_TEAM); + game.move.select(MoveId.DOUBLE_TEAM); await game.phaseInterceptor.to(TurnEndPhase); await game.toNextTurn(); diff --git a/test/moves/dragon_cheer.test.ts b/test/moves/dragon_cheer.test.ts index ada7385132b..fd709ffd16c 100644 --- a/test/moves/dragon_cheer.test.ts +++ b/test/moves/dragon_cheer.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; @@ -25,9 +25,9 @@ describe("Moves - Dragon Cheer", () => { game.override .battleStyle("double") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(20) - .moveset([Moves.DRAGON_CHEER, Moves.TACKLE, Moves.SPLASH]); + .moveset([MoveId.DRAGON_CHEER, MoveId.TACKLE, MoveId.SPLASH]); }); it("increases the user's allies' critical hit ratio by one stage", async () => { @@ -37,8 +37,8 @@ describe("Moves - Dragon Cheer", () => { vi.spyOn(enemy, "getCritStage"); - game.move.select(Moves.DRAGON_CHEER, 0); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DRAGON_CHEER, 0); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -54,8 +54,8 @@ describe("Moves - Dragon Cheer", () => { vi.spyOn(enemy, "getCritStage"); - game.move.select(Moves.DRAGON_CHEER, 0); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DRAGON_CHEER, 0); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -72,8 +72,8 @@ describe("Moves - Dragon Cheer", () => { vi.spyOn(enemy, "getCritStage"); - game.move.select(Moves.DRAGON_CHEER, 0); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DRAGON_CHEER, 0); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -87,8 +87,8 @@ describe("Moves - Dragon Cheer", () => { vi.spyOn(magikarp, "getTypes").mockReturnValue([PokemonType.DRAGON]); expect(magikarp.getTypes()).toEqual([PokemonType.DRAGON]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); diff --git a/test/moves/dragon_rage.test.ts b/test/moves/dragon_rage.test.ts index 366e774cae8..b3d5b1a103c 100644 --- a/test/moves/dragon_rage.test.ts +++ b/test/moves/dragon_rage.test.ts @@ -5,7 +5,7 @@ import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -34,13 +34,13 @@ describe("Moves - Dragon Rage", () => { game.override.battleStyle("single"); game.override.starterSpecies(Species.SNORLAX); - game.override.moveset([Moves.DRAGON_RAGE]); + game.override.moveset([MoveId.DRAGON_RAGE]); game.override.ability(AbilityId.BALL_FETCH); game.override.passiveAbility(AbilityId.BALL_FETCH); game.override.startingLevel(100); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemyAbility(AbilityId.BALL_FETCH); game.override.enemyPassiveAbility(AbilityId.BALL_FETCH); game.override.enemyLevel(100); @@ -55,7 +55,7 @@ describe("Moves - Dragon Rage", () => { game.override.disableCrits(); vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([PokemonType.DRAGON]); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); @@ -65,7 +65,7 @@ describe("Moves - Dragon Rage", () => { game.override.disableCrits(); vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([PokemonType.STEEL]); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); @@ -75,7 +75,7 @@ describe("Moves - Dragon Rage", () => { game.override.disableCrits(); partyPokemon.setStatStage(Stat.SPATK, 2); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); @@ -85,7 +85,7 @@ describe("Moves - Dragon Rage", () => { game.override.disableCrits(); vi.spyOn(partyPokemon, "getTypes").mockReturnValue([PokemonType.DRAGON]); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); @@ -94,7 +94,7 @@ describe("Moves - Dragon Rage", () => { it("ignores criticals", async () => { partyPokemon.addTag(BattlerTagType.ALWAYS_CRIT, 99); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); @@ -104,7 +104,7 @@ describe("Moves - Dragon Rage", () => { game.override.disableCrits(); game.override.enemyAbility(AbilityId.ICE_SCALES); - game.move.select(Moves.DRAGON_RAGE); + game.move.select(MoveId.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); expect(enemyPokemon.getInverseHp()).toBe(dragonRageDamage); diff --git a/test/moves/dragon_tail.test.ts b/test/moves/dragon_tail.test.ts index 3800a8a5bf0..9faa343d7be 100644 --- a/test/moves/dragon_tail.test.ts +++ b/test/moves/dragon_tail.test.ts @@ -5,7 +5,7 @@ import { Challenges } from "#enums/challenges"; import { StatusEffect } from "#enums/status-effect"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,13 +29,13 @@ describe("Moves - Dragon Tail", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.DRAGON_TAIL, Moves.SPLASH, Moves.FLAMETHROWER]) + .moveset([MoveId.DRAGON_TAIL, MoveId.SPLASH, MoveId.FLAMETHROWER]) .enemySpecies(Species.WAILORD) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(5) .enemyLevel(5); - vi.spyOn(allMoves[Moves.DRAGON_TAIL], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.DRAGON_TAIL], "accuracy", "get").mockReturnValue(100); }); it("should cause opponent to flee, and not crash", async () => { @@ -43,7 +43,7 @@ describe("Moves - Dragon Tail", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DRAGON_TAIL); + game.move.select(MoveId.DRAGON_TAIL); await game.phaseInterceptor.to("BerryPhase"); @@ -62,7 +62,7 @@ describe("Moves - Dragon Tail", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DRAGON_TAIL); + game.move.select(MoveId.DRAGON_TAIL); await game.phaseInterceptor.to("BerryPhase"); @@ -73,7 +73,7 @@ describe("Moves - Dragon Tail", () => { }); it("should proceed without crashing in a double battle", async () => { - game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).enemyAbility(AbilityId.ROUGH_SKIN); + game.override.battleStyle("double").enemyMoveset(MoveId.SPLASH).enemyAbility(AbilityId.ROUGH_SKIN); await game.classicMode.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); const leadPokemon = game.scene.getPlayerParty()[0]!; @@ -81,8 +81,8 @@ describe("Moves - Dragon Tail", () => { const enemyLeadPokemon = game.scene.getEnemyParty()[0]!; const enemySecPokemon = game.scene.getEnemyParty()[1]!; - game.move.select(Moves.DRAGON_TAIL, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.DRAGON_TAIL, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -94,15 +94,15 @@ describe("Moves - Dragon Tail", () => { expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp()); // second turn - game.move.select(Moves.FLAMETHROWER, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLAMETHROWER, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(enemySecPokemon.hp).toBeLessThan(enemySecPokemon.getMaxHp()); }); it("should redirect targets upon opponent flee", async () => { - game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).enemyAbility(AbilityId.ROUGH_SKIN); + game.override.battleStyle("double").enemyMoveset(MoveId.SPLASH).enemyAbility(AbilityId.ROUGH_SKIN); await game.classicMode.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); const leadPokemon = game.scene.getPlayerParty()[0]!; @@ -111,9 +111,9 @@ describe("Moves - Dragon Tail", () => { const enemyLeadPokemon = game.scene.getEnemyParty()[0]!; const enemySecPokemon = game.scene.getEnemyParty()[1]!; - game.move.select(Moves.DRAGON_TAIL, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.DRAGON_TAIL, 0, BattlerIndex.ENEMY); // target the same pokemon, second move should be redirected after first flees - game.move.select(Moves.DRAGON_TAIL, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DRAGON_TAIL, 1, BattlerIndex.ENEMY); await game.phaseInterceptor.to("BerryPhase"); @@ -134,7 +134,7 @@ describe("Moves - Dragon Tail", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DRAGON_TAIL); + game.move.select(MoveId.DRAGON_TAIL); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.isFullHp()).toBe(false); @@ -144,7 +144,7 @@ describe("Moves - Dragon Tail", () => { game.override.startingWave(5).startingLevel(1000); // To make sure Dragon Tail KO's the opponent await game.classicMode.startBattle([Species.DRATINI]); - game.move.select(Moves.DRAGON_TAIL); + game.move.select(MoveId.DRAGON_TAIL); await game.toNextTurn(); @@ -166,7 +166,7 @@ describe("Moves - Dragon Tail", () => { .startingLevel(1000); // To make sure Dragon Tail KO's the opponent await game.classicMode.startBattle([Species.DRATINI]); - game.move.select(Moves.DRAGON_TAIL); + game.move.select(MoveId.DRAGON_TAIL); await game.toNextTurn(); @@ -180,11 +180,11 @@ describe("Moves - Dragon Tail", () => { it("should not cause a softlock when activating a player's reviver seed", async () => { game.override .startingHeldItems([{ name: "REVIVER_SEED" }]) - .enemyMoveset(Moves.DRAGON_TAIL) + .enemyMoveset(MoveId.DRAGON_TAIL) .enemyLevel(1000); // To make sure Dragon Tail KO's the player await game.classicMode.startBattle([Species.DRATINI, Species.BULBASAUR]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); @@ -196,7 +196,7 @@ describe("Moves - Dragon Tail", () => { }); it("should force switches randomly", async () => { - game.override.enemyMoveset(Moves.DRAGON_TAIL).startingLevel(100).enemyLevel(1); + game.override.enemyMoveset(MoveId.DRAGON_TAIL).startingLevel(100).enemyLevel(1); await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); const [bulbasaur, charmander, squirtle] = game.scene.getPlayerParty(); @@ -205,8 +205,8 @@ describe("Moves - Dragon Tail", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.DRAGON_TAIL); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.DRAGON_TAIL); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -218,7 +218,7 @@ describe("Moves - Dragon Tail", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min + 1; }); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -228,7 +228,7 @@ describe("Moves - Dragon Tail", () => { }); it("should not force a switch to a challenge-ineligible Pokemon", async () => { - game.override.enemyMoveset(Moves.DRAGON_TAIL).startingLevel(100).enemyLevel(1); + game.override.enemyMoveset(MoveId.DRAGON_TAIL).startingLevel(100).enemyLevel(1); // Mono-Water challenge, Eevee is ineligible game.challengeMode.addChallenge(Challenges.SINGLE_TYPE, PokemonType.WATER + 1, 0); await game.challengeMode.startBattle([Species.LAPRAS, Species.EEVEE, Species.TOXAPEX, Species.PRIMARINA]); @@ -239,7 +239,7 @@ describe("Moves - Dragon Tail", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -250,7 +250,7 @@ describe("Moves - Dragon Tail", () => { }); it("should not force a switch to a fainted Pokemon", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.DRAGON_TAIL]).startingLevel(100).enemyLevel(1); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.DRAGON_TAIL]).startingLevel(100).enemyLevel(1); await game.classicMode.startBattle([Species.LAPRAS, Species.EEVEE, Species.TOXAPEX, Species.PRIMARINA]); const [lapras, eevee, toxapex, primarina] = game.scene.getPlayerParty(); @@ -259,16 +259,16 @@ describe("Moves - Dragon Tail", () => { eevee.hp = 0; eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.DRAGON_TAIL); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.DRAGON_TAIL); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -279,7 +279,7 @@ describe("Moves - Dragon Tail", () => { }); it("should not force a switch if there are no available Pokemon to switch into", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.DRAGON_TAIL]).startingLevel(100).enemyLevel(1); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.DRAGON_TAIL]).startingLevel(100).enemyLevel(1); await game.classicMode.startBattle([Species.LAPRAS, Species.EEVEE]); const [lapras, eevee] = game.scene.getPlayerParty(); @@ -288,16 +288,16 @@ describe("Moves - Dragon Tail", () => { eevee.hp = 0; eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.DRAGON_TAIL); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.DRAGON_TAIL); await game.toNextTurn(); expect(lapras.isOnField()).toBe(true); diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 19a15225653..12b1671814f 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type Move from "#app/data/moves/move"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -26,17 +26,17 @@ describe("Moves - Dynamax Cannon", () => { }); beforeEach(() => { - dynamaxCannon = allMoves[Moves.DYNAMAX_CANNON]; + dynamaxCannon = allMoves[MoveId.DYNAMAX_CANNON]; game = new GameManager(phaserGame); game.override - .moveset(Moves.DYNAMAX_CANNON) + .moveset(MoveId.DYNAMAX_CANNON) .startingLevel(200) .levelCap(10) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); // Note that, for Waves 1-10, the level cap is 10 game.override.startingWave(1); @@ -44,7 +44,7 @@ describe("Moves - Dynamax Cannon", () => { game.override.disableCrits(); game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH]); vi.spyOn(dynamaxCannon, "calculateBattlePower"); }); diff --git a/test/moves/effectiveness.test.ts b/test/moves/effectiveness.test.ts index 20da553d15d..f7e4a307623 100644 --- a/test/moves/effectiveness.test.ts +++ b/test/moves/effectiveness.test.ts @@ -3,7 +3,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TrainerSlot } from "#enums/trainer-slot"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import * as Messages from "#app/messages"; import GameManager from "#test/testUtils/gameManager"; @@ -12,7 +12,7 @@ import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; function testMoveEffectiveness( game: GameManager, - move: Moves, + move: MoveId, targetSpecies: Species, expected: number, targetAbility: AbilityId = AbilityId.BALL_FETCH, @@ -53,48 +53,48 @@ describe("Moves - Type Effectiveness", () => { }); it("Normal-type attacks are neutrally effective against Normal-type Pokemon", () => - testMoveEffectiveness(game, Moves.TACKLE, Species.SNORLAX, 1)); + testMoveEffectiveness(game, MoveId.TACKLE, Species.SNORLAX, 1)); it("Normal-type attacks are not very effective against Steel-type Pokemon", () => - testMoveEffectiveness(game, Moves.TACKLE, Species.REGISTEEL, 0.5)); + testMoveEffectiveness(game, MoveId.TACKLE, Species.REGISTEEL, 0.5)); it("Normal-type attacks are doubly resisted by Steel/Rock-type Pokemon", () => - testMoveEffectiveness(game, Moves.TACKLE, Species.AGGRON, 0.25)); + testMoveEffectiveness(game, MoveId.TACKLE, Species.AGGRON, 0.25)); it("Normal-type attacks have no effect on Ghost-type Pokemon", () => - testMoveEffectiveness(game, Moves.TACKLE, Species.DUSCLOPS, 0)); + testMoveEffectiveness(game, MoveId.TACKLE, Species.DUSCLOPS, 0)); it("Normal-type status moves are not affected by type matchups", () => - testMoveEffectiveness(game, Moves.GROWL, Species.DUSCLOPS, 1)); + testMoveEffectiveness(game, MoveId.GROWL, Species.DUSCLOPS, 1)); it("Electric-type attacks are super-effective against Water-type Pokemon", () => - testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.BLASTOISE, 2)); + testMoveEffectiveness(game, MoveId.THUNDERBOLT, Species.BLASTOISE, 2)); it("Ghost-type attacks have no effect on Normal-type Pokemon", () => - testMoveEffectiveness(game, Moves.SHADOW_BALL, Species.URSALUNA, 0)); + testMoveEffectiveness(game, MoveId.SHADOW_BALL, Species.URSALUNA, 0)); it("Electric-type attacks are doubly super-effective against Water/Flying-type Pokemon", () => - testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.GYARADOS, 4)); + testMoveEffectiveness(game, MoveId.THUNDERBOLT, Species.GYARADOS, 4)); it("Electric-type attacks are negated by Volt Absorb", () => - testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.GYARADOS, 0, AbilityId.VOLT_ABSORB)); + testMoveEffectiveness(game, MoveId.THUNDERBOLT, Species.GYARADOS, 0, AbilityId.VOLT_ABSORB)); it("Electric-type attacks are super-effective against Tera-Water Pokemon", () => - testMoveEffectiveness(game, Moves.THUNDERBOLT, Species.EXCADRILL, 2, AbilityId.BALL_FETCH, PokemonType.WATER)); + testMoveEffectiveness(game, MoveId.THUNDERBOLT, Species.EXCADRILL, 2, AbilityId.BALL_FETCH, PokemonType.WATER)); it("Powder moves have no effect on Grass-type Pokemon", () => - testMoveEffectiveness(game, Moves.SLEEP_POWDER, Species.AMOONGUSS, 0)); + testMoveEffectiveness(game, MoveId.SLEEP_POWDER, Species.AMOONGUSS, 0)); it("Powder moves have no effect on Tera-Grass Pokemon", () => - testMoveEffectiveness(game, Moves.SLEEP_POWDER, Species.SNORLAX, 0, AbilityId.BALL_FETCH, PokemonType.GRASS)); + testMoveEffectiveness(game, MoveId.SLEEP_POWDER, Species.SNORLAX, 0, AbilityId.BALL_FETCH, PokemonType.GRASS)); it("Prankster-boosted status moves have no effect on Dark-type Pokemon", () => { game.override.ability(AbilityId.PRANKSTER); - testMoveEffectiveness(game, Moves.BABY_DOLL_EYES, Species.MIGHTYENA, 0); + testMoveEffectiveness(game, MoveId.BABY_DOLL_EYES, Species.MIGHTYENA, 0); }); it("Prankster-boosted status moves have no effect on Tera-Dark Pokemon", () => { game.override.ability(AbilityId.PRANKSTER); - testMoveEffectiveness(game, Moves.BABY_DOLL_EYES, Species.SNORLAX, 0, AbilityId.BALL_FETCH, PokemonType.DARK); + testMoveEffectiveness(game, MoveId.BABY_DOLL_EYES, Species.SNORLAX, 0, AbilityId.BALL_FETCH, PokemonType.DARK); }); }); diff --git a/test/moves/electrify.test.ts b/test/moves/electrify.test.ts index d692ebd7b72..d89159e1ea3 100644 --- a/test/moves/electrify.test.ts +++ b/test/moves/electrify.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,12 +24,12 @@ describe("Moves - Electrify", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.ELECTRIFY) + .moveset(MoveId.ELECTRIFY) .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TACKLE) + .enemyMoveset(MoveId.TACKLE) .enemyLevel(100); }); @@ -40,7 +40,7 @@ describe("Moves - Electrify", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "getMoveType"); - game.move.select(Moves.ELECTRIFY); + game.move.select(MoveId.ELECTRIFY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -58,7 +58,7 @@ describe("Moves - Electrify", () => { const enemyPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(enemyPokemon, "getMoveType"); - game.move.select(Moves.ELECTRIFY); + game.move.select(MoveId.ELECTRIFY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); diff --git a/test/moves/electro_shot.test.ts b/test/moves/electro_shot.test.ts index af699eba92d..eb0e7466c39 100644 --- a/test/moves/electro_shot.test.ts +++ b/test/moves/electro_shot.test.ts @@ -3,7 +3,7 @@ import { Stat } from "#enums/stat"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,13 +26,13 @@ describe("Moves - Electro Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.ELECTRO_SHOT) + .moveset(MoveId.ELECTRO_SHOT) .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should increase the user's Sp. Atk on the first turn, then attack on the second turn", async () => { @@ -41,7 +41,7 @@ describe("Moves - Electro Shot", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ELECTRO_SHOT); + game.move.select(MoveId.ELECTRO_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeDefined(); @@ -56,7 +56,7 @@ describe("Moves - Electro Shot", () => { expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.ELECTRO_SHOT); + const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.ELECTRO_SHOT); expect(playerElectroShot?.ppUsed).toBe(1); }); @@ -71,7 +71,7 @@ describe("Moves - Electro Shot", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ELECTRO_SHOT); + game.move.select(MoveId.ELECTRO_SHOT); await game.phaseInterceptor.to("MoveEffectPhase", false); expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); @@ -82,7 +82,7 @@ describe("Moves - Electro Shot", () => { expect(playerPokemon.getMoveHistory()).toHaveLength(2); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.ELECTRO_SHOT); + const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.ELECTRO_SHOT); expect(playerElectroShot?.ppUsed).toBe(1); }); @@ -93,7 +93,7 @@ describe("Moves - Electro Shot", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.ELECTRO_SHOT); + game.move.select(MoveId.ELECTRO_SHOT); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.turnData.hitCount).toBe(1); diff --git a/test/moves/encore.test.ts b/test/moves/encore.test.ts index 6d6bc9344ce..146392d285e 100644 --- a/test/moves/encore.test.ts +++ b/test/moves/encore.test.ts @@ -2,7 +2,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,13 +25,13 @@ describe("Moves - Encore", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.ENCORE]) + .moveset([MoveId.SPLASH, MoveId.ENCORE]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.TACKLE]) + .enemyMoveset([MoveId.SPLASH, MoveId.TACKLE]) .startingLevel(100) .enemyLevel(100); }); @@ -41,27 +41,27 @@ describe("Moves - Encore", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ENCORE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.ENCORE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.getTag(BattlerTagType.ENCORE)).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); // The enemy AI would normally be inclined to use Tackle, but should be // forced into using Splash. await game.phaseInterceptor.to("BerryPhase", false); - expect(enemyPokemon.getLastXMoves().every(turnMove => turnMove.move === Moves.SPLASH)).toBeTruthy(); + expect(enemyPokemon.getLastXMoves().every(turnMove => turnMove.move === MoveId.SPLASH)).toBeTruthy(); }); describe("should fail against the following moves:", () => { it.each([ - { moveId: Moves.TRANSFORM, name: "Transform", delay: false }, - { moveId: Moves.MIMIC, name: "Mimic", delay: true }, - { moveId: Moves.SKETCH, name: "Sketch", delay: true }, - { moveId: Moves.ENCORE, name: "Encore", delay: false }, - { moveId: Moves.STRUGGLE, name: "Struggle", delay: false }, + { moveId: MoveId.TRANSFORM, name: "Transform", delay: false }, + { moveId: MoveId.MIMIC, name: "Mimic", delay: true }, + { moveId: MoveId.SKETCH, name: "Sketch", delay: true }, + { moveId: MoveId.ENCORE, name: "Encore", delay: false }, + { moveId: MoveId.STRUGGLE, name: "Struggle", delay: false }, ])("$name", async ({ moveId, delay }) => { game.override.enemyMoveset(moveId); @@ -71,12 +71,12 @@ describe("Moves - Encore", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; if (delay) { - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); } - game.move.select(Moves.ENCORE); + game.move.select(MoveId.ENCORE); const turnOrder = delay ? [BattlerIndex.PLAYER, BattlerIndex.ENEMY] : [BattlerIndex.ENEMY, BattlerIndex.PLAYER]; await game.setTurnOrder(turnOrder); @@ -89,26 +89,26 @@ describe("Moves - Encore", () => { it("Pokemon under both Encore and Torment should alternate between Struggle and restricted move", async () => { const turnOrder = [BattlerIndex.ENEMY, BattlerIndex.PLAYER]; - game.override.moveset([Moves.ENCORE, Moves.TORMENT, Moves.SPLASH]); + game.override.moveset([MoveId.ENCORE, MoveId.TORMENT, MoveId.SPLASH]); await game.classicMode.startBattle([Species.FEEBAS]); const enemyPokemon = game.scene.getEnemyPokemon(); - game.move.select(Moves.ENCORE); + game.move.select(MoveId.ENCORE); await game.setTurnOrder(turnOrder); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon?.getTag(BattlerTagType.ENCORE)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.TORMENT); + game.move.select(MoveId.TORMENT); await game.setTurnOrder(turnOrder); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon?.getTag(BattlerTagType.TORMENT)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder(turnOrder); await game.phaseInterceptor.to("BerryPhase"); const lastMove = enemyPokemon?.getLastXMoves()[0]; - expect(lastMove?.move).toBe(Moves.STRUGGLE); + expect(lastMove?.move).toBe(MoveId.STRUGGLE); }); }); diff --git a/test/moves/endure.test.ts b/test/moves/endure.test.ts index 0c1d3fbd99b..aff1a23edc4 100644 --- a/test/moves/endure.test.ts +++ b/test/moves/endure.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -22,20 +22,20 @@ describe("Moves - Endure", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.THUNDER, Moves.BULLET_SEED, Moves.TOXIC, Moves.SHEER_COLD]) + .moveset([MoveId.THUNDER, MoveId.BULLET_SEED, MoveId.TOXIC, MoveId.SHEER_COLD]) .ability(AbilityId.SKILL_LINK) .startingLevel(100) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.NO_GUARD) - .enemyMoveset(Moves.ENDURE); + .enemyMoveset(MoveId.ENDURE); }); it("should let the pokemon survive with 1 HP", async () => { await game.classicMode.startBattle([Species.ARCEUS]); - game.move.select(Moves.THUNDER); + game.move.select(MoveId.THUNDER); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.hp).toBe(1); @@ -44,7 +44,7 @@ describe("Moves - Endure", () => { it("should let the pokemon survive with 1 HP when hit with a multihit move", async () => { await game.classicMode.startBattle([Species.ARCEUS]); - game.move.select(Moves.BULLET_SEED); + game.move.select(MoveId.BULLET_SEED); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.hp).toBe(1); @@ -54,7 +54,7 @@ describe("Moves - Endure", () => { await game.classicMode.startBattle([Species.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SHEER_COLD); + game.move.select(MoveId.SHEER_COLD); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.isFainted()).toBeFalsy(); @@ -62,18 +62,18 @@ describe("Moves - Endure", () => { // comprehensive indirect damage test copied from Reviver Seed test it.each([ - { moveType: "Damaging Move Chip Damage", move: Moves.SALT_CURE }, - { moveType: "Chip Damage", move: Moves.LEECH_SEED }, - { moveType: "Trapping Chip Damage", move: Moves.WHIRLPOOL }, - { moveType: "Status Effect Damage", move: Moves.TOXIC }, - { moveType: "Weather", move: Moves.SANDSTORM }, + { moveType: "Damaging Move Chip Damage", move: MoveId.SALT_CURE }, + { moveType: "Chip Damage", move: MoveId.LEECH_SEED }, + { moveType: "Trapping Chip Damage", move: MoveId.WHIRLPOOL }, + { moveType: "Status Effect Damage", move: MoveId.TOXIC }, + { moveType: "Weather", move: MoveId.SANDSTORM }, ])("should not prevent fainting from $moveType", async ({ move }) => { game.override .enemyLevel(1) .startingLevel(100) .enemySpecies(Species.MAGIKARP) .moveset(move) - .enemyMoveset(Moves.ENDURE); + .enemyMoveset(MoveId.ENDURE); await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; enemy.damageAndUpdate(enemy.hp - 1); diff --git a/test/moves/entrainment.test.ts b/test/moves/entrainment.test.ts index dfb26aae6de..c17d99c81c3 100644 --- a/test/moves/entrainment.test.ts +++ b/test/moves/entrainment.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,19 +23,19 @@ describe("Moves - Entrainment", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.ENTRAINMENT]) + .moveset([MoveId.SPLASH, MoveId.ENTRAINMENT]) .ability(AbilityId.ADAPTABILITY) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("gives its ability to the target", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.ENTRAINMENT); + game.move.select(MoveId.ENTRAINMENT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.ADAPTABILITY); @@ -45,7 +45,7 @@ describe("Moves - Entrainment", () => { game.override.ability(AbilityId.INTIMIDATE); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.ENTRAINMENT); + game.move.select(MoveId.ENTRAINMENT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/moves/fairy_lock.test.ts b/test/moves/fairy_lock.test.ts index e3557a8b147..3f77374e187 100644 --- a/test/moves/fairy_lock.test.ts +++ b/test/moves/fairy_lock.test.ts @@ -1,7 +1,7 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,13 +24,13 @@ describe("Moves - Fairy Lock", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.FAIRY_LOCK, Moves.SPLASH]) + .moveset([MoveId.FAIRY_LOCK, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.U_TURN]); + .enemyMoveset([MoveId.SPLASH, MoveId.U_TURN]); }); it("Applies Fairy Lock tag for two turns", async () => { @@ -38,20 +38,20 @@ describe("Moves - Fairy Lock", () => { const playerPokemon = game.scene.getPlayerField(); const enemyField = game.scene.getEnemyField(); - game.move.select(Moves.FAIRY_LOCK); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + game.move.select(MoveId.FAIRY_LOCK); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(playerPokemon[0].isTrapped()).toEqual(true); expect(playerPokemon[1].isTrapped()).toEqual(true); @@ -68,10 +68,10 @@ describe("Moves - Fairy Lock", () => { it("Ghost types can escape Fairy Lock", async () => { await game.classicMode.startBattle([Species.DUSKNOIR, Species.GENGAR, Species.TYRUNT]); - game.move.select(Moves.FAIRY_LOCK); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + game.move.select(MoveId.FAIRY_LOCK); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); @@ -82,10 +82,10 @@ describe("Moves - Fairy Lock", () => { expect(game.scene.getPlayerField()[0].isTrapped()).toEqual(false); expect(game.scene.getPlayerField()[1].isTrapped()).toEqual(false); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.doSwitchPokemon(2); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); await game.toNextTurn(); @@ -93,24 +93,24 @@ describe("Moves - Fairy Lock", () => { }); it("Phasing moves will still switch out", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.WHIRLWIND]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]); await game.classicMode.startBattle([Species.KLEFKI, Species.TYRUNT, Species.ZYGARDE]); - game.move.select(Moves.FAIRY_LOCK); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + game.move.select(MoveId.FAIRY_LOCK); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND, 0); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND, 0); game.doSelectPartyPokemon(2); - await game.move.selectEnemyMove(Moves.WHIRLWIND, 1); + await game.move.selectEnemyMove(MoveId.WHIRLWIND, 1); game.doSelectPartyPokemon(2); await game.phaseInterceptor.to("BerryPhase"); await game.toNextTurn(); @@ -120,23 +120,23 @@ describe("Moves - Fairy Lock", () => { }); it("If a Pokemon faints and is replaced the replacement is also trapped", async () => { - game.override.moveset([Moves.FAIRY_LOCK, Moves.SPLASH, Moves.MEMENTO]); + game.override.moveset([MoveId.FAIRY_LOCK, MoveId.SPLASH, MoveId.MEMENTO]); await game.classicMode.startBattle([Species.KLEFKI, Species.GUZZLORD, Species.TYRUNT, Species.ZYGARDE]); - game.move.select(Moves.FAIRY_LOCK); - game.move.select(Moves.MEMENTO, 1); + game.move.select(MoveId.FAIRY_LOCK); + game.move.select(MoveId.MEMENTO, 1); game.doSelectPartyPokemon(2); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField()[0].isTrapped()).toEqual(true); expect(game.scene.getPlayerField()[1].isTrapped()).toEqual(true); diff --git a/test/moves/fake_out.test.ts b/test/moves/fake_out.test.ts index 404473c8fa0..c9a9ea81438 100644 --- a/test/moves/fake_out.test.ts +++ b/test/moves/fake_out.test.ts @@ -1,5 +1,5 @@ import GameManager from "#test/testUtils/gameManager"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -23,8 +23,8 @@ describe("Moves - Fake Out", () => { game.override .battleStyle("single") .enemySpecies(Species.CORVIKNIGHT) - .moveset([Moves.FAKE_OUT, Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.FAKE_OUT, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(10) .startingLevel(1) // prevent LevelUpPhase from happening .disableCrits(); @@ -35,13 +35,13 @@ describe("Moves - Fake Out", () => { const corv = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); expect(corv.hp).toBeLessThan(corv.getMaxHp()); const postTurnOneHp = corv.hp; - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); expect(corv.hp).toBe(postTurnOneHp); @@ -53,10 +53,10 @@ describe("Moves - Fake Out", () => { // set hp to 1 for easy knockout game.scene.getEnemyPokemon()!.hp = 1; - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextWave(); - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); const corv = game.scene.getEnemyPokemon()!; @@ -70,10 +70,10 @@ describe("Moves - Fake Out", () => { // set hp to 1 for easy knockout game.scene.getEnemyPokemon()!.hp = 1; - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextWave(); - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); const corv = game.scene.getEnemyPokemon()!; @@ -84,7 +84,7 @@ describe("Moves - Fake Out", () => { it("should succeed if recalled and sent back out", async () => { await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); const corv = game.scene.getEnemyPokemon()!; @@ -98,7 +98,7 @@ describe("Moves - Fake Out", () => { game.doSwitchPokemon(1); await game.toNextTurn(); - game.move.select(Moves.FAKE_OUT); + game.move.select(MoveId.FAKE_OUT); await game.toNextTurn(); expect(corv.hp).toBeLessThan(corv.getMaxHp()); diff --git a/test/moves/false_swipe.test.ts b/test/moves/false_swipe.test.ts index 12266169719..6a178cf58d6 100644 --- a/test/moves/false_swipe.test.ts +++ b/test/moves/false_swipe.test.ts @@ -1,6 +1,6 @@ import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,14 +23,14 @@ describe("Moves - False Swipe", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.FALSE_SWIPE]) + .moveset([MoveId.FALSE_SWIPE]) .ability(AbilityId.BALL_FETCH) .startingLevel(1000) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should reduce the target to 1 HP", async () => { @@ -39,15 +39,15 @@ describe("Moves - False Swipe", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.toNextTurn(); - game.move.select(Moves.FALSE_SWIPE); + game.move.select(MoveId.FALSE_SWIPE); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.hp).toBe(1); const falseSwipeHistory = player .getMoveHistory() - .every(turnMove => turnMove.move === Moves.FALSE_SWIPE && turnMove.result === MoveResult.SUCCESS); + .every(turnMove => turnMove.move === MoveId.FALSE_SWIPE && turnMove.result === MoveResult.SUCCESS); expect(falseSwipeHistory).toBe(true); }); }); diff --git a/test/moves/fell_stinger.test.ts b/test/moves/fell_stinger.test.ts index 759537ba129..fc282b8f677 100644 --- a/test/moves/fell_stinger.test.ts +++ b/test/moves/fell_stinger.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { WeatherType } from "#app/enums/weather-type"; @@ -28,21 +28,21 @@ describe("Moves - Fell Stinger", () => { game.override .battleStyle("single") - .moveset([Moves.FELL_STINGER, Moves.SALT_CURE, Moves.BIND, Moves.LEECH_SEED]) + .moveset([MoveId.FELL_STINGER, MoveId.SALT_CURE, MoveId.BIND, MoveId.LEECH_SEED]) .startingLevel(50) .disableCrits() .enemyAbility(AbilityId.STURDY) .enemySpecies(Species.HYPNO) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(5); }); it("should not grant stat boost if opponent gets KO'd by recoil", async () => { - game.override.enemyMoveset([Moves.DOUBLE_EDGE]); + game.override.enemyMoveset([MoveId.DOUBLE_EDGE]); await game.classicMode.startBattle([Species.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("VictoryPhase"); @@ -50,11 +50,11 @@ describe("Moves - Fell Stinger", () => { }); it("should not grant stat boost if enemy is KO'd by status effect", async () => { - game.override.enemyMoveset(Moves.SPLASH).enemyStatusEffect(StatusEffect.BURN); + game.override.enemyMoveset(MoveId.SPLASH).enemyStatusEffect(StatusEffect.BURN); await game.classicMode.startBattle([Species.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("VictoryPhase"); @@ -67,7 +67,7 @@ describe("Moves - Fell Stinger", () => { await game.classicMode.startBattle([Species.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("VictoryPhase"); @@ -80,7 +80,7 @@ describe("Moves - Fell Stinger", () => { await game.challengeMode.startBattle([Species.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("VictoryPhase"); @@ -92,7 +92,7 @@ describe("Moves - Fell Stinger", () => { await game.classicMode.startBattle([Species.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("TurnEndPhase"); expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); @@ -100,8 +100,8 @@ describe("Moves - Fell Stinger", () => { it("should not grant stat boost if enemy is KO'd by Salt Cure", async () => { game.override.battleStyle("double").startingLevel(5); - const saltCure = allMoves[Moves.SALT_CURE]; - const fellStinger = allMoves[Moves.FELL_STINGER]; + const saltCure = allMoves[MoveId.SALT_CURE]; + const fellStinger = allMoves[MoveId.FELL_STINGER]; vi.spyOn(saltCure, "accuracy", "get").mockReturnValue(100); vi.spyOn(fellStinger, "power", "get").mockReturnValue(50000); @@ -110,13 +110,13 @@ describe("Moves - Fell Stinger", () => { const leftEnemy = game.scene.getEnemyField()[0]!; // Turn 1: set Salt Cure, enemy splashes and does nothing - game.move.select(Moves.SALT_CURE, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.SALT_CURE, 0, leftEnemy.getBattlerIndex()); // Turn 2: enemy Endures Fell Stinger, then dies to Salt Cure await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(false); leftEnemy.heal(leftEnemy.getMaxHp()); - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(true); @@ -125,21 +125,21 @@ describe("Moves - Fell Stinger", () => { it("should not grant stat boost if enemy dies to Bind or a similar effect", async () => { game.override.battleStyle("double").startingLevel(5); - vi.spyOn(allMoves[Moves.BIND], "accuracy", "get").mockReturnValue(100); - vi.spyOn(allMoves[Moves.FELL_STINGER], "power", "get").mockReturnValue(50000); + vi.spyOn(allMoves[MoveId.BIND], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.FELL_STINGER], "power", "get").mockReturnValue(50000); await game.classicMode.startBattle([Species.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; const leftEnemy = game.scene.getEnemyField()[0]!; // Turn 1: set Bind, enemy splashes and does nothing - game.move.select(Moves.BIND, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.BIND, 0, leftEnemy.getBattlerIndex()); // Turn 2: enemy Endures Fell Stinger, then dies to Bind await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(false); leftEnemy.heal(leftEnemy.getMaxHp()); - game.move.select(Moves.FELL_STINGER, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.FELL_STINGER, 0, leftEnemy.getBattlerIndex()); await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(true); @@ -148,21 +148,21 @@ describe("Moves - Fell Stinger", () => { it("should not grant stat boost if enemy dies to Leech Seed", async () => { game.override.battleStyle("double").startingLevel(5); - vi.spyOn(allMoves[Moves.LEECH_SEED], "accuracy", "get").mockReturnValue(100); - vi.spyOn(allMoves[Moves.FELL_STINGER], "power", "get").mockReturnValue(50000); + vi.spyOn(allMoves[MoveId.LEECH_SEED], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.FELL_STINGER], "power", "get").mockReturnValue(50000); await game.classicMode.startBattle([Species.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon()!; const leftEnemy = game.scene.getEnemyField()[0]!; // Turn 1: set Leech Seed, enemy splashes and does nothing - game.move.select(Moves.LEECH_SEED, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.LEECH_SEED, 0, leftEnemy.getBattlerIndex()); // Turn 2: enemy Endures Fell Stinger, then dies to Leech Seed await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(false); leftEnemy.heal(leftEnemy.getMaxHp()); - game.move.select(Moves.FELL_STINGER, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.FELL_STINGER, 0, leftEnemy.getBattlerIndex()); await game.toNextTurn(); expect(leftEnemy.isFainted()).toBe(true); @@ -174,7 +174,7 @@ describe("Moves - Fell Stinger", () => { await game.classicMode.startBattle([Species.LEAVANNY]); const leadPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.FELL_STINGER); + game.move.select(MoveId.FELL_STINGER); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/fillet_away.test.ts b/test/moves/fillet_away.test.ts index 9de237b28a1..03a2ea5cddc 100644 --- a/test/moves/fillet_away.test.ts +++ b/test/moves/fillet_away.test.ts @@ -1,6 +1,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { toDmgValue } from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -32,8 +32,8 @@ describe("Moves - FILLET AWAY", () => { game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FILLET_AWAY]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.FILLET_AWAY]); + game.override.enemyMoveset(MoveId.SPLASH); }); //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/fillet_away_(move) @@ -44,7 +44,7 @@ describe("Moves - FILLET AWAY", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); - game.move.select(Moves.FILLET_AWAY); + game.move.select(MoveId.FILLET_AWAY); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -63,7 +63,7 @@ describe("Moves - FILLET AWAY", () => { leadPokemon.setStatStage(Stat.ATK, 6); leadPokemon.setStatStage(Stat.SPATK, 3); - game.move.select(Moves.FILLET_AWAY); + game.move.select(MoveId.FILLET_AWAY); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp() - hpLost); @@ -81,7 +81,7 @@ describe("Moves - FILLET AWAY", () => { leadPokemon.setStatStage(Stat.SPATK, 6); leadPokemon.setStatStage(Stat.SPD, 6); - game.move.select(Moves.FILLET_AWAY); + game.move.select(MoveId.FILLET_AWAY); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); @@ -97,7 +97,7 @@ describe("Moves - FILLET AWAY", () => { const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); leadPokemon.hp = hpLost - PREDAMAGE; - game.move.select(Moves.FILLET_AWAY); + game.move.select(MoveId.FILLET_AWAY); await game.phaseInterceptor.to(TurnEndPhase); expect(leadPokemon.hp).toBe(hpLost - PREDAMAGE); diff --git a/test/moves/fissure.test.ts b/test/moves/fissure.test.ts index 9d6bea97e99..e77820400b3 100644 --- a/test/moves/fissure.test.ts +++ b/test/moves/fissure.test.ts @@ -4,7 +4,7 @@ import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -32,12 +32,12 @@ describe("Moves - Fissure", () => { game.override.disableCrits(); game.override.starterSpecies(Species.SNORLAX); - game.override.moveset([Moves.FISSURE]); + game.override.moveset([MoveId.FISSURE]); game.override.passiveAbility(AbilityId.BALL_FETCH); game.override.startingLevel(100); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemyPassiveAbility(AbilityId.BALL_FETCH); game.override.enemyLevel(100); @@ -51,7 +51,7 @@ describe("Moves - Fissure", () => { game.override.ability(AbilityId.NO_GUARD); game.override.enemyAbility(AbilityId.FUR_COAT); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to(DamageAnimPhase, true); expect(enemyPokemon.isFainted()).toBe(true); @@ -62,7 +62,7 @@ describe("Moves - Fissure", () => { partyPokemon.setStatStage(Stat.ACC, -6); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); // wait for TurnEndPhase instead of DamagePhase as fissure might not actually inflict damage await game.phaseInterceptor.to(TurnEndPhase); @@ -75,7 +75,7 @@ describe("Moves - Fissure", () => { enemyPokemon.setStatStage(Stat.EVA, 6); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); // wait for TurnEndPhase instead of DamagePhase as fissure might not actually inflict damage await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/moves/flame_burst.test.ts b/test/moves/flame_burst.test.ts index c4c959bd44d..8fa00c0b165 100644 --- a/test/moves/flame_burst.test.ts +++ b/test/moves/flame_burst.test.ts @@ -2,7 +2,7 @@ import { allAbilities } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -36,21 +36,21 @@ describe("Moves - Flame Burst", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.moveset([Moves.FLAME_BURST, Moves.SPLASH]); + game.override.moveset([MoveId.FLAME_BURST, MoveId.SPLASH]); game.override.disableCrits(); game.override.ability(AbilityId.UNNERVE); game.override.startingWave(4); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); }); it("inflicts damage to the target's ally equal to 1/16 of its max HP", async () => { await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); - game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(leftEnemy.hp).toBeLessThan(leftEnemy.getMaxHp()); @@ -63,8 +63,8 @@ describe("Moves - Flame Burst", () => { await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); - game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(leftEnemy.hp).toBe(leftEnemy.getMaxHp()); @@ -77,8 +77,8 @@ describe("Moves - Flame Burst", () => { vi.spyOn(rightEnemy, "getAbility").mockReturnValue(allAbilities[AbilityId.FLASH_FIRE]); - game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(leftEnemy.hp).toBeLessThan(leftEnemy.getMaxHp()); @@ -91,8 +91,8 @@ describe("Moves - Flame Burst", () => { vi.spyOn(rightEnemy, "getAbility").mockReturnValue(allAbilities[AbilityId.MAGIC_GUARD]); - game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); expect(leftEnemy.hp).toBeLessThan(leftEnemy.getMaxHp()); diff --git a/test/moves/flower_shield.test.ts b/test/moves/flower_shield.test.ts index bfea7faf3ac..14cb267f5bd 100644 --- a/test/moves/flower_shield.test.ts +++ b/test/moves/flower_shield.test.ts @@ -4,7 +4,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { Biome } from "#app/enums/biome"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,8 +29,8 @@ describe("Moves - Flower Shield", () => { game.override.ability(AbilityId.NONE); game.override.enemyAbility(AbilityId.NONE); game.override.battleStyle("single"); - game.override.moveset([Moves.FLOWER_SHIELD, Moves.SPLASH]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.FLOWER_SHIELD, MoveId.SPLASH]); + game.override.enemyMoveset(MoveId.SPLASH); }); it("raises DEF stat stage by 1 for all Grass-type Pokemon on the field by one stage - single battle", async () => { @@ -43,7 +43,7 @@ describe("Moves - Flower Shield", () => { expect(magikarp.getStatStage(Stat.DEF)).toBe(0); expect(cherrim.getStatStage(Stat.DEF)).toBe(0); - game.move.select(Moves.FLOWER_SHIELD); + game.move.select(MoveId.FLOWER_SHIELD); await game.phaseInterceptor.to(TurnEndPhase); expect(magikarp.getStatStage(Stat.DEF)).toBe(0); @@ -62,8 +62,8 @@ describe("Moves - Flower Shield", () => { grassPokemons.forEach(p => expect(p.getStatStage(Stat.DEF)).toBe(0)); nonGrassPokemons.forEach(p => expect(p.getStatStage(Stat.DEF)).toBe(0)); - game.move.select(Moves.FLOWER_SHIELD); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FLOWER_SHIELD); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); grassPokemons.forEach(p => expect(p.getStatStage(Stat.DEF)).toBe(1)); @@ -74,7 +74,7 @@ describe("Moves - Flower Shield", () => { * See semi-vulnerable state tags. {@linkcode SemiInvulnerableTag} */ it("does not raise DEF stat stage for a Pokemon in semi-vulnerable state", async () => { - game.override.enemySpecies(Species.PARAS).enemyMoveset(Moves.DIG).enemyLevel(50); + game.override.enemySpecies(Species.PARAS).enemyMoveset(MoveId.DIG).enemyLevel(50); await game.classicMode.startBattle([Species.CHERRIM]); const paras = game.scene.getEnemyPokemon()!; @@ -84,7 +84,7 @@ describe("Moves - Flower Shield", () => { expect(cherrim.getStatStage(Stat.DEF)).toBe(0); expect(paras.getTag(SemiInvulnerableTag)).toBeUndefined; - game.move.select(Moves.FLOWER_SHIELD); + game.move.select(MoveId.FLOWER_SHIELD); await game.phaseInterceptor.to(TurnEndPhase); expect(paras.getTag(SemiInvulnerableTag)).toBeDefined(); @@ -102,7 +102,7 @@ describe("Moves - Flower Shield", () => { expect(enemy.getStatStage(Stat.DEF)).toBe(0); expect(ally.getStatStage(Stat.DEF)).toBe(0); - game.move.select(Moves.FLOWER_SHIELD); + game.move.select(MoveId.FLOWER_SHIELD); await game.phaseInterceptor.to(TurnEndPhase); expect(enemy.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/moves/fly.test.ts b/test/moves/fly.test.ts index a340df2a358..385cad2b13f 100644 --- a/test/moves/fly.test.ts +++ b/test/moves/fly.test.ts @@ -2,7 +2,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { StatusEffect } from "#enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,15 +27,15 @@ describe("Moves - Fly", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.FLY) + .moveset(MoveId.FLY) .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); - vi.spyOn(allMoves[Moves.FLY], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.FLY], "accuracy", "get").mockReturnValue(100); }); it("should make the user semi-invulnerable, then attack over 2 turns", async () => { @@ -44,21 +44,21 @@ describe("Moves - Fly", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FLY); + game.move.select(MoveId.FLY); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.FLYING)).toBeDefined(); expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - expect(playerPokemon.getMoveQueue()[0].move).toBe(Moves.FLY); + expect(playerPokemon.getMoveQueue()[0].move).toBe(MoveId.FLY); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.FLYING)).toBeUndefined(); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); expect(playerPokemon.getMoveHistory()).toHaveLength(2); - const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.FLY); + const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.FLY); expect(playerFly?.ppUsed).toBe(1); }); @@ -70,7 +70,7 @@ describe("Moves - Fly", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FLY); + game.move.select(MoveId.FLY); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); @@ -78,43 +78,43 @@ describe("Moves - Fly", () => { }); it("should not expend PP when the attack phase is cancelled", async () => { - game.override.enemyAbility(AbilityId.NO_GUARD).enemyMoveset(Moves.SPORE); + game.override.enemyAbility(AbilityId.NO_GUARD).enemyMoveset(MoveId.SPORE); await game.classicMode.startBattle([Species.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.FLY); + game.move.select(MoveId.FLY); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.FLYING)).toBeUndefined(); expect(playerPokemon.status?.effect).toBe(StatusEffect.SLEEP); - const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.FLY); + const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.FLY); expect(playerFly?.ppUsed).toBe(0); }); it("should be cancelled when another Pokemon uses Gravity", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.GRAVITY]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.GRAVITY]); await game.classicMode.startBattle([Species.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FLY); + game.move.select(MoveId.FLY); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - await game.move.selectEnemyMove(Moves.GRAVITY); + await game.move.selectEnemyMove(MoveId.GRAVITY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.FLY); + const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.FLY); expect(playerFly?.ppUsed).toBe(0); }); }); diff --git a/test/moves/focus_punch.test.ts b/test/moves/focus_punch.test.ts index e3da07852fd..ec9127b10d3 100644 --- a/test/moves/focus_punch.test.ts +++ b/test/moves/focus_punch.test.ts @@ -4,7 +4,7 @@ import { MoveHeaderPhase } from "#app/phases/move-header-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; import { TurnStartPhase } from "#app/phases/turn-start-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import i18next from "i18next"; @@ -30,10 +30,10 @@ describe("Moves - Focus Punch", () => { game.override .battleStyle("single") .ability(AbilityId.UNNERVE) - .moveset([Moves.FOCUS_PUNCH]) + .moveset([MoveId.FOCUS_PUNCH]) .enemySpecies(Species.GROUDON) .enemyAbility(AbilityId.INSOMNIA) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100); }); @@ -46,7 +46,7 @@ describe("Moves - Focus Punch", () => { const enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to(MessagePhase); @@ -61,7 +61,7 @@ describe("Moves - Focus Punch", () => { }); it("should fail if the user is hit", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle([Species.CHARIZARD]); @@ -70,7 +70,7 @@ describe("Moves - Focus Punch", () => { const enemyStartingHp = enemyPokemon.hp; - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to(MessagePhase); @@ -85,14 +85,14 @@ describe("Moves - Focus Punch", () => { }); it("should be cancelled if the user falls asleep mid-turn", async () => { - game.override.enemyMoveset([Moves.SPORE]); + game.override.enemyMoveset([MoveId.SPORE]); await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to(MessagePhase); // Header message @@ -111,7 +111,7 @@ describe("Moves - Focus Punch", () => { await game.classicMode.startBattle([Species.CHARIZARD]); game.forceEnemyToSwitch(); - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to(TurnStartPhase); @@ -119,10 +119,10 @@ describe("Moves - Focus Punch", () => { expect(game.scene.phaseQueue.find(phase => phase instanceof MoveHeaderPhase)).toBeDefined(); }); it("should replace the 'but it failed' text when the user gets hit", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle([Species.CHARIZARD]); - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to("MoveEndPhase", true); await game.phaseInterceptor.to("MessagePhase", false); const consoleSpy = vi.spyOn(console, "log"); diff --git a/test/moves/follow_me.test.ts b/test/moves/follow_me.test.ts index 4e55330525e..611647fe2c2 100644 --- a/test/moves/follow_me.test.ts +++ b/test/moves/follow_me.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,8 +30,8 @@ describe("Moves - Follow Me", () => { game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.TACKLE, Moves.FOLLOW_ME, Moves.SPLASH]); + game.override.moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]); + game.override.enemyMoveset([MoveId.TACKLE, MoveId.FOLLOW_ME, MoveId.SPLASH]); }); test("move should redirect enemy attacks to the user", async () => { @@ -39,12 +39,12 @@ describe("Moves - Follow Me", () => { const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.FOLLOW_ME); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.FOLLOW_ME); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY); // Force both enemies to target the player Pokemon that did not use Follow Me - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -57,12 +57,12 @@ describe("Moves - Follow Me", () => { const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.FOLLOW_ME); - game.move.select(Moves.FOLLOW_ME, 1); + game.move.select(MoveId.FOLLOW_ME); + game.move.select(MoveId.FOLLOW_ME, 1); // Each player is targeted by an enemy - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -74,18 +74,18 @@ describe("Moves - Follow Me", () => { test("move effect should be bypassed by Stalwart", async () => { game.override.ability(AbilityId.STALWART); - game.override.moveset([Moves.QUICK_ATTACK]); + game.override.moveset([MoveId.QUICK_ATTACK]); await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.QUICK_ATTACK, 0, BattlerIndex.ENEMY); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.QUICK_ATTACK, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); // Target doesn't need to be specified if the move is self-targeted - await game.move.selectEnemyMove(Moves.FOLLOW_ME); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.FOLLOW_ME); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -95,17 +95,17 @@ describe("Moves - Follow Me", () => { }); test("move effect should be bypassed by Snipe Shot", async () => { - game.override.moveset([Moves.SNIPE_SHOT]); + game.override.moveset([MoveId.SNIPE_SHOT]); await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SNIPE_SHOT, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SNIPE_SHOT, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SNIPE_SHOT, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SNIPE_SHOT, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.FOLLOW_ME); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.FOLLOW_ME); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); diff --git a/test/moves/foresight.test.ts b/test/moves/foresight.test.ts index 82a39eceae5..0537cf247c8 100644 --- a/test/moves/foresight.test.ts +++ b/test/moves/foresight.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; @@ -24,10 +24,10 @@ describe("Moves - Foresight", () => { game.override .disableCrits() .enemySpecies(Species.GASTLY) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(5) .starterSpecies(Species.MAGIKARP) - .moveset([Moves.FORESIGHT, Moves.QUICK_ATTACK, Moves.MACH_PUNCH]); + .moveset([MoveId.FORESIGHT, MoveId.QUICK_ATTACK, MoveId.MACH_PUNCH]); }); it("should allow Normal and Fighting moves to hit Ghost types", async () => { @@ -35,34 +35,34 @@ describe("Moves - Foresight", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.toNextTurn(); expect(enemy.hp).toBe(enemy.getMaxHp()); - game.move.select(Moves.FORESIGHT); + game.move.select(MoveId.FORESIGHT); await game.toNextTurn(); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.toNextTurn(); expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); enemy.hp = enemy.getMaxHp(); - game.move.select(Moves.MACH_PUNCH); + game.move.select(MoveId.MACH_PUNCH); await game.phaseInterceptor.to(MoveEffectPhase); expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); }); it("should ignore target's evasiveness boosts", async () => { - game.override.enemyMoveset([Moves.MINIMIZE]); + game.override.enemyMoveset([MoveId.MINIMIZE]); await game.classicMode.startBattle(); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getAccuracyMultiplier"); - game.move.select(Moves.FORESIGHT); + game.move.select(MoveId.FORESIGHT); await game.toNextTurn(); - game.move.select(Moves.QUICK_ATTACK); + game.move.select(MoveId.QUICK_ATTACK); await game.phaseInterceptor.to(MoveEffectPhase); expect(pokemon.getAccuracyMultiplier).toHaveReturnedWith(1); diff --git a/test/moves/forests_curse.test.ts b/test/moves/forests_curse.test.ts index 1273fbe62bc..0d420064734 100644 --- a/test/moves/forests_curse.test.ts +++ b/test/moves/forests_curse.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { PokemonType } from "#enums/pokemon-type"; import GameManager from "#test/testUtils/gameManager"; @@ -23,24 +23,24 @@ describe("Moves - Forest's Curse", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.FORESTS_CURSE, Moves.TRICK_OR_TREAT]) + .moveset([MoveId.FORESTS_CURSE, MoveId.TRICK_OR_TREAT]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("will replace the added type from Trick Or Treat", async () => { await game.classicMode.startBattle([Species.FEEBAS]); const enemyPokemon = game.scene.getEnemyPokemon(); - game.move.select(Moves.TRICK_OR_TREAT); + game.move.select(MoveId.TRICK_OR_TREAT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon!.summonData.addedType).toBe(PokemonType.GHOST); - game.move.select(Moves.FORESTS_CURSE); + game.move.select(MoveId.FORESTS_CURSE); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon?.summonData.addedType).toBe(PokemonType.GRASS); }); diff --git a/test/moves/freeze_dry.test.ts b/test/moves/freeze_dry.test.ts index 09b38bb277f..725349d4da1 100644 --- a/test/moves/freeze_dry.test.ts +++ b/test/moves/freeze_dry.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { PokemonType } from "#enums/pokemon-type"; import { Challenges } from "#enums/challenges"; @@ -27,10 +27,10 @@ describe("Moves - Freeze-Dry", () => { .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .starterSpecies(Species.FEEBAS) .ability(AbilityId.BALL_FETCH) - .moveset([Moves.FREEZE_DRY, Moves.FORESTS_CURSE, Moves.SOAK]); + .moveset([MoveId.FREEZE_DRY, MoveId.FORESTS_CURSE, MoveId.SOAK]); }); it("should deal 2x damage to pure water types", async () => { @@ -39,7 +39,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -53,7 +53,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -67,7 +67,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -80,19 +80,19 @@ describe("Moves - Freeze-Dry", () => { it("should deal 2x dmg against soaked wonder guard target", async () => { game.override .enemySpecies(Species.SHEDINJA) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .starterSpecies(Species.MAGIKARP) - .moveset([Moves.SOAK, Moves.FREEZE_DRY]); + .moveset([MoveId.SOAK, MoveId.FREEZE_DRY]); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.SOAK); + game.move.select(MoveId.SOAK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(2); @@ -106,10 +106,10 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FORESTS_CURSE); + game.move.select(MoveId.FORESTS_CURSE); await game.toNextTurn(); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -125,7 +125,7 @@ describe("Moves - Freeze-Dry", () => { enemy.isTerastallized = true; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -141,7 +141,7 @@ describe("Moves - Freeze-Dry", () => { enemy.isTerastallized = true; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -155,10 +155,10 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.SOAK); + game.move.select(MoveId.SOAK); await game.toNextTurn(); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -172,7 +172,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -186,7 +186,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -200,7 +200,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); @@ -208,13 +208,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to water type under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]); + game.override.enemyMoveset([MoveId.ELECTRIFY]); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -222,13 +222,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 4x damage to water/flying type under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]).enemySpecies(Species.GYARADOS); + game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(Species.GYARADOS); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -236,13 +236,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 0x damage to water/ground type under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]).enemySpecies(Species.BARBOACH); + game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(Species.BARBOACH); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -250,13 +250,13 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 0.25x damage to Grass/Dragon type under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]).enemySpecies(Species.FLAPPLE); + game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(Species.FLAPPLE); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -264,7 +264,7 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to Water type during inverse battle", async () => { - game.override.moveset([Moves.FREEZE_DRY]).enemySpecies(Species.MAGIKARP); + game.override.moveset([MoveId.FREEZE_DRY]).enemySpecies(Species.MAGIKARP); game.challengeMode.addChallenge(Challenges.INVERSE_BATTLE, 1, 1); await game.challengeMode.startBattle(); @@ -272,7 +272,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -280,7 +280,7 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to Water type during inverse battle under Normalize", async () => { - game.override.moveset([Moves.FREEZE_DRY]).ability(AbilityId.NORMALIZE).enemySpecies(Species.MAGIKARP); + game.override.moveset([MoveId.FREEZE_DRY]).ability(AbilityId.NORMALIZE).enemySpecies(Species.MAGIKARP); game.challengeMode.addChallenge(Challenges.INVERSE_BATTLE, 1, 1); await game.challengeMode.startBattle(); @@ -288,7 +288,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -296,7 +296,7 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 2x damage to Water type during inverse battle under Electrify", async () => { - game.override.moveset([Moves.FREEZE_DRY]).enemySpecies(Species.MAGIKARP).enemyMoveset([Moves.ELECTRIFY]); + game.override.moveset([MoveId.FREEZE_DRY]).enemySpecies(Species.MAGIKARP).enemyMoveset([MoveId.ELECTRIFY]); game.challengeMode.addChallenge(Challenges.INVERSE_BATTLE, 1, 1); await game.challengeMode.startBattle(); @@ -304,7 +304,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -312,7 +312,7 @@ describe("Moves - Freeze-Dry", () => { }); it("should deal 1x damage to water/flying type during inverse battle under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]).enemySpecies(Species.GYARADOS); + game.override.enemyMoveset([MoveId.ELECTRIFY]).enemySpecies(Species.GYARADOS); game.challengeMode.addChallenge(Challenges.INVERSE_BATTLE, 1, 1); @@ -321,7 +321,7 @@ describe("Moves - Freeze-Dry", () => { const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.FREEZE_DRY); + game.move.select(MoveId.FREEZE_DRY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/freezy_frost.test.ts b/test/moves/freezy_frost.test.ts index c8b5b806fe1..5760ced7e54 100644 --- a/test/moves/freezy_frost.test.ts +++ b/test/moves/freezy_frost.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,13 +27,13 @@ describe("Moves - Freezy Frost", () => { .battleStyle("single") .enemySpecies(Species.RATTATA) .enemyLevel(100) - .enemyMoveset(Moves.HOWL) + .enemyMoveset(MoveId.HOWL) .enemyAbility(AbilityId.BALL_FETCH) .startingLevel(100) - .moveset([Moves.FREEZY_FROST, Moves.HOWL, Moves.SPLASH]) + .moveset([MoveId.FREEZY_FROST, MoveId.HOWL, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH); - vi.spyOn(allMoves[Moves.FREEZY_FROST], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.FREEZY_FROST], "accuracy", "get").mockReturnValue(100); }); it("should clear stat changes of user and opponent", async () => { @@ -41,13 +41,13 @@ describe("Moves - Freezy Frost", () => { const user = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.HOWL); + game.move.select(MoveId.HOWL); await game.toNextTurn(); expect(user.getStatStage(Stat.ATK)).toBe(1); expect(enemy.getStatStage(Stat.ATK)).toBe(1); - game.move.select(Moves.FREEZY_FROST); + game.move.select(MoveId.FREEZY_FROST); await game.toNextTurn(); expect(user.getStatStage(Stat.ATK)).toBe(0); @@ -55,17 +55,17 @@ describe("Moves - Freezy Frost", () => { }); it("should clear all stat changes even when enemy uses the move", async () => { - game.override.enemyMoveset(Moves.FREEZY_FROST); + game.override.enemyMoveset(MoveId.FREEZY_FROST); await game.classicMode.startBattle([Species.SHUCKLE]); // Shuckle for slower Howl on first turn so Freezy Frost doesn't affect it. const user = game.scene.getPlayerPokemon()!; - game.move.select(Moves.HOWL); + game.move.select(MoveId.HOWL); await game.toNextTurn(); const userAtkBefore = user.getStatStage(Stat.ATK); expect(userAtkBefore).toBe(1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(user.getStatStage(Stat.ATK)).toBe(0); }); @@ -76,9 +76,9 @@ describe("Moves - Freezy Frost", () => { const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); const [leftOpp, rightOpp] = game.scene.getEnemyField(); - game.move.select(Moves.HOWL, 0); + game.move.select(MoveId.HOWL, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.getStatStage(Stat.ATK)).toBe(1); @@ -86,9 +86,9 @@ describe("Moves - Freezy Frost", () => { expect(leftOpp.getStatStage(Stat.ATK)).toBe(2); // Both enemies use Howl expect(rightOpp.getStatStage(Stat.ATK)).toBe(2); - game.move.select(Moves.FREEZY_FROST, 0, leftOpp.getBattlerIndex()); + game.move.select(MoveId.FREEZY_FROST, 0, leftOpp.getBattlerIndex()); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.getStatStage(Stat.ATK)).toBe(0); diff --git a/test/moves/fusion_bolt.test.ts b/test/moves/fusion_bolt.test.ts index 49dfda99054..05ff613b26a 100644 --- a/test/moves/fusion_bolt.test.ts +++ b/test/moves/fusion_bolt.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -9,7 +9,7 @@ describe("Moves - Fusion Bolt", () => { let phaserGame: Phaser.Game; let game: GameManager; - const fusionBolt = Moves.FUSION_BOLT; + const fusionBolt = MoveId.FUSION_BOLT; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -28,7 +28,7 @@ describe("Moves - Fusion Bolt", () => { .startingLevel(1) .enemySpecies(Species.RESHIRAM) .enemyAbility(AbilityId.ROUGH_SKIN) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .battleStyle("single") .startingWave(97) .disableCrits(); diff --git a/test/moves/fusion_flare.test.ts b/test/moves/fusion_flare.test.ts index 9f16b94da5c..9f51035777d 100644 --- a/test/moves/fusion_flare.test.ts +++ b/test/moves/fusion_flare.test.ts @@ -1,5 +1,5 @@ import { TurnStartPhase } from "#app/phases/turn-start-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -10,7 +10,7 @@ describe("Moves - Fusion Flare", () => { let phaserGame: Phaser.Game; let game: GameManager; - const fusionFlare = Moves.FUSION_FLARE; + const fusionFlare = MoveId.FUSION_FLARE; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -28,7 +28,7 @@ describe("Moves - Fusion Flare", () => { .moveset([fusionFlare]) .startingLevel(1) .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.REST) + .enemyMoveset(MoveId.REST) .battleStyle("single") .startingWave(97) .disableCrits(); diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index 2b66a1a6d2f..ace537888ff 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -6,7 +6,7 @@ import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { MovePhase } from "#app/phases/move-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,14 +30,14 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }); beforeEach(() => { - fusionFlare = allMoves[Moves.FUSION_FLARE]; - fusionBolt = allMoves[Moves.FUSION_BOLT]; + fusionFlare = allMoves[MoveId.FUSION_FLARE]; + fusionBolt = allMoves[MoveId.FUSION_BOLT]; game = new GameManager(phaserGame); game.override .moveset([fusionFlare.id, fusionBolt.id]) .startingLevel(1) .enemySpecies(Species.RESHIRAM) - .enemyMoveset(Moves.REST) + .enemyMoveset(MoveId.REST) .battleStyle("double") .startingWave(97) .disableCrits(); @@ -112,7 +112,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE should not double power of subsequent FUSION_BOLT if a move succeeded in between", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); game.move.select(fusionFlare.id, 0, BattlerIndex.ENEMY); diff --git a/test/moves/future_sight.test.ts b/test/moves/future_sight.test.ts index 4a6c95cbc65..8f834dc6a9f 100644 --- a/test/moves/future_sight.test.ts +++ b/test/moves/future_sight.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,21 +23,21 @@ describe("Moves - Future Sight", () => { game = new GameManager(phaserGame); game.override .startingLevel(50) - .moveset([Moves.FUTURE_SIGHT, Moves.SPLASH]) + .moveset([MoveId.FUTURE_SIGHT, MoveId.SPLASH]) .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.STURDY) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("hits 2 turns after use, ignores user switch out", async () => { await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); - game.move.select(Moves.FUTURE_SIGHT); + game.move.select(MoveId.FUTURE_SIGHT); await game.toNextTurn(); game.doSwitchPokemon(1); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.getEnemyPokemon()!.isFullHp()).toBe(false); diff --git a/test/moves/gastro_acid.test.ts b/test/moves/gastro_acid.test.ts index bae134ab6c3..e84e8d0df1c 100644 --- a/test/moves/gastro_acid.test.ts +++ b/test/moves/gastro_acid.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; @@ -26,9 +26,9 @@ describe("Moves - Gastro Acid", () => { game.override.startingLevel(1); game.override.enemyLevel(100); game.override.ability(AbilityId.BALL_FETCH); - game.override.moveset([Moves.GASTRO_ACID, Moves.WATER_GUN, Moves.SPLASH, Moves.CORE_ENFORCER]); + game.override.moveset([MoveId.GASTRO_ACID, MoveId.WATER_GUN, MoveId.SPLASH, MoveId.CORE_ENFORCER]); game.override.enemySpecies(Species.BIDOOF); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemyAbility(AbilityId.WATER_ABSORB); }); @@ -42,8 +42,8 @@ describe("Moves - Gastro Acid", () => { await game.classicMode.startBattle(); - game.move.select(Moves.GASTRO_ACID, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.GASTRO_ACID, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnInitPhase"); @@ -51,8 +51,8 @@ describe("Moves - Gastro Acid", () => { expect(enemyField[0].summonData.abilitySuppressed).toBe(true); expect(enemyField[1].summonData.abilitySuppressed).toBe(false); - game.move.select(Moves.WATER_GUN, 0, BattlerIndex.ENEMY); - game.move.select(Moves.WATER_GUN, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.WATER_GUN, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.WATER_GUN, 1, BattlerIndex.ENEMY_2); await game.phaseInterceptor.to("TurnEndPhase"); @@ -65,13 +65,13 @@ describe("Moves - Gastro Acid", () => { await game.classicMode.startBattle(); - game.move.select(Moves.CORE_ENFORCER); + game.move.select(MoveId.CORE_ENFORCER); // Force player to be slower to enable Core Enforcer to proc its suppression effect await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnInitPhase"); - game.move.select(Moves.GASTRO_ACID); + game.move.select(MoveId.GASTRO_ACID); await game.phaseInterceptor.to("TurnInitPhase"); @@ -82,20 +82,20 @@ describe("Moves - Gastro Acid", () => { game.override .enemyAbility(AbilityId.COMATOSE) .enemyPassiveAbility(AbilityId.WATER_ABSORB) - .moveset([Moves.SPLASH, Moves.GASTRO_ACID, Moves.WATER_GUN]); + .moveset([MoveId.SPLASH, MoveId.GASTRO_ACID, MoveId.WATER_GUN]); await game.classicMode.startBattle([Species.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon(); - game.move.select(Moves.GASTRO_ACID); + game.move.select(MoveId.GASTRO_ACID); await game.toNextTurn(); expect(enemyPokemon?.summonData.abilitySuppressed).toBe(true); - game.move.select(Moves.WATER_GUN); + game.move.select(MoveId.WATER_GUN); await game.toNextTurn(); expect(enemyPokemon?.getHpRatio()).toBeLessThan(1); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon?.status?.effect).toBeFalsy(); diff --git a/test/moves/geomancy.test.ts b/test/moves/geomancy.test.ts index e3f2a1c3d78..1c832f4ac18 100644 --- a/test/moves/geomancy.test.ts +++ b/test/moves/geomancy.test.ts @@ -2,7 +2,7 @@ import type { EffectiveStat } from "#enums/stat"; import { Stat } from "#enums/stat"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,13 +25,13 @@ describe("Moves - Geomancy", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.GEOMANCY) + .moveset(MoveId.GEOMANCY) .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should boost the user's stats on the second turn of use", async () => { @@ -40,7 +40,7 @@ describe("Moves - Geomancy", () => { const player = game.scene.getPlayerPokemon()!; const affectedStats: EffectiveStat[] = [Stat.SPATK, Stat.SPDEF, Stat.SPD]; - game.move.select(Moves.GEOMANCY); + game.move.select(MoveId.GEOMANCY); await game.phaseInterceptor.to("TurnEndPhase"); affectedStats.forEach(stat => expect(player.getStatStage(stat)).toBe(0)); @@ -51,7 +51,7 @@ describe("Moves - Geomancy", () => { expect(player.getMoveHistory()).toHaveLength(2); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerGeomancy = player.getMoveset().find(mv => mv && mv.moveId === Moves.GEOMANCY); + const playerGeomancy = player.getMoveset().find(mv => mv && mv.moveId === MoveId.GEOMANCY); expect(playerGeomancy?.ppUsed).toBe(1); }); @@ -61,7 +61,7 @@ describe("Moves - Geomancy", () => { const player = game.scene.getPlayerPokemon()!; const affectedStats: EffectiveStat[] = [Stat.SPATK, Stat.SPDEF, Stat.SPD]; - game.move.select(Moves.GEOMANCY); + game.move.select(MoveId.GEOMANCY); await game.phaseInterceptor.to("MoveEndPhase", false); await game.doKillOpponents(); @@ -73,7 +73,7 @@ describe("Moves - Geomancy", () => { expect(player.getMoveHistory()).toHaveLength(2); expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerGeomancy = player.getMoveset().find(mv => mv && mv.moveId === Moves.GEOMANCY); + const playerGeomancy = player.getMoveset().find(mv => mv && mv.moveId === MoveId.GEOMANCY); expect(playerGeomancy?.ppUsed).toBe(1); }); }); diff --git a/test/moves/gigaton_hammer.test.ts b/test/moves/gigaton_hammer.test.ts index 6275e5d2dcb..a3a91e4be6a 100644 --- a/test/moves/gigaton_hammer.test.ts +++ b/test/moves/gigaton_hammer.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import GameManager from "#test/testUtils/gameManager"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -25,10 +25,10 @@ describe("Moves - Gigaton Hammer", () => { .battleStyle("single") .enemySpecies(Species.MAGIKARP) .starterSpecies(Species.FEEBAS) - .moveset([Moves.GIGATON_HAMMER]) + .moveset([MoveId.GIGATON_HAMMER]) .startingLevel(10) .enemyLevel(100) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .disableCrits(); }); @@ -37,7 +37,7 @@ describe("Moves - Gigaton Hammer", () => { const enemy1 = game.scene.getEnemyPokemon()!; - game.move.select(Moves.GIGATON_HAMMER); + game.move.select(MoveId.GIGATON_HAMMER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -46,7 +46,7 @@ describe("Moves - Gigaton Hammer", () => { await game.doKillOpponents(); await game.toNextWave(); - game.move.select(Moves.GIGATON_HAMMER); + game.move.select(MoveId.GIGATON_HAMMER); await game.toNextTurn(); const enemy2 = game.scene.getEnemyPokemon()!; @@ -60,7 +60,7 @@ describe("Moves - Gigaton Hammer", () => { const enemy1 = game.scene.getEnemyPokemon()!; - game.move.select(Moves.GIGATON_HAMMER); + game.move.select(MoveId.GIGATON_HAMMER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -69,7 +69,7 @@ describe("Moves - Gigaton Hammer", () => { await game.doKillOpponents(); await game.toNextWave(); - game.move.select(Moves.GIGATON_HAMMER); + game.move.select(MoveId.GIGATON_HAMMER); await game.toNextTurn(); const enemy2 = game.scene.getEnemyPokemon()!; diff --git a/test/moves/glaive_rush.test.ts b/test/moves/glaive_rush.test.ts index e6c2f470584..f028e32dd5e 100644 --- a/test/moves/glaive_rush.test.ts +++ b/test/moves/glaive_rush.test.ts @@ -1,6 +1,6 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,10 +27,10 @@ describe("Moves - Glaive Rush", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.GLAIVE_RUSH]) + .enemyMoveset([MoveId.GLAIVE_RUSH]) .starterSpecies(Species.KLINK) .ability(AbilityId.BALL_FETCH) - .moveset([Moves.SHADOW_SNEAK, Moves.AVALANCHE, Moves.SPLASH, Moves.GLAIVE_RUSH]); + .moveset([MoveId.SHADOW_SNEAK, MoveId.AVALANCHE, MoveId.SPLASH, MoveId.GLAIVE_RUSH]); }); it("takes double damage from attacks", async () => { @@ -39,11 +39,11 @@ describe("Moves - Glaive Rush", () => { const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1000; - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.phaseInterceptor.to("DamageAnimPhase"); const damageDealt = 1000 - enemy.hp; await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.phaseInterceptor.to("DamageAnimPhase"); expect(enemy.hp).toBeLessThanOrEqual(1001 - damageDealt * 3); }); @@ -54,14 +54,14 @@ describe("Moves - Glaive Rush", () => { const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1000; - allMoves[Moves.AVALANCHE].accuracy = 0; - game.move.select(Moves.AVALANCHE); + allMoves[MoveId.AVALANCHE].accuracy = 0; + game.move.select(MoveId.AVALANCHE); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeLessThan(1000); }); it("interacts properly with multi-lens", async () => { - game.override.startingHeldItems([{ name: "MULTI_LENS", count: 2 }]).enemyMoveset([Moves.AVALANCHE]); + game.override.startingHeldItems([{ name: "MULTI_LENS", count: 2 }]).enemyMoveset([MoveId.AVALANCHE]); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -70,18 +70,18 @@ describe("Moves - Glaive Rush", () => { enemy.hp = 1000; player.hp = 1000; - allMoves[Moves.AVALANCHE].accuracy = 0; - game.move.select(Moves.GLAIVE_RUSH); + allMoves[MoveId.AVALANCHE].accuracy = 0; + game.move.select(MoveId.GLAIVE_RUSH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBeLessThan(1000); player.hp = 1000; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1000); }); it("secondary effects only last until next move", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]); + game.override.enemyMoveset([MoveId.SHADOW_SNEAK]); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -89,33 +89,33 @@ describe("Moves - Glaive Rush", () => { enemy.hp = 1000; player.hp = 1000; - allMoves[Moves.SHADOW_SNEAK].accuracy = 0; + allMoves[MoveId.SHADOW_SNEAK].accuracy = 0; - game.move.select(Moves.GLAIVE_RUSH); + game.move.select(MoveId.GLAIVE_RUSH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1000); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); const damagedHp = player.hp; expect(player.hp).toBeLessThan(1000); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(damagedHp); }); it("secondary effects are removed upon switching", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]).starterSpecies(0); + game.override.enemyMoveset([MoveId.SHADOW_SNEAK]).starterSpecies(0); await game.classicMode.startBattle([Species.KLINK, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1000; - allMoves[Moves.SHADOW_SNEAK].accuracy = 0; + allMoves[MoveId.SHADOW_SNEAK].accuracy = 0; - game.move.select(Moves.GLAIVE_RUSH); + game.move.select(MoveId.GLAIVE_RUSH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(player.getMaxHp()); @@ -127,7 +127,7 @@ describe("Moves - Glaive Rush", () => { }); it("secondary effects don't activate if move fails", async () => { - game.override.moveset([Moves.SHADOW_SNEAK, Moves.PROTECT, Moves.SPLASH, Moves.GLAIVE_RUSH]); + game.override.moveset([MoveId.SHADOW_SNEAK, MoveId.PROTECT, MoveId.SPLASH, MoveId.GLAIVE_RUSH]); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -136,16 +136,16 @@ describe("Moves - Glaive Rush", () => { enemy.hp = 1000; player.hp = 1000; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.phaseInterceptor.to("TurnEndPhase"); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); const damagedHP1 = 1000 - enemy.hp; enemy.hp = 1000; - game.move.select(Moves.SHADOW_SNEAK); + game.move.select(MoveId.SHADOW_SNEAK); await game.phaseInterceptor.to("TurnEndPhase"); const damagedHP2 = 1000 - enemy.hp; diff --git a/test/moves/growth.test.ts b/test/moves/growth.test.ts index ea8bf623f30..bb24efe4e74 100644 --- a/test/moves/growth.test.ts +++ b/test/moves/growth.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -27,8 +27,8 @@ describe("Moves - Growth", () => { game.override.battleStyle("single"); game.override.enemyAbility(AbilityId.MOXIE); game.override.ability(AbilityId.INSOMNIA); - game.override.moveset([Moves.GROWTH]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.GROWTH]); + game.override.enemyMoveset(MoveId.SPLASH); }); it("should raise SPATK stat stage by 1", async () => { @@ -38,7 +38,7 @@ describe("Moves - Growth", () => { expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(0); - game.move.select(Moves.GROWTH); + game.move.select(MoveId.GROWTH); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnInitPhase); expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); diff --git a/test/moves/grudge.test.ts b/test/moves/grudge.test.ts index 4da3e2e6d09..e63936c3602 100644 --- a/test/moves/grudge.test.ts +++ b/test/moves/grudge.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { BattlerIndex } from "#app/battle"; import GameManager from "#test/testUtils/gameManager"; @@ -23,25 +23,25 @@ describe("Moves - Grudge", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.EMBER, Moves.SPLASH]) + .moveset([MoveId.EMBER, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.SHEDINJA) .enemyAbility(AbilityId.WONDER_GUARD) - .enemyMoveset([Moves.GRUDGE, Moves.SPLASH]); + .enemyMoveset([MoveId.GRUDGE, MoveId.SPLASH]); }); it("should reduce the PP of the Pokemon's move to 0 when the user has fainted", async () => { await game.classicMode.startBattle([Species.FEEBAS]); const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.EMBER); - await game.move.selectEnemyMove(Moves.GRUDGE); + game.move.select(MoveId.EMBER); + await game.move.selectEnemyMove(MoveId.GRUDGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === Moves.EMBER); + const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === MoveId.EMBER); expect(playerMove?.getPpRatio()).toBe(0); }); @@ -50,17 +50,17 @@ describe("Moves - Grudge", () => { await game.classicMode.startBattle([Species.FEEBAS]); const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.GRUDGE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.GRUDGE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(Moves.EMBER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.EMBER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); - const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === Moves.EMBER); + const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === MoveId.EMBER); expect(playerMove?.getPpRatio()).toBe(0); }); @@ -68,7 +68,7 @@ describe("Moves - Grudge", () => { it("should not reduce the opponent's PP if the user dies to weather/indirect damage", async () => { // Opponent will be reduced to 1 HP by False Swipe, then faint to Sandstorm game.override - .moveset([Moves.FALSE_SWIPE]) + .moveset([MoveId.FALSE_SWIPE]) .startingLevel(100) .ability(AbilityId.SAND_STREAM) .enemySpecies(Species.RATTATA); @@ -77,14 +77,14 @@ describe("Moves - Grudge", () => { const enemyPokemon = game.scene.getEnemyPokemon(); const playerPokemon = game.scene.getPlayerPokemon(); - game.move.select(Moves.FALSE_SWIPE); - await game.move.selectEnemyMove(Moves.GRUDGE); + game.move.select(MoveId.FALSE_SWIPE); + await game.move.selectEnemyMove(MoveId.GRUDGE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon?.isFainted()).toBe(true); - const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === Moves.FALSE_SWIPE); + const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === MoveId.FALSE_SWIPE); expect(playerMove?.getPpRatio()).toBeGreaterThan(0); }); }); diff --git a/test/moves/guard_split.test.ts b/test/moves/guard_split.test.ts index 7c2427041db..6d574467bc5 100644 --- a/test/moves/guard_split.test.ts +++ b/test/moves/guard_split.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; @@ -28,12 +28,12 @@ describe("Moves - Guard Split", () => { .enemyAbility(AbilityId.NONE) .enemySpecies(Species.MEW) .enemyLevel(200) - .moveset([Moves.GUARD_SPLIT]) + .moveset([MoveId.GUARD_SPLIT]) .ability(AbilityId.NONE); }); it("should average the user's DEF and SPDEF stats with those of the target", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; @@ -42,7 +42,7 @@ describe("Moves - Guard Split", () => { const avgDef = Math.floor((player.getStat(Stat.DEF, false) + enemy.getStat(Stat.DEF, false)) / 2); const avgSpDef = Math.floor((player.getStat(Stat.SPDEF, false) + enemy.getStat(Stat.SPDEF, false)) / 2); - game.move.select(Moves.GUARD_SPLIT); + game.move.select(MoveId.GUARD_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.DEF, false)).toBe(avgDef); @@ -53,7 +53,7 @@ describe("Moves - Guard Split", () => { }, 20000); it("should be idempotent", async () => { - game.override.enemyMoveset([Moves.GUARD_SPLIT]); + game.override.enemyMoveset([MoveId.GUARD_SPLIT]); await game.classicMode.startBattle([Species.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; @@ -62,10 +62,10 @@ describe("Moves - Guard Split", () => { const avgDef = Math.floor((player.getStat(Stat.DEF, false) + enemy.getStat(Stat.DEF, false)) / 2); const avgSpDef = Math.floor((player.getStat(Stat.SPDEF, false) + enemy.getStat(Stat.SPDEF, false)) / 2); - game.move.select(Moves.GUARD_SPLIT); + game.move.select(MoveId.GUARD_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.GUARD_SPLIT); + game.move.select(MoveId.GUARD_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.DEF, false)).toBe(avgDef); diff --git a/test/moves/guard_swap.test.ts b/test/moves/guard_swap.test.ts index 606cfe8a8af..b290fa77f31 100644 --- a/test/moves/guard_swap.test.ts +++ b/test/moves/guard_swap.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat, BATTLE_STATS } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; import { MoveEndPhase } from "#app/phases/move-end-phase"; @@ -26,10 +26,10 @@ describe("Moves - Guard Swap", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.INDEEDEE) .enemyLevel(200) - .moveset([Moves.GUARD_SWAP]) + .moveset([MoveId.GUARD_SWAP]) .ability(AbilityId.NONE); }); @@ -41,7 +41,7 @@ describe("Moves - Guard Swap", () => { vi.spyOn(enemy.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(1)); - game.move.select(Moves.GUARD_SWAP); + game.move.select(MoveId.GUARD_SWAP); await game.phaseInterceptor.to(MoveEndPhase); diff --git a/test/moves/hard_press.test.ts b/test/moves/hard_press.test.ts index ac5bd4459d0..6142fda7735 100644 --- a/test/moves/hard_press.test.ts +++ b/test/moves/hard_press.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,21 +25,21 @@ describe("Moves - Hard Press", () => { }); beforeEach(() => { - moveToCheck = allMoves[Moves.HARD_PRESS]; + moveToCheck = allMoves[MoveId.HARD_PRESS]; game = new GameManager(phaserGame); game.override.battleStyle("single"); game.override.ability(AbilityId.BALL_FETCH); game.override.enemySpecies(Species.MUNCHLAX); game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyMoveset(Moves.SPLASH); - game.override.moveset([Moves.HARD_PRESS]); + game.override.enemyMoveset(MoveId.SPLASH); + game.override.moveset([MoveId.HARD_PRESS]); vi.spyOn(moveToCheck, "calculateBattlePower"); }); it("should return 100 power if target HP ratio is at 100%", async () => { await game.classicMode.startBattle([Species.PIKACHU]); - game.move.select(Moves.HARD_PRESS); + game.move.select(MoveId.HARD_PRESS); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(100); @@ -52,7 +52,7 @@ describe("Moves - Hard Press", () => { vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); - game.move.select(Moves.HARD_PRESS); + game.move.select(MoveId.HARD_PRESS); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(50); @@ -65,7 +65,7 @@ describe("Moves - Hard Press", () => { vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); - game.move.select(Moves.HARD_PRESS); + game.move.select(MoveId.HARD_PRESS); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(1); @@ -78,7 +78,7 @@ describe("Moves - Hard Press", () => { vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); - game.move.select(Moves.HARD_PRESS); + game.move.select(MoveId.HARD_PRESS); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(1); diff --git a/test/moves/haze.test.ts b/test/moves/haze.test.ts index 1ce0108eb3e..5309773dcb6 100644 --- a/test/moves/haze.test.ts +++ b/test/moves/haze.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -27,11 +27,11 @@ describe("Moves - Haze", () => { game.override.enemySpecies(Species.RATTATA); game.override.enemyLevel(100); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemyAbility(AbilityId.NONE); game.override.startingLevel(100); - game.override.moveset([Moves.HAZE, Moves.SWORDS_DANCE, Moves.CHARM, Moves.SPLASH]); + game.override.moveset([MoveId.HAZE, MoveId.SWORDS_DANCE, MoveId.CHARM, MoveId.SPLASH]); game.override.ability(AbilityId.NONE); }); @@ -43,16 +43,16 @@ describe("Moves - Haze", () => { expect(user.getStatStage(Stat.ATK)).toBe(0); expect(enemy.getStatStage(Stat.ATK)).toBe(0); - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to(TurnInitPhase); - game.move.select(Moves.CHARM); + game.move.select(MoveId.CHARM); await game.phaseInterceptor.to(TurnInitPhase); expect(user.getStatStage(Stat.ATK)).toBe(2); expect(enemy.getStatStage(Stat.ATK)).toBe(-2); - game.move.select(Moves.HAZE); + game.move.select(MoveId.HAZE); await game.phaseInterceptor.to(TurnInitPhase); expect(user.getStatStage(Stat.ATK)).toBe(0); diff --git a/test/moves/heal_bell.test.ts b/test/moves/heal_bell.test.ts index 879ebc946e4..b121635f031 100644 --- a/test/moves/heal_bell.test.ts +++ b/test/moves/heal_bell.test.ts @@ -1,7 +1,7 @@ import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,11 +24,11 @@ describe("Moves - Heal Bell", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.HEAL_BELL, Moves.SPLASH]) + .moveset([MoveId.HEAL_BELL, MoveId.SPLASH]) .statusEffect(StatusEffect.BURN) .battleStyle("double") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should cure status effect of the user, its ally, and all party pokemon", async () => { @@ -39,9 +39,9 @@ describe("Moves - Heal Bell", () => { vi.spyOn(rightPlayer, "resetStatus"); vi.spyOn(partyPokemon, "resetStatus"); - game.move.select(Moves.HEAL_BELL, 0); + game.move.select(MoveId.HEAL_BELL, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); @@ -61,9 +61,9 @@ describe("Moves - Heal Bell", () => { vi.spyOn(leftOpp, "resetStatus"); vi.spyOn(rightOpp, "resetStatus"); - game.move.select(Moves.HEAL_BELL, 0); + game.move.select(MoveId.HEAL_BELL, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftOpp.resetStatus).toHaveBeenCalledTimes(0); @@ -85,9 +85,9 @@ describe("Moves - Heal Bell", () => { vi.spyOn(rightPlayer, "resetStatus"); vi.spyOn(partyPokemon, "resetStatus"); - game.move.select(Moves.HEAL_BELL, 0); + game.move.select(MoveId.HEAL_BELL, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); diff --git a/test/moves/heal_block.test.ts b/test/moves/heal_block.test.ts index 723402e717c..d97c876b450 100644 --- a/test/moves/heal_block.test.ts +++ b/test/moves/heal_block.test.ts @@ -4,7 +4,7 @@ import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { WeatherType } from "#enums/weather-type"; import Phaser from "phaser"; @@ -28,8 +28,8 @@ describe("Moves - Heal Block", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.ABSORB, Moves.WISH, Moves.SPLASH, Moves.AQUA_RING]) - .enemyMoveset(Moves.HEAL_BLOCK) + .moveset([MoveId.ABSORB, MoveId.WISH, MoveId.SPLASH, MoveId.AQUA_RING]) + .enemyMoveset(MoveId.HEAL_BLOCK) .ability(AbilityId.NO_GUARD) .enemyAbility(AbilityId.BALL_FETCH) .enemySpecies(Species.BLISSEY) @@ -44,7 +44,7 @@ describe("Moves - Heal Block", () => { player.damageAndUpdate(enemy.getMaxHp() - 1); - game.move.select(Moves.ABSORB); + game.move.select(MoveId.ABSORB); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -60,7 +60,7 @@ describe("Moves - Heal Block", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.ABSORB); + game.move.select(MoveId.ABSORB); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -75,12 +75,12 @@ describe("Moves - Heal Block", () => { player.damageAndUpdate(player.getMaxHp() - 1); - game.move.select(Moves.WISH); + game.move.select(MoveId.WISH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.WISH, ArenaTagSide.PLAYER)).toBeDefined(); while (game.scene.arena.getTagOnSide(ArenaTagType.WISH, ArenaTagSide.PLAYER)) { - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); } @@ -96,7 +96,7 @@ describe("Moves - Heal Block", () => { player.damageAndUpdate(player.getMaxHp() - 1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1); @@ -109,7 +109,7 @@ describe("Moves - Heal Block", () => { player.damageAndUpdate(player.getMaxHp() - 1); - game.move.select(Moves.AQUA_RING); + game.move.select(MoveId.AQUA_RING); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.getTag(BattlerTagType.AQUA_RING)).toBeDefined(); @@ -125,7 +125,7 @@ describe("Moves - Heal Block", () => { player.damageAndUpdate(player.getMaxHp() - 1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1); @@ -139,7 +139,7 @@ describe("Moves - Heal Block", () => { const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.getMaxHp() - 1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1); diff --git a/test/moves/heart_swap.test.ts b/test/moves/heart_swap.test.ts index d4701143bd8..a2b8f37fcd9 100644 --- a/test/moves/heart_swap.test.ts +++ b/test/moves/heart_swap.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { BATTLE_STATS } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; import { MoveEndPhase } from "#app/phases/move-end-phase"; @@ -26,10 +26,10 @@ describe("Moves - Heart Swap", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.INDEEDEE) .enemyLevel(200) - .moveset([Moves.HEART_SWAP]) + .moveset([MoveId.HEART_SWAP]) .ability(AbilityId.NONE); }); @@ -41,7 +41,7 @@ describe("Moves - Heart Swap", () => { vi.spyOn(enemy.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(1)); - game.move.select(Moves.HEART_SWAP); + game.move.select(MoveId.HEART_SWAP); await game.phaseInterceptor.to(MoveEndPhase); diff --git a/test/moves/hyper_beam.test.ts b/test/moves/hyper_beam.test.ts index a7e263c29b5..311d3ed5c5d 100644 --- a/test/moves/hyper_beam.test.ts +++ b/test/moves/hyper_beam.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { BerryPhase } from "#app/phases/berry-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; @@ -30,11 +30,11 @@ describe("Moves - Hyper Beam", () => { game.override.ability(AbilityId.BALL_FETCH); game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); game.override.enemyLevel(100); - game.override.moveset([Moves.HYPER_BEAM, Moves.TACKLE]); - vi.spyOn(allMoves[Moves.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); + game.override.moveset([MoveId.HYPER_BEAM, MoveId.TACKLE]); + vi.spyOn(allMoves[MoveId.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); }); it("should force the user to recharge on the next turn (and only that turn)", async () => { @@ -43,7 +43,7 @@ describe("Moves - Hyper Beam", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.HYPER_BEAM); + game.move.select(MoveId.HYPER_BEAM); await game.phaseInterceptor.to(TurnEndPhase); @@ -58,7 +58,7 @@ describe("Moves - Hyper Beam", () => { expect(enemyPokemon.hp).toBe(enemyPostAttackHp); expect(leadPokemon.getTag(BattlerTagType.RECHARGING)).toBeUndefined(); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/imprison.test.ts b/test/moves/imprison.test.ts index e2777d8c87a..fd18988a518 100644 --- a/test/moves/imprison.test.ts +++ b/test/moves/imprison.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; @@ -25,9 +25,9 @@ describe("Moves - Imprison", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.IMPRISON, Moves.SPLASH, Moves.GROWL]) + .enemyMoveset([MoveId.IMPRISON, MoveId.SPLASH, MoveId.GROWL]) .enemySpecies(Species.SHUCKLE) - .moveset([Moves.TRANSFORM, Moves.SPLASH]); + .moveset([MoveId.TRANSFORM, MoveId.SPLASH]); }); it("Pokemon under Imprison cannot use shared moves", async () => { @@ -35,8 +35,8 @@ describe("Moves - Imprison", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TRANSFORM); - await game.move.selectEnemyMove(Moves.IMPRISON); + game.move.select(MoveId.TRANSFORM); + await game.move.selectEnemyMove(MoveId.IMPRISON); await game.toNextTurn(); const playerMoveset = playerPokemon.getMoveset().map(x => x?.moveId); const enemyMoveset = game.scene @@ -50,11 +50,11 @@ describe("Moves - Imprison", () => { expect(imprisonBattlerTag).toBeDefined(); // Second turn, Imprison forces Struggle to occur - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const move1 = playerPokemon.getLastXMoves(1)[0]!; - expect(move1.move).toBe(Moves.STRUGGLE); + expect(move1.move).toBe(MoveId.STRUGGLE); }); it("Imprison applies to Pokemon switched into Battle", async () => { @@ -62,8 +62,8 @@ describe("Moves - Imprison", () => { const playerPokemon1 = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.IMPRISON); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.IMPRISON); await game.toNextTurn(); const imprisonArenaTag = game.scene.arena.getTag(ArenaTagType.IMPRISON); const imprisonBattlerTag1 = playerPokemon1.getTag(BattlerTagType.IMPRISON); @@ -72,7 +72,7 @@ describe("Moves - Imprison", () => { // Second turn, Imprison forces Struggle to occur game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const playerPokemon2 = game.scene.getPlayerPokemon()!; const imprisonBattlerTag2 = playerPokemon2.getTag(BattlerTagType.IMPRISON); @@ -81,18 +81,18 @@ describe("Moves - Imprison", () => { }); it("The effects of Imprison only end when the source is no longer active", async () => { - game.override.moveset([Moves.SPLASH, Moves.IMPRISON]); + game.override.moveset([MoveId.SPLASH, MoveId.IMPRISON]); await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.IMPRISON); - await game.move.selectEnemyMove(Moves.GROWL); + game.move.select(MoveId.IMPRISON); + await game.move.selectEnemyMove(MoveId.GROWL); await game.toNextTurn(); expect(game.scene.arena.getTag(ArenaTagType.IMPRISON)).toBeDefined(); expect(enemyPokemon.getTag(BattlerTagType.IMPRISON)).toBeDefined(); game.doSwitchPokemon(1); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(playerPokemon.isActive(true)).toBeFalsy(); expect(game.scene.arena.getTag(ArenaTagType.IMPRISON)).toBeUndefined(); diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index ec924c58bdf..4aee93ea8f0 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -3,7 +3,7 @@ import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import type { MovePhase } from "#app/phases/move-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -13,7 +13,7 @@ describe("Moves - Instruct", () => { let phaserGame: Phaser.Game; let game: GameManager; - function instructSuccess(target: Pokemon, move: Moves): void { + function instructSuccess(target: Pokemon, move: MoveId): void { expect(target.getLastXMoves(-1)[0].move).toBe(move); expect(target.getLastXMoves(-1)[1].move).toBe(target.getLastXMoves()[0].move); expect(target.getMoveset().find(m => m?.moveId === move)?.ppUsed).toBe(2); @@ -41,14 +41,14 @@ describe("Moves - Instruct", () => { }); it("should repeat target's last used move", async () => { - game.override.moveset(Moves.INSTRUCT).enemyLevel(1000); // ensures shuckle no die + game.override.moveset(MoveId.INSTRUCT).enemyLevel(1000); // ensures shuckle no die await game.classicMode.startBattle([Species.AMOONGUSS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, Moves.SONIC_BOOM); + game.move.changeMoveset(enemy, MoveId.SONIC_BOOM); - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.SONIC_BOOM); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.SONIC_BOOM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MovePhase"); // enemy attacks us @@ -60,93 +60,93 @@ describe("Moves - Instruct", () => { await game.phaseInterceptor.to("MovePhase", false); // enemy repeats move currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(enemy); - expect(currentPhase.move.moveId).toBe(Moves.SONIC_BOOM); + expect(currentPhase.move.moveId).toBe(MoveId.SONIC_BOOM); await game.phaseInterceptor.to("TurnEndPhase", false); - instructSuccess(enemy, Moves.SONIC_BOOM); + instructSuccess(enemy, MoveId.SONIC_BOOM); expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); }); it("should repeat enemy's move through substitute", async () => { - game.override.moveset([Moves.INSTRUCT, Moves.SPLASH]); + game.override.moveset([MoveId.INSTRUCT, MoveId.SPLASH]); await game.classicMode.startBattle([Species.AMOONGUSS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, [Moves.SONIC_BOOM, Moves.SUBSTITUTE]); + game.move.changeMoveset(enemy, [MoveId.SONIC_BOOM, MoveId.SUBSTITUTE]); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SUBSTITUTE); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SUBSTITUTE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.SONIC_BOOM); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.SONIC_BOOM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); - instructSuccess(game.scene.getEnemyPokemon()!, Moves.SONIC_BOOM); + instructSuccess(game.scene.getEnemyPokemon()!, MoveId.SONIC_BOOM); expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); }); it("should repeat ally's attack on enemy", async () => { - game.override.battleStyle("double").enemyMoveset(Moves.SPLASH); + game.override.battleStyle("double").enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.AMOONGUSS, Species.SHUCKLE]); const [amoonguss, shuckle] = game.scene.getPlayerField(); - game.move.changeMoveset(amoonguss, [Moves.INSTRUCT, Moves.SONIC_BOOM]); - game.move.changeMoveset(shuckle, [Moves.INSTRUCT, Moves.SONIC_BOOM]); + game.move.changeMoveset(amoonguss, [MoveId.INSTRUCT, MoveId.SONIC_BOOM]); + game.move.changeMoveset(shuckle, [MoveId.INSTRUCT, MoveId.SONIC_BOOM]); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2); - game.move.select(Moves.SONIC_BOOM, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SONIC_BOOM, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); - instructSuccess(shuckle, Moves.SONIC_BOOM); + instructSuccess(shuckle, MoveId.SONIC_BOOM); expect(game.scene.getEnemyField()[0].getInverseHp()).toBe(40); }); // TODO: Enable test case once gigaton hammer (and blood moon) are reworked it.todo("should repeat enemy's Gigaton Hammer", async () => { - game.override.moveset(Moves.INSTRUCT).enemyLevel(5); + game.override.moveset(MoveId.INSTRUCT).enemyLevel(5); await game.classicMode.startBattle([Species.AMOONGUSS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, [Moves.GIGATON_HAMMER, Moves.BLOOD_MOON]); + game.move.changeMoveset(enemy, [MoveId.GIGATON_HAMMER, MoveId.BLOOD_MOON]); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - instructSuccess(enemy, Moves.GIGATON_HAMMER); + instructSuccess(enemy, MoveId.GIGATON_HAMMER); expect(game.scene.getPlayerPokemon()!.turnData.attacksReceived.length).toBe(2); }); it("should add moves to move queue for copycat", async () => { - game.override.battleStyle("double").moveset(Moves.INSTRUCT).enemyLevel(5); + game.override.battleStyle("double").moveset(MoveId.INSTRUCT).enemyLevel(5); await game.classicMode.startBattle([Species.AMOONGUSS]); const [enemy1, enemy2] = game.scene.getEnemyField()!; - game.move.changeMoveset(enemy1, Moves.WATER_GUN); - game.move.changeMoveset(enemy2, Moves.COPYCAT); + game.move.changeMoveset(enemy1, MoveId.WATER_GUN); + game.move.changeMoveset(enemy2, MoveId.COPYCAT); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); - instructSuccess(enemy1, Moves.WATER_GUN); + instructSuccess(enemy1, MoveId.WATER_GUN); // amoonguss gets hit by water gun thrice; once by original attack, once by instructed use and once by copycat expect(game.scene.getPlayerPokemon()!.turnData.attacksReceived.length).toBe(3); }); it("should respect enemy's status condition", async () => { - game.override.moveset([Moves.INSTRUCT, Moves.THUNDER_WAVE]).enemyMoveset(Moves.SONIC_BOOM); + game.override.moveset([MoveId.INSTRUCT, MoveId.THUNDER_WAVE]).enemyMoveset(MoveId.SONIC_BOOM); await game.classicMode.startBattle([Species.AMOONGUSS]); - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MovePhase"); // force enemy's instructed move to bork and then immediately thaw out @@ -155,21 +155,21 @@ describe("Moves - Instruct", () => { await game.phaseInterceptor.to("TurnEndPhase", false); const moveHistory = game.scene.getEnemyPokemon()?.getLastXMoves(-1)!; - expect(moveHistory.map(m => m.move)).toEqual([Moves.SONIC_BOOM, Moves.NONE, Moves.SONIC_BOOM]); + expect(moveHistory.map(m => m.move)).toEqual([MoveId.SONIC_BOOM, MoveId.NONE, MoveId.SONIC_BOOM]); expect(game.scene.getPlayerPokemon()?.getInverseHp()).toBe(40); }); it("should not repeat enemy's out of pp move", async () => { - game.override.moveset(Moves.INSTRUCT).enemySpecies(Species.UNOWN); + game.override.moveset(MoveId.INSTRUCT).enemySpecies(Species.UNOWN); await game.classicMode.startBattle([Species.AMOONGUSS]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemyPokemon, Moves.HIDDEN_POWER); - const moveUsed = enemyPokemon.moveset.find(m => m?.moveId === Moves.HIDDEN_POWER)!; + game.move.changeMoveset(enemyPokemon, MoveId.HIDDEN_POWER); + const moveUsed = enemyPokemon.moveset.find(m => m?.moveId === MoveId.HIDDEN_POWER)!; moveUsed.ppUsed = moveUsed.getMovePp() - 1; - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.HIDDEN_POWER); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.HIDDEN_POWER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -179,15 +179,15 @@ describe("Moves - Instruct", () => { }); it("should redirect attacking moves if enemy faints", async () => { - game.override.battleStyle("double").enemyMoveset(Moves.SPLASH).enemySpecies(Species.MAGIKARP).enemyLevel(1); + game.override.battleStyle("double").enemyMoveset(MoveId.SPLASH).enemySpecies(Species.MAGIKARP).enemyLevel(1); await game.classicMode.startBattle([Species.HISUI_ELECTRODE, Species.KOMMO_O]); const [electrode, kommo_o] = game.scene.getPlayerField()!; - game.move.changeMoveset(electrode, Moves.CHLOROBLAST); - game.move.changeMoveset(kommo_o, Moves.INSTRUCT); + game.move.changeMoveset(electrode, MoveId.CHLOROBLAST); + game.move.changeMoveset(kommo_o, MoveId.INSTRUCT); - game.move.select(Moves.CHLOROBLAST, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + game.move.select(MoveId.CHLOROBLAST, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); @@ -201,36 +201,36 @@ describe("Moves - Instruct", () => { expect(karp2.isFainted()).toBe(true); }); it("should allow for dancer copying of instructed dance move", async () => { - game.override.battleStyle("double").enemyMoveset([Moves.INSTRUCT, Moves.SPLASH]).enemyLevel(1000); + game.override.battleStyle("double").enemyMoveset([MoveId.INSTRUCT, MoveId.SPLASH]).enemyLevel(1000); await game.classicMode.startBattle([Species.ORICORIO, Species.VOLCARONA]); const [oricorio, volcarona] = game.scene.getPlayerField(); - game.move.changeMoveset(oricorio, Moves.SPLASH); - game.move.changeMoveset(volcarona, Moves.FIERY_DANCE); + game.move.changeMoveset(oricorio, MoveId.SPLASH); + game.move.changeMoveset(volcarona, MoveId.FIERY_DANCE); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.move.selectEnemyMove(Moves.INSTRUCT, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.FIERY_DANCE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.move.selectEnemyMove(MoveId.INSTRUCT, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); // fiery dance triggered dancer successfully for a total of 4 hits // Enemy level is set to a high value so that it does not faint even after all 4 hits - instructSuccess(volcarona, Moves.FIERY_DANCE); + instructSuccess(volcarona, MoveId.FIERY_DANCE); expect(game.scene.getEnemyField()[0].turnData.attacksReceived.length).toBe(4); }); it("should not repeat move when switching out", async () => { - game.override.enemyMoveset(Moves.INSTRUCT).enemySpecies(Species.UNOWN); + game.override.enemyMoveset(MoveId.INSTRUCT).enemySpecies(Species.UNOWN); await game.classicMode.startBattle([Species.AMOONGUSS, Species.TOXICROAK]); const amoonguss = game.scene.getPlayerPokemon()!; - game.move.changeMoveset(amoonguss, Moves.SEED_BOMB); + game.move.changeMoveset(amoonguss, MoveId.SEED_BOMB); amoonguss.summonData.moveHistory = [ { - move: Moves.SEED_BOMB, + move: MoveId.SEED_BOMB, targets: [BattlerIndex.ENEMY], result: MoveResult.SUCCESS, }, @@ -244,11 +244,11 @@ describe("Moves - Instruct", () => { }); it("should fail if no move has yet been used by target", async () => { - game.override.moveset(Moves.INSTRUCT).enemyMoveset(Moves.SPLASH); + game.override.moveset(MoveId.INSTRUCT).enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.AMOONGUSS]); - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -256,16 +256,16 @@ describe("Moves - Instruct", () => { }); it("should attempt to call enemy's disabled move, but move use itself should fail", async () => { - game.override.moveset([Moves.INSTRUCT, Moves.DISABLE]).battleStyle("double"); + game.override.moveset([MoveId.INSTRUCT, MoveId.DISABLE]).battleStyle("double"); await game.classicMode.startBattle([Species.AMOONGUSS, Species.DROWZEE]); const [enemy1, enemy2] = game.scene.getEnemyField(); - game.move.changeMoveset(enemy1, Moves.SONIC_BOOM); - game.move.changeMoveset(enemy2, Moves.SPLASH); + game.move.changeMoveset(enemy1, MoveId.SONIC_BOOM); + game.move.changeMoveset(enemy2, MoveId.SPLASH); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.DISABLE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.move.selectEnemyMove(Moves.SONIC_BOOM, BattlerIndex.PLAYER); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.DISABLE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.move.selectEnemyMove(MoveId.SONIC_BOOM, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -276,49 +276,49 @@ describe("Moves - Instruct", () => { game.scene .getEnemyField()[0] .getMoveset() - .find(m => m?.moveId === Moves.SONIC_BOOM)?.ppUsed, + .find(m => m?.moveId === MoveId.SONIC_BOOM)?.ppUsed, ).toBe(1); }); it("should not repeat enemy's move through protect", async () => { - game.override.moveset([Moves.INSTRUCT]); + game.override.moveset([MoveId.INSTRUCT]); await game.classicMode.startBattle([Species.AMOONGUSS]); const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(enemy, Moves.PROTECT); - game.move.select(Moves.INSTRUCT); + game.move.changeMoveset(enemy, MoveId.PROTECT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); - expect(enemy.getLastXMoves(-1)[0].move).toBe(Moves.PROTECT); + expect(enemy.getLastXMoves(-1)[0].move).toBe(MoveId.PROTECT); expect(enemy.getLastXMoves(-1)[1]).toBeUndefined(); // undefined because instruct failed and didn't repeat - expect(enemy.getMoveset().find(m => m?.moveId === Moves.PROTECT)?.ppUsed).toBe(1); + expect(enemy.getMoveset().find(m => m?.moveId === MoveId.PROTECT)?.ppUsed).toBe(1); }); it("should not repeat enemy's charging move", async () => { - game.override.moveset([Moves.INSTRUCT]).enemyMoveset([Moves.SONIC_BOOM, Moves.HYPER_BEAM]); + game.override.moveset([MoveId.INSTRUCT]).enemyMoveset([MoveId.SONIC_BOOM, MoveId.HYPER_BEAM]); await game.classicMode.startBattle([Species.SHUCKLE]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; enemy.summonData.moveHistory = [ { - move: Moves.SONIC_BOOM, + move: MoveId.SONIC_BOOM, targets: [BattlerIndex.PLAYER], result: MoveResult.SUCCESS, virtual: false, }, ]; - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.HYPER_BEAM); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.HYPER_BEAM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); // instruct fails at copying last move due to charging turn (rather than instructing sonic boom) expect(player.getLastXMoves()[0].result).toBe(MoveResult.FAIL); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -326,114 +326,114 @@ describe("Moves - Instruct", () => { }); it("should not repeat move since forgotten by target", async () => { - game.override.enemyMoveset(Moves.INSTRUCT); + game.override.enemyMoveset(MoveId.INSTRUCT); await game.classicMode.startBattle([Species.REGIELEKI]); const regieleki = game.scene.getPlayerPokemon()!; regieleki.pushMoveHistory({ - move: Moves.ELECTRO_DRIFT, + move: MoveId.ELECTRO_DRIFT, targets: [BattlerIndex.PLAYER], result: MoveResult.SUCCESS, virtual: false, }); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toEndOfTurn(); expect(game.field.getEnemyPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should disregard priority of instructed move on use", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.WHIRLWIND]).moveset(Moves.INSTRUCT); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]).moveset(MoveId.INSTRUCT); await game.classicMode.startBattle([Species.LUCARIO, Species.BANETTE]); const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.summonData.moveHistory = [ { - move: Moves.WHIRLWIND, + move: MoveId.WHIRLWIND, targets: [BattlerIndex.PLAYER], result: MoveResult.SUCCESS, virtual: false, }, ]; - game.move.select(Moves.INSTRUCT); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.INSTRUCT); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase", false); // lucario instructed enemy whirlwind at 0 priority to switch itself out const instructedMove = enemyPokemon.getLastXMoves(-1)[1]; expect(instructedMove.result).toBe(MoveResult.SUCCESS); - expect(instructedMove.move).toBe(Moves.WHIRLWIND); + expect(instructedMove.move).toBe(MoveId.WHIRLWIND); expect(game.scene.getPlayerPokemon()?.species.speciesId).toBe(Species.BANETTE); }); it("should respect moves' original priority for psychic terrain", async () => { game.override .battleStyle("double") - .moveset([Moves.QUICK_ATTACK, Moves.SPLASH, Moves.INSTRUCT]) - .enemyMoveset([Moves.SPLASH, Moves.PSYCHIC_TERRAIN]); + .moveset([MoveId.QUICK_ATTACK, MoveId.SPLASH, MoveId.INSTRUCT]) + .enemyMoveset([MoveId.SPLASH, MoveId.PSYCHIC_TERRAIN]); await game.classicMode.startBattle([Species.BANETTE, Species.KLEFKI]); - game.move.select(Moves.QUICK_ATTACK, BattlerIndex.PLAYER, BattlerIndex.ENEMY); // succeeds due to terrain no - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.PSYCHIC_TERRAIN); + game.move.select(MoveId.QUICK_ATTACK, BattlerIndex.PLAYER, BattlerIndex.ENEMY); // succeeds due to terrain no + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.PSYCHIC_TERRAIN); await game.toNextTurn(); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); // quick attack failed when instructed const banette = game.scene.getPlayerPokemon()!; - expect(banette.getLastXMoves(-1)[1].move).toBe(Moves.QUICK_ATTACK); + expect(banette.getLastXMoves(-1)[1].move).toBe(MoveId.QUICK_ATTACK); expect(banette.getLastXMoves(-1)[1].result).toBe(MoveResult.FAIL); }); it("should still work w/ prankster in psychic terrain", async () => { - game.override.battleStyle("double").enemyMoveset([Moves.SPLASH, Moves.PSYCHIC_TERRAIN]); + game.override.battleStyle("double").enemyMoveset([MoveId.SPLASH, MoveId.PSYCHIC_TERRAIN]); await game.classicMode.startBattle([Species.BANETTE, Species.KLEFKI]); const [banette, klefki] = game.scene.getPlayerField()!; - game.move.changeMoveset(banette, [Moves.VINE_WHIP, Moves.SPLASH]); - game.move.changeMoveset(klefki, [Moves.INSTRUCT, Moves.SPLASH]); + game.move.changeMoveset(banette, [MoveId.VINE_WHIP, MoveId.SPLASH]); + game.move.changeMoveset(klefki, [MoveId.INSTRUCT, MoveId.SPLASH]); - game.move.select(Moves.VINE_WHIP, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.PSYCHIC_TERRAIN); + game.move.select(MoveId.VINE_WHIP, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.PSYCHIC_TERRAIN); await game.toNextTurn(); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); // copies vine whip + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); // copies vine whip await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); - expect(banette.getLastXMoves(-1)[1].move).toBe(Moves.VINE_WHIP); - expect(banette.getLastXMoves(-1)[2].move).toBe(Moves.VINE_WHIP); - expect(banette.getMoveset().find(m => m?.moveId === Moves.VINE_WHIP)?.ppUsed).toBe(2); + expect(banette.getLastXMoves(-1)[1].move).toBe(MoveId.VINE_WHIP); + expect(banette.getLastXMoves(-1)[2].move).toBe(MoveId.VINE_WHIP); + expect(banette.getMoveset().find(m => m?.moveId === MoveId.VINE_WHIP)?.ppUsed).toBe(2); }); it("should cause spread moves to correctly hit targets in doubles after singles", async () => { game.override .battleStyle("even-doubles") - .moveset([Moves.BREAKING_SWIPE, Moves.INSTRUCT, Moves.SPLASH]) - .enemyMoveset(Moves.SONIC_BOOM) + .moveset([MoveId.BREAKING_SWIPE, MoveId.INSTRUCT, MoveId.SPLASH]) + .enemyMoveset(MoveId.SONIC_BOOM) .enemySpecies(Species.AXEW) .startingLevel(500); await game.classicMode.startBattle([Species.KORAIDON, Species.KLEFKI]); const koraidon = game.scene.getPlayerField()[0]!; - game.move.select(Moves.BREAKING_SWIPE); + game.move.select(MoveId.BREAKING_SWIPE); await game.phaseInterceptor.to("TurnEndPhase", false); expect(koraidon.getInverseHp()).toBe(0); expect(koraidon.getLastXMoves(-1)[0].targets).toEqual([BattlerIndex.ENEMY]); await game.toNextWave(); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); // did not take damage since enemies died beforehand; @@ -445,23 +445,23 @@ describe("Moves - Instruct", () => { it("should cause AoE moves to correctly hit everyone in doubles after singles", async () => { game.override .battleStyle("even-doubles") - .moveset([Moves.BRUTAL_SWING, Moves.INSTRUCT, Moves.SPLASH]) + .moveset([MoveId.BRUTAL_SWING, MoveId.INSTRUCT, MoveId.SPLASH]) .enemySpecies(Species.AXEW) - .enemyMoveset(Moves.SONIC_BOOM) + .enemyMoveset(MoveId.SONIC_BOOM) .startingLevel(500); await game.classicMode.startBattle([Species.KORAIDON, Species.KLEFKI]); const koraidon = game.scene.getPlayerField()[0]!; - game.move.select(Moves.BRUTAL_SWING); + game.move.select(MoveId.BRUTAL_SWING); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase", false); expect(koraidon.getInverseHp()).toBe(0); expect(koraidon.getLastXMoves(-1)[0].targets).toEqual([BattlerIndex.ENEMY]); await game.toNextWave(); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("TurnEndPhase", false); // did not take damage since enemies died beforehand; @@ -477,23 +477,23 @@ describe("Moves - Instruct", () => { it("should cause multi-hit moves to hit the appropriate number of times in singles", async () => { game.override .enemyAbility(AbilityId.SKILL_LINK) - .moveset([Moves.SPLASH, Moves.INSTRUCT]) - .enemyMoveset(Moves.BULLET_SEED); + .moveset([MoveId.SPLASH, MoveId.INSTRUCT]) + .enemyMoveset(MoveId.BULLET_SEED); await game.classicMode.startBattle([Species.BULBASAUR]); const bulbasaur = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); expect(bulbasaur.turnData.attacksReceived.length).toBe(10); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); @@ -504,33 +504,33 @@ describe("Moves - Instruct", () => { game.override .battleStyle("double") .enemyAbility(AbilityId.SKILL_LINK) - .moveset([Moves.SPLASH, Moves.INSTRUCT]) - .enemyMoveset([Moves.BULLET_SEED, Moves.SPLASH]) + .moveset([MoveId.SPLASH, MoveId.INSTRUCT]) + .enemyMoveset([MoveId.BULLET_SEED, MoveId.SPLASH]) .enemyLevel(5); await game.classicMode.startBattle([Species.BULBASAUR, Species.IVYSAUR]); const [, ivysaur] = game.scene.getPlayerField(); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER); - game.move.select(Moves.SPLASH, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.move.selectEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.move.selectEnemyMove(MoveId.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("BerryPhase"); expect(ivysaur.turnData.attacksReceived.length).toBe(15); await game.toNextTurn(); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(Moves.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); - await game.move.selectEnemyMove(Moves.BULLET_SEED, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER, BattlerIndex.ENEMY); + game.move.select(MoveId.INSTRUCT, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); + await game.move.selectEnemyMove(MoveId.BULLET_SEED, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/jaw_lock.test.ts b/test/moves/jaw_lock.test.ts index 8bc07334ed8..a8aa5b8d7c6 100644 --- a/test/moves/jaw_lock.test.ts +++ b/test/moves/jaw_lock.test.ts @@ -6,7 +6,7 @@ import { FaintPhase } from "#app/phases/faint-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import GameManager from "#test/testUtils/gameManager"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -32,8 +32,8 @@ describe("Moves - Jaw Lock", () => { .battleStyle("single") .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.INSOMNIA) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.JAW_LOCK, Moves.SPLASH]) + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.JAW_LOCK, MoveId.SPLASH]) .startingLevel(100) .enemyLevel(100) .disableCrits(); @@ -45,7 +45,7 @@ describe("Moves - Jaw Lock", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.JAW_LOCK); + game.move.select(MoveId.JAW_LOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); @@ -66,7 +66,7 @@ describe("Moves - Jaw Lock", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.JAW_LOCK); + game.move.select(MoveId.JAW_LOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase, false); @@ -91,7 +91,7 @@ describe("Moves - Jaw Lock", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.JAW_LOCK); + game.move.select(MoveId.JAW_LOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -114,8 +114,8 @@ describe("Moves - Jaw Lock", () => { const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.JAW_LOCK, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.JAW_LOCK, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -125,8 +125,8 @@ describe("Moves - Jaw Lock", () => { await game.toNextTurn(); - game.move.select(Moves.JAW_LOCK, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.JAW_LOCK, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); @@ -136,14 +136,14 @@ describe("Moves - Jaw Lock", () => { }); it("should not trap either pokemon if the target is protected", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([MoveId.PROTECT]); await game.classicMode.startBattle([Species.BULBASAUR]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.JAW_LOCK); + game.move.select(MoveId.JAW_LOCK); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/lash_out.test.ts b/test/moves/lash_out.test.ts index 592fc28250c..2f66095893a 100644 --- a/test/moves/lash_out.test.ts +++ b/test/moves/lash_out.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,22 +28,22 @@ describe("Moves - Lash Out", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.FUR_COAT) - .enemyMoveset([Moves.GROWL]) + .enemyMoveset([MoveId.GROWL]) .startingLevel(10) .enemyLevel(10) .starterSpecies(Species.FEEBAS) .ability(AbilityId.BALL_FETCH) - .moveset([Moves.LASH_OUT]); + .moveset([MoveId.LASH_OUT]); }); it("should deal double damage if the user's stat stages were lowered this turn", async () => { - vi.spyOn(allMoves[Moves.LASH_OUT], "calculateBattlePower"); + vi.spyOn(allMoves[MoveId.LASH_OUT], "calculateBattlePower"); await game.classicMode.startBattle(); - game.move.select(Moves.LASH_OUT); + game.move.select(MoveId.LASH_OUT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - expect(allMoves[Moves.LASH_OUT].calculateBattlePower).toHaveReturnedWith(150); + expect(allMoves[MoveId.LASH_OUT].calculateBattlePower).toHaveReturnedWith(150); }); }); diff --git a/test/moves/last-resort.test.ts b/test/moves/last-resort.test.ts index dcd85ee1366..93b6c57b87e 100644 --- a/test/moves/last-resort.test.ts +++ b/test/moves/last-resort.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -14,7 +14,7 @@ describe("Moves - Last Resort", () => { function expectLastResortFail() { expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0]).toEqual( expect.objectContaining({ - move: Moves.LAST_RESORT, + move: MoveId.LAST_RESORT, result: MoveResult.FAIL, }), ); @@ -37,40 +37,40 @@ describe("Moves - Last Resort", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should fail unless all other moves (excluding itself) has been used at least once", async () => { - game.override.moveset([Moves.LAST_RESORT, Moves.SPLASH, Moves.GROWL, Moves.GROWTH]); + game.override.moveset([MoveId.LAST_RESORT, MoveId.SPLASH, MoveId.GROWL, MoveId.GROWTH]); await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; expect(blissey).toBeDefined(); // Last resort by itself - game.move.select(Moves.LAST_RESORT); + game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); // Splash (1/3) - blissey.pushMoveHistory({ move: Moves.SPLASH, targets: [BattlerIndex.PLAYER] }); - game.move.select(Moves.LAST_RESORT); + blissey.pushMoveHistory({ move: MoveId.SPLASH, targets: [BattlerIndex.PLAYER] }); + game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); // Growl (2/3) - blissey.pushMoveHistory({ move: Moves.GROWL, targets: [BattlerIndex.ENEMY] }); - game.move.select(Moves.LAST_RESORT); + blissey.pushMoveHistory({ move: MoveId.GROWL, targets: [BattlerIndex.ENEMY] }); + game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); // Were last resort itself counted, it would error here // Growth (3/3) - blissey.pushMoveHistory({ move: Moves.GROWTH, targets: [BattlerIndex.PLAYER] }); - game.move.select(Moves.LAST_RESORT); + blissey.pushMoveHistory({ move: MoveId.GROWTH, targets: [BattlerIndex.PLAYER] }); + game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.getLastXMoves()[0]).toEqual( expect.objectContaining({ - move: Moves.LAST_RESORT, + move: MoveId.LAST_RESORT, result: MoveResult.SUCCESS, }), ); @@ -78,59 +78,59 @@ describe("Moves - Last Resort", () => { it("should disregard virtually invoked moves", async () => { game.override - .moveset([Moves.LAST_RESORT, Moves.SWORDS_DANCE, Moves.ABSORB, Moves.MIRROR_MOVE]) - .enemyMoveset([Moves.SWORDS_DANCE, Moves.ABSORB]) + .moveset([MoveId.LAST_RESORT, MoveId.SWORDS_DANCE, MoveId.ABSORB, MoveId.MIRROR_MOVE]) + .enemyMoveset([MoveId.SWORDS_DANCE, MoveId.ABSORB]) .ability(AbilityId.DANCER) .enemySpecies(Species.ABOMASNOW); // magikarp has 50% chance to be okho'd on absorb crit await game.classicMode.startBattle([Species.BLISSEY]); // use mirror move normally to trigger absorb virtually - game.move.select(Moves.MIRROR_MOVE); - await game.move.selectEnemyMove(Moves.ABSORB); + game.move.select(MoveId.MIRROR_MOVE); + await game.move.selectEnemyMove(MoveId.ABSORB); await game.toNextTurn(); - game.move.select(Moves.LAST_RESORT); - await game.move.selectEnemyMove(Moves.SWORDS_DANCE); // goes first to proc dancer ahead of time + game.move.select(MoveId.LAST_RESORT); + await game.move.selectEnemyMove(MoveId.SWORDS_DANCE); // goes first to proc dancer ahead of time await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); }); it("should fail if no other moves in moveset", async () => { - game.override.moveset(Moves.LAST_RESORT); + game.override.moveset(MoveId.LAST_RESORT); await game.classicMode.startBattle([Species.BLISSEY]); - game.move.select(Moves.LAST_RESORT); + game.move.select(MoveId.LAST_RESORT); await game.phaseInterceptor.to("TurnEndPhase"); expectLastResortFail(); }); it("should work if invoked virtually when all other moves have been used", async () => { - game.override.moveset([Moves.LAST_RESORT, Moves.SLEEP_TALK]).ability(AbilityId.COMATOSE); + game.override.moveset([MoveId.LAST_RESORT, MoveId.SLEEP_TALK]).ability(AbilityId.COMATOSE); await game.classicMode.startBattle([Species.KOMALA]); - game.move.select(Moves.SLEEP_TALK); + game.move.select(MoveId.SLEEP_TALK); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.getPlayerPokemon()?.getLastXMoves(-1)).toEqual([ expect.objectContaining({ - move: Moves.LAST_RESORT, + move: MoveId.LAST_RESORT, result: MoveResult.SUCCESS, virtual: true, }), expect.objectContaining({ - move: Moves.SLEEP_TALK, + move: MoveId.SLEEP_TALK, result: MoveResult.SUCCESS, }), ]); }); it("should preserve usability status on reload", async () => { - game.override.moveset([Moves.LAST_RESORT, Moves.SPLASH]).ability(AbilityId.COMATOSE); + game.override.moveset([MoveId.LAST_RESORT, MoveId.SPLASH]).ability(AbilityId.COMATOSE); await game.classicMode.startBattle([Species.BLISSEY]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); @@ -141,7 +141,7 @@ describe("Moves - Last Resort", () => { expect(oldMoveHistory).toEqual(newMoveHistory); // use last resort and it should kill the karp just fine - game.move.select(Moves.LAST_RESORT); + game.move.select(MoveId.LAST_RESORT); game.scene.getEnemyPokemon()!.hp = 1; await game.phaseInterceptor.to("TurnEndPhase"); @@ -149,15 +149,15 @@ describe("Moves - Last Resort", () => { }); it("should fail if used while not in moveset", async () => { - game.override.moveset(Moves.MIRROR_MOVE).enemyMoveset([Moves.ABSORB, Moves.LAST_RESORT]); + game.override.moveset(MoveId.MIRROR_MOVE).enemyMoveset([MoveId.ABSORB, MoveId.LAST_RESORT]); await game.classicMode.startBattle([Species.BLISSEY]); // ensure enemy last resort succeeds - game.move.select(Moves.MIRROR_MOVE); - await game.move.selectEnemyMove(Moves.ABSORB); + game.move.select(MoveId.MIRROR_MOVE); + await game.move.selectEnemyMove(MoveId.ABSORB); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.MIRROR_MOVE); - await game.move.selectEnemyMove(Moves.LAST_RESORT); + game.move.select(MoveId.MIRROR_MOVE); + await game.move.selectEnemyMove(MoveId.LAST_RESORT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index 2ddc49df5df..9cdc4a79bdd 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; @@ -28,16 +28,16 @@ describe("Moves - Last Respects", () => { beforeEach(() => { game = new GameManager(phaserGame); - move = allMoves[Moves.LAST_RESPECTS]; + move = allMoves[MoveId.LAST_RESPECTS]; basePower = move.power; game.override .battleStyle("single") .disableCrits() - .moveset([Moves.LAST_RESPECTS, Moves.EXPLOSION, Moves.LUNAR_DANCE]) + .moveset([MoveId.LAST_RESPECTS, MoveId.EXPLOSION, MoveId.LUNAR_DANCE]) .ability(AbilityId.BALL_FETCH) .enemyAbility(AbilityId.BALL_FETCH) .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(1) .enemyLevel(100); @@ -50,7 +50,7 @@ describe("Moves - Last Respects", () => { /** * Bulbasur faints once */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -58,12 +58,12 @@ describe("Moves - Last Respects", () => { /** * Charmander faints once */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(2); await game.toNextTurn(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -76,7 +76,7 @@ describe("Moves - Last Respects", () => { /** * Bulbasur faints once */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -85,7 +85,7 @@ describe("Moves - Last Respects", () => { * Charmander faints once */ game.doRevivePokemon(1); - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -93,12 +93,12 @@ describe("Moves - Last Respects", () => { /** * Bulbasur faints twice */ - game.move.select(Moves.EXPLOSION); + game.move.select(MoveId.EXPLOSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(2); await game.toNextTurn(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -111,14 +111,14 @@ describe("Moves - Last Respects", () => { .startingWave(1) .enemyLevel(1) .startingLevel(100) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); /** * The first Pokemon faints and another Pokemon in the party is selected. */ - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -126,12 +126,12 @@ describe("Moves - Last Respects", () => { /** * Enemy Pokemon faints and new wave is entered. */ - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); expect(game.scene.arena.playerFaints).toBe(1); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower + 1 * 50); @@ -143,15 +143,15 @@ describe("Moves - Last Respects", () => { .startingWave(1) .enemyLevel(1) .startingLevel(100) - .enemyMoveset(Moves.LAST_RESPECTS) - .moveset([Moves.LUNAR_DANCE, Moves.LAST_RESPECTS, Moves.SPLASH]); + .enemyMoveset(MoveId.LAST_RESPECTS) + .moveset([MoveId.LUNAR_DANCE, MoveId.LAST_RESPECTS, MoveId.SPLASH]); await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); /** * The first Pokemon faints and another Pokemon in the party is selected. */ - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); @@ -159,12 +159,12 @@ describe("Moves - Last Respects", () => { /** * Enemy Pokemon faints and new wave is entered. */ - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); expect(game.scene.currentBattle.enemyFaints).toBe(0); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -180,16 +180,16 @@ describe("Moves - Last Respects", () => { await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); @@ -201,16 +201,16 @@ describe("Moves - Last Respects", () => { await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE]); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.LUNAR_DANCE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); - game.move.select(Moves.LAST_RESPECTS); + game.move.select(MoveId.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index be4cd7910ee..214ae8b1842 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -8,7 +8,7 @@ import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { NumberHolder } from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -38,15 +38,15 @@ describe("Moves - Light Screen", () => { game.override .battleStyle("single") .ability(AbilityId.BALL_FETCH) - .moveset([Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE]) + .moveset([MoveId.ABSORB, MoveId.DAZZLING_GLEAM, MoveId.TACKLE]) .enemyLevel(100) .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.LIGHT_SCREEN) + .enemyMoveset(MoveId.LIGHT_SCREEN) .disableCrits(); }); it("reduces damage of special attacks by half in a single battle", async () => { - const moveToUse = Moves.ABSORB; + const moveToUse = MoveId.ABSORB; await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -65,7 +65,7 @@ describe("Moves - Light Screen", () => { it("reduces damage of special attacks by a third in a double battle", async () => { game.override.battleStyle("double"); - const moveToUse = Moves.DAZZLING_GLEAM; + const moveToUse = MoveId.DAZZLING_GLEAM; await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); game.move.select(moveToUse); @@ -82,7 +82,7 @@ describe("Moves - Light Screen", () => { }); it("does not affect physical attacks", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -98,9 +98,9 @@ describe("Moves - Light Screen", () => { }); it("does not affect critical hits", async () => { - game.override.moveset([Moves.FROST_BREATH]); - const moveToUse = Moves.FROST_BREATH; - vi.spyOn(allMoves[Moves.FROST_BREATH], "accuracy", "get").mockReturnValue(100); + game.override.moveset([MoveId.FROST_BREATH]); + const moveToUse = MoveId.FROST_BREATH; + vi.spyOn(allMoves[MoveId.FROST_BREATH], "accuracy", "get").mockReturnValue(100); await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -116,7 +116,7 @@ describe("Moves - Light Screen", () => { }); /** - * Calculates the damage of a move multiplied by screen's multiplier, Light Screen in this case {@linkcode Moves.LIGHT_SCREEN}. + * Calculates the damage of a move multiplied by screen's multiplier, Light Screen in this case {@linkcode MoveId.LIGHT_SCREEN}. * Please note this does not consider other damage calculations except the screen multiplier. * * @param defender - The defending Pokémon. diff --git a/test/moves/lucky_chant.test.ts b/test/moves/lucky_chant.test.ts index ee83944fb92..1c64ab05afb 100644 --- a/test/moves/lucky_chant.test.ts +++ b/test/moves/lucky_chant.test.ts @@ -1,6 +1,6 @@ import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { BerryPhase } from "#app/phases/berry-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; @@ -26,10 +26,10 @@ describe("Moves - Lucky Chant", () => { game.override .battleStyle("single") - .moveset([Moves.LUCKY_CHANT, Moves.SPLASH, Moves.FOLLOW_ME]) + .moveset([MoveId.LUCKY_CHANT, MoveId.SPLASH, MoveId.FOLLOW_ME]) .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.INSOMNIA) - .enemyMoveset([Moves.FLOWER_TRICK]) + .enemyMoveset([MoveId.FLOWER_TRICK]) .startingLevel(100) .enemyLevel(100); }); @@ -39,13 +39,13 @@ describe("Moves - Lucky Chant", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const firstTurnDamage = playerPokemon.getMaxHp() - playerPokemon.hp; - game.move.select(Moves.LUCKY_CHANT); + game.move.select(MoveId.LUCKY_CHANT); await game.phaseInterceptor.to(BerryPhase, false); @@ -60,15 +60,15 @@ describe("Moves - Lucky Chant", () => { const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.FOLLOW_ME); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FOLLOW_ME); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); const firstTurnDamage = playerPokemon[0].getMaxHp() - playerPokemon[0].hp; - game.move.select(Moves.FOLLOW_ME); - game.move.select(Moves.LUCKY_CHANT, 1); + game.move.select(MoveId.FOLLOW_ME); + game.move.select(MoveId.LUCKY_CHANT, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -77,22 +77,22 @@ describe("Moves - Lucky Chant", () => { }); it("should prevent critical hits from field effects", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.addTag(BattlerTagType.ALWAYS_CRIT, 2, Moves.NONE, 0); + enemyPokemon.addTag(BattlerTagType.ALWAYS_CRIT, 2, MoveId.NONE, 0); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const firstTurnDamage = playerPokemon.getMaxHp() - playerPokemon.hp; - game.move.select(Moves.LUCKY_CHANT); + game.move.select(MoveId.LUCKY_CHANT); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/lunar_blessing.test.ts b/test/moves/lunar_blessing.test.ts index a5472057170..24e4cccc24b 100644 --- a/test/moves/lunar_blessing.test.ts +++ b/test/moves/lunar_blessing.test.ts @@ -1,7 +1,7 @@ import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,10 +25,10 @@ describe("Moves - Lunar Blessing", () => { game.override.battleStyle("double"); game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.moveset([Moves.LUNAR_BLESSING, Moves.SPLASH]); + game.override.moveset([MoveId.LUNAR_BLESSING, MoveId.SPLASH]); game.override.ability(AbilityId.BALL_FETCH); }); @@ -47,9 +47,9 @@ describe("Moves - Lunar Blessing", () => { vi.spyOn(leftPlayer, "heal"); vi.spyOn(rightPlayer, "heal"); - game.move.select(Moves.LUNAR_BLESSING, 0); + game.move.select(MoveId.LUNAR_BLESSING, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.heal).toHaveBeenCalledOnce(); @@ -67,9 +67,9 @@ describe("Moves - Lunar Blessing", () => { vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); - game.move.select(Moves.LUNAR_BLESSING, 0); + game.move.select(MoveId.LUNAR_BLESSING, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); diff --git a/test/moves/lunar_dance.test.ts b/test/moves/lunar_dance.test.ts index 61c6e9b79e0..b16940b2e8a 100644 --- a/test/moves/lunar_dance.test.ts +++ b/test/moves/lunar_dance.test.ts @@ -1,7 +1,7 @@ import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,19 +27,19 @@ describe("Moves - Lunar Dance", () => { .statusEffect(StatusEffect.BURN) .battleStyle("double") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should full restore HP, PP and status of switched in pokemon, then fail second use because no remaining backup pokemon in party", async () => { await game.classicMode.startBattle([Species.BULBASAUR, Species.ODDISH, Species.RATTATA]); const [bulbasaur, oddish, rattata] = game.scene.getPlayerParty(); - game.move.changeMoveset(bulbasaur, [Moves.LUNAR_DANCE, Moves.SPLASH]); - game.move.changeMoveset(oddish, [Moves.LUNAR_DANCE, Moves.SPLASH]); - game.move.changeMoveset(rattata, [Moves.LUNAR_DANCE, Moves.SPLASH]); + game.move.changeMoveset(bulbasaur, [MoveId.LUNAR_DANCE, MoveId.SPLASH]); + game.move.changeMoveset(oddish, [MoveId.LUNAR_DANCE, MoveId.SPLASH]); + game.move.changeMoveset(rattata, [MoveId.LUNAR_DANCE, MoveId.SPLASH]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(CommandPhase); await game.toNextTurn(); @@ -50,12 +50,12 @@ describe("Moves - Lunar Dance", () => { // Switch out Bulbasaur for Rattata so we can swtich bulbasaur back in with lunar dance game.doSwitchPokemon(2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(CommandPhase); await game.toNextTurn(); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.LUNAR_DANCE); game.doSelectPartyPokemon(2); await game.phaseInterceptor.to("SwitchPhase", false); await game.toNextTurn(); @@ -65,8 +65,8 @@ describe("Moves - Lunar Dance", () => { expect(bulbasaur.moveset[1]?.ppUsed).toBe(0); expect(bulbasaur.isFullHp()).toBe(true); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.LUNAR_DANCE); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.LUNAR_DANCE); await game.phaseInterceptor.to(CommandPhase); await game.toNextTurn(); diff --git a/test/moves/magic_coat.test.ts b/test/moves/magic_coat.test.ts index 500262fb3ac..6a16f53a462 100644 --- a/test/moves/magic_coat.test.ts +++ b/test/moves/magic_coat.test.ts @@ -7,7 +7,7 @@ import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -34,60 +34,60 @@ describe("Moves - Magic Coat", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.MAGIC_COAT); + .enemyMoveset(MoveId.MAGIC_COAT); }); it("should fail if the user goes last in the turn", async () => { - game.override.moveset([Moves.PROTECT]); + game.override.moveset([MoveId.PROTECT]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should fail if called again in the same turn due to moves like instruct", async () => { - game.override.moveset([Moves.INSTRUCT]); + game.override.moveset([MoveId.INSTRUCT]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.INSTRUCT); + game.move.select(MoveId.INSTRUCT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should not reflect moves used on the next turn", async () => { - game.override.moveset([Moves.GROWL, Moves.SPLASH]); - game.override.enemyMoveset([Moves.MAGIC_COAT, Moves.SPLASH]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); + game.override.enemyMoveset([MoveId.MAGIC_COAT, MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP]); // turn 1 - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.MAGIC_COAT); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.MAGIC_COAT); await game.toNextTurn(); // turn 2 - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should reflect basic status moves", async () => { - game.override.moveset([Moves.GROWL]); + game.override.moveset([MoveId.GROWL]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); }); it("should individually bounce back multi-target moves when used by both targets in doubles", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.GROWL, Moves.SPLASH]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); - game.move.select(Moves.GROWL, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.GROWL, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); const user = game.scene.getPlayerField()[0]; @@ -96,14 +96,14 @@ describe("Moves - Magic Coat", () => { it("should bounce back a spread status move against both pokemon", async () => { game.override.battleStyle("double"); - game.override.moveset([Moves.GROWL, Moves.SPLASH]); - game.override.enemyMoveset([Moves.SPLASH, Moves.MAGIC_COAT]); + game.override.moveset([MoveId.GROWL, MoveId.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.MAGIC_COAT]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); - game.move.select(Moves.GROWL, 0); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.MAGIC_COAT); + game.move.select(MoveId.GROWL, 0); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.MAGIC_COAT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerField().every(p => p.getStatStage(Stat.ATK) === -1)).toBeTruthy(); @@ -112,9 +112,9 @@ describe("Moves - Magic Coat", () => { it("should still bounce back a move that would otherwise fail", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); - game.override.moveset([Moves.GROWL]); + game.override.moveset([MoveId.GROWL]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); @@ -123,14 +123,14 @@ describe("Moves - Magic Coat", () => { it("should not bounce back a move that was just bounced", async () => { game.override.battleStyle("double"); game.override.ability(AbilityId.MAGIC_BOUNCE); - game.override.moveset([Moves.GROWL, Moves.MAGIC_COAT]); - game.override.enemyMoveset([Moves.SPLASH, Moves.MAGIC_COAT]); + game.override.moveset([MoveId.GROWL, MoveId.MAGIC_COAT]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.MAGIC_COAT]); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); - game.move.select(Moves.MAGIC_COAT, 0); - game.move.select(Moves.GROWL, 1); - await game.move.selectEnemyMove(Moves.MAGIC_COAT); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.MAGIC_COAT, 0); + game.move.select(MoveId.GROWL, 1); + await game.move.selectEnemyMove(MoveId.MAGIC_COAT); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyField()[0].getStatStage(Stat.ATK)).toBe(0); @@ -140,7 +140,7 @@ describe("Moves - Magic Coat", () => { it.todo("should receive the stat change after reflecting a move back to a mirror armor user", async () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); @@ -148,10 +148,10 @@ describe("Moves - Magic Coat", () => { it("should still bounce back a move from a mold breaker user", async () => { game.override.ability(AbilityId.MOLD_BREAKER); - game.override.moveset([Moves.GROWL]); + game.override.moveset([MoveId.GROWL]); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(0); @@ -161,9 +161,9 @@ describe("Moves - Magic Coat", () => { it("should only bounce spikes back once when both targets use magic coat in doubles", async () => { game.override.battleStyle("double"); await game.classicMode.startBattle([Species.MAGIKARP]); - game.override.moveset([Moves.SPIKES]); + game.override.moveset([MoveId.SPIKES]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); @@ -173,9 +173,9 @@ describe("Moves - Magic Coat", () => { it("should not bounce back curse", async () => { game.override.starterSpecies(Species.GASTLY); await game.classicMode.startBattle([Species.GASTLY]); - game.override.moveset([Moves.CURSE]); + game.override.moveset([MoveId.CURSE]); - game.move.select(Moves.CURSE); + game.move.select(MoveId.CURSE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getTag(BattlerTagType.CURSED)).toBeDefined(); @@ -183,40 +183,40 @@ describe("Moves - Magic Coat", () => { // TODO: encore is failing if the last move was virtual. it.todo("should not cause the bounced move to count for encore", async () => { - game.override.moveset([Moves.GROWL, Moves.ENCORE]); - game.override.enemyMoveset([Moves.MAGIC_COAT, Moves.TACKLE]); + game.override.moveset([MoveId.GROWL, MoveId.ENCORE]); + game.override.enemyMoveset([MoveId.MAGIC_COAT, MoveId.TACKLE]); game.override.enemyAbility(AbilityId.MAGIC_BOUNCE); await game.classicMode.startBattle([Species.MAGIKARP]); const enemyPokemon = game.scene.getEnemyPokemon()!; // turn 1 - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.MAGIC_COAT); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.MAGIC_COAT); await game.toNextTurn(); // turn 2 - game.move.select(Moves.ENCORE); - await game.move.selectEnemyMove(Moves.TACKLE); + game.move.select(MoveId.ENCORE); + await game.move.selectEnemyMove(MoveId.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); - expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); - expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(MoveId.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(MoveId.TACKLE); }); // TODO: stomping tantrum should consider moves that were bounced. it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { game.override.battleStyle("single"); await game.classicMode.startBattle([Species.MAGIKARP]); - game.override.moveset([Moves.STOMPING_TANTRUM, Moves.CHARM]); + game.override.moveset([MoveId.STOMPING_TANTRUM, MoveId.CHARM]); - const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; vi.spyOn(stomping_tantrum, "calculateBattlePower"); - game.move.select(Moves.CHARM); + game.move.select(MoveId.CHARM); await game.toNextTurn(); - game.move.select(Moves.STOMPING_TANTRUM); + game.move.select(MoveId.STOMPING_TANTRUM); await game.phaseInterceptor.to("BerryPhase"); expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(150); }); @@ -225,15 +225,15 @@ describe("Moves - Magic Coat", () => { it.todo( "should properly cause the enemy's stomping tantrum to be doubled in power after bouncing and failing", async () => { - game.override.enemyMoveset([Moves.STOMPING_TANTRUM, Moves.SPLASH, Moves.CHARM]); + game.override.enemyMoveset([MoveId.STOMPING_TANTRUM, MoveId.SPLASH, MoveId.CHARM]); await game.classicMode.startBattle([Species.BULBASAUR]); - const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const stomping_tantrum = allMoves[MoveId.STOMPING_TANTRUM]; const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(stomping_tantrum, "calculateBattlePower"); - game.move.select(Moves.SPORE); - await game.move.selectEnemyMove(Moves.CHARM); + game.move.select(MoveId.SPORE); + await game.move.selectEnemyMove(MoveId.CHARM); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getLastXMoves(1)[0].result).toBe("success"); @@ -241,48 +241,48 @@ describe("Moves - Magic Coat", () => { expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); await game.toNextTurn(); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); }, ); it("should respect immunities when bouncing a move", async () => { - vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); - game.override.moveset([Moves.THUNDER_WAVE, Moves.GROWL]); + vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + game.override.moveset([MoveId.THUNDER_WAVE, MoveId.GROWL]); game.override.ability(AbilityId.SOUNDPROOF); await game.classicMode.startBattle([Species.PHANPY]); // Turn 1 - thunder wave immunity test - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); // Turn 2 - soundproof immunity test - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); }); it("should bounce back a move before the accuracy check", async () => { - game.override.moveset([Moves.SPORE]); + game.override.moveset([MoveId.SPORE]); await game.classicMode.startBattle([Species.MAGIKARP]); const attacker = game.scene.getPlayerPokemon()!; vi.spyOn(attacker, "getAccuracyMultiplier").mockReturnValue(0.0); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); }); it("should take the accuracy of the magic bounce user into account", async () => { - game.override.moveset([Moves.SPORE]); + game.override.moveset([MoveId.SPORE]); await game.classicMode.startBattle([Species.MAGIKARP]); const opponent = game.scene.getEnemyPokemon()!; vi.spyOn(opponent, "getAccuracyMultiplier").mockReturnValue(0); - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); }); diff --git a/test/moves/magnet_rise.test.ts b/test/moves/magnet_rise.test.ts index 5d5ae91c4fe..d191c008076 100644 --- a/test/moves/magnet_rise.test.ts +++ b/test/moves/magnet_rise.test.ts @@ -1,6 +1,6 @@ import { CommandPhase } from "#app/phases/command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -9,7 +9,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Moves - Magnet Rise", () => { let phaserGame: Phaser.Game; let game: GameManager; - const moveToUse = Moves.MAGNET_RISE; + const moveToUse = MoveId.MAGNET_RISE; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -27,10 +27,10 @@ describe("Moves - Magnet Rise", () => { .battleStyle("single") .starterSpecies(Species.MAGNEZONE) .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.DRILL_RUN) + .enemyMoveset(MoveId.DRILL_RUN) .disableCrits() .enemyLevel(1) - .moveset([moveToUse, Moves.SPLASH, Moves.GRAVITY, Moves.BATON_PASS]); + .moveset([moveToUse, MoveId.SPLASH, MoveId.GRAVITY, MoveId.BATON_PASS]); }); it("MAGNET RISE", async () => { @@ -53,7 +53,7 @@ describe("Moves - Magnet Rise", () => { let finalHp = game.scene.getPlayerParty()[0].hp; let hpLost = finalHp - startingHp; expect(hpLost).toBe(0); - game.move.select(Moves.GRAVITY); + game.move.select(MoveId.GRAVITY); await game.phaseInterceptor.to(TurnEndPhase); finalHp = game.scene.getPlayerParty()[0].hp; hpLost = finalHp - startingHp; diff --git a/test/moves/make_it_rain.test.ts b/test/moves/make_it_rain.test.ts index 452e447db3b..5c55e834e57 100644 --- a/test/moves/make_it_rain.test.ts +++ b/test/moves/make_it_rain.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,10 +25,10 @@ describe("Moves - Make It Rain", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("double"); - game.override.moveset([Moves.MAKE_IT_RAIN, Moves.SPLASH]); + game.override.moveset([MoveId.MAKE_IT_RAIN, MoveId.SPLASH]); game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(AbilityId.INSOMNIA); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.startingLevel(100); game.override.enemyLevel(100); }); @@ -38,8 +38,8 @@ describe("Moves - Make It Rain", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.MAKE_IT_RAIN); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.MAKE_IT_RAIN); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(MoveEndPhase); @@ -55,7 +55,7 @@ describe("Moves - Make It Rain", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.MAKE_IT_RAIN); + game.move.select(MoveId.MAKE_IT_RAIN); await game.phaseInterceptor.to(StatStageChangePhase); @@ -71,8 +71,8 @@ describe("Moves - Make It Rain", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.MAKE_IT_RAIN); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.MAKE_IT_RAIN); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(StatStageChangePhase); @@ -85,8 +85,8 @@ describe("Moves - Make It Rain", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.MAKE_IT_RAIN); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.MAKE_IT_RAIN); + game.move.select(MoveId.SPLASH, 1); // Make Make It Rain miss the first target await game.move.forceMiss(true); diff --git a/test/moves/mat_block.test.ts b/test/moves/mat_block.test.ts index 5d70d94c9d2..1af6ae4f58e 100644 --- a/test/moves/mat_block.test.ts +++ b/test/moves/mat_block.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { BerryPhase } from "#app/phases/berry-phase"; import { CommandPhase } from "#app/phases/command-phase"; @@ -28,10 +28,10 @@ describe("Moves - Mat Block", () => { game.override.battleStyle("double"); - game.override.moveset([Moves.MAT_BLOCK, Moves.SPLASH]); + game.override.moveset([MoveId.MAT_BLOCK, MoveId.SPLASH]); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); game.override.enemyAbility(AbilityId.INSOMNIA); game.override.startingLevel(100); @@ -43,11 +43,11 @@ describe("Moves - Mat Block", () => { const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.MAT_BLOCK); + game.move.select(MoveId.MAT_BLOCK); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -55,17 +55,17 @@ describe("Moves - Mat Block", () => { }); test("should not protect the user and allies from status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.MAT_BLOCK); + game.move.select(MoveId.MAT_BLOCK); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -77,18 +77,18 @@ describe("Moves - Mat Block", () => { const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); const leadStartingHp = leadPokemon.map(p => p.hp); await game.phaseInterceptor.to(CommandPhase, false); - game.move.select(Moves.MAT_BLOCK); + game.move.select(MoveId.MAT_BLOCK); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.MAT_BLOCK, 1); + game.move.select(MoveId.MAT_BLOCK, 1); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/metal_burst.test.ts b/test/moves/metal_burst.test.ts index d0cbc3ab61d..8c397f42b71 100644 --- a/test/moves/metal_burst.test.ts +++ b/test/moves/metal_burst.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,14 +24,14 @@ describe("Moves - Metal Burst", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.METAL_BURST, Moves.FISSURE, Moves.PRECIPICE_BLADES]) + .moveset([MoveId.METAL_BURST, MoveId.FISSURE, MoveId.PRECIPICE_BLADES]) .ability(AbilityId.PURE_POWER) .startingLevel(10) .battleStyle("double") .disableCrits() .enemySpecies(Species.PICHU) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TACKLE); + .enemyMoveset(MoveId.TACKLE); }); it("should redirect target if intended target faints", async () => { @@ -39,11 +39,11 @@ describe("Moves - Metal Burst", () => { const [, enemy2] = game.scene.getEnemyField(); - game.move.select(Moves.METAL_BURST); - game.move.select(Moves.FISSURE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.METAL_BURST); + game.move.select(MoveId.FISSURE, 1, BattlerIndex.ENEMY); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); @@ -60,11 +60,11 @@ describe("Moves - Metal Burst", () => { const [enemy1, enemy2] = game.scene.getEnemyField(); - game.move.select(Moves.METAL_BURST); - game.move.select(Moves.PRECIPICE_BLADES, 1); + game.move.select(MoveId.METAL_BURST); + game.move.select(MoveId.PRECIPICE_BLADES, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts index 12dab595d53..9d994862f3a 100644 --- a/test/moves/metronome.test.ts +++ b/test/moves/metronome.test.ts @@ -4,7 +4,7 @@ import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; import { CommandPhase } from "#app/phases/command-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,16 +27,16 @@ describe("Moves - Metronome", () => { }); beforeEach(() => { - randomMoveAttr = allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0]; + randomMoveAttr = allMoves[MoveId.METRONOME].getAttrs(RandomMoveAttr)[0]; game = new GameManager(phaserGame); game.override - .moveset([Moves.METRONOME, Moves.SPLASH]) + .moveset([MoveId.METRONOME, MoveId.SPLASH]) .battleStyle("single") .startingLevel(100) .starterSpecies(Species.REGIELEKI) .enemyLevel(100) .enemySpecies(Species.SHUCKLE) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH); }); @@ -44,9 +44,9 @@ describe("Moves - Metronome", () => { await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.DIVE); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.DIVE); - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.toNextTurn(); expect(player.getTag(SemiInvulnerableTag)).toBeTruthy(); @@ -59,9 +59,9 @@ describe("Moves - Metronome", () => { it("should apply secondary effects of a move", async () => { await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.WOOD_HAMMER); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.WOOD_HAMMER); - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.toNextTurn(); expect(player.isFullHp()).toBeFalsy(); @@ -70,10 +70,10 @@ describe("Moves - Metronome", () => { it("should recharge after using recharge move", async () => { await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.HYPER_BEAM); - vi.spyOn(allMoves[Moves.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.HYPER_BEAM); + vi.spyOn(allMoves[MoveId.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.toNextTurn(); expect(player.getTag(RechargingTag)).toBeTruthy(); @@ -84,11 +84,11 @@ describe("Moves - Metronome", () => { await game.classicMode.startBattle([Species.REGIELEKI, Species.RATTATA]); const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); const [leftOpp, rightOpp] = game.scene.getEnemyField(); - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.AROMATIC_MIST); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.AROMATIC_MIST); - game.move.select(Moves.METRONOME, 0); + game.move.select(MoveId.METRONOME, 0); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(rightPlayer.getStatStage(Stat.SPDEF)).toBe(1); @@ -99,11 +99,11 @@ describe("Moves - Metronome", () => { it("should cause opponent to flee, and not crash for Roar", async () => { await game.classicMode.startBattle(); - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.ROAR); + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.ROAR); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.phaseInterceptor.to("BerryPhase"); const isVisible = enemyPokemon.visible; diff --git a/test/moves/miracle_eye.test.ts b/test/moves/miracle_eye.test.ts index 2dbfb962540..49555c1d868 100644 --- a/test/moves/miracle_eye.test.ts +++ b/test/moves/miracle_eye.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import GameManager from "#test/testUtils/gameManager"; @@ -25,10 +25,10 @@ describe("Moves - Miracle Eye", () => { game.override .disableCrits() .enemySpecies(Species.UMBREON) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(5) .starterSpecies(Species.MAGIKARP) - .moveset([Moves.MIRACLE_EYE, Moves.CONFUSION]); + .moveset([MoveId.MIRACLE_EYE, MoveId.CONFUSION]); }); it("should allow Psychic moves to hit Dark types", async () => { @@ -36,13 +36,13 @@ describe("Moves - Miracle Eye", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.CONFUSION); + game.move.select(MoveId.CONFUSION); await game.toNextTurn(); expect(enemy.hp).toBe(enemy.getMaxHp()); - game.move.select(Moves.MIRACLE_EYE); + game.move.select(MoveId.MIRACLE_EYE); await game.toNextTurn(); - game.move.select(Moves.CONFUSION); + game.move.select(MoveId.CONFUSION); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/test/moves/mirror_move.test.ts b/test/moves/mirror_move.test.ts index 7ece5ed8358..1ee5840ecec 100644 --- a/test/moves/mirror_move.test.ts +++ b/test/moves/mirror_move.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#app/enums/stat"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,23 +25,23 @@ describe("Moves - Mirror Move", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.MIRROR_MOVE, Moves.SPLASH]) + .moveset([MoveId.MIRROR_MOVE, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should use the last move that the target used on the user", async () => { - game.override.battleStyle("double").enemyMoveset([Moves.TACKLE, Moves.GROWL]); + game.override.battleStyle("double").enemyMoveset([MoveId.TACKLE, MoveId.GROWL]); await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); - game.move.select(Moves.MIRROR_MOVE, 0, BattlerIndex.ENEMY); // target's last move is Tackle, enemy should receive damage from Mirror Move copying Tackle - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.GROWL, BattlerIndex.PLAYER_2); + game.move.select(MoveId.MIRROR_MOVE, 0, BattlerIndex.ENEMY); // target's last move is Tackle, enemy should receive damage from Mirror Move copying Tackle + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.GROWL, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -49,10 +49,10 @@ describe("Moves - Mirror Move", () => { }); it("should apply secondary effects of a move", async () => { - game.override.enemyMoveset(Moves.ACID_SPRAY); + game.override.enemyMoveset(MoveId.ACID_SPRAY); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.MIRROR_MOVE); + game.move.select(MoveId.MIRROR_MOVE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -60,10 +60,10 @@ describe("Moves - Mirror Move", () => { }); it("should be able to copy status moves", async () => { - game.override.enemyMoveset(Moves.GROWL); + game.override.enemyMoveset(MoveId.GROWL); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.MIRROR_MOVE); + game.move.select(MoveId.MIRROR_MOVE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -73,7 +73,7 @@ describe("Moves - Mirror Move", () => { it("should fail if the target has not used any moves", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.MIRROR_MOVE); + game.move.select(MoveId.MIRROR_MOVE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); diff --git a/test/moves/mist.test.ts b/test/moves/mist.test.ts index c404dfb17e2..923fcfe7488 100644 --- a/test/moves/mist.test.ts +++ b/test/moves/mist.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,13 +23,13 @@ describe("Moves - Mist", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.MIST, Moves.SPLASH]) + .moveset([MoveId.MIST, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.GROWL); + .enemyMoveset(MoveId.GROWL); }); it("should prevent the user's side from having stats lowered", async () => { @@ -37,8 +37,8 @@ describe("Moves - Mist", () => { const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.MIST, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.MIST, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/moongeist_beam.test.ts b/test/moves/moongeist_beam.test.ts index 8065efd0231..8d68bb23ecc 100644 --- a/test/moves/moongeist_beam.test.ts +++ b/test/moves/moongeist_beam.test.ts @@ -1,7 +1,7 @@ import { RandomMoveAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,14 +24,14 @@ describe("Moves - Moongeist Beam", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.MOONGEIST_BEAM, Moves.METRONOME]) + .moveset([MoveId.MOONGEIST_BEAM, MoveId.METRONOME]) .ability(AbilityId.BALL_FETCH) .startingLevel(200) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.STURDY) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); // Also covers Photon Geyser and Sunsteel Strike @@ -40,7 +40,7 @@ describe("Moves - Moongeist Beam", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.MOONGEIST_BEAM); + game.move.select(MoveId.MOONGEIST_BEAM); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.isFainted()).toBe(true); @@ -49,14 +49,14 @@ describe("Moves - Moongeist Beam", () => { // Also covers Photon Geyser and Sunsteel Strike it("should not ignore enemy abilities when called by another move, such as metronome", async () => { await game.classicMode.startBattle([Species.MILOTIC]); - vi.spyOn(allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0], "getMoveOverride").mockReturnValue( - Moves.MOONGEIST_BEAM, + vi.spyOn(allMoves[MoveId.METRONOME].getAttrs(RandomMoveAttr)[0], "getMoveOverride").mockReturnValue( + MoveId.MOONGEIST_BEAM, ); - game.move.select(Moves.METRONOME); + game.move.select(MoveId.METRONOME); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.isFainted()).toBe(false); - expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].move).toBe(Moves.MOONGEIST_BEAM); + expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].move).toBe(MoveId.MOONGEIST_BEAM); }); }); diff --git a/test/moves/multi_target.test.ts b/test/moves/multi_target.test.ts index 17958a96c02..7a5f6cd84ed 100644 --- a/test/moves/multi_target.test.ts +++ b/test/moves/multi_target.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; import { Species } from "#app/enums/species"; import { toDmgValue } from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -29,9 +29,9 @@ describe("Multi-target damage reduction", () => { .enemyLevel(100) .startingLevel(100) .enemySpecies(Species.POLIWAG) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) - .moveset([Moves.TACKLE, Moves.DAZZLING_GLEAM, Moves.EARTHQUAKE, Moves.SPLASH]) + .moveset([MoveId.TACKLE, MoveId.DAZZLING_GLEAM, MoveId.EARTHQUAKE, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH); }); @@ -40,8 +40,8 @@ describe("Multi-target damage reduction", () => { const [enemy1, enemy2] = game.scene.getEnemyField(); - game.move.select(Moves.DAZZLING_GLEAM); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DAZZLING_GLEAM); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -56,8 +56,8 @@ describe("Multi-target damage reduction", () => { await game.killPokemon(enemy2); await game.toNextTurn(); - game.move.select(Moves.DAZZLING_GLEAM); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.DAZZLING_GLEAM); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -81,8 +81,8 @@ describe("Multi-target damage reduction", () => { const player2 = game.scene.getPlayerParty()[1]; const [enemy1, enemy2] = game.scene.getEnemyField(); - game.move.select(Moves.EARTHQUAKE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.EARTHQUAKE); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -96,8 +96,8 @@ describe("Multi-target damage reduction", () => { await game.killPokemon(enemy2); await game.toNextTurn(); - game.move.select(Moves.EARTHQUAKE); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.EARTHQUAKE); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -115,7 +115,7 @@ describe("Multi-target damage reduction", () => { await game.killPokemon(player2); await game.toNextTurn(); - game.move.select(Moves.EARTHQUAKE); + game.move.select(MoveId.EARTHQUAKE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/moves/nightmare.test.ts b/test/moves/nightmare.test.ts index 9b6b3eb8cee..79570573ce7 100644 --- a/test/moves/nightmare.test.ts +++ b/test/moves/nightmare.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -26,11 +26,11 @@ describe("Moves - Nightmare", () => { game.override .battleStyle("single") .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) .enemyStatusEffect(StatusEffect.SLEEP) .startingLevel(5) - .moveset([Moves.NIGHTMARE, Moves.SPLASH]); + .moveset([MoveId.NIGHTMARE, MoveId.SPLASH]); }); it("lowers enemy hp by 1/4 each turn while asleep", async () => { @@ -39,13 +39,13 @@ describe("Moves - Nightmare", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyMaxHP = enemyPokemon.hp; - game.move.select(Moves.NIGHTMARE); + game.move.select(MoveId.NIGHTMARE); await game.toNextTurn(); expect(enemyPokemon.hp).toBe(enemyMaxHP - Math.floor(enemyMaxHP / 4)); // take a second turn to make sure damage occurs again - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.hp).toBe(enemyMaxHP - Math.floor(enemyMaxHP / 4) - Math.floor(enemyMaxHP / 4)); diff --git a/test/moves/obstruct.test.ts b/test/moves/obstruct.test.ts index 3614cb2a199..725deb7b038 100644 --- a/test/moves/obstruct.test.ts +++ b/test/moves/obstruct.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -24,17 +24,17 @@ describe("Moves - Obstruct", () => { game.override .battleStyle("single") .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.TACKLE) + .enemyMoveset(MoveId.TACKLE) .enemyAbility(AbilityId.BALL_FETCH) .ability(AbilityId.BALL_FETCH) - .moveset([Moves.OBSTRUCT]) + .moveset([MoveId.OBSTRUCT]) .starterSpecies(Species.FEEBAS); }); it("protects from contact damaging moves and lowers the opponent's defense by 2 stages", async () => { await game.classicMode.startBattle(); - game.move.select(Moves.OBSTRUCT); + game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); const player = game.scene.getPlayerPokemon()!; @@ -47,7 +47,7 @@ describe("Moves - Obstruct", () => { it("bypasses accuracy checks when applying protection and defense reduction", async () => { await game.classicMode.startBattle(); - game.move.select(Moves.OBSTRUCT); + game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); @@ -60,10 +60,10 @@ describe("Moves - Obstruct", () => { }); it("protects from non-contact damaging moves and doesn't lower the opponent's defense by 2 stages", async () => { - game.override.enemyMoveset(Moves.WATER_GUN); + game.override.enemyMoveset(MoveId.WATER_GUN); await game.classicMode.startBattle(); - game.move.select(Moves.OBSTRUCT); + game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); const player = game.scene.getPlayerPokemon()!; @@ -74,10 +74,10 @@ describe("Moves - Obstruct", () => { }); it("doesn't protect from status moves", async () => { - game.override.enemyMoveset(Moves.GROWL); + game.override.enemyMoveset(MoveId.GROWL); await game.classicMode.startBattle(); - game.move.select(Moves.OBSTRUCT); + game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); const player = game.scene.getPlayerPokemon()!; @@ -89,7 +89,7 @@ describe("Moves - Obstruct", () => { game.override.enemyAbility(AbilityId.CLEAR_BODY); await game.classicMode.startBattle(); - game.move.select(Moves.OBSTRUCT); + game.move.select(MoveId.OBSTRUCT); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.DEF)).toBe(0); diff --git a/test/moves/octolock.test.ts b/test/moves/octolock.test.ts index 27b188a2bed..c93cc76e1ea 100644 --- a/test/moves/octolock.test.ts +++ b/test/moves/octolock.test.ts @@ -1,6 +1,6 @@ import { TrappedTag } from "#app/data/battler-tags"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -27,10 +27,10 @@ describe("Moves - Octolock", () => { game.override .battleStyle("single") .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) .startingLevel(2000) - .moveset([Moves.OCTOLOCK, Moves.SPLASH, Moves.TRICK_OR_TREAT]) + .moveset([MoveId.OCTOLOCK, MoveId.SPLASH, MoveId.TRICK_OR_TREAT]) .ability(AbilityId.BALL_FETCH); }); @@ -40,14 +40,14 @@ describe("Moves - Octolock", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; // use Octolock and advance to init phase of next turn to check for stat changes - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(-1); expect(enemyPokemon.getStatStage(Stat.SPDEF)).toBe(-1); // take a second turn to make sure stat changes occur again - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(-2); @@ -61,7 +61,7 @@ describe("Moves - Octolock", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; // use Octolock and advance to init phase of next turn to check for stat changes - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -75,7 +75,7 @@ describe("Moves - Octolock", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; // use Octolock and advance to init phase of next turn to check for stat changes - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -89,7 +89,7 @@ describe("Moves - Octolock", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; // use Octolock and advance to init phase of next turn to check for stat changes - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(0); @@ -104,7 +104,7 @@ describe("Moves - Octolock", () => { // before Octolock - enemy should not be trapped expect(enemyPokemon.findTag(t => t instanceof TrappedTag)).toBeUndefined(); - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); // after Octolock - enemy should be trapped await game.phaseInterceptor.to("MoveEndPhase"); @@ -112,7 +112,7 @@ describe("Moves - Octolock", () => { }); it("does not work on ghost type pokemon", async () => { - game.override.enemyMoveset(Moves.OCTOLOCK); + game.override.enemyMoveset(MoveId.OCTOLOCK); await game.classicMode.startBattle([Species.GASTLY]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -120,7 +120,7 @@ describe("Moves - Octolock", () => { // before Octolock - player should not be trapped expect(playerPokemon.findTag(t => t instanceof TrappedTag)).toBeUndefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // after Octolock - player should still not be trapped, and no stat loss @@ -137,9 +137,9 @@ describe("Moves - Octolock", () => { // before Octolock - pokemon should not be trapped expect(enemy.findTag(t => t instanceof TrappedTag)).toBeUndefined(); - game.move.select(Moves.TRICK_OR_TREAT); + game.move.select(MoveId.TRICK_OR_TREAT); await game.toNextTurn(); - game.move.select(Moves.OCTOLOCK); + game.move.select(MoveId.OCTOLOCK); await game.toNextTurn(); // after Octolock - pokemon should still not be trapped, and no stat loss diff --git a/test/moves/order_up.test.ts b/test/moves/order_up.test.ts index d858f84e824..c53bce385b2 100644 --- a/test/moves/order_up.test.ts +++ b/test/moves/order_up.test.ts @@ -4,7 +4,7 @@ import { PokemonAnimType } from "#enums/pokemon-anim-type"; import type { EffectiveStat } from "#enums/stat"; import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,13 +27,13 @@ describe("Moves - Order Up", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.ORDER_UP) + .moveset(MoveId.ORDER_UP) .ability(AbilityId.COMMANDER) .battleStyle("double") .disableCrits() .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100); @@ -56,7 +56,7 @@ describe("Moves - Order Up", () => { expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.ORDER_UP, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.ORDER_UP, 1, BattlerIndex.ENEMY); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); await game.phaseInterceptor.to("BerryPhase", false); @@ -76,7 +76,7 @@ describe("Moves - Order Up", () => { expect(game.scene.triggerPokemonBattleAnim).toHaveBeenLastCalledWith(tatsugiri, PokemonAnimType.COMMANDER_APPLY); expect(dondozo.getTag(BattlerTagType.COMMANDED)).toBeDefined(); - game.move.select(Moves.ORDER_UP, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.ORDER_UP, 1, BattlerIndex.ENEMY); expect(game.scene.currentBattle.turnCommands[0]?.skip).toBeTruthy(); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/parting_shot.test.ts b/test/moves/parting_shot.test.ts index e9d3c992694..026d2c45ae5 100644 --- a/test/moves/parting_shot.test.ts +++ b/test/moves/parting_shot.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, test } from "vitest"; @@ -27,8 +27,8 @@ describe("Moves - Parting Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleStyle("single"); - game.override.moveset([Moves.PARTING_SHOT, Moves.SPLASH]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.moveset([MoveId.PARTING_SHOT, MoveId.SPLASH]); + game.override.enemyMoveset(MoveId.SPLASH); game.override.startingLevel(5); game.override.enemyLevel(5); }); @@ -40,7 +40,7 @@ describe("Moves - Parting Shot", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); @@ -55,7 +55,7 @@ describe("Moves - Parting Shot", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); @@ -67,7 +67,7 @@ describe("Moves - Parting Shot", () => { // TODO: fix this bug to pass the test! "Parting shot should fail if target is -6/-6 de-buffed", async () => { - game.override.moveset([Moves.PARTING_SHOT, Moves.MEMENTO, Moves.SPLASH]); + game.override.moveset([MoveId.PARTING_SHOT, MoveId.MEMENTO, MoveId.SPLASH]); await game.classicMode.startBattle([ Species.MEOWTH, Species.MEOWTH, @@ -77,19 +77,19 @@ describe("Moves - Parting Shot", () => { ]); // use Memento 3 times to debuff enemy - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); await game.phaseInterceptor.to(FaintPhase); expect(game.scene.getPlayerParty()[0].isFainted()).toBe(true); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to(TurnInitPhase, false); - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); await game.phaseInterceptor.to(FaintPhase); expect(game.scene.getPlayerParty()[0].isFainted()).toBe(true); game.doSelectPartyPokemon(2); await game.phaseInterceptor.to(TurnInitPhase, false); - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); await game.phaseInterceptor.to(FaintPhase); expect(game.scene.getPlayerParty()[0].isFainted()).toBe(true); game.doSelectPartyPokemon(3); @@ -103,7 +103,7 @@ describe("Moves - Parting Shot", () => { expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(-6); // now parting shot should fail - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-6); @@ -116,13 +116,13 @@ describe("Moves - Parting Shot", () => { // TODO: fix this bug to pass the test! "Parting shot shouldn't allow switch out when mist is active", async () => { - game.override.enemySpecies(Species.ALTARIA).enemyAbility(AbilityId.NONE).enemyMoveset([Moves.MIST]); + game.override.enemySpecies(Species.ALTARIA).enemyAbility(AbilityId.NONE).enemyMoveset([MoveId.MIST]); await game.classicMode.startBattle([Species.SNORLAX, Species.MEOWTH]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); @@ -141,7 +141,7 @@ describe("Moves - Parting Shot", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(0); @@ -159,7 +159,7 @@ describe("Moves - Parting Shot", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); @@ -173,7 +173,7 @@ describe("Moves - Parting Shot", () => { "Parting shot regularly not fail if no party available to switch - party fainted", async () => { await game.classicMode.startBattle([Species.MURKROW, Species.MEOWTH]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); // intentionally kill party pokemon, switch to second slot (now 1 party mon is fainted) await game.killPokemon(game.scene.getPlayerParty()[0]); @@ -182,7 +182,7 @@ describe("Moves - Parting Shot", () => { game.doSelectPartyPokemon(1); await game.phaseInterceptor.to(TurnInitPhase, false); - game.move.select(Moves.PARTING_SHOT); + game.move.select(MoveId.PARTING_SHOT); await game.phaseInterceptor.to(BerryPhase, false); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/plasma_fists.test.ts b/test/moves/plasma_fists.test.ts index 1054ff38e80..dc683658304 100644 --- a/test/moves/plasma_fists.test.ts +++ b/test/moves/plasma_fists.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,12 +24,12 @@ describe("Moves - Plasma Fists", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.PLASMA_FISTS, Moves.TACKLE]) + .moveset([MoveId.PLASMA_FISTS, MoveId.TACKLE]) .battleStyle("double") .startingLevel(100) .enemySpecies(Species.DUSCLOPS) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.TACKLE) + .enemyMoveset(MoveId.TACKLE) .enemyLevel(100); }); @@ -39,11 +39,11 @@ describe("Moves - Plasma Fists", () => { const field = game.scene.getField(true); field.forEach(p => vi.spyOn(p, "getMoveType")); - game.move.select(Moves.PLASMA_FISTS, 0, BattlerIndex.ENEMY); - game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.PLASMA_FISTS, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.TACKLE, BattlerIndex.PLAYER_2); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -64,7 +64,7 @@ describe("Moves - Plasma Fists", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "getMoveType"); - game.move.select(Moves.PLASMA_FISTS); + game.move.select(MoveId.PLASMA_FISTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); @@ -74,7 +74,7 @@ describe("Moves - Plasma Fists", () => { }); it("should affect moves that become Normal type due to Normalize", async () => { - game.override.battleStyle("single").enemyAbility(AbilityId.NORMALIZE).enemyMoveset(Moves.WATER_GUN); + game.override.battleStyle("single").enemyAbility(AbilityId.NORMALIZE).enemyMoveset(MoveId.WATER_GUN); await game.classicMode.startBattle([Species.DUSCLOPS]); @@ -82,7 +82,7 @@ describe("Moves - Plasma Fists", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; vi.spyOn(enemyPokemon, "getMoveType"); - game.move.select(Moves.PLASMA_FISTS); + game.move.select(MoveId.PLASMA_FISTS); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/pledge_moves.test.ts b/test/moves/pledge_moves.test.ts index 260e1e9827b..47731f4e8ce 100644 --- a/test/moves/pledge_moves.test.ts +++ b/test/moves/pledge_moves.test.ts @@ -8,7 +8,7 @@ import { ArenaTagType } from "#enums/arena-tag-type"; import { Stat } from "#enums/stat"; import { toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -33,24 +33,24 @@ describe("Moves - Pledge Moves", () => { game.override .battleStyle("double") .startingLevel(100) - .moveset([Moves.FIRE_PLEDGE, Moves.GRASS_PLEDGE, Moves.WATER_PLEDGE, Moves.SPLASH]) + .moveset([MoveId.FIRE_PLEDGE, MoveId.GRASS_PLEDGE, MoveId.WATER_PLEDGE, MoveId.SPLASH]) .enemySpecies(Species.SNORLAX) .enemyLevel(100) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("Fire Pledge - should be an 80-power Fire-type attack outside of combination", async () => { await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - const firePledge = allMoves[Moves.FIRE_PLEDGE]; + const firePledge = allMoves[MoveId.FIRE_PLEDGE]; vi.spyOn(firePledge, "calculateBattlePower"); const playerPokemon = game.scene.getPlayerField(); vi.spyOn(playerPokemon[0], "getMoveType"); - game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -62,7 +62,7 @@ describe("Moves - Pledge Moves", () => { it("Fire Pledge - should not combine with an ally using Fire Pledge", async () => { await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - const firePledge = allMoves[Moves.FIRE_PLEDGE]; + const firePledge = allMoves[MoveId.FIRE_PLEDGE]; vi.spyOn(firePledge, "calculateBattlePower"); const playerPokemon = game.scene.getPlayerField(); @@ -70,8 +70,8 @@ describe("Moves - Pledge Moves", () => { const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.FIRE_PLEDGE, 0, BattlerIndex.ENEMY_2); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -87,14 +87,14 @@ describe("Moves - Pledge Moves", () => { }); it("Fire Pledge - should not combine with an enemy's Pledge move", async () => { - game.override.battleStyle("single").enemyMoveset(Moves.GRASS_PLEDGE); + game.override.battleStyle("single").enemyMoveset(MoveId.GRASS_PLEDGE); await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.FIRE_PLEDGE); + game.move.select(MoveId.FIRE_PLEDGE); await game.toNextTurn(); @@ -108,7 +108,7 @@ describe("Moves - Pledge Moves", () => { it("Grass Pledge - should combine with Fire Pledge to form a 150-power Fire-type attack that creates a 'sea of fire'", async () => { await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); - const grassPledge = allMoves[Moves.GRASS_PLEDGE]; + const grassPledge = allMoves[MoveId.GRASS_PLEDGE]; vi.spyOn(grassPledge, "calculateBattlePower"); const playerPokemon = game.scene.getPlayerField(); @@ -117,8 +117,8 @@ describe("Moves - Pledge Moves", () => { vi.spyOn(playerPokemon[1], "getMoveType"); const baseDmgMock = vi.spyOn(enemyPokemon[0], "getBaseDamage"); - game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.GRASS_PLEDGE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.FIRE_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.GRASS_PLEDGE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); // advance to the end of PLAYER_2's move this turn @@ -139,11 +139,11 @@ describe("Moves - Pledge Moves", () => { }); it("Fire Pledge - should combine with Water Pledge to form a 150-power Water-type attack that creates a 'rainbow'", async () => { - game.override.moveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE, Moves.FIERY_DANCE, Moves.SPLASH]); + game.override.moveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE, MoveId.FIERY_DANCE, MoveId.SPLASH]); await game.classicMode.startBattle([Species.BLASTOISE, Species.VENUSAUR]); - const firePledge = allMoves[Moves.FIRE_PLEDGE]; + const firePledge = allMoves[MoveId.FIRE_PLEDGE]; vi.spyOn(firePledge, "calculateBattlePower"); const playerPokemon = game.scene.getPlayerField(); @@ -151,8 +151,8 @@ describe("Moves - Pledge Moves", () => { vi.spyOn(playerPokemon[1], "getMoveType"); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.FIRE_PLEDGE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); // advance to the end of PLAYER_2's move this turn @@ -166,8 +166,8 @@ describe("Moves - Pledge Moves", () => { await game.toNextTurn(); - game.move.select(Moves.FIERY_DANCE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.FIERY_DANCE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -178,7 +178,7 @@ describe("Moves - Pledge Moves", () => { it("Water Pledge - should combine with Grass Pledge to form a 150-power Grass-type attack that creates a 'swamp'", async () => { await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - const waterPledge = allMoves[Moves.WATER_PLEDGE]; + const waterPledge = allMoves[MoveId.WATER_PLEDGE]; vi.spyOn(waterPledge, "calculateBattlePower"); const playerPokemon = game.scene.getPlayerField(); @@ -187,8 +187,8 @@ describe("Moves - Pledge Moves", () => { vi.spyOn(playerPokemon[1], "getMoveType"); - game.move.select(Moves.GRASS_PLEDGE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.WATER_PLEDGE, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.GRASS_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.WATER_PLEDGE, 1, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); // advance to the end of PLAYER_2's move this turn @@ -209,8 +209,8 @@ describe("Moves - Pledge Moves", () => { const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); // PLAYER_2 should act with a combined move immediately after PLAYER as the second move in the turn @@ -224,22 +224,22 @@ describe("Moves - Pledge Moves", () => { it("Pledge Moves - 'rainbow' effect should not stack with Serene Grace when applied to flinching moves", async () => { game.override .ability(AbilityId.SERENE_GRACE) - .moveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE, Moves.IRON_HEAD, Moves.SPLASH]); + .moveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE, MoveId.IRON_HEAD, MoveId.SPLASH]); await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - const ironHeadFlinchAttr = allMoves[Moves.IRON_HEAD].getAttrs(FlinchAttr)[0]; + const ironHeadFlinchAttr = allMoves[MoveId.IRON_HEAD].getAttrs(FlinchAttr)[0]; vi.spyOn(ironHeadFlinchAttr, "getMoveChance"); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaTagSide.PLAYER)).toBeDefined(); - game.move.select(Moves.IRON_HEAD, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.IRON_HEAD, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -247,17 +247,17 @@ describe("Moves - Pledge Moves", () => { }); it("Pledge Moves - should have no effect when the second ally's move is cancelled", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.SPORE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.SPORE]); await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.GRASS_PLEDGE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.GRASS_PLEDGE, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.SPORE, BattlerIndex.PLAYER_2); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPORE, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2]); @@ -272,8 +272,8 @@ describe("Moves - Pledge Moves", () => { const enemyPokemon = game.scene.getEnemyField(); vi.spyOn(enemyPokemon[1], "getAbility").mockReturnValue(allAbilities[AbilityId.STORM_DRAIN]); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -284,14 +284,14 @@ describe("Moves - Pledge Moves", () => { }); it("Pledge Moves - should not ignore redirection from another Pokemon's Follow Me", async () => { - game.override.enemyMoveset([Moves.FOLLOW_ME, Moves.SPLASH]); + game.override.enemyMoveset([MoveId.FOLLOW_ME, MoveId.SPLASH]); await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.FOLLOW_ME); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.FOLLOW_ME); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/pollen_puff.test.ts b/test/moves/pollen_puff.test.ts index e0a4f0ef5ee..faa5b50d59f 100644 --- a/test/moves/pollen_puff.test.ts +++ b/test/moves/pollen_puff.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,25 +23,25 @@ describe("Moves - Pollen Puff", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.POLLEN_PUFF]) + .moveset([MoveId.POLLEN_PUFF]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should not heal more than once when the user has a source of multi-hit", async () => { - game.override.battleStyle("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]).ability(AbilityId.PARENTAL_BOND); + game.override.battleStyle("double").moveset([MoveId.POLLEN_PUFF, MoveId.ENDURE]).ability(AbilityId.PARENTAL_BOND); await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); const [_, rightPokemon] = game.scene.getPlayerField(); rightPokemon.damageAndUpdate(rightPokemon.hp - 1); - game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.ENDURE, 1); + game.move.select(MoveId.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(MoveId.ENDURE, 1); await game.phaseInterceptor.to("BerryPhase"); @@ -50,12 +50,12 @@ describe("Moves - Pollen Puff", () => { }); it("should damage an enemy multiple times when the user has a source of multi-hit", async () => { - game.override.moveset([Moves.POLLEN_PUFF]).ability(AbilityId.PARENTAL_BOND).enemyLevel(100); + game.override.moveset([MoveId.POLLEN_PUFF]).ability(AbilityId.PARENTAL_BOND).enemyLevel(100); await game.classicMode.startBattle([Species.MAGIKARP]); const target = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POLLEN_PUFF); + game.move.select(MoveId.POLLEN_PUFF); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index 4f536896ae4..c091149517f 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -3,7 +3,7 @@ import { MoveResult, PokemonMove } from "#app/field/pokemon"; import { BerryPhase } from "#app/phases/berry-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { PokemonType } from "#enums/pokemon-type"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; @@ -32,10 +32,10 @@ describe("Moves - Powder", () => { game.override .enemySpecies(Species.SNORLAX) .enemyLevel(100) - .enemyMoveset(Moves.EMBER) + .enemyMoveset(MoveId.EMBER) .enemyAbility(AbilityId.INSOMNIA) .startingLevel(100) - .moveset([Moves.POWDER, Moves.SPLASH, Moves.FIERY_DANCE, Moves.ROAR]); + .moveset([MoveId.POWDER, MoveId.SPLASH, MoveId.FIERY_DANCE, MoveId.ROAR]); }); it("should cancel the target's Fire-type move, damage the target, and still consume the target's PP", async () => { @@ -44,9 +44,9 @@ describe("Moves - Powder", () => { await game.classicMode.startBattle([Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.moveset = [new PokemonMove(Moves.EMBER)]; + enemyPokemon.moveset = [new PokemonMove(MoveId.EMBER)]; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -55,7 +55,7 @@ describe("Moves - Powder", () => { await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); @@ -70,7 +70,7 @@ describe("Moves - Powder", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); @@ -84,7 +84,7 @@ describe("Moves - Powder", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); @@ -98,7 +98,7 @@ describe("Moves - Powder", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -112,7 +112,7 @@ describe("Moves - Powder", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -120,13 +120,13 @@ describe("Moves - Powder", () => { }); it("should not prevent the target from thawing out with Flame Wheel", async () => { - game.override.enemyMoveset(Moves.FLAME_WHEEL).enemyStatusEffect(StatusEffect.FREEZE); + game.override.enemyMoveset(MoveId.FLAME_WHEEL).enemyStatusEffect(StatusEffect.FREEZE); await game.classicMode.startBattle([Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.status?.effect).not.toBe(StatusEffect.FREEZE); @@ -141,7 +141,7 @@ describe("Moves - Powder", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -158,14 +158,14 @@ describe("Moves - Powder", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; // Turn 1: Roar away 1 opponent - game.move.select(Moves.ROAR, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.ROAR, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); // Turn 2: Enemy should activate Powder twice: From using Ember, and from copying Fiery Dance via Dancer playerPokemon.hp = playerPokemon.getMaxHp(); - game.move.select(Moves.FIERY_DANCE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.POWDER, 1, BattlerIndex.ENEMY); + game.move.select(MoveId.FIERY_DANCE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.POWDER, 1, BattlerIndex.ENEMY); await game.phaseInterceptor.to(MoveEffectPhase); const enemyStartingHp = enemyPokemon.hp; @@ -182,29 +182,29 @@ describe("Moves - Powder", () => { }); it("should cancel Fiery Dance, then prevent it from triggering Dancer", async () => { - game.override.ability(AbilityId.DANCER).enemyMoveset(Moves.FIERY_DANCE); + game.override.ability(AbilityId.DANCER).enemyMoveset(MoveId.FIERY_DANCE); await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); expect(enemyPokemon.hp).toBe(Math.ceil((3 * enemyPokemon.getMaxHp()) / 4)); - expect(playerPokemon.getLastXMoves()[0].move).toBe(Moves.POWDER); + expect(playerPokemon.getLastXMoves()[0].move).toBe(MoveId.POWDER); }); it("should cancel Revelation Dance if it becomes a Fire-type move", async () => { - game.override.enemySpecies(Species.CHARIZARD).enemyMoveset(Moves.REVELATION_DANCE); + game.override.enemySpecies(Species.CHARIZARD).enemyMoveset(MoveId.REVELATION_DANCE); await game.classicMode.startBattle([Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -212,13 +212,13 @@ describe("Moves - Powder", () => { }); it("should cancel Shell Trap and damage the target, even if the move would fail", async () => { - game.override.enemyMoveset(Moves.SHELL_TRAP); + game.override.enemyMoveset(MoveId.SHELL_TRAP); await game.classicMode.startBattle([Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER); + game.move.select(MoveId.POWDER); await game.phaseInterceptor.to(BerryPhase, false); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -226,15 +226,15 @@ describe("Moves - Powder", () => { }); it("should cancel Grass Pledge if used after ally's Fire Pledge", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.GRASS_PLEDGE]).battleStyle("double"); + game.override.enemyMoveset([MoveId.FIRE_PLEDGE, MoveId.GRASS_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.GRASS_PLEDGE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); + game.move.select(MoveId.POWDER, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.GRASS_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.FIRE_PLEDGE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(BerryPhase, false); @@ -243,15 +243,15 @@ describe("Moves - Powder", () => { }); it("should cancel Fire Pledge if used before ally's Water Pledge", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE]).battleStyle("double"); + game.override.enemyMoveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.WATER_PLEDGE, BattlerIndex.PLAYER); + game.move.select(MoveId.POWDER, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.FIRE_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.WATER_PLEDGE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); await game.phaseInterceptor.to(BerryPhase, false); @@ -260,15 +260,15 @@ describe("Moves - Powder", () => { }); it("should NOT cancel Fire Pledge if used after ally's Water Pledge", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE]).battleStyle("double"); + game.override.enemyMoveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE]).battleStyle("double"); await game.classicMode.startBattle([Species.CHARIZARD, Species.CHARIZARD]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.POWDER, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); - await game.move.selectEnemyMove(Moves.FIRE_PLEDGE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.WATER_PLEDGE, BattlerIndex.PLAYER); + game.move.select(MoveId.POWDER, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); + await game.move.selectEnemyMove(MoveId.FIRE_PLEDGE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.WATER_PLEDGE, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/power_shift.test.ts b/test/moves/power_shift.test.ts index c8aad53e0e9..101f5a8c8f7 100644 --- a/test/moves/power_shift.test.ts +++ b/test/moves/power_shift.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; @@ -22,11 +22,11 @@ describe("Moves - Power Shift", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.POWER_SHIFT, Moves.BULK_UP]) + .moveset([MoveId.POWER_SHIFT, MoveId.BULK_UP]) .battleStyle("single") .ability(AbilityId.BALL_FETCH) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("switches the user's raw Attack stat with its raw Defense stat", async () => { @@ -37,7 +37,7 @@ describe("Moves - Power Shift", () => { playerPokemon.setStat(Stat.ATK, 10, false); playerPokemon.setStat(Stat.DEF, 20, false); - game.move.select(Moves.BULK_UP); + game.move.select(MoveId.BULK_UP); await game.phaseInterceptor.to("TurnEndPhase"); @@ -47,7 +47,7 @@ describe("Moves - Power Shift", () => { await game.toNextTurn(); - game.move.select(Moves.POWER_SHIFT); + game.move.select(MoveId.POWER_SHIFT); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/power_split.test.ts b/test/moves/power_split.test.ts index 971da2b5ee0..998f9799271 100644 --- a/test/moves/power_split.test.ts +++ b/test/moves/power_split.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; @@ -28,12 +28,12 @@ describe("Moves - Power Split", () => { .enemyAbility(AbilityId.NONE) .enemySpecies(Species.MEW) .enemyLevel(200) - .moveset([Moves.POWER_SPLIT]) + .moveset([MoveId.POWER_SPLIT]) .ability(AbilityId.NONE); }); it("should average the user's ATK and SPATK stats with those of the target", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; @@ -42,7 +42,7 @@ describe("Moves - Power Split", () => { const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); - game.move.select(Moves.POWER_SPLIT); + game.move.select(MoveId.POWER_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.ATK, false)).toBe(avgAtk); @@ -53,7 +53,7 @@ describe("Moves - Power Split", () => { }, 20000); it("should be idempotent", async () => { - game.override.enemyMoveset([Moves.POWER_SPLIT]); + game.override.enemyMoveset([MoveId.POWER_SPLIT]); await game.classicMode.startBattle([Species.INDEEDEE]); const player = game.scene.getPlayerPokemon()!; @@ -62,10 +62,10 @@ describe("Moves - Power Split", () => { const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); - game.move.select(Moves.POWER_SPLIT); + game.move.select(MoveId.POWER_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.POWER_SPLIT); + game.move.select(MoveId.POWER_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.ATK, false)).toBe(avgAtk); diff --git a/test/moves/power_swap.test.ts b/test/moves/power_swap.test.ts index fd095a678c3..6594eb56436 100644 --- a/test/moves/power_swap.test.ts +++ b/test/moves/power_swap.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat, BATTLE_STATS } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; import { MoveEndPhase } from "#app/phases/move-end-phase"; @@ -26,10 +26,10 @@ describe("Moves - Power Swap", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.INDEEDEE) .enemyLevel(200) - .moveset([Moves.POWER_SWAP]) + .moveset([MoveId.POWER_SWAP]) .ability(AbilityId.NONE); }); @@ -41,7 +41,7 @@ describe("Moves - Power Swap", () => { vi.spyOn(enemy.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(1)); - game.move.select(Moves.POWER_SWAP); + game.move.select(MoveId.POWER_SWAP); await game.phaseInterceptor.to(MoveEndPhase); diff --git a/test/moves/power_trick.test.ts b/test/moves/power_trick.test.ts index b0f1d4265e5..74037532327 100644 --- a/test/moves/power_trick.test.ts +++ b/test/moves/power_trick.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; @@ -27,10 +27,10 @@ describe("Moves - Power Trick", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.MEW) .enemyLevel(200) - .moveset([Moves.POWER_TRICK]) + .moveset([MoveId.POWER_TRICK]) .ability(AbilityId.BALL_FETCH); }); @@ -41,7 +41,7 @@ describe("Moves - Power Trick", () => { const baseATK = player.getStat(Stat.ATK, false); const baseDEF = player.getStat(Stat.DEF, false); - game.move.select(Moves.POWER_TRICK); + game.move.select(MoveId.POWER_TRICK); await game.phaseInterceptor.to(TurnEndPhase); @@ -57,11 +57,11 @@ describe("Moves - Power Trick", () => { const baseATK = player.getStat(Stat.ATK, false); const baseDEF = player.getStat(Stat.DEF, false); - game.move.select(Moves.POWER_TRICK); + game.move.select(MoveId.POWER_TRICK); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.POWER_TRICK); + game.move.select(MoveId.POWER_TRICK); await game.phaseInterceptor.to(TurnEndPhase); @@ -72,12 +72,12 @@ describe("Moves - Power Trick", () => { it("should pass effect when using BATON_PASS", async () => { await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); - await game.override.moveset([Moves.POWER_TRICK, Moves.BATON_PASS]); + await game.override.moveset([MoveId.POWER_TRICK, MoveId.BATON_PASS]); const player = game.scene.getPlayerPokemon()!; player.addTag(BattlerTagType.POWER_TRICK); - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to(TurnEndPhase); @@ -93,12 +93,12 @@ describe("Moves - Power Trick", () => { it("should remove effect after using Transform", async () => { await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); - await game.override.moveset([Moves.POWER_TRICK, Moves.TRANSFORM]); + await game.override.moveset([MoveId.POWER_TRICK, MoveId.TRANSFORM]); const player = game.scene.getPlayerPokemon()!; player.addTag(BattlerTagType.POWER_TRICK); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/moves/protect.test.ts b/test/moves/protect.test.ts index 9471d772ae1..44f5ee5270b 100644 --- a/test/moves/protect.test.ts +++ b/test/moves/protect.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vi import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { allMoves } from "#app/data/data-lists"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; @@ -29,11 +29,11 @@ describe("Moves - Protect", () => { game.override.battleStyle("single"); - game.override.moveset([Moves.PROTECT]); + game.override.moveset([MoveId.PROTECT]); game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(AbilityId.INSOMNIA); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); game.override.startingLevel(100); game.override.enemyLevel(100); @@ -44,7 +44,7 @@ describe("Moves - Protect", () => { const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase", false); @@ -52,14 +52,14 @@ describe("Moves - Protect", () => { }); test("should prevent secondary effects from the opponent's attack", async () => { - game.override.enemyMoveset([Moves.CEASELESS_EDGE]); - vi.spyOn(allMoves[Moves.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); + game.override.enemyMoveset([MoveId.CEASELESS_EDGE]); + vi.spyOn(allMoves[MoveId.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase", false); @@ -68,13 +68,13 @@ describe("Moves - Protect", () => { }); test("should protect the user from status moves", async () => { - game.override.enemyMoveset([Moves.CHARM]); + game.override.enemyMoveset([MoveId.CHARM]); await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase", false); @@ -82,14 +82,14 @@ describe("Moves - Protect", () => { }); test("should stop subsequent hits of a multi-hit move", async () => { - game.override.enemyMoveset([Moves.TACHYON_CUTTER]); + game.override.enemyMoveset([MoveId.TACHYON_CUTTER]); await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.phaseInterceptor.to("BerryPhase", false); @@ -98,14 +98,14 @@ describe("Moves - Protect", () => { }); test("should fail if the user is the last to move in the turn", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([MoveId.PROTECT]); await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.PROTECT); + game.move.select(MoveId.PROTECT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/moves/psycho_shift.test.ts b/test/moves/psycho_shift.test.ts index 5f6c84b2f2d..f7ebdfab3a0 100644 --- a/test/moves/psycho_shift.test.ts +++ b/test/moves/psycho_shift.test.ts @@ -1,6 +1,6 @@ import { StatusEffect } from "#app/enums/status-effect"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,7 +23,7 @@ describe("Moves - Psycho Shift", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.PSYCHO_SHIFT]) + .moveset([MoveId.PSYCHO_SHIFT]) .ability(AbilityId.BALL_FETCH) .statusEffect(StatusEffect.POISON) .battleStyle("single") @@ -31,7 +31,7 @@ describe("Moves - Psycho Shift", () => { .enemySpecies(Species.MAGIKARP) .enemyLevel(20) .enemyAbility(AbilityId.SYNCHRONIZE) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("If Psycho Shift is used on a Pokémon with Synchronize, the user of Psycho Shift will already be afflicted with a status condition when Synchronize activates", async () => { @@ -41,7 +41,7 @@ describe("Moves - Psycho Shift", () => { const enemyPokemon = game.scene.getEnemyPokemon(); expect(enemyPokemon?.status).toBeUndefined(); - game.move.select(Moves.PSYCHO_SHIFT); + game.move.select(MoveId.PSYCHO_SHIFT); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon?.status).toBeNull(); expect(enemyPokemon?.status).toBeDefined(); diff --git a/test/moves/purify.test.ts b/test/moves/purify.test.ts index 0439ba39108..3f6b1d76da7 100644 --- a/test/moves/purify.test.ts +++ b/test/moves/purify.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { Status } from "#app/data/status-effect"; import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import { MoveEndPhase } from "#app/phases/move-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -29,11 +29,11 @@ describe("Moves - Purify", () => { game.override.starterSpecies(Species.PYUKUMUKU); game.override.startingLevel(10); - game.override.moveset([Moves.PURIFY, Moves.SIZZLY_SLIDE]); + game.override.moveset([MoveId.PURIFY, MoveId.SIZZLY_SLIDE]); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyLevel(10); - game.override.enemyMoveset([Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.NONE, MoveId.NONE, MoveId.NONE]); }); test("Purify heals opponent status effect and restores user hp", async () => { @@ -45,7 +45,7 @@ describe("Moves - Purify", () => { playerPokemon.hp = playerPokemon.getMaxHp() - 1; enemyPokemon.status = new Status(StatusEffect.BURN); - game.move.select(Moves.PURIFY); + game.move.select(MoveId.PURIFY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEndPhase); @@ -61,7 +61,7 @@ describe("Moves - Purify", () => { playerPokemon.hp = playerPokemon.getMaxHp() - 1; const playerInitialHp = playerPokemon.hp; - game.move.select(Moves.PURIFY); + game.move.select(MoveId.PURIFY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEndPhase); diff --git a/test/moves/quash.test.ts b/test/moves/quash.test.ts index 725970b7afe..9204bd3a354 100644 --- a/test/moves/quash.test.ts +++ b/test/moves/quash.test.ts @@ -1,5 +1,5 @@ import { Species } from "#enums/species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { AbilityId } from "#enums/ability-id"; import { BattlerIndex } from "#app/battle"; import { WeatherType } from "#enums/weather-type"; @@ -29,18 +29,18 @@ describe("Moves - Quash", () => { .enemyLevel(1) .enemySpecies(Species.SLOWPOKE) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.RAIN_DANCE, Moves.SPLASH]) + .enemyMoveset([MoveId.RAIN_DANCE, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) - .moveset([Moves.QUASH, Moves.SUNNY_DAY, Moves.RAIN_DANCE, Moves.SPLASH]); + .moveset([MoveId.QUASH, MoveId.SUNNY_DAY, MoveId.RAIN_DANCE, MoveId.SPLASH]); }); it("makes the target move last in a turn, ignoring priority", async () => { await game.classicMode.startBattle([Species.ACCELGOR, Species.RATTATA]); - game.move.select(Moves.QUASH, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.SUNNY_DAY, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.RAIN_DANCE); + game.move.select(MoveId.QUASH, 0, BattlerIndex.PLAYER_2); + game.move.select(MoveId.SUNNY_DAY, 1); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.RAIN_DANCE); await game.phaseInterceptor.to("TurnEndPhase", false); // will be sunny if player_2 moved last because of quash, rainy otherwise @@ -49,8 +49,8 @@ describe("Moves - Quash", () => { it("fails if the target has already moved", async () => { await game.classicMode.startBattle([Species.ACCELGOR, Species.RATTATA]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.QUASH, 1, BattlerIndex.PLAYER); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.QUASH, 1, BattlerIndex.PLAYER); await game.phaseInterceptor.to("MoveEndPhase"); await game.phaseInterceptor.to("MoveEndPhase"); @@ -64,32 +64,32 @@ describe("Moves - Quash", () => { await game.classicMode.startBattle([Species.ACCELGOR, Species.RATTATA]); // both users are quashed - rattata is slower so sun should be up at end of turn - game.move.select(Moves.RAIN_DANCE, 0); - game.move.select(Moves.SUNNY_DAY, 1); + game.move.select(MoveId.RAIN_DANCE, 0); + game.move.select(MoveId.SUNNY_DAY, 1); - await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.QUASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.QUASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("TurnEndPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SUNNY); }); it("respects trick room", async () => { - game.override.enemyMoveset([Moves.RAIN_DANCE, Moves.SPLASH, Moves.TRICK_ROOM]); + game.override.enemyMoveset([MoveId.RAIN_DANCE, MoveId.SPLASH, MoveId.TRICK_ROOM]); await game.classicMode.startBattle([Species.ACCELGOR, Species.RATTATA]); - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); - await game.move.selectEnemyMove(Moves.TRICK_ROOM); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.TRICK_ROOM); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnInitPhase"); // both users are quashed - accelgor should move last w/ TR so rain should be up at end of turn - game.move.select(Moves.RAIN_DANCE, 0); - game.move.select(Moves.SUNNY_DAY, 1); + game.move.select(MoveId.RAIN_DANCE, 0); + game.move.select(MoveId.SUNNY_DAY, 1); - await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.QUASH, BattlerIndex.PLAYER_2); + await game.move.selectEnemyMove(MoveId.QUASH, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.QUASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("TurnEndPhase", false); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.RAIN); diff --git a/test/moves/quick_guard.test.ts b/test/moves/quick_guard.test.ts index 6fbe15a1a03..8d64903dbf9 100644 --- a/test/moves/quick_guard.test.ts +++ b/test/moves/quick_guard.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; @@ -27,10 +27,10 @@ describe("Moves - Quick Guard", () => { game.override.battleStyle("double"); - game.override.moveset([Moves.QUICK_GUARD, Moves.SPLASH, Moves.FOLLOW_ME]); + game.override.moveset([MoveId.QUICK_GUARD, MoveId.SPLASH, MoveId.FOLLOW_ME]); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.QUICK_ATTACK]); + game.override.enemyMoveset([MoveId.QUICK_ATTACK]); game.override.enemyAbility(AbilityId.INSOMNIA); game.override.startingLevel(100); @@ -42,8 +42,8 @@ describe("Moves - Quick Guard", () => { const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.QUICK_GUARD); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.QUICK_GUARD); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -52,14 +52,14 @@ describe("Moves - Quick Guard", () => { test("should protect the user and allies from Prankster-boosted moves", async () => { game.override.enemyAbility(AbilityId.PRANKSTER); - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); - game.move.select(Moves.QUICK_GUARD); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.QUICK_GUARD); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -67,15 +67,15 @@ describe("Moves - Quick Guard", () => { }); test("should stop subsequent hits of a multi-hit priority move", async () => { - game.override.enemyMoveset([Moves.WATER_SHURIKEN]); + game.override.enemyMoveset([MoveId.WATER_SHURIKEN]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.QUICK_GUARD); - game.move.select(Moves.FOLLOW_ME, 1); + game.move.select(MoveId.QUICK_GUARD); + game.move.select(MoveId.FOLLOW_ME, 1); await game.phaseInterceptor.to("BerryPhase", false); @@ -85,14 +85,14 @@ describe("Moves - Quick Guard", () => { test("should fail if the user is the last to move in the turn", async () => { game.override.battleStyle("single"); - game.override.enemyMoveset([Moves.QUICK_GUARD]); + game.override.enemyMoveset([MoveId.QUICK_GUARD]); await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.QUICK_GUARD); + game.move.select(MoveId.QUICK_GUARD); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts index 1d4d8a5d905..fa5509ef89d 100644 --- a/test/moves/rage_fist.test.ts +++ b/test/moves/rage_fist.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; @@ -25,16 +25,16 @@ describe("Moves - Rage Fist", () => { }); beforeEach(() => { - move = allMoves[Moves.RAGE_FIST]; + move = allMoves[MoveId.RAGE_FIST]; game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.RAGE_FIST, Moves.SPLASH, Moves.SUBSTITUTE, Moves.TIDY_UP]) + .moveset([MoveId.RAGE_FIST, MoveId.SPLASH, MoveId.SUBSTITUTE, MoveId.TIDY_UP]) .startingLevel(100) .enemyLevel(1) .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.DOUBLE_KICK); + .enemyMoveset(MoveId.DOUBLE_KICK); vi.spyOn(move, "calculateBattlePower"); }); @@ -42,7 +42,7 @@ describe("Moves - Rage Fist", () => { it("should gain power per hit taken", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -53,14 +53,14 @@ describe("Moves - Rage Fist", () => { await game.classicMode.startBattle([Species.FEEBAS]); // spam splash against magikarp hitting us 2 times per turn - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -70,12 +70,12 @@ describe("Moves - Rage Fist", () => { }); it("should not count substitute hits or confusion damage", async () => { - game.override.enemySpecies(Species.SHUCKLE).enemyMoveset([Moves.CONFUSE_RAY, Moves.DOUBLE_KICK]); + game.override.enemySpecies(Species.SHUCKLE).enemyMoveset([MoveId.CONFUSE_RAY, MoveId.DOUBLE_KICK]); await game.classicMode.startBattle([Species.REGIROCK]); - game.move.select(Moves.SUBSTITUTE); - await game.move.selectEnemyMove(Moves.DOUBLE_KICK); + game.move.select(MoveId.SUBSTITUTE); + await game.move.selectEnemyMove(MoveId.DOUBLE_KICK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); @@ -83,13 +83,13 @@ describe("Moves - Rage Fist", () => { expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(0); // remove substitute and get confused - game.move.select(Moves.TIDY_UP); - await game.move.selectEnemyMove(Moves.CONFUSE_RAY); + game.move.select(MoveId.TIDY_UP); + await game.move.selectEnemyMove(MoveId.CONFUSE_RAY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(Moves.RAGE_FIST); - await game.move.selectEnemyMove(Moves.CONFUSE_RAY); + game.move.select(MoveId.RAGE_FIST); + await game.move.selectEnemyMove(MoveId.CONFUSE_RAY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceConfusionActivation(true); await game.toNextTurn(); @@ -101,13 +101,13 @@ describe("Moves - Rage Fist", () => { it("should maintain hits recieved between wild waves", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextWave(); expect(game.scene.getPlayerPokemon()?.battleData.hitCount).toBe(2); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -122,8 +122,8 @@ describe("Moves - Rage Fist", () => { expect(ironHands).toBeDefined(); // beat up a magikarp - game.move.select(Moves.RAGE_FIST); - await game.move.selectEnemyMove(Moves.DOUBLE_KICK); + game.move.select(MoveId.RAGE_FIST); + await game.move.selectEnemyMove(MoveId.DOUBLE_KICK); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -142,11 +142,11 @@ describe("Moves - Rage Fist", () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); @@ -154,7 +154,7 @@ describe("Moves - Rage Fist", () => { }); it("should not reset if switched out or on reload", async () => { - game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyMoveset(MoveId.TACKLE); const getPartyHitCount = () => game.scene @@ -165,7 +165,7 @@ describe("Moves - Rage Fist", () => { await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); // Charizard hit - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(getPartyHitCount()).toEqual([1, 0]); @@ -181,7 +181,7 @@ describe("Moves - Rage Fist", () => { expect(getPartyHitCount()).toEqual([2, 1]); // Charizard rage fist - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.phaseInterceptor.to("MoveEndPhase"); const charizard = game.scene.getPlayerPokemon()!; @@ -195,7 +195,7 @@ describe("Moves - Rage Fist", () => { await game.reload.reloadSession(); // outsped and oneshot means power rmains same as prior - game.move.select(Moves.RAGE_FIST); + game.move.select(MoveId.RAGE_FIST); await game.phaseInterceptor.to("MoveEndPhase"); expect(move.calculateBattlePower).toHaveLastReturnedWith(150); }); diff --git a/test/moves/rage_powder.test.ts b/test/moves/rage_powder.test.ts index 92a38a210e3..154bc910962 100644 --- a/test/moves/rage_powder.test.ts +++ b/test/moves/rage_powder.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,8 +26,8 @@ describe("Moves - Rage Powder", () => { game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.RAGE_POWDER, Moves.TACKLE, Moves.SPLASH]); + game.override.moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]); + game.override.enemyMoveset([MoveId.RAGE_POWDER, MoveId.TACKLE, MoveId.SPLASH]); }); test("move effect should be bypassed by Grass type", async () => { @@ -35,11 +35,11 @@ describe("Moves - Rage Powder", () => { const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.QUICK_ATTACK, 0, BattlerIndex.ENEMY); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.QUICK_ATTACK, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.RAGE_POWDER); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.RAGE_POWDER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -58,11 +58,11 @@ describe("Moves - Rage Powder", () => { const enemyStartingHp = enemyPokemon.map(p => p.hp); - game.move.select(Moves.QUICK_ATTACK, 0, BattlerIndex.ENEMY); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.QUICK_ATTACK, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.RAGE_POWDER); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.RAGE_POWDER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index fde4d211d34..efd7d4297e9 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -8,7 +8,7 @@ import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { NumberHolder } from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -38,15 +38,15 @@ describe("Moves - Reflect", () => { game.override .battleStyle("single") .ability(AbilityId.NONE) - .moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]) + .moveset([MoveId.ABSORB, MoveId.ROCK_SLIDE, MoveId.TACKLE]) .enemyLevel(100) .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.REFLECT) + .enemyMoveset(MoveId.REFLECT) .disableCrits(); }); it("reduces damage of physical attacks by half in a single battle", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -64,7 +64,7 @@ describe("Moves - Reflect", () => { it("reduces damage of physical attacks by a third in a double battle", async () => { game.override.battleStyle("double"); - const moveToUse = Moves.ROCK_SLIDE; + const moveToUse = MoveId.ROCK_SLIDE; await game.classicMode.startBattle([Species.SHUCKLE, Species.SHUCKLE]); game.move.select(moveToUse); @@ -81,7 +81,7 @@ describe("Moves - Reflect", () => { }); it("does not affect special attacks", async () => { - const moveToUse = Moves.ABSORB; + const moveToUse = MoveId.ABSORB; await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -98,8 +98,8 @@ describe("Moves - Reflect", () => { }); it("does not affect critical hits", async () => { - game.override.moveset([Moves.WICKED_BLOW]); - const moveToUse = Moves.WICKED_BLOW; + game.override.moveset([MoveId.WICKED_BLOW]); + const moveToUse = MoveId.WICKED_BLOW; await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -115,8 +115,8 @@ describe("Moves - Reflect", () => { }); it("does not affect critical hits", async () => { - game.override.moveset([Moves.WICKED_BLOW]); - const moveToUse = Moves.WICKED_BLOW; + game.override.moveset([MoveId.WICKED_BLOW]); + const moveToUse = MoveId.WICKED_BLOW; await game.classicMode.startBattle([Species.SHUCKLE]); game.move.select(moveToUse); @@ -132,7 +132,7 @@ describe("Moves - Reflect", () => { }); /** - * Calculates the damage of a move multiplied by screen's multiplier, Reflect in this case {@linkcode Moves.REFLECT}. + * Calculates the damage of a move multiplied by screen's multiplier, Reflect in this case {@linkcode MoveId.REFLECT}. * Please note this does not consider other damage calculations except the screen multiplier. * * @param defender - The defending Pokémon. diff --git a/test/moves/reflect_type.test.ts b/test/moves/reflect_type.test.ts index a504cbc652a..bc853ba4c02 100644 --- a/test/moves/reflect_type.test.ts +++ b/test/moves/reflect_type.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { PokemonType } from "#enums/pokemon-type"; import GameManager from "#test/testUtils/gameManager"; @@ -27,27 +27,27 @@ describe("Moves - Reflect Type", () => { it("will make the user Normal/Grass if targetting a typeless Pokemon affected by Forest's Curse", async () => { game.override - .moveset([Moves.FORESTS_CURSE, Moves.REFLECT_TYPE]) + .moveset([MoveId.FORESTS_CURSE, MoveId.REFLECT_TYPE]) .startingLevel(60) .enemySpecies(Species.CHARMANDER) - .enemyMoveset([Moves.BURN_UP, Moves.SPLASH]); + .enemyMoveset([MoveId.BURN_UP, MoveId.SPLASH]); await game.classicMode.startBattle([Species.FEEBAS]); const playerPokemon = game.scene.getPlayerPokemon(); const enemyPokemon = game.scene.getEnemyPokemon(); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.BURN_UP); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.BURN_UP); await game.toNextTurn(); - game.move.select(Moves.FORESTS_CURSE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.FORESTS_CURSE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon?.getTypes().includes(PokemonType.UNKNOWN)).toBe(true); expect(enemyPokemon?.getTypes().includes(PokemonType.GRASS)).toBe(true); - game.move.select(Moves.REFLECT_TYPE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.REFLECT_TYPE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon?.getTypes()[0]).toBe(PokemonType.NORMAL); expect(playerPokemon?.getTypes().includes(PokemonType.GRASS)).toBe(true); diff --git a/test/moves/relic_song.test.ts b/test/moves/relic_song.test.ts index aa3143a4bd2..a75dadc7615 100644 --- a/test/moves/relic_song.test.ts +++ b/test/moves/relic_song.test.ts @@ -1,7 +1,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { Challenges } from "#app/enums/challenges"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,10 +23,10 @@ describe("Moves - Relic Song", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.RELIC_SONG, Moves.SPLASH]) + .moveset([MoveId.RELIC_SONG, MoveId.SPLASH]) .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.MAGIKARP) .enemyLevel(100); }); @@ -36,12 +36,12 @@ describe("Moves - Relic Song", () => { const meloetta = game.scene.getPlayerPokemon()!; - game.move.select(Moves.RELIC_SONG); + game.move.select(MoveId.RELIC_SONG); await game.toNextTurn(); expect(meloetta.formIndex).toBe(1); - game.move.select(Moves.RELIC_SONG); + game.move.select(MoveId.RELIC_SONG); await game.phaseInterceptor.to("BerryPhase"); expect(meloetta.formIndex).toBe(0); @@ -55,7 +55,7 @@ describe("Moves - Relic Song", () => { expect(meloetta.formIndex).toBe(0); - game.move.select(Moves.RELIC_SONG); + game.move.select(MoveId.RELIC_SONG); await game.phaseInterceptor.to("BerryPhase"); await game.toNextTurn(); @@ -68,7 +68,7 @@ describe("Moves - Relic Song", () => { const meloetta = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index 24d0cd542cb..fc80906a71e 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; @@ -23,14 +23,14 @@ describe("Moves - Retaliate", () => { }); beforeEach(() => { - retaliate = allMoves[Moves.RETALIATE]; + retaliate = allMoves[MoveId.RETALIATE]; game = new GameManager(phaserGame); game.override .battleStyle("single") .enemySpecies(Species.SNORLAX) - .enemyMoveset(Moves.RETALIATE) + .enemyMoveset(MoveId.RETALIATE) .enemyLevel(100) - .moveset([Moves.RETALIATE, Moves.SPLASH]) + .moveset([MoveId.RETALIATE, MoveId.SPLASH]) .startingLevel(80) .disableCrits(); }); @@ -38,13 +38,13 @@ describe("Moves - Retaliate", () => { it("increases power if ally died previous turn", async () => { vi.spyOn(retaliate, "calculateBattlePower"); await game.classicMode.startBattle([Species.ABRA, Species.COBALION]); - game.move.select(Moves.RETALIATE); + game.move.select(MoveId.RETALIATE); await game.phaseInterceptor.to("TurnEndPhase"); expect(retaliate.calculateBattlePower).toHaveLastReturnedWith(70); game.doSelectPartyPokemon(1); await game.toNextTurn(); - game.move.select(Moves.RETALIATE); + game.move.select(MoveId.RETALIATE); await game.phaseInterceptor.to("MoveEffectPhase"); expect(retaliate.calculateBattlePower).toHaveReturnedWith(140); }); diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts index a434ea97cbc..e29323cd90c 100644 --- a/test/moves/revival_blessing.test.ts +++ b/test/moves/revival_blessing.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; import { toDmgValue } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,26 +25,26 @@ describe("Moves - Revival Blessing", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.REVIVAL_BLESSING, Moves.MEMENTO]) + .moveset([MoveId.SPLASH, MoveId.REVIVAL_BLESSING, MoveId.MEMENTO]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should revive a selected fainted Pokemon when used by the player", async () => { await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); game.doSelectPartyPokemon(1, "SwitchPhase"); await game.toNextTurn(); const player = game.scene.getPlayerPokemon()!; expect(player.species.speciesId).toBe(Species.MAGIKARP); - game.move.select(Moves.REVIVAL_BLESSING); + game.move.select(MoveId.REVIVAL_BLESSING); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); game.doSelectPartyPokemon(1, "RevivalBlessingPhase"); @@ -57,15 +57,15 @@ describe("Moves - Revival Blessing", () => { }); it("should revive a random fainted enemy when used by an enemy Trainer", async () => { - game.override.enemyMoveset(Moves.REVIVAL_BLESSING).startingWave(8); + game.override.enemyMoveset(MoveId.REVIVAL_BLESSING).startingWave(8); await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -78,7 +78,7 @@ describe("Moves - Revival Blessing", () => { it("should fail when there are no fainted Pokemon to target", async () => { await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); - game.move.select(Moves.REVIVAL_BLESSING); + game.move.select(MoveId.REVIVAL_BLESSING); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -89,17 +89,17 @@ describe("Moves - Revival Blessing", () => { it("should revive a player pokemon and immediately send it back out if used in the same turn it fainted in doubles", async () => { game.override .battleStyle("double") - .enemyMoveset([Moves.SPLASH, Moves.FISSURE]) + .enemyMoveset([MoveId.SPLASH, MoveId.FISSURE]) .enemyAbility(AbilityId.NO_GUARD) .enemyLevel(100); await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC, Species.GYARADOS]); const feebas = game.scene.getPlayerField()[0]; - game.move.select(Moves.SPLASH); - game.move.select(Moves.REVIVAL_BLESSING, 1); - await game.move.selectEnemyMove(Moves.FISSURE, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.REVIVAL_BLESSING, 1); + await game.move.selectEnemyMove(MoveId.FISSURE, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -116,13 +116,17 @@ describe("Moves - Revival Blessing", () => { }); it("should not summon multiple pokemon to the same slot when reviving the enemy ally in doubles", async () => { - game.override.battleStyle("double").enemyMoveset([Moves.REVIVAL_BLESSING]).moveset([Moves.SPLASH]).startingWave(25); // 2nd rival battle - must have 3+ pokemon + game.override + .battleStyle("double") + .enemyMoveset([MoveId.REVIVAL_BLESSING]) + .moveset([MoveId.SPLASH]) + .startingWave(25); // 2nd rival battle - must have 3+ pokemon await game.classicMode.startBattle([Species.ARCEUS, Species.GIRATINA]); const enemyFainting = game.scene.getEnemyField()[0]; - game.move.select(Moves.SPLASH, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH, 1); await game.killPokemon(enemyFainting); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/role_play.test.ts b/test/moves/role_play.test.ts index 5aa9da892c5..c4688f36de1 100644 --- a/test/moves/role_play.test.ts +++ b/test/moves/role_play.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,19 +23,19 @@ describe("Moves - Role Play", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.ROLE_PLAY]) + .moveset([MoveId.SPLASH, MoveId.ROLE_PLAY]) .ability(AbilityId.ADAPTABILITY) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should set the user's ability to the target's ability", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.ROLE_PLAY); + game.move.select(MoveId.ROLE_PLAY); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); @@ -45,7 +45,7 @@ describe("Moves - Role Play", () => { game.override.enemyAbility(AbilityId.INTIMIDATE); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.ROLE_PLAY); + game.move.select(MoveId.ROLE_PLAY); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); diff --git a/test/moves/rollout.test.ts b/test/moves/rollout.test.ts index 008bd049c38..83c1a414f4a 100644 --- a/test/moves/rollout.test.ts +++ b/test/moves/rollout.test.ts @@ -1,7 +1,7 @@ import { allMoves } from "#app/data/data-lists"; import { CommandPhase } from "#app/phases/command-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -31,12 +31,12 @@ describe("Moves - Rollout", () => { game.override.enemyAbility(AbilityId.BALL_FETCH); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); }); it("should double it's dmg on sequential uses but reset after 5", async () => { - game.override.moveset([Moves.ROLLOUT]); - vi.spyOn(allMoves[Moves.ROLLOUT], "accuracy", "get").mockReturnValue(100); //always hit + game.override.moveset([MoveId.ROLLOUT]); + vi.spyOn(allMoves[MoveId.ROLLOUT], "accuracy", "get").mockReturnValue(100); //always hit const variance = 5; const turns = 6; @@ -55,7 +55,7 @@ describe("Moves - Rollout", () => { let previousHp = enemyPkm.hp; for (let i = 0; i < turns; i++) { - game.move.select(Moves.ROLLOUT); + game.move.select(MoveId.ROLLOUT); await game.phaseInterceptor.to(CommandPhase); dmgHistory.push(previousHp - enemyPkm.hp); diff --git a/test/moves/roost.test.ts b/test/moves/roost.test.ts index e55c76ca220..7cd971ed39e 100644 --- a/test/moves/roost.test.ts +++ b/test/moves/roost.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; @@ -29,8 +29,8 @@ describe("Moves - Roost", () => { game.override.enemySpecies(Species.RELICANTH); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.enemyMoveset(Moves.EARTHQUAKE); - game.override.moveset([Moves.ROOST, Moves.BURN_UP, Moves.DOUBLE_SHOCK]); + game.override.enemyMoveset(MoveId.EARTHQUAKE); + game.override.moveset([MoveId.ROOST, MoveId.BURN_UP, MoveId.DOUBLE_SHOCK]); }); /** @@ -50,7 +50,7 @@ describe("Moves - Roost", () => { await game.classicMode.startBattle([Species.DUNSPARCE]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -74,7 +74,7 @@ describe("Moves - Roost", () => { await game.classicMode.startBattle([Species.TORNADUS]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -98,7 +98,7 @@ describe("Moves - Roost", () => { await game.classicMode.startBattle([Species.HAWLUCHA]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -123,7 +123,7 @@ describe("Moves - Roost", () => { await game.classicMode.startBattle([Species.ROTOM]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -147,7 +147,7 @@ describe("Moves - Roost", () => { await game.classicMode.startBattle([Species.MOLTRES]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.BURN_UP); + game.move.select(MoveId.BURN_UP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -157,7 +157,7 @@ describe("Moves - Roost", () => { expect(playerPokemonTypes.length === 1).toBeTruthy(); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -183,7 +183,7 @@ describe("Moves - Roost", () => { await game.classicMode.startBattle([Species.ZAPDOS]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; - game.move.select(Moves.DOUBLE_SHOCK); + game.move.select(MoveId.DOUBLE_SHOCK); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -193,7 +193,7 @@ describe("Moves - Roost", () => { expect(playerPokemonTypes.length === 1).toBeTruthy(); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -216,14 +216,14 @@ describe("Moves - Roost", () => { test("Dual Type Pokemon afflicted with Forests Curse/Trick or Treat and post roost will become dual type and then become 3 type at end of turn", async () => { game.override.enemyMoveset([ - Moves.TRICK_OR_TREAT, - Moves.TRICK_OR_TREAT, - Moves.TRICK_OR_TREAT, - Moves.TRICK_OR_TREAT, + MoveId.TRICK_OR_TREAT, + MoveId.TRICK_OR_TREAT, + MoveId.TRICK_OR_TREAT, + MoveId.TRICK_OR_TREAT, ]); await game.classicMode.startBattle([Species.MOLTRES]); const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.ROOST); + game.move.select(MoveId.ROOST); await game.phaseInterceptor.to(MoveEffectPhase); let playerPokemonTypes = playerPokemon.getTypes(); diff --git a/test/moves/round.test.ts b/test/moves/round.test.ts index c24c1cb8382..d06620edee5 100644 --- a/test/moves/round.test.ts +++ b/test/moves/round.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,13 +25,13 @@ describe("Moves - Round", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.ROUND]) + .moveset([MoveId.SPLASH, MoveId.ROUND]) .ability(AbilityId.BALL_FETCH) .battleStyle("double") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.ROUND]) + .enemyMoveset([MoveId.SPLASH, MoveId.ROUND]) .startingLevel(100) .enemyLevel(100); }); @@ -39,14 +39,14 @@ describe("Moves - Round", () => { it("should cue other instances of Round together in Speed order", async () => { await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); - const round = allMoves[Moves.ROUND]; + const round = allMoves[MoveId.ROUND]; const spy = vi.spyOn(round, "calculateBattlePower"); - game.move.select(Moves.ROUND, 0, BattlerIndex.ENEMY); - game.move.select(Moves.ROUND, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.ROUND, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.ROUND, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.ROUND, BattlerIndex.PLAYER); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.ROUND, BattlerIndex.PLAYER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); diff --git a/test/moves/safeguard.test.ts b/test/moves/safeguard.test.ts index a2bdafef41e..3895fa86ee2 100644 --- a/test/moves/safeguard.test.ts +++ b/test/moves/safeguard.test.ts @@ -4,7 +4,7 @@ import { allAbilities } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; import { StatusEffect } from "#app/enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -28,11 +28,11 @@ describe("Moves - Safeguard", () => { game.override .battleStyle("single") .enemySpecies(Species.DRATINI) - .enemyMoveset([Moves.SAFEGUARD]) + .enemyMoveset([MoveId.SAFEGUARD]) .enemyAbility(AbilityId.BALL_FETCH) .enemyLevel(5) .starterSpecies(Species.DRATINI) - .moveset([Moves.NUZZLE, Moves.SPORE, Moves.YAWN, Moves.SPLASH]) + .moveset([MoveId.NUZZLE, MoveId.SPORE, MoveId.YAWN, MoveId.SPLASH]) .ability(AbilityId.UNNERVE); // Stop wild Pokemon from potentially eating Lum Berry }); @@ -40,7 +40,7 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.NUZZLE); + game.move.select(MoveId.NUZZLE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -51,7 +51,7 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPORE); + game.move.select(MoveId.SPORE); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -59,11 +59,11 @@ describe("Moves - Safeguard", () => { }); it("protects from confusion", async () => { - game.override.moveset([Moves.CONFUSE_RAY]); + game.override.moveset([MoveId.CONFUSE_RAY]); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.CONFUSE_RAY); + game.move.select(MoveId.CONFUSE_RAY); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -75,8 +75,8 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); - game.move.select(Moves.SPORE, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.NUZZLE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPORE, 0, BattlerIndex.ENEMY_2); + game.move.select(MoveId.NUZZLE, 1, BattlerIndex.ENEMY_2); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2]); @@ -92,7 +92,7 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.YAWN); + game.move.select(MoveId.YAWN); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -103,11 +103,11 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.YAWN); + game.move.select(MoveId.YAWN); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.status?.effect).toEqual(StatusEffect.SLEEP); @@ -118,18 +118,18 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); enemyPokemon.damageAndUpdate(1); expect(enemyPokemon.status?.effect).toEqual(StatusEffect.BURN); - game.override.enemyMoveset([Moves.REST]); + game.override.enemyMoveset([MoveId.REST]); // Force the moveset to update mid-battle // TODO: Remove after enemy AI rework is in enemyPokemon.getMoveset(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); enemyPokemon.damageAndUpdate(1); await game.toNextTurn(); @@ -146,11 +146,11 @@ describe("Moves - Safeguard", () => { await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); - game.override.enemyMoveset([Moves.TACKLE]); - game.move.select(Moves.SPLASH); + game.override.enemyMoveset([MoveId.TACKLE]); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemyPokemon.status).toBeUndefined(); diff --git a/test/moves/scale_shot.test.ts b/test/moves/scale_shot.test.ts index 5b0e826e003..70292c57dc5 100644 --- a/test/moves/scale_shot.test.ts +++ b/test/moves/scale_shot.test.ts @@ -5,7 +5,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -29,12 +29,12 @@ describe("Moves - Scale Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SCALE_SHOT]) + .moveset([MoveId.SCALE_SHOT]) .battleStyle("single") .disableCrits() .ability(AbilityId.NO_GUARD) .passiveAbility(AbilityId.SKILL_LINK) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(3); }); @@ -43,7 +43,7 @@ describe("Moves - Scale Shot", () => { await game.classicMode.startBattle([Species.MINCCINO]); const minccino = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SCALE_SHOT); + game.move.select(MoveId.SCALE_SHOT); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); @@ -62,7 +62,7 @@ describe("Moves - Scale Shot", () => { }); it("unaffected by sheer force", async () => { - const moveToCheck = allMoves[Moves.SCALE_SHOT]; + const moveToCheck = allMoves[MoveId.SCALE_SHOT]; const basePower = moveToCheck.power; game.override.enemySpecies(Species.WOBBUFFET); @@ -72,7 +72,7 @@ describe("Moves - Scale Shot", () => { await game.classicMode.startBattle([Species.MINCCINO]); const minccino = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SCALE_SHOT); + game.move.select(MoveId.SCALE_SHOT); await game.phaseInterceptor.to(TurnEndPhase); //effect not nullified by sheer force diff --git a/test/moves/secret_power.test.ts b/test/moves/secret_power.test.ts index d0125c1a4fc..a86c15778c7 100644 --- a/test/moves/secret_power.test.ts +++ b/test/moves/secret_power.test.ts @@ -1,6 +1,6 @@ import { AbilityId } from "#enums/ability-id"; import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { allMoves } from "#app/data/data-lists"; import { Species } from "#enums/species"; @@ -31,7 +31,7 @@ describe("Moves - Secret Power", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SECRET_POWER]) + .moveset([MoveId.SECRET_POWER]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() @@ -41,38 +41,38 @@ describe("Moves - Secret Power", () => { }); it("Secret Power checks for an active terrain first then looks at the biome for its secondary effect", async () => { - game.override.startingBiome(Biome.VOLCANO).enemyMoveset([Moves.SPLASH, Moves.MISTY_TERRAIN]); - vi.spyOn(allMoves[Moves.SECRET_POWER], "chance", "get").mockReturnValue(100); + game.override.startingBiome(Biome.VOLCANO).enemyMoveset([MoveId.SPLASH, MoveId.MISTY_TERRAIN]); + vi.spyOn(allMoves[MoveId.SECRET_POWER], "chance", "get").mockReturnValue(100); await game.classicMode.startBattle([Species.FEEBAS]); const enemyPokemon = game.scene.getEnemyPokemon()!; // No Terrain + Biome.VOLCANO --> Burn - game.move.select(Moves.SECRET_POWER); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SECRET_POWER); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.status?.effect).toBe(StatusEffect.BURN); // Misty Terrain --> SpAtk -1 - game.move.select(Moves.SECRET_POWER); - await game.move.selectEnemyMove(Moves.MISTY_TERRAIN); + game.move.select(MoveId.SECRET_POWER); + await game.move.selectEnemyMove(MoveId.MISTY_TERRAIN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(-1); }); it("Secret Power's effect chance is doubled by Serene Grace, but not by the 'rainbow' effect from Fire/Water Pledge", async () => { game.override - .moveset([Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE, Moves.SECRET_POWER, Moves.SPLASH]) + .moveset([MoveId.FIRE_PLEDGE, MoveId.WATER_PLEDGE, MoveId.SECRET_POWER, MoveId.SPLASH]) .ability(AbilityId.SERENE_GRACE) - .enemyMoveset([Moves.SPLASH]) + .enemyMoveset([MoveId.SPLASH]) .battleStyle("double"); await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); const sereneGraceAttr = allAbilities[AbilityId.SERENE_GRACE].getAttrs(MoveEffectChanceMultiplierAbAttr)[0]; vi.spyOn(sereneGraceAttr, "canApply"); - game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); - game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); await game.phaseInterceptor.to("TurnEndPhase"); @@ -82,8 +82,8 @@ describe("Moves - Secret Power", () => { rainbowEffect = rainbowEffect!; vi.spyOn(rainbowEffect, "apply"); - game.move.select(Moves.SECRET_POWER, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SECRET_POWER, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/shed_tail.test.ts b/test/moves/shed_tail.test.ts index ad8f8230894..5736c76b50e 100644 --- a/test/moves/shed_tail.test.ts +++ b/test/moves/shed_tail.test.ts @@ -1,7 +1,7 @@ import { SubstituteTag } from "#app/data/battler-tags"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,11 +24,11 @@ describe("Moves - Shed Tail", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SHED_TAIL]) + .moveset([MoveId.SHED_TAIL]) .battleStyle("single") .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("transfers a Substitute doll to the switched in Pokemon", async () => { @@ -36,7 +36,7 @@ describe("Moves - Shed Tail", () => { const magikarp = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SHED_TAIL); + game.move.select(MoveId.SHED_TAIL); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase", false); @@ -58,7 +58,7 @@ describe("Moves - Shed Tail", () => { const magikarp = game.scene.getPlayerPokemon()!; expect(game.scene.getPlayerParty().length).toBe(1); - game.move.select(Moves.SHED_TAIL); + game.move.select(MoveId.SHED_TAIL); await game.phaseInterceptor.to("TurnEndPhase", false); diff --git a/test/moves/shell_side_arm.test.ts b/test/moves/shell_side_arm.test.ts index 14683827eb0..4de89da7565 100644 --- a/test/moves/shell_side_arm.test.ts +++ b/test/moves/shell_side_arm.test.ts @@ -3,7 +3,7 @@ import { ShellSideArmCategoryAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,16 +26,16 @@ describe("Moves - Shell Side Arm", () => { }); beforeEach(() => { - shellSideArm = allMoves[Moves.SHELL_SIDE_ARM]; + shellSideArm = allMoves[MoveId.SHELL_SIDE_ARM]; shellSideArmAttr = shellSideArm.getAttrs(ShellSideArmCategoryAttr)[0]; game = new GameManager(phaserGame); game.override - .moveset([Moves.SHELL_SIDE_ARM, Moves.SPLASH]) + .moveset([MoveId.SHELL_SIDE_ARM, MoveId.SPLASH]) .battleStyle("single") .startingLevel(100) .enemyLevel(100) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("becomes a physical attack if forecasted to deal more damage as physical", async () => { @@ -45,7 +45,7 @@ describe("Moves - Shell Side Arm", () => { vi.spyOn(shellSideArmAttr, "apply"); - game.move.select(Moves.SHELL_SIDE_ARM); + game.move.select(MoveId.SHELL_SIDE_ARM); await game.phaseInterceptor.to("MoveEffectPhase"); expect(shellSideArmAttr.apply).toHaveLastReturnedWith(true); @@ -58,23 +58,23 @@ describe("Moves - Shell Side Arm", () => { vi.spyOn(shellSideArmAttr, "apply"); - game.move.select(Moves.SHELL_SIDE_ARM); + game.move.select(MoveId.SHELL_SIDE_ARM); await game.phaseInterceptor.to("MoveEffectPhase"); expect(shellSideArmAttr.apply).toHaveLastReturnedWith(false); }); it("respects stat stage changes when forecasting base damage", async () => { - game.override.enemySpecies(Species.SNORLAX).enemyMoveset(Moves.COTTON_GUARD); + game.override.enemySpecies(Species.SNORLAX).enemyMoveset(MoveId.COTTON_GUARD); await game.classicMode.startBattle([Species.MANAPHY]); vi.spyOn(shellSideArmAttr, "apply"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); - game.move.select(Moves.SHELL_SIDE_ARM); + game.move.select(MoveId.SHELL_SIDE_ARM); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/shell_trap.test.ts b/test/moves/shell_trap.test.ts index 2aa4712152d..589763898f4 100644 --- a/test/moves/shell_trap.test.ts +++ b/test/moves/shell_trap.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/data-lists"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { MoveResult } from "#app/field/pokemon"; import { BerryPhase } from "#app/phases/berry-phase"; @@ -28,13 +28,13 @@ describe("Moves - Shell Trap", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .moveset([Moves.SHELL_TRAP, Moves.SPLASH, Moves.BULLDOZE]) + .moveset([MoveId.SHELL_TRAP, MoveId.SPLASH, MoveId.BULLDOZE]) .enemySpecies(Species.SNORLAX) - .enemyMoveset([Moves.RAZOR_LEAF]) + .enemyMoveset([MoveId.RAZOR_LEAF]) .startingLevel(100) .enemyLevel(100); - vi.spyOn(allMoves[Moves.RAZOR_LEAF], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.RAZOR_LEAF], "accuracy", "get").mockReturnValue(100); }); it("should activate after the user is hit by a physical attack", async () => { @@ -43,8 +43,8 @@ describe("Moves - Shell Trap", () => { const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SHELL_TRAP, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SHELL_TRAP, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); @@ -59,15 +59,15 @@ describe("Moves - Shell Trap", () => { }); it("should fail if the user is only hit by special attacks", async () => { - game.override.enemyMoveset([Moves.SWIFT]); + game.override.enemyMoveset([MoveId.SWIFT]); await game.classicMode.startBattle([Species.CHARIZARD, Species.TURTONATOR]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SHELL_TRAP, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SHELL_TRAP, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); @@ -82,15 +82,15 @@ describe("Moves - Shell Trap", () => { }); it("should fail if the user isn't hit with any attack", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.CHARIZARD, Species.TURTONATOR]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SHELL_TRAP, 1); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SHELL_TRAP, 1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); @@ -105,15 +105,15 @@ describe("Moves - Shell Trap", () => { }); it("should not activate from an ally's attack", async () => { - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SHELL_TRAP); - game.move.select(Moves.BULLDOZE, 1); + game.move.select(MoveId.SHELL_TRAP); + game.move.select(MoveId.BULLDOZE, 1); await game.phaseInterceptor.to(MoveEndPhase); @@ -129,14 +129,14 @@ describe("Moves - Shell Trap", () => { it("should not activate from a subsequent physical attack", async () => { game.override.battleStyle("single"); - vi.spyOn(allMoves[Moves.RAZOR_LEAF], "priority", "get").mockReturnValue(-4); + vi.spyOn(allMoves[MoveId.RAZOR_LEAF], "priority", "get").mockReturnValue(-4); await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SHELL_TRAP); + game.move.select(MoveId.SHELL_TRAP); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/simple_beam.test.ts b/test/moves/simple_beam.test.ts index 8fefb3bfeb1..0ab80328092 100644 --- a/test/moves/simple_beam.test.ts +++ b/test/moves/simple_beam.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -22,19 +22,19 @@ describe("Moves - Simple Beam", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SIMPLE_BEAM]) + .moveset([MoveId.SPLASH, MoveId.SIMPLE_BEAM]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("sets the target's ability to simple", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SIMPLE_BEAM); + game.move.select(MoveId.SIMPLE_BEAM); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getEnemyPokemon()?.getAbility().id).toBe(AbilityId.SIMPLE); diff --git a/test/moves/sketch.test.ts b/test/moves/sketch.test.ts index d140f706982..791a4ac0a66 100644 --- a/test/moves/sketch.test.ts +++ b/test/moves/sketch.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { MoveResult, PokemonMove } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; @@ -32,28 +32,28 @@ describe("Moves - Sketch", () => { .disableCrits() .enemySpecies(Species.SHUCKLE) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("Sketch should not fail even if a previous Sketch failed to retrieve a valid move and ran out of PP", async () => { await game.classicMode.startBattle([Species.REGIELEKI]); const playerPokemon = game.scene.getPlayerPokemon()!; // can't use normal moveset override because we need to check moveset changes - playerPokemon.moveset = [new PokemonMove(Moves.SKETCH), new PokemonMove(Moves.SKETCH)]; + playerPokemon.moveset = [new PokemonMove(MoveId.SKETCH), new PokemonMove(MoveId.SKETCH)]; - game.move.select(Moves.SKETCH); + game.move.select(MoveId.SKETCH); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); const moveSlot0 = playerPokemon.getMoveset()[0]!; - expect(moveSlot0.moveId).toBe(Moves.SKETCH); + expect(moveSlot0.moveId).toBe(MoveId.SKETCH); expect(moveSlot0.getPpRatio()).toBe(0); await game.toNextTurn(); - game.move.select(Moves.SKETCH); + game.move.select(MoveId.SKETCH); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - expect(playerPokemon.moveset[0]?.moveId).toBe(Moves.SPLASH); - expect(playerPokemon.moveset[1]?.moveId).toBe(Moves.SKETCH); + expect(playerPokemon.moveset[0]?.moveId).toBe(MoveId.SPLASH); + expect(playerPokemon.moveset[1]?.moveId).toBe(MoveId.SKETCH); }); it("Sketch should retrieve the most recent valid move from its target history", async () => { @@ -61,39 +61,41 @@ describe("Moves - Sketch", () => { await game.classicMode.startBattle([Species.REGIELEKI]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - playerPokemon.moveset = [new PokemonMove(Moves.SKETCH), new PokemonMove(Moves.GROWL)]; + playerPokemon.moveset = [new PokemonMove(MoveId.SKETCH), new PokemonMove(MoveId.GROWL)]; - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.move.forceStatusActivation(false); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); await game.toNextTurn(); - game.move.select(Moves.SKETCH); + game.move.select(MoveId.SKETCH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.move.forceStatusActivation(true); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - expect(playerPokemon.moveset[0]?.moveId).toBe(Moves.SPLASH); - expect(playerPokemon.moveset[1]?.moveId).toBe(Moves.GROWL); + expect(playerPokemon.moveset[0]?.moveId).toBe(MoveId.SPLASH); + expect(playerPokemon.moveset[1]?.moveId).toBe(MoveId.GROWL); }); it("should sketch moves that call other moves", async () => { - const randomMoveAttr = allMoves[Moves.METRONOME].findAttr(attr => attr instanceof RandomMoveAttr) as RandomMoveAttr; - vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(Moves.FALSE_SWIPE); + const randomMoveAttr = allMoves[MoveId.METRONOME].findAttr( + attr => attr instanceof RandomMoveAttr, + ) as RandomMoveAttr; + vi.spyOn(randomMoveAttr, "getMoveOverride").mockReturnValue(MoveId.FALSE_SWIPE); - game.override.enemyMoveset([Moves.METRONOME]); + game.override.enemyMoveset([MoveId.METRONOME]); await game.classicMode.startBattle([Species.REGIELEKI]); const playerPokemon = game.scene.getPlayerPokemon()!; - playerPokemon.moveset = [new PokemonMove(Moves.SKETCH)]; + playerPokemon.moveset = [new PokemonMove(MoveId.SKETCH)]; // Opponent uses Metronome -> False Swipe, then player uses Sketch, which should sketch Metronome - game.move.select(Moves.SKETCH); + game.move.select(MoveId.SKETCH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); - expect(playerPokemon.moveset[0]?.moveId).toBe(Moves.METRONOME); + expect(playerPokemon.moveset[0]?.moveId).toBe(MoveId.METRONOME); expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); // Make sure opponent actually used False Swipe }); }); diff --git a/test/moves/skill_swap.test.ts b/test/moves/skill_swap.test.ts index 0955d239352..7c7385c539b 100644 --- a/test/moves/skill_swap.test.ts +++ b/test/moves/skill_swap.test.ts @@ -1,6 +1,6 @@ import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,20 +23,20 @@ describe("Moves - Skill Swap", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SKILL_SWAP]) + .moveset([MoveId.SPLASH, MoveId.SKILL_SWAP]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should swap the two abilities", async () => { game.override.ability(AbilityId.ADAPTABILITY); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.getPlayerPokemon()?.getAbility().id).toBe(AbilityId.BALL_FETCH); @@ -47,7 +47,7 @@ describe("Moves - Skill Swap", () => { game.override.ability(AbilityId.INTIMIDATE); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SKILL_SWAP); + game.move.select(MoveId.SKILL_SWAP); await game.phaseInterceptor.to("BerryPhase"); // player atk should be -1 after opponent gains intimidate and it activates diff --git a/test/moves/sleep_talk.test.ts b/test/moves/sleep_talk.test.ts index 4edc86df24e..6fb456ebe23 100644 --- a/test/moves/sleep_talk.test.ts +++ b/test/moves/sleep_talk.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,14 +25,14 @@ describe("Moves - Sleep Talk", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.SLEEP_TALK]) + .moveset([MoveId.SPLASH, MoveId.SLEEP_TALK]) .statusEffect(StatusEffect.SLEEP) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(100); }); @@ -40,34 +40,34 @@ describe("Moves - Sleep Talk", () => { game.override.statusEffect(StatusEffect.NONE); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SLEEP_TALK); + game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should fail if the user has no valid moves", async () => { - game.override.moveset([Moves.SLEEP_TALK, Moves.DIG, Moves.METRONOME, Moves.SOLAR_BEAM]); + game.override.moveset([MoveId.SLEEP_TALK, MoveId.DIG, MoveId.METRONOME, MoveId.SOLAR_BEAM]); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SLEEP_TALK); + game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should call a random valid move if the user is asleep", async () => { - game.override.moveset([Moves.SLEEP_TALK, Moves.DIG, Moves.FLY, Moves.SWORDS_DANCE]); // Dig and Fly are invalid moves, Swords Dance should always be called + game.override.moveset([MoveId.SLEEP_TALK, MoveId.DIG, MoveId.FLY, MoveId.SWORDS_DANCE]); // Dig and Fly are invalid moves, Swords Dance should always be called await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.SLEEP_TALK); + game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)); }); it("should apply secondary effects of a move", async () => { - game.override.moveset([Moves.SLEEP_TALK, Moves.DIG, Moves.FLY, Moves.WOOD_HAMMER]); // Dig and Fly are invalid moves, Wood Hammer should always be called + game.override.moveset([MoveId.SLEEP_TALK, MoveId.DIG, MoveId.FLY, MoveId.WOOD_HAMMER]); // Dig and Fly are invalid moves, Wood Hammer should always be called await game.classicMode.startBattle(); - game.move.select(Moves.SLEEP_TALK); + game.move.select(MoveId.SLEEP_TALK); await game.toNextTurn(); expect(game.scene.getPlayerPokemon()!.isFullHp()).toBeFalsy(); // Wood Hammer recoil effect should be applied diff --git a/test/moves/solar_beam.test.ts b/test/moves/solar_beam.test.ts index ef32925ceac..b2ab59f61dd 100644 --- a/test/moves/solar_beam.test.ts +++ b/test/moves/solar_beam.test.ts @@ -3,7 +3,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { WeatherType } from "#enums/weather-type"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -26,13 +26,13 @@ describe("Moves - Solar Beam", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.SOLAR_BEAM) + .moveset(MoveId.SOLAR_BEAM) .battleStyle("single") .startingLevel(100) .enemySpecies(Species.SNORLAX) .enemyLevel(100) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should deal damage in two turns if no weather is active", async () => { @@ -41,7 +41,7 @@ describe("Moves - Solar Beam", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SOLAR_BEAM); + game.move.select(MoveId.SOLAR_BEAM); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeDefined(); @@ -54,7 +54,7 @@ describe("Moves - Solar Beam", () => { expect(playerPokemon.getMoveHistory()).toHaveLength(2); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerSolarBeam = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.SOLAR_BEAM); + const playerSolarBeam = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.SOLAR_BEAM); expect(playerSolarBeam?.ppUsed).toBe(1); }); @@ -69,7 +69,7 @@ describe("Moves - Solar Beam", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SOLAR_BEAM); + game.move.select(MoveId.SOLAR_BEAM); await game.phaseInterceptor.to("TurnEndPhase"); expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined(); @@ -77,7 +77,7 @@ describe("Moves - Solar Beam", () => { expect(playerPokemon.getMoveHistory()).toHaveLength(2); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); - const playerSolarBeam = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.SOLAR_BEAM); + const playerSolarBeam = playerPokemon.getMoveset().find(mv => mv && mv.moveId === MoveId.SOLAR_BEAM); expect(playerSolarBeam?.ppUsed).toBe(1); }); @@ -89,11 +89,11 @@ describe("Moves - Solar Beam", () => { await game.classicMode.startBattle([Species.MAGIKARP]); - const solarBeam = allMoves[Moves.SOLAR_BEAM]; + const solarBeam = allMoves[MoveId.SOLAR_BEAM]; vi.spyOn(solarBeam, "calculateBattlePower"); - game.move.select(Moves.SOLAR_BEAM); + game.move.select(MoveId.SOLAR_BEAM); await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/sparkly_swirl.test.ts b/test/moves/sparkly_swirl.test.ts index 0cde057d124..2f7382107af 100644 --- a/test/moves/sparkly_swirl.test.ts +++ b/test/moves/sparkly_swirl.test.ts @@ -2,7 +2,7 @@ import { allMoves } from "#app/data/data-lists"; import { StatusEffect } from "#app/enums/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,12 +25,12 @@ describe("Moves - Sparkly Swirl", () => { game.override .enemySpecies(Species.SHUCKLE) .enemyLevel(100) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) - .moveset([Moves.SPARKLY_SWIRL, Moves.SPLASH]) + .moveset([MoveId.SPARKLY_SWIRL, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH); - vi.spyOn(allMoves[Moves.SPARKLY_SWIRL], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[MoveId.SPARKLY_SWIRL], "accuracy", "get").mockReturnValue(100); }); it("should cure status effect of the user, its ally, and all party pokemon", async () => { @@ -43,9 +43,9 @@ describe("Moves - Sparkly Swirl", () => { vi.spyOn(rightPlayer, "resetStatus"); vi.spyOn(partyPokemon, "resetStatus"); - game.move.select(Moves.SPARKLY_SWIRL, 0, leftOpp.getBattlerIndex()); + game.move.select(MoveId.SPARKLY_SWIRL, 0, leftOpp.getBattlerIndex()); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); @@ -65,9 +65,9 @@ describe("Moves - Sparkly Swirl", () => { vi.spyOn(leftOpp, "resetStatus"); vi.spyOn(rightOpp, "resetStatus"); - game.move.select(Moves.SPARKLY_SWIRL, 0, leftOpp.getBattlerIndex()); + game.move.select(MoveId.SPARKLY_SWIRL, 0, leftOpp.getBattlerIndex()); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.toNextTurn(); expect(leftOpp.resetStatus).toHaveBeenCalledTimes(0); diff --git a/test/moves/spectral_thief.test.ts b/test/moves/spectral_thief.test.ts index e3cd0196fc3..8aef475fb7f 100644 --- a/test/moves/spectral_thief.test.ts +++ b/test/moves/spectral_thief.test.ts @@ -2,7 +2,7 @@ import { AbilityId } from "#enums/ability-id"; import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; import { allMoves } from "#app/data/data-lists"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import GameManager from "#test/testUtils/gameManager"; @@ -26,9 +26,9 @@ describe("Moves - Spectral Thief", () => { game.override .enemySpecies(Species.SHUCKLE) .enemyLevel(100) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) - .moveset([Moves.SPECTRAL_THIEF, Moves.SPLASH]) + .moveset([MoveId.SPECTRAL_THIEF, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH).disableCrits; }); @@ -50,7 +50,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.SPDEF, 0); player.setStatStage(Stat.SPD, -2); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); /** @@ -70,14 +70,14 @@ describe("Moves - Spectral Thief", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - const moveToCheck = allMoves[Moves.SPECTRAL_THIEF]; + const moveToCheck = allMoves[MoveId.SPECTRAL_THIEF]; const dmgBefore = enemy.getAttackDamage({ source: player, move: moveToCheck }).damage; enemy.setStatStage(Stat.ATK, 6); player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(dmgBefore).toBeLessThan(enemy.getAttackDamage({ source: player, move: moveToCheck }).damage); @@ -94,7 +94,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(-6); @@ -112,7 +112,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(6); @@ -130,7 +130,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(3); @@ -148,7 +148,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(3); @@ -166,7 +166,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(3); @@ -174,7 +174,7 @@ describe("Moves - Spectral Thief", () => { }); it("should bypass Substitute.", async () => { - game.override.enemyMoveset(Moves.SUBSTITUTE); + game.override.enemyMoveset(MoveId.SUBSTITUTE); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -184,7 +184,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to(TurnEndPhase); @@ -194,7 +194,7 @@ describe("Moves - Spectral Thief", () => { }); it("should get blocked by protect.", async () => { - game.override.enemyMoveset(Moves.PROTECT); + game.override.enemyMoveset(MoveId.PROTECT); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -204,7 +204,7 @@ describe("Moves - Spectral Thief", () => { player.setStatStage(Stat.ATK, 0); - game.move.select(Moves.SPECTRAL_THIEF); + game.move.select(MoveId.SPECTRAL_THIEF); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStatStage(Stat.ATK)).toEqual(0); diff --git a/test/moves/speed_swap.test.ts b/test/moves/speed_swap.test.ts index a99031321a4..2839004e2e8 100644 --- a/test/moves/speed_swap.test.ts +++ b/test/moves/speed_swap.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; @@ -26,10 +26,10 @@ describe("Moves - Speed Swap", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.NONE) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.MEW) .enemyLevel(200) - .moveset([Moves.SPEED_SWAP]) + .moveset([MoveId.SPEED_SWAP]) .ability(AbilityId.NONE); }); @@ -42,7 +42,7 @@ describe("Moves - Speed Swap", () => { const playerSpd = player.getStat(Stat.SPD, false); const enemySpd = enemy.getStat(Stat.SPD, false); - game.move.select(Moves.SPEED_SWAP); + game.move.select(MoveId.SPEED_SWAP); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.SPD, false)).toBe(enemySpd); diff --git a/test/moves/spikes.test.ts b/test/moves/spikes.test.ts index 594edaec7fd..befc8535d0a 100644 --- a/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,17 +27,17 @@ describe("Moves - Spikes", () => { .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) .ability(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.SPIKES, Moves.SPLASH, Moves.ROAR]); + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.SPIKES, MoveId.SPLASH, MoveId.ROAR]); }); it("should not damage the team that set them", async () => { await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); game.doSwitchPokemon(1); @@ -54,10 +54,10 @@ describe("Moves - Spikes", () => { game.override.startingWave(5); await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.toNextTurn(); - game.move.select(Moves.ROAR); + game.move.select(MoveId.ROAR); await game.toNextTurn(); const enemy = game.scene.getEnemyParty()[0]; @@ -68,10 +68,10 @@ describe("Moves - Spikes", () => { game.override.startingWave(5); await game.classicMode.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); game.forceEnemyToSwitch(); await game.toNextTurn(); @@ -85,8 +85,8 @@ describe("Moves - Spikes", () => { game.override.startingLevel(50); await game.classicMode.startBattle([Species.RAYQUAZA, Species.ROWLET]); - game.move.select(Moves.EARTHQUAKE); - game.move.select(Moves.SPIKES, 1); + game.move.select(MoveId.EARTHQUAKE); + game.move.select(MoveId.SPIKES, 1); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTagOnSide(ArenaTrapTag, ArenaTagSide.ENEMY)).toBeDefined(); diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index 66df40e757b..f78b3fc42d4 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -6,7 +6,7 @@ import type { TurnMove } from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type Move from "#app/data/moves/move"; import { Species } from "#enums/species"; import Phaser from "phaser"; @@ -29,13 +29,13 @@ describe("Moves - Spit Up", () => { }); beforeEach(() => { - spitUp = allMoves[Moves.SPIT_UP]; + spitUp = allMoves[MoveId.SPIT_UP]; game = new GameManager(phaserGame); game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemyAbility(AbilityId.NONE); game.override.enemyLevel(2000); @@ -59,7 +59,7 @@ describe("Moves - Spit Up", () => { expect(stockpilingTag).toBeDefined(); expect(stockpilingTag.stockpiledCount).toBe(stacksToSetup); - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); expect(spitUp.calculateBattlePower).toHaveBeenCalledOnce(); @@ -82,7 +82,7 @@ describe("Moves - Spit Up", () => { expect(stockpilingTag).toBeDefined(); expect(stockpilingTag.stockpiledCount).toBe(stacksToSetup); - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); expect(spitUp.calculateBattlePower).toHaveBeenCalledOnce(); @@ -106,7 +106,7 @@ describe("Moves - Spit Up", () => { expect(stockpilingTag).toBeDefined(); expect(stockpilingTag.stockpiledCount).toBe(stacksToSetup); - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); expect(spitUp.calculateBattlePower).toHaveBeenCalledOnce(); @@ -124,11 +124,11 @@ describe("Moves - Spit Up", () => { const stockpilingTag = pokemon.getTag(StockpilingTag)!; expect(stockpilingTag).toBeUndefined(); - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SPIT_UP, + move: MoveId.SPIT_UP, result: MoveResult.FAIL, targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], }); @@ -146,7 +146,7 @@ describe("Moves - Spit Up", () => { const stockpilingTag = pokemon.getTag(StockpilingTag)!; expect(stockpilingTag).toBeDefined(); - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(MovePhase); expect(pokemon.getStatStage(Stat.DEF)).toBe(1); @@ -155,7 +155,7 @@ describe("Moves - Spit Up", () => { await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SPIT_UP, + move: MoveId.SPIT_UP, result: MoveResult.SUCCESS, targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], }); @@ -183,11 +183,11 @@ describe("Moves - Spit Up", () => { [Stat.SPDEF]: 2, }; - game.move.select(Moves.SPIT_UP); + game.move.select(MoveId.SPIT_UP); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SPIT_UP, + move: MoveId.SPIT_UP, result: MoveResult.SUCCESS, targets: [game.scene.getEnemyPokemon()!.getBattlerIndex()], }); diff --git a/test/moves/spotlight.test.ts b/test/moves/spotlight.test.ts index e617682bdd5..8fe35ff9269 100644 --- a/test/moves/spotlight.test.ts +++ b/test/moves/spotlight.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -27,8 +27,8 @@ describe("Moves - Spotlight", () => { game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.FOLLOW_ME, Moves.SPLASH]); + game.override.moveset([MoveId.FOLLOW_ME, MoveId.RAGE_POWDER, MoveId.SPOTLIGHT, MoveId.QUICK_ATTACK]); + game.override.enemyMoveset([MoveId.FOLLOW_ME, MoveId.SPLASH]); }); test("move should redirect attacks to the target", async () => { @@ -36,11 +36,11 @@ describe("Moves - Spotlight", () => { const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SPOTLIGHT, 0, BattlerIndex.ENEMY); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPOTLIGHT, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase, false); @@ -53,11 +53,11 @@ describe("Moves - Spotlight", () => { const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.SPOTLIGHT, 0, BattlerIndex.ENEMY); - game.move.select(Moves.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); + game.move.select(MoveId.SPOTLIGHT, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.QUICK_ATTACK, 1, BattlerIndex.ENEMY_2); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.FOLLOW_ME); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.FOLLOW_ME); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/steamroller.test.ts b/test/moves/steamroller.test.ts index f2e688f7857..7d24e2537d2 100644 --- a/test/moves/steamroller.test.ts +++ b/test/moves/steamroller.test.ts @@ -3,7 +3,7 @@ import { allMoves } from "#app/data/data-lists"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { DamageCalculationResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,26 +25,26 @@ describe("Moves - Steamroller", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([Moves.STEAMROLLER]).battleStyle("single").enemyAbility(AbilityId.BALL_FETCH); + game.override.moveset([MoveId.STEAMROLLER]).battleStyle("single").enemyAbility(AbilityId.BALL_FETCH); }); it("should always hit a minimzed target with double damage", async () => { - game.override.enemySpecies(Species.DITTO).enemyMoveset(Moves.MINIMIZE); + game.override.enemySpecies(Species.DITTO).enemyMoveset(MoveId.MINIMIZE); await game.classicMode.startBattle([Species.IRON_BOULDER]); const ditto = game.scene.getEnemyPokemon()!; vi.spyOn(ditto, "getAttackDamage"); ditto.hp = 5000; - const steamroller = allMoves[Moves.STEAMROLLER]; + const steamroller = allMoves[MoveId.STEAMROLLER]; vi.spyOn(steamroller, "calculateBattleAccuracy"); const ironBoulder = game.scene.getPlayerPokemon()!; vi.spyOn(ironBoulder, "getAccuracyMultiplier"); // Turn 1 - game.move.select(Moves.STEAMROLLER); + game.move.select(MoveId.STEAMROLLER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); // Turn 2 - game.move.select(Moves.STEAMROLLER); + game.move.select(MoveId.STEAMROLLER); await game.toNextTurn(); const [dmgCalcTurn1, dmgCalcTurn2]: DamageCalculationResult[] = vi diff --git a/test/moves/stockpile.test.ts b/test/moves/stockpile.test.ts index 810d876b6ce..7c9c9316df7 100644 --- a/test/moves/stockpile.test.ts +++ b/test/moves/stockpile.test.ts @@ -5,7 +5,7 @@ import { MoveResult } from "#app/field/pokemon"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,11 +30,11 @@ describe("Moves - Stockpile", () => { game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.enemyAbility(AbilityId.NONE); game.override.startingLevel(2000); - game.override.moveset([Moves.STOCKPILE, Moves.SPLASH]); + game.override.moveset([MoveId.STOCKPILE, MoveId.SPLASH]); game.override.ability(AbilityId.NONE); }); @@ -56,7 +56,7 @@ describe("Moves - Stockpile", () => { await game.phaseInterceptor.to(CommandPhase); } - game.move.select(Moves.STOCKPILE); + game.move.select(MoveId.STOCKPILE); await game.phaseInterceptor.to(TurnInitPhase); const stockpilingTag = user.getTag(StockpilingTag)!; @@ -75,7 +75,7 @@ describe("Moves - Stockpile", () => { expect(stockpilingTag.stockpiledCount).toBe(3); expect(user.getMoveHistory().at(-1)).toMatchObject({ result: MoveResult.FAIL, - move: Moves.STOCKPILE, + move: MoveId.STOCKPILE, targets: [user.getBattlerIndex()], }); } @@ -94,7 +94,7 @@ describe("Moves - Stockpile", () => { expect(user.getStatStage(Stat.DEF)).toBe(6); expect(user.getStatStage(Stat.SPDEF)).toBe(6); - game.move.select(Moves.STOCKPILE); + game.move.select(MoveId.STOCKPILE); await game.phaseInterceptor.to(TurnInitPhase); const stockpilingTag = user.getTag(StockpilingTag)!; @@ -106,7 +106,7 @@ describe("Moves - Stockpile", () => { // do it again, just for good measure await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.STOCKPILE); + game.move.select(MoveId.STOCKPILE); await game.phaseInterceptor.to(TurnInitPhase); const stockpilingTagAgain = user.getTag(StockpilingTag)!; diff --git a/test/moves/struggle.test.ts b/test/moves/struggle.test.ts index 35cb5c49451..0dd95a3e060 100644 --- a/test/moves/struggle.test.ts +++ b/test/moves/struggle.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -22,21 +22,21 @@ describe("Moves - Struggle", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should not have its power boosted by adaptability or stab", async () => { - game.override.moveset([Moves.STRUGGLE]).ability(AbilityId.ADAPTABILITY); + game.override.moveset([MoveId.STRUGGLE]).ability(AbilityId.ADAPTABILITY); await game.classicMode.startBattle([Species.RATTATA]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.STRUGGLE); + game.move.select(MoveId.STRUGGLE); const stabSpy = vi.spyOn(enemy, "calculateStabMultiplier"); @@ -48,11 +48,11 @@ describe("Moves - Struggle", () => { }); it("should ignore type effectiveness", async () => { - game.override.moveset([Moves.STRUGGLE]); + game.override.moveset([MoveId.STRUGGLE]); await game.classicMode.startBattle([Species.GASTLY]); const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.STRUGGLE); + game.move.select(MoveId.STRUGGLE); const moveEffectivenessSpy = vi.spyOn(enemy, "getMoveEffectiveness"); diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 15665472ca9..4bad56a9147 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -12,7 +12,7 @@ import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; @@ -38,10 +38,10 @@ describe("Moves - Substitute", () => { game.override .battleStyle("single") - .moveset([Moves.SUBSTITUTE, Moves.SWORDS_DANCE, Moves.TACKLE, Moves.SPLASH]) + .moveset([MoveId.SUBSTITUTE, MoveId.SWORDS_DANCE, MoveId.TACKLE, MoveId.SPLASH]) .enemySpecies(Species.SNORLAX) .enemyAbility(AbilityId.INSOMNIA) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingLevel(100) .enemyLevel(100); }); @@ -51,7 +51,7 @@ describe("Moves - Substitute", () => { const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -59,13 +59,13 @@ describe("Moves - Substitute", () => { }); it("should redirect enemy attack damage to the Substitute doll", async () => { - game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyMoveset(MoveId.TACKLE); await game.classicMode.startBattle([Species.SKARMORY]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -81,14 +81,14 @@ describe("Moves - Substitute", () => { it("should fade after redirecting more damage than its remaining HP", async () => { // Giga Impact OHKOs Magikarp if substitute isn't up - game.override.enemyMoveset(Moves.GIGA_IMPACT); - vi.spyOn(allMoves[Moves.GIGA_IMPACT], "accuracy", "get").mockReturnValue(100); + game.override.enemyMoveset(MoveId.GIGA_IMPACT); + vi.spyOn(allMoves[MoveId.GIGA_IMPACT], "accuracy", "get").mockReturnValue(100); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -103,13 +103,13 @@ describe("Moves - Substitute", () => { }); it("should block stat changes from status moves", async () => { - game.override.enemyMoveset(Moves.CHARM); + game.override.enemyMoveset(MoveId.CHARM); await game.classicMode.startBattle([Species.MAGIKARP]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("BerryPhase", false); @@ -118,13 +118,13 @@ describe("Moves - Substitute", () => { }); it("should be bypassed by sound-based moves", async () => { - game.override.enemyMoveset(Moves.ECHOED_VOICE); + game.override.enemyMoveset(MoveId.ECHOED_VOICE); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase"); @@ -138,14 +138,14 @@ describe("Moves - Substitute", () => { }); it("should be bypassed by attackers with Infiltrator", async () => { - game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyMoveset(MoveId.TACKLE); game.override.enemyAbility(AbilityId.INFILTRATOR); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase"); @@ -163,12 +163,12 @@ describe("Moves - Substitute", () => { const leadPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("MoveEndPhase"); await game.toNextTurn(); - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -176,16 +176,16 @@ describe("Moves - Substitute", () => { }); it("shouldn't block moves that target the user's side of the field", async () => { - game.override.moveset(Moves.LIGHT_SCREEN); + game.override.moveset(MoveId.LIGHT_SCREEN); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(leadPokemon, "getMoveEffectiveness"); - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.LIGHT_SCREEN); + game.move.select(MoveId.LIGHT_SCREEN); await game.toNextTurn(); @@ -194,14 +194,14 @@ describe("Moves - Substitute", () => { }); it("shouldn't block the opponent from setting hazards", async () => { - game.override.enemyMoveset(Moves.STEALTH_ROCK); + game.override.enemyMoveset(MoveId.STEALTH_ROCK); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(leadPokemon, "getMoveEffectiveness"); - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.toNextTurn(); @@ -210,17 +210,17 @@ describe("Moves - Substitute", () => { }); it("shouldn't block moves that target both sides of the field", async () => { - game.override.moveset(Moves.TRICK_ROOM).enemyMoveset(Moves.GRAVITY); + game.override.moveset(MoveId.TRICK_ROOM).enemyMoveset(MoveId.GRAVITY); await game.classicMode.startBattle([Species.BLASTOISE]); const pokemon = game.scene.getField(true); pokemon.forEach(p => { vi.spyOn(p, "getMoveEffectiveness"); - p.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, p.id); + p.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, p.id); }); - game.move.select(Moves.TRICK_ROOM); + game.move.select(MoveId.TRICK_ROOM); await game.toNextTurn(); @@ -230,7 +230,7 @@ describe("Moves - Substitute", () => { }); it("should protect the user from flinching", async () => { - game.override.enemyMoveset(Moves.FAKE_OUT); + game.override.enemyMoveset(MoveId.FAKE_OUT); game.override.startingLevel(1); // Ensures the Substitute will break await game.classicMode.startBattle([Species.BLASTOISE]); @@ -238,9 +238,9 @@ describe("Moves - Substitute", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("BerryPhase", false); @@ -248,16 +248,16 @@ describe("Moves - Substitute", () => { }); it("should protect the user from being trapped", async () => { - vi.spyOn(allMoves[Moves.SAND_TOMB], "accuracy", "get").mockReturnValue(100); - game.override.enemyMoveset(Moves.SAND_TOMB); + vi.spyOn(allMoves[MoveId.SAND_TOMB], "accuracy", "get").mockReturnValue(100); + game.override.enemyMoveset(MoveId.SAND_TOMB); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -265,16 +265,16 @@ describe("Moves - Substitute", () => { }); it("should prevent the user's stats from being lowered", async () => { - vi.spyOn(allMoves[Moves.LIQUIDATION], "chance", "get").mockReturnValue(100); - game.override.enemyMoveset(Moves.LIQUIDATION); + vi.spyOn(allMoves[MoveId.LIQUIDATION], "chance", "get").mockReturnValue(100); + game.override.enemyMoveset(MoveId.LIQUIDATION); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -282,15 +282,15 @@ describe("Moves - Substitute", () => { }); it("should protect the user from being afflicted with status effects", async () => { - game.override.enemyMoveset(Moves.NUZZLE); + game.override.enemyMoveset(MoveId.NUZZLE); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -298,17 +298,17 @@ describe("Moves - Substitute", () => { }); it("should prevent the user's items from being stolen", async () => { - game.override.enemyMoveset(Moves.THIEF); - vi.spyOn(allMoves[Moves.THIEF], "attrs", "get").mockReturnValue([new StealHeldItemChanceAttr(1.0)]); // give Thief 100% steal rate + game.override.enemyMoveset(MoveId.THIEF); + vi.spyOn(allMoves[MoveId.THIEF], "attrs", "get").mockReturnValue([new StealHeldItemChanceAttr(1.0)]); // give Thief 100% steal rate game.override.startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase", false); @@ -316,17 +316,17 @@ describe("Moves - Substitute", () => { }); it("should prevent the user's items from being removed", async () => { - game.override.moveset([Moves.KNOCK_OFF]); + game.override.moveset([MoveId.KNOCK_OFF]); game.override.enemyHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); await game.classicMode.startBattle([Species.BLASTOISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, enemyPokemon.id); + enemyPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, enemyPokemon.id); const enemyNumItems = enemyPokemon.getHeldItems().length; - game.move.select(Moves.KNOCK_OFF); + game.move.select(MoveId.KNOCK_OFF); await game.phaseInterceptor.to("MoveEndPhase", false); @@ -334,7 +334,7 @@ describe("Moves - Substitute", () => { }); it("move effect should prevent the user's berries from being stolen and eaten", async () => { - game.override.enemyMoveset(Moves.BUG_BITE); + game.override.enemyMoveset(MoveId.BUG_BITE); game.override.startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); await game.classicMode.startBattle([Species.BLASTOISE]); @@ -342,9 +342,9 @@ describe("Moves - Substitute", () => { const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.TACKLE); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("MoveEndPhase", false); const enemyPostAttackHp = enemyPokemon.hp; @@ -356,15 +356,15 @@ describe("Moves - Substitute", () => { }); it("should prevent the user's stats from being reset by Clear Smog", async () => { - game.override.enemyMoveset(Moves.CLEAR_SMOG); + game.override.enemyMoveset(MoveId.CLEAR_SMOG); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to("BerryPhase", false); @@ -372,16 +372,16 @@ describe("Moves - Substitute", () => { }); it("should prevent the user from becoming confused", async () => { - game.override.enemyMoveset(Moves.MAGICAL_TORQUE); - vi.spyOn(allMoves[Moves.MAGICAL_TORQUE], "chance", "get").mockReturnValue(100); + game.override.enemyMoveset(MoveId.MAGICAL_TORQUE); + vi.spyOn(allMoves[MoveId.MAGICAL_TORQUE], "chance", "get").mockReturnValue(100); await game.classicMode.startBattle([Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); - game.move.select(Moves.SWORDS_DANCE); + game.move.select(MoveId.SWORDS_DANCE); await game.phaseInterceptor.to("BerryPhase", false); @@ -390,13 +390,13 @@ describe("Moves - Substitute", () => { }); it("should transfer to the switched in Pokemon when the source uses Baton Pass", async () => { - game.override.moveset([Moves.SUBSTITUTE, Moves.BATON_PASS]); + game.override.moveset([MoveId.SUBSTITUTE, MoveId.BATON_PASS]); await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; - leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, leadPokemon.id); + leadPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, leadPokemon.id); // Simulate a Baton switch for the player this turn game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { @@ -412,14 +412,14 @@ describe("Moves - Substitute", () => { }); it("should prevent the source's Rough Skin from activating when hit", async () => { - game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyMoveset(MoveId.TACKLE); game.override.ability(AbilityId.ROUGH_SKIN); await game.classicMode.startBattle([Species.BLASTOISE]); const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to("BerryPhase", false); @@ -427,20 +427,20 @@ describe("Moves - Substitute", () => { }); it("should prevent the source's Focus Punch from failing when hit", async () => { - game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.FOCUS_PUNCH]); + game.override.enemyMoveset(MoveId.TACKLE); + game.override.moveset([MoveId.FOCUS_PUNCH]); // Make Focus Punch 40 power to avoid a KO - vi.spyOn(allMoves[Moves.FOCUS_PUNCH], "calculateBattlePower").mockReturnValue(40); + vi.spyOn(allMoves[MoveId.FOCUS_PUNCH], "calculateBattlePower").mockReturnValue(40); await game.classicMode.startBattle([Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, playerPokemon.id); + playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); - game.move.select(Moves.FOCUS_PUNCH); + game.move.select(MoveId.FOCUS_PUNCH); await game.phaseInterceptor.to("BerryPhase", false); @@ -449,16 +449,16 @@ describe("Moves - Substitute", () => { }); it("should not allow Shell Trap to activate when attacked", async () => { - game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.SHELL_TRAP]); + game.override.enemyMoveset(MoveId.TACKLE); + game.override.moveset([MoveId.SHELL_TRAP]); await game.classicMode.startBattle([Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; - playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, playerPokemon.id); + playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); - game.move.select(Moves.SHELL_TRAP); + game.move.select(MoveId.SHELL_TRAP); await game.phaseInterceptor.to("BerryPhase", false); @@ -466,17 +466,17 @@ describe("Moves - Substitute", () => { }); it("should not allow Beak Blast to burn opponents when hit", async () => { - game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.BEAK_BLAST]); + game.override.enemyMoveset(MoveId.TACKLE); + game.override.moveset([MoveId.BEAK_BLAST]); await game.classicMode.startBattle([Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, playerPokemon.id); + playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); - game.move.select(Moves.BEAK_BLAST); + game.move.select(MoveId.BEAK_BLAST); await game.phaseInterceptor.to("MoveEndPhase"); @@ -484,17 +484,17 @@ describe("Moves - Substitute", () => { }); it("should cause incoming attacks to not activate Counter", async () => { - game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.COUNTER]); + game.override.enemyMoveset(MoveId.TACKLE); + game.override.moveset([MoveId.COUNTER]); await game.classicMode.startBattle([Species.BLASTOISE]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, playerPokemon.id); + playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); - game.move.select(Moves.COUNTER); + game.move.select(MoveId.COUNTER); await game.phaseInterceptor.to("BerryPhase", false); @@ -503,15 +503,15 @@ describe("Moves - Substitute", () => { }); it("should prevent Sappy Seed from applying its Leech Seed effect to the user", async () => { - game.override.enemyMoveset(Moves.SAPPY_SEED); + game.override.enemyMoveset(MoveId.SAPPY_SEED); await game.classicMode.startBattle([Species.CHARIZARD]); const playerPokemon = game.scene.getPlayerPokemon()!; - playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, Moves.NONE, playerPokemon.id); + playerPokemon.addTag(BattlerTagType.SUBSTITUTE, 0, MoveId.NONE, playerPokemon.id); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); // enemy uses Sappy Seed first await game.move.forceHit(); // forces Sappy Seed to hit diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index ed6c81a3d99..979d5f8bda1 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -6,7 +6,7 @@ import { MoveResult } from "#app/field/pokemon"; import { MovePhase } from "#app/phases/move-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -30,10 +30,10 @@ describe("Moves - Swallow", () => { game.override .battleStyle("single") .enemySpecies(Species.RATTATA) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.NONE) .enemyLevel(2000) - .moveset(Moves.SWALLOW) + .moveset(MoveId.SWALLOW) .ability(AbilityId.NONE); }); @@ -56,7 +56,7 @@ describe("Moves - Swallow", () => { vi.spyOn(pokemon, "heal"); - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.heal).toHaveBeenCalledOnce(); @@ -84,7 +84,7 @@ describe("Moves - Swallow", () => { vi.spyOn(pokemon, "heal"); - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.heal).toHaveBeenCalledOnce(); @@ -113,7 +113,7 @@ describe("Moves - Swallow", () => { vi.spyOn(pokemon, "heal"); - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.heal).toHaveBeenCalledOnce(); @@ -131,11 +131,11 @@ describe("Moves - Swallow", () => { const stockpilingTag = pokemon.getTag(StockpilingTag)!; expect(stockpilingTag).toBeUndefined(); - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SWALLOW, + move: MoveId.SWALLOW, result: MoveResult.FAIL, targets: [pokemon.getBattlerIndex()], }); @@ -151,7 +151,7 @@ describe("Moves - Swallow", () => { const stockpilingTag = pokemon.getTag(StockpilingTag)!; expect(stockpilingTag).toBeDefined(); - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(MovePhase); expect(pokemon.getStatStage(Stat.DEF)).toBe(1); @@ -160,7 +160,7 @@ describe("Moves - Swallow", () => { await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SWALLOW, + move: MoveId.SWALLOW, result: MoveResult.SUCCESS, targets: [pokemon.getBattlerIndex()], }); @@ -186,12 +186,12 @@ describe("Moves - Swallow", () => { [Stat.SPDEF]: 2, }; - game.move.select(Moves.SWALLOW); + game.move.select(MoveId.SWALLOW); await game.phaseInterceptor.to(TurnInitPhase); expect(pokemon.getMoveHistory().at(-1)).toMatchObject({ - move: Moves.SWALLOW, + move: MoveId.SWALLOW, result: MoveResult.SUCCESS, targets: [pokemon.getBattlerIndex()], }); diff --git a/test/moves/synchronoise.test.ts b/test/moves/synchronoise.test.ts index 599e6885d49..9b5a2df8c99 100644 --- a/test/moves/synchronoise.test.ts +++ b/test/moves/synchronoise.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { PokemonType } from "#enums/pokemon-type"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -23,13 +23,13 @@ describe("Moves - Synchronoise", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SYNCHRONOISE]) + .moveset([MoveId.SYNCHRONOISE]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should consider the user's tera type if it is terastallized", async () => { @@ -40,7 +40,7 @@ describe("Moves - Synchronoise", () => { // force the player to be terastallized playerPokemon.teraType = PokemonType.WATER; playerPokemon.isTerastallized = true; - game.move.select(Moves.SYNCHRONOISE); + game.move.select(MoveId.SYNCHRONOISE); await game.phaseInterceptor.to("BerryPhase"); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); }); diff --git a/test/moves/syrup_bomb.test.ts b/test/moves/syrup_bomb.test.ts index a8418fb0dbb..62f0a2ce4f4 100644 --- a/test/moves/syrup_bomb.test.ts +++ b/test/moves/syrup_bomb.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -31,8 +31,8 @@ describe("Moves - SYRUP BOMB", () => { .ability(AbilityId.BALL_FETCH) .startingLevel(30) .enemyLevel(100) - .moveset([Moves.SYRUP_BOMB, Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.SYRUP_BOMB, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH); }); //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/syrup_bomb_(move) @@ -43,19 +43,19 @@ describe("Moves - SYRUP BOMB", () => { const targetPokemon = game.scene.getEnemyPokemon()!; expect(targetPokemon.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.SYRUP_BOMB); + game.move.select(MoveId.SYRUP_BOMB); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.toNextTurn(); expect(targetPokemon.getTag(BattlerTagType.SYRUP_BOMB)).toBeDefined(); expect(targetPokemon.getStatStage(Stat.SPD)).toBe(-1); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(targetPokemon.getTag(BattlerTagType.SYRUP_BOMB)).toBeDefined(); expect(targetPokemon.getStatStage(Stat.SPD)).toBe(-2); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(targetPokemon.getTag(BattlerTagType.SYRUP_BOMB)).toBeUndefined(); expect(targetPokemon.getStatStage(Stat.SPD)).toBe(-3); @@ -67,7 +67,7 @@ describe("Moves - SYRUP BOMB", () => { const targetPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.SYRUP_BOMB); + game.move.select(MoveId.SYRUP_BOMB); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.toNextTurn(); @@ -79,7 +79,7 @@ describe("Moves - SYRUP BOMB", () => { it("stops lowering the target's speed if the user leaves the field", async () => { await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); - game.move.select(Moves.SYRUP_BOMB); + game.move.select(MoveId.SYRUP_BOMB); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.toNextTurn(); diff --git a/test/moves/tackle.test.ts b/test/moves/tackle.test.ts index ecd8750d17f..d933a993a40 100644 --- a/test/moves/tackle.test.ts +++ b/test/moves/tackle.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,19 +23,19 @@ describe("Moves - Tackle", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; game.override .battleStyle("single") .enemySpecies(Species.MAGIKARP) .startingLevel(1) .startingWave(97) .moveset([moveToUse]) - .enemyMoveset(Moves.GROWTH) + .enemyMoveset(MoveId.GROWTH) .disableCrits(); }); it("TACKLE against ghost", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; game.override.enemySpecies(Species.GENGAR); await game.classicMode.startBattle([Species.MIGHTYENA]); const hpOpponent = game.scene.currentBattle.enemyParty[0].hp; @@ -46,7 +46,7 @@ describe("Moves - Tackle", () => { }, 20000); it("TACKLE against not resistant", async () => { - const moveToUse = Moves.TACKLE; + const moveToUse = MoveId.TACKLE; await game.classicMode.startBattle([Species.MIGHTYENA]); game.scene.currentBattle.enemyParty[0].stats[Stat.DEF] = 50; game.scene.getPlayerParty()[0].stats[Stat.ATK] = 50; diff --git a/test/moves/tail_whip.test.ts b/test/moves/tail_whip.test.ts index 8cb6fa65eeb..4de632098d6 100644 --- a/test/moves/tail_whip.test.ts +++ b/test/moves/tail_whip.test.ts @@ -1,7 +1,7 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,18 +24,18 @@ describe("Moves - Tail whip", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.TAIL_WHIP; + const moveToUse = MoveId.TAIL_WHIP; game.override.battleStyle("single"); game.override.enemySpecies(Species.RATTATA); game.override.enemyAbility(AbilityId.INSOMNIA); game.override.ability(AbilityId.INSOMNIA); game.override.startingLevel(2000); game.override.moveset([moveToUse]); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); }); it("should lower DEF stat stage by 1", async () => { - const moveToUse = Moves.TAIL_WHIP; + const moveToUse = MoveId.TAIL_WHIP; await game.classicMode.startBattle([Species.MIGHTYENA, Species.MIGHTYENA]); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/moves/tailwind.test.ts b/test/moves/tailwind.test.ts index d0ce3796eab..082dcae9d7b 100644 --- a/test/moves/tailwind.test.ts +++ b/test/moves/tailwind.test.ts @@ -1,7 +1,7 @@ import { ArenaTagSide } from "#app/data/arena-tag"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; @@ -26,8 +26,8 @@ describe("Moves - Tailwind", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .moveset([Moves.TAILWIND, Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.TAILWIND, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.BALL_FETCH) .ability(AbilityId.BALL_FETCH); }); @@ -43,8 +43,8 @@ describe("Moves - Tailwind", () => { expect(magikarp.getEffectiveStat(Stat.SPD)).equal(magikarpSpd); expect(meowth.getEffectiveStat(Stat.SPD)).equal(meowthSpd); - game.move.select(Moves.TAILWIND); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TAILWIND); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -58,19 +58,19 @@ describe("Moves - Tailwind", () => { await game.classicMode.startBattle([Species.MAGIKARP]); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.toNextTurn(); expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeUndefined(); @@ -92,7 +92,7 @@ describe("Moves - Tailwind", () => { expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeUndefined(); expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.ENEMY)).toBeUndefined(); - game.move.select(Moves.TAILWIND); + game.move.select(MoveId.TAILWIND); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/tar_shot.test.ts b/test/moves/tar_shot.test.ts index 97bd50c7009..21ce154402a 100644 --- a/test/moves/tar_shot.test.ts +++ b/test/moves/tar_shot.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; @@ -26,10 +26,10 @@ describe("Moves - Tar Shot", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.TANGELA) .enemyLevel(1000) - .moveset([Moves.TAR_SHOT, Moves.FIRE_PUNCH]) + .moveset([MoveId.TAR_SHOT, MoveId.FIRE_PUNCH]) .disableCrits(); }); @@ -40,14 +40,14 @@ describe("Moves - Tar Shot", () => { vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.TAR_SHOT); + game.move.select(MoveId.TAR_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.SPD)).toBe(-1); await game.toNextTurn(); - game.move.select(Moves.FIRE_PUNCH); + game.move.select(MoveId.FIRE_PUNCH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -61,21 +61,21 @@ describe("Moves - Tar Shot", () => { vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.TAR_SHOT); + game.move.select(MoveId.TAR_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.SPD)).toBe(-1); await game.toNextTurn(); - game.move.select(Moves.TAR_SHOT); + game.move.select(MoveId.TAR_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.SPD)).toBe(-2); await game.toNextTurn(); - game.move.select(Moves.FIRE_PUNCH); + game.move.select(MoveId.FIRE_PUNCH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -92,14 +92,14 @@ describe("Moves - Tar Shot", () => { vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.TAR_SHOT); + game.move.select(MoveId.TAR_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.SPD)).toBe(-1); await game.toNextTurn(); - game.move.select(Moves.FIRE_PUNCH); + game.move.select(MoveId.FIRE_PUNCH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -114,7 +114,7 @@ describe("Moves - Tar Shot", () => { vi.spyOn(enemy, "getMoveEffectiveness"); - game.move.select(Moves.TAR_SHOT); + game.move.select(MoveId.TAR_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.SPD)).toBe(-1); @@ -124,7 +124,7 @@ describe("Moves - Tar Shot", () => { enemy.teraType = PokemonType.GRASS; enemy.isTerastallized = true; - game.move.select(Moves.FIRE_PUNCH); + game.move.select(MoveId.FIRE_PUNCH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/moves/taunt.test.ts b/test/moves/taunt.test.ts index b7b7911895f..ae51ce121cf 100644 --- a/test/moves/taunt.test.ts +++ b/test/moves/taunt.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; @@ -25,9 +25,9 @@ describe("Moves - Taunt", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.TAUNT, Moves.SPLASH]) + .enemyMoveset([MoveId.TAUNT, MoveId.SPLASH]) .enemySpecies(Species.SHUCKLE) - .moveset([Moves.GROWL]); + .moveset([MoveId.GROWL]); }); it("Pokemon should not be able to use Status Moves", async () => { @@ -36,19 +36,19 @@ describe("Moves - Taunt", () => { const playerPokemon = game.scene.getPlayerPokemon()!; // First turn, Player Pokemon succeeds using Growl without Taunt - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.TAUNT); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.TAUNT); await game.toNextTurn(); const move1 = playerPokemon.getLastXMoves(1)[0]!; - expect(move1.move).toBe(Moves.GROWL); + expect(move1.move).toBe(MoveId.GROWL); expect(move1.result).toBe(MoveResult.SUCCESS); expect(playerPokemon?.getTag(BattlerTagType.TAUNT)).toBeDefined(); // Second turn, Taunt forces Struggle to occur - game.move.select(Moves.GROWL); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.GROWL); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const move2 = playerPokemon.getLastXMoves(1)[0]!; - expect(move2.move).toBe(Moves.STRUGGLE); + expect(move2.move).toBe(MoveId.STRUGGLE); }); }); diff --git a/test/moves/telekinesis.test.ts b/test/moves/telekinesis.test.ts index d2827a0c063..148da32dab3 100644 --- a/test/moves/telekinesis.test.ts +++ b/test/moves/telekinesis.test.ts @@ -1,7 +1,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { MoveResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; @@ -26,12 +26,12 @@ describe("Moves - Telekinesis", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TELEKINESIS, Moves.TACKLE, Moves.MUD_SHOT, Moves.SMACK_DOWN]) + .moveset([MoveId.TELEKINESIS, MoveId.TACKLE, MoveId.MUD_SHOT, MoveId.SMACK_DOWN]) .battleStyle("single") .enemySpecies(Species.SNORLAX) .enemyLevel(60) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.SPLASH]); + .enemyMoveset([MoveId.SPLASH]); }); it("Telekinesis makes the affected vulnerable to most attacking moves regardless of accuracy", async () => { @@ -39,14 +39,14 @@ describe("Moves - Telekinesis", () => { const enemyOpponent = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TELEKINESIS); + game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); await game.toNextTurn(); - vi.spyOn(allMoves[Moves.TACKLE], "accuracy", "get").mockReturnValue(0); - game.move.select(Moves.TACKLE); + vi.spyOn(allMoves[MoveId.TACKLE], "accuracy", "get").mockReturnValue(0); + game.move.select(MoveId.TACKLE); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.isFullHp()).toBe(false); }); @@ -56,25 +56,25 @@ describe("Moves - Telekinesis", () => { const enemyOpponent = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TELEKINESIS); + game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); await game.toNextTurn(); - vi.spyOn(allMoves[Moves.MUD_SHOT], "accuracy", "get").mockReturnValue(100); - game.move.select(Moves.MUD_SHOT); + vi.spyOn(allMoves[MoveId.MUD_SHOT], "accuracy", "get").mockReturnValue(100); + game.move.select(MoveId.MUD_SHOT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.isFullHp()).toBe(true); }); it("Telekinesis can still affect Pokemon that have been transformed into invalid Pokemon", async () => { - game.override.enemyMoveset(Moves.TRANSFORM); + game.override.enemyMoveset(MoveId.TRANSFORM); await game.classicMode.startBattle([Species.DIGLETT]); const enemyOpponent = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TELEKINESIS); + game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); @@ -86,35 +86,35 @@ describe("Moves - Telekinesis", () => { const enemyOpponent = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TELEKINESIS); + game.move.select(MoveId.TELEKINESIS); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); await game.toNextTurn(); - game.move.select(Moves.SMACK_DOWN); + game.move.select(MoveId.SMACK_DOWN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeUndefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeUndefined(); }); it("Ingrain will remove the floating effect of Telekinesis, but not the 100% hit", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.INGRAIN]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.INGRAIN]); await game.classicMode.startBattle([Species.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyOpponent = game.scene.getEnemyPokemon()!; - game.move.select(Moves.TELEKINESIS); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.TELEKINESIS); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); await game.toNextTurn(); - vi.spyOn(allMoves[Moves.MUD_SHOT], "accuracy", "get").mockReturnValue(0); - game.move.select(Moves.MUD_SHOT); - await game.move.selectEnemyMove(Moves.INGRAIN); + vi.spyOn(allMoves[MoveId.MUD_SHOT], "accuracy", "get").mockReturnValue(0); + game.move.select(MoveId.MUD_SHOT); + await game.move.selectEnemyMove(MoveId.INGRAIN); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); expect(enemyOpponent.getTag(BattlerTagType.INGRAIN)).toBeDefined(); @@ -125,12 +125,12 @@ describe("Moves - Telekinesis", () => { it("should not be baton passed onto a mega gengar", async () => { game.override - .moveset([Moves.BATON_PASS]) - .enemyMoveset([Moves.TELEKINESIS]) + .moveset([MoveId.BATON_PASS]) + .enemyMoveset([MoveId.TELEKINESIS]) .starterForms({ [Species.GENGAR]: 1 }); await game.classicMode.startBattle([Species.MAGIKARP, Species.GENGAR]); - game.move.select(Moves.BATON_PASS); + game.move.select(MoveId.BATON_PASS); game.doSelectPartyPokemon(1); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index 5baef1fe2a7..ce2d72cc229 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -5,7 +5,7 @@ import { allMoves } from "#app/data/data-lists"; import type Move from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -22,7 +22,7 @@ describe("Moves - Tera Blast", () => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, }); - moveToCheck = allMoves[Moves.TERA_BLAST]; + moveToCheck = allMoves[MoveId.TERA_BLAST]; teraBlastAttr = moveToCheck.getAttrs(TeraMoveCategoryAttr)[0]; }); @@ -37,10 +37,10 @@ describe("Moves - Tera Blast", () => { .battleStyle("single") .disableCrits() .starterSpecies(Species.FEEBAS) - .moveset([Moves.TERA_BLAST]) + .moveset([MoveId.TERA_BLAST]) .ability(AbilityId.BALL_FETCH) .enemySpecies(Species.MAGIKARP) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyAbility(AbilityId.STURDY) .enemyLevel(50); @@ -57,7 +57,7 @@ describe("Moves - Tera Blast", () => { playerPokemon.teraType = PokemonType.FIGHTING; playerPokemon.isTerastallized = true; - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -71,7 +71,7 @@ describe("Moves - Tera Blast", () => { playerPokemon.teraType = PokemonType.STELLAR; playerPokemon.isTerastallized = true; - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -89,7 +89,7 @@ describe("Moves - Tera Blast", () => { const spy = vi.spyOn(enemyPokemon, "getMoveEffectiveness"); enemyPokemon.isTerastallized = true; - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -106,7 +106,7 @@ describe("Moves - Tera Blast", () => { vi.spyOn(teraBlastAttr, "apply"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.toNextTurn(); expect(teraBlastAttr.apply).toHaveLastReturnedWith(true); }); @@ -120,13 +120,13 @@ describe("Moves - Tera Blast", () => { vi.spyOn(teraBlastAttr, "apply"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.toNextTurn(); expect(teraBlastAttr.apply).toHaveLastReturnedWith(false); }); it("should stay as a special move if ATK turns lower than SPATK mid-turn", async () => { - game.override.enemyMoveset([Moves.CHARM]); + game.override.enemyMoveset([MoveId.CHARM]); await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -135,7 +135,7 @@ describe("Moves - Tera Blast", () => { vi.spyOn(teraBlastAttr, "apply"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(teraBlastAttr.apply).toHaveLastReturnedWith(false); @@ -154,7 +154,7 @@ describe("Moves - Tera Blast", () => { vi.spyOn(teraBlastAttr, "apply"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); @@ -171,7 +171,7 @@ describe("Moves - Tera Blast", () => { vi.spyOn(teraBlastAttr, "apply"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toNextTurn(); expect(teraBlastAttr.apply).toHaveLastReturnedWith(false); @@ -184,7 +184,7 @@ describe("Moves - Tera Blast", () => { playerPokemon.teraType = PokemonType.STELLAR; playerPokemon.isTerastallized = true; - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -198,24 +198,24 @@ describe("Moves - Tera Blast", () => { { ab: "pixilate", ty: "fairy", ab_id: AbilityId.PIXILATE, ty_id: PokemonType.FAIRY }, { ab: "aerilate", ty: "flying", ab_id: AbilityId.AERILATE, ty_id: PokemonType.FLYING }, ])("should be $ty type if the user has $ab", async ({ ab_id, ty_id }) => { - game.override.ability(ab_id).moveset([Moves.TERA_BLAST]).enemyAbility(AbilityId.BALL_FETCH); + game.override.ability(ab_id).moveset([MoveId.TERA_BLAST]).enemyAbility(AbilityId.BALL_FETCH); await game.classicMode.startBattle([Species.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; - expect(playerPokemon.getMoveType(allMoves[Moves.TERA_BLAST])).toBe(ty_id); + expect(playerPokemon.getMoveType(allMoves[MoveId.TERA_BLAST])).toBe(ty_id); }); it("should not be affected by normalize when the user is terastallized with tera normal", async () => { - game.override.moveset([Moves.TERA_BLAST]).ability(AbilityId.NORMALIZE); + game.override.moveset([MoveId.TERA_BLAST]).ability(AbilityId.NORMALIZE); await game.classicMode.startBattle([Species.MAGIKARP]); const playerPokemon = game.scene.getPlayerPokemon()!; // override the tera state for the pokemon playerPokemon.isTerastallized = true; playerPokemon.teraType = PokemonType.NORMAL; - const move = allMoves[Moves.TERA_BLAST]; + const move = allMoves[MoveId.TERA_BLAST]; const powerSpy = vi.spyOn(move, "calculateBattlePower"); - game.move.select(Moves.TERA_BLAST); + game.move.select(MoveId.TERA_BLAST); await game.phaseInterceptor.to("BerryPhase"); expect(powerSpy).toHaveLastReturnedWith(move.power); }); diff --git a/test/moves/tera_starstorm.test.ts b/test/moves/tera_starstorm.test.ts index 5069ce3c20a..3641df5f1c2 100644 --- a/test/moves/tera_starstorm.test.ts +++ b/test/moves/tera_starstorm.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { PokemonType } from "#enums/pokemon-type"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,10 +24,10 @@ describe("Moves - Tera Starstorm", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TERA_STARSTORM, Moves.SPLASH]) + .moveset([MoveId.TERA_STARSTORM, MoveId.SPLASH]) .battleStyle("double") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(30) .enemySpecies(Species.MAGIKARP); }); @@ -41,7 +41,7 @@ describe("Moves - Tera Starstorm", () => { vi.spyOn(terapagos, "getMoveType"); - game.move.select(Moves.TERA_STARSTORM); + game.move.select(MoveId.TERA_STARSTORM); await game.phaseInterceptor.to("TurnEndPhase"); expect(terapagos.getMoveType).toHaveReturnedWith(PokemonType.STELLAR); @@ -53,8 +53,8 @@ describe("Moves - Tera Starstorm", () => { const terapagos = game.scene.getPlayerParty()[1]; terapagos.isTerastallized = true; - game.move.select(Moves.TERA_STARSTORM, 0, BattlerIndex.ENEMY); - game.move.select(Moves.TERA_STARSTORM, 1); + game.move.select(MoveId.TERA_STARSTORM, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.TERA_STARSTORM, 1); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -75,7 +75,7 @@ describe("Moves - Tera Starstorm", () => { const terapagos = game.scene.getPlayerParty()[0]; terapagos.isTerastallized = false; - game.move.selectWithTera(Moves.TERA_STARSTORM, 0); + game.move.selectWithTera(MoveId.TERA_STARSTORM, 0); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -92,7 +92,7 @@ describe("Moves - Tera Starstorm", () => { const terapagos = game.scene.getPlayerParty()[0]; terapagos.isTerastallized = false; - game.move.select(Moves.TERA_STARSTORM, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.TERA_STARSTORM, 0, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); @@ -122,8 +122,8 @@ describe("Moves - Tera Starstorm", () => { vi.spyOn(fusionedMon, "getMoveType"); - game.move.select(Moves.TERA_STARSTORM, 0); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.TERA_STARSTORM, 0); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to("TurnEndPhase"); // Fusion and terastallized diff --git a/test/moves/thousand_arrows.test.ts b/test/moves/thousand_arrows.test.ts index 4cb8a5ceb6c..05db6607bf7 100644 --- a/test/moves/thousand_arrows.test.ts +++ b/test/moves/thousand_arrows.test.ts @@ -2,7 +2,7 @@ import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,8 +28,8 @@ describe("Moves - Thousand Arrows", () => { game.override.enemySpecies(Species.TOGETIC); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.THOUSAND_ARROWS]); - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.moveset([MoveId.THOUSAND_ARROWS]); + game.override.enemyMoveset([MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH, MoveId.SPLASH]); }); it("move should hit and ground Flying-type targets", async () => { @@ -37,7 +37,7 @@ describe("Moves - Thousand Arrows", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THOUSAND_ARROWS); + game.move.select(MoveId.THOUSAND_ARROWS); await game.phaseInterceptor.to(MoveEffectPhase, false); // Enemy should not be grounded before move effect is applied @@ -57,7 +57,7 @@ describe("Moves - Thousand Arrows", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THOUSAND_ARROWS); + game.move.select(MoveId.THOUSAND_ARROWS); await game.phaseInterceptor.to(MoveEffectPhase, false); // Enemy should not be grounded before move effect is applied @@ -76,9 +76,9 @@ describe("Moves - Thousand Arrows", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.addTag(BattlerTagType.FLOATING, undefined, Moves.MAGNET_RISE); + enemyPokemon.addTag(BattlerTagType.FLOATING, undefined, MoveId.MAGNET_RISE); - game.move.select(Moves.THOUSAND_ARROWS); + game.move.select(MoveId.THOUSAND_ARROWS); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/throat_chop.test.ts b/test/moves/throat_chop.test.ts index 713f5243047..e10eccefbea 100644 --- a/test/moves/throat_chop.test.ts +++ b/test/moves/throat_chop.test.ts @@ -1,5 +1,5 @@ import { BattlerIndex } from "#app/battle"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Stat } from "#app/enums/stat"; import { AbilityId } from "#enums/ability-id"; @@ -23,11 +23,11 @@ describe("Moves - Throat Chop", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.GROWL) + .moveset(MoveId.GROWL) .battleStyle("single") .ability(AbilityId.BALL_FETCH) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.THROAT_CHOP) + .enemyMoveset(MoveId.THROAT_CHOP) .enemySpecies(Species.MAGIKARP); }); @@ -36,7 +36,7 @@ describe("Moves - Throat Chop", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); // First turn, move is interrupted @@ -46,7 +46,7 @@ describe("Moves - Throat Chop", () => { // Second turn, struggle if no valid moves await game.toNextTurn(); - game.move.select(Moves.GROWL); + game.move.select(MoveId.GROWL); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/test/moves/thunder_wave.test.ts b/test/moves/thunder_wave.test.ts index 6f321c6fcfe..c21e7ef1deb 100644 --- a/test/moves/thunder_wave.test.ts +++ b/test/moves/thunder_wave.test.ts @@ -1,6 +1,6 @@ import type { EnemyPokemon } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -26,8 +26,8 @@ describe("Moves - Thunder Wave", () => { game.override .battleStyle("single") .starterSpecies(Species.PIKACHU) - .moveset([Moves.THUNDER_WAVE]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.THUNDER_WAVE]) + .enemyMoveset(MoveId.SPLASH); }); // References: https://bulbapedia.bulbagarden.net/wiki/Thunder_Wave_(move) @@ -38,7 +38,7 @@ describe("Moves - Thunder Wave", () => { const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -51,7 +51,7 @@ describe("Moves - Thunder Wave", () => { const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -64,7 +64,7 @@ describe("Moves - Thunder Wave", () => { const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -77,7 +77,7 @@ describe("Moves - Thunder Wave", () => { const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); @@ -90,7 +90,7 @@ describe("Moves - Thunder Wave", () => { const enemyPokemon: EnemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.THUNDER_WAVE); + game.move.select(MoveId.THUNDER_WAVE); await game.move.forceHit(); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/tidy_up.test.ts b/test/moves/tidy_up.test.ts index 5f0a5c579fc..d39f08c4da0 100644 --- a/test/moves/tidy_up.test.ts +++ b/test/moves/tidy_up.test.ts @@ -3,7 +3,7 @@ import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -29,66 +29,66 @@ describe("Moves - Tidy Up", () => { game.override.battleStyle("single"); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyAbility(AbilityId.BALL_FETCH); - game.override.enemyMoveset(Moves.SPLASH); + game.override.enemyMoveset(MoveId.SPLASH); game.override.starterSpecies(Species.FEEBAS); game.override.ability(AbilityId.BALL_FETCH); - game.override.moveset([Moves.TIDY_UP]); + game.override.moveset([MoveId.TIDY_UP]); game.override.startingLevel(50); }); it("spikes are cleared", async () => { - game.override.moveset([Moves.SPIKES, Moves.TIDY_UP]).enemyMoveset(Moves.SPIKES); + game.override.moveset([MoveId.SPIKES, MoveId.TIDY_UP]).enemyMoveset(MoveId.SPIKES); await game.classicMode.startBattle(); - game.move.select(Moves.SPIKES); + game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.SPIKES)).toBeUndefined(); }, 20000); it("stealth rocks are cleared", async () => { - game.override.moveset([Moves.STEALTH_ROCK, Moves.TIDY_UP]).enemyMoveset(Moves.STEALTH_ROCK); + game.override.moveset([MoveId.STEALTH_ROCK, MoveId.TIDY_UP]).enemyMoveset(MoveId.STEALTH_ROCK); await game.classicMode.startBattle(); - game.move.select(Moves.STEALTH_ROCK); + game.move.select(MoveId.STEALTH_ROCK); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.STEALTH_ROCK)).toBeUndefined(); }, 20000); it("toxic spikes are cleared", async () => { - game.override.moveset([Moves.TOXIC_SPIKES, Moves.TIDY_UP]).enemyMoveset(Moves.TOXIC_SPIKES); + game.override.moveset([MoveId.TOXIC_SPIKES, MoveId.TIDY_UP]).enemyMoveset(MoveId.TOXIC_SPIKES); await game.classicMode.startBattle(); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.TOXIC_SPIKES)).toBeUndefined(); }, 20000); it("sticky webs are cleared", async () => { - game.override.moveset([Moves.STICKY_WEB, Moves.TIDY_UP]).enemyMoveset(Moves.STICKY_WEB); + game.override.moveset([MoveId.STICKY_WEB, MoveId.TIDY_UP]).enemyMoveset(MoveId.STICKY_WEB); await game.classicMode.startBattle(); - game.move.select(Moves.STICKY_WEB); + game.move.select(MoveId.STICKY_WEB); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); expect(game.scene.arena.getTag(ArenaTagType.STICKY_WEB)).toBeUndefined(); }, 20000); it("substitutes are cleared", async () => { - game.override.moveset([Moves.SUBSTITUTE, Moves.TIDY_UP]).enemyMoveset(Moves.SUBSTITUTE); + game.override.moveset([MoveId.SUBSTITUTE, MoveId.TIDY_UP]).enemyMoveset(MoveId.SUBSTITUTE); await game.classicMode.startBattle(); - game.move.select(Moves.SUBSTITUTE); + game.move.select(MoveId.SUBSTITUTE); await game.phaseInterceptor.to(TurnEndPhase); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(MoveEndPhase); const pokemon = [game.scene.getPlayerPokemon()!, game.scene.getEnemyPokemon()!]; @@ -106,7 +106,7 @@ describe("Moves - Tidy Up", () => { expect(playerPokemon.getStatStage(Stat.ATK)).toBe(0); expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); - game.move.select(Moves.TIDY_UP); + game.move.select(MoveId.TIDY_UP); await game.phaseInterceptor.to(TurnEndPhase); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(1); diff --git a/test/moves/torment.test.ts b/test/moves/torment.test.ts index 07015a2b9e5..94ac8f693ab 100644 --- a/test/moves/torment.test.ts +++ b/test/moves/torment.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; @@ -26,10 +26,10 @@ describe("Moves - Torment", () => { game.override .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.TORMENT, Moves.SPLASH]) + .enemyMoveset([MoveId.TORMENT, MoveId.SPLASH]) .enemySpecies(Species.SHUCKLE) .enemyLevel(30) - .moveset([Moves.TACKLE]) + .moveset([MoveId.TACKLE]) .ability(AbilityId.BALL_FETCH); }); @@ -39,26 +39,26 @@ describe("Moves - Torment", () => { const playerPokemon = game.scene.getPlayerPokemon()!; // First turn, Player Pokemon uses Tackle successfully - game.move.select(Moves.TACKLE); - await game.move.selectEnemyMove(Moves.TORMENT); + game.move.select(MoveId.TACKLE); + await game.move.selectEnemyMove(MoveId.TORMENT); await game.toNextTurn(); const move1 = playerPokemon.getLastXMoves(1)[0]!; - expect(move1.move).toBe(Moves.TACKLE); + expect(move1.move).toBe(MoveId.TACKLE); expect(move1.result).toBe(MoveResult.SUCCESS); expect(playerPokemon?.getTag(BattlerTagType.TORMENT)).toBeDefined(); // Second turn, Torment forces Struggle to occur - game.move.select(Moves.TACKLE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.TACKLE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); const move2 = playerPokemon.getLastXMoves(1)[0]!; - expect(move2.move).toBe(Moves.STRUGGLE); + expect(move2.move).toBe(MoveId.STRUGGLE); // Third turn, Tackle can be used. - game.move.select(Moves.TACKLE); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.TACKLE); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); const move3 = playerPokemon.getLastXMoves(1)[0]!; - expect(move3.move).toBe(Moves.TACKLE); + expect(move3.move).toBe(MoveId.TACKLE); }); }); diff --git a/test/moves/toxic.test.ts b/test/moves/toxic.test.ts index c773abb5bd3..332e6ea187e 100644 --- a/test/moves/toxic.test.ts +++ b/test/moves/toxic.test.ts @@ -1,4 +1,4 @@ -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -23,35 +23,39 @@ describe("Moves - Toxic", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single").moveset(Moves.TOXIC).enemySpecies(Species.MAGIKARP).enemyMoveset(Moves.SPLASH); + game.override + .battleStyle("single") + .moveset(MoveId.TOXIC) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(MoveId.SPLASH); }); it("should be guaranteed to hit if user is Poison-type", async () => { - vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); + vi.spyOn(allMoves[MoveId.TOXIC], "accuracy", "get").mockReturnValue(0); await game.classicMode.startBattle([Species.TOXAPEX]); - game.move.select(Moves.TOXIC); + game.move.select(MoveId.TOXIC); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); }); it("may miss if user is not Poison-type", async () => { - vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); + vi.spyOn(allMoves[MoveId.TOXIC], "accuracy", "get").mockReturnValue(0); await game.classicMode.startBattle([Species.UMBREON]); - game.move.select(Moves.TOXIC); + game.move.select(MoveId.TOXIC); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.getEnemyPokemon()!.status).toBeUndefined(); }); it("should hit semi-invulnerable targets if user is Poison-type", async () => { - vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); - game.override.enemyMoveset(Moves.FLY); + vi.spyOn(allMoves[MoveId.TOXIC], "accuracy", "get").mockReturnValue(0); + game.override.enemyMoveset(MoveId.FLY); await game.classicMode.startBattle([Species.TOXAPEX]); - game.move.select(Moves.TOXIC); + game.move.select(MoveId.TOXIC); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); @@ -59,11 +63,11 @@ describe("Moves - Toxic", () => { }); it("should miss semi-invulnerable targets if user is not Poison-type", async () => { - vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(-1); - game.override.enemyMoveset(Moves.FLY); + vi.spyOn(allMoves[MoveId.TOXIC], "accuracy", "get").mockReturnValue(-1); + game.override.enemyMoveset(MoveId.FLY); await game.classicMode.startBattle([Species.UMBREON]); - game.move.select(Moves.TOXIC); + game.move.select(MoveId.TOXIC); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); @@ -71,11 +75,11 @@ describe("Moves - Toxic", () => { }); it("moves other than Toxic should not hit semi-invulnerable targets even if user is Poison-type", async () => { - game.override.moveset(Moves.SWIFT); - game.override.enemyMoveset(Moves.FLY); + game.override.moveset(MoveId.SWIFT); + game.override.enemyMoveset(MoveId.FLY); await game.classicMode.startBattle([Species.TOXAPEX]); - game.move.select(Moves.SWIFT); + game.move.select(MoveId.SWIFT); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/test/moves/toxic_spikes.test.ts b/test/moves/toxic_spikes.test.ts index af3d37336ba..f1d5c9070f0 100644 --- a/test/moves/toxic_spikes.test.ts +++ b/test/moves/toxic_spikes.test.ts @@ -4,7 +4,7 @@ import type { SessionSaveData } from "#app/system/game-data"; import { decrypt, encrypt, GameData } from "#app/system/game-data"; import { AbilityId } from "#enums/ability-id"; import { ArenaTagType } from "#enums/arena-tag-type"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -33,8 +33,8 @@ describe("Moves - Toxic Spikes", () => { .enemySpecies(Species.RATTATA) .enemyAbility(AbilityId.BALL_FETCH) .ability(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.TOXIC_SPIKES, Moves.SPLASH, Moves.ROAR, Moves.COURT_CHANGE]); + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.TOXIC_SPIKES, MoveId.SPLASH, MoveId.ROAR, MoveId.COURT_CHANGE]); }); it("should not affect the opponent if they do not switch", async () => { @@ -42,9 +42,9 @@ describe("Moves - Toxic Spikes", () => { const enemy = game.scene.getEnemyField()[0]; - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); game.doSwitchPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -56,9 +56,9 @@ describe("Moves - Toxic Spikes", () => { it("should poison the opponent if they switch into 1 layer", async () => { await game.classicMode.runToSummon([Species.MIGHTYENA]); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.ROAR); + game.move.select(MoveId.ROAR); await game.phaseInterceptor.to("TurnEndPhase"); const enemy = game.scene.getEnemyField()[0]; @@ -70,11 +70,11 @@ describe("Moves - Toxic Spikes", () => { it("should badly poison the opponent if they switch into 2 layers", async () => { await game.classicMode.runToSummon([Species.MIGHTYENA]); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.ROAR); + game.move.select(MoveId.ROAR); await game.phaseInterceptor.to("TurnEndPhase"); const enemy = game.scene.getEnemyField()[0]; @@ -87,17 +87,17 @@ describe("Moves - Toxic Spikes", () => { const muk = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.toNextTurn(); // also make sure the toxic spikes are removed even if the pokemon // that set them up is the one switching in (https://github.com/pagefaultgames/pokerogue/issues/935) - game.move.select(Moves.COURT_CHANGE); + game.move.select(MoveId.COURT_CHANGE); await game.toNextTurn(); game.doSwitchPokemon(1); await game.toNextTurn(); game.doSwitchPokemon(1); await game.toNextTurn(); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(muk.isFullHp()).toBe(true); @@ -108,7 +108,7 @@ describe("Moves - Toxic Spikes", () => { it("shouldn't create multiple layers per use in doubles", async () => { await game.classicMode.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); const arenaTags = game.scene.arena.getTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.ENEMY) as ArenaTrapTag; @@ -122,9 +122,9 @@ describe("Moves - Toxic Spikes", () => { await game.classicMode.runToSummon([Species.MIGHTYENA]); - game.move.select(Moves.TOXIC_SPIKES); + game.move.select(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("BattleEndPhase"); await game.toNextWave(); diff --git a/test/moves/transform.test.ts b/test/moves/transform.test.ts index c1d0666845e..c31bd258a2a 100644 --- a/test/moves/transform.test.ts +++ b/test/moves/transform.test.ts @@ -3,7 +3,7 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat, EFFECTIVE_STATS } from "#enums/stat"; import { AbilityId } from "#enums/ability-id"; import { BattlerIndex } from "#app/battle"; @@ -31,15 +31,15 @@ describe("Moves - Transform", () => { .enemyLevel(200) .enemyAbility(AbilityId.BEAST_BOOST) .enemyPassiveAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .ability(AbilityId.INTIMIDATE) - .moveset([Moves.TRANSFORM]); + .moveset([MoveId.TRANSFORM]); }); it("should copy species, ability, gender, all stats except HP, all stat stages, moveset, and types of target", async () => { await game.classicMode.startBattle([Species.DITTO]); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to(TurnEndPhase); const player = game.scene.getPlayerPokemon()!; @@ -64,7 +64,7 @@ describe("Moves - Transform", () => { }); it("should copy in-battle overridden stats", async () => { - game.override.enemyMoveset([Moves.POWER_SPLIT]); + game.override.enemyMoveset([MoveId.POWER_SPLIT]); await game.classicMode.startBattle([Species.DITTO]); @@ -74,7 +74,7 @@ describe("Moves - Transform", () => { const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.ATK, false)).toBe(avgAtk); @@ -85,18 +85,18 @@ describe("Moves - Transform", () => { }); it("should set each move's pp to a maximum of 5", async () => { - game.override.enemyMoveset([Moves.SWORDS_DANCE, Moves.GROWL, Moves.SKETCH, Moves.RECOVER]); + game.override.enemyMoveset([MoveId.SWORDS_DANCE, MoveId.GROWL, MoveId.SKETCH, MoveId.RECOVER]); await game.classicMode.startBattle([Species.DITTO]); const player = game.scene.getPlayerPokemon()!; - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to(TurnEndPhase); player.getMoveset().forEach(move => { // Should set correct maximum PP without touching `ppUp` if (move) { - if (move.moveId === Moves.SKETCH) { + if (move.moveId === MoveId.SKETCH) { expect(move.getMovePp()).toBe(1); } else { expect(move.getMovePp()).toBe(5); @@ -110,7 +110,7 @@ describe("Moves - Transform", () => { game.override.enemyAbility(AbilityId.INTIMIDATE).ability(AbilityId.BALL_FETCH); await game.classicMode.startBattle([Species.DITTO]); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.phaseInterceptor.to("BerryPhase"); @@ -125,10 +125,10 @@ describe("Moves - Transform", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - game.move.changeMoveset(player, Moves.TRANSFORM); - game.move.changeMoveset(enemy, Moves.MEMENTO); + game.move.changeMoveset(player, MoveId.TRANSFORM); + game.move.changeMoveset(enemy, MoveId.MEMENTO); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextWave(); @@ -150,7 +150,7 @@ describe("Moves - Transform", () => { } expect(playerMoveset.length).toEqual(1); - expect(playerMoveset[0]?.moveId).toEqual(Moves.MEMENTO); + expect(playerMoveset[0]?.moveId).toEqual(MoveId.MEMENTO); }); it("should stay transformed with the correct form after reload", async () => { @@ -166,10 +166,10 @@ describe("Moves - Transform", () => { enemy.species.forms[1]; enemy.species.formIndex = 1; - game.move.changeMoveset(player, Moves.TRANSFORM); - game.move.changeMoveset(enemy, Moves.MEMENTO); + game.move.changeMoveset(player, MoveId.TRANSFORM); + game.move.changeMoveset(enemy, MoveId.MEMENTO); - game.move.select(Moves.TRANSFORM); + game.move.select(MoveId.TRANSFORM); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextWave(); diff --git a/test/moves/trick_or_treat.test.ts b/test/moves/trick_or_treat.test.ts index 3f346cb8f2c..8d53b6dd9dd 100644 --- a/test/moves/trick_or_treat.test.ts +++ b/test/moves/trick_or_treat.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { PokemonType } from "#enums/pokemon-type"; import GameManager from "#test/testUtils/gameManager"; @@ -23,24 +23,24 @@ describe("Moves - Trick Or Treat", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.FORESTS_CURSE, Moves.TRICK_OR_TREAT]) + .moveset([MoveId.FORESTS_CURSE, MoveId.TRICK_OR_TREAT]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("will replace added type from Forest's Curse", async () => { await game.classicMode.startBattle([Species.FEEBAS]); const enemyPokemon = game.scene.getEnemyPokemon(); - game.move.select(Moves.FORESTS_CURSE); + game.move.select(MoveId.FORESTS_CURSE); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon!.summonData.addedType).toBe(PokemonType.GRASS); - game.move.select(Moves.TRICK_OR_TREAT); + game.move.select(MoveId.TRICK_OR_TREAT); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemyPokemon?.summonData.addedType).toBe(PokemonType.GHOST); }); diff --git a/test/moves/triple_arrows.test.ts b/test/moves/triple_arrows.test.ts index abb5d69fdc7..f9d7a68fbfa 100644 --- a/test/moves/triple_arrows.test.ts +++ b/test/moves/triple_arrows.test.ts @@ -1,7 +1,7 @@ import { FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type Move from "#app/data/moves/move"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -19,7 +19,7 @@ describe("Moves - Triple Arrows", () => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, }); - tripleArrows = allMoves[Moves.TRIPLE_ARROWS]; + tripleArrows = allMoves[MoveId.TRIPLE_ARROWS]; flinchAttr = tripleArrows.getAttrs(FlinchAttr)[0]; defDropAttr = tripleArrows.getAttrs(StatStageChangeAttr)[0]; }); @@ -32,11 +32,11 @@ describe("Moves - Triple Arrows", () => { game = new GameManager(phaserGame); game.override .ability(AbilityId.BALL_FETCH) - .moveset([Moves.TRIPLE_ARROWS]) + .moveset([MoveId.TRIPLE_ARROWS]) .battleStyle("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.STURDY) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); vi.spyOn(flinchAttr, "getMoveChance"); vi.spyOn(defDropAttr, "getMoveChance"); @@ -45,7 +45,7 @@ describe("Moves - Triple Arrows", () => { it("has a 30% flinch chance and 50% defense drop chance", async () => { await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.TRIPLE_ARROWS); + game.move.select(MoveId.TRIPLE_ARROWS); await game.phaseInterceptor.to("BerryPhase"); expect(flinchAttr.getMoveChance).toHaveReturnedWith(30); @@ -56,7 +56,7 @@ describe("Moves - Triple Arrows", () => { game.override.ability(AbilityId.SERENE_GRACE); await game.classicMode.startBattle([Species.FEEBAS]); - game.move.select(Moves.TRIPLE_ARROWS); + game.move.select(MoveId.TRIPLE_ARROWS); await game.phaseInterceptor.to("BerryPhase"); expect(flinchAttr.getMoveChance).toHaveReturnedWith(60); diff --git a/test/moves/u_turn.test.ts b/test/moves/u_turn.test.ts index 75eeb36ac10..242a6e834b0 100644 --- a/test/moves/u_turn.test.ts +++ b/test/moves/u_turn.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -27,8 +27,8 @@ describe("Moves - U-turn", () => { .enemySpecies(Species.GENGAR) .startingLevel(90) .startingWave(97) - .moveset([Moves.U_TURN]) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.U_TURN]) + .enemyMoveset(MoveId.SPLASH) .disableCrits(); }); @@ -40,7 +40,7 @@ describe("Moves - U-turn", () => { game.scene.getPlayerPokemon()!.hp = playerHp; // act - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); @@ -58,7 +58,7 @@ describe("Moves - U-turn", () => { await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); // act - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("SwitchPhase", false); @@ -77,7 +77,7 @@ describe("Moves - U-turn", () => { vi.spyOn(game.scene.getEnemyPokemon()!, "randBattleSeedInt").mockReturnValue(0); // act - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); await game.phaseInterceptor.to("SwitchPhase", false); // assert @@ -94,7 +94,7 @@ describe("Moves - U-turn", () => { const enemy = game.scene.getEnemyPokemon()!; // KO the opponent with U-Turn - game.move.select(Moves.U_TURN); + game.move.select(MoveId.U_TURN); game.doSelectPartyPokemon(1); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.isFainted()).toBe(true); diff --git a/test/moves/upper_hand.test.ts b/test/moves/upper_hand.test.ts index a6137479b16..ae015931f94 100644 --- a/test/moves/upper_hand.test.ts +++ b/test/moves/upper_hand.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -24,13 +24,13 @@ describe("Moves - Upper Hand", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Moves.UPPER_HAND) + .moveset(MoveId.UPPER_HAND) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.QUICK_ATTACK) + .enemyMoveset(MoveId.QUICK_ATTACK) .startingLevel(100) .enemyLevel(100); }); @@ -41,7 +41,7 @@ describe("Moves - Upper Hand", () => { const feebas = game.scene.getPlayerPokemon()!; const magikarp = game.scene.getEnemyPokemon()!; - game.move.select(Moves.UPPER_HAND); + game.move.select(MoveId.UPPER_HAND); await game.phaseInterceptor.to("BerryPhase"); expect(feebas.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); @@ -50,8 +50,8 @@ describe("Moves - Upper Hand", () => { }); it.each([ - { descriptor: "non-priority attack", move: Moves.TACKLE }, - { descriptor: "status move", move: Moves.BABY_DOLL_EYES }, + { descriptor: "non-priority attack", move: MoveId.TACKLE }, + { descriptor: "status move", move: MoveId.BABY_DOLL_EYES }, ])("should fail when the opponent selects a $descriptor", async ({ move }) => { game.override.enemyMoveset(move); @@ -59,21 +59,21 @@ describe("Moves - Upper Hand", () => { const feebas = game.scene.getPlayerPokemon()!; - game.move.select(Moves.UPPER_HAND); + game.move.select(MoveId.UPPER_HAND); await game.phaseInterceptor.to("BerryPhase"); expect(feebas.getLastXMoves()[0].result).toBe(MoveResult.FAIL); }); it("should flinch the opponent before they use an attack boosted by Gale Wings", async () => { - game.override.enemyAbility(AbilityId.GALE_WINGS).enemyMoveset(Moves.GUST); + game.override.enemyAbility(AbilityId.GALE_WINGS).enemyMoveset(MoveId.GUST); await game.classicMode.startBattle([Species.FEEBAS]); const feebas = game.scene.getPlayerPokemon()!; const magikarp = game.scene.getEnemyPokemon()!; - game.move.select(Moves.UPPER_HAND); + game.move.select(MoveId.UPPER_HAND); await game.phaseInterceptor.to("BerryPhase"); expect(feebas.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); @@ -82,13 +82,13 @@ describe("Moves - Upper Hand", () => { }); it("should fail if the target has already moved", async () => { - game.override.enemyMoveset(Moves.FAKE_OUT).enemyAbility(AbilityId.SHEER_FORCE); + game.override.enemyMoveset(MoveId.FAKE_OUT).enemyAbility(AbilityId.SHEER_FORCE); await game.classicMode.startBattle([Species.FEEBAS]); const feebas = game.scene.getPlayerPokemon()!; - game.move.select(Moves.UPPER_HAND); + game.move.select(MoveId.UPPER_HAND); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); diff --git a/test/moves/whirlwind.test.ts b/test/moves/whirlwind.test.ts index f3739f83a62..bd5385357b8 100644 --- a/test/moves/whirlwind.test.ts +++ b/test/moves/whirlwind.test.ts @@ -3,7 +3,7 @@ import { Challenges } from "#enums/challenges"; import { PokemonType } from "#enums/pokemon-type"; import { MoveResult } from "#app/field/pokemon"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -33,16 +33,16 @@ describe("Moves - Whirlwind", () => { game = new GameManager(phaserGame); game.override .battleStyle("single") - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.WHIRLWIND]) + .enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]) .enemySpecies(Species.PIDGEY); }); it.each([ - { move: Moves.FLY, name: "Fly" }, - { move: Moves.BOUNCE, name: "Bounce" }, - { move: Moves.SKY_DROP, name: "Sky Drop" }, + { move: MoveId.FLY, name: "Fly" }, + { move: MoveId.BOUNCE, name: "Bounce" }, + { move: MoveId.SKY_DROP, name: "Sky Drop" }, ])("should not hit a flying target: $name (=$move)", async ({ move }) => { game.override.moveset([move]); // Must have a pokemon in the back so that the move misses instead of fails. @@ -51,7 +51,7 @@ describe("Moves - Whirlwind", () => { const staraptor = game.scene.getPlayerPokemon()!; game.move.select(move); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.phaseInterceptor.to("BerryPhase", false); @@ -68,8 +68,8 @@ describe("Moves - Whirlwind", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -80,8 +80,8 @@ describe("Moves - Whirlwind", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min + 1; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.toNextTurn(); expect(bulbasaur.isOnField()).toBe(false); @@ -100,8 +100,8 @@ describe("Moves - Whirlwind", () => { vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -119,16 +119,16 @@ describe("Moves - Whirlwind", () => { eevee.hp = 0; eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.toNextTurn(); expect(lapras.isOnField()).toBe(false); @@ -146,16 +146,16 @@ describe("Moves - Whirlwind", () => { eevee.hp = 0; eevee.status = new Status(StatusEffect.FAINT); expect(eevee.isFainted()).toBe(true); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Turn 2: Mock an RNG call that would normally call for switching to Eevee, but it is fainted vi.spyOn(game.scene, "randBattleSeedInt").mockImplementation((_range, min = 0) => { return min; }); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.WHIRLWIND); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.WHIRLWIND); await game.toNextTurn(); expect(lapras.isOnField()).toBe(true); @@ -164,7 +164,7 @@ describe("Moves - Whirlwind", () => { it("should fail when player uses Whirlwind against an opponent with only one available Pokémon", async () => { // Set up the battle scenario with the player knowing Whirlwind - game.override.startingWave(5).enemySpecies(Species.PIDGEY).moveset([Moves.WHIRLWIND]); + game.override.startingWave(5).enemySpecies(Species.PIDGEY).moveset([MoveId.WHIRLWIND]); await game.classicMode.startBattle(); const enemyParty = game.scene.getEnemyParty(); @@ -183,8 +183,8 @@ describe("Moves - Whirlwind", () => { const queueSpy = vi.spyOn(globalScene, "queueMessage"); // Player uses Whirlwind; opponent uses Splash - game.move.select(Moves.WHIRLWIND); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.WHIRLWIND); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Verify that the failure message is displayed for Whirlwind @@ -201,8 +201,8 @@ describe("Moves - Whirlwind", () => { trainerType: TrainerType.BREEDER, alwaysDouble: true, }) - .enemyMoveset([Moves.SPLASH, Moves.LUNAR_DANCE]) - .moveset([Moves.WHIRLWIND, Moves.SPLASH]); + .enemyMoveset([MoveId.SPLASH, MoveId.LUNAR_DANCE]) + .moveset([MoveId.WHIRLWIND, MoveId.SPLASH]); await game.classicMode.startBattle([Species.MAGIKARP, Species.TOTODILE]); // expect the enemy to have at least 4 pokemon, necessary for this check to even work @@ -212,21 +212,21 @@ describe("Moves - Whirlwind", () => { console.log(user.getMoveset(false)); - game.move.select(Moves.SPLASH); - game.move.select(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.MEMENTO); - await game.move.selectEnemyMove(Moves.SPLASH); + game.move.select(MoveId.SPLASH); + game.move.select(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.MEMENTO); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); // Get the enemy pokemon id so we can check if is the same after switch. const enemy_id = game.scene.getEnemyPokemon()!.id; // Hit the enemy that fainted with whirlwind. - game.move.select(Moves.WHIRLWIND, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.WHIRLWIND, 0, BattlerIndex.ENEMY); + game.move.select(MoveId.SPLASH, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.SPLASH); await game.toNextTurn(); @@ -237,14 +237,14 @@ describe("Moves - Whirlwind", () => { it("should force a wild pokemon to flee", async () => { game.override .battleType(BattleType.WILD) - .moveset([Moves.WHIRLWIND, Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH) + .moveset([MoveId.WHIRLWIND, MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH) .ability(AbilityId.BALL_FETCH); await game.classicMode.startBattle([Species.MAGIKARP]); const user = game.scene.getPlayerPokemon()!; - game.move.select(Moves.WHIRLWIND); + game.move.select(MoveId.WHIRLWIND); await game.phaseInterceptor.to("BerryPhase"); expect(user.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); diff --git a/test/moves/wide_guard.test.ts b/test/moves/wide_guard.test.ts index 414c90d41e6..c714f6322b4 100644 --- a/test/moves/wide_guard.test.ts +++ b/test/moves/wide_guard.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Stat } from "#enums/stat"; import { BerryPhase } from "#app/phases/berry-phase"; import { CommandPhase } from "#app/phases/command-phase"; @@ -27,10 +27,10 @@ describe("Moves - Wide Guard", () => { game.override.battleStyle("double"); - game.override.moveset([Moves.WIDE_GUARD, Moves.SPLASH, Moves.SURF]); + game.override.moveset([MoveId.WIDE_GUARD, MoveId.SPLASH, MoveId.SURF]); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.SWIFT]); + game.override.enemyMoveset([MoveId.SWIFT]); game.override.enemyAbility(AbilityId.INSOMNIA); game.override.startingLevel(100); @@ -42,11 +42,11 @@ describe("Moves - Wide Guard", () => { const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.WIDE_GUARD); + game.move.select(MoveId.WIDE_GUARD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -54,17 +54,17 @@ describe("Moves - Wide Guard", () => { }); test("should protect the user and allies from multi-target status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([MoveId.GROWL]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.WIDE_GUARD); + game.move.select(MoveId.WIDE_GUARD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -72,17 +72,17 @@ describe("Moves - Wide Guard", () => { }); test("should not protect the user and allies from single-target moves", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([MoveId.TACKLE]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); - game.move.select(Moves.WIDE_GUARD); + game.move.select(MoveId.WIDE_GUARD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); + game.move.select(MoveId.SPLASH, 1); await game.phaseInterceptor.to(BerryPhase, false); @@ -90,18 +90,18 @@ describe("Moves - Wide Guard", () => { }); test("should protect the user from its ally's multi-target move", async () => { - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); const leadPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - game.move.select(Moves.WIDE_GUARD); + game.move.select(MoveId.WIDE_GUARD); await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SURF, 1); + game.move.select(MoveId.SURF, 1); await game.phaseInterceptor.to(BerryPhase, false); diff --git a/test/moves/will_o_wisp.test.ts b/test/moves/will_o_wisp.test.ts index f8137845155..3eafa256a40 100644 --- a/test/moves/will_o_wisp.test.ts +++ b/test/moves/will_o_wisp.test.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; @@ -24,13 +24,13 @@ describe("Moves - Will-O-Wisp", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.WILL_O_WISP, Moves.SPLASH]) + .moveset([MoveId.WILL_O_WISP, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("should burn the opponent", async () => { @@ -38,14 +38,14 @@ describe("Moves - Will-O-Wisp", () => { const enemy = game.scene.getEnemyPokemon()!; - game.move.select(Moves.WILL_O_WISP); + game.move.select(MoveId.WILL_O_WISP); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceHit(); await game.toNextTurn(); expect(enemy.status?.effect).toBe(StatusEffect.BURN); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); expect(enemy.status?.effect).toBe(StatusEffect.BURN); diff --git a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index 36a284880c1..34d7b0114e4 100644 --- a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -15,7 +15,7 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import { BerryModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { BerryType } from "#enums/berry-type"; import { AbsoluteAvariceEncounter } from "#app/data/mystery-encounters/encounters/absolute-avarice-encounter"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; @@ -140,11 +140,11 @@ describe("Absolute Avarice - Mystery Encounter", () => { expect(enemyField[0].species.speciesId).toBe(Species.GREEDENT); const moveset = enemyField[0].moveset.map(m => m.moveId); expect(moveset?.length).toBe(4); - expect(moveset).toEqual([Moves.THRASH, Moves.CRUNCH, Moves.BODY_PRESS, Moves.SLACK_OFF]); + expect(moveset).toEqual([MoveId.THRASH, MoveId.CRUNCH, MoveId.BODY_PRESS, MoveId.SLACK_OFF]); const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.STUFF_CHEEKS).length).toBe(1); // Stuff Cheeks used before battle + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.STUFF_CHEEKS).length).toBe(1); // Stuff Cheeks used before battle }); it("should give reviver seed to each pokemon after battle", async () => { @@ -263,7 +263,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { expect(greedent.species.speciesId).toBe(Species.GREEDENT); const moveset = greedent.moveset.map(m => m.moveId); expect(moveset?.length).toBe(4); - expect(moveset).toEqual([Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.SLACK_OFF]); + expect(moveset).toEqual([MoveId.THRASH, MoveId.BODY_PRESS, MoveId.STUFF_CHEEKS, MoveId.SLACK_OFF]); }); it("should leave encounter without battle", async () => { diff --git a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index d66e2d97c66..7d9b93ea42e 100644 --- a/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -14,7 +14,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { ShinyRateBoosterModifier } from "#app/modifier/modifier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import i18next from "i18next"; @@ -212,7 +212,7 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, [Species.ABRA]); const party = scene.getPlayerParty(); const abra = party.find(pkm => pkm.species.speciesId === Species.ABRA)!; - abra.moveset = [new PokemonMove(Moves.BEAT_UP)]; + abra.moveset = [new PokemonMove(MoveId.BEAT_UP)]; const expBefore = abra.exp; await runMysteryEncounterToEnd(game, 2); diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index 455a5d28194..c7a5b4de93d 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -9,7 +9,7 @@ import { runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { UiMode } from "#enums/ui-mode"; @@ -117,36 +117,30 @@ const POOL_3_POKEMON: { species: Species; formIndex?: number }[] = [ const POOL_4_POKEMON = [Species.GENESECT, Species.SLITHER_WING, Species.BUZZWOLE, Species.PHEROMOSA]; const PHYSICAL_TUTOR_MOVES = [ - Moves.MEGAHORN, - Moves.ATTACK_ORDER, - Moves.BUG_BITE, - Moves.FIRST_IMPRESSION, - Moves.LUNGE + MoveId.MEGAHORN, + MoveId.ATTACK_ORDER, + MoveId.BUG_BITE, + MoveId.FIRST_IMPRESSION, + MoveId.LUNGE, ]; const SPECIAL_TUTOR_MOVES = [ - Moves.SILVER_WIND, - Moves.SIGNAL_BEAM, - Moves.BUG_BUZZ, - Moves.POLLEN_PUFF, - Moves.STRUGGLE_BUG + MoveId.SILVER_WIND, + MoveId.SIGNAL_BEAM, + MoveId.BUG_BUZZ, + MoveId.POLLEN_PUFF, + MoveId.STRUGGLE_BUG, ]; const STATUS_TUTOR_MOVES = [ - Moves.STRING_SHOT, - Moves.DEFEND_ORDER, - Moves.RAGE_POWDER, - Moves.STICKY_WEB, - Moves.SILK_TRAP + MoveId.STRING_SHOT, + MoveId.DEFEND_ORDER, + MoveId.RAGE_POWDER, + MoveId.STICKY_WEB, + MoveId.SILK_TRAP, ]; -const MISC_TUTOR_MOVES = [ - Moves.LEECH_LIFE, - Moves.U_TURN, - Moves.HEAL_ORDER, - Moves.QUIVER_DANCE, - Moves.INFESTATION, -]; +const MISC_TUTOR_MOVES = [MoveId.LEECH_LIFE, MoveId.U_TURN, MoveId.HEAL_ORDER, MoveId.QUIVER_DANCE, MoveId.INFESTATION]; describe("Bug-Type Superfan - Mystery Encounter", () => { let phaserGame: Phaser.Game; diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index 4ac30401b4c..ffa7655dd48 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -12,7 +12,7 @@ import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; @@ -117,13 +117,13 @@ describe("Clowning Around - Mystery Encounter", () => { expect(config.pokemonConfigs?.[0]).toEqual({ species: getPokemonSpecies(Species.MR_MIME), isBoss: true, - moveSet: [Moves.TEETER_DANCE, Moves.ALLY_SWITCH, Moves.DAZZLING_GLEAM, Moves.PSYCHIC], + moveSet: [MoveId.TEETER_DANCE, MoveId.ALLY_SWITCH, MoveId.DAZZLING_GLEAM, MoveId.PSYCHIC], }); expect(config.pokemonConfigs?.[1]).toEqual({ species: getPokemonSpecies(Species.BLACEPHALON), customPokemonData: expect.anything(), isBoss: true, - moveSet: [Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN], + moveSet: [MoveId.TRICK, MoveId.HYPNOSIS, MoveId.SHADOW_BALL, MoveId.MIND_BLOWN], }); expect(config.pokemonConfigs?.[1].customPokemonData?.types.length).toBe(2); expect([ @@ -177,24 +177,24 @@ describe("Clowning Around - Mystery Encounter", () => { expect(enemyField.length).toBe(2); expect(enemyField[0].species.speciesId).toBe(Species.MR_MIME); expect(enemyField[0].moveset).toEqual([ - new PokemonMove(Moves.TEETER_DANCE), - new PokemonMove(Moves.ALLY_SWITCH), - new PokemonMove(Moves.DAZZLING_GLEAM), - new PokemonMove(Moves.PSYCHIC), + new PokemonMove(MoveId.TEETER_DANCE), + new PokemonMove(MoveId.ALLY_SWITCH), + new PokemonMove(MoveId.DAZZLING_GLEAM), + new PokemonMove(MoveId.PSYCHIC), ]); expect(enemyField[1].species.speciesId).toBe(Species.BLACEPHALON); expect(enemyField[1].moveset).toEqual([ - new PokemonMove(Moves.TRICK), - new PokemonMove(Moves.HYPNOSIS), - new PokemonMove(Moves.SHADOW_BALL), - new PokemonMove(Moves.MIND_BLOWN), + new PokemonMove(MoveId.TRICK), + new PokemonMove(MoveId.HYPNOSIS), + new PokemonMove(MoveId.SHADOW_BALL), + new PokemonMove(MoveId.MIND_BLOWN), ]); // Should have used moves pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(3); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.ROLE_PLAY).length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.TAUNT).length).toBe(2); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.ROLE_PLAY).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.TAUNT).length).toBe(2); }); it("should let the player gain the ability after battle completion", async () => { @@ -264,7 +264,7 @@ describe("Clowning Around - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.CLOWNING_AROUND, defaultParty); // Set some moves on party for attack type booster generation - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.THIEF)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.TACKLE), new PokemonMove(MoveId.THIEF)]; // 2 Sitrus Berries on lead scene.modifiers = []; @@ -349,9 +349,9 @@ describe("Clowning Around - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.CLOWNING_AROUND, defaultParty); // Same type moves on lead - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.ICE_BEAM), new PokemonMove(Moves.SURF)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.ICE_BEAM), new PokemonMove(MoveId.SURF)]; // Different type moves on second - scene.getPlayerParty()[1].moveset = [new PokemonMove(Moves.GRASS_KNOT), new PokemonMove(Moves.ELECTRO_BALL)]; + scene.getPlayerParty()[1].moveset = [new PokemonMove(MoveId.GRASS_KNOT), new PokemonMove(MoveId.ELECTRO_BALL)]; // No moves on third scene.getPlayerParty()[2].moveset = []; await runMysteryEncounterToEnd(game, 3); diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index 873bed2f213..4c5d9af6541 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -13,7 +13,7 @@ import type BattleScene from "#app/battle-scene"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { DancingLessonsEncounter } from "#app/data/mystery-encounters/encounters/dancing-lessons-encounter"; import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; @@ -113,11 +113,11 @@ describe("Dancing Lessons - Mystery Encounter", () => { expect(enemyField[0].species.speciesId).toBe(Species.ORICORIO); expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 0, 0, 0]); const moveset = enemyField[0].moveset.map(m => m.moveId); - expect(moveset.some(m => m === Moves.REVELATION_DANCE)).toBeTruthy(); + expect(moveset.some(m => m === MoveId.REVELATION_DANCE)).toBeTruthy(); const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.REVELATION_DANCE).length).toBe(1); // Revelation Dance used before battle + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.REVELATION_DANCE).length).toBe(1); // Revelation Dance used before battle }); it("should have a Baton in the rewards after battle", async () => { @@ -166,7 +166,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof LearnMovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); - expect(movePhases.filter(p => (p as LearnMovePhase)["moveId"] === Moves.REVELATION_DANCE).length).toBe(1); // Revelation Dance taught to pokemon + expect(movePhases.filter(p => (p as LearnMovePhase)["moveId"] === MoveId.REVELATION_DANCE).length).toBe(1); // Revelation Dance taught to pokemon }); it("should leave encounter without battle", async () => { @@ -201,7 +201,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { it("should add Oricorio to the party", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DANCING_LESSONS, defaultParty); const partyCountBefore = scene.getPlayerParty().length; - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.DRAGON_DANCE)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.DRAGON_DANCE)]; await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); const partyCountAfter = scene.getPlayerParty().length; @@ -209,8 +209,8 @@ describe("Dancing Lessons - Mystery Encounter", () => { const oricorio = scene.getPlayerParty()[scene.getPlayerParty().length - 1]; expect(oricorio.species.speciesId).toBe(Species.ORICORIO); const moveset = oricorio.moveset.map(m => m.moveId); - expect(moveset?.some(m => m === Moves.REVELATION_DANCE)).toBeTruthy(); - expect(moveset?.some(m => m === Moves.DRAGON_DANCE)).toBeTruthy(); + expect(moveset?.some(m => m === MoveId.REVELATION_DANCE)).toBeTruthy(); + expect(moveset?.some(m => m === MoveId.DRAGON_DANCE)).toBeTruthy(); }); it("should NOT be selectable if the player doesn't have a Dance type move", async () => { @@ -240,7 +240,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { const leaveEncounterWithoutBattleSpy = vi.spyOn(EncounterPhaseUtils, "leaveEncounterWithoutBattle"); await game.runToMysteryEncounter(MysteryEncounterType.DANCING_LESSONS, defaultParty); - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.DRAGON_DANCE)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.DRAGON_DANCE)]; await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); diff --git a/test/mystery-encounter/encounters/field-trip-encounter.test.ts b/test/mystery-encounter/encounters/field-trip-encounter.test.ts index 75a6fe77492..5f3bc6fe672 100644 --- a/test/mystery-encounter/encounters/field-trip-encounter.test.ts +++ b/test/mystery-encounter/encounters/field-trip-encounter.test.ts @@ -10,7 +10,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; import { FieldTripEncounter } from "#app/data/mystery-encounters/encounters/field-trip-encounter"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { UiMode } from "#enums/ui-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; @@ -37,7 +37,7 @@ describe("Field Trip - Mystery Encounter", () => { game.override.startingWave(defaultWave); game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - game.override.moveset([Moves.TACKLE, Moves.UPROAR, Moves.SWORDS_DANCE]); + game.override.moveset([MoveId.TACKLE, MoveId.UPROAR, MoveId.SWORDS_DANCE]); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([[Biome.CAVE, [MysteryEncounterType.FIELD_TRIP]]]), diff --git a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index 9dec21f7ce2..31a1257cf14 100644 --- a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -14,7 +14,7 @@ import { runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import { AttackTypeBoosterModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { PokemonType } from "#enums/pokemon-type"; @@ -54,7 +54,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { .startingWave(defaultWave) .startingBiome(defaultBiome) .disableTrainerWaves() - .moveset([Moves.PAYBACK, Moves.THUNDERBOLT]); // Required for attack type booster item generation + .moveset([MoveId.PAYBACK, MoveId.THUNDERBOLT]); // Required for attack type booster item generation vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ @@ -171,7 +171,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(2); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.FIRE_SPIN).length).toBe(2); // Fire spin used twice before battle + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.FIRE_SPIN).length).toBe(2); // Fire spin used twice before battle }); it("should give attack type boosting item to lead pokemon", async () => { diff --git a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index d47266268ee..ad264ecdb9d 100644 --- a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -9,7 +9,7 @@ import { runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { UiMode } from "#enums/ui-mode"; @@ -179,7 +179,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FIGHT_OR_FLIGHT, defaultParty); // Mock moveset - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.KNOCK_OFF)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.KNOCK_OFF)]; const item = game.scene.currentBattle.mysteryEncounter!.misc; await runMysteryEncounterToEnd(game, 2); diff --git a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index f8375c1aa78..86274cea5fc 100644 --- a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -21,7 +21,7 @@ import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { FunAndGamesEncounter } from "#app/data/mystery-encounters/encounters/fun-and-games-encounter"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Command } from "#app/ui/command-ui-handler"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; @@ -138,7 +138,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should get 3 turns to attack the Wobbuffet for a reward", async () => { scene.money = 20000; - game.override.moveset([Moves.TACKLE]); + game.override.moveset([MoveId.TACKLE]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); @@ -195,7 +195,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should have Wide Lens item in rewards if Wubboffet is at 15-33% HP remaining", async () => { scene.money = 20000; - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); @@ -225,7 +225,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should have Scope Lens item in rewards if Wubboffet is at 3-15% HP remaining", async () => { scene.money = 20000; - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); @@ -255,7 +255,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should have Multi Lens item in rewards if Wubboffet is at <3% HP remaining", async () => { scene.money = 20000; - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); diff --git a/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/test/mystery-encounter/encounters/part-timer-encounter.test.ts index 639a2e140ff..a6c6476e4e6 100644 --- a/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -15,7 +15,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { PartTimerEncounter } from "#app/data/mystery-encounters/encounters/part-timer-encounter"; import { PokemonMove } from "#app/field/pokemon"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; const namespace = "mysteryEncounters/partTimer"; @@ -259,7 +259,7 @@ describe("Part-Timer - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.PART_TIMER, defaultParty); // Mock moveset - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.ATTRACT)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.ATTRACT)]; await runMysteryEncounterToEnd(game, 3); expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene.getWaveMoneyAmount(2.5), true, false); diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index 5401d5e9d08..c0a0b2d399d 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -11,7 +11,7 @@ import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import { TheStrongStuffEncounter } from "#app/data/mystery-encounters/encounters/the-strong-stuff-encounter"; import { Nature } from "#enums/nature"; @@ -115,7 +115,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { shiny: false, customPokemonData: new CustomPokemonData({ spriteScale: 1.25 }), nature: Nature.HARDY, - moveSet: [Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER], + moveSet: [MoveId.INFESTATION, MoveId.SALT_CURE, MoveId.GASTRO_ACID, MoveId.HEAL_ORDER], modifierConfigs: expect.any(Array), tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], mysteryEncounterBattleEffects: expect.any(Function), @@ -215,17 +215,17 @@ describe("The Strong Stuff - Mystery Encounter", () => { ); expect(shuckleItems.find(m => m instanceof BerryModifier && m.berryType === BerryType.LUM)?.stackCount).toBe(2); expect(enemyField[0].moveset).toEqual([ - new PokemonMove(Moves.INFESTATION), - new PokemonMove(Moves.SALT_CURE), - new PokemonMove(Moves.GASTRO_ACID), - new PokemonMove(Moves.HEAL_ORDER), + new PokemonMove(MoveId.INFESTATION), + new PokemonMove(MoveId.SALT_CURE), + new PokemonMove(MoveId.GASTRO_ACID), + new PokemonMove(MoveId.HEAL_ORDER), ]); // Should have used moves pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(2); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.GASTRO_ACID).length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.STEALTH_ROCK).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.GASTRO_ACID).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.STEALTH_ROCK).length).toBe(1); }); it("should have Soul Dew in rewards", async () => { diff --git a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts index 4cb712ce779..f2c428f1ada 100644 --- a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts @@ -16,7 +16,7 @@ import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { TrainerType } from "#enums/trainer-type"; import { Nature } from "#enums/nature"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { TheWinstrateChallengeEncounter } from "#app/data/mystery-encounters/encounters/the-winstrate-challenge-encounter"; import { Status } from "#app/data/status-effect"; @@ -115,7 +115,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 0, // Soundproof nature: Nature.MODEST, - moveSet: [Moves.THUNDERBOLT, Moves.GIGA_DRAIN, Moves.FOUL_PLAY, Moves.THUNDER_WAVE], + moveSet: [MoveId.THUNDERBOLT, MoveId.GIGA_DRAIN, MoveId.FOUL_PLAY, MoveId.THUNDER_WAVE], modifierConfigs: expect.any(Array), }, { @@ -123,7 +123,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 2, // Gluttony nature: Nature.QUIET, - moveSet: [Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE], + moveSet: [MoveId.SLUDGE_BOMB, MoveId.GIGA_DRAIN, MoveId.ICE_BEAM, MoveId.EARTHQUAKE], modifierConfigs: expect.any(Array), }, { @@ -131,7 +131,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 2, // Tangled Feet nature: Nature.JOLLY, - moveSet: [Moves.DRILL_PECK, Moves.QUICK_ATTACK, Moves.THRASH, Moves.KNOCK_OFF], + moveSet: [MoveId.DRILL_PECK, MoveId.QUICK_ATTACK, MoveId.THRASH, MoveId.KNOCK_OFF], modifierConfigs: expect.any(Array), }, { @@ -139,7 +139,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, formIndex: 1, nature: Nature.BOLD, - moveSet: [Moves.PSYCHIC, Moves.SHADOW_BALL, Moves.FOCUS_BLAST, Moves.THUNDERBOLT], + moveSet: [MoveId.PSYCHIC, MoveId.SHADOW_BALL, MoveId.FOCUS_BLAST, MoveId.THUNDERBOLT], modifierConfigs: expect.any(Array), }, { @@ -147,7 +147,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 0, // Sheer Force nature: Nature.IMPISH, - moveSet: [Moves.EARTHQUAKE, Moves.U_TURN, Moves.FLARE_BLITZ, Moves.ROCK_SLIDE], + moveSet: [MoveId.EARTHQUAKE, MoveId.U_TURN, MoveId.FLARE_BLITZ, MoveId.ROCK_SLIDE], modifierConfigs: expect.any(Array), }, ], @@ -160,7 +160,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, formIndex: 1, nature: Nature.IMPISH, - moveSet: [Moves.AXE_KICK, Moves.ICE_PUNCH, Moves.ZEN_HEADBUTT, Moves.BULLET_PUNCH], + moveSet: [MoveId.AXE_KICK, MoveId.ICE_PUNCH, MoveId.ZEN_HEADBUTT, MoveId.BULLET_PUNCH], modifierConfigs: expect.any(Array), }, ], @@ -173,7 +173,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 3, // Lightning Rod nature: Nature.ADAMANT, - moveSet: [Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST], + moveSet: [MoveId.WATERFALL, MoveId.MEGAHORN, MoveId.KNOCK_OFF, MoveId.REST], modifierConfigs: expect.any(Array), }, { @@ -181,7 +181,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 1, // Poison Heal nature: Nature.JOLLY, - moveSet: [Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH], + moveSet: [MoveId.SPORE, MoveId.SWORDS_DANCE, MoveId.SEED_BOMB, MoveId.DRAIN_PUNCH], modifierConfigs: expect.any(Array), }, { @@ -189,7 +189,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, formIndex: 1, nature: Nature.CALM, - moveSet: [Moves.EARTH_POWER, Moves.FIRE_BLAST, Moves.YAWN, Moves.PROTECT], + moveSet: [MoveId.EARTH_POWER, MoveId.FIRE_BLAST, MoveId.YAWN, MoveId.PROTECT], modifierConfigs: expect.any(Array), }, ], @@ -202,7 +202,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 0, // Natural Cure nature: Nature.CALM, - moveSet: [Moves.SYNTHESIS, Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.SLEEP_POWDER], + moveSet: [MoveId.SYNTHESIS, MoveId.SLUDGE_BOMB, MoveId.GIGA_DRAIN, MoveId.SLEEP_POWDER], modifierConfigs: expect.any(Array), }, { @@ -210,7 +210,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, formIndex: 1, nature: Nature.TIMID, - moveSet: [Moves.PSYSHOCK, Moves.MOONBLAST, Moves.SHADOW_BALL, Moves.WILL_O_WISP], + moveSet: [MoveId.PSYSHOCK, MoveId.MOONBLAST, MoveId.SHADOW_BALL, MoveId.WILL_O_WISP], modifierConfigs: expect.any(Array), }, ], @@ -223,7 +223,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 0, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.BRAVE_BIRD, Moves.PROTECT, Moves.QUICK_ATTACK], + moveSet: [MoveId.FACADE, MoveId.BRAVE_BIRD, MoveId.PROTECT, MoveId.QUICK_ATTACK], modifierConfigs: expect.any(Array), }, { @@ -231,7 +231,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 1, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.OBSTRUCT, Moves.NIGHT_SLASH, Moves.FIRE_PUNCH], + moveSet: [MoveId.FACADE, MoveId.OBSTRUCT, MoveId.NIGHT_SLASH, MoveId.FIRE_PUNCH], modifierConfigs: expect.any(Array), }, ], diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 2f910a9250f..b6e6dd46962 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -22,7 +22,7 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { UiMode } from "#enums/ui-mode"; import * as Utils from "#app/utils/common"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { @@ -100,7 +100,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { shiny: false, // Shiny lock because of custom intro sprite formIndex: 1, // Gmax bossSegmentModifier: 1, // +1 Segment from normal - moveSet: [Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.HAMMER_ARM, Moves.PAYBACK], + moveSet: [MoveId.GUNK_SHOT, MoveId.STOMPING_TANTRUM, MoveId.HAMMER_ARM, MoveId.PAYBACK], modifierConfigs: [ { modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, @@ -225,17 +225,17 @@ describe("Trash to Treasure - Mystery Encounter", () => { expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(Species.GARBODOR); expect(enemyField[0].moveset).toEqual([ - new PokemonMove(Moves.GUNK_SHOT), - new PokemonMove(Moves.STOMPING_TANTRUM), - new PokemonMove(Moves.HAMMER_ARM), - new PokemonMove(Moves.PAYBACK), + new PokemonMove(MoveId.GUNK_SHOT), + new PokemonMove(MoveId.STOMPING_TANTRUM), + new PokemonMove(MoveId.HAMMER_ARM), + new PokemonMove(MoveId.PAYBACK), ]); // Should have used moves pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(2); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.TOXIC).length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.STOCKPILE).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.TOXIC).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === MoveId.STOCKPILE).length).toBe(1); }); it("should have 2 Rogue, 1 Ultra, 1 Great in rewards", async () => { diff --git a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index 5b32429e1bf..b09b8429880 100644 --- a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -8,7 +8,7 @@ import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type BattleScene from "#app/battle-scene"; import { PokemonMove } from "#app/field/pokemon"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; @@ -133,7 +133,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { // Should have used its egg move pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); - const eggMoves: Moves[] = speciesEggMoves[getPokemonSpecies(speciesToSpawn).getRootSpeciesId()]; + const eggMoves: MoveId[] = speciesEggMoves[getPokemonSpecies(speciesToSpawn).getRootSpeciesId()]; const usedMove = (movePhases[0] as MovePhase).move.moveId; expect(eggMoves.includes(usedMove)).toBe(true); }); @@ -160,7 +160,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { // Should have used its egg move pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); - const eggMoves: Moves[] = speciesEggMoves[getPokemonSpecies(speciesToSpawn).getRootSpeciesId()]; + const eggMoves: MoveId[] = speciesEggMoves[getPokemonSpecies(speciesToSpawn).getRootSpeciesId()]; const usedMove = (movePhases[0] as MovePhase).move.moveId; expect(eggMoves.includes(usedMove)).toBe(true); }); @@ -272,7 +272,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { const leaveEncounterWithoutBattleSpy = vi.spyOn(EncounterPhaseUtils, "leaveEncounterWithoutBattle"); await game.runToMysteryEncounter(MysteryEncounterType.UNCOMMON_BREED, defaultParty); // Mock moveset - scene.getPlayerParty()[0].moveset = [new PokemonMove(Moves.CHARM)]; + scene.getPlayerParty()[0].moveset = [new PokemonMove(MoveId.CHARM)]; await runMysteryEncounterToEnd(game, 3); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); diff --git a/test/phases/form-change-phase.test.ts b/test/phases/form-change-phase.test.ts index df89846a474..409a9e54788 100644 --- a/test/phases/form-change-phase.test.ts +++ b/test/phases/form-change-phase.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,13 +25,13 @@ describe("Form Change Phase", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); it("Zacian should successfully change into Crowned form", async () => { @@ -48,7 +48,7 @@ describe("Form Change Phase", () => { const rustedSword = rustedSwordType.newModifier(zacian); await game.scene.addModifier(rustedSword); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); // After the form change: Should be Crowned form diff --git a/test/phases/frenzy-move-reset.test.ts b/test/phases/frenzy-move-reset.test.ts index b52b198661f..9ecd904f01c 100644 --- a/test/phases/frenzy-move-reset.test.ts +++ b/test/phases/frenzy-move-reset.test.ts @@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle"; import { AbilityId } from "#enums/ability-id"; import { BattlerTagType } from "#enums/battler-tag-type"; import { StatusEffect } from "#enums/status-effect"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -28,9 +28,9 @@ describe("Frenzy Move Reset", () => { .battleStyle("single") .disableCrits() .starterSpecies(Species.MAGIKARP) - .moveset(Moves.THRASH) + .moveset(MoveId.THRASH) .statusEffect(StatusEffect.PARALYSIS) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemyLevel(100) .enemySpecies(Species.SHUCKLE) .enemyAbility(AbilityId.BALL_FETCH); @@ -54,7 +54,7 @@ describe("Frenzy Move Reset", () => { const playerPokemon = game.scene.getPlayerPokemon()!; - game.move.select(Moves.THRASH); + game.move.select(MoveId.THRASH); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.move.forceStatusActivation(false); await game.toNextTurn(); diff --git a/test/phases/game-over-phase.test.ts b/test/phases/game-over-phase.test.ts index 49b687eee10..c1fd25634cb 100644 --- a/test/phases/game-over-phase.test.ts +++ b/test/phases/game-over-phase.test.ts @@ -1,6 +1,6 @@ import { Biome } from "#enums/biome"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -25,12 +25,12 @@ describe("Game Over Phase", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.MEMENTO, Moves.ICE_BEAM, Moves.SPLASH]) + .moveset([MoveId.MEMENTO, MoveId.ICE_BEAM, MoveId.SPLASH]) .ability(AbilityId.BALL_FETCH) .battleStyle("single") .disableCrits() .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .startingWave(200) .startingBiome(Biome.END) .startingLevel(10000); @@ -42,11 +42,11 @@ describe("Game Over Phase", () => { // Note: `game.doKillOpponents()` does not properly handle final boss // Final boss phase 1 - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.toNextTurn(); // Final boss phase 2 - game.move.select(Moves.ICE_BEAM); + game.move.select(MoveId.ICE_BEAM); await game.phaseInterceptor.to("PostGameOverPhase", false); // The game refused to actually give the vouchers during tests, @@ -63,7 +63,7 @@ describe("Game Over Phase", () => { await game.classicMode.startBattle([Species.BULBASAUR]); vi.spyOn(game.scene, "validateAchv"); - game.move.select(Moves.MEMENTO); + game.move.select(MoveId.MEMENTO); await game.phaseInterceptor.to("PostGameOverPhase", false); expect(game.phaseInterceptor.log.includes("GameOverPhase")).toBe(true); diff --git a/test/phases/learn-move-phase.test.ts b/test/phases/learn-move-phase.test.ts index b8b718a9669..4d81d46533e 100644 --- a/test/phases/learn-move-phase.test.ts +++ b/test/phases/learn-move-phase.test.ts @@ -2,7 +2,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { UiMode } from "#enums/ui-mode"; import { Button } from "#app/enums/buttons"; @@ -27,11 +27,11 @@ describe("Learn Move Phase", () => { }); it("If Pokemon has less than 4 moves, its newest move will be added to the lowest empty index", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.BULBASAUR]); const pokemon = game.scene.getPlayerPokemon()!; const newMovePos = pokemon?.getMoveset().length; - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(LearnMovePhase); const levelMove = pokemon.getLevelMoves(5)[0]; @@ -44,11 +44,11 @@ describe("Learn Move Phase", () => { it("If a pokemon has 4 move slots filled, the chosen move will be deleted and replaced", async () => { await game.classicMode.startBattle([Species.BULBASAUR]); const bulbasaur = game.scene.getPlayerPokemon()!; - const prevMoveset = [Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP]; + const prevMoveset = [MoveId.SPLASH, MoveId.ABSORB, MoveId.ACID, MoveId.VINE_WHIP]; const moveSlotNum = 3; game.move.changeMoveset(bulbasaur, prevMoveset); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); // queue up inputs to confirm dialog boxes @@ -67,7 +67,7 @@ describe("Learn Move Phase", () => { expect(bulbasaur.level).toBeGreaterThanOrEqual(levelReq); // Check each of mr mime's moveslots to make sure the changed move (and ONLY the changed move) is different bulbasaur.getMoveset().forEach((move, index) => { - const expectedMove: Moves = index === moveSlotNum ? levelMoveId : prevMoveset[index]; + const expectedMove: MoveId = index === moveSlotNum ? levelMoveId : prevMoveset[index]; expect(move?.moveId).toBe(expectedMove); }); }); @@ -75,10 +75,10 @@ describe("Learn Move Phase", () => { it("selecting the newly deleted move will reject it and keep old moveset", async () => { await game.classicMode.startBattle([Species.BULBASAUR]); const bulbasaur = game.scene.getPlayerPokemon()!; - const prevMoveset = [Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP]; + const prevMoveset = [MoveId.SPLASH, MoveId.ABSORB, MoveId.ACID, MoveId.VINE_WHIP]; - game.move.changeMoveset(bulbasaur, [Moves.SPLASH, Moves.ABSORB, Moves.ACID, Moves.VINE_WHIP]); - game.move.select(Moves.SPLASH); + game.move.changeMoveset(bulbasaur, [MoveId.SPLASH, MoveId.ABSORB, MoveId.ACID, MoveId.VINE_WHIP]); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); // queue up inputs to confirm dialog boxes diff --git a/test/phases/select-modifier-phase.test.ts b/test/phases/select-modifier-phase.test.ts index 64ab17e9d15..645ba0b5fb8 100644 --- a/test/phases/select-modifier-phase.test.ts +++ b/test/phases/select-modifier-phase.test.ts @@ -10,7 +10,7 @@ import { UiMode } from "#enums/ui-mode"; import { shiftCharCodes } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { Button } from "#enums/buttons"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; @@ -33,7 +33,7 @@ describe("SelectModifierPhase", () => { scene = game.scene; game.override - .moveset([Moves.FISSURE, Moves.SPLASH]) + .moveset([MoveId.FISSURE, MoveId.SPLASH]) .ability(AbilityId.NO_GUARD) .startingLevel(200) .enemySpecies(Species.MAGIKARP); @@ -56,7 +56,7 @@ describe("SelectModifierPhase", () => { it("should generate random modifiers", async () => { await game.classicMode.startBattle([Species.ABRA, Species.VOLCARONA]); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -92,7 +92,7 @@ describe("SelectModifierPhase", () => { scene.money = 1000000; scene.shopCursorTarget = 0; - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to("SelectModifierPhase"); // TODO: nagivate the ui to reroll somehow @@ -122,7 +122,7 @@ describe("SelectModifierPhase", () => { scene.rngCounter = 0; }); - game.move.select(Moves.FISSURE); + game.move.select(MoveId.FISSURE); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -165,7 +165,7 @@ describe("SelectModifierPhase", () => { }; const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); scene.unshiftPhase(selectModifierPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -202,7 +202,7 @@ describe("SelectModifierPhase", () => { const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); scene.unshiftPhase(selectModifierPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -241,7 +241,7 @@ describe("SelectModifierPhase", () => { }; const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); scene.unshiftPhase(selectModifierPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -265,7 +265,7 @@ describe("SelectModifierPhase", () => { }; const selectModifierPhase = new SelectModifierPhase(0, undefined, customModifiers); scene.unshiftPhase(selectModifierPhase); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.run(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/reload.test.ts b/test/reload.test.ts index 93823e06cce..de71c75c9bb 100644 --- a/test/reload.test.ts +++ b/test/reload.test.ts @@ -4,7 +4,7 @@ import type OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handle import { UiMode } from "#enums/ui-mode"; import { Biome } from "#enums/biome"; import { Button } from "#enums/buttons"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import type { MockClock } from "#test/testUtils/mocks/mockClock"; @@ -51,12 +51,12 @@ describe("Reload", () => { .battleStyle("single") .startingLevel(100) // Avoid levelling up .disableTrainerWaves() - .moveset([Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH); await game.dailyMode.startBattle(); // Transition from Wave 10 to Wave 11 in order to trigger biome switch - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); game.onNextPrompt("SelectBiomePhase", UiMode.OPTION_SELECT, () => { (game.scene.time as MockClock).overrideDelay = null; @@ -84,12 +84,12 @@ describe("Reload", () => { .battleStyle("single") .startingLevel(100) // Avoid levelling up .disableTrainerWaves() - .moveset([Moves.SPLASH]) - .enemyMoveset(Moves.SPLASH); + .moveset([MoveId.SPLASH]) + .enemyMoveset(MoveId.SPLASH); await game.classicMode.startBattle(); // Apparently daily mode would override the biome // Transition from Wave 10 to Wave 11 in order to trigger biome switch - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.toNextWave(); expect(game.phaseInterceptor.log).toContain("NewBiomeEncounterPhase"); diff --git a/test/system/game_data.test.ts b/test/system/game_data.test.ts index 7d9b7cdd712..20e73796464 100644 --- a/test/system/game_data.test.ts +++ b/test/system/game_data.test.ts @@ -2,7 +2,7 @@ import * as bypassLoginModule from "#app/global-vars/bypass-login"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type { SessionSaveData } from "#app/system/game-data"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -21,10 +21,10 @@ describe("System - Game Data", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([MoveId.SPLASH]) .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(MoveId.SPLASH); }); afterEach(() => { diff --git a/test/testUtils/gameManagerUtils.ts b/test/testUtils/gameManagerUtils.ts index 9e9c8f15f96..16339fe8b4e 100644 --- a/test/testUtils/gameManagerUtils.ts +++ b/test/testUtils/gameManagerUtils.ts @@ -8,7 +8,7 @@ import { PlayerPokemon } from "#app/field/pokemon"; import { GameModes, getGameMode } from "#app/game-mode"; import type { StarterMoveset } from "#app/system/game-data"; import type { Starter } from "#app/ui/starter-select-ui-handler"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type { Species } from "#enums/species"; /** Function to convert Blob to string */ @@ -52,7 +52,7 @@ export function generateStarter(scene: BattleScene, species?: Species[]): Starte undefined, starter.nature, ); - const moveset: Moves[] = []; + const moveset: MoveId[] = []; starterPokemon.moveset.forEach(move => { moveset.push(move!.getMove().id); }); @@ -97,11 +97,11 @@ export function waitUntil(truth): Promise { } /** Get the index of `move` from the moveset of the pokemon on the player's field at location `pokemonIndex` */ -export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: Moves): number { +export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: MoveId): number { const playerPokemon = scene.getPlayerField()[pokemonIndex]; const moveSet = playerPokemon.getMoveset(); const index = moveSet.findIndex(m => m.moveId === move && m.ppUsed < m.getMovePp()); - console.log(`Move position for ${Moves[move]} (=${move}):`, index); + console.log(`Move position for ${MoveId[move]} (=${move}):`, index); return index; } diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index b3cdffeb636..5bbfeb84b0a 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -7,7 +7,7 @@ import type { CommandPhase } from "#app/phases/command-phase"; import type { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Command } from "#app/ui/command-ui-handler"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import { UiMode } from "#enums/ui-mode"; import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { GameManagerHelper } from "#test/testUtils/helpers/gameManagerHelper"; @@ -50,7 +50,7 @@ export class MoveHelper extends GameManagerHelper { * @param pkmIndex - the pokemon index. Relevant for double-battles only (defaults to 0) * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required */ - public select(move: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { + public select(move: MoveId, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { const movePosition = getMovePosition(this.game.scene, pkmIndex, move); this.game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { @@ -72,7 +72,7 @@ export class MoveHelper extends GameManagerHelper { * @param pkmIndex - the pokemon index. Relevant for double-battles only (defaults to 0) * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required */ - public selectWithTera(move: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { + public selectWithTera(move: MoveId, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { const movePosition = getMovePosition(this.game.scene, pkmIndex, move); this.game.scene.getPlayerParty()[pkmIndex].isTerastallized = false; @@ -105,7 +105,7 @@ export class MoveHelper extends GameManagerHelper { * @param targetIndex - (optional) The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required * @param useTera - If `true`, the Pokemon also chooses to Terastallize. This does not require a Tera Orb. Default: `false`. */ - public use(moveId: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null, useTera = false): void { + public use(moveId: MoveId, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null, useTera = false): void { if ([Overrides.MOVESET_OVERRIDE].flat().length > 0) { vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([]); console.warn("Warning: `use` overwrites the Pokemon's moveset and disables the player moveset override!"); @@ -147,9 +147,9 @@ export class MoveHelper extends GameManagerHelper { * Changes a pokemon's moveset to the given move(s). * Used when the normal moveset override can't be used (such as when it's necessary to check or update properties of the moveset). * @param pokemon - The {@linkcode Pokemon} being modified - * @param moveset - The {@linkcode Moves} (single or array) to change the Pokemon's moveset to + * @param moveset - The {@linkcode MoveId} (single or array) to change the Pokemon's moveset to */ - public changeMoveset(pokemon: Pokemon, moveset: Moves | Moves[]): void { + public changeMoveset(pokemon: Pokemon, moveset: MoveId | MoveId[]): void { if (!Array.isArray(moveset)) { moveset = [moveset]; } @@ -157,7 +157,7 @@ export class MoveHelper extends GameManagerHelper { moveset.forEach(move => { pokemon.moveset.push(new PokemonMove(move)); }); - const movesetStr = moveset.map(moveId => Moves[moveId]).join(", "); + const movesetStr = moveset.map(moveId => MoveId[moveId]).join(", "); console.log(`Pokemon ${pokemon.species.name}'s moveset manually set to ${movesetStr} (=[${moveset.join(", ")}])!`); } @@ -167,7 +167,7 @@ export class MoveHelper extends GameManagerHelper { * @param moveId The {@linkcode MoveId | move} the enemy will use * @param target (Optional) the {@linkcode BattlerIndex | target} which the enemy will use the given move against */ - public async selectEnemyMove(moveId: Moves, target?: BattlerIndex) { + public async selectEnemyMove(moveId: MoveId, target?: BattlerIndex) { // Wait for the next EnemyCommandPhase to start await this.game.phaseInterceptor.to("EnemyCommandPhase", false); const enemy = @@ -200,7 +200,7 @@ export class MoveHelper extends GameManagerHelper { * @param moveId The {@linkcode MoveId | move} the enemy will use * @param target (Optional) the {@linkcode BattlerIndex | target} which the enemy will use the given move against */ - public async forceEnemyMove(moveId: Moves, target?: BattlerIndex) { + public async forceEnemyMove(moveId: MoveId, target?: BattlerIndex) { // Wait for the next EnemyCommandPhase to start await this.game.phaseInterceptor.to("EnemyCommandPhase", false); diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index 36b4264119d..7946a484814 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -6,7 +6,7 @@ import type { BattleStyle } from "#app/overrides"; import Overrides, { defaultOverrides } from "#app/overrides"; import type { Unlockables } from "#app/system/unlockables"; import { Biome } from "#enums/biome"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import type { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; @@ -196,16 +196,16 @@ export class OverridesHelper extends GameManagerHelper { return this; } /** - * Override the player pokemon's {@linkcode Moves | moves}set - * @param moveset - The {@linkcode Moves | moves}set to set + * Override the player pokemon's {@linkcode MoveId | moves}set + * @param moveset - The {@linkcode MoveId | moves}set to set * @returns `this` */ - public moveset(moveset: Moves | Moves[]): this { + public moveset(moveset: MoveId | MoveId[]): this { vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue(moveset); if (!Array.isArray(moveset)) { moveset = [moveset]; } - const movesetStr = moveset.map(moveId => Moves[moveId]).join(", "); + const movesetStr = moveset.map(moveId => MoveId[moveId]).join(", "); this.log(`Player Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`); return this; } @@ -376,16 +376,16 @@ export class OverridesHelper extends GameManagerHelper { } /** - * Override the {@linkcode Moves | move}set of enemy pokemon - * @param moveset - The {@linkcode Moves | move}set to set + * Override the {@linkcode MoveId | move}set of enemy pokemon + * @param moveset - The {@linkcode MoveId | move}set to set * @returns `this` */ - public enemyMoveset(moveset: Moves | Moves[]): this { + public enemyMoveset(moveset: MoveId | MoveId[]): this { vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(moveset); if (!Array.isArray(moveset)) { moveset = [moveset]; } - const movesetStr = moveset.map(moveId => Moves[moveId]).join(", "); + const movesetStr = moveset.map(moveId => MoveId[moveId]).join(", "); this.log(`Enemy Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`); return this; } diff --git a/test/ui/battle_info.test.ts b/test/ui/battle_info.test.ts index 55eb2591ead..2320779bdc1 100644 --- a/test/ui/battle_info.test.ts +++ b/test/ui/battle_info.test.ts @@ -2,7 +2,7 @@ import { ExpGainsSpeed } from "#app/enums/exp-gains-speed"; import { Species } from "#app/enums/species"; import { ExpPhase } from "#app/phases/exp-phase"; import { AbilityId } from "#enums/ability-id"; -import { Moves } from "#enums/moves"; +import { MoveId } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -31,10 +31,10 @@ describe("UI - Battle Info", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.GUILLOTINE, Moves.SPLASH]) + .moveset([MoveId.GUILLOTINE, MoveId.SPLASH]) .battleStyle("single") .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyMoveset(MoveId.SPLASH) .enemySpecies(Species.CATERPIE); }); @@ -46,7 +46,7 @@ describe("UI - Battle Info", () => { await game.classicMode.startBattle([Species.CHARIZARD]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(ExpPhase, true); diff --git a/test/ui/transfer-item.test.ts b/test/ui/transfer-item.test.ts index f0ea8f84005..9c92828fc4a 100644 --- a/test/ui/transfer-item.test.ts +++ b/test/ui/transfer-item.test.ts @@ -1,6 +1,6 @@ import { BerryType } from "#app/enums/berry-type"; import { Button } from "#app/enums/buttons"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; @@ -34,13 +34,13 @@ describe("UI - Transfer Items", () => { { name: "BERRY", count: 2, type: BerryType.APICOT }, { name: "BERRY", count: 2, type: BerryType.LUM }, ]); - game.override.moveset([Moves.DRAGON_CLAW]); + game.override.moveset([MoveId.DRAGON_CLAW]); game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([MoveId.SPLASH]); await game.classicMode.startBattle([Species.RAYQUAZA, Species.RAYQUAZA, Species.RAYQUAZA]); - game.move.select(Moves.DRAGON_CLAW); + game.move.select(MoveId.DRAGON_CLAW); game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, () => { expect(game.scene.ui.getHandler()).toBeInstanceOf(ModifierSelectUiHandler); diff --git a/test/ui/type-hints.test.ts b/test/ui/type-hints.test.ts index b32f5ed9b88..53c9d36a09a 100644 --- a/test/ui/type-hints.test.ts +++ b/test/ui/type-hints.test.ts @@ -1,5 +1,5 @@ import { Button } from "#app/enums/buttons"; -import { Moves } from "#app/enums/moves"; +import { MoveId } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { CommandPhase } from "#app/phases/command-phase"; import FightUiHandler from "#app/ui/fight-ui-handler"; @@ -27,7 +27,7 @@ describe("UI - Type Hints", () => { beforeEach(async () => { game = new GameManager(phaserGame); game.settings.typeHints(true); //activate type hints - game.override.battleStyle("single").startingLevel(100).startingWave(1).enemyMoveset(Moves.SPLASH); + game.override.battleStyle("single").startingLevel(100).startingWave(1).enemyMoveset(MoveId.SPLASH); }); it("check immunity color", async () => { @@ -36,8 +36,8 @@ describe("UI - Type Hints", () => { .startingLevel(100) .startingWave(1) .enemySpecies(Species.FLORGES) - .enemyMoveset(Moves.SPLASH) - .moveset([Moves.DRAGON_CLAW]); + .enemyMoveset(MoveId.SPLASH) + .moveset([MoveId.DRAGON_CLAW]); game.settings.typeHints(true); //activate type hints await game.classicMode.startBattle([Species.RAYQUAZA]); @@ -63,7 +63,7 @@ describe("UI - Type Hints", () => { }); it("check status move color", async () => { - game.override.enemySpecies(Species.FLORGES).moveset([Moves.GROWL]); + game.override.enemySpecies(Species.FLORGES).moveset([MoveId.GROWL]); await game.classicMode.startBattle([Species.RAYQUAZA]); @@ -90,17 +90,17 @@ describe("UI - Type Hints", () => { it("should show the proper hint for a move in doubles after one of the enemy pokemon flees", async () => { game.override .enemySpecies(Species.ABRA) - .moveset([Moves.SPLASH, Moves.SHADOW_BALL, Moves.SOAK]) - .enemyMoveset([Moves.SPLASH, Moves.TELEPORT]) + .moveset([MoveId.SPLASH, MoveId.SHADOW_BALL, MoveId.SOAK]) + .enemyMoveset([MoveId.SPLASH, MoveId.TELEPORT]) .battleStyle("double"); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); - game.move.select(Moves.SPLASH); + game.move.select(MoveId.SPLASH); // Use soak to change type of remaining abra to water - game.move.select(Moves.SOAK, 1); + game.move.select(MoveId.SOAK, 1); - await game.move.selectEnemyMove(Moves.SPLASH); - await game.move.selectEnemyMove(Moves.TELEPORT); + await game.move.selectEnemyMove(MoveId.SPLASH); + await game.move.selectEnemyMove(MoveId.TELEPORT); await game.toNextTurn(); game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => {