@pkmn/sim 0.5.2 → 0.5.6

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.
Files changed (86) hide show
  1. package/build/config/formats.js +410 -311
  2. package/build/config/formats.js.map +1 -1
  3. package/build/data/aliases.js +4 -4
  4. package/build/data/aliases.js.map +1 -1
  5. package/build/data/formats-data.js +205 -93
  6. package/build/data/formats-data.js.map +1 -1
  7. package/build/data/learnsets.js +1 -1
  8. package/build/data/learnsets.js.map +1 -1
  9. package/build/data/mods/gen1/formats-data.js +190 -190
  10. package/build/data/mods/gen1/formats-data.js.map +1 -1
  11. package/build/data/mods/gen1/moves.js +1 -2
  12. package/build/data/mods/gen1/moves.js.map +1 -1
  13. package/build/data/mods/gen1/scripts.js +12 -0
  14. package/build/data/mods/gen1/scripts.js.map +1 -1
  15. package/build/data/mods/gen2/formats-data.js +1 -1
  16. package/build/data/mods/gen2/formats-data.js.map +1 -1
  17. package/build/data/mods/gen3/formats-data.js +13 -13
  18. package/build/data/mods/gen3/formats-data.js.map +1 -1
  19. package/build/data/mods/gen4/moves.js +22 -0
  20. package/build/data/mods/gen4/moves.js.map +1 -1
  21. package/build/data/mods/gen5/formats-data.js +173 -156
  22. package/build/data/mods/gen5/formats-data.js.map +1 -1
  23. package/build/data/mods/gen6/formats-data.js +4 -3
  24. package/build/data/mods/gen6/formats-data.js.map +1 -1
  25. package/build/data/mods/gen7/formats-data.js +3 -2
  26. package/build/data/mods/gen7/formats-data.js.map +1 -1
  27. package/build/data/mods/gen7/moves.js +154 -0
  28. package/build/data/mods/gen7/moves.js.map +1 -1
  29. package/build/data/moves.js +44 -19
  30. package/build/data/moves.js.map +1 -1
  31. package/build/data/pokedex.js +480 -11
  32. package/build/data/pokedex.js.map +1 -1
  33. package/build/data/rulesets.js +12 -1
  34. package/build/data/rulesets.js.map +1 -1
  35. package/build/data/tags.d.ts +1 -0
  36. package/build/data/tags.js +4 -3
  37. package/build/data/tags.js.map +1 -1
  38. package/build/data/text/abilities.js +4 -4
  39. package/build/data/text/abilities.js.map +1 -1
  40. package/build/data/text/moves.js +18 -18
  41. package/build/data/text/moves.js.map +1 -1
  42. package/build/sim/battle-actions.js +12 -4
  43. package/build/sim/battle-actions.js.map +1 -1
  44. package/build/sim/battle.js +23 -22
  45. package/build/sim/battle.js.map +1 -1
  46. package/build/sim/dex-formats.d.ts +1 -0
  47. package/build/sim/dex-formats.js +3 -2
  48. package/build/sim/dex-formats.js.map +1 -1
  49. package/build/sim/dex-species.js +5 -2
  50. package/build/sim/dex-species.js.map +1 -1
  51. package/build/sim/exported-global-types.d.ts +2 -0
  52. package/build/sim/global-types.d.ts +2 -0
  53. package/build/sim/index.d.ts +1 -0
  54. package/build/sim/index.js +3 -1
  55. package/build/sim/index.js.map +1 -1
  56. package/build/sim/team-validator.js +13 -0
  57. package/build/sim/team-validator.js.map +1 -1
  58. package/config/formats.ts +418 -316
  59. package/data/aliases.ts +4 -4
  60. package/data/formats-data.ts +205 -93
  61. package/data/learnsets.ts +1 -1
  62. package/data/mods/gen1/formats-data.ts +190 -190
  63. package/data/mods/gen1/moves.ts +1 -2
  64. package/data/mods/gen1/scripts.ts +11 -0
  65. package/data/mods/gen2/formats-data.ts +1 -1
  66. package/data/mods/gen3/formats-data.ts +13 -13
  67. package/data/mods/gen4/moves.ts +21 -0
  68. package/data/mods/gen5/formats-data.ts +173 -156
  69. package/data/mods/gen6/formats-data.ts +4 -3
  70. package/data/mods/gen7/formats-data.ts +3 -2
  71. package/data/mods/gen7/moves.ts +150 -0
  72. package/data/moves.ts +43 -19
  73. package/data/pokedex.ts +480 -11
  74. package/data/rulesets.ts +11 -1
  75. package/data/tags.ts +6 -3
  76. package/data/text/abilities.ts +4 -4
  77. package/data/text/moves.ts +18 -18
  78. package/package.json +2 -2
  79. package/sim/battle-actions.ts +12 -4
  80. package/sim/battle.ts +24 -23
  81. package/sim/dex-formats.ts +4 -1
  82. package/sim/dex-species.ts +5 -2
  83. package/sim/exported-global-types.ts +2 -0
  84. package/sim/global-types.ts +2 -0
  85. package/sim/index.ts +1 -0
  86. 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
  },
