209 lines
7.4 KiB
JavaScript
209 lines
7.4 KiB
JavaScript
"use strict";
|
|
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 = {
|
|
gastroacid: {
|
|
inherit: true,
|
|
condition: {
|
|
// Ability suppression implemented in Pokemon.ignoringAbility() within sim/pokemon.js
|
|
onStart(pokemon) {
|
|
if (pokemon.hasItem("Ability Shield"))
|
|
return false;
|
|
this.add("-endability", pokemon);
|
|
this.singleEvent("End", pokemon.getAbility(), pokemon.abilityState, pokemon, pokemon, "gastroacid");
|
|
const keys = Object.keys(pokemon.volatiles).filter((x) => x.startsWith("ability:"));
|
|
if (keys.length) {
|
|
for (const abil of keys) {
|
|
pokemon.removeVolatile(abil);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
grudge: {
|
|
inherit: true,
|
|
condition: {
|
|
onStart(pokemon) {
|
|
this.add("-singlemove", pokemon, "Grudge");
|
|
},
|
|
onFaint(target, source, effect) {
|
|
if (!source || source.fainted || !effect)
|
|
return;
|
|
if (effect.effectType === "Move" && !effect.flags["futuremove"] && source.lastMove) {
|
|
let move = source.lastMove;
|
|
if (move.isMax && move.baseMove)
|
|
move = this.dex.moves.get(move.baseMove);
|
|
for (const moveSlot of source.moveSlots) {
|
|
if (moveSlot.id === move.id) {
|
|
moveSlot.pp = 0;
|
|
if (!source.m.curMoves.includes(moveSlot.id) && source.m.trackPP.get(moveSlot.id)) {
|
|
source.m.trackPP.set(moveSlot.id, moveSlot.maxpp - moveSlot.pp);
|
|
}
|
|
this.add("-activate", source, "move: Grudge", move.name);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
onBeforeMovePriority: 100,
|
|
onBeforeMove(pokemon) {
|
|
this.debug("removing Grudge before attack");
|
|
pokemon.removeVolatile("grudge");
|
|
}
|
|
}
|
|
},
|
|
lunardance: {
|
|
inherit: true,
|
|
condition: {
|
|
onSwap(target) {
|
|
if (!target.fainted && (target.hp < target.maxhp || target.status || target.moveSlots.some((moveSlot) => moveSlot.pp < moveSlot.maxpp))) {
|
|
target.heal(target.maxhp);
|
|
target.clearStatus();
|
|
for (const moveSlot of target.moveSlots) {
|
|
moveSlot.pp = moveSlot.maxpp;
|
|
}
|
|
for (const key of target.m.trackPP.keys()) {
|
|
target.m.trackPP.set(key, 0);
|
|
}
|
|
this.add("-heal", target, target.getHealth, "[from] move: Lunar Dance");
|
|
target.side.removeSlotCondition(target, "lunardance");
|
|
}
|
|
}
|
|
}
|
|
},
|
|
mimic: {
|
|
inherit: true,
|
|
onHit(target, source) {
|
|
const move = target.lastMove;
|
|
if (source.transformed || !move || move.flags["failmimic"] || source.moves.includes(move.id)) {
|
|
return false;
|
|
}
|
|
if (move.isZ || move.isMax)
|
|
return false;
|
|
const mimicIndex = source.moves.indexOf("mimic");
|
|
if (mimicIndex < 0)
|
|
return false;
|
|
if (!source.m.curMoves.includes("mimic"))
|
|
return false;
|
|
const mimickedMove = {
|
|
move: move.name,
|
|
id: move.id,
|
|
pp: move.pp,
|
|
maxpp: move.pp,
|
|
target: move.target,
|
|
disabled: false,
|
|
used: false,
|
|
virtual: true
|
|
};
|
|
source.moveSlots[mimicIndex] = mimickedMove;
|
|
source.m.curMoves[mimicIndex] = mimickedMove.id;
|
|
this.add("-start", source, "Mimic", move.name);
|
|
}
|
|
},
|
|
sketch: {
|
|
inherit: true,
|
|
onHit(target, source) {
|
|
const disallowedMoves = ["chatter", "sketch", "struggle"];
|
|
const move = target.lastMove;
|
|
if (source.transformed || !move || source.moves.includes(move.id))
|
|
return false;
|
|
if (disallowedMoves.includes(move.id) || move.isZ || move.isMax)
|
|
return false;
|
|
const sketchIndex = source.moves.indexOf("sketch");
|
|
if (sketchIndex < 0)
|
|
return false;
|
|
if (!source.m.curMoves.includes("sketch"))
|
|
return false;
|
|
const sketchedMove = {
|
|
move: move.name,
|
|
id: move.id,
|
|
pp: move.pp,
|
|
maxpp: move.pp,
|
|
target: move.target,
|
|
disabled: false,
|
|
used: false
|
|
};
|
|
source.moveSlots[sketchIndex] = sketchedMove;
|
|
source.baseMoveSlots[sketchIndex] = sketchedMove;
|
|
source.m.curMoves[sketchIndex] = sketchedMove.id;
|
|
this.add("-activate", source, "move: Sketch", move.name);
|
|
}
|
|
},
|
|
skillswap: {
|
|
inherit: true,
|
|
onHit(target, source, move) {
|
|
const targetAbility = target.getAbility();
|
|
const sourceAbility = source.getAbility();
|
|
const ally = source.side.active.find((mon) => mon && mon !== source && !mon.fainted);
|
|
const foeAlly = target.side.active.find((mon) => mon && mon !== target && !mon.fainted);
|
|
if (target.isAlly(source)) {
|
|
this.add("-activate", source, "move: Skill Swap", "", "", "[of] " + target);
|
|
} else {
|
|
this.add("-activate", source, "move: Skill Swap", targetAbility, sourceAbility, "[of] " + target);
|
|
}
|
|
this.singleEvent("End", sourceAbility, source.abilityState, source);
|
|
if (ally?.m.innate) {
|
|
ally.removeVolatile(ally.m.innate);
|
|
delete ally.m.innate;
|
|
}
|
|
this.singleEvent("End", targetAbility, target.abilityState, target);
|
|
if (foeAlly?.m.innate) {
|
|
foeAlly.removeVolatile(foeAlly.m.innate);
|
|
delete foeAlly.m.innate;
|
|
}
|
|
source.ability = targetAbility.id;
|
|
source.abilityState = { id: this.toID(source.ability), target: source };
|
|
if (source.m.innate && source.m.innate.endsWith(targetAbility.id)) {
|
|
source.removeVolatile(source.m.innate);
|
|
delete source.m.innate;
|
|
}
|
|
if (ally && ally.ability !== targetAbility.id) {
|
|
if (!source.m.innate) {
|
|
source.m.innate = "ability:" + ally.getAbility().id;
|
|
source.addVolatile(source.m.innate);
|
|
}
|
|
ally.m.innate = "ability:" + targetAbility.id;
|
|
ally.addVolatile(ally.m.innate);
|
|
}
|
|
target.ability = sourceAbility.id;
|
|
target.abilityState = { id: this.toID(target.ability), target };
|
|
if (target.m.innate && target.m.innate.endsWith(sourceAbility.id)) {
|
|
target.removeVolatile(target.m.innate);
|
|
delete target.m.innate;
|
|
}
|
|
if (foeAlly && foeAlly.ability !== sourceAbility.id) {
|
|
if (!target.m.innate) {
|
|
target.m.innate = "ability:" + foeAlly.getAbility().id;
|
|
target.addVolatile(target.m.innate);
|
|
}
|
|
foeAlly.m.innate = "ability:" + sourceAbility.id;
|
|
foeAlly.addVolatile(foeAlly.m.innate);
|
|
}
|
|
if (!target.isAlly(source))
|
|
target.volatileStaleness = "external";
|
|
this.singleEvent("Start", targetAbility, source.abilityState, source);
|
|
this.singleEvent("Start", sourceAbility, target.abilityState, target);
|
|
}
|
|
}
|
|
};
|
|
//# sourceMappingURL=moves.js.map
|