{ "version": 3, "sources": ["../../../../../data/mods/gen7/random-doubles-teams.ts"], "sourcesContent": ["import {MoveCounter, RandomGen8Teams, OldRandomBattleSpecies} from '../gen8/random-teams';\nimport {PRNG, PRNGSeed} from '../../../sim/prng';\nimport {Utils} from '../../../lib';\nimport {toID} from '../../../sim/dex';\n\nconst ZeroAttackHPIVs: {[k: string]: SparseStatsTable} = {\n\tgrass: {hp: 30, spa: 30},\n\tfire: {spa: 30, spe: 30},\n\tice: {def: 30},\n\tground: {spa: 30, spd: 30},\n\tfighting: {def: 30, spa: 30, spd: 30, spe: 30},\n\telectric: {def: 30, spe: 30},\n\tpsychic: {spe: 30},\n\tflying: {spa: 30, spd: 30, spe: 30},\n\trock: {def: 30, spd: 30, spe: 30},\n};\n\nexport class RandomGen7DoublesTeams extends RandomGen8Teams {\n\trandomDoublesData: {[species: string]: OldRandomBattleSpecies} = require('./random-doubles-data.json');\n\n\tconstructor(format: Format | string, prng: PRNG | PRNGSeed | null) {\n\t\tsuper(format, prng);\n\n\t\tthis.moveEnforcementCheckers = {\n\t\t\tBug: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t['megahorn', 'pinmissile'].some(m => movePool.includes(m)) ||\n\t\t\t\t!counter.get('Bug') && (abilities.has('Tinted Lens') || abilities.has('Adaptability'))\n\t\t\t),\n\t\t\tDark: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t(!counter.get('Dark') && !abilities.has('Protean')) ||\n\t\t\t\t(moves.has('pursuit') && species.types.length > 1 && counter.get('Dark') === 1)\n\t\t\t),\n\t\t\tDragon: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t!counter.get('Dragon') &&\n\t\t\t\t!abilities.has('Aerilate') && !abilities.has('Pixilate') &&\n\t\t\t\t!moves.has('dragonascent') && !moves.has('fly') && !moves.has('rest') && !moves.has('sleeptalk')\n\t\t\t),\n\t\t\tElectric: (movePool, moves, abilities, types, counter) => !counter.get('Electric') || movePool.includes('thunder'),\n\t\t\tFairy: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t(!counter.get('Fairy') && !types.has('Flying') && !abilities.has('Pixilate'))\n\t\t\t),\n\t\t\tFighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting') || !counter.get('stab'),\n\t\t\tFire: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t!counter.get('Fire') || ['eruption', 'quiverdance'].some(m => movePool.includes(m)) ||\n\t\t\t\tmoves.has('flamecharge') && (movePool.includes('flareblitz') || movePool.includes('blueflare'))\n\t\t\t),\n\t\t\tFlying: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Flying') && (\n\t\t\t\t\tspecies.id === 'rotomfan' ||\n\t\t\t\t\tabilities.has('Gale Wings') ||\n\t\t\t\t\tabilities.has('Serene Grace') || (\n\t\t\t\t\t\ttypes.has('Normal') && (movePool.includes('beakblast') || movePool.includes('bravebird'))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t),\n\t\t\tGhost: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t(!counter.get('Ghost') || movePool.includes('spectralthief')) &&\n\t\t\t\t!types.has('Dark') &&\n\t\t\t\t!abilities.has('Steelworker')\n\t\t\t),\n\t\t\tGrass: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Grass') && (species.baseStats.atk >= 100 || movePool.includes('leafstorm'))\n\t\t\t),\n\t\t\tGround: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t!counter.get('Ground') && !moves.has('rest') && !moves.has('sleeptalk')\n\t\t\t),\n\t\t\tIce: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t!abilities.has('Refrigerate') && (\n\t\t\t\t\t!counter.get('Ice') ||\n\t\t\t\t\tmovePool.includes('iciclecrash') ||\n\t\t\t\t\t(abilities.has('Snow Warning') && movePool.includes('blizzard'))\n\t\t\t\t)\n\t\t\t),\n\t\t\tNormal: movePool => movePool.includes('facade'),\n\t\t\tPoison: (movePool, moves, abilities, types, counter) => (\n\t\t\t\t!counter.get('Poison') &&\n\t\t\t\t(!!counter.setupType || abilities.has('Adaptability') || abilities.has('Sheer Force') || movePool.includes('gunkshot'))\n\t\t\t),\n\t\t\tPsychic: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Psychic') && (\n\t\t\t\t\tabilities.has('Psychic Surge') ||\n\t\t\t\t\tmovePool.includes('psychicfangs') ||\n\t\t\t\t\t(!types.has('Steel') && !types.has('Flying') && !abilities.has('Pixilate') &&\n\t\t\t\t\t\tcounter.get('stab') < species.types.length)\n\t\t\t\t)\n\t\t\t),\n\t\t\tRock: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Rock') &&\n\t\t\t\t!types.has('Fairy') &&\n\t\t\t\t(counter.setupType === 'Physical' || species.baseStats.atk >= 105 || abilities.has('Rock Head'))\n\t\t\t),\n\t\t\tSteel: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('Steel') && (species.baseStats.atk >= 100 || abilities.has('Steelworker'))\n\t\t\t),\n\t\t\tWater: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t(!counter.get('Water') && !abilities.has('Protean')) ||\n\t\t\t\t!counter.get('stab') ||\n\t\t\t\tmovePool.includes('crabhammer') ||\n\t\t\t\t(abilities.has('Huge Power') && movePool.includes('aquajet'))\n\t\t\t),\n\t\t\tAdaptability: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.setupType &&\n\t\t\t\tspecies.types.length > 1 &&\n\t\t\t\t(!counter.get(species.types[0]) || !counter.get(species.types[1]))\n\t\t\t),\n\t\t\tContrary: (movePool, moves, abilities, types, counter, species) => (\n\t\t\t\t!counter.get('contrary') && species.name !== 'Shuckle'\n\t\t\t),\n\t\t\t'Slow Start': movePool => movePool.includes('substitute'),\n\t\t};\n\t}\n\n\tshouldCullMove(\n\t\tmove: Move,\n\t\ttypes: Set,\n\t\tmoves: Set,\n\t\tabilities: Set,\n\t\tcounter: MoveCounter,\n\t\tmovePool: string[],\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t\tisLead: boolean\n\t): {cull: boolean, isSetup?: boolean} {\n\t\tswitch (move.id) {\n\t\t// Not very useful without their supporting moves\n\t\tcase 'clangingscales': case 'electricterrain': case 'happyhour': case 'holdhands':\n\t\t\treturn {\n\t\t\t\tcull: !!teamDetails.zMove,\n\t\t\t\tisSetup: move.id === 'happyhour' || move.id === 'holdhands',\n\t\t\t};\n\t\tcase 'cottonguard': case 'defendorder':\n\t\t\treturn {cull: !counter.get('recovery') && !moves.has('rest')};\n\t\tcase 'bounce': case 'dig': case 'fly':\n\t\t\treturn {cull: !!teamDetails.zMove || counter.setupType !== 'Physical'};\n\t\tcase 'focuspunch':\n\t\t\treturn {cull: !moves.has('substitute') || counter.damagingMoves.size < 2};\n\t\tcase 'icebeam':\n\t\t\treturn {cull: abilities.has('Tinted Lens') && !!counter.get('Status')};\n\t\tcase 'lightscreen':\n\t\t\tif (movePool.length > 1) {\n\t\t\t\tconst screen = movePool.indexOf('reflect');\n\t\t\t\tif (screen >= 0) this.fastPop(movePool, screen);\n\t\t\t}\n\t\t\treturn {cull: !moves.has('reflect')};\n\t\tcase 'perishsong':\n\t\t\treturn {cull: !moves.has('protect')};\n\t\tcase 'reflect':\n\t\t\tif (movePool.length > 1) {\n\t\t\t\tconst screen = movePool.indexOf('lightscreen');\n\t\t\t\tif (screen >= 0) this.fastPop(movePool, screen);\n\t\t\t}\n\t\t\treturn {cull: !moves.has('calmmind') && !moves.has('lightscreen')};\n\t\tcase 'rest':\n\t\t\treturn {cull: movePool.includes('sleeptalk')};\n\t\tcase 'sleeptalk':\n\t\t\tif (movePool.length > 1) {\n\t\t\t\tconst rest = movePool.indexOf('rest');\n\t\t\t\tif (rest >= 0) this.fastPop(movePool, rest);\n\t\t\t}\n\t\t\treturn {cull: !moves.has('rest')};\n\t\tcase 'storedpower':\n\t\t\treturn {cull: !counter.setupType};\n\t\tcase 'switcheroo': case 'trick':\n\t\t\treturn {cull: (\n\t\t\t\tcounter.get('Physical') + counter.get('Special') < 3 ||\n\t\t\t\t['electroweb', 'snarl', 'suckerpunch'].some(m => moves.has(m))\n\t\t\t)};\n\n\t\t// Set up once and only if we have the moves for it\n\t\tcase 'bellydrum': case 'bulkup': case 'coil': case 'curse': case 'dragondance': case 'honeclaws': case 'swordsdance':\n\t\t\treturn {cull: (\n\t\t\t\tcounter.setupType !== 'Physical' ||\n\t\t\t\tcounter.get('physicalsetup') > 1 ||\n\t\t\t\t(counter.get('Physical') + counter.get('physicalpool') < 2) ||\n\t\t\t\t(move.id === 'bellydrum' && !abilities.has('Unburden') && !counter.get('priority'))\n\t\t\t), isSetup: true};\n\t\tcase 'calmmind': case 'geomancy': case 'nastyplot': case 'tailglow':\n\t\t\tif (types.has('Dark') && moves.has('darkpulse')) {\n\t\t\t\tcounter.setupType = 'Special';\n\t\t\t\treturn {cull: false, isSetup: true};\n\t\t\t}\n\t\t\treturn {cull: (\n\t\t\t\tcounter.setupType !== 'Special' ||\n\t\t\t\tcounter.get('specialsetup') > 1 ||\n\t\t\t\t(counter.get('Special') + counter.get('specialpool') < 2)\n\t\t\t), isSetup: true};\n\t\tcase 'growth': case 'shellsmash': case 'workup':\n\t\t\treturn {cull: (\n\t\t\t\tcounter.setupType !== 'Mixed' ||\n\t\t\t\tcounter.get('mixedsetup') > 1 ||\n\t\t\t\tcounter.damagingMoves.size + counter.get('physicalpool') + counter.get('specialpool') < 2 ||\n\t\t\t\t(move.id === 'growth' && !moves.has('sunnyday'))\n\t\t\t), isSetup: true};\n\t\tcase 'agility': case 'autotomize': case 'rockpolish': case 'shiftgear':\n\t\t\treturn {cull: counter.damagingMoves.size < 2, isSetup: !counter.setupType};\n\t\tcase 'flamecharge':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('dracometeor') ||\n\t\t\t\tmoves.has('overheat') ||\n\t\t\t\t(counter.damagingMoves.size < 3 && !counter.setupType)\n\t\t\t)};\n\n\t\t// Bad after setup\n\t\tcase 'circlethrow': case 'dragontail':\n\t\t\treturn {cull: (\n\t\t\t\t!!counter.get('speedsetup') ||\n\t\t\t\tmoves.has('superpower') ||\n\t\t\t\t(!!counter.setupType && ((!moves.has('rest') && !moves.has('sleeptalk')) || moves.has('stormthrow'))) ||\n\t\t\t\t['encore', 'raindance', 'roar', 'trickroom', 'whirlwind'].some(m => moves.has(m)) ||\n\t\t\t\t(counter.get(move.type) > 1 && counter.get('Status') > 1) ||\n\t\t\t\t(abilities.has('Sheer Force') && !!counter.get('sheerforce'))\n\t\t\t)};\n\t\tcase 'defog':\n\t\t\treturn {cull: !!counter.setupType || moves.has('spikes') || moves.has('stealthrock') || !!teamDetails.defog};\n\t\tcase 'fakeout': case 'tailwind':\n\t\t\treturn {cull: !!counter.setupType || ['substitute', 'switcheroo', 'trick'].some(m => moves.has(m))};\n\t\tcase 'foulplay':\n\t\t\treturn {cull: (\n\t\t\t\t!!counter.setupType ||\n\t\t\t\t!!counter.get('speedsetup') ||\n\t\t\t\tcounter.get('Dark') > 2 ||\n\t\t\t\tmoves.has('clearsmog') ||\n\t\t\t\t(!!counter.get('priority') && counter.damagingMoves.size - 1 === counter.get('priority'))\n\t\t\t)};\n\t\tcase 'haze': case 'spikes':\n\t\t\treturn {cull: !!counter.setupType || !!counter.get('speedsetup') || moves.has('trickroom')};\n\t\tcase 'healbell': case 'technoblast':\n\t\t\treturn {cull: !!counter.get('speedsetup')};\n\t\tcase 'healingwish': case 'memento':\n\t\t\treturn {cull: !!counter.setupType || !!counter.get('recovery') || moves.has('substitute')};\n\t\tcase 'helpinghand': case 'superfang': case 'yawn':\n\t\t\treturn {cull: !!counter.setupType};\n\t\tcase 'icywind': case 'stringshot':\n\t\t\treturn {cull: !!counter.get('speedsetup') || moves.has('trickroom')};\n\t\tcase 'leechseed': case 'roar': case 'whirlwind':\n\t\t\treturn {cull: (\n\t\t\t\t!!counter.setupType ||\n\t\t\t\t!!counter.get('speedsetup') ||\n\t\t\t\tmoves.has('dragontail') ||\n\t\t\t\t(movePool.includes('protect') || movePool.includes('spikyshield'))\n\t\t\t)};\n\t\tcase 'protect':\n\t\t\tconst doublesCondition = (\n\t\t\t\tmoves.has('fakeout') ||\n\t\t\t\t(moves.has('tailwind') && moves.has('roost')) ||\n\t\t\t\tmovePool.includes('bellydrum') ||\n\t\t\t\tmovePool.includes('shellsmash')\n\t\t\t);\n\t\t\treturn {cull: (\n\t\t\t\tdoublesCondition ||\n\t\t\t\t!!counter.get('speedsetup') ||\n\t\t\t\tmoves.has('rest') || moves.has('roar') || moves.has('whirlwind') ||\n\t\t\t\t(moves.has('lightscreen') && moves.has('reflect'))\n\t\t\t)};\n\t\tcase 'pursuit':\n\t\t\treturn {cull: (\n\t\t\t\t!!counter.setupType ||\n\t\t\t\tcounter.get('Status') > 1 ||\n\t\t\t\tcounter.get('Dark') > 2 ||\n\t\t\t\t(moves.has('knockoff') && !types.has('Dark'))\n\t\t\t)};\n\t\tcase 'rapidspin':\n\t\t\treturn {cull: !!counter.setupType || !!teamDetails.rapidSpin};\n\t\tcase 'reversal':\n\t\t\treturn {cull: moves.has('substitute') && !!teamDetails.zMove};\n\t\tcase 'seismictoss':\n\t\t\treturn {cull: !abilities.has('Parental Bond') && (counter.damagingMoves.size > 1 || !!counter.setupType)};\n\t\tcase 'stealthrock':\n\t\t\treturn {cull: (\n\t\t\t\t!!counter.setupType ||\n\t\t\t\t!!counter.get('speedsetup') ||\n\t\t\t\t['rest', 'substitute', 'trickroom'].some(m => moves.has(m)) ||\n\t\t\t\t!!teamDetails.stealthRock\n\t\t\t)};\n\t\tcase 'stickyweb':\n\t\t\treturn {cull: !!teamDetails.stickyWeb};\n\t\tcase 'toxicspikes':\n\t\t\treturn {cull: !!counter.setupType || !!teamDetails.toxicSpikes};\n\t\tcase 'trickroom':\n\t\t\treturn {cull: (\n\t\t\t\t!!counter.setupType ||\n\t\t\t\t!!counter.get('speedsetup') ||\n\t\t\t\tcounter.damagingMoves.size < 2 ||\n\t\t\t\tmoves.has('lightscreen') ||\n\t\t\t\tmoves.has('reflect')\n\t\t\t)};\n\t\tcase 'uturn':\n\t\t\treturn {cull: (\n\t\t\t\t(abilities.has('Speed Boost') && moves.has('protect')) ||\n\t\t\t\t(abilities.has('Protean') && counter.get('Status') > 2) ||\n\t\t\t\t!!counter.setupType ||\n\t\t\t\t!!counter.get('speedsetup')\n\t\t\t)};\n\t\tcase 'voltswitch':\n\t\t\treturn {cull: (\n\t\t\t\t!!counter.setupType ||\n\t\t\t\t!!counter.get('speedsetup') ||\n\t\t\t\tmovePool.includes('boltstrike') ||\n\t\t\t\t['electricterrain', 'raindance', 'uturn'].some(m => moves.has(m))\n\t\t\t)};\n\t\tcase 'wish':\n\t\t\treturn {cull: (\n\t\t\t\tspecies.baseStats.hp < 110 &&\n\t\t\t\t!abilities.has('Regenerator') &&\n\t\t\t\t!movePool.includes('protect') &&\n\t\t\t\t!['ironhead', 'protect', 'spikyshield', 'uturn'].some(m => moves.has(m))\n\t\t\t)};\n\n\t\t// Bit redundant to have both\n\t\t// Attacks:\n\t\tcase 'bugbite': case 'bugbuzz': case 'infestation': case 'signalbeam':\n\t\t\treturn {cull: moves.has('uturn') && !counter.setupType && !abilities.has('Tinted Lens')};\n\t\tcase 'darkestlariat': case 'nightslash':\n\t\t\treturn {cull: moves.has('knockoff') || moves.has('pursuit')};\n\t\tcase 'darkpulse':\n\t\t\treturn {cull: ['crunch', 'knockoff', 'hyperspacefury'].some(m => moves.has(m)) && counter.setupType !== 'Special'};\n\t\tcase 'suckerpunch':\n\t\t\treturn {cull: counter.damagingMoves.size < 2 || moves.has('glare') || !types.has('Dark') && counter.get('Dark') > 1};\n\t\tcase 'dragonpulse': case 'spacialrend':\n\t\t\treturn {cull: moves.has('dracometeor') || moves.has('outrage') || (moves.has('dragontail') && !counter.setupType)};\n\t\tcase 'outrage':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('dragonclaw') ||\n\t\t\t\t(moves.has('dracometeor') && counter.damagingMoves.size < 3) ||\n\t\t\t\t(moves.has('clangingscales') && !teamDetails.zMove)\n\t\t\t)};\n\t\tcase 'thunderbolt':\n\t\t\treturn {cull: ['discharge', 'wildcharge'].some(m => moves.has(m))};\n\t\tcase 'moonblast':\n\t\t\treturn {cull: moves.has('dazzlinggleam')};\n\t\tcase 'aurasphere': case 'focusblast':\n\t\t\treturn {cull: (((moves.has('closecombat') || moves.has('superpower')) && counter.setupType !== 'Special'))};\n\t\tcase 'drainpunch':\n\t\t\treturn {cull: (\n\t\t\t\t(!moves.has('bulkup') && (moves.has('closecombat') || moves.has('highjumpkick'))) ||\n\t\t\t\t((moves.has('focusblast') || moves.has('superpower')) && counter.setupType !== 'Physical')\n\t\t\t)};\n\t\tcase 'closecombat': case 'highjumpkick':\n\t\t\treturn {cull: (\n\t\t\t\t(moves.has('bulkup') && moves.has('drainpunch')) ||\n\t\t\t\t(counter.setupType === 'Special' && ['aurasphere', 'focusblast'].some(m => moves.has(m) || movePool.includes(m)))\n\t\t\t)};\n\t\tcase 'dynamicpunch': case 'vacuumwave':\n\t\t\treturn {cull: (moves.has('closecombat') || moves.has('facade')) && counter.setupType !== 'Special'};\n\t\tcase 'stormthrow':\n\t\t\treturn {cull: moves.has('circlethrow')};\n\t\tcase 'superpower':\n\t\t\treturn {\n\t\t\t\tcull: (counter.get('Fighting') > 1 && !!counter.setupType),\n\t\t\t\tisSetup: abilities.has('Contrary'),\n\t\t\t};\n\t\tcase 'fierydance': case 'heatwave':\n\t\t\treturn {cull: moves.has('fireblast')};\n\t\tcase 'firefang': case 'firepunch': case 'flamethrower':\n\t\t\treturn {cull: (\n\t\t\t\t['blazekick', 'heatwave', 'overheat'].some(m => moves.has(m)) ||\n\t\t\t\t((moves.has('fireblast') || moves.has('lavaplume')) && counter.setupType !== 'Physical')\n\t\t\t)};\n\t\tcase 'fireblast': case 'magmastorm':\n\t\t\treturn {cull: (\n\t\t\t\t(moves.has('flareblitz') && counter.setupType !== 'Special') ||\n\t\t\t\t(moves.has('lavaplume') && !counter.setupType && !counter.get('speedsetup'))\n\t\t\t)};\n\t\tcase 'lavaplume':\n\t\t\treturn {cull: moves.has('firepunch') || moves.has('fireblast') && (!!counter.setupType || !!counter.get('speedsetup'))};\n\t\tcase 'overheat':\n\t\t\treturn {cull: ['fireblast', 'flareblitz', 'lavaplume'].some(m => moves.has(m))};\n\t\tcase 'hurricane':\n\t\t\treturn {cull: moves.has('bravebird') || moves.has('airslash') && !!counter.get('Status')};\n\t\tcase 'hex':\n\t\t\treturn {cull: !moves.has('thunderwave') && !moves.has('willowisp')};\n\t\tcase 'shadowball':\n\t\t\treturn {cull: moves.has('darkpulse') || (moves.has('hex') && moves.has('willowisp'))};\n\t\tcase 'shadowclaw':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('shadowforce') ||\n\t\t\t\tmoves.has('shadowsneak') ||\n\t\t\t\t(moves.has('shadowball') && counter.setupType !== 'Physical')\n\t\t\t)};\n\t\tcase 'shadowsneak':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('trick') ||\n\t\t\t\t(types.has('Ghost') && species.types.length > 1 && counter.get('stab') < 2)\n\t\t\t)};\n\t\tcase 'gigadrain':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('petaldance') ||\n\t\t\t\tmoves.has('powerwhip') ||\n\t\t\t\t(moves.has('leafstorm') && counter.get('Special') < 4 && !counter.setupType && !moves.has('trickroom'))\n\t\t\t)};\n\t\tcase 'leafblade': case 'woodhammer':\n\t\t\treturn {cull: (\n\t\t\t\t(moves.has('gigadrain') && counter.setupType !== 'Physical') ||\n\t\t\t\t(moves.has('hornleech') && !!counter.setupType)\n\t\t\t)};\n\t\tcase 'leafstorm':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('trickroom') ||\n\t\t\t\tmoves.has('energyball') ||\n\t\t\t\t(counter.get('Grass') > 1 && !!counter.setupType)\n\t\t\t)};\n\t\tcase 'solarbeam':\n\t\t\treturn {cull: (\n\t\t\t\t(!abilities.has('Drought') && !moves.has('sunnyday')) ||\n\t\t\t\tmoves.has('gigadrain') ||\n\t\t\t\tmoves.has('leafstorm')\n\t\t\t)};\n\t\tcase 'bonemerang': case 'precipiceblades':\n\t\t\treturn {cull: moves.has('earthquake')};\n\t\tcase 'earthpower':\n\t\t\treturn {cull: moves.has('earthquake') && counter.setupType !== 'Special'};\n\t\tcase 'earthquake':\n\t\t\treturn {cull: moves.has('highhorsepower') || moves.has('closecombat') && abilities.has('Aerilate')};\n\t\tcase 'freezedry':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('icebeam') || moves.has('icywind') || counter.get('stab') < species.types.length ||\n\t\t\t\t(moves.has('blizzard') && !!counter.setupType)\n\t\t\t)};\n\t\tcase 'bodyslam': case 'return':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('doubleedge') ||\n\t\t\t\t(moves.has('glare') && moves.has('headbutt')) ||\n\t\t\t\t(move.id === 'return' && moves.has('bodyslam'))\n\t\t\t)};\n\t\tcase 'endeavor':\n\t\t\treturn {cull: !isLead && !abilities.has('Defeatist')};\n\t\tcase 'explosion':\n\t\t\treturn {cull: (\n\t\t\t\t!!counter.setupType ||\n\t\t\t\tmoves.has('wish') ||\n\t\t\t\t(abilities.has('Refrigerate') && (moves.has('freezedry') || movePool.includes('return')))\n\t\t\t)};\n\t\tcase 'extremespeed': case 'skyattack':\n\t\t\treturn {cull: moves.has('substitute') || counter.setupType !== 'Physical' && moves.has('vacuumwave')};\n\t\tcase 'facade':\n\t\t\treturn {cull: moves.has('bulkup')};\n\t\tcase 'hiddenpower':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('rest') ||\n\t\t\t\t(!counter.get('stab') && counter.damagingMoves.size < 2) ||\n\t\t\t\t// Force Moonblast on Special-setup Fairies\n\t\t\t\t(counter.setupType === 'Special' && types.has('Fairy') && movePool.includes('moonblast'))\n\t\t\t)};\n\t\tcase 'hypervoice':\n\t\t\treturn {cull: moves.has('blizzard')};\n\t\tcase 'judgment':\n\t\t\treturn {cull: counter.setupType !== 'Special' && counter.get('stab') > 1};\n\t\tcase 'quickattack':\n\t\t\treturn {cull: (\n\t\t\t\t!!counter.get('speedsetup') ||\n\t\t\t\t(types.has('Rock') && !!counter.get('Status')) ||\n\t\t\t\tmoves.has('feint') ||\n\t\t\t\t(types.has('Normal') && !counter.get('stab'))\n\t\t\t)};\n\t\tcase 'weatherball':\n\t\t\treturn {cull: !moves.has('raindance') && !moves.has('sunnyday')};\n\t\tcase 'poisonjab':\n\t\t\treturn {cull: moves.has('gunkshot')};\n\t\tcase 'acidspray': case 'sludgewave':\n\t\t\treturn {cull: moves.has('poisonjab') || moves.has('sludgebomb')};\n\t\tcase 'psychic':\n\t\t\treturn {cull: moves.has('psyshock')};\n\t\tcase 'psychocut': case 'zenheadbutt':\n\t\t\treturn {cull: (\n\t\t\t\t((moves.has('psychic') || moves.has('psyshock')) && counter.setupType !== 'Physical') ||\n\t\t\t\t(abilities.has('Contrary') && !counter.setupType && !!counter.get('physicalpool'))\n\t\t\t)};\n\t\tcase 'psyshock':\n\t\t\tconst psychic = movePool.indexOf('psychic');\n\t\t\tif (psychic >= 0) this.fastPop(movePool, psychic);\n\t\t\treturn {cull: false};\n\t\tcase 'headsmash':\n\t\t\treturn {cull: moves.has('stoneedge') || moves.has('rockslide')};\n\t\tcase 'stoneedge':\n\t\t\treturn {cull: moves.has('rockslide') || (species.id === 'machamp' && !moves.has('dynamicpunch'))};\n\t\tcase 'bulletpunch':\n\t\t\treturn {cull: types.has('Steel') && counter.get('stab') < 2 && !abilities.has('Technician')};\n\t\tcase 'flashcannon':\n\t\t\treturn {cull: (moves.has('ironhead') || moves.has('meteormash')) && counter.setupType !== 'Special'};\n\t\tcase 'hydropump':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('liquidation') ||\n\t\t\t\tmoves.has('waterfall') || (\n\t\t\t\t\tmoves.has('scald') &&\n\t\t\t\t\t((counter.get('Special') < 4 && !moves.has('uturn')) || (species.types.length > 1 && counter.get('stab') < 3))\n\t\t\t\t)\n\t\t\t)};\n\t\tcase 'muddywater':\n\t\t\treturn {cull: moves.has('scald') || moves.has('hydropump')};\n\t\tcase 'originpulse': case 'surf':\n\t\t\treturn {cull: moves.has('hydropump') || moves.has('scald')};\n\t\tcase 'scald':\n\t\t\treturn {cull: ['liquidation', 'waterfall', 'waterpulse'].some(m => moves.has(m))};\n\n\t\t// Status:\n\t\tcase 'electroweb': case 'stunspore': case 'thunderwave':\n\t\t\treturn {cull: (\n\t\t\t\t!!counter.setupType ||\n\t\t\t\t!!counter.get('speedsetup') ||\n\t\t\t\t['discharge', 'spore', 'toxic', 'trickroom', 'yawn'].some(m => moves.has(m))\n\t\t\t)};\n\t\tcase 'glare': case 'headbutt':\n\t\t\treturn {cull: moves.has('bodyslam') || !moves.has('glare')};\n\t\tcase 'toxic':\n\t\t\tconst otherStatus = ['hypnosis', 'sleeppowder', 'toxicspikes', 'willowisp', 'yawn'].some(m => moves.has(m));\n\t\t\treturn {cull: otherStatus || !!counter.setupType || moves.has('flamecharge') || moves.has('raindance')};\n\t\tcase 'raindance':\n\t\t\treturn {cull: (\n\t\t\t\tcounter.get('Physical') + counter.get('Special') < 2 ||\n\t\t\t\tmoves.has('rest') ||\n\t\t\t\t(!types.has('Water') && !counter.get('Water'))\n\t\t\t)};\n\t\tcase 'sunnyday':\n\t\t\tconst cull = (\n\t\t\t\tcounter.get('Physical') + counter.get('Special') < 2 ||\n\t\t\t\t(!abilities.has('Chlorophyll') && !abilities.has('Flower Gift') && !moves.has('solarbeam'))\n\t\t\t);\n\n\t\t\tif (cull && movePool.length > 1) {\n\t\t\t\tconst solarbeam = movePool.indexOf('solarbeam');\n\t\t\t\tif (solarbeam >= 0) this.fastPop(movePool, solarbeam);\n\t\t\t\tif (movePool.length > 1) {\n\t\t\t\t\tconst weatherball = movePool.indexOf('weatherball');\n\t\t\t\t\tif (weatherball >= 0) this.fastPop(movePool, weatherball);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {cull};\n\t\tcase 'painsplit': case 'recover': case 'roost': case 'synthesis':\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('leechseed') || moves.has('rest') ||\n\t\t\t\t(moves.has('wish') && (moves.has('protect') || movePool.includes('protect')))\n\t\t\t)};\n\t\tcase 'substitute':\n\t\t\tconst moveBasedCull = ['copycat', 'dragondance', 'shiftgear'].some(m => movePool.includes(m));\n\t\t\treturn {cull: (\n\t\t\t\tmoves.has('dracometeor') ||\n\t\t\t\t(moves.has('leafstorm') && !abilities.has('Contrary')) ||\n\t\t\t\t['encore', 'pursuit', 'rest', 'taunt', 'uturn', 'voltswitch', 'whirlwind'].some(m => moves.has(m)) ||\n\t\t\t\tmoveBasedCull\n\t\t\t)};\n\t\tcase 'powersplit':\n\t\t\treturn {cull: moves.has('guardsplit')};\n\t\tcase 'wideguard':\n\t\t\treturn {cull: moves.has('protect')};\n\t\tcase 'bravebird':\n\t\t\t// Hurricane > Brave Bird in the rain\n\t\t\treturn {cull: (moves.has('raindance') || abilities.has('Drizzle')) && movePool.includes('hurricane')};\n\t\t}\n\t\treturn {cull: false};\n\t}\n\n\tshouldCullAbility(\n\t\tability: string,\n\t\ttypes: Set,\n\t\tmoves: Set,\n\t\tabilities: Set,\n\t\tcounter: MoveCounter,\n\t\tmovePool: string[],\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t): boolean {\n\t\tswitch (ability) {\n\t\tcase 'Battle Bond': case 'Dazzling': case 'Flare Boost': case 'Hyper Cutter':\n\t\tcase 'Ice Body': case 'Innards Out': case 'Moody': case 'Steadfast': case 'Magician':\n\t\t\treturn true;\n\t\tcase 'Aerilate': case 'Galvanize': case 'Pixilate': case 'Refrigerate':\n\t\t\treturn !counter.get('Normal');\n\t\tcase 'Analytic': case 'Download':\n\t\t\treturn species.nfe;\n\t\tcase 'Battle Armor': case 'Sturdy':\n\t\t\treturn (!!counter.get('recoil') && !counter.get('recovery'));\n\t\tcase 'Chlorophyll':\n\t\t\treturn (\n\t\t\t\tspecies.baseStats.spe > 100 ||\n\t\t\t\tabilities.has('Harvest') ||\n\t\t\t\t(!moves.has('sunnyday') && !teamDetails.sun)\n\t\t\t);\n\t\tcase 'Competitive':\n\t\t\treturn (!counter.get('Special') || moves.has('sleeptalk') && moves.has('rest'));\n\t\tcase 'Compound Eyes': case 'No Guard':\n\t\t\treturn !counter.get('inaccurate');\n\t\tcase 'Contrary': case 'Iron Fist': case 'Skill Link': case 'Strong Jaw':\n\t\t\treturn !counter.get(toID(ability));\n\t\tcase 'Defiant': case 'Justified': case 'Moxie':\n\t\t\treturn !counter.get('Physical') || moves.has('dragontail');\n\t\tcase 'Flash Fire':\n\t\t\treturn abilities.has('Drought');\n\t\tcase 'Gluttony':\n\t\t\treturn !moves.has('bellydrum');\n\t\tcase 'Harvest':\n\t\t\treturn abilities.has('Frisk');\n\t\tcase 'Hustle':\n\t\t\treturn counter.get('Physical') < 2;\n\t\tcase 'Hydration': case 'Rain Dish': case 'Swift Swim':\n\t\t\treturn (\n\t\t\t\tspecies.baseStats.spe > 100 || !moves.has('raindance') && !teamDetails.rain ||\n\t\t\t\t!moves.has('raindance') && ['Rock Head', 'Water Absorb'].some(abil => abilities.has(abil))\n\t\t\t);\n\t\tcase 'Slush Rush': case 'Snow Cloak':\n\t\t\treturn !teamDetails.hail;\n\t\tcase 'Immunity': case 'Snow Warning':\n\t\t\treturn (moves.has('facade') || moves.has('hypervoice'));\n\t\tcase 'Intimidate':\n\t\t\treturn (moves.has('bodyslam') || moves.has('rest') || abilities.has('Reckless') && counter.get('recoil') > 1);\n\t\tcase 'Lightning Rod':\n\t\t\treturn (\n\t\t\t\tspecies.types.includes('Ground') ||\n\t\t\t\t(!!teamDetails.rain || moves.has('raindance')) && abilities.has('Swift Swim')\n\t\t\t);\n\t\tcase 'Limber':\n\t\t\treturn species.types.includes('Electric');\n\t\tcase 'Liquid Voice':\n\t\t\treturn !counter.get('sound');\n\t\tcase 'Magic Guard': case 'Speed Boost':\n\t\t\treturn (abilities.has('Tinted Lens') && (!counter.get('Status') || moves.has('uturn')));\n\t\tcase 'Magnet Pull':\n\t\t\treturn (!!counter.get('Normal') || !types.has('Electric') && !moves.has('earthpower'));\n\t\tcase 'Mold Breaker':\n\t\t\treturn (\n\t\t\t\tmoves.has('acrobatics') || moves.has('sleeptalk') ||\n\t\t\t\tabilities.has('Adaptability') || abilities.has('Iron Fist') ||\n\t\t\t\t(abilities.has('Sheer Force') && !!counter.get('sheerforce'))\n\t\t\t);\n\t\tcase 'Overgrow':\n\t\t\treturn !counter.get('Grass');\n\t\tcase 'Poison Heal':\n\t\t\treturn (abilities.has('Technician') && !!counter.get('technician'));\n\t\tcase 'Power Construct':\n\t\t\treturn species.forme === '10%';\n\t\tcase 'Prankster':\n\t\t\treturn !counter.get('Status');\n\t\tcase 'Pressure': case 'Synchronize':\n\t\t\treturn (counter.get('Status') < 2 || !!counter.get('recoil') || !!species.isMega);\n\t\tcase 'Regenerator':\n\t\t\treturn abilities.has('Magic Guard');\n\t\tcase 'Quick Feet':\n\t\t\treturn moves.has('bellydrum');\n\t\tcase 'Reckless': case 'Rock Head':\n\t\t\treturn (!counter.get('recoil') || !!species.isMega);\n\t\tcase 'Sand Force': case 'Sand Rush': case 'Sand Veil':\n\t\t\treturn !teamDetails.sand;\n\t\tcase 'Scrappy':\n\t\t\treturn !species.types.includes('Normal');\n\t\tcase 'Serene Grace':\n\t\t\treturn (!counter.get('serenegrace') || species.name === 'Blissey');\n\t\tcase 'Sheer Force':\n\t\t\treturn (!counter.get('sheerforce') || moves.has('doubleedge') || abilities.has('Guts') || !!species.isMega);\n\t\tcase 'Simple':\n\t\t\treturn (!counter.setupType && !moves.has('flamecharge'));\n\t\tcase 'Solar Power':\n\t\t\treturn (!counter.get('Special') || abilities.has('Harvest') || !teamDetails.sun || !!species.isMega);\n\t\tcase 'Swarm':\n\t\t\treturn (!counter.get('Bug') || !!species.isMega);\n\t\tcase 'Sweet Veil':\n\t\t\treturn types.has('Grass');\n\t\tcase 'Technician':\n\t\t\treturn (!counter.get('technician') || moves.has('tailslap') || !!species.isMega);\n\t\tcase 'Tinted Lens':\n\t\t\treturn (\n\t\t\t\tmoves.has('protect') || !!counter.get('damage') ||\n\t\t\t\t(counter.get('Status') > 2 && !counter.setupType) ||\n\t\t\t\tabilities.has('Prankster') ||\n\t\t\t\t(abilities.has('Magic Guard') && !!counter.get('Status'))\n\t\t\t);\n\t\tcase 'Torrent':\n\t\t\treturn (!counter.get('Water') || !!species.isMega);\n\t\tcase 'Unaware':\n\t\t\treturn (!!counter.setupType || abilities.has('Magic Guard'));\n\t\tcase 'Unburden':\n\t\t\treturn (!!species.isMega || abilities.has('Prankster') || !counter.setupType && !moves.has('acrobatics'));\n\t\tcase 'Water Absorb':\n\t\t\treturn moves.has('raindance') || ['Drizzle', 'Unaware', 'Volt Absorb'].some(abil => abilities.has(abil));\n\t\tcase 'Weak Armor':\n\t\t\treturn counter.setupType !== 'Physical';\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tgetAbility(\n\t\ttypes: Set,\n\t\tmoves: Set,\n\t\tabilities: Set,\n\t\tcounter: MoveCounter,\n\t\tmovePool: string[],\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species\n\t): string {\n\t\tif (species.battleOnly && !species.requiredAbility) {\n\t\t\tabilities = new Set(Object.values(this.dex.species.get(species.battleOnly as string).abilities));\n\t\t}\n\t\tconst abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a));\n\t\tUtils.sortBy(abilityData, abil => -abil.rating);\n\n\t\tif (abilityData.length <= 1) return abilityData[0].name;\n\n\t\t// Hard-code abilities here\n\t\tif (\n\t\t\tabilities.has('Guts') &&\n\t\t\t!abilities.has('Quick Feet') &&\n\t\t\t(moves.has('facade') || (moves.has('sleeptalk') && moves.has('rest')))\n\t\t) return 'Guts';\n\t\tif (abilities.has('Intimidate')) return 'Intimidate';\n\t\tif (abilities.has('Guts')) return 'Guts';\n\t\tif (abilities.has('Storm Drain')) return 'Storm Drain';\n\t\tif (abilities.has('Harvest')) return 'Harvest';\n\t\tif (abilities.has('Unburden') && !abilities.has('Prankster') && !species.isMega) return 'Unburden';\n\t\tif (species.name === 'Ambipom' && !counter.get('technician')) {\n\t\t\t// If it doesn't qualify for Technician, Skill Link is useless on it\n\t\t\treturn 'Pickup';\n\t\t}\n\t\tif (species.name === 'Raticate-Alola') return 'Hustle';\n\t\tif (species.baseSpecies === 'Altaria') return 'Natural Cure';\n\n\t\tlet abilityAllowed: Ability[] = [];\n\t\t// Obtain a list of abilities that are allowed (not culled)\n\t\tfor (const ability of abilityData) {\n\t\t\tif (ability.rating >= 1 && !this.shouldCullAbility(\n\t\t\t\tability.name, types, moves, abilities, counter, movePool, teamDetails, species\n\t\t\t)) {\n\t\t\t\tabilityAllowed.push(ability);\n\t\t\t}\n\t\t}\n\n\t\t// If all abilities are rejected, re-allow all abilities\n\t\tif (!abilityAllowed.length) {\n\t\t\tfor (const ability of abilityData) {\n\t\t\t\tif (ability.rating > 0) abilityAllowed.push(ability);\n\t\t\t}\n\t\t\tif (!abilityAllowed.length) abilityAllowed = abilityData;\n\t\t}\n\n\t\tif (abilityAllowed.length === 1) return abilityAllowed[0].name;\n\t\t// Sort abilities by rating with an element of randomness\n\t\t// All three abilities can be chosen\n\t\tif (abilityAllowed[2] && abilityAllowed[0].rating - 0.5 <= abilityAllowed[2].rating) {\n\t\t\tif (abilityAllowed[1].rating <= abilityAllowed[2].rating) {\n\t\t\t\tif (this.randomChance(1, 2)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]];\n\t\t\t} else {\n\t\t\t\tif (this.randomChance(1, 3)) [abilityAllowed[1], abilityAllowed[2]] = [abilityAllowed[2], abilityAllowed[1]];\n\t\t\t}\n\t\t\tif (abilityAllowed[0].rating <= abilityAllowed[1].rating) {\n\t\t\t\tif (this.randomChance(2, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];\n\t\t\t} else {\n\t\t\t\tif (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];\n\t\t\t}\n\t\t} else {\n\t\t\t// Third ability cannot be chosen\n\t\t\tif (abilityAllowed[0].rating <= abilityAllowed[1].rating) {\n\t\t\t\tif (this.randomChance(1, 2)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];\n\t\t\t} else if (abilityAllowed[0].rating - 0.5 <= abilityAllowed[1].rating) {\n\t\t\t\tif (this.randomChance(1, 3)) [abilityAllowed[0], abilityAllowed[1]] = [abilityAllowed[1], abilityAllowed[0]];\n\t\t\t}\n\t\t}\n\n\t\t// After sorting, choose the first ability\n\t\treturn abilityAllowed[0].name;\n\t}\n\n\t/** Item generation specific to Random Doubles */\n\tgetDoublesItem(\n\t\tability: string,\n\t\ttypes: Set,\n\t\tmoves: Set,\n\t\tabilities: Set,\n\t\tcounter: MoveCounter,\n\t\tteamDetails: RandomTeamsTypes.TeamDetails,\n\t\tspecies: Species,\n\t): string | undefined {\n\t\tconst defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;\n\t\tif (species.requiredItems) {\n\t\t\tif (\n\t\t\t\tspecies.baseSpecies === 'Arceus' &&\n\t\t\t\t(moves.has('judgment') || !counter.get(species.types[0]) || teamDetails.zMove)\n\t\t\t) {\n\t\t\t\t// Judgment doesn't change type with Z-Crystals\n\t\t\t\treturn species.requiredItems[0];\n\t\t\t}\n\t\t\treturn this.sample(species.requiredItems);\n\t\t}\n\n\t\t// First, the extra high-priority items\n\t\tif (species.name === 'Dedenne') return moves.has('substitute') ? 'Petaya Berry' : 'Sitrus Berry';\n\t\tif (species.name === 'Deoxys-Attack') return 'Life Orb';\n\t\tif (species.name === 'Farfetch\\u2019d') return 'Stick';\n\t\tif (species.name === 'Genesect' && moves.has('technoblast')) return 'Douse Drive';\n\t\tif (species.baseSpecies === 'Marowak') return 'Thick Club';\n\t\tif (species.name === 'Pikachu') return 'Light Ball';\n\t\tif (species.name === 'Shedinja' || species.name === 'Smeargle') return 'Focus Sash';\n\t\tif (species.name === 'Unfezant' && counter.get('Physical') >= 2) return 'Scope Lens';\n\t\tif (species.name === 'Unown') return 'Choice Specs';\n\t\tif (species.name === 'Wobbuffet') return 'Custap Berry';\n\t\tif (ability === 'Harvest' || ability === 'Emergency Exit' && !!counter.get('Status')) return 'Sitrus Berry';\n\t\tif (ability === 'Imposter') return 'Choice Scarf';\n\t\tif (ability === 'Poison Heal') return 'Toxic Orb';\n\t\tif (species.nfe) return (ability === 'Technician' && counter.get('Physical') >= 4) ? 'Choice Band' : 'Eviolite';\n\t\tif (moves.has('switcheroo') || moves.has('trick')) {\n\t\t\tif (species.baseStats.spe >= 60 && species.baseStats.spe <= 108) {\n\t\t\t\treturn 'Choice Scarf';\n\t\t\t} else {\n\t\t\t\treturn (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';\n\t\t\t}\n\t\t}\n\t\tif (moves.has('bellydrum')) {\n\t\t\tif (ability === 'Gluttony') {\n\t\t\t\treturn `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`;\n\t\t\t} else if (species.baseStats.spe <= 50 && !teamDetails.zMove && this.randomChance(1, 2)) {\n\t\t\t\treturn 'Normalium Z';\n\t\t\t} else {\n\t\t\t\treturn 'Sitrus Berry';\n\t\t\t}\n\t\t}\n\t\tif (moves.has('copycat') && counter.get('Physical') >= 3) return 'Choice Band';\n\t\tif (moves.has('geomancy') || moves.has('skyattack')) return 'Power Herb';\n\t\tif (moves.has('shellsmash')) {\n\t\t\treturn (ability === 'Solid Rock' && !!counter.get('priority')) ? 'Weakness Policy' : 'White Herb';\n\t\t}\n\t\tif ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {\n\t\t\treturn (types.has('Fire') || ability === 'Quick Feet' || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb';\n\t\t}\n\t\tif (ability === 'Magic Guard' && counter.damagingMoves.size > 1) {\n\t\t\treturn moves.has('counter') ? 'Focus Sash' : 'Life Orb';\n\t\t}\n\t\tif (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb';\n\t\tif (ability === 'Unburden') return moves.has('fakeout') ? 'Normal Gem' : 'Sitrus Berry';\n\t\tif (moves.has('acrobatics')) return '';\n\t\tif (moves.has('electricterrain') || ability === 'Electric Surge' && moves.has('thunderbolt')) return 'Electrium Z';\n\t\tif (\n\t\t\tmoves.has('happyhour') ||\n\t\t\tmoves.has('holdhands') ||\n\t\t\t(moves.has('encore') && ability === 'Contrary')\n\t\t) return 'Normalium Z';\n\t\tif (moves.has('raindance')) {\n\t\t\tif (species.baseSpecies === 'Castform' && !teamDetails.zMove) {\n\t\t\t\treturn 'Waterium Z';\n\t\t\t} else {\n\t\t\t\treturn (ability === 'Forecast') ? 'Damp Rock' : 'Life Orb';\n\t\t\t}\n\t\t}\n\t\tif (moves.has('sunnyday')) {\n\t\t\tif ((species.baseSpecies === 'Castform' || species.baseSpecies === 'Cherrim') && !teamDetails.zMove) {\n\t\t\t\treturn 'Firium Z';\n\t\t\t} else {\n\t\t\t\treturn (ability === 'Forecast') ? 'Heat Rock' : 'Life Orb';\n\t\t\t}\n\t\t}\n\n\t\tif (moves.has('solarbeam') && ability !== 'Drought' && !moves.has('sunnyday') && !teamDetails.sun) {\n\t\t\treturn !teamDetails.zMove ? 'Grassium Z' : 'Power Herb';\n\t\t}\n\n\t\tif (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';\n\t\tif (\n\t\t\tmoves.has('rest') && !moves.has('sleeptalk') &&\n\t\t\tability !== 'Natural Cure' && ability !== 'Shed Skin' && ability !== 'Shadow Tag'\n\t\t) {\n\t\t\treturn 'Chesto Berry';\n\t\t}\n\n\t\t// Z-Moves\n\t\tif (!teamDetails.zMove) {\n\t\t\tif (species.name === 'Decidueye' && moves.has('spiritshackle') && counter.setupType) {\n\t\t\t\treturn 'Decidium Z';\n\t\t\t}\n\t\t\tif (species.name === 'Kommo-o') return moves.has('clangingscales') ? 'Kommonium Z' : 'Dragonium Z';\n\t\t\tif (species.baseSpecies === 'Lycanroc' && moves.has('stoneedge') && counter.setupType) {\n\t\t\t\treturn 'Lycanium Z';\n\t\t\t}\n\t\t\tif (species.name === 'Marshadow' && moves.has('spectralthief') && counter.setupType) {\n\t\t\t\treturn 'Marshadium Z';\n\t\t\t}\n\t\t\tif (species.name === 'Necrozma-Dusk-Mane' || species.name === 'Necrozma-Dawn-Wings') {\n\t\t\t\tif (moves.has('autotomize') && moves.has('sunsteelstrike')) {\n\t\t\t\t\treturn 'Solganium Z';\n\t\t\t\t} else if (moves.has('trickroom') && moves.has('moongeistbeam')) {\n\t\t\t\t\treturn 'Lunalium Z';\n\t\t\t\t} else {\n\t\t\t\t\treturn 'Ultranecrozium Z';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (species.name === 'Mimikyu' && moves.has('playrough') && counter.setupType) return 'Mimikium Z';\n\t\t\tif (species.name === 'Raichu-Alola' && moves.has('thunderbolt') && counter.setupType) return 'Aloraichium Z';\n\t\t\tif (moves.has('bugbuzz') && counter.setupType && species.baseStats.spa > 100) return 'Buginium Z';\n\t\t\tif (\n\t\t\t\t(moves.has('darkpulse') && ability === 'Fur Coat' && counter.setupType) ||\n\t\t\t\t(moves.has('suckerpunch') && ability === 'Moxie' && counter.get('Dark') < 2)\n\t\t\t) {\n\t\t\t\treturn 'Darkinium Z';\n\t\t\t}\n\t\t\tif (moves.has('outrage') && counter.setupType && !moves.has('fly')) return 'Dragonium Z';\n\t\t\tif (moves.has('fleurcannon') && !!counter.get('speedsetup')) return 'Fairium Z';\n\t\t\tif (\n\t\t\t\t(moves.has('focusblast') && types.has('Fighting') && counter.setupType) ||\n\t\t\t\t(moves.has('reversal') && moves.has('substitute'))\n\t\t\t) {\n\t\t\t\treturn 'Fightinium Z';\n\t\t\t}\n\t\t\tif (\n\t\t\t\tmoves.has('fly') ||\n\t\t\t\t(moves.has('hurricane') && species.baseStats.spa >= 125 && (!!counter.get('Status') || moves.has('superpower'))) ||\n\t\t\t\t((moves.has('bounce') || moves.has('bravebird')) && counter.setupType)\n\t\t\t) {\n\t\t\t\treturn 'Flyinium Z';\n\t\t\t}\n\t\t\tif (moves.has('shadowball') && counter.setupType && ability === 'Beast Boost') return 'Ghostium Z';\n\t\t\tif (\n\t\t\t\tmoves.has('sleeppowder') && types.has('Grass') &&\n\t\t\t\tcounter.setupType && species.baseStats.spe <= 70\n\t\t\t) {\n\t\t\t\treturn 'Grassium Z';\n\t\t\t}\n\t\t\tif (moves.has('magmastorm')) return 'Firium Z';\n\t\t\tif (moves.has('dig')) return 'Groundium Z';\n\t\t\tif (moves.has('photongeyser') && counter.setupType) return 'Psychium Z';\n\t\t\tif (moves.has('stoneedge') && types.has('Rock') && moves.has('swordsdance')) return 'Rockium Z';\n\t\t\tif (moves.has('hydropump') && ability === 'Battle Bond' && moves.has('uturn')) return 'Waterium Z';\n\t\t\tif ((moves.has('hail') || (moves.has('blizzard') && ability !== 'Snow Warning'))) return 'Icium Z';\n\t\t}\n\n\t\tif (\n\t\t\t(ability === 'Speed Boost' || ability === 'Stance Change' || species.name === 'Pheromosa') &&\n\t\t\tcounter.get('Physical') + counter.get('Special') > 2 &&\n\t\t\t!moves.has('uturn')\n\t\t) {\n\t\t\treturn 'Life Orb';\n\t\t}\n\n\t\tif (moves.has('uturn') && counter.get('Physical') === 4 && !moves.has('fakeout')) {\n\t\t\treturn (\n\t\t\t\tspecies.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&\n\t\t\t\t!counter.get('priority') && this.randomChance(1, 2)\n\t\t\t) ? 'Choice Scarf' : 'Choice Band';\n\t\t}\n\t\tif (counter.get('Special') === 4 && (moves.has('waterspout') || moves.has('eruption'))) {\n\t\t\treturn 'Choice Scarf';\n\t\t}\n\n\t\tif (['endeavor', 'flail', 'reversal'].some(m => moves.has(m)) && ability !== 'Sturdy') {\n\t\t\treturn (ability === 'Defeatist') ? 'Expert Belt' : 'Focus Sash';\n\t\t}\n\t\tif (moves.has('outrage') && counter.setupType) return 'Lum Berry';\n\t\tif (\n\t\t\tcounter.damagingMoves.size >= 3 &&\n\t\t\tspecies.baseStats.spe >= 70 &&\n\t\t\tability !== 'Multiscale' && ability !== 'Sturdy' && [\n\t\t\t\t'acidspray', 'electroweb', 'fakeout', 'feint', 'flamecharge', 'icywind',\n\t\t\t\t'incinerate', 'naturesmadness', 'rapidspin', 'snarl', 'suckerpunch', 'uturn',\n\t\t\t].every(m => !moves.has(m))\n\t\t) {\n\t\t\treturn defensiveStatTotal >= 275 ? 'Sitrus Berry' : 'Life Orb';\n\t\t}\n\n\t\tif (moves.has('substitute')) return counter.damagingMoves.size > 2 && !!counter.get('drain') ? 'Life Orb' : 'Leftovers';\n\t\tif ((ability === 'Iron Barbs' || ability === 'Rough Skin') && this.randomChance(1, 2)) return 'Rocky Helmet';\n\t\tif (\n\t\t\tcounter.get('Physical') + counter.get('Special') >= 4 &&\n\t\t\tspecies.baseStats.spd >= 50 && defensiveStatTotal >= 235\n\t\t) {\n\t\t\treturn 'Assault Vest';\n\t\t}\n\t\tif (species.name === 'Palkia' && (moves.has('dracometeor') || moves.has('spacialrend')) && moves.has('hydropump')) {\n\t\t\treturn 'Lustrous Orb';\n\t\t}\n\t\tif (species.types.includes('Normal') && moves.has('fakeout') && counter.get('Normal') >= 2) return 'Silk Scarf';\n\t\tif (counter.damagingMoves.size >= 4) {\n\t\t\treturn (counter.get('Dragon') || moves.has('suckerpunch') || counter.get('Normal')) ? 'Life Orb' : 'Expert Belt';\n\t\t}\n\t\tif (counter.damagingMoves.size >= 3 && !!counter.get('speedsetup') && defensiveStatTotal >= 300) {\n\t\t\treturn 'Weakness Policy';\n\t\t}\n\n\t\t// This is the \"REALLY can't think of a good item\" cutoff\n\t\tif (moves.has('stickyweb') && ability === 'Sturdy') return 'Mental Herb';\n\t\tif (ability === 'Serene Grace' && moves.has('airslash') && species.baseStats.spe > 100) return 'Metronome';\n\t\tif (ability === 'Sturdy' && moves.has('explosion') && !counter.get('speedsetup')) return 'Custap Berry';\n\t\tif (ability === 'Super Luck') return 'Scope Lens';\n\t}\n\n\trandomSet(\n\t\tspecies: string | Species,\n\t\tteamDetails: RandomTeamsTypes.TeamDetails = {},\n\t\tisLead = false,\n\t\tisDoubles = true,\n\t): RandomTeamsTypes.RandomSet {\n\t\tspecies = this.dex.species.get(species);\n\t\tlet forme = species.name;\n\n\t\tif (typeof species.battleOnly === 'string') {\n\t\t\t// Only change the forme. The species has custom moves, and may have different typing and requirements.\n\t\t\tforme = species.battleOnly;\n\t\t}\n\t\tif (species.cosmeticFormes) {\n\t\t\tforme = this.sample([species.name].concat(species.cosmeticFormes));\n\t\t}\n\n\t\tconst data = this.randomDoublesData[species.id];\n\n\t\tconst movePool: string[] = [...(data.moves || this.dex.species.getMovePool(species.id))];\n\t\tif (this.format.gameType === 'multi') {\n\t\t\t// Random Multi Battle uses doubles move pools, but Ally Switch fails in multi battles\n\t\t\tconst allySwitch = movePool.indexOf('allyswitch');\n\t\t\tif (allySwitch > -1) {\n\t\t\t\tif (movePool.length > this.maxMoveCount) {\n\t\t\t\t\tthis.fastPop(movePool, allySwitch);\n\t\t\t\t} else {\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\n\t\t\t\t\tmovePool[allySwitch] = 'sleeptalk';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst rejectedPool = [];\n\t\tconst moves = new Set();\n\t\tlet ability = '';\n\n\t\tconst evs = {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85};\n\t\tconst ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};\n\n\t\tconst types = new Set(species.types);\n\t\tconst abilities = new Set();\n\t\tfor (const abilityName of Object.values(species.abilities)) {\n\t\t\tif (abilityName === species.abilities.S || (species.unreleasedHidden && abilityName === species.abilities.H)) continue;\n\t\t\tabilities.add(abilityName);\n\t\t}\n\n\t\tlet availableHP = 0;\n\t\tfor (const moveid of movePool) {\n\t\t\tif (moveid.startsWith('hiddenpower')) availableHP++;\n\t\t}\n\n\t\t// These moves can be used even if we aren't setting up to use them:\n\t\tconst SetupException = ['closecombat', 'diamondstorm', 'extremespeed', 'superpower', 'clangingscales'];\n\n\t\tlet counter: MoveCounter;\n\t\t// We use a special variable to track Hidden Power\n\t\t// so that we can check for all Hidden Powers at once\n\t\tlet hasHiddenPower = false;\n\n\t\tdo {\n\t\t\t// Choose next 4 moves from learnset/viable moves and add them to moves list:\n\t\t\twhile (moves.size < this.maxMoveCount && movePool.length) {\n\t\t\t\tconst moveid = this.sampleNoReplace(movePool);\n\t\t\t\tif (moveid.startsWith('hiddenpower')) {\n\t\t\t\t\tavailableHP--;\n\t\t\t\t\tif (hasHiddenPower) continue;\n\t\t\t\t\thasHiddenPower = true;\n\t\t\t\t}\n\t\t\t\tmoves.add(moveid);\n\t\t\t}\n\t\t\twhile (moves.size < this.maxMoveCount && rejectedPool.length) {\n\t\t\t\tconst moveid = this.sampleNoReplace(rejectedPool);\n\t\t\t\tif (moveid.startsWith('hiddenpower')) {\n\t\t\t\t\tif (hasHiddenPower) continue;\n\t\t\t\t\thasHiddenPower = true;\n\t\t\t\t}\n\t\t\t\tmoves.add(moveid);\n\t\t\t}\n\n\t\t\tcounter = this.queryMoves(moves, species.types, abilities, movePool);\n\t\t\tconst runEnforcementChecker = (checkerName: string) => {\n\t\t\t\tif (!this.moveEnforcementCheckers[checkerName]) return false;\n\t\t\t\treturn this.moveEnforcementCheckers[checkerName](\n\t\t\t\t\tmovePool, moves, abilities, types, counter, species as Species, teamDetails\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t// Iterate through the moves again, this time to cull them:\n\t\t\tfor (const moveid of moves) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\n\t\t\t\tlet {cull, isSetup} = this.shouldCullMove(\n\t\t\t\t\tmove, types, moves, abilities, counter, movePool, teamDetails,\n\t\t\t\t\tspecies, isLead\n\t\t\t\t);\n\n\t\t\t\t// This move doesn't satisfy our setup requirements:\n\t\t\t\tif (\n\t\t\t\t\t(move.category === 'Physical' && counter.setupType === 'Special') ||\n\t\t\t\t\t(move.category === 'Special' && counter.setupType === 'Physical')\n\t\t\t\t) {\n\t\t\t\t\t// Reject STABs last in case the setup type changes later on\n\t\t\t\t\tconst stabs = counter.get(species.types[0]) + (counter.get(species.types[1]) || 0);\n\t\t\t\t\tif (\n\t\t\t\t\t\t!SetupException.includes(moveid) &&\n\t\t\t\t\t\t(!types.has(move.type) || stabs > 1 || counter.get(move.category) < 2)\n\t\t\t\t\t) cull = true;\n\t\t\t\t}\n\t\t\t\t// Hidden Power isn't good enough\n\t\t\t\tif (\n\t\t\t\t\tcounter.setupType === 'Special' &&\n\t\t\t\t\tmoveid === 'hiddenpower' &&\n\t\t\t\t\tspecies.types.length > 1 &&\n\t\t\t\t\tcounter.get('Special') <= 2 &&\n\t\t\t\t\t!types.has(move.type) &&\n\t\t\t\t\t!counter.get('Physical') &&\n\t\t\t\t\tcounter.get('specialpool')\n\t\t\t\t) {\n\t\t\t\t\tcull = true;\n\t\t\t\t}\n\n\t\t\t\t// Pokemon should have moves that benefit their Type/Ability/Weather, as well as moves required by its forme\n\t\t\t\tif (\n\t\t\t\t\t!cull &&\n\t\t\t\t\t!move.damage &&\n\t\t\t\t\t!isSetup &&\n\t\t\t\t\t!move.weather &&\n\t\t\t\t\t!move.stallingMove &&\n\t\t\t\t\t(\n\t\t\t\t\t\t!counter.setupType || counter.setupType === 'Mixed' ||\n\t\t\t\t\t\t(move.category !== counter.setupType && move.category !== 'Status') ||\n\t\t\t\t\t\t(counter.get(counter.setupType) + counter.get('Status') > 3 && !counter.get('hazards'))\n\t\t\t\t\t) && (\n\t\t\t\t\t\tmove.category === 'Status' ||\n\t\t\t\t\t\t!types.has(move.type) ||\n\t\t\t\t\t\t(move.basePower && move.basePower < 40 && !move.multihit)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t(!counter.get('stab') && !moves.has('nightshade') && !moves.has('seismictoss') && (\n\t\t\t\t\t\t\tspecies.types.length > 1 ||\n\t\t\t\t\t\t\t(species.types[0] !== 'Normal' && species.types[0] !== 'Psychic') ||\n\t\t\t\t\t\t\t!moves.has('icebeam') ||\n\t\t\t\t\t\t\tspecies.baseStats.spa >= species.baseStats.spd\n\t\t\t\t\t\t)) || (\n\t\t\t\t\t\t\tmoves.has('suckerpunch') && !abilities.has('Contrary') &&\n\t\t\t\t\t\t\tcounter.get('stab') < species.types.length && species.id !== 'honchkrow'\n\t\t\t\t\t\t) || (\n\t\t\t\t\t\t\t(['recover', 'roost', 'slackoff', 'softboiled'].some(m => movePool.includes(m))) &&\n\t\t\t\t\t\t\tcounter.get('Status') &&\n\t\t\t\t\t\t\t!counter.setupType &&\n\t\t\t\t\t\t\t['healingwish', 'switcheroo', 'trick', 'trickroom'].every(m => !moves.has(m))\n\t\t\t\t\t\t) || (\n\t\t\t\t\t\t\tmovePool.includes('milkdrink') ||\n\t\t\t\t\t\t\tmovePool.includes('shoreup') ||\n\t\t\t\t\t\t\t(movePool.includes('moonlight') && types.size < 2) ||\n\t\t\t\t\t\t\t(movePool.includes('stickyweb') && !counter.setupType && !teamDetails.stickyWeb) ||\n\t\t\t\t\t\t\t(movePool.includes('quiverdance') && ['defog', 'uturn', 'stickyweb'].every(m => !moves.has(m)) &&\n\t\t\t\t\t\t\tcounter.get('Special') < 4)\n\t\t\t\t\t\t) || (\n\t\t\t\t\t\t\tisLead &&\n\t\t\t\t\t\t\tmovePool.includes('stealthrock') &&\n\t\t\t\t\t\t\tcounter.get('Status') && !counter.setupType &&\n\t\t\t\t\t\t\t!counter.get('speedsetup') && !moves.has('substitute')\n\t\t\t\t\t\t) || (\n\t\t\t\t\t\t\tspecies.requiredMove && movePool.includes(toID(species.requiredMove))\n\t\t\t\t\t\t) || (\n\t\t\t\t\t\t\t!counter.get('Normal') &&\n\t\t\t\t\t\t\t(abilities.has('Aerilate') || abilities.has('Pixilate') || (abilities.has('Refrigerate') && !moves.has('blizzard')))\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcull = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const type of types) {\n\t\t\t\t\t\t\tif (runEnforcementChecker(type)) {\n\t\t\t\t\t\t\t\tcull = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const abil of abilities) {\n\t\t\t\t\t\t\tif (runEnforcementChecker(abil)) {\n\t\t\t\t\t\t\t\tcull = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Sleep Talk shouldn't be selected without Rest\n\t\t\t\tif (moveid === 'rest' && cull) {\n\t\t\t\t\tconst sleeptalk = movePool.indexOf('sleeptalk');\n\t\t\t\t\tif (sleeptalk >= 0) {\n\t\t\t\t\t\tif (movePool.length < 2) {\n\t\t\t\t\t\t\tcull = false;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.fastPop(movePool, sleeptalk);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove rejected moves from the move list\n\t\t\t\tconst moveIsHP = moveid.startsWith('hiddenpower');\n\t\t\t\tif (cull && (\n\t\t\t\t\tmovePool.length - availableHP ||\n\t\t\t\t\t(availableHP && (moveIsHP || !hasHiddenPower))\n\t\t\t\t)) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tmove.category !== 'Status' &&\n\t\t\t\t\t\t!move.damage &&\n\t\t\t\t\t\t!move.flags.charge &&\n\t\t\t\t\t\t(!moveIsHP || !availableHP)\n\t\t\t\t\t) {\n\t\t\t\t\t\trejectedPool.push(moveid);\n\t\t\t\t\t}\n\t\t\t\t\tif (moveIsHP) hasHiddenPower = false;\n\t\t\t\t\tmoves.delete(moveid);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (cull && rejectedPool.length) {\n\t\t\t\t\tif (moveIsHP) hasHiddenPower = false;\n\t\t\t\t\tmoves.delete(moveid);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} while (moves.size < this.maxMoveCount && (movePool.length || rejectedPool.length));\n\n\t\tconst battleOnly = species.battleOnly && !species.requiredAbility;\n\t\tconst baseSpecies: Species = battleOnly ? this.dex.species.get(species.battleOnly as string) : species;\n\n\t\tability = this.getAbility(types, moves, abilities, counter, movePool, teamDetails, species);\n\n\t\tif (species.name === 'Genesect' && moves.has('technoblast')) forme = 'Genesect-Douse';\n\n\t\tif (\n\t\t\t!moves.has('photongeyser') &&\n\t\t\t!teamDetails.zMove &&\n\t\t\t(species.name === 'Necrozma-Dusk-Mane' || species.name === 'Necrozma-Dawn-Wings')\n\t\t) {\n\t\t\tfor (const moveid of moves) {\n\t\t\t\tconst move = this.dex.moves.get(moveid);\n\t\t\t\tif (move.category === 'Status' || types.has(move.type)) continue;\n\t\t\t\tmoves.delete(moveid);\n\t\t\t\tmoves.add('photongeyser');\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet item = this.getDoublesItem(ability, types, moves, abilities, counter, teamDetails, species);\n\n\t\t// fallback\n\t\tif (item === undefined) item = 'Sitrus Berry';\n\t\t// For Trick / Switcheroo\n\t\tif (item === 'Leftovers' && types.has('Poison')) {\n\t\t\titem = 'Black Sludge';\n\t\t}\n\n\t\t// Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles\n\t\tif (species.baseSpecies === 'Basculin') {\n\t\t\tforme = 'Basculin' + this.sample(['', '-Blue-Striped']);\n\t\t}\n\t\tif (species.baseSpecies === 'Keldeo') {\n\t\t\tforme = 'Keldeo' + this.sample(['', '-Resolute']);\n\t\t}\n\t\tif (species.baseSpecies === 'Magearna') {\n\t\t\tforme = 'Magearna' + this.sample(['', '-Original']);\n\t\t}\n\n\t\tlet level: number;\n\t\tif (this.adjustLevel) {\n\t\t\tlevel = this.adjustLevel;\n\t\t} else {\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.\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\n\t\t\tconst baseStats = species.baseStats;\n\n\t\t\tlet bst = species.bst;\n\t\t\t// If Wishiwashi, use the school-forme's much higher stats\n\t\t\tif (species.baseSpecies === 'Wishiwashi') bst = this.dex.species.get('wishiwashischool').bst;\n\t\t\t// Adjust levels of mons based on abilities (Pure Power, Sheer Force, etc.) and also Eviolite\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.)\n\t\t\tconst speciesAbility = (baseSpecies === species ? ability : species.abilities[0]);\n\t\t\tif (speciesAbility === 'Huge Power' || speciesAbility === 'Pure Power') {\n\t\t\t\tbst += baseStats.atk;\n\t\t\t} else if (speciesAbility === 'Parental Bond') {\n\t\t\t\tbst += 0.25 * (counter.get('Physical') > counter.get('Special') ? baseStats.atk : baseStats.spa);\n\t\t\t} else if (speciesAbility === 'Protean') {\n\t\t\t\tbst += 0.3 * (counter.get('Physical') > counter.get('Special') ? baseStats.atk : baseStats.spa);\n\t\t\t} else if (speciesAbility === 'Fur Coat') {\n\t\t\t\tbst += baseStats.def;\n\t\t\t} else if (speciesAbility === 'Slow Start') {\n\t\t\t\tbst -= baseStats.atk / 2 + baseStats.spe / 2;\n\t\t\t} else if (speciesAbility === 'Truant') {\n\t\t\t\tbst *= 2 / 3;\n\t\t\t}\n\t\t\tif (item === 'Eviolite') {\n\t\t\t\tbst += 0.5 * (baseStats.def + baseStats.spd);\n\t\t\t} else if (item === 'Light Ball') {\n\t\t\t\tbst += baseStats.atk + baseStats.spa;\n\t\t\t}\n\t\t\tlevel = 70 + Math.floor(((600 - Utils.clampIntRange(bst, 300, 600)) / 10.34));\n\t\t}\n\n\t\t// Prepare optimal HP\n\t\tconst srWeakness = this.dex.getEffectiveness('Rock', species);\n\t\twhile (evs.hp > 1) {\n\t\t\tconst hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);\n\t\t\tif (moves.has('substitute') && moves.has('reversal')) {\n\t\t\t\t// Reversal users should be able to use four Substitutes\n\t\t\t\tif (hp % 4 > 0) break;\n\t\t\t} else if (moves.has('substitute') && (\n\t\t\t\titem === 'Petaya Berry' || item === 'Sitrus Berry' ||\n\t\t\t\t(ability === 'Power Construct' && item !== 'Leftovers')\n\t\t\t)) {\n\t\t\t\t// Three Substitutes should activate Petaya Berry for Dedenne\n\t\t\t\t// Two Substitutes should activate Sitrus Berry or Power Construct\n\t\t\t\tif (hp % 4 === 0) break;\n\t\t\t} else if (moves.has('bellydrum') && (item === 'Sitrus Berry' || ability === 'Gluttony')) {\n\t\t\t\t// Belly Drum should activate Sitrus Berry\n\t\t\t\tif (hp % 2 === 0) break;\n\t\t\t} else {\n\t\t\t\t// Maximize number of Stealth Rock switch-ins\n\t\t\t\tif (srWeakness <= 0 || hp % (4 / srWeakness) > 0) break;\n\t\t\t}\n\t\t\tevs.hp -= 4;\n\t\t}\n\n\t\t// Minimize confusion damage\n\t\tif (!counter.get('Physical') && !moves.has('copycat') && !moves.has('transform')) {\n\t\t\tevs.atk = 0;\n\t\t\tivs.atk = 0;\n\t\t}\n\n\t\t// Ensure Nihilego's Beast Boost gives it Special Attack boosts instead of Special Defense\n\t\tif (forme === 'Nihilego') evs.spd -= 32;\n\n\t\tif (ability === 'Beast Boost' && counter.get('Special') < 1) {\n\t\t\tevs.spa = 0;\n\t\t\tivs.spa = 0;\n\t\t}\n\n\t\t// Fix IVs for non-Bottle Cap-able sets\n\t\tif (hasHiddenPower && level < 100) {\n\t\t\tlet hpType;\n\t\t\tfor (const move of moves) {\n\t\t\t\tif (move.startsWith('hiddenpower')) hpType = move.substr(11);\n\t\t\t}\n\t\t\tif (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);\n\t\t\tconst HPivs = ivs.atk === 0 ? ZeroAttackHPIVs[hpType] : this.dex.types.get(hpType).HPivs;\n\t\t\tlet iv: StatID;\n\t\t\tfor (iv in HPivs) {\n\t\t\t\tivs[iv] = HPivs[iv]!;\n\t\t\t}\n\t\t}\n\n\t\tif (['gyroball', 'metalburst', 'trickroom'].some(m => moves.has(m))) {\n\t\t\tevs.spe = 0;\n\t\t\tivs.spe = (hasHiddenPower && level < 100) ? ivs.spe - 30 : 0;\n\t\t}\n\n\t\treturn {\n\t\t\tname: species.baseSpecies,\n\t\t\tspecies: forme,\n\t\t\tgender: species.gender,\n\t\t\tshiny: this.randomChance(1, 1024),\n\t\t\tmoves: Array.from(moves),\n\t\t\tability,\n\t\t\tevs,\n\t\t\tivs,\n\t\t\titem,\n\t\t\tlevel,\n\t\t};\n\t}\n\n\trandomTeam() {\n\t\tthis.enforceNoDirectCustomBanlistChanges();\n\n\t\tconst seed = this.prng.seed;\n\t\tconst ruleTable = this.dex.formats.getRuleTable(this.format);\n\t\tconst pokemon: RandomTeamsTypes.RandomSet[] = [];\n\n\t\t// For Monotype\n\t\tconst isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');\n\t\tconst typePool = this.dex.types.names();\n\t\tconst type = this.forceMonotype || this.sample(typePool);\n\n\t\tconst baseFormes: {[k: string]: number} = {};\n\t\tlet hasMega = false;\n\n\t\tconst tierCount: {[k: string]: number} = {};\n\t\tconst typeCount: {[k: string]: number} = {};\n\t\tconst typeComboCount: {[k: string]: number} = {};\n\t\tconst typeWeaknesses: {[k: string]: number} = {};\n\t\tconst teamDetails: RandomTeamsTypes.TeamDetails = {};\n\n\t\t// We make at most two passes through the potential Pokemon pool when creating a team - if the first pass doesn't\n\t\t// result in a team of six Pokemon we perform a second iteration relaxing as many restrictions as possible.\n\t\tfor (const restrict of [true, false]) {\n\t\t\tif (pokemon.length >= this.maxTeamSize) break;\n\n\t\t\tconst pokemonList = Object.keys(this.randomDoublesData);\n\t\t\tconst [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);\n\t\t\twhile (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {\n\t\t\t\tconst baseSpecies = this.sampleNoReplace(baseSpeciesPool);\n\t\t\t\tconst currentSpeciesPool: Species[] = [];\n\t\t\t\t// Check if the base species has a mega forme available\n\t\t\t\tlet canMega = false;\n\t\t\t\tfor (const poke of pokemonPool[baseSpecies]) {\n\t\t\t\t\tconst species = this.dex.species.get(poke);\n\t\t\t\t\tif (!hasMega && species.isMega) canMega = true;\n\t\t\t\t}\n\t\t\t\tfor (const poke of pokemonPool[baseSpecies]) {\n\t\t\t\t\tconst species = this.dex.species.get(poke);\n\t\t\t\t\t// Prevent multiple megas\n\t\t\t\t\tif (hasMega && species.isMega) continue;\n\t\t\t\t\t// Prevent base forme, if a mega is available\n\t\t\t\t\tif (canMega && !species.isMega) continue;\n\t\t\t\t\tcurrentSpeciesPool.push(species);\n\t\t\t\t}\n\t\t\t\tconst species = this.sample(currentSpeciesPool);\n\t\t\t\tif (!species.exists) continue;\n\n\t\t\t\t// Limit to one of each species (Species Clause)\n\t\t\t\tif (baseFormes[species.baseSpecies]) continue;\n\n\t\t\t\t// Limit one Mega per team\n\t\t\t\tif (hasMega && species.isMega) continue;\n\n\t\t\t\tconst tier = species.tier;\n\t\t\t\tconst types = species.types;\n\t\t\t\tconst typeCombo = types.slice().sort().join();\n\t\t\t\t// Dynamically scale limits for different team sizes. The default and minimum value is 1.\n\t\t\t\tconst limitFactor = Math.round(this.maxTeamSize / 6) || 1;\n\n\t\t\t\tif (restrict) {\n\t\t\t\t\t// Limit one Pokemon per tier, two for Monotype\n\t\t\t\t\tif (\n\t\t\t\t\t\t(tierCount[tier] >= (isMonotype || this.forceMonotype ? 2 : 1) * limitFactor) &&\n\t\t\t\t\t\t!this.randomChance(1, Math.pow(5, tierCount[tier]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!isMonotype && !this.forceMonotype) {\n\t\t\t\t\t\t// Limit two of any type\n\t\t\t\t\t\tlet skip = false;\n\t\t\t\t\t\tfor (const typeName of types) {\n\t\t\t\t\t\t\tif (typeCount[typeName] >= 2 * limitFactor) {\n\t\t\t\t\t\t\t\tskip = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (skip) continue;\n\n\t\t\t\t\t\t// Limit three weak to any type\n\t\t\t\t\t\tfor (const typeName of this.dex.types.names()) {\n\t\t\t\t\t\t\t// it's weak to the type\n\t\t\t\t\t\t\tif (this.dex.getEffectiveness(typeName, species) > 0) {\n\t\t\t\t\t\t\t\tif (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;\n\t\t\t\t\t\t\t\tif (typeWeaknesses[typeName] >= 3 * limitFactor) {\n\t\t\t\t\t\t\t\t\tskip = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (skip) continue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Limit one of any type combination, three in Monotype\n\t\t\t\t\tif (!this.forceMonotype && typeComboCount[typeCombo] >= (isMonotype ? 3 : 1) * limitFactor) continue;\n\t\t\t\t}\n\n\t\t\t\tconst set = this.randomSet(\n\t\t\t\t\tspecies,\n\t\t\t\t\tteamDetails,\n\t\t\t\t\tpokemon.length === this.maxTeamSize - 1,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\n\t\t\t\tconst item = this.dex.items.get(set.item);\n\n\t\t\t\t// Limit one Z-Move per team\n\t\t\t\tif (item.zMove && teamDetails.zMove) continue;\n\n\t\t\t\t// Zoroark copies the last Pokemon\n\t\t\t\tif (set.ability === 'Illusion') {\n\t\t\t\t\tif (pokemon.length < 1) continue;\n\t\t\t\t\tset.level = pokemon[pokemon.length - 1].level;\n\t\t\t\t}\n\n\t\t\t\t// Okay, the set passes, add it to our team\n\t\t\t\tpokemon.unshift(set);\n\n\t\t\t\t// Don't bother tracking details for the last Pokemon\n\t\t\t\tif (pokemon.length === this.maxTeamSize) break;\n\n\t\t\t\t// Now that our Pokemon has passed all checks, we can increment our counters\n\t\t\t\tbaseFormes[species.baseSpecies] = 1;\n\n\t\t\t\t// Increment tier counter\n\t\t\t\tif (tierCount[tier]) {\n\t\t\t\t\ttierCount[tier]++;\n\t\t\t\t} else {\n\t\t\t\t\ttierCount[tier] = 1;\n\t\t\t\t}\n\n\t\t\t\t// Increment type counters\n\t\t\t\tfor (const typeName of types) {\n\t\t\t\t\tif (typeName in typeCount) {\n\t\t\t\t\t\ttypeCount[typeName]++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttypeCount[typeName] = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeCombo in typeComboCount) {\n\t\t\t\t\ttypeComboCount[typeCombo]++;\n\t\t\t\t} else {\n\t\t\t\t\ttypeComboCount[typeCombo] = 1;\n\t\t\t\t}\n\n\t\t\t\t// Increment weakness counter\n\t\t\t\tfor (const typeName of this.dex.types.names()) {\n\t\t\t\t\t// it's weak to the type\n\t\t\t\t\tif (this.dex.getEffectiveness(typeName, species) > 0) {\n\t\t\t\t\t\ttypeWeaknesses[typeName]++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track what the team has\n\t\t\t\tif (item.megaStone || species.name === 'Rayquaza-Mega') hasMega = true;\n\t\t\t\tif (item.zMove) teamDetails.zMove = 1;\n\t\t\t\tif (set.ability === 'Snow Warning' || set.moves.includes('hail')) teamDetails.hail = 1;\n\t\t\t\tif (set.moves.includes('raindance') || set.ability === 'Drizzle' && !item.onPrimal) teamDetails.rain = 1;\n\t\t\t\tif (set.ability === 'Sand Stream') teamDetails.sand = 1;\n\t\t\t\tif (set.moves.includes('sunnyday') || set.ability === 'Drought' && !item.onPrimal) teamDetails.sun = 1;\n\t\t\t\tif (set.moves.includes('spikes')) teamDetails.spikes = (teamDetails.spikes || 0) + 1;\n\t\t\t\tif (set.moves.includes('stealthrock')) teamDetails.stealthRock = 1;\n\t\t\t\tif (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1;\n\t\t\t\tif (set.moves.includes('toxicspikes')) teamDetails.toxicSpikes = 1;\n\t\t\t\tif (set.moves.includes('defog')) teamDetails.defog = 1;\n\t\t\t\tif (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1;\n\t\t\t\tif (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) {\n\t\t\t\t\tteamDetails.screens = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (pokemon.length < this.maxTeamSize && pokemon.length < 12) {\n\t\t\tthrow new Error(`Could not build a random team for ${this.format} (seed=${seed})`);\n\t\t}\n\n\t\treturn pokemon;\n\t}\n}\n\nexport default RandomGen7DoublesTeams;\n"], "mappings": "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", "names": ["species"] }