pokebedrock-showdown 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,7 +21,7 @@ If your `smell-of-curry` and you want to release a new version, you can do the f
21
21
  - **Reworked Config**: Modified to not use reading/writing to files as script api doesn't support that.
22
22
  - **Better Type Safety**: Added more specific type definitions throughout the codebase.
23
23
  - **ESM Compatibility**: Fixed compatibility issues with Minecraft Bedrock's Script API.
24
- - **Removed Dynamic Requires**: `sim/dex` now uses a static import map to avoid dynamic requires (which is not supported in Minecraft Bedrock's Script API).
24
+ - **Removed Dynamic Requires**: `sim/dex` & `sim/teams` now uses a static import map to avoid dynamic requires (which is not supported in Minecraft Bedrock's Script API).
25
25
 
26
26
  ### Pokemon Data & Features:
27
27
  - **UUID System**: Added a whole UUID system which allows pokemon to be searched easily by interpreter.
@@ -0,0 +1,2 @@
1
+ export declare const RandomBattlesMods: string[];
2
+ export declare const RandomBattlesModuleMap: Record<string, any>;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var random_battles_module_map_exports = {};
20
+ __export(random_battles_module_map_exports, {
21
+ RandomBattlesMods: () => RandomBattlesMods,
22
+ RandomBattlesModuleMap: () => RandomBattlesModuleMap
23
+ });
24
+ module.exports = __toCommonJS(random_battles_module_map_exports);
25
+ const RandomBattlesMods = [
26
+ "gen1",
27
+ "gen2",
28
+ "gen3",
29
+ "gen4",
30
+ "gen5",
31
+ "gen6",
32
+ "gen7",
33
+ "gen7letsgo",
34
+ "gen8",
35
+ "gen8bdsp",
36
+ "gen9",
37
+ "gen9baby",
38
+ "gen9cap",
39
+ "partnersincrime",
40
+ "randomroulette",
41
+ "sharedpower"
42
+ ];
43
+ const RandomBattlesModuleMap = {
44
+ "gen1": require("../data/random-battles/gen1/teams"),
45
+ "gen2": require("../data/random-battles/gen2/teams"),
46
+ "gen3": require("../data/random-battles/gen3/teams"),
47
+ "gen4": require("../data/random-battles/gen4/teams"),
48
+ "gen5": require("../data/random-battles/gen5/teams"),
49
+ "gen6": require("../data/random-battles/gen6/teams"),
50
+ "gen7": require("../data/random-battles/gen7/teams"),
51
+ "gen7letsgo": require("../data/random-battles/gen7letsgo/teams"),
52
+ "gen8": require("../data/random-battles/gen8/teams"),
53
+ "gen8bdsp": require("../data/random-battles/gen8bdsp/teams"),
54
+ "gen9": require("../data/random-battles/gen9/teams"),
55
+ "gen9baby": require("../data/random-battles/gen9baby/teams"),
56
+ "gen9cap": require("../data/random-battles/gen9cap/teams"),
57
+ "partnersincrime": require("../data/random-battles/partnersincrime/teams"),
58
+ "randomroulette": require("../data/random-battles/randomroulette/teams"),
59
+ "sharedpower": require("../data/random-battles/sharedpower/teams")
60
+ };
61
+ //# sourceMappingURL=random-battles-module-map.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../sim/random-battles-module-map.ts"],
4
+ "sourcesContent": ["// @pokebedrock - This file is AUTO-GENERATED by `tools/build-utils.js`.\n\nexport const RandomBattlesMods: string[] = [\n\t'gen1', 'gen2', 'gen3', 'gen4', 'gen5', 'gen6', 'gen7',\n\t'gen7letsgo', 'gen8', 'gen8bdsp', 'gen9', 'gen9baby', 'gen9cap', 'partnersincrime',\n\t'randomroulette', 'sharedpower',\n];\n\nexport const RandomBattlesModuleMap: Record<string, any> = {\n\t'gen1': require('../data/random-battles/gen1/teams'),\n\t'gen2': require('../data/random-battles/gen2/teams'),\n\t'gen3': require('../data/random-battles/gen3/teams'),\n\t'gen4': require('../data/random-battles/gen4/teams'),\n\t'gen5': require('../data/random-battles/gen5/teams'),\n\t'gen6': require('../data/random-battles/gen6/teams'),\n\t'gen7': require('../data/random-battles/gen7/teams'),\n\t'gen7letsgo': require('../data/random-battles/gen7letsgo/teams'),\n\t'gen8': require('../data/random-battles/gen8/teams'),\n\t'gen8bdsp': require('../data/random-battles/gen8bdsp/teams'),\n\t'gen9': require('../data/random-battles/gen9/teams'),\n\t'gen9baby': require('../data/random-battles/gen9baby/teams'),\n\t'gen9cap': require('../data/random-battles/gen9cap/teams'),\n\t'partnersincrime': require('../data/random-battles/partnersincrime/teams'),\n\t'randomroulette': require('../data/random-battles/randomroulette/teams'),\n\t'sharedpower': require('../data/random-battles/sharedpower/teams'),\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,oBAA8B;AAAA,EAC1C;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAChD;AAAA,EAAc;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAW;AAAA,EACjE;AAAA,EAAkB;AACnB;AAEO,MAAM,yBAA8C;AAAA,EAC1D,QAAQ,QAAQ,mCAAmC;AAAA,EACnD,QAAQ,QAAQ,mCAAmC;AAAA,EACnD,QAAQ,QAAQ,mCAAmC;AAAA,EACnD,QAAQ,QAAQ,mCAAmC;AAAA,EACnD,QAAQ,QAAQ,mCAAmC;AAAA,EACnD,QAAQ,QAAQ,mCAAmC;AAAA,EACnD,QAAQ,QAAQ,mCAAmC;AAAA,EACnD,cAAc,QAAQ,yCAAyC;AAAA,EAC/D,QAAQ,QAAQ,mCAAmC;AAAA,EACnD,YAAY,QAAQ,uCAAuC;AAAA,EAC3D,QAAQ,QAAQ,mCAAmC;AAAA,EACnD,YAAY,QAAQ,uCAAuC;AAAA,EAC3D,WAAW,QAAQ,sCAAsC;AAAA,EACzD,mBAAmB,QAAQ,8CAA8C;AAAA,EACzE,kBAAkB,QAAQ,6CAA6C;AAAA,EACvE,eAAe,QAAQ,0CAA0C;AAClE;",
6
+ "names": []
7
+ }
package/dist/sim/teams.js CHANGED
@@ -23,6 +23,7 @@ __export(teams_exports, {
23
23
  });
24
24
  module.exports = __toCommonJS(teams_exports);
25
25
  var import_dex = require("./dex");
26
+ var import_random_battles_module_map = require("./random-battles-module-map");
26
27
  /**
27
28
  * Teams
28
29
  * Pokemon Showdown - http://pokemonshowdown.com/
@@ -516,7 +517,7 @@ const Teams = new class Teams2 {
516
517
  } else if (formatID.includes("gen9randombattle") && format.ruleTable?.has("+pokemontag:cap")) {
517
518
  TeamGenerator = require("../data/random-battles/gen9cap/teams").default;
518
519
  } else {
519
- TeamGenerator = require(`../data/random-battles/${mod}/teams`).default;
520
+ TeamGenerator = import_random_battles_module_map.RandomBattlesModuleMap[mod];
520
521
  }
521
522
  return new TeamGenerator(format, seed);
522
523
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../sim/teams.ts"],
4
- "sourcesContent": ["/**\r\n * Teams\r\n * Pokemon Showdown - http://pokemonshowdown.com/\r\n *\r\n * Functions for converting and generating teams.\r\n *\r\n * @license MIT\r\n */\r\n\r\nimport { Dex, toID } from './dex';\r\nimport type { PRNG, PRNGSeed } from './prng';\r\n\r\n/**\r\n * Represents additional move data\r\n * @pokebedrock\r\n */\r\nexport interface AdditionalMoveInfo {\r\n\t/**\r\n\t * The maximum amount of PP the move has.\r\n\t */\r\n\tmaxPp: number;\r\n\t/**\r\n\t * The current amount of PP the move has.\r\n\t */\r\n\tpp: number;\r\n}\r\n\r\ninterface ExportOptions {\r\n\thideStats?: boolean;\r\n\tremoveNicknames?: boolean | ((nickname: string) => string | null);\r\n}\r\n\r\nexport interface PokemonSet {\r\n\t/**\r\n\t * Nickname. Should be identical to its base species if not specified\r\n\t * by the player, e.g. \"Minior\".\r\n\t */\r\n\tname: string;\r\n\t/**\r\n\t * Species name (including forme if applicable), e.g. \"Minior-Red\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\tspecies: string;\r\n\t/**\r\n * The unique id of the pokemon from @pokebedrock\r\n */\r\n\tuuid?: string;\r\n\t/**\r\n\t * The current health of the pokemon from @pokebedrock\r\n\t */\r\n\tcurrentHealth?: number;\r\n\t/**\r\n\t * The status of the pokemon from @pokebedrock\r\n\t */\r\n\tstatus?: string;\r\n\t/**\r\n\t * The duration of the status from @pokebedrock\r\n\t */\r\n\tstatusDuration?: number;\r\n\t/**\r\n\t * This can be an id, e.g. \"whiteherb\" or a full name, e.g. \"White Herb\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\titem: string;\r\n\t/**\r\n\t * This can be an id, e.g. \"shieldsdown\" or a full name,\r\n\t * e.g. \"Shields Down\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\tability: string;\r\n\t/**\r\n\t * Each move can be an id, e.g. \"shellsmash\" or a full name,\r\n\t * e.g. \"Shell Smash\"\r\n\t * These should always be converted to ids before use.\r\n\t */\r\n\tmoves: string[];\r\n\t/**\r\n\t * Passes in the maxPP and currentPP of the moves that the pokemon has in @pokebedrock\r\n\t */\r\n\tmovesInfo?: AdditionalMoveInfo[];\r\n\t/**\r\n\t * This can be an id, e.g. \"adamant\" or a full name, e.g. \"Adamant\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\tnature: string;\r\n\tgender: string;\r\n\t/**\r\n\t * Effort Values, used in stat calculation.\r\n\t * These must be between 0 and 255, inclusive.\r\n\t *\r\n\t * Also used to store AVs for Let's Go\r\n\t */\r\n\tevs: StatsTable;\r\n\t/**\r\n\t * Individual Values, used in stat calculation.\r\n\t * These must be between 0 and 31, inclusive.\r\n\t *\r\n\t * These are also used as DVs, or determinant values, in Gens\r\n\t * 1 and 2, which are represented as even numbers from 0 to 30.\r\n\t *\r\n\t * In Gen 2-6, these must match the Hidden Power type.\r\n\t *\r\n\t * In Gen 7+, Bottle Caps means these can either match the\r\n\t * Hidden Power type or 31.\r\n\t */\r\n\tivs: StatsTable;\r\n\t/**\r\n\t * This is usually between 1 and 100, inclusive,\r\n\t * but the simulator supports levels up to 9999 for testing purposes.\r\n\t */\r\n\tlevel: number;\r\n\t/**\r\n\t * While having no direct competitive effect, certain Pokemon cannot\r\n\t * be legally obtained as shiny, either as a whole or with certain\r\n\t * event-only abilities or moves.\r\n\t */\r\n\tshiny?: boolean;\r\n\t/**\r\n\t * This is technically \"Friendship\", but the community calls this\r\n\t * \"Happiness\".\r\n\t *\r\n\t * It's used to calculate the power of the moves Return and Frustration.\r\n\t * This value must be between 0 and 255, inclusive.\r\n\t */\r\n\thappiness?: number;\r\n\t/**\r\n\t * The pokeball this Pokemon is in. Like shininess, this property\r\n\t * has no direct competitive effects, but has implications for\r\n\t * event legality. For example, any Rayquaza that knows V-Create\r\n\t * must be sent out from a Cherish Ball.\r\n\t *\r\n\t * TODO: actually support this in the validator, switching animations,\r\n\t * and the teambuilder.\r\n\t */\r\n\tpokeball?: string;\r\n\t/**\r\n\t * Hidden Power type. Optional in older gens, but used in Gen 7+\r\n\t * because `ivs` contain post-Battle-Cap values.\r\n\t */\r\n\thpType?: string;\r\n\t/**\r\n\t * Dynamax Level. Affects the amount of HP gained when Dynamaxed.\r\n\t * This value must be between 0 and 10, inclusive.\r\n\t */\r\n\tdynamaxLevel?: number;\r\n\tgigantamax?: boolean;\r\n\t/**\r\n\t * Tera Type\r\n\t */\r\n\tteraType?: string;\r\n}\r\n\r\nexport const Teams = new class Teams {\r\n\tpack(team: PokemonSet[] | null): string {\r\n\t\tif (!team) return '';\r\n\r\n\t\tfunction getIv(ivs: StatsTable, s: keyof StatsTable): string {\r\n\t\t\treturn ivs[s] === 31 || ivs[s] === undefined ? '' : ivs[s].toString();\r\n\t\t}\r\n\r\n\t\tlet buf = '';\r\n\t\tfor (const set of team) {\r\n\t\t\tif (buf) buf += ']';\r\n\r\n\t\t\t// name\r\n\t\t\tbuf += (set.name || set.species);\r\n\r\n\t\t\t// species\r\n\t\t\tconst id = this.packName(set.species || set.name);\r\n\t\t\tbuf += `|${this.packName(set.name || set.species) === id ? '' : id}`;\r\n\r\n\t\t\t// item\r\n\t\t\tbuf += `|${this.packName(set.item)}`;\r\n\r\n\t\t\t// ability\r\n\t\t\tbuf += `|${this.packName(set.ability)}`;\r\n\r\n\t\t\t// moves\r\n\t\t\tbuf += '|' + set.moves.map(this.packName).join(',');\r\n\r\n\t\t\t// nature\r\n\t\t\tbuf += `|${set.nature || ''}`;\r\n\r\n\t\t\t// evs\r\n\t\t\tlet evs = '|';\r\n\t\t\tif (set.evs) {\r\n\t\t\t\tevs = `|${set.evs['hp'] || ''},${set.evs['atk'] || ''},${set.evs['def'] || ''},` +\r\n\t\t\t\t\t`${set.evs['spa'] || ''},${set.evs['spd'] || ''},${set.evs['spe'] || ''}`;\r\n\t\t\t}\r\n\t\t\tif (evs === '|,,,,,') {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t} else {\r\n\t\t\t\tbuf += evs;\r\n\t\t\t}\r\n\r\n\t\t\t// gender\r\n\t\t\tif (set.gender) {\r\n\t\t\t\tbuf += `|${set.gender}`;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\t// ivs\r\n\t\t\tlet ivs = '|';\r\n\t\t\tif (set.ivs) {\r\n\t\t\t\tivs = `|${getIv(set.ivs, 'hp')},${getIv(set.ivs, 'atk')},${getIv(set.ivs, 'def')},` +\r\n\t\t\t\t\t`${getIv(set.ivs, 'spa')},${getIv(set.ivs, 'spd')},${getIv(set.ivs, 'spe')}`;\r\n\t\t\t}\r\n\t\t\tif (ivs === '|,,,,,') {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t} else {\r\n\t\t\t\tbuf += ivs;\r\n\t\t\t}\r\n\r\n\t\t\t// shiny\r\n\t\t\tif (set.shiny) {\r\n\t\t\t\tbuf += '|S';\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\t// level\r\n\t\t\tif (set.level && set.level !== 100) {\r\n\t\t\t\tbuf += `|${set.level}`;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\t// happiness\r\n\t\t\tif (set.happiness !== undefined && set.happiness !== 255) {\r\n\t\t\t\tbuf += `|${set.happiness}`;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\tif (set.pokeball || set.hpType || set.gigantamax ||\r\n\t\t\t\t(set.dynamaxLevel !== undefined && set.dynamaxLevel !== 10) || set.teraType) {\r\n\t\t\t\tbuf += `,${set.hpType || ''}`;\r\n\t\t\t\tbuf += `,${this.packName(set.pokeball || '')}`;\r\n\t\t\t\tbuf += `,${set.gigantamax ? 'G' : ''}`;\r\n\t\t\t\tbuf += `,${set.dynamaxLevel !== undefined && set.dynamaxLevel !== 10 ? set.dynamaxLevel : ''}`;\r\n\t\t\t\tbuf += `,${set.teraType || ''}`;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn buf;\r\n\t}\r\n\r\n\tunpack(buf: string): PokemonSet[] | null {\r\n\t\tif (!buf) return null;\r\n\t\tif (typeof buf !== 'string') return buf;\r\n\t\tif (buf.startsWith('[') && buf.endsWith(']')) {\r\n\t\t\ttry {\r\n\t\t\t\tbuf = this.pack(JSON.parse(buf));\r\n\t\t\t} catch {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst team = [];\r\n\t\tlet i = 0;\r\n\t\tlet j = 0;\r\n\r\n\t\t// limit to 24\r\n\t\tfor (let count = 0; count < 24; count++) {\r\n\t\t\tconst set: PokemonSet = {} as PokemonSet;\r\n\t\t\tteam.push(set);\r\n\r\n\t\t\t// name\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.name = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// species\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.species = this.unpackName(buf.substring(i, j), Dex.species) || set.name;\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// uuid - @pokebedrock\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.uuid = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// currentHealth - @pokebedrock\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.currentHealth = parseInt(buf.substring(i, j));\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// status - @pokebedrock\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.status = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// item\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.item = this.unpackName(buf.substring(i, j), Dex.items);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// ability\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tconst ability = buf.substring(i, j);\r\n\t\t\tconst species = Dex.species.get(set.species);\r\n\t\t\tset.ability = ['', '0', '1', 'H', 'S'].includes(ability) ?\r\n\t\t\t\tspecies.abilities[ability as '0' || '0'] || (ability === '' ? '' : '!!!ERROR!!!') :\r\n\t\t\t\tthis.unpackName(ability, Dex.abilities);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// moves\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.moves = buf.substring(i, j).split(',', 24).map(name => this.unpackName(name, Dex.moves));\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// movesInfo - @pokebedrock\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.movesInfo = buf\r\n\t\t\t\t.substring(i, j)\r\n\t\t\t\t.split(',', 24)\r\n\t\t\t\t.map(moveData => {\r\n\t\t\t\t\tconst moveInfo: AdditionalMoveInfo = {} as AdditionalMoveInfo;\r\n\t\t\t\t\tconst data = moveData.split('/');\r\n\t\t\t\t\tmoveInfo.pp = parseInt(data[0]);\r\n\t\t\t\t\tmoveInfo.maxPp = parseInt(data[1]);\r\n\t\t\t\t\treturn moveInfo;\r\n\t\t\t\t});\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// nature\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.nature = this.unpackName(buf.substring(i, j), Dex.natures);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// evs\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (j !== i) {\r\n\t\t\t\tconst evs = buf.substring(i, j).split(',', 6);\r\n\t\t\t\tset.evs = {\r\n\t\t\t\t\thp: Number(evs[0]) || 0,\r\n\t\t\t\t\tatk: Number(evs[1]) || 0,\r\n\t\t\t\t\tdef: Number(evs[2]) || 0,\r\n\t\t\t\t\tspa: Number(evs[3]) || 0,\r\n\t\t\t\t\tspd: Number(evs[4]) || 0,\r\n\t\t\t\t\tspe: Number(evs[5]) || 0,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// gender\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (i !== j) set.gender = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// ivs\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (j !== i) {\r\n\t\t\t\tconst ivs = buf.substring(i, j).split(',', 6);\r\n\t\t\t\tset.ivs = {\r\n\t\t\t\t\thp: ivs[0] === '' ? 31 : Number(ivs[0]) || 0,\r\n\t\t\t\t\tatk: ivs[1] === '' ? 31 : Number(ivs[1]) || 0,\r\n\t\t\t\t\tdef: ivs[2] === '' ? 31 : Number(ivs[2]) || 0,\r\n\t\t\t\t\tspa: ivs[3] === '' ? 31 : Number(ivs[3]) || 0,\r\n\t\t\t\t\tspd: ivs[4] === '' ? 31 : Number(ivs[4]) || 0,\r\n\t\t\t\t\tspe: ivs[5] === '' ? 31 : Number(ivs[5]) || 0,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// shiny\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (i !== j) set.shiny = true;\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// level\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (i !== j) set.level = parseInt(buf.substring(i, j));\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// happiness\r\n\t\t\tj = buf.indexOf(']', i);\r\n\t\t\tlet misc;\r\n\t\t\tif (j < 0) {\r\n\t\t\t\tif (i < buf.length) misc = buf.substring(i).split(',', 6);\r\n\t\t\t} else {\r\n\t\t\t\tif (i !== j) misc = buf.substring(i, j).split(',', 6);\r\n\t\t\t}\r\n\t\t\tif (misc) {\r\n\t\t\t\tset.happiness = (misc[0] ? Number(misc[0]) : 255);\r\n\t\t\t\tset.hpType = misc[1] || '';\r\n\t\t\t\tset.pokeball = this.unpackName(misc[2] || '', Dex.items);\r\n\t\t\t\tset.gigantamax = !!misc[3];\r\n\t\t\t\tset.dynamaxLevel = (misc[4] ? Number(misc[4]) : 10);\r\n\t\t\t\tset.teraType = misc[5];\r\n\t\t\t}\r\n\t\t\tif (j < 0) break;\r\n\t\t\ti = j + 1;\r\n\t\t}\r\n\r\n\t\treturn team;\r\n\t}\r\n\r\n\t/** Very similar to toID but without the lowercase conversion */\r\n\tpackName(this: void, name: string | undefined | null) {\r\n\t\tif (!name) return '';\r\n\t\treturn name.replace(/[^A-Za-z0-9]+/g, '');\r\n\t}\r\n\r\n\t/** Will not entirely recover a packed name, but will be a pretty readable guess */\r\n\tunpackName(name: string, dexTable?: { get: (name: string) => AnyObject }) {\r\n\t\tif (!name) return '';\r\n\t\tif (dexTable) {\r\n\t\t\tconst obj = dexTable.get(name);\r\n\t\t\tif (obj.exists) return obj.name;\r\n\t\t}\r\n\t\treturn name.replace(/([0-9]+)/g, ' $1 ').replace(/([A-Z])/g, ' $1').replace(/[ ][ ]/g, ' ').trim();\r\n\t}\r\n\r\n\t/**\r\n\t * Exports a team in human-readable PS export format\r\n\t */\r\n\texport(team: PokemonSet[], options?: ExportOptions) {\r\n\t\tlet output = '';\r\n\t\tfor (const set of team) {\r\n\t\t\toutput += this.exportSet(set, options) + `\\n`;\r\n\t\t}\r\n\t\treturn output;\r\n\t}\r\n\r\n\texportSet(set: PokemonSet, { hideStats, removeNicknames }: ExportOptions = {}) {\r\n\t\tlet out = ``;\r\n\r\n\t\t// core\r\n\t\tif (typeof removeNicknames === 'function' && set.name && set.name !== set.species) {\r\n\t\t\tset.name = removeNicknames(set.name) || set.species;\r\n\t\t}\r\n\t\tif (set.name && set.name !== set.species && removeNicknames !== true) {\r\n\t\t\tout += `${set.name} (${set.species})`;\r\n\t\t} else {\r\n\t\t\tout += set.species;\r\n\t\t}\r\n\t\tif (set.gender === 'M') out += ` (M)`;\r\n\t\tif (set.gender === 'F') out += ` (F)`;\r\n\t\tif (set.item) out += ` @ ${set.item}`;\r\n\t\tout += ` \\n`;\r\n\r\n\t\tif (set.ability) {\r\n\t\t\tout += `Ability: ${set.ability} \\n`;\r\n\t\t}\r\n\r\n\t\t// details\r\n\t\tif (set.level && set.level !== 100) {\r\n\t\t\tout += `Level: ${set.level} \\n`;\r\n\t\t}\r\n\t\tif (set.shiny) {\r\n\t\t\tout += `Shiny: Yes \\n`;\r\n\t\t}\r\n\t\tif (typeof set.happiness === 'number' && set.happiness !== 255 && !isNaN(set.happiness)) {\r\n\t\t\tout += `Happiness: ${set.happiness} \\n`;\r\n\t\t}\r\n\t\tif (set.pokeball) {\r\n\t\t\tout += `Pokeball: ${set.pokeball} \\n`;\r\n\t\t}\r\n\t\tif (set.hpType) {\r\n\t\t\tout += `Hidden Power: ${set.hpType} \\n`;\r\n\t\t}\r\n\t\tif (typeof set.dynamaxLevel === 'number' && set.dynamaxLevel !== 10 && !isNaN(set.dynamaxLevel)) {\r\n\t\t\tout += `Dynamax Level: ${set.dynamaxLevel} \\n`;\r\n\t\t}\r\n\t\tif (set.gigantamax) {\r\n\t\t\tout += `Gigantamax: Yes \\n`;\r\n\t\t}\r\n\t\tif (set.teraType) {\r\n\t\t\tout += `Tera Type: ${set.teraType} \\n`;\r\n\t\t}\r\n\r\n\t\t// stats\r\n\t\tif (!hideStats) {\r\n\t\t\tif (set.evs) {\r\n\t\t\t\tconst stats = Dex.stats.ids().map(\r\n\t\t\t\t\tstat => set.evs[stat] ?\r\n\t\t\t\t\t\t`${set.evs[stat]} ${Dex.stats.shortNames[stat]}` : ``\r\n\t\t\t\t).filter(Boolean);\r\n\t\t\t\tif (stats.length) {\r\n\t\t\t\t\tout += `EVs: ${stats.join(\" / \")} \\n`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (set.nature) {\r\n\t\t\t\tout += `${set.nature} Nature \\n`;\r\n\t\t\t}\r\n\t\t\tif (set.ivs) {\r\n\t\t\t\tconst stats = Dex.stats.ids().map(\r\n\t\t\t\t\tstat => (set.ivs[stat] !== 31 && set.ivs[stat] !== undefined) ?\r\n\t\t\t\t\t\t`${set.ivs[stat] || 0} ${Dex.stats.shortNames[stat]}` : ``\r\n\t\t\t\t).filter(Boolean);\r\n\t\t\t\tif (stats.length) {\r\n\t\t\t\t\tout += `IVs: ${stats.join(\" / \")} \\n`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// moves\r\n\t\tfor (let move of set.moves) {\r\n\t\t\tif (move.startsWith(`Hidden Power `) && move.charAt(13) !== '[') {\r\n\t\t\t\tmove = `Hidden Power [${move.slice(13)}]`;\r\n\t\t\t}\r\n\t\t\tout += `- ${move} \\n`;\r\n\t\t}\r\n\r\n\t\treturn out;\r\n\t}\r\n\r\n\tparseExportedTeamLine(line: string, isFirstLine: boolean, set: PokemonSet, aggressive?: boolean) {\r\n\t\tif (isFirstLine) {\r\n\t\t\tlet item;\r\n\t\t\t[line, item] = line.split(' @ ');\r\n\t\t\tif (item) {\r\n\t\t\t\tset.item = item;\r\n\t\t\t\tif (toID(set.item) === 'noitem') set.item = '';\r\n\t\t\t}\r\n\t\t\tif (line.endsWith(' (M)')) {\r\n\t\t\t\tset.gender = 'M';\r\n\t\t\t\tline = line.slice(0, -4);\r\n\t\t\t}\r\n\t\t\tif (line.endsWith(' (F)')) {\r\n\t\t\t\tset.gender = 'F';\r\n\t\t\t\tline = line.slice(0, -4);\r\n\t\t\t}\r\n\t\t\tif (line.endsWith(')') && line.includes('(')) {\r\n\t\t\t\tconst [name, species] = line.slice(0, -1).split('(');\r\n\t\t\t\tset.species = Dex.species.get(species).name;\r\n\t\t\t\tset.name = name.trim();\r\n\t\t\t} else {\r\n\t\t\t\tset.species = Dex.species.get(line).name;\r\n\t\t\t\tset.name = '';\r\n\t\t\t}\r\n\t\t} else if (line.startsWith('Trait: ')) {\r\n\t\t\tline = line.slice(7);\r\n\t\t\tset.ability = aggressive ? toID(line) : line;\r\n\t\t} else if (line.startsWith('Ability: ')) {\r\n\t\t\tline = line.slice(9);\r\n\t\t\tset.ability = aggressive ? toID(line) : line;\r\n\t\t} else if (line === 'Shiny: Yes') {\r\n\t\t\tset.shiny = true;\r\n\t\t} else if (line.startsWith('Level: ')) {\r\n\t\t\tline = line.slice(7);\r\n\t\t\tset.level = +line;\r\n\t\t} else if (line.startsWith('Happiness: ')) {\r\n\t\t\tline = line.slice(11);\r\n\t\t\tset.happiness = +line;\r\n\t\t} else if (line.startsWith('Pokeball: ')) {\r\n\t\t\tline = line.slice(10);\r\n\t\t\tset.pokeball = aggressive ? toID(line) : line;\r\n\t\t} else if (line.startsWith('Hidden Power: ')) {\r\n\t\t\tline = line.slice(14);\r\n\t\t\tset.hpType = aggressive ? toID(line) : line;\r\n\t\t} else if (line.startsWith('Tera Type: ')) {\r\n\t\t\tline = line.slice(11);\r\n\t\t\tset.teraType = aggressive ? line.replace(/[^a-zA-Z0-9]/g, '') : line;\r\n\t\t} else if (line === 'Gigantamax: Yes') {\r\n\t\t\tset.gigantamax = true;\r\n\t\t} else if (line.startsWith('EVs: ')) {\r\n\t\t\tline = line.slice(5);\r\n\t\t\tconst evLines = line.split('/');\r\n\t\t\tset.evs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };\r\n\t\t\tfor (const evLine of evLines) {\r\n\t\t\t\tconst [statValue, statName] = evLine.trim().split(' ');\r\n\t\t\t\tconst statid = Dex.stats.getID(statName);\r\n\t\t\t\tif (!statid) continue;\r\n\t\t\t\tconst value = parseInt(statValue);\r\n\t\t\t\tset.evs[statid] = value;\r\n\t\t\t}\r\n\t\t} else if (line.startsWith('IVs: ')) {\r\n\t\t\tline = line.slice(5);\r\n\t\t\tconst ivLines = line.split('/');\r\n\t\t\tset.ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };\r\n\t\t\tfor (const ivLine of ivLines) {\r\n\t\t\t\tconst [statValue, statName] = ivLine.trim().split(' ');\r\n\t\t\t\tconst statid = Dex.stats.getID(statName);\r\n\t\t\t\tif (!statid) continue;\r\n\t\t\t\tlet value = parseInt(statValue);\r\n\t\t\t\tif (isNaN(value)) value = 31;\r\n\t\t\t\tset.ivs[statid] = value;\r\n\t\t\t}\r\n\t\t} else if (/^[A-Za-z]+ (N|n)ature/.test(line)) {\r\n\t\t\tlet natureIndex = line.indexOf(' Nature');\r\n\t\t\tif (natureIndex === -1) natureIndex = line.indexOf(' nature');\r\n\t\t\tif (natureIndex === -1) return;\r\n\t\t\tline = line.substr(0, natureIndex);\r\n\t\t\tif (line !== 'undefined') set.nature = aggressive ? toID(line) : line;\r\n\t\t} else if (line.startsWith('-') || line.startsWith('~')) {\r\n\t\t\tline = line.slice(line.charAt(1) === ' ' ? 2 : 1);\r\n\t\t\tif (line.startsWith('Hidden Power [')) {\r\n\t\t\t\tconst hpType = line.slice(14, -1);\r\n\t\t\t\tline = 'Hidden Power ' + hpType;\r\n\t\t\t\tif (!set.ivs && Dex.types.isName(hpType)) {\r\n\t\t\t\t\tset.ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };\r\n\t\t\t\t\tconst hpIVs = Dex.types.get(hpType).HPivs || {};\r\n\t\t\t\t\tfor (const statid in hpIVs) {\r\n\t\t\t\t\t\tset.ivs[statid as StatID] = hpIVs[statid as StatID]!;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (line === 'Frustration' && set.happiness === undefined) {\r\n\t\t\t\tset.happiness = 0;\r\n\t\t\t}\r\n\t\t\tset.moves.push(line);\r\n\t\t}\r\n\t}\r\n\t/** Accepts a team in any format (JSON, packed, or exported) */\r\n\timport(buffer: string, aggressive?: boolean): PokemonSet[] | null {\r\n\t\tconst sanitize = aggressive ? toID : Dex.getName;\r\n\t\tif (buffer.startsWith('[')) {\r\n\t\t\ttry {\r\n\t\t\t\tconst team = JSON.parse(buffer);\r\n\t\t\t\tif (!Array.isArray(team)) throw new Error(`Team should be an Array but isn't`);\r\n\t\t\t\tfor (const set of team) {\r\n\t\t\t\t\tset.name = sanitize(set.name);\r\n\t\t\t\t\tset.species = sanitize(set.species);\r\n\t\t\t\t\tset.item = sanitize(set.item);\r\n\t\t\t\t\tset.ability = sanitize(set.ability);\r\n\t\t\t\t\tset.gender = sanitize(set.gender);\r\n\t\t\t\t\tset.nature = sanitize(set.nature);\r\n\t\t\t\t\tconst evs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };\r\n\t\t\t\t\tif (set.evs) {\r\n\t\t\t\t\t\tfor (const statid in evs) {\r\n\t\t\t\t\t\t\tif (typeof set.evs[statid] === 'number') evs[statid as StatID] = set.evs[statid];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tset.evs = evs;\r\n\t\t\t\t\tconst ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };\r\n\t\t\t\t\tif (set.ivs) {\r\n\t\t\t\t\t\tfor (const statid in ivs) {\r\n\t\t\t\t\t\t\tif (typeof set.ivs[statid] === 'number') ivs[statid as StatID] = set.ivs[statid];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tset.ivs = ivs;\r\n\t\t\t\t\tif (!Array.isArray(set.moves)) {\r\n\t\t\t\t\t\tset.moves = [];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tset.moves = set.moves.map(sanitize);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn team;\r\n\t\t\t} catch {}\r\n\t\t}\r\n\r\n\t\tconst lines = buffer.split(\"\\n\");\r\n\r\n\t\tconst sets: PokemonSet[] = [];\r\n\t\tlet curSet: PokemonSet | null = null;\r\n\r\n\t\twhile (lines.length && !lines[0]) lines.shift();\r\n\t\twhile (lines.length && !lines[lines.length - 1]) lines.pop();\r\n\r\n\t\tif (lines.length === 1 && lines[0].includes('|')) {\r\n\t\t\treturn this.unpack(lines[0]);\r\n\t\t}\r\n\t\tfor (let line of lines) {\r\n\t\t\tline = line.trim();\r\n\t\t\tif (line === '' || line === '---') {\r\n\t\t\t\tcurSet = null;\r\n\t\t\t} else if (line.startsWith('===')) {\r\n\t\t\t\t// team backup format; ignore\r\n\t\t\t} else if (!curSet) {\r\n\t\t\t\tcurSet = {\r\n\t\t\t\t\tname: '', species: '', item: '', ability: '', gender: '',\r\n\t\t\t\t\tnature: '',\r\n\t\t\t\t\tevs: { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 },\r\n\t\t\t\t\tivs: { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 },\r\n\t\t\t\t\tlevel: 100,\r\n\t\t\t\t\tmoves: [],\r\n\t\t\t\t};\r\n\t\t\t\tsets.push(curSet);\r\n\t\t\t\tthis.parseExportedTeamLine(line, true, curSet, aggressive);\r\n\t\t\t} else {\r\n\t\t\t\tthis.parseExportedTeamLine(line, false, curSet, aggressive);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn sets;\r\n\t}\r\n\r\n\tgetGenerator(format: Format | string, seed: PRNG | PRNGSeed | null = null) {\r\n\t\tlet TeamGenerator;\r\n\t\tformat = Dex.formats.get(format);\r\n\t\tlet mod = format.mod;\r\n\t\tif (format.mod === 'monkeyspaw') mod = 'gen9';\r\n\t\tconst formatID = toID(format);\r\n\t\tif (formatID.includes('gen9computergeneratedteams')) {\r\n\t\t\tTeamGenerator = require(Dex.forFormat(format).dataDir + '/cg-teams').default;\r\n\t\t} else if (mod === 'gen9ssb') {\r\n\t\t\tTeamGenerator = require(`../data/mods/gen9ssb/random-teams`).default;\r\n\t\t} else if (mod === 'ccapm2024') {\r\n\t\t\tTeamGenerator = require(`../data/mods/ccapm2024/random-teams`).default;\r\n\t\t} else if (mod === 'balls') {\r\n\t\t\tTeamGenerator = require(`../data/mods/balls/random-teams`).default;\r\n\t\t} else if (formatID.includes('gen9babyrandombattle')) {\r\n\t\t\tTeamGenerator = require(`../data/random-battles/gen9baby/teams`).default;\r\n\t\t} else if (formatID.includes('gen9randombattle') && format.ruleTable?.has('+pokemontag:cap')) {\r\n\t\t\tTeamGenerator = require(`../data/random-battles/gen9cap/teams`).default;\r\n\t\t} else {\r\n\t\t\tTeamGenerator = require(`../data/random-battles/${mod}/teams`).default;\r\n\t\t}\r\n\r\n\t\treturn new TeamGenerator(format, seed);\r\n\t}\r\n\r\n\tgenerate(format: Format | string, options: PlayerOptions | null = null): PokemonSet[] {\r\n\t\treturn this.getGenerator(format, options?.seed).getTeam(options);\r\n\t}\r\n};\r\n\r\nexport default Teams;\r\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\r\n * Teams\r\n * Pokemon Showdown - http://pokemonshowdown.com/\r\n *\r\n * Functions for converting and generating teams.\r\n *\r\n * @license MIT\r\n */\r\n\r\nimport { Dex, toID } from './dex';\r\nimport type { PRNG, PRNGSeed } from './prng';\r\nimport { RandomBattlesModuleMap } from './random-battles-module-map';\r\n\r\n/**\r\n * Represents additional move data\r\n * @pokebedrock\r\n */\r\nexport interface AdditionalMoveInfo {\r\n\t/**\r\n\t * The maximum amount of PP the move has.\r\n\t */\r\n\tmaxPp: number;\r\n\t/**\r\n\t * The current amount of PP the move has.\r\n\t */\r\n\tpp: number;\r\n}\r\n\r\ninterface ExportOptions {\r\n\thideStats?: boolean;\r\n\tremoveNicknames?: boolean | ((nickname: string) => string | null);\r\n}\r\n\r\nexport interface PokemonSet {\r\n\t/**\r\n\t * Nickname. Should be identical to its base species if not specified\r\n\t * by the player, e.g. \"Minior\".\r\n\t */\r\n\tname: string;\r\n\t/**\r\n\t * Species name (including forme if applicable), e.g. \"Minior-Red\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\tspecies: string;\r\n\t/**\r\n * The unique id of the pokemon from @pokebedrock\r\n */\r\n\tuuid?: string;\r\n\t/**\r\n\t * The current health of the pokemon from @pokebedrock\r\n\t */\r\n\tcurrentHealth?: number;\r\n\t/**\r\n\t * The status of the pokemon from @pokebedrock\r\n\t */\r\n\tstatus?: string;\r\n\t/**\r\n\t * The duration of the status from @pokebedrock\r\n\t */\r\n\tstatusDuration?: number;\r\n\t/**\r\n\t * This can be an id, e.g. \"whiteherb\" or a full name, e.g. \"White Herb\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\titem: string;\r\n\t/**\r\n\t * This can be an id, e.g. \"shieldsdown\" or a full name,\r\n\t * e.g. \"Shields Down\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\tability: string;\r\n\t/**\r\n\t * Each move can be an id, e.g. \"shellsmash\" or a full name,\r\n\t * e.g. \"Shell Smash\"\r\n\t * These should always be converted to ids before use.\r\n\t */\r\n\tmoves: string[];\r\n\t/**\r\n\t * Passes in the maxPP and currentPP of the moves that the pokemon has in @pokebedrock\r\n\t */\r\n\tmovesInfo?: AdditionalMoveInfo[];\r\n\t/**\r\n\t * This can be an id, e.g. \"adamant\" or a full name, e.g. \"Adamant\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\tnature: string;\r\n\tgender: string;\r\n\t/**\r\n\t * Effort Values, used in stat calculation.\r\n\t * These must be between 0 and 255, inclusive.\r\n\t *\r\n\t * Also used to store AVs for Let's Go\r\n\t */\r\n\tevs: StatsTable;\r\n\t/**\r\n\t * Individual Values, used in stat calculation.\r\n\t * These must be between 0 and 31, inclusive.\r\n\t *\r\n\t * These are also used as DVs, or determinant values, in Gens\r\n\t * 1 and 2, which are represented as even numbers from 0 to 30.\r\n\t *\r\n\t * In Gen 2-6, these must match the Hidden Power type.\r\n\t *\r\n\t * In Gen 7+, Bottle Caps means these can either match the\r\n\t * Hidden Power type or 31.\r\n\t */\r\n\tivs: StatsTable;\r\n\t/**\r\n\t * This is usually between 1 and 100, inclusive,\r\n\t * but the simulator supports levels up to 9999 for testing purposes.\r\n\t */\r\n\tlevel: number;\r\n\t/**\r\n\t * While having no direct competitive effect, certain Pokemon cannot\r\n\t * be legally obtained as shiny, either as a whole or with certain\r\n\t * event-only abilities or moves.\r\n\t */\r\n\tshiny?: boolean;\r\n\t/**\r\n\t * This is technically \"Friendship\", but the community calls this\r\n\t * \"Happiness\".\r\n\t *\r\n\t * It's used to calculate the power of the moves Return and Frustration.\r\n\t * This value must be between 0 and 255, inclusive.\r\n\t */\r\n\thappiness?: number;\r\n\t/**\r\n\t * The pokeball this Pokemon is in. Like shininess, this property\r\n\t * has no direct competitive effects, but has implications for\r\n\t * event legality. For example, any Rayquaza that knows V-Create\r\n\t * must be sent out from a Cherish Ball.\r\n\t *\r\n\t * TODO: actually support this in the validator, switching animations,\r\n\t * and the teambuilder.\r\n\t */\r\n\tpokeball?: string;\r\n\t/**\r\n\t * Hidden Power type. Optional in older gens, but used in Gen 7+\r\n\t * because `ivs` contain post-Battle-Cap values.\r\n\t */\r\n\thpType?: string;\r\n\t/**\r\n\t * Dynamax Level. Affects the amount of HP gained when Dynamaxed.\r\n\t * This value must be between 0 and 10, inclusive.\r\n\t */\r\n\tdynamaxLevel?: number;\r\n\tgigantamax?: boolean;\r\n\t/**\r\n\t * Tera Type\r\n\t */\r\n\tteraType?: string;\r\n}\r\n\r\nexport const Teams = new class Teams {\r\n\tpack(team: PokemonSet[] | null): string {\r\n\t\tif (!team) return '';\r\n\r\n\t\tfunction getIv(ivs: StatsTable, s: keyof StatsTable): string {\r\n\t\t\treturn ivs[s] === 31 || ivs[s] === undefined ? '' : ivs[s].toString();\r\n\t\t}\r\n\r\n\t\tlet buf = '';\r\n\t\tfor (const set of team) {\r\n\t\t\tif (buf) buf += ']';\r\n\r\n\t\t\t// name\r\n\t\t\tbuf += (set.name || set.species);\r\n\r\n\t\t\t// species\r\n\t\t\tconst id = this.packName(set.species || set.name);\r\n\t\t\tbuf += `|${this.packName(set.name || set.species) === id ? '' : id}`;\r\n\r\n\t\t\t// item\r\n\t\t\tbuf += `|${this.packName(set.item)}`;\r\n\r\n\t\t\t// ability\r\n\t\t\tbuf += `|${this.packName(set.ability)}`;\r\n\r\n\t\t\t// moves\r\n\t\t\tbuf += '|' + set.moves.map(this.packName).join(',');\r\n\r\n\t\t\t// nature\r\n\t\t\tbuf += `|${set.nature || ''}`;\r\n\r\n\t\t\t// evs\r\n\t\t\tlet evs = '|';\r\n\t\t\tif (set.evs) {\r\n\t\t\t\tevs = `|${set.evs['hp'] || ''},${set.evs['atk'] || ''},${set.evs['def'] || ''},` +\r\n\t\t\t\t\t`${set.evs['spa'] || ''},${set.evs['spd'] || ''},${set.evs['spe'] || ''}`;\r\n\t\t\t}\r\n\t\t\tif (evs === '|,,,,,') {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t} else {\r\n\t\t\t\tbuf += evs;\r\n\t\t\t}\r\n\r\n\t\t\t// gender\r\n\t\t\tif (set.gender) {\r\n\t\t\t\tbuf += `|${set.gender}`;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\t// ivs\r\n\t\t\tlet ivs = '|';\r\n\t\t\tif (set.ivs) {\r\n\t\t\t\tivs = `|${getIv(set.ivs, 'hp')},${getIv(set.ivs, 'atk')},${getIv(set.ivs, 'def')},` +\r\n\t\t\t\t\t`${getIv(set.ivs, 'spa')},${getIv(set.ivs, 'spd')},${getIv(set.ivs, 'spe')}`;\r\n\t\t\t}\r\n\t\t\tif (ivs === '|,,,,,') {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t} else {\r\n\t\t\t\tbuf += ivs;\r\n\t\t\t}\r\n\r\n\t\t\t// shiny\r\n\t\t\tif (set.shiny) {\r\n\t\t\t\tbuf += '|S';\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\t// level\r\n\t\t\tif (set.level && set.level !== 100) {\r\n\t\t\t\tbuf += `|${set.level}`;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\t// happiness\r\n\t\t\tif (set.happiness !== undefined && set.happiness !== 255) {\r\n\t\t\t\tbuf += `|${set.happiness}`;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\tif (set.pokeball || set.hpType || set.gigantamax ||\r\n\t\t\t\t(set.dynamaxLevel !== undefined && set.dynamaxLevel !== 10) || set.teraType) {\r\n\t\t\t\tbuf += `,${set.hpType || ''}`;\r\n\t\t\t\tbuf += `,${this.packName(set.pokeball || '')}`;\r\n\t\t\t\tbuf += `,${set.gigantamax ? 'G' : ''}`;\r\n\t\t\t\tbuf += `,${set.dynamaxLevel !== undefined && set.dynamaxLevel !== 10 ? set.dynamaxLevel : ''}`;\r\n\t\t\t\tbuf += `,${set.teraType || ''}`;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn buf;\r\n\t}\r\n\r\n\tunpack(buf: string): PokemonSet[] | null {\r\n\t\tif (!buf) return null;\r\n\t\tif (typeof buf !== 'string') return buf;\r\n\t\tif (buf.startsWith('[') && buf.endsWith(']')) {\r\n\t\t\ttry {\r\n\t\t\t\tbuf = this.pack(JSON.parse(buf));\r\n\t\t\t} catch {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst team = [];\r\n\t\tlet i = 0;\r\n\t\tlet j = 0;\r\n\r\n\t\t// limit to 24\r\n\t\tfor (let count = 0; count < 24; count++) {\r\n\t\t\tconst set: PokemonSet = {} as PokemonSet;\r\n\t\t\tteam.push(set);\r\n\r\n\t\t\t// name\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.name = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// species\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.species = this.unpackName(buf.substring(i, j), Dex.species) || set.name;\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// uuid - @pokebedrock\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.uuid = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// currentHealth - @pokebedrock\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.currentHealth = parseInt(buf.substring(i, j));\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// status - @pokebedrock\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.status = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// item\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.item = this.unpackName(buf.substring(i, j), Dex.items);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// ability\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tconst ability = buf.substring(i, j);\r\n\t\t\tconst species = Dex.species.get(set.species);\r\n\t\t\tset.ability = ['', '0', '1', 'H', 'S'].includes(ability) ?\r\n\t\t\t\tspecies.abilities[ability as '0' || '0'] || (ability === '' ? '' : '!!!ERROR!!!') :\r\n\t\t\t\tthis.unpackName(ability, Dex.abilities);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// moves\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.moves = buf.substring(i, j).split(',', 24).map(name => this.unpackName(name, Dex.moves));\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// movesInfo - @pokebedrock\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.movesInfo = buf\r\n\t\t\t\t.substring(i, j)\r\n\t\t\t\t.split(',', 24)\r\n\t\t\t\t.map(moveData => {\r\n\t\t\t\t\tconst moveInfo: AdditionalMoveInfo = {} as AdditionalMoveInfo;\r\n\t\t\t\t\tconst data = moveData.split('/');\r\n\t\t\t\t\tmoveInfo.pp = parseInt(data[0]);\r\n\t\t\t\t\tmoveInfo.maxPp = parseInt(data[1]);\r\n\t\t\t\t\treturn moveInfo;\r\n\t\t\t\t});\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// nature\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.nature = this.unpackName(buf.substring(i, j), Dex.natures);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// evs\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (j !== i) {\r\n\t\t\t\tconst evs = buf.substring(i, j).split(',', 6);\r\n\t\t\t\tset.evs = {\r\n\t\t\t\t\thp: Number(evs[0]) || 0,\r\n\t\t\t\t\tatk: Number(evs[1]) || 0,\r\n\t\t\t\t\tdef: Number(evs[2]) || 0,\r\n\t\t\t\t\tspa: Number(evs[3]) || 0,\r\n\t\t\t\t\tspd: Number(evs[4]) || 0,\r\n\t\t\t\t\tspe: Number(evs[5]) || 0,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// gender\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (i !== j) set.gender = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// ivs\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (j !== i) {\r\n\t\t\t\tconst ivs = buf.substring(i, j).split(',', 6);\r\n\t\t\t\tset.ivs = {\r\n\t\t\t\t\thp: ivs[0] === '' ? 31 : Number(ivs[0]) || 0,\r\n\t\t\t\t\tatk: ivs[1] === '' ? 31 : Number(ivs[1]) || 0,\r\n\t\t\t\t\tdef: ivs[2] === '' ? 31 : Number(ivs[2]) || 0,\r\n\t\t\t\t\tspa: ivs[3] === '' ? 31 : Number(ivs[3]) || 0,\r\n\t\t\t\t\tspd: ivs[4] === '' ? 31 : Number(ivs[4]) || 0,\r\n\t\t\t\t\tspe: ivs[5] === '' ? 31 : Number(ivs[5]) || 0,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// shiny\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (i !== j) set.shiny = true;\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// level\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (i !== j) set.level = parseInt(buf.substring(i, j));\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// happiness\r\n\t\t\tj = buf.indexOf(']', i);\r\n\t\t\tlet misc;\r\n\t\t\tif (j < 0) {\r\n\t\t\t\tif (i < buf.length) misc = buf.substring(i).split(',', 6);\r\n\t\t\t} else {\r\n\t\t\t\tif (i !== j) misc = buf.substring(i, j).split(',', 6);\r\n\t\t\t}\r\n\t\t\tif (misc) {\r\n\t\t\t\tset.happiness = (misc[0] ? Number(misc[0]) : 255);\r\n\t\t\t\tset.hpType = misc[1] || '';\r\n\t\t\t\tset.pokeball = this.unpackName(misc[2] || '', Dex.items);\r\n\t\t\t\tset.gigantamax = !!misc[3];\r\n\t\t\t\tset.dynamaxLevel = (misc[4] ? Number(misc[4]) : 10);\r\n\t\t\t\tset.teraType = misc[5];\r\n\t\t\t}\r\n\t\t\tif (j < 0) break;\r\n\t\t\ti = j + 1;\r\n\t\t}\r\n\r\n\t\treturn team;\r\n\t}\r\n\r\n\t/** Very similar to toID but without the lowercase conversion */\r\n\tpackName(this: void, name: string | undefined | null) {\r\n\t\tif (!name) return '';\r\n\t\treturn name.replace(/[^A-Za-z0-9]+/g, '');\r\n\t}\r\n\r\n\t/** Will not entirely recover a packed name, but will be a pretty readable guess */\r\n\tunpackName(name: string, dexTable?: { get: (name: string) => AnyObject }) {\r\n\t\tif (!name) return '';\r\n\t\tif (dexTable) {\r\n\t\t\tconst obj = dexTable.get(name);\r\n\t\t\tif (obj.exists) return obj.name;\r\n\t\t}\r\n\t\treturn name.replace(/([0-9]+)/g, ' $1 ').replace(/([A-Z])/g, ' $1').replace(/[ ][ ]/g, ' ').trim();\r\n\t}\r\n\r\n\t/**\r\n\t * Exports a team in human-readable PS export format\r\n\t */\r\n\texport(team: PokemonSet[], options?: ExportOptions) {\r\n\t\tlet output = '';\r\n\t\tfor (const set of team) {\r\n\t\t\toutput += this.exportSet(set, options) + `\\n`;\r\n\t\t}\r\n\t\treturn output;\r\n\t}\r\n\r\n\texportSet(set: PokemonSet, { hideStats, removeNicknames }: ExportOptions = {}) {\r\n\t\tlet out = ``;\r\n\r\n\t\t// core\r\n\t\tif (typeof removeNicknames === 'function' && set.name && set.name !== set.species) {\r\n\t\t\tset.name = removeNicknames(set.name) || set.species;\r\n\t\t}\r\n\t\tif (set.name && set.name !== set.species && removeNicknames !== true) {\r\n\t\t\tout += `${set.name} (${set.species})`;\r\n\t\t} else {\r\n\t\t\tout += set.species;\r\n\t\t}\r\n\t\tif (set.gender === 'M') out += ` (M)`;\r\n\t\tif (set.gender === 'F') out += ` (F)`;\r\n\t\tif (set.item) out += ` @ ${set.item}`;\r\n\t\tout += ` \\n`;\r\n\r\n\t\tif (set.ability) {\r\n\t\t\tout += `Ability: ${set.ability} \\n`;\r\n\t\t}\r\n\r\n\t\t// details\r\n\t\tif (set.level && set.level !== 100) {\r\n\t\t\tout += `Level: ${set.level} \\n`;\r\n\t\t}\r\n\t\tif (set.shiny) {\r\n\t\t\tout += `Shiny: Yes \\n`;\r\n\t\t}\r\n\t\tif (typeof set.happiness === 'number' && set.happiness !== 255 && !isNaN(set.happiness)) {\r\n\t\t\tout += `Happiness: ${set.happiness} \\n`;\r\n\t\t}\r\n\t\tif (set.pokeball) {\r\n\t\t\tout += `Pokeball: ${set.pokeball} \\n`;\r\n\t\t}\r\n\t\tif (set.hpType) {\r\n\t\t\tout += `Hidden Power: ${set.hpType} \\n`;\r\n\t\t}\r\n\t\tif (typeof set.dynamaxLevel === 'number' && set.dynamaxLevel !== 10 && !isNaN(set.dynamaxLevel)) {\r\n\t\t\tout += `Dynamax Level: ${set.dynamaxLevel} \\n`;\r\n\t\t}\r\n\t\tif (set.gigantamax) {\r\n\t\t\tout += `Gigantamax: Yes \\n`;\r\n\t\t}\r\n\t\tif (set.teraType) {\r\n\t\t\tout += `Tera Type: ${set.teraType} \\n`;\r\n\t\t}\r\n\r\n\t\t// stats\r\n\t\tif (!hideStats) {\r\n\t\t\tif (set.evs) {\r\n\t\t\t\tconst stats = Dex.stats.ids().map(\r\n\t\t\t\t\tstat => set.evs[stat] ?\r\n\t\t\t\t\t\t`${set.evs[stat]} ${Dex.stats.shortNames[stat]}` : ``\r\n\t\t\t\t).filter(Boolean);\r\n\t\t\t\tif (stats.length) {\r\n\t\t\t\t\tout += `EVs: ${stats.join(\" / \")} \\n`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (set.nature) {\r\n\t\t\t\tout += `${set.nature} Nature \\n`;\r\n\t\t\t}\r\n\t\t\tif (set.ivs) {\r\n\t\t\t\tconst stats = Dex.stats.ids().map(\r\n\t\t\t\t\tstat => (set.ivs[stat] !== 31 && set.ivs[stat] !== undefined) ?\r\n\t\t\t\t\t\t`${set.ivs[stat] || 0} ${Dex.stats.shortNames[stat]}` : ``\r\n\t\t\t\t).filter(Boolean);\r\n\t\t\t\tif (stats.length) {\r\n\t\t\t\t\tout += `IVs: ${stats.join(\" / \")} \\n`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// moves\r\n\t\tfor (let move of set.moves) {\r\n\t\t\tif (move.startsWith(`Hidden Power `) && move.charAt(13) !== '[') {\r\n\t\t\t\tmove = `Hidden Power [${move.slice(13)}]`;\r\n\t\t\t}\r\n\t\t\tout += `- ${move} \\n`;\r\n\t\t}\r\n\r\n\t\treturn out;\r\n\t}\r\n\r\n\tparseExportedTeamLine(line: string, isFirstLine: boolean, set: PokemonSet, aggressive?: boolean) {\r\n\t\tif (isFirstLine) {\r\n\t\t\tlet item;\r\n\t\t\t[line, item] = line.split(' @ ');\r\n\t\t\tif (item) {\r\n\t\t\t\tset.item = item;\r\n\t\t\t\tif (toID(set.item) === 'noitem') set.item = '';\r\n\t\t\t}\r\n\t\t\tif (line.endsWith(' (M)')) {\r\n\t\t\t\tset.gender = 'M';\r\n\t\t\t\tline = line.slice(0, -4);\r\n\t\t\t}\r\n\t\t\tif (line.endsWith(' (F)')) {\r\n\t\t\t\tset.gender = 'F';\r\n\t\t\t\tline = line.slice(0, -4);\r\n\t\t\t}\r\n\t\t\tif (line.endsWith(')') && line.includes('(')) {\r\n\t\t\t\tconst [name, species] = line.slice(0, -1).split('(');\r\n\t\t\t\tset.species = Dex.species.get(species).name;\r\n\t\t\t\tset.name = name.trim();\r\n\t\t\t} else {\r\n\t\t\t\tset.species = Dex.species.get(line).name;\r\n\t\t\t\tset.name = '';\r\n\t\t\t}\r\n\t\t} else if (line.startsWith('Trait: ')) {\r\n\t\t\tline = line.slice(7);\r\n\t\t\tset.ability = aggressive ? toID(line) : line;\r\n\t\t} else if (line.startsWith('Ability: ')) {\r\n\t\t\tline = line.slice(9);\r\n\t\t\tset.ability = aggressive ? toID(line) : line;\r\n\t\t} else if (line === 'Shiny: Yes') {\r\n\t\t\tset.shiny = true;\r\n\t\t} else if (line.startsWith('Level: ')) {\r\n\t\t\tline = line.slice(7);\r\n\t\t\tset.level = +line;\r\n\t\t} else if (line.startsWith('Happiness: ')) {\r\n\t\t\tline = line.slice(11);\r\n\t\t\tset.happiness = +line;\r\n\t\t} else if (line.startsWith('Pokeball: ')) {\r\n\t\t\tline = line.slice(10);\r\n\t\t\tset.pokeball = aggressive ? toID(line) : line;\r\n\t\t} else if (line.startsWith('Hidden Power: ')) {\r\n\t\t\tline = line.slice(14);\r\n\t\t\tset.hpType = aggressive ? toID(line) : line;\r\n\t\t} else if (line.startsWith('Tera Type: ')) {\r\n\t\t\tline = line.slice(11);\r\n\t\t\tset.teraType = aggressive ? line.replace(/[^a-zA-Z0-9]/g, '') : line;\r\n\t\t} else if (line === 'Gigantamax: Yes') {\r\n\t\t\tset.gigantamax = true;\r\n\t\t} else if (line.startsWith('EVs: ')) {\r\n\t\t\tline = line.slice(5);\r\n\t\t\tconst evLines = line.split('/');\r\n\t\t\tset.evs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };\r\n\t\t\tfor (const evLine of evLines) {\r\n\t\t\t\tconst [statValue, statName] = evLine.trim().split(' ');\r\n\t\t\t\tconst statid = Dex.stats.getID(statName);\r\n\t\t\t\tif (!statid) continue;\r\n\t\t\t\tconst value = parseInt(statValue);\r\n\t\t\t\tset.evs[statid] = value;\r\n\t\t\t}\r\n\t\t} else if (line.startsWith('IVs: ')) {\r\n\t\t\tline = line.slice(5);\r\n\t\t\tconst ivLines = line.split('/');\r\n\t\t\tset.ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };\r\n\t\t\tfor (const ivLine of ivLines) {\r\n\t\t\t\tconst [statValue, statName] = ivLine.trim().split(' ');\r\n\t\t\t\tconst statid = Dex.stats.getID(statName);\r\n\t\t\t\tif (!statid) continue;\r\n\t\t\t\tlet value = parseInt(statValue);\r\n\t\t\t\tif (isNaN(value)) value = 31;\r\n\t\t\t\tset.ivs[statid] = value;\r\n\t\t\t}\r\n\t\t} else if (/^[A-Za-z]+ (N|n)ature/.test(line)) {\r\n\t\t\tlet natureIndex = line.indexOf(' Nature');\r\n\t\t\tif (natureIndex === -1) natureIndex = line.indexOf(' nature');\r\n\t\t\tif (natureIndex === -1) return;\r\n\t\t\tline = line.substr(0, natureIndex);\r\n\t\t\tif (line !== 'undefined') set.nature = aggressive ? toID(line) : line;\r\n\t\t} else if (line.startsWith('-') || line.startsWith('~')) {\r\n\t\t\tline = line.slice(line.charAt(1) === ' ' ? 2 : 1);\r\n\t\t\tif (line.startsWith('Hidden Power [')) {\r\n\t\t\t\tconst hpType = line.slice(14, -1);\r\n\t\t\t\tline = 'Hidden Power ' + hpType;\r\n\t\t\t\tif (!set.ivs && Dex.types.isName(hpType)) {\r\n\t\t\t\t\tset.ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };\r\n\t\t\t\t\tconst hpIVs = Dex.types.get(hpType).HPivs || {};\r\n\t\t\t\t\tfor (const statid in hpIVs) {\r\n\t\t\t\t\t\tset.ivs[statid as StatID] = hpIVs[statid as StatID]!;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (line === 'Frustration' && set.happiness === undefined) {\r\n\t\t\t\tset.happiness = 0;\r\n\t\t\t}\r\n\t\t\tset.moves.push(line);\r\n\t\t}\r\n\t}\r\n\t/** Accepts a team in any format (JSON, packed, or exported) */\r\n\timport(buffer: string, aggressive?: boolean): PokemonSet[] | null {\r\n\t\tconst sanitize = aggressive ? toID : Dex.getName;\r\n\t\tif (buffer.startsWith('[')) {\r\n\t\t\ttry {\r\n\t\t\t\tconst team = JSON.parse(buffer);\r\n\t\t\t\tif (!Array.isArray(team)) throw new Error(`Team should be an Array but isn't`);\r\n\t\t\t\tfor (const set of team) {\r\n\t\t\t\t\tset.name = sanitize(set.name);\r\n\t\t\t\t\tset.species = sanitize(set.species);\r\n\t\t\t\t\tset.item = sanitize(set.item);\r\n\t\t\t\t\tset.ability = sanitize(set.ability);\r\n\t\t\t\t\tset.gender = sanitize(set.gender);\r\n\t\t\t\t\tset.nature = sanitize(set.nature);\r\n\t\t\t\t\tconst evs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };\r\n\t\t\t\t\tif (set.evs) {\r\n\t\t\t\t\t\tfor (const statid in evs) {\r\n\t\t\t\t\t\t\tif (typeof set.evs[statid] === 'number') evs[statid as StatID] = set.evs[statid];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tset.evs = evs;\r\n\t\t\t\t\tconst ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };\r\n\t\t\t\t\tif (set.ivs) {\r\n\t\t\t\t\t\tfor (const statid in ivs) {\r\n\t\t\t\t\t\t\tif (typeof set.ivs[statid] === 'number') ivs[statid as StatID] = set.ivs[statid];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tset.ivs = ivs;\r\n\t\t\t\t\tif (!Array.isArray(set.moves)) {\r\n\t\t\t\t\t\tset.moves = [];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tset.moves = set.moves.map(sanitize);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn team;\r\n\t\t\t} catch {}\r\n\t\t}\r\n\r\n\t\tconst lines = buffer.split(\"\\n\");\r\n\r\n\t\tconst sets: PokemonSet[] = [];\r\n\t\tlet curSet: PokemonSet | null = null;\r\n\r\n\t\twhile (lines.length && !lines[0]) lines.shift();\r\n\t\twhile (lines.length && !lines[lines.length - 1]) lines.pop();\r\n\r\n\t\tif (lines.length === 1 && lines[0].includes('|')) {\r\n\t\t\treturn this.unpack(lines[0]);\r\n\t\t}\r\n\t\tfor (let line of lines) {\r\n\t\t\tline = line.trim();\r\n\t\t\tif (line === '' || line === '---') {\r\n\t\t\t\tcurSet = null;\r\n\t\t\t} else if (line.startsWith('===')) {\r\n\t\t\t\t// team backup format; ignore\r\n\t\t\t} else if (!curSet) {\r\n\t\t\t\tcurSet = {\r\n\t\t\t\t\tname: '', species: '', item: '', ability: '', gender: '',\r\n\t\t\t\t\tnature: '',\r\n\t\t\t\t\tevs: { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 },\r\n\t\t\t\t\tivs: { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 },\r\n\t\t\t\t\tlevel: 100,\r\n\t\t\t\t\tmoves: [],\r\n\t\t\t\t};\r\n\t\t\t\tsets.push(curSet);\r\n\t\t\t\tthis.parseExportedTeamLine(line, true, curSet, aggressive);\r\n\t\t\t} else {\r\n\t\t\t\tthis.parseExportedTeamLine(line, false, curSet, aggressive);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn sets;\r\n\t}\r\n\r\n\tgetGenerator(format: Format | string, seed: PRNG | PRNGSeed | null = null) {\r\n\t\tlet TeamGenerator;\r\n\t\tformat = Dex.formats.get(format);\r\n\t\tlet mod = format.mod;\r\n\t\tif (format.mod === 'monkeyspaw') mod = 'gen9';\r\n\t\tconst formatID = toID(format);\r\n\t\tif (formatID.includes('gen9computergeneratedteams')) {\r\n\t\t\tTeamGenerator = require(Dex.forFormat(format).dataDir + '/cg-teams').default;\r\n\t\t} else if (mod === 'gen9ssb') {\r\n\t\t\tTeamGenerator = require(`../data/mods/gen9ssb/random-teams`).default;\r\n\t\t} else if (mod === 'ccapm2024') {\r\n\t\t\tTeamGenerator = require(`../data/mods/ccapm2024/random-teams`).default;\r\n\t\t} else if (mod === 'balls') {\r\n\t\t\tTeamGenerator = require(`../data/mods/balls/random-teams`).default;\r\n\t\t} else if (formatID.includes('gen9babyrandombattle')) {\r\n\t\t\tTeamGenerator = require(`../data/random-battles/gen9baby/teams`).default;\r\n\t\t} else if (formatID.includes('gen9randombattle') && format.ruleTable?.has('+pokemontag:cap')) {\r\n\t\t\tTeamGenerator = require(`../data/random-battles/gen9cap/teams`).default;\r\n\t\t} else {\r\n\t\t\t// @pokebedrock - use generated static module map to avoid dynamic requires\r\n\t\t\tTeamGenerator = RandomBattlesModuleMap[mod];\r\n\t\t}\r\n\r\n\t\treturn new TeamGenerator(format, seed);\r\n\t}\r\n\r\n\tgenerate(format: Format | string, options: PlayerOptions | null = null): PokemonSet[] {\r\n\t\treturn this.getGenerator(format, options?.seed).getTeam(options);\r\n\t}\r\n};\r\n\r\nexport default Teams;\r\n"],
5
+ "mappings": "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",
6
6
  "names": ["Teams"]
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pokebedrock-showdown",
3
3
  "description": "A modified version of the Pokémon Showdown server, designed for PokeBedrock.",
4
- "version": "0.1.3",
4
+ "version": "0.1.4",
5
5
  "main": "dist/sim/index.js",
6
6
  "types": "dist/sim/index.d.ts",
7
7
  "dependencies": {
@@ -0,0 +1,26 @@
1
+ // @pokebedrock - This file is AUTO-GENERATED by `tools/build-utils.js`.
2
+
3
+ export const RandomBattlesMods: string[] = [
4
+ 'gen1', 'gen2', 'gen3', 'gen4', 'gen5', 'gen6', 'gen7',
5
+ 'gen7letsgo', 'gen8', 'gen8bdsp', 'gen9', 'gen9baby', 'gen9cap', 'partnersincrime',
6
+ 'randomroulette', 'sharedpower',
7
+ ];
8
+
9
+ export const RandomBattlesModuleMap: Record<string, any> = {
10
+ 'gen1': require('../data/random-battles/gen1/teams'),
11
+ 'gen2': require('../data/random-battles/gen2/teams'),
12
+ 'gen3': require('../data/random-battles/gen3/teams'),
13
+ 'gen4': require('../data/random-battles/gen4/teams'),
14
+ 'gen5': require('../data/random-battles/gen5/teams'),
15
+ 'gen6': require('../data/random-battles/gen6/teams'),
16
+ 'gen7': require('../data/random-battles/gen7/teams'),
17
+ 'gen7letsgo': require('../data/random-battles/gen7letsgo/teams'),
18
+ 'gen8': require('../data/random-battles/gen8/teams'),
19
+ 'gen8bdsp': require('../data/random-battles/gen8bdsp/teams'),
20
+ 'gen9': require('../data/random-battles/gen9/teams'),
21
+ 'gen9baby': require('../data/random-battles/gen9baby/teams'),
22
+ 'gen9cap': require('../data/random-battles/gen9cap/teams'),
23
+ 'partnersincrime': require('../data/random-battles/partnersincrime/teams'),
24
+ 'randomroulette': require('../data/random-battles/randomroulette/teams'),
25
+ 'sharedpower': require('../data/random-battles/sharedpower/teams'),
26
+ };
package/sim/teams.ts CHANGED
@@ -9,6 +9,7 @@
9
9
 
10
10
  import { Dex, toID } from './dex';
11
11
  import type { PRNG, PRNGSeed } from './prng';
12
+ import { RandomBattlesModuleMap } from './random-battles-module-map';
12
13
 
13
14
  /**
14
15
  * Represents additional move data
@@ -711,7 +712,8 @@ export const Teams = new class Teams {
711
712
  } else if (formatID.includes('gen9randombattle') && format.ruleTable?.has('+pokemontag:cap')) {
712
713
  TeamGenerator = require(`../data/random-battles/gen9cap/teams`).default;
713
714
  } else {
714
- TeamGenerator = require(`../data/random-battles/${mod}/teams`).default;
715
+ // @pokebedrock - use generated static module map to avoid dynamic requires
716
+ TeamGenerator = RandomBattlesModuleMap[mod];
715
717
  }
716
718
 
717
719
  return new TeamGenerator(format, seed);
@@ -50,6 +50,13 @@ exports.transpile = decl => {
50
50
  console.error('Failed to generate Dex module map', e);
51
51
  }
52
52
 
53
+ // @pokebedrock - Generate the Random Battles static module map before building
54
+ try {
55
+ generateRandomBattlesModuleMap();
56
+ } catch (e) {
57
+ console.error('Failed to generate Random Battles module map', e);
58
+ }
59
+
53
60
  esbuild.buildSync({
54
61
  entryPoints: findFilesForPath('./'),
55
62
  outdir: './dist',
@@ -168,3 +175,53 @@ function generateDexModuleMap() {
168
175
  const outPath = path.join(simDir, 'dex-module-map.ts');
169
176
  fs.writeFileSync(outPath, lines.join('\n'));
170
177
  }
178
+
179
+ // @pokebedrock - generate random-battles-module-map.ts
180
+ function generateRandomBattlesModuleMap() {
181
+ const root = path.resolve('.');
182
+ const simDir = path.join(root, 'sim');
183
+ const rbDir = path.join(root, 'data', 'random-battles');
184
+
185
+ if (!fs.existsSync(rbDir) || !fs.statSync(rbDir).isDirectory()) return;
186
+
187
+ const subdirs = fs.readdirSync(rbDir)
188
+ .filter(d => fs.statSync(path.join(rbDir, d)).isDirectory())
189
+ .filter(d => {
190
+ const dir = path.join(rbDir, d);
191
+ const hasTS = fs.existsSync(path.join(dir, 'teams.ts'));
192
+ const hasJS = fs.existsSync(path.join(dir, 'teams.js'));
193
+ return hasTS || hasJS;
194
+ })
195
+ .sort();
196
+
197
+ const lines = [];
198
+ lines.push('// @pokebedrock - This file is AUTO-GENERATED by `tools/build-utils.js`.');
199
+ lines.push('');
200
+ lines.push('export const RandomBattlesMods: string[] = [');
201
+
202
+ // Write 7 mods per line
203
+ let count = 0;
204
+ let currentLine = '';
205
+ for (const mod of subdirs) {
206
+ if (count >= 7) {
207
+ lines.push(currentLine);
208
+ currentLine = '';
209
+ count = 0;
210
+ }
211
+ currentLine += `${count > 0 ? ' ' : '\t'}'${mod}',`;
212
+ count++;
213
+ }
214
+ if (subdirs.length > 0) lines.push(currentLine);
215
+
216
+ lines.push('];');
217
+ lines.push('');
218
+ lines.push('export const RandomBattlesModuleMap: Record<string, any> = {');
219
+ for (const mod of subdirs) {
220
+ lines.push(`\t'${mod}': require('../data/random-battles/${mod}/teams'),`);
221
+ }
222
+ lines.push('};');
223
+ lines.push('');
224
+
225
+ const outPath = path.join(simDir, 'random-battles-module-map.ts');
226
+ fs.writeFileSync(outPath, lines.join('\n'));
227
+ }