Spaces:
Running
Running
; | |
var __defProp = Object.defineProperty; | |
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | |
var __getOwnPropNames = Object.getOwnPropertyNames; | |
var __hasOwnProp = Object.prototype.hasOwnProperty; | |
var __export = (target, all) => { | |
for (var name in all) | |
__defProp(target, name, { get: all[name], enumerable: true }); | |
}; | |
var __copyProps = (to, from, except, desc) => { | |
if (from && typeof from === "object" || typeof from === "function") { | |
for (let key of __getOwnPropNames(from)) | |
if (!__hasOwnProp.call(to, key) && key !== except) | |
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | |
} | |
return to; | |
}; | |
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | |
var teams_exports = {}; | |
__export(teams_exports, { | |
RandomBDSPTeams: () => RandomBDSPTeams, | |
default: () => teams_default | |
}); | |
module.exports = __toCommonJS(teams_exports); | |
var import_teams = require("../gen8/teams"); | |
class RandomBDSPTeams extends import_teams.RandomGen8Teams { | |
constructor(format, prng) { | |
super(format, prng); | |
this.randomData = require("./data.json"); | |
this.noStab = [...this.noStab, "gigaimpact"]; | |
} | |
getHighPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles) { | |
if (moves.has("acrobatics")) | |
return ""; | |
if (moves.has("solarbeam") && !(moves.has("sunnyday") || ability === "Drought" || teamDetails.sun)) | |
return "Power Herb"; | |
if (moves.has("shellsmash")) | |
return "White Herb"; | |
if (species.name === "Farfetch\u2019d") | |
return "Leek"; | |
if (species.name === "Latios" || species.name === "Latias") | |
return "Soul Dew"; | |
if (species.name === "Lopunny") | |
return "Toxic Orb"; | |
if (species.baseSpecies === "Marowak") | |
return "Thick Club"; | |
if (species.baseSpecies === "Pikachu") | |
return "Light Ball"; | |
if (species.name === "Shedinja" || species.name === "Smeargle") | |
return "Focus Sash"; | |
if (species.name === "Shuckle" && moves.has("stickyweb")) | |
return "Mental Herb"; | |
if (ability !== "Sniper" && (ability === "Super Luck" || moves.has("focusenergy"))) | |
return "Scope Lens"; | |
if (species.name === "Wobbuffet" && moves.has("destinybond")) | |
return "Custap Berry"; | |
if (species.name === "Scyther" && counter.damagingMoves.size > 3) | |
return "Choice Band"; | |
if ((moves.has("bellydrum") || moves.has("tailglow")) && moves.has("substitute")) | |
return "Salac Berry"; | |
if (species.name === "Wobbuffet" || ability === "Ripen" || ability === "Harvest") | |
return "Sitrus Berry"; | |
if (ability === "Gluttony") | |
return this.sample(["Aguav", "Figy", "Iapapa", "Mago", "Wiki"]) + " Berry"; | |
if (ability === "Imposter") | |
return "Choice Scarf"; | |
if (ability === "Guts" && counter.get("Physical") > 2) { | |
return types.has("Fire") ? "Toxic Orb" : "Flame Orb"; | |
} | |
if (ability === "Quick Feet" && moves.has("facade")) | |
return "Toxic Orb"; | |
if (ability === "Toxic Boost" || ability === "Poison Heal") | |
return "Toxic Orb"; | |
if (ability === "Magic Guard" && counter.damagingMoves.size > 1) { | |
return moves.has("counter") ? "Focus Sash" : "Life Orb"; | |
} | |
if (ability === "Sheer Force" && counter.get("sheerforce")) | |
return "Life Orb"; | |
if (ability === "Unburden") | |
return moves.has("closecombat") || moves.has("curse") ? "White Herb" : "Sitrus Berry"; | |
if (!moves.has("fakeout") && (moves.has("trick") || moves.has("switcheroo"))) { | |
if (species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && !counter.get("priority")) { | |
return "Choice Scarf"; | |
} else { | |
return counter.get("Physical") > counter.get("Special") ? "Choice Band" : "Choice Specs"; | |
} | |
} | |
if (moves.has("auroraveil") || moves.has("lightscreen") && moves.has("reflect")) | |
return "Light Clay"; | |
const statusCuringAbility = ability === "Shed Skin" || ability === "Natural Cure" || ability === "Hydration" && moves.has("raindance"); | |
const restWithoutSleepTalk = moves.has("rest") && !moves.has("sleeptalk"); | |
if (restWithoutSleepTalk && !statusCuringAbility) | |
return "Chesto Berry"; | |
if (moves.has("bellydrum")) | |
return "Sitrus Berry"; | |
} | |
getMediumPriorityItem(ability, moves, counter, species, isLead, isDoubles) { | |
if (moves.size === 1) { | |
switch (this.dex.moves.get([...moves][0]).category) { | |
case "Status": | |
return "Choice Scarf"; | |
case "Physical": | |
return "Choice Band"; | |
case "Special": | |
return "Choice Specs"; | |
} | |
} | |
const choiceOK = ["fakeout", "flamecharge", "rapidspin"].every((m) => !moves.has(m)); | |
if (counter.get("Physical") >= 4 && ability !== "Serene Grace" && choiceOK) { | |
const scarfReqs = (species.baseStats.atk >= 100 || ability === "Huge Power") && species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && ability !== "Speed Boost" && !counter.get("priority") && ["bounce", "aerialace"].every((m) => !moves.has(m)); | |
return scarfReqs && this.randomChance(2, 3) ? "Choice Scarf" : "Choice Band"; | |
} | |
if (moves.has("sunnyday")) | |
return "Heat Rock"; | |
if (counter.get("Special") >= 4 || counter.get("Special") >= 3 && moves.has("uturn")) { | |
const scarfReqs = species.baseStats.spa >= 100 && species.baseStats.spe >= 60 && species.baseStats.spe <= 108 && ability !== "Tinted Lens" && !counter.get("Physical"); | |
return scarfReqs && this.randomChance(2, 3) ? "Choice Scarf" : "Choice Specs"; | |
} | |
if (counter.get("Physical") >= 4 && choiceOK) | |
return "Choice Band"; | |
if ((counter.get("Physical") >= 3 && moves.has("defog") || counter.get("Special") >= 3 && moves.has("healingwish")) && !counter.get("priority") && !moves.has("uturn")) | |
return "Choice Scarf"; | |
if (moves.has("raindance") || moves.has("sunnyday") || ability === "Speed Boost" && !counter.get("hazards")) | |
return "Life Orb"; | |
if (["clearsmog", "curse", "haze", "healbell", "protect", "sleeptalk"].some((m) => moves.has(m)) && ability === "Moody") | |
return "Leftovers"; | |
} | |
getLowPriorityItem(ability, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles) { | |
const defensiveStatTotal = species.baseStats.hp + species.baseStats.def + species.baseStats.spd; | |
if (isLead && ability !== "Sturdy" && !moves.has("substitute") && !counter.get("drain") && !counter.get("recoil") && !counter.get("recovery") && (defensiveStatTotal <= 250 && counter.get("hazards") || defensiveStatTotal <= 210)) | |
return "Focus Sash"; | |
if (counter.damagingMoves.size >= 3 && !counter.get("damage") && ability !== "Sturdy" && (species.baseStats.spe >= 90 || !moves.has("voltswitch")) && ["foulplay", "rapidspin", "substitute", "uturn"].every((m) => !moves.has(m)) && (counter.get("speedsetup") || counter.get("drain") && moves.has("roost") || moves.has("trickroom") || moves.has("psystrike") || species.baseStats.spe > 40 && defensiveStatTotal < 275)) | |
return "Life Orb"; | |
if (counter.damagingMoves.size >= 4 && !counter.get("Dragon") && !counter.get("Normal")) { | |
return "Expert Belt"; | |
} | |
if (!moves.has("substitute") && (moves.has("dragondance") || moves.has("swordsdance")) && (moves.has("outrage") || ["Bug", "Fire", "Ground", "Normal", "Poison"].every((type) => !types.has(type)) && ability !== "Storm Drain")) | |
return "Lum Berry"; | |
} | |
shouldCullMove(move, types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles) { | |
if (isDoubles && species.baseStats.def >= 140 && movePool.includes("bodypress")) { | |
return { cull: true }; | |
} | |
if (species.id === "entei" && movePool.includes("extremespeed")) { | |
return { cull: true }; | |
} | |
if (movePool.includes("spore") && move.id !== "substitute") { | |
return { cull: true }; | |
} | |
const hasRestTalk = moves.has("rest") && moves.has("sleeptalk"); | |
switch (move.id) { | |
case "fly": | |
return { cull: !types.has(move.type) && !counter.setupType && !!counter.get("Status") }; | |
case "healbell": | |
return { cull: movePool.includes("protect") || movePool.includes("wish") }; | |
case "fireblast": | |
return { cull: abilities.includes("Serene Grace") && (!moves.has("trick") || counter.get("Status") > 1) }; | |
case "firepunch": | |
return { cull: moves.has("earthquake") && movePool.includes("substitute") }; | |
case "flamecharge": | |
return { cull: movePool.includes("swordsdance") }; | |
case "focuspunch": | |
return { cull: !moves.has("substitute") }; | |
case "rest": | |
const bulkySetup = !moves.has("sleeptalk") && ["bulkup", "calmmind", "coil", "curse"].some((m) => movePool.includes(m)); | |
return { cull: species.id !== "registeel" && (movePool.includes("sleeptalk") || bulkySetup) }; | |
case "sleeptalk": | |
if (species.id === "milotic") | |
return { cull: false }; | |
if (moves.has("stealthrock") || !moves.has("rest")) | |
return { cull: true }; | |
if (movePool.length > 1 && !abilities.includes("Contrary")) { | |
const rest = movePool.indexOf("rest"); | |
if (rest >= 0) | |
this.fastPop(movePool, rest); | |
} | |
break; | |
case "storedpower": | |
return { cull: !counter.setupType }; | |
case "switcheroo": | |
case "trick": | |
return { cull: counter.get("Physical") + counter.get("Special") < 3 || moves.has("rapidspin") || moves.has("fakeout") }; | |
case "trickroom": | |
const webs = !!teamDetails.stickyWeb; | |
return { | |
cull: isLead || webs || !!counter.get("speedsetup") || counter.damagingMoves.size < 2 || movePool.includes("nastyplot") | |
}; | |
case "bellydrum": | |
case "bulkup": | |
case "coil": | |
case "curse": | |
case "dragondance": | |
case "honeclaws": | |
case "swordsdance": | |
if (counter.setupType !== "Physical") | |
return { cull: true }; | |
if (counter.get("Physical") + counter.get("physicalpool") < 2 && !hasRestTalk) | |
return { cull: true }; | |
if (move.id === "swordsdance" && moves.has("dragondance")) | |
return { cull: true }; | |
return { cull: false, isSetup: true }; | |
case "calmmind": | |
case "nastyplot": | |
if (counter.setupType !== "Special") | |
return { cull: true }; | |
if (counter.get("Special") + counter.get("specialpool") < 2 && !hasRestTalk && !(moves.has("wish") && moves.has("protect"))) | |
return { cull: true }; | |
if (moves.has("healpulse") || move.id === "calmmind" && moves.has("trickroom")) | |
return { cull: true }; | |
return { cull: false, isSetup: true }; | |
case "quiverdance": | |
return { cull: false, isSetup: true }; | |
case "shellsmash": | |
case "workup": | |
if (counter.setupType !== "Mixed") | |
return { cull: true }; | |
if (counter.damagingMoves.size + counter.get("physicalpool") + counter.get("specialpool") < 2) | |
return { cull: true }; | |
return { cull: false, isSetup: true }; | |
case "agility": | |
case "autotomize": | |
case "rockpolish": | |
if (counter.damagingMoves.size < 2 || moves.has("rest")) | |
return { cull: true }; | |
if (movePool.includes("calmmind") || movePool.includes("nastyplot")) | |
return { cull: true }; | |
return { cull: false, isSetup: !counter.setupType }; | |
case "counter": | |
case "reversal": | |
return { cull: !!counter.setupType }; | |
case "bulletpunch": | |
case "extremespeed": | |
case "rockblast": | |
return { cull: !!counter.get("speedsetup") || !isDoubles && moves.has("dragondance") || counter.damagingMoves.size < 2 }; | |
case "closecombat": | |
case "flashcannon": | |
const substituteCullCondition = moves.has("substitute") && !types.has("Fighting") || moves.has("toxic") && movePool.includes("substitute"); | |
const preferHJKOverCCCullCondition = move.id === "closecombat" && !counter.setupType && (moves.has("highjumpkick") || movePool.includes("highjumpkick")); | |
return { cull: substituteCullCondition || preferHJKOverCCCullCondition }; | |
case "defog": | |
return { cull: !!counter.setupType || ["healbell", "toxicspikes", "stealthrock", "spikes"].some((m) => moves.has(m)) || !!teamDetails.defog }; | |
case "fakeout": | |
return { cull: !!counter.setupType || ["protect", "rapidspin", "substitute", "uturn"].some((m) => moves.has(m)) }; | |
case "glare": | |
case "icywind": | |
case "tailwind": | |
case "waterspout": | |
return { cull: !!counter.setupType || !!counter.get("speedsetup") || moves.has("rest") }; | |
case "healingwish": | |
case "memento": | |
return { cull: !!counter.setupType || !!counter.get("recovery") || moves.has("substitute") || moves.has("uturn") }; | |
case "partingshot": | |
return { cull: !!counter.get("speedsetup") || moves.has("bulkup") || moves.has("uturn") }; | |
case "protect": | |
if (!isDoubles && (counter.setupType && !moves.has("wish") || moves.has("rest"))) | |
return { cull: true }; | |
if (!isDoubles && counter.get("Status") < 2 && ["Guts", "Quick Feet", "Speed Boost", "Moody"].every((m) => !abilities.includes(m))) | |
return { cull: true }; | |
if (movePool.includes("leechseed") || movePool.includes("toxic") && !moves.has("wish")) | |
return { cull: true }; | |
if (isDoubles && (["bellydrum", "fakeout", "shellsmash", "spore"].some((m) => movePool.includes(m)) || moves.has("tailwind") || moves.has("waterspout"))) | |
return { cull: true }; | |
return { cull: false }; | |
case "rapidspin": | |
const setup = ["curse", "nastyplot", "shellsmash"].some((m) => moves.has(m)); | |
return { cull: !!teamDetails.rapidSpin || setup || !!counter.setupType && counter.get("Fighting") >= 2 }; | |
case "roar": | |
return { cull: moves.has("shellsmash") }; | |
case "shadowsneak": | |
const sneakIncompatible = ["substitute", "trickroom", "toxic"].some((m) => moves.has(m)); | |
return { cull: hasRestTalk || sneakIncompatible || counter.setupType === "Special" }; | |
case "spikes": | |
return { cull: !!counter.setupType || !!teamDetails.spikes && teamDetails.spikes > 1 }; | |
case "stealthrock": | |
return { | |
cull: !!counter.setupType || !!counter.get("speedsetup") || !!teamDetails.stealthRock || ["rest", "substitute", "trickroom", "teleport"].some((m) => moves.has(m)) | |
}; | |
case "stickyweb": | |
return { cull: !!teamDetails.stickyWeb }; | |
case "taunt": | |
return { cull: moves.has("encore") || moves.has("nastyplot") || moves.has("swordsdance") }; | |
case "thunderwave": | |
case "voltswitch": | |
const cullInDoubles = isDoubles && (moves.has("electroweb") || moves.has("nuzzle")); | |
return { cull: !!counter.setupType || !!counter.get("speedsetup") || moves.has("shiftgear") || moves.has("raindance") || cullInDoubles }; | |
case "toxic": | |
return { cull: !!counter.setupType || ["sludgewave", "thunderwave", "willowisp"].some((m) => moves.has(m)) }; | |
case "toxicspikes": | |
return { cull: !!counter.setupType || !!teamDetails.toxicSpikes }; | |
case "uturn": | |
const bugSwordsDanceCase = types.has("Bug") && counter.get("recovery") && moves.has("swordsdance"); | |
return { cull: !!counter.get("speedsetup") || counter.setupType && !bugSwordsDanceCase || abilities.includes("Speed Boost") && moves.has("protect") || isDoubles && moves.has("leechlife") }; | |
case "explosion": | |
const otherMoves = ["curse", "stompingtantrum", "painsplit", "wish"].some((m) => moves.has(m)); | |
return { cull: !!counter.get("speedsetup") || !!counter.get("recovery") || otherMoves }; | |
case "quickattack": | |
return { cull: !!counter.get("speedsetup") || types.has("Rock") && !!counter.get("Status") }; | |
case "flamethrower": | |
case "lavaplume": | |
const otherFireMoves = ["heatwave", "overheat"].some((m) => moves.has(m)); | |
return { cull: moves.has("fireblast") && counter.setupType !== "Physical" || otherFireMoves }; | |
case "overheat": | |
return { cull: moves.has("flareblitz") || isDoubles && moves.has("calmmind") }; | |
case "aquatail": | |
return { cull: moves.has("aquajet") || !!counter.get("Status") }; | |
case "hydropump": | |
return { cull: moves.has("scald") && (counter.get("Special") < 4 && !moves.has("uturn") || species.types.length > 1 && counter.get("stab") < 3) }; | |
case "gigadrain": | |
return { cull: types.has("Poison") && !counter.get("Poison") }; | |
case "leafstorm": | |
const leafBladePossible = movePool.includes("leafblade") || moves.has("leafblade"); | |
return { | |
cull: counter.setupType === "Physical" && leafBladePossible || moves.has("gigadrain") && !!counter.get("Status") || isDoubles && moves.has("energyball") | |
}; | |
case "freezedry": | |
const betterIceMove = moves.has("blizzard") && !!counter.setupType || moves.has("icebeam") && counter.get("Special") < 4; | |
const preferThunderWave = movePool.includes("thunderwave") && types.has("Electric"); | |
return { cull: betterIceMove || preferThunderWave || movePool.includes("bodyslam") }; | |
case "icebeam": | |
return { cull: moves.has("dragontail") }; | |
case "bodypress": | |
const pressIncompatible = ["shellsmash", "mirrorcoat", "whirlwind"].some((m) => moves.has(m)); | |
return { cull: pressIncompatible || counter.setupType === "Special" }; | |
case "drainpunch": | |
return { cull: moves.has("closecombat") || !types.has("Fighting") && movePool.includes("swordsdance") }; | |
case "facade": | |
return { cull: moves.has("dynamicpunch") && species.types.includes("Fighting") && abilities.includes("No Guard") }; | |
case "focusblast": | |
return { cull: movePool.includes("shellsmash") || hasRestTalk }; | |
case "superpower": | |
return { | |
cull: moves.has("hydropump") || counter.get("Physical") >= 4 && movePool.includes("uturn") || moves.has("substitute") && !abilities.includes("Contrary"), | |
isSetup: abilities.includes("Contrary") | |
}; | |
case "poisonjab": | |
return { cull: !types.has("Poison") && counter.get("Status") >= 2 }; | |
case "earthquake": | |
const doublesCull = moves.has("earthpower") || moves.has("highhorsepower"); | |
const subToxicPossible = moves.has("substitute") && movePool.includes("toxic"); | |
return { cull: isDoubles && doublesCull || subToxicPossible || moves.has("bonemerang") }; | |
case "airslash": | |
return { cull: hasRestTalk || counter.setupType === "Physical" }; | |
case "hurricane": | |
return { cull: counter.setupType === "Physical" }; | |
case "futuresight": | |
return { cull: moves.has("psyshock") || moves.has("trick") || movePool.includes("teleport") }; | |
case "psychic": | |
return { cull: moves.has("psyshock") && (!!counter.setupType || isDoubles) }; | |
case "psyshock": | |
return { cull: moves.has("psychic") }; | |
case "bugbuzz": | |
return { cull: moves.has("uturn") && !counter.setupType && !abilities.includes("Tinted Lens") }; | |
case "leechlife": | |
return { | |
cull: isDoubles && moves.has("lunge") || moves.has("uturn") && !counter.setupType || movePool.includes("spikes") | |
}; | |
case "stoneedge": | |
const machampCullCondition = species.id === "machamp" && !moves.has("dynamicpunch"); | |
const rockSlidePlusStatusPossible = counter.get("Status") && movePool.includes("rockslide"); | |
const otherRockMove = moves.has("rockblast") || moves.has("rockslide"); | |
const lucarioCull = species.id === "lucario" && !!counter.setupType; | |
return { cull: machampCullCondition || !isDoubles && rockSlidePlusStatusPossible || otherRockMove || lucarioCull }; | |
case "shadowball": | |
return { | |
cull: isDoubles && moves.has("phantomforce") || !types.has("Ghost") && movePool.includes("focusblast") | |
}; | |
case "shadowclaw": | |
return { cull: types.has("Steel") && moves.has("shadowsneak") && counter.get("Physical") < 4 }; | |
case "dragonpulse": | |
case "spacialrend": | |
return { cull: moves.has("dracometeor") && counter.get("Special") < 4 }; | |
case "darkpulse": | |
const pulseIncompatible = ["foulplay", "knockoff"].some((m) => moves.has(m)) || species.id === "shiftry" && (moves.has("defog") || moves.has("suckerpunch")); | |
const shiftryCase = movePool.includes("nastyplot") && !moves.has("defog"); | |
return { cull: pulseIncompatible && !shiftryCase && counter.setupType !== "Special" }; | |
case "suckerpunch": | |
return { | |
cull: moves.has("rest") || counter.damagingMoves.size < 2 || counter.setupType === "Special" || counter.get("Dark") > 1 && !types.has("Dark") | |
}; | |
case "dazzlinggleam": | |
return { cull: ["moonblast", "petaldance"].some((m) => moves.has(m)) }; | |
case "bodyslam": | |
case "clearsmog": | |
const toxicCullCondition = moves.has("toxic") && !types.has("Normal"); | |
return { cull: moves.has("sludgebomb") || moves.has("trick") || movePool.includes("recover") || toxicCullCondition }; | |
case "willowisp": | |
case "yawn": | |
return { cull: moves.has("thunderwave") || moves.has("toxic") || moves.has("swordsdance") }; | |
case "painsplit": | |
case "recover": | |
case "synthesis": | |
return { cull: moves.has("rest") || moves.has("wish") || move.id === "synthesis" && moves.has("gigadrain") }; | |
case "roost": | |
return { | |
cull: moves.has("throatchop") || moves.has("dualwingbeat") && (moves.has("outrage") || species.id === "scizor") | |
}; | |
case "reflect": | |
case "lightscreen": | |
return { cull: !!teamDetails.screens }; | |
case "slackoff": | |
return { cull: species.id === "slowking" && !moves.has("scald") }; | |
case "substitute": | |
const moveBasedCull = ( | |
// Breloom is OK with Substitute + Swords Dance (for subpunch sets) | |
species.id !== "breloom" && ["bulkup", "nastyplot", "painsplit", "roost", "swordsdance"].some((m) => movePool.includes(m)) | |
); | |
const shayminCase = abilities.includes("Serene Grace") && movePool.includes("airslash") && !moves.has("airslash"); | |
return { cull: moves.has("rest") || moveBasedCull || shayminCase }; | |
case "helpinghand": | |
return { cull: moves.has("acupressure") }; | |
case "wideguard": | |
return { cull: moves.has("protect") }; | |
case "grassknot": | |
return { cull: moves.has("surf") }; | |
} | |
return { cull: false }; | |
} | |
shouldCullAbility(ability, types, moves, abilities, counter, movePool, teamDetails, species, preferredType, role, isDoubles) { | |
if ([ | |
"Flare Boost", | |
"Hydration", | |
"Ice Body", | |
"Immunity", | |
"Insomnia", | |
"Rain Dish", | |
"Snow Cloak", | |
"Steadfast" | |
].includes(ability)) | |
return true; | |
switch (ability) { | |
case "Contrary": | |
case "Serene Grace": | |
case "Skill Link": | |
return !counter.get(ability.toLowerCase().replace(/\s/g, "")); | |
case "Analytic": | |
return moves.has("rapidspin") || species.nfe || isDoubles; | |
case "Blaze": | |
return isDoubles && abilities.includes("Solar Power") || !isDoubles && species.id === "charizard"; | |
case "Chlorophyll": | |
return species.baseStats.spe > 100 || !counter.get("Fire") && !moves.has("sunnyday") && !teamDetails.sun; | |
case "Cloud Nine": | |
return species.id !== "golduck"; | |
case "Competitive": | |
return counter.get("Special") < 2 || moves.has("rest") && moves.has("sleeptalk"); | |
case "Compound Eyes": | |
case "No Guard": | |
return !counter.get("inaccurate"); | |
case "Cursed Body": | |
return abilities.includes("Infiltrator"); | |
case "Defiant": | |
return !counter.get("Physical"); | |
case "Download": | |
return counter.damagingMoves.size < 3 || moves.has("trick"); | |
case "Early Bird": | |
return types.has("Grass") && isDoubles; | |
case "Flash Fire": | |
return this.dex.getEffectiveness("Fire", species) < -1 || abilities.includes("Drought"); | |
case "Gluttony": | |
return !moves.has("bellydrum"); | |
case "Guts": | |
return !moves.has("facade") && !moves.has("sleeptalk") && !species.nfe || abilities.includes("Quick Feet") && !!counter.setupType; | |
case "Harvest": | |
return abilities.includes("Frisk") && !isDoubles; | |
case "Hustle": | |
case "Inner Focus": | |
return counter.get("Physical") < 2 || abilities.includes("Iron Fist"); | |
case "Infiltrator": | |
return moves.has("rest") && moves.has("sleeptalk") || isDoubles && abilities.includes("Clear Body"); | |
case "Intimidate": | |
if (species.id === "salamence" && moves.has("dragondance")) | |
return true; | |
return ["bodyslam", "bounce", "rockclimb", "tripleaxel"].some((m) => moves.has(m)); | |
case "Iron Fist": | |
return counter.get("ironfist") < 2 || moves.has("dynamicpunch"); | |
case "Justified": | |
return isDoubles && abilities.includes("Inner Focus"); | |
case "Lightning Rod": | |
return species.types.includes("Ground") || counter.setupType === "Physical"; | |
case "Limber": | |
return species.types.includes("Electric") || moves.has("facade"); | |
case "Mold Breaker": | |
return abilities.includes("Adaptability") || abilities.includes("Scrappy") || abilities.includes("Unburden") && !!counter.setupType || abilities.includes("Sheer Force") && !!counter.get("sheerforce"); | |
case "Moody": | |
return !!counter.setupType && abilities.includes("Simple"); | |
case "Moxie": | |
return counter.get("Physical") < 2 || moves.has("stealthrock") || moves.has("defog"); | |
case "Overgrow": | |
return !counter.get("Grass"); | |
case "Own Tempo": | |
return !moves.has("petaldance"); | |
case "Prankster": | |
return !counter.get("Status"); | |
case "Pressure": | |
return !!counter.setupType || counter.get("Status") < 2 || isDoubles; | |
case "Quick Feet": | |
return !moves.has("facade"); | |
case "Reckless": | |
return !counter.get("recoil") || moves.has("curse"); | |
case "Rock Head": | |
return !counter.get("recoil"); | |
case "Sand Force": | |
case "Sand Veil": | |
return !teamDetails.sand; | |
case "Sand Rush": | |
return !teamDetails.sand && (!counter.setupType || !counter.get("Rock") || moves.has("rapidspin")); | |
case "Scrappy": | |
return moves.has("earthquake") && species.id === "miltank"; | |
case "Sheer Force": | |
return !counter.get("sheerforce") || abilities.includes("Guts"); | |
case "Shell Armor": | |
return species.id === "omastar" && (moves.has("spikes") || moves.has("stealthrock")); | |
case "Sniper": | |
return counter.get("Water") > 1 && !moves.has("focusenergy"); | |
case "Solar Power": | |
return !teamDetails.sun || abilities.includes("Harvest"); | |
case "Speed Boost": | |
return moves.has("uturn"); | |
case "Sturdy": | |
return moves.has("bulkup") || !!counter.get("recoil") || abilities.includes("Solid Rock"); | |
case "Swarm": | |
return !counter.get("Bug") || !!counter.get("recovery"); | |
case "Swift Swim": | |
const neverWantsSwim = !moves.has("raindance") && [ | |
"Intimidate", | |
"Rock Head", | |
"Water Absorb" | |
].some((m) => abilities.includes(m)); | |
const noSwimIfNoRain = !moves.has("raindance") && [ | |
"Cloud Nine", | |
"Lightning Rod", | |
"Intimidate", | |
"Rock Head", | |
"Sturdy", | |
"Water Absorb", | |
"Water Veil", | |
"Weak Armor" | |
].some((m) => abilities.includes(m)); | |
return teamDetails.rain ? neverWantsSwim : noSwimIfNoRain; | |
case "Synchronize": | |
return counter.get("Status") < 3; | |
case "Technician": | |
return !counter.get("technician") || moves.has("tailslap") || abilities.includes("Punk Rock"); | |
case "Tinted Lens": | |
return moves.has("hurricane") && abilities.includes("Compound Eyes") || counter.get("Status") > 2 && !counter.setupType || // For Yanmega | |
moves.has("protect"); | |
case "Unaware": | |
return species.id === "bibarel"; | |
case "Unburden": | |
return abilities.includes("Prankster") || // intended for Hitmonlee | |
abilities.includes("Reckless") || !counter.setupType && !isDoubles; | |
case "Volt Absorb": | |
return this.dex.getEffectiveness("Electric", species) < -1; | |
case "Water Absorb": | |
return moves.has("raindance") || ["Drizzle", "Strong Jaw", "Unaware", "Volt Absorb"].some((abil) => abilities.includes(abil)); | |
case "Weak Armor": | |
return species.id === "skarmory" || moves.has("shellsmash") || moves.has("rapidspin"); | |
} | |
return false; | |
} | |
} | |
var teams_default = RandomBDSPTeams; | |
//# sourceMappingURL=teams.js.map | |