@@ -249,9 +249,9 @@ export const Formats: FormatList = [
249
249
  ruleset: ['[Gen 8] LC'],
250
250
  banlist: [
251
251
  // LC OU
252
- 'Abra', 'Archen', 'Carvanha', 'Diglett-Base', 'Dwebble', 'Ferroseed', 'Foongus', 'Frillish', 'Grookey', 'Koffing',
253
- 'Larvesta', 'Magnemite', 'Mareanie', 'Mienfoo', 'Mudbray', 'Munchlax', 'Natu', 'Onix', 'Pawniard', 'Ponyta',
254
- 'Ponyta-Galar', 'Porygon', 'Slowpoke-Base', 'Spritzee', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt', 'Vulpix',
252
+ 'Abra', 'Carvanha', 'Croagunk', 'Diglett-Base', 'Dwebble', 'Ferroseed', 'Foongus', 'Frillish', 'Grookey',
253
+ 'Koffing', 'Larvesta', 'Magnemite', 'Mareanie', 'Mienfoo', 'Mudbray', 'Munchlax', 'Natu', 'Onix', 'Pawniard',
254
+ 'Ponyta', 'Ponyta-Galar', 'Porygon', 'Slowpoke-Base', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt', 'Vulpix',
255
255
  // LC UUBL
256
256
  'Farfetch\u2019d-Galar', 'Scorbunny', 'Shellder', 'Wingull',
257
257
  ],
@@ -285,20 +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 One Restricted'],
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
- `&bullet; <a href="https://www.smogon.com/forums/threads/3679374/">BSS Discussion</a>`,
295
- `&bullet; <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
291
  {
303
292
  name: "[Gen 8] Custom Game",
304
293
 
@@ -372,35 +361,15 @@ export const Formats: FormatList = [
372
361
  banlist: ['Corsola-Galar', 'Cutiefly', 'Ponyta-Base', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix', 'Vulpix-Alola'],
373
362
  },
374
363
  {
375
- name: "[Gen 8] VGC 2021 Series 11",
376
- threads: [
377
- `&bullet; <a href="https://www.smogon.com/forums/threads/3677186/">VGC 2021 Series 11 Metagame Discussion</a>`,
378
- `&bullet; <a href="https://www.smogon.com/forums/threads/3693427/">VGC 2021 Series 11 Sample Teams</a>`,
379
- `&bullet; <a href="https://www.smogon.com/forums/threads/3693284/">VGC 2021 Series 11 Viability Rankings</a>`,
380
- ],
364
+ name: "[Gen 8] VGC 2022",
381
365
 
382
366
  mod: 'gen8',
383
367
  gameType: 'doubles',
384
- ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit One Restricted'],
368
+ ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit Two Restricted'],
385
369
  restricted: ['Restricted Legendary'],
386
370
  },
387
371
  {
388
- name: "[Gen 8] Tiny Tourney",
389
- threads: [
390
- `&bullet; <a href="https://www.smogon.com/forums/threads/3694047/">Tiny Tourney Metagame Discussion</a>`,
391
- ],
392
-
393
- mod: 'gen8',
394
- gameType: 'doubles',
395
- ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
396
- onValidateSet(set) {
397
- const species = this.dex.species.get(set.species);
398
- if (!species.nfe || species.prevo) return [`Non-first-stage Pok\u00e9mon cannot be used in Tiny Tourney.`];
399
- if (species.heightm > 1) return [`${species.name} is too tall to be used in Tiny Tourney.`];
400
- },
401
- },
402
- {
403
- name: "[Gen 8] VGC 2021 Series 9",
372
+ name: "[Gen 8] VGC 2021",
404
373
 
405
374
  mod: 'gen8',
406
375
  gameType: 'doubles',
@@ -506,13 +475,15 @@ export const Formats: FormatList = [
506
475
  mod: 'gen8',
507
476
  ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
508
477
  banlist: [
509
- 'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darkrai', 'Darmanitan-Galar',
510
- 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina',
511
- 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lucario-Mega',
512
- 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Metagross-Mega', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
513
- 'Necrozma-Ultra', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Tornadus-Therian',
514
- 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Zygarde-Complete',
515
- 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Quick Claw', 'Baton Pass',
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',
516
487
  ],
517
488
  },
518
489
  {
@@ -527,22 +498,25 @@ export const Formats: FormatList = [
527
498
  ruleset: ['[Gen 8] National Dex'],
528
499
  banlist: [
529
500
  // National Dex OU
530
- 'Blaziken', 'Blissey', 'Chansey', 'Charizard-Mega-X', 'Charizard-Mega-Y', 'Clefable', 'Corviknight', 'Diancie-Mega',
531
- 'Excadrill', 'Ferrothorn', 'Garchomp', 'Gliscor', 'Greninja', 'Heatran', 'Kartana', 'Kommo-o', 'Kyurem', 'Landorus-Therian',
532
- 'Lopunny-Mega', 'Magnezone', 'Mawile-Mega', 'Medicham-Mega', 'Pelipper', 'Rillaboom', 'Scizor-Mega', 'Serperior',
533
- 'Slowbro-Base', 'Swampert-Mega', 'Tapu Fini', 'Tapu Koko', 'Tapu Lele', 'Toxapex', 'Tyranitar', 'Victini', 'Volcarona',
534
- 'Weavile', 'Zapdos-Base',
501
+ 'Blissey', 'Chansey', 'Charizard-Mega-X', 'Charizard-Mega-Y', 'Clefable', 'Corviknight', 'Diancie-Mega', 'Excadrill',
502
+ 'Ferrothorn', 'Garchomp', 'Gliscor', 'Greninja', 'Heatran', 'Kartana', 'Kommo-o', 'Kyurem', 'Landorus-Therian', 'Lopunny-Mega',
503
+ 'Magnezone', 'Mawile-Mega', 'Pelipper', 'Rillaboom', 'Scizor-Mega', 'Serperior', 'Slowbro-Base', 'Swampert-Mega', 'Tapu Fini',
504
+ 'Tapu Koko', 'Tapu Lele', 'Toxapex', 'Tyranitar', 'Victini', 'Volcarona', 'Weavile', 'Zapdos-Base',
535
505
  'ND UUBL', // National Dex UUBL
536
506
  'Drizzle', 'Drought',
537
507
  // Slowbronite is banned so it doesn't validate on Galarian Slowbro
538
508
  'Slowbronite',
509
+ // NatDex suspect
510
+ 'Tornadus-Therian',
539
511
  ],
540
512
  // Used to distinguish UU from below UU in the client
541
513
  restricted: [
542
- 'Absol-Mega', 'Aegislash', 'Alomomola', 'Altaria-Mega', 'Amoonguss', 'Beedrill-Mega', 'Bisharp', 'Breloom', 'Celesteela',
543
- 'Donphan', 'Dragonite', 'Hippowdon', 'Infernape', 'Keldeo', 'Krookodile', 'Mandibuzz', 'Manectric-Mega', 'Melmetal', 'Mew',
544
- 'Moltres-Base', 'Porygon2', 'Regieleki', 'Rotom-Heat', 'Rotom-Wash', 'Scizor', 'Skarmory', 'Slowking', 'Slowking-Galar',
545
- 'Swampert-Base', 'Tangrowth', 'Umbreon', 'Urshifu-Rapid-Strike',
514
+ 'Aegislash', 'Alakazam-Base', 'Altaria-Mega', 'Amoonguss', 'Beedrill-Mega', 'Blaziken-Base', 'Breloom', 'Celesteela',
515
+ 'Chandelure', 'Donphan', 'Dracozolt', 'Dragonite', 'Feraligatr', 'Gastrodon', 'Hatterene', 'Hippowdon', 'Infernape',
516
+ 'Keldeo', 'Krookodile', 'Mamoswine', 'Mandibuzz', 'Manectric-Mega', 'Melmetal', 'Mienshao', 'Moltres-Base',
517
+ 'Nidoking', 'Nidoqueen', 'Nihilego', 'Quagsire', 'Regieleki', 'Ribombee', 'Rotom-Heat', 'Rotom-Wash', 'Salamence',
518
+ 'Scizor', 'Skarmory', 'Slowking-Base', 'Swampert-Base', 'Talonflame', 'Tangrowth', 'Tornadus-Base', 'Umbreon',
519
+ 'Urshifu-Rapid-Strike',
546
520
  ],
547
521
  },
548
522
  {
@@ -582,36 +556,62 @@ export const Formats: FormatList = [
582
556
  section: "Pet Mods",
583
557
  },
584
558
  {
585
- name: "[Gen 8] Fusion Evolution UU",
559
+ name: "[Gen 8] Alternatium",
560
+ desc: `A metagame made up of only Pok&eacute;mon with alternate forms, with all of them being separate and unique.`,
586
561
  threads: [
587
- `&bullet; <a href="https://www.smogon.com/forums/threads/3674163/">Fusion Evolution UU</a>`,
562
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3683767/">Alternatium</a>`,
563
+ `&bullet; <a href="https://docs.google.com/spreadsheets/d/1bvvkPg1CrUBJFJJeuwkts8elfJcEcahGOoHm-vGBXOI/edit?usp=sharing">Spreadsheet</a>`,
588
564
  ],
