Spaces:
Running
Running
; | |
var __defProp = Object.defineProperty; | |
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | |
var __getOwnPropNames = Object.getOwnPropertyNames; | |
var __hasOwnProp = Object.prototype.hasOwnProperty; | |
var __export = (target, all) => { | |
for (var name in all) | |
__defProp(target, name, { get: all[name], enumerable: true }); | |
}; | |
var __copyProps = (to, from, except, desc) => { | |
if (from && typeof from === "object" || typeof from === "function") { | |
for (let key of __getOwnPropNames(from)) | |
if (!__hasOwnProp.call(to, key) && key !== except) | |
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | |
} | |
return to; | |
}; | |
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | |
var moves_exports = {}; | |
__export(moves_exports, { | |
Moves: () => Moves | |
}); | |
module.exports = __toCommonJS(moves_exports); | |
const Moves = { | |
absorb: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, metronome: 1 } | |
}, | |
acidarmor: { | |
inherit: true, | |
pp: 40 | |
}, | |
aircutter: { | |
inherit: true, | |
basePower: 55 | |
}, | |
airslash: { | |
inherit: true, | |
pp: 20 | |
}, | |
aromatherapy: { | |
inherit: true, | |
onHit(target, source) { | |
this.add("-activate", source, "move: Aromatherapy"); | |
const allies = [...target.side.pokemon, ...target.side.allySide?.pokemon || []]; | |
for (const ally of allies) { | |
ally.cureStatus(); | |
} | |
} | |
}, | |
assurance: { | |
inherit: true, | |
basePower: 50 | |
}, | |
aurasphere: { | |
inherit: true, | |
basePower: 90 | |
}, | |
autotomize: { | |
inherit: true, | |
volatileStatus: "autotomize", | |
onHit(pokemon) { | |
}, | |
condition: { | |
noCopy: true, | |
// doesn't get copied by Baton Pass | |
onStart(pokemon) { | |
if (pokemon.species.weighthg > 1) { | |
this.effectState.multiplier = 1; | |
this.add("-start", pokemon, "Autotomize"); | |
} | |
}, | |
onRestart(pokemon) { | |
if (pokemon.species.weighthg - this.effectState.multiplier * 1e3 > 1) { | |
this.effectState.multiplier++; | |
this.add("-start", pokemon, "Autotomize"); | |
} | |
}, | |
onModifyWeightPriority: 2, | |
onModifyWeight(weighthg, pokemon) { | |
if (this.effectState.multiplier) { | |
weighthg -= this.effectState.multiplier * 1e3; | |
if (weighthg < 1) | |
weighthg = 1; | |
return weighthg; | |
} | |
} | |
} | |
}, | |
barrier: { | |
inherit: true, | |
pp: 30 | |
}, | |
bestow: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, noassist: 1, failcopycat: 1 } | |
}, | |
blizzard: { | |
inherit: true, | |
basePower: 120 | |
}, | |
block: { | |
inherit: true, | |
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, metronome: 1, nosleeptalk: 1 } | |
}, | |
bubble: { | |
inherit: true, | |
basePower: 20 | |
}, | |
bugbuzz: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, sound: 1, metronome: 1 } | |
}, | |
camouflage: { | |
inherit: true, | |
onHit(target) { | |
if (!target.setType("Ground")) | |
return false; | |
this.add("-start", target, "typechange", "Ground"); | |
} | |
}, | |
charm: { | |
inherit: true, | |
type: "Normal" | |
}, | |
chatter: { | |
inherit: true, | |
basePower: 60, | |
onModifyMove(move, pokemon) { | |
if (pokemon.species.name !== "Chatot") | |
delete move.secondaries; | |
}, | |
secondary: { | |
chance: 10, | |
volatileStatus: "confusion" | |
}, | |
flags: { | |
protect: 1, | |
sound: 1, | |
distance: 1, | |
noassist: 1, | |
failcopycat: 1, | |
failmefirst: 1, | |
nosleeptalk: 1, | |
failmimic: 1, | |
nosketch: 1 | |
} | |
}, | |
conversion: { | |
inherit: true, | |
onHit(target) { | |
const possibleTypes = target.moveSlots.map((moveSlot) => { | |
const move = this.dex.moves.get(moveSlot.id); | |
if (move.id !== "conversion" && !target.hasType(move.type)) { | |
return move.type; | |
} | |
return ""; | |
}).filter((type2) => type2); | |
if (!possibleTypes.length) { | |
return false; | |
} | |
const type = this.sample(possibleTypes); | |
if (!target.setType(type)) | |
return false; | |
this.add("-start", target, "typechange", type); | |
} | |
}, | |
copycat: { | |
inherit: true, | |
onHit(pokemon) { | |
if (!this.lastMove || this.dex.moves.get(this.lastMove.id).flags["failcopycat"]) { | |
return false; | |
} | |
this.actions.useMove(this.lastMove.id, pokemon); | |
} | |
}, | |
cottonspore: { | |
inherit: true, | |
onTryHit() { | |
}, | |
target: "normal" | |
}, | |
covet: { | |
inherit: true, | |
pp: 40 | |
}, | |
crabhammer: { | |
inherit: true, | |
basePower: 90 | |
}, | |
defog: { | |
inherit: true, | |
onHit(pokemon) { | |
if (!pokemon.volatiles["substitute"]) | |
this.boost({ evasion: -1 }); | |
const sideConditions = ["reflect", "lightscreen", "safeguard", "mist", "spikes", "toxicspikes", "stealthrock"]; | |
for (const condition of sideConditions) { | |
if (pokemon.side.removeSideCondition(condition)) { | |
this.add("-sideend", pokemon.side, this.dex.conditions.get(condition).name, "[from] move: Defog", `[of] ${pokemon}`); | |
} | |
} | |
} | |
}, | |
dig: { | |
inherit: true, | |
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, metronome: 1, nosleeptalk: 1 } | |
}, | |
dracometeor: { | |
inherit: true, | |
basePower: 140 | |
}, | |
dragonpulse: { | |
inherit: true, | |
basePower: 90 | |
}, | |
drainpunch: { | |
inherit: true, | |
flags: { contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1 } | |
}, | |
dreameater: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, metronome: 1 } | |
}, | |
echoedvoice: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, sound: 1, metronome: 1 } | |
}, | |
electroball: { | |
inherit: true, | |
basePowerCallback(pokemon, target) { | |
const ratio = Math.floor(pokemon.getStat("spe") / Math.max(1, target.getStat("spe"))); | |
const bp = [40, 60, 80, 120, 150][Math.min(ratio, 4)]; | |
this.debug(`BP: ${bp}`); | |
return bp; | |
} | |
}, | |
energyball: { | |
inherit: true, | |
basePower: 80 | |
}, | |
extrasensory: { | |
inherit: true, | |
pp: 30 | |
}, | |
feint: { | |
inherit: true, | |
flags: { noassist: 1, failcopycat: 1 } | |
}, | |
finalgambit: { | |
inherit: true, | |
flags: { contact: 1, protect: 1, metronome: 1 } | |
}, | |
fireblast: { | |
inherit: true, | |
basePower: 120 | |
}, | |
firepledge: { | |
inherit: true, | |
basePower: 50, | |
basePowerCallback(target, source, move) { | |
if (["grasspledge", "waterpledge"].includes(move.sourceEffect)) { | |
this.add("-combine"); | |
return 150; | |
} | |
return 50; | |
} | |
}, | |
flamethrower: { | |
inherit: true, | |
basePower: 95 | |
}, | |
fly: { | |
inherit: true, | |
flags: { contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1 } | |
}, | |
followme: { | |
inherit: true, | |
priority: 3 | |
}, | |
frostbreath: { | |
inherit: true, | |
basePower: 40 | |
}, | |
furycutter: { | |
inherit: true, | |
basePower: 20, | |
condition: { | |
duration: 2, | |
onStart() { | |
this.effectState.multiplier = 1; | |
}, | |
onRestart() { | |
if (this.effectState.multiplier < 8) { | |
this.effectState.multiplier <<= 1; | |
} | |
this.effectState.duration = 2; | |
} | |
} | |
}, | |
futuresight: { | |
inherit: true, | |
basePower: 100, | |
onTry(source, target) { | |
if (!target.side.addSlotCondition(target, "futuremove")) | |
return false; | |
Object.assign(target.side.slotConditions[target.position]["futuremove"], { | |
duration: 3, | |
move: "futuresight", | |
source, | |
moveData: { | |
id: "futuresight", | |
name: "Future Sight", | |
accuracy: 100, | |
basePower: 100, | |
category: "Special", | |
priority: 0, | |
flags: { metronome: 1, futuremove: 1 }, | |
ignoreImmunity: false, | |
effectType: "Move", | |
type: "Psychic" | |
} | |
}); | |
this.add("-start", source, "move: Future Sight"); | |
return null; | |
} | |
}, | |
gigadrain: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, metronome: 1 } | |
}, | |
glare: { | |
inherit: true, | |
accuracy: 90 | |
}, | |
grasswhistle: { | |
inherit: true, | |
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 } | |
}, | |
grasspledge: { | |
inherit: true, | |
basePower: 50, | |
basePowerCallback(target, source, move) { | |
if (["waterpledge", "firepledge"].includes(move.sourceEffect)) { | |
this.add("-combine"); | |
return 150; | |
} | |
return 50; | |
} | |
}, | |
growl: { | |
inherit: true, | |
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 } | |
}, | |
growth: { | |
inherit: true, | |
pp: 40 | |
}, | |
gunkshot: { | |
inherit: true, | |
accuracy: 70 | |
}, | |
gyroball: { | |
inherit: true, | |
basePowerCallback(pokemon, target) { | |
let power = Math.floor(25 * target.getStat("spe") / Math.max(1, pokemon.getStat("spe"))) + 1; | |
if (power > 150) | |
power = 150; | |
this.debug(`BP: ${power}`); | |
return power; | |
} | |
}, | |
healbell: { | |
inherit: true, | |
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 || []]; | |
for (const ally of allies) { | |
ally.cureStatus(); | |
} | |
} | |
}, | |
healpulse: { | |
inherit: true, | |
heal: [1, 2], | |
onHit() { | |
} | |
}, | |
heatwave: { | |
inherit: true, | |
basePower: 100 | |
}, | |
hex: { | |
inherit: true, | |
basePower: 50 | |
}, | |
hiddenpower: { | |
inherit: true, | |
basePower: 0, | |
basePowerCallback(pokemon) { | |
const bp = pokemon.hpPower || 70; | |
this.debug(`BP: ${bp}`); | |
return bp; | |
} | |
}, | |
hiddenpowerbug: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerdark: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerdragon: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerelectric: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerfighting: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerfire: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerflying: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerghost: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowergrass: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerground: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerice: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerpoison: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerpsychic: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerrock: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowersteel: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hiddenpowerwater: { | |
inherit: true, | |
basePower: 70 | |
}, | |
hornleech: { | |
inherit: true, | |
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 } | |
}, | |
hurricane: { | |
inherit: true, | |
basePower: 120 | |
}, | |
hydropump: { | |
inherit: true, | |
basePower: 120 | |
}, | |
hypervoice: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, sound: 1, metronome: 1 } | |
}, | |
icebeam: { | |
inherit: true, | |
basePower: 95 | |
}, | |
incinerate: { | |
inherit: true, | |
basePower: 30, | |
onHit(pokemon, source) { | |
const item = pokemon.getItem(); | |
if (item.isBerry && pokemon.takeItem(source)) { | |
this.add("-enditem", pokemon, item.name, "[from] move: Incinerate"); | |
} | |
} | |
}, | |
knockoff: { | |
inherit: true, | |
basePower: 20, | |
onBasePower() { | |
} | |
}, | |
leafstorm: { | |
inherit: true, | |
basePower: 140 | |
}, | |
leechlife: { | |
inherit: true, | |
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 } | |
}, | |
lick: { | |
inherit: true, | |
basePower: 20 | |
}, | |
lightscreen: { | |
inherit: true, | |
condition: { | |
duration: 5, | |
durationCallback(target, source, effect) { | |
if (source?.hasItem("lightclay")) { | |
return 8; | |
} | |
return 5; | |
}, | |
onAnyModifyDamage(damage, source, target, move) { | |
if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === "Special") { | |
if (!target.getMoveHitData(move).crit && !move.infiltrates) { | |
this.debug("Light Screen weaken"); | |
if (this.activePerHalf > 1) | |
return this.chainModify([2703, 4096]); | |
return this.chainModify(0.5); | |
} | |
} | |
}, | |
onSideStart(side) { | |
this.add("-sidestart", side, "move: Light Screen"); | |
}, | |
onSideResidualOrder: 26, | |
onSideResidualSubOrder: 2, | |
onSideEnd(side) { | |
this.add("-sideend", side, "move: Light Screen"); | |
} | |
} | |
}, | |
lowsweep: { | |
inherit: true, | |
basePower: 60 | |
}, | |
magiccoat: { | |
inherit: true, | |
condition: { | |
duration: 1, | |
onStart(target, source, effect) { | |
this.add("-singleturn", target, "move: Magic Coat"); | |
if (effect?.effectType === "Move") { | |
this.effectState.pranksterBoosted = effect.pranksterBoosted; | |
} | |
}, | |
onTryHitPriority: 2, | |
onTryHit(target, source, move) { | |
if (target === source || move.hasBounced || !move.flags["reflectable"] || target.isSemiInvulnerable()) { | |
return; | |
} | |
const newMove = this.dex.getActiveMove(move.id); | |
newMove.hasBounced = true; | |
newMove.pranksterBoosted = this.effectState.pranksterBoosted; | |
this.actions.useMove(newMove, target, { target: source }); | |
return null; | |
}, | |
onAllyTryHitSide(target, source, move) { | |
if (target.isAlly(source) || move.hasBounced || !move.flags["reflectable"]) { | |
return; | |
} | |
const newMove = this.dex.getActiveMove(move.id); | |
newMove.hasBounced = true; | |
newMove.pranksterBoosted = false; | |
this.actions.useMove(newMove, this.effectState.target, { target: source }); | |
return null; | |
} | |
} | |
}, | |
magicroom: { | |
inherit: true, | |
priority: -7 | |
}, | |
magmastorm: { | |
inherit: true, | |
basePower: 120 | |
}, | |
meanlook: { | |
inherit: true, | |
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 } | |
}, | |
megadrain: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, metronome: 1 } | |
}, | |
metalsound: { | |
inherit: true, | |
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 } | |
}, | |
meteormash: { | |
inherit: true, | |
accuracy: 85, | |
basePower: 100 | |
}, | |
minimize: { | |
inherit: true, | |
pp: 20, | |
condition: { | |
noCopy: true, | |
onSourceModifyDamage(damage, source, target, move) { | |
if (["stomp", "steamroller"].includes(move.id)) { | |
return this.chainModify(2); | |
} | |
} | |
} | |
}, | |
moonlight: { | |
inherit: true, | |
type: "Normal" | |
}, | |
mudsport: { | |
inherit: true, | |
pseudoWeather: void 0, | |
volatileStatus: "mudsport", | |
condition: { | |
noCopy: true, | |
onStart(pokemon) { | |
this.add("-start", pokemon, "Mud Sport"); | |
}, | |
onAnyBasePowerPriority: 1, | |
onAnyBasePower(basePower, user, target, move) { | |
if (move.type === "Electric") { | |
this.debug("mud sport weaken"); | |
return this.chainModify([1352, 4096]); | |
} | |
} | |
} | |
}, | |
muddywater: { | |
inherit: true, | |
basePower: 95 | |
}, | |
naturepower: { | |
inherit: true, | |
onTryHit() { | |
}, | |
onHit(pokemon) { | |
this.actions.useMove("earthquake", pokemon); | |
}, | |
target: "self" | |
}, | |
overheat: { | |
inherit: true, | |
basePower: 140 | |
}, | |
perishsong: { | |
inherit: true, | |
flags: { sound: 1, distance: 1, metronome: 1 } | |
}, | |
pinmissile: { | |
inherit: true, | |
accuracy: 85, | |
basePower: 14 | |
}, | |
poisonfang: { | |
inherit: true, | |
secondary: { | |
chance: 30, | |
status: "tox" | |
} | |
}, | |
poisongas: { | |
inherit: true, | |
accuracy: 80 | |
}, | |
poisonpowder: { | |
inherit: true, | |
onTryHit() { | |
} | |
}, | |
powergem: { | |
inherit: true, | |
basePower: 70 | |
}, | |
psychup: { | |
inherit: true, | |
onHit(target, source) { | |
let i; | |
for (i in target.boosts) { | |
source.boosts[i] = target.boosts[i]; | |
} | |
this.add("-copyboost", source, target, "[from] move: Psych Up"); | |
} | |
}, | |
psychoshift: { | |
inherit: true, | |
accuracy: 90 | |
}, | |
psywave: { | |
inherit: true, | |
accuracy: 80 | |
}, | |
quickguard: { | |
inherit: true, | |
stallingMove: true, | |
onTry(source) { | |
return this.queue.willAct() && this.runEvent("StallMove", source); | |
}, | |
onHitSide(side, source) { | |
source.addVolatile("stall"); | |
}, | |
condition: { | |
duration: 1, | |
onSideStart(target, source) { | |
this.add("-singleturn", source, "Quick Guard"); | |
}, | |
onTryHitPriority: 4, | |
onTryHit(target, source, effect) { | |
if (effect && (effect.id === "feint" || this.dex.moves.get(effect.id).priority <= 0)) { | |
return; | |
} | |
this.add("-activate", target, "Quick Guard"); | |
const lockedmove = source.getVolatile("lockedmove"); | |
if (lockedmove) { | |
if (source.volatiles["lockedmove"].duration === 2) { | |
delete source.volatiles["lockedmove"]; | |
} | |
} | |
return null; | |
} | |
} | |
}, | |
ragepowder: { | |
inherit: true, | |
priority: 3, | |
flags: { noassist: 1, failcopycat: 1 } | |
}, | |
reflect: { | |
inherit: true, | |
condition: { | |
duration: 5, | |
durationCallback(target, source, effect) { | |
if (source?.hasItem("lightclay")) { | |
return 8; | |
} | |
return 5; | |
}, | |
onAnyModifyDamage(damage, source, target, move) { | |
if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === "Physical") { | |
if (!target.getMoveHitData(move).crit && !move.infiltrates) { | |
this.debug("Reflect weaken"); | |
if (this.activePerHalf > 1) | |
return this.chainModify([2703, 4096]); | |
return this.chainModify(0.5); | |
} | |
} | |
}, | |
onSideStart(side) { | |
this.add("-sidestart", side, "Reflect"); | |
}, | |
onSideResidualOrder: 26, | |
onSideResidualSubOrder: 1, | |
onSideEnd(side) { | |
this.add("-sideend", side, "Reflect"); | |
} | |
} | |
}, | |
relicsong: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, sound: 1 } | |
}, | |
roar: { | |
inherit: true, | |
accuracy: 100, | |
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1 } | |
}, | |
rocktomb: { | |
inherit: true, | |
accuracy: 80, | |
basePower: 50, | |
pp: 10 | |
}, | |
round: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, sound: 1, metronome: 1 } | |
}, | |
sacredsword: { | |
inherit: true, | |
pp: 20 | |
}, | |
scald: { | |
inherit: true, | |
thawsTarget: false | |
}, | |
screech: { | |
inherit: true, | |
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 } | |
}, | |
secretpower: { | |
inherit: true, | |
secondary: { | |
chance: 30, | |
boosts: { | |
accuracy: -1 | |
} | |
} | |
}, | |
shadowforce: { | |
inherit: true, | |
flags: { contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1 } | |
}, | |
sing: { | |
inherit: true, | |
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 } | |
}, | |
skillswap: { | |
inherit: true, | |
onHit(target, source) { | |
const targetAbility = target.ability; | |
const sourceAbility = source.ability; | |
if (targetAbility === sourceAbility) { | |
return false; | |
} | |
this.add("-activate", source, "move: Skill Swap", this.dex.abilities.get(targetAbility), this.dex.abilities.get(sourceAbility), `[of] ${target}`); | |
source.setAbility(targetAbility); | |
target.setAbility(sourceAbility); | |
} | |
}, | |
skullbash: { | |
inherit: true, | |
basePower: 100, | |
pp: 15 | |
}, | |
skydrop: { | |
inherit: true, | |
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)) { | |
if (target !== source.volatiles["twoturnmove"].source) | |
return false; | |
if (target.hasType("Flying")) { | |
this.add("-immune", target); | |
this.add("-end", target, "Sky Drop"); | |
return null; | |
} | |
} else { | |
if (target.volatiles["substitute"] || target.isAlly(source)) { | |
return false; | |
} | |
this.add("-prepare", source, move.name, target); | |
source.addVolatile("twoturnmove", target); | |
return null; | |
} | |
} | |
}, | |
sleeppowder: { | |
inherit: true, | |
onTryHit() { | |
} | |
}, | |
smellingsalts: { | |
inherit: true, | |
basePower: 60 | |
}, | |
smog: { | |
inherit: true, | |
basePower: 20 | |
}, | |
snarl: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, sound: 1 } | |
}, | |
snore: { | |
inherit: true, | |
basePower: 40, | |
flags: { protect: 1, mirror: 1, sound: 1 } | |
}, | |
soak: { | |
inherit: true, | |
onHit(target) { | |
if (!target.setType("Water")) { | |
this.add("-fail", target); | |
return null; | |
} | |
this.add("-start", target, "typechange", "Water"); | |
} | |
}, | |
spore: { | |
inherit: true, | |
onTryHit() { | |
} | |
}, | |
stormthrow: { | |
inherit: true, | |
basePower: 40 | |
}, | |
stringshot: { | |
inherit: true, | |
boosts: { | |
spe: -1 | |
} | |
}, | |
strugglebug: { | |
inherit: true, | |
basePower: 30 | |
}, | |
stunspore: { | |
inherit: true, | |
onTryHit() { | |
} | |
}, | |
substitute: { | |
inherit: true, | |
condition: { | |
onStart(target) { | |
this.add("-start", target, "Substitute"); | |
this.effectState.hp = Math.floor(target.maxhp / 4); | |
delete target.volatiles["partiallytrapped"]; | |
}, | |
onTryPrimaryHitPriority: -1, | |
onTryPrimaryHit(target, source, move) { | |
if (target === source || move.flags["bypasssub"]) { | |
return; | |
} | |
let damage = this.actions.getDamage(source, target, move); | |
if (!damage && damage !== 0) { | |
this.add("-fail", source); | |
this.attrLastMove("[still]"); | |
return null; | |
} | |
damage = this.runEvent("SubDamage", target, source, move, damage); | |
if (!damage) { | |
return damage; | |
} | |
if (damage > target.volatiles["substitute"].hp) { | |
damage = target.volatiles["substitute"].hp; | |
} | |
target.volatiles["substitute"].hp -= damage; | |
source.lastDamage = damage; | |
if (target.volatiles["substitute"].hp <= 0) { | |
if (move.ohko) | |
this.add("-ohko"); | |
target.removeVolatile("substitute"); | |
} else { | |
this.add("-activate", target, "Substitute", "[damage]"); | |
} | |
if (move.recoil && damage) { | |
this.damage(this.actions.calcRecoilDamage(damage, move, source), source, target, "recoil"); | |
} | |
if (move.drain) { | |
this.heal(Math.ceil(damage * move.drain[0] / move.drain[1]), source, target, "drain"); | |
} | |
this.singleEvent("AfterSubDamage", move, null, target, source, move, damage); | |
this.runEvent("AfterSubDamage", target, source, move, damage); | |
return this.HIT_SUBSTITUTE; | |
}, | |
onEnd(target) { | |
this.add("-end", target, "Substitute"); | |
} | |
} | |
}, | |
submission: { | |
inherit: true, | |
pp: 25 | |
}, | |
supersonic: { | |
inherit: true, | |
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 } | |
}, | |
surf: { | |
inherit: true, | |
basePower: 95 | |
}, | |
sweetkiss: { | |
inherit: true, | |
type: "Normal" | |
}, | |
sweetscent: { | |
inherit: true, | |
boosts: { | |
evasion: -1 | |
} | |
}, | |
swordsdance: { | |
inherit: true, | |
pp: 30 | |
}, | |
synchronoise: { | |
inherit: true, | |
basePower: 70, | |
pp: 15 | |
}, | |
tailwind: { | |
inherit: true, | |
pp: 30 | |
}, | |
technoblast: { | |
inherit: true, | |
basePower: 85 | |
}, | |
thief: { | |
inherit: true, | |
basePower: 40, | |
pp: 10 | |
}, | |
thunder: { | |
inherit: true, | |
basePower: 120 | |
}, | |
thunderbolt: { | |
inherit: true, | |
basePower: 95 | |
}, | |
toxic: { | |
inherit: true, | |
onPrepareHit() { | |
} | |
}, | |
uproar: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, sound: 1, metronome: 1, nosleeptalk: 1 } | |
}, | |
vinewhip: { | |
inherit: true, | |
basePower: 35, | |
pp: 15 | |
}, | |
wakeupslap: { | |
inherit: true, | |
basePower: 60 | |
}, | |
waterpledge: { | |
inherit: true, | |
basePower: 50, | |
basePowerCallback(target, source, move) { | |
if (["firepledge", "grasspledge"].includes(move.sourceEffect)) { | |
this.add("-combine"); | |
return 150; | |
} | |
return 50; | |
} | |
}, | |
watersport: { | |
inherit: true, | |
pseudoWeather: void 0, | |
volatileStatus: "watersport", | |
condition: { | |
noCopy: true, | |
onStart(pokemon) { | |
this.add("-start", pokemon, "move: Water Sport"); | |
}, | |
onAnyBasePowerPriority: 1, | |
onAnyBasePower(basePower, user, target, move) { | |
if (move.type === "Fire") { | |
this.debug("water sport weaken"); | |
return this.chainModify([1352, 4096]); | |
} | |
} | |
} | |
}, | |
whirlwind: { | |
inherit: true, | |
accuracy: 100, | |
flags: { protect: 1, reflectable: 1, mirror: 1, bypasssub: 1, metronome: 1 } | |
}, | |
wideguard: { | |
inherit: true, | |
stallingMove: true, | |
onTry(source) { | |
return this.queue.willAct() && this.runEvent("StallMove", source); | |
}, | |
onHitSide(side, source) { | |
source.addVolatile("stall"); | |
} | |
}, | |
willowisp: { | |
inherit: true, | |
accuracy: 75 | |
}, | |
wonderroom: { | |
inherit: true, | |
priority: -7 | |
} | |
}; | |
//# sourceMappingURL=moves.js.map | |