{ "version": 3, "sources": ["../../../../../data/mods/gen6/random-teams.ts"], "sourcesContent": ["import {MoveCounter, TeamData, OldRandomBattleSpecies} from '../gen8/random-teams';\r\nimport RandomGen7Teams, {BattleFactorySpecies} from '../gen7/random-teams';\r\nimport {PRNG, PRNGSeed} from '../../../sim/prng';\r\nimport {Utils} from '../../../lib';\r\nimport {toID} from '../../../sim/dex';\r\n\r\nexport class RandomGen6Teams extends RandomGen7Teams {\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\t\tthis.noStab = [...this.noStab, 'aquajet', 'fakeout', 'iceshard', 'machpunch', 'quickattack', 'vacuumwave'];\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),\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') &&\r\n\t\t\t\t!abilities.has('Pixilate') &&\r\n\t\t\t\t!moves.has('rest') &&\r\n\t\t\t\t!moves.has('sleeptalk')\r\n\t\t\t),\r\n\t\t\tElectric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),\r\n\t\t\tFairy: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t!counter.get('Fairy') && !abilities.has('Pixilate') && (!!counter.setupType || !counter.get('Status'))\r\n\t\t\t),\r\n\t\t\tFighting: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t!counter.get('Fighting') && (\r\n\t\t\t\t\tspecies.baseStats.atk >= 110 ||\r\n\t\t\t\t\tabilities.has('Justified') || abilities.has('Unburden') ||\r\n\t\t\t\t\t!!counter.setupType || !counter.get('Status')\r\n\t\t\t\t)\r\n\t\t\t),\r\n\t\t\tFire: (movePool, moves, abilities, types, counter) => !counter.get('Fire') ||\r\n\t\t\t\t['eruption', 'quiverdance'].some(m => movePool.includes(m)),\r\n\t\t\tFlying: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t!counter.get('Flying') && (\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(types.has('Normal') && movePool.includes('bravebird'))\r\n\t\t\t\t)\r\n\t\t\t),\r\n\t\t\tGhost: (movePool, moves, abilities, types, counter) => !types.has('Dark') && !counter.get('Ghost'),\r\n\t\t\tGrass: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t!counter.get('Grass') && !types.has('Fairy') && !types.has('Poison') && !types.has('Steel')\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) => !counter.get('Ice') && !abilities.has('Refrigerate'),\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!types.has('Flying') &&\r\n\t\t\t\t!abilities.has('Pixilate') &&\r\n\t\t\t\tcounter.get('stab') < species.types.length\r\n\t\t\t),\r\n\t\t\tRock: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t!counter.get('Rock') &&\r\n\t\t\t\t!types.has('Fairy') &&\r\n\t\t\t\t(abilities.has('Rock Head') || counter.setupType === 'Physical')\r\n\t\t\t),\r\n\t\t\tSteel: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t!counter.get('Steel') && (abilities.has('Technician') || movePool.includes('meteormash'))\r\n\t\t\t),\r\n\t\t\tWater: (movePool, moves, abilities, types, counter) => (\r\n\t\t\t\t(!counter.get('Water') || !counter.get('stab')) &&\r\n\t\t\t\t!abilities.has('Protean')\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\tAerilate: (movePool, moves, abilities, types, counter) => !counter.get('Normal'),\r\n\t\t\tPixilate: (movePool, moves, abilities, types, counter) => !counter.get('Normal'),\r\n\t\t\tRefrigerate: (movePool, moves, abilities, types, counter) => !moves.has('blizzard') && !counter.get('Normal'),\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'Bad Dreams': movePool => movePool.includes('darkvoid'),\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): {cull: boolean, isSetup?: boolean} {\r\n\t\tconst restTalk = moves.has('rest') && moves.has('sleeptalk');\r\n\r\n\t\tif (move.priority > 0 && counter.get('speedsetup')) return {cull: true};\r\n\r\n\t\tswitch (move.id) {\r\n\t\t// Not very useful without their supporting moves\r\n\t\tcase 'cottonguard': case 'defendorder':\r\n\t\t\treturn {cull: !counter.get('recovery') && !moves.has('rest')};\r\n\t\tcase 'focuspunch':\r\n\t\t\treturn {cull: !moves.has('substitute') || counter.damagingMoves.size < 2};\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('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: counter.get('Physical') + counter.get('Special') < 3 || !!counter.get('priority')};\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\t(move.id === 'bellydrum' && !abilities.has('Unburden') && !counter.get('priority')) ||\r\n\t\t\t\t(counter.get('Physical') + counter.get('physicalpool') < 2 && (!moves.has('rest') || !moves.has('sleeptalk'))) || (\r\n\t\t\t\t\t(counter.setupType !== 'Physical' || counter.get('physicalsetup') > 1) &&\r\n\t\t\t\t\t(!moves.has('growth') || moves.has('sunnyday'))\r\n\t\t\t\t)\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 && (!moves.has('rest') || !moves.has('sleeptalk')))\r\n\t\t\t), isSetup: true};\r\n\t\tcase 'quiverdance':\r\n\t\t\treturn {cull: false, 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 || restTalk, 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.setupType && ((!moves.has('rest') && !moves.has('sleeptalk')) || moves.has('stormthrow'))) ||\r\n\t\t\t\t(!!counter.get('speedsetup') || ['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: (\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\tmoves.has('spikes') || moves.has('stealthrock') ||\r\n\t\t\t\trestTalk ||\r\n\t\t\t\t!!teamDetails.defog\r\n\t\t\t)};\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\trestTalk ||\r\n\t\t\t\t(!!counter.get('priority') && counter.damagingMoves.size - 1 === counter.get('priority'))\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 'iceshard':\r\n\t\t\treturn {cull: moves.has('shellsmash')};\r\n\t\tcase 'leechseed': case 'roar': case 'whirlwind':\r\n\t\t\treturn {cull: !!counter.setupType || !!counter.get('speedsetup') || moves.has('dragontail')};\r\n\t\tcase 'nightshade': case 'seismictoss':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(!abilities.has(\"Parental Bond\") && (counter.damagingMoves.size > 1 || !!counter.setupType)) ||\r\n\t\t\t\tmoves.has('poweruppunch')\r\n\t\t\t)};\r\n\t\tcase 'protect':\r\n\t\t\tconst screens = moves.has('lightscreen') && moves.has('reflect');\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('rest') || screens || (!!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\t!['sharpedomega', 'dianciemega'].includes(species.id))\r\n\t\t\t)};\r\n\t\tcase 'pursuit':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('nightslash') ||\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 'superfang':\r\n\t\t\treturn {cull: !!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\tmoves.has('lightscreen') || moves.has('reflect') ||\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)};\r\n\t\tcase 'uturn':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.setupType || !!counter.get('speedsetup') ||\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)};\r\n\t\tcase 'voltswitch':\r\n\t\t\treturn {cull: !!counter.setupType || !!counter.get('speedsetup') || moves.has('raindance') || moves.has('uturn')};\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 'signalbeam':\r\n\t\t\treturn {cull: moves.has('uturn') && !counter.setupType && !abilities.has('Tinted Lens')};\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: (\r\n\t\t\t\tcounter.damagingMoves.size < 2 ||\r\n\t\t\t\t(counter.get('Dark') > 1 && !types.has('Dark')) ||\r\n\t\t\t\tmoves.has('glare') ||\r\n\t\t\t\trestTalk\r\n\t\t\t)};\r\n\t\tcase 'dragonclaw':\r\n\t\t\treturn {cull: moves.has('dragontail') || moves.has('outrage')};\r\n\t\tcase 'dracometeor':\r\n\t\t\treturn {cull: moves.has('swordsdance') || counter.setupType === 'Physical' && counter.get('Dragon') > 1};\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: moves.has('dracometeor') && counter.damagingMoves.size < 3};\r\n\t\tcase 'thunderbolt':\r\n\t\t\treturn {cull: moves.has('discharge') || (moves.has('voltswitch') && moves.has('wildcharge'))};\r\n\t\tcase 'dazzlinggleam':\r\n\t\t\treturn {cull: moves.has('playrough') && counter.setupType !== 'Special'};\r\n\t\tcase 'aurasphere': case 'focusblast':\r\n\t\t\treturn {cull: restTalk || ((moves.has('closecombat') || moves.has('superpower')) && counter.setupType !== 'Special')};\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\tcounter.setupType === 'Special' &&\r\n\t\t\t\t\t(moves.has('aurasphere') || moves.has('focusblast') || movePool.includes('aurasphere'))\r\n\t\t\t\t)\r\n\t\t\t)};\r\n\t\tcase 'machpunch':\r\n\t\t\treturn {cull: types.has('Fighting') && counter.get('stab') < species.types.length && !abilities.has('Technician')};\r\n\t\tcase 'stormthrow':\r\n\t\t\treturn {cull: moves.has('circlethrow') && restTalk};\r\n\t\tcase 'superpower':\r\n\t\t\tconst isSetup = abilities.has('Contrary');\r\n\t\t\treturn {cull: (counter.get('Fighting') > 1 && !!counter.setupType) || (restTalk && !isSetup), isSetup};\r\n\t\tcase 'vacuumwave':\r\n\t\t\treturn {cull: (moves.has('closecombat') || moves.has('machpunch')) && counter.setupType !== 'Special'};\r\n\t\tcase 'fierydance': case 'firefang': case 'flamethrower':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(move.id === 'flamethrower' && moves.has('drainpunch') && counter.setupType !== 'Special') ||\r\n\t\t\t\tmoves.has('blazekick') ||\r\n\t\t\t\tmoves.has('overheat') ||\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':\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 'airslash': case 'hurricane':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t[(move.id === 'hurricane' ? 'airslash' : 'hurricane'), 'acrobatics', 'bravebird'].some(m => moves.has(m))\r\n\t\t\t)};\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: restTalk || (types.has('Ghost') && species.types.length > 1 && counter.get('stab') < 2)};\r\n\t\tcase 'hex':\r\n\t\t\treturn {cull: moves.has('shadowball') && !moves.has('willowisp')};\r\n\t\tcase 'gigadrain': case 'powerwhip':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('seedbomb') ||\r\n\t\t\t\tmoves.has('petaldance') ||\r\n\t\t\t\t(moves.has('sunnyday') && moves.has('solarbeam')) ||\r\n\t\t\t\t(counter.get('Special') < 4 && !counter.setupType && moves.has('leafstorm'))\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('hornleech') && counter.get('Physical') < 4) ||\r\n\t\t\t\t(moves.has('gigadrain') && counter.setupType !== 'Physical')\r\n\t\t\t)};\r\n\t\tcase 'leafstorm':\r\n\t\t\treturn {cull: counter.get('Grass') > 1 && !!counter.setupType};\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 'earthpower': case 'precipiceblades':\r\n\t\t\treturn {cull: moves.has('earthquake')};\r\n\t\tcase 'earthquake':\r\n\t\t\treturn {cull: moves.has('closecombat') && abilities.has('Aerilate')};\r\n\t\tcase 'freezedry':\r\n\t\t\treturn {cull: moves.has('icebeam') || moves.has('icywind') || counter.get('stab') < species.types.length};\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\t(abilities.has('Refrigerate') && (moves.has('freezedry') || movePool.includes('return'))) ||\r\n\t\t\t\tmoves.has('wish')\r\n\t\t\t)};\r\n\t\tcase 'extremespeed':\r\n\t\t\treturn {cull: counter.setupType !== 'Physical' && moves.has('vacuumwave')};\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') || moves.has('return')};\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(types.has('Normal') && (!counter.get('stab') || counter.get('Normal') > 2)) ||\r\n\t\t\t\t(types.has('Rock') && !!counter.get('Status'))\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')};\r\n\t\tcase 'rockblast': case 'rockslide':\r\n\t\t\treturn {cull: moves.has('headsmash') || moves.has('stoneedge')};\r\n\t\tcase 'bulletpunch':\r\n\t\t\treturn {cull: moves.has('substitute')};\r\n\t\tcase 'hydropump':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('razorshell') ||\r\n\t\t\t\tmoves.has('waterfall') ||\r\n\t\t\t\t(moves.has('scald') && (counter.get('Special') < 4 || species.types.length > 1 && counter.get('stab') < 3)) ||\r\n\t\t\t\trestTalk\r\n\t\t\t)};\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: (\r\n\t\t\t\tmoves.has('waterfall') ||\r\n\t\t\t\tmoves.has('waterpulse') ||\r\n\t\t\t\t(species.id === 'quagsire' && movePool.includes('recover'))\r\n\t\t\t)};\r\n\r\n\t\t// Status:\r\n\t\tcase 'glare': case 'headbutt':\r\n\t\t\treturn {cull: moves.has('bodyslam') || !moves.has('glare')};\r\n\t\tcase 'stunspore': case 'thunderwave':\r\n\t\t\tconst otherStatus = ['discharge', 'spore', 'toxic', 'trickroom', 'yawn'].some(m => moves.has(m));\r\n\t\t\treturn {cull: !!counter.setupType || !!counter.get('speedsetup') || restTalk || otherStatus};\r\n\t\tcase 'toxic':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.setupType ||\r\n\t\t\t\t['hypnosis', 'sleeppowder', 'toxicspikes', 'willowisp', 'yawn', 'raindance', 'flamecharge'].some(m => moves.has(m))\r\n\t\t\t)};\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\t(!types.has('Water') && !counter.get('Water')) ||\r\n\t\t\t\trestTalk\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\trestTalk\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 'milkdrink': case 'moonlight': case 'painsplit': case 'recover': case 'roost': case 'synthesis':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t['leechseed', 'rest'].some(m => moves.has(m)) ||\r\n\t\t\t\t(moves.has('wish') && (moves.has('protect') || movePool.includes('protect')))\r\n\t\t\t)};\r\n\t\tcase 'safeguard':\r\n\t\t\treturn {cull: moves.has('destinybond')};\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\t['dracometeor', 'pursuit', 'rest', 'taunt', 'uturn', 'voltswitch', 'whirlwind'].some(m => moves.has(m)) ||\r\n\t\t\t\t(moves.has('leafstorm') && !abilities.has('Contrary')) || moveBasedCull\r\n\t\t\t)};\r\n\t\t}\r\n\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): boolean {\r\n\t\tswitch (ability) {\r\n\t\tcase 'Flare Boost': case 'Gluttony': case 'Moody': case 'Snow Cloak': case 'Steadfast':\r\n\t\t\treturn true;\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 'Aerilate': case 'Pixilate': case 'Refrigerate':\r\n\t\t\treturn !counter.get('Normal');\r\n\t\tcase 'Analytic': case 'Download': case 'Hyper Cutter':\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('rest') && moves.has('sleeptalk'));\r\n\t\tcase 'Compound Eyes': case 'No Guard':\r\n\t\t\treturn !counter.get('inaccurate');\r\n\t\tcase 'Defiant': 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 '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 'Ice Body':\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 'Magnet Pull':\r\n\t\t\treturn (!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') ||\r\n\t\t\t\tabilities.has('Adaptability') ||\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 '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 'Reckless': case 'Rock Head':\r\n\t\t\treturn (!counter.get('recoil') || !!species.isMega);\r\n\t\tcase 'Regenerator':\r\n\t\t\treturn abilities.has('Magic Guard');\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 'Speed Boost':\r\n\t\t\treturn moves.has('uturn');\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') ||\r\n\t\t\t\tabilities.has('Prankster') ||\r\n\t\t\t\tcounter.get('damage') >= counter.damagingMoves.size ||\r\n\t\t\t\t(counter.get('Status') > 2 && !counter.setupType)\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 || species.id === 'clefable' && moves.has('stealthrock'));\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(a => abilities.has(a)));\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): string | undefined {\r\n\t\tif (species.requiredItem) return species.requiredItem;\r\n\t\tif (species.requiredItems) return this.sample(species.requiredItems);\r\n\r\n\t\t// First, the extra high-priority items\r\n\t\tif (species.name === 'Marowak') return 'Thick Club';\r\n\t\tif (species.name === 'Dedenne') return 'Petaya 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 === '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') return 'Sitrus Berry';\r\n\t\tif (ability === 'Imposter') return 'Choice Scarf';\r\n\t\tif (moves.has('switcheroo') || moves.has('trick')) {\r\n\t\t\tif (ability === 'Klutz') {\r\n\t\t\t\treturn 'Assault Vest';\r\n\t\t\t} else if (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 (species.nfe) return (ability === 'Technician' && counter.get('Physical') >= 4) ? 'Choice Band' : 'Eviolite';\r\n\t\tif (moves.has('copycat') && counter.get('Physical') >= 3) return 'Choice Band';\r\n\t\tif (moves.has('bellydrum')) return 'Sitrus Berry';\r\n\t\tif (\r\n\t\t\tmoves.has('geomancy') ||\r\n\t\t\t(moves.has('solarbeam') && ability !== 'Drought' && !moves.has('sunnyday') && !teamDetails.sun)\r\n\t\t) {\r\n\t\t\treturn 'Power Herb';\r\n\t\t}\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 moves.has('drainpunch') ? 'Flame Orb' : 'Toxic 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 (moves.has('psychoshift')) return 'Flame Orb';\r\n\t\tif (ability === 'Poison Heal') return 'Toxic Orb';\r\n\t\tif (ability === 'Unburden') {\r\n\t\t\tif (moves.has('fakeout')) {\r\n\t\t\t\treturn 'Normal Gem';\r\n\t\t\t} else if (['dracometeor', 'leafstorm', 'overheat'].some(m => moves.has(m))) {\r\n\t\t\t\treturn 'White Herb';\r\n\t\t\t} else if (moves.has('substitute') || counter.setupType) {\r\n\t\t\t\treturn 'Sitrus Berry';\r\n\t\t\t} else {\r\n\t\t\t\treturn 'Red Card';\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (moves.has('acrobatics')) return ''; // not undefined - we want \"no item\"\r\n\t\tif (moves.has('raindance')) return (ability === 'Forecast') ? 'Damp Rock' : 'Life Orb';\r\n\t\tif (moves.has('sunnyday')) return (ability === 'Forecast') ? 'Heat Rock' : 'Life Orb';\r\n\t\tif (moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';\r\n\t\tif (moves.has('rest') && !moves.has('sleeptalk') && ability !== 'Natural Cure' && ability !== 'Shed Skin') {\r\n\t\t\treturn 'Chesto Berry';\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\t\tconst scarfReqs = species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && !counter.get('priority');\r\n\r\n\t\tif (\r\n\t\t\t(ability === 'Speed Boost' || ability === 'Stance Change') &&\r\n\t\t\tcounter.get('Physical') + counter.get('Special') > 2\r\n\t\t) {\r\n\t\t\treturn 'Life Orb';\r\n\t\t}\r\n\t\tif (\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\tscarfReqs &&\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\tcounter.get('Special') >= 4 &&\r\n\t\t\t!moves.has('acidspray') && !moves.has('clearsmog') && !moves.has('fierydance')\r\n\t\t) {\r\n\t\t\treturn (\r\n\t\t\t\tspecies.baseStats.spa >= 100 &&\r\n\t\t\t\tscarfReqs &&\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\tcounter.get('Physical') >= 3 &&\r\n\t\t\tmoves.has('defog') &&\r\n\t\t\tscarfReqs &&\r\n\t\t\t!moves.has('foulplay')\r\n\t\t) {\r\n\t\t\treturn 'Choice Scarf';\r\n\t\t}\r\n\r\n\t\tif (counter.get('Special') >= 3 && moves.has('uturn') && !moves.has('acidspray')) return 'Choice Specs';\r\n\t\tif (\r\n\t\t\tability === 'Slow Start' ||\r\n\t\t\t['bite', 'clearsmog', 'curse', 'protect', 'sleeptalk'].some(m => moves.has(m)) ||\r\n\t\t\tspecies.name.includes('Rotom-')\r\n\t\t) {\r\n\t\t\treturn 'Leftovers';\r\n\t\t}\r\n\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 (moves.has('substitute')) return counter.damagingMoves.size > 2 && !!counter.get('drain') ? 'Life Orb' : 'Leftovers';\r\n\t\tif (this.dex.getEffectiveness('Ground', species) >= 2 && ability !== 'Levitate' && !moves.has('magnetrise')) {\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 &&\r\n\t\t\tdefensiveStatTotal >= 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) return 'Weakness Policy';\r\n\t\tif (\r\n\t\t\tisLead &&\r\n\t\t\tability !== 'Regenerator' && ability !== 'Sturdy' &&\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): string | undefined {\r\n\t\tconst defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd;\r\n\r\n\t\tif (ability === 'Gale Wings' && moves.has('bravebird')) return 'Sharp Beak';\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\tcounter.damagingMoves.size >= 3 && ability !== '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) {\r\n\t\t\treturn (\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 && defensiveStatTotal <= 275)\r\n\t\t\t) ? 'Life Orb' : 'Leftovers';\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): 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 movePool = (data?.moves || Object.keys(this.dex.species.getLearnset(species.id)!)).slice();\r\n\t\tconst rejectedPool = [];\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\tlet abilities = new Set(Object.values(species.abilities));\r\n\t\tif (species.unreleasedHidden) abilities.delete(species.abilities.H);\r\n\t\tlet availableHP = 0;\r\n\t\tfor (const setMoveid of movePool) {\r\n\t\t\tif (setMoveid.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', 'suckerpunch', 'superpower'];\r\n\r\n\t\tconst moves = new Set();\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\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\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,\r\n\t\t\t\t\tteamDetails, species, isLead\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]);\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\tif (\r\n\t\t\t\t\tcounter.setupType && !isSetup && counter.setupType !== 'Mixed' && move.category !== counter.setupType &&\r\n\t\t\t\t\tcounter.get(counter.setupType) < 2 && (move.category !== 'Status' || !move.flags.heal) &&\r\n\t\t\t\t\tmoveid !== 'sleeptalk' && !types.has('Dark') && !moves.has('darkpulse') && (\r\n\t\t\t\t\t\tmove.category !== 'Status' || (\r\n\t\t\t\t\t\t\tcounter.get(counter.setupType) + counter.get('Status') > 3 &&\r\n\t\t\t\t\t\t\tcounter.get('physicalsetup') + counter.get('specialsetup') < 2\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\t// Mono-attacking with setup and RestTalk is allowed\r\n\t\t\t\t\t// Reject Status moves only if there is nothing else to reject\r\n\t\t\t\t\tcull = true;\r\n\t\t\t\t}\r\n\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\t// Hidden Power isn't good enough\r\n\t\t\t\t\tcull = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst runEnforcementChecker = (checkerName: string) => {\r\n\t\t\t\t\tif (!this.moveEnforcementCheckers[checkerName]) return false;\r\n\t\t\t\t\treturn this.moveEnforcementCheckers[checkerName](\r\n\t\t\t\t\t\tmovePool, moves, abilities, types, counter, species as Species, teamDetails\r\n\t\t\t\t\t);\r\n\t\t\t\t};\r\n\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 && !isSetup && !move.weather && !move.stallingMove && !move.damage &&\r\n\t\t\t\t\t(move.category !== 'Status' || !move.flags.heal) &&\r\n\t\t\t\t\t!['judgment', 'sleeptalk', 'toxic', 'lightscreen', 'reflect'].includes(moveid) &&\r\n\t\t\t\t\t(counter.get('physicalsetup') + counter.get('specialsetup') < 2 && (\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\tcounter.get(counter.setupType) + counter.get('Status') > 3\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(!counter.get('recovery') && !counter.setupType &&\r\n\t\t\t\t\t\t['healingwish', 'switcheroo', 'trick', 'trickroom'].every(m => !moves.has(m)) &&\r\n\t\t\t\t\t\t(['recover', 'roost', 'slackoff', 'softboiled'].some(m => movePool.includes(m))) &&\r\n\t\t\t\t\t\tcounter.get('Status')\r\n\t\t\t\t\t\t) ||\r\n\t\t\t\t\t\tmovePool.includes('milkdrink') ||\r\n\t\t\t\t\t\t(movePool.includes('moonlight') && types.size < 2) ||\r\n\t\t\t\t\t\t(movePool.includes('stickyweb') && !counter.setupType && !teamDetails.stickyWeb) ||\r\n\t\t\t\t\t\t(species.requiredMove && movePool.includes(toID(species.requiredMove))) ||\r\n\t\t\t\t\t\t(moves.has('suckerpunch') && counter.get('stab') < species.types.length) ||\r\n\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) {\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 cull moves from the move list\r\n\t\t\t\tif (cull && (\r\n\t\t\t\t\tmovePool.length - availableHP ||\r\n\t\t\t\t\t(availableHP && (moveid.startsWith('hiddenpower') || !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 && !move.flags.charge &&\r\n\t\t\t\t\t\t(!moveid.startsWith('hiddenpower') || !availableHP)\r\n\t\t\t\t\t) rejectedPool.push(moveid);\r\n\t\t\t\t\tmoves.delete(moveid);\r\n\t\t\t\t\tif (moveid.startsWith('hiddenpower')) hasHiddenPower = false;\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\tmoves.delete(moveid);\r\n\t\t\t\t\tif (moveid.startsWith('hiddenpower')) hasHiddenPower = false;\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\tif (hasHiddenPower) {\r\n\t\t\tlet hpType;\r\n\t\t\tfor (const move of moves) {\r\n\t\t\t\tif (move.startsWith('hiddenpower')) {\r\n\t\t\t\t\thpType = move.substr(11);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\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 = 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\t// Moveset modifications\r\n\t\tif (moves.has('autotomize') && moves.has('heavyslam')) {\r\n\t\t\tmoves.delete('autotomize');\r\n\t\t\tmoves.add('rockpolish');\r\n\t\t}\r\n\t\tif (moves.has('raindance') && moves.has('thunderbolt')) {\r\n\t\t\tmoves.delete('thunderbolt');\r\n\t\t\tmoves.add('thunder');\r\n\t\t}\r\n\r\n\t\tif (species.battleOnly && !species.requiredAbility) {\r\n\t\t\tabilities = new Set(Object.values(this.dex.species.get(species.battleOnly as string).abilities));\r\n\t\t}\r\n\t\tconst abilityData = [...abilities].map(a => this.dex.abilities.get(a));\r\n\t\tUtils.sortBy(abilityData, abil => -abil.rating);\r\n\r\n\t\tif (abilityData.length > 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\r\n\t\t\t// Start with the first abiility and work our way through, culling as we go\r\n\t\t\tability = abilityData[0].name;\r\n\r\n\t\t\twhile (this.shouldCullAbility(ability, types, moves, abilities, counter, movePool, teamDetails, species)) {\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') || (moves.has('rest') && moves.has('sleeptalk')))\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) {\r\n\t\t\t\tability = 'Moxie';\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} else if (species.name === 'Lopunny' && moves.has('switcheroo') && this.randomChance(2, 3)) {\r\n\t\t\t\tability = 'Klutz';\r\n\t\t\t}\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\tlet item = this.getHighPriorityItem(ability, types, moves, counter, teamDetails, species, isLead);\r\n\t\tif (item === undefined) item = this.getMediumPriorityItem(ability, moves, counter, species, false, isLead);\r\n\t\tif (item === undefined) {\r\n\t\t\titem = this.getLowPriorityItem(ability, types, moves, abilities, counter, teamDetails, species, isLead);\r\n\t\t}\r\n\t\tif (item === undefined) item = 'Leftovers';\r\n\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\tconst level = this.adjustLevel || data.level || (species.nfe ? 90 : 80);\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') && (item === 'Petaya Berry' || item === 'Sitrus Berry')) {\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\r\n\t\t\t\tif (hp % 4 === 0) break;\r\n\t\t\t} else if (moves.has('bellydrum') && item === 'Sitrus Berry') {\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 = hasHiddenPower ? ivs.atk - 30 : 0;\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 ? 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\tmoves: Array.from(moves),\r\n\t\t\tability: ability,\r\n\t\t\tevs: evs,\r\n\t\t\tivs: ivs,\r\n\t\t\titem: item,\r\n\t\t\tlevel,\r\n\t\t\tshiny: this.randomChance(1, 1024),\r\n\t\t};\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,\r\n\t\tteamData: RandomTeamsTypes.FactoryTeamDetails,\r\n\t\ttier: string\r\n\t): RandomTeamsTypes.RandomFactorySet | null {\r\n\t\tconst id = toID(species.name);\r\n\t\t// const flags = this.randomFactorySets[tier][id].flags;\r\n\t\tconst setList = this.randomFactorySets[tier][id].sets;\r\n\r\n\t\tconst itemsMax: {[k: string]: number} = {choicespecs: 1, choiceband: 1, choicescarf: 1};\r\n\t\tconst movesMax: {[k: string]: number} = {\r\n\t\t\trapidspin: 1, batonpass: 1, stealthrock: 1, defog: 1, spikes: 1, toxicspikes: 1,\r\n\t\t};\r\n\t\tconst requiredMoves: {[k: string]: string} = {stealthrock: 'hazardSet', rapidspin: 'hazardClear', defog: 'hazardClear'};\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\tsnowcloak: '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[], 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 itemData = this.dex.items.get(curSet.item);\r\n\t\t\tif (teamData.megaCount && teamData.megaCount > 0 && itemData.megaStone) continue; // reject 2+ mega stones\r\n\t\t\tif (itemsMax[itemData.id] && teamData.has[itemData.id] >= itemsMax[itemData.id]) continue;\r\n\r\n\t\t\tconst abilityState = this.dex.abilities.get(curSet.ability);\r\n\t\t\tif (weatherAbilitiesRequire[abilityState.id] && teamData.weather !== weatherAbilitiesRequire[abilityState.id]) continue;\r\n\t\t\tif (teamData.weather && weatherAbilities.includes(abilityState.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\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: 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: this.adjustLevel || 100,\r\n\t\t\thappiness: typeof setData.set.happiness === 'undefined' ? 255 : setData.set.happiness,\r\n\t\t\tevs: setData.set.evs || {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84},\r\n\t\t\tivs: setData.set.ivs || {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31},\r\n\t\t\tnature: setData.set.nature || 'Serious',\r\n\t\t\tmoves: moves,\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\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) this.factoryTier = this.sample(['Uber', 'OU', 'UU', 'RU', 'NU', 'PU']);\r\n\t\tconst chosenTier = this.factoryTier;\r\n\r\n\t\tconst pokemon = [];\r\n\r\n\t\tconst pokemonPool = Object.keys(this.randomFactorySets[chosenTier]);\r\n\r\n\t\tconst teamData: TeamData = {\r\n\t\t\ttypeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, has: {}, forceResult,\r\n\t\t\tweaknesses: {}, resistances: {},\r\n\t\t};\r\n\t\tconst requiredMoveFamilies = ['hazardSet', 'hazardClear'];\r\n\t\tconst requiredMoves: {[k: string]: string} = {stealthrock: 'hazardSet', rapidspin: 'hazardClear', defog: 'hazardClear'};\r\n\t\tconst weatherAbilitiesSet: {[k: string]: string} = {\r\n\t\t\tdrizzle: 'raindance', drought: 'sunnyday', snowwarning: 'hail', sandstream: '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\tconst speciesFlags = this.randomFactorySets[chosenTier][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\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\tconst set = this.randomFactorySet(species, teamData, chosenTier);\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\tconst itemData = this.dex.items.get(set.item);\r\n\t\t\tif (itemData.megaStone) teamData.megaCount++;\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 Pokemon 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 type in teamData.weaknesses) {\r\n\t\t\t\tif (teamData.weaknesses[type] >= 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\r\nexport default RandomGen6Teams;\r\n"], "mappings": "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", "names": ["import_random_teams", "RandomGen7Teams"] }