{ "version": 3, "sources": ["../../../../../data/mods/gen6/random-teams.ts"], "sourcesContent": ["import {MoveCounter, TeamData} from '../gen8/random-teams';\nimport RandomGen7Teams, {BattleFactorySpecies, ZeroAttackHPIVs} from '../gen7/random-teams';\nimport {PRNG, PRNGSeed} from '../../../sim/prng';\nimport {Utils} from '../../../lib';\nimport {toID} from '../../../sim/dex';\n\n// Moves that restore HP:\nconst RECOVERY_MOVES = [\n\t'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'slackoff', 'softboiled', 'synthesis',\n];\n// Moves that boost Attack:\nconst PHYSICAL_SETUP = [\n\t'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'screech', 'swordsdance',\n];\n// Moves which boost Special Attack:\nconst SPECIAL_SETUP = [\n\t'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow',\n];\n// Some moves that only boost Speed:\nconst SPEED_SETUP = [\n\t'agility', 'autotomize', 'flamecharge', 'rockpolish',\n];\n// Conglomerate for ease of access\nconst SETUP = [\n\t'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'coil', 'curse', 'dragondance', 'flamecharge',\n\t'focusenergy', 'geomancy', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'poweruppunch',\n\t'quiverdance', 'raindance', 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'workup',\n];\n// Moves that shouldn't be the only STAB moves:\nconst NO_STAB = [\n\t'aquajet', 'bulletpunch', 'clearsmog', 'dragontail', 'eruption', 'explosion', 'fakeout', 'flamecharge',\n\t'futuresight', 'iceshard', 'icywind', 'incinerate', 'machpunch', 'nuzzle', 'pluck', 'poweruppunch', 'pursuit',\n\t'quickattack', 'rapidspin', 'reversal', 'selfdestruct', 'shadowsneak', 'skyattack', 'skydrop', 'snarl',\n\t'suckerpunch', 'uturn', 'watershuriken', 'vacuumwave', 'voltswitch', 'waterspout',\n];\n// Hazard-setting moves\nconst HAZARDS = [\n\t'spikes', 'stealthrock', 'stickyweb', 'toxicspikes',\n];\n// Protect and its variants\nconst PROTECT_MOVES = [\n\t'kingsshield', 'protect', 'spikyshield',\n];\n// Moves that switch the user out\nconst PIVOT_MOVES = [\n\t'partingshot', 'uturn', 'voltswitch',\n];\n\n// Moves that should be paired together when possible\nconst MOVE_PAIRS = [\n\t['lightscreen', 'reflect'],\n\t['sleeptalk', 'rest'],\n\t['protect', 'wish'],\n\t['spikyshield', 'wish'],\n\t['leechseed', 'substitute'],\n\t['perishsong', 'protect'],\n\t['solarbeam', 'sunnyday'],\n];\n\n/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */\nconst PRIORITY_POKEMON = [\n\t'aegislashblade', 'banette', 'breloom', 'cacturne', 'doublade', 'dusknoir', 'honchkrow', 'scizor', 'scizormega', 'shedinja',\n];\n\nexport class RandomGen6Teams extends RandomGen7Teams {\n\trandomSets: {[species: string]: RandomTeamsTypes.RandomSpeciesData} = require('./random-sets.json');\n\n\tconstructor(format: Format | string, prng: PRNG | PRNGSeed | null) {\n\t\tsuper(format, prng);\n\n\t\tthis.noStab = NO_STAB;\n\t\tthis.priorityPokemon = PRIORITY_POKEMON;\n\n\t\tthis.moveEnforcementCheckers = {\n\t\t\tBug: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t['megahorn', 'pinmissile'].some(m => movePool.includes(m)) ||\n\t\t\t\t!counter.get('Bug') && abilities.has('Tinted Lens')\n\t\t\t),\n\t\t\tDark: (movePool, moves, abilities, types, counter) => !counter.get('Dark'),\n\t\t\tDragon: (movePool, moves, abilities, types, counter) => !counter.get('Dragon'),\n\t\t\tElectric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),\n\t\t\tFairy: (movePool, moves, abilities, types, counter) => !counter.get('Fairy'),\n\t\t\tFighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'),\n\t\t\tFire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'),\n\t\t\tFlying: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Flying') && !['aerodactylmega', 'charizardmegay', 'mantine', 'murkrow'].includes(species.id) &&\n\t\t\t\t!movePool.includes('hiddenpowerflying')\n\t\t\t),\n\t\t\tGhost: (movePool, moves, abilities, types, counter) => !counter.get('Ghost'),\n\t\t\tGrass: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Grass') && (species.baseStats.atk >= 100 || movePool.includes('leafstorm'))\n\t\t\t),\n\t\t\tGround: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),\n\t\t\tIce: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t!counter.get('Ice') || (!moves.has('blizzard') && movePool.includes('freezedry')) ||\n\t\t\t\tabilities.has('Refrigerate') && (movePool.includes('return') || movePool.includes('hypervoice'))\n\t\t\t),\n\t\t\tNormal: movePool => movePool.includes('boomburst'),\n\t\t\tPoison: (movePool, moves, abilities, types, counter) => !counter.get('Poison'),\n\t\t\tPsychic: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t!counter.get('Psychic') && (types.has('Fighting') || movePool.includes('calmmind'))\n\t\t\t),\n\t\t\tRock: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Rock') && (species.baseStats.atk >= 95 || abilities.has('Rock Head'))\n\t\t\t),\n\t\t\tSteel: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Steel') && species.baseStats.atk >= 100\n\t\t\t),\n\t\t\tWater: (movePool, moves, abilities, types, counter) => !counter.get('Water'),\n\t\t};\n\t}\n\n\tcullMovePool(\n\t\ttypes: string[],\n\t\tmoves: Set,\n\t\tabilities: Set,\n\t\tcounter: MoveCounter,\n\t\tmovePool: string[],\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tisLead: boolean,\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role,\n\t): void {\n\t\t// Pokemon cannot have multiple Hidden Powers in any circumstance\n\t\tlet hasHiddenPower = false;\n\t\tfor (const move of moves) {\n\t\t\tif (move.startsWith('hiddenpower')) hasHiddenPower = true;\n\t\t}\n\t\tif (hasHiddenPower) {\n\t\t\tlet movePoolHasHiddenPower = true;\n\t\t\twhile (movePoolHasHiddenPower) {\n\t\t\t\tmovePoolHasHiddenPower = false;\n\t\t\t\tfor (const moveid of movePool) {\n\t\t\t\t\tif (moveid.startsWith('hiddenpower')) {\n\t\t\t\t\t\tthis.fastPop(movePool, movePool.indexOf(moveid));\n\t\t\t\t\t\tmovePoolHasHiddenPower = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t// If we have two unfilled moves and only one unpaired move, cull the unpaired move.\n\t\tif (moves.size === this.maxMoveCount - 2) {\n\t\t\tconst unpairedMoves = [...movePool];\n\t\t\tfor (const pair of MOVE_PAIRS) {\n\t\t\t\tif (movePool.includes(pair[0]) && movePool.includes(pair[1])) {\n\t\t\t\t\tthis.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));\n\t\t\t\t\tthis.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (unpairedMoves.length === 1) {\n\t\t\t\tthis.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));\n\t\t\t}\n\t\t}\n\n\t\t// These moves are paired, and shouldn't appear if there is not room for them both.\n\t\tif (moves.size === this.maxMoveCount - 1) {\n\t\t\tfor (const pair of MOVE_PAIRS) {\n\t\t\t\tif (movePool.includes(pair[0]) && movePool.includes(pair[1])) {\n\t\t\t\t\tthis.fastPop(movePool, movePool.indexOf(pair[0]));\n\t\t\t\t\tthis.fastPop(movePool, movePool.indexOf(pair[1]));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Team-based move culls\n\t\tif (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) {\n\t\t\tif (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect'));\n\t\t\tif (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\t\tif (teamDetails.stickyWeb) {\n\t\t\tif (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\t\tif (teamDetails.stealthRock) {\n\t\t\tif (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\t\tif (teamDetails.defog || teamDetails.rapidSpin) {\n\t\t\tif (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog'));\n\t\t\tif (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\t\tif (teamDetails.toxicSpikes) {\n\t\t\tif (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\t\tif (teamDetails.spikes && teamDetails.spikes >= 2) {\n\t\t\tif (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));\n\t\t\tif (moves.size + movePool.length <= this.maxMoveCount) return;\n\t\t}\n\n\t\t// Develop additional move lists\n\t\tconst badWithSetup = ['defog', 'dragontail', 'haze', 'healbell', 'nuzzle', 'pursuit', 'rapidspin', 'toxic'];\n\t\tconst statusMoves = this.dex.moves.all()\n\t\t\t.filter(move => move.category === 'Status')\n\t\t\t.map(move => move.id);\n\n\t\t// General incompatibilities\n\t\tconst incompatiblePairs = [\n\t\t\t// These moves don't mesh well with other aspects of the set\n\t\t\t[statusMoves, ['healingwish', 'memento', 'switcheroo', 'trick']],\n\t\t\t[SETUP, PIVOT_MOVES],\n\t\t\t[SETUP, HAZARDS],\n\t\t\t[SETUP, badWithSetup],\n\t\t\t[PHYSICAL_SETUP, PHYSICAL_SETUP],\n\t\t\t[SPEED_SETUP, 'quickattack'],\n\t\t\t['defog', HAZARDS],\n\t\t\t[['fakeout', 'uturn'], ['switcheroo', 'trick']],\n\t\t\t['substitute', PIVOT_MOVES],\n\t\t\t['leechseed', 'dragontail'],\n\t\t\t['rest', 'substitute'],\n\t\t\t[PHYSICAL_SETUP, 'dracometeor'],\n\t\t\t[SPECIAL_SETUP, 'knockoff'],\n\n\t\t\t// These attacks are redundant with each other\n\t\t\t['psychic', 'psyshock'],\n\t\t\t['scald', ['hydropump', 'originpulse', 'waterpulse']],\n\t\t\t['return', ['bodyslam', 'doubleedge']],\n\t\t\t[['fierydance', 'lavaplume'], ['fireblast', 'magmastorm']],\n\t\t\t[['flamethrower', 'flareblitz'], ['fireblast', 'overheat']],\n\t\t\t['hornleech', 'woodhammer'],\n\t\t\t[['gigadrain', 'leafstorm'], ['leafstorm', 'petaldance', 'powerwhip']],\n\t\t\t['wildcharge', 'thunderbolt'],\n\t\t\t['gunkshot', 'poisonjab'],\n\t\t\t[['drainpunch', 'focusblast'], ['closecombat', 'highjumpkick', 'superpower']],\n\t\t\t['stoneedge', 'headsmash'],\n\t\t\t['dracometeor', 'dragonpulse'],\n\t\t\t['dragonclaw', 'outrage'],\n\t\t\t['knockoff', ['darkpulse', 'foulplay']],\n\n\t\t\t// Status move incompatibilities\n\t\t\t['toxic', 'toxicspikes'],\n\t\t\t['taunt', 'disable'],\n\t\t\t['defog', ['leechseed', 'substitute']],\n\n\t\t\t// Assorted hardcodes go here:\n\t\t\t// Lunatone\n\t\t\t['moonlight', 'rockpolish'],\n\t\t\t// Smeargle\n\t\t\t['destinybond', 'whirlwind'],\n\t\t\t// Liepard\n\t\t\t['copycat', 'uturn'],\n\t\t\t// Seviper\n\t\t\t['switcheroo', 'suckerpunch'],\n\t\t\t// Jirachi\n\t\t\t['bodyslam', 'healingwish'],\n\t\t];\n\n\t\tfor (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);\n\n\t\tif (!types.includes('Dark') && preferredType !== 'Dark') {\n\t\t\tthis.incompatibleMoves(moves, movePool, 'knockoff', ['pursuit', 'suckerpunch']);\n\t\t}\n\n\t\tconst statusInflictingMoves = ['thunderwave', 'toxic', 'willowisp', 'yawn'];\n\t\tif (!abilities.has('Prankster') && role !== 'Staller') {\n\t\t\tthis.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves);\n\t\t}\n\n\t\tif (abilities.has('Guts')) this.incompatibleMoves(moves, movePool, 'protect', 'swordsdance');\n\n\t\t// Force Protect and U-turn on Beedrill-Mega\n\t\tif (species.id === 'beedrillmega') {\n\t\t\tthis.incompatibleMoves(moves, movePool, 'drillrun', 'knockoff');\n\t\t}\n\t}\n\n\t// Generate random moveset for a given species, role, preferred type.\n\trandomMoveset(\n\t\ttypes: string[],\n\t\tabilities: Set,\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tisLead: boolean,\n\t\tmovePool: string[],\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role,\n\t): Set {\n\t\tconst moves = new Set();\n\t\tlet counter = this.newQueryMoves(moves, species, preferredType, abilities);\n\t\tthis.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead,\n\t\t\tpreferredType, role);\n\n\t\t// If there are only four moves, add all moves and return early\n\t\tif (movePool.length <= this.maxMoveCount) {\n\t\t\t// Still need to ensure that multiple Hidden Powers are not added (if maxMoveCount is increased)\n\t\t\twhile (movePool.length) {\n\t\t\t\tconst moveid = this.sample(movePool);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t\treturn moves;\n\t\t}\n\n\t\tconst runEnforcementChecker = (checkerName: string) => {\n\t\t\tif (!this.moveEnforcementCheckers[checkerName]) return false;\n\t\t\treturn this.moveEnforcementCheckers[checkerName](\n\t\t\t\tmovePool, moves, abilities, new Set(types), counter, species, teamDetails\n\t\t\t);\n\t\t};\n\n\t\t// Add required move (e.g. Relic Song for Meloetta-P)\n\t\tif (species.requiredMove) {\n\t\t\tconst move = this.dex.moves.get(species.requiredMove).id;\n\t\t\tcounter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\tmovePool, preferredType, role);\n\t\t}\n\n\t\t// Add other moves you really want to have, e.g. STAB, recovery, setup.\n\n\t\t// Enforce Facade if Guts is a possible ability\n\t\tif (movePool.includes('facade') && abilities.has('Guts')) {\n\t\t\tcounter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\tmovePool, preferredType, role);\n\t\t}\n\n\t\t// Enforce Blizzard, Seismic Toss, Spore, and Sticky Web\n\t\tfor (const moveid of ['blizzard', 'seismictoss', 'spore', 'stickyweb']) {\n\t\t\tif (movePool.includes(moveid)) {\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce Thunder Wave on Prankster users\n\t\tif (movePool.includes('thunderwave') && abilities.has('Prankster')) {\n\t\t\tcounter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\tmovePool, preferredType, role);\n\t\t}\n\n\t\t// Enforce Shadow Sneak on Kecleon\n\t\tif (movePool.includes('shadowsneak') && species.id === 'kecleon') {\n\t\t\tcounter = this.addMove('shadowsneak', moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\tmovePool, preferredType, role);\n\t\t}\n\n\t\t// Enforce hazard removal on Bulky Support if the team doesn't already have it\n\t\tif (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) {\n\t\t\tif (movePool.includes('rapidspin')) {\n\t\t\t\tcounter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t\tif (movePool.includes('defog')) {\n\t\t\t\tcounter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce STAB priority\n\t\tif (['Bulky Attacker', 'Bulky Setup'].includes(role) || this.priorityPokemon.includes(species.id)) {\n\t\t\tconst priorityMoves = [];\n\t\t\tfor (const moveid of movePool) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tconst moveType = this.getMoveType(move, species, abilities, preferredType);\n\t\t\t\tif (types.includes(moveType) && move.priority > 0 && (move.basePower || move.basePowerCallback)) {\n\t\t\t\t\tpriorityMoves.push(moveid);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (priorityMoves.length) {\n\t\t\t\tconst moveid = this.sample(priorityMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce STAB\n\t\tfor (const type of types) {\n\t\t\t// Check if a STAB move of that type should be required\n\t\t\tconst stabMoves = [];\n\t\t\tfor (const moveid of movePool) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tconst moveType = this.getMoveType(move, species, abilities, preferredType);\n\t\t\t\tif (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {\n\t\t\t\t\tstabMoves.push(moveid);\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (runEnforcementChecker(type)) {\n\t\t\t\tif (!stabMoves.length) break;\n\t\t\t\tconst moveid = this.sampleNoReplace(stabMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce Preferred Type\n\t\tif (!counter.get('preferred')) {\n\t\t\tconst stabMoves = [];\n\t\t\tfor (const moveid of movePool) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tconst moveType = this.getMoveType(move, species, abilities, preferredType);\n\t\t\t\tif (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && preferredType === moveType) {\n\t\t\t\t\tstabMoves.push(moveid);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (stabMoves.length) {\n\t\t\t\tconst moveid = this.sample(stabMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// If no STAB move was added, add a STAB move\n\t\tif (!counter.get('stab')) {\n\t\t\tconst stabMoves = [];\n\t\t\tfor (const moveid of movePool) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tconst moveType = this.getMoveType(move, species, abilities, preferredType);\n\t\t\t\tif (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {\n\t\t\t\t\tstabMoves.push(moveid);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (stabMoves.length) {\n\t\t\t\tconst moveid = this.sample(stabMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t} else {\n\t\t\t\t// If they have no regular STAB move, enforce U-turn on Bug types.\n\t\t\t\tif (movePool.includes('uturn') && types.includes('Bug')) {\n\t\t\t\t\tcounter = this.addMove('uturn', moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Enforce recovery\n\t\tif (['Bulky Support', 'Bulky Attacker', 'Bulky Setup', 'Staller'].includes(role)) {\n\t\t\tconst recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));\n\t\t\tif (recoveryMoves.length) {\n\t\t\t\tconst moveid = this.sample(recoveryMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce Staller moves\n\t\tif (role === 'Staller') {\n\t\t\tconst enforcedMoves = [...PROTECT_MOVES, 'toxic', 'wish'];\n\t\t\tfor (const move of enforcedMoves) {\n\t\t\t\tif (movePool.includes(move)) {\n\t\t\t\t\tcounter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Enforce setup\n\t\tif (role.includes('Setup')) {\n\t\t\tconst setupMoves = movePool.filter(moveid => SETUP.includes(moveid));\n\t\t\tif (setupMoves.length) {\n\t\t\t\tconst moveid = this.sample(setupMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce a move not on the noSTAB list\n\t\tif (!counter.damagingMoves.size && !(moves.has('uturn') && types.includes('Bug'))) {\n\t\t\t// Choose an attacking move\n\t\t\tconst attackingMoves = [];\n\t\t\tfor (const moveid of movePool) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tif (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);\n\t\t\t}\n\t\t\tif (attackingMoves.length) {\n\t\t\t\tconst moveid = this.sample(attackingMoves);\n\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t}\n\t\t}\n\n\t\t// Enforce coverage move\n\t\tif (['Fast Attacker', 'Setup Sweeper', 'Bulky Attacker', 'Wallbreaker'].includes(role)) {\n\t\t\tif (counter.damagingMoves.size === 1) {\n\t\t\t\t// Find the type of the current attacking move\n\t\t\t\tconst currentAttackType = counter.damagingMoves.values().next().value.type;\n\t\t\t\t// Choose an attacking move that is of different type to the current single attack\n\t\t\t\tconst coverageMoves = [];\n\t\t\t\tfor (const moveid of movePool) {\n\t\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\t\tconst moveType = this.getMoveType(move, species, abilities, preferredType);\n\t\t\t\t\tif (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {\n\t\t\t\t\t\tif (currentAttackType !== moveType) coverageMoves.push(moveid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (coverageMoves.length) {\n\t\t\t\t\tconst moveid = this.sample(coverageMoves);\n\t\t\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Choose remaining moves randomly from movepool and add them to moves list:\n\t\twhile (moves.size < this.maxMoveCount && movePool.length) {\n\t\t\tconst moveid = this.sample(movePool);\n\t\t\tcounter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\tmovePool, preferredType, role);\n\t\t\tfor (const pair of MOVE_PAIRS) {\n\t\t\t\tif (moveid === pair[0] && movePool.includes(pair[1])) {\n\t\t\t\t\tcounter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t\t}\n\t\t\t\tif (moveid === pair[1] && movePool.includes(pair[0])) {\n\t\t\t\t\tcounter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead,\n\t\t\t\t\t\tmovePool, preferredType, role);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn moves;\n\t}\n\n\tshouldCullAbility(\n\t\tability: string,\n\t\ttypes: Set,\n\t\tmoves: Set,\n\t\tabilities: Set,\n\t\tcounter: MoveCounter,\n\t\tmovePool: string[],\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role\n\t): boolean {\n\t\tswitch (ability) {\n\t\tcase 'Flare Boost': case 'Gluttony': case 'Harvest': case 'Ice Body': case 'Magician':\n\t\tcase 'Moody': case 'Pressure': case 'Sand Veil': case 'Sniper': case 'Snow Cloak': case 'Steadfast':\n\t\t\treturn true;\n\t\tcase 'Aerilate': case 'Pixilate': case 'Refrigerate':\n\t\t\treturn ['doubleedge', 'hypervoice', 'return'].every(m => !moves.has(m));\n\t\tcase 'Chlorophyll':\n\t\t\t// Petal Dance is for Lilligant\n\t\t\treturn (\n\t\t\t\tspecies.baseStats.spe > 100 || moves.has('petaldance') ||\n\t\t\t\t(!moves.has('sunnyday') && !teamDetails.sun)\n\t\t\t);\n\t\tcase 'Competitive':\n\t\t\treturn !counter.get('Special');\n\t\tcase 'Compound Eyes': case 'No Guard':\n\t\t\treturn !counter.get('inaccurate');\n\t\tcase 'Contrary': case 'Skill Link': case 'Strong Jaw':\n\t\t\treturn !counter.get(toID(ability));\n\t\tcase 'Defiant': case 'Justified': case 'Moxie':\n\t\t\treturn !counter.get('Physical');\n\t\tcase 'Guts':\n\t\t\treturn (!moves.has('facade') && !moves.has('sleeptalk'));\n\t\tcase 'Hustle':\n\t\t\treturn counter.get('Physical') < 2;\n\t\tcase 'Hydration': case 'Rain Dish': case 'Swift Swim':\n\t\t\treturn (\n\t\t\t\tspecies.baseStats.spe > 100 || !moves.has('raindance') && !teamDetails.rain ||\n\t\t\t\t!moves.has('raindance') && ['Rock Head', 'Water Absorb'].some(abil => abilities.has(abil))\n\t\t\t);\n\t\tcase 'Intimidate':\n\t\t\t// Slam part is for Tauros\n\t\t\treturn (moves.has('bodyslam') || species.id === 'staraptor');\n\t\tcase 'Iron Fist':\n\t\t\treturn (!counter.get(toID(ability)) || species.id === 'golurk');\n\t\tcase 'Lightning Rod':\n\t\t\treturn (types.has('Ground') || ((!!teamDetails.rain || moves.has('raindance')) && species.id === 'seaking'));\n\t\tcase 'Magic Guard': case 'Speed Boost':\n\t\t\treturn (abilities.has('Tinted Lens') && role === 'Wallbreaker');\n\t\tcase 'Mold Breaker':\n\t\t\treturn (species.baseSpecies === 'Basculin' || species.id === 'pangoro' || abilities.has('Sheer Force'));\n\t\tcase 'Oblivious': case 'Prankster':\n\t\t\treturn (!counter.get('Status') || (species.id === 'tornadus' && moves.has('bulkup')));\n\t\tcase 'Overcoat':\n\t\t\treturn types.has('Grass');\n\t\tcase 'Overgrow':\n\t\t\treturn !counter.get('Grass');\n\t\tcase 'Synchronize':\n\t\t\treturn (counter.get('Status') < 2 || !!counter.get('recoil') || !!species.isMega);\n\t\tcase 'Regenerator':\n\t\t\treturn species.id === 'mienshao' || species.id === 'reuniclus';\n\t\tcase 'Reckless': case 'Rock Head':\n\t\t\treturn (!counter.get('recoil') || !!species.isMega);\n\t\tcase 'Sand Force': case 'Sand Rush':\n\t\t\treturn !teamDetails.sand;\n\t\tcase 'Scrappy':\n\t\t\treturn !types.has('Normal');\n\t\tcase 'Serene Grace':\n\t\t\treturn !counter.get('serenegrace');\n\t\tcase 'Sheer Force':\n\t\t\treturn (!counter.get('sheerforce') || moves.has('doubleedge') || abilities.has('Guts') || !!species.isMega);\n\t\tcase 'Simple':\n\t\t\treturn !counter.get('setup');\n\t\tcase 'Snow Warning':\n\t\t\t// Aurorus\n\t\t\treturn moves.has('hypervoice');\n\t\tcase 'Solar Power':\n\t\t\treturn (!counter.get('Special') || !teamDetails.sun || !!species.isMega);\n\t\tcase 'Sturdy':\n\t\t\treturn (!!counter.get('recoil') && !counter.get('recovery') || species.id === 'steelix' && !!counter.get('sheerforce'));\n\t\tcase 'Swarm':\n\t\t\treturn ((!counter.get('Bug') && !moves.has('uturn')) || !!species.isMega);\n\t\tcase 'Technician':\n\t\t\treturn (!counter.get('technician') || moves.has('tailslap') || !!species.isMega);\n\t\tcase 'Tinted Lens':\n\t\t\treturn (['illumise', 'sigilyph', 'yanmega'].some(m => species.id === (m)) && role !== 'Wallbreaker');\n\t\tcase 'Torrent':\n\t\t\treturn (!counter.get('Water') || !!species.isMega);\n\t\tcase 'Unaware':\n\t\t\treturn (role !== 'Bulky Support' && role !== 'Staller');\n\t\tcase 'Unburden':\n\t\t\treturn (!!species.isMega || !counter.get('setup') && !moves.has('acrobatics'));\n\t\tcase 'Water Absorb':\n\t\t\treturn moves.has('raindance') || ['Drizzle', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil));\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tgetAbility(\n\t\ttypes: Set,\n\t\tmoves: Set,\n\t\tabilities: Set,\n\t\tcounter: MoveCounter,\n\t\tmovePool: string[],\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role,\n\t): string {\n\t\tif (species.battleOnly && !species.requiredAbility) {\n\t\t\tabilities = new Set(Object.values(this.dex.species.get(species.battleOnly as string).abilities));\n\t\t}\n\t\tconst abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a));\n\t\tUtils.sortBy(abilityData, abil => -abil.rating);\n\n\t\tif (abilityData.length <= 1) return abilityData[0].name;\n\n\t\t// Hard-code abilities here\n\t\tif (\n\t\t\tabilities.has('Guts') &&\n\t\t\t!abilities.has('Quick Feet') &&\n\t\t\t(moves.has('facade') || (moves.has('sleeptalk') && moves.has('rest')))\n\t\t) return 'Guts';\n\n\t\tif (species.id === 'starmie') return role === 'Wallbreaker' ? 'Analytic' : 'Natural Cure';\n\t\tif (species.id === 'ninetales') return 'Drought';\n\t\tif (species.id === 'pinsirmega') return 'Hyper Cutter';\n\t\tif (species.id === 'ninjask' || species.id === 'seviper') return 'Infiltrator';\n\t\tif (species.id === 'lucariomega') return 'Justified';\n\t\tif (species.id === 'gligar') return 'Immunity';\n\t\tif (species.id === 'arcanine') return 'Intimidate';\n\t\tif (species.baseSpecies === 'Altaria') return 'Natural Cure';\n\t\t// If Ambipom doesn't qualify for Technician, Skill Link is useless on it\n\t\tif (species.id === 'ambipom' && !counter.get('technician')) return 'Pickup';\n\t\tif (species.id === 'muk') return 'Poison Touch';\n\t\tif (['dusknoir', 'vespiquen'].includes(species.id)) return 'Pressure';\n\t\tif (species.id === 'druddigon' && role === 'Bulky Support') return 'Rough Skin';\n\t\tif (species.id === 'pangoro' && !counter.get('ironfist')) return 'Scrappy';\n\t\tif (species.id === 'stunfisk') return 'Static';\n\t\tif (species.id === 'breloom') return 'Technician';\n\t\tif (species.id === 'zangoose') return 'Toxic Boost';\n\t\tif (species.id === 'porygon2') return 'Trace';\n\n\t\tif (abilities.has('Harvest') && (role === 'Bulky Support' || role === 'Staller')) return 'Harvest';\n\t\tif (abilities.has('Moxie') && (counter.get('Physical') > 3)) return 'Moxie';\n\t\tif (abilities.has('Regenerator') && role === 'AV Pivot') return 'Regenerator';\n\t\tif (abilities.has('Shed Skin') && moves.has('rest') && !moves.has('sleeptalk')) return 'Shed Skin';\n\t\tif (abilities.has('Sniper') && moves.has('focusenergy')) return 'Sniper';\n\t\tif (abilities.has('Unburden') && ['acrobatics', 'bellydrum'].some(m => moves.has(m))) return 'Unburden';\n\n\t\tlet abilityAllowed: Ability[] = [];\n\t\t// Obtain a list of abilities that are allowed (not culled)\n\t\tfor (const ability of abilityData) {\n\t\t\tif (ability.rating >= 1 && !this.shouldCullAbility(\n\t\t\t\tability.name, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role\n\t\t\t)) {\n\t\t\t\tabilityAllowed.push(ability);\n\t\t\t}\n\t\t}\n\n\t\t// If all abilities are rejected, re-allow all abilities\n\t\tif (!abilityAllowed.length) {\n\t\t\tfor (const ability of abilityData) {\n\t\t\t\tif (ability.rating > 0) abilityAllowed.push(ability);\n\t\t\t}\n\t\t\tif (!abilityAllowed.length) abilityAllowed = abilityData;\n\t\t}\n\n\t\tif (abilityAllowed.length === 1) return abilityAllowed[0].name;\n\t\t// Sort abilities by rating with an element of randomness\n\t\t// All three abilities can be chosen\n\t\tif (abilityAllowed[2] && abilityAllowed[0].rating - 0.5 <= abilityAllowed[2].rating) {\n\t\t\tif (abilityAllowed[1].rating <= abilityAllowed[2].rating) {\n\t\t\t\tif (this.randomChance(1, 2)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]];\n\t\t\t} else {\n\t\t\t\tif (this.randomChance(1, 3)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]];\n\t\t\t}\n\t\t\tif (abilityAllowed[0].rating <= abilityAllowed[1].rating) {\n\t\t\t\tif (this.randomChance(2, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];\n\t\t\t} else {\n\t\t\t\tif (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];\n\t\t\t}\n\t\t} else {\n\t\t\t// Third ability cannot be chosen\n\t\t\tif (abilityAllowed[0].rating <= abilityAllowed[1].rating) {\n\t\t\t\tif (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];\n\t\t\t} else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) {\n\t\t\t\tif (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];\n\t\t\t}\n\t\t}\n\n\t\t// After sorting, choose the first ability\n\t\treturn abilityAllowed[0].name;\n\t}\n\n\tgetPriorityItem(\n\t\tability: string,\n\t\ttypes: string[],\n\t\tmoves: Set,\n\t\tcounter: MoveCounter,\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tisLead: boolean,\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role,\n\t): string | undefined {\n\t\tif (species.requiredItems) return this.sample(species.requiredItems);\n\t\tif (role === 'AV Pivot') return 'Assault Vest';\n\t\tif (species.name === 'Farfetch\\u2019d') return 'Stick';\n\t\tif (species.name === 'Latias' || species.name === 'Latios') return 'Soul Dew';\n\t\tif (species.name === 'Marowak') return 'Thick Club';\n\t\tif (species.name === 'Pikachu') return 'Light Ball';\n\t\tif (species.name === 'Shedinja' || species.name === 'Smeargle') return 'Focus Sash';\n\t\tif (species.name === 'Talonflame') return 'Sharp Beak';\n\t\tif (species.name === 'Unfezant' || moves.has('focusenergy')) return 'Scope Lens';\n\t\tif (species.name === 'Unown') return 'Choice Specs';\n\t\tif (species.name === 'Wobbuffet') return 'Custap Berry';\n\t\tif (species.name === 'Shuckle') return 'Mental Herb';\n\t\tif (ability === 'Harvest' || ability === 'Cheek Pouch') return 'Sitrus Berry';\n\t\tif (species.name === 'Ditto') return 'Choice Scarf';\n\t\tif (ability === 'Poison Heal') return 'Toxic Orb';\n\t\tif (ability === 'Speed Boost') return 'Life Orb';\n\t\tif (species.nfe) return (species.name === 'Scyther' && role === 'Fast Attacker') ? 'Choice Band' : 'Eviolite';\n\t\tif (['healingwish', 'memento', 'switcheroo', 'trick'].some(m => moves.has(m))) {\n\t\t\tif (species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && role !== 'Wallbreaker') {\n\t\t\t\treturn 'Choice Scarf';\n\t\t\t} else {\n\t\t\t\treturn (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';\n\t\t\t}\n\t\t}\n\t\tif (moves.has('bellydrum')) return 'Sitrus Berry';\n\t\tif (moves.has('geomancy') || moves.has('skyattack')) return 'Power Herb';\n\t\tif (moves.has('shellsmash')) {\n\t\t\treturn (ability === 'Solid Rock' && !!counter.get('priority')) ? 'Weakness Policy' : 'White Herb';\n\t\t}\n\t\tif (moves.has('psychoshift')) return 'Flame Orb';\n\t\tif ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {\n\t\t\treturn species.name === 'Conkeldurr' ? 'Flame Orb' : 'Toxic Orb';\n\t\t}\n\t\tif (ability === 'Magic Guard' && role !== 'Bulky Support') {\n\t\t\treturn moves.has('counter') ? 'Focus Sash' : 'Life Orb';\n\t\t}\n\t\tif (species.id === 'rampardos' && role === 'Fast Attacker') return 'Choice Scarf';\n\t\tif (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb';\n\t\tif (ability === 'Unburden') return (species.id === 'hitmonlee') ? 'White Herb' : 'Sitrus Berry';\n\t\tif (moves.has('acrobatics')) return '';\n\t\tif (moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';\n\t\tif (moves.has('rest') && !moves.has('sleeptalk') && !['Hydration', 'Natural Cure', 'Shed Skin'].includes(ability)) {\n\t\t\treturn 'Chesto Berry';\n\t\t}\n\t\tif (role === 'Staller') return 'Leftovers';\n\t}\n\n\tgetItem(\n\t\tability: string,\n\t\ttypes: string[],\n\t\tmoves: Set,\n\t\tcounter: MoveCounter,\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tisLead: boolean,\n\t\tpreferredType: string,\n\t\trole: RandomTeamsTypes.Role,\n\t): string {\n\t\tconst defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;\n\n\t\tconst scarfReqs = (\n\t\t\trole !== 'Wallbreaker' &&\n\t\t\tspecies.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&\n\t\t\t!counter.get('priority') && !moves.has('pursuit')\n\t\t);\n\n\t\tif (\n\t\t\tmoves.has('pursuit') && moves.has('suckerpunch') && counter.get('Dark') && !this.priorityPokemon.includes(species.id)\n\t\t) return 'Black Glasses';\n\t\tif (counter.get('Special') === 4) {\n\t\t\treturn (\n\t\t\t\tscarfReqs && species.baseStats.spa >= 90 && this.randomChance(1, 2)\n\t\t\t) ? 'Choice Scarf' : 'Choice Specs';\n\t\t}\n\t\tif (counter.get('Special') === 3 && moves.has('uturn')) return 'Choice Specs';\n\t\tif (counter.get('Physical') === 4 && species.id !== 'jirachi' &&\n\t\t\t['dragontail', 'fakeout', 'flamecharge', 'nuzzle', 'rapidspin'].every(m => !moves.has(m))\n\t\t) {\n\t\t\treturn (\n\t\t\t\tscarfReqs && (species.baseStats.atk >= 100 || ability === 'Pure Power' || ability === 'Huge Power') &&\n\t\t\t\tthis.randomChance(1, 2)\n\t\t\t) ? 'Choice Scarf' : 'Choice Band';\n\t\t}\n\n\t\tif (ability === 'Sturdy' && moves.has('explosion') && !counter.get('speedsetup')) return 'Custap Berry';\n\t\tif (types.includes('Normal') && moves.has('fakeout') && !!counter.get('Normal')) return 'Silk Scarf';\n\t\tif (role === 'Bulky Setup' && !!counter.get('speedsetup') && !moves.has('swordsdance')) {\n\t\t\treturn 'Weakness Policy';\n\t\t}\n\t\tif (species.id === 'palkia') return 'Lustrous Orb';\n\t\tif (species.id === 'archeops') return 'Expert Belt';\n\t\tif (!counter.get('Status') && (\n\t\t\t['Fast Support', 'Bulky Support', 'Bulky Attacker'].some(m => role === m) || moves.has('rapidspin')\n\t\t)) {\n\t\t\treturn 'Assault Vest';\n\t\t}\n\t\tif (moves.has('outrage') && counter.get('setup')) return 'Lum Berry';\n\t\tif (\n\t\t\t(ability === 'Rough Skin') || (species.id !== 'hooh' &&\n\t\t\tability === 'Regenerator' && species.baseStats.hp + species.baseStats.def >= 180 && this.randomChance(1, 2))\n\t\t) return 'Rocky Helmet';\n\t\tif (['kingsshield', 'protect', 'spikyshield', 'substitute'].some(m => moves.has(m))) return 'Leftovers';\n\t\tif (\n\t\t\tthis.dex.getEffectiveness('Ground', species) >= 2 &&\n\t\t\tability !== 'Levitate'\n\t\t) {\n\t\t\treturn 'Air Balloon';\n\t\t}\n\t\tif (\n\t\t\t(role === 'Fast Support' || moves.has('stickyweb')) && isLead && defensiveStatTotal < 255 &&\n\t\t\t!counter.get('recovery') && !moves.has('defog') && (!counter.get('recoil') || ability === 'Rock Head') &&\n\t\t\tability !== 'Regenerator'\n\t\t) return 'Focus Sash';\n\n\t\t// Default Items\n\t\tif (role === 'Fast Support') {\n\t\t\treturn (\n\t\t\t\tcounter.get('Physical') + counter.get('Special') >= 3 &&\n\t\t\t\t['nuzzle', 'rapidspin', 'uturn', 'voltswitch'].every(m => !moves.has(m)) &&\n\t\t\t\tthis.dex.getEffectiveness('Rock', species) < 2\n\t\t\t) ? 'Life Orb' : 'Leftovers';\n\t\t}\n\t\tif (!counter.get('Status')) {\n\t\t\treturn (\n\t\t\t\t(moves.has('uturn') || moves.has('voltswitch')) && !counter.get('Dragon') && !counter.get('Normal')\n\t\t\t) ? 'Expert Belt' : 'Life Orb';\n\t\t}\n\t\tif (\n\t\t\t['Fast Attacker', 'Setup Sweeper', 'Wallbreaker'].some(m => role === m) &&\n\t\t\tthis.dex.getEffectiveness('Rock', species) < 2 && ability !== 'Sturdy'\n\t\t) return 'Life Orb';\n\t\treturn 'Leftovers';\n\t}\n\n\trandomSet(\n\t\tspecies: string | Species,\n\t\tteamDetails: RandomTeamsTypes.TeamDetails = {},\n\t\tisLead = false\n\t): RandomTeamsTypes.RandomSet {\n\t\tspecies = this.dex.species.get(species);\n\t\tconst forme = this.getForme(species);\n\t\tconst sets = this.randomSets[species.id][\"sets\"];\n\t\tconst possibleSets = [];\n\t\tfor (const set of sets) possibleSets.push(set);\n\t\tconst set = this.sampleIfArray(possibleSets);\n\t\tconst role = set.role;\n\t\tconst movePool: string[] = Array.from(set.movepool);\n\t\tconst preferredTypes = set.preferredTypes;\n\t\tconst preferredType = this.sampleIfArray(preferredTypes) || '';\n\n\t\tlet ability = '';\n\t\tlet item = undefined;\n\n\t\tconst evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};\n\t\tconst ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};\n\n\t\tconst types = species.types;\n\t\tconst abilities = new Set(Object.values(species.abilities));\n\t\tif (species.unreleasedHidden) abilities.delete(species.abilities.H);\n\n\t\t// Get moves\n\t\tconst moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, movePool,\n\t\t\tpreferredType, role);\n\t\tconst counter = this.newQueryMoves(moves, species, preferredType, abilities);\n\n\t\t// Get ability\n\t\tability = this.getAbility(new Set(types), moves, abilities, counter, movePool, teamDetails, species,\n\t\t\tpreferredType, role);\n\n\t\t// Get items\n\t\titem = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);\n\t\tif (item === undefined) {\n\t\t\titem = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, preferredType, role);\n\t\t}\n\n\t\t// For Trick / Switcheroo\n\t\tif (item === 'Leftovers' && types.includes('Poison')) {\n\t\t\titem = 'Black Sludge';\n\t\t}\n\n\t\tconst level = this.getLevel(species);\n\n\t\t// Minimize confusion damage\n\t\tif (!counter.get('Physical') && !moves.has('copycat') && !moves.has('transform')) {\n\t\t\tevs.atk = 0;\n\t\t\tivs.atk = 0;\n\t\t}\n\n\t\t// We use a special variable to track Hidden Power\n\t\t// so that we can check for all Hidden Powers at once\n\t\tlet hasHiddenPower = false;\n\t\tfor (const move of moves) {\n\t\t\tif (move.startsWith('hiddenpower')) hasHiddenPower = true;\n\t\t}\n\n\t\tif (hasHiddenPower) {\n\t\t\tlet hpType;\n\t\t\tfor (const move of moves) {\n\t\t\t\tif (move.startsWith('hiddenpower')) hpType = move.substr(11);\n\t\t\t}\n\t\t\tif (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);\n\t\t\tconst HPivs = ivs.atk === 0 ? ZeroAttackHPIVs[hpType] : this.dex.types.get(hpType).HPivs;\n\t\t\tlet iv: StatID;\n\t\t\tfor (iv in HPivs) {\n\t\t\t\tivs[iv] = HPivs[iv]!;\n\t\t\t}\n\t\t}\n\n\t\t// Prepare optimal HP\n\t\tconst srImmunity = ability === 'Magic Guard';\n\t\tlet srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);\n\t\t// Crash damage move users want an odd HP to survive two misses\n\t\tif (['highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2;\n\t\twhile (evs.hp > 1) {\n\t\t\tconst hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);\n\t\t\tif (moves.has('substitute') && item === 'Sitrus Berry') {\n\t\t\t\t// Two Substitutes should activate Sitrus Berry\n\t\t\t\tif (hp % 4 === 0) break;\n\t\t\t} else if (moves.has('bellydrum') && item === 'Sitrus Berry') {\n\t\t\t\t// Belly Drum should activate Sitrus Berry\n\t\t\t\tif (hp % 2 === 0) break;\n\t\t\t} else {\n\t\t\t\t// Maximize number of Stealth Rock switch-ins\n\t\t\t\tif (srWeakness <= 0 || ability === 'Regenerator' || ['Black Sludge', 'Leftovers', 'Life Orb'].includes(item)) break;\n\t\t\t\tif (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;\n\t\t\t\t// Minimise number of Stealth Rock switch-ins to activate Sitrus Berry\n\t\t\t\tif (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;\n\t\t\t}\n\t\t\tevs.hp -= 4;\n\t\t}\n\n\t\tif (['gyroball', 'metalburst', 'trickroom'].some(m => moves.has(m))) {\n\t\t\tevs.spe = 0;\n\t\t\tivs.spe = (hasHiddenPower && level < 100) ? ivs.spe - 30 : 0;\n\t\t}\n\n\t\t// shuffle moves to add more randomness to camomons\n\t\tconst shuffledMoves = Array.from(moves);\n\t\tthis.prng.shuffle(shuffledMoves);\n\n\t\treturn {\n\t\t\tname: species.baseSpecies,\n\t\t\tspecies: forme,\n\t\t\tgender: species.gender,\n\t\t\tshiny: this.randomChance(1, 1024),\n\t\t\tlevel,\n\t\t\tmoves: shuffledMoves,\n\t\t\tability,\n\t\t\tevs,\n\t\t\tivs,\n\t\t\titem,\n\t\t\trole,\n\t\t};\n\t}\n\n\trandomFactorySets: {[format: string]: {[species: string]: BattleFactorySpecies}} = require('./factory-sets.json');\n\n\trandomFactorySet(\n\t\tspecies: Species,\n\t\tteamData: RandomTeamsTypes.FactoryTeamDetails,\n\t\ttier: string\n\t): RandomTeamsTypes.RandomFactorySet | null {\n\t\tconst id = toID(species.name);\n\t\t// const flags = this.randomFactorySets[tier][id].flags;\n\t\tconst setList = this.randomFactorySets[tier][id].sets;\n\n\t\tconst itemsMax: {[k: string]: number} = {choicespecs: 1, choiceband: 1, choicescarf: 1};\n\t\tconst movesMax: {[k: string]: number} = {\n\t\t\trapidspin: 1, batonpass: 1, stealthrock: 1, defog: 1, spikes: 1, toxicspikes: 1,\n\t\t};\n\t\tconst requiredMoves: {[k: string]: string} = {stealthrock: 'hazardSet', rapidspin: 'hazardClear', defog: 'hazardClear'};\n\t\tconst weatherAbilitiesRequire: {[k: string]: string} = {\n\t\t\thydration: 'raindance', swiftswim: 'raindance',\n\t\t\tleafguard: 'sunnyday', solarpower: 'sunnyday', chlorophyll: 'sunnyday',\n\t\t\tsandforce: 'sandstorm', sandrush: 'sandstorm', sandveil: 'sandstorm',\n\t\t\tsnowcloak: 'hail',\n\t\t};\n\t\tconst weatherAbilities = ['drizzle', 'drought', 'snowwarning', 'sandstream'];\n\n\t\t// Build a pool of eligible sets, given the team partners\n\t\t// Also keep track of sets with moves the team requires\n\t\tlet effectivePool: {set: AnyObject, moveVariants?: number[], itemVariants?: number, abilityVariants?: number}[] = [];\n\t\tconst priorityPool = [];\n\t\tfor (const curSet of setList) {\n\t\t\tif (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;\n\n\t\t\tconst itemData = this.dex.items.get(curSet.item);\n\t\t\tif (teamData.megaCount && teamData.megaCount > 0 && itemData.megaStone) continue; // reject 2+ mega stones\n\t\t\tif (itemsMax[itemData.id] && teamData.has[itemData.id] >= itemsMax[itemData.id]) continue;\n\n\t\t\tconst abilityState = this.dex.abilities.get(curSet.ability);\n\t\t\tif (weatherAbilitiesRequire[abilityState.id] && teamData.weather !== weatherAbilitiesRequire[abilityState.id]) continue;\n\t\t\tif (teamData.weather && weatherAbilities.includes(abilityState.id)) continue; // reject 2+ weather setters\n\n\t\t\tlet reject = false;\n\t\t\tlet hasRequiredMove = false;\n\t\t\tconst curSetVariants = [];\n\t\t\tfor (const move of curSet.moves) {\n\t\t\t\tconst variantIndex = this.random(move.length);\n\t\t\t\tconst moveId = toID(move[variantIndex]);\n\t\t\t\tif (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) {\n\t\t\t\t\treject = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (requiredMoves[moveId] && !teamData.has[requiredMoves[moveId]]) {\n\t\t\t\t\thasRequiredMove = true;\n\t\t\t\t}\n\t\t\t\tcurSetVariants.push(variantIndex);\n\t\t\t}\n\t\t\tif (reject) continue;\n\t\t\teffectivePool.push({set: curSet, moveVariants: curSetVariants});\n\t\t\tif (hasRequiredMove) priorityPool.push({set: curSet, moveVariants: curSetVariants});\n\t\t}\n\t\tif (priorityPool.length) effectivePool = priorityPool;\n\n\t\tif (!effectivePool.length) {\n\t\t\tif (!teamData.forceResult) return null;\n\t\t\tfor (const curSet of setList) {\n\t\t\t\teffectivePool.push({set: curSet});\n\t\t\t}\n\t\t}\n\n\t\tconst setData = this.sample(effectivePool);\n\t\tconst moves = [];\n\t\tfor (const [i, moveSlot] of setData.set.moves.entries()) {\n\t\t\tmoves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : this.sample(moveSlot));\n\t\t}\n\n\t\treturn {\n\t\t\tname: setData.set.name || species.baseSpecies,\n\t\t\tspecies: setData.set.species,\n\t\t\tgender: setData.set.gender || species.gender || (this.randomChance(1, 2) ? 'M' : 'F'),\n\t\t\titem: setData.set.item || '',\n\t\t\tability: setData.set.ability || species.abilities['0'],\n\t\t\tshiny: typeof setData.set.shiny === 'undefined' ? this.randomChance(1, 1024) : setData.set.shiny,\n\t\t\tlevel: this.adjustLevel || 100,\n\t\t\thappiness: typeof setData.set.happiness === 'undefined' ? 255 : setData.set.happiness,\n\t\t\tevs: setData.set.evs || {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84},\n\t\t\tivs: setData.set.ivs || {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31},\n\t\t\tnature: setData.set.nature || 'Serious',\n\t\t\tmoves: moves,\n\t\t};\n\t}\n\n\trandomFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] {\n\t\tthis.enforceNoDirectCustomBanlistChanges();\n\n\t\tconst forceResult = (depth >= 12);\n\n\t\t// The teams generated depend on the tier choice in such a way that\n\t\t// no exploitable information is leaked from rolling the tier in getTeam(p1).\n\t\tif (!this.factoryTier) this.factoryTier = this.sample(['Uber', 'OU', 'UU', 'RU', 'NU', 'PU']);\n\t\tconst chosenTier = this.factoryTier;\n\n\t\tconst pokemon = [];\n\n\t\tconst pokemonPool = Object.keys(this.randomFactorySets[chosenTier]);\n\n\t\tconst teamData: TeamData = {\n\t\t\ttypeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, has: {}, forceResult,\n\t\t\tweaknesses: {}, resistances: {},\n\t\t};\n\t\tconst requiredMoveFamilies = ['hazardSet', 'hazardClear'];\n\t\tconst requiredMoves: {[k: string]: string} = {stealthrock: 'hazardSet', rapidspin: 'hazardClear', defog: 'hazardClear'};\n\t\tconst weatherAbilitiesSet: {[k: string]: string} = {\n\t\t\tdrizzle: 'raindance', drought: 'sunnyday', snowwarning: 'hail', sandstream: 'sandstorm',\n\t\t};\n\t\tconst resistanceAbilities: {[k: string]: string[]} = {\n\t\t\tdryskin: ['Water'], waterabsorb: ['Water'], stormdrain: ['Water'],\n\t\t\tflashfire: ['Fire'], heatproof: ['Fire'],\n\t\t\tlightningrod: ['Electric'], motordrive: ['Electric'], voltabsorb: ['Electric'],\n\t\t\tsapsipper: ['Grass'],\n\t\t\tthickfat: ['Ice', 'Fire'],\n\t\t\tlevitate: ['Ground'],\n\t\t};\n\n\t\twhile (pokemonPool.length && pokemon.length < this.maxTeamSize) {\n\t\t\tconst species = this.dex.species.get(this.sampleNoReplace(pokemonPool));\n\t\t\tif (!species.exists) continue;\n\n\t\t\tconst speciesFlags = this.randomFactorySets[chosenTier][species.id].flags;\n\n\t\t\t// Limit to one of each species (Species Clause)\n\t\t\tif (teamData.baseFormes[species.baseSpecies]) continue;\n\n\t\t\t// Limit the number of Megas to one\n\t\t\tif (!teamData.megaCount) teamData.megaCount = 0;\n\t\t\tif (teamData.megaCount >= 1 && speciesFlags.megaOnly) continue;\n\n\t\t\t// Dynamically scale limits for different team sizes. The default and minimum value is 1.\n\t\t\tconst limitFactor = Math.round(this.maxTeamSize / 6) || 1;\n\n\t\t\t// Limit 2 of any type\n\t\t\tconst types = species.types;\n\t\t\tlet skip = false;\n\t\t\tfor (const type of types) {\n\t\t\t\tif (teamData.typeCount[type] >= 2 * limitFactor && this.randomChance(4, 5)) {\n\t\t\t\t\tskip = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (skip) continue;\n\n\t\t\tconst set = this.randomFactorySet(species, teamData, chosenTier);\n\t\t\tif (!set) continue;\n\n\t\t\t// Limit 1 of any type combination\n\t\t\tlet typeCombo = types.slice().sort().join();\n\t\t\tif (set.ability === 'Drought' || set.ability === 'Drizzle') {\n\t\t\t\t// Drought and Drizzle don't count towards the type combo limit\n\t\t\t\ttypeCombo = set.ability;\n\t\t\t}\n\t\t\tif (teamData.typeComboCount[typeCombo] >= 1 * limitFactor) continue;\n\n\t\t\t// Okay, the set passes, add it to our team\n\t\t\tpokemon.push(set);\n\n\t\t\t// Now that our Pokemon has passed all checks, we can update team data:\n\t\t\tfor (const type of types) {\n\t\t\t\tif (type in teamData.typeCount) {\n\t\t\t\t\tteamData.typeCount[type]++;\n\t\t\t\t} else {\n\t\t\t\t\tteamData.typeCount[type] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tteamData.typeComboCount[typeCombo] = (teamData.typeComboCount[typeCombo] + 1) || 1;\n\n\t\t\tteamData.baseFormes[species.baseSpecies] = 1;\n\n\t\t\tconst itemData = this.dex.items.get(set.item);\n\t\t\tif (itemData.megaStone) teamData.megaCount++;\n\t\t\tif (itemData.id in teamData.has) {\n\t\t\t\tteamData.has[itemData.id]++;\n\t\t\t} else {\n\t\t\t\tteamData.has[itemData.id] = 1;\n\t\t\t}\n\n\t\t\tconst abilityState = this.dex.abilities.get(set.ability);\n\t\t\tif (abilityState.id in weatherAbilitiesSet) {\n\t\t\t\tteamData.weather = weatherAbilitiesSet[abilityState.id];\n\t\t\t}\n\n\t\t\tfor (const move of set.moves) {\n\t\t\t\tconst moveId = toID(move);\n\t\t\t\tif (moveId in teamData.has) {\n\t\t\t\t\tteamData.has[moveId]++;\n\t\t\t\t} else {\n\t\t\t\t\tteamData.has[moveId] = 1;\n\t\t\t\t}\n\t\t\t\tif (moveId in requiredMoves) {\n\t\t\t\t\tteamData.has[requiredMoves[moveId]] = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const typeName of this.dex.types.names()) {\n\t\t\t\t// Cover any major weakness (3+) with at least one resistance\n\t\t\t\tif (teamData.resistances[typeName] >= 1) continue;\n\t\t\t\tif (resistanceAbilities[abilityState.id]?.includes(typeName) || !this.dex.getImmunity(typeName, types)) {\n\t\t\t\t\t// Heuristic: assume that Pokemon with these abilities don't have (too) negative typing.\n\t\t\t\t\tteamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;\n\t\t\t\t\tif (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst typeMod = this.dex.getEffectiveness(typeName, types);\n\t\t\t\tif (typeMod < 0) {\n\t\t\t\t\tteamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;\n\t\t\t\t\tif (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;\n\t\t\t\t} else if (typeMod > 0) {\n\t\t\t\t\tteamData.weaknesses[typeName] = (teamData.weaknesses[typeName] || 0) + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (pokemon.length < this.maxTeamSize) return this.randomFactoryTeam(side, ++depth);\n\n\t\t// Quality control\n\t\tif (!teamData.forceResult) {\n\t\t\tfor (const requiredFamily of requiredMoveFamilies) {\n\t\t\t\tif (!teamData.has[requiredFamily]) return this.randomFactoryTeam(side, ++depth);\n\t\t\t}\n\t\t\tfor (const type in teamData.weaknesses) {\n\t\t\t\tif (teamData.weaknesses[type] >= 3) return this.randomFactoryTeam(side, ++depth);\n\t\t\t}\n\t\t}\n\n\t\treturn pokemon;\n\t}\n}\n\nexport default RandomGen6Teams;\n"], "mappings": "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", "names": ["import_random_teams", "RandomGen7Teams", "set"] }