{ "version": 3, "sources": ["../../../../../data/mods/gen7/random-teams.ts"], "sourcesContent": ["import {MoveCounter, RandomGen8Teams, TeamData, OldRandomBattleSpecies} from '../gen8/random-teams';\r\nimport {PRNG, PRNGSeed} from '../../../sim/prng';\r\nimport {Utils} from '../../../lib';\r\nimport {toID} from '../../../sim/dex';\r\n\r\nexport interface BattleFactorySpecies {\r\n\tflags: {megaOnly?: 1, zmoveOnly?: 1, limEevee?: 1};\r\n\tsets: BattleFactorySet[];\r\n}\r\ninterface BattleFactorySet {\r\n\tspecies: string;\r\n\titem: string;\r\n\tability: string;\r\n\tnature: string;\r\n\tmoves: string[];\r\n\tevs?: Partial;\r\n\tivs?: Partial;\r\n}\r\n\r\nconst ZeroAttackHPIVs: {[k: string]: SparseStatsTable} = {\r\n\tgrass: {hp: 30, spa: 30},\r\n\tfire: {spa: 30, spe: 30},\r\n\tice: {def: 30},\r\n\tground: {spa: 30, spd: 30},\r\n\tfighting: {def: 30, spa: 30, spd: 30, spe: 30},\r\n\telectric: {def: 30, spe: 30},\r\n\tpsychic: {spe: 30},\r\n\tflying: {spa: 30, spd: 30, spe: 30},\r\n\trock: {def: 30, spd: 30, spe: 30},\r\n};\r\n\r\nexport class RandomGen7Teams extends RandomGen8Teams {\r\n\trandomData: {[species: string]: OldRandomBattleSpecies} = require('./random-data.json');\r\n\r\n\tconstructor(format: Format | string, prng: PRNG | PRNGSeed | null) {\r\n\t\tsuper(format, prng);\r\n\r\n\t\tthis.noStab = [...this.noStab, 'voltswitch'];\r\n\r\n\t\tthis.moveEnforcementCheckers = {\r\n\t\t\tBug: (movePool, moves, abilities, types, counter) => (['megahorn', 'pinmissile'].some(m => movePool.includes(m)) ||\r\n\t\t\t\t!counter.get('Bug') && abilities.has('Tinted Lens')),\r\n\t\t\tDark: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t(!counter.get('Dark') && !abilities.has('Protean')) ||\r\n\t\t\t\t(moves.has('pursuit') && species.types.length > 1 && counter.get('Dark') === 1)\r\n\t\t\t),\r\n\t\t\tDragon: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t!counter.get('Dragon') &&\r\n\t\t\t\t!abilities.has('Aerilate') && !abilities.has('Pixilate') &&\r\n\t\t\t\t!moves.has('fly') && !moves.has('rest') && !moves.has('sleeptalk')\r\n\t\t\t),\r\n\t\t\tElectric: (movePool, moves, abilities, types, counter) => !counter.get('Electric') || movePool.includes('thunder'),\r\n\t\t\tFairy: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t(!counter.get('Fairy') && !types.has('Flying') && !abilities.has('Pixilate'))\r\n\t\t\t),\r\n\t\t\tFighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting') || !counter.get('stab'),\r\n\t\t\tFire: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t!counter.get('Fire') || ['eruption', 'quiverdance'].some(m => movePool.includes(m)) ||\r\n\t\t\t\tmoves.has('flamecharge') && (movePool.includes('flareblitz') || movePool.includes('blueflare'))\r\n\t\t\t),\r\n\t\t\tFlying: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t!counter.get('Flying') && (\r\n\t\t\t\t\tspecies.id === 'rotomfan' ||\r\n\t\t\t\t\tabilities.has('Gale Wings') ||\r\n\t\t\t\t\tabilities.has('Serene Grace') || (\r\n\t\t\t\t\t\ttypes.has('Normal') && (movePool.includes('beakblast') || movePool.includes('bravebird'))\r\n\t\t\t\t\t)\r\n\t\t\t\t)\r\n\t\t\t),\r\n\t\t\tGhost: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t(!counter.get('Ghost') || movePool.includes('spectralthief')) &&\r\n\t\t\t\t!types.has('Dark') &&\r\n\t\t\t\t!abilities.has('Steelworker')\r\n\t\t\t),\r\n\t\t\tGrass: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t!counter.get('Grass') && (species.baseStats.atk >= 100 || movePool.includes('leafstorm'))\r\n\t\t\t),\r\n\t\t\tGround: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t!counter.get('Ground') && !moves.has('rest') && !moves.has('sleeptalk')\r\n\t\t\t),\r\n\t\t\tIce: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t!abilities.has('Refrigerate') && (\r\n\t\t\t\t\t!counter.get('Ice') ||\r\n\t\t\t\t\tmovePool.includes('iciclecrash') ||\r\n\t\t\t\t\t(abilities.has('Snow Warning') && movePool.includes('blizzard'))\r\n\t\t\t\t)\r\n\t\t\t),\r\n\t\t\tNormal: movePool => movePool.includes('facade'),\r\n\t\t\tPoison: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t!counter.get('Poison') &&\r\n\t\t\t\t(!!counter.setupType || abilities.has('Adaptability') || abilities.has('Sheer Force') || movePool.includes('gunkshot'))\r\n\t\t\t),\r\n\t\t\tPsychic: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t!counter.get('Psychic') && (\r\n\t\t\t\t\tabilities.has('Psychic Surge') ||\r\n\t\t\t\t\tmovePool.includes('psychicfangs') ||\r\n\t\t\t\t\t(!types.has('Steel') && !types.has('Flying') && !abilities.has('Pixilate') &&\r\n\t\t\t\t\t\tcounter.get('stab') < species.types.length)\r\n\t\t\t\t)\r\n\t\t\t),\r\n\t\t\tRock: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t!counter.get('Rock') &&\r\n\t\t\t\t!types.has('Fairy') &&\r\n\t\t\t\t(counter.setupType === 'Physical' || species.baseStats.atk >= 105 || abilities.has('Rock Head'))\r\n\t\t\t),\r\n\t\t\tSteel: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t!counter.get('Steel') && (species.baseStats.atk >= 100 || abilities.has('Steelworker'))\r\n\t\t\t),\r\n\t\t\tWater: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t(!counter.get('Water') && !abilities.has('Protean')) ||\r\n\t\t\t\t!counter.get('stab') ||\r\n\t\t\t\tmovePool.includes('crabhammer') ||\r\n\t\t\t\t(abilities.has('Huge Power') && movePool.includes('aquajet'))\r\n\t\t\t),\r\n\t\t\tAdaptability: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t!counter.setupType &&\r\n\t\t\t\tspecies.types.length > 1 &&\r\n\t\t\t\t(!counter.get(species.types[0]) || !counter.get(species.types[1]))\r\n\t\t\t),\r\n\t\t\tContrary: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t!counter.get('contrary') && species.name !== 'Shuckle'\r\n\t\t\t),\r\n\t\t\t'Slow Start': movePool => movePool.includes('substitute'),\r\n\t\t\tprotect: movePool => movePool.includes('wish'),\r\n\t\t\twish: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\tspecies.baseStats.hp < 110 && !abilities.has('Regenerator') && movePool.includes('protect')\r\n\t\t\t),\r\n\t\t};\r\n\t}\r\n\r\n\tshouldCullMove(\r\n\t\tmove: Move,\r\n\t\ttypes: Set,\r\n\t\tmoves: Set,\r\n\t\tabilities: Set,\r\n\t\tcounter: MoveCounter,\r\n\t\tmovePool: string[],\r\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\r\n\t\tspecies: Species,\r\n\t\tisLead: boolean,\r\n\t\tisDoubles: boolean\r\n\t): {cull: boolean, isSetup?: boolean} {\r\n\t\tconst hasRestTalk = moves.has('rest') && moves.has('sleeptalk');\r\n\t\tswitch (move.id) {\r\n\t\t// Not very useful without their supporting moves\r\n\t\tcase 'clangingscales': case 'electricterrain': case 'happyhour': case 'holdhands':\r\n\t\t\treturn {\r\n\t\t\t\tcull: !!teamDetails.zMove || hasRestTalk,\r\n\t\t\t\tisSetup: move.id === 'happyhour' || move.id === 'holdhands',\r\n\t\t\t};\r\n\t\tcase 'cottonguard': case 'defendorder':\r\n\t\t\treturn {cull: !counter.get('recovery') && !moves.has('rest')};\r\n\t\tcase 'bounce': case 'dig': case 'fly':\r\n\t\t\treturn {cull: !!teamDetails.zMove || counter.setupType !== 'Physical'};\r\n\t\tcase 'focuspunch':\r\n\t\t\treturn {cull: !moves.has('substitute') || counter.damagingMoves.size < 2};\r\n\t\tcase 'icebeam':\r\n\t\t\treturn {cull: abilities.has('Tinted Lens') && !!counter.get('Status')};\r\n\t\tcase 'lightscreen':\r\n\t\t\tif (movePool.length > 1) {\r\n\t\t\t\tconst screen = movePool.indexOf('reflect');\r\n\t\t\t\tif (screen >= 0) this.fastPop(movePool, screen);\r\n\t\t\t}\r\n\t\t\treturn {cull: !moves.has('reflect')};\r\n\t\tcase 'perishsong':\r\n\t\t\treturn {cull: !moves.has('protect')};\r\n\t\tcase 'reflect':\r\n\t\t\tif (movePool.length > 1) {\r\n\t\t\t\tconst screen = movePool.indexOf('lightscreen');\r\n\t\t\t\tif (screen >= 0) this.fastPop(movePool, screen);\r\n\t\t\t}\r\n\t\t\treturn {cull: !moves.has('calmmind') && !moves.has('lightscreen')};\r\n\t\tcase 'rest':\r\n\t\t\treturn {cull: movePool.includes('sleeptalk')};\r\n\t\tcase 'sleeptalk':\r\n\t\t\tif (movePool.length > 1) {\r\n\t\t\t\tconst rest = movePool.indexOf('rest');\r\n\t\t\t\tif (rest >= 0) this.fastPop(movePool, rest);\r\n\t\t\t}\r\n\t\t\treturn {cull: !moves.has('rest')};\r\n\t\tcase 'storedpower':\r\n\t\t\treturn {cull: !counter.setupType};\r\n\t\tcase 'switcheroo': case 'trick':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tcounter.get('Physical') + counter.get('Special') < 3 ||\r\n\t\t\t\t['electroweb', 'snarl', 'suckerpunch'].some(m => moves.has(m))\r\n\t\t\t)};\r\n\r\n\t\t// Set up once and only if we have the moves for it\r\n\t\tcase 'bellydrum': case 'bulkup': case 'coil': case 'curse': case 'dragondance': case 'honeclaws': case 'swordsdance':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tcounter.setupType !== 'Physical' ||\r\n\t\t\t\tcounter.get('physicalsetup') > 1 ||\r\n\t\t\t\t(counter.get('Physical') + counter.get('physicalpool') < 2 && !hasRestTalk) ||\r\n\t\t\t\t(move.id === 'bulkup' && hasRestTalk) ||\r\n\t\t\t\t(move.id === 'bellydrum' && !abilities.has('Unburden') && !counter.get('priority'))\r\n\t\t\t), isSetup: true};\r\n\t\tcase 'calmmind': case 'geomancy': case 'nastyplot': case 'tailglow':\r\n\t\t\tif (types.has('Dark') && moves.has('darkpulse')) {\r\n\t\t\t\tcounter.setupType = 'Special';\r\n\t\t\t\treturn {cull: false, isSetup: true};\r\n\t\t\t}\r\n\t\t\treturn {cull: (\r\n\t\t\t\tcounter.setupType !== 'Special' ||\r\n\t\t\t\tcounter.get('specialsetup') > 1 ||\r\n\t\t\t\t(counter.get('Special') + counter.get('specialpool') < 2 && !hasRestTalk)\r\n\t\t\t), isSetup: true};\r\n\t\tcase 'growth': case 'shellsmash': case 'workup':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tcounter.setupType !== 'Mixed' ||\r\n\t\t\t\tcounter.get('mixedsetup') > 1 ||\r\n\t\t\t\tcounter.damagingMoves.size + counter.get('physicalpool') + counter.get('specialpool') < 2 ||\r\n\t\t\t\t(move.id === 'growth' && !moves.has('sunnyday'))\r\n\t\t\t), isSetup: true};\r\n\t\tcase 'agility': case 'autotomize': case 'rockpolish': case 'shiftgear':\r\n\t\t\treturn {cull: counter.damagingMoves.size < 2 || hasRestTalk, isSetup: !counter.setupType};\r\n\t\tcase 'flamecharge':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('dracometeor') ||\r\n\t\t\t\tmoves.has('overheat') ||\r\n\t\t\t\t(counter.damagingMoves.size < 3 && !counter.setupType)\r\n\t\t\t)};\r\n\r\n\t\t// Bad after setup\r\n\t\tcase 'circlethrow': case 'dragontail':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.get('speedsetup') ||\r\n\t\t\t\t(isDoubles && moves.has('superpower')) ||\r\n\t\t\t\t(!!counter.setupType && ((!moves.has('rest') && !moves.has('sleeptalk')) || moves.has('stormthrow'))) ||\r\n\t\t\t\t['encore', 'raindance', 'roar', 'trickroom', 'whirlwind'].some(m => moves.has(m)) ||\r\n\t\t\t\t(counter.get(move.type) > 1 && counter.get('Status') > 1) ||\r\n\t\t\t\t(abilities.has('Sheer Force') && !!counter.get('sheerforce'))\r\n\t\t\t)};\r\n\t\tcase 'defog':\r\n\t\t\treturn {cull: !!counter.setupType || moves.has('spikes') || moves.has('stealthrock') || !!teamDetails.defog};\r\n\t\tcase 'fakeout': case 'tailwind':\r\n\t\t\treturn {cull: !!counter.setupType || ['substitute', 'switcheroo', 'trick'].some(m => moves.has(m))};\r\n\t\tcase 'foulplay':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\t!!counter.get('speedsetup') ||\r\n\t\t\t\tcounter.get('Dark') > 2 ||\r\n\t\t\t\tmoves.has('clearsmog') ||\r\n\t\t\t\t(!!counter.get('priority') && counter.damagingMoves.size - 1 === counter.get('priority')) ||\r\n\t\t\t\thasRestTalk\r\n\t\t\t)};\r\n\t\tcase 'haze': case 'spikes':\r\n\t\t\treturn {cull: !!counter.setupType || !!counter.get('speedsetup') || moves.has('trickroom')};\r\n\t\tcase 'healbell': case 'technoblast':\r\n\t\t\treturn {cull: !!counter.get('speedsetup')};\r\n\t\tcase 'healingwish': case 'memento':\r\n\t\t\treturn {cull: !!counter.setupType || !!counter.get('recovery') || moves.has('substitute')};\r\n\t\tcase 'helpinghand': case 'superfang': case 'yawn':\r\n\t\t\treturn {cull: !!counter.setupType};\r\n\t\tcase 'icywind': case 'stringshot':\r\n\t\t\treturn {cull: !!counter.get('speedsetup') || moves.has('trickroom')};\r\n\t\tcase 'leechseed': case 'roar': case 'whirlwind':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\t!!counter.get('speedsetup') ||\r\n\t\t\t\tmoves.has('dragontail') ||\r\n\t\t\t\t(isDoubles && (movePool.includes('protect') || movePool.includes('spikyshield')))\r\n\t\t\t)};\r\n\t\tcase 'protect':\r\n\t\t\tconst doublesCondition = (\r\n\t\t\t\tmoves.has('fakeout') ||\r\n\t\t\t\t(moves.has('tailwind') && moves.has('roost')) ||\r\n\t\t\t\tmovePool.includes('bellydrum') ||\r\n\t\t\t\tmovePool.includes('shellsmash')\r\n\t\t\t);\r\n\t\t\tconst singlesCondition = (\r\n\t\t\t\t(counter.setupType && !moves.has('wish')) ||\r\n\t\t\t\t(!['Guts', 'Harvest', 'Poison Heal', 'Quick Feet', 'Speed Boost'].some(abil => abilities.has(abil)) &&\r\n\t\t\t\t!['leechseed', 'perishsong', 'toxic', 'wish'].some(m => moves.has(m)) &&\r\n\t\t\t\tspecies.id !== 'sharpedomega')\r\n\t\t\t);\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(isDoubles ? doublesCondition : singlesCondition) ||\r\n\t\t\t\t!!counter.get('speedsetup') ||\r\n\t\t\t\tmoves.has('rest') || moves.has('roar') || moves.has('whirlwind') ||\r\n\t\t\t\t(moves.has('lightscreen') && moves.has('reflect'))\r\n\t\t\t)};\r\n\t\tcase 'pursuit':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\tcounter.get('Status') > 1 ||\r\n\t\t\t\tcounter.get('Dark') > 2 ||\r\n\t\t\t\t(moves.has('knockoff') && !types.has('Dark'))\r\n\t\t\t)};\r\n\t\tcase 'rapidspin':\r\n\t\t\treturn {cull: !!counter.setupType || !!teamDetails.rapidSpin};\r\n\t\tcase 'reversal':\r\n\t\t\treturn {cull: moves.has('substitute') && !!teamDetails.zMove};\r\n\t\tcase 'seismictoss':\r\n\t\t\treturn {cull: !abilities.has('Parental Bond') && (counter.damagingMoves.size > 1 || !!counter.setupType)};\r\n\t\tcase 'stealthrock':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\t!!counter.get('speedsetup') ||\r\n\t\t\t\t['rest', 'substitute', 'trickroom'].some(m => moves.has(m)) ||\r\n\t\t\t\t!!teamDetails.stealthRock\r\n\t\t\t)};\r\n\t\tcase 'stickyweb':\r\n\t\t\treturn {cull: !!teamDetails.stickyWeb};\r\n\t\tcase 'toxicspikes':\r\n\t\t\treturn {cull: !!counter.setupType || !!teamDetails.toxicSpikes};\r\n\t\tcase 'trickroom':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\t!!counter.get('speedsetup') ||\r\n\t\t\t\tcounter.damagingMoves.size < 2 ||\r\n\t\t\t\tmoves.has('lightscreen') ||\r\n\t\t\t\tmoves.has('reflect')\r\n\t\t\t)};\r\n\t\tcase 'uturn':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(abilities.has('Speed Boost') && moves.has('protect')) ||\r\n\t\t\t\t(abilities.has('Protean') && counter.get('Status') > 2) ||\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\t!!counter.get('speedsetup')\r\n\t\t\t)};\r\n\t\tcase 'voltswitch':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\t!!counter.get('speedsetup') ||\r\n\t\t\t\t['electricterrain', 'raindance', 'uturn'].some(m => moves.has(m))\r\n\t\t\t)};\r\n\t\tcase 'wish':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tspecies.baseStats.hp < 110 &&\r\n\t\t\t\t!abilities.has('Regenerator') &&\r\n\t\t\t\t!movePool.includes('protect') &&\r\n\t\t\t\t!['ironhead', 'protect', 'spikyshield', 'uturn'].some(m => moves.has(m))\r\n\t\t\t)};\r\n\r\n\t\t// Bit redundant to have both\r\n\t\t// Attacks:\r\n\t\tcase 'bugbite': case 'bugbuzz': case 'infestation': case 'signalbeam':\r\n\t\t\treturn {cull: moves.has('uturn') && !counter.setupType && !abilities.has('Tinted Lens')};\r\n\t\tcase 'darkestlariat': case 'nightslash':\r\n\t\t\treturn {cull: moves.has('knockoff') || moves.has('pursuit')};\r\n\t\tcase 'darkpulse':\r\n\t\t\treturn {cull: ['crunch', 'knockoff', 'hyperspacefury'].some(m => moves.has(m)) && counter.setupType !== 'Special'};\r\n\t\tcase 'suckerpunch':\r\n\t\t\treturn {cull: counter.damagingMoves.size < 2 || moves.has('glare') || !types.has('Dark') && counter.get('Dark') > 1};\r\n\t\tcase 'dracometeor':\r\n\t\t\treturn {cull: hasRestTalk};\r\n\t\tcase 'dragonpulse': case 'spacialrend':\r\n\t\t\treturn {cull: moves.has('dracometeor') || moves.has('outrage') || (moves.has('dragontail') && !counter.setupType)};\r\n\t\tcase 'outrage':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('dragonclaw') ||\r\n\t\t\t\t(moves.has('dracometeor') && counter.damagingMoves.size < 3) ||\r\n\t\t\t\t(moves.has('clangingscales') && !teamDetails.zMove)\r\n\t\t\t)};\r\n\t\tcase 'thunderbolt':\r\n\t\t\treturn {cull: ['discharge', 'wildcharge'].some(m => moves.has(m))};\r\n\t\tcase 'moonblast':\r\n\t\t\treturn {cull: isDoubles && moves.has('dazzlinggleam')};\r\n\t\tcase 'aurasphere': case 'focusblast':\r\n\t\t\treturn {cull: (\r\n\t\t\t\thasRestTalk ||\r\n\t\t\t\t((moves.has('closecombat') || moves.has('superpower')) && counter.setupType !== 'Special')\r\n\t\t\t)};\r\n\t\tcase 'drainpunch':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(!moves.has('bulkup') && (moves.has('closecombat') || moves.has('highjumpkick'))) ||\r\n\t\t\t\t((moves.has('focusblast') || moves.has('superpower')) && counter.setupType !== 'Physical')\r\n\t\t\t)};\r\n\t\tcase 'closecombat': case 'highjumpkick':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(moves.has('bulkup') && moves.has('drainpunch')) ||\r\n\t\t\t\t(counter.setupType === 'Special' && ['aurasphere', 'focusblast'].some(m => moves.has(m) || movePool.includes(m)))\r\n\t\t\t)};\r\n\t\tcase 'dynamicpunch': case 'vacuumwave':\r\n\t\t\treturn {cull: (moves.has('closecombat') || moves.has('facade')) && counter.setupType !== 'Special'};\r\n\t\tcase 'stormthrow':\r\n\t\t\treturn {cull: moves.has('circlethrow') && hasRestTalk};\r\n\t\tcase 'superpower':\r\n\t\t\treturn {\r\n\t\t\t\tcull: (counter.get('Fighting') > 1 && !!counter.setupType) || (hasRestTalk && !abilities.has('Contrary')),\r\n\t\t\t\tisSetup: abilities.has('Contrary'),\r\n\t\t\t};\r\n\t\tcase 'fierydance': case 'heatwave':\r\n\t\t\treturn {cull: moves.has('fireblast') && (!!counter.get('Status') || isDoubles)};\r\n\t\tcase 'firefang': case 'firepunch': case 'flamethrower':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t['blazekick', 'heatwave', 'overheat'].some(m => moves.has(m)) ||\r\n\t\t\t\t((moves.has('fireblast') || moves.has('lavaplume')) && counter.setupType !== 'Physical')\r\n\t\t\t)};\r\n\t\tcase 'fireblast': case 'magmastorm':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(moves.has('flareblitz') && counter.setupType !== 'Special') ||\r\n\t\t\t\t(moves.has('lavaplume') && !counter.setupType && !counter.get('speedsetup'))\r\n\t\t\t)};\r\n\t\tcase 'lavaplume':\r\n\t\t\treturn {cull: moves.has('firepunch') || moves.has('fireblast') && (!!counter.setupType || !!counter.get('speedsetup'))};\r\n\t\tcase 'overheat':\r\n\t\t\treturn {cull: ['fireblast', 'flareblitz', 'lavaplume'].some(m => moves.has(m))};\r\n\t\tcase 'hurricane':\r\n\t\t\treturn {cull: moves.has('bravebird') || moves.has('airslash') && !!counter.get('Status')};\r\n\t\tcase 'hex':\r\n\t\t\treturn {cull: !moves.has('thunderwave') && !moves.has('willowisp')};\r\n\t\tcase 'shadowball':\r\n\t\t\treturn {cull: moves.has('darkpulse') || (moves.has('hex') && moves.has('willowisp'))};\r\n\t\tcase 'shadowclaw':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('shadowforce') ||\r\n\t\t\t\tmoves.has('shadowsneak') ||\r\n\t\t\t\t(moves.has('shadowball') && counter.setupType !== 'Physical')\r\n\t\t\t)};\r\n\t\tcase 'shadowsneak':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('trick') ||\r\n\t\t\t\thasRestTalk ||\r\n\t\t\t\t(types.has('Ghost') && species.types.length > 1 && counter.get('stab') < 2)\r\n\t\t\t)};\r\n\t\tcase 'gigadrain':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('petaldance') ||\r\n\t\t\t\tmoves.has('powerwhip') ||\r\n\t\t\t\t(!isDoubles && moves.has('seedbomb')) ||\r\n\t\t\t\t(moves.has('leafstorm') && counter.get('Special') < 4 && !counter.setupType && !moves.has('trickroom'))\r\n\t\t\t)};\r\n\t\tcase 'leafblade': case 'woodhammer':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(moves.has('gigadrain') && counter.setupType !== 'Physical') ||\r\n\t\t\t\t(moves.has('hornleech') && !!counter.setupType)\r\n\t\t\t)};\r\n\t\tcase 'leafstorm':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('trickroom') ||\r\n\t\t\t\t(isDoubles && moves.has('energyball')) ||\r\n\t\t\t\t(counter.get('Grass') > 1 && !!counter.setupType)\r\n\t\t\t)};\r\n\t\tcase 'seedbomb':\r\n\t\t\treturn {cull: moves.has('leafstorm') || isDoubles && moves.has('gigadrain')};\r\n\t\tcase 'solarbeam':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(!abilities.has('Drought') && !moves.has('sunnyday')) ||\r\n\t\t\t\tmoves.has('gigadrain') ||\r\n\t\t\t\tmoves.has('leafstorm')\r\n\t\t\t)};\r\n\t\tcase 'bonemerang': case 'precipiceblades':\r\n\t\t\treturn {cull: moves.has('earthquake')};\r\n\t\tcase 'earthpower':\r\n\t\t\treturn {cull: moves.has('earthquake') && counter.setupType !== 'Special'};\r\n\t\tcase 'earthquake':\r\n\t\t\treturn {cull: isDoubles && moves.has('highhorsepower') || moves.has('closecombat') && abilities.has('Aerilate')};\r\n\t\tcase 'freezedry':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('icebeam') || moves.has('icywind') || counter.get('stab') < species.types.length ||\r\n\t\t\t\t(moves.has('blizzard') && !!counter.setupType)\r\n\t\t\t)};\r\n\t\tcase 'bodyslam': case 'return':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('doubleedge') ||\r\n\t\t\t\t(moves.has('glare') && moves.has('headbutt')) ||\r\n\t\t\t\t(move.id === 'return' && moves.has('bodyslam'))\r\n\t\t\t)};\r\n\t\tcase 'endeavor':\r\n\t\t\treturn {cull: !isLead && !abilities.has('Defeatist')};\r\n\t\tcase 'explosion':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\tmoves.has('wish') ||\r\n\t\t\t\t(abilities.has('Refrigerate') && (moves.has('freezedry') || movePool.includes('return')))\r\n\t\t\t)};\r\n\t\tcase 'extremespeed': case 'skyattack':\r\n\t\t\treturn {cull: moves.has('substitute') || counter.setupType !== 'Physical' && moves.has('vacuumwave')};\r\n\t\tcase 'facade':\r\n\t\t\treturn {cull: moves.has('bulkup') || hasRestTalk};\r\n\t\tcase 'hiddenpower':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('rest') ||\r\n\t\t\t\t(!counter.get('stab') && counter.damagingMoves.size < 2) ||\r\n\t\t\t\t// Force Moonblast on Special-setup Fairies\r\n\t\t\t\t(counter.setupType === 'Special' && types.has('Fairy') && movePool.includes('moonblast'))\r\n\t\t\t)};\r\n\t\tcase 'hypervoice':\r\n\t\t\treturn {cull: moves.has('blizzard')};\r\n\t\tcase 'judgment':\r\n\t\t\treturn {cull: counter.setupType !== 'Special' && counter.get('stab') > 1};\r\n\t\tcase 'quickattack':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.get('speedsetup') ||\r\n\t\t\t\t(types.has('Rock') && !!counter.get('Status')) ||\r\n\t\t\t\tmoves.has('feint') ||\r\n\t\t\t\t(types.has('Normal') && !counter.get('stab'))\r\n\t\t\t)};\r\n\t\tcase 'weatherball':\r\n\t\t\treturn {cull: !moves.has('raindance') && !moves.has('sunnyday')};\r\n\t\tcase 'poisonjab':\r\n\t\t\treturn {cull: moves.has('gunkshot')};\r\n\t\tcase 'acidspray': case 'sludgewave':\r\n\t\t\treturn {cull: moves.has('poisonjab') || moves.has('sludgebomb')};\r\n\t\tcase 'psychic':\r\n\t\t\treturn {cull: moves.has('psyshock')};\r\n\t\tcase 'psychocut': case 'zenheadbutt':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t((moves.has('psychic') || moves.has('psyshock')) && counter.setupType !== 'Physical') ||\r\n\t\t\t\t(abilities.has('Contrary') && !counter.setupType && !!counter.get('physicalpool'))\r\n\t\t\t)};\r\n\t\tcase 'psyshock':\r\n\t\t\tconst psychic = movePool.indexOf('psychic');\r\n\t\t\tif (psychic >= 0) this.fastPop(movePool, psychic);\r\n\t\t\treturn {cull: false};\r\n\t\tcase 'headsmash':\r\n\t\t\treturn {cull: moves.has('stoneedge') || isDoubles && moves.has('rockslide')};\r\n\t\tcase 'rockblast': case 'rockslide':\r\n\t\t\treturn {cull: (moves.has('headsmash') || moves.has('stoneedge')) && !isDoubles};\r\n\t\tcase 'stoneedge':\r\n\t\t\treturn {cull: moves.has('rockslide') || (species.id === 'machamp' && !moves.has('dynamicpunch'))};\r\n\t\tcase 'bulletpunch':\r\n\t\t\treturn {cull: types.has('Steel') && counter.get('stab') < 2 && !abilities.has('Technician')};\r\n\t\tcase 'flashcannon':\r\n\t\t\treturn {cull: (moves.has('ironhead') || moves.has('meteormash')) && counter.setupType !== 'Special'};\r\n\t\tcase 'hydropump':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('liquidation') ||\r\n\t\t\t\tmoves.has('waterfall') ||\r\n\t\t\t\thasRestTalk || (\r\n\t\t\t\t\tmoves.has('scald') &&\r\n\t\t\t\t\t((counter.get('Special') < 4 && !moves.has('uturn')) || (species.types.length > 1 && counter.get('stab') < 3))\r\n\t\t\t\t)\r\n\t\t\t)};\r\n\t\tcase 'muddywater':\r\n\t\t\treturn {cull: isDoubles && (moves.has('scald') || moves.has('hydropump'))};\r\n\t\tcase 'originpulse': case 'surf':\r\n\t\t\treturn {cull: moves.has('hydropump') || moves.has('scald')};\r\n\t\tcase 'scald':\r\n\t\t\treturn {cull: ['liquidation', 'waterfall', 'waterpulse'].some(m => moves.has(m))};\r\n\r\n\t\t// Status:\r\n\t\tcase 'electroweb': case 'stunspore': case 'thunderwave':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\t!!counter.get('speedsetup') ||\r\n\t\t\t\thasRestTalk ||\r\n\t\t\t\t['discharge', 'spore', 'toxic', 'trickroom', 'yawn'].some(m => moves.has(m))\r\n\t\t\t)};\r\n\t\tcase 'glare': case 'headbutt':\r\n\t\t\treturn {cull: moves.has('bodyslam') || !moves.has('glare')};\r\n\t\tcase 'toxic':\r\n\t\t\tconst otherStatus = ['hypnosis', 'sleeppowder', 'toxicspikes', 'willowisp', 'yawn'].some(m => moves.has(m));\r\n\t\t\treturn {cull: otherStatus || !!counter.setupType || moves.has('flamecharge') || moves.has('raindance')};\r\n\t\tcase 'raindance':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tcounter.get('Physical') + counter.get('Special') < 2 ||\r\n\t\t\t\thasRestTalk ||\r\n\t\t\t\tmoves.has('rest') ||\r\n\t\t\t\t(!types.has('Water') && !counter.get('Water'))\r\n\t\t\t)};\r\n\t\tcase 'sunnyday':\r\n\t\t\tconst cull = (\r\n\t\t\t\tcounter.get('Physical') + counter.get('Special') < 2 ||\r\n\t\t\t\t(!abilities.has('Chlorophyll') && !abilities.has('Flower Gift') && !moves.has('solarbeam')) ||\r\n\t\t\t\thasRestTalk\r\n\t\t\t);\r\n\r\n\t\t\tif (cull && movePool.length > 1) {\r\n\t\t\t\tconst solarbeam = movePool.indexOf('solarbeam');\r\n\t\t\t\tif (solarbeam >= 0) this.fastPop(movePool, solarbeam);\r\n\t\t\t\tif (movePool.length > 1) {\r\n\t\t\t\t\tconst weatherball = movePool.indexOf('weatherball');\r\n\t\t\t\t\tif (weatherball >= 0) this.fastPop(movePool, weatherball);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn {cull};\r\n\t\tcase 'painsplit': case 'recover': case 'roost': case 'synthesis':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('leechseed') || moves.has('rest') ||\r\n\t\t\t\t(moves.has('wish') && (moves.has('protect') || movePool.includes('protect')))\r\n\t\t\t)};\r\n\t\tcase 'substitute':\r\n\t\t\tconst moveBasedCull = ['copycat', 'dragondance', 'shiftgear'].some(m => movePool.includes(m));\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('dracometeor') ||\r\n\t\t\t\t(moves.has('leafstorm') && !abilities.has('Contrary')) ||\r\n\t\t\t\t['encore', 'pursuit', 'rest', 'taunt', 'uturn', 'voltswitch', 'whirlwind'].some(m => moves.has(m)) ||\r\n\t\t\t\tmoveBasedCull\r\n\t\t\t)};\r\n\t\tcase 'powersplit':\r\n\t\t\treturn {cull: moves.has('guardsplit')};\r\n\t\tcase 'wideguard':\r\n\t\t\treturn {cull: moves.has('protect')};\r\n\t\tcase 'bravebird':\r\n\t\t\t// Hurricane > Brave Bird in the rain\r\n\t\t\treturn {cull: (moves.has('raindance') || abilities.has('Drizzle')) && movePool.includes('hurricane')};\r\n\t\t}\r\n\t\treturn {cull: false};\r\n\t}\r\n\r\n\tshouldCullAbility(\r\n\t\tability: string,\r\n\t\ttypes: Set,\r\n\t\tmoves: Set,\r\n\t\tabilities: Set,\r\n\t\tcounter: MoveCounter,\r\n\t\tmovePool: string[],\r\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\r\n\t\tspecies: Species,\r\n\t\tisDoubles: boolean\r\n\t): boolean {\r\n\t\tswitch (ability) {\r\n\t\tcase 'Battle Bond': case 'Dazzling': case 'Flare Boost': case 'Hyper Cutter':\r\n\t\tcase 'Ice Body': case 'Innards Out': case 'Moody': case 'Steadfast':\r\n\t\t\treturn true;\r\n\t\tcase 'Aerilate': case 'Galvanize': case 'Pixilate': case 'Refrigerate':\r\n\t\t\treturn !counter.get('Normal');\r\n\t\tcase 'Analytic': case 'Download':\r\n\t\t\treturn species.nfe;\r\n\t\tcase 'Battle Armor': case 'Sturdy':\r\n\t\t\treturn (!!counter.get('recoil') && !counter.get('recovery'));\r\n\t\tcase 'Chlorophyll': case 'Leaf Guard':\r\n\t\t\treturn (\r\n\t\t\t\tspecies.baseStats.spe > 100 ||\r\n\t\t\t\tabilities.has('Harvest') ||\r\n\t\t\t\t(!moves.has('sunnyday') && !teamDetails.sun)\r\n\t\t\t);\r\n\t\tcase 'Competitive':\r\n\t\t\treturn (!counter.get('Special') || moves.has('sleeptalk') && moves.has('rest'));\r\n\t\tcase 'Compound Eyes': case 'No Guard':\r\n\t\t\treturn !counter.get('inaccurate');\r\n\t\tcase 'Contrary': case 'Iron Fist': case 'Skill Link': case 'Strong Jaw':\r\n\t\t\treturn !counter.get(toID(ability));\r\n\t\tcase 'Defiant': case 'Justified': case 'Moxie':\r\n\t\t\treturn !counter.get('Physical') || moves.has('dragontail');\r\n\t\tcase 'Flash Fire':\r\n\t\t\treturn abilities.has('Drought');\r\n\t\tcase 'Gluttony':\r\n\t\t\treturn !moves.has('bellydrum');\r\n\t\tcase 'Harvest':\r\n\t\t\treturn abilities.has('Frisk');\r\n\t\tcase 'Hustle':\r\n\t\t\treturn counter.get('Physical') < 2;\r\n\t\tcase 'Hydration': case 'Rain Dish': case 'Swift Swim':\r\n\t\t\treturn (\r\n\t\t\t\tspecies.baseStats.spe > 100 || !moves.has('raindance') && !teamDetails.rain ||\r\n\t\t\t\t!moves.has('raindance') && ['Rock Head', 'Water Absorb'].some(abil => abilities.has(abil))\r\n\t\t\t);\r\n\t\tcase 'Slush Rush': case 'Snow Cloak':\r\n\t\t\treturn !teamDetails.hail;\r\n\t\tcase 'Immunity': case 'Snow Warning':\r\n\t\t\treturn (moves.has('facade') || moves.has('hypervoice'));\r\n\t\tcase 'Intimidate':\r\n\t\t\treturn (moves.has('bodyslam') || moves.has('rest') || abilities.has('Reckless') && counter.get('recoil') > 1);\r\n\t\tcase 'Lightning Rod':\r\n\t\t\treturn (\r\n\t\t\t\tspecies.types.includes('Ground') ||\r\n\t\t\t\t(!!teamDetails.rain || moves.has('raindance')) && abilities.has('Swift Swim')\r\n\t\t\t);\r\n\t\tcase 'Limber':\r\n\t\t\treturn species.types.includes('Electric');\r\n\t\tcase 'Liquid Voice':\r\n\t\t\treturn !counter.get('sound');\r\n\t\tcase 'Magic Guard': case 'Speed Boost':\r\n\t\t\treturn (abilities.has('Tinted Lens') && (!counter.get('Status') || moves.has('uturn')));\r\n\t\tcase 'Magician':\r\n\t\t\treturn moves.has('switcheroo');\r\n\t\tcase 'Magnet Pull':\r\n\t\t\treturn (!!counter.get('Normal') || !types.has('Electric') && !moves.has('earthpower'));\r\n\t\tcase 'Mold Breaker':\r\n\t\t\treturn (\r\n\t\t\t\tmoves.has('acrobatics') || moves.has('sleeptalk') ||\r\n\t\t\t\tabilities.has('Adaptability') || abilities.has('Iron Fist') ||\r\n\t\t\t\t(abilities.has('Sheer Force') && !!counter.get('sheerforce'))\r\n\t\t\t);\r\n\t\tcase 'Overgrow':\r\n\t\t\treturn !counter.get('Grass');\r\n\t\tcase 'Poison Heal':\r\n\t\t\treturn (abilities.has('Technician') && !!counter.get('technician'));\r\n\t\tcase 'Power Construct':\r\n\t\t\treturn species.forme === '10%';\r\n\t\tcase 'Prankster':\r\n\t\t\treturn !counter.get('Status');\r\n\t\tcase 'Pressure': case 'Synchronize':\r\n\t\t\treturn (counter.get('Status') < 2 || !!counter.get('recoil') || !!species.isMega);\r\n\t\tcase 'Regenerator':\r\n\t\t\treturn abilities.has('Magic Guard');\r\n\t\tcase 'Quick Feet':\r\n\t\t\treturn moves.has('bellydrum');\r\n\t\tcase 'Reckless': case 'Rock Head':\r\n\t\t\treturn (!counter.get('recoil') || !!species.isMega);\r\n\t\tcase 'Sand Force': case 'Sand Rush': case 'Sand Veil':\r\n\t\t\treturn !teamDetails.sand;\r\n\t\tcase 'Scrappy':\r\n\t\t\treturn !species.types.includes('Normal');\r\n\t\tcase 'Serene Grace':\r\n\t\t\treturn (!counter.get('serenegrace') || species.name === 'Blissey');\r\n\t\tcase 'Sheer Force':\r\n\t\t\treturn (!counter.get('sheerforce') || moves.has('doubleedge') || abilities.has('Guts') || !!species.isMega);\r\n\t\tcase 'Simple':\r\n\t\t\treturn (!counter.setupType && !moves.has('flamecharge'));\r\n\t\tcase 'Solar Power':\r\n\t\t\treturn (!counter.get('Special') || !teamDetails.sun || !!species.isMega);\r\n\t\tcase 'Swarm':\r\n\t\t\treturn (!counter.get('Bug') || !!species.isMega);\r\n\t\tcase 'Sweet Veil':\r\n\t\t\treturn types.has('Grass');\r\n\t\tcase 'Technician':\r\n\t\t\treturn (!counter.get('technician') || moves.has('tailslap') || !!species.isMega);\r\n\t\tcase 'Tinted Lens':\r\n\t\t\treturn (\r\n\t\t\t\tmoves.has('protect') || !!counter.get('damage') ||\r\n\t\t\t\t(counter.get('Status') > 2 && !counter.setupType) ||\r\n\t\t\t\tabilities.has('Prankster') ||\r\n\t\t\t\t(abilities.has('Magic Guard') && !!counter.get('Status'))\r\n\t\t\t);\r\n\t\tcase 'Torrent':\r\n\t\t\treturn (!counter.get('Water') || !!species.isMega);\r\n\t\tcase 'Unaware':\r\n\t\t\treturn (!!counter.setupType || abilities.has('Magic Guard'));\r\n\t\tcase 'Unburden':\r\n\t\t\treturn (!!species.isMega || abilities.has('Prankster') || !counter.setupType && !moves.has('acrobatics'));\r\n\t\tcase 'Water Absorb':\r\n\t\t\treturn moves.has('raindance') || ['Drizzle', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil));\r\n\t\tcase 'Weak Armor':\r\n\t\t\treturn counter.setupType !== 'Physical';\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetHighPriorityItem(\r\n\t\tability: string,\r\n\t\ttypes: Set,\r\n\t\tmoves: Set,\r\n\t\tcounter: MoveCounter,\r\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\r\n\t\tspecies: Species,\r\n\t\tisLead: boolean,\r\n\t\tisDoubles: boolean\r\n\t): string | undefined {\r\n\t\tif (species.requiredItems) {\r\n\t\t\tif (\r\n\t\t\t\tspecies.baseSpecies === 'Arceus' &&\r\n\t\t\t\t(moves.has('judgment') || !counter.get(species.types[0]) || teamDetails.zMove)\r\n\t\t\t) {\r\n\t\t\t\t// Judgment doesn't change type with Z-Crystals\r\n\t\t\t\treturn species.requiredItems[0];\r\n\t\t\t}\r\n\t\t\treturn this.sample(species.requiredItems);\r\n\t\t}\r\n\r\n\t\t// First, the extra high-priority items\r\n\t\tif (species.name === 'Dedenne') return moves.has('substitute') ? 'Petaya Berry' : 'Sitrus Berry';\r\n\t\tif (species.name === 'Deoxys-Attack') return (isLead && moves.has('stealthrock')) ? 'Focus Sash' : 'Life Orb';\r\n\t\tif (species.name === 'Farfetch\\u2019d') return 'Stick';\r\n\t\tif (species.name === 'Genesect' && moves.has('technoblast')) return 'Douse Drive';\r\n\t\tif (species.baseSpecies === 'Marowak') return 'Thick Club';\r\n\t\tif (species.name === 'Pikachu') return 'Light Ball';\r\n\t\tif (species.name === 'Shedinja' || species.name === 'Smeargle') return 'Focus Sash';\r\n\t\tif (species.name === 'Unfezant' && counter.get('Physical') >= 2) return 'Scope Lens';\r\n\t\tif (species.name === 'Unown') return 'Choice Specs';\r\n\t\tif (species.name === 'Wobbuffet') return 'Custap Berry';\r\n\t\tif (ability === 'Harvest' || ability === 'Emergency Exit' && !!counter.get('Status')) return 'Sitrus Berry';\r\n\t\tif (ability === 'Imposter') return 'Choice Scarf';\r\n\t\tif (ability === 'Poison Heal') return 'Toxic Orb';\r\n\t\tif (species.nfe) return (ability === 'Technician' && counter.get('Physical') >= 4) ? 'Choice Band' : 'Eviolite';\r\n\t\tif (moves.has('switcheroo') || moves.has('trick')) {\r\n\t\t\tif (species.baseStats.spe >= 60 && species.baseStats.spe <= 108) {\r\n\t\t\t\treturn 'Choice Scarf';\r\n\t\t\t} else {\r\n\t\t\t\treturn (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (moves.has('bellydrum')) {\r\n\t\t\tif (ability === 'Gluttony') {\r\n\t\t\t\treturn `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`;\r\n\t\t\t} else if (species.baseStats.spe <= 50 && !teamDetails.zMove && this.randomChance(1, 2)) {\r\n\t\t\t\treturn 'Normalium Z';\r\n\t\t\t} else {\r\n\t\t\t\treturn 'Sitrus Berry';\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (moves.has('copycat') && counter.get('Physical') >= 3) return 'Choice Band';\r\n\t\tif (moves.has('geomancy') || moves.has('skyattack')) return 'Power Herb';\r\n\t\tif (moves.has('shellsmash')) {\r\n\t\t\treturn (ability === 'Solid Rock' && !!counter.get('priority')) ? 'Weakness Policy' : 'White Herb';\r\n\t\t}\r\n\t\tif ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {\r\n\t\t\treturn (types.has('Fire') || ability === 'Quick Feet' || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb';\r\n\t\t}\r\n\t\tif (\r\n\t\t\t(ability === 'Magic Guard' && counter.damagingMoves.size > 1) ||\r\n\t\t\t(ability === 'Sheer Force' && counter.get('sheerforce'))\r\n\t\t) {\r\n\t\t\treturn 'Life Orb';\r\n\t\t}\r\n\t\tif (ability === 'Unburden') return moves.has('fakeout') ? 'Normal Gem' : 'Sitrus Berry';\r\n\t\tif (moves.has('acrobatics')) return '';\r\n\t\tif (moves.has('electricterrain') || ability === 'Electric Surge' && moves.has('thunderbolt')) return 'Electrium Z';\r\n\t\tif (\r\n\t\t\tmoves.has('happyhour') ||\r\n\t\t\tmoves.has('holdhands') ||\r\n\t\t\t(moves.has('encore') && ability === 'Contrary')\r\n\t\t) return 'Normalium Z';\r\n\t\tif (moves.has('raindance')) {\r\n\t\t\tif (species.baseSpecies === 'Castform' && !teamDetails.zMove) {\r\n\t\t\t\treturn 'Waterium Z';\r\n\t\t\t} else {\r\n\t\t\t\treturn (ability === 'Forecast') ? 'Damp Rock' : 'Life Orb';\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (moves.has('sunnyday')) {\r\n\t\t\tif ((species.baseSpecies === 'Castform' || species.baseSpecies === 'Cherrim') && !teamDetails.zMove) {\r\n\t\t\t\treturn 'Firium Z';\r\n\t\t\t} else {\r\n\t\t\t\treturn (ability === 'Forecast') ? 'Heat Rock' : 'Life Orb';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (moves.has('solarbeam') && ability !== 'Drought' && !moves.has('sunnyday') && !teamDetails.sun) {\r\n\t\t\treturn !teamDetails.zMove ? 'Grassium Z' : 'Power Herb';\r\n\t\t}\r\n\r\n\t\tif (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';\r\n\t\tif (\r\n\t\t\tmoves.has('rest') && !moves.has('sleeptalk') &&\r\n\t\t\tability !== 'Natural Cure' && ability !== 'Shed Skin' && ability !== 'Shadow Tag'\r\n\t\t) {\r\n\t\t\treturn 'Chesto Berry';\r\n\t\t}\r\n\r\n\t\t// Z-Moves\r\n\t\tif (!teamDetails.zMove) {\r\n\t\t\tif (species.name === 'Decidueye' && moves.has('spiritshackle') && counter.setupType) {\r\n\t\t\t\treturn 'Decidium Z';\r\n\t\t\t}\r\n\t\t\tif (species.name === 'Kommo-o') return moves.has('clangingscales') ? 'Kommonium Z' : 'Dragonium Z';\r\n\t\t\tif (species.baseSpecies === 'Lycanroc' && moves.has('stoneedge') && counter.setupType) {\r\n\t\t\t\treturn 'Lycanium Z';\r\n\t\t\t}\r\n\t\t\tif (species.name === 'Marshadow' && moves.has('spectralthief') && counter.setupType) {\r\n\t\t\t\treturn 'Marshadium Z';\r\n\t\t\t}\r\n\t\t\tif (species.name === 'Necrozma-Dusk-Mane' || species.name === 'Necrozma-Dawn-Wings') {\r\n\t\t\t\tif (moves.has('autotomize') && moves.has('sunsteelstrike')) {\r\n\t\t\t\t\treturn 'Solganium Z';\r\n\t\t\t\t} else if (moves.has('trickroom') && moves.has('moongeistbeam')) {\r\n\t\t\t\t\treturn 'Lunalium Z';\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn 'Ultranecrozium Z';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (species.name === 'Mimikyu' && moves.has('playrough') && counter.setupType) return 'Mimikium Z';\r\n\t\t\tif (species.name === 'Raichu-Alola' && moves.has('thunderbolt') && counter.setupType) return 'Aloraichium Z';\r\n\t\t\tif (moves.has('bugbuzz') && counter.setupType && species.baseStats.spa > 100) return 'Buginium Z';\r\n\t\t\tif (\r\n\t\t\t\t(moves.has('darkpulse') && ability === 'Fur Coat' && counter.setupType) ||\r\n\t\t\t\t(moves.has('suckerpunch') && ability === 'Moxie' && counter.get('Dark') < 2)\r\n\t\t\t) {\r\n\t\t\t\treturn 'Darkinium Z';\r\n\t\t\t}\r\n\t\t\tif (moves.has('outrage') && counter.setupType && !moves.has('fly')) return 'Dragonium Z';\r\n\t\t\tif (moves.has('fleurcannon') && !!counter.get('speedsetup')) return 'Fairium Z';\r\n\t\t\tif (\r\n\t\t\t\t(moves.has('focusblast') && types.has('Fighting') && counter.setupType) ||\r\n\t\t\t\t(moves.has('reversal') && moves.has('substitute'))\r\n\t\t\t) {\r\n\t\t\t\treturn 'Fightinium Z';\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\tmoves.has('fly') ||\r\n\t\t\t\t(moves.has('hurricane') && species.baseStats.spa >= 125 && (!!counter.get('Status') || moves.has('superpower'))) ||\r\n\t\t\t\t((moves.has('bounce') || moves.has('bravebird')) && counter.setupType)\r\n\t\t\t) {\r\n\t\t\t\treturn 'Flyinium Z';\r\n\t\t\t}\r\n\t\t\tif (moves.has('shadowball') && counter.setupType && ability === 'Beast Boost') return 'Ghostium Z';\r\n\t\t\tif (\r\n\t\t\t\tmoves.has('sleeppowder') && types.has('Grass') &&\r\n\t\t\t\tcounter.setupType && species.baseStats.spe <= 70\r\n\t\t\t) {\r\n\t\t\t\treturn 'Grassium Z';\r\n\t\t\t}\r\n\t\t\tif (moves.has('magmastorm')) return 'Firium Z';\r\n\t\t\tif (moves.has('dig')) return 'Groundium Z';\r\n\t\t\tif (moves.has('photongeyser') && counter.setupType) return 'Psychium Z';\r\n\t\t\tif (moves.has('stoneedge') && types.has('Rock') && moves.has('swordsdance')) return 'Rockium Z';\r\n\t\t\tif (moves.has('hydropump') && ability === 'Battle Bond' && moves.has('uturn')) return 'Waterium Z';\r\n\t\t\tif ((moves.has('hail') || (moves.has('blizzard') && ability !== 'Snow Warning'))) return 'Icium Z';\r\n\t\t}\r\n\t}\r\n\r\n\tgetMediumPriorityItem(\r\n\t\tability: string,\r\n\t\tmoves: Set,\r\n\t\tcounter: MoveCounter,\r\n\t\tspecies: Species,\r\n\t\tisDoubles: boolean,\r\n\t\tisLead: boolean\r\n\t): string | undefined {\r\n\t\tconst defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;\r\n\r\n\t\tif (\r\n\t\t\t(ability === 'Speed Boost' || ability === 'Stance Change' || species.name === 'Pheromosa') &&\r\n\t\t\tcounter.get('Physical') + counter.get('Special') > 2 &&\r\n\t\t\t!moves.has('uturn')\r\n\t\t) {\r\n\t\t\treturn 'Life Orb';\r\n\t\t}\r\n\r\n\t\tif (isDoubles && moves.has('uturn') && counter.get('Physical') === 4 && !moves.has('fakeout')) {\r\n\t\t\treturn (\r\n\t\t\t\tspecies.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&\r\n\t\t\t\t!counter.get('priority') && this.randomChance(1, 2)\r\n\t\t\t) ? 'Choice Scarf' : 'Choice Band';\r\n\t\t}\r\n\t\tif (isDoubles && counter.get('Special') === 4 && (moves.has('waterspout') || moves.has('eruption'))) {\r\n\t\t\treturn 'Choice Scarf';\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t!isDoubles &&\r\n\t\t\tcounter.get('Physical') >= 4 &&\r\n\t\t\t['bodyslam', 'dragontail', 'fakeout', 'flamecharge', 'rapidspin', 'suckerpunch'].every(m => !moves.has(m))\r\n\t\t) {\r\n\t\t\treturn (\r\n\t\t\t\t(species.baseStats.atk >= 100 || ability === 'Huge Power') &&\r\n\t\t\t\tspecies.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&\r\n\t\t\t\t!counter.get('priority') &&\r\n\t\t\t\tthis.randomChance(2, 3)\r\n\t\t\t) ? 'Choice Scarf' : 'Choice Band';\r\n\t\t}\r\n\t\tif (\r\n\t\t\t!isDoubles &&\r\n\t\t\t(counter.get('Special') >= 4 || (counter.get('Special') >= 3 && moves.has('uturn'))) &&\r\n\t\t\t!moves.has('acidspray') && !moves.has('clearsmog')\r\n\t\t) {\r\n\t\t\treturn (\r\n\t\t\t\tspecies.baseStats.spa >= 100 &&\r\n\t\t\t\tspecies.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&\r\n\t\t\t\tability !== 'Tinted Lens' &&\r\n\t\t\t\t!counter.get('Physical') && !counter.get('priority') &&\r\n\t\t\t\tthis.randomChance(2, 3)\r\n\t\t\t) ? 'Choice Scarf' : 'Choice Specs';\r\n\t\t}\r\n\t\tif (\r\n\t\t\t!isDoubles &&\r\n\t\t\tcounter.get('Physical') >= 3 &&\r\n\t\t\tmoves.has('defog') &&\r\n\t\t\t!moves.has('foulplay') &&\r\n\t\t\tspecies.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&\r\n\t\t\t!counter.get('priority')\r\n\t\t) {\r\n\t\t\treturn 'Choice Scarf';\r\n\t\t}\r\n\t\tif (!isDoubles && (\r\n\t\t\tability === 'Drizzle' ||\r\n\t\t\tability === 'Slow Start' ||\r\n\t\t\tspecies.name.includes('Rotom-') ||\r\n\t\t\t['aromatherapy', 'bite', 'clearsmog', 'curse', 'protect', 'sleeptalk'].some(m => moves.has(m)))\r\n\t\t) {\r\n\t\t\treturn 'Leftovers';\r\n\t\t}\r\n\t\tif (['endeavor', 'flail', 'reversal'].some(m => moves.has(m)) && ability !== 'Sturdy') {\r\n\t\t\treturn (ability === 'Defeatist') ? 'Expert Belt' : 'Focus Sash';\r\n\t\t}\r\n\t\tif (moves.has('outrage') && counter.setupType) return 'Lum Berry';\r\n\t\tif (\r\n\t\t\tisDoubles &&\r\n\t\t\tcounter.damagingMoves.size >= 3 &&\r\n\t\t\tspecies.baseStats.spe >= 70 &&\r\n\t\t\tability !== 'Multiscale' && ability !== 'Sturdy' && [\r\n\t\t\t\t'acidspray', 'electroweb', 'fakeout', 'feint', 'flamecharge', 'icywind',\r\n\t\t\t\t'incinerate', 'naturesmadness', 'rapidspin', 'snarl', 'suckerpunch', 'uturn',\r\n\t\t\t].every(m => !moves.has(m))\r\n\t\t) {\r\n\t\t\treturn defensiveStatTotal >= 275 ? 'Sitrus Berry' : 'Life Orb';\r\n\t\t}\r\n\r\n\t\tif (moves.has('substitute')) return counter.damagingMoves.size > 2 && !!counter.get('drain') ? 'Life Orb' : 'Leftovers';\r\n\t\tif (\r\n\t\t\t!isDoubles &&\r\n\t\t\tthis.dex.getEffectiveness('Ground', species) >= 2 &&\r\n\t\t\tability !== 'Levitate' &&\r\n\t\t\t!moves.has('magnetrise')\r\n\t\t) {\r\n\t\t\treturn 'Air Balloon';\r\n\t\t}\r\n\t\tif ((ability === 'Iron Barbs' || ability === 'Rough Skin') && this.randomChance(1, 2)) return 'Rocky Helmet';\r\n\t\tif (\r\n\t\t\tcounter.get('Physical') + counter.get('Special') >= 4 &&\r\n\t\t\tspecies.baseStats.spd >= 50 && defensiveStatTotal >= 235\r\n\t\t) {\r\n\t\t\treturn 'Assault Vest';\r\n\t\t}\r\n\t\tif (species.name === 'Palkia' && (moves.has('dracometeor') || moves.has('spacialrend')) && moves.has('hydropump')) {\r\n\t\t\treturn 'Lustrous Orb';\r\n\t\t}\r\n\t\tif (species.types.includes('Normal') && moves.has('fakeout') && counter.get('Normal') >= 2) return 'Silk Scarf';\r\n\t\tif (counter.damagingMoves.size >= 4) {\r\n\t\t\treturn (counter.get('Dragon') || moves.has('suckerpunch') || counter.get('Normal')) ? 'Life Orb' : 'Expert Belt';\r\n\t\t}\r\n\t\tif (counter.damagingMoves.size >= 3 && !!counter.get('speedsetup') && defensiveStatTotal >= 300) {\r\n\t\t\treturn 'Weakness Policy';\r\n\t\t}\r\n\t\tif (\r\n\t\t\t!isDoubles && isLead &&\r\n\t\t\t!['Regenerator', 'Sturdy'].includes(ability) &&\r\n\t\t\t!counter.get('recoil') && !counter.get('recovery') &&\r\n\t\t\tdefensiveStatTotal < 255\r\n\t\t) {\r\n\t\t\treturn 'Focus Sash';\r\n\t\t}\r\n\t}\r\n\r\n\tgetLowPriorityItem(\r\n\t\tability: string,\r\n\t\ttypes: Set,\r\n\t\tmoves: Set,\r\n\t\tabilities: Set,\r\n\t\tcounter: MoveCounter,\r\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\r\n\t\tspecies: Species,\r\n\t\tisLead: boolean,\r\n\t\tisDoubles: boolean\r\n\t): string | undefined {\r\n\t\t// This is the \"REALLY can't think of a good item\" cutoff\r\n\t\tif (moves.has('stickyweb') && ability === 'Sturdy') return 'Mental Herb';\r\n\t\tif (ability === 'Serene Grace' && moves.has('airslash') && species.baseStats.spe > 100) return 'Metronome';\r\n\t\tif (ability === 'Sturdy' && moves.has('explosion') && !counter.get('speedsetup')) return 'Custap Berry';\r\n\t\tif (ability === 'Super Luck') return 'Scope Lens';\r\n\t\tif (\r\n\t\t\t!isDoubles &&\r\n\t\t\tcounter.damagingMoves.size >= 3 &&\r\n\t\t\tability !== 'Sturdy' &&\r\n\t\t\t(species.baseStats.spe >= 90 || !moves.has('voltswitch')) &&\r\n\t\t\t['acidspray', 'dragontail', 'foulplay', 'rapidspin', 'superfang', 'uturn'].every(m => !moves.has(m)) && (\r\n\t\t\t\tcounter.get('speedsetup') ||\r\n\t\t\t\tmoves.has('trickroom') ||\r\n\t\t\t\t(species.baseStats.spe > 40 && species.baseStats.hp + species.baseStats.def + species.baseStats.spd < 275)\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn 'Life Orb';\r\n\t\t}\r\n\t}\r\n\r\n\trandomSet(\r\n\t\tspecies: string | Species,\r\n\t\tteamDetails: RandomTeamsTypes.TeamDetails = {},\r\n\t\tisLead = false,\r\n\t\tisDoubles = false\r\n\t): RandomTeamsTypes.RandomSet {\r\n\t\tspecies = this.dex.species.get(species);\r\n\t\tlet forme = species.name;\r\n\r\n\t\tif (typeof species.battleOnly === 'string') {\r\n\t\t\t// Only change the forme. The species has custom moves, and may have different typing and requirements.\r\n\t\t\tforme = species.battleOnly;\r\n\t\t}\r\n\t\tif (species.cosmeticFormes) {\r\n\t\t\tforme = this.sample([species.name].concat(species.cosmeticFormes));\r\n\t\t}\r\n\r\n\t\tconst data = this.randomData[species.id];\r\n\r\n\t\tconst randMoves = isDoubles ?\r\n\t\t\t(data.doublesMoves || data.moves) :\r\n\t\t\tdata.moves;\r\n\t\tconst movePool = (randMoves || Object.keys(Dex.species.getLearnset(species.id)!)).slice();\r\n\t\tif (this.format.gameType === 'multi') {\r\n\t\t\t// Random Multi Battle uses doubles move pools, but Ally Switch fails in multi battles\r\n\t\t\tconst allySwitch = movePool.indexOf('allyswitch');\r\n\t\t\tif (allySwitch > -1) {\r\n\t\t\t\tif (movePool.length > this.maxMoveCount) {\r\n\t\t\t\t\tthis.fastPop(movePool, allySwitch);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Ideally, we'll never get here, but better to have a move that usually does nothing than one that always does\r\n\t\t\t\t\tmovePool[allySwitch] = 'sleeptalk';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst rejectedPool = [];\r\n\t\tconst moves = new Set();\r\n\t\tlet ability = '';\r\n\r\n\t\tconst evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};\r\n\t\tconst ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};\r\n\r\n\t\tconst types = new Set(species.types);\r\n\t\tconst abilities = new Set();\r\n\t\tfor (const abilityName of Object.values(species.abilities)) {\r\n\t\t\tif (abilityName === species.abilities.S || (species.unreleasedHidden && abilityName === species.abilities.H)) continue;\r\n\t\t\tabilities.add(abilityName);\r\n\t\t}\r\n\r\n\t\tlet availableHP = 0;\r\n\t\tfor (const moveid of movePool) {\r\n\t\t\tif (moveid.startsWith('hiddenpower')) availableHP++;\r\n\t\t}\r\n\r\n\t\t// These moves can be used even if we aren't setting up to use them:\r\n\t\tconst SetupException = ['closecombat', 'diamondstorm', 'extremespeed', 'superpower', 'clangingscales'];\r\n\r\n\t\tlet counter: MoveCounter;\r\n\t\t// We use a special variable to track Hidden Power\r\n\t\t// so that we can check for all Hidden Powers at once\r\n\t\tlet hasHiddenPower = false;\r\n\r\n\t\tdo {\r\n\t\t\t// Choose next 4 moves from learnset/viable moves and add them to moves list:\r\n\t\t\twhile (moves.size < this.maxMoveCount && movePool.length) {\r\n\t\t\t\tconst moveid = this.sampleNoReplace(movePool);\r\n\t\t\t\tif (moveid.startsWith('hiddenpower')) {\r\n\t\t\t\t\tavailableHP--;\r\n\t\t\t\t\tif (hasHiddenPower) continue;\r\n\t\t\t\t\thasHiddenPower = true;\r\n\t\t\t\t}\r\n\t\t\t\tmoves.add(moveid);\r\n\t\t\t}\r\n\t\t\twhile (moves.size < this.maxMoveCount && rejectedPool.length) {\r\n\t\t\t\tconst moveid = this.sampleNoReplace(rejectedPool);\r\n\t\t\t\tif (moveid.startsWith('hiddenpower')) {\r\n\t\t\t\t\tif (hasHiddenPower) continue;\r\n\t\t\t\t\thasHiddenPower = true;\r\n\t\t\t\t}\r\n\t\t\t\tmoves.add(moveid);\r\n\t\t\t}\r\n\r\n\t\t\tcounter = this.queryMoves(moves, species.types, abilities, movePool);\r\n\t\t\tconst runEnforcementChecker = (checkerName: string) => {\r\n\t\t\t\tif (!this.moveEnforcementCheckers[checkerName]) return false;\r\n\t\t\t\treturn this.moveEnforcementCheckers[checkerName](\r\n\t\t\t\t\tmovePool, moves, abilities, types, counter, species as Species, teamDetails\r\n\t\t\t\t);\r\n\t\t\t};\r\n\r\n\t\t\t// Iterate through the moves again, this time to cull them:\r\n\t\t\tfor (const moveid of moves) {\r\n\t\t\t\tconst move = this.dex.moves.get(moveid);\r\n\r\n\t\t\t\tlet {cull, isSetup} = this.shouldCullMove(\r\n\t\t\t\t\tmove, types, moves, abilities, counter, movePool, teamDetails,\r\n\t\t\t\t\tspecies, isLead, isDoubles\r\n\t\t\t\t);\r\n\r\n\t\t\t\t// This move doesn't satisfy our setup requirements:\r\n\t\t\t\tif (\r\n\t\t\t\t\t(move.category === 'Physical' && counter.setupType === 'Special') ||\r\n\t\t\t\t\t(move.category === 'Special' && counter.setupType === 'Physical')\r\n\t\t\t\t) {\r\n\t\t\t\t\t// Reject STABs last in case the setup type changes later on\r\n\t\t\t\t\tconst stabs = counter.get(species.types[0]) + (counter.get(species.types[1]) || 0);\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!SetupException.includes(moveid) &&\r\n\t\t\t\t\t\t(!types.has(move.type) || stabs > 1 || counter.get(move.category) < 2)\r\n\t\t\t\t\t) cull = true;\r\n\t\t\t\t}\r\n\t\t\t\t// Hidden Power isn't good enough\r\n\t\t\t\tif (\r\n\t\t\t\t\tcounter.setupType === 'Special' &&\r\n\t\t\t\t\tmoveid === 'hiddenpower' &&\r\n\t\t\t\t\tspecies.types.length > 1 &&\r\n\t\t\t\t\tcounter.get('Special') <= 2 &&\r\n\t\t\t\t\t!types.has(move.type) &&\r\n\t\t\t\t\t!counter.get('Physical') &&\r\n\t\t\t\t\tcounter.get('specialpool')\r\n\t\t\t\t) {\r\n\t\t\t\t\tcull = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst singlesEnforcement = (\r\n\t\t\t\t\t!['judgment', 'lightscreen', 'quiverdance', 'reflect', 'sleeptalk', 'toxic'].includes(moveid) && (\r\n\t\t\t\t\t\tmove.category !== 'Status' ||\r\n\t\t\t\t\t\t// should allow Meganium to cull a recovery move for the sake of STAB\r\n\t\t\t\t\t\t!(move.flags.heal && species.id !== 'meganium')\r\n\t\t\t\t\t)\r\n\t\t\t\t);\r\n\t\t\t\t// Pokemon should have moves that benefit their Type/Ability/Weather, as well as moves required by its forme\r\n\t\t\t\tif (\r\n\t\t\t\t\t!cull &&\r\n\t\t\t\t\t!move.damage &&\r\n\t\t\t\t\t!isSetup &&\r\n\t\t\t\t\t!move.weather &&\r\n\t\t\t\t\t!move.stallingMove &&\r\n\t\t\t\t\t(isDoubles || singlesEnforcement) && (\r\n\t\t\t\t\t\t!counter.setupType || counter.setupType === 'Mixed' ||\r\n\t\t\t\t\t\t(move.category !== counter.setupType && move.category !== 'Status') ||\r\n\t\t\t\t\t\t(counter.get(counter.setupType) + counter.get('Status') > 3 && !counter.get('hazards'))\r\n\t\t\t\t\t) && (\r\n\t\t\t\t\t\tmove.category === 'Status' ||\r\n\t\t\t\t\t\t!types.has(move.type) ||\r\n\t\t\t\t\t\t(move.basePower && move.basePower < 40 && !move.multihit)\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t(!counter.get('stab') && !moves.has('nightshade') && !moves.has('seismictoss') && (\r\n\t\t\t\t\t\t\tspecies.types.length > 1 ||\r\n\t\t\t\t\t\t\t(species.types[0] !== 'Normal' && species.types[0] !== 'Psychic') ||\r\n\t\t\t\t\t\t\t!moves.has('icebeam') ||\r\n\t\t\t\t\t\t\tspecies.baseStats.spa >= species.baseStats.spd\r\n\t\t\t\t\t\t)) || (\r\n\t\t\t\t\t\t\tmoves.has('suckerpunch') && !abilities.has('Contrary') &&\r\n\t\t\t\t\t\t\tcounter.get('stab') < species.types.length && species.id !== 'honchkrow'\r\n\t\t\t\t\t\t) || (\r\n\t\t\t\t\t\t\t(['recover', 'roost', 'slackoff', 'softboiled'].some(m => movePool.includes(m))) &&\r\n\t\t\t\t\t\t\tcounter.get('Status') &&\r\n\t\t\t\t\t\t\t!counter.setupType &&\r\n\t\t\t\t\t\t\t['healingwish', 'switcheroo', 'trick', 'trickroom'].every(m => !moves.has(m))\r\n\t\t\t\t\t\t) || (\r\n\t\t\t\t\t\t\tmovePool.includes('milkdrink') ||\r\n\t\t\t\t\t\t\tmovePool.includes('shoreup') ||\r\n\t\t\t\t\t\t\t(movePool.includes('moonlight') && types.size < 2) ||\r\n\t\t\t\t\t\t\t(movePool.includes('stickyweb') && !counter.setupType && !teamDetails.stickyWeb) ||\r\n\t\t\t\t\t\t\t(movePool.includes('quiverdance') && ['defog', 'uturn', 'stickyweb'].every(m => !moves.has(m)) &&\r\n\t\t\t\t\t\t\tcounter.get('Special') < 4)\r\n\t\t\t\t\t\t) || (\r\n\t\t\t\t\t\t\tisLead &&\r\n\t\t\t\t\t\t\tmovePool.includes('stealthrock') &&\r\n\t\t\t\t\t\t\tcounter.get('Status') && !counter.setupType &&\r\n\t\t\t\t\t\t\t!counter.get('speedsetup') && !moves.has('substitute')\r\n\t\t\t\t\t\t) || (\r\n\t\t\t\t\t\t\tspecies.requiredMove && movePool.includes(toID(species.requiredMove))\r\n\t\t\t\t\t\t) || (\r\n\t\t\t\t\t\t\t!counter.get('Normal') &&\r\n\t\t\t\t\t\t\t(abilities.has('Aerilate') || abilities.has('Pixilate') || (abilities.has('Refrigerate') && !moves.has('blizzard')))\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcull = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tfor (const type of types) {\r\n\t\t\t\t\t\t\tif (runEnforcementChecker(type)) {\r\n\t\t\t\t\t\t\t\tcull = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfor (const abil of abilities) {\r\n\t\t\t\t\t\t\tif (runEnforcementChecker(abil)) {\r\n\t\t\t\t\t\t\t\tcull = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfor (const m of moves) {\r\n\t\t\t\t\t\t\tif (runEnforcementChecker(m)) {\r\n\t\t\t\t\t\t\t\tcull = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Sleep Talk shouldn't be selected without Rest\r\n\t\t\t\tif (moveid === 'rest' && cull) {\r\n\t\t\t\t\tconst sleeptalk = movePool.indexOf('sleeptalk');\r\n\t\t\t\t\tif (sleeptalk >= 0) {\r\n\t\t\t\t\t\tif (movePool.length < 2) {\r\n\t\t\t\t\t\t\tcull = false;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.fastPop(movePool, sleeptalk);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Remove rejected moves from the move list\r\n\t\t\t\tconst moveIsHP = moveid.startsWith('hiddenpower');\r\n\t\t\t\tif (cull && (\r\n\t\t\t\t\tmovePool.length - availableHP ||\r\n\t\t\t\t\t(availableHP && (moveIsHP || !hasHiddenPower))\r\n\t\t\t\t)) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tmove.category !== 'Status' &&\r\n\t\t\t\t\t\t!move.damage &&\r\n\t\t\t\t\t\t!move.flags.charge &&\r\n\t\t\t\t\t\t(!moveIsHP || !availableHP)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\trejectedPool.push(moveid);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (moveIsHP) hasHiddenPower = false;\r\n\t\t\t\t\tmoves.delete(moveid);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (cull && rejectedPool.length) {\r\n\t\t\t\t\tif (moveIsHP) hasHiddenPower = false;\r\n\t\t\t\t\tmoves.delete(moveid);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} while (moves.size < this.maxMoveCount && (movePool.length || rejectedPool.length));\r\n\r\n\t\t// Moveset modifications\r\n\t\tif (species.id === 'celesteela' && moves.has('autotomize') && moves.has('heavyslam')) {\r\n\t\t\tmoves.delete('heavyslam');\r\n\t\t\tmoves.add('flashcannon');\r\n\t\t}\r\n\t\tif (moves.has('raindance') && moves.has('thunderbolt') && !isDoubles) {\r\n\t\t\tmoves.delete('thunderbolt');\r\n\t\t\tmoves.add('thunder');\r\n\t\t}\r\n\t\tif (moves.has('workup') && !counter.get('Special') && species.id === 'zeraora') {\r\n\t\t\tmoves.delete('workup');\r\n\t\t\tmoves.add('bulkup');\r\n\t\t}\r\n\r\n\t\tconst battleOnly = species.battleOnly && !species.requiredAbility;\r\n\t\tconst baseSpecies: Species = battleOnly ? this.dex.species.get(species.battleOnly as string) : species;\r\n\r\n\t\tconst abilityData = Object.values(baseSpecies.abilities).map(a => this.dex.abilities.get(a));\r\n\t\tUtils.sortBy(abilityData, abil => -abil.rating);\r\n\r\n\t\tif (abilityData[1]) {\r\n\t\t\t// Sort abilities by rating with an element of randomness\r\n\t\t\tif (abilityData[2] && abilityData[1].rating <= abilityData[2].rating && this.randomChance(1, 2)) {\r\n\t\t\t\t[abilityData[1], abilityData[2]] = [abilityData[2], abilityData[1]];\r\n\t\t\t}\r\n\t\t\tif (abilityData[0].rating <= abilityData[1].rating && this.randomChance(1, 2)) {\r\n\t\t\t\t[abilityData[0], abilityData[1]] = [abilityData[1], abilityData[0]];\r\n\t\t\t} else if (abilityData[0].rating - 0.6 <= abilityData[1].rating && this.randomChance(2, 3)) {\r\n\t\t\t\t[abilityData[0], abilityData[1]] = [abilityData[1], abilityData[0]];\r\n\t\t\t}\r\n\t\t\tability = abilityData[0].name;\r\n\r\n\t\t\twhile (this.shouldCullAbility(\r\n\t\t\t\tability, types, moves, abilities, counter, movePool, teamDetails, species, isDoubles\r\n\t\t\t)) {\r\n\t\t\t\tif (ability === abilityData[0].name && abilityData[1].rating >= 1) {\r\n\t\t\t\t\tability = abilityData[1].name;\r\n\t\t\t\t} else if (ability === abilityData[1].name && abilityData[2] && abilityData[2].rating >= 1) {\r\n\t\t\t\t\tability = abilityData[2].name;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Default to the highest rated ability if all are rejected\r\n\t\t\t\t\tability = abilityData[0].name;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tabilities.has('Guts') &&\r\n\t\t\t\tability !== 'Quick Feet' &&\r\n\t\t\t\t(moves.has('facade') || (moves.has('protect') && !isDoubles) || (moves.has('sleeptalk') && moves.has('rest')))\r\n\t\t\t) {\r\n\t\t\t\tability = 'Guts';\r\n\t\t\t} else if (abilities.has('Moxie') && (counter.get('Physical') > 3 || moves.has('bounce')) && !isDoubles) {\r\n\t\t\t\tability = 'Moxie';\r\n\t\t\t} else if (isDoubles) {\r\n\t\t\t\tif (abilities.has('Intimidate') && !battleOnly) ability = 'Intimidate';\r\n\t\t\t\tif (abilities.has('Guts') && ability !== 'Intimidate') ability = 'Guts';\r\n\t\t\t\tif (abilities.has('Storm Drain')) ability = 'Storm Drain';\r\n\t\t\t\tif (abilities.has('Harvest')) ability = 'Harvest';\r\n\t\t\t\tif (abilities.has('Unburden') && ability !== 'Prankster' && !species.isMega) ability = 'Unburden';\r\n\t\t\t}\r\n\t\t\tif (species.name === 'Ambipom' && !counter.get('technician')) {\r\n\t\t\t\t// If it doesn't qualify for Technician, Skill Link is useless on it\r\n\t\t\t\tability = 'Pickup';\r\n\t\t\t}\r\n\t\t\tif (species.name === 'Raticate-Alola') ability = 'Hustle';\r\n\t\t\tif (species.name === 'Altaria') ability = 'Natural Cure';\r\n\t\t} else {\r\n\t\t\tability = abilityData[0].name;\r\n\t\t}\r\n\r\n\t\tif (species.name === 'Genesect' && moves.has('technoblast')) forme = 'Genesect-Douse';\r\n\r\n\t\tif (\r\n\t\t\t!moves.has('photongeyser') &&\r\n\t\t\t!teamDetails.zMove &&\r\n\t\t\t(species.name === 'Necrozma-Dusk-Mane' || species.name === 'Necrozma-Dawn-Wings')\r\n\t\t) {\r\n\t\t\tfor (const moveid of moves) {\r\n\t\t\t\tconst move = this.dex.moves.get(moveid);\r\n\t\t\t\tif (move.category === 'Status' || types.has(move.type)) continue;\r\n\t\t\t\tmoves.delete(moveid);\r\n\t\t\t\tmoves.add('photongeyser');\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet item = this.getHighPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles);\r\n\t\tif (item === undefined) item = this.getMediumPriorityItem(ability, moves, counter, species, isDoubles, isLead);\r\n\t\tif (item === undefined) {\r\n\t\t\titem = this.getLowPriorityItem(ability, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles);\r\n\t\t}\r\n\r\n\t\t// fallback\r\n\t\tif (item === undefined) item = isDoubles ? 'Sitrus Berry' : 'Leftovers';\r\n\t\t// For Trick / Switcheroo\r\n\t\tif (item === 'Leftovers' && types.has('Poison')) {\r\n\t\t\titem = 'Black Sludge';\r\n\t\t}\r\n\r\n\t\tlet level: number;\r\n\t\tif (this.adjustLevel) {\r\n\t\t\tlevel = this.adjustLevel;\r\n\t\t} else if (!isDoubles) {\r\n\t\t\tlevel = data.level || (species.nfe ? 90 : 80);\r\n\t\t} else {\r\n\t\t\t// We choose level based on BST. Min level is 70, max level is 99. 600+ BST is 70, less than 300 is 99. Calculate with those values.\r\n\t\t\t// Every 10.34 BST adds a level from 70 up to 99. Results are floored. Uses the Mega's stats if holding a Mega Stone\r\n\t\t\tconst baseStats = species.baseStats;\r\n\r\n\t\t\tlet bst = species.bst;\r\n\t\t\t// If Wishiwashi, use the school-forme's much higher stats\r\n\t\t\tif (species.baseSpecies === 'Wishiwashi') bst = this.dex.species.get('wishiwashischool').bst;\r\n\t\t\t// Adjust levels of mons based on abilities (Pure Power, Sheer Force, etc.) and also Eviolite\r\n\t\t\t// For the stat boosted, treat the Pokemon's base stat as if it were multiplied by the boost. (Actual effective base stats are higher.)\r\n\t\t\tconst speciesAbility = (baseSpecies === species ? ability : species.abilities[0]);\r\n\t\t\tif (speciesAbility === 'Huge Power' || speciesAbility === 'Pure Power') {\r\n\t\t\t\tbst += baseStats.atk;\r\n\t\t\t} else if (speciesAbility === 'Parental Bond') {\r\n\t\t\t\tbst += 0.25 * (counter.get('Physical') > counter.get('Special') ? baseStats.atk : baseStats.spa);\r\n\t\t\t} else if (speciesAbility === 'Protean') {\r\n\t\t\t\tbst += 0.3 * (counter.get('Physical') > counter.get('Special') ? baseStats.atk : baseStats.spa);\r\n\t\t\t} else if (speciesAbility === 'Fur Coat') {\r\n\t\t\t\tbst += baseStats.def;\r\n\t\t\t} else if (speciesAbility === 'Slow Start') {\r\n\t\t\t\tbst -= baseStats.atk / 2 + baseStats.spe / 2;\r\n\t\t\t} else if (speciesAbility === 'Truant') {\r\n\t\t\t\tbst *= 2 / 3;\r\n\t\t\t}\r\n\t\t\tif (item === 'Eviolite') {\r\n\t\t\t\tbst += 0.5 * (baseStats.def + baseStats.spd);\r\n\t\t\t} else if (item === 'Light Ball') {\r\n\t\t\t\tbst += baseStats.atk + baseStats.spa;\r\n\t\t\t}\r\n\t\t\tlevel = 70 + Math.floor(((600 - Utils.clampIntRange(bst, 300, 600)) / 10.34));\r\n\t\t}\r\n\r\n\t\t// Prepare optimal HP\r\n\t\tconst srWeakness = this.dex.getEffectiveness('Rock', species);\r\n\t\twhile (evs.hp > 1) {\r\n\t\t\tconst hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);\r\n\t\t\tif (moves.has('substitute') && moves.has('reversal')) {\r\n\t\t\t\t// Reversal users should be able to use four Substitutes\r\n\t\t\t\tif (hp % 4 > 0) break;\r\n\t\t\t} else if (moves.has('substitute') && (\r\n\t\t\t\titem === 'Petaya Berry' || item === 'Sitrus Berry' ||\r\n\t\t\t\t(ability === 'Power Construct' && item !== 'Leftovers')\r\n\t\t\t)) {\r\n\t\t\t\t// Three Substitutes should activate Petaya Berry for Dedenne\r\n\t\t\t\t// Two Substitutes should activate Sitrus Berry or Power Construct\r\n\t\t\t\tif (hp % 4 === 0) break;\r\n\t\t\t} else if (moves.has('bellydrum') && (item === 'Sitrus Berry' || ability === 'Gluttony')) {\r\n\t\t\t\t// Belly Drum should activate Sitrus Berry\r\n\t\t\t\tif (hp % 2 === 0) break;\r\n\t\t\t} else {\r\n\t\t\t\t// Maximize number of Stealth Rock switch-ins\r\n\t\t\t\tif (srWeakness <= 0 || hp % (4 / srWeakness) > 0) break;\r\n\t\t\t}\r\n\t\t\tevs.hp -= 4;\r\n\t\t}\r\n\r\n\t\t// Minimize confusion damage\r\n\t\tif (!counter.get('Physical') && !moves.has('copycat') && !moves.has('transform')) {\r\n\t\t\tevs.atk = 0;\r\n\t\t\tivs.atk = 0;\r\n\t\t}\r\n\r\n\t\t// Ensure Nihilego's Beast Boost gives it Special Attack boosts instead of Special Defense\r\n\t\tif (forme === 'Nihilego') evs.spd -= 32;\r\n\r\n\t\tif (ability === 'Beast Boost' && counter.get('Special') < 1) {\r\n\t\t\tevs.spa = 0;\r\n\t\t\tivs.spa = 0;\r\n\t\t}\r\n\r\n\t\t// Fix IVs for non-Bottle Cap-able sets\r\n\t\tif (hasHiddenPower && level < 100) {\r\n\t\t\tlet hpType;\r\n\t\t\tfor (const move of moves) {\r\n\t\t\t\tif (move.startsWith('hiddenpower')) hpType = move.substr(11);\r\n\t\t\t}\r\n\t\t\tif (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);\r\n\t\t\tconst HPivs = ivs.atk === 0 ? ZeroAttackHPIVs[hpType] : this.dex.types.get(hpType).HPivs;\r\n\t\t\tlet iv: StatID;\r\n\t\t\tfor (iv in HPivs) {\r\n\t\t\t\tivs[iv] = HPivs[iv]!;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (['gyroball', 'metalburst', 'trickroom'].some(m => moves.has(m))) {\r\n\t\t\tevs.spe = 0;\r\n\t\t\tivs.spe = (hasHiddenPower && level < 100) ? ivs.spe - 30 : 0;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tname: species.baseSpecies,\r\n\t\t\tspecies: forme,\r\n\t\t\tgender: species.gender,\r\n\t\t\tshiny: this.randomChance(1, 1024),\r\n\t\t\tmoves: Array.from(moves),\r\n\t\t\tability,\r\n\t\t\tevs,\r\n\t\t\tivs,\r\n\t\t\titem,\r\n\t\t\tlevel,\r\n\t\t};\r\n\t}\r\n\r\n\trandomTeam() {\r\n\t\tthis.enforceNoDirectCustomBanlistChanges();\r\n\r\n\t\tconst seed = this.prng.seed;\r\n\t\tconst ruleTable = this.dex.formats.getRuleTable(this.format);\r\n\t\tconst pokemon = [];\r\n\r\n\t\t// For Monotype\r\n\t\tconst isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');\r\n\t\tconst typePool = this.dex.types.names();\r\n\t\tconst type = this.forceMonotype || this.sample(typePool);\r\n\r\n\t\tconst baseFormes: {[k: string]: number} = {};\r\n\t\tlet hasMega = false;\r\n\r\n\t\tconst tierCount: {[k: string]: number} = {};\r\n\t\tconst typeCount: {[k: string]: number} = {};\r\n\t\tconst typeComboCount: {[k: string]: number} = {};\r\n\t\tconst typeWeaknesses: {[k: string]: number} = {};\r\n\t\tconst teamDetails: RandomTeamsTypes.TeamDetails = {};\r\n\r\n\t\t// We make at most two passes through the potential Pokemon pool when creating a team - if the first pass doesn't\r\n\t\t// result in a team of six Pokemon we perform a second iteration relaxing as many restrictions as possible.\r\n\t\tfor (const restrict of [true, false]) {\r\n\t\t\tif (pokemon.length >= this.maxTeamSize) break;\r\n\t\t\tconst pokemonPool = this.getPokemonPool(type, pokemon, isMonotype);\r\n\t\t\twhile (pokemonPool.length && pokemon.length < this.maxTeamSize) {\r\n\t\t\t\tconst species = this.dex.species.get(this.sampleNoReplace(pokemonPool));\r\n\r\n\t\t\t\t// Check if the forme has moves for random battle\r\n\t\t\t\tif (this.format.gameType === 'singles') {\r\n\t\t\t\t\tif (!this.randomData[species.id]?.moves) continue;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (!this.randomData[species.id]?.doublesMoves) continue;\r\n\t\t\t\t}\r\n\t\t\t\tif (!species.exists) continue;\r\n\r\n\t\t\t\t// Limit to one of each species (Species Clause)\r\n\t\t\t\tif (baseFormes[species.baseSpecies]) continue;\r\n\r\n\t\t\t\t// Limit one Mega per team\r\n\t\t\t\tif (hasMega && species.isMega) continue;\r\n\r\n\t\t\t\t// Adjust rate for species with multiple sets\r\n\t\t\t\tswitch (species.baseSpecies) {\r\n\t\t\t\tcase 'Arceus': case 'Silvally':\r\n\t\t\t\t\tif (this.randomChance(8, 9) && !isMonotype) continue;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Oricorio':\r\n\t\t\t\t\tif (this.randomChance(3, 4)) continue;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Castform': case 'Floette':\r\n\t\t\t\t\tif (this.randomChance(2, 3)) continue;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Aegislash': case 'Basculin': case 'Gourgeist': case 'Groudon': case 'Kyogre': case 'Meloetta':\r\n\t\t\t\t\tif (this.randomChance(1, 2)) continue;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'Cherrim': case 'Greninja':\r\n\t\t\t\t\tif (this.gen >= 7 && this.randomChance(1, 2)) continue;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (species.otherFormes && !hasMega && (\r\n\t\t\t\t\tspecies.otherFormes.includes(species.name + '-Mega') ||\r\n\t\t\t\t\tspecies.otherFormes.includes(species.name + '-Mega-X')\r\n\t\t\t\t)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst tier = species.tier;\r\n\t\t\t\tconst types = species.types;\r\n\t\t\t\tconst typeCombo = types.slice().sort().join();\r\n\t\t\t\t// Dynamically scale limits for different team sizes. The default and minimum value is 1.\r\n\t\t\t\tconst limitFactor = Math.round(this.maxTeamSize / 6) || 1;\r\n\r\n\t\t\t\tif (restrict && !species.isMega) {\r\n\t\t\t\t\t// Limit one Pokemon per tier, two for Monotype\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t(tierCount[tier] >= (isMonotype || this.forceMonotype ? 2 : 1) * limitFactor) &&\r\n\t\t\t\t\t\t!this.randomChance(1, Math.pow(5, tierCount[tier]))\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!isMonotype && !this.forceMonotype) {\r\n\t\t\t\t\t\t// Limit two of any type\r\n\t\t\t\t\t\tlet skip = false;\r\n\t\t\t\t\t\tfor (const typeName of types) {\r\n\t\t\t\t\t\t\tif (typeCount[typeName] >= 2 * limitFactor) {\r\n\t\t\t\t\t\t\t\tskip = true;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (skip) continue;\r\n\r\n\t\t\t\t\t\t// Limit three weak to any type\r\n\t\t\t\t\t\tfor (const typeName of this.dex.types.names()) {\r\n\t\t\t\t\t\t\t// it's weak to the type\r\n\t\t\t\t\t\t\tif (this.dex.getEffectiveness(typeName, species) > 0) {\r\n\t\t\t\t\t\t\t\tif (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;\r\n\t\t\t\t\t\t\t\tif (typeWeaknesses[typeName] >= 3 * limitFactor) {\r\n\t\t\t\t\t\t\t\t\tskip = true;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (skip) continue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Limit one of any type combination, two in Monotype\r\n\t\t\t\t\tif (!this.forceMonotype && typeComboCount[typeCombo] >= (isMonotype ? 2 : 1) * limitFactor) continue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst set = this.randomSet(\r\n\t\t\t\t\tspecies,\r\n\t\t\t\t\tteamDetails,\r\n\t\t\t\t\tpokemon.length === this.maxTeamSize - 1,\r\n\t\t\t\t\tthis.format.gameType !== 'singles'\r\n\t\t\t\t);\r\n\r\n\t\t\t\tconst item = this.dex.items.get(set.item);\r\n\r\n\t\t\t\t// Limit one Z-Move per team\r\n\t\t\t\tif (item.zMove && teamDetails.zMove) continue;\r\n\r\n\t\t\t\t// Zoroark copies the last Pokemon\r\n\t\t\t\tif (set.ability === 'Illusion') {\r\n\t\t\t\t\tif (pokemon.length < 1) continue;\r\n\t\t\t\t\tset.level = pokemon[pokemon.length - 1].level;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Okay, the set passes, add it to our team\r\n\t\t\t\tpokemon.unshift(set);\r\n\r\n\t\t\t\t// Don't bother tracking details for the last Pokemon\r\n\t\t\t\tif (pokemon.length === this.maxTeamSize) break;\r\n\r\n\t\t\t\t// Now that our Pokemon has passed all checks, we can increment our counters\r\n\t\t\t\tbaseFormes[species.baseSpecies] = 1;\r\n\r\n\t\t\t\t// Increment tier counter\r\n\t\t\t\tif (tierCount[tier]) {\r\n\t\t\t\t\ttierCount[tier]++;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttierCount[tier] = 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Increment type counters\r\n\t\t\t\tfor (const typeName of types) {\r\n\t\t\t\t\tif (typeName in typeCount) {\r\n\t\t\t\t\t\ttypeCount[typeName]++;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttypeCount[typeName] = 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (typeCombo in typeComboCount) {\r\n\t\t\t\t\ttypeComboCount[typeCombo]++;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttypeComboCount[typeCombo] = 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Increment weakness counter\r\n\t\t\t\tfor (const typeName of this.dex.types.names()) {\r\n\t\t\t\t\t// it's weak to the type\r\n\t\t\t\t\tif (this.dex.getEffectiveness(typeName, species) > 0) {\r\n\t\t\t\t\t\ttypeWeaknesses[typeName]++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Track what the team has\r\n\t\t\t\tif (item.megaStone) hasMega = true;\r\n\t\t\t\tif (item.zMove) teamDetails.zMove = 1;\r\n\t\t\t\tif (set.ability === 'Snow Warning' || set.moves.includes('hail')) teamDetails.hail = 1;\r\n\t\t\t\tif (set.moves.includes('raindance') || set.ability === 'Drizzle' && !item.onPrimal) teamDetails.rain = 1;\r\n\t\t\t\tif (set.ability === 'Sand Stream') teamDetails.sand = 1;\r\n\t\t\t\tif (set.moves.includes('sunnyday') || set.ability === 'Drought' && !item.onPrimal) teamDetails.sun = 1;\r\n\t\t\t\tif (set.moves.includes('spikes')) teamDetails.spikes = (teamDetails.spikes || 0) + 1;\r\n\t\t\t\tif (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1;\r\n\t\t\t\tif (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1;\r\n\t\t\t\tif (set.moves.includes('toxicspikes')) teamDetails.toxicSpikes = 1;\r\n\t\t\t\tif (set.moves.includes('defog')) teamDetails.defog = 1;\r\n\t\t\t\tif (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (pokemon.length < this.maxTeamSize && pokemon.length < 12) {\r\n\t\t\tthrow new Error(`Could not build a random team for ${this.format} (seed=${seed})`);\r\n\t\t}\r\n\r\n\t\treturn pokemon;\r\n\t}\r\n\r\n\trandomFactorySets: {[format: string]: {[species: string]: BattleFactorySpecies}} = require('./factory-sets.json');\r\n\r\n\trandomFactorySet(\r\n\t\tspecies: Species, teamData: RandomTeamsTypes.FactoryTeamDetails, tier: string\r\n\t): RandomTeamsTypes.RandomFactorySet | null {\r\n\t\tconst id = toID(species.name);\r\n\t\tconst setList = this.randomFactorySets[tier][id].sets;\r\n\r\n\t\tconst itemsMax: {[k: string]: number} = {\r\n\t\t\tchoicespecs: 1,\r\n\t\t\tchoiceband: 1,\r\n\t\t\tchoicescarf: 1,\r\n\t\t};\r\n\t\tconst movesMax: {[k: string]: number} = {\r\n\t\t\trapidspin: 1,\r\n\t\t\tbatonpass: 1,\r\n\t\t\tstealthrock: 1,\r\n\t\t\tdefog: 1,\r\n\t\t\tspikes: 1,\r\n\t\t\ttoxicspikes: 1,\r\n\t\t};\r\n\t\tconst requiredMoves: {[k: string]: string} = {\r\n\t\t\tstealthrock: 'hazardSet',\r\n\t\t\trapidspin: 'hazardClear',\r\n\t\t\tdefog: 'hazardClear',\r\n\t\t};\r\n\t\tconst weatherAbilitiesRequire: {[k: string]: string} = {\r\n\t\t\thydration: 'raindance', swiftswim: 'raindance',\r\n\t\t\tleafguard: 'sunnyday', solarpower: 'sunnyday', chlorophyll: 'sunnyday',\r\n\t\t\tsandforce: 'sandstorm', sandrush: 'sandstorm', sandveil: 'sandstorm',\r\n\t\t\tslushrush: 'hail', snowcloak: 'hail',\r\n\t\t};\r\n\t\tconst weatherAbilities = ['drizzle', 'drought', 'snowwarning', 'sandstream'];\r\n\r\n\t\t// Build a pool of eligible sets, given the team partners\r\n\t\t// Also keep track of sets with moves the team requires\r\n\t\tlet effectivePool: {set: AnyObject, moveVariants?: number[]}[] = [];\r\n\t\tconst priorityPool = [];\r\n\t\tfor (const curSet of setList) {\r\n\t\t\tif (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;\r\n\r\n\t\t\tconst item = this.dex.items.get(curSet.item);\r\n\t\t\tif (teamData.megaCount && teamData.megaCount > 0 && item.megaStone) continue; // reject 2+ mega stones\r\n\t\t\tif (teamData.zCount && teamData.zCount > 0 && item.zMove) continue; // reject 2+ Z stones\r\n\t\t\tif (itemsMax[item.id] && teamData.has[item.id] >= itemsMax[item.id]) continue;\r\n\r\n\t\t\tconst ability = this.dex.abilities.get(curSet.ability);\r\n\t\t\tif (weatherAbilitiesRequire[ability.id] && teamData.weather !== weatherAbilitiesRequire[ability.id]) continue;\r\n\t\t\tif (teamData.weather && weatherAbilities.includes(ability.id)) continue; // reject 2+ weather setters\r\n\r\n\t\t\tlet reject = false;\r\n\t\t\tlet hasRequiredMove = false;\r\n\t\t\tconst curSetVariants = [];\r\n\t\t\tfor (const move of curSet.moves) {\r\n\t\t\t\tconst variantIndex = this.random(move.length);\r\n\t\t\t\tconst moveId = toID(move[variantIndex]);\r\n\t\t\t\tif (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) {\r\n\t\t\t\t\treject = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (requiredMoves[moveId] && !teamData.has[requiredMoves[moveId]]) {\r\n\t\t\t\t\thasRequiredMove = true;\r\n\t\t\t\t}\r\n\t\t\t\tcurSetVariants.push(variantIndex);\r\n\t\t\t}\r\n\t\t\tif (reject) continue;\r\n\t\t\teffectivePool.push({set: curSet, moveVariants: curSetVariants});\r\n\t\t\tif (hasRequiredMove) priorityPool.push({set: curSet, moveVariants: curSetVariants});\r\n\t\t}\r\n\t\tif (priorityPool.length) effectivePool = priorityPool;\r\n\r\n\t\tif (!effectivePool.length) {\r\n\t\t\tif (!teamData.forceResult) return null;\r\n\t\t\tfor (const curSet of setList) {\r\n\t\t\t\teffectivePool.push({set: curSet});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst setData = this.sample(effectivePool);\r\n\t\tconst moves = [];\r\n\t\tfor (const [i, moveSlot] of setData.set.moves.entries()) {\r\n\t\t\tmoves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : this.sample(moveSlot));\r\n\t\t}\r\n\r\n\r\n\t\tconst item = this.sampleIfArray(setData.set.item);\r\n\t\tconst ability = this.sampleIfArray(setData.set.ability);\r\n\t\tconst nature = this.sampleIfArray(setData.set.nature);\r\n\t\tconst level = this.adjustLevel || setData.set.level || (tier === \"LC\" ? 5 : 100);\r\n\r\n\t\treturn {\r\n\t\t\tname: setData.set.name || species.baseSpecies,\r\n\t\t\tspecies: setData.set.species,\r\n\t\t\tgender: setData.set.gender || species.gender || (this.randomChance(1, 2) ? 'M' : 'F'),\r\n\t\t\titem: item || '',\r\n\t\t\tability: ability || species.abilities['0'],\r\n\t\t\tshiny: typeof setData.set.shiny === 'undefined' ? this.randomChance(1, 1024) : setData.set.shiny,\r\n\t\t\tlevel,\r\n\t\t\thappiness: typeof setData.set.happiness === 'undefined' ? 255 : setData.set.happiness,\r\n\t\t\tevs: {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0, ...setData.set.evs},\r\n\t\t\tivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31, ...setData.set.ivs},\r\n\t\t\tnature: nature || 'Serious',\r\n\t\t\tmoves,\r\n\t\t};\r\n\t}\r\n\r\n\trandomFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] {\r\n\t\tthis.enforceNoDirectCustomBanlistChanges();\r\n\r\n\t\tconst forceResult = (depth >= 12);\r\n\t\tconst isMonotype = !!this.forceMonotype || this.dex.formats.getRuleTable(this.format).has('sametypeclause');\r\n\r\n\t\t// The teams generated depend on the tier choice in such a way that\r\n\t\t// no exploitable information is leaked from rolling the tier in getTeam(p1).\r\n\t\tif (!this.factoryTier) {\r\n\t\t\tthis.factoryTier = isMonotype ? 'Mono' : this.sample(['Uber', 'OU', 'UU', 'RU', 'NU', 'PU', 'LC']);\r\n\t\t} else if (isMonotype && this.factoryTier !== 'Mono') {\r\n\t\t\t// I don't think this can ever happen?\r\n\t\t\tthrow new Error(`Can't generate a Monotype Battle Factory set in a battle with factory tier ${this.factoryTier}`);\r\n\t\t}\r\n\r\n\t\tconst tierValues: {[k: string]: number} = {\r\n\t\t\tUber: 5,\r\n\t\t\tOU: 4, UUBL: 4,\r\n\t\t\tUU: 3, RUBL: 3,\r\n\t\t\tRU: 2, NUBL: 2,\r\n\t\t\tNU: 1, PUBL: 1,\r\n\t\t\tPU: 0,\r\n\t\t};\r\n\r\n\t\tconst pokemon = [];\r\n\t\tconst pokemonPool = Object.keys(this.randomFactorySets[this.factoryTier]);\r\n\r\n\t\tconst typePool = this.dex.types.names();\r\n\t\tconst type = this.sample(typePool);\r\n\r\n\t\tconst teamData: TeamData = {\r\n\t\t\ttypeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, zCount: 0,\r\n\t\t\thas: {}, forceResult: forceResult, weaknesses: {}, resistances: {},\r\n\t\t};\r\n\t\tconst requiredMoveFamilies = ['hazardSet', 'hazardClear'];\r\n\t\tconst requiredMoves: {[k: string]: string} = {\r\n\t\t\tstealthrock: 'hazardSet',\r\n\t\t\trapidspin: 'hazardClear',\r\n\t\t\tdefog: 'hazardClear',\r\n\t\t};\r\n\t\tconst weatherAbilitiesSet: {[k: string]: string} = {\r\n\t\t\tdrizzle: 'raindance',\r\n\t\t\tdrought: 'sunnyday',\r\n\t\t\tsnowwarning: 'hail',\r\n\t\t\tsandstream: 'sandstorm',\r\n\t\t};\r\n\t\tconst resistanceAbilities: {[k: string]: string[]} = {\r\n\t\t\tdryskin: ['Water'], waterabsorb: ['Water'], stormdrain: ['Water'],\r\n\t\t\tflashfire: ['Fire'], heatproof: ['Fire'],\r\n\t\t\tlightningrod: ['Electric'], motordrive: ['Electric'], voltabsorb: ['Electric'],\r\n\t\t\tsapsipper: ['Grass'],\r\n\t\t\tthickfat: ['Ice', 'Fire'],\r\n\t\t\tlevitate: ['Ground'],\r\n\t\t};\r\n\r\n\t\twhile (pokemonPool.length && pokemon.length < this.maxTeamSize) {\r\n\t\t\tconst species = this.dex.species.get(this.sampleNoReplace(pokemonPool));\r\n\t\t\tif (!species.exists) continue;\r\n\r\n\t\t\t// Lessen the need of deleting sets of Pokemon after tier shifts\r\n\t\t\tif (\r\n\t\t\t\tthis.factoryTier in tierValues && species.tier in tierValues &&\r\n\t\t\t\ttierValues[species.tier] > tierValues[this.factoryTier]\r\n\t\t\t) continue;\r\n\r\n\t\t\tconst speciesFlags = this.randomFactorySets[this.factoryTier][species.id].flags;\r\n\r\n\t\t\t// Limit to one of each species (Species Clause)\r\n\t\t\tif (teamData.baseFormes[species.baseSpecies]) continue;\r\n\r\n\t\t\t// Limit the number of Megas to one\r\n\t\t\tif (!teamData.megaCount) teamData.megaCount = 0;\r\n\t\t\tif (teamData.megaCount >= 1 && speciesFlags.megaOnly) continue;\r\n\r\n\t\t\tconst set = this.randomFactorySet(species, teamData, this.factoryTier);\r\n\t\t\tif (!set) continue;\r\n\r\n\t\t\tconst itemData = this.dex.items.get(set.item);\r\n\r\n\t\t\t// Actually limit the number of Megas to one\r\n\t\t\tif (teamData.megaCount >= 1 && itemData.megaStone) continue;\r\n\r\n\t\t\t// Limit the number of Z moves to one\r\n\t\t\tif (teamData.zCount && teamData.zCount >= 1 && itemData.zMove) continue;\r\n\r\n\t\t\tlet types = species.types;\r\n\t\t\t// Dynamically scale limits for different team sizes. The default and minimum value is 1.\r\n\t\t\tconst limitFactor = Math.round(this.maxTeamSize / 6) || 1;\r\n\r\n\t\t\t// Enforce Monotype\r\n\t\t\tif (isMonotype) {\r\n\t\t\t\t// Prevents Mega Evolutions from breaking the type limits\r\n\t\t\t\tif (itemData.megaStone) {\r\n\t\t\t\t\tconst megaSpecies = this.dex.species.get(itemData.megaStone);\r\n\t\t\t\t\tif (types.length > megaSpecies.types.length) types = [species.types[0]];\r\n\t\t\t\t\t// Only check the second type because a Mega Evolution should always share the first type with its base forme.\r\n\t\t\t\t\tif (megaSpecies.types[1] && types[1] && megaSpecies.types[1] !== types[1]) {\r\n\t\t\t\t\t\ttypes = [megaSpecies.types[0]];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (!types.includes(type)) continue;\r\n\t\t\t} else {\r\n\t\t\t\t// If not Monotype, limit to two of each type\r\n\t\t\t\tlet skip = false;\r\n\t\t\t\tfor (const typeName of types) {\r\n\t\t\t\t\tif (teamData.typeCount[typeName] >= 2 * limitFactor && this.randomChance(4, 5)) {\r\n\t\t\t\t\t\tskip = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (skip) continue;\r\n\r\n\t\t\t\t// Limit 1 of any type combination\r\n\t\t\t\tlet typeCombo = types.slice().sort().join();\r\n\t\t\t\tif (set.ability + '' === 'Drought' || set.ability + '' === 'Drizzle') {\r\n\t\t\t\t// Drought and Drizzle don't count towards the type combo limit\r\n\t\t\t\t\ttypeCombo = set.ability + '';\r\n\t\t\t\t}\r\n\t\t\t\tif (teamData.typeComboCount[typeCombo] >= 1 * limitFactor) continue;\r\n\t\t\t}\r\n\r\n\t\t\t// Okay, the set passes, add it to our team\r\n\t\t\tpokemon.push(set);\r\n\t\t\tconst typeCombo = types.slice().sort().join();\r\n\t\t\t// Now that our Pokemon has passed all checks, we can update team data:\r\n\t\t\tfor (const typeName of types) {\r\n\t\t\t\tif (typeName in teamData.typeCount) {\r\n\t\t\t\t\tteamData.typeCount[typeName]++;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tteamData.typeCount[typeName] = 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tteamData.typeComboCount[typeCombo] = (teamData.typeComboCount[typeCombo] + 1) || 1;\r\n\r\n\t\t\tteamData.baseFormes[species.baseSpecies] = 1;\r\n\r\n\t\t\tif (itemData.megaStone) teamData.megaCount++;\r\n\t\t\tif (itemData.zMove) {\r\n\t\t\t\tif (!teamData.zCount) teamData.zCount = 0;\r\n\t\t\t\tteamData.zCount++;\r\n\t\t\t}\r\n\t\t\tif (itemData.id in teamData.has) {\r\n\t\t\t\tteamData.has[itemData.id]++;\r\n\t\t\t} else {\r\n\t\t\t\tteamData.has[itemData.id] = 1;\r\n\t\t\t}\r\n\r\n\t\t\tconst abilityState = this.dex.abilities.get(set.ability);\r\n\t\t\tif (abilityState.id in weatherAbilitiesSet) {\r\n\t\t\t\tteamData.weather = weatherAbilitiesSet[abilityState.id];\r\n\t\t\t}\r\n\r\n\t\t\tfor (const move of set.moves) {\r\n\t\t\t\tconst moveId = toID(move);\r\n\t\t\t\tif (moveId in teamData.has) {\r\n\t\t\t\t\tteamData.has[moveId]++;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tteamData.has[moveId] = 1;\r\n\t\t\t\t}\r\n\t\t\t\tif (moveId in requiredMoves) {\r\n\t\t\t\t\tteamData.has[requiredMoves[moveId]] = 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (const typeName of this.dex.types.names()) {\r\n\t\t\t\t// Cover any major weakness (3+) with at least one resistance\r\n\t\t\t\tif (teamData.resistances[typeName] >= 1) continue;\r\n\t\t\t\tif (resistanceAbilities[abilityState.id]?.includes(typeName) || !this.dex.getImmunity(typeName, types)) {\r\n\t\t\t\t\t// Heuristic: assume that Pok\u00E9mon with these abilities don't have (too) negative typing.\r\n\t\t\t\t\tteamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;\r\n\t\t\t\t\tif (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tconst typeMod = this.dex.getEffectiveness(typeName, types);\r\n\t\t\t\tif (typeMod < 0) {\r\n\t\t\t\t\tteamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;\r\n\t\t\t\t\tif (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;\r\n\t\t\t\t} else if (typeMod > 0) {\r\n\t\t\t\t\tteamData.weaknesses[typeName] = (teamData.weaknesses[typeName] || 0) + 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (pokemon.length < this.maxTeamSize) return this.randomFactoryTeam(side, ++depth);\r\n\r\n\t\t// Quality control\r\n\t\tif (!teamData.forceResult) {\r\n\t\t\tfor (const requiredFamily of requiredMoveFamilies) {\r\n\t\t\t\tif (!teamData.has[requiredFamily]) return this.randomFactoryTeam(side, ++depth);\r\n\t\t\t}\r\n\t\t\tfor (const typeName in teamData.weaknesses) {\r\n\t\t\t\tif (teamData.weaknesses[typeName] >= 3) return this.randomFactoryTeam(side, ++depth);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn pokemon;\r\n\t}\r\n\r\n\trandomBSSFactorySets: AnyObject = require('./bss-factory-sets.json');\r\n\r\n\trandomBSSFactorySet(\r\n\t\tspecies: Species, teamData: RandomTeamsTypes.FactoryTeamDetails\r\n\t): RandomTeamsTypes.RandomFactorySet | null {\r\n\t\tconst id = toID(species.name);\r\n\t\t// const flags = this.randomBSSFactorySets[tier][id].flags;\r\n\t\tconst setList = this.randomBSSFactorySets[id].sets;\r\n\r\n\t\tconst movesMax: {[k: string]: number} = {\r\n\t\t\tbatonpass: 1,\r\n\t\t\tstealthrock: 1,\r\n\t\t\tspikes: 1,\r\n\t\t\ttoxicspikes: 1,\r\n\t\t\tdoubleedge: 1,\r\n\t\t\ttrickroom: 1,\r\n\t\t};\r\n\t\tconst requiredMoves: {[k: string]: number} = {};\r\n\t\tconst weatherAbilitiesRequire: {[k: string]: string} = {\r\n\t\t\tswiftswim: 'raindance',\r\n\t\t\tsandrush: 'sandstorm', sandveil: 'sandstorm',\r\n\t\t};\r\n\t\tconst weatherAbilities = ['drizzle', 'drought', 'snowwarning', 'sandstream'];\r\n\r\n\t\t// Build a pool of eligible sets, given the team partners\r\n\t\t// Also keep track of sets with moves the team requires\r\n\t\tlet effectivePool: {set: AnyObject, moveVariants?: number[], itemVariants?: number, abilityVariants?: number}[] = [];\r\n\t\tconst priorityPool = [];\r\n\t\tfor (const curSet of setList) {\r\n\t\t\tif (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;\r\n\r\n\t\t\tconst item = this.dex.items.get(curSet.item);\r\n\t\t\tif (teamData.megaCount && teamData.megaCount > 1 && item.megaStone) continue; // reject 3+ mega stones\r\n\t\t\tif (teamData.zCount && teamData.zCount > 1 && item.zMove) continue; // reject 3+ Z stones\r\n\t\t\tif (teamData.has[item.id]) continue; // Item clause\r\n\r\n\t\t\tconst ability = this.dex.abilities.get(curSet.ability);\r\n\t\t\tif (weatherAbilitiesRequire[ability.id] && teamData.weather !== weatherAbilitiesRequire[ability.id]) continue;\r\n\t\t\tif (teamData.weather && weatherAbilities.includes(ability.id)) continue; // reject 2+ weather setters\r\n\r\n\t\t\tif (curSet.species === 'Aron' && teamData.weather !== 'sandstorm') continue; // reject Aron without a Sand Stream user\r\n\r\n\t\t\tlet reject = false;\r\n\t\t\tlet hasRequiredMove = false;\r\n\t\t\tconst curSetVariants = [];\r\n\t\t\tfor (const move of curSet.moves) {\r\n\t\t\t\tconst variantIndex = this.random(move.length);\r\n\t\t\t\tconst moveId = toID(move[variantIndex]);\r\n\t\t\t\tif (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) {\r\n\t\t\t\t\treject = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (requiredMoves[moveId] && !teamData.has[requiredMoves[moveId]]) {\r\n\t\t\t\t\thasRequiredMove = true;\r\n\t\t\t\t}\r\n\t\t\t\tcurSetVariants.push(variantIndex);\r\n\t\t\t}\r\n\t\t\tif (reject) continue;\r\n\t\t\teffectivePool.push({set: curSet, moveVariants: curSetVariants});\r\n\t\t\tif (hasRequiredMove) priorityPool.push({set: curSet, moveVariants: curSetVariants});\r\n\t\t}\r\n\t\tif (priorityPool.length) effectivePool = priorityPool;\r\n\r\n\t\tif (!effectivePool.length) {\r\n\t\t\tif (!teamData.forceResult) return null;\r\n\t\t\tfor (const curSet of setList) {\r\n\t\t\t\teffectivePool.push({set: curSet});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst setData = this.sample(effectivePool);\r\n\t\tconst moves = [];\r\n\t\tfor (const [i, moveSlot] of setData.set.moves.entries()) {\r\n\t\t\tmoves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : this.sample(moveSlot));\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tname: setData.set.nickname || setData.set.name || species.baseSpecies,\r\n\t\t\tspecies: setData.set.species,\r\n\t\t\tgender: setData.set.gender || species.gender || (this.randomChance(1, 2) ? 'M' : 'F'),\r\n\t\t\titem: this.sampleIfArray(setData.set.item) || '',\r\n\t\t\tability: setData.set.ability || species.abilities['0'],\r\n\t\t\tshiny: typeof setData.set.shiny === 'undefined' ? this.randomChance(1, 1024) : setData.set.shiny,\r\n\t\t\tlevel: setData.set.level || 50,\r\n\t\t\thappiness: typeof setData.set.happiness === 'undefined' ? 255 : setData.set.happiness,\r\n\t\t\tevs: {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0, ...setData.set.evs},\r\n\t\t\tivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31, ...setData.set.ivs},\r\n\t\t\tnature: setData.set.nature || 'Serious',\r\n\t\t\tmoves,\r\n\t\t};\r\n\t}\r\n\r\n\trandomBSSFactoryTeam(side: PlayerOptions, depth = 0): RandomTeamsTypes.RandomFactorySet[] {\r\n\t\tthis.enforceNoDirectCustomBanlistChanges();\r\n\r\n\t\tconst forceResult = (depth >= 4);\r\n\r\n\t\tconst pokemon = [];\r\n\r\n\t\tconst pokemonPool = Object.keys(this.randomBSSFactorySets);\r\n\r\n\t\tconst teamData: TeamData = {\r\n\t\t\ttypeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, zCount: 0,\r\n\t\t\teeveeLimCount: 0, has: {}, forceResult, weaknesses: {}, resistances: {},\r\n\t\t};\r\n\t\tconst requiredMoveFamilies: string[] = [];\r\n\t\tconst requiredMoves: {[k: string]: string} = {};\r\n\t\tconst weatherAbilitiesSet: {[k: string]: string} = {\r\n\t\t\tdrizzle: 'raindance',\r\n\t\t\tdrought: 'sunnyday',\r\n\t\t\tsnowwarning: 'hail',\r\n\t\t\tsandstream: 'sandstorm',\r\n\t\t};\r\n\t\tconst resistanceAbilities: {[k: string]: string[]} = {\r\n\t\t\twaterabsorb: ['Water'],\r\n\t\t\tflashfire: ['Fire'],\r\n\t\t\tlightningrod: ['Electric'], voltabsorb: ['Electric'],\r\n\t\t\tthickfat: ['Ice', 'Fire'],\r\n\t\t\tlevitate: ['Ground'],\r\n\t\t};\r\n\r\n\t\twhile (pokemonPool.length && pokemon.length < this.maxTeamSize) {\r\n\t\t\tconst species = this.dex.species.get(this.sampleNoReplace(pokemonPool));\r\n\t\t\tif (!species.exists) continue;\r\n\r\n\t\t\tconst speciesFlags = this.randomBSSFactorySets[species.id].flags;\r\n\t\t\tif (!teamData.megaCount) teamData.megaCount = 0;\r\n\r\n\t\t\t// Limit to one of each species (Species Clause)\r\n\t\t\tif (teamData.baseFormes[species.baseSpecies]) continue;\r\n\r\n\t\t\t// Limit the number of Megas + Z-moves to 3\r\n\t\t\tif (teamData.megaCount + (teamData.zCount ? teamData.zCount : 0) >= 3 && speciesFlags.megaOnly) continue;\r\n\r\n\t\t\t// Dynamically scale limits for different team sizes. The default and minimum value is 1.\r\n\t\t\tconst limitFactor = Math.round(this.maxTeamSize / 6) || 1;\r\n\r\n\t\t\t// Limit 2 of any type\r\n\t\t\tconst types = species.types;\r\n\t\t\tlet skip = false;\r\n\t\t\tfor (const type of types) {\r\n\t\t\t\tif (teamData.typeCount[type] >= 2 * limitFactor && this.randomChance(4, 5)) {\r\n\t\t\t\t\tskip = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (skip) continue;\r\n\r\n\t\t\t// Restrict Eevee with certain Pokemon\r\n\t\t\tif (speciesFlags.limEevee) {\r\n\t\t\t\tif (!teamData.eeveeLimCount) teamData.eeveeLimCount = 0;\r\n\t\t\t\tteamData.eeveeLimCount++;\r\n\t\t\t}\r\n\t\t\tif (teamData.eeveeLimCount && teamData.eeveeLimCount >= 1 && speciesFlags.limEevee) continue;\r\n\r\n\t\t\tconst set = this.randomBSSFactorySet(species, teamData);\r\n\t\t\tif (!set) continue;\r\n\r\n\t\t\t// Limit 1 of any type combination\r\n\t\t\tlet typeCombo = types.slice().sort().join();\r\n\t\t\tif (set.ability === 'Drought' || set.ability === 'Drizzle') {\r\n\t\t\t\t// Drought and Drizzle don't count towards the type combo limit\r\n\t\t\t\ttypeCombo = set.ability;\r\n\t\t\t}\r\n\t\t\tif (teamData.typeComboCount[typeCombo] >= 1 * limitFactor) continue;\r\n\r\n\t\t\t// Okay, the set passes, add it to our team\r\n\t\t\tpokemon.push(set);\r\n\r\n\t\t\t// Now that our Pokemon has passed all checks, we can update team data:\r\n\t\t\tfor (const type of types) {\r\n\t\t\t\tif (type in teamData.typeCount) {\r\n\t\t\t\t\tteamData.typeCount[type]++;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tteamData.typeCount[type] = 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tteamData.typeComboCount[typeCombo] = (teamData.typeComboCount[typeCombo] + 1) || 1;\r\n\r\n\t\t\tteamData.baseFormes[species.baseSpecies] = 1;\r\n\r\n\t\t\t// Limit Mega and Z-move\r\n\t\t\tconst itemData = this.dex.items.get(set.item);\r\n\t\t\tif (itemData.megaStone) teamData.megaCount++;\r\n\t\t\tif (itemData.zMove) {\r\n\t\t\t\tif (!teamData.zCount) teamData.zCount = 0;\r\n\t\t\t\tteamData.zCount++;\r\n\t\t\t}\r\n\t\t\tteamData.has[itemData.id] = 1;\r\n\r\n\t\t\tconst abilityState = this.dex.abilities.get(set.ability);\r\n\t\t\tif (abilityState.id in weatherAbilitiesSet) {\r\n\t\t\t\tteamData.weather = weatherAbilitiesSet[abilityState.id];\r\n\t\t\t}\r\n\r\n\t\t\tfor (const move of set.moves) {\r\n\t\t\t\tconst moveId = toID(move);\r\n\t\t\t\tif (moveId in teamData.has) {\r\n\t\t\t\t\tteamData.has[moveId]++;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tteamData.has[moveId] = 1;\r\n\t\t\t\t}\r\n\t\t\t\tif (moveId in requiredMoves) {\r\n\t\t\t\t\tteamData.has[requiredMoves[moveId]] = 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (const typeName of this.dex.types.names()) {\r\n\t\t\t\t// Cover any major weakness (3+) with at least one resistance\r\n\t\t\t\tif (teamData.resistances[typeName] >= 1) continue;\r\n\t\t\t\tif (resistanceAbilities[abilityState.id]?.includes(typeName) || !this.dex.getImmunity(typeName, types)) {\r\n\t\t\t\t\t// Heuristic: assume that Pok\u00E9mon with these abilities don't have (too) negative typing.\r\n\t\t\t\t\tteamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;\r\n\t\t\t\t\tif (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tconst typeMod = this.dex.getEffectiveness(typeName, types);\r\n\t\t\t\tif (typeMod < 0) {\r\n\t\t\t\t\tteamData.resistances[typeName] = (teamData.resistances[typeName] || 0) + 1;\r\n\t\t\t\t\tif (teamData.resistances[typeName] >= 1) teamData.weaknesses[typeName] = 0;\r\n\t\t\t\t} else if (typeMod > 0) {\r\n\t\t\t\t\tteamData.weaknesses[typeName] = (teamData.weaknesses[typeName] || 0) + 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (pokemon.length < this.maxTeamSize) return this.randomBSSFactoryTeam(side, ++depth);\r\n\r\n\t\t// Quality control\r\n\t\tif (!teamData.forceResult) {\r\n\t\t\tfor (const requiredFamily of requiredMoveFamilies) {\r\n\t\t\t\tif (!teamData.has[requiredFamily]) return this.randomBSSFactoryTeam(side, ++depth);\r\n\t\t\t}\r\n\t\t\tfor (const type in teamData.weaknesses) {\r\n\t\t\t\tif (teamData.weaknesses[type] >= 3) return this.randomBSSFactoryTeam(side, ++depth);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn pokemon;\r\n\t}\r\n}\r\n\r\nexport default RandomGen7Teams;\r\n"], "mappings": "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", "names": ["item", "ability", "typeCombo"] }