161 lines
6.3 KiB
JavaScript
161 lines
6.3 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 rulesets_exports = {};
|
|
__export(rulesets_exports, {
|
|
Rulesets: () => Rulesets
|
|
});
|
|
module.exports = __toCommonJS(rulesets_exports);
|
|
const Rulesets = {
|
|
obtainablemoves: {
|
|
inherit: true,
|
|
banlist: [
|
|
// https://www.smogon.com/forums/threads/implementing-all-old-gens-in-ps-testers-required.3483261/post-5420130
|
|
// confirmed by Marty
|
|
"Kakuna + Poison Sting + Harden",
|
|
"Kakuna + String Shot + Harden",
|
|
"Beedrill + Poison Sting + Harden",
|
|
"Beedrill + String Shot + Harden",
|
|
// https://www.smogon.com/forums/threads/rby-and-gsc-illegal-movesets.78638/
|
|
"Nidoking + Fury Attack + Thrash",
|
|
"Exeggutor + Poison Powder + Stomp",
|
|
"Exeggutor + Sleep Powder + Stomp",
|
|
"Exeggutor + Stun Spore + Stomp",
|
|
"Eevee + Tackle + Growl",
|
|
"Vaporeon + Tackle + Growl",
|
|
"Jolteon + Tackle + Growl",
|
|
"Jolteon + Focus Energy + Thunder Shock",
|
|
"Flareon + Tackle + Growl",
|
|
"Flareon + Focus Energy + Ember",
|
|
// https://github.com/smogon/pokemon-showdown/pull/8869
|
|
"Rapidash + Pay Day + Growl",
|
|
"Rapidash + Pay Day + Tail Whip",
|
|
"Fearow + Pay Day + Peck",
|
|
"Fearow + Pay Day + Mirror Move",
|
|
"Magikarp + Dragon Rage + Tackle"
|
|
]
|
|
},
|
|
standard: {
|
|
effectType: "ValidatorRule",
|
|
name: "Standard",
|
|
ruleset: ["Obtainable", "Sleep Clause Mod", "Freeze Clause Mod", "Species Clause", "Nickname Clause", "OHKO Clause", "Evasion Items Clause", "Evasion Moves Clause", "Endless battle Clause", "HP Percentage Mod", "Cancel Mod"],
|
|
banlist: [
|
|
"Hypnosis + Mean Look",
|
|
"Hypnosis + Spider Web",
|
|
"Lovely Kiss + Mean Look",
|
|
"Lovely Kiss + Spider Web",
|
|
"Sing + Mean Look",
|
|
"Sing + Spider Web",
|
|
"Sleep Powder + Mean Look",
|
|
"Sleep Powder + Spider Web",
|
|
"Spore + Mean Look",
|
|
"Spore + Spider Web"
|
|
]
|
|
},
|
|
nc2000movelegality: {
|
|
effectType: "ValidatorRule",
|
|
name: "NC 2000 Move Legality",
|
|
desc: "Prevents Pok\xE9mon from having moves that would only be obtainable in Pok\xE9mon Crystal.",
|
|
onValidateSet(set) {
|
|
const illegalCombos = {
|
|
arbok: { crunch: "E" },
|
|
sandslash: { metalclaw: "E" },
|
|
golduck: { crosschop: "E" },
|
|
marowak: { swordsdance: "E" },
|
|
electabuzz: { crosschop: "E" },
|
|
magmar: { crosschop: "E" },
|
|
jolteon: { batonpass: "L" },
|
|
vaporeon: { batonpass: "L" },
|
|
flareon: { batonpass: "L" },
|
|
espeon: { batonpass: "L" },
|
|
umbreon: { batonpass: "L" },
|
|
dragonite: { extremespeed: "S" },
|
|
meganium: { swordsdance: "E" },
|
|
typhlosion: { submission: "E" },
|
|
ariados: { agility: "L" },
|
|
yanma: { wingattack: "L" },
|
|
murkrow: { skyattack: "E" },
|
|
qwilfish: { spikes: "L" },
|
|
sneasel: { metalclaw: "L" },
|
|
ursaring: { metalclaw: "E" },
|
|
piloswine: { amnesia: "L" },
|
|
skarmory: { skyattack: "E" },
|
|
donphan: { watergun: "E" },
|
|
suicune: { aurorabeam: "L" },
|
|
dugtrio: { triattack: "L" },
|
|
magneton: { triattack: "L" },
|
|
cloyster: { spikes: "L" }
|
|
};
|
|
const moveSources = Object.fromEntries(
|
|
set.moves.map((move) => [this.toID(move), []])
|
|
);
|
|
const species = this.dex.species.get(set.species);
|
|
for (const { learnset } of this.dex.species.getFullLearnset(species.id)) {
|
|
for (const moveid in moveSources) {
|
|
moveSources[moveid].push(...learnset[moveid] || []);
|
|
}
|
|
}
|
|
const notUsableAsTM = ["icebeam", "flamethrower", "thunderbolt"];
|
|
const legalityList = illegalCombos[species.id];
|
|
const problems = [];
|
|
for (const moveid of set.moves.map(this.toID)) {
|
|
if (!moveSources[moveid])
|
|
continue;
|
|
if (legalityList) {
|
|
const list = moveSources[moveid].filter((x) => !x.includes(legalityList[moveid]));
|
|
if (!list.length) {
|
|
switch (legalityList[moveid]) {
|
|
case "L":
|
|
const levels = new Set(moveSources[moveid].filter((x) => x.includes(legalityList[moveid])).map((x) => x.slice(2)));
|
|
problems.push(
|
|
`${species.name} can't learn ${this.dex.moves.get(moveid).name}.`,
|
|
`(It learns ${this.dex.moves.get(moveid).name} in Pok\xE9mon Crystal at the following levels: ${[...levels].join(", ")})`
|
|
);
|
|
break;
|
|
case "S":
|
|
problems.push(
|
|
`${species.name} can't learn ${this.dex.moves.get(moveid).name}.`,
|
|
`(It only learns ${this.dex.moves.get(moveid).name} in Pok\xE9mon Crystal via special in-game events.)`
|
|
);
|
|
break;
|
|
case "E":
|
|
problems.push(
|
|
`${species.name} can't learn ${this.dex.moves.get(moveid).name}.`,
|
|
`(It only learns ${this.dex.moves.get(moveid).name} as an egg move in Pok\xE9mon Crystal.)`
|
|
);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
for (const id of notUsableAsTM) {
|
|
if (moveid === id && moveSources[id] && !moveSources[id].filter((x) => !x.includes("2T")).length) {
|
|
problems.push(`${species.name} can't learn ${this.dex.moves.get(id).name}.`);
|
|
}
|
|
}
|
|
}
|
|
if (problems.some((x) => notUsableAsTM.map((y) => this.dex.moves.get(y).name).some((z) => x.includes(z)))) {
|
|
problems.push(
|
|
`(${notUsableAsTM.map((y) => this.dex.moves.get(y).name).join(" / ")} aren't learnable outside of Pok\xE9mon Crystal.)`
|
|
);
|
|
}
|
|
return problems;
|
|
}
|
|
}
|
|
};
|
|
//# sourceMappingURL=rulesets.js.map
|