"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", "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" ] }, nintendocup2000movelegality: { effectType: "ValidatorRule", name: "Nintendo Cup 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 notUsableAsTM = ["icebeam", "flamethrower", "thunderbolt"]; const species = this.dex.species.get(set.species || set.name); const learnsetData = { ...this.dex.data.Learnsets[species.id]?.learnset || {} }; const legalityList = illegalCombos[species.id]; const problems = []; let prevo = species.prevo; while (prevo) { const prevoSpecies = this.dex.species.get(prevo); const prevoLsetData = this.dex.data.Learnsets[prevoSpecies.id]?.learnset || {}; for (const moveid in prevoLsetData) { if (!(moveid in learnsetData)) { learnsetData[moveid] = prevoLsetData[moveid]; } else { learnsetData[moveid].push(...prevoLsetData[moveid]); } } prevo = prevoSpecies.prevo; } for (const moveid of set.moves.map(this.toID)) { if (!learnsetData[moveid]) continue; if (legalityList) { const list = learnsetData[moveid].filter((x) => !x.includes(legalityList[moveid])); if (!list.length) { switch (legalityList[moveid]) { case "L": const levels = new Set(learnsetData[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 && learnsetData[id] && !learnsetData[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