pokemon-showdown/data/mods/gen7/moves.ts
Guangcong Luo d1db1b5d95 Move descriptions to data/text/ files
This adds some new `data/text/` files, which are the new home for
item/move/ability descriptions, as well as in-game messages, in one
place for ease of translation.
2020-09-06 21:21:40 -07:00

1027 lines
19 KiB
TypeScript

export const Moves: {[k: string]: ModdedMoveData} = {
"10000000voltthunderbolt": {
inherit: true,
isNonstandard: null,
},
aciddownpour: {
inherit: true,
isNonstandard: null,
},
alloutpummeling: {
inherit: true,
isNonstandard: null,
},
aeroblast: {
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,
},
coreenforcer: {
inherit: true,
isNonstandard: null,
},
corkscrewcrash: {
inherit: true,
isNonstandard: null,
},
crushgrip: {
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.getEffect(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.getEffect(sideCondition).name, '[from] move: Defog', '[of] ' + source);
success = true;
}
}
return success;
},
},
devastatingdrake: {
inherit: true,
isNonstandard: null,
},
diamondstorm: {
inherit: true,
isNonstandard: null,
},
dizzypunch: {
inherit: true,
isNonstandard: null,
},
doubleironbash: {
inherit: true,
isNonstandard: "LGPE",
},
doubleslap: {
inherit: true,
isNonstandard: null,
},
dragonascent: {
inherit: true,
isNonstandard: null,
},
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);
}
},
onStart(battle, 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');
}
},
onResidualOrder: 21,
onResidualSubOrder: 2,
onEnd() {
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,
},
foresight: {
inherit: true,
isNonstandard: null,
},
freezyfrost: {
inherit: true,
accuracy: 100,
basePower: 90,
pp: 15,
},
frustration: {
inherit: true,
isNonstandard: null,
},
genesissupernova: {
inherit: true,
isNonstandard: null,
},
geomancy: {
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)) {
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);
}
},
onStart(battle, 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: 3,
onResidual() {
this.eachEvent('Terrain');
},
onTerrain(pokemon) {
if (pokemon.isGrounded() && !pokemon.isSemiInvulnerable()) {
this.debug('Pokemon is grounded, healing through Grassy Terrain.');
this.heal(pokemon.baseMaxhp / 16, pokemon, pokemon);
}
},
onEnd() {
if (!this.effectData.duration) this.eachEvent('Terrain');
this.add('-fieldend', 'move: Grassy Terrain');
},
},
},
guardianofalola: {
inherit: true,
isNonstandard: null,
},
healbell: {
inherit: true,
onHit(pokemon, source) {
this.add('-activate', source, 'move: Heal Bell');
const side = pokemon.side;
let success = false;
for (const ally of side.pokemon) {
if (ally.hasAbility('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.setStatus('');
this.add('-heal', target, target.getHealth, '[from] move: Healing Wish');
target.side.removeSlotCondition(target, 'healingwish');
}
},
},
},
healorder: {
inherit: true,
isNonstandard: null,
},
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},
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 (move.flags['contact']) {
this.boost({atk: -2}, source, target, this.dex.getActiveMove("King's Shield"));
}
return this.NOT_FAIL;
},
onHit(target, source, move) {
if (move.isZOrMaxPowered && move.flags['contact']) {
this.boost({atk: -2}, source, target, this.dex.getActiveMove("King's Shield"));
}
},
},
},
landswrath: {
inherit: true,
isNonstandard: null,
},
letssnuggleforever: {
inherit: true,
isNonstandard: null,
},
lightofruin: {
inherit: true,
isNonstandard: "Unobtainable",
},
lightthatburnsthesky: {
inherit: true,
isNonstandard: null,
},
lovelykiss: {
inherit: true,
isNonstandard: null,
},
lowkick: {
inherit: true,
onTryHit() {},
},
luckychant: {
inherit: true,
isNonstandard: null,
},
lunardance: {
inherit: true,
isNonstandard: null,
},
lusterpurge: {
inherit: true,
isNonstandard: null,
},
magmastorm: {
inherit: true,
isNonstandard: null,
},
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,
},
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",
],
},
mindblown: {
inherit: true,
isNonstandard: null,
},
miracleeye: {
inherit: true,
isNonstandard: null,
},
mirrormove: {
inherit: true,
isNonstandard: null,
},
mirrorshot: {
inherit: true,
isNonstandard: null,
},
mistball: {
inherit: true,
isNonstandard: null,
},
mudbomb: {
inherit: true,
isNonstandard: null,
},
mudsport: {
inherit: true,
isNonstandard: null,
},
multiattack: {
inherit: true,
basePower: 90,
},
naturalgift: {
inherit: true,
isNonstandard: null,
},
naturesmadness: {
inherit: true,
isNonstandard: null,
},
needlearm: {
inherit: true,
isNonstandard: null,
},
neverendingnightmare: {
inherit: true,
isNonstandard: null,
},
nightmare: {
inherit: true,
isNonstandard: null,
},
oblivionwing: {
inherit: true,
isNonstandard: null,
},
oceanicoperetta: {
inherit: true,
isNonstandard: null,
},
odorsleuth: {
inherit: true,
isNonstandard: null,
},
ominouswind: {
inherit: true,
isNonstandard: null,
},
originpulse: {
inherit: true,
isNonstandard: 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 (!target.isGrounded() || target.isSemiInvulnerable() || target.side === source.side) return;
if (effect && (effect.priority <= 0.1 || effect.target === 'self')) {
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);
}
},
onStart(battle, 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');
}
},
onResidualOrder: 21,
onResidualSubOrder: 2,
onEnd() {
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,
},
pursuit: {
inherit: true,
isNonstandard: null,
},
quash: {
inherit: true,
onHit(target) {
if (target.side.active.length < 2) 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,
},
roaroftime: {
inherit: true,
isNonstandard: null,
},
rockclimb: {
inherit: true,
isNonstandard: null,
},
rollingkick: {
inherit: true,
isNonstandard: null,
},
rototiller: {
inherit: true,
isNonstandard: null,
},
sacredfire: {
inherit: true,
isNonstandard: null,
},
sappyseed: {
inherit: true,
accuracy: 100,
basePower: 90,
pp: 15,
},
savagespinout: {
inherit: true,
isNonstandard: null,
},
searingshot: {
inherit: true,
isNonstandard: null,
},
searingsunrazesmash: {
inherit: true,
isNonstandard: null,
},
secretpower: {
inherit: true,
isNonstandard: null,
},
seedflare: {
inherit: true,
isNonstandard: null,
},
shadowforce: {
inherit: true,
isNonstandard: null,
},
sharpen: {
inherit: true,
isNonstandard: null,
},
shatteredpsyche: {
inherit: true,
isNonstandard: null,
},
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,
},
spacialrend: {
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,
},
steameruption: {
inherit: true,
isNonstandard: null,
},
steamroller: {
inherit: true,
isNonstandard: null,
},
stokedsparksurfer: {
inherit: true,
isNonstandard: null,
},
subzeroslammer: {
inherit: true,
isNonstandard: null,
},
supersonicskystrike: {
inherit: true,
isNonstandard: null,
},
synchronoise: {
inherit: true,
isNonstandard: null,
},
tailglow: {
inherit: true,
isNonstandard: null,
},
technoblast: {
inherit: true,
isNonstandard: null,
},
tectonicrage: {
inherit: true,
isNonstandard: null,
},
telekinesis: {
inherit: true,
isNonstandard: null,
},
teleport: {
inherit: true,
priority: 0,
selfSwitch: false,
onTryHit: false,
},
thousandarrows: {
inherit: true,
isNonstandard: null,
},
thousandwaves: {
inherit: true,
isNonstandard: null,
},
toxicthread: {
inherit: true,
isNonstandard: null,
},
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,
},
};