@pkmn/sim 0.5.3 → 0.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/config/formats.js +402 -332
- package/build/config/formats.js.map +1 -1
- package/build/data/aliases.js +4 -4
- package/build/data/aliases.js.map +1 -1
- package/build/data/formats-data.js +183 -70
- package/build/data/formats-data.js.map +1 -1
- package/build/data/mods/gen1/formats-data.js +190 -190
- package/build/data/mods/gen1/formats-data.js.map +1 -1
- package/build/data/mods/gen1/moves.js +1 -2
- package/build/data/mods/gen1/moves.js.map +1 -1
- package/build/data/mods/gen2/formats-data.js +1 -1
- package/build/data/mods/gen2/formats-data.js.map +1 -1
- package/build/data/mods/gen3/formats-data.js +13 -13
- package/build/data/mods/gen3/formats-data.js.map +1 -1
- package/build/data/mods/gen4/moves.js +22 -0
- package/build/data/mods/gen4/moves.js.map +1 -1
- package/build/data/mods/gen5/formats-data.js +173 -156
- package/build/data/mods/gen5/formats-data.js.map +1 -1
- package/build/data/mods/gen6/formats-data.js +4 -3
- package/build/data/mods/gen6/formats-data.js.map +1 -1
- package/build/data/mods/gen7/formats-data.js +3 -2
- package/build/data/mods/gen7/formats-data.js.map +1 -1
- package/build/data/mods/gen7/moves.js +154 -0
- package/build/data/mods/gen7/moves.js.map +1 -1
- package/build/data/moves.js +38 -7
- package/build/data/moves.js.map +1 -1
- package/build/data/pokedex.js +480 -11
- package/build/data/pokedex.js.map +1 -1
- package/build/data/rulesets.js +12 -1
- package/build/data/rulesets.js.map +1 -1
- package/build/data/tags.d.ts +1 -0
- package/build/data/tags.js +4 -3
- package/build/data/tags.js.map +1 -1
- package/build/data/text/abilities.js +4 -4
- package/build/data/text/abilities.js.map +1 -1
- package/build/data/text/moves.js +18 -18
- package/build/data/text/moves.js.map +1 -1
- package/build/sim/battle-actions.js +4 -1
- package/build/sim/battle-actions.js.map +1 -1
- package/build/sim/battle.js +23 -22
- package/build/sim/battle.js.map +1 -1
- package/build/sim/dex-formats.d.ts +1 -0
- package/build/sim/dex-formats.js +3 -2
- package/build/sim/dex-formats.js.map +1 -1
- package/build/sim/dex-species.js +5 -2
- package/build/sim/dex-species.js.map +1 -1
- package/build/sim/exported-global-types.d.ts +1 -0
- package/build/sim/global-types.d.ts +1 -0
- package/build/sim/index.d.ts +1 -0
- package/build/sim/index.js +3 -1
- package/build/sim/index.js.map +1 -1
- package/build/sim/team-validator.js +13 -0
- package/build/sim/team-validator.js.map +1 -1
- package/config/formats.ts +422 -352
- package/data/aliases.ts +4 -4
- package/data/formats-data.ts +183 -70
- package/data/mods/gen1/formats-data.ts +190 -190
- package/data/mods/gen1/moves.ts +1 -2
- package/data/mods/gen2/formats-data.ts +1 -1
- package/data/mods/gen3/formats-data.ts +13 -13
- package/data/mods/gen4/moves.ts +21 -0
- package/data/mods/gen5/formats-data.ts +173 -156
- package/data/mods/gen6/formats-data.ts +4 -3
- package/data/mods/gen7/formats-data.ts +3 -2
- package/data/mods/gen7/moves.ts +150 -0
- package/data/moves.ts +37 -7
- package/data/pokedex.ts +480 -11
- package/data/rulesets.ts +11 -1
- package/data/tags.ts +6 -3
- package/data/text/abilities.ts +4 -4
- package/data/text/moves.ts +18 -18
- package/package.json +2 -2
- package/sim/battle-actions.ts +4 -1
- package/sim/battle.ts +24 -23
- package/sim/dex-formats.ts +4 -1
- package/sim/dex-species.ts +5 -2
- package/sim/exported-global-types.ts +1 -0
- package/sim/global-types.ts +1 -0
- package/sim/index.ts +1 -0
- package/sim/team-validator.ts +12 -0
package/config/formats.ts
CHANGED
|
@@ -143,7 +143,7 @@ export const Formats: FormatList = [
|
|
|
143
143
|
|
|
144
144
|
mod: 'gen8',
|
|
145
145
|
ruleset: ['[Gen 8] RU'],
|
|
146
|
-
banlist: ['RU', 'NUBL', 'Drizzle', 'Drought'],
|
|
146
|
+
banlist: ['RU', 'NUBL', 'Drizzle', 'Drought', 'Slush Rush'],
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
149
|
name: "[Gen 8] PU",
|
|
@@ -208,7 +208,7 @@ export const Formats: FormatList = [
|
|
|
208
208
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Jirachi',
|
|
209
209
|
'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mew', 'Mewtwo', 'Mimikyu', 'Necrozma-Dawn-Wings',
|
|
210
210
|
'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye', 'Snorlax', 'Solgaleo', 'Victini', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
211
|
-
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Bright Powder', 'Focus Band', 'Focus Sash', 'Lax Incense', 'Quick Claw', 'Perish Song',
|
|
211
|
+
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Band', 'Focus Sash', 'Lax Incense', 'Quick Claw', 'Perish Song',
|
|
212
212
|
],
|
|
213
213
|
},
|
|
214
214
|
{
|
|
@@ -234,7 +234,7 @@ export const Formats: FormatList = [
|
|
|
234
234
|
mod: 'gen8',
|
|
235
235
|
ruleset: ['[Gen 8] PU'],
|
|
236
236
|
banlist: [
|
|
237
|
-
'PU', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Haunter', 'Magmortar', 'Magneton', 'Omastar', 'Rotom-Frost',
|
|
237
|
+
'PU', 'Aurorus', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Haunter', 'Magmortar', 'Magneton', 'Omastar', 'Rotom-Frost',
|
|
238
238
|
'Turtonator', 'Vanilluxe', 'Vikavolt', 'Silvally-Dragon', 'Silvally-Ground', 'Sneasel', 'Damp Rock', 'Grassy Seed',
|
|
239
239
|
],
|
|
240
240
|
},
|
|
@@ -285,35 +285,9 @@ export const Formats: FormatList = [
|
|
|
285
285
|
name: "[Gen 8] Battle Stadium Singles",
|
|
286
286
|
|
|
287
287
|
mod: 'gen8',
|
|
288
|
-
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'Limit
|
|
288
|
+
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'Limit Two Restricted'],
|
|
289
289
|
restricted: ['Restricted Legendary'],
|
|
290
290
|
},
|
|
291
|
-
{
|
|
292
|
-
name: "[Gen 8] Battle Stadium Singles Series 9",
|
|
293
|
-
threads: [
|
|
294
|
-
`• <a href="https://www.smogon.com/forums/threads/3679374/">BSS Discussion</a>`,
|
|
295
|
-
`• <a href="https://www.smogon.com/forums/threads/3672698/">BSS Viability Rankings</a>`,
|
|
296
|
-
],
|
|
297
|
-
|
|
298
|
-
mod: 'gen8',
|
|
299
|
-
searchShow: false,
|
|
300
|
-
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
|
|
301
|
-
},
|
|
302
|
-
{
|
|
303
|
-
name: "[Gen 8] Test Your Luck!",
|
|
304
|
-
threads: [
|
|
305
|
-
`• <a href="https://www.smogon.com/forums/threads/3695144/">Test Your Luck! Discussion</a>`,
|
|
306
|
-
],
|
|
307
|
-
|
|
308
|
-
mod: 'gen8',
|
|
309
|
-
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'VGC Timer', 'Min Source Gen = 8'],
|
|
310
|
-
banlist: ['Azelf', 'Mesprit', 'Uxie'],
|
|
311
|
-
onValidateSet(set, format) {
|
|
312
|
-
if (set.moves.length !== 1 || this.dex.moves.get(set.moves[0]).id !== 'metronome') {
|
|
313
|
-
return [`${set.name || set.species} has illegal moves.`, `(${format.name} only allows the move Metronome)`];
|
|
314
|
-
}
|
|
315
|
-
},
|
|
316
|
-
},
|
|
317
291
|
{
|
|
318
292
|
name: "[Gen 8] Custom Game",
|
|
319
293
|
|
|
@@ -395,20 +369,7 @@ export const Formats: FormatList = [
|
|
|
395
369
|
restricted: ['Restricted Legendary'],
|
|
396
370
|
},
|
|
397
371
|
{
|
|
398
|
-
name: "[Gen 8] VGC 2021
|
|
399
|
-
threads: [
|
|
400
|
-
`• <a href="https://www.smogon.com/forums/threads/3677186/">VGC 2021 Series 11 Metagame Discussion</a>`,
|
|
401
|
-
`• <a href="https://www.smogon.com/forums/threads/3693427/">VGC 2021 Series 11 Sample Teams</a>`,
|
|
402
|
-
`• <a href="https://www.smogon.com/forums/threads/3693284/">VGC 2021 Series 11 Viability Rankings</a>`,
|
|
403
|
-
],
|
|
404
|
-
|
|
405
|
-
mod: 'gen8',
|
|
406
|
-
gameType: 'doubles',
|
|
407
|
-
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit One Restricted'],
|
|
408
|
-
restricted: ['Restricted Legendary'],
|
|
409
|
-
},
|
|
410
|
-
{
|
|
411
|
-
name: "[Gen 8] VGC 2021 Series 9",
|
|
372
|
+
name: "[Gen 8] VGC 2021",
|
|
412
373
|
|
|
413
374
|
mod: 'gen8',
|
|
414
375
|
gameType: 'doubles',
|
|
@@ -514,13 +475,15 @@ export const Formats: FormatList = [
|
|
|
514
475
|
mod: 'gen8',
|
|
515
476
|
ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
|
|
516
477
|
banlist: [
|
|
517
|
-
'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darkrai',
|
|
518
|
-
'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus',
|
|
519
|
-
'
|
|
520
|
-
'
|
|
521
|
-
'
|
|
522
|
-
'
|
|
523
|
-
'
|
|
478
|
+
'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darkrai',
|
|
479
|
+
'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus',
|
|
480
|
+
'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black',
|
|
481
|
+
'Kyurem-White', 'Landorus-Base', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Metagross-Mega', 'Mewtwo',
|
|
482
|
+
'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
|
|
483
|
+
'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian',
|
|
484
|
+
'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Zygarde-Complete', 'Arena Trap', 'Moody',
|
|
485
|
+
'Power Construct', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Razor Fang',
|
|
486
|
+
'Quick Claw', 'Baton Pass',
|
|
524
487
|
],
|
|
525
488
|
},
|
|
526
489
|
{
|
|
@@ -543,12 +506,14 @@ export const Formats: FormatList = [
|
|
|
543
506
|
'Drizzle', 'Drought',
|
|
544
507
|
// Slowbronite is banned so it doesn't validate on Galarian Slowbro
|
|
545
508
|
'Slowbronite',
|
|
509
|
+
// NatDex suspect
|
|
510
|
+
'Tornadus-Therian',
|
|
546
511
|
],
|
|
547
512
|
// Used to distinguish UU from below UU in the client
|
|
548
513
|
restricted: [
|
|
549
514
|
'Aegislash', 'Alakazam-Base', 'Altaria-Mega', 'Amoonguss', 'Beedrill-Mega', 'Blaziken-Base', 'Breloom', 'Celesteela',
|
|
550
515
|
'Chandelure', 'Donphan', 'Dracozolt', 'Dragonite', 'Feraligatr', 'Gastrodon', 'Hatterene', 'Hippowdon', 'Infernape',
|
|
551
|
-
'Keldeo', 'Krookodile', 'Mamoswine', 'Mandibuzz', 'Manectric-Mega', '
|
|
516
|
+
'Keldeo', 'Krookodile', 'Mamoswine', 'Mandibuzz', 'Manectric-Mega', 'Melmetal', 'Mienshao', 'Moltres-Base',
|
|
552
517
|
'Nidoking', 'Nidoqueen', 'Nihilego', 'Quagsire', 'Regieleki', 'Ribombee', 'Rotom-Heat', 'Rotom-Wash', 'Salamence',
|
|
553
518
|
'Scizor', 'Skarmory', 'Slowking-Base', 'Swampert-Base', 'Talonflame', 'Tangrowth', 'Tornadus-Base', 'Umbreon',
|
|
554
519
|
'Urshifu-Rapid-Strike',
|
|
@@ -591,36 +556,62 @@ export const Formats: FormatList = [
|
|
|
591
556
|
section: "Pet Mods",
|
|
592
557
|
},
|
|
593
558
|
{
|
|
594
|
-
name: "[Gen 8]
|
|
559
|
+
name: "[Gen 8] Alternatium",
|
|
560
|
+
desc: `A metagame made up of only Pokémon with alternate forms, with all of them being separate and unique.`,
|
|
595
561
|
threads: [
|
|
596
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
562
|
+
`• <a href="https://www.smogon.com/forums/threads/3683767/">Alternatium</a>`,
|
|
563
|
+
`• <a href="https://docs.google.com/spreadsheets/d/1bvvkPg1CrUBJFJJeuwkts8elfJcEcahGOoHm-vGBXOI/edit?usp=sharing">Spreadsheet</a>`,
|
|
597
564
|
],
|
|
598
565
|
|
|
599
|
-
mod:
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
banlist: [
|
|
603
|
-
'All Pokemon', 'Lopunnite', 'Tapu Lop-Mega', 'Red Orb', 'Grousle-Primal',
|
|
604
|
-
],
|
|
566
|
+
mod: 'alternatium',
|
|
567
|
+
ruleset: ['Standard NatDex', 'Z-Move Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
|
|
568
|
+
banlist: ['All Pokemon', 'Past'],
|
|
605
569
|
unbanlist: [
|
|
606
|
-
'
|
|
607
|
-
'
|
|
608
|
-
'
|
|
609
|
-
'
|
|
610
|
-
'
|
|
611
|
-
'
|
|
612
|
-
'
|
|
613
|
-
|
|
614
|
-
'
|
|
615
|
-
'
|
|
616
|
-
'
|
|
570
|
+
'Silvally', 'Silvally-Bug', 'Silvally-Dark', 'Silvally-Dragon', 'Silvally-Electric', 'Silvally-Fairy', 'Silvally-Fighting', 'Silvally-Fire', 'Silvally-Flying', 'Silvally-Ghost',
|
|
571
|
+
'Silvally-Grass', 'Silvally-Ground', 'Silvally-Ice', 'Silvally-Poison', 'Silvally-Psychic', 'Silvally-Rock', 'Silvally-Steel', 'Silvally-Water', 'Pikachu', 'Pikachu-Rock-Star',
|
|
572
|
+
'Pikachu-Belle', 'Pikachu-Idol', 'Pikachu-PhD', 'Pikachu-Libre', 'Pikachu-Partner', 'Pikachu-Starter', 'Darmanitan', 'Darmanitan-Zen', 'Darmanitan-Galar', 'Darmanitan-Galar-Zen',
|
|
573
|
+
'Aegishield', 'Aegislash', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Rotom', 'Rotom-Heat', 'Rotom-Wash', 'Rotom-Frost', 'Rotom-Fan', 'Rotom-Mow', 'Dugtrio',
|
|
574
|
+
'Dugtrio-Alola', 'Muk', 'Muk-Oilslick', 'Slowbro', 'Slowbro-Galar', 'Slowking', 'Slowking-Galar', 'Tornadus', 'Cummulus', 'Thundurus', 'Thundurus-Therian', 'Landorus', 'Landorus-Bengal',
|
|
575
|
+
'Vivillon-Fancy', 'Vivillon', 'Vivillon-Pokeball', 'Genesect', 'Genesect-Password', 'Genesect-Molten', 'Genesect-Freezer', 'Genesect-Type-Delta', 'Groudon', 'Groudon-Primal', 'Kyogre',
|
|
576
|
+
'Kyogre-Primal', 'Deoxys-Wood', 'Deoxys-Gem', 'Deoxys-Tank', 'Deoxys-Speed', 'Sandslash-Lustrous', 'Sandslash-Alola', 'Ninetales-Steamwork', 'Ninetales-Alola', 'Giratina', 'Giratina-Shadow',
|
|
577
|
+
'Eternatus', 'Manustorm', 'Exeggutor', 'Exeggutor-Lighthouse', 'Weezing', 'Weezing-King', 'Raticate', 'Raticate-Alola', 'Linoone', 'Linoone-Punk', 'Catastroform', 'Castform-Firestorm',
|
|
578
|
+
'Castform-Thunderstorm', 'Castform-Snowy', 'Wormadam', 'Wormadam-Sandy', 'Fibormadam', 'Farfetch\u2019d', 'Farfetch\u2019d-Galar', 'Corsola', 'Corsoul', 'Shaymin', 'Shaymin-Sky', 'Keldeo',
|
|
579
|
+
'Swordeo', 'Meloetta', 'Meloetta-Fighter', 'Lycanday', 'Lycanroc-Spectre', 'Lycanroc-Dusk', 'Gourgeist', 'Gourgeist-Fae', 'Gourgeist-Pulpy', 'Supergeist', 'Cramorant', 'Cramorant-Swimmer',
|
|
580
|
+
'Cramorant-Gorging', 'Eiscue', 'Eiscue-Noice', 'Mimikyu', 'Mimikyu-Sparkstone', 'Morpeko-Marsh', 'Morvilant', 'Zygarde-Wyrm', 'Zygarde-Canid', 'Zygarde-Goliath',
|
|
581
|
+
],
|
|
582
|
+
onValidateTeam(team, format) {
|
|
583
|
+
const speciesTable = new Set<string>();
|
|
584
|
+
for (const set of team) {
|
|
585
|
+
const species = this.dex.species.get(set.species);
|
|
586
|
+
if (speciesTable.has(species.id)) {
|
|
587
|
+
return [
|
|
588
|
+
`You are limited to one of each Pokémon by Species Clause (except for different formes).`,
|
|
589
|
+
`(You have more than one ${species.id}.)`,
|
|
590
|
+
];
|
|
591
|
+
}
|
|
592
|
+
speciesTable.add(species.id);
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
name: "[Gen 8] Random Dex",
|
|
598
|
+
desc: `A micrometagame project consisting of 80 randomly selected fully-evolved Pokémon.`,
|
|
599
|
+
threads: [
|
|
600
|
+
`• <a href="https://www.smogon.com/forums/threads/3690182/">Random Dex</a>`,
|
|
601
|
+
],
|
|
617
602
|
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
'
|
|
623
|
-
'
|
|
603
|
+
mod: 'randomdex',
|
|
604
|
+
ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
|
|
605
|
+
banlist: ['All Pokemon', 'Past', 'Arena Trap', 'Moody', 'Shadow Tag', 'Baton Pass', 'Bright Powder', 'Lax Incense', 'King\'s Rock', 'Razor Fang', 'Kangaskhanite', 'Medichamite', 'Kommonium Z'],
|
|
606
|
+
unbanlist: [
|
|
607
|
+
'Absol', 'Absol-Mega', 'Appletun', 'Articuno', 'Aurorus', 'Basculin', 'Beartic', 'Bisharp', 'Calyrex', 'Camerupt', 'Camerupt-Mega',
|
|
608
|
+
'Celesteela', 'Cloyster', 'Crawdaunt', 'Cursola', 'Dedenne', 'Delibird', 'Eelektross', 'Espeon', 'Flapple', 'Flareon', 'Flygon',
|
|
609
|
+
'Galvantula', 'Girafarig', 'Glaceon', 'Goodra', 'Gourgeist', 'Grimmsnarl', 'Guzzlord', 'Heliolisk', 'Hitmonchan', 'Hitmonlee',
|
|
610
|
+
'Hitmontop', 'Incineroar', 'Indeedee', 'Jolteon', 'Kangaskhan', 'Kommo-o', 'Lanturn', 'Leafeon', 'Leavanny', 'Ludicolo', 'Lunatone',
|
|
611
|
+
'Luvdisc', 'Machamp', 'Mandibuzz', 'Medicham', 'Nihilego', 'Palossand', 'Pidgeot', 'Pidgeot-Mega', 'Probopass', 'Pyroar', 'Sawk',
|
|
612
|
+
'Sceptile', 'Sceptile-Mega', 'Scolipede', 'Shiftry', 'Simisage', 'Slowbro', 'Slowbro-Mega', 'Slowking', 'Swoobat', 'Sylveon',
|
|
613
|
+
'Tapu Bulu', 'Tapu Fini', 'Tauros', 'Typhlosion', 'Umbreon', 'Ursaring', 'Vaporeon', 'Whiscash', 'Wishiwashi', 'Zebstrika', 'Absolite',
|
|
614
|
+
'Pidgeotite', 'Sceptilite', 'Cameruptite', 'Slowbronite',
|
|
624
615
|
],
|
|
625
616
|
},
|
|
626
617
|
{
|
|
@@ -644,79 +635,135 @@ export const Formats: FormatList = [
|
|
|
644
635
|
column: 2,
|
|
645
636
|
},
|
|
646
637
|
{
|
|
647
|
-
name: "[Gen 8]
|
|
648
|
-
desc: `Pokémon
|
|
638
|
+
name: "[Gen 8] Trademarked",
|
|
639
|
+
desc: `Sacrifice your Pokémon's ability for a status move that activates on switch-in.`,
|
|
649
640
|
threads: [
|
|
650
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
641
|
+
`• <a href="https://www.smogon.com/forums/threads/3656980/">Trademarked</a>`,
|
|
651
642
|
],
|
|
652
|
-
|
|
643
|
+
|
|
644
|
+
mod: 'gen8',
|
|
645
|
+
// searchShow: false,
|
|
653
646
|
ruleset: ['Standard', 'Dynamax Clause'],
|
|
654
647
|
banlist: [
|
|
655
|
-
'Calyrex-Ice', 'Calyrex-Shadow', '
|
|
656
|
-
'
|
|
657
|
-
'
|
|
658
|
-
'
|
|
659
|
-
'
|
|
660
|
-
// Moody users
|
|
661
|
-
'Glalie', 'Octillery', 'Remoraid', 'Snorunt',
|
|
662
|
-
// Shadow Tag/Arena Trap
|
|
663
|
-
'Diglett-Base', 'Dugtrio-Base', 'Gothita', 'Gothitelle', 'Gothorita', 'Trapinch', 'Wobbuffet', 'Wynaut',
|
|
648
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Kyurem-Black', 'Kyurem-White',
|
|
649
|
+
'Giratina', 'Giratina-Origin', 'Genesect', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Lugia', 'Lunala', 'Magearna', 'Marowak-Alola',
|
|
650
|
+
'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza',
|
|
651
|
+
'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
|
|
652
|
+
'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Moody', 'Neutralizing Gas', 'Power Construct', 'Shadow Tag', 'Baton Pass',
|
|
664
653
|
],
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
654
|
+
restricted: [
|
|
655
|
+
'Baneful Bunker', 'Block', 'Copycat', 'Corrosive Gas', 'Detect', 'Destiny Bond', 'Disable', 'Encore', 'Fairy Lock', 'Hypnosis', 'Ingrain',
|
|
656
|
+
'Instruct', 'Lovely Kiss', 'King\'s Shield', 'Mat Block', 'Mean Look', 'Memento', 'move:Metronome', 'Obstruct', 'Octolock', 'Nature Power',
|
|
657
|
+
'Parting Shot', 'Psycho Shift', 'Protect', 'Roar', 'Sing', 'Skill Swap', 'Sleep Powder', 'Sleep Talk', 'Spiky Shield', 'Spore', 'Substitute',
|
|
658
|
+
'Teleport', 'Whirlwind', 'Wish', 'Yawn',
|
|
659
|
+
],
|
|
660
|
+
onValidateTeam(team, format, teamHas) {
|
|
661
|
+
const problems = [];
|
|
662
|
+
for (const trademark in teamHas.trademarks) {
|
|
663
|
+
if (teamHas.trademarks[trademark] > 1) {
|
|
664
|
+
problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks[trademark]} Pok\u00e9mon with ${trademark} as a Trademark.)`);
|
|
669
665
|
}
|
|
670
|
-
pokemon.m.innates = Object.keys(pokemon.species.abilities)
|
|
671
|
-
.filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
|
|
672
|
-
.map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
|
|
673
|
-
.filter(ability => ability !== pokemon.ability);
|
|
674
666
|
}
|
|
667
|
+
return problems;
|
|
675
668
|
},
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
}
|
|
669
|
+
validateSet(set, teamHas) {
|
|
670
|
+
const dex = this.dex;
|
|
671
|
+
const ability = dex.moves.get(set.ability);
|
|
672
|
+
if (!ability.exists) { // Not even a real move
|
|
673
|
+
return this.validateSet(set, teamHas);
|
|
682
674
|
}
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
pokemon.removeVolatile(innate);
|
|
675
|
+
// Absolute trademark bans
|
|
676
|
+
if (ability.category !== 'Status') {
|
|
677
|
+
return [`${ability.name} is not a status move, and cannot be used as a trademark.`];
|
|
687
678
|
}
|
|
688
|
-
|
|
679
|
+
if (ability.forceSwitch || ability.selfSwitch) {
|
|
680
|
+
return [
|
|
681
|
+
`Force-switching and self-switching moves are banned from being used as trademarks.`,
|
|
682
|
+
`(${ability.name} is a ${ability.forceSwitch ? 'force' : 'self'}-switching move.)`,
|
|
683
|
+
];
|
|
684
|
+
}
|
|
685
|
+
const irrevokablyRestricted = [
|
|
686
|
+
'Assist', 'Copycat', 'Metronome', 'Mirror Move', 'Sleep Talk', // Could call another unsafe trademark
|
|
687
|
+
'Skill Swap', // Self-propagates indefinitely
|
|
688
|
+
];
|
|
689
|
+
if (irrevokablyRestricted.includes(ability.name)) {
|
|
690
|
+
return [`${ability.name} cannot safely function as a trademark.`];
|
|
691
|
+
}
|
|
692
|
+
// Contingent trademark bans
|
|
693
|
+
if (this.ruleTable.isRestricted(`move:${ability.id}`)) {
|
|
694
|
+
return [`${ability.name} is restricted from being used as a trademark.`];
|
|
695
|
+
}
|
|
696
|
+
if (set.moves.map(this.toID).includes(ability.id)) {
|
|
697
|
+
return [`${set.name} may not use ${ability.name} as both a trademark and one of its moves simultaneously.`];
|
|
698
|
+
}
|
|
699
|
+
const customRules = this.format.customRules || [];
|
|
700
|
+
if (!customRules.includes('!obtainableabilities')) customRules.push('!obtainableabilities');
|
|
701
|
+
|
|
702
|
+
const TeamValidator: typeof import('../sim/team-validator').TeamValidator =
|
|
703
|
+
require('../sim/team-validator').TeamValidator;
|
|
704
|
+
|
|
705
|
+
const validator = new TeamValidator(dex.formats.get(`${this.format.id}@@@${customRules.join(',')}`));
|
|
706
|
+
const moves = set.moves;
|
|
707
|
+
set.moves = [ability.id];
|
|
708
|
+
set.ability = dex.species.get(set.species).abilities['0'];
|
|
709
|
+
let problems = validator.validateSet(set, {}) || [];
|
|
710
|
+
if (problems.length) return problems;
|
|
711
|
+
set.moves = moves;
|
|
712
|
+
set.ability = dex.species.get(set.species).abilities['0'];
|
|
713
|
+
problems = problems.concat(validator.validateSet(set, teamHas) || []);
|
|
714
|
+
set.ability = ability.id;
|
|
715
|
+
if (!teamHas.trademarks) teamHas.trademarks = {};
|
|
716
|
+
teamHas.trademarks[ability.name] = (teamHas.trademarks[ability.name] || 0) + 1;
|
|
717
|
+
return problems.length ? problems : null;
|
|
718
|
+
},
|
|
719
|
+
pokemon: {
|
|
720
|
+
getAbility() {
|
|
721
|
+
const move = this.battle.dex.moves.get(this.battle.toID(this.ability));
|
|
722
|
+
if (!move.exists) return Object.getPrototypeOf(this).getAbility.call(this);
|
|
723
|
+
return {
|
|
724
|
+
id: move.id,
|
|
725
|
+
name: move.name,
|
|
726
|
+
onStart(this: Battle, pokemon: Pokemon) {
|
|
727
|
+
this.add('-activate', pokemon, 'ability: ' + move.name);
|
|
728
|
+
this.actions.useMove(move, pokemon);
|
|
729
|
+
},
|
|
730
|
+
toString() {
|
|
731
|
+
return "";
|
|
732
|
+
},
|
|
733
|
+
};
|
|
734
|
+
},
|
|
689
735
|
},
|
|
690
736
|
},
|
|
691
737
|
{
|
|
692
|
-
name: "[Gen 8]
|
|
693
|
-
desc: `Pokémon
|
|
738
|
+
name: "[Gen 8] Linked",
|
|
739
|
+
desc: `The first two moves in a Pokémon's moveset are used simultaneously.`,
|
|
694
740
|
threads: [
|
|
695
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
741
|
+
`• <a href="https://www.smogon.com/forums/threads/3660421/">Linked</a>`,
|
|
696
742
|
],
|
|
697
743
|
|
|
698
|
-
mod: '
|
|
699
|
-
|
|
700
|
-
ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Sleep Clause Mod', 'Endless Battle Clause'],
|
|
744
|
+
mod: 'linked',
|
|
745
|
+
ruleset: ['Standard', 'Dynamax Clause'],
|
|
701
746
|
banlist: [
|
|
702
|
-
'Calyrex-Ice', 'Calyrex-Shadow', '
|
|
703
|
-
'
|
|
704
|
-
'
|
|
705
|
-
'
|
|
706
|
-
'
|
|
747
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Cloyster', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
|
|
748
|
+
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna',
|
|
749
|
+
'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo',
|
|
750
|
+
'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base',
|
|
751
|
+
'Zygarde-Complete', 'Arena Trap', 'Chlorophyll', 'Moody', 'Power Construct', 'Sand Rush', 'Sand Veil', 'Shadow Tag', 'Slush Rush', 'Snow Cloak',
|
|
752
|
+
'Surge Surfer', 'Swift Swim', 'Unburden', 'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Baton Pass',
|
|
707
753
|
],
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
754
|
+
restricted: [
|
|
755
|
+
'Baneful Bunker', 'Bounce', 'Protect', 'Detect', 'Dig', 'Dive', 'Fly', 'King\'s Shield', 'Nature\'s Madness', 'Night Shade',
|
|
756
|
+
'Obstruct', 'Phantom Force', 'Seismic Toss', 'Shadow Force', 'Sky Drop', 'Spiky Shield', 'Super Fang', 'Trick Room',
|
|
757
|
+
],
|
|
758
|
+
onValidateSet(set) {
|
|
759
|
+
const problems = [];
|
|
760
|
+
for (const [i, moveid] of set.moves.entries()) {
|
|
761
|
+
const move = this.dex.moves.get(moveid);
|
|
762
|
+
if ([0, 1].includes(i) && this.ruleTable.isRestricted(`move:${move.id}`)) {
|
|
763
|
+
problems.push(`${set.name || set.species}'s move ${move.name} cannot be linked.`);
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
return problems;
|
|
720
767
|
},
|
|
721
768
|
},
|
|
722
769
|
|
|
@@ -764,6 +811,35 @@ export const Formats: FormatList = [
|
|
|
764
811
|
}
|
|
765
812
|
},
|
|
766
813
|
},
|
|
814
|
+
{
|
|
815
|
+
name: "[Gen 8] Almost Any Ability",
|
|
816
|
+
desc: `Pokémon have access to almost any ability.`,
|
|
817
|
+
threads: [
|
|
818
|
+
`• <a href="https://www.smogon.com/forums/threads/3656414/">Almost Any Ability</a>`,
|
|
819
|
+
`• <a href="https://www.smogon.com/forums/threads/3682690/">AAA Resources</a>`,
|
|
820
|
+
],
|
|
821
|
+
|
|
822
|
+
mod: 'gen8',
|
|
823
|
+
ruleset: ['Obtainable', '!Obtainable Abilities', 'Species Clause', 'Nickname Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Sleep Moves Clause', 'Endless Battle Clause'],
|
|
824
|
+
banlist: [
|
|
825
|
+
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Gengar', 'Giratina',
|
|
826
|
+
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow',
|
|
827
|
+
'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja',
|
|
828
|
+
'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom',
|
|
829
|
+
'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter',
|
|
830
|
+
'Innards Out', 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag',
|
|
831
|
+
'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
|
|
832
|
+
],
|
|
833
|
+
onValidateSet(set) {
|
|
834
|
+
// Temporary fix until battle-only is implemented properly
|
|
835
|
+
if (this.toID(set.species) === 'zamazentacrowned' && this.toID(set.ability) !== 'dauntlessshield') {
|
|
836
|
+
return [`Zamazenta-Crowned can only use Dauntless Shield because it is a battle-only forme.`];
|
|
837
|
+
}
|
|
838
|
+
if (this.toID(set.species) === 'zaciancrowned' && this.toID(set.ability) !== 'intrepidsword') {
|
|
839
|
+
return [`Zacian-Crowned can only use Intrepid Sword because it is a battle-only forme.`];
|
|
840
|
+
}
|
|
841
|
+
},
|
|
842
|
+
},
|
|
767
843
|
{
|
|
768
844
|
name: "[Gen 8] Mix and Mega",
|
|
769
845
|
desc: `Mega evolve any Pokémon with any mega stone and no limit. Boosts based on mega evolution from gen 7.`,
|
|
@@ -782,7 +858,8 @@ export const Formats: FormatList = [
|
|
|
782
858
|
restricted: [
|
|
783
859
|
'Calyrex-Ice', 'Dialga', 'Eternatus', 'Gengar', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyurem-Black', 'Kyurem-White',
|
|
784
860
|
'Lugia', 'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
|
|
785
|
-
'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu
|
|
861
|
+
'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu', 'Urshifu-Rapid-Strike', 'Xerneas',
|
|
862
|
+
'Yveltal', 'Zekrom', 'Zygarde-Complete',
|
|
786
863
|
],
|
|
787
864
|
onValidateTeam(team) {
|
|
788
865
|
const itemTable = new Set<ID>();
|
|
@@ -825,51 +902,24 @@ export const Formats: FormatList = [
|
|
|
825
902
|
}
|
|
826
903
|
},
|
|
827
904
|
},
|
|
828
|
-
{
|
|
829
|
-
name: "[Gen 8] Almost Any Ability",
|
|
830
|
-
desc: `Pokémon have access to almost any ability.`,
|
|
831
|
-
threads: [
|
|
832
|
-
`• <a href="https://www.smogon.com/forums/threads/3656414/">Almost Any Ability</a>`,
|
|
833
|
-
`• <a href="https://www.smogon.com/forums/threads/3682690/">AAA Resources</a>`,
|
|
834
|
-
],
|
|
835
|
-
|
|
836
|
-
mod: 'gen8',
|
|
837
|
-
ruleset: ['Obtainable', '!Obtainable Abilities', 'Species Clause', 'Nickname Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Sleep Moves Clause', 'Endless Battle Clause'],
|
|
838
|
-
banlist: [
|
|
839
|
-
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Gengar', 'Giratina',
|
|
840
|
-
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow',
|
|
841
|
-
'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja',
|
|
842
|
-
'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom',
|
|
843
|
-
'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter',
|
|
844
|
-
'Innards Out', 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Power Construct', 'Protean', 'Pure Power',
|
|
845
|
-
'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
|
|
846
|
-
],
|
|
847
|
-
onValidateSet(set) {
|
|
848
|
-
// Temporary fix until battle-only is implemented properly
|
|
849
|
-
if (this.toID(set.species) === 'zamazentacrowned' && this.toID(set.ability) !== 'dauntlessshield') {
|
|
850
|
-
return [`Zamazenta-Crowned can only use Dauntless Shield because it is a battle-only forme.`];
|
|
851
|
-
}
|
|
852
|
-
if (this.toID(set.species) === 'zaciancrowned' && this.toID(set.ability) !== 'intrepidsword') {
|
|
853
|
-
return [`Zacian-Crowned can only use Intrepid Sword because it is a battle-only forme.`];
|
|
854
|
-
}
|
|
855
|
-
},
|
|
856
|
-
},
|
|
857
905
|
{
|
|
858
906
|
name: "[Gen 8] STABmons",
|
|
859
907
|
desc: `Pokémon can use any move of their typing, in addition to the moves they can normally learn.`,
|
|
860
908
|
threads: [
|
|
861
909
|
`• <a href="https://www.smogon.com/forums/threads/3656429/">STABmons</a>`,
|
|
910
|
+
`• <a href="https://www.smogon.com/forums/threads/3695169/">STABmons Resources</a>`,
|
|
862
911
|
],
|
|
863
912
|
|
|
864
913
|
mod: 'gen8',
|
|
865
|
-
ruleset: ['Standard', 'STABmons Move Legality', 'Dynamax Clause', 'Sleep Moves Clause'],
|
|
914
|
+
ruleset: ['Standard', 'STABmons Move Legality', 'Dynamax Clause', 'Sleep Moves Clause', '!Sleep Clause Mod'],
|
|
866
915
|
banlist: [
|
|
867
|
-
'Aegislash', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite',
|
|
868
|
-
'Garchomp', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black',
|
|
869
|
-
'
|
|
870
|
-
'
|
|
871
|
-
'
|
|
872
|
-
'Power Construct', 'Shadow Tag', 'King\'s Rock',
|
|
916
|
+
'Aegislash', 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite',
|
|
917
|
+
'Eternatus', 'Genesect', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black',
|
|
918
|
+
'Kyurem-White', 'Landorus', 'Landorus-Therian', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings',
|
|
919
|
+
'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Silvally', 'Solgaleo', 'Spectrier', 'Tapu Bulu',
|
|
920
|
+
'Tapu Koko', 'Thundurus-Base', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
|
|
921
|
+
'Zapdos-Galar', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock',
|
|
922
|
+
'Baton Pass',
|
|
873
923
|
],
|
|
874
924
|
restricted: [
|
|
875
925
|
'Acupressure', 'Astral Barrage', 'Belly Drum', 'Bolt Beak', 'Clangorous Soul', 'Double Iron Bash', 'Electrify', 'Extreme Speed', 'Fishious Rend',
|
|
@@ -903,7 +953,7 @@ export const Formats: FormatList = [
|
|
|
903
953
|
banlist: [
|
|
904
954
|
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Dragapult', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Pikachu', 'Toxapex',
|
|
905
955
|
'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power', 'Moody', 'Pure Power',
|
|
906
|
-
'Shadow Tag', 'Baton Pass',
|
|
956
|
+
'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Baton Pass',
|
|
907
957
|
],
|
|
908
958
|
onValidateTeam(team) {
|
|
909
959
|
const gods = new Set<string>();
|
|
@@ -984,7 +1034,8 @@ export const Formats: FormatList = [
|
|
|
984
1034
|
name: "[Gen 8 BDSP] OU",
|
|
985
1035
|
threads: [
|
|
986
1036
|
`• <a href="https://www.smogon.com/forums/threads/3693629/">BDSP OU Metagame Discussion</a>`,
|
|
987
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
1037
|
+
`• <a href="https://www.smogon.com/forums/threads/3693721/">BDSP OU Sample Teams</a>`,
|
|
1038
|
+
`• <a href="https://www.smogon.com/forums/threads/3696088/">BDSP OU Viability Rankings</a>`,
|
|
988
1039
|
],
|
|
989
1040
|
|
|
990
1041
|
mod: 'gen8bdsp',
|
|
@@ -1016,10 +1067,34 @@ export const Formats: FormatList = [
|
|
|
1016
1067
|
},
|
|
1017
1068
|
{
|
|
1018
1069
|
name: "[Gen 8 BDSP] RU",
|
|
1070
|
+
threads: [
|
|
1071
|
+
`• <a href="https://www.smogon.com/forums/threads/3695563/">BDSP RU</a>`,
|
|
1072
|
+
],
|
|
1019
1073
|
|
|
1020
1074
|
mod: 'gen8bdsp',
|
|
1021
1075
|
ruleset: ['[Gen 8 BDSP] UU'],
|
|
1022
|
-
banlist: ['UU', 'RUBL'],
|
|
1076
|
+
banlist: ['UU', 'RUBL', 'Drought'],
|
|
1077
|
+
},
|
|
1078
|
+
{
|
|
1079
|
+
name: "[Gen 8 BDSP] NU",
|
|
1080
|
+
threads: [
|
|
1081
|
+
`• <a href="https://www.smogon.com/forums/threads/3697080/">BDSP NU</a>`,
|
|
1082
|
+
],
|
|
1083
|
+
|
|
1084
|
+
mod: 'gen8bdsp',
|
|
1085
|
+
searchShow: false,
|
|
1086
|
+
ruleset: ['[Gen 8 BDSP] RU'],
|
|
1087
|
+
banlist: ['RU', 'NUBL'],
|
|
1088
|
+
},
|
|
1089
|
+
{
|
|
1090
|
+
name: "[Gen 8 BDSP] LC",
|
|
1091
|
+
threads: [
|
|
1092
|
+
`• <a href="https://www.smogon.com/forums/threads/3696004/">BDSP LC</a>`,
|
|
1093
|
+
],
|
|
1094
|
+
|
|
1095
|
+
mod: 'gen8bdsp',
|
|
1096
|
+
ruleset: ['Little Cup', 'Standard'],
|
|
1097
|
+
banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Moody', 'Baton Pass'],
|
|
1023
1098
|
},
|
|
1024
1099
|
{
|
|
1025
1100
|
name: "[Gen 8 BDSP] Monotype",
|
|
@@ -1089,6 +1164,37 @@ export const Formats: FormatList = [
|
|
|
1089
1164
|
section: "Challengeable OMs",
|
|
1090
1165
|
column: 2,
|
|
1091
1166
|
},
|
|
1167
|
+
{
|
|
1168
|
+
name: "[Gen 8] Camomons",
|
|
1169
|
+
desc: `Pokémon change type to match their first two moves.`,
|
|
1170
|
+
threads: [
|
|
1171
|
+
`• <a href="https://www.smogon.com/forums/threads/3656413/">Camomons</a>`,
|
|
1172
|
+
],
|
|
1173
|
+
|
|
1174
|
+
mod: 'gen8',
|
|
1175
|
+
searchShow: false,
|
|
1176
|
+
ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Sleep Clause Mod', 'Endless Battle Clause'],
|
|
1177
|
+
banlist: [
|
|
1178
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin',
|
|
1179
|
+
'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Latias', 'Latios', 'Lugia',
|
|
1180
|
+
'Lunala', 'Marshadow', 'Mew', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
|
|
1181
|
+
'Reuniclus', 'Shedinja', 'Slowking-Galar', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Volcarona', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
1182
|
+
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
|
|
1183
|
+
],
|
|
1184
|
+
onModifySpeciesPriority: 2,
|
|
1185
|
+
onModifySpecies(species, target, source, effect) {
|
|
1186
|
+
if (!target) return; // Chat command
|
|
1187
|
+
if (effect && ['imposter', 'transform'].includes(effect.id)) return;
|
|
1188
|
+
const types = [...new Set(target.baseMoveSlots.slice(0, 2).map(move => this.dex.moves.get(move.id).type))];
|
|
1189
|
+
return {...species, types: types};
|
|
1190
|
+
},
|
|
1191
|
+
onSwitchIn(pokemon) {
|
|
1192
|
+
this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
|
|
1193
|
+
},
|
|
1194
|
+
onAfterMega(pokemon) {
|
|
1195
|
+
this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
|
|
1196
|
+
},
|
|
1197
|
+
},
|
|
1092
1198
|
{
|
|
1093
1199
|
name: "[Gen 8] Inheritance",
|
|
1094
1200
|
desc: `Pokémon may use the ability and moves of another, as long as they forfeit their own learnset.`,
|
|
@@ -1500,20 +1606,67 @@ export const Formats: FormatList = [
|
|
|
1500
1606
|
const stat = baseStats['hp'];
|
|
1501
1607
|
modStats['hp'] = tr(tr(2 * stat + set.ivs['hp'] + tr(set.evs['hp'] / 4) + 100) * set.level / 100 + 10);
|
|
1502
1608
|
}
|
|
1503
|
-
return this.natureModify(modStats as StatsTable, set);
|
|
1504
|
-
},
|
|
1505
|
-
natureModify(stats, set) {
|
|
1506
|
-
const tr = this.trunc;
|
|
1507
|
-
const nature = this.dex.natures.get(set.nature);
|
|
1508
|
-
let s: StatIDExceptHP;
|
|
1509
|
-
if (nature.plus) {
|
|
1510
|
-
s = nature.minus!;
|
|
1511
|
-
const stat = this.ruleTable.has('overflowstatmod') ? Math.min(stats[s], 595) : stats[s];
|
|
1512
|
-
stats[s] = this.ruleTable.has('overflowstatmod') ? Math.min(stats[nature.plus], 728) : stats[nature.plus];
|
|
1513
|
-
stats[nature.plus] = tr(tr(stat * 110, 16) / 100);
|
|
1609
|
+
return this.natureModify(modStats as StatsTable, set);
|
|
1610
|
+
},
|
|
1611
|
+
natureModify(stats, set) {
|
|
1612
|
+
const tr = this.trunc;
|
|
1613
|
+
const nature = this.dex.natures.get(set.nature);
|
|
1614
|
+
let s: StatIDExceptHP;
|
|
1615
|
+
if (nature.plus) {
|
|
1616
|
+
s = nature.minus!;
|
|
1617
|
+
const stat = this.ruleTable.has('overflowstatmod') ? Math.min(stats[s], 595) : stats[s];
|
|
1618
|
+
stats[s] = this.ruleTable.has('overflowstatmod') ? Math.min(stats[nature.plus], 728) : stats[nature.plus];
|
|
1619
|
+
stats[nature.plus] = tr(tr(stat * 110, 16) / 100);
|
|
1620
|
+
}
|
|
1621
|
+
return stats;
|
|
1622
|
+
},
|
|
1623
|
+
},
|
|
1624
|
+
},
|
|
1625
|
+
{
|
|
1626
|
+
name: "[Gen 8] Pokebilities",
|
|
1627
|
+
desc: `Pokémon have all of their released abilities simultaneously.`,
|
|
1628
|
+
threads: [
|
|
1629
|
+
`• <a href="https://www.smogon.com/forums/threads/3679692/">Pokébilities</a>`,
|
|
1630
|
+
],
|
|
1631
|
+
mod: 'pokebilities',
|
|
1632
|
+
searchShow: false,
|
|
1633
|
+
ruleset: ['Standard', 'Dynamax Clause'],
|
|
1634
|
+
banlist: [
|
|
1635
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Conkeldurr', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dracozolt',
|
|
1636
|
+
'Eternatus', 'Excadrill', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
|
|
1637
|
+
'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings',
|
|
1638
|
+
'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base',
|
|
1639
|
+
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zygarde-Base', 'Power Construct',
|
|
1640
|
+
'Baton Pass', 'King\'s Rock',
|
|
1641
|
+
// Moody users
|
|
1642
|
+
'Glalie', 'Octillery', 'Remoraid', 'Snorunt',
|
|
1643
|
+
// Shadow Tag/Arena Trap
|
|
1644
|
+
'Diglett-Base', 'Dugtrio-Base', 'Gothita', 'Gothitelle', 'Gothorita', 'Trapinch', 'Wobbuffet', 'Wynaut',
|
|
1645
|
+
],
|
|
1646
|
+
onBegin() {
|
|
1647
|
+
for (const pokemon of this.getAllPokemon()) {
|
|
1648
|
+
if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
|
|
1649
|
+
continue;
|
|
1650
|
+
}
|
|
1651
|
+
pokemon.m.innates = Object.keys(pokemon.species.abilities)
|
|
1652
|
+
.filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
|
|
1653
|
+
.map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
|
|
1654
|
+
.filter(ability => ability !== pokemon.ability);
|
|
1655
|
+
}
|
|
1656
|
+
},
|
|
1657
|
+
onSwitchInPriority: 2,
|
|
1658
|
+
onSwitchIn(pokemon) {
|
|
1659
|
+
if (pokemon.m.innates) {
|
|
1660
|
+
for (const innate of pokemon.m.innates) {
|
|
1661
|
+
pokemon.addVolatile("ability:" + innate, pokemon);
|
|
1514
1662
|
}
|
|
1515
|
-
|
|
1516
|
-
|
|
1663
|
+
}
|
|
1664
|
+
},
|
|
1665
|
+
onAfterMega(pokemon) {
|
|
1666
|
+
for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
|
|
1667
|
+
pokemon.removeVolatile(innate);
|
|
1668
|
+
}
|
|
1669
|
+
pokemon.m.innates = undefined;
|
|
1517
1670
|
},
|
|
1518
1671
|
},
|
|
1519
1672
|
{
|
|
@@ -1712,106 +1865,6 @@ export const Formats: FormatList = [
|
|
|
1712
1865
|
},
|
|
1713
1866
|
},
|
|
1714
1867
|
},
|
|
1715
|
-
{
|
|
1716
|
-
name: "[Gen 8] Trademarked",
|
|
1717
|
-
desc: `Sacrifice your Pokémon's ability for a status move that activates on switch-in.`,
|
|
1718
|
-
threads: [
|
|
1719
|
-
`• <a href="https://www.smogon.com/forums/threads/3656980/">Trademarked</a>`,
|
|
1720
|
-
],
|
|
1721
|
-
|
|
1722
|
-
mod: 'gen8',
|
|
1723
|
-
searchShow: false,
|
|
1724
|
-
ruleset: ['Standard', 'Dynamax Clause'],
|
|
1725
|
-
banlist: [
|
|
1726
|
-
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Kyurem-Black', 'Kyurem-White',
|
|
1727
|
-
'Giratina', 'Giratina-Origin', 'Genesect', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Lugia', 'Lunala', 'Magearna', 'Marshadow',
|
|
1728
|
-
'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
|
|
1729
|
-
'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base',
|
|
1730
|
-
'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
|
|
1731
|
-
],
|
|
1732
|
-
restricted: [
|
|
1733
|
-
'Baneful Bunker', 'Block', 'Copycat', 'Corrosive Gas', 'Detect', 'Destiny Bond', 'Disable', 'Encore', 'Fairy Lock', 'Hypnosis', 'Ingrain',
|
|
1734
|
-
'Instruct', 'Lovely Kiss', 'King\'s Shield', 'Mat Block', 'Mean Look', 'move:Metronome', 'Obstruct', 'Octolock', 'Nature Power', 'Parting Shot',
|
|
1735
|
-
'Psycho Shift', 'Protect', 'Roar', 'Sing', 'Skill Swap', 'Sleep Powder', 'Sleep Talk', 'Spiky Shield', 'Spore', 'Substitute', 'Teleport',
|
|
1736
|
-
'Whirlwind', 'Wish', 'Yawn',
|
|
1737
|
-
],
|
|
1738
|
-
onValidateTeam(team, format, teamHas) {
|
|
1739
|
-
const problems = [];
|
|
1740
|
-
for (const trademark in teamHas.trademarks) {
|
|
1741
|
-
if (teamHas.trademarks[trademark] > 1) {
|
|
1742
|
-
problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks[trademark]} Pok\u00e9mon with ${trademark} as a Trademark.)`);
|
|
1743
|
-
}
|
|
1744
|
-
}
|
|
1745
|
-
return problems;
|
|
1746
|
-
},
|
|
1747
|
-
validateSet(set, teamHas) {
|
|
1748
|
-
const dex = this.dex;
|
|
1749
|
-
const ability = dex.moves.get(set.ability);
|
|
1750
|
-
if (!ability.exists) { // Not even a real move
|
|
1751
|
-
return this.validateSet(set, teamHas);
|
|
1752
|
-
}
|
|
1753
|
-
// Absolute trademark bans
|
|
1754
|
-
if (ability.category !== 'Status') {
|
|
1755
|
-
return [`${ability.name} is not a status move, and cannot be used as a trademark.`];
|
|
1756
|
-
}
|
|
1757
|
-
if (ability.forceSwitch || ability.selfSwitch) {
|
|
1758
|
-
return [
|
|
1759
|
-
`Force-switching and self-switching moves are banned from being used as trademarks.`,
|
|
1760
|
-
`(${ability.name} is a ${ability.forceSwitch ? 'force' : 'self'}-switching move.)`,
|
|
1761
|
-
];
|
|
1762
|
-
}
|
|
1763
|
-
const irrevokablyRestricted = [
|
|
1764
|
-
'Assist', 'Copycat', 'Metronome', 'Mirror Move', 'Sleep Talk', // Could call another unsafe trademark
|
|
1765
|
-
'Skill Swap', // Self-propagates indefinitely
|
|
1766
|
-
];
|
|
1767
|
-
if (irrevokablyRestricted.includes(ability.name)) {
|
|
1768
|
-
return [`${ability.name} cannot safely function as a trademark.`];
|
|
1769
|
-
}
|
|
1770
|
-
// Contingent trademark bans
|
|
1771
|
-
if (this.ruleTable.isRestricted(`move:${ability.id}`)) {
|
|
1772
|
-
return [`${ability.name} is restricted from being used as a trademark.`];
|
|
1773
|
-
}
|
|
1774
|
-
if (set.moves.map(this.toID).includes(ability.id)) {
|
|
1775
|
-
return [`${set.name} may not use ${ability.name} as both a trademark and one of its moves simultaneously.`];
|
|
1776
|
-
}
|
|
1777
|
-
const customRules = this.format.customRules || [];
|
|
1778
|
-
if (!customRules.includes('!obtainableabilities')) customRules.push('!obtainableabilities');
|
|
1779
|
-
|
|
1780
|
-
const TeamValidator: typeof import('../sim/team-validator').TeamValidator =
|
|
1781
|
-
require('../sim/team-validator').TeamValidator;
|
|
1782
|
-
|
|
1783
|
-
const validator = new TeamValidator(dex.formats.get(`${this.format.id}@@@${customRules.join(',')}`));
|
|
1784
|
-
const moves = set.moves;
|
|
1785
|
-
set.moves = [ability.id];
|
|
1786
|
-
set.ability = dex.species.get(set.species).abilities['0'];
|
|
1787
|
-
let problems = validator.validateSet(set, {}) || [];
|
|
1788
|
-
if (problems.length) return problems;
|
|
1789
|
-
set.moves = moves;
|
|
1790
|
-
set.ability = dex.species.get(set.species).abilities['0'];
|
|
1791
|
-
problems = problems.concat(validator.validateSet(set, teamHas) || []);
|
|
1792
|
-
set.ability = ability.id;
|
|
1793
|
-
if (!teamHas.trademarks) teamHas.trademarks = {};
|
|
1794
|
-
teamHas.trademarks[ability.name] = (teamHas.trademarks[ability.name] || 0) + 1;
|
|
1795
|
-
return problems.length ? problems : null;
|
|
1796
|
-
},
|
|
1797
|
-
pokemon: {
|
|
1798
|
-
getAbility() {
|
|
1799
|
-
const move = this.battle.dex.moves.get(this.battle.toID(this.ability));
|
|
1800
|
-
if (!move.exists) return Object.getPrototypeOf(this).getAbility.call(this);
|
|
1801
|
-
return {
|
|
1802
|
-
id: move.id,
|
|
1803
|
-
name: move.name,
|
|
1804
|
-
onStart(this: Battle, pokemon: Pokemon) {
|
|
1805
|
-
this.add('-activate', pokemon, 'ability: ' + move.name);
|
|
1806
|
-
this.actions.useMove(move, pokemon);
|
|
1807
|
-
},
|
|
1808
|
-
toString() {
|
|
1809
|
-
return "";
|
|
1810
|
-
},
|
|
1811
|
-
};
|
|
1812
|
-
},
|
|
1813
|
-
},
|
|
1814
|
-
},
|
|
1815
1868
|
|
|
1816
1869
|
// Randomized Metas
|
|
1817
1870
|
///////////////////////////////////////////////////////////////////
|
|
@@ -1926,7 +1979,8 @@ export const Formats: FormatList = [
|
|
|
1926
1979
|
|
|
1927
1980
|
mod: 'gen8',
|
|
1928
1981
|
team: 'randomHC',
|
|
1929
|
-
ruleset: ['
|
|
1982
|
+
ruleset: ['HP Percentage Mod', 'Cancel Mod'],
|
|
1983
|
+
banlist: ['Nonexistent'],
|
|
1930
1984
|
},
|
|
1931
1985
|
{
|
|
1932
1986
|
name: "[Gen 8] Doubles Hackmons Cup",
|
|
@@ -1935,7 +1989,8 @@ export const Formats: FormatList = [
|
|
|
1935
1989
|
gameType: 'doubles',
|
|
1936
1990
|
team: 'randomHC',
|
|
1937
1991
|
searchShow: false,
|
|
1938
|
-
ruleset: ['
|
|
1992
|
+
ruleset: ['HP Percentage Mod', 'Cancel Mod'],
|
|
1993
|
+
banlist: ['Nonexistent'],
|
|
1939
1994
|
},
|
|
1940
1995
|
{
|
|
1941
1996
|
name: "[Gen 8] CAP 1v1",
|
|
@@ -2011,6 +2066,7 @@ export const Formats: FormatList = [
|
|
|
2011
2066
|
team: 'randomHC',
|
|
2012
2067
|
searchShow: false,
|
|
2013
2068
|
ruleset: ['HP Percentage Mod', 'Cancel Mod'],
|
|
2069
|
+
banlist: ['Nonexistent'],
|
|
2014
2070
|
},
|
|
2015
2071
|
{
|
|
2016
2072
|
name: "[Gen 7 Let's Go] Random Battle",
|
|
@@ -2087,6 +2143,7 @@ export const Formats: FormatList = [
|
|
|
2087
2143
|
team: 'randomHC',
|
|
2088
2144
|
searchShow: false,
|
|
2089
2145
|
ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Desync Clause Mod', 'Sleep Clause Mod', 'Freeze Clause Mod', 'Team Type Preview'],
|
|
2146
|
+
banlist: ['Nonexistent'],
|
|
2090
2147
|
onModifySpecies(species, target, source, effect) {
|
|
2091
2148
|
if (!target) return;
|
|
2092
2149
|
return {...species, ...(target.set as any).hc};
|
|
@@ -2108,40 +2165,39 @@ export const Formats: FormatList = [
|
|
|
2108
2165
|
column: 3,
|
|
2109
2166
|
},
|
|
2110
2167
|
{
|
|
2111
|
-
name: "[Gen
|
|
2112
|
-
threads: [
|
|
2168
|
+
name: "[Gen 3] UU",
|
|
2169
|
+
threads: [
|
|
2170
|
+
`• <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
|
|
2171
|
+
`• <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
|
|
2172
|
+
],
|
|
2113
2173
|
|
|
2114
|
-
mod: '
|
|
2174
|
+
mod: 'gen3',
|
|
2115
2175
|
// searchShow: false,
|
|
2116
|
-
ruleset: ['
|
|
2117
|
-
banlist: ['OU', 'UUBL'],
|
|
2176
|
+
ruleset: ['Standard', 'NFE Clause'],
|
|
2177
|
+
banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Baton Pass'],
|
|
2178
|
+
unbanlist: ['Scyther', 'Sand Veil'],
|
|
2118
2179
|
},
|
|
2119
2180
|
{
|
|
2120
|
-
name: "[Gen
|
|
2181
|
+
name: "[Gen 1] NU",
|
|
2121
2182
|
threads: [
|
|
2122
|
-
`• <a href="https://www.smogon.com/forums/
|
|
2123
|
-
`• <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
|
|
2183
|
+
`• <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
|
|
2124
2184
|
],
|
|
2125
2185
|
|
|
2126
|
-
mod: '
|
|
2186
|
+
mod: 'gen1',
|
|
2127
2187
|
// searchShow: false,
|
|
2128
|
-
ruleset: ['[Gen
|
|
2129
|
-
banlist: ['
|
|
2188
|
+
ruleset: ['[Gen 1] UU'],
|
|
2189
|
+
banlist: ['UU', 'NUBL'],
|
|
2130
2190
|
},
|
|
2131
2191
|
{
|
|
2132
|
-
name: "[Gen
|
|
2192
|
+
name: "[Gen 4] Ubers",
|
|
2133
2193
|
threads: [
|
|
2134
|
-
`• <a href="https://www.smogon.com/forums/posts/
|
|
2135
|
-
`• <a href="https://www.smogon.com/forums/threads/3485860/">BW2 LC Viability Rankings</a>`,
|
|
2194
|
+
`• <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
|
|
2136
2195
|
],
|
|
2137
2196
|
|
|
2138
|
-
mod: '
|
|
2197
|
+
mod: 'gen4',
|
|
2139
2198
|
// searchShow: false,
|
|
2140
|
-
ruleset: ['Standard'
|
|
2141
|
-
banlist: [
|
|
2142
|
-
'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma',
|
|
2143
|
-
'Sand Rush', 'Sand Veil', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
|
|
2144
|
-
],
|
|
2199
|
+
ruleset: ['Standard'],
|
|
2200
|
+
banlist: ['AG'],
|
|
2145
2201
|
},
|
|
2146
2202
|
|
|
2147
2203
|
// Past Gens OU
|
|
@@ -2183,8 +2239,8 @@ export const Formats: FormatList = [
|
|
|
2183
2239
|
],
|
|
2184
2240
|
|
|
2185
2241
|
mod: 'gen5',
|
|
2186
|
-
ruleset: ['Standard', 'Evasion Abilities Clause', '
|
|
2187
|
-
banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist'],
|
|
2242
|
+
ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Swagger Clause'],
|
|
2243
|
+
banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist', 'Baton Pass'],
|
|
2188
2244
|
},
|
|
2189
2245
|
{
|
|
2190
2246
|
name: "[Gen 4] OU",
|
|
@@ -2196,7 +2252,7 @@ export const Formats: FormatList = [
|
|
|
2196
2252
|
|
|
2197
2253
|
mod: 'gen4',
|
|
2198
2254
|
ruleset: ['Standard'],
|
|
2199
|
-
banlist: ['AG', 'Uber', 'Arena Trap', 'Sand Veil', 'Swinub + Snow Cloak', 'Piloswine + Snow Cloak', 'Mamoswine + Snow Cloak', 'Soul Dew', 'Baton Pass'],
|
|
2255
|
+
banlist: ['AG', 'Uber', 'Arena Trap', 'Sand Veil', 'Swinub + Snow Cloak', 'Piloswine + Snow Cloak', 'Mamoswine + Snow Cloak', 'Soul Dew', 'Baton Pass', 'Swagger'],
|
|
2200
2256
|
},
|
|
2201
2257
|
{
|
|
2202
2258
|
name: "[Gen 3] OU",
|
|
@@ -2207,7 +2263,7 @@ export const Formats: FormatList = [
|
|
|
2207
2263
|
|
|
2208
2264
|
mod: 'gen3',
|
|
2209
2265
|
ruleset: ['Standard', 'One Boost Passer Clause'],
|
|
2210
|
-
banlist: ['Uber', 'Sand Veil', 'Assist', 'Smeargle + Ingrain'],
|
|
2266
|
+
banlist: ['Uber', 'Sand Veil', 'Assist', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'],
|
|
2211
2267
|
},
|
|
2212
2268
|
{
|
|
2213
2269
|
name: "[Gen 2] OU",
|
|
@@ -2357,6 +2413,16 @@ export const Formats: FormatList = [
|
|
|
2357
2413
|
mod: 'gen6',
|
|
2358
2414
|
ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause', 'EV limit = 510'],
|
|
2359
2415
|
},
|
|
2416
|
+
{
|
|
2417
|
+
name: "[Gen 5] ZU",
|
|
2418
|
+
threads: [
|
|
2419
|
+
`• <a href="https://www.smogon.com/forums/posts/8034680/">BW2 ZU</a>`,
|
|
2420
|
+
],
|
|
2421
|
+
|
|
2422
|
+
mod: 'gen5',
|
|
2423
|
+
ruleset: ['[Gen 5] PU'],
|
|
2424
|
+
banlist: ['PU', 'Dragonair', 'Glalie', 'Machoke', 'Marowak', 'Omanyte', 'Regigigas', 'Trubbish', 'Whirlipede', 'Baton Pass'],
|
|
2425
|
+
},
|
|
2360
2426
|
|
|
2361
2427
|
// US/UM Singles
|
|
2362
2428
|
///////////////////////////////////////////////////////////////////
|
|
@@ -2992,6 +3058,18 @@ export const Formats: FormatList = [
|
|
|
2992
3058
|
banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
|
|
2993
3059
|
unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
2994
3060
|
},
|
|
3061
|
+
{
|
|
3062
|
+
name: "[Gen 5] NU",
|
|
3063
|
+
threads: [
|
|
3064
|
+
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
3065
|
+
`• <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
|
|
3066
|
+
],
|
|
3067
|
+
|
|
3068
|
+
mod: 'gen5',
|
|
3069
|
+
searchShow: false,
|
|
3070
|
+
ruleset: ['[Gen 5] RU', '!Sleep Moves Clause', 'Sleep Clause Mod'],
|
|
3071
|
+
banlist: ['RU', 'NUBL', 'Assist', 'Copycat'],
|
|
3072
|
+
},
|
|
2995
3073
|
{
|
|
2996
3074
|
name: "[Gen 5] PU",
|
|
2997
3075
|
threads: [
|
|
@@ -3001,7 +3079,22 @@ export const Formats: FormatList = [
|
|
|
3001
3079
|
mod: 'gen5',
|
|
3002
3080
|
searchShow: false,
|
|
3003
3081
|
ruleset: ['[Gen 5] NU', 'Sleep Moves Clause'],
|
|
3004
|
-
banlist: ['NU', '
|
|
3082
|
+
banlist: ['NU', 'PUBL'],
|
|
3083
|
+
},
|
|
3084
|
+
{
|
|
3085
|
+
name: "[Gen 5] LC",
|
|
3086
|
+
threads: [
|
|
3087
|
+
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
3088
|
+
`• <a href="https://www.smogon.com/forums/threads/3485860/">BW2 LC Viability Rankings</a>`,
|
|
3089
|
+
],
|
|
3090
|
+
|
|
3091
|
+
mod: 'gen5',
|
|
3092
|
+
searchShow: false,
|
|
3093
|
+
ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
|
|
3094
|
+
banlist: [
|
|
3095
|
+
'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma',
|
|
3096
|
+
'Sand Rush', 'Sand Veil', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
|
|
3097
|
+
],
|
|
3005
3098
|
},
|
|
3006
3099
|
{
|
|
3007
3100
|
name: "[Gen 5] Monotype",
|
|
@@ -3127,17 +3220,6 @@ export const Formats: FormatList = [
|
|
|
3127
3220
|
section: "DPP Singles",
|
|
3128
3221
|
column: 5,
|
|
3129
3222
|
},
|
|
3130
|
-
{
|
|
3131
|
-
name: "[Gen 4] Ubers",
|
|
3132
|
-
threads: [
|
|
3133
|
-
`• <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
|
|
3134
|
-
],
|
|
3135
|
-
|
|
3136
|
-
mod: 'gen4',
|
|
3137
|
-
searchShow: false,
|
|
3138
|
-
ruleset: ['Standard'],
|
|
3139
|
-
banlist: ['AG'],
|
|
3140
|
-
},
|
|
3141
3223
|
{
|
|
3142
3224
|
name: "[Gen 4] UU",
|
|
3143
3225
|
threads: [
|
|
@@ -3149,7 +3231,7 @@ export const Formats: FormatList = [
|
|
|
3149
3231
|
searchShow: false,
|
|
3150
3232
|
ruleset: ['[Gen 4] OU'],
|
|
3151
3233
|
banlist: ['OU', 'UUBL'],
|
|
3152
|
-
unbanlist: ['Arena Trap'],
|
|
3234
|
+
unbanlist: ['Arena Trap', 'Swagger'],
|
|
3153
3235
|
},
|
|
3154
3236
|
{
|
|
3155
3237
|
name: "[Gen 4] NU",
|
|
@@ -3210,7 +3292,7 @@ export const Formats: FormatList = [
|
|
|
3210
3292
|
'[Gen 4] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
|
|
3211
3293
|
],
|
|
3212
3294
|
banlist: ['Latias', 'Machamp', 'Porygon-Z', 'Shaymin', 'Snorlax', 'Togekiss', 'Focus Sash', 'Destiny Bond', 'Explosion', 'Perish Song', 'Self-Destruct'],
|
|
3213
|
-
unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil'],
|
|
3295
|
+
unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil', 'Swagger'],
|
|
3214
3296
|
},
|
|
3215
3297
|
{
|
|
3216
3298
|
name: "[Gen 4] Anything Goes",
|
|
@@ -3246,7 +3328,7 @@ export const Formats: FormatList = [
|
|
|
3246
3328
|
searchShow: false,
|
|
3247
3329
|
ruleset: ['[Gen 4] OU'],
|
|
3248
3330
|
banlist: ['Explosion'],
|
|
3249
|
-
unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut'],
|
|
3331
|
+
unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut', 'Swagger'],
|
|
3250
3332
|
},
|
|
3251
3333
|
{
|
|
3252
3334
|
name: "[Gen 4] VGC 2010",
|
|
@@ -3294,22 +3376,9 @@ export const Formats: FormatList = [
|
|
|
3294
3376
|
|
|
3295
3377
|
mod: 'gen3',
|
|
3296
3378
|
searchShow: false,
|
|
3297
|
-
ruleset: ['Standard', 'Deoxys Camouflage Clause'],
|
|
3379
|
+
ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
|
|
3298
3380
|
banlist: ['Wobbuffet + Leftovers'],
|
|
3299
3381
|
},
|
|
3300
|
-
{
|
|
3301
|
-
name: "[Gen 3] UU",
|
|
3302
|
-
threads: [
|
|
3303
|
-
`• <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
|
|
3304
|
-
`• <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
|
|
3305
|
-
],
|
|
3306
|
-
|
|
3307
|
-
mod: 'gen3',
|
|
3308
|
-
searchShow: false,
|
|
3309
|
-
ruleset: ['Standard', 'NFE Clause'],
|
|
3310
|
-
banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Baton Pass'],
|
|
3311
|
-
unbanlist: ['Scyther', 'Sand Veil'],
|
|
3312
|
-
},
|
|
3313
3382
|
{
|
|
3314
3383
|
name: "[Gen 3] NU",
|
|
3315
3384
|
threads: [
|
|
@@ -3379,6 +3448,15 @@ export const Formats: FormatList = [
|
|
|
3379
3448
|
searchShow: false,
|
|
3380
3449
|
ruleset: ['Standard'],
|
|
3381
3450
|
},
|
|
3451
|
+
{
|
|
3452
|
+
name: "[Gen 2] UU",
|
|
3453
|
+
threads: [`• <a href="https://www.smogon.com/forums/threads/3576710/">GSC UU</a>`],
|
|
3454
|
+
|
|
3455
|
+
mod: 'gen2',
|
|
3456
|
+
searchShow: false,
|
|
3457
|
+
ruleset: ['[Gen 2] OU'],
|
|
3458
|
+
banlist: ['OU', 'UUBL'],
|
|
3459
|
+
},
|
|
3382
3460
|
{
|
|
3383
3461
|
name: "[Gen 2] NU",
|
|
3384
3462
|
threads: [`• <a href="https://www.smogon.com/forums/threads/3642565/">GSC NU</a>`],
|
|
@@ -3398,7 +3476,10 @@ export const Formats: FormatList = [
|
|
|
3398
3476
|
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
3399
3477
|
'[Gen 2] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
|
|
3400
3478
|
],
|
|
3401
|
-
banlist: [
|
|
3479
|
+
banlist: [
|
|
3480
|
+
'Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw',
|
|
3481
|
+
'Attract', 'Destiny Bond', 'Explosion', 'Perish Song', 'Present', 'Self-Destruct', 'Swagger',
|
|
3482
|
+
],
|
|
3402
3483
|
},
|
|
3403
3484
|
{
|
|
3404
3485
|
name: "[Gen 2] Nintendo Cup 2000",
|
|
@@ -3457,17 +3538,6 @@ export const Formats: FormatList = [
|
|
|
3457
3538
|
ruleset: ['[Gen 1] OU'],
|
|
3458
3539
|
banlist: ['OU', 'UUBL'],
|
|
3459
3540
|
},
|
|
3460
|
-
{
|
|
3461
|
-
name: "[Gen 1] NU",
|
|
3462
|
-
threads: [
|
|
3463
|
-
`• <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
|
|
3464
|
-
],
|
|
3465
|
-
|
|
3466
|
-
mod: 'gen1',
|
|
3467
|
-
searchShow: false,
|
|
3468
|
-
ruleset: ['[Gen 1] UU'],
|
|
3469
|
-
banlist: ['UU', 'NUBL'],
|
|
3470
|
-
},
|
|
3471
3541
|
{
|
|
3472
3542
|
name: "[Gen 1] Japanese OU",
|
|
3473
3543
|
desc: `Generation 1 with Japanese battle mechanics.`,
|