{ "version": 3, "sources": ["../../../sim/dex-data.ts"], "sourcesContent": ["/**\r\n * Dex Data\r\n * Pokemon Showdown - http://pokemonshowdown.com/\r\n *\r\n * @license MIT\r\n */\r\nimport {Utils} from '../lib';\r\n\r\n/**\r\n* Converts anything to an ID. An ID must have only lowercase alphanumeric\r\n* characters.\r\n*\r\n* If a string is passed, it will be converted to lowercase and\r\n* non-alphanumeric characters will be stripped.\r\n*\r\n* If an object with an ID is passed, its ID will be returned.\r\n* Otherwise, an empty string will be returned.\r\n*\r\n* Generally assigned to the global toID, because of how\r\n* commonly it's used.\r\n*/\r\nexport function toID(text: any): ID {\r\n\t// The sucrase transformation of optional chaining is too expensive to be used in a hot function like this.\r\n\t/* eslint-disable @typescript-eslint/prefer-optional-chain */\r\n\tif (text && text.id) {\r\n\t\ttext = text.id;\r\n\t} else if (text && text.userid) {\r\n\t\ttext = text.userid;\r\n\t} else if (text && text.roomid) {\r\n\t\ttext = text.roomid;\r\n\t}\r\n\tif (typeof text !== 'string' && typeof text !== 'number') return '';\r\n\treturn ('' + text).toLowerCase().replace(/[^a-z0-9]+/g, '') as ID;\r\n\t/* eslint-enable @typescript-eslint/prefer-optional-chain */\r\n}\r\n\r\nexport class BasicEffect implements EffectData {\r\n\t/**\r\n\t * ID. This will be a lowercase version of the name with all the\r\n\t * non-alphanumeric characters removed. So, for instance, \"Mr. Mime\"\r\n\t * becomes \"mrmime\", and \"Basculin-Blue-Striped\" becomes\r\n\t * \"basculinbluestriped\".\r\n\t */\r\n\tid: ID;\r\n\t/**\r\n\t * Name. Currently does not support Unicode letters, so \"Flab\u00E9b\u00E9\"\r\n\t * is \"Flabebe\" and \"Nidoran\u2640\" is \"Nidoran-F\".\r\n\t */\r\n\tname: string;\r\n\t/**\r\n\t * Full name. Prefixes the name with the effect type. For instance,\r\n\t * Leftovers would be \"item: Leftovers\", confusion the status\r\n\t * condition would be \"confusion\", etc.\r\n\t */\r\n\tfullname: string;\r\n\t/** Effect type. */\r\n\teffectType: EffectType;\r\n\t/**\r\n\t * Does it exist? For historical reasons, when you use an accessor\r\n\t * for an effect that doesn't exist, you get a dummy effect that\r\n\t * doesn't do anything, and this field set to false.\r\n\t */\r\n\texists: boolean;\r\n\t/**\r\n\t * Dex number? For a Pokemon, this is the National Dex number. For\r\n\t * other effects, this is often an internal ID (e.g. a move\r\n\t * number). Not all effects have numbers, this will be 0 if it\r\n\t * doesn't. Nonstandard effects (e.g. CAP effects) will have\r\n\t * negative numbers.\r\n\t */\r\n\tnum: number;\r\n\t/**\r\n\t * The generation of Pokemon game this was INTRODUCED (NOT\r\n\t * necessarily the current gen being simulated.) Not all effects\r\n\t * track generation; this will be 0 if not known.\r\n\t */\r\n\tgen: number;\r\n\t/**\r\n\t * A shortened form of the description of this effect.\r\n\t * Not all effects have this.\r\n\t */\r\n\tshortDesc: string;\r\n\t/** The full description for this effect. */\r\n\tdesc: string;\r\n\t/**\r\n\t * Is this item/move/ability/pokemon nonstandard? Specified for effects\r\n\t * that have no use in standard formats: made-up pokemon (CAP),\r\n\t * glitches (MissingNo etc), Pokestar pokemon, etc.\r\n\t */\r\n\tisNonstandard: Nonstandard | null;\r\n\t/** The duration of the condition - only for pure conditions. */\r\n\tduration?: number;\r\n\t/** Whether or not the condition is ignored by Baton Pass - only for pure conditions. */\r\n\tnoCopy: boolean;\r\n\t/** Whether or not the condition affects fainted Pokemon. */\r\n\taffectsFainted: boolean;\r\n\t/** Moves only: what status does it set? */\r\n\tstatus?: ID;\r\n\t/** Moves only: what weather does it set? */\r\n\tweather?: ID;\r\n\t/** ??? */\r\n\tsourceEffect: string;\r\n\r\n\tconstructor(data: AnyObject) {\r\n\t\tthis.exists = true;\r\n\t\tObject.assign(this, data);\r\n\r\n\t\tthis.name = Utils.getString(data.name).trim();\r\n\t\tthis.id = data.realMove ? toID(data.realMove) : toID(this.name); // Hidden Power hack\r\n\t\tthis.fullname = Utils.getString(data.fullname) || this.name;\r\n\t\tthis.effectType = Utils.getString(data.effectType) as EffectType || 'Condition';\r\n\t\tthis.exists = !!(this.exists && this.id);\r\n\t\tthis.num = data.num || 0;\r\n\t\tthis.gen = data.gen || 0;\r\n\t\tthis.shortDesc = data.shortDesc || '';\r\n\t\tthis.desc = data.desc || '';\r\n\t\tthis.isNonstandard = data.isNonstandard || null;\r\n\t\tthis.duration = data.duration;\r\n\t\tthis.noCopy = !!data.noCopy;\r\n\t\tthis.affectsFainted = !!data.affectsFainted;\r\n\t\tthis.status = data.status as ID || undefined;\r\n\t\tthis.weather = data.weather as ID || undefined;\r\n\t\tthis.sourceEffect = data.sourceEffect || '';\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.name;\r\n\t}\r\n}\r\n\r\nexport class Nature extends BasicEffect implements Readonly {\r\n\treadonly effectType: 'Nature';\r\n\treadonly plus?: StatIDExceptHP;\r\n\treadonly minus?: StatIDExceptHP;\r\n\tconstructor(data: AnyObject) {\r\n\t\tsuper(data);\r\n\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias\r\n\t\tdata = this;\r\n\r\n\t\tthis.fullname = `nature: ${this.name}`;\r\n\t\tthis.effectType = 'Nature';\r\n\t\tthis.gen = 3;\r\n\t\tthis.plus = data.plus || undefined;\r\n\t\tthis.minus = data.minus || undefined;\r\n\t}\r\n}\r\n\r\nexport class DexNatures {\r\n\treadonly dex: ModdedDex;\r\n\treadonly natureCache = new Map();\r\n\tallCache: readonly Nature[] | null = null;\r\n\r\n\tconstructor(dex: ModdedDex) {\r\n\t\tthis.dex = dex;\r\n\t}\r\n\r\n\tget(name: string | Nature): Nature {\r\n\t\tif (name && typeof name !== 'string') return name;\r\n\r\n\t\treturn this.getByID(toID(name));\r\n\t}\r\n\tgetByID(id: ID): Nature {\r\n\t\tlet nature = this.natureCache.get(id);\r\n\t\tif (nature) return nature;\r\n\r\n\t\tif (this.dex.data.Aliases.hasOwnProperty(id)) {\r\n\t\t\tnature = this.get(this.dex.data.Aliases[id]);\r\n\t\t\tif (nature.exists) {\r\n\t\t\t\tthis.natureCache.set(id, nature);\r\n\t\t\t}\r\n\t\t\treturn nature;\r\n\t\t}\r\n\t\tif (id && this.dex.data.Natures.hasOwnProperty(id)) {\r\n\t\t\tconst natureData = this.dex.data.Natures[id];\r\n\t\t\tnature = new Nature(natureData);\r\n\t\t\tif (nature.gen > this.dex.gen) nature.isNonstandard = 'Future';\r\n\t\t} else {\r\n\t\t\tnature = new Nature({name: id, exists: false});\r\n\t\t}\r\n\r\n\t\tif (nature.exists) this.natureCache.set(id, nature);\r\n\t\treturn nature;\r\n\t}\r\n\r\n\tall(): readonly Nature[] {\r\n\t\tif (this.allCache) return this.allCache;\r\n\t\tconst natures = [];\r\n\t\tfor (const id in this.dex.data.Natures) {\r\n\t\t\tnatures.push(this.getByID(id as ID));\r\n\t\t}\r\n\t\tthis.allCache = natures;\r\n\t\treturn this.allCache;\r\n\t}\r\n}\r\n\r\ntype TypeInfoEffectType = 'Type' | 'EffectType';\r\n\r\nexport class TypeInfo implements Readonly {\r\n\t/**\r\n\t * ID. This will be a lowercase version of the name with all the\r\n\t * non-alphanumeric characters removed. e.g. 'flying'\r\n\t */\r\n\treadonly id: ID;\r\n\t/** Name. e.g. 'Flying' */\r\n\treadonly name: string;\r\n\t/** Effect type. */\r\n\treadonly effectType: TypeInfoEffectType;\r\n\t/**\r\n\t * Does it exist? For historical reasons, when you use an accessor\r\n\t * for an effect that doesn't exist, you get a dummy effect that\r\n\t * doesn't do anything, and this field set to false.\r\n\t */\r\n\treadonly exists: boolean;\r\n\t/**\r\n\t * The generation of Pokemon game this was INTRODUCED (NOT\r\n\t * necessarily the current gen being simulated.) Not all effects\r\n\t * track generation; this will be 0 if not known.\r\n\t */\r\n\treadonly gen: number;\r\n\t/**\r\n\t * Set to 'Future' for types before they're released (like Fairy\r\n\t * in Gen 5 or Dark in Gen 1).\r\n\t */\r\n\treadonly isNonstandard: Nonstandard | null;\r\n\t/**\r\n\t * Type chart, attackingTypeName:result, effectid:result\r\n\t * result is: 0 = normal, 1 = weakness, 2 = resistance, 3 = immunity\r\n\t */\r\n\treadonly damageTaken: {[attackingTypeNameOrEffectid: string]: number};\r\n\t/** The IVs to get this Type Hidden Power (in gen 3 and later) */\r\n\treadonly HPivs: SparseStatsTable;\r\n\t/** The DVs to get this Type Hidden Power (in gen 2). */\r\n\treadonly HPdvs: SparseStatsTable;\r\n\r\n\tconstructor(data: AnyObject) {\r\n\t\tthis.exists = true;\r\n\t\tObject.assign(this, data);\r\n\r\n\t\tthis.name = data.name;\r\n\t\tthis.id = data.id;\r\n\t\tthis.effectType = Utils.getString(data.effectType) as TypeInfoEffectType || 'Type';\r\n\t\tthis.exists = !!(this.exists && this.id);\r\n\t\tthis.gen = data.gen || 0;\r\n\t\tthis.isNonstandard = data.isNonstandard || null;\r\n\t\tthis.damageTaken = data.damageTaken || {};\r\n\t\tthis.HPivs = data.HPivs || {};\r\n\t\tthis.HPdvs = data.HPdvs || {};\r\n\t}\r\n\r\n\ttoString() {\r\n\t\treturn this.name;\r\n\t}\r\n}\r\n\r\nexport class DexTypes {\r\n\treadonly dex: ModdedDex;\r\n\treadonly typeCache = new Map();\r\n\tallCache: readonly TypeInfo[] | null = null;\r\n\tnamesCache: readonly string[] | null = null;\r\n\r\n\tconstructor(dex: ModdedDex) {\r\n\t\tthis.dex = dex;\r\n\t}\r\n\r\n\tget(name: string | TypeInfo): TypeInfo {\r\n\t\tif (name && typeof name !== 'string') return name;\r\n\t\treturn this.getByID(toID(name));\r\n\t}\r\n\r\n\tgetByID(id: ID): TypeInfo {\r\n\t\tlet type = this.typeCache.get(id);\r\n\t\tif (type) return type;\r\n\r\n\t\tconst typeName = id.charAt(0).toUpperCase() + id.substr(1);\r\n\t\tif (typeName && this.dex.data.TypeChart.hasOwnProperty(id)) {\r\n\t\t\ttype = new TypeInfo({name: typeName, id, ...this.dex.data.TypeChart[id]});\r\n\t\t} else {\r\n\t\t\ttype = new TypeInfo({name: typeName, id, exists: false, effectType: 'EffectType'});\r\n\t\t}\r\n\r\n\t\tif (type.exists) this.typeCache.set(id, type);\r\n\t\treturn type;\r\n\t}\r\n\r\n\tnames(): readonly string[] {\r\n\t\tif (this.namesCache) return this.namesCache;\r\n\r\n\t\tthis.namesCache = this.all().filter(type => !type.isNonstandard).map(type => type.name);\r\n\r\n\t\treturn this.namesCache;\r\n\t}\r\n\r\n\tisName(name: string): boolean {\r\n\t\tconst id = name.toLowerCase();\r\n\t\tconst typeName = id.charAt(0).toUpperCase() + id.substr(1);\r\n\t\treturn name === typeName && this.dex.data.TypeChart.hasOwnProperty(id);\r\n\t}\r\n\r\n\tall(): readonly TypeInfo[] {\r\n\t\tif (this.allCache) return this.allCache;\r\n\t\tconst types = [];\r\n\t\tfor (const id in this.dex.data.TypeChart) {\r\n\t\t\ttypes.push(this.getByID(id as ID));\r\n\t\t}\r\n\t\tthis.allCache = types;\r\n\t\treturn this.allCache;\r\n\t}\r\n}\r\n\r\nconst idsCache: readonly StatID[] = ['hp', 'atk', 'def', 'spa', 'spd', 'spe'];\r\nconst reverseCache: {readonly [k: string]: StatID} = {\r\n\t__proto: null as any,\r\n\t\"hitpoints\": 'hp',\r\n\t\"attack\": 'atk',\r\n\t\"defense\": 'def',\r\n\t\"specialattack\": 'spa', \"spatk\": 'spa', \"spattack\": 'spa', \"specialatk\": 'spa',\r\n\t\"special\": 'spa', \"spc\": 'spa',\r\n\t\"specialdefense\": 'spd', \"spdef\": 'spd', \"spdefense\": 'spd', \"specialdef\": 'spd',\r\n\t\"speed\": 'spe',\r\n};\r\nexport class DexStats {\r\n\treadonly shortNames: {readonly [k in StatID]: string};\r\n\treadonly mediumNames: {readonly [k in StatID]: string};\r\n\treadonly names: {readonly [k in StatID]: string};\r\n\tconstructor(dex: ModdedDex) {\r\n\t\tif (dex.gen !== 1) {\r\n\t\t\tthis.shortNames = {\r\n\t\t\t\t__proto__: null, hp: \"HP\", atk: \"Atk\", def: \"Def\", spa: \"SpA\", spd: \"SpD\", spe: \"Spe\",\r\n\t\t\t} as any;\r\n\t\t\tthis.mediumNames = {\r\n\t\t\t\t__proto__: null, hp: \"HP\", atk: \"Attack\", def: \"Defense\", spa: \"Sp. Atk\", spd: \"Sp. Def\", spe: \"Speed\",\r\n\t\t\t} as any;\r\n\t\t\tthis.names = {\r\n\t\t\t\t__proto__: null, hp: \"HP\", atk: \"Attack\", def: \"Defense\", spa: \"Special Attack\", spd: \"Special Defense\", spe: \"Speed\",\r\n\t\t\t} as any;\r\n\t\t} else {\r\n\t\t\tthis.shortNames = {\r\n\t\t\t\t__proto__: null, hp: \"HP\", atk: \"Atk\", def: \"Def\", spa: \"Spc\", spd: \"[SpD]\", spe: \"Spe\",\r\n\t\t\t} as any;\r\n\t\t\tthis.mediumNames = {\r\n\t\t\t\t__proto__: null, hp: \"HP\", atk: \"Attack\", def: \"Defense\", spa: \"Special\", spd: \"[Sp. Def]\", spe: \"Speed\",\r\n\t\t\t} as any;\r\n\t\t\tthis.names = {\r\n\t\t\t\t__proto__: null, hp: \"HP\", atk: \"Attack\", def: \"Defense\", spa: \"Special\", spd: \"[Special Defense]\", spe: \"Speed\",\r\n\t\t\t} as any;\r\n\t\t}\r\n\t}\r\n\tgetID(name: string) {\r\n\t\tif (name === 'Spd') return 'spe' as StatID;\r\n\t\tconst id = toID(name);\r\n\t\tif (reverseCache[id]) return reverseCache[id];\r\n\t\tif (idsCache.includes(id as StatID)) return id as StatID;\r\n\t\treturn null;\r\n\t}\r\n\tids(): typeof idsCache {\r\n\t\treturn idsCache;\r\n\t}\r\n}\r\n"], "mappings": "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", "names": [] }