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 = { | |
bide: { | |
inherit: true, | |
priority: 0, | |
accuracy: true, | |
condition: { | |
durationCallback(target, source, effect) { | |
return this.random(3, 5); | |
}, | |
onStart(pokemon) { | |
this.effectState.totalDamage = 0; | |
this.effectState.lastDamage = 0; | |
this.add("-start", pokemon, "Bide"); | |
}, | |
onHit(target, source, move) { | |
if (source && source !== target && move.category !== "Physical" && move.category !== "Special") { | |
const damage = this.effectState.totalDamage; | |
this.effectState.totalDamage += damage; | |
this.effectState.lastDamage = damage; | |
this.effectState.sourceSlot = source.getSlot(); | |
} | |
}, | |
onDamage(damage, target, source, move) { | |
if (!source || source.isAlly(target)) | |
return; | |
if (!move || move.effectType !== "Move") | |
return; | |
if (!damage && this.effectState.lastDamage > 0) { | |
damage = this.effectState.totalDamage; | |
} | |
this.effectState.totalDamage += damage; | |
this.effectState.lastDamage = damage; | |
this.effectState.sourceSlot = source.getSlot(); | |
}, | |
onAfterSetStatus(status, pokemon) { | |
if (pokemon.volatiles["flinch"]) { | |
this.effectState.duration++; | |
} else if (pokemon.volatiles["partiallytrapped"]) { | |
this.effectState.duration++; | |
} else { | |
switch (status.id) { | |
case "slp": | |
case "frz": | |
this.effectState.duration++; | |
break; | |
} | |
} | |
}, | |
onBeforeMove(pokemon, t, move) { | |
if (this.effectState.duration === 1) { | |
this.add("-end", pokemon, "Bide"); | |
if (!this.effectState.totalDamage) { | |
this.debug("Bide failed because no damage was taken"); | |
this.add("-fail", pokemon); | |
return false; | |
} | |
const target = this.getAtSlot(this.effectState.sourceSlot); | |
if (target.isSemiInvulnerable()) { | |
this.add("-message", "The foe " + target.name + " can't be hit while flying!"); | |
pokemon.removeVolatile("bide"); | |
return false; | |
} | |
this.actions.moveHit(target, pokemon, move, { damage: this.effectState.totalDamage * 2 }); | |
pokemon.removeVolatile("bide"); | |
return false; | |
} | |
this.add("-activate", pokemon, "Bide"); | |
return false; | |
}, | |
onDisableMove(pokemon) { | |
if (!pokemon.hasMove("bide")) { | |
return; | |
} | |
for (const moveSlot of pokemon.moveSlots) { | |
if (moveSlot.id !== "bide") { | |
pokemon.disableMove(moveSlot.id); | |
} | |
} | |
} | |
}, | |
type: "???" | |
// Will look as Normal but it's STAB-less | |
}, | |
bind: { | |
inherit: true | |
// FIXME: onBeforeMove() {}, | |
}, | |
clamp: { | |
inherit: true | |
// FIXME: onBeforeMove() {}, | |
}, | |
counter: { | |
inherit: true, | |
ignoreImmunity: true, | |
willCrit: false, | |
basePower: 1, | |
damageCallback(pokemon, target) { | |
const lastMoveThisTurn = target.side.lastMove && target.side.lastMove.id === target.side.lastSelectedMove && !this.queue.willMove(target) && this.dex.moves.get(target.side.lastMove.id); | |
if (!lastMoveThisTurn) { | |
this.debug("Stadium 1 Counter: last move was not this turn"); | |
this.add("-fail", pokemon); | |
return false; | |
} | |
const lastMoveThisTurnIsCounterable = lastMoveThisTurn && lastMoveThisTurn.basePower > 0 && ["Normal", "Fighting"].includes(lastMoveThisTurn.type) && lastMoveThisTurn.id !== "counter"; | |
if (!lastMoveThisTurnIsCounterable) { | |
this.debug(`Stadium 1 Counter: last move ${lastMoveThisTurn.name} was not Counterable`); | |
this.add("-fail", pokemon); | |
return false; | |
} | |
if (this.lastDamage <= 0) { | |
this.debug("Stadium 1 Counter: no previous damage exists"); | |
this.add("-fail", pokemon); | |
return false; | |
} | |
return 2 * this.lastDamage; | |
} | |
}, | |
firespin: { | |
inherit: true | |
// FIXME: onBeforeMove() {}, | |
}, | |
haze: { | |
inherit: true, | |
onHit(target, source) { | |
this.add("-activate", target, "move: Haze"); | |
this.add("-clearallboost", "[silent]"); | |
for (const pokemon of this.getAllActive()) { | |
pokemon.clearBoosts(); | |
pokemon.cureStatus(true); | |
for (const id of Object.keys(pokemon.volatiles)) { | |
pokemon.removeVolatile(id); | |
this.add("-end", pokemon, id, "[silent]"); | |
} | |
pokemon.recalculateStats(); | |
} | |
} | |
}, | |
hyperbeam: { | |
inherit: true, | |
onMoveFail(target, source, move) { | |
source.addVolatile("mustrecharge"); | |
} | |
}, | |
psywave: { | |
inherit: true, | |
basePower: 1, | |
damageCallback(pokemon) { | |
return this.random(1, this.trunc(1.5 * pokemon.level)); | |
} | |
}, | |
rage: { | |
inherit: true, | |
self: { | |
volatileStatus: "rage" | |
}, | |
condition: { | |
// Rage lock | |
onStart(target, source, effect) { | |
this.effectState.move = "rage"; | |
}, | |
onLockMove: "rage", | |
onHit(target, source, move) { | |
if (target.boosts.atk < 6 && (move.category !== "Status" || move.id === "disable")) { | |
this.boost({ atk: 1 }); | |
} | |
} | |
} | |
}, | |
recover: { | |
inherit: true, | |
heal: null, | |
onHit(target) { | |
if (target.hp === target.maxhp) { | |
return false; | |
} | |
this.heal(Math.floor(target.maxhp / 2), target, target); | |
} | |
}, | |
rest: { | |
inherit: true, | |
onHit(target, source, move) { | |
if (target.hp >= target.maxhp) | |
return false; | |
if (!target.setStatus("slp", source, move)) | |
return false; | |
target.statusState.time = 2; | |
target.statusState.startTime = 2; | |
target.recalculateStats(); | |
this.heal(target.maxhp); | |
} | |
}, | |
softboiled: { | |
inherit: true, | |
heal: null, | |
onHit(target) { | |
if (target.hp === target.maxhp) { | |
return false; | |
} | |
this.heal(Math.floor(target.maxhp / 2), target, target); | |
} | |
}, | |
substitute: { | |
inherit: true, | |
onTryHit(target) { | |
if (target.volatiles["substitute"]) { | |
this.add("-fail", target, "move: Substitute"); | |
return null; | |
} | |
if (target.hp <= target.maxhp / 4) { | |
this.add("-fail", target, "move: Substitute", "[weak]"); | |
return null; | |
} | |
}, | |
condition: { | |
onStart(target) { | |
this.add("-start", target, "Substitute"); | |
this.effectState.hp = Math.floor(target.maxhp / 4); | |
delete target.volatiles["partiallytrapped"]; | |
}, | |
onTryHitPriority: -1, | |
onTryHit(target, source, move) { | |
if (target === source) { | |
this.debug("sub bypass: self hit"); | |
return; | |
} | |
if (move.drain) { | |
this.add("-miss", source); | |
return null; | |
} | |
if (move.category === "Status") { | |
const SubBlocked = ["leechseed", "lockon", "mindreader", "nightmare"]; | |
if (move.status || move.boosts || move.volatileStatus === "confusion" || SubBlocked.includes(move.id)) { | |
this.add("-activate", target, "Substitute", "[block] " + move.name); | |
return null; | |
} | |
return; | |
} | |
if (move.volatileStatus && target === source) | |
return; | |
let damage = this.actions.getDamage(source, target, move); | |
if (damage && damage > target.volatiles["substitute"].hp) { | |
damage = target.volatiles["substitute"].hp; | |
} | |
if (!damage && damage !== 0) | |
return null; | |
damage = this.runEvent("SubDamage", target, source, move, damage); | |
if (!damage && damage !== 0) | |
return damage; | |
target.volatiles["substitute"].hp -= damage; | |
this.lastDamage = damage; | |
if (target.volatiles["substitute"].hp <= 0) { | |
this.debug("Substitute broke"); | |
target.removeVolatile("substitute"); | |
target.subFainted = true; | |
} else { | |
this.add("-activate", target, "Substitute", "[damage]"); | |
} | |
if (target.volatiles["substitute"]) { | |
if (move.recoil) { | |
this.damage(this.clampIntRange(Math.floor(damage * move.recoil[0] / move.recoil[1]), 1), source, target, "recoil"); | |
} | |
} | |
this.runEvent("AfterSubDamage", target, source, move, damage); | |
const lastAttackedBy = target.getLastAttackedBy(); | |
if (!lastAttackedBy) { | |
target.attackedBy.push({ source, move: move.id, damage, slot: source.getSlot(), thisTurn: true }); | |
} else { | |
lastAttackedBy.move = move.id; | |
lastAttackedBy.damage = damage; | |
} | |
return 0; | |
}, | |
onEnd(target) { | |
this.add("-end", target, "Substitute"); | |
} | |
}, | |
secondary: null, | |
target: "self", | |
type: "Normal" | |
}, | |
struggle: { | |
inherit: true, | |
ignoreImmunity: { "Normal": true } | |
}, | |
wrap: { | |
inherit: true | |
// FIXME: onBeforeMove() {}, | |
} | |
}; | |
//# sourceMappingURL=moves.js.map | |