Add October PMotM: Blank Canvas Random Battle (#11463)

* Blank Canvas Rands: Initial Commit

* Add in all Item hardcodes

* a couple more set adjustments

* Update data/mods/blankcanvas/rulesets.ts

* Apply suggestions from code review

---------

Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
This commit is contained in:
Yoshiblaze 2025-10-01 14:41:03 -04:00 committed by GitHub
parent 1d741a1209
commit fbe978a9c9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 6310 additions and 1423 deletions

View File

@ -2863,16 +2863,16 @@ export const Formats: import('../sim/dex-formats').FormatList = [
section: "Pet Mods",
},
{
name: "[Gen 9] Do Not Use Random Battle",
desc: `A National Dex random battle format where only Pok&eacute;mon with 280 BST or less (with some exceptions) are allowed.`,
mod: 'gen9',
team: 'randomDNU',
ruleset: ['Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod', 'Terastal Clause'],
name: "[Gen 9] Blank Canvas Random Battle",
desc: `A Gen 9 micrometa feautring only Fakemon made by teams of players with a limited budget.`,
mod: 'blankcanvas',
team: 'randomBLC',
ruleset: ['Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod', 'Terastal Clause', 'Data Preview', 'Sprite Viewer'],
onBegin() {
this.add(`raw|Welcome to Do Not Use Random Battle!`);
this.add(`raw|<a href="https://www.smogon.com/forums/threads/3734326/">Do Not Use</a> is a Solomod where ONLY Pok&eacute;mon with 280 BST or less are allowed!`);
this.add(`raw|(with some exceptions, like Luvdisc and Capsakid.)`);
this.add(`raw|You are invited to come the <a href="https://play.pokemonshowdown.com/petmods">Pet Mods</a> room to discuss the metagame.`);
this.add('-message', `Welcome to Blank Canvas Random Battle!`);
this.add('-message', `This is a Gen 9 micrometa feautring only Fakemon made by teams of players with a limited budget!`);
this.add('-message', `You can find our thread and metagame resources here:`);
this.add('-message', `https://www.smogon.com/forums/threads/3748841/`);
},
onSwitchInPriority: 100,
onSwitchIn(pokemon) {
@ -2884,23 +2884,37 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
},
{
name: "[Gen 9] National Dex Do Not Use", // roomtours
desc: `A National Dex solomod where only Pok&eacute;mon with 280 BST or less are allowed.`,
mod: 'gen9',
name: "[Gen 9] Blank Canvas Expanded", // roomtours
desc: `A Gen 9 micrometa feautring only Fakemon made by teams of players with a limited budget.`,
mod: 'blankcanvas',
searchShow: false,
ruleset: ['Standard NatDex', 'Terastal Clause', 'Z-Move Clause'],
banlist: ['Dewpider', 'Diglett-Alola', 'Flittle', 'Shedinja', 'Smeargle', 'Wattrel', 'Wingull', 'Wishiwashi', 'Zigzagoon-Base', 'Arena Trap', 'Cute Charm', 'Huge Power', 'Hustle', 'Moody', 'Pure Power', 'Shadow Tag', 'Baton Pass'],
ruleset: ['Standard', 'Terastal Clause', 'Data Preview', 'Sleep Moves Clause', '!Sleep Clause Mod', 'Sprite Viewer'],
banlist: ['All Pokemon', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Baton Pass', 'Last Respects', 'Shed Tail', 'Razor Fang', 'Light Clay'],
unbanlist: [
'Actaniathan', 'Flarenheit', 'Groundead', 'Deadward', 'Obaki', 'Sylravage', 'Twinkaton', 'Fausteil', 'Geoporka',
'Porcupyre', 'Plasmage', 'Seaode', 'Bellolysk', 'Tryonite', 'Scarachnid', 'Serpvoltidae', 'Maldractice', 'Geigeramp',
'Bufferfly', 'Dastard', 'Sheepquake', 'Cottentration', 'Sorrowcean', 'Psyllapse', 'Haarstorm', 'Borealis', 'Bazhigangquan',
'Leechmonner', 'Iron Crest', 'Odonata', 'Hebicikuga', 'Devestial', 'Lundicare', 'Lyvamp', 'Strumorthio', 'Iron Mike',
'Badjur', 'Eolikopter', 'Freightmare', 'Frostengu', 'Goblantern', 'Hippaint', 'Jackoswarm', 'Jokerpent', 'Kadraoke',
'Treatmint', 'Turvarpega', 'Goodjur', 'Liftaton', 'Triceracotta', 'Woolverine', 'Combustoad', 'Hearthind', 'Koiryu',
'Pestiligy', 'Saxum', 'Sascratch', 'Guttergar', 'Rakasa', 'Thermostatic', 'Formaldehydra', 'Arachnode', 'Arsenstorm',
'Blobbiam', 'Brasspecter', 'Bugswarm', 'Bulionage', 'Capricorrie', 'Copperhead', 'Craggon', 'Crystuit', 'Drakkannon',
'Faeruin', 'Karmalice', 'Martorse', 'Massassin', 'Mohawtter', 'Mon Mothra', 'Parasike', 'Pinaturbo', 'Piss', 'Vipult',
'Fettogre', 'Florustitia', 'Searytch', 'Sleet Shell', 'Snabterra', 'Socknbuskn', 'Thaumaton', 'Versalyre',
'Lavalisk', 'Llanfairwyrm', 'Primordialith', 'Reversadusa', 'Sculptera', 'Wizhazard', 'Yamateraph',
],
onBegin() {
this.add('-message', `Welcome to Do Not Use!`);
this.add('-message', `This is a National Dex metagame where only Pokemon with less than 280 BST are allowed, plus a select few others!`);
this.add('-message', `Welcome to Blank Canvas!`);
this.add('-message', `This is a Gen 9 micrometa feautring only Fakemon made by teams of players with a limited budget!`);
this.add('-message', `You can find our thread and metagame resources here:`);
this.add('-message', `https://www.smogon.com/forums/threads/3734326/`);
this.add('-message', `https://www.smogon.com/forums/threads/3748841/`);
},
onValidateSet(set) {
const species = this.dex.species.get(set.species);
if (species.bst > 280) {
if (['Luvdisc', 'Unown', 'Capsakid', 'Snorunt', 'Swablu', 'Beldum'].includes(species.baseSpecies)) return;
return [`Only Pok\u00e9mon with a BST of 280 or lower are allowed.`, `(${species.name}'s BST is ${species.bst}.)`];
onSwitchInPriority: 100,
onSwitchIn(pokemon) {
if ((pokemon.illusion || pokemon).getTypes(true, true).join('/') !==
this.dex.forGen(9).species.get((pokemon.illusion || pokemon).species.name).types.join('/') &&
!pokemon.terastallized) {
this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
}
},
},

View File

@ -0,0 +1,295 @@
export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
piss: {
tier: "UU",
},
snabterra: {
tier: "UU",
},
drakkannon: {
tier: "UU",
},
arsenstorm: {
tier: "UU",
},
badjur: {
tier: "UU",
},
vipult: {
tier: "UU",
},
fettogre: {
tier: "UU",
},
crystuit: {
tier: "UU",
},
monmothra: {
tier: "UU",
},
wizhazard: {
tier: "UU",
},
jackoswarm: {
tier: "UU",
},
kadraoke: {
tier: "UU",
},
karmalice: {
tier: "UU",
},
goblantern: {
tier: "UU",
},
hippaint: {
tier: "UU",
},
pinaturbo: {
tier: "UU",
},
eolikopter: {
tier: "UU",
},
mohawtter: {
tier: "UU",
},
arachnode: {
tier: "UU",
},
blobbiam: {
tier: "UU",
},
florustitia: {
tier: "UU",
},
primordialith: {
tier: "UU",
},
faeruin: {
tier: "UU",
},
versalyre: {
tier: "UU",
},
capricorrie: {
tier: "UU",
},
reversadusa: {
tier: "UU",
},
llanfairwyrm: {
tier: "UU",
},
frostengu: {
tier: "UU",
},
bulionage: {
tier: "UU",
},
yamateraph: {
tier: "UU",
},
bugswarm: {
tier: "UU",
},
freightmare: {
tier: "UU",
},
brasspecter: {
tier: "UU",
},
copperhead: {
tier: "UU",
},
thaumaton: {
tier: "UU",
},
sculptera: {
tier: "UU",
},
lavalisk: {
tier: "UU",
},
martorse: {
tier: "UU",
},
parasike: {
tier: "UU",
},
massassin: {
tier: "UU",
},
searytch: {
tier: "UU",
},
jokerpent: {
tier: "UU",
},
socknbuskn: {
tier: "UU",
},
sleetshell: {
tier: "UU",
},
craggon: {
tier: "UU",
},
// Meta B
flarenheit: {
tier: "OU",
},
groundead: {
tier: "OU",
},
actaniathan: {
tier: "OU",
},
deadward: {
tier: "OU",
},
obaki: {
tier: "OU",
},
sylravage: {
tier: "OU",
},
twinkaton: {
tier: "OU",
},
fausteil: {
tier: "OU",
},
geoporka: {
tier: "OU",
},
seaode: {
tier: "OU",
},
plasmage: {
tier: "OU",
},
porcupyre: {
tier: "OU",
},
bellolysk: {
tier: "OU",
},
tryonite: {
tier: "OU",
},
scarachnid: {
tier: "OU",
},
geigeramp: {
tier: "OU",
},
maldractice: {
tier: "OU",
},
serpvoltidae: {
tier: "OU",
},
sheepquake: {
tier: "OU",
},
bufferfly: {
tier: "OU",
},
dastard: {
tier: "OU",
},
cottentration: {
tier: "OU",
},
sorrowcean: {
tier: "OU",
},
psyllapse: {
tier: "OU",
},
haarstorm: {
tier: "OU",
},
borealis: {
tier: "OU",
},
bazhigangquan: {
tier: "OU",
},
leechmonner: {
tier: "OU",
},
ironcrest: {
tier: "OU",
},
odonata: {
tier: "OU",
},
hebicikuga: {
tier: "OU",
},
devestial: {
tier: "OU",
},
lundicare: {
tier: "OU",
},
// Meta C
lyvamp: {
tier: "RU",
},
treatmint: {
tier: "RU",
},
turvarpega: {
tier: "RU",
},
goodjur: {
tier: "RU",
},
liftaton: {
tier: "RU",
},
triceracotta: {
tier: "RU",
},
woolverine: {
tier: "RU",
},
combustoad: {
tier: "RU",
},
hearthind: {
tier: "RU",
},
koiryu: {
tier: "RU",
},
pestiligy: {
tier: "RU",
},
saxum: {
tier: "RU",
},
sascratch: {
tier: "RU",
},
guttergar: {
tier: "RU",
},
rakasa: {
tier: "RU",
},
thermostatic: {
tier: "RU",
},
formaldehydra: {
tier: "RU",
},
strumorthio: {
tier: "RU",
},
ironmike: {
tier: "RU",
},
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,26 @@
export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
meditate: {
inherit: true,
isNonstandard: null,
},
dragonrage: {
inherit: true,
isNonstandard: null,
},
boneclub: {
inherit: true,
isNonstandard: null,
},
powershift: {
inherit: true,
isNonstandard: null,
},
blazingtorque: {
inherit: true,
isNonstandard: null,
},
camouflage: {
inherit: true,
isNonstandard: null,
},
};

View File

@ -0,0 +1,881 @@
export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
piss: {
num: 9001,
name: "Piss",
types: ["Normal"],
baseStats: { hp: 70, atk: 95, def: 60, spa: 50, spd: 60, spe: 95 },
abilities: { 0: "Magic Guard" },
weightkg: 382,
eggGroups: ["Undiscovered"],
},
snabterra: {
num: 9002,
name: "Snabterra",
types: ["Bug", "Ground"],
baseStats: { hp: 85, atk: 110, def: 85, spa: 40, spd: 80, spe: 85 },
abilities: { 0: "Compound Eyes" },
weightkg: 600,
eggGroups: ["Undiscovered"],
},
drakkannon: {
num: 9003,
name: "Drakkannon",
types: ["Fighting", "Dragon"],
baseStats: { hp: 80, atk: 50, def: 95, spa: 100, spd: 105, spe: 73 },
abilities: { 0: "Mega Launcher" },
weightkg: 59,
eggGroups: ["Undiscovered"],
},
arsenstorm: {
num: 9004,
name: "Arsenstorm",
types: ["Poison", "Ground"],
baseStats: { hp: 110, atk: 50, def: 65, spa: 80, spd: 90, spe: 55 },
abilities: { 0: "Neutralizing Gas", H: "Levitate" },
weightkg: 15,
eggGroups: ["Undiscovered"],
},
badjur: {
num: 9005,
name: "Badjur",
types: ["Normal"],
baseStats: { hp: 85, atk: 100, def: 75, spa: 60, spd: 75, spe: 80 },
abilities: { 0: "Poison Heal" },
weightkg: 16,
eggGroups: ["Undiscovered"],
},
vipult: {
num: 9006,
name: "Vipult",
types: ["Poison", "Dark"],
baseStats: { hp: 100, atk: 65, def: 70, spa: 100, spd: 100, spe: 70 },
abilities: { 0: "Intimidate" },
weightkg: 23,
eggGroups: ["Undiscovered"],
},
fettogre: {
num: 9007,
name: "Fettogre",
types: ["Ghost", "Fighting"],
baseStats: { hp: 70, atk: 45, def: 140, spa: 45, spd: 80, spe: 55 },
abilities: { 0: "Immunity", H: "Oblivious" },
weightkg: 200,
eggGroups: ["Undiscovered"],
},
crystuit: {
num: 9008,
name: "Crystuit",
types: ["Rock", "Electric"],
baseStats: { hp: 70, atk: 50, def: 80, spa: 105, spd: 70, spe: 110 },
abilities: { 0: "Sturdy", H: "Levitate" },
weightkg: 420.6,
eggGroups: ["Undiscovered"],
},
monmothra: {
num: 9009,
name: "Mon Mothra",
types: ["Fairy", "Bug"],
baseStats: { hp: 80, atk: 50, def: 70, spa: 100, spd: 70, spe: 90 },
abilities: { 0: "Fluffy", H: "Tinted Lens" },
weightkg: 50,
eggGroups: ["Undiscovered"],
},
wizhazard: {
num: 9010,
name: "Wizhazard",
types: ["Psychic", "Steel"],
baseStats: { hp: 95, atk: 40, def: 90, spa: 100, spd: 70, spe: 60 },
abilities: { 0: "Magic Bounce", H: "Battle Armor" },
weightkg: 69,
eggGroups: ["Undiscovered"],
},
jackoswarm: {
num: 9011,
name: "Jack-o-swarm",
types: ["Steel", "Flying"],
baseStats: { hp: 90, atk: 50, def: 95, spa: 70, spd: 90, spe: 70 },
abilities: { 0: "Pickpocket", H: "Rough Skin" },
weightkg: 74.8,
eggGroups: ["Undiscovered"],
},
kadraoke: {
num: 9012,
name: "Kadraoke",
types: ["Psychic", "Dragon"],
baseStats: { hp: 90, atk: 30, def: 80, spa: 85, spd: 100, spe: 85 },
abilities: { 0: "Punk Rock" },
weightkg: 19.7,
eggGroups: ["Undiscovered"],
},
karmalice: {
num: 9013,
name: "Karmalice",
types: ["Ice", "Electric"],
baseStats: { hp: 70, atk: 55, def: 40, spa: 105, spd: 55, spe: 111 },
abilities: { 0: "Refrigerate" },
weightkg: 690,
eggGroups: ["Undiscovered"],
},
goblantern: {
num: 9014,
name: "Goblantern",
types: ["Fire", "Grass"],
baseStats: { hp: 90, atk: 40, def: 80, spa: 100, spd: 80, spe: 77 },
abilities: { 0: "Prankster" },
weightkg: 3,
eggGroups: ["Undiscovered"],
},
hippaint: {
num: 9015,
name: "Hippaint",
types: ["Water", "Ground"],
baseStats: { hp: 70, atk: 40, def: 70, spa: 110, spd: 85, spe: 80 },
abilities: { 0: "Pastel Veil" },
weightkg: 90,
eggGroups: ["Undiscovered"],
},
pinaturbo: {
num: 9016,
name: "Pinaturbo",
types: ["Fire"],
baseStats: { hp: 70, atk: 70, def: 60, spa: 100, spd: 95, spe: 115 },
abilities: { 0: "Mold Breaker", H: "Regenerator" },
weightkg: 126,
eggGroups: ["Undiscovered"],
},
eolikopter: {
num: 9017,
name: "Eolikopter",
types: ["Flying", "Electric"],
baseStats: { hp: 90, atk: 50, def: 80, spa: 100, spd: 70, spe: 110 },
abilities: { 0: "Cloud Nine", H: "Static" },
weightkg: 400,
eggGroups: ["Undiscovered"],
},
mohawtter: {
num: 9018,
name: "Mohawtter",
types: ["Water", "Grass"],
baseStats: { hp: 85, atk: 50, def: 70, spa: 70, spd: 110, spe: 55 },
abilities: { 0: "Tablets of Ruin", H: "Hydration" },
weightkg: 32,
eggGroups: ["Undiscovered"],
},
arachnode: {
num: 9019,
name: "Arachnode",
types: ["Electric"],
baseStats: { hp: 105, atk: 30, def: 75, spa: 85, spd: 100, spe: 60 },
abilities: { 0: "Clear Body", H: "Thick Fat" },
weightkg: 61.5,
eggGroups: ["Undiscovered"],
},
blobbiam: {
num: 9020,
name: "Blobbiam",
types: ["Water", "Fairy"],
baseStats: { hp: 95, atk: 100, def: 110, spa: 20, spd: 80, spe: 75 },
abilities: { 0: "Volt Absorb" },
weightkg: 12,
eggGroups: ["Undiscovered"],
},
florustitia: {
num: 9021,
name: "Florustitia",
types: ["Grass", "Fighting"],
baseStats: { hp: 70, atk: 85, def: 60, spa: 40, spd: 95, spe: 100 },
abilities: { 0: "Sharpness", H: "Grassy Surge" },
weightkg: 110,
eggGroups: ["Undiscovered"],
},
primordialith: {
num: 9022,
name: "Primordialith",
types: ["Rock"],
baseStats: { hp: 100, atk: 100, def: 100, spa: 35, spd: 90, spe: 30 },
abilities: { 0: "Sand Stream", H: "Vital Spirit" },
weightkg: 90,
eggGroups: ["Undiscovered"],
},
faeruin: {
num: 9023,
name: "Faeruin",
types: ["Ghost", "Fairy"],
baseStats: { hp: 90, atk: 96, def: 70, spa: 40, spd: 80, spe: 93 },
abilities: { 0: "Prankster", H: "Wandering Spirit" },
weightkg: 33,
eggGroups: ["Undiscovered"],
},
versalyre: {
num: 9024,
name: "Versalyre",
types: ["Flying"],
baseStats: { hp: 70, atk: 110, def: 65, spa: 30, spd: 70, spe: 90 },
abilities: { 0: "Protean" },
weightkg: 2,
eggGroups: ["Undiscovered"],
},
capricorrie: {
num: 9025,
name: "Capricorrie",
types: ["Ice", "Ground"],
baseStats: { hp: 100, atk: 110, def: 80, spa: 50, spd: 70, spe: 90 },
abilities: { 0: "Snow Warning", H: "Vital Spirit" },
weightkg: 146,
eggGroups: ["Undiscovered"],
},
reversadusa: {
num: 9026,
name: "Reversadusa",
types: ["Psychic", "Dark"],
baseStats: { hp: 90, atk: 90, def: 80, spa: 70, spd: 70, spe: 95 },
abilities: { 0: "Contrary" },
weightkg: 55.2,
eggGroups: ["Undiscovered"],
},
llanfairwyrm: {
num: 9027,
name: "Llanfairwyrm",
types: ["Dragon"],
baseStats: { hp: 85, atk: 120, def: 100, spa: 55, spd: 90, spe: 70 },
abilities: { 0: "Rough Skin" },
weightkg: 600,
eggGroups: ["Undiscovered"],
},
frostengu: {
num: 9028,
name: "Frostengu",
types: ["Fighting", "Ice"],
baseStats: { hp: 50, atk: 110, def: 50, spa: 110, spd: 50, spe: 87 },
abilities: { 0: "No Guard" },
weightkg: 68,
eggGroups: ["Undiscovered"],
},
bulionage: {
num: 9029,
name: "Bulionage",
types: ["Dark", "Water"],
baseStats: { hp: 95, atk: 90, def: 85, spa: 40, spd: 120, spe: 50 },
abilities: { 0: "Strong Jaw", 1: "Thermal Exchange", H: "White Smoke" },
weightkg: 300,
eggGroups: ["Undiscovered"],
},
yamateraph: {
num: 9030,
name: "Yamateraph",
types: ["Normal", "Fairy"],
baseStats: { hp: 90, atk: 110, def: 80, spa: 15, spd: 80, spe: 105 },
abilities: { 0: "Psychic Surge", H: "Vital Spirit" },
weightkg: 255,
eggGroups: ["Undiscovered"],
},
bugswarm: {
num: 9031,
name: "Bugswarm",
types: ["Fire", "Bug"],
baseStats: { hp: 100, atk: 90, def: 70, spa: 70, spd: 70, spe: 60 },
abilities: { 0: "Triage" },
weightkg: 420,
eggGroups: ["Undiscovered"],
},
freightmare: {
num: 9032,
name: "Freightmare",
types: ["Ghost", "Steel"],
baseStats: { hp: 100, atk: 40, def: 80, spa: 105, spd: 85, spe: 74 },
abilities: { 0: "Sand Rush", H: "Steam Engine" },
weightkg: 720,
eggGroups: ["Undiscovered"],
},
brasspecter: {
num: 9033,
name: "Brasspecter",
types: ["Steel", "Ghost"],
baseStats: { hp: 110, atk: 95, def: 100, spa: 40, spd: 95, spe: 35 },
abilities: { 0: "Tough Claws" },
weightkg: 40,
eggGroups: ["Undiscovered"],
},
copperhead: {
num: 9034,
name: "Copperhead",
types: ["Ground", "Steel"],
baseStats: { hp: 85, atk: 80, def: 100, spa: 50, spd: 90, spe: 50 },
abilities: { 0: "Water Absorb" },
weightkg: 101.9,
eggGroups: ["Undiscovered"],
},
thaumaton: {
num: 9035,
name: "Thaumaton",
types: ["Poison", "Steel"],
baseStats: { hp: 95, atk: 70, def: 70, spa: 100, spd: 100, spe: 75 },
abilities: { 0: "Unburden", H: "Flash Fire" },
weightkg: 666,
eggGroups: ["Undiscovered"],
},
sculptera: {
num: 9036,
name: "Sculptera",
types: ["Rock", "Dragon"],
baseStats: { hp: 100, atk: 105, def: 70, spa: 40, spd: 85, spe: 85 },
abilities: { 0: "Skill Link", H: "Defiant" },
weightkg: 729,
eggGroups: ["Undiscovered"],
},
lavalisk: {
num: 9037,
name: "Lavalisk",
types: ["Poison", "Fire"],
baseStats: { hp: 100, atk: 105, def: 80, spa: 40, spd: 80, spe: 76 },
abilities: { 0: "Mold Breaker" },
weightkg: 150,
eggGroups: ["Undiscovered"],
},
martorse: {
num: 9038,
name: "Martorse",
types: ["Ground", "Fire"],
baseStats: { hp: 75, atk: 90, def: 70, spa: 35, spd: 90, spe: 105 },
abilities: { 0: "Trace", H: "Prankster" },
weightkg: 173,
eggGroups: ["Undiscovered"],
},
parasike: {
num: 9039,
name: "Parasike",
types: ["Psychic", "Bug"],
baseStats: { hp: 50, atk: 90, def: 75, spa: 50, spd: 55, spe: 109 },
abilities: { 0: "Strong Jaw", H: "Tinted Lens" },
weightkg: 0.8,
eggGroups: ["Undiscovered"],
},
massassin: {
num: 9040,
name: "Massassin",
types: ["Fighting", "Dark"],
baseStats: { hp: 110, atk: 110, def: 80, spa: 50, spd: 80, spe: 30 },
abilities: { 0: "Quark Drive" },
weightkg: 888,
eggGroups: ["Undiscovered"],
tags: ["Paradox"],
},
searytch: {
num: 9041,
name: "Searytch",
types: ["Fairy", "Fire"],
baseStats: { hp: 85, atk: 30, def: 75, spa: 105, spd: 100, spe: 60 },
abilities: { 0: "Stamina" },
weightkg: 42,
eggGroups: ["Undiscovered"],
},
jokerpent: {
num: 9042,
name: "Jokerpent",
types: ["Dragon", "Poison"],
baseStats: { hp: 100, atk: 70, def: 100, spa: 30, spd: 75, spe: 20 },
abilities: { 0: "Unaware" },
weightkg: 67,
eggGroups: ["Undiscovered"],
},
socknbuskn: {
num: 9043,
name: "Socknbusk\u2019n",
types: ["Normal", "Fighting"],
baseStats: { hp: 95, atk: 95, def: 75, spa: 40, spd: 70, spe: 110 },
abilities: { 0: "Scrappy" },
weightkg: 65,
eggGroups: ["Undiscovered"],
},
sleetshell: {
num: 8045,
name: "Sleet Shell",
types: ["Ice", "Steel"],
baseStats: { hp: 83, atk: 95, def: 107, spa: 47, spd: 71, spe: 103 },
abilities: { 0: "Protosynthesis" },
weightkg: 674.5,
eggGroups: ["Undiscovered"],
tags: ["Paradox"],
},
craggon: {
num: 9044,
name: "Craggon",
types: ["Dragon", "Ground"],
baseStats: { hp: 120, atk: 81, def: 81, spa: 82, spd: 81, spe: 100 },
abilities: { 0: "Natural Cure", H: "Emergency Exit" },
weightkg: 404,
eggGroups: ["Undiscovered"],
},
// Meta B
flarenheit: {
num: 9045,
name: "Flarenheit",
types: ["Ice", "Fire"],
baseStats: { hp: 55, atk: 110, def: 50, spa: 70, spd: 40, spe: 130 },
abilities: { 0: "Motor Drive", H: "Surge Surfer" },
weightkg: 45.1,
eggGroups: ["Undiscovered"],
},
groundead: {
num: 9046,
name: "Groundead",
types: ["Ground", "Ghost"],
baseStats: { hp: 80, atk: 115, def: 110, spa: 50, spd: 80, spe: 50 },
abilities: { 0: "Misty Surge", 1: "Solid Rock", H: "Earth Eater" },
weightkg: 0.2,
eggGroups: ["Undiscovered"],
},
actaniathan: {
num: 9047,
name: "Actaniathan",
types: ["Water", "Steel"],
baseStats: { hp: 100, atk: 40, def: 80, spa: 105, spd: 105, spe: 50 },
abilities: { 0: "Torrent", H: "Lightning Rod" },
weightkg: 800,
eggGroups: ["Undiscovered"],
},
deadward: {
num: 9048,
name: "Deadward",
types: ["Dark", "Flying"],
baseStats: { hp: 90, atk: 100, def: 85, spa: 40, spd: 90, spe: 110 },
abilities: { 0: "Filter", H: "Intimidate" },
weightkg: 66.6,
eggGroups: ["Undiscovered"],
},
obaki: {
num: 9049,
name: "Obaki",
types: ["Fighting", "Ghost"],
baseStats: { hp: 85, atk: 75, def: 65, spa: 125, spd: 105, spe: 55 },
abilities: { 0: "Purifying Salt" },
weightkg: 40,
eggGroups: ["Undiscovered"],
},
sylravage: {
num: 9050,
name: "Sylravage",
types: ["Grass", "Fighting"],
baseStats: { hp: 103, atk: 110, def: 86, spa: 41, spd: 80, spe: 80 },
abilities: { 0: "Defiant", H: "Grassy Surge" },
weightkg: 72,
eggGroups: ["Undiscovered"],
},
twinkaton: {
num: 9051,
name: "Twinkaton",
types: ["Fairy", "Steel"],
baseStats: { hp: 90, atk: 75, def: 75, spa: 75, spd: 120, spe: 45 },
abilities: { 0: "Mold Breaker", H: "Filter" },
weightkg: 90,
eggGroups: ["Undiscovered"],
},
fausteil: {
num: 9052,
name: "Fausteil",
types: ["Fire", "Flying"],
baseStats: { hp: 110, atk: 90, def: 80, spa: 35, spd: 110, spe: 50 },
abilities: { 0: "Flame Body" },
weightkg: 26,
eggGroups: ["Undiscovered"],
},
geoporka: {
num: 9053,
name: "Geoporka",
types: ["Grass", "Poison"],
baseStats: { hp: 100, atk: 85, def: 80, spa: 70, spd: 95, spe: 45 },
abilities: { 0: "Thick Fat" },
weightkg: 38,
eggGroups: ["Undiscovered"],
},
seaode: {
num: 9054,
name: "Seaode",
types: ["Rock", "Water"],
baseStats: { hp: 70, atk: 110, def: 100, spa: 40, spd: 70, spe: 95 },
abilities: { 0: "Rock Head" },
weightkg: 121,
eggGroups: ["Undiscovered"],
},
plasmage: {
num: 9055,
name: "Plasmage",
types: ["Psychic", "Electric"],
baseStats: { hp: 100, atk: 55, def: 70, spa: 105, spd: 75, spe: 115 },
abilities: { 0: "Magician" },
weightkg: 85,
eggGroups: ["Undiscovered"],
},
porcupyre: {
num: 9056,
name: "Porcupyre",
types: ["Dark", "Fire"],
baseStats: { hp: 90, atk: 90, def: 125, spa: 40, spd: 80, spe: 70 },
abilities: { 0: "Bulletproof", H: "Rough Skin" },
weightkg: 66.6,
eggGroups: ["Undiscovered"],
},
bellolysk: {
num: 9057,
name: "Bellolysk",
types: ["Dragon", "Steel"],
baseStats: { hp: 100, atk: 90, def: 85, spa: 105, spd: 75, spe: 70 },
abilities: { 0: "Magic Guard", H: "Multiscale" },
weightkg: 999,
eggGroups: ["Undiscovered"],
},
tryonite: {
num: 9058,
name: "Tryonite",
types: ["Bug", "Ground"],
baseStats: { hp: 75, atk: 75, def: 90, spa: 100, spd: 105, spe: 90 },
abilities: { 0: "Drought", H: "Sturdy" },
weightkg: 7,
eggGroups: ["Undiscovered"],
},
scarachnid: {
num: 9059,
name: "Scarachnid",
types: ["Ghost", "Bug"],
baseStats: { hp: 81, atk: 112, def: 70, spa: 31, spd: 70, spe: 121 },
abilities: { 0: "Regenerator", H: "Perish Body" },
weightkg: 14,
eggGroups: ["Undiscovered"],
},
geigeramp: {
num: 9060,
name: "Geigeramp",
types: ["Poison", "Electric"],
baseStats: { hp: 100, atk: 50, def: 100, spa: 100, spd: 100, spe: 75 },
abilities: { 0: "Levitate" },
weightkg: 20,
eggGroups: ["Undiscovered"],
},
maldractice: {
num: 9061,
name: "Maldractice",
types: ["Dragon", "Poison"],
baseStats: { hp: 110, atk: 100, def: 60, spa: 20, spd: 115, spe: 40 },
abilities: { 0: "Own Tempo", H: "Corrosion" },
weightkg: 67,
eggGroups: ["Undiscovered"],
},
serpvoltidae: {
num: 9062,
name: "Serpvoltidae",
types: ["Electric", "Ground"],
baseStats: { hp: 110, atk: 45, def: 90, spa: 115, spd: 90, spe: 45 },
abilities: { 0: "Teravolt", 1: "Shed Skin", H: "Natural Cure" },
weightkg: 69,
eggGroups: ["Undiscovered"],
},
sheepquake: {
num: 9063,
name: "Sheepquake",
types: ["Normal", "Ground"],
baseStats: { hp: 110, atk: 30, def: 95, spa: 85, spd: 95, spe: 95 },
abilities: { 0: "Sheer Force" },
weightkg: 126,
eggGroups: ["Undiscovered"],
},
bufferfly: {
num: 9064,
name: "Bufferfly",
types: ["Fighting", "Bug"],
baseStats: { hp: 105, atk: 110, def: 70, spa: 20, spd: 90, spe: 65 },
abilities: { 0: "Magic Bounce" },
weightkg: 121,
eggGroups: ["Undiscovered"],
},
dastard: {
num: 9065,
name: "Dastard",
types: ["Fairy", "Poison"],
baseStats: { hp: 80, atk: 90, def: 110, spa: 100, spd: 80, spe: 100 },
abilities: { 0: "Competitive" },
weightkg: 55,
eggGroups: ["Undiscovered"],
},
cottentration: {
num: 9066,
name: "Cottentration",
types: ["Grass", "Fighting"],
baseStats: { hp: 50, atk: 50, def: 50, spa: 110, spd: 110, spe: 110 },
abilities: { 0: "Chlorophyll" },
weightkg: 0.8,
eggGroups: ["Undiscovered"],
},
sorrowcean: {
num: 9067,
name: "Sorrowcean",
types: ["Water", "Ghost"],
baseStats: { hp: 85, atk: 30, def: 85, spa: 100, spd: 70, spe: 108 },
abilities: { 0: "Flare Boost", H: "Illusion" },
weightkg: 15,
eggGroups: ["Undiscovered"],
},
psyllapse: {
num: 9068,
name: "Psyllapse",
types: ["Psychic", "Normal"],
baseStats: { hp: 100, atk: 95, def: 85, spa: 95, spd: 85, spe: 60 },
abilities: { 0: "Prankster" },
weightkg: 70,
eggGroups: ["Undiscovered"],
},
haarstorm: {
num: 9069,
name: "Haarstorm",
types: ["Ghost", "Electric"],
baseStats: { hp: 80, atk: 90, def: 75, spa: 30, spd: 115, spe: 105 },
abilities: { 0: "Neutralizing Gas", H: "Natural Cure" },
weightkg: 9,
eggGroups: ["Undiscovered"],
},
borealis: {
num: 9070,
name: "Borealis",
types: ["Ice", "Flying"],
baseStats: { hp: 95, atk: 75, def: 90, spa: 95, spd: 90, spe: 131 },
abilities: { 0: "Supreme Overlord" },
weightkg: 63,
eggGroups: ["Undiscovered"],
},
bazhigangquan: {
num: 9071,
name: "Bazhigangquan",
types: ["Fighting", "Steel"],
baseStats: { hp: 101, atk: 104, def: 100, spa: 35, spd: 61, spe: 68 },
abilities: { 0: "Technician" },
weightkg: 219,
eggGroups: ["Undiscovered"],
},
leechmonner: {
num: 9072,
name: "Leechmonner",
types: ["Water", "Bug"],
baseStats: { hp: 105, atk: 115, def: 70, spa: 40, spd: 110, spe: 65 },
abilities: { 0: "Drizzle", H: "Water Veil" },
weightkg: 922,
eggGroups: ["Undiscovered"],
},
ironcrest: {
num: 9073,
name: "Iron Crest",
types: ["Flying", "Fighting"],
baseStats: { hp: 72, atk: 96, def: 78, spa: 114, spd: 72, spe: 98 },
abilities: { 0: "Quark Drive" },
weightkg: 1.9,
eggGroups: ["Undiscovered"],
tags: ["Paradox"],
},
odonata: {
num: 9074,
name: "Odonata",
types: ["Flying", "Dragon"],
baseStats: { hp: 125, atk: 100, def: 80, spa: 60, spd: 80, spe: 75 },
abilities: { 0: "Shield Dust", 1: "Aerilate", H: "Tough Claws" },
weightkg: 45,
eggGroups: ["Undiscovered"],
},
hebicikuga: {
num: 9075,
name: "Hebicikuga",
types: ["Bug", "Dragon"],
baseStats: { hp: 85, atk: 115, def: 75, spa: 80, spd: 95, spe: 115 },
abilities: { 0: "Soul-Heart", H: "Technician" },
weightkg: 382.5,
eggGroups: ["Undiscovered"],
},
devestial: {
num: 9076,
name: "Devestial",
types: ["Fairy", "Ground"],
baseStats: { hp: 110, atk: 105, def: 100, spa: 115, spd: 90, spe: 80 },
abilities: { 0: "Cud Chew" },
weightkg: 340,
eggGroups: ["Undiscovered"],
},
lundicare: {
num: 9077,
name: "Lundicare",
types: ["Normal", "Fairy"],
baseStats: { hp: 101, atk: 81, def: 103, spa: 101, spd: 109, spe: 111 },
abilities: { 0: "Prism Armor", H: "Trace" },
weightkg: 606,
eggGroups: ["Undiscovered"],
},
// Meta C
lyvamp: {
num: 9078,
name: "Lyvamp",
types: ["Electric", "Flying"],
baseStats: { hp: 96, atk: 100, def: 70, spa: 41, spd: 70, spe: 91 },
abilities: { 0: "Regenerator", H: "Insomnia" },
weightkg: 189,
eggGroups: ["Undiscovered"],
},
treatmint: {
num: 9079,
name: "Treatmint",
types: ["Grass", "Poison"],
baseStats: { hp: 100, atk: 25, def: 90, spa: 100, spd: 70, spe: 45 },
abilities: { 0: "Filter", H: "Natural Cure" },
weightkg: 8.4,
eggGroups: ["Undiscovered"],
},
turvarpega: {
num: 9080,
name: "Turvarpega",
types: ["Ground", "Flying"],
baseStats: { hp: 100, atk: 100, def: 85, spa: 30, spd: 70, spe: 55 },
abilities: { 0: "Rock Head", H: "Big Pecks" },
weightkg: 680,
eggGroups: ["Undiscovered"],
},
goodjur: {
num: 9081,
name: "Goodjur",
types: ["Psychic", "Fighting"],
baseStats: { hp: 70, atk: 25, def: 60, spa: 120, spd: 70, spe: 90 },
abilities: { 0: "Natural Cure" },
weightkg: 42.5,
eggGroups: ["Undiscovered"],
},
liftaton: {
num: 9082,
name: "Liftaton",
types: ["Steel"],
baseStats: { hp: 110, atk: 90, def: 80, spa: 80, spd: 85, spe: 20 },
abilities: { 0: "Mold Breaker" },
weightkg: 180,
eggGroups: ["Undiscovered"],
},
triceracotta: {
num: 9083,
name: "Triceracotta",
types: ["Ground", "Ghost"],
baseStats: { hp: 84, atk: 111, def: 95, spa: 35, spd: 75, spe: 84 },
abilities: { 0: "Flash Fire", H: "Technician" },
weightkg: 100,
eggGroups: ["Undiscovered"],
},
woolverine: {
num: 9084,
name: "Woolverine",
types: ["Dark", "Fairy"],
baseStats: { hp: 70, atk: 120, def: 70, spa: 40, spd: 70, spe: 70 },
abilities: { 0: "Lingering Aroma", H: "Fluffy" },
weightkg: 40,
eggGroups: ["Undiscovered"],
},
combustoad: {
num: 9085,
name: "Combustoad",
types: ["Fire", "Ground"],
baseStats: { hp: 70, atk: 95, def: 70, spa: 63, spd: 70, spe: 108 },
abilities: { 0: "Neutralizing Gas" },
weightkg: 2,
eggGroups: ["Undiscovered"],
},
hearthind: {
num: 9086,
name: "Hearthind",
types: ["Fire", "Fighting"],
baseStats: { hp: 71, atk: 93, def: 68, spa: 20, spd: 66, spe: 122 },
abilities: { 0: "Grassy Surge" },
weightkg: 11.3,
eggGroups: ["Undiscovered"],
},
koiryu: {
num: 9087,
name: "Koiryu",
types: ["Water", "Dragon"],
baseStats: { hp: 90, atk: 25, def: 60, spa: 100, spd: 90, spe: 60 },
abilities: { 0: "Multiscale", 1: "Water Veil", H: "Torrent" },
weightkg: 829.7,
eggGroups: ["Undiscovered"],
},
pestiligy: {
num: 9088,
name: "Pestiligy",
types: ["Poison", "Ghost"],
baseStats: { hp: 105, atk: 15, def: 107, spa: 77, spd: 96, spe: 61 },
abilities: { 0: "Liquid Ooze", H: "Sheer Force" },
weightkg: 11.3,
eggGroups: ["Undiscovered"],
},
saxum: {
num: 9089,
name: "Saxum",
types: ["Rock", "Ground"],
baseStats: { hp: 70, atk: 100, def: 70, spa: 100, spd: 70, spe: 65 },
abilities: { 0: "Levitate" },
weightkg: 430,
eggGroups: ["Undiscovered"],
},
sascratch: {
num: 9090,
name: "Sascratch",
types: ["Ice", "Rock"],
baseStats: { hp: 70, atk: 100, def: 95, spa: 50, spd: 60, spe: 110 },
abilities: { 0: "Tough Claws", 1: "Unnerve", H: "Perish Body" },
weightkg: 20,
eggGroups: ["Undiscovered"],
},
guttergar: {
num: 9091,
name: "Guttergar",
types: ["Water"],
baseStats: { hp: 116, atk: 108, def: 55, spa: 30, spd: 104, spe: 63 },
abilities: { 0: "Mold Breaker", H: "Water Veil" },
weightkg: 106,
eggGroups: ["Undiscovered"],
},
rakasa: {
num: 9092,
name: "Rakasa",
types: ["Psychic", "Fairy"],
baseStats: { hp: 101, atk: 31, def: 79, spa: 105, spd: 81, spe: 23 },
abilities: { 0: "Prankster" },
weightkg: 19,
eggGroups: ["Undiscovered"],
},
thermostatic: {
num: 9093,
name: "Thermostatic",
types: ["Electric"],
baseStats: { hp: 90, atk: 50, def: 105, spa: 90, spd: 85, spe: 35 },
abilities: { 0: "Electromorphosis", H: "Wind Power" },
weightkg: 60,
eggGroups: ["Undiscovered"],
},
formaldehydra: {
num: 9094,
name: "Formaldehydra",
types: ["Poison", "Dragon"],
baseStats: { hp: 95, atk: 100, def: 110, spa: 60, spd: 85, spe: 60 },
abilities: { 0: "Rough Skin", H: "Stench" },
weightkg: 165.5,
eggGroups: ["Undiscovered"],
},
strumorthio: {
num: 9095,
name: "Strumorthio",
types: ["Normal", "Ghost"],
baseStats: { hp: 90, atk: 20, def: 87, spa: 95, spd: 95, spe: 20 },
abilities: { 0: "Early Bird", H: "Levitate" },
weightkg: 110,
eggGroups: ["Undiscovered"],
},
ironmike: {
num: 9096,
name: "Iron Mike",
types: ["Fairy", "Normal"],
baseStats: { hp: 88, atk: 30, def: 68, spa: 106, spd: 76, spe: 106 },
abilities: { 0: "Quark Drive" },
weightkg: 51.8,
eggGroups: ["Undiscovered"],
tags: ["Paradox"],
},
};

View File

@ -0,0 +1,17 @@
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
spriteviewer: {
effectType: 'ValidatorRule',
name: 'Sprite Viewer',
desc: "Displays a fakemon's sprite in chat when it is switched in for the first time",
onBegin() {
this.add('rule', 'Sprite Viewer: Displays sprites in chat');
},
onSwitchIn(pokemon) {
if (!this.effectState[pokemon.species.id]) {
this.add('-message', `${pokemon.species.name}'s Sprite:`);
this.add(`raw|<img src="https://github.com/scoopapa/DH2/blob/main/data/mods/blankcanvas/sprites/front/${pokemon.species.id}.png" height="96" width="96">`);
this.effectState[pokemon.species.id] = true;
}
},
},
};

View File

@ -0,0 +1,3 @@
export const Scripts: ModdedBattleScriptsData = {
gen: 9,
};

File diff suppressed because it is too large Load Diff

View File

@ -61,7 +61,7 @@ const NO_LEAD_POKEMON = [
const DOUBLES_NO_LEAD_POKEMON = [
'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta',
];
export class RandomDNUTeams extends RandomTeams {
export class RandomBLCTeams extends RandomTeams {
override cullMovePool(
types: string[],
moves: Set<string>,
@ -200,6 +200,7 @@ export class RandomDNUTeams extends RandomTeams {
[['dragonpulse', 'spacialrend'], 'dracometeor'],
['heavyslam', 'flashcannon'],
['alluringvoice', 'dazzlinggleam'],
['defog', 'rapidspin'],
// These status moves are redundant with each other
['taunt', 'disable'],
@ -217,34 +218,20 @@ export class RandomDNUTeams extends RandomTeams {
['healbell', 'stealthrock'],
// Araquanid and Magnezone
['mirrorcoat', ['hydropump', 'bodypress']],
// Marill
['seismictoss', 'liquidation'],
// Hatenna
['calmmind', 'mysticalfire'],
// Jigglypuff
[['toxic', 'thunderwave'], 'encore'],
['calmmind', 'nastyplot'],
// Impidimp
['dazzlinggleam', 'thunderwave'],
// Combee
['lunge', 'bugbuzz'],
// Nidoran-F
['sludgebomb', 'poisonjab'],
// Wattrel
['thunder', 'thunderbolt'],
['voltswitch', 'uturn'],
// Nacli
['rockslide', 'stoneedge'],
// Cleffa and Impidimp
[['alluringvoice', 'dazzlinggleam'], 'drainingkiss'],
// Fletchling
['bravebird', 'dualwingbeat'],
// Gossifleur
['sleeppowder', 'stunspore'],
// Swablu
['defog', 'cottonguard'],
// Pidove
['nightslash', ['quickattack', 'roost']],
// Plasmage
['electroshot', 'psychoboost'],
// Seaode
['stoneedge', 'stoneaxe'],
// Geigeramp
['willowisp', 'nuzzle'],
// Martorse
['willowisp', 'encore'],
// Faeruin
['substitute', 'rapidspin'],
// Geoporka
['toxic', 'stunspore'],
// Blobbiam
['spiritbreak', 'playrough'],
];
for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
@ -370,10 +357,18 @@ export class RandomDNUTeams extends RandomTeams {
}
}
// Enforce Focus Energy on Spearow
if (species.id === 'spearow') {
if (movePool.includes('focusenergy')) {
counter = this.addMove('focusenergy', moves, types, abilities, teamDetails, species, isLead, isDoubles,
// Enforce Roost on Fausteil
if (species.id === 'fausteil') {
if (movePool.includes('roost')) {
counter = this.addMove('roost', moves, types, abilities, teamDetails, species, isLead, isDoubles,
movePool, teraType, role);
}
}
// Enforce Sunny Day on Wallbreaker Cottentration
if (species.id === 'cottentration') {
if (movePool.includes('sunnyday')) {
counter = this.addMove('sunnyday', moves, types, abilities, teamDetails, species, isLead, isDoubles,
movePool, teraType, role);
}
}
@ -648,20 +643,128 @@ export class RandomDNUTeams extends RandomTeams {
}
return this.sample(species.requiredItems);
}
if (role === 'AV Pivot') return 'Assault Vest';
if (species.id === 'pikachu') return 'Light Ball';
if (species.id === 'regieleki') return 'Magnet';
if (species.id === 'smeargle') return 'Focus Sash';
if (species.id === 'nickit') return 'Throat Spray';
if (species.id === 'lechonk' && moves.has('stuffcheeks')) return 'Salac Berry';
if (species.id === 'spearow') return 'Razor Claw';
if (species.id === 'pidove' && moves.has('nightslash')) return 'Scope Lens';
if (['shedinja', 'luvdisc', 'nymble', 'fletchling'].includes(species.id)) return 'Heavy-Duty Boots';
if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
return (types.includes('Fire') || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb';
// buncha BC specific hardcodes
if (species.id === 'badjur') return 'Toxic Orb';
if (species.id === 'vipult' && role === 'Bulky Support') return this.sample(['Black Sludge', 'Heavy-Duty Boots']);
if (
(species.id === 'lundicare' && role === 'Fast Bulky Setup' && moves.has('stuffcheeks')) ||
(species.id === 'devestial' && role === 'Bulky Setup')
) {
return 'Petaya Berry';
}
if (ability === 'Sheer Force' && counter.get('sheerforce')) return 'Life Orb';
if (moves.has('raindance') || moves.has('sunnyday')) return 'Life Orb';
if (
[
'goblantern', 'lavalisk', 'eolikopter', 'scarachnid', 'bugswarm', 'leechmonner',
'hebicikuga', 'socknbuskn', 'fausteil', 'deadward', 'borealis', 'flarenheit',
].includes(species.id) ||
(species.id === 'searytch' && role === 'Bulky Attacker') ||
(species.id === 'monmothra' && role === 'Bulky Support') ||
(['crystuit', 'pinaturbo'].includes(species.id) && role === 'Fast Support')
) {
return 'Heavy-Duty Boots';
}
if (
['dastard', 'geigeramp', 'arsenstorm', 'jokerpent', 'geoporka'].includes(species.id) ||
(species.id === 'maldractice' && role === 'Bulky Support')
) {
return 'Black Sludge';
}
if (counter.get('skilllink') && ability !== 'Skill Link') return 'Loaded Dice';
if (ability === 'Sand Stream') return 'Smooth Rock';
if (ability === 'Drought' && role !== 'Setup Sweeper') return 'Heat Rock';
if (moves.has('meteorbeam') || (moves.has('electroshot') && !teamDetails.rain)) return 'Power Herb';
if (moves.has('sunnyday') || ['piss', 'sculptera'].includes(species.id)) return 'Life Orb';
if (species.id === 'plasmage' && moves.has('psychoboost') && role === 'Setup Sweeper') return 'Eject Pack';
if (['craggon', 'jackoswarm'].includes(species.id)) return this.sample(['Rocky Helmet', 'Leftovers']);
if (species.id === 'thaumaton') return (moves.has('steelbeam')) ? 'Sitrus Berry' : 'Air Balloon';
if (species.id === 'kadraoke' && role === 'Setup Sweeper') return 'Throat Spray';
if (species.id === 'sylravage') return this.sample(['Choice Band', 'Choice Scarf']);
if (species.id === 'capricorrie') return this.sample(['Heavy-Duty Boots', 'Life Orb']);
if (['snabterra', 'maldractice'].includes(species.id) && role === 'Wallbreaker') return 'Choice Band';
if (species.id === 'snabterra' && role === 'Bulky Attacker') return 'Heavy-Duty Boots';
if (species.id === 'snabterra' && role === 'Bulky Setup') return this.sample(['Leftovers', 'Sitrus Berry']);
if (species.id === 'searytch') return (role === 'Bulky Support') ? 'Leftovers' : 'Heavy-Duty Boots';
if (species.id === 'lundicare' && role === 'Fast Attacker') return this.sample(['Leftovers', 'Earth Plate']);
if (species.id === 'tryonite' && ability === 'Sturdy') return 'Leftovers';
if (species.id === 'tryonite' && role === 'Setup Sweeper') return this.sample(['Heavy-Duty Boots', 'Life Orb']);
if (species.id === 'ironcrest' && role === 'Setup Sweeper') return 'Booster Energy';
if (species.id === 'seaode') return this.sample(['Heavy-Duty Boots', 'Life Orb', 'Choice Band', 'Choice Scarf']);
if (['serpvoltidae', 'twinkaton', 'devestial'].includes(species.id) && role === 'Bulky Support') return 'Leftovers';
if (species.id === 'serpvoltidae' && role === 'Bulky Attacker' && !moves.has('shoreup')) {
return this.sample(['Choice Specs', 'Life Orb']);
}
if (species.id === 'serpvoltidae' && role === 'Bulky Attacker' && moves.has('shoreup')) return 'Life Orb';
if (species.id === 'sheepquake') return this.sample(['Leftovers', 'Life Orb']);
if (ability === 'Flare Boost') return 'Flame Orb';
if (species.id === 'sorrowcean' && ability !== 'Flare Boost') return 'Leftovers';
if (species.id === 'blobbiam' && role === 'Bulky Attacker') {
return this.sample(['Heavy-Duty Boots', 'Choice Band', 'Choice Scarf']);
}
if (
(['blobbiam', 'massassin', 'martorse'].includes(species.id) && role === 'Bulky Support') ||
['mohawtter', 'arachnode', 'porcupyre', 'bazhigangquan', 'actaniathan'].includes(species.id)
) {
return this.sample(['Heavy-Duty Boots', 'Leftovers']);
}
if (species.id === 'hippaint' && !moves.has('calmmind')) return this.sample(['Choice Specs', 'Life Orb']);
if (species.id === 'hippaint' && moves.has('calmmind')) return 'Life Orb';
if (species.id === 'parasike') return this.sample(['Heavy-Duty Boots', 'Choice Band', 'Silver Powder']);
if (species.id === 'llanfairwyrm' && role === 'Bulky Support') return this.sample(['Rocky Helmet', 'Leftovers']);
if (species.id === 'llanfairwyrm' && role === 'Bulky Setup') return this.sample(['Heavy-Duty Boots', 'Life Orb']);
if (species.id === 'karmalice') {
return (moves.has('fakeout') || role === 'Fast Support') ? 'Heavy-Duty Boots' : 'Choice Specs';
}
if (species.id === 'reversadusa' && !moves.has('substitute')) return this.sample(['Heavy-Duty Boots', 'Life Orb']);
if (species.id === 'reversadusa' && moves.has('substitute')) return 'Leftovers';
if (species.id === 'primordialith' && ability === 'Vital Spirit') return 'Leftovers';
if (['frostengu', 'monmothra', 'drakkannon'].includes(species.id) && role === 'Fast Attacker') {
return this.sample(['Choice Specs', 'Choice Scarf']);
}
if (species.id === 'frostengu' && role === 'Wallbreaker') return this.sample(['Choice Band', 'Choice Scarf']);
if (species.id === 'sleetshell' && role === 'Fast Attacker') return this.sample(['Choice Band', 'Choice Scarf']);
if (['martorse', 'faeruin'].includes(species.id) && role === 'Fast Support') {
return this.sample(['Heavy-Duty Boots', 'Leftovers']);
}
if (species.id === 'martorse' && role === 'Fast Attacker') return this.sample(['Heavy-Duty Boots', 'Life Orb']);
if (species.id === 'freightmare') return (role === 'Fast Support') ? 'Leftovers' : 'Life Orb';
if (species.id === 'faeruin' && role === 'Setup Sweeper' && !moves.has('substitute')) {
return this.sample(['Heavy-Duty Boots', 'Life Orb']);
}
if (species.id === 'faeruin' && role === 'Setup Sweeper' && moves.has('substitute')) return 'Leftovers';
if (species.id === 'haarstorm') {
if (role === 'Fast Attacker') return 'Choice Scarf';
if (role === 'Bulky Support') return 'Leftovers';
if (role === 'Fast Support') return 'Life Orb';
}
if (species.id === 'bulionage') return this.sample(['Leftovers', 'Clear Amulet']);
if (['fettogre', 'copperhead', 'psyllapse', 'obaki'].includes(species.id)) return 'Leftovers';
if (species.id === 'crystuit' && role === 'Fast Attacker') return this.sample(['Choice Specs', 'Choice Scarf']);
if (species.id === 'odonata') return this.sample(['Heavy-Duty Boots', 'Lum Berry']);
if (species.id === 'yamateraph') return this.sample(['Leftovers', 'Lum Berry']);
if (species.id === 'wizhazard') {
if (role === 'Wallbreaker') return 'Choice Specs';
if (role === 'Bulky Setup') return 'Leftovers';
}
if (species.id === 'groundead') return (role === 'Wallbreaker') ? 'Choice Band' : 'Leftovers';
if (species.id === 'bellolysk') {
if (role === 'Bulky Setup') return this.sample(['Leftovers', 'Life Orb']);
if (role === 'Bulky Support') return 'Leftovers';
if (role === 'Wallbreaker') return 'Life Orb';
}
if (species.id === 'sorrowcean' && role !== 'AV Pivot') return 'Leftovers';
if (species.id === 'versalyre') return 'Choice Scarf';
if (species.id === 'pinaturbo' && role === 'Wallbreaker') return 'Life Orb';
if (species.id === 'brasspecter') {
if (role === 'Bulky Attacker') return 'Choice Band';
if (role === 'Bulky Setup') return 'Leftovers';
}
if (species.id === 'cottentration' && role !== 'Wallbreaker') return 'Leftovers';
// backups to catch stuff that falls through the cracks
if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
return (types.includes('Fire') || ability === 'Toxic Boost' || ability === 'Poison Heal') ? 'Toxic Orb' : 'Flame Orb';
}
if (ability === 'Magic Guard' || (ability === 'Sheer Force' && counter.get('sheerforce'))) return 'Life Orb';
if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) {
if (
species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
@ -683,7 +786,7 @@ export class RandomDNUTeams extends RandomTeams {
return 'Choice Specs';
}
if (ability === 'Poison Heal' || ability === 'Quick Feet') return 'Toxic Orb';
if (moves.has('acrobatics') && ability !== 'Protosynthesis') return '';
if (moves.has('acrobatics') && ability !== 'Quark Drive' && ability !== 'Protosynthesis') return '';
if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';
if (ability === 'Gluttony') return `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`;
if (
@ -805,25 +908,6 @@ export class RandomDNUTeams extends RandomTeams {
ivs.atk = 0;
}
// Hidden Power Grass IVs
if (species.id === 'luvdisc' && moves.has('hiddenpower')) {
ivs.atk = 0;
ivs.spa = 30;
}
// Hidden Power Psychic IVs
if (species.id === 'unown') {
ivs.atk = 0;
ivs.spe = 30;
}
// Hidden Power Fire IVs
if (['fomantis', 'nincada', 'petilil', 'cherubi'].includes(species.id) && moves.has('hiddenpower')) {
ivs.atk = 0;
ivs.spa = 30;
ivs.spe = 30;
}
// Enforce Tera Type after all set generation is done to prevent infinite generation
if (this.forceTeraType) teraType = this.forceTeraType;
@ -848,7 +932,7 @@ export class RandomDNUTeams extends RandomTeams {
override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json');
randomDNUTeam() {
randomBLCTeam() {
this.enforceNoDirectCustomBanlistChanges();
const seed = this.prng.getSeed();
@ -890,7 +974,7 @@ export class RandomDNUTeams extends RandomTeams {
if (['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id) && teamDetails.teraBlast) continue;
// Illusion shouldn't be on the last slot
if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
if (species.baseSpecies === 'Sorrowcean' && pokemon.length >= (this.maxTeamSize - 1)) continue;
const types = species.types;
const typeCombo = types.slice().sort().join();
@ -1061,4 +1145,4 @@ export class RandomDNUTeams extends RandomTeams {
}
}
export default RandomDNUTeams;
export default RandomBLCTeams;

File diff suppressed because it is too large Load Diff

View File

@ -632,8 +632,6 @@ export const Teams = new class Teams {
const formatID = toID(format);
if (mod === 'gen9ssb') {
TeamGenerator = require(`../data/mods/gen9ssb/random-teams`).default;
} else if (formatID.includes('gen9donotuserandombattle')) {
TeamGenerator = require(`../data/random-battles/donotuse/teams`).default;
} else if (formatID.includes('gen9babyrandombattle')) {
TeamGenerator = require(`../data/random-battles/gen9baby/teams`).default;
} else if (formatID.includes('gen9randombattle') && format.ruleTable?.has('+pokemontag:cap')) {