Jofthomas's picture
Jofthomas HF staff
Upload 4781 files
5c2ed06 verified
"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 = {
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