{ "version": 3, "sources": ["../../../../../data/mods/gen3/random-teams.ts"], "sourcesContent": ["import RandomGen4Teams from '../gen4/random-teams';\r\nimport {Utils} from '../../../lib';\r\nimport {PRNG, PRNGSeed} from '../../../sim/prng';\r\nimport type {MoveCounter, OldRandomBattleSpecies} from '../gen8/random-teams';\r\n\r\nexport class RandomGen3Teams extends RandomGen4Teams {\r\n\tbattleHasDitto: boolean;\r\n\tbattleHasWobbuffet: boolean;\r\n\r\n\trandomData: {[species: string]: OldRandomBattleSpecies} = require('./random-data.json');\r\n\r\n\tconstructor(format: string | Format, prng: PRNG | PRNGSeed | null) {\r\n\t\tsuper(format, prng);\r\n\t\tthis.battleHasDitto = false;\r\n\t\tthis.battleHasWobbuffet = false;\r\n\t\tthis.moveEnforcementCheckers = {\r\n\t\t\tBug: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\tmovePool.includes('megahorn') || (!species.types[1] && movePool.includes('hiddenpowerbug'))\r\n\t\t\t),\r\n\t\t\tElectric: (movePool, moves, abilities, types, counter) => !counter.get('Electric'),\r\n\t\t\tFighting: (movePool, moves, abilities, types, counter) => !counter.get('Fighting'),\r\n\t\t\tFire: (movePool, moves, abilities, types, counter) => !counter.get('Fire'),\r\n\t\t\tGround: (movePool, moves, abilities, types, counter) => !counter.get('Ground'),\r\n\t\t\tNormal: (movePool, moves, abilities, types, counter, species) => {\r\n\t\t\t\tif (species.id === 'blissey' && movePool.includes('softboiled')) return true;\r\n\t\t\t\treturn !counter.get('Normal') && counter.setupType === 'Physical';\r\n\t\t\t},\r\n\t\t\tPsychic: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\ttypes.has('Psychic') &&\r\n\t\t\t\t(movePool.includes('psychic') || movePool.includes('psychoboost')) &&\r\n\t\t\t\tspecies.baseStats.spa >= 100\r\n\t\t\t),\r\n\t\t\tRock: (movePool, moves, abilities, types, counter, species) => !counter.get('Rock') && species.baseStats.atk >= 100,\r\n\t\t\tWater: (movePool, moves, abilities, types, counter, species) => (\r\n\t\t\t\t!counter.get('Water') && counter.setupType !== 'Physical' && species.baseStats.spa >= 60\r\n\t\t\t),\r\n\t\t\t// If the Pok\u00E9mon has this move, the other move will be forced\r\n\t\t\tprotect: movePool => movePool.includes('wish'),\r\n\t\t\tsunnyday: movePool => movePool.includes('solarbeam'),\r\n\t\t\tsleeptalk: movePool => movePool.includes('rest'),\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): {cull: boolean, isSetup?: boolean} {\r\n\t\tconst restTalk = moves.has('rest') && moves.has('sleeptalk');\r\n\r\n\t\tswitch (move.id) {\r\n\t\t// Set up once and only if we have the moves for it\r\n\t\tcase 'bulkup': case 'curse': case 'dragondance': case 'swordsdance':\r\n\t\t\treturn {\r\n\t\t\t\tcull: (\r\n\t\t\t\t\t(counter.setupType !== 'Physical' || counter.get('physicalsetup') > 1) ||\r\n\t\t\t\t\t(counter.get('Physical') + counter.get('physicalpool') < 2 && !moves.has('batonpass') && !restTalk)\r\n\t\t\t\t),\r\n\t\t\t\tisSetup: true,\r\n\t\t\t};\r\n\t\tcase 'calmmind':\r\n\t\t\treturn {\r\n\t\t\t\tcull: (\r\n\t\t\t\t\tcounter.setupType !== 'Special' ||\r\n\t\t\t\t\t(counter.get('Special') + counter.get('specialpool') < 2 && !moves.has('batonpass') &&\r\n\t\t\t\t\t!moves.has('refresh') && !restTalk)\r\n\t\t\t\t),\r\n\t\t\t\tisSetup: true,\r\n\t\t\t};\r\n\t\tcase 'agility':\r\n\t\t\treturn {\r\n\t\t\t\tcull: (counter.damagingMoves.size < 2 && !moves.has('batonpass')) || moves.has('substitute') || restTalk,\r\n\t\t\t\tisSetup: !counter.setupType,\r\n\t\t\t};\r\n\r\n\t\t// Not very useful without their supporting moves\r\n\t\tcase 'amnesia': case 'sleeptalk':\r\n\t\t\tif (moves.has('roar') || moves.has('whirlwind')) return {cull: true};\r\n\t\t\tif (!moves.has('rest')) return {cull: true};\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\tbreak;\r\n\t\tcase 'barrier':\r\n\t\t\treturn {cull: !moves.has('calmmind') && !moves.has('batonpass') && !moves.has('mirrorcoat')};\r\n\t\tcase 'batonpass':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(!counter.setupType && !counter.get('speedsetup')) &&\r\n\t\t\t\t['meanlook', 'spiderweb', 'substitute', 'wish'].every(m => !moves.has(m))\r\n\t\t\t)};\r\n\t\tcase 'endeavor': case 'flail': case 'reversal':\r\n\t\t\treturn {cull: restTalk || (!moves.has('endure') && !moves.has('substitute'))};\r\n\t\tcase 'endure':\r\n\t\t\treturn {cull: movePool.includes('destinybond')};\r\n\t\tcase 'extremespeed': case 'raindance': case 'sunnyday':\r\n\t\t\treturn {cull: counter.damagingMoves.size < 2 || moves.has('rest')};\r\n\t\tcase 'focuspunch':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(counter.damagingMoves.size < 2 || moves.has('rest') || counter.setupType && !moves.has('spore')) ||\r\n\t\t\t\t(!moves.has('substitute') && (counter.get('Physical') < 4 || moves.has('fakeout'))) ||\r\n\t\t\t\t// Breloom likes to have coverage\r\n\t\t\t\t(species.id === 'breloom' && (moves.has('machpunch') || moves.has('skyuppercut')))\r\n\t\t\t)};\r\n\t\tcase 'moonlight':\r\n\t\t\treturn {cull: moves.has('wish') || moves.has('protect')};\r\n\t\tcase 'perishsong':\r\n\t\t\treturn {cull: !moves.has('meanlook') && !moves.has('spiderweb')};\r\n\t\tcase 'protect':\r\n\t\t\treturn {cull: !abilities.has('Speed Boost') && ['perishsong', 'toxic', 'wish'].every(m => !moves.has(m))};\r\n\t\tcase 'refresh':\r\n\t\t\treturn {cull: !counter.setupType};\r\n\t\tcase 'rest':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmovePool.includes('sleeptalk') ||\r\n\t\t\t\t(!moves.has('sleeptalk') && (!!counter.get('recovery') || movePool.includes('curse')))\r\n\t\t\t)};\r\n\t\tcase 'solarbeam':\r\n\t\t\tif (movePool.length > 1) {\r\n\t\t\t\tconst sunnyday = movePool.indexOf('sunnyday');\r\n\t\t\t\tif (sunnyday >= 0) this.fastPop(movePool, sunnyday);\r\n\t\t\t}\r\n\t\t\treturn {cull: !moves.has('sunnyday')};\r\n\r\n\t\t// Bad after setup\r\n\t\tcase 'aromatherapy': case 'healbell':\r\n\t\t\treturn {cull: moves.has('rest') || !!teamDetails.statusCure};\r\n\t\tcase 'confuseray':\r\n\t\t\treturn {cull: !!counter.setupType || restTalk};\r\n\t\tcase 'counter': case 'mirrorcoat':\r\n\t\t\treturn {cull: !!counter.setupType || ['rest', 'substitute', 'toxic'].some(m => moves.has(m))};\r\n\t\tcase 'destinybond':\r\n\t\t\treturn {cull: !!counter.setupType || moves.has('explosion') || moves.has('selfdestruct')};\r\n\t\tcase 'doubleedge': case 'facade': case 'fakeout': case 'waterspout':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t(!types.has(move.type) && counter.get('Status') >= 1) ||\r\n\t\t\t\t(move.id === 'doubleedge' && moves.has('return'))\r\n\t\t\t)};\r\n\t\tcase 'encore': case 'painsplit': case 'recover': case 'yawn':\r\n\t\t\treturn {cull: restTalk};\r\n\t\tcase 'explosion': case 'machpunch': case 'selfdestruct':\r\n\t\t\t// Snorlax doesn't want to roll selfdestruct as its only STAB move\r\n\t\t\tconst snorlaxCase = species.id === 'snorlax' && !moves.has('return') && !moves.has('bodyslam');\r\n\t\t\treturn {cull: snorlaxCase || moves.has('rest') || moves.has('substitute') || !!counter.get('recovery')};\r\n\t\tcase 'haze':\r\n\t\t\treturn {cull: !!counter.setupType || moves.has('raindance') || restTalk};\r\n\t\tcase 'icywind': case 'pursuit': case 'superpower': case 'transform':\r\n\t\t\treturn {cull: !!counter.setupType || moves.has('rest')};\r\n\t\tcase 'leechseed':\r\n\t\t\treturn {cull: !!counter.setupType || moves.has('explosion')};\r\n\t\tcase 'stunspore':\r\n\t\t\treturn {cull: moves.has('sunnyday') || moves.has('toxic')};\r\n\t\tcase 'lightscreen':\r\n\t\t\treturn {cull: !!counter.setupType || !!counter.get('speedsetup')};\r\n\t\tcase 'meanlook': case 'spiderweb':\r\n\t\t\treturn {cull: !!counter.get('speedsetup') || (!moves.has('batonpass') && !moves.has('perishsong'))};\r\n\t\tcase 'morningsun':\r\n\t\t\treturn {cull: counter.get('speedsetup') >= 1};\r\n\t\tcase 'quickattack':\r\n\t\t\treturn {cull: (\r\n\t\t\t\t!!counter.get('speedsetup') ||\r\n\t\t\t\tmoves.has('substitute') ||\r\n\t\t\t\t(!types.has('Normal') && !!counter.get('Status'))\r\n\t\t\t)};\r\n\t\tcase 'rapidspin':\r\n\t\t\treturn {cull: !!counter.setupType || moves.has('rest') || !!teamDetails.rapidSpin};\r\n\t\tcase 'reflect':\r\n\t\t\treturn {cull: !!counter.setupType || !!counter.get('speedsetup')};\r\n\t\tcase 'roar': case 'whirlwind':\r\n\t\t\treturn {cull: moves.has('sleeptalk') || moves.has('rest')};\r\n\t\tcase 'seismictoss':\r\n\t\t\treturn {cull: !!counter.setupType || moves.has('thunderbolt')};\r\n\t\tcase 'spikes':\r\n\t\t\treturn {cull: !!counter.setupType || moves.has('substitute') || restTalk || !!teamDetails.spikes};\r\n\t\tcase 'substitute':\r\n\t\t\tconst restOrDD = moves.has('rest') || (moves.has('dragondance') && !moves.has('bellydrum'));\r\n\t\t\t// This cull condition otherwise causes mono-solarbeam Entei\r\n\t\t\treturn {cull: restOrDD || (species.id !== 'entei' && !moves.has('batonpass') && movePool.includes('calmmind'))};\r\n\t\tcase 'thunderwave':\r\n\t\t\treturn {cull: !!counter.setupType || moves.has('bodyslam') ||\r\n\t\t\t\tmoves.has('substitute') && movePool.includes('toxic') || restTalk};\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!!counter.get('speedsetup') ||\r\n\t\t\t\t['endure', 'focuspunch', 'raindance', 'yawn', 'hypnosis'].some(m => moves.has(m))\r\n\t\t\t)};\r\n\t\tcase 'trick':\r\n\t\t\treturn {cull: counter.get('Status') > 1};\r\n\t\tcase 'willowisp':\r\n\t\t\treturn {cull: !!counter.setupType || moves.has('hypnosis') || moves.has('toxic')};\r\n\r\n\t\t// Bit redundant to have both\r\n\t\tcase 'bodyslam':\r\n\t\t\treturn {cull: moves.has('return') && !!counter.get('Status')};\r\n\t\tcase 'headbutt':\r\n\t\t\treturn {cull: !moves.has('bodyslam') && !moves.has('thunderwave')};\r\n\t\tcase 'return':\r\n\t\t\treturn {cull: (\r\n\t\t\t\tmoves.has('endure') ||\r\n\t\t\t\t(moves.has('substitute') && moves.has('flail')) ||\r\n\t\t\t\t(moves.has('bodyslam') && !counter.get('Status'))\r\n\t\t\t)};\r\n\t\tcase 'fireblast':\r\n\t\t\treturn {cull: moves.has('flamethrower') && !!counter.get('Status')};\r\n\t\tcase 'flamethrower':\r\n\t\t\treturn {cull: moves.has('fireblast') && !counter.get('Status')};\r\n\t\tcase 'overheat':\r\n\t\t\treturn {cull: moves.has('flamethrower') || moves.has('substitute')};\r\n\t\tcase 'hydropump':\r\n\t\t\treturn {cull: moves.has('surf') && !!counter.get('Status')};\r\n\t\tcase 'surf':\r\n\t\t\treturn {cull: moves.has('hydropump') && !counter.get('Status')};\r\n\t\tcase 'gigadrain':\r\n\t\t\treturn {cull: moves.has('morningsun') || moves.has('toxic')};\r\n\t\tcase 'hiddenpower':\r\n\t\t\tconst stabCondition = types.has(move.type) && counter.get(move.type) > 1 && (\r\n\t\t\t\t(moves.has('substitute') && !counter.setupType && !moves.has('toxic')) ||\r\n\t\t\t\t// This otherwise causes STABless meganium\r\n\t\t\t\t(species.id !== 'meganium' && moves.has('toxic') && !moves.has('substitute')) ||\r\n\t\t\t\trestTalk\r\n\t\t\t);\r\n\t\t\treturn {cull: stabCondition || (move.type === 'Grass' && moves.has('sunnyday') && moves.has('solarbeam'))};\r\n\t\tcase 'brickbreak': case 'crosschop': case 'skyuppercut':\r\n\t\t\treturn {cull: moves.has('substitute') && (moves.has('focuspunch') || movePool.includes('focuspunch'))};\r\n\t\tcase 'earthquake':\r\n\t\t\treturn {cull: moves.has('bonemerang')};\r\n\t\t}\r\n\r\n\t\treturn {cull: false};\r\n\t}\r\n\r\n\r\n\tgetItem(\r\n\t\tability: string,\r\n\t\ttypes: Set,\r\n\t\tmoves: Set,\r\n\t\tcounter: MoveCounter,\r\n\t\tspecies: Species\r\n\t) {\r\n\t\t// First, the high-priority items\r\n\t\tif (species.name === 'Ditto') return this.sample(['Metal Powder', 'Quick Claw']);\r\n\t\tif (species.name === 'Farfetch\\u2019d') return 'Stick';\r\n\t\tif (species.name === 'Marowak') return 'Thick Club';\r\n\t\tif (species.name === 'Pikachu') return 'Light Ball';\r\n\t\tif (species.name === 'Shedinja') return 'Lum Berry';\r\n\t\tif (species.name === 'Unown') return 'Twisted Spoon';\r\n\r\n\t\tif (moves.has('trick')) return 'Choice Band';\r\n\t\tif (moves.has('rest') && !moves.has('sleeptalk') && !['Early Bird', 'Natural Cure', 'Shed Skin'].includes(ability)) {\r\n\t\t\treturn 'Chesto Berry';\r\n\t\t}\r\n\r\n\t\t// Medium priority items\r\n\t\tif (moves.has('dragondance') && ability !== 'Natural Cure') return 'Lum Berry';\r\n\t\tif ((moves.has('bellydrum') && counter.get('Physical') - counter.get('priority') > 1) || (\r\n\t\t\t((moves.has('swordsdance') && counter.get('Status') < 2) || (moves.has('bulkup') && moves.has('substitute'))) &&\r\n\t\t\t!counter.get('priority') &&\r\n\t\t\tspecies.baseStats.spe >= 60 && species.baseStats.spe <= 95\r\n\t\t)) {\r\n\t\t\treturn 'Salac Berry';\r\n\t\t}\r\n\t\tif (moves.has('endure') || (\r\n\t\t\tmoves.has('substitute') &&\r\n\t\t\t['bellydrum', 'endeavor', 'flail', 'reversal'].some(m => moves.has(m))\r\n\t\t)) {\r\n\t\t\treturn (\r\n\t\t\t\tspecies.baseStats.spe <= 100 && ability !== 'Speed Boost' && !counter.get('speedsetup') && !moves.has('focuspunch')\r\n\t\t\t) ? 'Salac Berry' : 'Liechi Berry';\r\n\t\t}\r\n\t\tif (moves.has('substitute') && counter.get('Physical') >= 3 && species.baseStats.spe >= 120) return 'Liechi Berry';\r\n\t\tif ((moves.has('substitute') || moves.has('raindance')) && counter.get('Special') >= 3) return 'Petaya Berry';\r\n\t\tif (counter.get('Physical') >= 4 && !moves.has('fakeout')) return 'Choice Band';\r\n\t\tif (counter.get('Physical') >= 3 && !moves.has('rapidspin') && (\r\n\t\t\t['fireblast', 'icebeam', 'overheat'].some(m => moves.has(m)) ||\r\n\t\t\tArray.from(moves).some(m => {\r\n\t\t\t\tconst moveData = this.dex.moves.get(m);\r\n\t\t\t\treturn moveData.category === 'Special' && types.has(moveData.type);\r\n\t\t\t})\r\n\t\t)) {\r\n\t\t\treturn 'Choice Band';\r\n\t\t}\r\n\t\tif (moves.has('psychoboost')) return 'White Herb';\r\n\r\n\t\t// Default to Leftovers\r\n\t\treturn 'Leftovers';\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) {\r\n\t\tswitch (ability) {\r\n\t\tcase 'Chlorophyll':\r\n\t\t\treturn !moves.has('sunnyday') && !teamDetails['sun'];\r\n\t\tcase 'Compound Eyes':\r\n\t\t\treturn !counter.get('inaccurate');\r\n\t\tcase 'Hustle':\r\n\t\t\treturn counter.get('Physical') < 2;\r\n\t\tcase 'Lightning Rod':\r\n\t\t\treturn species.types.includes('Ground');\r\n\t\tcase 'Overgrow':\r\n\t\t\treturn !counter.get('Grass');\r\n\t\tcase 'Rock Head':\r\n\t\t\treturn !counter.get('recoil');\r\n\t\tcase 'Sand Veil':\r\n\t\t\treturn !teamDetails['sand'];\r\n\t\tcase 'Serene Grace':\r\n\t\t\treturn species.id === 'blissey';\r\n\t\tcase 'Sturdy':\r\n\t\t\t// Sturdy is bad.\r\n\t\t\treturn true;\r\n\t\tcase 'Swift Swim':\r\n\t\t\treturn !moves.has('raindance') && !teamDetails['rain'];\r\n\t\tcase 'Swarm':\r\n\t\t\treturn !counter.get('Bug');\r\n\t\tcase 'Torrent':\r\n\t\t\treturn !counter.get('Water');\r\n\t\tcase 'Water Absorb':\r\n\t\t\treturn abilities.has('Swift Swim');\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\trandomSet(species: string | Species, teamDetails: RandomTeamsTypes.TeamDetails = {}): RandomTeamsTypes.RandomSet {\r\n\t\tspecies = this.dex.species.get(species);\r\n\t\tlet forme = species.name;\r\n\r\n\t\tconst data = this.randomData[species.id];\r\n\r\n\t\tif (typeof species.battleOnly === 'string') forme = species.battleOnly;\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\tconst moves = new Set();\r\n\t\tlet ability = '';\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\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\tconst types = new Set(species.types);\r\n\r\n\t\tconst abilities = new Set(Object.values(species.abilities));\r\n\r\n\t\tlet counter: MoveCounter;\r\n\t\t// We use a special variable to track Hidden Power\r\n\t\t// so that we can check for all Hidden Powers at once\r\n\t\tlet hasHiddenPower = false;\r\n\r\n\t\tdo {\r\n\t\t\t// Choose next 4 moves from learnset/viable moves and add them to moves list:\r\n\t\t\twhile (moves.size < this.maxMoveCount && movePool.length) {\r\n\t\t\t\tconst moveid = this.sampleNoReplace(movePool);\r\n\t\t\t\tif (moveid.startsWith('hiddenpower')) {\r\n\t\t\t\t\tavailableHP--;\r\n\t\t\t\t\tif (hasHiddenPower) continue;\r\n\t\t\t\t\thasHiddenPower = true;\r\n\t\t\t\t}\r\n\t\t\t\tmoves.add(moveid);\r\n\t\t\t}\r\n\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(move, types, moves, abilities, counter, movePool, teamDetails, species);\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(counter.setupType === 'Physical' && move.category === 'Special' && !types.has(move.type) && move.type !== 'Fire') ||\r\n\t\t\t\t\t(counter.setupType === 'Special' && move.category === 'Physical' && moveid !== 'superpower')\r\n\t\t\t\t) {\r\n\t\t\t\t\tcull = true;\r\n\t\t\t\t}\r\n\t\t\t\tconst moveIsRejectable = (\r\n\t\t\t\t\t!move.weather &&\r\n\t\t\t\t\t(move.category !== 'Status' || !move.flags.heal) &&\r\n\t\t\t\t\t(counter.setupType || !move.stallingMove) &&\r\n\t\t\t\t\t// These moves cannot be rejected in favor of a forced move\r\n\t\t\t\t\t!['batonpass', 'sleeptalk', 'solarbeam', 'substitute', 'sunnyday'].includes(moveid) &&\r\n\t\t\t\t\t(move.category === 'Status' || !types.has(move.type) || (move.basePower && move.basePower < 40 && !move.multihit))\r\n\t\t\t\t);\r\n\t\t\t\t// Pokemon should usually have at least one STAB move\r\n\t\t\t\tconst requiresStab = (\r\n\t\t\t\t\t!counter.get('stab') &&\r\n\t\t\t\t\t!moves.has('seismictoss') && !moves.has('nightshade') &&\r\n\t\t\t\t\tspecies.id !== 'castform' && species.id !== 'umbreon' &&\r\n\t\t\t\t\t// If a Flying-type has Psychic, it doesn't need STAB\r\n\t\t\t\t\t!(moves.has('psychic') && types.has('Flying')) &&\r\n\t\t\t\t\t!(types.has('Ghost') && species.baseStats.spa > species.baseStats.atk) &&\r\n\t\t\t\t\t!(\r\n\t\t\t\t\t\t// With Calm Mind, Lugia and pure Normal-types are fine without STAB\r\n\t\t\t\t\t\tcounter.setupType === 'Special' && (\r\n\t\t\t\t\t\t\tspecies.id === 'lugia' ||\r\n\t\t\t\t\t\t\t(types.has('Normal') && species.types.length < 2)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t) &&\r\n\t\t\t\t\t!(\r\n\t\t\t\t\t\t// With Swords Dance, Dark-types and pure Water-types are fine without STAB\r\n\t\t\t\t\t\tcounter.setupType === 'Physical' &&\r\n\t\t\t\t\t\t((types.has('Water') && species.types.length < 2) || types.has('Dark'))\r\n\t\t\t\t\t) &&\r\n\t\t\t\t\tcounter.get('physicalpool') + counter.get('specialpool') > 0\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\tif (!cull && !isSetup && moveIsRejectable) {\r\n\t\t\t\t\t// There may be more important moves that this Pokemon needs\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\trequiresStab ||\r\n\t\t\t\t\t\t(counter.setupType && counter.get(counter.setupType) < 2 && !moves.has('refresh')) ||\r\n\t\t\t\t\t\t(moves.has('substitute') && movePool.includes('morningsun')) ||\r\n\t\t\t\t\t\t['meteormash', 'spore', 'recover'].some(m => movePool.includes(m))\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\t// Pokemon should have moves that benefit their typing and their other moves\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 m of moves) {\r\n\t\t\t\t\t\t\tif (runEnforcementChecker(m)) cull = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Sleep Talk shouldn't be selected without Rest\r\n\t\t\t\tif (moveid === 'rest' && cull) {\r\n\t\t\t\t\tconst sleeptalk = movePool.indexOf('sleeptalk');\r\n\t\t\t\t\tif (sleeptalk >= 0) {\r\n\t\t\t\t\t\tif (movePool.length < 2) {\r\n\t\t\t\t\t\t\tcull = false;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.fastPop(movePool, sleeptalk);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Remove rejected moves from the move list\r\n\t\t\t\tconst moveIsHP = moveid.startsWith('hiddenpower');\r\n\t\t\t\tif (\r\n\t\t\t\t\tcull &&\r\n\t\t\t\t\t(movePool.length - availableHP || availableHP && (moveIsHP || !hasHiddenPower))\r\n\t\t\t\t) {\r\n\t\t\t\t\tif (move.category !== 'Status' && !move.damage && (!moveIsHP || !availableHP)) {\r\n\t\t\t\t\t\trejectedPool.push(moveid);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (moveIsHP) hasHiddenPower = false;\r\n\t\t\t\t\tmoves.delete(moveid);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (cull && rejectedPool.length) {\r\n\t\t\t\t\tif (moveIsHP) hasHiddenPower = false;\r\n\t\t\t\t\tmoves.delete(moveid);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} while (moves.size < this.maxMoveCount && (movePool.length || rejectedPool.length));\r\n\r\n\t\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')) hpType = move.substr(11);\r\n\t\t\t}\r\n\t\t\tif (!hpType) throw new Error(`hasHiddenPower is true, but no Hidden Power move was found.`);\r\n\t\t\tconst HPivs = 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\tconst abilityData = Array.from(abilities).map(a => this.dex.abilities.get(a)).filter(a => a.gen === 3);\r\n\t\tUtils.sortBy(abilityData, abil => -abil.rating);\r\n\t\tlet ability0 = abilityData[0];\r\n\t\tlet ability1 = abilityData[1];\r\n\t\tif (abilityData[1]) {\r\n\t\t\tif (ability0.rating <= ability1.rating && this.randomChance(1, 2)) {\r\n\t\t\t\t[ability0, ability1] = [ability1, ability0];\r\n\t\t\t} else if (ability0.rating - 0.6 <= ability1.rating && this.randomChance(2, 3)) {\r\n\t\t\t\t[ability0, ability1] = [ability1, ability0];\r\n\t\t\t}\r\n\t\t\tability = ability0.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 === ability0.name && ability1.rating > 1) {\r\n\t\t\t\t\tability = ability1.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\t\t} else {\r\n\t\t\tability = abilityData[0].name;\r\n\t\t}\r\n\r\n\t\tconst item = this.getItem(ability, types, moves, counter, species);\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\tlet hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);\r\n\t\tif (moves.has('substitute') && ['endeavor', 'flail', 'reversal'].some(m => moves.has(m))) {\r\n\t\t\t// Endeavor/Flail/Reversal users should be able to use four Substitutes\r\n\t\t\tif (hp % 4 === 0) evs.hp -= 4;\r\n\t\t} else if (moves.has('substitute') && (item === 'Salac Berry' || item === 'Petaya Berry' || item === 'Liechi Berry')) {\r\n\t\t\t// Other pinch berry holders should have berries activate after three Substitutes\r\n\t\t\twhile (hp % 4 > 0) {\r\n\t\t\t\tevs.hp -= 4;\r\n\t\t\t\thp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Minimize confusion damage\r\n\t\tif (!counter.get('Physical') && !moves.has('transform')) {\r\n\t\t\tevs.atk = 0;\r\n\t\t\tivs.atk = hasHiddenPower ? ivs.atk - 28 : 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\trandomTeam() {\r\n\t\tthis.enforceNoDirectCustomBanlistChanges();\r\n\r\n\t\tconst seed = this.prng.seed;\r\n\t\tconst ruleTable = this.dex.formats.getRuleTable(this.format);\r\n\t\tconst pokemon: RandomTeamsTypes.RandomSet[] = [];\r\n\r\n\t\t// For Monotype\r\n\t\tconst isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');\r\n\t\tconst typePool = this.dex.types.names();\r\n\t\tconst type = this.forceMonotype || this.sample(typePool);\r\n\r\n\t\tconst baseFormes: {[k: string]: number} = {};\r\n\t\tconst tierCount: {[k: string]: number} = {};\r\n\t\tconst typeCount: {[k: string]: number} = {};\r\n\t\tconst typeComboCount: {[k: string]: number} = {};\r\n\t\tconst typeWeaknesses: {[k: string]: number} = {};\r\n\t\tconst teamDetails: RandomTeamsTypes.TeamDetails = {};\r\n\r\n\t\tconst pokemonPool = this.getPokemonPool(type, pokemon, isMonotype);\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 || !this.randomData[species.id]?.moves) continue;\r\n\t\t\t// Limit to one of each species (Species Clause)\r\n\t\t\tif (baseFormes[species.baseSpecies]) continue;\r\n\r\n\t\t\t// Limit to one Wobbuffet per battle (not just per team)\r\n\t\t\tif (species.name === 'Wobbuffet' && this.battleHasWobbuffet) continue;\r\n\t\t\t// Limit to one Ditto per battle in Gen 2\r\n\t\t\tif (this.dex.gen < 3 && species.name === 'Ditto' && this.battleHasDitto) continue;\r\n\r\n\t\t\tconst tier = species.tier;\r\n\t\t\tconst types = species.types;\r\n\t\t\tconst typeCombo = types.slice().sort().join();\r\n\r\n\t\t\tif (!isMonotype && !this.forceMonotype) {\r\n\t\t\t\t// Dynamically scale limits for different team sizes. The default and minimum value is 1.\r\n\t\t\t\tconst limitFactor = Math.round(this.maxTeamSize / 6) || 1;\r\n\r\n\t\t\t\t// Limit two Pokemon per tier\r\n\t\t\t\tif (tierCount[tier] >= 2 * limitFactor) continue;\r\n\r\n\t\t\t\t// Limit two of any type\r\n\t\t\t\tlet skip = false;\r\n\t\t\t\tfor (const typeName of types) {\r\n\t\t\t\t\tif (typeCount[typeName] >= 2 * limitFactor) {\r\n\t\t\t\t\t\tskip = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (skip) continue;\r\n\r\n\t\t\t\t// Limit three weak to any type\r\n\t\t\t\tfor (const typeName of this.dex.types.names()) {\r\n\t\t\t\t\t// it's weak to the type\r\n\t\t\t\t\tif (this.dex.getEffectiveness(typeName, species) > 0) {\r\n\t\t\t\t\t\tif (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;\r\n\t\t\t\t\t\tif (typeWeaknesses[typeName] >= 3 * limitFactor) {\r\n\t\t\t\t\t\t\tskip = true;\r\n\t\t\t\t\t\t\tbreak;\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\tif (skip) continue;\r\n\r\n\t\t\t\t// Limit one of any type combination\r\n\t\t\t\tif (!this.forceMonotype && typeComboCount[typeCombo] >= 1 * limitFactor) continue;\r\n\t\t\t}\r\n\r\n\t\t\t// Okay, the set passes, add it to our team\r\n\t\t\tconst set = this.randomSet(species, teamDetails);\r\n\t\t\tpokemon.push(set);\r\n\r\n\t\t\t// Now that our Pokemon has passed all checks, we can increment our counters\r\n\t\t\tbaseFormes[species.baseSpecies] = 1;\r\n\r\n\t\t\t// Increment tier counter\r\n\t\t\tif (tierCount[tier]) {\r\n\t\t\t\ttierCount[tier]++;\r\n\t\t\t} else {\r\n\t\t\t\ttierCount[tier] = 1;\r\n\t\t\t}\r\n\r\n\t\t\t// Increment type counters\r\n\t\t\tfor (const typeName of types) {\r\n\t\t\t\tif (typeName in typeCount) {\r\n\t\t\t\t\ttypeCount[typeName]++;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttypeCount[typeName] = 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (typeCombo in typeComboCount) {\r\n\t\t\t\ttypeComboCount[typeCombo]++;\r\n\t\t\t} else {\r\n\t\t\t\ttypeComboCount[typeCombo] = 1;\r\n\t\t\t}\r\n\r\n\t\t\t// Increment weakness counter\r\n\t\t\tfor (const typeName of this.dex.types.names()) {\r\n\t\t\t\t// it's weak to the type\r\n\t\t\t\tif (this.dex.getEffectiveness(typeName, species) > 0) {\r\n\t\t\t\t\ttypeWeaknesses[typeName]++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Updateeam details\r\n\t\t\tif (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;\r\n\t\t\tif (set.ability === 'Sand Stream') teamDetails.sand = 1;\r\n\t\t\tif (set.moves.includes('spikes')) teamDetails.spikes = 1;\r\n\t\t\tif (set.moves.includes('rapidspin')) teamDetails.rapidSpin = 1;\r\n\t\t\tif (set.moves.includes('aromatherapy') || set.moves.includes('healbell')) teamDetails.statusCure = 1;\r\n\r\n\t\t\t// In Gen 3, Shadow Tag users can prevent each other from switching out, possibly causing and endless battle or at least causing a long stall war\r\n\t\t\t// To prevent this, we prevent more than one Wobbuffet in a single battle.\r\n\t\t\tif (set.ability === 'Shadow Tag') this.battleHasWobbuffet = true;\r\n\t\t\tif (species.id === 'ditto') this.battleHasDitto = true;\r\n\t\t}\r\n\r\n\t\tif (pokemon.length < this.maxTeamSize && !isMonotype && !this.forceMonotype && pokemon.length < 12) {\r\n\t\t\tthrow new Error(`Could not build a random team for ${this.format} (seed=${seed})`);\r\n\t\t}\r\n\r\n\t\treturn pokemon;\r\n\t}\r\n}\r\n\r\nexport default RandomGen3Teams;\r\n"], "mappings": "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", "names": ["RandomGen4Teams"] }