{ "version": 3, "sources": ["../../../../../data/mods/mixandmega/random-teams.ts"], "sourcesContent": ["import {RandomTeams} from './../../random-teams';\nimport {toID} from '../../../sim/dex';\n\nconst mnmItems = [\n\t'blueorb', 'redorb', 'rustedshield', 'rustedsword',\n];\n\nexport class RandomMnMTeams extends RandomTeams {\n\trandomCCTeam(): RandomTeamsTypes.RandomSet[] {\n\t\tthis.enforceNoDirectCustomBanlistChanges();\n\n\t\tconst dex = this.dex;\n\t\tconst team = [];\n\n\t\tconst natures = this.dex.natures.all();\n\t\tconst items = this.dex.items.all().filter(item => item.megaStone || mnmItems.includes(item.id));\n\n\t\tconst randomN = this.randomNPokemon(this.maxTeamSize, this.forceMonotype, undefined, undefined, true);\n\n\t\tfor (let forme of randomN) {\n\t\t\tlet species = dex.species.get(forme);\n\t\t\tif (species.isNonstandard) species = dex.species.get(species.baseSpecies);\n\n\t\t\t// Random legal item\n\t\t\tlet item = '';\n\t\t\tlet isIllegalItem;\n\t\t\tif (this.gen >= 2) {\n\t\t\t\tdo {\n\t\t\t\t\titem = this.sample(items).name;\n\t\t\t\t\tisIllegalItem = this.dex.items.get(item).gen > this.gen || this.dex.items.get(item).isNonstandard;\n\t\t\t\t} while (isIllegalItem);\n\t\t\t}\n\n\t\t\t// Make sure forme is legal\n\t\t\tif (species.battleOnly) {\n\t\t\t\tif (typeof species.battleOnly === 'string') {\n\t\t\t\t\tspecies = dex.species.get(species.battleOnly);\n\t\t\t\t} else {\n\t\t\t\t\tspecies = dex.species.get(this.sample(species.battleOnly));\n\t\t\t\t}\n\t\t\t\tforme = species.name;\n\t\t\t} else if (species.requiredItems && !species.requiredItems.some(req => toID(req) === item)) {\n\t\t\t\tif (!species.changesFrom) throw new Error(`${species.name} needs a changesFrom value`);\n\t\t\t\tspecies = dex.species.get(species.changesFrom);\n\t\t\t\tforme = species.name;\n\t\t\t}\n\n\t\t\t// Random legal ability\n\t\t\tconst abilities = Object.values(species.abilities).filter(a => this.dex.abilities.get(a).gen <= this.gen);\n\t\t\tconst ability: string = this.gen <= 2 ? 'No Ability' : this.sample(abilities);\n\n\t\t\t// Four random unique moves from the movepool\n\t\t\tlet pool = ['struggle'];\n\t\t\tif (forme === 'Smeargle') {\n\t\t\t\tpool = this.dex.moves.all()\n\t\t\t\t\t.filter(move => !(move.isNonstandard || move.isZ || move.isMax || move.realMove))\n\t\t\t\t\t.map(m => m.id);\n\t\t\t} else {\n\t\t\t\tpool = [...this.dex.species.getMovePool(species.id)];\n\t\t\t}\n\n\t\t\tconst moves = this.multipleSamplesNoReplace(pool, this.maxMoveCount);\n\n\t\t\t// Random EVs\n\t\t\tconst evs: StatsTable = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0};\n\t\t\tconst s: StatID[] = [\"hp\", \"atk\", \"def\", \"spa\", \"spd\", \"spe\"];\n\t\t\tlet evpool = 510;\n\t\t\tdo {\n\t\t\t\tconst x = this.sample(s);\n\t\t\t\tconst y = this.random(Math.min(256 - evs[x], evpool + 1));\n\t\t\t\tevs[x] += y;\n\t\t\t\tevpool -= y;\n\t\t\t} while (evpool > 0);\n\n\t\t\t// Random IVs\n\t\t\tconst ivs = {\n\t\t\t\thp: this.random(32),\n\t\t\t\tatk: this.random(32),\n\t\t\t\tdef: this.random(32),\n\t\t\t\tspa: this.random(32),\n\t\t\t\tspd: this.random(32),\n\t\t\t\tspe: this.random(32),\n\t\t\t};\n\n\t\t\t// Random nature\n\t\t\tconst nature = this.sample(natures).name;\n\n\t\t\t// Level balance--calculate directly from stats rather than using some silly lookup table\n\t\t\tconst mbstmin = 1307; // Sunkern has the lowest modified base stat total, and that total is 807\n\n\t\t\tlet stats = species.baseStats;\n\t\t\t// If Wishiwashi, use the school-forme's much higher stats\n\t\t\tif (species.baseSpecies === 'Wishiwashi') stats = Dex.species.get('wishiwashischool').baseStats;\n\n\t\t\t// Modified base stat total assumes 31 IVs, 85 EVs in every stat\n\t\t\tlet mbst = (stats[\"hp\"] * 2 + 31 + 21 + 100) + 10;\n\t\t\tmbst += (stats[\"atk\"] * 2 + 31 + 21 + 100) + 5;\n\t\t\tmbst += (stats[\"def\"] * 2 + 31 + 21 + 100) + 5;\n\t\t\tmbst += (stats[\"spa\"] * 2 + 31 + 21 + 100) + 5;\n\t\t\tmbst += (stats[\"spd\"] * 2 + 31 + 21 + 100) + 5;\n\t\t\tmbst += (stats[\"spe\"] * 2 + 31 + 21 + 100) + 5;\n\n\t\t\tlet level;\n\t\t\tif (this.adjustLevel) {\n\t\t\t\tlevel = this.adjustLevel;\n\t\t\t} else {\n\t\t\t\tlevel = Math.floor(100 * mbstmin / mbst); // Initial level guess will underestimate\n\n\t\t\t\twhile (level < 100) {\n\t\t\t\t\tmbst = Math.floor((stats[\"hp\"] * 2 + 31 + 21 + 100) * level / 100 + 10);\n\t\t\t\t\t// Since damage is roughly proportional to level\n\t\t\t\t\tmbst += Math.floor(((stats[\"atk\"] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100);\n\t\t\t\t\tmbst += Math.floor((stats[\"def\"] * 2 + 31 + 21 + 100) * level / 100 + 5);\n\t\t\t\t\tmbst += Math.floor(((stats[\"spa\"] * 2 + 31 + 21 + 100) * level / 100 + 5) * level / 100);\n\t\t\t\t\tmbst += Math.floor((stats[\"spd\"] * 2 + 31 + 21 + 100) * level / 100 + 5);\n\t\t\t\t\tmbst += Math.floor((stats[\"spe\"] * 2 + 31 + 21 + 100) * level / 100 + 5);\n\n\t\t\t\t\tif (mbst >= mbstmin) break;\n\t\t\t\t\tlevel++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Random happiness\n\t\t\tconst happiness = this.random(256);\n\n\t\t\t// Random shininess\n\t\t\tconst shiny = this.randomChance(1, 1024);\n\n\t\t\tconst set: RandomTeamsTypes.RandomSet = {\n\t\t\t\tname: species.baseSpecies,\n\t\t\t\tspecies: species.name,\n\t\t\t\tgender: species.gender,\n\t\t\t\titem,\n\t\t\t\tability,\n\t\t\t\tmoves,\n\t\t\t\tevs,\n\t\t\t\tivs,\n\t\t\t\tnature,\n\t\t\t\tlevel,\n\t\t\t\thappiness,\n\t\t\t\tshiny,\n\t\t\t};\n\t\t\tif (this.gen === 9) {\n\t\t\t\t// Tera type\n\t\t\t\tset.teraType = this.sample(this.dex.types.all()).name;\n\t\t\t}\n\t\t\tteam.push(set);\n\t\t}\n\n\t\treturn team;\n\t}\n}\n\nexport default RandomMnMTeams;\n"], "mappings": "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", "names": [] }