mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-04-26 10:48:53 -05:00
4040 lines
150 KiB
TypeScript
4040 lines
150 KiB
TypeScript
// Note: This is the list of formats
|
|
// The rules that formats use are stored in data/rulesets.ts
|
|
/*
|
|
If you want to add custom formats, create a file in this folder named: "custom-formats.ts"
|
|
|
|
Paste the following code into the file and add your desired formats and their sections between the brackets:
|
|
--------------------------------------------------------------------------------
|
|
// Note: This is the list of formats
|
|
// The rules that formats use are stored in data/rulesets.ts
|
|
|
|
export const Formats: FormatList = [
|
|
];
|
|
--------------------------------------------------------------------------------
|
|
|
|
If you specify a section that already exists, your format will be added to the bottom of that section.
|
|
New sections will be added to the bottom of the specified column.
|
|
The column value will be ignored for repeat sections.
|
|
*/
|
|
|
|
export const Formats: FormatList = [
|
|
|
|
// Sw/Sh Singles
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "Sw/Sh Singles",
|
|
},
|
|
{
|
|
name: "[Gen 8] Random Battle",
|
|
desc: `Randomized teams of level-balanced Pokémon with sets that are generated to be competitively viable.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656537/">Random Battle Suggestions</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
team: 'random',
|
|
ruleset: ['PotD', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Unrated Random Battle",
|
|
|
|
mod: 'gen8',
|
|
team: 'random',
|
|
challengeShow: false,
|
|
rated: false,
|
|
ruleset: ['Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Free-For-All Random Battle",
|
|
|
|
mod: 'gen8',
|
|
team: 'random',
|
|
gameType: 'freeforall',
|
|
tournamentShow: false,
|
|
rated: false,
|
|
ruleset: ['Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Random Battle (Blitz)",
|
|
|
|
mod: 'gen8',
|
|
team: 'random',
|
|
ruleset: ['[Gen 8] Random Battle', 'Blitz'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Multi Random Battle",
|
|
|
|
mod: 'gen8',
|
|
team: 'random',
|
|
gameType: 'multi',
|
|
searchShow: false,
|
|
tournamentShow: false,
|
|
rated: false,
|
|
ruleset: [
|
|
'Max Team Size = 3',
|
|
'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3672210/">OU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3672556/">OU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3674058/">OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Standard', 'Dynamax Clause'],
|
|
banlist: ['Uber', 'AG', 'Arena Trap', 'Moody', 'Power Construct', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'King\'s Rock', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 8] OU (Blitz)",
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['[Gen 8] OU', 'Blitz'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Ubers",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3676539/">Ubers Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3675564/">Ubers Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3675194/">Ubers Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Standard', 'Dynamax Clause'],
|
|
banlist: ['AG', 'Shadow Tag', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 8] UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3681331/">UU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3679621/">UU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3674793/">UU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['[Gen 8] OU'],
|
|
banlist: ['OU', 'UUBL', 'Light Clay'],
|
|
},
|
|
{
|
|
name: "[Gen 8] RU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3687060/">RU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3661013/">RU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3676023/">RU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['[Gen 8] UU'],
|
|
banlist: ['UU', 'RUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 8] NU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3687023/">NU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3673598/">NU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3676265/">NU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['[Gen 8] RU'],
|
|
banlist: ['RU', 'NUBL', 'Drizzle', 'Drought', 'Slush Rush'],
|
|
},
|
|
{
|
|
name: "[Gen 8] PU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3707179/">PU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3676106/">PU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['[Gen 8] NU'],
|
|
banlist: ['NU', 'PUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 8] LC",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656348/">LC Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3661419/">LC Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3657374/">LC Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Little Cup', 'Standard', 'Dynamax Clause'],
|
|
banlist: [
|
|
'Corsola-Galar', 'Cutiefly', 'Drifloon', 'Gastly', 'Gothita', 'Rufflet', 'Scraggy', 'Scyther', 'Sneasel', 'Swirlix',
|
|
'Tangela', 'Vullaby', 'Vulpix-Alola', 'Woobat', 'Zigzagoon-Base', 'Chlorophyll', 'Moody', 'Baton Pass', 'Sticky Web',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] Monotype",
|
|
desc: `All the Pokémon on a team must share a type.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3672167/">Monotype Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3702647/">Monotype Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3673165">Monotype Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Same Type Clause', 'Standard', 'Dynamax Clause'],
|
|
banlist: [
|
|
'Blaziken', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
|
|
'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel',
|
|
'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal',
|
|
'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Moody', 'Power Construct', 'Shadow Tag', 'Damp Rock',
|
|
'Focus Band', 'King\'s Rock', 'Quick Claw', 'Smooth Rock', 'Terrain Extender', 'Acupressure', 'Baton Pass',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] 1v1",
|
|
desc: `Bring three Pokémon to Team Preview and choose one to battle.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656364/">1v1 Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3664157/">1v1 Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3657779/">1v1 Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: [
|
|
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
'Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Endless Battle Clause',
|
|
],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Jirachi',
|
|
'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mew', 'Mewtwo', 'Mimikyu', 'Necrozma', 'Necrozma-Dawn-Wings',
|
|
'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye', 'Snorlax', 'Solgaleo', 'Victini', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Band', 'Focus Sash', 'Lax Incense', 'Quick Claw',
|
|
'Acupressure', 'Hypnosis', 'Perish Song', 'Sing',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] Anything Goes",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3672172/">AG Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3675040/">AG Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3672899/">AG Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Obtainable', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 8] ZU",
|
|
desc: `The unofficial usage-based tier below PU.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3687415/">ZU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3680071/">ZU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3678037/">ZU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['[Gen 8] PU'],
|
|
banlist: [
|
|
'PU', 'Arctovish', 'Aurorus', 'Basculin', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Glastrier', 'Haunter', 'Magmortar', 'Magneton',
|
|
'Malamar', 'Ninjask', 'Omastar', 'Rotom-Frost', 'Turtonator', 'Vanilluxe', 'Vikavolt', 'Silvally-Dragon', 'Silvally-Ground', 'Sneasel',
|
|
'Damp Rock', 'Grassy Seed',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] LC UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3660866/">LC UU</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8] LC'],
|
|
banlist: [
|
|
// LC OU
|
|
'Abra', 'Carvanha', 'Diglett-Base', 'Dwebble', 'Ferroseed', 'Foongus', 'Frillish', 'Grookey', 'Koffing',
|
|
'Larvesta', 'Magby', 'Magnemite', 'Mareanie', 'Mienfoo', 'Mudbray', 'Natu', 'Onix', 'Pawniard',
|
|
'Ponyta-Base', 'Porygon', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
|
|
// LC UUBL
|
|
'Archen', 'Farfetch\u2019d-Galar', 'Scorbunny', 'Shellder', 'Wingull',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] CAP",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656824/">CAP Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3671157/">CAP Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3674024/">CAP Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['[Gen 8] OU', '+CAP'],
|
|
banlist: ['Crucibellite'],
|
|
},
|
|
{
|
|
name: "[Gen 8] CAP LC",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3691918/">CAP LC Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8997714/">CAP LC Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8997713/">CAP LC Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8] LC', '+CAP'],
|
|
banlist: ['Cawdet'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Battle Stadium Singles",
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
|
|
banlist: ['Eternatus-Eternamax'],
|
|
unbanlist: ['Mythical', 'Restricted Legendary'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Custom Game",
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
// no restrictions, for serious (other than team preview)
|
|
ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
|
|
// Sw/Sh Doubles
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "Sw/Sh Doubles",
|
|
},
|
|
{
|
|
name: "[Gen 8] Random Doubles Battle",
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
team: 'random',
|
|
ruleset: ['PotD', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Doubles OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3689189/">Doubles OU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3658826/">Doubles OU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3673519/">Doubles OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
ruleset: ['Standard Doubles', 'Dynamax Clause', 'Swagger Clause'],
|
|
banlist: ['DUber', 'Power Construct', 'Shadow Tag'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Doubles Ubers",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3661142/">Doubles Ubers</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
ruleset: ['Standard Doubles', '!Gravity Sleep Clause'],
|
|
banlist: [],
|
|
},
|
|
{
|
|
name: "[Gen 8] Doubles UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3658504/">Doubles UU</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
ruleset: ['[Gen 8] Doubles OU'],
|
|
banlist: ['DOU', 'DBL'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Doubles LC",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3658672/">Doubles LC</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Standard Doubles', 'Little Cup', 'Dynamax Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
banlist: ['Corsola-Galar', 'Cutiefly', 'Ponyta-Base', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix-Base', 'Ally Switch'],
|
|
},
|
|
{
|
|
name: "[Gen 8] VGC 2022",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3677186/">VGC 2022 Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3695848/">VGC 2022 Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3696395/">VGC 2022 Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit Two Restricted'],
|
|
restricted: ['Restricted Legendary'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Battle Stadium Doubles Series 13",
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer'],
|
|
banlist: ['Eternatus-Eternamax'],
|
|
unbanlist: ['Mythical', 'Restricted Legendary'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Ultimate Finale",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3709248/">Ultimate Finale Discussion</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
ruleset: ['Obtainable', 'Team Preview', 'Nickname Clause', 'Adjust Level = 100', 'Cancel Mod', 'Min Source Gen = 8'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Spikemuth Cup",
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
ruleset: ['Flat Rules', 'Dynamax Clause', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer'],
|
|
},
|
|
{
|
|
name: "[Gen 8] VGC 2021",
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer'],
|
|
},
|
|
{
|
|
name: "[Gen 8] VGC 2020",
|
|
|
|
mod: 'gen8dlc1',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer'],
|
|
},
|
|
{
|
|
name: "[Gen 8] 2v2 Doubles",
|
|
desc: `Double battle where you bring four Pokémon to Team Preview and choose only two.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656321/">2v2 Doubles</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
ruleset: [
|
|
'Picked Team Size = 2', 'Max Team Size = 4',
|
|
'Standard Doubles', 'Accuracy Moves Clause', 'Dynamax Clause', 'Sleep Clause Mod',
|
|
],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cottonee', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Jirachi', 'Kyogre',
|
|
'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza',
|
|
'Reshiram', 'Solgaleo', 'Tornadus-Base', 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Whimsicott', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Power Construct', 'Focus Sash', 'Ally Switch', 'Final Gambit', 'Perish Song', 'Swagger',
|
|
],
|
|
},
|
|
{
|
|
name: '[Gen 8] Metronome Battle',
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3632075/">Metronome Battle</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
ruleset: [
|
|
'Max Team Size = 2',
|
|
'HP Percentage Mod', 'Cancel Mod',
|
|
],
|
|
banlist: [
|
|
'Pokestar Spirit', 'Shedinja + Sturdy', 'Battle Bond', 'Cheek Pouch', 'Cursed Body', 'Dry Skin', 'Fur Coat', 'Gorilla Tactics',
|
|
'Grassy Surge', 'Huge Power', 'Ice Body', 'Iron Barbs', 'Libero', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Perish Body', 'Poison Heal',
|
|
'Power Construct', 'Pressure', 'Protean', 'Pure Power', 'Rain Dish', 'Rough Skin', 'Sand Spit', 'Sand Stream', 'Snow Warning', 'Stamina',
|
|
'Volt Absorb', 'Water Absorb', 'Wonder Guard', 'Abomasite', 'Aguav Berry', 'Assault Vest', 'Berry', 'Berry Juice', 'Berserk Gene',
|
|
'Black Sludge', 'Enigma Berry', 'Figy Berry', 'Gold Berry', 'Iapapa Berry', 'Kangaskhanite', 'Leftovers', 'Mago Berry', 'Medichamite',
|
|
'Steel Memory', 'Oran Berry', 'Rocky Helmet', 'Shell Bell', 'Sitrus Berry', 'Wiki Berry', 'Harvest + Jaboca Berry', 'Harvest + Rowap Berry',
|
|
],
|
|
onValidateSet(set) {
|
|
const species = this.dex.species.get(set.species);
|
|
if (species.types.includes('Steel')) {
|
|
return [`${species.name} is a Steel-type, which is banned from Metronome Battle.`];
|
|
}
|
|
if (species.bst > 625) {
|
|
return [`${species.name} is banned.`, `(Pok\u00e9mon with a BST higher than 625 are banned)`];
|
|
}
|
|
const item = this.dex.items.get(set.item);
|
|
if (set.item && item.megaStone) {
|
|
const megaSpecies = this.dex.species.get(item.megaStone);
|
|
if (species.baseSpecies === item.megaEvolves && megaSpecies.bst > 625) {
|
|
return [
|
|
`${set.name || set.species}'s item ${item.name} is banned.`, `(Pok\u00e9mon with a BST higher than 625 are banned)`,
|
|
];
|
|
}
|
|
}
|
|
if (set.moves.length !== 1 || this.dex.moves.get(set.moves[0]).id !== 'metronome') {
|
|
return [`${set.name || set.species} has illegal moves.`, `(Pok\u00e9mon can only have one Metronome in their moveset)`];
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Doubles Custom Game",
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
battle: {trunc: Math.trunc},
|
|
debug: true,
|
|
// no restrictions, for serious (other than team preview)
|
|
ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
|
|
// National Dex
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "National Dex",
|
|
},
|
|
{
|
|
name: "[Gen 8] National Dex",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3666135/">National Dex Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3667921/">National Dex Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3666572/">National Dex Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
|
|
banlist: ['ND Uber', 'Arena Trap', 'Moody', 'Power Construct', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Razor Fang', 'Quick Claw', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 8] National Dex UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3660920/">National Dex UU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3672486/">National Dex UU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3672482/">National Dex UU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['[Gen 8] National Dex'],
|
|
banlist: ['ND OU', 'ND UUBL', 'Drizzle', 'Drought', 'Light Clay', 'Slowbronite'],
|
|
},
|
|
{
|
|
name: "[Gen 8] National Dex RU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3691290/">National Dex RU</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8] National Dex UU'],
|
|
banlist: ['ND UU', 'ND RUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 8] National Dex Monotype",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3677638/">National Dex Monotype Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3677637/">National Dex Monotype Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3677636/">National Dex Monotype Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Standard NatDex', 'Same Type Clause', 'Species Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
|
|
banlist: [
|
|
'Arceus', 'Blastoise-Mega', 'Blaziken', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dracovish', 'Dragapult',
|
|
'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kartana', 'Kyogre',
|
|
'Kyurem-Black', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo',
|
|
'Moltres-Galar', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky',
|
|
'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base',
|
|
'Battle Bond', 'Moody', 'Power Construct', 'Shadow Tag',
|
|
'Bright Powder', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Smooth Rock', 'Terrain Extender', 'Baton Pass',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] National Dex AG",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3672423/">National Dex AG</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Standard NatDex'],
|
|
},
|
|
|
|
// Pet Mods
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "Pet Mods",
|
|
},
|
|
{
|
|
name: "[Gen 8] National Dex BH",
|
|
desc: `Balanced Hackmons with National Dex elements mixed in.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3658587/">National Dex Balanced Hackmons</a>`,
|
|
],
|
|
mod: 'gen8',
|
|
ruleset: ['-Nonexistent', 'Standard NatDex', 'Forme Clause', 'Sleep Moves Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', '!Obtainable'],
|
|
banlist: [
|
|
// Pokemon
|
|
'Eternatus-Eternamax', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Cramorant-Gorging', 'Calyrex-Shadow', 'Darmanitan-Galar-Zen',
|
|
// Abilities
|
|
'Arena Trap', 'Contrary', 'Gorilla Tactics', 'Huge Power', 'Illusion', 'Innards Out', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard',
|
|
// Items
|
|
'Gengarite',
|
|
// Moves
|
|
'Chatter', 'Double Iron Bash', 'Octolock', 'Shell Smash', 'Bolt Beak', 'Belly Drum', 'Electrify', 'Court Change',
|
|
// Other
|
|
'Comatose + Sleep Talk', 'Imprison + Transform',
|
|
],
|
|
onValidateSet(set) {
|
|
if (this.toID(set.ability) === 'intrepidsword' &&
|
|
!this.toID(set.species).startsWith('zacian') && this.toID(set.item) !== 'rustedsword') {
|
|
return [`${set.ability} is banned.`];
|
|
}
|
|
if (set.species === 'Zacian-Crowned' &&
|
|
(this.toID(set.item) !== 'rustedsword' || this.toID(set.ability) !== 'intrepidsword')) {
|
|
return [`${set.species} is banned.`];
|
|
}
|
|
},
|
|
onValidateTeam(team) {
|
|
let arceus = 0;
|
|
for (const set of team) {
|
|
const species = this.dex.species.get(set.species);
|
|
if (species.baseSpecies === "Arceus") arceus++;
|
|
}
|
|
if (arceus > 1) {
|
|
return [`You are limited to one Arceus forme.`, `(You have ${arceus} Arceus formes.)`];
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] JolteMons Random Battle",
|
|
desc: `Pokémon, items, abilities, and moves are redesigned for OU, and new items, abilities, and moves are added, all without changing base stats.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3694234/">JolteMons</a>`,
|
|
`• <a href="https://docs.google.com/spreadsheets/d/149ZlQY0bJIAqfWB_233Dvbpqs3pVSHYpIoAQQkwquls/edit?usp=sharing">Spreadsheet</a>`,
|
|
],
|
|
mod: 'joltemons',
|
|
team: 'random',
|
|
ruleset: ['Dynamax Clause', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Mega Data Mod', 'Z-Move Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 6] NEXT OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3476151/">Gen-NEXT Development Thread</a>`,
|
|
],
|
|
|
|
mod: 'gennext',
|
|
searchShow: false,
|
|
challengeShow: false,
|
|
ruleset: ['Obtainable', 'Standard NEXT', 'Team Preview'],
|
|
banlist: ['Uber'],
|
|
},
|
|
|
|
// OM of the Month
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "OM of the Month",
|
|
column: 2,
|
|
},
|
|
{
|
|
name: "[Gen 8] Revelationmons",
|
|
desc: `The moves in the first slot(s) of a Pokémon's set have their types changed to match the Pokémon's type(s).`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3692297/">Revelationmons</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Standard OMs', 'Revelationmons Mod', 'Sleep Moves Clause'],
|
|
banlist: [
|
|
'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Dragapult', 'Eternatus',
|
|
'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kingdra', 'Kommo-o', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
|
|
'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
|
|
'Noivern', 'Palkia', 'Pheromosa', 'Polteageist', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Thundurus-Therian', 'Urshifu-Base',
|
|
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull',
|
|
'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
|
|
],
|
|
restricted: ['Bolt Beak', 'Close Combat', 'U-turn', 'Volt Switch'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Tag Team Singles",
|
|
desc: `Bring four Pokémon to Team Preview and choose two to battle in a singles battle.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
|
|
'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
|
|
'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
|
|
],
|
|
},
|
|
|
|
// Other Metagames
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "Other Metagames",
|
|
column: 2,
|
|
},
|
|
{
|
|
name: "[Gen 8] Balanced Hackmons",
|
|
desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656408/">Balanced Hackmons</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3659817/">BH Resources</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['-Nonexistent', 'OHKO Clause', 'Evasion Moves Clause', 'Forme Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Sleep Moves Clause', 'Endless Battle Clause'],
|
|
banlist: [
|
|
'Calyrex-Shadow', 'Cramorant-Gorging', 'Darmanitan-Galar-Zen', 'Eternatus-Eternamax', 'Shedinja', 'Zacian-Crowned',
|
|
'Arena Trap', 'Contrary', 'Gorilla Tactics', 'Huge Power', 'Illusion', 'Innards Out', 'Intrepid Sword', 'Libero',
|
|
'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout',
|
|
'Water Bubble', 'Wonder Guard', 'Comatose + Sleep Talk', 'Rusted Sword', 'Belly Drum', 'Bolt Beak', 'Court Change',
|
|
'Double Iron Bash', 'Octolock', 'Shell Smash',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] Almost Any Ability",
|
|
desc: `Pokémon have access to almost any ability.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656414/">Almost Any Ability</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3682690/">AAA Resources</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Standard OMs', '!Obtainable Abilities', '2 Ability Clause', 'Sleep Moves Clause'],
|
|
banlist: [
|
|
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Genesect',
|
|
'Gengar', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
|
|
'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa',
|
|
'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas',
|
|
'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy',
|
|
'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Intrepid Sword', 'Libero', 'Magic Bounce',
|
|
'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout',
|
|
'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] Mix and Mega",
|
|
desc: `Mega evolve any Pokémon with any mega stone and no limit. Boosts based on mega evolution from gen 7.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656469/">Mix and Mega</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3659028/">M&M Resources</a>`,
|
|
],
|
|
|
|
mod: 'mixandmega',
|
|
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
banlist: [
|
|
'Calyrex-Shadow', 'Eternatus', 'Kyogre', 'Zacian',
|
|
'Beedrillite', 'Blazikenite', 'Gengarite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite',
|
|
'Moody', 'Shadow Tag', 'Baton Pass', 'Electrify',
|
|
],
|
|
restricted: [
|
|
'Calyrex-Ice', 'Dialga', 'Gengar', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
|
|
'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
|
|
'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu', 'Urshifu-Rapid-Strike', 'Xerneas',
|
|
'Yveltal', 'Zekrom', 'Zygarde-Complete',
|
|
],
|
|
onValidateTeam(team) {
|
|
const itemTable = new Set<ID>();
|
|
for (const set of team) {
|
|
const item = this.dex.items.get(set.item);
|
|
if (!item.megaStone) continue;
|
|
const natdex = this.ruleTable.has('standardnatdex');
|
|
if (natdex && item.id !== 'ultranecroziumz') continue;
|
|
const species = this.dex.species.get(set.species);
|
|
if (species.isNonstandard && !this.ruleTable.has(`+${this.toID(species.isNonstandard)}`)) {
|
|
return [`${species.baseSpecies} does not exist in gen 8.`];
|
|
}
|
|
if (natdex && species.name.startsWith('Necrozma-') && item.id === 'ultranecroziumz') {
|
|
continue;
|
|
}
|
|
if (this.ruleTable.isRestrictedSpecies(species) || this.toID(set.ability) === 'powerconstruct') {
|
|
return [`${species.name} is not allowed to hold ${item.name}.`];
|
|
}
|
|
if (itemTable.has(item.id)) {
|
|
return [`You are limited to one of each mega stone.`, `(You have more than one ${item.name})`];
|
|
}
|
|
itemTable.add(item.id);
|
|
}
|
|
},
|
|
onBegin() {
|
|
for (const pokemon of this.getAllPokemon()) {
|
|
pokemon.m.originalSpecies = pokemon.baseSpecies.name;
|
|
}
|
|
},
|
|
onSwitchIn(pokemon) {
|
|
// @ts-ignore
|
|
const oMegaSpecies = this.dex.species.get(pokemon.species.originalMega);
|
|
if (oMegaSpecies.exists && pokemon.m.originalSpecies !== oMegaSpecies.baseSpecies) {
|
|
// Place volatiles on the Pokémon to show its mega-evolved condition and details
|
|
this.add('-start', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]');
|
|
const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
|
|
if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) {
|
|
this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
|
|
}
|
|
}
|
|
},
|
|
onSwitchOut(pokemon) {
|
|
// @ts-ignore
|
|
const oMegaSpecies = this.dex.species.get(pokemon.species.originalMega);
|
|
if (oMegaSpecies.exists && pokemon.m.originalSpecies !== oMegaSpecies.baseSpecies) {
|
|
this.add('-end', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]');
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] STABmons",
|
|
desc: `Pokémon can use any move of their typing, in addition to the moves they can normally learn.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656429/">STABmons</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3695169/">STABmons Resources</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Standard OMs', 'STABmons Move Legality', 'Sleep Moves Clause'],
|
|
banlist: [
|
|
'Aegislash', 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
|
|
'Genesect', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus',
|
|
'Landorus-Therian', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Silvally', 'Solgaleo', 'Spectrier', 'Tapu Bulu', 'Tapu Koko', 'Tapu Lele', 'Thundurus-Base',
|
|
'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zapdos-Galar', 'Zekrom', 'Zygarde-Base',
|
|
'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
|
|
],
|
|
restricted: [
|
|
'Acupressure', 'Astral Barrage', 'Belly Drum', 'Bolt Beak', 'Clangorous Soul', 'Double Iron Bash', 'Electrify', 'Extreme Speed', 'Final Gambit',
|
|
'Fishious Rend', 'Geomancy', 'Glacial Lance', 'Oblivion Wing', 'Precipice Blades', 'Shell Smash', 'Shift Gear', 'Thousand Arrows', 'Thunderous Kick',
|
|
'V-create', 'Wicked Blow',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] NFE",
|
|
desc: `Only Pokémon that can evolve are allowed.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656332/">NFE Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3672463/">NFE Resources</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Standard OMs', 'Not Fully Evolved', 'Sleep Clause Mod'],
|
|
banlist: [
|
|
'Chansey', 'Doublade', 'Golbat', 'Haunter', 'Kadabra', 'Magmar', 'Magneton', 'Mr. Mime-Galar', 'Pawniard', 'Pikachu',
|
|
'Porygon2', 'Rhydon', 'Scyther', 'Sneasel', 'Type: Null', 'Vulpix-Base', 'Arena Trap', 'Shadow Tag', 'Baton Pass',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] Godly Gift",
|
|
desc: `Each Pokémon receives one base stat from a God (AG/Uber Pokémon) depending on its position in the team. If there is no Uber Pokémon, it uses the Pokémon in the first slot.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3660461/">Godly Gift</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
ruleset: ['Standard OMs', 'Sleep Moves Clause'],
|
|
banlist: [
|
|
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Kyogre', 'Marowak-Alola', 'Melmetal',
|
|
'Nidoking', 'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap',
|
|
'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense',
|
|
'Quick Claw', 'Baton Pass',
|
|
],
|
|
onValidateTeam(team) {
|
|
const gods = new Set<string>();
|
|
for (const set of team) {
|
|
let species = this.dex.species.get(set.species);
|
|
if (typeof species.battleOnly === 'string') species = this.dex.species.get(species.battleOnly);
|
|
if (set.item && this.dex.items.get(set.item).megaStone) {
|
|
const item = this.dex.items.get(set.item);
|
|
if (item.megaEvolves === species.baseSpecies) {
|
|
species = this.dex.species.get(item.megaStone);
|
|
}
|
|
}
|
|
if (this.ruleTable.has('standardnatdex')) {
|
|
const format = this.dex.formats.getRuleTable(this.dex.formats.get('gen8nationaldex'));
|
|
if (format.isBannedSpecies(species)) gods.add(species.name);
|
|
} else {
|
|
if (['ag', 'uber'].includes(this.toID(species.tier)) || this.toID(set.ability) === 'powerconstruct') {
|
|
gods.add(species.name);
|
|
}
|
|
}
|
|
}
|
|
if (gods.size > 1) {
|
|
return [`You have too many Gods.`, `(${Array.from(gods).join(', ')} are Gods.)`];
|
|
}
|
|
},
|
|
onModifySpeciesPriority: 3,
|
|
onModifySpecies(species, target, source) {
|
|
if (source || !target?.side) return;
|
|
const god = target.side.team.find(set => {
|
|
let godSpecies = this.dex.species.get(set.species);
|
|
const isNatDex = this.format.ruleTable?.has('standardnatdex');
|
|
const validator = this.dex.formats.getRuleTable(
|
|
this.dex.formats.get(`gen${isNatDex && this.gen < 8 ? 8 : this.gen}${isNatDex ? 'nationaldex' : 'ou'}`)
|
|
);
|
|
if (this.toID(set.ability) === 'powerconstruct') {
|
|
return true;
|
|
}
|
|
if (set.item) {
|
|
const item = this.dex.items.get(set.item);
|
|
if (item.megaEvolves === set.species) godSpecies = this.dex.species.get(item.megaStone);
|
|
}
|
|
const isBanned = validator.isBannedSpecies(godSpecies);
|
|
return isBanned;
|
|
}) || target.side.team[0];
|
|
const stat = Dex.stats.ids()[target.side.team.indexOf(target.set)];
|
|
const newSpecies = this.dex.deepClone(species);
|
|
let godSpecies = this.dex.species.get(god.species);
|
|
if (typeof godSpecies.battleOnly === 'string') {
|
|
godSpecies = this.dex.species.get(godSpecies.battleOnly);
|
|
}
|
|
newSpecies.bst -= newSpecies.baseStats[stat];
|
|
newSpecies.baseStats[stat] = godSpecies.baseStats[stat];
|
|
newSpecies.bst += newSpecies.baseStats[stat];
|
|
return newSpecies;
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Free-For-All",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3681641/">Free-For-All</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
gameType: 'freeforall',
|
|
rated: false,
|
|
tournamentShow: false,
|
|
ruleset: ['Standard Doubles', 'Sleep Clause Mod', 'Dynamax Clause', '!Gravity Sleep Clause'],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre',
|
|
'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza',
|
|
'Reshiram', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
|
|
'Zygarde-Complete', 'Moody', 'Power Construct', 'Shadow Tag', 'Acupressure', 'Aromatic Mist', 'Baton Pass', 'Coaching', 'Court Change',
|
|
'Decorate', 'Final Gambit', 'Flatter', 'Floral Healing', 'Flower Shield', 'Follow Me', 'Heal Pulse', 'Rage Powder', 'Swagger',
|
|
],
|
|
},
|
|
|
|
// Brilliant Diamond/Shining Pearl
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "BD/SP",
|
|
column: 2,
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] Random Battle",
|
|
desc: `Randomized teams of level-balanced Pokémon with sets that are generated to be competitively viable.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3693955/">BDSP Random Battle Set Discussion</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
team: 'random',
|
|
ruleset: ['[Gen 8] Random Battle', '!PotD'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3693629/">BDSP OU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3693721/">BDSP OU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3696088/">BDSP OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
ruleset: ['Standard'],
|
|
banlist: ['Uber', 'Arena Trap', 'Drizzle', 'Moody', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'King\'s Rock', 'Razor Fang', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] Ubers",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3694036/">BDSP Ubers Discussion & Resources</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
searchShow: false,
|
|
ruleset: ['Standard'],
|
|
banlist: ['AG', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3694307/">BDSP UU</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8 BDSP] OU'],
|
|
banlist: ['OU', 'UUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] RU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3695563/">BDSP RU</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8 BDSP] UU'],
|
|
banlist: ['UU', 'RUBL', 'Drought'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] NU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3697080/">BDSP NU</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8 BDSP] RU'],
|
|
banlist: ['RU', 'NUBL', 'Damp Rock', 'Heat Rock'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] PU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3700009/">BDSP PU</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8 BDSP] NU'],
|
|
banlist: ['NU', 'PUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] LC",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3696004/">BDSP LC</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
searchShow: false,
|
|
ruleset: ['Little Cup', 'Standard'],
|
|
banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Munchlax', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Moody', 'Baton Pass', 'Sticky Web'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] Monotype",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3694267/">BDSP Monotype</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8 BDSP] OU', 'Same Type Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] CAP",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3694238/">BDSP CAP</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8 BDSP] OU', '+CAP'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] Doubles OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3693891/">BDSP Doubles OU</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
gameType: 'doubles',
|
|
ruleset: ['Standard Doubles'],
|
|
banlist: ['DUber', 'Dark Void'],
|
|
},
|
|
{
|
|
name: "[Gen 8 BDSP] Battle Festival Doubles",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3694269/">Battle Festival Doubles</a>`,
|
|
],
|
|
|
|
mod: 'gen8bdsp',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Min Source Gen = 8'],
|
|
},
|
|
|
|
// Challengeable OMs
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "Challengeable OMs",
|
|
column: 2,
|
|
},
|
|
{
|
|
name: "[Gen 8] Camomons",
|
|
desc: `Pokémon change type to match their first two moves.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656413/">Camomons</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
ruleset: ['Standard OMs', 'Camomons Mod', 'Sleep Clause Mod'],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin',
|
|
'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Marshadow',
|
|
'Mew', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo',
|
|
'Spectrier', 'Tornadus-Therian', 'Volcarona', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zeraora',
|
|
'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass', 'Calm Mind',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 8] Cross Evolution",
|
|
desc: `Give a Pokémon a Pokémon name of the next evolution stage as a nickname to inherit stat changes, typing, abilities, and up to 2 moves from the next stage Pokémon.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3657562/">Cross Evolution</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
ruleset: ['Standard OMs', '2 Ability Clause', 'Sleep Clause Mod'],
|
|
banlist: ['Corsola-Galar', 'Sneasel', 'Type: Null', 'Arena Trap', 'Ice Scales', 'Moody', 'King\'s Rock', 'Baton Pass'],
|
|
restricted: ['Chansey', 'Lunala', 'Shedinja', 'Solgaleo', 'Gorilla Tactics', 'Huge Power', 'Pure Power', 'Shadow Tag'],
|
|
onValidateTeam(team) {
|
|
const names = new Set<ID>();
|
|
for (const set of team) {
|
|
const name = set.name;
|
|
if (names.has(this.dex.toID(name))) {
|
|
return [
|
|
`Your Pok\u00e9mon must have different nicknames.`,
|
|
`(You have more than one Pok\u00e9mon named '${name}')`,
|
|
];
|
|
}
|
|
names.add(this.dex.toID(name));
|
|
}
|
|
if (!names.size) {
|
|
return [
|
|
`${this.format.name} works using nicknames; your team has 0 nicknamed Pok\u00e9mon.`,
|
|
`(If this was intentional, add a nickname to one Pok\u00e9mon that isn't the name of a Pok\u00e9mon species.)`,
|
|
];
|
|
}
|
|
},
|
|
checkCanLearn(move, species, lsetData, set) {
|
|
// @ts-ignore
|
|
if (!set.sp?.exists || !set.crossSpecies?.exists) {
|
|
return this.checkCanLearn(move, species, lsetData, set);
|
|
}
|
|
// @ts-ignore
|
|
const problem = this.checkCanLearn(move, set.sp);
|
|
if (!problem) return null;
|
|
// @ts-ignore
|
|
if (!set.crossMovesLeft) return problem;
|
|
// @ts-ignore
|
|
if (this.checkCanLearn(move, set.crossSpecies)) return problem;
|
|
// @ts-ignore
|
|
set.crossMovesLeft--;
|
|
return null;
|
|
},
|
|
validateSet(set, teamHas) {
|
|
const crossSpecies = this.dex.species.get(set.name);
|
|
let problems = this.dex.formats.get('Pokemon').onChangeSet?.call(this, set, this.format) || null;
|
|
if (Array.isArray(problems) && problems.length) return problems;
|
|
const crossNonstandard = (!this.ruleTable.has('standardnatdex') && crossSpecies.isNonstandard === 'Past') ||
|
|
crossSpecies.isNonstandard === 'Future';
|
|
const crossIsCap = !this.ruleTable.has('+pokemontag:cap') && crossSpecies.isNonstandard === 'CAP';
|
|
if (!crossSpecies.exists || crossNonstandard || crossIsCap) return this.validateSet(set, teamHas);
|
|
const species = this.dex.species.get(set.species);
|
|
const check = this.checkSpecies(set, species, species, {});
|
|
if (check) return [check];
|
|
const nonstandard = !this.ruleTable.has('standardnatdex') && species.isNonstandard === 'Past';
|
|
const isCap = !this.ruleTable.has('+pokemontag:cap') && species.isNonstandard === 'CAP';
|
|
if (!species.exists || nonstandard || isCap || species === crossSpecies) return this.validateSet(set, teamHas);
|
|
if (!species.nfe) return [`${species.name} cannot cross evolve because it doesn't evolve.`];
|
|
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) {
|
|
return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it isn't an evolution.`];
|
|
}
|
|
if (this.ruleTable.isRestrictedSpecies(crossSpecies)) {
|
|
return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it is banned.`];
|
|
}
|
|
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
if (!crossPrevoSpecies.prevo !== !species.prevo) {
|
|
return [
|
|
`${species.name} cannot cross evolve into ${crossSpecies.name} because they are not consecutive evolution stages.`,
|
|
];
|
|
}
|
|
const item = this.dex.items.get(set.item);
|
|
if (item.itemUser?.length) {
|
|
if (!item.itemUser.includes(crossSpecies.name) || crossSpecies.name !== species.name) {
|
|
return [`${species.name} cannot use ${item.name} because it is cross evolved into ${crossSpecies.name}.`];
|
|
}
|
|
}
|
|
const ability = this.dex.abilities.get(set.ability);
|
|
if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) {
|
|
set.species = crossSpecies.name;
|
|
}
|
|
|
|
// @ts-ignore
|
|
set.sp = species;
|
|
// @ts-ignore
|
|
set.crossSpecies = crossSpecies;
|
|
// @ts-ignore
|
|
set.crossMovesLeft = 2;
|
|
problems = this.validateSet(set, teamHas);
|
|
set.name = crossSpecies.name;
|
|
set.species = species.name;
|
|
return problems;
|
|
},
|
|
onModifySpecies(species, target, source, effect) {
|
|
if (!target) return; // chat
|
|
if (effect && ['imposter', 'transform'].includes(effect.id)) return;
|
|
if (target.set.name === target.set.species) return;
|
|
const crossSpecies = this.dex.species.get(target.set.name);
|
|
if (!crossSpecies.exists) return;
|
|
if (species.battleOnly || !species.nfe) return;
|
|
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) return;
|
|
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
if (!crossPrevoSpecies.prevo !== !species.prevo) return;
|
|
|
|
const mixedSpecies = this.dex.deepClone(species);
|
|
mixedSpecies.weightkg =
|
|
Math.max(0.1, +(species.weightkg + crossSpecies.weightkg - crossPrevoSpecies.weightkg)).toFixed(1);
|
|
mixedSpecies.nfe = false;
|
|
mixedSpecies.evos = [];
|
|
mixedSpecies.eggGroups = crossSpecies.eggGroups;
|
|
mixedSpecies.abilities = crossSpecies.abilities;
|
|
mixedSpecies.bst = 0;
|
|
let i: StatID;
|
|
for (i in species.baseStats) {
|
|
const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i];
|
|
mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255);
|
|
mixedSpecies.bst += mixedSpecies.baseStats[i];
|
|
}
|
|
if (crossSpecies.types[0] !== crossPrevoSpecies.types[0]) mixedSpecies.types[0] = crossSpecies.types[0];
|
|
if (crossSpecies.types[1] !== crossPrevoSpecies.types[1]) {
|
|
mixedSpecies.types[1] = crossSpecies.types[1] || crossSpecies.types[0];
|
|
}
|
|
if (mixedSpecies.types[0] === mixedSpecies.types[1]) mixedSpecies.types = [mixedSpecies.types[0]];
|
|
|
|
return mixedSpecies;
|
|
},
|
|
onBegin() {
|
|
for (const pokemon of this.getAllPokemon()) {
|
|
pokemon.baseSpecies = pokemon.species;
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Inheritance",
|
|
desc: `Pokémon may use the ability and moves of another, as long as they forfeit their own learnset.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656811/">Inheritance</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
ruleset: ['Standard OMs', '2 Ability Clause', 'Sleep Moves Clause'],
|
|
banlist: [
|
|
'Blacephalon', 'Blaziken', 'Butterfree', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chansey', 'Combusken', 'Cresselia', 'Darmanitan-Galar', 'Dialga',
|
|
'Dracovish', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
|
|
'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Natu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza',
|
|
'Regieleki', 'Regigigas', 'Reshiram', 'Sableye', 'Shedinja', 'Solgaleo', 'Spectrier', 'Tapu Koko', 'Toxtricity', 'Torkoal', 'Urshifu-Base',
|
|
'Xatu', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zeraora', 'Zekrom', 'Arena Trap', 'Contrary',
|
|
'Drizzle', 'Huge Power', 'Imposter', 'Innards Out', 'Libero', 'Moody', 'Power Construct', 'Pure Power', 'Quick Draw', 'Shadow Tag', 'Sheer Force',
|
|
'Simple', 'Unaware', 'Unburden', 'Water Bubble', 'King\'s Rock', 'Quick Claw', 'Baton Pass', 'Bolt Beak', 'Fishious Rend', 'Shell Smash',
|
|
'Thousand Arrows',
|
|
],
|
|
getEvoFamily(speciesid) {
|
|
let species = Dex.species.get(speciesid);
|
|
while (species.prevo) {
|
|
species = Dex.species.get(species.prevo);
|
|
}
|
|
return species.id;
|
|
},
|
|
validateSet(set, teamHas) {
|
|
const unreleased = (pokemon: Species) => pokemon.tier === "Unreleased" && pokemon.isNonstandard === "Unobtainable";
|
|
if (!teamHas.abilityMap) {
|
|
teamHas.abilityMap = Object.create(null);
|
|
for (const pokemon of Dex.species.all()) {
|
|
if (pokemon.isNonstandard || unreleased(pokemon)) continue;
|
|
if (pokemon.requiredAbility || pokemon.requiredItem || pokemon.requiredMove) continue;
|
|
if (this.ruleTable.isBannedSpecies(pokemon)) continue;
|
|
|
|
for (const key of Object.values(pokemon.abilities)) {
|
|
const abilityId = this.dex.toID(key);
|
|
if (abilityId in teamHas.abilityMap) {
|
|
teamHas.abilityMap[abilityId][pokemon.evos ? 'push' : 'unshift'](pokemon.id);
|
|
} else {
|
|
teamHas.abilityMap[abilityId] = [pokemon.id];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
const problem = this.validateForme(set);
|
|
if (problem.length) return problem;
|
|
|
|
const species = this.dex.species.get(set.species);
|
|
if (!species.exists || species.num < 1) return [`The Pok\u00e9mon "${set.species}" does not exist.`];
|
|
if (species.isNonstandard || unreleased(species)) {
|
|
return [`${species.name} is not obtainable in Generation ${this.dex.gen}.`];
|
|
}
|
|
|
|
const name = set.name;
|
|
if (this.ruleTable.isBannedSpecies(species)) {
|
|
return this.validateSet(set, teamHas);
|
|
}
|
|
|
|
const ability = this.dex.abilities.get(set.ability);
|
|
if (!ability.exists || ability.isNonstandard) return [`${name} needs to have a valid ability.`];
|
|
const pokemonWithAbility = teamHas.abilityMap[ability.id];
|
|
if (!pokemonWithAbility) return [`${ability.name} is not available on a legal Pok\u00e9mon.`];
|
|
|
|
(this.format as any).debug = true;
|
|
|
|
if (!teamHas.abilitySources) teamHas.abilitySources = Object.create(null);
|
|
const validSources: string[] = teamHas.abilitySources[this.dex.toID(set.species)] = []; // Evolution families
|
|
|
|
let canonicalSource = ''; // Specific for the basic implementation of Donor Clause (see onValidateTeam).
|
|
|
|
for (const donor of pokemonWithAbility) {
|
|
const donorSpecies = this.dex.species.get(donor);
|
|
let format = this.format;
|
|
if (!format.getEvoFamily) format = this.dex.formats.get('gen8inheritance');
|
|
const evoFamily = format.getEvoFamily!(donorSpecies.id);
|
|
if (validSources.includes(evoFamily)) continue;
|
|
|
|
set.species = donorSpecies.name;
|
|
set.name = donorSpecies.baseSpecies;
|
|
const problems = this.validateSet(set, teamHas) || [];
|
|
if (!problems.length) {
|
|
validSources.push(evoFamily);
|
|
canonicalSource = donorSpecies.name;
|
|
}
|
|
// Specific for the basic implementation of Donor Clause (see onValidateTeam).
|
|
if (validSources.length > 1) break;
|
|
}
|
|
(this.format as any).debug = false;
|
|
|
|
set.name = name;
|
|
set.species = species.name;
|
|
if (!validSources.length) {
|
|
if (pokemonWithAbility.length > 1) return [`${name}'s set is illegal.`];
|
|
return [`${name} has an illegal set with an ability from ${this.dex.species.get(pokemonWithAbility[0]).name}.`];
|
|
}
|
|
|
|
// Protocol: Include the data of the donor species in the `ability` data slot.
|
|
// Afterwards, we are going to reset the name to what the user intended.
|
|
set.ability = `${set.ability}0${canonicalSource}`;
|
|
return null;
|
|
},
|
|
onValidateTeam(team, f, teamHas) {
|
|
if (this.ruleTable.has('2abilityclause')) {
|
|
const abilityTable = new Map<string, number>();
|
|
const base: {[k: string]: string} = {
|
|
airlock: 'cloudnine',
|
|
battlearmor: 'shellarmor',
|
|
clearbody: 'whitesmoke',
|
|
dazzling: 'queenlymajesty',
|
|
emergencyexit: 'wimpout',
|
|
filter: 'solidrock',
|
|
gooey: 'tanglinghair',
|
|
insomnia: 'vitalspirit',
|
|
ironbarbs: 'roughskin',
|
|
libero: 'protean',
|
|
minus: 'plus',
|
|
moxie: 'chillingneigh',
|
|
powerofalchemy: 'receiver',
|
|
propellertail: 'stalwart',
|
|
teravolt: 'moldbreaker',
|
|
turboblaze: 'moldbreaker',
|
|
};
|
|
for (const set of team) {
|
|
let ability = this.toID(set.ability.split('0')[0]);
|
|
if (!ability) continue;
|
|
if (ability in base) ability = base[ability] as ID;
|
|
if ((abilityTable.get(ability) || 0) >= 2) {
|
|
return [
|
|
`You are limited to two of each ability by 2 Ability Clause.`,
|
|
`(You have more than two ${this.dex.abilities.get(ability).name} variants)`,
|
|
];
|
|
}
|
|
abilityTable.set(ability, (abilityTable.get(ability) || 0) + 1);
|
|
}
|
|
}
|
|
|
|
// Donor Clause
|
|
const evoFamilyLists = [];
|
|
for (const set of team) {
|
|
const abilitySources = teamHas.abilitySources?.[this.dex.toID(set.species)];
|
|
if (!abilitySources) continue;
|
|
let format = this.format;
|
|
if (!format.getEvoFamily) format = this.dex.formats.get('gen8inheritance');
|
|
evoFamilyLists.push(abilitySources.map(format.getEvoFamily!));
|
|
}
|
|
|
|
// Checking actual full incompatibility would require expensive algebra.
|
|
// Instead, we only check the trivial case of multiple Pokémon only legal for exactly one family. FIXME?
|
|
const requiredFamilies = Object.create(null);
|
|
for (const evoFamilies of evoFamilyLists) {
|
|
if (evoFamilies.length !== 1) continue;
|
|
const [familyId] = evoFamilies;
|
|
if (!(familyId in requiredFamilies)) requiredFamilies[familyId] = 1;
|
|
requiredFamilies[familyId]++;
|
|
if (requiredFamilies[familyId] > 2) {
|
|
return [
|
|
`You are limited to up to two inheritances from each evolution family by the Donor Clause.`,
|
|
`(You inherit more than twice from ${this.dex.species.get(familyId).name}).`,
|
|
];
|
|
}
|
|
}
|
|
},
|
|
onBegin() {
|
|
for (const pokemon of this.getAllPokemon()) {
|
|
if (pokemon.baseAbility.includes('0')) {
|
|
const donor = pokemon.baseAbility.split('0')[1];
|
|
pokemon.m.donor = this.toID(donor);
|
|
pokemon.baseAbility = this.toID(pokemon.baseAbility.split('0')[0]);
|
|
pokemon.ability = pokemon.baseAbility;
|
|
}
|
|
}
|
|
},
|
|
onSwitchIn(pokemon) {
|
|
if (!pokemon.m.donor) return;
|
|
const donorTemplate = this.dex.species.get(pokemon.m.donor);
|
|
if (!donorTemplate.exists) return;
|
|
// Place volatiles on the Pokémon to show the donor details.
|
|
this.add('-start', pokemon, donorTemplate.name, '[silent]');
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Linked",
|
|
desc: `The first two moves in a Pokémon's moveset are used simultaneously.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3660421/">Linked</a>`,
|
|
],
|
|
|
|
mod: 'linked',
|
|
searchShow: false,
|
|
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Cloyster', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
|
|
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala',
|
|
'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
|
|
'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Volcarona', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
|
|
'Zekrom', 'Zygarde-Base', 'Zygarde-Complete', 'Arena Trap', 'Chlorophyll', 'Moody', 'Power Construct', 'Sand Rush', 'Sand Veil', 'Shadow Tag',
|
|
'Slush Rush', 'Snow Cloak', 'Speed Boost', 'Surge Surfer', 'Swift Swim', 'Unburden', 'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Baton Pass',
|
|
],
|
|
restricted: [
|
|
'Baneful Bunker', 'Bounce', 'Protect', 'Detect', 'Dig', 'Dive', 'Fly', 'King\'s Shield', 'Nature\'s Madness', 'Night Shade',
|
|
'Obstruct', 'Phantom Force', 'Seismic Toss', 'Shadow Force', 'Sky Drop', 'Spiky Shield', 'Super Fang', 'Trick Room',
|
|
],
|
|
onValidateSet(set) {
|
|
const problems = [];
|
|
for (const [i, moveid] of set.moves.entries()) {
|
|
const move = this.dex.moves.get(moveid);
|
|
if ([0, 1].includes(i) && this.ruleTable.isRestricted(`move:${move.id}`)) {
|
|
problems.push(`${set.name || set.species}'s move ${move.name} cannot be linked.`);
|
|
}
|
|
}
|
|
return problems;
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Multibility",
|
|
desc: `Run a second ability at the cost of giving up a Pokémon's item slot.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3688892/">Multibility</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
ruleset: ['Standard OMs', '2 Ability Clause', 'Sleep Moves Clause'],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus',
|
|
'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
|
|
'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
|
|
'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas',
|
|
'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap',
|
|
'Chlorophyll', 'Magnet Pull', 'Moody', 'Power Construct', 'Sand Rush', 'Shadow Tag', 'Slush Rush', 'Swift Swim',
|
|
'Stench', 'Trace', 'King\'s Rock', 'Baton Pass',
|
|
],
|
|
restricted: [
|
|
'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out',
|
|
'Intrepid Sword', 'Libero', 'Neutralizing Gas', 'Parental Bond', 'Protean', 'Pure Power', 'Simple', 'Speed Boost',
|
|
'Stakeout', 'Tinted Lens', 'Unaware', 'Water Bubble', 'Wonder Guard',
|
|
'Emergency Exit + Regenerator', 'Wimp Out + Regenerator',
|
|
],
|
|
validateSet(set, teamHas) {
|
|
const ability = this.dex.abilities.get(set.ability);
|
|
const item = this.dex.abilities.get(set.item);
|
|
if (!item.exists) return this.validateSet(set, teamHas);
|
|
const problems = [];
|
|
if (item.isNonstandard && !this.ruleTable.has(`+ability:${item.id}`)) {
|
|
problems.push(`${item.name} is banned.`);
|
|
}
|
|
if (ability.id === item.id) {
|
|
problems.push(`${set.species} has ${ability.name} as an ability and as an item.`);
|
|
}
|
|
if (this.ruleTable.isRestricted(`ability:${item.id}`) || this.ruleTable.isBanned(`ability:${item.id}`)) {
|
|
problems.push(`${set.species}'s second ability (${item.name}) can only be used as an ability.`);
|
|
}
|
|
if ((ability.id === 'regenerator' && ['emergencyexit', 'wimpout'].includes(item.id)) ||
|
|
(item.id === 'regenerator' && ['emergencyexit', 'wimpout'].includes(ability.id))) {
|
|
problems.push(`${ability.name} and ${item.name} are banned together.`);
|
|
}
|
|
const itemStr = set.item;
|
|
set.item = '';
|
|
const problem = this.validateSet(set, teamHas);
|
|
if (problem?.length) problems.push(...problem);
|
|
set.item = itemStr;
|
|
return problems;
|
|
},
|
|
onValidateTeam(team) {
|
|
if (!this.ruleTable.has('2abilityclause')) return;
|
|
const abilityTable = new Map<string, number>();
|
|
const base: {[k: string]: string} = {
|
|
airlock: 'cloudnine',
|
|
battlearmor: 'shellarmor',
|
|
clearbody: 'whitesmoke',
|
|
dazzling: 'queenlymajesty',
|
|
emergencyexit: 'wimpout',
|
|
filter: 'solidrock',
|
|
gooey: 'tanglinghair',
|
|
insomnia: 'vitalspirit',
|
|
ironbarbs: 'roughskin',
|
|
libero: 'protean',
|
|
minus: 'plus',
|
|
moxie: 'chillingneigh',
|
|
powerofalchemy: 'receiver',
|
|
propellertail: 'stalwart',
|
|
teravolt: 'moldbreaker',
|
|
turboblaze: 'moldbreaker',
|
|
};
|
|
const abilities: [string, string][] = [];
|
|
for (const set of team) {
|
|
abilities.push([set.ability, set.item].map((abil) => {
|
|
const id = this.toID(abil);
|
|
return base[id] || id;
|
|
}) as [string, string]);
|
|
}
|
|
for (const [abilityid, itemid] of abilities) {
|
|
const ability = this.dex.abilities.get(abilityid);
|
|
const item = this.dex.abilities.get(itemid);
|
|
if (ability.exists) abilityTable.set(ability.id, (abilityTable.get(ability.id) || 0) + 1);
|
|
if (item.exists) abilityTable.set(item.id, (abilityTable.get(item.id) || 0) + 1);
|
|
}
|
|
for (const [abilityid, size] of abilityTable) {
|
|
if (size > 2) {
|
|
return [
|
|
`You are limited to two of each ability by 2 Ability Clause.`,
|
|
`(You have more than two ${this.dex.abilities.get(abilityid).name} variants)`,
|
|
];
|
|
}
|
|
}
|
|
},
|
|
onSwitchOut(pokemon) {
|
|
const item = this.dex.abilities.get(pokemon.item);
|
|
if (item.exists) {
|
|
this.singleEvent('End', item, pokemon.itemState, pokemon);
|
|
}
|
|
},
|
|
onFaint(pokemon) {
|
|
const item = this.dex.abilities.get(pokemon.item);
|
|
if (item.exists) {
|
|
this.singleEvent('End', item, pokemon.itemState, pokemon);
|
|
}
|
|
},
|
|
field: {
|
|
suppressingWeather() {
|
|
for (const pokemon of this.battle.getAllActive()) {
|
|
const item = this.battle.dex.abilities.get(pokemon.item);
|
|
if (pokemon && !pokemon.ignoringAbility() &&
|
|
(pokemon.getAbility().suppressWeather || (item.exists && item.suppressWeather))) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
},
|
|
pokemon: {
|
|
getItem() {
|
|
const ability = this.battle.dex.abilities.get(this.item);
|
|
if (!ability.exists) return Object.getPrototypeOf(this).getItem.call(this);
|
|
return {...ability, ignoreKlutz: true, onTakeItem: false};
|
|
},
|
|
hasItem(item) {
|
|
const ownItem = this.item;
|
|
if (this.battle.dex.abilities.get(ownItem).exists) return false;
|
|
if (this.ignoringItem()) return false;
|
|
if (!Array.isArray(item)) return ownItem === this.battle.toID(item);
|
|
return item.map(this.battle.toID).includes(ownItem);
|
|
},
|
|
hasAbility(ability) {
|
|
if (this.ignoringAbility()) return false;
|
|
if (Array.isArray(ability)) return ability.some(abil => this.hasAbility(abil));
|
|
const abilityid = this.battle.toID(ability);
|
|
const item = this.battle.dex.abilities.get(this.item);
|
|
return this.ability === abilityid || (item.exists && item.id === abilityid);
|
|
},
|
|
ignoringAbility() {
|
|
// Check if any active pokemon have the ability Neutralizing Gas
|
|
let neutralizinggas = false;
|
|
for (const pokemon of this.battle.getAllActive()) {
|
|
// can't use hasAbility because it would lead to infinite recursion
|
|
if ((pokemon.ability === ('neutralizinggas' as ID) || pokemon.item === ('neutralizinggas' as ID)) &&
|
|
!pokemon.volatiles['gastroacid'] && !pokemon.abilityState.ending) {
|
|
neutralizinggas = true;
|
|
break;
|
|
}
|
|
}
|
|
return !!(
|
|
(this.battle.gen >= 5 && !this.isActive) ||
|
|
((this.volatiles['gastroacid'] || (neutralizinggas && this.ability !== ('neutralizinggas' as ID) &&
|
|
this.item !== ('neutralizinggas' as ID))) && !this.getAbility().isPermanent));
|
|
},
|
|
ignoringItem() {
|
|
let nGas = false;
|
|
for (const pokemon of this.battle.getAllActive()) {
|
|
// can't use hasAbility because it would lead to infinite recursion
|
|
if (((pokemon.ability === ('neutralizinggas' as ID) && !pokemon.abilityState.ending) ||
|
|
(pokemon.item === ('neutralizinggas' as ID) && !pokemon.itemState.ending)) &&
|
|
!pokemon.volatiles['gastroacid'] && !pokemon.abilityState.ending) {
|
|
nGas = true;
|
|
break;
|
|
}
|
|
}
|
|
const item = this.battle.dex.abilities.get(this.item);
|
|
return !!((this.battle.gen >= 5 && !this.isActive) ||
|
|
(this.hasAbility('klutz') && !this.getItem().ignoreKlutz) ||
|
|
this.volatiles['embargo'] || this.battle.field.pseudoWeather['magicroom'] ||
|
|
(item.exists && item.id !== 'neutralizinggas' && (nGas || this.volatiles['gastroacid'])));
|
|
},
|
|
takeItem(source) {
|
|
if (!this.isActive) return false;
|
|
if (!this.item) return false;
|
|
if (this.battle.dex.abilities.get(this.item).exists) return false;
|
|
if (!source) source = this;
|
|
if (this.battle.gen === 4) {
|
|
if (this.battle.toID(this.ability) === 'multitype') return false;
|
|
if (source && this.battle.toID(source.ability) === 'multitype') return false;
|
|
}
|
|
const item = this.getItem();
|
|
if (this.battle.runEvent('TakeItem', this, source, null, item)) {
|
|
this.item = '';
|
|
this.itemState = {id: '', target: this};
|
|
this.pendingStaleness = undefined;
|
|
return item;
|
|
}
|
|
return false;
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Nature Swap",
|
|
desc: `Pokémon have their base stats swapped depending on their nature.`,
|
|
threads: [
|
|
`• <a href="http://www.smogon.com/forums/threads/3673622/">Nature Swap</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
banlist: [
|
|
'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chansey', 'Cloyster', 'Dialga', 'Eternatus', 'Genesect', 'Giratina',
|
|
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala',
|
|
'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram',
|
|
'Solgaleo', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base',
|
|
'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
|
|
],
|
|
battle: {
|
|
spreadModify(baseStats, set) {
|
|
const modStats: SparseStatsTable = {atk: 10, def: 10, spa: 10, spd: 10, spe: 10};
|
|
const tr = this.trunc;
|
|
const nature = this.dex.natures.get(set.nature);
|
|
let statName: keyof StatsTable;
|
|
for (statName in modStats) {
|
|
const stat = baseStats[statName];
|
|
let usedStat = statName;
|
|
if (nature.plus) {
|
|
if (statName === nature.minus) {
|
|
usedStat = nature.plus;
|
|
} else if (statName === nature.plus) {
|
|
usedStat = nature.minus!;
|
|
}
|
|
}
|
|
modStats[statName] = tr(tr(2 * stat + set.ivs[usedStat] + tr(set.evs[usedStat] / 4)) * set.level / 100 + 5);
|
|
}
|
|
if ('hp' in baseStats) {
|
|
const stat = baseStats['hp'];
|
|
modStats['hp'] = tr(tr(2 * stat + set.ivs['hp'] + tr(set.evs['hp'] / 4) + 100) * set.level / 100 + 10);
|
|
}
|
|
return this.natureModify(modStats as StatsTable, set);
|
|
},
|
|
natureModify(stats, set) {
|
|
const tr = this.trunc;
|
|
const nature = this.dex.natures.get(set.nature);
|
|
let s: StatIDExceptHP;
|
|
if (nature.plus) {
|
|
s = nature.minus!;
|
|
const stat = this.ruleTable.has('overflowstatmod') ? Math.min(stats[s], 595) : stats[s];
|
|
stats[s] = this.ruleTable.has('overflowstatmod') ? Math.min(stats[nature.plus], 728) : stats[nature.plus];
|
|
stats[nature.plus] = tr(tr(stat * 110, 16) / 100);
|
|
}
|
|
return stats;
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Partners in Crime",
|
|
desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3706080/">Partners in Crime</a>`,
|
|
],
|
|
|
|
mod: 'partnersincrime',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Standard Doubles', 'Dynamax Clause'],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
|
|
'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
|
|
'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
|
|
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
|
|
'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
|
|
'Shell Smash', 'Swagger',
|
|
],
|
|
onBeforeSwitchIn(pokemon) {
|
|
pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
|
|
let ngas = false;
|
|
for (const poke of this.getAllActive()) {
|
|
if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
|
|
ngas = true;
|
|
break;
|
|
}
|
|
}
|
|
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
// Abilities that must be applied before both sides trigger onSwitchIn to correctly
|
|
// handle switch-in ability-to-ability interactions, e.g. Intimidate counters
|
|
const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
|
|
'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
|
|
'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
|
|
];
|
|
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
if (ally && ally.ability !== pokemon.ability) {
|
|
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
|
|
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
|
|
pokemon.m.innate = 'ability:' + ally.ability;
|
|
delete pokemon.volatiles[pokemon.m.innate];
|
|
if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
|
|
}
|
|
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
|
|
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
ally.m.innate = 'ability:' + pokemon.ability;
|
|
delete ally.volatiles[ally.m.innate];
|
|
if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
|
|
}
|
|
}
|
|
},
|
|
onSwitchInPriority: 2,
|
|
onSwitchIn(pokemon) {
|
|
let ngas = false;
|
|
for (const poke of this.getAllActive()) {
|
|
if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
|
|
ngas = true;
|
|
break;
|
|
}
|
|
}
|
|
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
if (ally && ally.ability !== pokemon.ability) {
|
|
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
|
|
pokemon.m.innate = 'ability:' + ally.ability;
|
|
delete pokemon.volatiles[pokemon.m.innate];
|
|
if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
|
|
}
|
|
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
ally.m.innate = 'ability:' + pokemon.ability;
|
|
delete ally.volatiles[ally.m.innate];
|
|
if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
|
|
}
|
|
}
|
|
},
|
|
onSwitchOut(pokemon) {
|
|
if (pokemon.m.innate) {
|
|
pokemon.removeVolatile(pokemon.m.innate);
|
|
delete pokemon.m.innate;
|
|
}
|
|
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
if (ally && ally.m.innate) {
|
|
ally.removeVolatile(ally.m.innate);
|
|
delete ally.m.innate;
|
|
}
|
|
},
|
|
onFaint(pokemon) {
|
|
if (pokemon.m.innate) {
|
|
pokemon.removeVolatile(pokemon.m.innate);
|
|
delete pokemon.m.innate;
|
|
}
|
|
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
if (ally && ally.m.innate) {
|
|
ally.removeVolatile(ally.m.innate);
|
|
delete ally.m.innate;
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Pokebilities",
|
|
desc: `Pokémon have all of their released abilities simultaneously.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3679692/">Pokébilities</a>`,
|
|
],
|
|
mod: 'pokebilities',
|
|
searchShow: false,
|
|
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Conkeldurr', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dracozolt',
|
|
'Eternatus', 'Excadrill', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
|
|
'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings',
|
|
'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base',
|
|
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zygarde-Base', 'Power Construct',
|
|
'Baton Pass', 'King\'s Rock',
|
|
// Moody users
|
|
'Glalie', 'Octillery', 'Remoraid', 'Snorunt',
|
|
// Shadow Tag/Arena Trap
|
|
'Diglett-Base', 'Dugtrio-Base', 'Gothita', 'Gothitelle', 'Gothorita', 'Trapinch', 'Wobbuffet', 'Wynaut',
|
|
],
|
|
onValidateSet(set) {
|
|
const species = this.dex.species.get(set.species);
|
|
const unSeenAbilities = Object.keys(species.abilities)
|
|
.filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden))
|
|
.map(key => species.abilities[key as "0" | "1" | "H" | "S"])
|
|
.filter(ability => ability !== set.ability);
|
|
if (unSeenAbilities.length && this.toID(set.ability) !== this.toID(species.abilities['S'])) {
|
|
for (const abilityName of unSeenAbilities) {
|
|
const banReason = this.ruleTable.check('ability:' + this.toID(abilityName));
|
|
if (banReason) {
|
|
return [`${set.name}'s ability ${abilityName} is ${banReason}.`];
|
|
}
|
|
}
|
|
}
|
|
},
|
|
onBegin() {
|
|
for (const pokemon of this.getAllPokemon()) {
|
|
if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
|
|
continue;
|
|
}
|
|
pokemon.m.innates = Object.keys(pokemon.species.abilities)
|
|
.filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
|
|
.map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
|
|
.filter(ability => ability !== pokemon.ability);
|
|
}
|
|
},
|
|
onBeforeSwitchIn(pokemon) {
|
|
// Abilities that must be applied before both sides trigger onSwitchIn to correctly
|
|
// handle switch-in ability-to-ability interactions, e.g. Intimidate counters
|
|
const neededBeforeSwitchInIDs = [
|
|
'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
|
|
'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
|
|
];
|
|
if (pokemon.m.innates) {
|
|
for (const innate of pokemon.m.innates) {
|
|
if (!neededBeforeSwitchInIDs.includes(innate)) continue;
|
|
if (pokemon.hasAbility(innate)) continue;
|
|
pokemon.addVolatile("ability:" + innate, pokemon);
|
|
}
|
|
}
|
|
},
|
|
onSwitchInPriority: 2,
|
|
onSwitchIn(pokemon) {
|
|
if (pokemon.m.innates) {
|
|
for (const innate of pokemon.m.innates) {
|
|
if (pokemon.hasAbility(innate)) continue;
|
|
pokemon.addVolatile("ability:" + innate, pokemon);
|
|
}
|
|
}
|
|
},
|
|
onSwitchOut(pokemon) {
|
|
for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
|
|
pokemon.removeVolatile(innate);
|
|
}
|
|
},
|
|
onFaint(pokemon) {
|
|
for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
|
|
const innateEffect = this.dex.conditions.get(innate) as Effect;
|
|
this.singleEvent('End', innateEffect, null, pokemon);
|
|
}
|
|
},
|
|
onAfterMega(pokemon) {
|
|
for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
|
|
pokemon.removeVolatile(innate);
|
|
}
|
|
pokemon.m.innates = undefined;
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Pure Hackmons",
|
|
desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656851/">Pure Hackmons</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Shared Power",
|
|
desc: `Once a Pokémon switches in, its ability is shared with the rest of the team.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3660877/">Shared Power</a>`,
|
|
],
|
|
|
|
mod: 'sharedpower',
|
|
searchShow: false,
|
|
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
|
|
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna',
|
|
'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
'Pheromosa', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo', 'Urshifu-Base', 'Urshifu-Rapid-Strike',
|
|
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
|
|
'Arena Trap', 'Contrary', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Electric Surge ++ Surge Surfer',
|
|
'Fur Coat', 'Guts', 'Harvest', 'Huge Power', 'Imposter', 'Innards Out', 'Libero', 'Magic Bounce', 'Magic Guard',
|
|
'Magnet Pull', 'Mold Breaker', 'Moody', 'Neutralizing Gas', 'Power Construct', 'Queenly Majesty', 'Quick Draw',
|
|
'Regenerator', 'Sand Rush', 'Sand Veil', 'Shadow Tag', 'Simple', 'Snow Cloak', 'Snow Warning ++ Slush Rush',
|
|
'Speed Boost', 'Stakeout', 'Steelworker ++ Steely Spirit', 'Stench', 'Tinted Lens', 'Triage', 'Unaware',
|
|
'Unburden', 'Water Bubble', 'King\'s Rock', 'Baton Pass',
|
|
],
|
|
getSharedPower(pokemon) {
|
|
const sharedPower = new Set<string>();
|
|
for (const ally of pokemon.side.pokemon) {
|
|
if (ally.previouslySwitchedIn > 0) {
|
|
if (pokemon.battle.dex.currentMod !== 'sharedpower' && ['trace', 'mirrorarmor'].includes(ally.baseAbility)) {
|
|
sharedPower.add('noability');
|
|
continue;
|
|
}
|
|
sharedPower.add(ally.baseAbility);
|
|
}
|
|
}
|
|
sharedPower.delete(pokemon.baseAbility);
|
|
return sharedPower;
|
|
},
|
|
onBeforeSwitchIn(pokemon) {
|
|
let format = this.format;
|
|
if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
|
|
for (const ability of format.getSharedPower!(pokemon)) {
|
|
const effect = 'ability:' + ability;
|
|
pokemon.volatiles[effect] = {id: this.toID(effect), target: pokemon};
|
|
if (!pokemon.m.abils) pokemon.m.abils = [];
|
|
if (!pokemon.m.abils.includes(effect)) pokemon.m.abils.push(effect);
|
|
}
|
|
},
|
|
onSwitchInPriority: 2,
|
|
onSwitchIn(pokemon) {
|
|
let format = this.format;
|
|
if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
|
|
for (const ability of format.getSharedPower!(pokemon)) {
|
|
if (ability === 'noability') {
|
|
this.hint(`Mirror Armor and Trace break in Shared Power formats that don't use Shared Power as a base, so they get removed from non-base users.`);
|
|
}
|
|
const effect = 'ability:' + ability;
|
|
delete pokemon.volatiles[effect];
|
|
pokemon.addVolatile(effect);
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Trademarked",
|
|
desc: `Sacrifice your Pokémon's ability for a status move that activates on switch-in.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3656980/">Trademarked</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
// While bugs are being fixed
|
|
searchShow: false,
|
|
challengeShow: false,
|
|
tournamentShow: false,
|
|
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
banlist: [
|
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Kyurem-Black', 'Kyurem-White', 'Giratina',
|
|
'Giratina-Origin', 'Genesect', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Lugia', 'Lunala', 'Magearna', 'Marowak-Alola', 'Marshadow', 'Melmetal',
|
|
'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier',
|
|
'Urshifu-Base', 'Victini', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base',
|
|
'Arena Trap', 'Moody', 'Neutralizing Gas', 'Power Construct', 'Shadow Tag', 'Baton Pass',
|
|
],
|
|
restricted: [
|
|
'Baneful Bunker', 'Block', 'Copycat', 'Corrosive Gas', 'Detect', 'Destiny Bond', 'Disable', 'Encore', 'Fairy Lock', 'Hypnosis', 'Ingrain',
|
|
'Instruct', 'Lovely Kiss', 'King\'s Shield', 'Mat Block', 'Mean Look', 'Memento', 'move:Metronome', 'Obstruct', 'Octolock', 'Nature Power',
|
|
'Parting Shot', 'Psycho Shift', 'Protect', 'Roar', 'Sing', 'Skill Swap', 'Sleep Powder', 'Sleep Talk', 'Spiky Shield', 'Spore', 'Substitute',
|
|
'Switcheroo', 'Teleport', 'Trick', 'Whirlwind', 'Wish', 'Yawn',
|
|
],
|
|
onValidateTeam(team, format, teamHas) {
|
|
const problems = [];
|
|
for (const trademark in teamHas.trademarks) {
|
|
if (teamHas.trademarks[trademark] > 1) {
|
|
problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks[trademark]} Pok\u00e9mon with ${trademark} as a Trademark.)`);
|
|
}
|
|
}
|
|
return problems;
|
|
},
|
|
validateSet(set, teamHas) {
|
|
const dex = this.dex;
|
|
const ability = dex.moves.get(set.ability);
|
|
if (!ability.exists) { // Not even a real move
|
|
return this.validateSet(set, teamHas);
|
|
}
|
|
// Absolute trademark bans
|
|
if (ability.category !== 'Status') {
|
|
return [`${ability.name} is not a status move, and cannot be used as a trademark.`];
|
|
}
|
|
if (ability.forceSwitch || ability.selfSwitch) {
|
|
return [
|
|
`Force-switching and self-switching moves are banned from being used as trademarks.`,
|
|
`(${ability.name} is a ${ability.forceSwitch ? 'force' : 'self'}-switching move.)`,
|
|
];
|
|
}
|
|
const irrevokablyRestricted = [
|
|
'Assist', 'Copycat', 'Metronome', 'Mirror Move', 'Sleep Talk', // Could call another unsafe trademark
|
|
'Recycle', 'Trace', // Causes endless turns
|
|
'Skill Swap', // Self-propagates indefinitely
|
|
];
|
|
for (const m of set.moves) {
|
|
const move = dex.moves.get(m);
|
|
if (irrevokablyRestricted.includes(move.name)) {
|
|
return [`${move.name} is banned from Trademark, irrespective of custom rules, because it can cause endless turns.`];
|
|
}
|
|
}
|
|
if (irrevokablyRestricted.includes(ability.name)) {
|
|
return [`${ability.name} cannot safely function as a trademark.`];
|
|
}
|
|
// Contingent trademark bans
|
|
if (this.ruleTable.isRestricted(`move:${ability.id}`)) {
|
|
return [`${ability.name} is restricted from being used as a trademark.`];
|
|
}
|
|
if (set.moves.map(this.toID).includes(ability.id)) {
|
|
return [`${set.name} may not use ${ability.name} as both a trademark and one of its moves simultaneously.`];
|
|
}
|
|
const customRules = this.format.customRules || [];
|
|
if (!customRules.includes('!obtainableabilities')) customRules.push('!obtainableabilities');
|
|
|
|
const TeamValidator: typeof import('../sim/team-validator').TeamValidator =
|
|
require('../sim/team-validator').TeamValidator;
|
|
|
|
const validator = new TeamValidator(dex.formats.get(`${this.format.id}@@@${customRules.join(',')}`));
|
|
const moves = set.moves;
|
|
set.moves = [ability.id];
|
|
set.ability = dex.species.get(set.species).abilities['0'];
|
|
let problems = validator.validateSet(set, {}) || [];
|
|
if (problems.length) return problems;
|
|
set.moves = moves;
|
|
set.ability = dex.species.get(set.species).abilities['0'];
|
|
problems = problems.concat(validator.validateSet(set, teamHas) || []);
|
|
set.ability = ability.id;
|
|
if (!teamHas.trademarks) teamHas.trademarks = {};
|
|
teamHas.trademarks[ability.name] = (teamHas.trademarks[ability.name] || 0) + 1;
|
|
return problems.length ? problems : null;
|
|
},
|
|
pokemon: {
|
|
getAbility() {
|
|
const move = this.battle.dex.moves.get(this.battle.toID(this.ability));
|
|
if (!move.exists) return Object.getPrototypeOf(this).getAbility.call(this);
|
|
return {
|
|
id: move.id,
|
|
name: move.name,
|
|
onStart(this: Battle, pokemon: Pokemon) {
|
|
this.add('-activate', pokemon, 'ability: ' + move.name);
|
|
this.actions.useMove(move, pokemon);
|
|
},
|
|
toString() {
|
|
return "";
|
|
},
|
|
};
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] The Loser's Game",
|
|
desc: `The first player to lose all of their Pokémon wins.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3657270/">The Loser's Game</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
ruleset: ['Standard OMs', 'Sleep Clause Mod', '!OHKO Clause', 'Picked Team Size = 6', 'Adjust Level = 100'],
|
|
banlist: [
|
|
'Sandshrew-Alola', 'Shedinja', 'Infiltrator', 'Magic Guard', 'Choice Scarf',
|
|
'Explosion', 'Final Gambit', 'Healing Wish', 'Lunar Dance', 'Magic Room', 'Memento', 'Misty Explosion', 'Self-Destruct',
|
|
],
|
|
onValidateTeam(team) {
|
|
const familyTable = new Set<ID>();
|
|
for (const set of team) {
|
|
let species = this.dex.species.get(set.species);
|
|
while (species.prevo) {
|
|
species = this.dex.species.get(species.prevo);
|
|
}
|
|
if (familyTable.has(species.id)) {
|
|
return [
|
|
`You are limited to one Pokémon from each family by the Family Clause.`,
|
|
`(You have more than one evolution of ${species.name}.)`,
|
|
];
|
|
}
|
|
familyTable.add(species.id);
|
|
}
|
|
},
|
|
battle: {
|
|
tiebreak() {
|
|
if (this.ended) return false;
|
|
|
|
this.inputLog.push(`>tiebreak`);
|
|
this.add('message', "Time's up! Going to tiebreaker...");
|
|
const notFainted = this.sides.map(side => (
|
|
side.pokemon.filter(pokemon => !pokemon.fainted).length
|
|
));
|
|
this.add('-message', this.sides.map((side, i) => (
|
|
`${side.name}: ${notFainted[i]} Pokemon left`
|
|
)).join('; '));
|
|
const maxNotFainted = Math.max(...notFainted);
|
|
let tiedSides = this.sides.filter((side, i) => notFainted[i] === maxNotFainted);
|
|
if (tiedSides.length <= 1) {
|
|
return this.win(tiedSides[1]);
|
|
}
|
|
|
|
const hpPercentage = tiedSides.map(side => (
|
|
side.pokemon.map(pokemon => pokemon.hp / pokemon.maxhp).reduce((a, b) => a + b) * 100 / 6
|
|
));
|
|
this.add('-message', tiedSides.map((side, i) => (
|
|
`${side.name}: ${Math.round(hpPercentage[i])}% total HP left`
|
|
)).join('; '));
|
|
const maxPercentage = Math.max(...hpPercentage);
|
|
tiedSides = tiedSides.filter((side, i) => hpPercentage[i] === maxPercentage);
|
|
if (tiedSides.length <= 1) {
|
|
return this.win(tiedSides[1]);
|
|
}
|
|
|
|
const hpTotal = tiedSides.map(side => (
|
|
side.pokemon.map(pokemon => pokemon.hp).reduce((a, b) => a + b)
|
|
));
|
|
this.add('-message', tiedSides.map((side, i) => (
|
|
`${side.name}: ${Math.round(hpTotal[i])} total HP left`
|
|
)).join('; '));
|
|
const maxTotal = Math.max(...hpTotal);
|
|
tiedSides = tiedSides.filter((side, i) => hpTotal[i] === maxTotal);
|
|
if (tiedSides.length <= 1) {
|
|
return this.win(tiedSides[1]);
|
|
}
|
|
return this.tie();
|
|
},
|
|
faintMessages(lastFirst) {
|
|
if (this.ended) return;
|
|
const length = this.faintQueue.length;
|
|
if (!length) return false;
|
|
if (lastFirst) {
|
|
this.faintQueue.unshift(this.faintQueue[this.faintQueue.length - 1]);
|
|
this.faintQueue.pop();
|
|
}
|
|
let faintData;
|
|
while (this.faintQueue.length) {
|
|
faintData = this.faintQueue.shift()!;
|
|
const pokemon: Pokemon = faintData.target;
|
|
if (!pokemon.fainted &&
|
|
this.runEvent('BeforeFaint', pokemon, faintData.source, faintData.effect)) {
|
|
this.add('faint', pokemon);
|
|
pokemon.side.pokemonLeft--;
|
|
this.runEvent('Faint', pokemon, faintData.source, faintData.effect);
|
|
this.singleEvent('End', pokemon.getAbility(), pokemon.abilityState, pokemon);
|
|
pokemon.clearVolatile(false);
|
|
pokemon.fainted = true;
|
|
pokemon.isActive = false;
|
|
pokemon.isStarted = false;
|
|
pokemon.side.faintedThisTurn = pokemon;
|
|
}
|
|
}
|
|
|
|
if (this.gen <= 1) {
|
|
// in gen 1, fainting skips the rest of the turn
|
|
// residuals don't exist in gen 1
|
|
this.queue.clear();
|
|
} else if (this.gen <= 3 && this.gameType === 'singles') {
|
|
// in gen 3 or earlier, fainting in singles skips to residuals
|
|
for (const pokemon of this.getAllActive()) {
|
|
if (this.gen <= 2) {
|
|
// in gen 2, fainting skips moves only
|
|
this.queue.cancelMove(pokemon);
|
|
} else {
|
|
// in gen 3, fainting skips all moves and switches
|
|
this.queue.cancelAction(pokemon);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!this.p1.pokemonLeft && !this.p2.pokemonLeft) {
|
|
this.win(faintData ? faintData.target.side.foe : null);
|
|
return true;
|
|
}
|
|
if (!this.p1.pokemonLeft) {
|
|
this.win(this.p1);
|
|
return true;
|
|
}
|
|
if (!this.p2.pokemonLeft) {
|
|
this.win(this.p2);
|
|
return true;
|
|
}
|
|
if (faintData) {
|
|
this.runEvent('AfterFaint', faintData.target, faintData.source, faintData.effect, length);
|
|
}
|
|
return false;
|
|
},
|
|
},
|
|
},
|
|
|
|
// Randomized Format Spotlight
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "Randomized Format Spotlight",
|
|
column: 2,
|
|
},
|
|
{
|
|
name: "[Gen 7] Pick-Your-Team Random Battle",
|
|
|
|
mod: 'gen7',
|
|
team: 'random',
|
|
ruleset: ['[Gen 7] Random Battle', 'Max Team Size = 12', 'Picked Team Size = 6', 'Team Preview'],
|
|
desc: `Twelve Pokémon sets are randomly chosen, then you pick six for your team!`,
|
|
},
|
|
|
|
// Randomized Metas
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "Randomized Metas",
|
|
column: 2,
|
|
},
|
|
{
|
|
name: "[Gen 8] Monotype Random Battle",
|
|
|
|
mod: 'gen8',
|
|
team: 'random',
|
|
ruleset: ['Obtainable', 'Same Type Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Random Battle (No Dmax)",
|
|
|
|
mod: 'gen8',
|
|
team: 'random',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8] Random Battle', 'Dynamax Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Random Battle Mayhem",
|
|
desc: `[Gen 8] Random Battle (No Dmax) with Team Preview and elements of Camomons, Inverse, Scalemons, and Shared Power.`,
|
|
|
|
mod: 'sharedpower',
|
|
team: 'random',
|
|
ruleset: ['[Gen 8] Random Battle', 'Team Preview', 'Dynamax Clause', 'Camomons Mod', 'Inverse Mod', 'Scalemons Mod'],
|
|
onBeforeSwitchIn(pokemon) {
|
|
let format = this.format;
|
|
if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
|
|
for (const ability of format.getSharedPower!(pokemon)) {
|
|
const effect = 'ability:' + ability;
|
|
pokemon.volatiles[effect] = {id: this.toID(effect), target: pokemon};
|
|
if (!pokemon.m.abils) pokemon.m.abils = [];
|
|
if (!pokemon.m.abils.includes(effect)) pokemon.m.abils.push(effect);
|
|
}
|
|
},
|
|
onSwitchInPriority: 2,
|
|
onSwitchIn(pokemon) {
|
|
let format = this.format;
|
|
if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
|
|
for (const ability of format.getSharedPower!(pokemon)) {
|
|
if (ability === 'noability') {
|
|
this.hint(`Mirror Armor and Trace break in Shared Power formats that don't use Shared Power as a base, so they get removed from non-base users.`);
|
|
}
|
|
const effect = 'ability:' + ability;
|
|
delete pokemon.volatiles[effect];
|
|
pokemon.addVolatile(effect);
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Battle Factory",
|
|
desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`,
|
|
|
|
mod: 'gen8',
|
|
team: 'randomFactory',
|
|
ruleset: ['Standard', 'Dynamax Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 8] BSS Factory",
|
|
desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Stadium Singles.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3675374/">Information and Suggestions Thread</a>`,
|
|
],
|
|
|
|
team: 'randomBSSFactory',
|
|
ruleset: ['Flat Rules'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Super Staff Bros 4",
|
|
desc: "The fourth iteration of Super Staff Bros is here! Battle with a random team of pokemon created by the sim staff.",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/articles/super-staff-bros-4">Introduction & Roster</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/super-staff-bros-4-discussion-thread.3675237/">Discussion Thread</a>`,
|
|
],
|
|
|
|
mod: 'ssb',
|
|
team: 'randomStaffBros',
|
|
ruleset: ['Dynamax Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'],
|
|
onBegin() {
|
|
if (!this.ruleTable.has('dynamaxclause')) {
|
|
// Old joke format we're bringing back
|
|
for (const side of this.sides) {
|
|
side.dynamaxUsed = true;
|
|
}
|
|
this.add('message', 'Delphox only');
|
|
this.add('message', 'No items');
|
|
this.add('message', 'Final Destination');
|
|
return;
|
|
}
|
|
// TODO look into making an event to put this right after turn|1
|
|
// https://discordapp.com/channels/630837856075513856/630845310033330206/716126469528485909
|
|
// Requires client change
|
|
this.add(`raw|<div class='broadcast-green'><b>Wondering what all these custom moves, abilities, and items do?<br />Check out the <a href="https://www.smogon.com/articles/super-staff-bros-4" target="_blank">Super Staff Bros 4 Guide</a> or use /ssb to find out!</b></div>`);
|
|
|
|
this.add('message', [
|
|
'THE BATTLE FOR SURVIVAL BEGINS!', 'WHO WILL SURVIVE?', 'GET READY TO KEEP UP!', 'GET READY!', 'DARE TO BELIEVE YOU CAN SURVIVE!', 'THERE CAN BE ONLY ONE WINNER!', 'GET READY FOR THE FIGHT OF YOUR LIFE!', 'WHO WILL PREVAIL?', 'ONLY ONE TEAM WILL BE LEFT STANDING!', 'BATTLE WITHOUT LIMITS!',
|
|
][this.random(10)]);
|
|
this.add('message', 'FIGHT!');
|
|
},
|
|
onSwitchInPriority: 100,
|
|
onSwitchIn(pokemon) {
|
|
let name: string = this.toID(pokemon.illusion ? pokemon.illusion.name : pokemon.name);
|
|
if (this.dex.species.get(name).exists || this.dex.moves.get(name).exists || this.dex.abilities.get(name).exists) {
|
|
// Certain pokemon have volatiles named after their id
|
|
// To prevent overwriting those, and to prevent accidentaly leaking
|
|
// that a pokemon is on a team through the onStart even triggering
|
|
// at the start of a match, users with pokemon names will need their
|
|
// statuses to end in "user".
|
|
name = name + 'user';
|
|
}
|
|
// Add the mon's status effect to it as a volatile.
|
|
const status = this.dex.conditions.get(name);
|
|
if (status?.exists) {
|
|
pokemon.addVolatile(name, pokemon);
|
|
}
|
|
if (pokemon.m.hasBounty) this.add('-start', pokemon, 'bounty', '[silent]');
|
|
const details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) +
|
|
(pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');
|
|
if (pokemon.m.nowShiny) this.add('replace', pokemon, details);
|
|
},
|
|
onFaint(target, source, effect) {
|
|
if (effect?.effectType !== 'Move') return;
|
|
if (!target.m.hasBounty) return;
|
|
if (source) {
|
|
this.add('-message', `${source.name} received the bounty!`);
|
|
this.boost({atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, source, target, effect);
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 8] Challenge Cup",
|
|
|
|
mod: 'gen8',
|
|
team: 'randomCC',
|
|
searchShow: false,
|
|
ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Challenge Cup 1v1",
|
|
|
|
mod: 'gen8',
|
|
team: 'randomCC',
|
|
ruleset: ['[Gen 8] Challenge Cup', 'Team Preview', 'Dynamax Clause', 'Picked Team Size = 1'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Challenge Cup 2v2",
|
|
|
|
mod: 'gen8',
|
|
team: 'randomCC',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 8] Challenge Cup 1v1', '!! Picked Team Size = 2'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Hackmons Cup",
|
|
desc: `Randomized teams of level-balanced Pokémon with absolutely any ability, moves, and item.`,
|
|
|
|
mod: 'gen8',
|
|
team: 'randomHC',
|
|
ruleset: ['HP Percentage Mod', 'Cancel Mod'],
|
|
banlist: ['Nonexistent'],
|
|
},
|
|
{
|
|
name: "[Gen 8] Doubles Hackmons Cup",
|
|
|
|
mod: 'gen8',
|
|
gameType: 'doubles',
|
|
team: 'randomHC',
|
|
searchShow: false,
|
|
ruleset: ['HP Percentage Mod', 'Cancel Mod'],
|
|
banlist: ['Nonexistent'],
|
|
},
|
|
{
|
|
name: "[Gen 8] CAP 1v1",
|
|
desc: `Randomly generated 1v1-style teams only including Pokémon made by the Create-A-Pokémon Project.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3663533/">CAP 1v1</a>`,
|
|
],
|
|
|
|
mod: 'gen8',
|
|
searchShow: false,
|
|
team: 'randomCAP1v1',
|
|
ruleset: [
|
|
'Picked Team Size = 1',
|
|
'Max Team Size = 3',
|
|
'Species Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Dynamax Clause',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 7] Random Battle",
|
|
desc: `Randomized teams of level-balanced Pokémon with sets that are generated to be competitively viable.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3591157/">Sets and Suggestions</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3616946/">Role Compendium</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
team: 'random',
|
|
ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Mega Rayquaza Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 7] Random Doubles Battle",
|
|
threads: [`• <a href="https://www.smogon.com/forums/threads/3601525/">Sets and Suggestions</a>`],
|
|
|
|
mod: 'gen7',
|
|
gameType: 'doubles',
|
|
team: 'random',
|
|
searchShow: false,
|
|
ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 7] Battle Factory",
|
|
desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`,
|
|
|
|
mod: 'gen7',
|
|
team: 'randomFactory',
|
|
ruleset: ['Obtainable', 'Sleep Clause Mod', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Mega Rayquaza Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 7] Monotype Battle Factory",
|
|
desc: `Randomized teams of Pokémon with competitively-viable sets that all share a type.`,
|
|
|
|
mod: 'gen7',
|
|
team: 'randomFactory',
|
|
ruleset: ['[Gen 7] Battle Factory', 'Same Type Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 7] BSS Factory",
|
|
desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Spot Singles.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3604845/">Information and Suggestions Thread</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
team: 'randomBSSFactory',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules'],
|
|
},
|
|
{
|
|
name: "[Gen 7] Hackmons Cup",
|
|
desc: `Randomized teams of level-balanced Pokémon with absolutely any ability, moves, and item.`,
|
|
|
|
mod: 'gen7',
|
|
team: 'randomHC',
|
|
searchShow: false,
|
|
ruleset: ['HP Percentage Mod', 'Cancel Mod'],
|
|
banlist: ['Nonexistent'],
|
|
},
|
|
{
|
|
name: "[Gen 7 Let's Go] Random Battle",
|
|
|
|
mod: 'gen7letsgo',
|
|
team: 'random',
|
|
searchShow: false,
|
|
ruleset: ['Obtainable', 'Allow AVs', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 6] Random Battle",
|
|
|
|
mod: 'gen6',
|
|
team: 'random',
|
|
ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Mega Rayquaza Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 6] Battle Factory",
|
|
desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`,
|
|
|
|
mod: 'gen6',
|
|
team: 'randomFactory',
|
|
searchShow: false,
|
|
ruleset: ['Obtainable', 'Sleep Clause Mod', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Mega Rayquaza Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 5] Random Battle",
|
|
|
|
mod: 'gen5',
|
|
team: 'random',
|
|
ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 4] Random Battle",
|
|
|
|
mod: 'gen4',
|
|
team: 'random',
|
|
ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 3] Random Battle",
|
|
|
|
mod: 'gen3',
|
|
team: 'random',
|
|
ruleset: ['Standard'],
|
|
},
|
|
{
|
|
name: "[Gen 2] Random Battle",
|
|
|
|
mod: 'gen2',
|
|
team: 'random',
|
|
ruleset: ['Standard'],
|
|
},
|
|
{
|
|
name: "[Gen 1] Random Battle",
|
|
|
|
mod: 'gen1',
|
|
team: 'random',
|
|
ruleset: ['Standard'],
|
|
},
|
|
{
|
|
name: "[Gen 1] Challenge Cup",
|
|
|
|
mod: 'gen1',
|
|
team: 'randomCC',
|
|
searchShow: false,
|
|
ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod', 'Desync Clause Mod', 'Sleep Clause Mod', 'Freeze Clause Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 1] Hackmons Cup",
|
|
desc: `Randomized teams of level-balanced Pokémon with absolutely any moves, types, and stats.`,
|
|
|
|
mod: 'gen1',
|
|
team: 'randomHC',
|
|
searchShow: false,
|
|
ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Desync Clause Mod', 'Sleep Clause Mod', 'Freeze Clause Mod', 'Team Type Preview'],
|
|
banlist: ['Nonexistent'],
|
|
onModifySpecies(species, target, source, effect) {
|
|
if (!target) return;
|
|
return {...species, ...(target.set as any).hc};
|
|
},
|
|
onSwitchIn(pokemon) {
|
|
this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
|
|
for (const i in pokemon.species.baseStats) {
|
|
if (i === 'spd') continue;
|
|
this.add('-start', pokemon, `${pokemon.species.baseStats[i as keyof StatsTable]}${i === 'spa' ? 'spc' : i}`, '[silent]');
|
|
}
|
|
},
|
|
},
|
|
|
|
// RoA Spotlight
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "RoA Spotlight",
|
|
column: 3,
|
|
},
|
|
{
|
|
name: "[Gen 5] Ubers",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
// searchShow: false,
|
|
ruleset: ['Standard', 'Sleep Clause Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 7] PU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
// searchShow: false,
|
|
ruleset: ['[Gen 7] NU'],
|
|
banlist: ['NU', 'PUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 2] UUBL",
|
|
threads: [`• <a href="https://www.smogon.com/forums/threads/3662389/">GSC UUBL</a>`],
|
|
|
|
mod: 'gen2',
|
|
ruleset: ['[Gen 2] OU'],
|
|
banlist: ['OU'],
|
|
},
|
|
|
|
// Past Gens OU
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "Past Gens OU",
|
|
column: 3,
|
|
},
|
|
{
|
|
name: "[Gen 7] OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/dex/sm/tags/ou/">USM OU Banlist</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8162240/">USM OU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3667522/">USM OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
ruleset: ['Standard'],
|
|
banlist: ['Uber', 'Arena Trap', 'Power Construct', 'Shadow Tag', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 6] OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/dex/xy/tags/ou/">ORAS OU Banlist</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8133793/">ORAS OU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3623399/">ORAS OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
ruleset: ['Standard', 'Swagger Clause'],
|
|
banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'Soul Dew', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 5] OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3686880/">BW2 Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3668699/">BW2 OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Swagger Clause', 'Gems Clause'],
|
|
banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 4] OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3685887/">DPP OU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3687351/">DPP Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3683332/">DPP OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen4',
|
|
ruleset: ['Standard', 'Freeze Clause Mod'],
|
|
banlist: ['AG', 'Uber', 'Arena Trap', 'Sand Veil', 'Swinub + Snow Cloak', 'Piloswine + Snow Cloak', 'Mamoswine + Snow Cloak', 'Soul Dew', 'Baton Pass', 'Swagger'],
|
|
},
|
|
{
|
|
name: "[Gen 3] OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3687813/">ADV Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3503019/">ADV OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen3',
|
|
ruleset: ['Standard', 'One Boost Passer Clause', 'Freeze Clause Mod'],
|
|
banlist: ['Uber', 'Sand Veil', 'Soundproof', 'Assist', 'Baton Pass + Block', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'],
|
|
},
|
|
{
|
|
name: "[Gen 2] OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3688523/">GSC Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3633233/">GSC OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen2',
|
|
ruleset: ['Standard'],
|
|
banlist: ['Uber', 'Mean Look + Baton Pass', 'Spider Web + Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 1] OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3689726/">RBY Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3685861/">RBY OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen1',
|
|
ruleset: ['Standard'],
|
|
banlist: ['Uber'],
|
|
},
|
|
|
|
// Retro Other Metagames
|
|
///////////////////////////////////////////////////////////////////
|
|
{
|
|
section: "Retro Other Metagames",
|
|
column: 3,
|
|
},
|
|
{
|
|
name: "[Gen 7] Balanced Hackmons",
|
|
desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8407209/">USM Balanced Hackmons</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
ruleset: ['-Nonexistent', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Forme Clause', 'CFZ Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Endless Battle Clause'],
|
|
banlist: [
|
|
'Groudon-Primal', 'Rayquaza-Mega', 'Gengarite', 'Comatose + Sleep Talk', 'Chatter',
|
|
'Arena Trap', 'Contrary', 'Huge Power', 'Illusion', 'Innards Out', 'Magnet Pull', 'Moody', 'Parental Bond', 'Protean', 'Psychic Surge', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 7] Mix and Mega",
|
|
desc: `Mega Stones and Primal Orbs can be used on almost any Pokémon with no Mega Evolution limit.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8778656/">USM Mix and Mega</a>`,
|
|
],
|
|
|
|
mod: 'gen7mixandmega',
|
|
ruleset: ['Standard OMs', 'Mega Rayquaza Clause', 'Sleep Clause Mod'],
|
|
banlist: ['Shadow Tag', 'Gengarite', 'Baton Pass', 'Electrify'],
|
|
restricted: [
|
|
'Arceus', 'Deoxys', 'Dialga', 'Dragonite', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem', 'Landorus-Therian', 'Lugia',
|
|
'Lunala', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shuckle',
|
|
'Slaking', 'Solgaleo', 'Xerneas', 'Yveltal', 'Zekrom',
|
|
'Beedrillite', 'Blazikenite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Ultranecrozium Z',
|
|
],
|
|
unbanlist: ['Deoxys-Defense', 'Kyurem-Base', 'Necrozma-Base'],
|
|
onValidateTeam(team) {
|
|
const itemTable = new Set<ID>();
|
|
for (const set of team) {
|
|
const item = this.dex.items.get(set.item);
|
|
if (!item.exists) continue;
|
|
if (itemTable.has(item.id) && (item.megaStone || item.onPrimal)) {
|
|
return [
|
|
`You are limited to one of each Mega Stone and Primal Orb.`,
|
|
`(You have more than one ${item.name}.)`,
|
|
];
|
|
}
|
|
itemTable.add(item.id);
|
|
}
|
|
},
|
|
onValidateSet(set) {
|
|
const species = this.dex.species.get(set.species);
|
|
const item = this.dex.items.get(set.item);
|
|
if (!item.megaEvolves && !item.onPrimal && item.id !== 'ultranecroziumz') return;
|
|
if (species.baseSpecies === item.megaEvolves || (item.onPrimal && item.itemUser?.includes(species.baseSpecies)) ||
|
|
(species.name.startsWith('Necrozma-') && item.id === 'ultranecroziumz')) {
|
|
return;
|
|
}
|
|
if (this.ruleTable.isRestricted(`item:${item.id}`) || this.ruleTable.isRestrictedSpecies(species) ||
|
|
set.ability === 'Power Construct') {
|
|
return [`${set.species} is not allowed to hold ${item.name}.`];
|
|
}
|
|
},
|
|
onBegin() {
|
|
for (const pokemon of this.getAllPokemon()) {
|
|
pokemon.m.originalSpecies = pokemon.baseSpecies.name;
|
|
}
|
|
},
|
|
onSwitchIn(pokemon) {
|
|
// @ts-ignore
|
|
const oMegaSpecies = this.dex.species.get(pokemon.species.originalMega);
|
|
if (oMegaSpecies.exists && pokemon.m.originalSpecies !== oMegaSpecies.baseSpecies) {
|
|
this.add('-start', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]');
|
|
const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
|
|
if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) {
|
|
this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
|
|
}
|
|
}
|
|
},
|
|
onSwitchOut(pokemon) {
|
|
// @ts-ignore
|
|
const oMegaSpecies = this.dex.species.get(pokemon.species.originalMega);
|
|
if (oMegaSpecies.exists && pokemon.m.originalSpecies !== oMegaSpecies.baseSpecies) {
|
|
this.add('-start', pokemon, oMegaSpecies.requiredItem || oMegaSpecies.requiredMove, '[silent]');
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: "[Gen 7] STABmons",
|
|
desc: `Pokémon can use any move of their typing, in addition to the moves they can normally learn.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8697545/">USM STABmons</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 7] OU', 'STABmons Move Legality'],
|
|
banlist: ['Aerodactyl', 'Aerodactyl-Mega', 'Araquanid', 'Blacephalon', 'Kartana', 'Komala', 'Kyurem-Black', 'Porygon-Z', 'Silvally', 'Tapu Koko', 'Tapu Lele', 'Thundurus', 'Thundurus-Therian', 'King\'s Rock', 'Razor Fang'],
|
|
restricted: ['Acupressure', 'Belly Drum', 'Chatter', 'Extreme Speed', 'Geomancy', 'Lovely Kiss', 'Shell Smash', 'Shift Gear', 'Spore', 'Thousand Arrows'],
|
|
},
|
|
{
|
|
name: "[Gen 6] Almost Any Ability",
|
|
desc: `Pokémon have access to almost any ability.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8772336/">ORAS Almost Any Ability</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 6] OU', '2 Ability Clause', 'AAA Restricted Abilities', '!Obtainable Abilities'],
|
|
banlist: ['Archeops', 'Bisharp', 'Chatot', 'Dragonite', 'Keldeo', 'Kyurem-Black', 'Mamoswine', 'Regigigas', 'Shedinja', 'Slaking', 'Smeargle', 'Snorlax', 'Suicune', 'Terrakion', 'Weavile', 'Dynamic Punch', 'Zap Cannon'],
|
|
unbanlist: ['Aegislash', 'Blaziken', 'Deoxys-Defense', 'Deoxys-Speed', 'Genesect', 'Greninja', 'Landorus'],
|
|
restricted: ['Arena Trap', 'Contrary', 'Fur Coat', 'Huge Power', 'Illusion', 'Imposter', 'Parental Bond', 'Protean', 'Pure Power', 'Simple', 'Speed Boost', 'Wonder Guard'],
|
|
},
|
|
{
|
|
name: "[Gen 6] Pure Hackmons",
|
|
desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/9029427/">ORAS Pure Hackmons</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause', 'EV limit = 510'],
|
|
},
|
|
|
|
// US/UM Singles
|
|
///////////////////////////////////////////////////////////////////
|
|
{
|
|
section: "US/UM Singles",
|
|
column: 3,
|
|
},
|
|
{
|
|
name: "[Gen 7] Ubers",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8286276/">USM Ubers</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
// searchShow: false,
|
|
ruleset: ['Standard', 'Mega Rayquaza Clause'],
|
|
banlist: ['Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 7] UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3621217/">USM UU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3641346/">USM UU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 7] OU'],
|
|
banlist: ['OU', 'UUBL', 'Drizzle', 'Drought', 'Kommonium Z', 'Mewnium Z'],
|
|
},
|
|
{
|
|
name: "[Gen 7] RU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3645338/">USM RU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3645873/">USM RU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 7] UU'],
|
|
banlist: ['UU', 'RUBL', 'Mimikyu', 'Aurora Veil'],
|
|
unbanlist: ['Drought'],
|
|
},
|
|
{
|
|
name: "[Gen 7] NU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3632667/">USM NU Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3645166/">USM NU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 7] RU'],
|
|
banlist: ['RU', 'NUBL', 'Drought'],
|
|
},
|
|
{
|
|
name: "[Gen 7] LC",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/dex/sm/formats/lc/">USM LC Banlist</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3639319/">USM LC Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3621440/">USM LC Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
ruleset: ['Little Cup', 'Standard', 'Swagger Clause'],
|
|
banlist: [
|
|
'Aipom', 'Cutiefly', 'Drifloon', 'Gligar', 'Gothita', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon',
|
|
'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Trapinch', 'Vulpix-Base', 'Wingull', 'Yanma',
|
|
'Eevium Z', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Sticky Web',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 7] Monotype",
|
|
desc: `All the Pokémon on a team must share a type.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8411581/">USM Monotype</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
ruleset: ['Same Type Clause', 'Standard', 'Swagger Clause'],
|
|
banlist: [
|
|
'Aegislash', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin',
|
|
'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kartana', 'Kyogre', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna',
|
|
'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Tapu Lele', 'Xerneas', 'Yveltal', 'Zekrom', 'Zygarde',
|
|
'Battle Bond', 'Shadow Tag', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Terrain Extender', 'Baton Pass',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 7] 1v1",
|
|
desc: `Bring three Pokémon to Team Preview and choose one to battle.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8031460/">USUM 1v1</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
ruleset: [
|
|
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
'Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Swagger Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause',
|
|
],
|
|
banlist: [
|
|
'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon',
|
|
'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mew', 'Mewtwo',
|
|
'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky',
|
|
'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom', 'Moody', 'Focus Sash', 'Grass Whistle', 'Hypnosis',
|
|
'Perish Song', 'Sing', 'Detect + Fightinium Z',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 7] Anything Goes",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3587441/">Anything Goes Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3591711/">Anything Goes Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3646736/">Anything Goes Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
// searchShow: false,
|
|
ruleset: ['Obtainable', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 7] ZU",
|
|
desc: `The unofficial usage-based tier below PU.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3646743/">ZU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3643412/">ZU Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3646739/">ZU Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 7] PU'],
|
|
banlist: [
|
|
'PU', 'Carracosta', 'Crabominable', 'Exeggutor-Base', 'Gorebyss', 'Jynx', 'Raticate-Alola',
|
|
'Shiftry', 'Throh', 'Turtonator', 'Type: Null', 'Ursaring', 'Victreebel',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 7] CAP",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3621207/">USUM CAP Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8691482/">USUM CAP Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8691484/">USUM CAP Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 7] OU', '+CAP'],
|
|
},
|
|
{
|
|
name: "[Gen 7] Battle Spot Singles",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3601012/">Introduction to Battle Spot Singles</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3605970/">Battle Spot Singles Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3601658/">Battle Spot Singles Role Compendium</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3619162/">Battle Spot Singles Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Min Source Gen = 6'],
|
|
banlist: ['Battle Bond'],
|
|
},
|
|
{
|
|
name: "[Gen 7 Let's Go] OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3667865/">LGPE OU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3656868/">LGPE OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen7letsgo',
|
|
searchShow: false,
|
|
ruleset: ['Adjust Level = 50', 'Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'],
|
|
banlist: ['Uber'],
|
|
},
|
|
{
|
|
name: "[Gen 7] Custom Game",
|
|
|
|
mod: 'gen7',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
// no restrictions, for serious (other than team preview)
|
|
ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
|
|
// US/UM Doubles
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "US/UM Doubles",
|
|
column: 3,
|
|
},
|
|
{
|
|
name: "[Gen 7] Doubles OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3661293/">USUM Doubles OU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8394179/">USUM Doubles OU Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8394190/">USUM Doubles OU Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
gameType: 'doubles',
|
|
// searchShow: false,
|
|
ruleset: ['Standard Doubles', 'Swagger Clause'],
|
|
banlist: ['DUber', 'Power Construct', 'Eevium Z', 'Dark Void'],
|
|
},
|
|
{
|
|
name: "[Gen 7] Doubles UU",
|
|
threads: [`• <a href="https://www.smogon.com/forums/threads/3598014/">Doubles UU Metagame Discussion</a>`],
|
|
|
|
mod: 'gen7',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 7] Doubles OU'],
|
|
banlist: ['DOU', 'DBL'],
|
|
},
|
|
{
|
|
name: "[Gen 7] VGC 2019",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3641100/">VGC 2019 Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3641123/">VGC 2019 Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 7', 'VGC Timer', 'Limit Two Restricted'],
|
|
restricted: ['Restricted Legendary'],
|
|
banlist: ['Unown', 'Battle Bond'],
|
|
},
|
|
{
|
|
name: "[Gen 7] VGC 2018",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3631800/">VGC 2018 Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3622041/">VGC 2018 Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3628885/">VGC 2018 Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
timer: {
|
|
starting: 5 * 60,
|
|
addPerTurn: 0,
|
|
maxPerTurn: 55,
|
|
maxFirstTurn: 90,
|
|
grace: 90,
|
|
timeoutAutoChoose: true,
|
|
dcTimerBank: false,
|
|
},
|
|
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 7'],
|
|
banlist: ['Oranguru + Symbiosis', 'Passimian + Defiant', 'Unown', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry', 'Battle Bond'],
|
|
},
|
|
{
|
|
name: "[Gen 7] VGC 2017",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3583926/">VGC 2017 Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3591794/">VGC 2017 Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3590391/">VGC 2017 Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen7sm',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
timer: {
|
|
starting: 15 * 60,
|
|
addPerTurn: 0,
|
|
maxPerTurn: 55,
|
|
maxFirstTurn: 90,
|
|
grace: 90,
|
|
timeoutAutoChoose: true,
|
|
dcTimerBank: false,
|
|
},
|
|
ruleset: ['Flat Rules', 'Old Alola Pokedex', '!! Adjust Level = 50', 'Min Source Gen = 7'],
|
|
banlist: ['Mega', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry'],
|
|
},
|
|
{
|
|
name: "[Gen 7] Battle Spot Doubles",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3595001/">Battle Spot Doubles Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3593890/">Battle Spot Doubles Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3595859/">Battle Spot Doubles Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen7',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Min Source Gen = 6'],
|
|
banlist: ['Battle Bond'],
|
|
},
|
|
{
|
|
name: "[Gen 7] Doubles Custom Game",
|
|
|
|
mod: 'gen7',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
battle: {trunc: Math.trunc},
|
|
debug: true,
|
|
// no restrictions, for serious (other than team preview)
|
|
ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
|
|
// OR/AS Singles
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "OR/AS Singles",
|
|
column: 4,
|
|
},
|
|
{
|
|
name: "[Gen 6] Ubers",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8286277/">ORAS Ubers</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'],
|
|
},
|
|
{
|
|
name: "[Gen 6] UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/dex/xy/formats/uu/">ORAS UU Banlist</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3598164/">ORAS UU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 6] OU'],
|
|
banlist: ['OU', 'UUBL', 'Drizzle', 'Drought'],
|
|
},
|
|
{
|
|
name: "[Gen 6] RU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/dex/xy/tags/ru/">ORAS RU Banlist</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3574583/">ORAS RU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 6] UU'],
|
|
banlist: ['UU', 'RUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 6] NU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/dex/xy/tags/nu/">ORAS NU Banlist</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3555650/">ORAS NU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 6] RU'],
|
|
banlist: ['RU', 'NUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 6] PU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/dex/xy/tags/pu/">ORAS PU Banlist</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3528743/">ORAS PU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 6] NU'],
|
|
banlist: ['NU', 'PUBL', 'Chatter'],
|
|
},
|
|
{
|
|
name: "[Gen 6] LC",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/dex/xy/formats/lc/">ORAS LC Banlist</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3547566/">ORAS LC Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['Standard', 'Little Cup'],
|
|
banlist: [
|
|
'Drifloon', 'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Yanma',
|
|
'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 6] Monotype",
|
|
desc: `All the Pokémon on a team must share a type.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8411583/">ORAS Monotype</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['Standard', 'Swagger Clause', 'Same Type Clause'],
|
|
banlist: [
|
|
'Aegislash', 'Altaria-Mega', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Genesect',
|
|
'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Greninja', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White',
|
|
'Lucario-Mega', 'Lugia', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye-Mega',
|
|
'Salamence-Mega', 'Shaymin-Sky', 'Slowbro-Mega', 'Talonflame', 'Xerneas', 'Yveltal', 'Zekrom',
|
|
'Shadow Tag', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Soul Dew', 'Baton Pass',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 6] 1v1",
|
|
desc: `Bring three Pokémon to Team Preview and choose one to battle.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8031459/">ORAS 1v1</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: [
|
|
'Max Team Size = 3', 'Picked Team Size = 1', 'Obtainable', 'Nickname Clause', 'Moody Clause', 'OHKO Clause',
|
|
'Evasion Moves Clause', 'Accuracy Moves Clause', 'Swagger Clause', 'Endless Battle Clause', 'HP Percentage Mod',
|
|
'Cancel Mod', 'Team Preview',
|
|
],
|
|
banlist: [
|
|
'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina',
|
|
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo',
|
|
'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Snorlax', 'Xerneas', 'Yveltal',
|
|
'Zekrom', 'Focus Sash', 'Soul Dew', 'Grass Whistle', 'Hypnosis', 'Perish Song', 'Sing', 'Yawn',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 6] Anything Goes",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3523229/">ORAS Anything Goes</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3548945/">ORAS AG Resources</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['Obtainable', 'Team Preview', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 6] ZU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/dex/xy/formats/zu/">ORAS ZU Banlist</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8034679/">ORAS ZU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 6] PU'],
|
|
banlist: ['PU', 'Fraxure', 'Regigigas', 'Simisear'],
|
|
},
|
|
{
|
|
name: "[Gen 6] CAP",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3537407/">ORAS CAP Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8752281/">ORAS CAP Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/8752280/">ORAS CAP Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 6] OU', '+CAP'],
|
|
banlist: ['Aurumoth', 'Cawmodore'],
|
|
},
|
|
{
|
|
name: "[Gen 6] Battle Spot Singles",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3527960/">ORAS Battle Spot Singles</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3554616/">ORAS BSS Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Min Source Gen = 6'],
|
|
banlist: ['Soul Dew'],
|
|
},
|
|
{
|
|
name: "[Gen 6] Custom Game",
|
|
|
|
mod: 'gen6',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
// no restrictions, for serious (other than team preview)
|
|
ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
|
|
// OR/AS Doubles/Triples
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "OR/AS Doubles/Triples",
|
|
column: 4,
|
|
},
|
|
{
|
|
name: "[Gen 6] Doubles OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3606255/">ORAS Doubles OU Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/7387213/">ORAS Doubles OU Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/7387215/">ORAS Doubles OU Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Standard Doubles', 'Swagger Clause'],
|
|
banlist: ['DUber', 'Soul Dew', 'Dark Void'],
|
|
},
|
|
{
|
|
name: "[Gen 6] VGC 2016",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3558332/">VGC 2016 Rules</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3580592/">VGC 2016 Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Min Source Gen = 6', 'Limit Two Restricted'],
|
|
restricted: ['Restricted Legendary'],
|
|
banlist: ['Soul Dew'],
|
|
},
|
|
{
|
|
name: "[Gen 6] VGC 2015",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3524352/">VGC 2015 Rules</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3560820/">ORAS Battle Spot Doubles Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3530547/">VGC 2015 Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Min Source Gen = 6'],
|
|
banlist: ['Soul Dew', 'Articuno + Snow Cloak', 'Zapdos + Static', 'Moltres + Flame Body', 'Dragonite + Barrier'],
|
|
},
|
|
{
|
|
name: "[Gen 6] VGC 2014",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3493272/">VGC 2014 Rules</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3507789/">VGC 2014 Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6xy',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Kalos Pokedex', 'Min Source Gen = 6'],
|
|
},
|
|
{
|
|
name: "[Gen 6] Battle Spot Doubles",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3560820/">ORAS Battle Spot Doubles Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3560824/">ORAS BSD Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Min Source Gen = 6'],
|
|
banlist: ['Soul Dew'],
|
|
},
|
|
{
|
|
name: "[Gen 6] Doubles Custom Game",
|
|
|
|
mod: 'gen6',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
battle: {trunc: Math.trunc},
|
|
debug: true,
|
|
// no restrictions, for serious (other than team preview)
|
|
ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
{
|
|
name: "[Gen 6] Battle Spot Triples",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3533914/">ORAS Battle Spot Triples Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3549201/">ORAS BST Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen6',
|
|
gameType: 'triples',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Min Source Gen = 6'],
|
|
},
|
|
{
|
|
name: "[Gen 6] Triples Custom Game",
|
|
|
|
mod: 'gen6',
|
|
gameType: 'triples',
|
|
searchShow: false,
|
|
battle: {trunc: Math.trunc},
|
|
debug: true,
|
|
// no restrictions, for serious (other than team preview)
|
|
ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
|
|
// B2/W2 Singles
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "B2/W2 Singles",
|
|
column: 4,
|
|
},
|
|
{
|
|
name: "[Gen 5] UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
searchShow: false,
|
|
ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 5] RU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3473124/">BW2 RU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'],
|
|
banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
|
|
unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 5] NU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 5] RU', '!Sleep Moves Clause', 'Sleep Clause Mod'],
|
|
banlist: ['RU', 'NUBL', 'Assist', 'Copycat'],
|
|
},
|
|
{
|
|
name: "[Gen 5] PU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/7326932/">BW2 PU</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 5] NU', 'Sleep Moves Clause'],
|
|
banlist: ['NU', 'PUBL', 'Damp Rock'],
|
|
},
|
|
{
|
|
name: "[Gen 5] LC",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3485860/">BW2 LC Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
searchShow: false,
|
|
ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
|
|
banlist: [
|
|
'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma',
|
|
'Sand Rush', 'Sand Veil', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 5] Monotype",
|
|
desc: `All the Pokémon on a team must share a type.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8411584/">BW2 Monotype</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 5] OU', 'Same Type Clause', '!Gems Clause'],
|
|
banlist: ['Latios'],
|
|
},
|
|
{
|
|
name: "[Gen 5] 1v1",
|
|
desc: `Bring three Pokémon to Team Preview and choose one to battle.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8031458/">BW2 1v1</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
searchShow: false,
|
|
ruleset: [
|
|
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
'Standard', 'Baton Pass Clause', 'Swagger Clause', 'Accuracy Moves Clause', 'Sleep Moves Clause',
|
|
],
|
|
banlist: ['Uber', 'Cottonee', 'Dragonite', 'Jirachi', 'Kyurem-Black', 'Mew', 'Togekiss', 'Whimsicott', 'Victini', 'Focus Band', 'Focus Sash', 'Quick Claw', 'Soul Dew', 'Perish Song'],
|
|
unbanlist: ['Genesect', 'Landorus', 'Manaphy', 'Thundurus', 'Tornadus-Therian'],
|
|
},
|
|
{
|
|
name: "[Gen 5] ZU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8034680/">BW2 ZU</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 5] PU'],
|
|
banlist: ['PU', 'Articuno', 'Dragonair', 'Glalie', 'Machoke', 'Marowak', 'Omanyte', 'Regigigas', 'Trubbish', 'Whirlipede', 'Baton Pass'],
|
|
unbanlist: ['Damp Rock'],
|
|
},
|
|
{
|
|
name: "[Gen 5] GBU Singles",
|
|
|
|
mod: 'gen5',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules'],
|
|
banlist: ['Dark Void', 'Sky Drop', 'Soul Dew'],
|
|
},
|
|
{
|
|
name: "[Gen 5] Custom Game",
|
|
|
|
mod: 'gen5',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
// no restrictions, for serious (other than team preview)
|
|
ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
|
|
// B2/W2 Doubles
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: 'B2/W2 Doubles',
|
|
column: 4,
|
|
},
|
|
{
|
|
name: "[Gen 5] Doubles OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3606719/">BW2 Doubles Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/7393048/">BW2 Doubles Viability Rankings</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/7393081/">BW2 Doubles Sample Teams</a>`,
|
|
],
|
|
|
|
mod: 'gen5',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Gravity'],
|
|
},
|
|
{
|
|
name: "[Gen 5] VGC 2013",
|
|
|
|
mod: 'gen5',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules'],
|
|
banlist: ['Chatot', 'Dark Void', 'Sky Drop', 'Soul Dew'],
|
|
},
|
|
{
|
|
name: "[Gen 5] VGC 2012",
|
|
|
|
mod: 'gen5bw1',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules'],
|
|
banlist: ['Dark Void', 'Sky Drop'],
|
|
},
|
|
{
|
|
name: "[Gen 5] VGC 2011",
|
|
|
|
mod: 'gen5bw1',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Old Unova Pokedex'],
|
|
banlist: ['Sky Drop', 'Belue Berry', 'Durin Berry', 'Nomel Berry', 'Rabuta Berry', 'Spelon Berry', 'Watmel Berry'],
|
|
},
|
|
{
|
|
name: "[Gen 5] Doubles Custom Game",
|
|
|
|
mod: 'gen5',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
// no restrictions, for serious (other than team preview)
|
|
ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
{
|
|
name: "[Gen 5] Triples Custom Game",
|
|
|
|
mod: 'gen5',
|
|
gameType: 'triples',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
// no restrictions, for serious (other than team preview)
|
|
ruleset: ['Team Preview', 'Cancel Mod'],
|
|
},
|
|
|
|
// DPP Singles
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "DPP Singles",
|
|
column: 5,
|
|
},
|
|
{
|
|
name: "[Gen 4] Ubers",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
|
|
],
|
|
|
|
mod: 'gen4',
|
|
searchShow: false,
|
|
ruleset: ['Standard'],
|
|
banlist: ['AG'],
|
|
},
|
|
{
|
|
name: "[Gen 4] UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3532624/">DPP UU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3503638/">DPP UU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen4',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 4] OU', '!Freeze Clause Mod'],
|
|
banlist: ['OU', 'UUBL'],
|
|
unbanlist: ['Arena Trap', 'Swagger'],
|
|
},
|
|
{
|
|
name: "[Gen 4] NU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3583742/">DPP NU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3512254/">DPP NU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen4',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 4] UU', 'Baton Pass Clause'],
|
|
banlist: ['UU', 'NUBL'],
|
|
unbanlist: ['Sand Veil', 'Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 4] PU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/7260264/">DPP PU</a>`,
|
|
],
|
|
|
|
mod: 'gen4',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 4] NU'],
|
|
banlist: [
|
|
'Articuno', 'Cacturne', 'Charizard', 'Cradily', 'Dodrio', 'Drifblim', 'Dusclops', 'Electrode',
|
|
'Floatzel', 'Gardevoir', 'Gligar', 'Golem', 'Grumpig', 'Haunter', 'Hitmonchan', 'Hypno', 'Jumpluff',
|
|
'Jynx', 'Lickilicky', 'Linoone', 'Magmortar', 'Magneton', 'Manectric', 'Medicham', 'Meganium', 'Nidoqueen',
|
|
'Ninetales', 'Piloswine', 'Poliwrath', 'Porygon2', 'Regice', 'Regirock', 'Roselia', 'Sandslash',
|
|
'Sharpedo', 'Shiftry', 'Skuntank', 'Slowking', 'Tauros', 'Typhlosion', 'Venomoth', 'Vileplume',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 4] LC",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/dp/articles/little_cup_guide">DPP LC Guide</a>`,
|
|
`• <a href="https://www.smogon.com/forums/posts/7336500/">DPP LC Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen4',
|
|
searchShow: false,
|
|
ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
|
|
banlist: [
|
|
'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma',
|
|
'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Sonic Boom', 'Swagger',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 4] Anything Goes",
|
|
|
|
mod: 'gen4',
|
|
searchShow: false,
|
|
ruleset: ['Obtainable', 'Arceus EV Limit', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
|
|
},
|
|
{
|
|
name: "[Gen 4] 1v1",
|
|
desc: `Bring three Pokémon to Team Preview and choose one to battle.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8031457/">DPP 1v1</a>`,
|
|
],
|
|
|
|
mod: 'gen4',
|
|
searchShow: false,
|
|
ruleset: [
|
|
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
'[Gen 4] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', '!Freeze Clause Mod',
|
|
],
|
|
banlist: ['Latias', 'Machamp', 'Porygon-Z', 'Shaymin', 'Snorlax', 'Togekiss', 'Focus Sash', 'Destiny Bond', 'Explosion', 'Perish Song', 'Self-Destruct'],
|
|
unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil', 'Swagger'],
|
|
},
|
|
{
|
|
name: "[Gen 4] ZU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8034681/">DPP ZU</a>`,
|
|
],
|
|
|
|
mod: 'gen4',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 4] PU'],
|
|
banlist: [
|
|
'Ampharos', 'Armaldo', 'Bellossom', 'Dragonair', 'Electabuzz', 'Gabite', 'Gastrodon', 'Glaceon', 'Glalie',
|
|
'Golduck', 'Gorebyss', 'Hippopotas', 'Kadabra', 'Lapras', 'Machoke', 'Magmar', 'Mantine', 'Marowak', 'Metang',
|
|
'Misdreavus', 'Monferno', 'Mr. Mime', 'Muk', 'Murkrow', 'Pinsir', 'Politoed', 'Purugly', 'Quagsire',
|
|
'Raichu', 'Rampardos', 'Rapidash', 'Regigigas', 'Relicanth', 'Rhydon', 'Scyther', 'Sneasel', 'Snover',
|
|
'Solrock', 'Tangela', 'Torkoal', 'Victreebel', 'Xatu', 'Zangoose', 'Damp Rock',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 4] Custom Game",
|
|
|
|
mod: 'gen4',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
// no restrictions
|
|
ruleset: ['Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
|
|
// DPP Doubles
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "DPP Doubles",
|
|
column: 5,
|
|
},
|
|
{
|
|
name: "[Gen 4] Doubles OU",
|
|
threads: [`• <a href="https://www.smogon.com/forums/threads/3618411/">DPP Doubles</a>`],
|
|
|
|
mod: 'gen4',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 4] OU', '!Freeze Clause Mod'],
|
|
banlist: ['Explosion'],
|
|
unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut', 'Swagger'],
|
|
},
|
|
{
|
|
name: "[Gen 4] VGC 2010",
|
|
|
|
mod: 'gen4',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', 'Max Team Size = 4', 'Limit Two Restricted'],
|
|
restricted: ['Restricted Legendary'],
|
|
banlist: ['Soul Dew'],
|
|
},
|
|
{
|
|
name: "[Gen 4] VGC 2009",
|
|
|
|
mod: 'gen4pt',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
ruleset: ['Flat Rules', '! Adjust Level Down', 'Max Level = 50', 'Max Team Size = 4'],
|
|
banlist: ['Tyranitar', 'Rotom', 'Judgment', 'Soul Dew'],
|
|
},
|
|
{
|
|
name: "[Gen 4] Doubles Custom Game",
|
|
|
|
mod: 'gen4',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
// no restrictions
|
|
ruleset: ['Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
|
|
// Past Generations
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
section: "Past Generations",
|
|
column: 5,
|
|
},
|
|
{
|
|
name: "[Gen 3] Ubers",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8286280/">ADV Ubers</a>`,
|
|
],
|
|
|
|
mod: 'gen3',
|
|
searchShow: false,
|
|
ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
|
|
banlist: ['Wobbuffet + Leftovers'],
|
|
},
|
|
{
|
|
name: "[Gen 3] UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen3',
|
|
searchShow: false,
|
|
ruleset: ['Standard'],
|
|
banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'],
|
|
},
|
|
{
|
|
name: "[Gen 3] NU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3503540/">ADV NU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen3',
|
|
searchShow: false,
|
|
ruleset: ['Standard'],
|
|
banlist: ['Uber', 'OU', 'UUBL', 'UU', 'Smeargle + Ingrain'],
|
|
},
|
|
{
|
|
name: "[Gen 3] 1v1",
|
|
desc: `Bring three Pokémon to Team Preview and choose one to battle.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8031456/">ADV 1v1</a>`,
|
|
],
|
|
|
|
mod: 'gen3',
|
|
searchShow: false,
|
|
ruleset: [
|
|
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
'[Gen 3] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', '!Freeze Clause Mod',
|
|
],
|
|
banlist: [
|
|
'Clefable', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song',
|
|
'Self-Destruct', 'Focus Band', 'King\'s Rock', 'Quick Claw',
|
|
],
|
|
unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil', 'Soundproof'],
|
|
},
|
|
{
|
|
name: "[Gen 3] Doubles OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3666831/">ADV Doubles OU</a>`,
|
|
],
|
|
|
|
mod: 'gen3',
|
|
searchShow: false,
|
|
gameType: 'doubles',
|
|
ruleset: ['Standard', '!Sleep Clause Mod', '!Switch Priority Clause Mod'],
|
|
banlist: ['Uber'],
|
|
unbanlist: ['Deoxys-Speed', 'Wobbuffet', 'Wynaut'],
|
|
},
|
|
{
|
|
name: "[Gen 3] Custom Game",
|
|
|
|
mod: 'gen3',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
{
|
|
name: "[Gen 3] Doubles Custom Game",
|
|
|
|
mod: 'gen3',
|
|
gameType: 'doubles',
|
|
searchShow: false,
|
|
debug: true,
|
|
ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
{
|
|
name: "[Gen 2] Ubers",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8286282/">GSC Ubers</a>`,
|
|
],
|
|
|
|
mod: 'gen2',
|
|
searchShow: false,
|
|
ruleset: ['Standard'],
|
|
},
|
|
{
|
|
name: "[Gen 2] UU",
|
|
threads: [`• <a href="https://www.smogon.com/forums/threads/3576710/">GSC UU</a>`],
|
|
|
|
mod: 'gen2',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 2] OU'],
|
|
banlist: ['OU', 'UUBL'],
|
|
unbanlist: ['Mean Look + Baton Pass', 'Spider Web + Baton Pass'],
|
|
},
|
|
{
|
|
name: "[Gen 2] NU",
|
|
threads: [`• <a href="https://www.smogon.com/forums/threads/3642565/">GSC NU</a>`],
|
|
|
|
mod: 'gen2',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 2] UU'],
|
|
banlist: ['UU', 'NUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 2] 1v1",
|
|
threads: [`• <a href="https://www.smogon.com/forums/posts/8031463/">GSC 1v1</a>`],
|
|
|
|
mod: 'gen2',
|
|
searchShow: false,
|
|
ruleset: [
|
|
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
'[Gen 2] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
|
|
],
|
|
banlist: [
|
|
'Alakazam', 'Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', 'Focus Band', 'King\'s Rock', 'Quick Claw',
|
|
'Attract', 'Destiny Bond', 'Explosion', 'Perish Song', 'Present', 'Self-Destruct', 'Swagger',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 2] Nintendo Cup 2000",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3682691/">Nintendo Cup 2000 Resource Hub</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3677370/">Differences between Nintendo Cup 2000 and GSC OU</a>`,
|
|
],
|
|
|
|
mod: 'gen2stadium2',
|
|
searchShow: false,
|
|
ruleset: [
|
|
'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
|
|
'Obtainable', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Species Clause', 'Item Clause', 'Endless Battle Clause', 'Cancel Mod', 'Event Moves Clause', 'Nickname Clause', 'Team Preview', 'Nintendo Cup 2000 Move Legality',
|
|
],
|
|
banlist: ['Uber'],
|
|
},
|
|
{
|
|
name: "[Gen 2] Stadium OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3677370/">Placeholder</a>`,
|
|
],
|
|
|
|
mod: 'gen2stadium2',
|
|
searchShow: false,
|
|
ruleset: ['Standard'],
|
|
banlist: ['Uber'],
|
|
},
|
|
{
|
|
name: "[Gen 2] Custom Game",
|
|
|
|
mod: 'gen2',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
{
|
|
name: "[Gen 1] Ubers",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8286283/">RBY Ubers</a>`,
|
|
],
|
|
|
|
mod: 'gen1',
|
|
searchShow: false,
|
|
ruleset: ['Standard'],
|
|
},
|
|
{
|
|
name: "[Gen 1] UU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3573896/">RBY UU Metagame Discussion</a>`,
|
|
`• <a href="https://www.smogon.com/forums/threads/3647713/">RBY UU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen1',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 1] OU', 'APT Clause', 'Sleep Moves Clause'],
|
|
banlist: ['OU', 'UUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 1] NU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen1',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 1] UU', '!APT Clause', '!Sleep Moves Clause'],
|
|
banlist: ['UU', 'NUBL'],
|
|
},
|
|
{
|
|
name: "[Gen 1] 1v1",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/posts/8031462">RBY 1v1</a>`,
|
|
],
|
|
|
|
mod: 'gen1',
|
|
searchShow: false,
|
|
ruleset: [
|
|
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
'[Gen 1] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
|
|
],
|
|
banlist: ['Bind', 'Clamp', 'Explosion', 'Fire Spin', 'Self-Destruct', 'Wrap'],
|
|
},
|
|
{
|
|
name: "[Gen 1] Japanese OU",
|
|
desc: `Generation 1 with Japanese battle mechanics.`,
|
|
|
|
mod: 'gen1jpn',
|
|
searchShow: false,
|
|
ruleset: ['Standard'],
|
|
banlist: ['Uber'],
|
|
},
|
|
{
|
|
name: "[Gen 1] Nintendo Cup 1997",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3682412/">Nintendo Cup 1997 Discussion & Resources</a>`,
|
|
],
|
|
|
|
mod: 'gen1jpn',
|
|
searchShow: false,
|
|
ruleset: [
|
|
'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
|
|
'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
|
|
],
|
|
banlist: ['Uber'],
|
|
},
|
|
{
|
|
name: "[Gen 1] Stadium OU",
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/forums/threads/3685877/">Stadium OU Viability Rankings</a>`,
|
|
],
|
|
|
|
mod: 'gen1stadium',
|
|
searchShow: false,
|
|
ruleset: ['Standard', 'Team Preview'],
|
|
banlist: ['Uber',
|
|
'Nidoking + Fury Attack + Thrash', 'Exeggutor + Poison Powder + Stomp', 'Exeggutor + Sleep Powder + Stomp',
|
|
'Exeggutor + Stun Spore + Stomp', 'Jolteon + Focus Energy + Thunder Shock', 'Flareon + Focus Energy + Ember',
|
|
],
|
|
},
|
|
{
|
|
name: "[Gen 1] Tradebacks OU",
|
|
desc: `RBY OU with movepool additions from the Time Capsule.`,
|
|
threads: [
|
|
`• <a href="https://www.smogon.com/articles/rby-tradebacks-ou">RBY Tradebacks OU</a>`,
|
|
],
|
|
|
|
mod: 'gen1',
|
|
searchShow: false,
|
|
ruleset: ['[Gen 1] OU', 'Allow Tradeback'],
|
|
},
|
|
{
|
|
name: "[Gen 1] Custom Game",
|
|
|
|
mod: 'gen1',
|
|
searchShow: false,
|
|
debug: true,
|
|
battle: {trunc: Math.trunc},
|
|
ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Desync Clause Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
},
|
|
];
|