Jofthomas's picture
Jofthomas HF staff
Upload 4781 files
5c2ed06 verified
"use strict";
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