From 73041e4137e0e6d6e0f8d8c3fa7ed7d00d5db837 Mon Sep 17 00:00:00 2001 From: Karthik <32044378+Karthik99999@users.noreply.github.com> Date: Sat, 13 Jan 2024 13:00:19 -0700 Subject: [PATCH] Refactor `noMetronome` lists to `metronome` flag (#10110) --- data/mods/gen1/moves.ts | 14 +- data/mods/gen2/moves.ts | 11 +- data/mods/gen3/moves.ts | 25 +- data/mods/gen4/moves.ts | 93 +- data/mods/gen5/moves.ts | 110 +-- data/mods/gen6/moves.ts | 2 +- data/mods/gen7/moves.ts | 30 +- data/mods/gen7letsgo/moves.ts | 4 +- data/mods/gen8/moves.ts | 6 +- data/mods/gen8bdsp/moves.ts | 7 +- data/mods/gen9dlc1/moves.ts | 6 +- data/mods/gennext/moves.ts | 26 +- data/mods/vaporemons/moves.ts | 207 ++-- data/moves.ts | 1461 +++++++++++++++-------------- server/chat-plugins/datasearch.ts | 7 +- sim/dex-moves.ts | 2 +- 16 files changed, 1011 insertions(+), 1000 deletions(-) diff --git a/data/mods/gen1/moves.ts b/data/mods/gen1/moves.ts index 2e39756b0aac..0962234efe7b 100644 --- a/data/mods/gen1/moves.ts +++ b/data/mods/gen1/moves.ts @@ -207,6 +207,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { return 2 * this.lastDamage; }, + flags: {contact: 1, protect: 1, metronome: 1}, }, crabhammer: { inherit: true, @@ -235,7 +236,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Disable", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'disable', onTryHit(target) { // This function should not return if the checks are met. Adding && undefined ensures this happens. @@ -469,7 +470,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Light Screen", pp: 30, priority: 0, - flags: {}, + flags: {metronome: 1}, volatileStatus: 'lightscreen', onTryHit(pokemon) { if (pokemon.volatiles['lightscreen']) { @@ -484,12 +485,9 @@ export const Moves: {[k: string]: ModdedMoveData} = { target: "self", type: "Psychic", }, - metronome: { - inherit: true, - noMetronome: ["Metronome", "Struggle"], - }, mimic: { inherit: true, + flags: {protect: 1, bypasssub: 1, metronome: 1}, onHit(target, source) { const moveslot = source.moves.indexOf('mimic'); if (moveslot < 0) return false; @@ -649,7 +647,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Reflect", pp: 20, priority: 0, - flags: {}, + flags: {metronome: 1}, volatileStatus: 'reflect', onTryHit(pokemon) { if (pokemon.volatiles['reflect']) { @@ -802,6 +800,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Substitute", pp: 10, priority: 0, + flags: {metronome: 1}, volatileStatus: 'substitute', onTryHit(target) { if (target.volatiles['substitute']) { @@ -899,7 +898,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { secondary: null, target: "self", type: "Normal", - flags: {}, }, superfang: { inherit: true, diff --git a/data/mods/gen2/moves.ts b/data/mods/gen2/moves.ts index aafbf472bd1d..968cfdec9794 100644 --- a/data/mods/gen2/moves.ts +++ b/data/mods/gen2/moves.ts @@ -398,14 +398,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, meanlook: { inherit: true, - flags: {reflectable: 1, mirror: 1}, + flags: {reflectable: 1, mirror: 1, metronome: 1}, }, metronome: { inherit: true, flags: {failencore: 1}, - noMetronome: [ - "Counter", "Destiny Bond", "Detect", "Endure", "Metronome", "Mimic", "Mirror Coat", "Protect", "Sketch", "Sleep Talk", "Struggle", "Thief", - ], noSketch: true, }, mimic: { @@ -439,7 +436,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, mirrormove: { inherit: true, - flags: {failencore: 1}, + flags: {metronome: 1, failencore: 1}, onHit(pokemon) { const noMirror = ['metronome', 'mimic', 'mirrormove', 'sketch', 'sleeptalk', 'transform']; const target = pokemon.side.foe.active[0]; @@ -462,7 +459,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Mist", pp: 30, priority: 0, - flags: {}, + flags: {metronome: 1}, volatileStatus: 'mist', condition: { onStart(pokemon) { @@ -787,7 +784,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, spiderweb: { inherit: true, - flags: {reflectable: 1, mirror: 1}, + flags: {reflectable: 1, mirror: 1, metronome: 1}, }, spikes: { inherit: true, diff --git a/data/mods/gen3/moves.ts b/data/mods/gen3/moves.ts index b1d3ff51f893..121941dc24cb 100644 --- a/data/mods/gen3/moves.ts +++ b/data/mods/gen3/moves.ts @@ -18,7 +18,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, ancientpower: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + }, + assist: { + inherit: true, + flags: {metronome: 1, noassist: 1, nosleeptalk: 1}, }, astonish: { inherit: true, @@ -196,7 +200,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { disable: { inherit: true, accuracy: 55, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'disable', condition: { durationCallback() { @@ -253,7 +257,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Doom Desire", basePower: 120, category: "Physical", - flags: {}, + flags: {metronome: 1, futuremove: 1}, willCrit: false, type: '???', } as unknown as ActiveMove; @@ -269,7 +273,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { basePower: 0, damage: damage, category: "Physical", - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, effectType: 'Move', type: '???', }, @@ -335,11 +339,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, fakeout: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, feintattack: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, flash: { inherit: true, @@ -473,6 +477,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, mirrormove: { inherit: true, + flags: {metronome: 1, failencore: 1, nosleeptalk: 1, noassist: 1}, onTryHit() { }, onHit(pokemon) { const noMirror = [ @@ -517,7 +522,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, overheat: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, }, petaldance: { inherit: true, @@ -602,7 +607,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, taunt: { inherit: true, - flags: {protect: 1, bypasssub: 1}, + flags: {protect: 1, bypasssub: 1, metronome: 1}, condition: { duration: 2, onStart(target) { @@ -630,11 +635,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, teeterdance: { inherit: true, - flags: {protect: 1}, + flags: {protect: 1, metronome: 1}, }, tickle: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, uproar: { inherit: true, diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts index 919934a2655e..8dad374c1838 100644 --- a/data/mods/gen4/moves.ts +++ b/data/mods/gen4/moves.ts @@ -1,7 +1,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { acupressure: { inherit: true, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(target) { if (target.volatiles['substitute']) { return false; @@ -35,7 +35,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, aquaring: { inherit: true, - flags: {}, + flags: {metronome: 1}, condition: { onStart(pokemon) { this.add('-start', pokemon, 'Aqua Ring'); @@ -180,7 +180,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, conversion: { inherit: true, - flags: {}, + flags: {metronome: 1}, onHit(target) { const possibleTypes = target.moveSlots.map(moveSlot => { const move = this.dex.moves.get(moveSlot.id); @@ -220,7 +220,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, curse: { inherit: true, - flags: {}, + flags: {metronome: 1}, onModifyMove(move, source, target) { if (!source.hasType('Ghost')) { delete move.volatileStatus; @@ -246,7 +246,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, defog: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, detect: { inherit: true, @@ -274,7 +274,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { disable: { inherit: true, accuracy: 80, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'disable', condition: { durationCallback() { @@ -332,7 +332,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Doom Desire", basePower: 120, category: "Special", - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, willCrit: false, type: '???', } as unknown as ActiveMove; @@ -348,7 +348,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { basePower: 0, damage: damage, category: "Special", - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, effectType: 'Move', type: '???', }, @@ -374,7 +374,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, embargo: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryHit(pokemon) { if (pokemon.ability === 'multitype' || pokemon.item === 'griseousorb') { return false; @@ -395,7 +395,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, encore: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1, failencore: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1, failencore: 1}, volatileStatus: 'encore', condition: { durationCallback() { @@ -517,7 +517,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, foresight: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, furycutter: { inherit: true, @@ -546,7 +546,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Future Sight", basePower: 80, category: "Special", - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, willCrit: false, type: '???', } as unknown as ActiveMove; @@ -562,7 +562,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { basePower: 0, damage: damage, category: "Special", - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, effectType: 'Move', type: '???', }, @@ -674,7 +674,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, healblock: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, condition: { duration: 5, durationCallback(target, source, effect) { @@ -715,7 +715,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, healingwish: { inherit: true, - flags: {heal: 1}, + flags: {heal: 1, metronome: 1}, onAfterMove(pokemon) { pokemon.switchFlag = true; }, @@ -752,7 +752,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, imprison: { inherit: true, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, onTryHit(pokemon) { for (const target of pokemon.foes()) { for (const move of pokemon.moves) { @@ -875,7 +875,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, luckychant: { inherit: true, - flags: {}, + flags: {metronome: 1}, condition: { duration: 5, onSideStart(side) { @@ -890,7 +890,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, lunardance: { inherit: true, - flags: {heal: 1}, + flags: {heal: 1, metronome: 1}, onAfterMove(pokemon) { pokemon.switchFlag = true; }, @@ -942,7 +942,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, magnetrise: { inherit: true, - flags: {gravity: 1}, + flags: {gravity: 1, metronome: 1}, volatileStatus: 'magnetrise', condition: { duration: 5, @@ -971,14 +971,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, metalburst: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, metronome: { inherit: true, flags: {noassist: 1, failcopycat: 1, nosleeptalk: 1, failmimic: 1}, - noMetronome: [ - "Assist", "Chatter", "Copycat", "Counter", "Covet", "Destiny Bond", "Detect", "Endure", "Feint", "Focus Punch", "Follow Me", "Helping Hand", "Me First", "Metronome", "Mimic", "Mirror Coat", "Mirror Move", "Protect", "Sketch", "Sleep Talk", "Snatch", "Struggle", "Switcheroo", "Thief", "Trick", - ], }, mimic: { inherit: true, @@ -1015,7 +1012,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, miracleeye: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, mirrormove: { inherit: true, @@ -1095,15 +1092,18 @@ export const Moves: {[k: string]: ModdedMoveData} = { onStart(pokemon) { this.add('-start', pokemon, 'move: Mud Sport'); }, - onBasePowerPriority: 3, + onAnyBasePowerPriority: 3, onAnyBasePower(basePower, user, target, move) { - if (move.type === 'Electric') return this.chainModify(0.5); + if (move.type === 'Electric') { + this.debug('mud sport weaken'); + return this.chainModify(0.5); + } }, }, }, naturepower: { inherit: true, - flags: {}, + flags: {metronome: 1}, onHit(pokemon) { this.actions.useMove('triattack', pokemon); }, @@ -1127,7 +1127,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, odorsleuth: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, outrage: { inherit: true, @@ -1178,7 +1178,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, powertrick: { inherit: true, - flags: {}, + flags: {metronome: 1}, }, protect: { inherit: true, @@ -1205,7 +1205,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, psychup: { inherit: true, - flags: {snatch: 1, bypasssub: 1}, + flags: {snatch: 1, bypasssub: 1, metronome: 1}, }, pursuit: { inherit: true, @@ -1257,7 +1257,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, recycle: { inherit: true, - flags: {}, + flags: {metronome: 1}, }, reflect: { inherit: true, @@ -1311,7 +1311,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, roar: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, }, rockblast: { inherit: true, @@ -1454,17 +1454,21 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, }, }, + snore: { + inherit: true, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1}, + }, spikes: { inherit: true, - flags: {mustpressure: 1}, + flags: {metronome: 1, mustpressure: 1}, }, spite: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, stealthrock: { inherit: true, - flags: {mustpressure: 1}, + flags: {metronome: 1, mustpressure: 1}, }, struggle: { inherit: true, @@ -1593,7 +1597,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, taunt: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, condition: { durationCallback() { return this.random(3, 6); @@ -1630,7 +1634,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, torment: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, toxic: { inherit: true, @@ -1638,7 +1642,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, toxicspikes: { inherit: true, - flags: {mustpressure: 1}, + flags: {metronome: 1, mustpressure: 1}, condition: { // this is a side condition onSideStart(side) { @@ -1667,7 +1671,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, transform: { inherit: true, - flags: {bypasssub: 1, failencore: 1}, + flags: {bypasssub: 1, metronome: 1, failencore: 1}, }, trick: { inherit: true, @@ -1752,9 +1756,12 @@ export const Moves: {[k: string]: ModdedMoveData} = { onStart(pokemon) { this.add('-start', pokemon, 'move: Water Sport'); }, - onBasePowerPriority: 3, + onAnyBasePowerPriority: 3, onAnyBasePower(basePower, user, target, move) { - if (move.type === 'Fire') return this.chainModify(0.5); + if (move.type === 'Fire') { + this.debug('water sport weaken'); + return this.chainModify(0.5); + } }, }, }, @@ -1765,11 +1772,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, whirlwind: { inherit: true, - flags: {protect: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, wish: { inherit: true, - flags: {heal: 1}, + flags: {heal: 1, metronome: 1}, slotCondition: 'Wish', condition: { duration: 2, diff --git a/data/mods/gen5/moves.ts b/data/mods/gen5/moves.ts index 26cc616d84f7..ffd083c27fbe 100644 --- a/data/mods/gen5/moves.ts +++ b/data/mods/gen5/moves.ts @@ -1,7 +1,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { absorb: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, acidarmor: { inherit: true, @@ -76,11 +76,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, block: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, }, bounce: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1, nosleeptalk: 1}, }, bubble: { inherit: true, @@ -88,7 +88,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, bugbuzz: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1}, }, camouflage: { inherit: true, @@ -168,11 +168,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, dig: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, nosleeptalk: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, nosleeptalk: 1}, }, dive: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, nosleeptalk: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, nosleeptalk: 1}, }, dracometeor: { inherit: true, @@ -184,15 +184,15 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, drainpunch: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, }, dreameater: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, echoedvoice: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1}, }, electroball: { inherit: true, @@ -217,7 +217,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, finalgambit: { inherit: true, - flags: {contact: 1, protect: 1}, + flags: {contact: 1, protect: 1, metronome: 1}, }, fireblast: { inherit: true, @@ -240,7 +240,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, fly: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1}, }, followme: { inherit: true, @@ -282,7 +282,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { basePower: 100, category: "Special", priority: 0, - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, ignoreImmunity: false, effectType: 'Move', type: 'Psychic', @@ -294,7 +294,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, gigadrain: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, glare: { inherit: true, @@ -302,7 +302,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, grasswhistle: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, grasspledge: { inherit: true, @@ -317,7 +317,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, growl: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, growth: { inherit: true, @@ -338,7 +338,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, healbell: { inherit: true, - flags: {snatch: 1, sound: 1}, + flags: {snatch: 1, sound: 1, metronome: 1}, onHit(target, source) { this.add('-activate', source, 'move: Heal Bell'); const allies = [...target.side.pokemon, ...target.side.allySide?.pokemon || []]; @@ -435,7 +435,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, hornleech: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, }, hurricane: { inherit: true, @@ -447,7 +447,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, hypervoice: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1}, }, icebeam: { inherit: true, @@ -474,7 +474,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, leechlife: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, }, lick: { inherit: true, @@ -523,15 +523,15 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, meanlook: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, }, megadrain: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, metalsound: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, meteormash: { inherit: true, @@ -555,31 +555,22 @@ export const Moves: {[k: string]: ModdedMoveData} = { type: "Normal", }, mudsport: { - num: 300, - accuracy: true, - basePower: 0, - category: "Status", - name: "Mud Sport", - pp: 15, - priority: 0, - flags: {}, + inherit: true, + pseudoWeather: undefined, volatileStatus: 'mudsport', - onTryHitField(target, source) { - if (source.volatiles['mudsport']) return false; - }, condition: { noCopy: true, onStart(pokemon) { - this.add("-start", pokemon, 'Mud Sport'); + this.add('-start', pokemon, 'Mud Sport'); }, onAnyBasePowerPriority: 1, onAnyBasePower(basePower, user, target, move) { - if (move.type === 'Electric') return this.chainModify([1352, 4096]); + if (move.type === 'Electric') { + this.debug('mud sport weaken'); + return this.chainModify([1352, 4096]); + } }, }, - secondary: null, - target: "all", - type: "Ground", }, muddywater: { inherit: true, @@ -599,7 +590,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, perishsong: { inherit: true, - flags: {sound: 1, distance: 1}, + flags: {sound: 1, distance: 1, metronome: 1}, }, pinmissile: { inherit: true, @@ -717,7 +708,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { roar: { inherit: true, accuracy: 100, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, }, rocktomb: { inherit: true, @@ -727,7 +718,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, round: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1}, }, sacredsword: { inherit: true, @@ -739,7 +730,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, screech: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, secretpower: { inherit: true, @@ -752,11 +743,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, shadowforce: { inherit: true, - flags: {contact: 1, charge: 1, mirror: 1, nosleeptalk: 1}, + flags: {contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1}, }, sing: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, skillswap: { inherit: true, @@ -778,7 +769,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, skydrop: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1, nosleeptalk: 1}, onTryHit(target, source, move) { if (target.fainted) return false; if (source.removeVolatile(move.id)) { @@ -910,7 +901,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, supersonic: { inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1}, }, surf: { inherit: true, @@ -962,7 +953,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, uproar: { inherit: true, - flags: {protect: 1, mirror: 1, sound: 1, nosleeptalk: 1}, + flags: {protect: 1, mirror: 1, sound: 1, metronome: 1, nosleeptalk: 1}, }, vinewhip: { inherit: true, @@ -985,36 +976,27 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, }, watersport: { - num: 346, - accuracy: true, - basePower: 0, - category: "Status", - name: "Water Sport", - pp: 15, - priority: 0, - flags: {}, + inherit: true, + pseudoWeather: undefined, volatileStatus: 'watersport', - onTryHitField(target, source) { - if (source.volatiles['watersport']) return false; - }, condition: { noCopy: true, onStart(pokemon) { - this.add("-start", pokemon, 'move: Water Sport'); + this.add('-start', pokemon, 'move: Water Sport'); }, onAnyBasePowerPriority: 1, onAnyBasePower(basePower, user, target, move) { - if (move.type === 'Fire') return this.chainModify([1352, 4096]); + if (move.type === 'Fire') { + this.debug('water sport weaken'); + return this.chainModify([1352, 4096]); + } }, }, - secondary: null, - target: "all", - type: "Water", }, whirlwind: { inherit: true, accuracy: 100, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, }, wideguard: { inherit: true, diff --git a/data/mods/gen6/moves.ts b/data/mods/gen6/moves.ts index 21fa1dbcb21d..aa3c8df47fae 100644 --- a/data/mods/gen6/moves.ts +++ b/data/mods/gen6/moves.ts @@ -201,7 +201,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, rockblast: { inherit: true, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, }, sheercold: { inherit: true, diff --git a/data/mods/gen7/moves.ts b/data/mods/gen7/moves.ts index 850efdb363bb..fc8e6e3c57e4 100644 --- a/data/mods/gen7/moves.ts +++ b/data/mods/gen7/moves.ts @@ -153,7 +153,9 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, dive: { inherit: true, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1}, + flags: { + contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + }, }, dizzypunch: { inherit: true, @@ -167,6 +169,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, + dragonhammer: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + }, dragonrage: { inherit: true, isNonstandard: null, @@ -497,7 +503,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, howl: { inherit: true, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, }, @@ -642,12 +648,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, - metronome: { - inherit: true, - noMetronome: [ - "After You", "Assist", "Baneful Bunker", "Beak Blast", "Belch", "Bestow", "Celebrate", "Chatter", "Copycat", "Counter", "Covet", "Crafty Shield", "Destiny Bond", "Detect", "Diamond Storm", "Dragon Ascent", "Endure", "Feint", "Fleur Cannon", "Focus Punch", "Follow Me", "Freeze Shock", "Helping Hand", "Hold Hands", "Hyperspace Fury", "Hyperspace Hole", "Ice Burn", "Instruct", "King's Shield", "Light of Ruin", "Mat Block", "Me First", "Metronome", "Mimic", "Mind Blown", "Mirror Coat", "Mirror Move", "Nature Power", "Origin Pulse", "Photon Geyser", "Plasma Fists", "Precipice Blades", "Protect", "Quash", "Quick Guard", "Rage Powder", "Relic Song", "Secret Sword", "Shell Trap", "Sketch", "Sleep Talk", "Snarl", "Snatch", "Snore", "Spectral Thief", "Spiky Shield", "Spotlight", "Steam Eruption", "Struggle", "Switcheroo", "Techno Blast", "Thief", "Thousand Arrows", "Thousand Waves", "Transform", "Trick", "V-create", "Wide Guard", - ], - }, miracleeye: { inherit: true, isNonstandard: null, @@ -660,6 +660,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, + moongeistbeam: { + inherit: true, + flags: {protect: 1, mirror: 1, metronome: 1}, + }, moonlight: { inherit: true, onHit(pokemon) { @@ -724,6 +728,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, + naturesmadness: { + inherit: true, + flags: {protect: 1, mirror: 1, metronome: 1}, + }, needlearm: { inherit: true, isNonstandard: null, @@ -750,7 +758,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, pollenpuff: { inherit: true, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, onHit(target, source) { if (source.isAlly(target)) { if (!this.heal(Math.floor(target.baseMaxhp * 0.5))) { @@ -1024,6 +1032,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, + sunsteelstrike: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + }, supersonicskystrike: { inherit: true, isNonstandard: null, diff --git a/data/mods/gen7letsgo/moves.ts b/data/mods/gen7letsgo/moves.ts index 949a6b8c9ec0..47e0b8e00b43 100644 --- a/data/mods/gen7letsgo/moves.ts +++ b/data/mods/gen7letsgo/moves.ts @@ -42,9 +42,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { desc: "A random move that was introduced in gen 1 is selected for use, other than Counter, Mimic, Mirror Move, Struggle, or Transform.", shortDesc: "Picks a random move from gen 1.", onHit(target, source, effect) { - const moves = this.dex.moves.all().filter( - move => !move.realMove && move.gen === 1 && !effect.noMetronome!.includes(move.name) - ); + const moves = this.dex.moves.all().filter(move => move.gen === 1 && move.flags['metronome']); let randomMove = ''; if (moves.length) { moves.sort((a, b) => a.num - b.num); diff --git a/data/mods/gen8/moves.ts b/data/mods/gen8/moves.ts index 44ede80fdcac..5b5e126f0cc1 100644 --- a/data/mods/gen8/moves.ts +++ b/data/mods/gen8/moves.ts @@ -138,6 +138,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: null, }, + dragonhammer: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1}, + }, dualchop: { inherit: true, isNonstandard: null, @@ -186,7 +190,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, futuresight: { inherit: true, - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, }, geargrind: { inherit: true, diff --git a/data/mods/gen8bdsp/moves.ts b/data/mods/gen8bdsp/moves.ts index 8926f4d90a53..02582b33e52d 100644 --- a/data/mods/gen8bdsp/moves.ts +++ b/data/mods/gen8bdsp/moves.ts @@ -123,6 +123,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, isNonstandard: "Past", }, + dragonhammer: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, + }, drumbeating: { inherit: true, isNonstandard: "Past", @@ -615,9 +619,6 @@ export const Moves: {[k: string]: ModdedMoveData} = { inherit: true, desc: "A random move is selected for use, other than After You, Belch, Body Press, Chatter, Copycat, Counter, Covet, Destiny Bond, Detect, Dragon Ascent, Endure, Feint, Focus Punch, Follow Me, Helping Hand, Life Dew, Metronome, Mimic, Mirror Coat, Nature Power, Origin Pulse, Precipice Blades, Protect, Quash, Quick Guard, Rage Powder, Sketch, Sleep Talk, Snarl, Snore, Spiky Shield, Struggle, Switcheroo, Thief, Transform, Trick, or Wide Guard.", shortDesc: "Picks a random move.", - noMetronome: [ - "After You", "Belch", "Body Press", "Chatter", "Copycat", "Counter", "Covet", "Destiny Bond", "Detect", "Dragon Ascent", "Endure", "Feint", "Focus Punch", "Follow Me", "Helping Hand", "Life Dew", "Metronome", "Mimic", "Mirror Coat", "Nature Power", "Origin Pulse", "Precipice Blades", "Protect", "Quash", "Quick Guard", "Rage Powder", "Sketch", "Sleep Talk", "Snarl", "Snore", "Spiky Shield", "Struggle", "Switcheroo", "Thief", "Transform", "Trick", "Wide Guard", - ], }, mindblown: { inherit: true, diff --git a/data/mods/gen9dlc1/moves.ts b/data/mods/gen9dlc1/moves.ts index c665bbc32872..d2047b1357fb 100644 --- a/data/mods/gen9dlc1/moves.ts +++ b/data/mods/gen9dlc1/moves.ts @@ -1,7 +1,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { aeroblast: { inherit: true, - flags: {protect: 1, mirror: 1, distance: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1}, isNonstandard: "Past", }, alluringvoice: { @@ -14,7 +14,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, bitterblade: { inherit: true, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, }, blueflare: { inherit: true, @@ -107,7 +107,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, matchagotcha: { inherit: true, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, }, mightycleave: { inherit: true, diff --git a/data/mods/gennext/moves.ts b/data/mods/gennext/moves.ts index 7fe95c997a4b..3741c0231d3b 100644 --- a/data/mods/gennext/moves.ts +++ b/data/mods/gennext/moves.ts @@ -305,7 +305,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Hail, Rain Dance, or Sandstorm. If the user is holding a Power Herb or the weather is Sunny Day, the move completes in one turn. The user heals 1/2 of its max HP during the charge turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", shortDesc: "Charges turn 1. Hits turn 2. No charge in sunlight. Heals 1/2 of the user's max HP, on charge.", - flags: {charge: 1, mirror: 1}, + flags: {charge: 1, mirror: 1, metronome: 1}, breaksProtect: true, }, razorwind: { @@ -322,7 +322,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, desc: "Has a higher chance for a critical hit. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. 100% chance to confuse the target. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", shortDesc: "Charges, then hits foe(s) turn 2. High crit ratio. Confuses target.", - flags: {charge: 1, mirror: 1}, + flags: {charge: 1, mirror: 1, metronome: 1}, breaksProtect: true, }, skullbash: { @@ -345,7 +345,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { attacker.addVolatile('twoturnmove', defender); return null; }, - flags: {contact: 1, charge: 1, mirror: 1}, + flags: {contact: 1, charge: 1, mirror: 1, metronome: 1}, breaksProtect: true, desc: "This attack charges on the first turn and executes on the second. Raises the user's Defense, Special Defense, and Accuracy by 1 stage on the first turn. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", shortDesc: "Raises user's Def, SpD, Acc by 1 on turn 1. Hits turn 2.", @@ -364,7 +364,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { def: -1, }, }, - flags: {charge: 1, mirror: 1, distance: 1}, + flags: {charge: 1, mirror: 1, distance: 1, metronome: 1}, breaksProtect: true, desc: "Has a 30% chance to flinch the target and a higher chance for a critical hit. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", shortDesc: "Charges, then hits turn 2. 30% flinch. High crit.", @@ -381,7 +381,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { chance: 100, status: 'par', }, - flags: {charge: 1, mirror: 1}, + flags: {charge: 1, mirror: 1, metronome: 1}, breaksProtect: true, desc: "Has a 100% chance to paralyze the target. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", shortDesc: "Charges turn 1. Hits turn 2. 100% paralyze.", @@ -398,7 +398,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { chance: 100, status: 'brn', }, - flags: {charge: 1, mirror: 1}, + flags: {charge: 1, mirror: 1, metronome: 1}, breaksProtect: true, desc: "Has a 100% chance to burn the target. This attack charges on the first turn and executes on the second. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", shortDesc: "Charges turn 1. Hits turn 2. 100% burn.", @@ -411,7 +411,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { onTryHit(target) { target.removeVolatile('substitute'); }, - flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1}, + flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1}, breaksProtect: true, desc: "Has a 30% chance to paralyze the target. This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, Thousand Arrows, Thunder, and Twister. If the user is holding a Power Herb, the move completes in one turn. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", shortDesc: "Bounces turn 1. Hits turn 2. 30% paralyze.", @@ -430,7 +430,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { def: -1, }, }, - flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1}, + flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1}, breaksProtect: true, desc: "This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, Thousand Arrows, Thunder, and Twister. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", shortDesc: "Flies up on first turn, then strikes the next turn. Lowers target's Def by 1 stage.", @@ -451,7 +451,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, desc: "This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Earthquake and Magnitude but takes double damage from them, and is also unaffected by weather. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", shortDesc: "Digs underground turn 1, strikes turn 2. Lowers target's Def by 1 stage.", - flags: {contact: 1, charge: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, charge: 1, mirror: 1, nonsky: 1, metronome: 1}, breaksProtect: true, }, dive: { @@ -470,7 +470,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, desc: "This attack charges on the first turn and executes on the second. On the first turn, the user avoids all attacks other than Surf and Whirlpool but takes double damage from them, and is also unaffected by weather. If the user is holding a Power Herb, the move completes in one turn. 100% chance to lower the target's Defense by one stage. This move removes the target's Substitute (if one is active), and bypasses Protect. This move is also a guaranteed critical hit.", shortDesc: "Dives underwater turn 1, strikes turn 2. Lowers target's Def by 1 stage.", - flags: {contact: 1, charge: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, charge: 1, mirror: 1, nonsky: 1, metronome: 1}, breaksProtect: true, }, phantomforce: { @@ -518,7 +518,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, desc: "This attack takes the target into the air with the user on the first turn and executes on the second. Pokemon weighing 200kg or more cannot be lifted. On the first turn, the user and the target avoid all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, Thousand Arrows, Thunder, and Twister. The user and the target cannot make a move between turns, but the target can select a move to use. This move cannot damage Flying-type Pokemon. Fails on the first turn if the target is an ally or if the target has a substitute. Lowers the target's Defense by one stage. This move is a guaranteed critical hit. This move ignores Protection.", shortDesc: "User and foe fly up turn 1. Damages on turn 2. Lowers target's Def by 1 stage.", - flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1}, + flags: {contact: 1, charge: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1}, breaksProtect: true, }, hyperbeam: { @@ -1272,7 +1272,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { basePower: 80, category: "Special", priority: 0, - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, ignoreImmunity: false, effectType: 'Move', type: 'Normal', @@ -2086,7 +2086,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Magikarp's Revenge", pp: 10, priority: 0, - flags: {contact: 1, recharge: 1, protect: 1, mirror: 1, heal: 1}, + flags: {contact: 1, recharge: 1, protect: 1, mirror: 1, heal: 1, metronome: 1}, noSketch: true, drain: [1, 2], onTry(pokemon) { diff --git a/data/mods/vaporemons/moves.ts b/data/mods/vaporemons/moves.ts index bce7b851f495..92b9902eec75 100644 --- a/data/mods/vaporemons/moves.ts +++ b/data/mods/vaporemons/moves.ts @@ -9,7 +9,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { desc: "Sets a layer of Toxic Spikes on the opponent's side of the field.", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterHit(target, source, move) { if (!move.hasSheerForce && source.hp && !target.hasItem('covertcloak')) { for (const side of source.side.foeSidesWithConditions()) { @@ -24,7 +24,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { } } }, - secondary: {}, + secondary: {}, target: "normal", type: "Poison", contestType: "Clever", @@ -38,7 +38,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Ceaseless Edge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, onAfterHit(target, source, move) { if (!move.hasSheerForce && source.hp && !target.hasItem('covertcloak')) { for (const side of source.side.foeSidesWithConditions()) { @@ -53,7 +53,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { } } }, - secondary: {}, + secondary: {}, target: "normal", type: "Dark", }, @@ -67,11 +67,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { shortDesc: "Sets Stealth Rock on the target's side.", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, - secondary: { + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, + secondary: { chance: 100, sideCondition: 'stealthrock', - }, + }, target: "adjacentFoe", type: "Rock", contestType: "Tough", @@ -85,11 +85,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Electroweb", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, - secondary: { + flags: {protect: 1, mirror: 1, metronome: 1}, + secondary: { chance: 100, sideCondition: 'stickyweb', - }, + }, target: "allAdjacentFoes", type: "Electric", contestType: "Beautiful", @@ -104,7 +104,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Skull Bash", pp: 10, priority: 0, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, metronome: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -131,7 +131,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Shelter", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(pokemon) { const somesideConditions = ['spikes', 'stealthrock']; const sides = [pokemon.side]; @@ -165,7 +165,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Healing Stones", pp: 20, priority: 0, - flags: {nonsky: 1, heal: 1, snatch: 1}, + flags: {snatch: 1, heal: 1, nonsky: 1, metronome: 1}, sideCondition: 'healingstones', onPrepareHit(target, source, move) { this.attrLastMove('[still]'); @@ -223,7 +223,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { flags: {snatch: 1, heal: 1, bypasssub: 1}, heal: [1, 3], slotCondition: 'lifedew', - condition: { + condition: { onSwap(target) { if (!target.fainted) { const source = this.effectState.source; @@ -232,7 +232,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { target.side.removeSlotCondition(target, 'lifedew'); } }, - }, + }, secondary: null, target: "self", type: "Water", @@ -245,7 +245,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Shrapnel Shot", pp: 20, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, multihit: [2, 5], onPrepareHit(target, source, move) { this.attrLastMove('[still]'); @@ -275,7 +275,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Storm Throw", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, willCrit: true, secondary: null, target: "normal", @@ -290,7 +290,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Frost Breath", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, willCrit: true, secondary: null, target: "normal", @@ -306,7 +306,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Snipe Shot", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, pulse: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, pulse: 1}, willCrit: true, tracksTarget: true, secondary: null, @@ -336,7 +336,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Choke", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Sky Uppercut", target); @@ -361,7 +361,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Cutting Remark", pp: 25, priority: 1, - flags: {sound: 1, protect: 1, mirror: 1, bypasssub: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1, slicing: 1}, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Psycho Cut", target); @@ -382,7 +382,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Chain Lightning", pp: 20, priority: 1, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], onPrepareHit(target, source, move) { this.attrLastMove('[still]'); @@ -402,7 +402,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Pluck", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [3, 4], secondary: null, target: "normal", @@ -418,7 +418,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Throat Chop", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, condition: { duration: 3, onStart(target) { @@ -461,7 +461,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Wind Breaker", pp: 10, priority: 0, - flags: {wind: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Gust", target); @@ -546,7 +546,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Hazardous Waste", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Acid Downpour", target); @@ -589,7 +589,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Chisel", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, contact: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 4, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); @@ -610,7 +610,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Peekaboo", pp: 20, priority: -3, - flags: {contact: 1, protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1}, + flags: { + contact: 1, protect: 1, + metronome: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, + }, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Heart Stamp", target); @@ -650,7 +653,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Psycho Boost", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spa: -1, @@ -704,14 +707,14 @@ export const Moves: {[k: string]: ModdedMoveData} = { type: "Fire", }, parry: { - accuracy: 100, - basePower: 80, - category: "Physical", - shortDesc: "If the foe used a priority move, this move hits before that move and flinches the foe.", - name: "Parry", - pp: 10, - priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + accuracy: 100, + basePower: 80, + category: "Physical", + shortDesc: "If the foe used a priority move, this move hits before that move and flinches the foe.", + name: "Parry", + pp: 10, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Mach Punch", target); @@ -721,7 +724,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { this.add('-message', `${pokemon.name} is attempting to parry!`); pokemon.addVolatile('parry'); }, - secondary: {}, // sheer force boosted + secondary: {}, // sheer force boosted condition: { duration: 1, onStart(target, source) { @@ -746,9 +749,9 @@ export const Moves: {[k: string]: ModdedMoveData} = { } }, }, - target: "normal", - type: "Fighting", - contestType: "Clever", + target: "normal", + type: "Fighting", + contestType: "Clever", }, rollout: { num: 205, @@ -762,11 +765,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { return move.basePower; }, category: "Physical", - shortDesc: "Switches the user out. 2x power if Rollout or Defense Curl was used last turn.", + shortDesc: "Switches the user out. 2x power if Rollout or Defense Curl was used last turn.", name: "Rollout", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, noparentalbond: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1, noparentalbond: 1}, self: { sideCondition: 'rollout', }, @@ -790,11 +793,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 50, category: "Special", - shortDesc: "Switches the user out. 2x power if Round was used last turn.", + shortDesc: "Switches the user out. 2x power if Round was used last turn.", name: "Round", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, self: { sideCondition: 'round', }, @@ -817,11 +820,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: true, basePower: 0, category: "Status", - shortDesc: "Healing from Rekindle.", + shortDesc: "Healing from Rekindle.", name: "Rekindle Heal", pp: 5, priority: 0, - flags: {}, + flags: {metronome: 1}, volatileStatus: 'rekindleheal', condition: { onStart(pokemon) { @@ -840,11 +843,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: true, basePower: 0, category: "Status", - shortDesc: "Heals 33% then 12.5% every turn. Burns foes that make contact.", + shortDesc: "Heals 33% then 12.5% every turn. Burns foes that make contact.", name: "Rekindle", pp: 10, priority: 0, - flags: {heal: 1, snatch: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 3], onPrepareHit(target, source, move) { this.attrLastMove('[still]'); @@ -878,11 +881,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 90, basePower: 120, category: "Special", - shortDesc: "Raises user's Sp. Atk by 1 on turn 1. Hits turn 2. Hits in 1 turn in Sand.", + shortDesc: "Raises user's Sp. Atk by 1 on turn 1. Hits turn 2. Hits in 1 turn in Sand.", name: "Meteor Beam", pp: 10, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1}, + flags: {charge: 1, protect: 1, mirror: 1, metronome: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -908,11 +911,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: true, basePower: 0, category: "Status", - shortDesc: "Restores HP equal to the user's level × 1.25.", + shortDesc: "Restores HP equal to the user's level × 1.25.", name: "Rebuild", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Iron Defense", target); @@ -929,11 +932,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 80, category: "Special", - shortDesc: "Removes hazards and terrains, then forces out target.", + shortDesc: "Removes hazards and terrains, then forces out target.", name: "Wash Away", pp: 10, priority: -6, - flags: {protect: 1, mirror: 1, noassist: 1, failcopycat: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, noassist: 1, failcopycat: 1}, forceSwitch: true, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); @@ -971,11 +974,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 90, category: "Special", - shortDesc: "1.5x power if a sound move was used last turn.", + shortDesc: "1.5x power if a sound move was used last turn.", name: "Echo Chamber", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Hyper Voice", target); @@ -1004,17 +1007,17 @@ export const Moves: {[k: string]: ModdedMoveData} = { psychicfangs: { inherit: true, basePower: 90, - flags: {bite: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bite: 1}, }, sledgehammerblow: { accuracy: 100, basePower: 90, category: "Physical", - shortDesc: "Destroys screens, unless the target is immune.", + shortDesc: "Destroys screens, unless the target is immune.", name: "Sledgehammer Blow", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Gigaton Hammer", target); @@ -1034,11 +1037,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 90, category: "Physical", - shortDesc: "(Partially functional placeholder) Hits two turns after being used. Sets sands when it hits, even if the target is immune.", + shortDesc: "(Partially functional placeholder) Hits two turns after being used. Sets sands when it hits, even if the target is immune.", name: "Desert Storm", pp: 15, priority: 0, - flags: {allyanim: 1, futuremove: 1}, + flags: {allyanim: 1, metronome: 1, futuremove: 1}, ignoreImmunity: true, onTry(source, target) { if (!target.side.addSlotCondition(target, 'futuremove')) return false; @@ -1081,12 +1084,12 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 85, category: "Special", - shortDesc: "If the user is hit this turn, +1 SpA.", + shortDesc: "If the user is hit this turn, +1 SpA.", isNonstandard: null, name: "Dragon Rage", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, priorityChargeCallback(pokemon) { pokemon.addVolatile('dragonrage'); }, @@ -1111,12 +1114,12 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 85, category: "Physical", - shortDesc: "If the user is hit this turn, +1 Atk.", + shortDesc: "If the user is hit this turn, +1 Atk.", isNonstandard: null, name: "Rage", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, priorityChargeCallback(pokemon) { pokemon.addVolatile('rage'); }, @@ -1140,11 +1143,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 0, category: "Status", - shortDesc: "Hits two turns after being used. Foe: badly poisoned and -1 Def & SpD.", + shortDesc: "Hits two turns after being used. Foe: badly poisoned and -1 Def & SpD.", name: "Latent Venom", pp: 5, priority: 0, - flags: {allyanim: 1, futuremove: 1, snatch: 1}, + flags: {snatch: 1, allyanim: 1, metronome: 1, futuremove: 1}, ignoreImmunity: true, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); @@ -1186,11 +1189,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: true, basePower: 0, category: "Status", - shortDesc: "Prevents pivoting moves from being used for the rest of the turn.", + shortDesc: "Prevents pivoting moves from being used for the rest of the turn.", name: "Pivot Fail", pp: 5, priority: 0, - flags: {}, + flags: {metronome: 1}, volatileStatus: 'pivotfail', condition: { duration: 1, @@ -1220,11 +1223,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 65, category: "Physical", - shortDesc: "Removes the target's Ground immunity and causes pivoting moves to fail.", + shortDesc: "Removes the target's Ground immunity and causes pivoting moves to fail.", name: "Smack Down", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, volatileStatus: 'smackdown', onHit(target) { target.addVolatile('pivotfail'); @@ -1270,11 +1273,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 90, category: "Physical", - shortDesc: "100% chance to lower the target's Speed by 1 (2 if Flying-type).", + shortDesc: "100% chance to lower the target's Speed by 1 (2 if Flying-type).", name: "Root Pull", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Trailblaze", target); @@ -1302,7 +1305,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Snatch", pp: 10, priority: 2, - flags: {bypasssub: 1, mustpressure: 1, noassist: 1, failcopycat: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, mustpressure: 1, noassist: 1, failcopycat: 1}, self: { onHit(pokemon, source, move) { pokemon.addVolatile('snatch'); @@ -1348,12 +1351,12 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 75, category: "Special", - shortDesc: "Nullifies the target's Ability.", + shortDesc: "Nullifies the target's Ability.", isNonstandard: null, name: "Signal Beam", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onHit(target) { if (target.getAbility().flags['cantsuppress']) return; target.addVolatile('gastroacid'); @@ -1372,10 +1375,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 95, basePower: 100, category: "Physical", - shortDesc: "Either Fighting or Flying-type, whichever is more effective.", + shortDesc: "Either Fighting or Flying-type, whichever is more effective.", name: "Flying Press", pp: 10, - flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1, metronome: 1}, onModifyType(move, pokemon) { for (const target of pokemon.side.foe.active) { const type1 = 'Fighting'; @@ -1407,10 +1410,10 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 95, basePower: 100, category: "Special", - shortDesc: "Either Bug or Electric-type, whichever is more effective.", + shortDesc: "Either Bug or Electric-type, whichever is more effective.", name: "Software Crash", pp: 10, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onPrepareHit(target, source, move) { this.attrLastMove('[still]'); this.add('-anim', source, "Hyper Beam", target); @@ -1445,11 +1448,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 70, category: "Physical", - shortDesc: "2x power if the user has negative stat changes or a status.", + shortDesc: "2x power if the user has negative stat changes or a status.", name: "Lash Out", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon) { const negativeVolatiles = ['confusion', 'taunt', 'torment', 'trapped', 'partiallytrapped', 'leechseed', 'sandspit', 'attract', 'curse', 'disable', 'electrify', 'embargo', 'encore', 'foresight', 'gastroacid', 'foresight', 'miracleeye', @@ -1475,12 +1478,12 @@ export const Moves: {[k: string]: ModdedMoveData} = { accuracy: 100, basePower: 0, category: "Physical", - shortDesc: "Type and power based on user's berry.", + shortDesc: "Type and power based on user's berry.", isNonstandard: null, name: "Natural Gift", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyType(move, pokemon) { if (pokemon.ignoringItem()) return; const item = pokemon.getItem(); @@ -1516,7 +1519,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Stealth Rock", pp: 20, priority: 0, - flags: {reflectable: 1, snatch: 1}, + flags: {reflectable: 1, snatch: 1, metronome: 1}, sideCondition: 'stealthrock', condition: { // this is a side condition @@ -1551,7 +1554,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Spikes", pp: 20, priority: 0, - flags: {reflectable: 1, nonsky: 1, mustpressure: 1, snatch: 1}, + flags: {reflectable: 1, snatch: 1, nonsky: 1, metronome: 1, mustpressure: 1}, sideCondition: 'spikes', condition: { // this is a side condition @@ -1586,7 +1589,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Toxic Spikes", pp: 20, priority: 0, - flags: {reflectable: 1, nonsky: 1, mustpressure: 1, snatch: 1}, + flags: {reflectable: 1, snatch: 1, nonsky: 1, metronome: 1, mustpressure: 1}, sideCondition: 'toxicspikes', condition: { // this is a side condition @@ -1628,7 +1631,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Sticky Web", pp: 20, priority: 0, - flags: {reflectable: 1, snatch: 1}, + flags: {reflectable: 1, snatch: 1, metronome: 1}, sideCondition: 'stickyweb', condition: { onSideStart(side) { @@ -1655,7 +1658,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Defog", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, wind: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1, wind: 1}, onHit(target, source, move) { let success = false; if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({evasion: -1}); @@ -1728,7 +1731,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Rapid Spin", pp: 40, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterHit(target, pokemon, move) { if (!move.hasSheerForce) { if (pokemon.hp && pokemon.removeVolatile('leechseed')) { @@ -1781,7 +1784,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Mortal Spin", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterHit(target, pokemon, move) { if (!move.hasSheerForce) { if (pokemon.hp && pokemon.removeVolatile('leechseed')) { @@ -1860,7 +1863,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Court Change", pp: 10, priority: 0, - flags: {mirror: 1}, + flags: {mirror: 1, metronome: 1}, onHitField(target, source) { const sideConditions = [ 'mist', 'lightscreen', 'reflect', 'spikes', 'safeguard', 'tailwind', 'toxicspikes', 'stealthrock', @@ -1935,7 +1938,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Heal Block", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'healblock', condition: { duration: 5, @@ -2002,7 +2005,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Electric Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'electricterrain', condition: { duration: 5, @@ -2084,7 +2087,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Psychic Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'psychicterrain', condition: { duration: 5, @@ -2156,7 +2159,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Grassy Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'grassyterrain', condition: { duration: 5, @@ -2232,7 +2235,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Misty Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'mistyterrain', condition: { duration: 5, @@ -2917,7 +2920,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, aromaticmist: { inherit: true, - flags: {bypasssub: 1, snatch: 1}, + flags: {snatch: 1, bypasssub: 1, metronome: 1}, }, terablast: { num: 851, @@ -2927,7 +2930,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Tera Blast", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, mustpressure: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, mustpressure: 1}, onPrepareHit(target, source, move) { if (source.terastallized) { this.attrLastMove('[anim] Tera Blast ' + source.teraType); @@ -2983,7 +2986,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Burn Up", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, onTryMove(pokemon, target, move) { if (pokemon.hasType('Fire')) return; this.add('-fail', pokemon, 'move: Burn Up'); @@ -3010,7 +3013,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { name: "Roost", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], self: { volatileStatus: 'roost', diff --git a/data/moves.ts b/data/moves.ts index 219f40e8e6d7..cfb602051f94 100644 --- a/data/moves.ts +++ b/data/moves.ts @@ -26,7 +26,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Absorb", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1}, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -41,7 +41,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Accelerock", pp: 20, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Rock", @@ -55,7 +55,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Acid", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -74,7 +74,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Acid Armor", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 2, }, @@ -108,7 +108,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Acid Spray", pp: 20, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 100, boosts: { @@ -134,7 +134,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Acrobatics", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, secondary: null, target: "any", type: "Flying", @@ -148,7 +148,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Acupressure", pp: 30, priority: 0, - flags: {}, + flags: {metronome: 1}, onHit(target) { const stats: BoostID[] = []; let stat: BoostID; @@ -180,7 +180,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aerial Ace", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1, slicing: 1}, secondary: null, target: "any", type: "Flying", @@ -194,7 +194,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aeroblast", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, distance: 1, wind: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1}, critRatio: 2, secondary: null, target: "any", @@ -234,7 +234,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Agility", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spe: 2, }, @@ -252,7 +252,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Air Cutter", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1, slicing: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1, wind: 1}, critRatio: 2, secondary: null, target: "allAdjacentFoes", @@ -267,7 +267,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Air Slash", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, distance: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, slicing: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -300,7 +300,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Alluring Voice", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { chance: 100, onHit(target, source, move) { @@ -320,7 +320,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ally Switch", pp: 15, priority: 2, - flags: {}, + flags: {metronome: 1}, stallingMove: true, onPrepareHit(pokemon) { return !!this.queue.willAct() && this.runEvent('StallMove', pokemon); @@ -350,7 +350,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Amnesia", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spd: 2, }, @@ -369,7 +369,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Anchor Shot", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, onHit(target, source, move) { @@ -388,7 +388,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ancient Power", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, self: { @@ -431,7 +431,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aqua Cutter", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "normal", @@ -446,7 +446,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aqua Jet", pp: 20, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Water", @@ -460,7 +460,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aqua Ring", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'aquaring', condition: { onStart(pokemon) { @@ -485,7 +485,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aqua Step", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, dance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, dance: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -506,7 +506,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aqua Tail", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Water", @@ -539,7 +539,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Arm Thrust", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -555,7 +555,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aromatherapy", pp: 5, priority: 0, - flags: {snatch: 1, distance: 1}, + flags: {snatch: 1, distance: 1, metronome: 1}, onHit(target, source, move) { this.add('-activate', source, 'move: Aromatherapy'); let success = false; @@ -582,7 +582,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aromatic Mist", pp: 20, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, boosts: { spd: 1, }, @@ -601,7 +601,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Assist", pp: 20, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onHit(target) { const moves = []; for (const pokemon of target.side.pokemon) { @@ -642,7 +642,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Assurance", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dark", @@ -656,7 +656,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Astonish", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -686,7 +686,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Attack Order", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -701,7 +701,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Attract", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'attract', condition: { noCopy: true, // doesn't get copied by Baton Pass @@ -758,7 +758,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aura Sphere", pp: 20, priority: 0, - flags: {bullet: 1, protect: 1, pulse: 1, mirror: 1, distance: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, bullet: 1, pulse: 1}, secondary: null, target: "any", type: "Fighting", @@ -808,7 +808,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aurora Beam", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -827,7 +827,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Aurora Veil", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'auroraveil', onTry() { return this.field.isWeather(['hail', 'snow']); @@ -877,7 +877,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Autotomize", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onTryHit(pokemon) { const hasContrary = pokemon.hasAbility('contrary'); if ((!hasContrary && pokemon.boosts.spe === 6) || (hasContrary && pokemon.boosts.spe === -6)) { @@ -917,7 +917,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Avalanche", pp: 10, priority: -4, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ice", @@ -931,7 +931,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Axe Kick", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, hasCrashDamage: true, onMoveFail(target, source, move) { this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick')); @@ -951,7 +951,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Baby-Doll Eyes", pp: 30, priority: 1, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, boosts: { atk: -1, }, @@ -1045,7 +1045,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Barb Barrage", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon, target) { if (target.status === 'psn' || target.status === 'tox') { return this.chainModify(2); @@ -1067,7 +1067,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Barrage", pp: 20, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -1083,7 +1083,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Barrier", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 2, }, @@ -1101,7 +1101,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Baton Pass", pp: 40, priority: 0, - flags: {}, + flags: {metronome: 1}, onHit(target) { if (!this.canSwitch(target.side) || target.volatiles['commanded']) { this.attrLastMove('[still]'); @@ -1129,7 +1129,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Beak Blast", pp: 15, priority: -3, - flags: {bullet: 1, protect: 1, noassist: 1, failmefirst: 1, nosleeptalk: 1, failcopycat: 1, failinstruct: 1}, + flags: {protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, bullet: 1}, priorityChargeCallback(pokemon) { pokemon.addVolatile('beakblast'); }, @@ -1167,7 +1167,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Beat Up", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1}, onModifyMove(move, pokemon) { move.allies = pokemon.side.pokemon.filter(ally => ally === pokemon || !ally.fainted && !ally.status); move.multihit = move.allies.length; @@ -1198,7 +1198,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Behemoth Blade", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1, failcopycat: 1, failmimic: 1}, + flags: {contact: 1, protect: 1, mirror: 1, failcopycat: 1, failmimic: 1, slicing: 1}, secondary: null, target: "normal", type: "Steel", @@ -1211,7 +1211,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Belch", pp: 10, priority: 0, - flags: {protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {protect: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onDisableMove(pokemon) { if (!pokemon.ateBerry) pokemon.disableMove('belch'); }, @@ -1228,7 +1228,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Belly Drum", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(target) { if (target.hp <= target.maxhp / 2 || target.boosts.atk >= 6 || target.maxhp === 1) { // Shedinja clause return false; @@ -1279,7 +1279,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bide", pp: 10, priority: 1, - flags: {contact: 1, protect: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, volatileStatus: 'bide', ignoreImmunity: true, beforeMoveCallback(pokemon) { @@ -1352,7 +1352,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bind", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -1367,7 +1367,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bite", pp: 25, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -1384,7 +1384,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bitter Blade", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1, slicing: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -1398,7 +1398,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bitter Malice", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -1432,7 +1432,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Blast Burn", pp: 5, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -1449,7 +1449,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Blaze Kick", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: { chance: 10, @@ -1469,7 +1469,7 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, noSketch: true, secondary: { @@ -1487,7 +1487,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bleakwind Storm", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, onModifyMove(move, pokemon, target) { if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) { move.accuracy = true; @@ -1510,7 +1510,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Blizzard", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, onModifyMove(move) { if (this.field.isWeather(['hail', 'snow'])) move.accuracy = true; }, @@ -1530,7 +1530,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Block", pp: 5, priority: 0, - flags: {reflectable: 1, mirror: 1}, + flags: {reflectable: 1, mirror: 1, metronome: 1}, onHit(target, source, move) { return target.addVolatile('trapped', source, move, 'trapper'); }, @@ -1548,7 +1548,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Blood Moon", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, cantusetwice: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, cantusetwice: 1}, secondary: null, target: "normal", type: "Normal", @@ -1577,7 +1577,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Blue Flare", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, status: 'brn', @@ -1608,7 +1608,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Body Slam", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -1634,7 +1634,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bolt Beak", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Electric", @@ -1647,7 +1647,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bolt Strike", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, status: 'par', @@ -1665,7 +1665,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bone Club", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, volatileStatus: 'flinch', @@ -1683,7 +1683,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bonemerang", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -1699,7 +1699,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bone Rush", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -1716,7 +1716,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Boomburst", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: null, target: "allAdjacent", type: "Normal", @@ -1731,7 +1731,8 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 5, priority: 0, flags: { - contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, + metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, }, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { @@ -1803,7 +1804,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Brave Bird", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, recoil: [33, 100], secondary: null, target: "any", @@ -1852,7 +1853,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Brick Break", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTryHit(pokemon) { // will shatter screens through sub, before you hit pokemon.side.removeSideCondition('reflect'); @@ -1872,7 +1873,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Brine", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon, target) { if (target.hp * 2 <= target.maxhp) { return this.chainModify(2); @@ -1891,7 +1892,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Brutal Swing", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "allAdjacent", type: "Dark", @@ -1906,7 +1907,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bubble", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -1925,7 +1926,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bubble Beam", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -1944,7 +1945,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bug Bite", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onHit(target, source) { const item = target.getItem(); if (source.hp && item.isBerry && target.takeItem(source)) { @@ -1969,7 +1970,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bug Buzz", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -1988,7 +1989,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bulk Up", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, def: 1, @@ -2007,7 +2008,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bulldoze", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -2026,7 +2027,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bullet Punch", pp: 30, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: null, target: "normal", type: "Steel", @@ -2040,7 +2041,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Bullet Seed", pp: 30, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -2057,7 +2058,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Burning Bulwark", pp: 10, priority: 4, - flags: {noassist: 1, failcopycat: 1}, + flags: {metronome: 1, noassist: 1, failcopycat: 1}, stallingMove: true, volatileStatus: 'burningbulwark', onPrepareHit(pokemon) { @@ -2113,7 +2114,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Burning Jealousy", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, onHit(target, source, move) { @@ -2135,7 +2136,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Burn Up", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, onTryMove(pokemon, target, move) { if (pokemon.hasType('Fire')) return; this.add('-fail', pokemon, 'move: Burn Up'); @@ -2179,7 +2180,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Calm Mind", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spa: 1, spd: 1, @@ -2199,7 +2200,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Camouflage", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(target) { let newType = 'Normal'; if (this.field.isTerrain('electricterrain')) { @@ -2230,7 +2231,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Captivate", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, onTryImmunity(pokemon, source) { return (pokemon.gender === 'M' && source.gender === 'F') || (pokemon.gender === 'F' && source.gender === 'M'); }, @@ -2267,7 +2268,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ceaseless Edge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, onAfterHit(target, source, move) { if (!move.hasSheerForce && source.hp) { for (const side of source.side.foeSidesWithConditions()) { @@ -2294,7 +2295,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Celebrate", pp: 40, priority: 0, - flags: {nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onTryHit(target, source) { this.add('-activate', target, 'move: Celebrate'); }, @@ -2312,7 +2313,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Charge", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'charge', condition: { onStart(pokemon, source, effect) { @@ -2367,7 +2368,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Charge Beam", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 70, self: { @@ -2388,7 +2389,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Charm", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, boosts: { atk: -2, }, @@ -2408,8 +2409,8 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 20, priority: 0, flags: { - protect: 1, mirror: 1, sound: 1, distance: 1, bypasssub: 1, nosleeptalk: 1, noassist: 1, - failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, mirror: 1, sound: 1, distance: 1, bypasssub: 1, + nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, noSketch: true, secondary: { @@ -2465,7 +2466,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Chip Away", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, ignoreDefensive: true, ignoreEvasion: true, secondary: null, @@ -2481,7 +2482,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Chloroblast", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, // Recoil implemented in battle-actions.ts secondary: null, target: "normal", @@ -2495,7 +2496,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Circle Throw", pp: 10, priority: -6, - flags: {contact: 1, protect: 1, mirror: 1, noassist: 1, failcopycat: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, noassist: 1, failcopycat: 1}, forceSwitch: true, target: "normal", type: "Fighting", @@ -2510,7 +2511,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Clamp", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -2525,7 +2526,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Clanging Scales", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, selfBoost: { boosts: { def: -1, @@ -2601,7 +2602,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Clear Smog", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onHit(target) { target.clearBoosts(); this.add('-clearboost', target); @@ -2619,7 +2620,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Close Combat", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, self: { boosts: { def: -1, @@ -2639,7 +2640,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Coaching", pp: 10, priority: 0, - flags: {bypasssub: 1, allyanim: 1}, + flags: {bypasssub: 1, allyanim: 1, metronome: 1}, secondary: null, boosts: { atk: 1, @@ -2656,7 +2657,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Coil", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, def: 1, @@ -2699,7 +2700,7 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, noSketch: true, secondary: { @@ -2718,7 +2719,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Comet Punch", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -2765,7 +2766,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Confide", pp: 20, priority: 0, - flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, boosts: { spa: -1, }, @@ -2783,7 +2784,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Confuse Ray", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'confusion', secondary: null, target: "normal", @@ -2799,7 +2800,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Confusion", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, volatileStatus: 'confusion', @@ -2817,7 +2818,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Constrict", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -2852,7 +2853,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Conversion", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(target) { const type = this.dex.moves.get(target.moveSlots[0].id).type; if (target.hasType(type) || !target.setType(type)) return false; @@ -2872,7 +2873,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Conversion 2", pp: 30, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, onHit(target, source) { if (!target.lastMoveUsed) { return false; @@ -2908,7 +2909,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Copycat", pp: 20, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onHit(pokemon) { let move: Move | ActiveMove | null = this.lastMove; if (!move) return; @@ -2934,7 +2935,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Core Enforcer", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onHit(target) { if (target.getAbility().flags['cantsuppress']) return; if (target.newlySwitched || this.queue.willMove(target)) return; @@ -2976,7 +2977,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Corrosive Gas", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const item = target.takeItem(source); if (item) { @@ -2997,7 +2998,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cosmic Power", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 1, spd: 1, @@ -3016,7 +3017,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cotton Guard", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 3, }, @@ -3034,7 +3035,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cotton Spore", pp: 40, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1}, boosts: { spe: -2, }, @@ -3098,7 +3099,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Court Change", pp: 10, priority: 0, - flags: {mirror: 1}, + flags: {mirror: 1, metronome: 1}, onHitField(target, source) { const sideConditions = [ 'mist', 'lightscreen', 'reflect', 'spikes', 'safeguard', 'tailwind', 'toxicspikes', 'stealthrock', 'waterpledge', 'firepledge', 'grasspledge', 'stickyweb', 'auroraveil', 'gmaxsteelsurge', 'gmaxcannonade', 'gmaxvinelash', 'gmaxwildfire', @@ -3201,7 +3202,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Crabhammer", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -3248,7 +3249,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cross Chop", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -3263,7 +3264,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cross Poison", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: { chance: 10, status: 'psn', @@ -3281,7 +3282,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Crunch", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondary: { chance: 20, boosts: { @@ -3300,7 +3301,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Crush Claw", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, boosts: { @@ -3326,7 +3327,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Crush Grip", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -3342,7 +3343,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Curse", pp: 10, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, volatileStatus: 'curse', onModifyMove(move, source, target) { if (!source.hasType('Ghost')) { @@ -3388,7 +3389,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Cut", pp: 30, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: null, target: "normal", type: "Normal", @@ -3402,7 +3403,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Darkest Lariat", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, ignoreEvasion: true, ignoreDefensive: true, secondary: null, @@ -3418,7 +3419,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dark Pulse", pp: 15, priority: 0, - flags: {protect: 1, pulse: 1, mirror: 1, distance: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1}, secondary: { chance: 20, volatileStatus: 'flinch', @@ -3435,7 +3436,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dark Void", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'slp', onTry(source, target, move) { if (source.species.name === 'Darkrai' || move.hasBounced) { @@ -3460,7 +3461,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dazzling Gleam", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Fairy", @@ -3491,7 +3492,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Defend Order", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 1, spd: 1, @@ -3510,7 +3511,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Defense Curl", pp: 40, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 1, }, @@ -3533,7 +3534,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Defog", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, onHit(target, source, move) { let success = false; if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({evasion: -1}); @@ -3678,7 +3679,10 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dig", pp: 10, priority: 0, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1}, + flags: { + contact: 1, charge: 1, protect: 1, mirror: 1, + nonsky: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + }, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -3720,7 +3724,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Disable", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'disable', onTryHit(target) { if (!target.lastMove || target.lastMove.isZ || target.lastMove.isMax || target.lastMove.id === 'struggle') { @@ -3790,7 +3794,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Disarming Voice", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Fairy", @@ -3804,7 +3808,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Discharge", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -3821,7 +3825,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dire Claw", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, onHit(target, source) { @@ -3847,7 +3851,8 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, allyanim: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + contact: 1, charge: 1, protect: 1, mirror: 1, + nonsky: 1, allyanim: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, }, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { @@ -3895,7 +3900,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dizzy Punch", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 20, volatileStatus: 'confusion', @@ -3947,7 +3952,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Doom Desire", pp: 5, priority: 0, - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, onTry(source, target) { if (!target.side.addSlotCondition(target, 'futuremove')) return false; Object.assign(target.side.slotConditions[target.position]['futuremove'], { @@ -3960,7 +3965,7 @@ export const Moves: {[moveid: string]: MoveData} = { basePower: 140, category: "Special", priority: 0, - flags: {futuremove: 1}, + flags: {metronome: 1, futuremove: 1}, effectType: 'Move', type: 'Steel', }, @@ -3981,7 +3986,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Double-Edge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [33, 100], secondary: null, target: "normal", @@ -3996,7 +4001,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Double Hit", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -4034,7 +4039,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Double Kick", pp: 30, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -4077,7 +4082,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Double Slap", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -4092,7 +4097,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Double Team", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { evasion: 1, }, @@ -4110,7 +4115,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Draco Meteor", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spa: -2, @@ -4148,7 +4153,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Breath", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -4165,7 +4170,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Cheer", pp: 15, priority: 0, - flags: {bypasssub: 1, allyanim: 1}, + flags: {bypasssub: 1, allyanim: 1, metronome: 1}, volatileStatus: 'dragoncheer', condition: { onStart(target, source, effect) { @@ -4197,7 +4202,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Claw", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dragon", @@ -4211,7 +4216,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Dance", pp: 20, priority: 0, - flags: {snatch: 1, dance: 1}, + flags: {snatch: 1, dance: 1, metronome: 1}, boosts: { atk: 1, spe: 1, @@ -4230,7 +4235,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Darts", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, noparentalbond: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1}, multihit: 2, smartTarget: true, secondary: null, @@ -4264,7 +4269,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Hammer", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dragon", @@ -4278,7 +4283,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Pulse", pp: 10, priority: 0, - flags: {protect: 1, pulse: 1, mirror: 1, distance: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1}, secondary: null, target: "any", type: "Dragon", @@ -4294,7 +4299,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Rage", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dragon", @@ -4308,7 +4313,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Rush", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, volatileStatus: 'flinch', @@ -4325,7 +4330,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dragon Tail", pp: 10, priority: -6, - flags: {contact: 1, protect: 1, mirror: 1, noassist: 1, failcopycat: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, noassist: 1, failcopycat: 1}, forceSwitch: true, target: "normal", type: "Dragon", @@ -4339,7 +4344,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Draining Kiss", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [3, 4], secondary: null, target: "normal", @@ -4354,7 +4359,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Drain Punch", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1, heal: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -4369,7 +4374,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dream Eater", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1}, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], onTryImmunity(target) { return target.status === 'slp' || target.hasAbility('comatose'); @@ -4387,7 +4392,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Drill Peck", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, secondary: null, target: "any", type: "Flying", @@ -4401,7 +4406,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Drill Run", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -4435,7 +4440,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dual Chop", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -4451,7 +4456,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dual Wingbeat", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -4466,7 +4471,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dynamax Cannon", pp: 5, priority: 0, - flags: {protect: 1, failencore: 1, nosleeptalk: 1, noparentalbond: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {protect: 1, failencore: 1, nosleeptalk: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, noparentalbond: 1}, secondary: null, target: "normal", type: "Dragon", @@ -4479,7 +4484,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Dynamic Punch", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 100, volatileStatus: 'confusion', @@ -4496,7 +4501,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Earth Power", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -4515,7 +4520,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Earthquake", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: null, target: "allAdjacent", type: "Ground", @@ -4537,7 +4542,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Echoed Voice", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, onTry() { this.field.addPseudoWeather('echoedvoice'); }, @@ -4568,7 +4573,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Eerie Impulse", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { spa: -2, }, @@ -4586,7 +4591,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Eerie Spell", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { chance: 100, onHit(target) { @@ -4612,7 +4617,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Egg Bomb", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: null, target: "normal", type: "Normal", @@ -4626,7 +4631,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Electric Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'electricterrain', condition: { duration: 5, @@ -4686,7 +4691,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Electrify", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1}, volatileStatus: 'electrify', onTryHit(target) { if (!this.queue.willMove(target) && target.activeTurns) return false; @@ -4725,7 +4730,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Electro Ball", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: null, target: "normal", type: "Electric", @@ -4762,7 +4767,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Electro Shot", pp: 10, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1}, + flags: {charge: 1, protect: 1, mirror: 1, metronome: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -4793,7 +4798,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Electroweb", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -4813,7 +4818,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Embargo", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'embargo', condition: { duration: 5, @@ -4841,7 +4846,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ember", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'brn', @@ -4858,7 +4863,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Encore", pp: 5, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, failencore: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1, failencore: 1}, volatileStatus: 'encore', condition: { duration: 3, @@ -4921,7 +4926,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Endeavor", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, noparentalbond: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, noparentalbond: 1}, onTryImmunity(target, pokemon) { return pokemon.hp < target.hp; }, @@ -4976,7 +4981,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Energy Ball", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 10, boosts: { @@ -4995,7 +5000,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Entrainment", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onTryHit(target, source) { if (target === source || target.volatiles['dynamax']) return false; if ( @@ -5034,7 +5039,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Eruption", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Fire", @@ -5048,7 +5053,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Esper Wing", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: { chance: 100, @@ -5086,7 +5091,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Expanding Force", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, source) { if (this.field.isTerrain('psychicterrain') && source.isGrounded()) { this.debug('terrain buff'); @@ -5110,7 +5115,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Explosion", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, noparentalbond: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1}, selfdestruct: "always", secondary: null, target: "allAdjacent", @@ -5125,7 +5130,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Extrasensory", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, volatileStatus: 'flinch', @@ -5165,7 +5170,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Extreme Speed", pp: 5, priority: 2, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -5179,7 +5184,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Facade", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon) { if (pokemon.status && pokemon.status !== 'slp') { return this.chainModify(2); @@ -5198,7 +5203,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fairy Lock", pp: 10, priority: 0, - flags: {mirror: 1, bypasssub: 1}, + flags: {mirror: 1, bypasssub: 1, metronome: 1}, pseudoWeather: 'fairylock', condition: { duration: 2, @@ -5223,7 +5228,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fairy Wind", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, secondary: null, target: "normal", type: "Fairy", @@ -5237,7 +5242,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fake Out", pp: 10, priority: 3, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTry(source) { if (source.activeMoveActions > 1) { this.hint("Fake Out only works on your first turn out."); @@ -5260,7 +5265,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fake Tears", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, boosts: { spd: -2, }, @@ -5291,7 +5296,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "False Swipe", pp: 40, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onDamagePriority: -20, onDamage(damage, target, source, effect) { if (damage >= target.hp) return target.hp - 1; @@ -5309,7 +5314,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Feather Dance", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, dance: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, dance: 1, allyanim: 1, metronome: 1}, boosts: { atk: -2, }, @@ -5344,7 +5349,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Feint Attack", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dark", @@ -5358,7 +5363,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fell Stinger", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterMoveSecondarySelf(pokemon, target, move) { if (!target || target.fainted || target.hp <= 0) this.boost({atk: 3}, pokemon, pokemon, move); }, @@ -5375,7 +5380,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fickle Beam", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon) { if (this.randomChance(3, 10)) { this.attrLastMove('[anim] Fickle Beam All Out'); @@ -5395,7 +5400,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fiery Dance", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, dance: 1}, + flags: {protect: 1, mirror: 1, dance: 1, metronome: 1}, secondary: { chance: 50, self: { @@ -5466,7 +5471,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Final Gambit", pp: 5, priority: 0, - flags: {protect: 1, noparentalbond: 1}, + flags: {protect: 1, metronome: 1, noparentalbond: 1}, secondary: null, target: "normal", type: "Fighting", @@ -5481,7 +5486,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Blast", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'brn', @@ -5498,7 +5503,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Fang", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondaries: [ { chance: 10, @@ -5520,7 +5525,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Lash", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -5546,7 +5551,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Pledge", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1, pledgecombo: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1, pledgecombo: 1}, onPrepareHit(target, source, move) { for (const action of this.queue.list as MoveAction[]) { if ( @@ -5603,7 +5608,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Punch", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 10, status: 'brn', @@ -5620,7 +5625,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fire Spin", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -5635,7 +5640,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "First Impression", pp: 10, priority: 2, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTry(source) { if (source.activeMoveActions > 1) { this.hint("First Impression only works on your first turn out."); @@ -5664,7 +5669,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fishious Rend", pp: 10, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondary: null, target: "normal", type: "Water", @@ -5677,7 +5682,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fissure", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, ohko: true, secondary: null, target: "normal", @@ -5713,7 +5718,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flail", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -5730,7 +5735,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flame Burst", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onHit(target, source, move) { for (const ally of target.adjacentAllies()) { this.damage(ally.baseMaxhp / 16, ally, source, this.dex.conditions.get('Flame Burst')); @@ -5754,7 +5759,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flame Charge", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -5775,7 +5780,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flame Wheel", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, defrost: 1}, + flags: {contact: 1, protect: 1, mirror: 1, defrost: 1, metronome: 1}, secondary: { chance: 10, status: 'brn', @@ -5792,7 +5797,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flamethrower", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'brn', @@ -5809,7 +5814,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flare Blitz", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, defrost: 1}, + flags: {contact: 1, protect: 1, mirror: 1, defrost: 1, metronome: 1}, recoil: [33, 100], secondary: { chance: 10, @@ -5828,7 +5833,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flash", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { accuracy: -1, }, @@ -5846,7 +5851,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flash Cannon", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -5865,7 +5870,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flatter", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, volatileStatus: 'confusion', boosts: { spa: 1, @@ -5903,7 +5908,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fling", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, allyanim: 1, noparentalbond: 1}, + flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1, noparentalbond: 1}, onPrepareHit(target, source, move) { if (source.ignoringItem()) return false; const item = source.getItem(); @@ -5955,7 +5960,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flip Turn", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, selfSwitch: true, secondary: null, target: "normal", @@ -5987,7 +5992,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Floral Healing", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, heal: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, heal: 1, allyanim: 1, metronome: 1}, onHit(target, source) { let success = false; if (this.field.isTerrain('grassyterrain')) { @@ -6019,7 +6024,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flower Shield", pp: 10, priority: 0, - flags: {distance: 1}, + flags: {distance: 1, metronome: 1}, onHitField(t, source, move) { const targets: Pokemon[] = []; for (const pokemon of this.getAllActive()) { @@ -6052,7 +6057,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Flower Trick", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, willCrit: true, secondary: null, target: "normal", @@ -6067,7 +6072,8 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 15, priority: 0, flags: { - contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, + metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, }, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { @@ -6106,7 +6112,7 @@ export const Moves: {[moveid: string]: MoveData} = { category: "Physical", name: "Flying Press", pp: 10, - flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1, metronome: 1}, onEffectiveness(typeMod, target, type, move) { return typeMod + this.dex.getEffectiveness('Flying', type); }, @@ -6125,7 +6131,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Focus Blast", pp: 5, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 10, boosts: { @@ -6144,7 +6150,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Focus Energy", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'focusenergy', condition: { onStart(target, source, effect) { @@ -6249,7 +6255,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Force Palm", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -6267,7 +6273,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Foresight", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'foresight', onTryHit(target) { if (target.volatiles['miracleeye']) return false; @@ -6300,7 +6306,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Forest's Curse", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target) { if (target.hasType('Grass')) return false; if (!target.addType('Grass')) return false; @@ -6320,7 +6326,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Foul Play", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, overrideOffensivePokemon: 'target', secondary: null, target: "normal", @@ -6335,7 +6341,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Freeze-Dry", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onEffectiveness(typeMod, target, type) { if (type === 'Water') return 1; }, @@ -6420,7 +6426,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Frenzy Plant", pp: 5, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -6437,7 +6443,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Frost Breath", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, willCrit: true, secondary: null, target: "normal", @@ -6456,7 +6462,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Frustration", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -6472,7 +6478,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fury Attack", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -6495,7 +6501,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fury Cutter", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, condition: { duration: 2, onStart() { @@ -6521,7 +6527,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fury Swipes", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -6537,7 +6543,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fusion Bolt", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon) { if (this.lastSuccessfulMoveThisTurn === 'fusionflare') { this.debug('double power'); @@ -6557,7 +6563,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Fusion Flare", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, onBasePower(basePower, pokemon) { if (this.lastSuccessfulMoveThisTurn === 'fusionbolt') { this.debug('double power'); @@ -6577,7 +6583,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Future Sight", pp: 10, priority: 0, - flags: {allyanim: 1, futuremove: 1}, + flags: {allyanim: 1, metronome: 1, futuremove: 1}, ignoreImmunity: true, onTry(source, target) { if (!target.side.addSlotCondition(target, 'futuremove')) return false; @@ -6592,7 +6598,7 @@ export const Moves: {[moveid: string]: MoveData} = { basePower: 120, category: "Special", priority: 0, - flags: {allyanim: 1, futuremove: 1}, + flags: {allyanim: 1, metronome: 1, futuremove: 1}, ignoreImmunity: false, effectType: 'Move', type: 'Psychic', @@ -6614,7 +6620,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gastro Acid", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, volatileStatus: 'gastroacid', onTryHit(target) { if (target.getAbility().flags['cantsuppress']) { @@ -6651,7 +6657,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gear Grind", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: null, target: "normal", @@ -6669,7 +6675,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gear Up", pp: 20, priority: 0, - flags: {snatch: 1, bypasssub: 1}, + flags: {snatch: 1, bypasssub: 1, metronome: 1}, onHitSide(side, source, move) { const targets = side.allies().filter(target => ( target.hasAbility(['plus', 'minus']) && @@ -6720,7 +6726,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Geomancy", pp: 10, priority: 0, - flags: {charge: 1, nonsky: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {charge: 1, nonsky: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -6751,7 +6757,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Giga Drain", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1}, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -6766,7 +6772,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Giga Impact", pp: 5, priority: 0, - flags: {contact: 1, recharge: 1, protect: 1, mirror: 1}, + flags: {contact: 1, recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -6783,7 +6789,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gigaton Hammer", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, cantusetwice: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, cantusetwice: 1}, secondary: null, target: "normal", type: "Steel", @@ -6825,7 +6831,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Glaciate", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -6844,7 +6850,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Glaive Rush", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'glaiverush', }, @@ -6877,7 +6883,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Glare", pp: 30, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'par', secondary: null, target: "normal", @@ -7794,7 +7800,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grass Knot", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, onTryHit(target, source, move) { if (target.volatiles['dynamax']) { this.add('-fail', source, 'move: Grass Knot', '[from] Dynamax'); @@ -7824,7 +7830,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grass Pledge", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1, pledgecombo: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1, pledgecombo: 1}, onPrepareHit(target, source, move) { for (const action of this.queue.list as MoveAction[]) { if ( @@ -7880,7 +7886,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grass Whistle", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, status: 'slp', secondary: null, target: "normal", @@ -7896,7 +7902,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grassy Glide", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onModifyPriority(priority, source, target, move) { if (this.field.isTerrain('grassyterrain') && source.isGrounded()) { return priority + 1; @@ -7915,7 +7921,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grassy Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'grassyterrain', condition: { duration: 5, @@ -7996,7 +8002,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gravity", pp: 5, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, pseudoWeather: 'gravity', condition: { duration: 5, @@ -8086,7 +8092,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Growl", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, boosts: { atk: -1, }, @@ -8104,7 +8110,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Growth", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onModifyMove(move, pokemon) { if (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) move.boosts = {atk: 2, spa: 2}; }, @@ -8127,7 +8133,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Grudge", pp: 5, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, volatileStatus: 'grudge', condition: { onStart(pokemon) { @@ -8194,7 +8200,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Guard Split", pp: 10, priority: 0, - flags: {protect: 1, allyanim: 1}, + flags: {protect: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const newdef = Math.floor((target.storedStats.def + source.storedStats.def) / 2); target.storedStats.def = newdef; @@ -8218,7 +8224,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Guard Swap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const targetBoosts: SparseBoostsTable = {}; const sourceBoosts: SparseBoostsTable = {}; @@ -8248,7 +8254,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Guillotine", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, ohko: true, secondary: null, target: "normal", @@ -8265,7 +8271,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gunk Shot", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'psn', @@ -8282,7 +8288,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gust", pp: 35, priority: 0, - flags: {protect: 1, mirror: 1, distance: 1, wind: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1}, secondary: null, target: "any", type: "Flying", @@ -8303,7 +8309,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Gyro Ball", pp: 5, priority: 0, - flags: {bullet: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: null, target: "normal", type: "Steel", @@ -8320,7 +8326,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hail", pp: 10, priority: 0, - flags: {}, + flags: {metronome: 1}, weather: 'hail', secondary: null, target: "all", @@ -8336,7 +8342,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hammer Arm", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, self: { boosts: { spe: -1, @@ -8355,7 +8361,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Happy Hour", pp: 30, priority: 0, - flags: {}, + flags: {metronome: 1}, onTryHit(target, source) { this.add('-activate', target, 'move: Happy Hour'); }, @@ -8373,7 +8379,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Harden", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 1, }, @@ -8398,7 +8404,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hard Press", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Steel", @@ -8411,7 +8417,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Haze", pp: 30, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, onHitField() { this.add('-clearallboost'); for (const pokemon of this.getAllActive()) { @@ -8432,7 +8438,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Headbutt", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -8450,7 +8456,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Head Charge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [1, 4], secondary: null, target: "normal", @@ -8465,7 +8471,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Headlong Rush", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, self: { boosts: { def: -1, @@ -8484,7 +8490,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Head Smash", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [1, 2], secondary: null, target: "normal", @@ -8499,7 +8505,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heal Bell", pp: 5, priority: 0, - flags: {snatch: 1, sound: 1, distance: 1, bypasssub: 1}, + flags: {snatch: 1, sound: 1, distance: 1, bypasssub: 1, metronome: 1}, onHit(target, source) { this.add('-activate', source, 'move: Heal Bell'); let success = false; @@ -8524,7 +8530,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heal Block", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'healblock', condition: { duration: 5, @@ -8591,7 +8597,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Healing Wish", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onTryHit(source) { if (!this.canSwitch(source.side)) { this.attrLastMove('[still]'); @@ -8625,7 +8631,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heal Order", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], secondary: null, target: "self", @@ -8641,7 +8647,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heal Pulse", pp: 10, priority: 0, - flags: {protect: 1, pulse: 1, reflectable: 1, distance: 1, heal: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, distance: 1, heal: 1, allyanim: 1, metronome: 1, pulse: 1}, onHit(target, source) { let success = false; if (source.hasAbility('megalauncher')) { @@ -8673,7 +8679,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heart Stamp", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -8690,7 +8696,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heart Swap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const targetBoosts: SparseBoostsTable = {}; const sourceBoosts: SparseBoostsTable = {}; @@ -8738,7 +8744,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heat Crash", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, onTryHit(target, pokemon, move) { if (target.volatiles['dynamax']) { this.add('-fail', pokemon, 'Dynamax'); @@ -8761,7 +8767,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heat Wave", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, secondary: { chance: 10, status: 'brn', @@ -8796,7 +8802,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Heavy Slam", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, onTryHit(target, pokemon, move) { if (target.volatiles['dynamax']) { this.add('-fail', pokemon, 'Dynamax'); @@ -8861,7 +8867,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hex", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ghost", @@ -8877,7 +8883,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hidden Power", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyType(move, pokemon) { move.type = pokemon.hpType || 'Dark'; }, @@ -9150,7 +9156,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "High Horsepower", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ground", @@ -9164,7 +9170,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "High Jump Kick", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, gravity: 1}, + flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, metronome: 1}, hasCrashDamage: true, onMoveFail(target, source, move) { this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick')); @@ -9183,7 +9189,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hold Back", pp: 40, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onDamagePriority: -20, onDamage(damage, target, source, effect) { if (damage >= target.hp) return target.hp - 1; @@ -9202,7 +9208,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hold Hands", pp: 40, priority: 0, - flags: {bypasssub: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {bypasssub: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, secondary: null, target: "adjacentAlly", type: "Normal", @@ -9217,7 +9223,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hone Claws", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, accuracy: 1, @@ -9236,7 +9242,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Horn Attack", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -9250,7 +9256,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Horn Drill", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, ohko: true, secondary: null, target: "normal", @@ -9267,7 +9273,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Horn Leech", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -9282,7 +9288,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Howl", pp: 40, priority: 0, - flags: {snatch: 1, sound: 1}, + flags: {snatch: 1, sound: 1, metronome: 1}, boosts: { atk: 1, }, @@ -9300,7 +9306,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hurricane", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, distance: 1, wind: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1}, onModifyMove(move, pokemon, target) { switch (target?.effectiveWeather()) { case 'raindance': @@ -9329,7 +9335,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hydro Cannon", pp: 5, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -9346,7 +9352,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hydro Pump", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Water", @@ -9360,7 +9366,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hydro Steam", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, // Damage boost in Sun applied in conditions.ts thawsTarget: true, secondary: null, @@ -9391,7 +9397,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hyper Beam", pp: 5, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -9423,7 +9429,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hyper Fang", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondary: { chance: 10, volatileStatus: 'flinch', @@ -9490,7 +9496,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hyper Voice", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Normal", @@ -9504,7 +9510,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Hypnosis", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'slp', secondary: null, target: "normal", @@ -9540,7 +9546,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Ball", pp: 20, priority: 0, - flags: {bullet: 1, contact: 1, protect: 1, mirror: 1, noparentalbond: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1, bullet: 1, noparentalbond: 1}, onModifyMove(move, pokemon, target) { if (pokemon.volatiles['iceball'] || pokemon.status === 'slp' || !target) return; pokemon.addVolatile('iceball'); @@ -9591,7 +9597,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Beam", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'frz', @@ -9636,7 +9642,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Fang", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondaries: [ { chance: 10, @@ -9658,7 +9664,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Hammer", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, self: { boosts: { spe: -1, @@ -9677,7 +9683,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Punch", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 10, status: 'frz', @@ -9694,7 +9700,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Shard", pp: 30, priority: 1, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ice", @@ -9708,7 +9714,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ice Spinner", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterHit(target, source) { if (source.hp) { this.field.clearTerrain(); @@ -9731,7 +9737,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Icicle Crash", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -9748,7 +9754,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Icicle Spear", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -9765,7 +9771,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Icy Wind", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, secondary: { chance: 100, boosts: { @@ -9784,7 +9790,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Imprison", pp: 10, priority: 0, - flags: {snatch: 1, bypasssub: 1, mustpressure: 1}, + flags: {snatch: 1, bypasssub: 1, metronome: 1, mustpressure: 1}, volatileStatus: 'imprison', condition: { noCopy: true, @@ -9820,7 +9826,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Incinerate", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onHit(pokemon, source) { const item = pokemon.getItem(); if ((item.isBerry || item.isGem) && pokemon.takeItem(source)) { @@ -9844,7 +9850,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Infernal Parade", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'brn', @@ -9860,7 +9866,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Inferno", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, status: 'brn', @@ -9893,7 +9899,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Infestation", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -9908,7 +9914,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ingrain", pp: 20, priority: 0, - flags: {snatch: 1, nonsky: 1}, + flags: {snatch: 1, nonsky: 1, metronome: 1}, volatileStatus: 'ingrain', condition: { onStart(pokemon) { @@ -9977,7 +9983,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ion Deluge", pp: 25, priority: 1, - flags: {}, + flags: {metronome: 1}, pseudoWeather: 'iondeluge', condition: { duration: 1, @@ -10007,7 +10013,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Iron Defense", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 2, }, @@ -10025,7 +10031,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Iron Head", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -10042,7 +10048,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Iron Tail", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, boosts: { @@ -10061,7 +10067,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ivy Cudgel", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, onPrepareHit(target, source, move) { if (move.type !== "Grass") { @@ -10093,7 +10099,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Jaw Lock", pp: 10, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, onHit(target, source, move) { source.addVolatile('trapped', target, move, 'trapper'); target.addVolatile('trapped', source, move, 'trapper'); @@ -10124,7 +10130,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Judgment", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyType(move, pokemon) { if (pokemon.ignoringItem()) return; const item = pokemon.getItem(); @@ -10146,7 +10152,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Jump Kick", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, gravity: 1}, + flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, metronome: 1}, hasCrashDamage: true, onMoveFail(target, source, move) { this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('Jump Kick')); @@ -10182,7 +10188,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Karate Chop", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -10198,7 +10204,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Kinesis", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { accuracy: -1, }, @@ -10275,7 +10281,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Knock Off", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, source, target, move) { const item = target.getItem(); if (!this.singleEvent('TakeItem', item, target.itemState, target, target, move, item)) return; @@ -10304,7 +10310,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Kowtow Cleave", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: null, target: "normal", type: "Dark", @@ -10318,7 +10324,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Land's Wrath", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Ground", @@ -10334,7 +10340,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Laser Focus", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'laserfocus', condition: { duration: 2, @@ -10370,7 +10376,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lash Out", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, source) { if (source.statsLoweredThisTurn) { this.debug('lashout buff'); @@ -10389,7 +10395,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Last Resort", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTry(source) { if (source.moveSlots.length < 2) return false; // Last Resort fails unless the user knows at least 2 moves let hasLastResort = false; // User must actually have Last Resort for it to succeed @@ -10418,7 +10424,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Last Respects", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ghost", @@ -10431,7 +10437,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lava Plume", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'brn', @@ -10448,7 +10454,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leafage", pp: 40, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Grass", @@ -10462,7 +10468,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leaf Blade", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "normal", @@ -10477,7 +10483,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leaf Storm", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spa: -2, @@ -10497,7 +10503,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leaf Tornado", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, boosts: { @@ -10516,7 +10522,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leech Life", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -10531,7 +10537,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leech Seed", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'leechseed', condition: { onStart(target) { @@ -10567,7 +10573,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Leer", pp: 30, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { def: -1, }, @@ -10601,7 +10607,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lick", pp: 30, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -10648,7 +10654,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Light Screen", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'lightscreen', condition: { duration: 5, @@ -10710,7 +10716,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Liquidation", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, boosts: { @@ -10729,7 +10735,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lock-On", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryHit(target, source) { if (source.volatiles['lockon']) return false; }, @@ -10763,7 +10769,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lovely Kiss", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'slp', secondary: null, target: "normal", @@ -10798,7 +10804,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Low Kick", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTryHit(target, pokemon, move) { if (target.volatiles['dynamax']) { this.add('-fail', pokemon, 'Dynamax'); @@ -10820,7 +10826,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Low Sweep", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -10840,7 +10846,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lucky Chant", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'luckychant', condition: { duration: 5, @@ -10868,7 +10874,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lumina Crash", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -10886,7 +10892,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lunar Blessing", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onHit(pokemon) { const success = !!this.heal(this.modify(pokemon.maxhp, 0.25)); return pokemon.cureStatus() || success; @@ -10903,7 +10909,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lunar Dance", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1, dance: 1}, + flags: {snatch: 1, dance: 1, heal: 1, metronome: 1}, onTryHit(source) { if (!this.canSwitch(source.side)) { this.attrLastMove('[still]'); @@ -10945,7 +10951,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Lunge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -10964,7 +10970,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Luster Purge", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, boosts: { @@ -10983,7 +10989,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mach Punch", pp: 30, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -10997,7 +11003,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magical Leaf", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Grass", @@ -11013,7 +11019,7 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, noSketch: true, secondary: { @@ -11032,7 +11038,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magic Coat", pp: 15, priority: 4, - flags: {}, + flags: {metronome: 1}, volatileStatus: 'magiccoat', condition: { duration: 1, @@ -11078,7 +11084,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magic Powder", pp: 20, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1, powder: 1}, onHit(target) { if (target.getTypes().join() === 'Psychic' || !target.setType('Psychic')) return false; this.add('-start', target, 'typechange', 'Psychic'); @@ -11095,7 +11101,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magic Room", pp: 10, priority: 0, - flags: {mirror: 1}, + flags: {mirror: 1, metronome: 1}, pseudoWeather: 'magicroom', condition: { duration: 5, @@ -11140,7 +11146,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magma Storm", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -11156,7 +11162,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magnet Bomb", pp: 20, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: null, target: "normal", type: "Steel", @@ -11170,7 +11176,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magnetic Flux", pp: 20, priority: 0, - flags: {snatch: 1, distance: 1, bypasssub: 1}, + flags: {snatch: 1, distance: 1, bypasssub: 1, metronome: 1}, onHitSide(side, source, move) { const targets = side.allies().filter(ally => ( ally.hasAbility(['plus', 'minus']) && @@ -11198,7 +11204,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magnet Rise", pp: 10, priority: 0, - flags: {snatch: 1, gravity: 1}, + flags: {snatch: 1, gravity: 1, metronome: 1}, volatileStatus: 'magnetrise', onTry(source, target, move) { if (target.volatiles['smackdown'] || target.volatiles['ingrain']) return false; @@ -11237,7 +11243,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Magnitude", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, onModifyMove(move, pokemon) { const i = this.random(100); if (i < 5) { @@ -11316,7 +11322,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Malignant Chain", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, status: 'tox', @@ -11381,7 +11387,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Matcha Gotcha", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, heal: 1, metronome: 1}, drain: [1, 2], thawsTarget: true, secondary: { @@ -11847,7 +11853,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mean Look", pp: 5, priority: 0, - flags: {reflectable: 1, mirror: 1}, + flags: {reflectable: 1, mirror: 1, metronome: 1}, onHit(target, source, move) { return target.addVolatile('trapped', source, move, 'trapper'); }, @@ -11866,7 +11872,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Meditate", pp: 40, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, }, @@ -11887,7 +11893,7 @@ export const Moves: {[moveid: string]: MoveData} = { priority: 0, flags: { protect: 1, bypasssub: 1, - failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, onTryHit(target, pokemon) { const action = this.queue.willMove(target); @@ -11922,7 +11928,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mega Drain", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1}, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "normal", @@ -11938,7 +11944,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Megahorn", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Bug", @@ -11952,7 +11958,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mega Kick", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -11966,7 +11972,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mega Punch", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -11980,7 +11986,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Memento", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, boosts: { atk: -2, spa: -2, @@ -12024,7 +12030,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Metal Burst", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, failmefirst: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, failmefirst: 1}, onTry(source) { const lastDamagedBy = source.getLastDamagedBy(true); if (lastDamagedBy === undefined || !lastDamagedBy.thisTurn) return false; @@ -12048,7 +12054,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Metal Claw", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, self: { @@ -12069,7 +12075,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Metal Sound", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, metronome: 1}, boosts: { spd: -2, }, @@ -12088,7 +12094,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Meteor Assault", pp: 5, priority: 0, - flags: {protect: 1, recharge: 1, mirror: 1, failinstruct: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, failinstruct: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -12104,7 +12110,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Meteor Beam", pp: 10, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1}, + flags: {charge: 1, protect: 1, mirror: 1, metronome: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -12129,7 +12135,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Meteor Mash", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 20, self: { @@ -12150,16 +12156,12 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Metronome", pp: 10, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, - noMetronome: [ - "After You", "Apple Acid", "Armor Cannon", "Assist", "Astral Barrage", "Aura Wheel", "Baneful Bunker", "Beak Blast", "Behemoth Bash", "Behemoth Blade", "Belch", "Bestow", "Blazing Torque", "Body Press", "Branch Poke", "Breaking Swipe", "Celebrate", "Chatter", "Chilling Water", "Chilly Reception", "Clangorous Soul", "Collision Course", "Combat Torque", "Comeuppance", "Copycat", "Counter", "Covet", "Crafty Shield", "Decorate", "Destiny Bond", "Detect", "Diamond Storm", "Doodle", "Double Iron Bash", "Double Shock", "Dragon Ascent", "Dragon Energy", "Drum Beating", "Dynamax Cannon", "Electro Drift", "Endure", "Eternabeam", "False Surrender", "Feint", "Fiery Wrath", "Fillet Away", "Fleur Cannon", "Focus Punch", "Follow Me", "Freeze Shock", "Freezing Glare", "Glacial Lance", "Grav Apple", "Helping Hand", "Hold Hands", "Hyper Drill", "Hyperspace Fury", "Hyperspace Hole", "Ice Burn", "Instruct", "Jet Punch", "Jungle Healing", "King's Shield", "Life Dew", "Light of Ruin", "Magical Torque", "Make It Rain", "Mat Block", "Me First", "Meteor Assault", "Metronome", "Mimic", "Mind Blown", "Mirror Coat", "Mirror Move", "Moongeist Beam", "Nature Power", "Nature's Madness", "Noxious Torque", "Obstruct", "Order Up", "Origin Pulse", "Overdrive", "Photon Geyser", "Plasma Fists", "Population Bomb", "Pounce", "Power Shift", "Precipice Blades", "Protect", "Pyro Ball", "Quash", "Quick Guard", "Rage Fist", "Rage Powder", "Raging Bull", "Raging Fury", "Relic Song", "Revival Blessing", "Ruination", "Salt Cure", "Secret Sword", "Shed Tail", "Shell Trap", "Silk Trap", "Sketch", "Sleep Talk", "Snap Trap", "Snarl", "Snatch", "Snore", "Snowscape", "Spectral Thief", "Spicy Extract", "Spiky Shield", "Spirit Break", "Spotlight", "Springtide Storm", "Steam Eruption", "Steel Beam", "Strange Steam", "Struggle", "Sunsteel Strike", "Surging Strikes", "Switcheroo", "Techno Blast", "Tera Starstorm", "Thief", "Thousand Arrows", "Thousand Waves", "Thunder Cage", "Thunderous Kick", "Tidy Up", "Trailblaze", "Transform", "Trick", "Twin Beam", "V-create", "Wicked Blow", "Wicked Torque", "Wide Guard", - ], + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onHit(target, source, effect) { const moves = this.dex.moves.all().filter(move => ( (![2, 4].includes(this.gen) || !source.moves.includes(move.id)) && - !move.realMove && !move.isZ && !move.isMax && (!move.isNonstandard || move.isNonstandard === 'Unobtainable') && - !effect.noMetronome!.includes(move.name) + move.flags['metronome'] )); let randomMove = ''; if (moves.length) { @@ -12183,7 +12185,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mighty Cleave", pp: 5, priority: 0, - flags: {contact: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: null, target: "normal", type: "Rock", @@ -12196,7 +12198,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Milk Drink", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], secondary: null, target: "self", @@ -12214,7 +12216,7 @@ export const Moves: {[moveid: string]: MoveData} = { priority: 0, flags: { protect: 1, bypasssub: 1, allyanim: 1, - failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, onHit(target, source) { const move = target.lastMove; @@ -12277,7 +12279,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mind Reader", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryHit(target, source) { if (source.volatiles['lockon']) return false; }, @@ -12299,7 +12301,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Minimize", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'minimize', condition: { noCopy: true, @@ -12340,7 +12342,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Miracle Eye", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'miracleeye', onTryHit(target) { if (target.volatiles['foresight']) return false; @@ -12419,7 +12421,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mirror Move", pp: 20, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onTryHit(target, pokemon) { const move = target.lastMove; if (!move?.flags['mirror'] || move.isZ || move.isMax) { @@ -12443,7 +12445,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mirror Shot", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, boosts: { @@ -12462,7 +12464,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mist", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'mist', condition: { duration: 5, @@ -12505,7 +12507,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mist Ball", pp: 5, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 50, boosts: { @@ -12524,7 +12526,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Misty Explosion", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, selfdestruct: "always", onBasePower(basePower, source) { if (this.field.isTerrain('mistyterrain') && source.isGrounded()) { @@ -12544,7 +12546,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Misty Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'mistyterrain', condition: { duration: 5, @@ -12602,7 +12604,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Moonblast", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, boosts: { @@ -12636,7 +12638,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Moonlight", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onHit(pokemon) { let factor = 0.5; switch (pokemon.effectiveWeather()) { @@ -12673,7 +12675,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Morning Sun", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onHit(pokemon) { let factor = 0.5; switch (pokemon.effectiveWeather()) { @@ -12710,7 +12712,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mortal Spin", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterHit(target, pokemon, move) { if (!move.hasSheerForce) { if (pokemon.hp && pokemon.removeVolatile('leechseed')) { @@ -12758,7 +12760,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mountain Gale", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -12775,7 +12777,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mud Bomb", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 30, boosts: { @@ -12794,7 +12796,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mud Shot", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -12813,7 +12815,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mud-Slap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -12833,7 +12835,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mud Sport", pp: 15, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, pseudoWeather: 'mudsport', condition: { duration: 5, @@ -12867,7 +12869,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Muddy Water", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: { chance: 30, boosts: { @@ -12887,7 +12889,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Multi-Attack", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onModifyType(move, pokemon) { if (pokemon.ignoringItem()) return; move.type = this.runEvent('Memory', pokemon, null, move, 'Normal'); @@ -12907,7 +12909,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mystical Fire", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -12926,7 +12928,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Mystical Power", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -12946,7 +12948,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Nasty Plot", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spa: 2, }, @@ -12965,7 +12967,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Natural Gift", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyType(move, pokemon) { if (pokemon.ignoringItem()) return; const item = pokemon.getItem(); @@ -12999,7 +13001,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Nature Power", pp: 20, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onTryHit(target, pokemon) { let move = 'triattack'; if (this.field.isTerrain('electricterrain')) { @@ -13046,7 +13048,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Needle Arm", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -13079,7 +13081,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Night Daze", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 40, boosts: { @@ -13099,7 +13101,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Nightmare", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'nightmare', condition: { noCopy: true, @@ -13129,7 +13131,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Night Shade", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ghost", @@ -13143,7 +13145,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Night Slash", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "normal", @@ -13158,7 +13160,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Noble Roar", pp: 30, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, boosts: { atk: -1, spa: -1, @@ -13177,7 +13179,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "No Retreat", pp: 5, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'noretreat', onTry(source, target, move) { if (source.volatiles['noretreat']) return false; @@ -13214,7 +13216,7 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, noSketch: true, secondary: { @@ -13232,7 +13234,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Nuzzle", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, status: 'par', @@ -13250,7 +13252,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Oblivion Wing", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, distance: 1, heal: 1}, + flags: {protect: 1, mirror: 1, distance: 1, heal: 1, metronome: 1}, drain: [3, 4], secondary: null, target: "any", @@ -13339,7 +13341,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Octazooka", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 50, boosts: { @@ -13359,7 +13361,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Octolock", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryImmunity(target) { return this.dex.getImmunity('trapped', target); }, @@ -13395,7 +13397,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Odor Sleuth", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, volatileStatus: 'foresight', onTryHit(target) { if (target.volatiles['miracleeye']) return false; @@ -13415,7 +13417,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Ominous Wind", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, self: { @@ -13470,7 +13472,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Origin Pulse", pp: 10, priority: 0, - flags: {protect: 1, pulse: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, pulse: 1}, target: "allAdjacentFoes", type: "Water", contestType: "Beautiful", @@ -13483,7 +13485,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Outrage", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1}, self: { volatileStatus: 'lockedmove', }, @@ -13518,7 +13520,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Overheat", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spa: -2, @@ -13537,7 +13539,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pain Split", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target, pokemon) { const targetHP = target.getUndynamaxedHP(); const averagehp = Math.floor((targetHP + pokemon.hp) / 2) || 1; @@ -13581,7 +13583,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Parabolic Charge", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, heal: 1}, + flags: {protect: 1, mirror: 1, heal: 1, metronome: 1}, drain: [1, 2], secondary: null, target: "allAdjacent", @@ -13596,7 +13598,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Parting Shot", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, onHit(target, source, move) { const success = this.boost({atk: -1, spa: -1}, target, source); if (!success && !target.hasAbility('mirrorarmor')) { @@ -13626,7 +13628,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Payback", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dark", @@ -13640,7 +13642,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pay Day", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -13654,7 +13656,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Peck", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, secondary: null, target: "any", type: "Flying", @@ -13668,7 +13670,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Perish Song", pp: 5, priority: 0, - flags: {sound: 1, distance: 1, bypasssub: 1}, + flags: {sound: 1, distance: 1, bypasssub: 1, metronome: 1}, onHitField(target, source, move) { let result = false; let message = false; @@ -13714,7 +13716,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Petal Blizzard", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, secondary: null, target: "allAdjacent", type: "Grass", @@ -13728,7 +13730,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Petal Dance", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, dance: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, dance: 1, metronome: 1, failinstruct: 1}, self: { volatileStatus: 'lockedmove', }, @@ -13750,7 +13752,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Phantom Force", pp: 10, priority: 0, - flags: {contact: 1, charge: 1, mirror: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1}, + flags: {contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1}, breaksProtect: true, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { @@ -13818,7 +13820,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pin Missile", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -13851,7 +13853,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Play Nice", pp: 20, priority: 0, - flags: {reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, boosts: { atk: -1, }, @@ -13869,7 +13871,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Play Rough", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -13888,7 +13890,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pluck", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, onHit(target, source) { const item = target.getItem(); if (source.hp && item.isBerry && target.takeItem(source)) { @@ -13913,7 +13915,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Fang", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondary: { chance: 50, status: 'tox', @@ -13930,7 +13932,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Gas", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'psn', secondary: null, target: "allAdjacentFoes", @@ -13946,7 +13948,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Jab", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'psn', @@ -13963,7 +13965,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Powder", pp: 35, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1}, status: 'psn', secondary: null, target: "normal", @@ -13979,7 +13981,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Sting", pp: 35, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'psn', @@ -13996,7 +13998,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poison Tail", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: { chance: 10, @@ -14014,7 +14016,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pollen Puff", pp: 15, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, allyanim: 1, metronome: 1, bullet: 1}, onTryHit(target, source, move) { if (source.isAlly(target)) { move.basePower = 0; @@ -14055,7 +14057,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Poltergeist", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTry(source, target) { return !!target.item; }, @@ -14108,7 +14110,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pound", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -14123,7 +14125,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Powder", pp: 20, priority: 1, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1, powder: 1}, volatileStatus: 'powder', condition: { duration: 1, @@ -14154,7 +14156,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Powder Snow", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'frz', @@ -14171,7 +14173,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Gem", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Rock", @@ -14225,7 +14227,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Split", pp: 10, priority: 0, - flags: {protect: 1, allyanim: 1}, + flags: {protect: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const newatk = Math.floor((target.storedStats.atk + source.storedStats.atk) / 2); target.storedStats.atk = newatk; @@ -14249,7 +14251,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Swap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const targetBoosts: SparseBoostsTable = {}; const sourceBoosts: SparseBoostsTable = {}; @@ -14279,7 +14281,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Trick", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, volatileStatus: 'powertrick', condition: { onStart(pokemon) { @@ -14325,7 +14327,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Trip", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dark", @@ -14342,7 +14344,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power-Up Punch", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -14363,7 +14365,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Power Whip", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Grass", @@ -14390,7 +14392,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Present", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyMove(move, pokemon, target) { const rand = this.random(10); if (rand < 2) { @@ -14417,7 +14419,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Prismatic Laser", pp: 10, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -14484,7 +14486,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psybeam", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, volatileStatus: 'confusion', @@ -14501,7 +14503,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psyblade", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: null, onBasePower(basePower, source) { if (this.field.isTerrain('electricterrain')) { @@ -14520,7 +14522,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psych Up", pp: 10, priority: 0, - flags: {bypasssub: 1, allyanim: 1}, + flags: {bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { let i: BoostID; for (i in target.boosts) { @@ -14551,7 +14553,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psychic", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, boosts: { @@ -14570,7 +14572,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psychic Fangs", pp: 10, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, onTryHit(pokemon) { // will shatter screens through sub, before you hit pokemon.side.removeSideCondition('reflect'); @@ -14590,7 +14592,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psychic Noise", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { chance: 100, volatileStatus: 'healblock', @@ -14606,7 +14608,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psychic Terrain", pp: 10, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, terrain: 'psychicterrain', condition: { duration: 5, @@ -14666,7 +14668,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psycho Boost", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spa: -2, @@ -14685,7 +14687,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psycho Cut", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "normal", @@ -14701,7 +14703,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psycho Shift", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryHit(target, source, move) { if (!source.status) return false; move.status = source.status; @@ -14725,7 +14727,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psyshield Bash", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -14746,7 +14748,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psyshock", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Psychic", @@ -14761,7 +14763,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psystrike", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Psychic", @@ -14779,7 +14781,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Psywave", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Psychic", @@ -14816,7 +14818,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Punishment", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Dark", @@ -14833,7 +14835,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Purify", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, heal: 1}, + flags: {protect: 1, reflectable: 1, heal: 1, metronome: 1}, onHit(target, source) { if (!target.cureStatus()) { this.add('-fail', source); @@ -14865,7 +14867,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Pursuit", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, beforeTurnCallback(pokemon) { for (const side of this.sides) { if (side.hasAlly(pokemon)) continue; @@ -14962,7 +14964,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Quick Attack", pp: 30, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -15024,7 +15026,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Quiver Dance", pp: 20, priority: 0, - flags: {snatch: 1, dance: 1}, + flags: {snatch: 1, dance: 1, metronome: 1}, boosts: { spa: 1, spd: 1, @@ -15045,7 +15047,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rage", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'rage', }, @@ -15093,7 +15095,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rage Powder", pp: 20, priority: 2, - flags: {powder: 1, noassist: 1, failcopycat: 1}, + flags: {noassist: 1, failcopycat: 1, powder: 1}, volatileStatus: 'ragepowder', onTry(source) { return this.activePerHalf > 1; @@ -15182,7 +15184,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rain Dance", pp: 5, priority: 0, - flags: {}, + flags: {metronome: 1}, weather: 'RainDance', secondary: null, target: "all", @@ -15198,7 +15200,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rapid Spin", pp: 40, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onAfterHit(target, pokemon, move) { if (!move.hasSheerForce) { if (pokemon.hp && pokemon.removeVolatile('leechseed')) { @@ -15251,7 +15253,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Razor Leaf", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "allAdjacentFoes", @@ -15266,7 +15268,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Razor Shell", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: { chance: 50, boosts: { @@ -15286,7 +15288,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Razor Wind", pp: 10, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -15312,7 +15314,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Recover", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], secondary: null, target: "self", @@ -15328,7 +15330,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Recycle", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(pokemon) { if (pokemon.item || !pokemon.lastItem) return false; const item = pokemon.lastItem; @@ -15350,7 +15352,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Reflect", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'reflect', condition: { duration: 5, @@ -15392,7 +15394,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Reflect Type", pp: 15, priority: 0, - flags: {protect: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { if (source.species && (source.species.num === 493 || source.species.num === 773)) return false; if (source.terastallized) return false; @@ -15426,7 +15428,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Refresh", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(pokemon) { if (['', 'slp', 'frz'].includes(pokemon.status)) return false; pokemon.cureStatus(); @@ -15473,7 +15475,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rest", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onTry(source) { if (source.status === 'slp' || source.hasAbility('comatose')) return false; @@ -15507,7 +15509,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Retaliate", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon) { if (pokemon.side.faintedLastTurn) { this.debug('Boosted for a faint last turn'); @@ -15531,7 +15533,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Return", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -15547,7 +15549,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Revelation Dance", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, dance: 1}, + flags: {protect: 1, mirror: 1, dance: 1, metronome: 1}, onModifyType(move, pokemon) { let type = pokemon.getTypes()[0]; if (type === "Bird") type = "???"; @@ -15578,7 +15580,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Revenge", pp: 10, priority: -4, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -15611,7 +15613,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Reversal", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -15662,7 +15664,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rising Voltage", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Electric", @@ -15676,7 +15678,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Roar", pp: 20, priority: -6, - flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, noassist: 1, failcopycat: 1}, + flags: {reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1}, forceSwitch: true, secondary: null, target: "normal", @@ -15692,7 +15694,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Roar of Time", pp: 5, priority: 0, - flags: {recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -15709,7 +15711,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Blast", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -15727,7 +15729,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Climb", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, volatileStatus: 'confusion', @@ -15744,7 +15746,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Polish", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spe: 2, }, @@ -15762,7 +15764,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Slide", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -15779,7 +15781,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Smash", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 50, boosts: { @@ -15798,7 +15800,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Throw", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Rock", @@ -15812,7 +15814,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Tomb", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -15831,7 +15833,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rock Wrecker", pp: 5, priority: 0, - flags: {bullet: 1, recharge: 1, protect: 1, mirror: 1}, + flags: {recharge: 1, protect: 1, mirror: 1, metronome: 1, bullet: 1}, self: { volatileStatus: 'mustrecharge', }, @@ -15848,7 +15850,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Role Play", pp: 10, priority: 0, - flags: {bypasssub: 1, allyanim: 1}, + flags: {bypasssub: 1, allyanim: 1, metronome: 1}, onTryHit(target, source) { if (target.ability === source.ability) return false; if (target.getAbility().flags['failroleplay'] || source.getAbility().flags['cantsuppress']) return false; @@ -15876,7 +15878,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rolling Kick", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -15912,7 +15914,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rollout", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, noparentalbond: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1, noparentalbond: 1}, onModifyMove(move, pokemon, target) { if (pokemon.volatiles['rollout'] || pokemon.status === 'slp' || !target) return; pokemon.addVolatile('rollout'); @@ -15962,7 +15964,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Roost", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], self: { volatileStatus: 'roost', @@ -16000,7 +16002,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Rototiller", pp: 10, priority: 0, - flags: {distance: 1, nonsky: 1}, + flags: {distance: 1, nonsky: 1, metronome: 1}, onHitField(target, source) { const targets: Pokemon[] = []; let anyAirborne = false; @@ -16041,7 +16043,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Round", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, onTry(source, target, move) { for (const action of this.queue.list as MoveAction[]) { if (!action.pokemon || !action.move || action.maxMove || action.zmove) continue; @@ -16081,7 +16083,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sacred Fire", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, secondary: { chance: 50, status: 'brn', @@ -16098,7 +16100,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sacred Sword", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, ignoreEvasion: true, ignoreDefensive: true, secondary: null, @@ -16114,7 +16116,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Safeguard", pp: 25, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, sideCondition: 'safeguard', condition: { duration: 5, @@ -16201,7 +16203,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sand Attack", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { accuracy: -1, }, @@ -16219,7 +16221,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sandsear Storm", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, onModifyMove(move, pokemon, target) { if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) { move.accuracy = true; @@ -16240,7 +16242,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sandstorm", pp: 10, priority: 0, - flags: {wind: 1}, + flags: {metronome: 1, wind: 1}, weather: 'Sandstorm', secondary: null, target: "all", @@ -16256,7 +16258,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sand Tomb", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -16306,7 +16308,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Scald", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, thawsTarget: true, secondary: { chance: 30, @@ -16324,7 +16326,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Scale Shot", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], selfBoost: { boosts: { @@ -16346,7 +16348,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Scary Face", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, boosts: { spe: -2, }, @@ -16364,7 +16366,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Scorching Sands", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, defrost: 1}, + flags: {protect: 1, mirror: 1, defrost: 1, metronome: 1}, thawsTarget: true, secondary: { chance: 30, @@ -16381,7 +16383,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Scratch", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -16395,7 +16397,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Screech", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, metronome: 1}, boosts: { def: -2, }, @@ -16414,7 +16416,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Searing Shot", pp: 5, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 30, status: 'brn', @@ -16449,7 +16451,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Secret Power", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyMove(move, pokemon) { if (this.field.isTerrain('')) return; move.secondaries = []; @@ -16510,7 +16512,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Seed Bomb", pp: 15, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: null, target: "normal", type: "Grass", @@ -16524,7 +16526,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Seed Flare", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 40, boosts: { @@ -16544,7 +16546,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Seismic Toss", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -16559,7 +16561,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Self-Destruct", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1, noparentalbond: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, noparentalbond: 1}, selfdestruct: "always", secondary: null, target: "allAdjacent", @@ -16574,7 +16576,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Ball", pp: 15, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 20, boosts: { @@ -16594,7 +16596,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Bone", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, boosts: { @@ -16613,7 +16615,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Claw", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -16628,7 +16630,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Force", pp: 5, priority: 0, - flags: {contact: 1, charge: 1, mirror: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1}, + flags: {contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1}, breaksProtect: true, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { @@ -16658,7 +16660,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Punch", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: null, target: "normal", type: "Ghost", @@ -16672,7 +16674,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shadow Sneak", pp: 30, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ghost", @@ -16707,7 +16709,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sharpen", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, }, @@ -16779,7 +16781,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sheer Cold", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, ohko: 'Ice', target: "normal", @@ -16796,7 +16798,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shell Side Arm", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onPrepareHit(target, source, move) { if (!source.isAlly(target)) { this.attrLastMove('[anim] Shell Side Arm ' + move.category); @@ -16837,7 +16839,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shell Smash", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: -1, spd: -1, @@ -16899,7 +16901,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shelter", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 2, }, @@ -16915,7 +16917,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shift Gear", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spe: 2, atk: 1, @@ -16934,7 +16936,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shock Wave", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Electric", @@ -16948,7 +16950,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Shore Up", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onHit(pokemon) { let factor = 0.5; if (this.field.isWeather('sandstorm')) { @@ -16976,7 +16978,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Signal Beam", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, volatileStatus: 'confusion', @@ -17048,7 +17050,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Silver Wind", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, self: { @@ -17073,7 +17075,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Simple Beam", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onTryHit(target) { if (target.getAbility().flags['cantsuppress'] || target.ability === 'simple' || target.ability === 'truant') { return false; @@ -17101,7 +17103,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sing", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, status: 'slp', secondary: null, target: "normal", @@ -17153,7 +17155,7 @@ export const Moves: {[moveid: string]: MoveData} = { noPPBoosts: true, priority: 0, flags: { - bypasssub: 1, allyanim: 1, failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + bypasssub: 1, allyanim: 1, failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, onHit(target, source) { const move = target.lastMove; @@ -17189,7 +17191,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Skill Swap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onTryHit(target, source) { const targetAbility = target.getAbility(); const sourceAbility = source.getAbility(); @@ -17233,7 +17235,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Skitter Smack", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -17252,7 +17254,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Skull Bash", pp: 10, priority: 0, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -17278,7 +17280,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sky Attack", pp: 5, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1, distance: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {charge: 1, protect: 1, mirror: 1, distance: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, critRatio: 2, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { @@ -17309,7 +17311,8 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, + contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, + metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, }, onModifyMove(move, source) { if (!source.volatiles['skydrop']) { @@ -17422,7 +17425,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sky Uppercut", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -17436,7 +17439,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Slack Off", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], secondary: null, target: "self", @@ -17452,7 +17455,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Slam", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -17466,7 +17469,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Slash", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, critRatio: 2, secondary: null, target: "normal", @@ -17481,7 +17484,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sleep Powder", pp: 15, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1}, status: 'slp', secondary: null, target: "normal", @@ -17497,7 +17500,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sleep Talk", pp: 10, priority: 0, - flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {failencore: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, sleepUsable: true, onTry(source) { return source.status === 'slp' || source.hasAbility('comatose'); @@ -17534,7 +17537,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sludge", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'psn', @@ -17551,7 +17554,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sludge Bomb", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 30, status: 'psn', @@ -17568,7 +17571,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sludge Wave", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'psn', @@ -17585,7 +17588,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Smack Down", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, volatileStatus: 'smackdown', condition: { noCopy: true, @@ -17632,7 +17635,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Smart Strike", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Steel", @@ -17654,7 +17657,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Smelling Salts", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onHit(target) { if (target.status === 'par') target.cureStatus(); }, @@ -17671,7 +17674,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Smog", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 40, status: 'psn', @@ -17688,7 +17691,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Smokescreen", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { accuracy: -1, }, @@ -17775,7 +17778,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Snipe Shot", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, tracksTarget: true, secondary: null, @@ -17825,7 +17828,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Soak", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target) { if (target.getTypes().join() === 'Water' || !target.setType('Water')) { // Soak should animate even when it fails. @@ -17849,7 +17852,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Soft-Boiled", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, heal: [1, 2], secondary: null, target: "self", @@ -17865,7 +17868,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Solar Beam", pp: 10, priority: 0, - flags: {charge: 1, protect: 1, mirror: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -17902,7 +17905,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Solar Blade", pp: 10, priority: 0, - flags: {contact: 1, charge: 1, protect: 1, mirror: 1, slicing: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {contact: 1, charge: 1, protect: 1, mirror: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1, slicing: 1}, onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; @@ -17941,7 +17944,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sonic Boom", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -17971,7 +17974,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spacial Rend", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -17986,7 +17989,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spark", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, status: 'par', @@ -18003,7 +18006,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sparkling Aria", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { dustproof: true, chance: 100, @@ -18071,7 +18074,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Speed Swap", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1}, + flags: {protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1}, onHit(target, source) { const targetSpe = target.storedStats.spe; target.storedStats.spe = source.storedStats.spe; @@ -18110,7 +18113,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spider Web", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, onHit(target, source, move) { return target.addVolatile('trapped', source, move, 'trapper'); }, @@ -18129,7 +18132,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spike Cannon", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -18145,7 +18148,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spikes", pp: 20, priority: 0, - flags: {reflectable: 1, nonsky: 1, mustpressure: 1}, + flags: {reflectable: 1, nonsky: 1, metronome: 1, mustpressure: 1}, sideCondition: 'spikes', condition: { // this is a side condition @@ -18236,7 +18239,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spin Out", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, self: { boosts: { spe: -2, @@ -18272,7 +18275,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spirit Shackle", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, onHit(target, source, move) { @@ -18295,7 +18298,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spit Up", pp: 10, priority: 0, - flags: {protect: 1}, + flags: {protect: 1, metronome: 1}, onTry(source) { return !!source.volatiles['stockpile']; }, @@ -18315,7 +18318,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spite", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, onHit(target) { let move: Move | ActiveMove | null = target.lastMove; if (!move || move.isZ) return false; @@ -18339,7 +18342,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Splash", pp: 40, priority: 0, - flags: {gravity: 1}, + flags: {gravity: 1, metronome: 1}, onTry(source, target, move) { // Additional Gravity check for Z-move variant if (this.field.getPseudoWeather('Gravity')) { @@ -18404,7 +18407,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Spore", pp: 15, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1}, status: 'slp', secondary: null, target: "normal", @@ -18471,7 +18474,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stealth Rock", pp: 20, priority: 0, - flags: {reflectable: 1, mustpressure: 1}, + flags: {reflectable: 1, metronome: 1, mustpressure: 1}, sideCondition: 'stealthrock', condition: { // this is a side condition @@ -18517,7 +18520,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Steamroller", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -18557,7 +18560,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Steel Roller", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTry() { return !this.field.isTerrain(''); }, @@ -18579,7 +18582,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Steel Wing", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, self: { @@ -18600,7 +18603,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sticky Web", pp: 20, priority: 0, - flags: {reflectable: 1}, + flags: {reflectable: 1, metronome: 1}, sideCondition: 'stickyweb', condition: { onSideStart(side) { @@ -18626,7 +18629,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stockpile", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onTry(source) { if (source.volatiles['stockpile'] && source.volatiles['stockpile'].layers >= 3) return false; }, @@ -18699,7 +18702,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stomp", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, + flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', @@ -18723,7 +18726,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stomping Tantrum", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Ground", @@ -18737,7 +18740,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stone Axe", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, onAfterHit(target, source, move) { if (!move.hasSheerForce && source.hp) { for (const side of source.side.foeSidesWithConditions()) { @@ -18764,7 +18767,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stone Edge", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondary: null, target: "normal", @@ -18784,7 +18787,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stored Power", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Psychic", @@ -18801,7 +18804,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Storm Throw", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, willCrit: true, secondary: null, target: "normal", @@ -18832,7 +18835,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Strength", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -18846,7 +18849,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Strength Sap", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, heal: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, heal: 1, metronome: 1}, onHit(target, source) { if (target.boosts.atk === -6) return false; const atk = target.getStat('atk', false, true); @@ -18867,7 +18870,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "String Shot", pp: 40, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { spe: -2, }, @@ -18888,7 +18891,7 @@ export const Moves: {[moveid: string]: MoveData} = { priority: 0, flags: { contact: 1, protect: 1, - failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, noSketch: true, onModifyMove(move, pokemon, target) { @@ -18909,7 +18912,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Struggle Bug", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -18928,7 +18931,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stuff Cheeks", pp: 10, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onDisableMove(pokemon) { if (!pokemon.getItem().isBerry) pokemon.disableMove('stuffcheeks'); }, @@ -18951,7 +18954,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Stun Spore", pp: 30, priority: 0, - flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1}, status: 'par', secondary: null, target: "normal", @@ -18968,7 +18971,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Submission", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [1, 4], secondary: null, target: "normal", @@ -18983,7 +18986,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Substitute", pp: 10, priority: 0, - flags: {snatch: 1, nonsky: 1}, + flags: {snatch: 1, nonsky: 1, metronome: 1}, volatileStatus: 'substitute', onTryHit(source) { if (source.volatiles['substitute']) { @@ -19081,7 +19084,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sucker Punch", pp: 5, priority: 1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTry(source, target) { const action = this.queue.willMove(target); const move = action?.choice === 'move' ? action.move : null; @@ -19102,7 +19105,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sunny Day", pp: 5, priority: 0, - flags: {}, + flags: {metronome: 1}, weather: 'sunnyday', secondary: null, target: "all", @@ -19133,7 +19136,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Supercell Slam", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, hasCrashDamage: true, onMoveFail(target, source, move) { this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('Supercell Slam')); @@ -19153,7 +19156,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Super Fang", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -19167,7 +19170,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Superpower", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, self: { boosts: { atk: -1, @@ -19187,7 +19190,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Supersonic", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'confusion', secondary: null, target: "normal", @@ -19219,7 +19222,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Surf", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1}, secondary: null, target: "allAdjacent", type: "Water", @@ -19233,7 +19236,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Surging Strikes", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, punch: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, willCrit: true, multihit: 3, secondary: null, @@ -19250,7 +19253,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Swagger", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, volatileStatus: 'confusion', boosts: { atk: 2, @@ -19269,7 +19272,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Swallow", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onTry(source) { return !!source.volatiles['stockpile']; }, @@ -19294,7 +19297,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sweet Kiss", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'confusion', secondary: null, target: "normal", @@ -19310,7 +19313,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Sweet Scent", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { evasion: -2, }, @@ -19328,7 +19331,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Swift", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Normal", @@ -19390,7 +19393,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Swords Dance", pp: 20, priority: 0, - flags: {snatch: 1, dance: 1}, + flags: {snatch: 1, dance: 1, metronome: 1}, boosts: { atk: 2, }, @@ -19409,7 +19412,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Synchronoise", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTryImmunity(target, source) { return target.hasType(source.getTypes()); }, @@ -19426,7 +19429,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Synthesis", pp: 5, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, onHit(pokemon) { let factor = 0.5; switch (pokemon.effectiveWeather()) { @@ -19463,7 +19466,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Syrup Bomb", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, bullet: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, condition: { noCopy: true, duration: 4, @@ -19493,7 +19496,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tachyon Cutter", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, slicing: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, slicing: 1}, multihit: 2, secondary: null, target: "normal", @@ -19510,7 +19513,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tackle", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -19524,7 +19527,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tail Glow", pp: 20, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { spa: 3, }, @@ -19542,7 +19545,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tail Slap", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -19559,7 +19562,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tail Whip", pp: 30, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, boosts: { def: -1, }, @@ -19577,7 +19580,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tailwind", pp: 15, priority: 0, - flags: {snatch: 1, wind: 1}, + flags: {snatch: 1, metronome: 1, wind: 1}, sideCondition: 'tailwind', condition: { duration: 4, @@ -19618,7 +19621,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Take Down", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [1, 4], secondary: null, target: "normal", @@ -19633,7 +19636,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Take Heart", pp: 15, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, onHit(pokemon) { const success = !!this.boost({spa: 1, spd: 1}); return pokemon.cureStatus() || success; @@ -19650,7 +19653,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tar Shot", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'tarshot', condition: { onStart(pokemon) { @@ -19680,7 +19683,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Taunt", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'taunt', condition: { duration: 3, @@ -19724,7 +19727,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tearful Look", pp: 20, priority: 0, - flags: {reflectable: 1, mirror: 1}, + flags: {reflectable: 1, mirror: 1, metronome: 1}, boosts: { atk: -1, spa: -1, @@ -19743,7 +19746,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Teatime", pp: 10, priority: 0, - flags: {bypasssub: 1}, + flags: {bypasssub: 1, metronome: 1}, onHitField(target, source, move) { const targets: Pokemon[] = []; for (const pokemon of this.getAllActive()) { @@ -19810,7 +19813,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Teeter Dance", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, dance: 1}, + flags: {protect: 1, mirror: 1, dance: 1, metronome: 1}, volatileStatus: 'confusion', secondary: null, target: "allAdjacent", @@ -19827,7 +19830,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Telekinesis", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, gravity: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, gravity: 1, allyanim: 1, metronome: 1}, volatileStatus: 'telekinesis', onTry(source, target, move) { // Additional Gravity check for Z-move variant @@ -19880,7 +19883,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Teleport", pp: 20, priority: -6, - flags: {}, + flags: {metronome: 1}, onTry(source) { return !!this.canSwitch(source.side); }, @@ -19906,7 +19909,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Temper Flare", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Fire", @@ -19925,7 +19928,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tera Blast", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, mustpressure: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, mustpressure: 1}, onPrepareHit(target, source, move) { if (source.terastallized) { this.attrLastMove('[anim] Tera Blast ' + source.teraType); @@ -19980,7 +19983,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Terrain Pulse", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, pulse: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, pulse: 1}, onModifyType(move, pokemon) { if (!pokemon.isGrounded()) return; switch (this.field.terrain) { @@ -20092,7 +20095,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thrash", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, failinstruct: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, failinstruct: 1}, self: { volatileStatus: 'lockedmove', }, @@ -20114,7 +20117,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Throat Chop", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, condition: { duration: 2, onStart(target) { @@ -20163,7 +20166,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunder", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onModifyMove(move, pokemon, target) { switch (target?.effectiveWeather()) { case 'raindance': @@ -20192,7 +20195,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunderbolt", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'par', @@ -20223,7 +20226,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunderclap", pp: 5, priority: 1, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onTry(source, target) { const action = this.queue.willMove(target); const move = action?.choice === 'move' ? action.move : null; @@ -20244,7 +20247,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunder Fang", pp: 15, priority: 0, - flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1}, secondaries: [ { chance: 10, @@ -20284,7 +20287,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunder Punch", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1}, secondary: { chance: 10, status: 'par', @@ -20301,7 +20304,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunder Shock", pp: 30, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 10, status: 'par', @@ -20318,7 +20321,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Thunder Wave", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'par', ignoreImmunity: false, secondary: null, @@ -20335,7 +20338,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tickle", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, boosts: { atk: -1, def: -1, @@ -20385,7 +20388,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Topsy-Turvy", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target) { let success = false; let i: BoostID; @@ -20411,7 +20414,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Torch Song", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1}, secondary: { chance: 100, self: { @@ -20432,7 +20435,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Torment", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1}, volatileStatus: 'torment', condition: { noCopy: true, @@ -20465,7 +20468,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Toxic", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, // No Guard-like effect for Poison-type users implemented in Scripts#tryMoveHit status: 'tox', secondary: null, @@ -20482,7 +20485,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Toxic Spikes", pp: 20, priority: 0, - flags: {reflectable: 1, nonsky: 1, mustpressure: 1}, + flags: {reflectable: 1, nonsky: 1, metronome: 1, mustpressure: 1}, sideCondition: 'toxicspikes', condition: { // this is a side condition @@ -20523,7 +20526,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Toxic Thread", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'psn', boosts: { spe: -1, @@ -20563,7 +20566,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Transform", pp: 10, priority: 0, - flags: {allyanim: 1, failencore: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1}, + flags: {allyanim: 1, failencore: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1}, onHit(target, pokemon) { if (!pokemon.transformInto(target)) { return false; @@ -20583,7 +20586,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Tri Attack", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, onHit(target, source) { @@ -20658,7 +20661,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Trick-or-Treat", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onHit(target) { if (target.hasType('Ghost')) return false; if (!target.addType('Ghost')) return false; @@ -20686,7 +20689,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Trick Room", pp: 5, priority: -7, - flags: {mirror: 1}, + flags: {mirror: 1, metronome: 1}, pseudoWeather: 'trickroom', condition: { duration: 5, @@ -20728,7 +20731,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Triple Arrows", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, critRatio: 2, secondaries: [ { @@ -20755,7 +20758,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Triple Axel", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 3, multiaccuracy: true, secondary: null, @@ -20772,7 +20775,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Triple Dive", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 3, secondary: null, target: "normal", @@ -20789,7 +20792,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Triple Kick", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, multihit: 3, multiaccuracy: true, secondary: null, @@ -20807,7 +20810,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Trop Kick", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 100, boosts: { @@ -20857,7 +20860,7 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 5, noPPBoosts: true, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -20889,7 +20892,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Twineedle", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: 2, secondary: { chance: 20, @@ -20924,7 +20927,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Twister", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, secondary: { chance: 20, volatileStatus: 'flinch', @@ -20941,7 +20944,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "U-turn", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, selfSwitch: true, secondary: null, target: "normal", @@ -20956,7 +20959,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Upper Hand", pp: 15, priority: 3, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onTryHit(target, pokemon) { const action = this.queue.willMove(target); const move = action?.choice === 'move' ? action.move : null; @@ -20979,7 +20982,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Uproar", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, nosleeptalk: 1, failinstruct: 1}, + flags: {protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1, nosleeptalk: 1, failinstruct: 1}, self: { volatileStatus: 'uproar', }, @@ -21038,7 +21041,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Vacuum Wave", pp: 30, priority: 1, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -21096,7 +21099,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Venom Drench", pp: 20, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, onHit(target, source, move) { if (target.status === 'psn' || target.status === 'tox') { return !!this.boost({atk: -1, spa: -1, spe: -1}, target, source, move); @@ -21117,7 +21120,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Venoshock", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, onBasePower(basePower, pokemon, target) { if (target.status === 'psn' || target.status === 'tox') { return this.chainModify(2); @@ -21136,7 +21139,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Victory Dance", pp: 10, priority: 0, - flags: {snatch: 1, dance: 1}, + flags: {snatch: 1, dance: 1, metronome: 1}, boosts: { atk: 1, def: 1, @@ -21154,7 +21157,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Vine Whip", pp: 25, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Grass", @@ -21168,7 +21171,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Vise Grip", pp: 30, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -21183,7 +21186,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Vital Throw", pp: 10, priority: -1, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Fighting", @@ -21197,7 +21200,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Volt Switch", pp: 20, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, selfSwitch: true, secondary: null, target: "normal", @@ -21212,7 +21215,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Volt Tackle", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [33, 100], secondary: { chance: 10, @@ -21238,7 +21241,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wake-Up Slap", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, onHit(target) { if (target.status === 'slp') target.cureStatus(); }, @@ -21255,7 +21258,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Waterfall", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, volatileStatus: 'flinch', @@ -21272,7 +21275,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Gun", pp: 25, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Water", @@ -21293,7 +21296,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Pledge", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, nonsky: 1, pledgecombo: 1}, + flags: {protect: 1, mirror: 1, nonsky: 1, metronome: 1, pledgecombo: 1}, onPrepareHit(target, source, move) { for (const action of this.queue) { if (action.choice !== 'move') continue; @@ -21358,7 +21361,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Pulse", pp: 20, priority: 0, - flags: {protect: 1, pulse: 1, mirror: 1, distance: 1}, + flags: {protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1}, secondary: { chance: 20, volatileStatus: 'confusion', @@ -21382,7 +21385,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Shuriken", pp: 20, priority: 1, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, multihit: [2, 5], secondary: null, target: "normal", @@ -21398,7 +21401,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Sport", pp: 15, priority: 0, - flags: {nonsky: 1}, + flags: {nonsky: 1, metronome: 1}, pseudoWeather: 'watersport', condition: { duration: 5, @@ -21437,7 +21440,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Water Spout", pp: 5, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "allAdjacentFoes", type: "Water", @@ -21451,7 +21454,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wave Crash", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [33, 100], secondary: null, target: "normal", @@ -21465,7 +21468,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Weather Ball", pp: 10, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, onModifyType(move, pokemon) { switch (pokemon.effectiveWeather()) { case 'sunnyday': @@ -21520,7 +21523,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Whirlpool", pp: 15, priority: 0, - flags: {protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -21535,7 +21538,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Whirlwind", pp: 20, priority: -6, - flags: {reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, wind: 1, noassist: 1, failcopycat: 1}, + flags: {reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1, wind: 1}, forceSwitch: true, secondary: null, target: "normal", @@ -21551,7 +21554,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wicked Blow", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, punch: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, willCrit: true, secondary: null, target: "normal", @@ -21567,7 +21570,7 @@ export const Moves: {[moveid: string]: MoveData} = { pp: 10, priority: 0, flags: { - protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failinstruct: 1, failmimic: 1, + protect: 1, failencore: 1, failmefirst: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, }, noSketch: true, secondary: { @@ -21634,7 +21637,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wildbolt Storm", pp: 10, priority: 0, - flags: {protect: 1, mirror: 1, wind: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, wind: 1}, onModifyMove(move, pokemon, target) { if (target && ['raindance', 'primordialsea'].includes(target.effectiveWeather())) { move.accuracy = true; @@ -21655,7 +21658,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wild Charge", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [1, 4], secondary: null, target: "normal", @@ -21670,7 +21673,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Will-O-Wisp", pp: 15, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, status: 'brn', secondary: null, target: "normal", @@ -21686,7 +21689,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wing Attack", pp: 35, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, + flags: {contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1}, secondary: null, target: "any", type: "Flying", @@ -21700,7 +21703,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wish", pp: 10, priority: 0, - flags: {snatch: 1, heal: 1}, + flags: {snatch: 1, heal: 1, metronome: 1}, slotCondition: 'Wish', condition: { duration: 2, @@ -21731,7 +21734,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Withdraw", pp: 40, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { def: 1, }, @@ -21749,7 +21752,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wonder Room", pp: 10, priority: 0, - flags: {mirror: 1}, + flags: {mirror: 1, metronome: 1}, pseudoWeather: 'wonderroom', condition: { duration: 5, @@ -21799,7 +21802,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wood Hammer", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, recoil: [33, 100], secondary: null, target: "normal", @@ -21814,7 +21817,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Work Up", pp: 30, priority: 0, - flags: {snatch: 1}, + flags: {snatch: 1, metronome: 1}, boosts: { atk: 1, spa: 1, @@ -21833,7 +21836,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Worry Seed", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, allyanim: 1, metronome: 1}, onTryImmunity(target) { // Truant and Insomnia have special treatment; they fail before // checking accuracy and will double Stomping Tantrum's BP @@ -21871,7 +21874,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wrap", pp: 20, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, volatileStatus: 'partiallytrapped', secondary: null, target: "normal", @@ -21894,7 +21897,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Wring Out", pp: 5, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: null, target: "normal", type: "Normal", @@ -21910,7 +21913,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "X-Scissor", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1, slicing: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1}, secondary: null, target: "normal", type: "Bug", @@ -21924,7 +21927,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Yawn", pp: 10, priority: 0, - flags: {protect: 1, reflectable: 1, mirror: 1}, + flags: {protect: 1, reflectable: 1, mirror: 1, metronome: 1}, volatileStatus: 'yawn', onTryHit(target) { if (target.status || !target.runStatusImmunity('slp')) { @@ -21957,7 +21960,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Zap Cannon", pp: 5, priority: 0, - flags: {bullet: 1, protect: 1, mirror: 1}, + flags: {protect: 1, mirror: 1, metronome: 1, bullet: 1}, secondary: { chance: 100, status: 'par', @@ -21974,7 +21977,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Zen Headbutt", pp: 15, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 20, volatileStatus: 'flinch', @@ -21991,7 +21994,7 @@ export const Moves: {[moveid: string]: MoveData} = { name: "Zing Zap", pp: 10, priority: 0, - flags: {contact: 1, protect: 1, mirror: 1}, + flags: {contact: 1, protect: 1, mirror: 1, metronome: 1}, secondary: { chance: 30, volatileStatus: 'flinch', diff --git a/server/chat-plugins/datasearch.ts b/server/chat-plugins/datasearch.ts index db21a0110467..a4430a2fb908 100644 --- a/server/chat-plugins/datasearch.ts +++ b/server/chat-plugins/datasearch.ts @@ -363,7 +363,7 @@ export const commands: Chat.ChatCommands = { `- zmove, max, or gmax as parameters will search for Z-Moves, Max Moves, and G-Max Moves respectively.
` + `- Move targets must be preceded with targets ; e.g. targets user searches for moves that target the user.
` + `- Valid move targets are: one ally, user or ally, one adjacent opponent, all Pokemon, all adjacent Pokemon, all adjacent opponents, user and allies, user's side, user's team, any Pokemon, opponent's side, one adjacent Pokemon, random adjacent Pokemon, scripted, and user.
` + - `- Valid flags are: allyanim, bypasssub (bypasses Substitute), bite, bullet, cantusetwice, charge, contact, dance, defrost, distance (can target any Pokemon in Triples), failcopycat, failencore, failinstruct, failmefirst, failmimic, futuremove, gravity, heal, highcrit, instruct, mefirst, mimic, mirror (reflected by Mirror Move), mustpressure, multihit, noassist, nonsky, noparentalbond, nosleeptalk, ohko, pivot, pledgecombo, powder, priority, protect, pulse, punch, recharge, recovery, reflectable, secondary, slicing, snatch, sound, and wind.
` + + `- Valid flags are: allyanim, bypasssub (bypasses Substitute), bite, bullet, cantusetwice, charge, contact, dance, defrost, distance (can target any Pokemon in Triples), failcopycat, failencore, failinstruct, failmefirst, failmimic, futuremove, gravity, heal, highcrit, instruct, metronome, mimic, mirror (reflected by Mirror Move), mustpressure, multihit, noassist, nonsky, noparentalbond, nosleeptalk, ohko, pivot, pledgecombo, powder, priority, protect, pulse, punch, recharge, recovery, reflectable, secondary, slicing, snatch, sound, and wind.
` + `- protection as a parameter will search protection moves like Protect, Detect, etc.
` + `- A search that includes !protect will show all moves that bypass protection.
` + `
` + @@ -1388,8 +1388,9 @@ function runMovesearch(target: string, cmd: string, canAll: boolean, message: st const allProperties = ['basePower', 'accuracy', 'priority', 'pp']; const allFlags = [ 'allyanim', 'bypasssub', 'bite', 'bullet', 'cantusetwice', 'charge', 'contact', 'dance', 'defrost', 'distance', 'failcopycat', 'failencore', - 'failinstruct', 'failmefirst', 'failmimic', 'futuremove', 'gravity', 'heal', 'mirror', 'mustpressure', 'noassist', 'nonsky', 'noparentalbond', - 'nosleeptalk', 'pledgecombo', 'powder', 'protect', 'pulse', 'punch', 'recharge', 'reflectable', 'slicing', 'snatch', 'sound', 'wind', + 'failinstruct', 'failmefirst', 'failmimic', 'futuremove', 'gravity', 'heal', 'metronome', 'mirror', 'mustpressure', 'noassist', 'nonsky', + 'noparentalbond', 'nosleeptalk', 'pledgecombo', 'powder', 'protect', 'pulse', 'punch', 'recharge', 'reflectable', 'slicing', 'snatch', 'sound', + 'wind', // Not flags directly from move data, but still useful to sort by 'highcrit', 'multihit', 'ohko', 'protection', 'secondary', diff --git a/sim/dex-moves.ts b/sim/dex-moves.ts index 7b18d2c3420e..83273baa2f45 100644 --- a/sim/dex-moves.ts +++ b/sim/dex-moves.ts @@ -43,6 +43,7 @@ interface MoveFlags { futuremove?: 1; // Targets a slot, and in 2 turns damages that slot. gravity?: 1; // Prevented from being executed or selected during Gravity's effect. heal?: 1; // Prevented from being executed or selected during Heal Block's effect. + metronome?: 1; // Can be selected by Metronome. mirror?: 1; // Can be copied by Mirror Move. mustpressure?: 1; // Additional PP is deducted due to Pressure when it ordinarily would not. noassist?: 1; // Cannot be selected by Assist. @@ -270,7 +271,6 @@ export interface MoveData extends EffectData, MoveEventMethods, HitEffect { // --------------- hasCrashDamage?: boolean; isConfusionSelfHit?: boolean; - noMetronome?: string[]; noSketch?: boolean; stallingMove?: boolean; baseMove?: string;