589
565
 
590
- mod: "fusionevolutionuu",
591
- searchShow: false,
592
- ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod', 'Z-Move Clause', 'Data Mod', 'Mega Data Mod'],
593
- banlist: [
594
- 'All Pokemon', 'Lopunnite', 'Tapu Lop-Mega', 'Red Orb', 'Grousle-Primal',
595
- ],
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'],
596
569
  unbanlist: [
597
- 'Volquag', 'Toxalure', 'Kingtsar', 'Tanette', 'Slowton',
598
- 'Flaant', 'Umbat', 'Chomplim', 'Chomplim-Mega', 'Xotalion', 'Miemie', 'Dusking', 'Jelliswine',
599
- 'Pigapult', 'Lycanserker-Dusk', 'Tapu Lop', 'Dragontler', 'Eternabat',
600
- 'Grimmlurk', 'Manicuno-Galar', 'Yacian-Crowned', 'Cryogolem', 'Stoudrago',
601
- 'Grousle', 'Dongoro', 'Slurpum',
602
- 'Corveot', 'Corveot-Mega', 'Igglyzenta-Crowned', 'Arctres-Galar', 'Garborude', 'Noicity', 'Ferros',
603
- 'Landmaldo-Therian', 'Tentoxys-Defense', 'Strikados-Galar', 'Hooporant',
604
-
605
- 'Silvino-Bug', 'Silvino-Dark', 'Silvino-Dragon', 'Silvino-Electric', 'Silvino-Fairy', 'Silvino-Fighting',
606
- 'Silvino-Fire', 'Silvino-Flying', 'Silvino-Ghost', 'Silvino-Grass', 'Silvino-Ground', 'Silvino-Ice',
607
- 'Silvino-Poison', 'Silvino-Psychic', 'Silvino-Rock', 'Silvino-Steel', 'Silvino-Water', 'Silvino',
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&eacute;mon.`,
599
+ threads: [
600
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3690182/">Random Dex</a>`,
601
+ ],
608
602
 
609
- 'Silvino-Bug-Mega', 'Silvino-Dark-Mega', 'Silvino-Dragon-Mega',
610
- 'Silvino-Electric-Mega', 'Silvino-Fairy-Mega', 'Silvino-Fighting-Mega',
611
- 'Silvino-Fire-Mega', 'Silvino-Flying-Mega', 'Silvino-Ghost-Mega',
612
- 'Silvino-Grass-Mega', 'Silvino-Ground-Mega', 'Silvino-Ice-Mega',
613
- 'Silvino-Poison-Mega', 'Silvino-Psychic-Mega', 'Silvino-Rock-Mega',
614
- 'Silvino-Steel-Mega', 'Silvino-Water-Mega', 'Silvino-Mega',
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',
615
615
  ],
616
616
  },
617
617
  {
@@ -635,38 +635,135 @@ export const Formats: FormatList = [
635
635
  column: 2,
636
636
  },
637
637
  {
638
- name: "[Gen 8] Revelationmons",
639
- desc: `The moves in the first slot(s) of a Pok&eacute;mon's set have their types changed to match the Pok&eacute;mon's type(s).`,
638
+ name: "[Gen 8] Trademarked",
639
+ desc: `Sacrifice your Pok&eacute;mon's ability for a status move that activates on switch-in.`,
640
640
  threads: [
641
- `&bullet; <a href="https://www.smogon.com/forums/threads/3692297/">Revelationmons</a>`,
641
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3656980/">Trademarked</a>`,
642
642
  ],
643
643
 
644
644
  mod: 'gen8',
645
- ruleset: ['Standard', 'Dynamax Clause', 'Revelationmons Mod', 'Sleep Moves Clause'],
645
+ // searchShow: false,
646
+ ruleset: ['Standard', 'Dynamax Clause'],
646
647
  banlist: [
647
- 'Barraskewda', 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Dragapult',
648
- 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kommo-o', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
649
- 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
650
- 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian',
651
- 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct',
652
- 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
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', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
652
+ 'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
653
+ ],
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',
653
659
  ],
654
- restricted: ['Bolt Beak', 'U-turn', 'Volt Switch'],
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.)`);
665
+ }
666
+ }
667
+ return problems;
668
+ },
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);
674
+ }
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.`];
678
+ }
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
+ },
735
+ },
655
736
  },
656
737
  {
657
- name: "[Gen 8 BDSP] Balanced Hackmons",
658
- desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
738
+ name: "[Gen 8] Linked",
739
+ desc: `The first two moves in a Pok&eacute;mon's moveset are used simultaneously.`,
659
740
  threads: [
660
- `&bullet; <a href="https://www.smogon.com/forums/posts/9043074">BDSP Balanced Hackmons</a>`,
741
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3660421/">Linked</a>`,
661
742
  ],
662
743
 
663
- mod: 'gen8bdsp',
664
- ruleset: ['-Nonexistent', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Moves Clause', 'Endless Battle Clause'],
744
+ mod: 'linked',
745
+ ruleset: ['Standard', 'Dynamax Clause'],
665
746
  banlist: [
666
- 'Shedinja', 'Arena Trap', 'Contrary', 'Gorilla Tactics', 'Huge Power', 'Illusion', 'Innards Out', 'Intrepid Sword',
667
- 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble',
668
- 'Wonder Guard', 'Comatose + Sleep Talk', 'Shell Smash',
747
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
748
+ 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings',
749
+ 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
750
+ 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Zygarde-Complete', 'Arena Trap', 'Moody', 'Power Construct', 'Sand Veil', 'Shadow Tag', 'Snow Cloak',
751
+ 'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Baton Pass',
752
+ ],
753
+ restricted: [
754
+ 'Baneful Bunker', 'Bounce', 'Protect', 'Detect', 'Dig', 'Dive', 'Fly', 'King\'s Shield', 'Nature\'s Madness', 'Night Shade',
755
+ 'Obstruct', 'Phantom Force', 'Seismic Toss', 'Shadow Force', 'Sky Drop', 'Spiky Shield', 'Super Fang',
669
756
  ],
757
+ onValidateSet(set) {
758
+ const problems = [];
759
+ for (const [i, moveid] of set.moves.entries()) {
760
+ const move = this.dex.moves.get(moveid);
761
+ if ([0, 1].includes(i) && this.ruleTable.isRestricted(`move:${move.id}`)) {
762
+ problems.push(`${set.name || set.species}'s move ${move.name} cannot be linked.`);
763
+ }
764
+ }
765
+ return problems;
766
+ },
670
767
  },
671
768
 
672
769
  // Other Metagames
@@ -713,6 +810,35 @@ export const Formats: FormatList = [
713
810
  }
714
811
  },
