Spaces:
Running
Running
export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = { | |
"10000000voltthunderbolt": { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
aciddownpour: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
alloutpummeling: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
assist: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
baddybad: { | |
inherit: true, | |
accuracy: 100, | |
basePower: 90, | |
}, | |
barrage: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
barrier: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
beakblast: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
bestow: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
bide: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
blackholeeclipse: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
bloomdoom: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
boneclub: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
bouncybubble: { | |
inherit: true, | |
basePower: 90, | |
pp: 15, | |
}, | |
breakneckblitz: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
bubble: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
buzzybuzz: { | |
inherit: true, | |
basePower: 90, | |
pp: 15, | |
}, | |
camouflage: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
captivate: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
catastropika: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
chatter: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
chipaway: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
clamp: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
clangoroussoulblaze: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
cometpunch: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
constrict: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
continentalcrush: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
corkscrewcrash: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
curse: { | |
inherit: true, | |
target: "normal", | |
}, | |
darkvoid: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
defog: { | |
inherit: true, | |
onHit(target, source, move) { | |
let success = false; | |
if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({ evasion: -1 }); | |
const removeTarget = [ | |
'reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', | |
]; | |
const removeAll = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb']; | |
for (const targetCondition of removeTarget) { | |
if (target.side.removeSideCondition(targetCondition)) { | |
if (!removeAll.includes(targetCondition)) continue; | |
this.add('-sideend', target.side, this.dex.conditions.get(targetCondition).name, '[from] move: Defog', `[of] ${source}`); | |
success = true; | |
} | |
} | |
for (const sideCondition of removeAll) { | |
if (source.side.removeSideCondition(sideCondition)) { | |
this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Defog', `[of] ${source}`); | |
success = true; | |
} | |
} | |
return success; | |
}, | |
}, | |
devastatingdrake: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
dive: { | |
inherit: true, | |
flags: { | |
contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, | |
}, | |
}, | |
dizzypunch: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
doubleironbash: { | |
inherit: true, | |
isNonstandard: "LGPE", | |
}, | |
doubleslap: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
dragonhammer: { | |
inherit: true, | |
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, | |
}, | |
dragonrage: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
eggbomb: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
electricterrain: { | |
inherit: true, | |
condition: { | |
duration: 5, | |
durationCallback(source, effect) { | |
if (source?.hasItem('terrainextender')) { | |
return 8; | |
} | |
return 5; | |
}, | |
onSetStatus(status, target, source, effect) { | |
if (status.id === 'slp' && target.isGrounded() && !target.isSemiInvulnerable()) { | |
if (effect.id === 'yawn' || (effect.effectType === 'Move' && !effect.secondaries)) { | |
this.add('-activate', target, 'move: Electric Terrain'); | |
} | |
return false; | |
} | |
}, | |
onTryAddVolatile(status, target) { | |
if (!target.isGrounded() || target.isSemiInvulnerable()) return; | |
if (status.id === 'yawn') { | |
this.add('-activate', target, 'move: Electric Terrain'); | |
return null; | |
} | |
}, | |
onBasePower(basePower, attacker, defender, move) { | |
if (move.type === 'Electric' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { | |
this.debug('electric terrain boost'); | |
return this.chainModify(1.5); | |
} | |
}, | |
onFieldStart(field, source, effect) { | |
if (effect && effect.effectType === 'Ability') { | |
this.add('-fieldstart', 'move: Electric Terrain', `[from] ability: ${effect}`, `[of] ${source}`); | |
} else { | |
this.add('-fieldstart', 'move: Electric Terrain'); | |
} | |
}, | |
onFieldResidualOrder: 27, | |
onFieldResidualSubOrder: 7, | |
onFieldEnd() { | |
this.add('-fieldend', 'move: Electric Terrain'); | |
}, | |
}, | |
}, | |
embargo: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
extremeevoboost: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
feintattack: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
flameburst: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
flash: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
floralhealing: { | |
inherit: true, | |
onHit(target, source) { | |
let success = false; | |
if (this.field.isTerrain('grassyterrain')) { | |
success = !!this.heal(this.modify(target.baseMaxhp, 0.667)); | |
} else { | |
success = !!this.heal(Math.ceil(target.baseMaxhp * 0.5)); | |
} | |
if (success && !target.isAlly(source)) { | |
target.staleness = 'external'; | |
} | |
if (!success) { | |
this.add('-fail', target, 'heal'); | |
return null; | |
} | |
return success; | |
}, | |
}, | |
fly: { | |
inherit: true, | |
onTryMove(attacker, defender, move) { | |
if (attacker.removeVolatile(move.id)) { | |
return; | |
} | |
this.add('-prepare', attacker, move.name); | |
if (!this.runEvent('ChargeMove', attacker, defender, move)) { | |
return; | |
} | |
attacker.addVolatile('twoturnmove', defender); | |
return null; | |
}, | |
}, | |
foresight: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
freezyfrost: { | |
inherit: true, | |
accuracy: 100, | |
basePower: 90, | |
pp: 15, | |
}, | |
frustration: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
genesissupernova: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
gigavolthavoc: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
glitzyglow: { | |
inherit: true, | |
accuracy: 100, | |
basePower: 90, | |
}, | |
grassknot: { | |
inherit: true, | |
onTryHit() {}, | |
}, | |
grasswhistle: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
grassyterrain: { | |
inherit: true, | |
condition: { | |
duration: 5, | |
durationCallback(source, effect) { | |
if (source?.hasItem('terrainextender')) { | |
return 8; | |
} | |
return 5; | |
}, | |
onBasePower(basePower, attacker, defender, move) { | |
const weakenedMoves = ['earthquake', 'bulldoze', 'magnitude']; | |
if (weakenedMoves.includes(move.id) && defender.isGrounded() && !defender.isSemiInvulnerable()) { | |
this.debug('move weakened by grassy terrain'); | |
return this.chainModify(0.5); | |
} | |
if (move.type === 'Grass' && attacker.isGrounded()) { | |
this.debug('grassy terrain boost'); | |
return this.chainModify(1.5); | |
} | |
}, | |
onFieldStart(field, source, effect) { | |
if (effect && effect.effectType === 'Ability') { | |
this.add('-fieldstart', 'move: Grassy Terrain', `[from] ability: ${effect}`, `[of] ${source}`); | |
} else { | |
this.add('-fieldstart', 'move: Grassy Terrain'); | |
} | |
}, | |
onResidualOrder: 5, | |
onResidualSubOrder: 2, | |
onResidual(pokemon) { | |
if (pokemon.isGrounded() && !pokemon.isSemiInvulnerable()) { | |
this.heal(pokemon.baseMaxhp / 16, pokemon, pokemon); | |
} else { | |
this.debug(`Pokemon semi-invuln or not grounded; Grassy Terrain skipped`); | |
} | |
}, | |
onFieldResidualOrder: 27, | |
onFieldResidualSubOrder: 7, | |
onFieldEnd() { | |
this.add('-fieldend', 'move: Grassy Terrain'); | |
}, | |
}, | |
}, | |
guardianofalola: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
healbell: { | |
inherit: true, | |
onHit(target, source) { | |
this.add('-activate', source, 'move: Heal Bell'); | |
let success = false; | |
const allies = [...target.side.pokemon, ...target.side.allySide?.pokemon || []]; | |
for (const ally of allies) { | |
if (ally.hasAbility('soundproof')) { | |
this.add('-immune', ally, '[from] ability: Soundproof'); | |
continue; | |
} | |
if (ally.cureStatus()) success = true; | |
} | |
return success; | |
}, | |
}, | |
healblock: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
healingwish: { | |
inherit: true, | |
condition: { | |
duration: 2, | |
onSwitchInPriority: 1, | |
onSwitchIn(target) { | |
if (!target.fainted) { | |
target.heal(target.maxhp); | |
target.clearStatus(); | |
this.add('-heal', target, target.getHealth, '[from] move: Healing Wish'); | |
target.side.removeSlotCondition(target, 'healingwish'); | |
} | |
}, | |
}, | |
}, | |
healorder: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
healpulse: { | |
inherit: true, | |
onHit(target, source) { | |
let success = false; | |
if (source.hasAbility('megalauncher')) { | |
success = !!this.heal(this.modify(target.baseMaxhp, 0.75)); | |
} else { | |
success = !!this.heal(Math.ceil(target.baseMaxhp * 0.5)); | |
} | |
if (success && !target.isAlly(source)) { | |
target.staleness = 'external'; | |
} | |
if (!success) { | |
this.add('-fail', target, 'heal'); | |
return null; | |
} | |
return success; | |
}, | |
}, | |
heartstamp: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
heartswap: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
heatcrash: { | |
inherit: true, | |
onTryHit() {}, | |
}, | |
heavyslam: { | |
inherit: true, | |
onTryHit() {}, | |
}, | |
hiddenpower: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerbug: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerdark: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerdragon: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerelectric: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerfighting: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerfire: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerflying: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerghost: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowergrass: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerground: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerice: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerpoison: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerpsychic: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerrock: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowersteel: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hiddenpowerwater: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
howl: { | |
inherit: true, | |
flags: { snatch: 1, metronome: 1 }, | |
boosts: { | |
atk: 1, | |
}, | |
target: "self", | |
}, | |
hydrovortex: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hyperfang: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hyperspacefury: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
hyperspacehole: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
iceball: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
icehammer: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
infernooverdrive: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
iondeluge: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
judgment: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
jumpkick: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
karatechop: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
kingsshield: { | |
inherit: true, | |
condition: { | |
duration: 1, | |
onStart(target) { | |
this.add('-singleturn', target, 'Protect'); | |
}, | |
onTryHitPriority: 3, | |
onTryHit(target, source, move) { | |
if (!move.flags['protect'] || move.category === 'Status') { | |
if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true; | |
return; | |
} | |
this.add('-activate', target, 'move: Protect'); | |
const lockedmove = source.getVolatile('lockedmove'); | |
if (lockedmove) { | |
// Outrage counter is reset | |
if (source.volatiles['lockedmove'].duration === 2) { | |
delete source.volatiles['lockedmove']; | |
} | |
} | |
if (this.checkMoveMakesContact(move, source, target)) { | |
this.boost({ atk: -2 }, source, target, this.dex.getActiveMove("King's Shield")); | |
} | |
return this.NOT_FAIL; | |
}, | |
onHit(target, source, move) { | |
if (move.isZOrMaxPowered && this.checkMoveMakesContact(move, source, target)) { | |
this.boost({ atk: -2 }, source, target, this.dex.getActiveMove("King's Shield")); | |
} | |
}, | |
}, | |
}, | |
letssnuggleforever: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
lightofruin: { | |
inherit: true, | |
isNonstandard: "Unobtainable", | |
}, | |
lightthatburnsthesky: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
lowkick: { | |
inherit: true, | |
onTryHit() {}, | |
}, | |
luckychant: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
lunardance: { | |
inherit: true, | |
condition: { | |
duration: 2, | |
onSwitchInPriority: 1, | |
onSwitchIn(target) { | |
if (!target.fainted) { | |
target.heal(target.maxhp); | |
target.clearStatus(); | |
for (const moveSlot of target.moveSlots) { | |
moveSlot.pp = moveSlot.maxpp; | |
} | |
this.add('-heal', target, target.getHealth, '[from] move: Lunar Dance'); | |
target.side.removeSlotCondition(target, 'lunardance'); | |
} | |
}, | |
}, | |
}, | |
magnetbomb: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
magnitude: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
maliciousmoonsault: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
meditate: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
mefirst: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
menacingmoonrazemaelstrom: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
miracleeye: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
mirrormove: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
mirrorshot: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
moongeistbeam: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, metronome: 1 }, | |
}, | |
moonlight: { | |
inherit: true, | |
onHit(pokemon) { | |
let factor = 0.5; | |
switch (pokemon.effectiveWeather()) { | |
case 'sunnyday': | |
case 'desolateland': | |
factor = 0.667; | |
break; | |
case 'raindance': | |
case 'primordialsea': | |
case 'sandstorm': | |
case 'hail': | |
factor = 0.25; | |
break; | |
} | |
const success = !!this.heal(this.modify(pokemon.maxhp, factor)); | |
if (!success) { | |
this.add('-fail', pokemon, 'heal'); | |
return null; | |
} | |
return success; | |
}, | |
}, | |
morningsun: { | |
inherit: true, | |
onHit(pokemon) { | |
let factor = 0.5; | |
switch (pokemon.effectiveWeather()) { | |
case 'sunnyday': | |
case 'desolateland': | |
factor = 0.667; | |
break; | |
case 'raindance': | |
case 'primordialsea': | |
case 'sandstorm': | |
case 'hail': | |
factor = 0.25; | |
break; | |
} | |
const success = !!this.heal(this.modify(pokemon.maxhp, factor)); | |
if (!success) { | |
this.add('-fail', pokemon, 'heal'); | |
return null; | |
} | |
return success; | |
}, | |
}, | |
mudbomb: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
mudsport: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
multiattack: { | |
inherit: true, | |
basePower: 90, | |
}, | |
naturalgift: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
naturesmadness: { | |
inherit: true, | |
flags: { protect: 1, mirror: 1, metronome: 1 }, | |
}, | |
needlearm: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
neverendingnightmare: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
nightmare: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
oceanicoperetta: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
odorsleuth: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
ominouswind: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
pollenpuff: { | |
inherit: true, | |
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))) { | |
this.add('-immune', target); | |
return null; | |
} | |
} | |
}, | |
}, | |
powder: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
precipiceblades: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
psychicterrain: { | |
inherit: true, | |
condition: { | |
duration: 5, | |
durationCallback(source, effect) { | |
if (source?.hasItem('terrainextender')) { | |
return 8; | |
} | |
return 5; | |
}, | |
onTryHitPriority: 4, | |
onTryHit(target, source, effect) { | |
if (effect && (effect.priority <= 0.1 || effect.target === 'self')) { | |
return; | |
} | |
if (target.isSemiInvulnerable() || target.isAlly(source)) return; | |
if (!target.isGrounded()) { | |
const baseMove = this.dex.moves.get(effect.id); | |
if (baseMove.priority > 0) { | |
this.hint("Psychic Terrain doesn't affect Pokémon immune to Ground."); | |
} | |
return; | |
} | |
this.add('-activate', target, 'move: Psychic Terrain'); | |
return null; | |
}, | |
onBasePower(basePower, attacker, defender, move) { | |
if (move.type === 'Psychic' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { | |
this.debug('psychic terrain boost'); | |
return this.chainModify(1.5); | |
} | |
}, | |
onFieldStart(field, source, effect) { | |
if (effect && effect.effectType === 'Ability') { | |
this.add('-fieldstart', 'move: Psychic Terrain', `[from] ability: ${effect}`, `[of] ${source}`); | |
} else { | |
this.add('-fieldstart', 'move: Psychic Terrain'); | |
} | |
}, | |
onFieldResidualOrder: 27, | |
onFieldResidualSubOrder: 7, | |
onFieldEnd() { | |
this.add('-fieldend', 'move: Psychic Terrain'); | |
}, | |
}, | |
}, | |
psychoboost: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
psywave: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
pulverizingpancake: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
punishment: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
purify: { | |
inherit: true, | |
onHit(target, source) { | |
if (!target.cureStatus()) return false; | |
this.heal(Math.ceil(source.maxhp * 0.5), source); | |
}, | |
}, | |
pursuit: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
quash: { | |
inherit: true, | |
onHit(target) { | |
if (this.activePerHalf === 1) return false; // fails in singles | |
const action = this.queue.willMove(target); | |
if (!action) return false; | |
action.priority = -7.1; | |
this.queue.cancelMove(target); | |
for (let i = this.queue.list.length - 1; i >= 0; i--) { | |
if (this.queue.list[i].choice === 'residual') { | |
this.queue.list.splice(i, 0, action); | |
break; | |
} | |
} | |
this.add('-activate', target, 'move: Quash'); | |
}, | |
}, | |
rage: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
rapidspin: { | |
inherit: true, | |
basePower: 20, | |
secondary: null, | |
}, | |
razorwind: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
refresh: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
relicsong: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
return: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
revelationdance: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
rockclimb: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
rollingkick: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
rototiller: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
sappyseed: { | |
inherit: true, | |
accuracy: 100, | |
basePower: 90, | |
pp: 15, | |
}, | |
savagespinout: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
searingsunrazesmash: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
secretpower: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
seedflare: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
sharpen: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
shatteredpsyche: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
shoreup: { | |
inherit: true, | |
onHit(pokemon) { | |
let factor = 0.5; | |
if (this.field.isWeather('sandstorm')) { | |
factor = 0.667; | |
} | |
const success = !!this.heal(this.modify(pokemon.maxhp, factor)); | |
if (!success) { | |
this.add('-fail', pokemon, 'heal'); | |
return null; | |
} | |
return success; | |
}, | |
}, | |
signalbeam: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
silverwind: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
sinisterarrowraid: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
sizzlyslide: { | |
inherit: true, | |
basePower: 90, | |
pp: 15, | |
}, | |
sketch: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
skydrop: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
skyuppercut: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
smellingsalts: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
snatch: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
sonicboom: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
soulstealing7starstrike: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
sparklyswirl: { | |
inherit: true, | |
accuracy: 100, | |
basePower: 90, | |
pp: 15, | |
}, | |
spiderweb: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
spikecannon: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
splinteredstormshards: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
spotlight: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
steamroller: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
stokedsparksurfer: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
subzeroslammer: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
sunsteelstrike: { | |
inherit: true, | |
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 }, | |
}, | |
supersonicskystrike: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
swallow: { | |
inherit: true, | |
onHit(pokemon) { | |
const layers = pokemon.volatiles['stockpile']?.layers || 1; | |
const healAmount = [0.25, 0.5, 1]; | |
const success = !!this.heal(this.modify(pokemon.maxhp, healAmount[layers - 1])); | |
if (!success) this.add('-fail', pokemon, 'heal'); | |
pokemon.removeVolatile('stockpile'); | |
return success || null; | |
}, | |
}, | |
switcheroo: { | |
inherit: true, | |
onHit(target, source, move) { | |
const yourItem = target.takeItem(source); | |
const myItem = source.takeItem(); | |
if (target.item || source.item || (!yourItem && !myItem)) { | |
if (yourItem) target.item = yourItem.id; | |
if (myItem) source.item = myItem.id; | |
return false; | |
} | |
if ( | |
(myItem && !this.singleEvent('TakeItem', myItem, source.itemState, target, source, move, myItem)) || | |
(yourItem && !this.singleEvent('TakeItem', yourItem, target.itemState, source, target, move, yourItem)) | |
) { | |
if (yourItem) target.item = yourItem.id; | |
if (myItem) source.item = myItem.id; | |
return false; | |
} | |
this.add('-activate', source, 'move: Trick', `[of] ${target}`); | |
if (myItem) { | |
target.setItem(myItem); | |
this.add('-item', target, myItem, '[from] move: Switcheroo'); | |
} else { | |
this.add('-enditem', target, yourItem, '[silent]', '[from] move: Switcheroo'); | |
} | |
if (yourItem) { | |
source.setItem(yourItem); | |
this.add('-item', source, yourItem, '[from] move: Switcheroo'); | |
} else { | |
this.add('-enditem', source, myItem, '[silent]', '[from] move: Switcheroo'); | |
} | |
}, | |
}, | |
synchronoise: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
synthesis: { | |
inherit: true, | |
onHit(pokemon) { | |
let factor = 0.5; | |
switch (pokemon.effectiveWeather()) { | |
case 'sunnyday': | |
case 'desolateland': | |
factor = 0.667; | |
break; | |
case 'raindance': | |
case 'primordialsea': | |
case 'sandstorm': | |
case 'hail': | |
factor = 0.25; | |
break; | |
} | |
const success = !!this.heal(this.modify(pokemon.maxhp, factor)); | |
if (!success) { | |
this.add('-fail', pokemon, 'heal'); | |
return null; | |
} | |
return success; | |
}, | |
}, | |
tailglow: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
tectonicrage: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
telekinesis: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
teleport: { | |
inherit: true, | |
priority: 0, | |
selfSwitch: false, | |
onTry: false, | |
}, | |
toxic: { | |
inherit: true, | |
onPrepareHit(target, source, move) { | |
if (source.hasType('Poison')) source.addVolatile('toxic'); | |
}, | |
condition: { | |
noCopy: true, | |
duration: 1, | |
onSourceInvulnerabilityPriority: 1, | |
onSourceInvulnerability(target, source, move) { | |
if (move && source === this.effectState.target) return 0; | |
}, | |
onSourceAccuracy(accuracy, target, source, move) { | |
if (move && source === this.effectState.target) return true; | |
}, | |
}, | |
}, | |
toxicthread: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
trick: { | |
inherit: true, | |
onHit(target, source, move) { | |
const yourItem = target.takeItem(source); | |
const myItem = source.takeItem(); | |
if (target.item || source.item || (!yourItem && !myItem)) { | |
if (yourItem) target.item = yourItem.id; | |
if (myItem) source.item = myItem.id; | |
return false; | |
} | |
if ( | |
(myItem && !this.singleEvent('TakeItem', myItem, source.itemState, target, source, move, myItem)) || | |
(yourItem && !this.singleEvent('TakeItem', yourItem, target.itemState, source, target, move, yourItem)) | |
) { | |
if (yourItem) target.item = yourItem.id; | |
if (myItem) source.item = myItem.id; | |
return false; | |
} | |
this.add('-activate', source, 'move: Trick', `[of] ${target}`); | |
if (myItem) { | |
target.setItem(myItem); | |
this.add('-item', target, myItem, '[from] move: Trick'); | |
} else { | |
this.add('-enditem', target, yourItem, '[silent]', '[from] move: Trick'); | |
} | |
if (yourItem) { | |
source.setItem(yourItem); | |
this.add('-item', source, yourItem, '[from] move: Trick'); | |
} else { | |
this.add('-enditem', source, myItem, '[silent]', '[from] move: Trick'); | |
} | |
}, | |
}, | |
trumpcard: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
twineedle: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
twinkletackle: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
wakeupslap: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
watersport: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
wringout: { | |
inherit: true, | |
isNonstandard: null, | |
}, | |
zippyzap: { | |
inherit: true, | |
basePower: 50, | |
pp: 15, | |
willCrit: true, | |
secondary: null, | |
}, | |
}; | |