From 97124575a09d7bcf3e8e44abb0b5cdbd65d887fa Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Tue, 25 Feb 2025 23:19:32 -0600 Subject: [PATCH] make invalidXMoves into sets and move their defs --- src/data/moves/invalid-moves.ts | 281 ++++++++++++++++++++++++++++++ src/data/moves/move.ts | 291 +------------------------------- 2 files changed, 289 insertions(+), 283 deletions(-) create mode 100644 src/data/moves/invalid-moves.ts diff --git a/src/data/moves/invalid-moves.ts b/src/data/moves/invalid-moves.ts new file mode 100644 index 00000000000..50f815b9e58 --- /dev/null +++ b/src/data/moves/invalid-moves.ts @@ -0,0 +1,281 @@ +import { Moves } 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.APPLE_ACID, + Moves.ARMOR_CANNON, + Moves.ASSIST, + Moves.ASTRAL_BARRAGE, + Moves.AURA_WHEEL, + Moves.BANEFUL_BUNKER, + Moves.BEAK_BLAST, + Moves.BEHEMOTH_BASH, + Moves.BEHEMOTH_BLADE, + Moves.BELCH, + Moves.BESTOW, + Moves.BLAZING_TORQUE, + Moves.BODY_PRESS, + Moves.BRANCH_POKE, + Moves.BREAKING_SWIPE, + Moves.CELEBRATE, + Moves.CHATTER, + Moves.CHILLING_WATER, + Moves.CHILLY_RECEPTION, + Moves.CLANGOROUS_SOUL, + Moves.COLLISION_COURSE, + Moves.COMBAT_TORQUE, + Moves.COMEUPPANCE, + Moves.COPYCAT, + Moves.COUNTER, + Moves.COVET, + Moves.CRAFTY_SHIELD, + Moves.DECORATE, + Moves.DESTINY_BOND, + Moves.DETECT, + Moves.DIAMOND_STORM, + Moves.DOODLE, + Moves.DOUBLE_IRON_BASH, + Moves.DOUBLE_SHOCK, + Moves.DRAGON_ASCENT, + Moves.DRAGON_ENERGY, + Moves.DRUM_BEATING, + Moves.DYNAMAX_CANNON, + Moves.ELECTRO_DRIFT, + Moves.ENDURE, + Moves.ETERNABEAM, + Moves.FALSE_SURRENDER, + Moves.FEINT, + Moves.FIERY_WRATH, + Moves.FILLET_AWAY, + Moves.FLEUR_CANNON, + Moves.FOCUS_PUNCH, + Moves.FOLLOW_ME, + Moves.FREEZE_SHOCK, + Moves.FREEZING_GLARE, + Moves.GLACIAL_LANCE, + Moves.GRAV_APPLE, + Moves.HELPING_HAND, + Moves.HOLD_HANDS, + Moves.HYPER_DRILL, + Moves.HYPERSPACE_FURY, + Moves.HYPERSPACE_HOLE, + Moves.ICE_BURN, + Moves.INSTRUCT, + Moves.JET_PUNCH, + Moves.JUNGLE_HEALING, + Moves.KINGS_SHIELD, + Moves.LIFE_DEW, + Moves.LIGHT_OF_RUIN, + Moves.MAKE_IT_RAIN, + Moves.MAGICAL_TORQUE, + Moves.MAT_BLOCK, + Moves.ME_FIRST, + Moves.METEOR_ASSAULT, + Moves.METRONOME, + Moves.MIMIC, + Moves.MIND_BLOWN, + Moves.MIRROR_COAT, + Moves.MIRROR_MOVE, + Moves.MOONGEIST_BEAM, + Moves.NATURE_POWER, + Moves.NATURES_MADNESS, + Moves.NOXIOUS_TORQUE, + Moves.OBSTRUCT, + Moves.ORDER_UP, + Moves.ORIGIN_PULSE, + Moves.OVERDRIVE, + Moves.PHOTON_GEYSER, + Moves.PLASMA_FISTS, + Moves.POPULATION_BOMB, + Moves.POUNCE, + Moves.POWER_SHIFT, + Moves.PRECIPICE_BLADES, + Moves.PROTECT, + Moves.PYRO_BALL, + Moves.QUASH, + Moves.QUICK_GUARD, + Moves.RAGE_FIST, + Moves.RAGE_POWDER, + Moves.RAGING_BULL, + Moves.RAGING_FURY, + Moves.RELIC_SONG, + Moves.REVIVAL_BLESSING, + Moves.RUINATION, + Moves.SALT_CURE, + Moves.SECRET_SWORD, + Moves.SHED_TAIL, + Moves.SHELL_TRAP, + Moves.SILK_TRAP, + Moves.SKETCH, + Moves.SLEEP_TALK, + Moves.SNAP_TRAP, + Moves.SNARL, + Moves.SNATCH, + Moves.SNORE, + Moves.SNOWSCAPE, + Moves.SPECTRAL_THIEF, + Moves.SPICY_EXTRACT, + Moves.SPIKY_SHIELD, + Moves.SPIRIT_BREAK, + Moves.SPOTLIGHT, + Moves.STEAM_ERUPTION, + Moves.STEEL_BEAM, + Moves.STRANGE_STEAM, + Moves.STRUGGLE, + Moves.SUNSTEEL_STRIKE, + Moves.SURGING_STRIKES, + Moves.SWITCHEROO, + Moves.TECHNO_BLAST, + Moves.TERA_STARSTORM, + Moves.THIEF, + Moves.THOUSAND_ARROWS, + Moves.THOUSAND_WAVES, + Moves.THUNDER_CAGE, + Moves.THUNDEROUS_KICK, + Moves.TIDY_UP, + Moves.TRAILBLAZE, + Moves.TRANSFORM, + Moves.TRICK, + Moves.TWIN_BEAM, + Moves.V_CREATE, + Moves.WICKED_BLOW, + Moves.WICKED_TORQUE, + Moves.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.COVET, + 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.THIEF, + Moves.TRANSFORM, + Moves.TRICK, + Moves.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.DYNAMAX_CANNON, + 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 copied by {@linkcode Moves.COPYCAT Copycat} */ +export const invalidCopycatMoves: ReadonlySet = new Set([ + Moves.ASSIST, + Moves.BANEFUL_BUNKER, + Moves.BEAK_BLAST, + Moves.BEHEMOTH_BASH, + Moves.BEHEMOTH_BLADE, + Moves.BESTOW, + Moves.CELEBRATE, + Moves.CHATTER, + Moves.CIRCLE_THROW, + Moves.COPYCAT, + Moves.COUNTER, + Moves.COVET, + 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.THIEF, + Moves.TRANSFORM, + Moves.TRICK, + Moves.WHIRLWIND, +]); diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 61664f12cb0..aff4b910b53 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -125,6 +125,7 @@ import { MoveTarget } from "#enums/MoveTarget"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MultiHitType } from "#enums/MultiHitType"; +import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidSleepTalkMoves } from "./invalid-moves"; type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; @@ -6670,7 +6671,7 @@ export class FirstMoveTypeAttr extends MoveEffectAttr { * @extends OverrideMoveEffectAttr */ class CallMoveAttr extends OverrideMoveEffectAttr { - protected invalidMoves: Moves[]; + 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; @@ -6695,7 +6696,7 @@ class CallMoveAttr extends OverrideMoveEffectAttr { * @extends CallMoveAttr to call a selected move */ export class RandomMoveAttr extends CallMoveAttr { - constructor(invalidMoves: Moves[]) { + constructor(invalidMoves: ReadonlySet) { super(); this.invalidMoves = invalidMoves; } @@ -6717,7 +6718,7 @@ export class RandomMoveAttr extends CallMoveAttr { * @param args Unused */ override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const moveIds = Utils.getEnumValues(Moves).map(m => !this.invalidMoves.includes(m) && !allMoves[m].name.endsWith(" (N)") ? m : Moves.NONE); + const moveIds = Utils.getEnumValues(Moves).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : Moves.NONE); let moveId: Moves = Moves.NONE; do { moveId = this.getMoveOverride() ?? moveIds[user.randSeedInt(moveIds.length)]; @@ -6740,7 +6741,7 @@ export class RandomMoveAttr extends CallMoveAttr { export class RandomMovesetMoveAttr extends CallMoveAttr { private includeParty: boolean; private moveId: number; - constructor(invalidMoves: Moves[], includeParty: boolean = false) { + constructor(invalidMoves: ReadonlySet, includeParty: boolean = false) { super(); this.includeParty = includeParty; this.invalidMoves = invalidMoves; @@ -6767,7 +6768,7 @@ export class RandomMovesetMoveAttr extends CallMoveAttr { allies = [ user ]; } const partyMoveset = allies.map(p => p.moveset).flat(); - const moves = partyMoveset.filter(m => !this.invalidMoves.includes(m!.moveId) && !m!.getMove().name.endsWith(" (N)")); + const moves = partyMoveset.filter(m => !this.invalidMoves.has(m!.moveId) && !m!.getMove().name.endsWith(" (N)")); if (moves.length === 0) { return false; } @@ -6778,282 +6779,6 @@ export class RandomMovesetMoveAttr extends CallMoveAttr { } } -const invalidMetronomeMoves: Moves[] = [ - Moves.AFTER_YOU, - Moves.APPLE_ACID, - Moves.ARMOR_CANNON, - Moves.ASSIST, - Moves.ASTRAL_BARRAGE, - Moves.AURA_WHEEL, - Moves.BANEFUL_BUNKER, - Moves.BEAK_BLAST, - Moves.BEHEMOTH_BASH, - Moves.BEHEMOTH_BLADE, - Moves.BELCH, - Moves.BESTOW, - Moves.BLAZING_TORQUE, - Moves.BODY_PRESS, - Moves.BRANCH_POKE, - Moves.BREAKING_SWIPE, - Moves.CELEBRATE, - Moves.CHATTER, - Moves.CHILLING_WATER, - Moves.CHILLY_RECEPTION, - Moves.CLANGOROUS_SOUL, - Moves.COLLISION_COURSE, - Moves.COMBAT_TORQUE, - Moves.COMEUPPANCE, - Moves.COPYCAT, - Moves.COUNTER, - Moves.COVET, - Moves.CRAFTY_SHIELD, - Moves.DECORATE, - Moves.DESTINY_BOND, - Moves.DETECT, - Moves.DIAMOND_STORM, - Moves.DOODLE, - Moves.DOUBLE_IRON_BASH, - Moves.DOUBLE_SHOCK, - Moves.DRAGON_ASCENT, - Moves.DRAGON_ENERGY, - Moves.DRUM_BEATING, - Moves.DYNAMAX_CANNON, - Moves.ELECTRO_DRIFT, - Moves.ENDURE, - Moves.ETERNABEAM, - Moves.FALSE_SURRENDER, - Moves.FEINT, - Moves.FIERY_WRATH, - Moves.FILLET_AWAY, - Moves.FLEUR_CANNON, - Moves.FOCUS_PUNCH, - Moves.FOLLOW_ME, - Moves.FREEZE_SHOCK, - Moves.FREEZING_GLARE, - Moves.GLACIAL_LANCE, - Moves.GRAV_APPLE, - Moves.HELPING_HAND, - Moves.HOLD_HANDS, - Moves.HYPER_DRILL, - Moves.HYPERSPACE_FURY, - Moves.HYPERSPACE_HOLE, - Moves.ICE_BURN, - Moves.INSTRUCT, - Moves.JET_PUNCH, - Moves.JUNGLE_HEALING, - Moves.KINGS_SHIELD, - Moves.LIFE_DEW, - Moves.LIGHT_OF_RUIN, - Moves.MAKE_IT_RAIN, - Moves.MAGICAL_TORQUE, - Moves.MAT_BLOCK, - Moves.ME_FIRST, - Moves.METEOR_ASSAULT, - Moves.METRONOME, - Moves.MIMIC, - Moves.MIND_BLOWN, - Moves.MIRROR_COAT, - Moves.MIRROR_MOVE, - Moves.MOONGEIST_BEAM, - Moves.NATURE_POWER, - Moves.NATURES_MADNESS, - Moves.NOXIOUS_TORQUE, - Moves.OBSTRUCT, - Moves.ORDER_UP, - Moves.ORIGIN_PULSE, - Moves.OVERDRIVE, - Moves.PHOTON_GEYSER, - Moves.PLASMA_FISTS, - Moves.POPULATION_BOMB, - Moves.POUNCE, - Moves.POWER_SHIFT, - Moves.PRECIPICE_BLADES, - Moves.PROTECT, - Moves.PYRO_BALL, - Moves.QUASH, - Moves.QUICK_GUARD, - Moves.RAGE_FIST, - Moves.RAGE_POWDER, - Moves.RAGING_BULL, - Moves.RAGING_FURY, - Moves.RELIC_SONG, - Moves.REVIVAL_BLESSING, - Moves.RUINATION, - Moves.SALT_CURE, - Moves.SECRET_SWORD, - Moves.SHED_TAIL, - Moves.SHELL_TRAP, - Moves.SILK_TRAP, - Moves.SKETCH, - Moves.SLEEP_TALK, - Moves.SNAP_TRAP, - Moves.SNARL, - Moves.SNATCH, - Moves.SNORE, - Moves.SNOWSCAPE, - Moves.SPECTRAL_THIEF, - Moves.SPICY_EXTRACT, - Moves.SPIKY_SHIELD, - Moves.SPIRIT_BREAK, - Moves.SPOTLIGHT, - Moves.STEAM_ERUPTION, - Moves.STEEL_BEAM, - Moves.STRANGE_STEAM, - Moves.STRUGGLE, - Moves.SUNSTEEL_STRIKE, - Moves.SURGING_STRIKES, - Moves.SWITCHEROO, - Moves.TECHNO_BLAST, - Moves.TERA_STARSTORM, - Moves.THIEF, - Moves.THOUSAND_ARROWS, - Moves.THOUSAND_WAVES, - Moves.THUNDER_CAGE, - Moves.THUNDEROUS_KICK, - Moves.TIDY_UP, - Moves.TRAILBLAZE, - Moves.TRANSFORM, - Moves.TRICK, - Moves.TWIN_BEAM, - Moves.V_CREATE, - Moves.WICKED_BLOW, - Moves.WICKED_TORQUE, - Moves.WIDE_GUARD, -]; - -const invalidAssistMoves: Moves[] = [ - 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.COVET, - 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.THIEF, - Moves.TRANSFORM, - Moves.TRICK, - Moves.WHIRLWIND, -]; - -const invalidSleepTalkMoves: Moves[] = [ - Moves.ASSIST, - Moves.BELCH, - Moves.BEAK_BLAST, - Moves.BIDE, - Moves.BOUNCE, - Moves.COPYCAT, - Moves.DIG, - Moves.DIVE, - Moves.DYNAMAX_CANNON, - 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, -]; - -const invalidCopycatMoves = [ - Moves.ASSIST, - Moves.BANEFUL_BUNKER, - Moves.BEAK_BLAST, - Moves.BEHEMOTH_BASH, - Moves.BEHEMOTH_BLADE, - Moves.BESTOW, - Moves.CELEBRATE, - Moves.CHATTER, - Moves.CIRCLE_THROW, - Moves.COPYCAT, - Moves.COUNTER, - Moves.COVET, - 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.THIEF, - Moves.TRANSFORM, - Moves.TRICK, - Moves.WHIRLWIND, -]; - export class NaturePowerAttr extends OverrideMoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { let moveId; @@ -7201,7 +6926,7 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { */ export class CopyMoveAttr extends CallMoveAttr { private mirrorMove: boolean; - constructor(mirrorMove: boolean, invalidMoves: Moves[] = []) { + constructor(mirrorMove: boolean, invalidMoves: ReadonlySet = new Set()) { super(); this.mirrorMove = mirrorMove; this.invalidMoves = invalidMoves; @@ -7219,7 +6944,7 @@ export class CopyMoveAttr extends CallMoveAttr { return target.getMoveHistory().length !== 0; } else { const lastMove = globalScene.currentBattle.lastMove; - return lastMove !== undefined && !this.invalidMoves.includes(lastMove); + return lastMove !== undefined && !this.invalidMoves.has(lastMove); } }; }