715
812
  },
813
+ {
814
+ name: "[Gen 8] Almost Any Ability",
815
+ desc: `Pok&eacute;mon have access to almost any ability.`,
816
+ threads: [
817
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3656414/">Almost Any Ability</a>`,
818
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3682690/">AAA Resources</a>`,
819
+ ],
820
+
821
+ mod: 'gen8',
822
+ 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'],
823
+ banlist: [
824
+ 'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Gengar', 'Giratina',
825
+ 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow',
826
+ 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja',
827
+ 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom',
828
+ 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter',
829
+ 'Innards Out', 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Power Construct', 'Protean', 'Pure Power',
830
+ 'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
831
+ ],
832
+ onValidateSet(set) {
833
+ // Temporary fix until battle-only is implemented properly
834
+ if (this.toID(set.species) === 'zamazentacrowned' && this.toID(set.ability) !== 'dauntlessshield') {
835
+ return [`Zamazenta-Crowned can only use Dauntless Shield because it is a battle-only forme.`];
836
+ }
837
+ if (this.toID(set.species) === 'zaciancrowned' && this.toID(set.ability) !== 'intrepidsword') {
838
+ return [`Zacian-Crowned can only use Intrepid Sword because it is a battle-only forme.`];
839
+ }
840
+ },
841
+ },
716
842
  {
717
843
  name: "[Gen 8] Mix and Mega",
718
844
  desc: `Mega evolve any Pok&eacute;mon with any mega stone and no limit. Boosts based on mega evolution from gen 7.`,
@@ -731,7 +857,8 @@ export const Formats: FormatList = [
731
857
  restricted: [
732
858
  'Calyrex-Ice', 'Dialga', 'Eternatus', 'Gengar', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyurem-Black', 'Kyurem-White',
733
859
  'Lugia', 'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
734
- 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zekrom', 'Zygarde-Complete',
860
+ 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu', 'Urshifu-Rapid-Strike', 'Xerneas',
861
+ 'Yveltal', 'Zekrom', 'Zygarde-Complete',
735
862
  ],
736
863
  onValidateTeam(team) {
737
864
  const itemTable = new Set<ID>();
@@ -774,51 +901,24 @@ export const Formats: FormatList = [
774
901
  }
775
902
  },
776
903
  },
777
- {
778
- name: "[Gen 8] Almost Any Ability",
779
- desc: `Pok&eacute;mon have access to almost any ability.`,
780
- threads: [
781
- `&bullet; <a href="https://www.smogon.com/forums/threads/3656414/">Almost Any Ability</a>`,
782
- `&bullet; <a href="https://www.smogon.com/forums/threads/3682690/">AAA Resources</a>`,
783
- ],
784
-
785
- mod: 'gen8',
786
- 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'],
787
- banlist: [
788
- 'Archeops', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Gengar', 'Giratina', 'Giratina-Origin',
789
- 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
790
- 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier',
791
- 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base',
792
- 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Intrepid Sword',
793
- 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Power Construct', 'Protean', 'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout',
794
- 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
795
- ],
796
- onValidateSet(set) {
797
- // Temporary fix until battle-only is implemented properly
798
- if (this.toID(set.species) === 'zamazentacrowned' && this.toID(set.ability) !== 'dauntlessshield') {
799
- return [`Zamazenta-Crowned can only use Dauntless Shield because it is a battle-only forme.`];
800
- }
801
- if (this.toID(set.species) === 'zaciancrowned' && this.toID(set.ability) !== 'intrepidsword') {
802
- return [`Zacian-Crowned can only use Intrepid Sword because it is a battle-only forme.`];
803
- }
804
- },
805
- },
806
904
  {
807
905
  name: "[Gen 8] STABmons",
808
906
  desc: `Pok&eacute;mon can use any move of their typing, in addition to the moves they can normally learn.`,
809
907
  threads: [
810
908
  `&bullet; <a href="https://www.smogon.com/forums/threads/3656429/">STABmons</a>`,
909
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3695169/">STABmons Resources</a>`,
811
910
  ],
812
911
 
813
912
  mod: 'gen8',
814
- ruleset: ['Standard', 'STABmons Move Legality', 'Dynamax Clause', 'Sleep Moves Clause'],
913
+ ruleset: ['Standard', 'STABmons Move Legality', 'Dynamax Clause', 'Sleep Moves Clause', '!Sleep Clause Mod'],
815
914
  banlist: [
816
- 'Aegislash', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Genesect',
817
- 'Garchomp', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus', 'Landorus-Therian',
818
- 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Porygon-Z',
819
- 'Rayquaza', 'Reshiram', 'Silvally', 'Solgaleo', 'Spectrier', 'Tapu Bulu', 'Tapu Koko', 'Thundurus-Base', 'Urshifu-Base', 'Xerneas', 'Yveltal',
820
- 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zapdos-Galar', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody',
821
- 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
915
+ 'Aegislash', 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite',
916
+ 'Eternatus', 'Genesect', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black',
917
+ 'Kyurem-White', 'Landorus', 'Landorus-Therian', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings',
918
+ 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Silvally', 'Solgaleo', 'Spectrier', 'Tapu Bulu',
919
+ 'Tapu Koko', 'Thundurus-Base', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
920
+ 'Zapdos-Galar', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock',
921
+ 'Baton Pass',
822
922
  ],
823
923
  restricted: [
824
924
  'Acupressure', 'Astral Barrage', 'Belly Drum', 'Bolt Beak', 'Clangorous Soul', 'Double Iron Bash', 'Electrify', 'Extreme Speed', 'Fishious Rend',
@@ -848,11 +948,11 @@ export const Formats: FormatList = [
848
948
  ],
849
949
 
850
950
  mod: 'gen8',
851
- ruleset: ['Standard', 'Dynamax Clause'],
951
+ ruleset: ['Standard', 'Dynamax Clause', 'Sleep Moves Clause'],
852
952
  banlist: [
853
- 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Dragapult', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Pikachu', 'Toxapex',
953
+ 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Dragapult', 'Hawlucha', 'Mantine', 'Marowak-Alola', 'Melmetal', 'Pikachu', 'Toxapex',
854
954
  'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power', 'Moody', 'Pure Power',
855
- 'Shadow Tag', 'Baton Pass',
955
+ 'Shadow Tag', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Baton Pass',
856
956
  ],
857
957
  onValidateTeam(team) {
858
958
  const gods = new Set<string>();
@@ -933,7 +1033,8 @@ export const Formats: FormatList = [
933
1033
  name: "[Gen 8 BDSP] OU",
934
1034
  threads: [
935
1035
  `&bullet; <a href="https://www.smogon.com/forums/threads/3693629/">BDSP OU Metagame Discussion</a>`,
936
- `&bullet; <a href="https://www.smogon.com/forums/threads/3693620/">BDSP OU Viability List</a>`,
1036
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3693721/">BDSP OU Sample Teams</a>`,
1037
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3696088/">BDSP OU Viability Rankings</a>`,
937
1038
  ],
938
1039
 
939
1040
  mod: 'gen8bdsp',
@@ -963,6 +1064,34 @@ export const Formats: FormatList = [
963
1064
  ruleset: ['[Gen 8 BDSP] OU'],
964
1065
  banlist: ['OU', 'UUBL'],
965
1066
  },
1067
+ {
1068
+ name: "[Gen 8 BDSP] RU",
1069
+ threads: [
1070
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3695563/">BDSP RU</a>`,
1071
+ ],
1072
+
1073
+ mod: 'gen8bdsp',
1074
+ ruleset: ['[Gen 8 BDSP] UU'],
1075
+ banlist: ['UU', 'RUBL', 'Drought'],
1076
+ },
1077
+ {
1078
+ name: "[Gen 8 BDSP] NU",
1079
+
1080
+ mod: 'gen8bdsp',
1081
+ searchShow: false,
1082
+ ruleset: ['[Gen 8 BDSP] RU'],
1083
+ banlist: ['RU', 'NUBL'],
1084
+ },
1085
+ {
1086
+ name: "[Gen 8 BDSP] LC",
1087
+ threads: [
1088
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3696004/">BDSP LC</a>`,
1089
+ ],
1090
+
1091
+ mod: 'gen8bdsp',
1092
+ ruleset: ['Little Cup', 'Standard'],
1093
+ banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Moody', 'Baton Pass'],
1094
+ },
966
1095
  {
967
1096
  name: "[Gen 8 BDSP] Monotype",
968
1097
  threads: [
@@ -986,6 +1115,15 @@ export const Formats: FormatList = [
986
1115
  searchShow: false,
987
1116
  ruleset: ['[Gen 8 BDSP] OU', '+CAP'],
988
1117
  },
1118
+ {
1119
+ name: "[Gen 8 BDSP] 3v3 Singles",
1120
+ threads: [
1121
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3695092/">BDSP 3v3 Singles</a>`,
1122
+ ],
1123
+
1124
+ mod: 'gen8bdsp',
1125
+ ruleset: ['Flat Rules', 'Min Source Gen = 8'],
1126
+ },
989
1127
  {
990
1128
  name: "[Gen 8 BDSP] Doubles OU",
991
1129
  threads: [
@@ -1033,11 +1171,11 @@ export const Formats: FormatList = [
1033
1171
  searchShow: false,
1034
1172
  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'],
1035
1173
  banlist: [
1036
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon',
1037
- 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Latias', 'Latios', 'Lugia', 'Lunala', 'Marshadow',
1038
- 'Mew', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Reuniclus', 'Shedinja',
1039
- 'Slowking-Galar', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
1040
- 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
1174
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin',
1175
+ 'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Latias', 'Latios', 'Lugia',
1176
+ 'Lunala', 'Marshadow', 'Mew', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
1177
+ 'Reuniclus', 'Shedinja', 'Slowking-Galar', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Volcarona', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
1178
+ 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
1041
1179
  ],
1042
1180
  onModifySpeciesPriority: 2,
1043
1181
  onModifySpecies(species, target, source, effect) {
@@ -1541,6 +1679,53 @@ export const Formats: FormatList = [
1541
1679
  }
1542
1680
  },
1543
1681
  },
1682
+ {
1683
+ name: "[Gen 8] Pokebilities",
1684
+ desc: `Pok&eacute;mon have all of their released abilities simultaneously.`,
1685
+ threads: [
1686
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3679692/">Pok&eacute;bilities</a>`,
1687
+ ],
1688
+ mod: 'pokebilities',
1689
+ searchShow: false,
1690
+ ruleset: ['Standard', 'Dynamax Clause'],
1691
+ banlist: [
1692
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Conkeldurr', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dracozolt',
1693
+ 'Eternatus', 'Excadrill', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
1694
+ 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings',
1695
+ 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base',
1696
+ 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zygarde-Base', 'Power Construct',
1697
+ 'Baton Pass', 'King\'s Rock',
1698
+ // Moody users
1699
+ 'Glalie', 'Octillery', 'Remoraid', 'Snorunt',
1700
+ // Shadow Tag/Arena Trap
1701
+ 'Diglett-Base', 'Dugtrio-Base', 'Gothita', 'Gothitelle', 'Gothorita', 'Trapinch', 'Wobbuffet', 'Wynaut',
1702
+ ],
1703
+ onBegin() {
1704
+ for (const pokemon of this.getAllPokemon()) {
1705
+ if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
1706
+ continue;
1707
+ }
1708
+ pokemon.m.innates = Object.keys(pokemon.species.abilities)
1709
+ .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
1710
+ .map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
1711
+ .filter(ability => ability !== pokemon.ability);
1712
+ }
1713
+ },
1714
+ onSwitchInPriority: 2,
1715
+ onSwitchIn(pokemon) {
1716
+ if (pokemon.m.innates) {
1717
+ for (const innate of pokemon.m.innates) {
1718
+ pokemon.addVolatile("ability:" + innate, pokemon);
1719
+ }
1720
+ }
1721
+ },
1722
+ onAfterMega(pokemon) {
1723
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
1724
+ pokemon.removeVolatile(innate);
1725
+ }
1726
+ pokemon.m.innates = undefined;
1727
+ },
1728
+ },
1544
1729
  {
1545
1730
  name: "[Gen 8] The Loser's Game",
1546
1731
  desc: `The first player to lose all of their Pok&eacute;mon wins.`,
@@ -1676,106 +1861,6 @@ export const Formats: FormatList = [
1676
1861
  },
1677
1862
  },
1678
1863
  },
1679
- {
1680
- name: "[Gen 8] Trademarked",
1681
- desc: `Sacrifice your Pok&eacute;mon's ability for a status move that activates on switch-in.`,
1682
- threads: [
1683
- `&bullet; <a href="https://www.smogon.com/forums/threads/3656980/">Trademarked</a>`,
1684
- ],
1685
-
1686
- mod: 'gen8',
1687
- searchShow: false,
1688
- ruleset: ['Standard', 'Dynamax Clause'],
1689
- banlist: [
1690
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Kyurem-Black', 'Kyurem-White',
1691
- 'Giratina', 'Giratina-Origin', 'Genesect', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Lugia', 'Lunala', 'Magearna', 'Marshadow',
1692
- 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
1693
- 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base',
1694
- 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
1695
- ],
1696
- restricted: [
1697
- 'Baneful Bunker', 'Block', 'Copycat', 'Corrosive Gas', 'Detect', 'Destiny Bond', 'Disable', 'Encore', 'Fairy Lock', 'Hypnosis', 'Ingrain',
1698
- 'Instruct', 'Lovely Kiss', 'King\'s Shield', 'Mat Block', 'Mean Look', 'move:Metronome', 'Obstruct', 'Octolock', 'Nature Power', 'Parting Shot',
1699
- 'Psycho Shift', 'Protect', 'Roar', 'Sing', 'Skill Swap', 'Sleep Powder', 'Sleep Talk', 'Spiky Shield', 'Spore', 'Substitute', 'Teleport',
1700
- 'Whirlwind', 'Wish', 'Yawn',
1701
- ],
1702
- onValidateTeam(team, format, teamHas) {
1703
- const problems = [];
1704
- for (const trademark in teamHas.trademarks) {
1705
- if (teamHas.trademarks[trademark] > 1) {
1706
- problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks[trademark]} Pok\u00e9mon with ${trademark} as a Trademark.)`);
1707
- }
1708
- }
1709
- return problems;
1710
- },
1711
- validateSet(set, teamHas) {
1712
- const dex = this.dex;
1713
- const ability = dex.moves.get(set.ability);
1714
- if (!ability.exists) { // Not even a real move
1715
- return this.validateSet(set, teamHas);
1716
- }
1717
- // Absolute trademark bans
1718
- if (ability.category !== 'Status') {
1719
- return [`${ability.name} is not a status move, and cannot be used as a trademark.`];
1720
- }
1721
- if (ability.forceSwitch || ability.selfSwitch) {
1722
- return [
1723
- `Force-switching and self-switching moves are banned from being used as trademarks.`,
1724
- `(${ability.name} is a ${ability.forceSwitch ? 'force' : 'self'}-switching move.)`,
1725
- ];
1726
- }
1727
- const irrevokablyRestricted = [
1728
- 'Assist', 'Copycat', 'Metronome', 'Mirror Move', 'Sleep Talk', // Could call another unsafe trademark
1729
- 'Skill Swap', // Self-propagates indefinitely
1730
- ];
1731
- if (irrevokablyRestricted.includes(ability.name)) {
1732
- return [`${ability.name} cannot safely function as a trademark.`];
1733
- }
1734
- // Contingent trademark bans
1735
- if (this.ruleTable.isRestricted(`move:${ability.id}`)) {
1736
- return [`${ability.name} is restricted from being used as a trademark.`];
1737
- }
1738
- if (set.moves.map(this.toID).includes(ability.id)) {
1739
- return [`${set.name} may not use ${ability.name} as both a trademark and one of its moves simultaneously.`];
1740
- }
1741
- const customRules = this.format.customRules || [];
1742
- if (!customRules.includes('!obtainableabilities')) customRules.push('!obtainableabilities');
1743
-
1744
- const TeamValidator: typeof import('../sim/team-validator').TeamValidator =
1745
- require('../sim/team-validator').TeamValidator;
1746
-
1747
- const validator = new TeamValidator(dex.formats.get(`${this.format.id}@@@${customRules.join(',')}`));
1748
- const moves = set.moves;
1749
- set.moves = [ability.id];
1750
- set.ability = dex.species.get(set.species).abilities['0'];
1751
- let problems = validator.validateSet(set, {}) || [];
1752
- if (problems.length) return problems;
1753
- set.moves = moves;
1754
- set.ability = dex.species.get(set.species).abilities['0'];
1755
- problems = problems.concat(validator.validateSet(set, teamHas) || []);
1756
- set.ability = ability.id;
1757
- if (!teamHas.trademarks) teamHas.trademarks = {};
1758
- teamHas.trademarks[ability.name] = (teamHas.trademarks[ability.name] || 0) + 1;
1759
- return problems.length ? problems : null;
1760
- },
1761
- pokemon: {
1762
- getAbility() {
1763
- const move = this.battle.dex.moves.get(this.battle.toID(this.ability));
1764
- if (!move.exists) return Object.getPrototypeOf(this).getAbility.call(this);
1765
- return {
1766
- id: move.id,
1767
- name: move.name,
1768
- onStart(this: Battle, pokemon: Pokemon) {
1769
- this.add('-activate', pokemon, 'ability: ' + move.name);
1770
- this.actions.useMove(move, pokemon);
1771
- },
1772
- toString() {
1773
- return "";
1774
- },
1775
- };
1776
- },
1777
- },
1778
- },
1779
1864
 
1780
1865
  // Randomized Metas
1781
1866
  ///////////////////////////////////////////////////////////////////
@@ -1890,7 +1975,8 @@ export const Formats: FormatList = [
1890
1975
 
1891
1976
  mod: 'gen8',
1892
1977
  team: 'randomHC',
1893
- ruleset: ['Obtainable Formes', 'HP Percentage Mod', 'Cancel Mod'],
1978
+ ruleset: ['HP Percentage Mod', 'Cancel Mod'],
1979
+ banlist: ['Nonexistent'],
1894
1980
  },
1895
1981
  {
1896
1982
  name: "[Gen 8] Doubles Hackmons Cup",
@@ -1899,7 +1985,8 @@ export const Formats: FormatList = [
1899
1985
  gameType: 'doubles',
1900
1986
  team: 'randomHC',
1901
1987
  searchShow: false,
1902
- ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'],
1988
+ ruleset: ['HP Percentage Mod', 'Cancel Mod'],
1989
+ banlist: ['Nonexistent'],
1903
1990
  },
1904
1991
  {
1905
1992
  name: "[Gen 8] CAP 1v1",
@@ -1975,6 +2062,7 @@ export const Formats: FormatList = [
1975
2062
  team: 'randomHC',
1976
2063
  searchShow: false,
1977
2064
  ruleset: ['HP Percentage Mod', 'Cancel Mod'],
2065
+ banlist: ['Nonexistent'],
1978
2066
  },
1979
2067
  {
1980
2068
  name: "[Gen 7 Let's Go] Random Battle",
@@ -2051,6 +2139,7 @@ export const Formats: FormatList = [
2051
2139
  team: 'randomHC',
2052
2140
  searchShow: false,
2053
2141
  ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Desync Clause Mod', 'Sleep Clause Mod', 'Freeze Clause Mod', 'Team Type Preview'],
2142
+ banlist: ['Nonexistent'],
2054
2143
  onModifySpecies(species, target, source, effect) {
2055
2144
  if (!target) return;
2056
2145
  return {...species, ...(target.set as any).hc};
@@ -2072,50 +2161,39 @@ export const Formats: FormatList = [
2072
2161
  column: 3,
2073
2162
  },
2074
2163
  {
2075
- name: "[Gen 1] UU",
2164
+ name: "[Gen 3] UU",
2076
2165
  threads: [
2077
- `&bullet; <a href="https://www.smogon.com/forums/threads/3573896/">RBY UU Metagame Discussion</a>`,
2078
- `&bullet; <a href="https://www.smogon.com/forums/threads/3647713/">RBY UU Viability Rankings</a>`,
2166
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
2167
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
2079
2168
  ],
2080
2169
 
2081
- mod: 'gen1',
2170
+ mod: 'gen3',
2082
2171
  // searchShow: false,
2083
- ruleset: ['[Gen 1] OU'],
2084
- banlist: ['OU', 'UUBL'],
2172
+ ruleset: ['Standard', 'NFE Clause'],
2173
+ banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Baton Pass'],
2174
+ unbanlist: ['Scyther', 'Sand Veil'],
2085
2175
  },
2086
2176
  {
2087
- name: "[Gen 6] 1v1",
2088
- desc: `Bring three Pok&eacute;mon to Team Preview and choose one to battle.`,
2177
+ name: "[Gen 1] NU",
2089
2178
  threads: [
2090
- `&bullet; <a href="https://www.smogon.com/forums/posts/8031459/">ORAS 1v1</a>`,
2179
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
2091
2180
  ],
2092
2181
 
2093
- mod: 'gen6',
2182
+ mod: 'gen1',
2094
2183
  // searchShow: false,
2095
- ruleset: [
2096
- 'Max Team Size = 3', 'Picked Team Size = 1',
2097
- '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',
2098
- ],
2099
- banlist: [
2100
- 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina',
2101
- 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo',
2102
- 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Xerneas', 'Yveltal', 'Zekrom',
2103
- 'Focus Sash', 'Soul Dew', 'Perish Song',
2104
- ],
2184
+ ruleset: ['[Gen 1] UU'],
2185
+ banlist: ['UU', 'NUBL'],
2105
2186
  },
2106
2187
  {
2107
- name: "[Gen 5] Doubles OU",
2188
+ name: "[Gen 4] Ubers",
2108
2189
  threads: [
2109
- `&bullet; <a href="https://www.smogon.com/forums/threads/3606719/">BW2 Doubles Metagame Discussion</a>`,
2110
- `&bullet; <a href="https://www.smogon.com/forums/posts/7393048/">BW2 Doubles Viability Rankings</a>`,
2111
- `&bullet; <a href="https://www.smogon.com/forums/posts/7393081/">BW2 Doubles Sample Teams</a>`,
2190
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
2112
2191
  ],
2113
2192
 
2114
- mod: 'gen5',
2115
- gameType: 'doubles',
2193
+ mod: 'gen4',
2116
2194
  // searchShow: false,
2117
- ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
2118
- banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Gravity'],
2195
+ ruleset: ['Standard'],
2196
+ banlist: ['AG'],
2119
2197
  },
2120
2198
 
2121
2199
  // Past Gens OU
@@ -2157,8 +2235,8 @@ export const Formats: FormatList = [
2157
2235
  ],
2158
2236
 
2159
2237
  mod: 'gen5',
2160
- ruleset: ['Standard', 'Evasion Abilities Clause', 'Baton Pass Clause', 'Sleep Moves Clause', 'Swagger Clause'],
2161
- banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist'],
2238
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Swagger Clause'],
2239
+ banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist', 'Baton Pass'],
2162
2240
  },
2163
2241
  {
2164
2242
  name: "[Gen 4] OU",
@@ -2170,7 +2248,7 @@ export const Formats: FormatList = [
2170
2248
 
2171
2249
  mod: 'gen4',
2172
2250
  ruleset: ['Standard'],
2173
- banlist: ['AG', 'Uber', 'Arena Trap', 'Sand Veil', 'Swinub + Snow Cloak', 'Piloswine + Snow Cloak', 'Mamoswine + Snow Cloak', 'Soul Dew', 'Baton Pass'],
2251
+ banlist: ['AG', 'Uber', 'Arena Trap', 'Sand Veil', 'Swinub + Snow Cloak', 'Piloswine + Snow Cloak', 'Mamoswine + Snow Cloak', 'Soul Dew', 'Baton Pass', 'Swagger'],
2174
2252
  },
2175
2253
  {
2176
2254
  name: "[Gen 3] OU",
@@ -2181,7 +2259,7 @@ export const Formats: FormatList = [
2181
2259
 
2182
2260
  mod: 'gen3',
2183
2261
  ruleset: ['Standard', 'One Boost Passer Clause'],
2184
- banlist: ['Uber', 'Sand Veil', 'Smeargle + Ingrain'],
2262
+ banlist: ['Uber', 'Sand Veil', 'Assist', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'],
2185
2263
  },
2186
2264
  {
2187
2265
  name: "[Gen 2] OU",
@@ -2331,6 +2409,16 @@ export const Formats: FormatList = [
2331
2409
  mod: 'gen6',
2332
2410
  ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause', 'EV limit = 510'],
2333
2411
  },
2412
+ {
2413
+ name: "[Gen 5] ZU",
2414
+ threads: [
2415
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8034680/">BW2 ZU</a>`,
2416
+ ],
2417
+
2418
+ mod: 'gen5',
2419
+ ruleset: ['[Gen 5] PU'],
2420
+ banlist: ['PU', 'Dragonair', 'Glalie', 'Machoke', 'Marowak', 'Omanyte', 'Regigigas', 'Trubbish', 'Whirlipede', 'Baton Pass'],
2421
+ },
2334
2422
 
2335
2423
  // US/UM Singles
2336
2424
  ///////////////////////////////////////////////////////////////////
@@ -2748,6 +2836,26 @@ export const Formats: FormatList = [
2748
2836
  'Soul Dew', 'Baton Pass',
2749
2837
  ],
2750
2838
  },
2839
+ {
2840
+ name: "[Gen 6] 1v1",
2841
+ desc: `Bring three Pok&eacute;mon to Team Preview and choose one to battle.`,
2842
+ threads: [
2843
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8031459/">ORAS 1v1</a>`,
2844
+ ],
2845
+
2846
+ mod: 'gen6',
2847
+ searchShow: false,
2848
+ ruleset: [
2849
+ 'Max Team Size = 3', 'Picked Team Size = 1',
2850
+ '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',
2851
+ ],
2852
+ banlist: [
2853
+ 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina',
2854
+ 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo',
2855
+ 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Xerneas', 'Yveltal', 'Zekrom',
2856
+ 'Focus Sash', 'Soul Dew', 'Perish Song',
2857
+ ],
2858
+ },
2751
2859
  {
2752
2860
  name: "[Gen 6] Anything Goes",
2753
2861
  threads: [
@@ -2967,7 +3075,7 @@ export const Formats: FormatList = [
2967
3075
  mod: 'gen5',
2968
3076
  searchShow: false,
2969
3077
  ruleset: ['[Gen 5] NU', 'Sleep Moves Clause'],
2970
- banlist: ['NU', 'Combusken', 'Gothorita', 'Linoone', 'Riolu', 'Rotom-Frost', 'Simipour', 'Throh', 'Vigoroth'],
3078
+ banlist: ['NU', 'PUBL'],
2971
3079
  },
2972
3080
  {
2973
3081
  name: "[Gen 5] LC",
@@ -3037,6 +3145,20 @@ export const Formats: FormatList = [
3037
3145
  section: 'B2/W2 Doubles',
3038
3146
  column: 4,
3039
3147
  },
3148
+ {
3149
+ name: "[Gen 5] Doubles OU",
3150
+ threads: [
3151
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3606719/">BW2 Doubles Metagame Discussion</a>`,
3152
+ `&bullet; <a href="https://www.smogon.com/forums/posts/7393048/">BW2 Doubles Viability Rankings</a>`,
3153
+ `&bullet; <a href="https://www.smogon.com/forums/posts/7393081/">BW2 Doubles Sample Teams</a>`,
3154
+ ],
3155
+
3156
+ mod: 'gen5',
3157
+ gameType: 'doubles',
3158
+ searchShow: false,
3159
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
3160
+ banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Gravity'],
3161
+ },
3040
3162
  {
3041
3163
  name: "[Gen 5] VGC 2013",
3042
3164
 
@@ -3094,17 +3216,6 @@ export const Formats: FormatList = [
3094
3216
  section: "DPP Singles",
3095
3217
  column: 5,
3096
3218
  },
3097
- {
3098
- name: "[Gen 4] Ubers",
3099
- threads: [
3100
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
3101
- ],
3102
-
3103
- mod: 'gen4',
3104
- searchShow: false,
3105
- ruleset: ['Standard'],
3106
- banlist: ['AG'],
3107
- },
3108
3219
  {
3109
3220
  name: "[Gen 4] UU",
3110
3221
  threads: [
@@ -3116,7 +3227,7 @@ export const Formats: FormatList = [
3116
3227
  searchShow: false,
3117
3228
  ruleset: ['[Gen 4] OU'],
3118
3229
  banlist: ['OU', 'UUBL'],
3119
- unbanlist: ['Arena Trap'],
3230
+ unbanlist: ['Arena Trap', 'Swagger'],
3120
3231
  },
3121
3232
  {
3122
3233
  name: "[Gen 4] NU",
@@ -3176,8 +3287,8 @@ export const Formats: FormatList = [
3176
3287
  'Picked Team Size = 1', 'Max Team Size = 3',
3177
3288
  '[Gen 4] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
3178
3289
  ],
3179
- banlist: ['Latias', 'Machamp', 'Porygon-Z', 'Snorlax', 'Togekiss', 'Focus Sash', 'Destiny Bond', 'Explosion', 'Perish Song', 'Self-Destruct'],
3180
- unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil'],
3290
+ banlist: ['Latias', 'Machamp', 'Porygon-Z', 'Shaymin', 'Snorlax', 'Togekiss', 'Focus Sash', 'Destiny Bond', 'Explosion', 'Perish Song', 'Self-Destruct'],
3291
+ unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil', 'Swagger'],
3181
3292
  },
3182
3293
  {
3183
3294
  name: "[Gen 4] Anything Goes",
@@ -3213,7 +3324,7 @@ export const Formats: FormatList = [
3213
3324
  searchShow: false,
3214
3325
  ruleset: ['[Gen 4] OU'],
3215
3326
  banlist: ['Explosion'],
3216
- unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut'],
3327
+ unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut', 'Swagger'],
3217
3328
  },
3218
3329
  {
3219
3330
  name: "[Gen 4] VGC 2010",
@@ -3261,22 +3372,9 @@ export const Formats: FormatList = [
3261
3372
 
3262
3373
  mod: 'gen3',
3263
3374
  searchShow: false,
3264
- ruleset: ['Standard', 'Deoxys Camouflage Clause'],
3375
+ ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
3265
3376
  banlist: ['Wobbuffet + Leftovers'],
3266
3377
  },
3267
- {
3268
- name: "[Gen 3] UU",
3269
- threads: [
3270
- `&bullet; <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
3271
- `&bullet; <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
3272
- ],
3273
-
3274
- mod: 'gen3',
3275
- searchShow: false,
3276
- ruleset: ['Standard', 'NFE Clause'],
3277
- banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Baton Pass'],
3278
- unbanlist: ['Scyther', 'Sand Veil'],
3279
- },
3280
3378
  {
3281
3379
  name: "[Gen 3] NU",
3282
3380
  threads: [
@@ -3374,7 +3472,10 @@ export const Formats: FormatList = [
3374
3472
  'Picked Team Size = 1', 'Max Team Size = 3',
3375
3473
  '[Gen 2] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
3376
3474
  ],
3377
- banlist: ['Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Destiny Bond', 'Explosion', 'Perish Song', 'Present', 'Self-Destruct'],
3475
+ banlist: [
3476
+ 'Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw',
3477
+ 'Attract', 'Destiny Bond', 'Explosion', 'Perish Song', 'Present', 'Self-Destruct', 'Swagger',
3478
+ ],
3378
3479
  },
3379
3480
  {
3380
3481
  name: "[Gen 2] Nintendo Cup 2000",
@@ -3422,15 +3523,16 @@ export const Formats: FormatList = [
3422
3523
  ruleset: ['Standard'],
3423
3524
  },
3424
3525
  {
3425
- name: "[Gen 1] NU",
3526
+ name: "[Gen 1] UU",
3426
3527
  threads: [
3427
- `&bullet; <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
3528
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3573896/">RBY UU Metagame Discussion</a>`,
3529
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3647713/">RBY UU Viability Rankings</a>`,
3428
3530
  ],
3429
3531
 
3430
3532
  mod: 'gen1',
3431
3533
  searchShow: false,
3432
- ruleset: ['[Gen 1] UU'],
3433
- banlist: ['UU', 'NUBL'],
3534
+ ruleset: ['[Gen 1] OU'],
3535
+ banlist: ['OU', 'UUBL'],
3434
3536
  },
3435
3537
  {
3436
3538
  name: "[Gen 1] Japanese OU",