mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-04-26 02:39:38 -05:00
Previously, battle queue stuff was just strewn around `battle.ts`. This gives it a new home: `battle-queue.ts`. This was intended to make `battle.ts` slightly more tractable, although the difference is so small that maybe I shouldn't bother. Oh, well, every little bit helps.
1126 lines
28 KiB
JavaScript
1126 lines
28 KiB
JavaScript
'use strict';
|
|
|
|
/**@type {{[k: string]: ModdedMoveData}} */
|
|
let BattleMovedex = {
|
|
"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,
|
|
},
|
|
banefulbunker: {
|
|
inherit: true,
|
|
desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon making contact with the user become poisoned. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.",
|
|
},
|
|
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,
|
|
},
|
|
bonemerang: {
|
|
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,
|
|
},
|
|
conversion: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
conversion2: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
coreenforcer: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
corkscrewcrash: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
crushgrip: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
darkvoid: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
detect: {
|
|
inherit: true,
|
|
desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.",
|
|
},
|
|
defog: {
|
|
inherit: true,
|
|
onHit(target, source, move) {
|
|
let success = false;
|
|
if (!target.volatiles['substitute'] || move.infiltrates) success = !!this.boost({evasion: -1});
|
|
let removeTarget = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb'];
|
|
let 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,
|
|
},
|
|
dragonhammer: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
dragonrage: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
eggbomb: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
electricterrain: {
|
|
inherit: true,
|
|
desc: "For 5 turns, the terrain becomes Electric Terrain. During the effect, the power of Electric-type attacks made by grounded Pokemon is multiplied by 1.5 and grounded Pokemon cannot fall asleep; Pokemon already asleep do not wake up. Camouflage transforms the user into an Electric type, Nature Power becomes Thunderbolt, and Secret Power has a 30% chance to cause paralysis. Fails if the current terrain is Electric Terrain.",
|
|
effect: {
|
|
duration: 5,
|
|
durationCallback(source, effect) {
|
|
if (source && source.hasItem('terrainextender')) {
|
|
return 8;
|
|
}
|
|
return 5;
|
|
},
|
|
onSetStatus(status, target, source, effect) {
|
|
if (status.id === 'slp' && target.isGrounded() && !target.isSemiInvulnerable()) {
|
|
if (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,
|
|
},
|
|
endure: {
|
|
inherit: true,
|
|
desc: "The user will survive attacks made by other Pokemon during this turn with at least 1 HP. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.",
|
|
},
|
|
extremeevoboost: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
feintattack: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
fierydance: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
flameburst: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
flash: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
fleurcannon: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
floralhealing: {
|
|
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,
|
|
desc: "For 5 turns, the terrain becomes Grassy Terrain. During the effect, the power of Grass-type attacks used by grounded Pokemon is multiplied by 1.5, the power of Bulldoze, Earthquake, and Magnitude used against grounded Pokemon is multiplied by 0.5, and grounded Pokemon have 1/16 of their maximum HP, rounded down, restored at the end of each turn, including the last turn. Camouflage transforms the user into a Grass type, Nature Power becomes Energy Ball, and Secret Power has a 30% chance to cause sleep. Fails if the current terrain is Grassy Terrain.",
|
|
effect: {
|
|
duration: 5,
|
|
durationCallback(source, effect) {
|
|
if (source && source.hasItem('terrainextender')) {
|
|
return 8;
|
|
}
|
|
return 5;
|
|
},
|
|
onBasePower(basePower, attacker, defender, move) {
|
|
let 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');
|
|
},
|
|
},
|
|
},
|
|
growth: {
|
|
inherit: true,
|
|
desc: "Raises the user's Attack and Special Attack by 1 stage. If the weather is Sunny Day or Desolate Land, this move raises the user's Attack and Special Attack by 2 stages.",
|
|
},
|
|
guardianofalola: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
headcharge: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
healblock: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
"healingwish": {
|
|
inherit: true,
|
|
desc: "The user faints and the Pokemon brought out to replace it has its HP fully restored along with having any major status condition cured. The new Pokemon is sent out at the end of the turn, and the healing happens before hazards take effect. Fails if the user is the last unfainted Pokemon in its party.",
|
|
shortDesc: "User faints. Replacement is fully healed.",
|
|
effect: {
|
|
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() {},
|
|
},
|
|
hurricane: {
|
|
inherit: true,
|
|
desc: "Has a 30% chance to confuse the target. This move can hit a target using Bounce, Fly, or Sky Drop, or is under the effect of Sky Drop. If the weather is Primordial Sea or Rain Dance, this move does not check accuracy. If the weather is Desolate Land or Sunny Day, this move's accuracy is 50%.",
|
|
},
|
|
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,
|
|
desc: "Raises the user's Attack by 1 stage.",
|
|
shortDesc: "Raises the user's Attack by 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,
|
|
},
|
|
kinesis: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
kingsshield: {
|
|
inherit: true,
|
|
desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon trying to make contact with the user have their Attack lowered by 2 stages. Non-damaging moves go through this protection. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.",
|
|
shortDesc: "Protects from damaging attacks. Contact: -2 Atk.",
|
|
effect: {
|
|
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');
|
|
let 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.isZPowered && 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: null,
|
|
isUnreleased: true,
|
|
},
|
|
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,
|
|
},
|
|
milkdrink: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
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,
|
|
},
|
|
moonlight: {
|
|
inherit: true,
|
|
desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect, 2/3 of its maximum HP if the weather is Desolate Land or Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.",
|
|
},
|
|
morningsun: {
|
|
inherit: true,
|
|
desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect, 2/3 of its maximum HP if the weather is Desolate Land or Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.",
|
|
},
|
|
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,
|
|
},
|
|
precipiceblades: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
protect: {
|
|
inherit: true,
|
|
desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.",
|
|
},
|
|
psychicterrain: {
|
|
inherit: true,
|
|
desc: "For 5 turns, the terrain becomes Psychic Terrain. During the effect, the power of Psychic-type attacks made by grounded Pokemon is multiplied by 1.5 and grounded Pokemon cannot be hit by moves with priority greater than 0, unless the target is an ally. Camouflage transforms the user into a Psychic type, Nature Power becomes Psychic, and Secret Power has a 30% chance to lower the target's Speed by 1 stage. Fails if the current terrain is Psychic Terrain.",
|
|
effect: {
|
|
duration: 5,
|
|
durationCallback(source, effect) {
|
|
if (source && 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
|
|
let action = this.queue.willMove(target);
|
|
if (!action) return false;
|
|
|
|
action.priority = -7.1;
|
|
this.queue.cancelMove(target);
|
|
for (let i = this.queue.length - 1; i >= 0; i--) {
|
|
if (this.queue[i].choice === 'residual') {
|
|
this.queue.splice(i, 0, action);
|
|
break;
|
|
}
|
|
}
|
|
this.add('-activate', target, 'move: Quash');
|
|
},
|
|
},
|
|
quickguard: {
|
|
inherit: true,
|
|
desc: "The user and its party members are protected from attacks with original or altered priority greater than 0 made by other Pokemon, including allies, during this turn. This move modifies the same 1/X chance of being successful used by other protection moves, where X starts at 1 and triples each time this move is successfully used, but does not use the chance to check for failure. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn or if this move is already in effect for the user's side.",
|
|
},
|
|
rage: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
rapidspin: {
|
|
inherit: true,
|
|
basePower: 20,
|
|
desc: "If this move is successful and the user has not fainted, the effects of Leech Seed and binding moves end for the user, and all hazards are removed from the user's side of the field.",
|
|
shortDesc: "Frees user from hazards, binding, Leech Seed.",
|
|
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,
|
|
},
|
|
shadowbone: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
shadowforce: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
sharpen: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
shatteredpsyche: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
shoreup: {
|
|
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,
|
|
},
|
|
solarbeam: {
|
|
inherit: true,
|
|
desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Hail, Primordial Sea, Rain Dance, or Sandstorm and the user is not holding Utility Umbrella. If the user is holding a Power Herb or the weather is Desolate Land or Sunny Day, the move completes in one turn.",
|
|
},
|
|
solarblade: {
|
|
inherit: true,
|
|
desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Hail, Primordial Sea, Rain Dance, or Sandstorm and the user is not holding Utility Umbrella. If the user is holding a Power Herb or the weather is Desolate Land or Sunny Day, the move completes in one turn.",
|
|
},
|
|
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,
|
|
},
|
|
spikyshield: {
|
|
inherit: true,
|
|
desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon making contact with the user lose 1/8 of their maximum HP, rounded down. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.",
|
|
},
|
|
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,
|
|
},
|
|
synthesis: {
|
|
inherit: true,
|
|
desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect, 2/3 of its maximum HP if the weather is Desolate Land or Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.",
|
|
},
|
|
tailglow: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
technoblast: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
tectonicrage: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
telekinesis: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
teleport: {
|
|
inherit: true,
|
|
desc: "Fails when used.",
|
|
shortDesc: "Fails when used.",
|
|
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,
|
|
},
|
|
thunder: {
|
|
inherit: true,
|
|
desc: "Has a 30% chance to paralyze the target. This move can hit a target using Bounce, Fly, or Sky Drop, or is under the effect of Sky Drop. If the weather is Primordial Sea or Rain Dance, this move does not check accuracy. If the weather is Desolate Land or Sunny Day, this move's accuracy is 50%.",
|
|
},
|
|
twineedle: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
twinkletackle: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
wakeupslap: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
watersport: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
wideguard: {
|
|
inherit: true,
|
|
desc: "The user and its party members are protected from moves made by other Pokemon, including allies, during this turn that target all adjacent foes or all adjacent Pokemon. This move modifies the same 1/X chance of being successful used by other protection moves, where X starts at 1 and triples each time this move is successfully used, but does not use the chance to check for failure. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn or if this move is already in effect for the user's side.",
|
|
},
|
|
wringout: {
|
|
inherit: true,
|
|
isNonstandard: null,
|
|
},
|
|
zippyzap: {
|
|
inherit: true,
|
|
basePower: 50,
|
|
desc: "Will always result in a critical hit.",
|
|
shortDesc: "Nearly always goes first. Always crits.",
|
|
pp: 15,
|
|
willCrit: true,
|
|
secondary: null,
|
|
},
|
|
};
|
|
|
|
exports.BattleMovedex = BattleMovedex;
|