@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.
Files changed (80) hide show
  1. package/build/config/formats.js +402 -332
  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 +183 -70
  6. package/build/data/formats-data.js.map +1 -1
  7. package/build/data/mods/gen1/formats-data.js +190 -190
  8. package/build/data/mods/gen1/formats-data.js.map +1 -1
  9. package/build/data/mods/gen1/moves.js +1 -2
  10. package/build/data/mods/gen1/moves.js.map +1 -1
  11. package/build/data/mods/gen2/formats-data.js +1 -1
  12. package/build/data/mods/gen2/formats-data.js.map +1 -1
  13. package/build/data/mods/gen3/formats-data.js +13 -13
  14. package/build/data/mods/gen3/formats-data.js.map +1 -1
  15. package/build/data/mods/gen4/moves.js +22 -0
  16. package/build/data/mods/gen4/moves.js.map +1 -1
  17. package/build/data/mods/gen5/formats-data.js +173 -156
  18. package/build/data/mods/gen5/formats-data.js.map +1 -1
  19. package/build/data/mods/gen6/formats-data.js +4 -3
  20. package/build/data/mods/gen6/formats-data.js.map +1 -1
  21. package/build/data/mods/gen7/formats-data.js +3 -2
  22. package/build/data/mods/gen7/formats-data.js.map +1 -1
  23. package/build/data/mods/gen7/moves.js +154 -0
  24. package/build/data/mods/gen7/moves.js.map +1 -1
  25. package/build/data/moves.js +38 -7
  26. package/build/data/moves.js.map +1 -1
  27. package/build/data/pokedex.js +480 -11
  28. package/build/data/pokedex.js.map +1 -1
  29. package/build/data/rulesets.js +12 -1
  30. package/build/data/rulesets.js.map +1 -1
  31. package/build/data/tags.d.ts +1 -0
  32. package/build/data/tags.js +4 -3
  33. package/build/data/tags.js.map +1 -1
  34. package/build/data/text/abilities.js +4 -4
  35. package/build/data/text/abilities.js.map +1 -1
  36. package/build/data/text/moves.js +18 -18
  37. package/build/data/text/moves.js.map +1 -1
  38. package/build/sim/battle-actions.js +4 -1
  39. package/build/sim/battle-actions.js.map +1 -1
  40. package/build/sim/battle.js +23 -22
  41. package/build/sim/battle.js.map +1 -1
  42. package/build/sim/dex-formats.d.ts +1 -0
  43. package/build/sim/dex-formats.js +3 -2
  44. package/build/sim/dex-formats.js.map +1 -1
  45. package/build/sim/dex-species.js +5 -2
  46. package/build/sim/dex-species.js.map +1 -1
  47. package/build/sim/exported-global-types.d.ts +1 -0
  48. package/build/sim/global-types.d.ts +1 -0
  49. package/build/sim/index.d.ts +1 -0
  50. package/build/sim/index.js +3 -1
  51. package/build/sim/index.js.map +1 -1
  52. package/build/sim/team-validator.js +13 -0
  53. package/build/sim/team-validator.js.map +1 -1
  54. package/config/formats.ts +422 -352
  55. package/data/aliases.ts +4 -4
  56. package/data/formats-data.ts +183 -70
  57. package/data/mods/gen1/formats-data.ts +190 -190
  58. package/data/mods/gen1/moves.ts +1 -2
  59. package/data/mods/gen2/formats-data.ts +1 -1
  60. package/data/mods/gen3/formats-data.ts +13 -13
  61. package/data/mods/gen4/moves.ts +21 -0
  62. package/data/mods/gen5/formats-data.ts +173 -156
  63. package/data/mods/gen6/formats-data.ts +4 -3
  64. package/data/mods/gen7/formats-data.ts +3 -2
  65. package/data/mods/gen7/moves.ts +150 -0
  66. package/data/moves.ts +37 -7
  67. package/data/pokedex.ts +480 -11
  68. package/data/rulesets.ts +11 -1
  69. package/data/tags.ts +6 -3
  70. package/data/text/abilities.ts +4 -4
  71. package/data/text/moves.ts +18 -18
  72. package/package.json +2 -2
  73. package/sim/battle-actions.ts +4 -1
  74. package/sim/battle.ts +24 -23
  75. package/sim/dex-formats.ts +4 -1
  76. package/sim/dex-species.ts +5 -2
  77. package/sim/exported-global-types.ts +1 -0
  78. package/sim/global-types.ts +1 -0
  79. package/sim/index.ts +1 -0
  80. package/sim/team-validator.ts +12 -0
@@ -132,7 +132,7 @@ exports.Formats = [
132
132
  ],
133
133
  mod: 'gen8',
134
134
  ruleset: ['[Gen 8] RU'],
135
- banlist: ['RU', 'NUBL', 'Drizzle', 'Drought'],
135
+ banlist: ['RU', 'NUBL', 'Drizzle', 'Drought', 'Slush Rush'],
136
136
  },
137
137
  {
138
138
  name: "[Gen 8] PU",
@@ -193,7 +193,7 @@ exports.Formats = [
193
193
  'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Jirachi',
194
194
  'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mew', 'Mewtwo', 'Mimikyu', 'Necrozma-Dawn-Wings',
195
195
  'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye', 'Snorlax', 'Solgaleo', 'Victini', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
196
- 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Bright Powder', 'Focus Band', 'Focus Sash', 'Lax Incense', 'Quick Claw', 'Perish Song',
196
+ 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Band', 'Focus Sash', 'Lax Incense', 'Quick Claw', 'Perish Song',
197
197
  ],
198
198
  },
199
199
  {
@@ -217,7 +217,7 @@ exports.Formats = [
217
217
  mod: 'gen8',
218
218
  ruleset: ['[Gen 8] PU'],
219
219
  banlist: [
220
- 'PU', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Haunter', 'Magmortar', 'Magneton', 'Omastar', 'Rotom-Frost',
220
+ 'PU', 'Aurorus', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Haunter', 'Magmortar', 'Magneton', 'Omastar', 'Rotom-Frost',
221
221
  'Turtonator', 'Vanilluxe', 'Vikavolt', 'Silvally-Dragon', 'Silvally-Ground', 'Sneasel', 'Damp Rock', 'Grassy Seed',
222
222
  ],
223
223
  },
@@ -264,33 +264,9 @@ exports.Formats = [
264
264
  {
265
265
  name: "[Gen 8] Battle Stadium Singles",
266
266
  mod: 'gen8',
267
- ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'Limit One Restricted'],
267
+ ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'Limit Two Restricted'],
268
268
  restricted: ['Restricted Legendary'],
269
269
  },
270
- {
271
- name: "[Gen 8] Battle Stadium Singles Series 9",
272
- threads: [
273
- `&bullet; <a href="https://www.smogon.com/forums/threads/3679374/">BSS Discussion</a>`,
274
- `&bullet; <a href="https://www.smogon.com/forums/threads/3672698/">BSS Viability Rankings</a>`,
275
- ],
276
- mod: 'gen8',
277
- searchShow: false,
278
- ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
279
- },
280
- {
281
- name: "[Gen 8] Test Your Luck!",
282
- threads: [
283
- `&bullet; <a href="https://www.smogon.com/forums/threads/3695144/">Test Your Luck! Discussion</a>`,
284
- ],
285
- mod: 'gen8',
286
- ruleset: ['Flat Rules', '!! Adjust Level = 50', 'VGC Timer', 'Min Source Gen = 8'],
287
- banlist: ['Azelf', 'Mesprit', 'Uxie'],
288
- onValidateSet(set, format) {
289
- if (set.moves.length !== 1 || this.dex.moves.get(set.moves[0]).id !== 'metronome') {
290
- return [`${set.name || set.species} has illegal moves.`, `(${format.name} only allows the move Metronome)`];
291
- }
292
- },
293
- },
294
270
  {
295
271
  name: "[Gen 8] Custom Game",
296
272
  mod: 'gen8',
@@ -363,19 +339,7 @@ exports.Formats = [
363
339
  restricted: ['Restricted Legendary'],
364
340
  },
365
341
  {
366
- name: "[Gen 8] VGC 2021 Series 11",
367
- threads: [
368
- `&bullet; <a href="https://www.smogon.com/forums/threads/3677186/">VGC 2021 Series 11 Metagame Discussion</a>`,
369
- `&bullet; <a href="https://www.smogon.com/forums/threads/3693427/">VGC 2021 Series 11 Sample Teams</a>`,
370
- `&bullet; <a href="https://www.smogon.com/forums/threads/3693284/">VGC 2021 Series 11 Viability Rankings</a>`,
371
- ],
372
- mod: 'gen8',
373
- gameType: 'doubles',
374
- ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit One Restricted'],
375
- restricted: ['Restricted Legendary'],
376
- },
377
- {
378
- name: "[Gen 8] VGC 2021 Series 9",
342
+ name: "[Gen 8] VGC 2021",
379
343
  mod: 'gen8',
380
344
  gameType: 'doubles',
381
345
  searchShow: false,
@@ -473,13 +437,15 @@ exports.Formats = [
473
437
  mod: 'gen8',
474
438
  ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
475
439
  banlist: [
476
- 'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darkrai', 'Darmanitan-Galar',
477
- 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Genesect', 'Gengar-Mega', 'Giratina',
478
- 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lucario-Mega',
479
- 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Metagross-Mega', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
480
- 'Necrozma-Ultra', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Tornadus-Therian',
481
- 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Zygarde-Complete',
482
- 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Quick Claw', 'Baton Pass',
440
+ 'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darkrai',
441
+ 'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus',
442
+ 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black',
443
+ 'Kyurem-White', 'Landorus-Base', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Metagross-Mega', 'Mewtwo',
444
+ 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
445
+ 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian',
446
+ 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Zygarde-Complete', 'Arena Trap', 'Moody',
447
+ 'Power Construct', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Razor Fang',
448
+ 'Quick Claw', 'Baton Pass',
483
449
  ],
484
450
  },
485
451
  {
@@ -501,12 +467,14 @@ exports.Formats = [
501
467
  'Drizzle', 'Drought',
502
468
  // Slowbronite is banned so it doesn't validate on Galarian Slowbro
503
469
  'Slowbronite',
470
+ // NatDex suspect
471
+ 'Tornadus-Therian',
504
472
  ],
505
473
  // Used to distinguish UU from below UU in the client
506
474
  restricted: [
507
475
  'Aegislash', 'Alakazam-Base', 'Altaria-Mega', 'Amoonguss', 'Beedrill-Mega', 'Blaziken-Base', 'Breloom', 'Celesteela',
508
476
  'Chandelure', 'Donphan', 'Dracozolt', 'Dragonite', 'Feraligatr', 'Gastrodon', 'Hatterene', 'Hippowdon', 'Infernape',
509
- 'Keldeo', 'Krookodile', 'Mamoswine', 'Mandibuzz', 'Manectric-Mega', 'Medicham-Mega', 'Melmetal', 'Mienshao', 'Moltres-Base',
477
+ 'Keldeo', 'Krookodile', 'Mamoswine', 'Mandibuzz', 'Manectric-Mega', 'Melmetal', 'Mienshao', 'Moltres-Base',
510
478
  'Nidoking', 'Nidoqueen', 'Nihilego', 'Quagsire', 'Regieleki', 'Ribombee', 'Rotom-Heat', 'Rotom-Wash', 'Salamence',
511
479
  'Scizor', 'Skarmory', 'Slowking-Base', 'Swampert-Base', 'Talonflame', 'Tangrowth', 'Tornadus-Base', 'Umbreon',
512
480
  'Urshifu-Rapid-Strike',
@@ -545,33 +513,60 @@ exports.Formats = [
545
513
  section: "Pet Mods",
546
514
  },
547
515
  {
548
- name: "[Gen 8] Fusion Evolution UU",
516
+ name: "[Gen 8] Alternatium",
517
+ desc: `A metagame made up of only Pok&eacute;mon with alternate forms, with all of them being separate and unique.`,
549
518
  threads: [
550
- `&bullet; <a href="https://www.smogon.com/forums/threads/3674163/">Fusion Evolution UU</a>`,
519
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3683767/">Alternatium</a>`,
520
+ `&bullet; <a href="https://docs.google.com/spreadsheets/d/1bvvkPg1CrUBJFJJeuwkts8elfJcEcahGOoHm-vGBXOI/edit?usp=sharing">Spreadsheet</a>`,
551
521
  ],
552
- mod: "fusionevolutionuu",
553
- searchShow: false,
554
- ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod', 'Z-Move Clause', 'Data Mod', 'Mega Data Mod'],
555
- banlist: [
556
- 'All Pokemon', 'Lopunnite', 'Tapu Lop-Mega', 'Red Orb', 'Grousle-Primal',
522
+ mod: 'alternatium',
523
+ ruleset: ['Standard NatDex', 'Z-Move Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
524
+ banlist: ['All Pokemon', 'Past'],
525
+ unbanlist: [
526
+ 'Silvally', 'Silvally-Bug', 'Silvally-Dark', 'Silvally-Dragon', 'Silvally-Electric', 'Silvally-Fairy', 'Silvally-Fighting', 'Silvally-Fire', 'Silvally-Flying', 'Silvally-Ghost',
527
+ 'Silvally-Grass', 'Silvally-Ground', 'Silvally-Ice', 'Silvally-Poison', 'Silvally-Psychic', 'Silvally-Rock', 'Silvally-Steel', 'Silvally-Water', 'Pikachu', 'Pikachu-Rock-Star',
528
+ 'Pikachu-Belle', 'Pikachu-Idol', 'Pikachu-PhD', 'Pikachu-Libre', 'Pikachu-Partner', 'Pikachu-Starter', 'Darmanitan', 'Darmanitan-Zen', 'Darmanitan-Galar', 'Darmanitan-Galar-Zen',
529
+ 'Aegishield', 'Aegislash', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Rotom', 'Rotom-Heat', 'Rotom-Wash', 'Rotom-Frost', 'Rotom-Fan', 'Rotom-Mow', 'Dugtrio',
530
+ 'Dugtrio-Alola', 'Muk', 'Muk-Oilslick', 'Slowbro', 'Slowbro-Galar', 'Slowking', 'Slowking-Galar', 'Tornadus', 'Cummulus', 'Thundurus', 'Thundurus-Therian', 'Landorus', 'Landorus-Bengal',
531
+ 'Vivillon-Fancy', 'Vivillon', 'Vivillon-Pokeball', 'Genesect', 'Genesect-Password', 'Genesect-Molten', 'Genesect-Freezer', 'Genesect-Type-Delta', 'Groudon', 'Groudon-Primal', 'Kyogre',
532
+ 'Kyogre-Primal', 'Deoxys-Wood', 'Deoxys-Gem', 'Deoxys-Tank', 'Deoxys-Speed', 'Sandslash-Lustrous', 'Sandslash-Alola', 'Ninetales-Steamwork', 'Ninetales-Alola', 'Giratina', 'Giratina-Shadow',
533
+ 'Eternatus', 'Manustorm', 'Exeggutor', 'Exeggutor-Lighthouse', 'Weezing', 'Weezing-King', 'Raticate', 'Raticate-Alola', 'Linoone', 'Linoone-Punk', 'Catastroform', 'Castform-Firestorm',
534
+ 'Castform-Thunderstorm', 'Castform-Snowy', 'Wormadam', 'Wormadam-Sandy', 'Fibormadam', 'Farfetch\u2019d', 'Farfetch\u2019d-Galar', 'Corsola', 'Corsoul', 'Shaymin', 'Shaymin-Sky', 'Keldeo',
535
+ 'Swordeo', 'Meloetta', 'Meloetta-Fighter', 'Lycanday', 'Lycanroc-Spectre', 'Lycanroc-Dusk', 'Gourgeist', 'Gourgeist-Fae', 'Gourgeist-Pulpy', 'Supergeist', 'Cramorant', 'Cramorant-Swimmer',
536
+ 'Cramorant-Gorging', 'Eiscue', 'Eiscue-Noice', 'Mimikyu', 'Mimikyu-Sparkstone', 'Morpeko-Marsh', 'Morvilant', 'Zygarde-Wyrm', 'Zygarde-Canid', 'Zygarde-Goliath',
537
+ ],
538
+ onValidateTeam(team, format) {
539
+ const speciesTable = new Set();
540
+ for (const set of team) {
541
+ const species = this.dex.species.get(set.species);
542
+ if (speciesTable.has(species.id)) {
543
+ return [
544
+ `You are limited to one of each Pokémon by Species Clause (except for different formes).`,
545
+ `(You have more than one ${species.id}.)`,
546
+ ];
547
+ }
548
+ speciesTable.add(species.id);
549
+ }
550
+ },
551
+ },
552
+ {
553
+ name: "[Gen 8] Random Dex",
554
+ desc: `A micrometagame project consisting of 80 randomly selected fully-evolved Pok&eacute;mon.`,
555
+ threads: [
556
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3690182/">Random Dex</a>`,
557
557
  ],
558
+ mod: 'randomdex',
559
+ ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
560
+ banlist: ['All Pokemon', 'Past', 'Arena Trap', 'Moody', 'Shadow Tag', 'Baton Pass', 'Bright Powder', 'Lax Incense', 'King\'s Rock', 'Razor Fang', 'Kangaskhanite', 'Medichamite', 'Kommonium Z'],
558
561
  unbanlist: [
559
- 'Volquag', 'Toxalure', 'Kingtsar', 'Tanette', 'Slowton',
560
- 'Flaant', 'Umbat', 'Chomplim', 'Chomplim-Mega', 'Xotalion', 'Miemie', 'Dusking', 'Jelliswine',
561
- 'Pigapult', 'Lycanserker-Dusk', 'Tapu Lop', 'Dragontler', 'Eternabat',
562
- 'Grimmlurk', 'Manicuno-Galar', 'Yacian-Crowned', 'Cryogolem', 'Stoudrago',
563
- 'Grousle', 'Dongoro', 'Slurpum',
564
- 'Corveot', 'Corveot-Mega', 'Igglyzenta-Crowned', 'Arctres-Galar', 'Garborude', 'Noicity', 'Ferros',
565
- 'Landmaldo-Therian', 'Tentoxys-Defense', 'Strikados-Galar', 'Hooporant',
566
- 'Silvino-Bug', 'Silvino-Dark', 'Silvino-Dragon', 'Silvino-Electric', 'Silvino-Fairy', 'Silvino-Fighting',
567
- 'Silvino-Fire', 'Silvino-Flying', 'Silvino-Ghost', 'Silvino-Grass', 'Silvino-Ground', 'Silvino-Ice',
568
- 'Silvino-Poison', 'Silvino-Psychic', 'Silvino-Rock', 'Silvino-Steel', 'Silvino-Water', 'Silvino',
569
- 'Silvino-Bug-Mega', 'Silvino-Dark-Mega', 'Silvino-Dragon-Mega',
570
- 'Silvino-Electric-Mega', 'Silvino-Fairy-Mega', 'Silvino-Fighting-Mega',
571
- 'Silvino-Fire-Mega', 'Silvino-Flying-Mega', 'Silvino-Ghost-Mega',
572
- 'Silvino-Grass-Mega', 'Silvino-Ground-Mega', 'Silvino-Ice-Mega',
573
- 'Silvino-Poison-Mega', 'Silvino-Psychic-Mega', 'Silvino-Rock-Mega',
574
- 'Silvino-Steel-Mega', 'Silvino-Water-Mega', 'Silvino-Mega',
562
+ 'Absol', 'Absol-Mega', 'Appletun', 'Articuno', 'Aurorus', 'Basculin', 'Beartic', 'Bisharp', 'Calyrex', 'Camerupt', 'Camerupt-Mega',
563
+ 'Celesteela', 'Cloyster', 'Crawdaunt', 'Cursola', 'Dedenne', 'Delibird', 'Eelektross', 'Espeon', 'Flapple', 'Flareon', 'Flygon',
564
+ 'Galvantula', 'Girafarig', 'Glaceon', 'Goodra', 'Gourgeist', 'Grimmsnarl', 'Guzzlord', 'Heliolisk', 'Hitmonchan', 'Hitmonlee',
565
+ 'Hitmontop', 'Incineroar', 'Indeedee', 'Jolteon', 'Kangaskhan', 'Kommo-o', 'Lanturn', 'Leafeon', 'Leavanny', 'Ludicolo', 'Lunatone',
566
+ 'Luvdisc', 'Machamp', 'Mandibuzz', 'Medicham', 'Nihilego', 'Palossand', 'Pidgeot', 'Pidgeot-Mega', 'Probopass', 'Pyroar', 'Sawk',
567
+ 'Sceptile', 'Sceptile-Mega', 'Scolipede', 'Shiftry', 'Simisage', 'Slowbro', 'Slowbro-Mega', 'Slowking', 'Swoobat', 'Sylveon',
568
+ 'Tapu Bulu', 'Tapu Fini', 'Tauros', 'Typhlosion', 'Umbreon', 'Ursaring', 'Vaporeon', 'Whiscash', 'Wishiwashi', 'Zebstrika', 'Absolite',
569
+ 'Pidgeotite', 'Sceptilite', 'Cameruptite', 'Slowbronite',
575
570
  ],
576
571
  },
577
572
  {
@@ -592,80 +587,134 @@ exports.Formats = [
592
587
  column: 2,
593
588
  },
594
589
  {
595
- name: "[Gen 8] Pokebilities",
596
- desc: `Pok&eacute;mon have all of their released abilities simultaneously.`,
590
+ name: "[Gen 8] Trademarked",
591
+ desc: `Sacrifice your Pok&eacute;mon's ability for a status move that activates on switch-in.`,
597
592
  threads: [
598
- `&bullet; <a href="https://www.smogon.com/forums/threads/3679692/">Pok&eacute;bilities</a>`,
593
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3656980/">Trademarked</a>`,
599
594
  ],
600
- mod: 'pokebilities',
595
+ mod: 'gen8',
596
+ // searchShow: false,
601
597
  ruleset: ['Standard', 'Dynamax Clause'],
602
598
  banlist: [
603
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Excadrill',
604
- 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base',
605
- 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
606
- 'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian',
607
- 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zygarde-Base', 'Power Construct', 'Baton Pass',
608
- // Moody users
609
- 'Glalie', 'Octillery', 'Remoraid', 'Snorunt',
610
- // Shadow Tag/Arena Trap
611
- 'Diglett-Base', 'Dugtrio-Base', 'Gothita', 'Gothitelle', 'Gothorita', 'Trapinch', 'Wobbuffet', 'Wynaut',
599
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Kyurem-Black', 'Kyurem-White',
600
+ 'Giratina', 'Giratina-Origin', 'Genesect', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Lugia', 'Lunala', 'Magearna', 'Marowak-Alola',
601
+ 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza',
602
+ 'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
603
+ 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Moody', 'Neutralizing Gas', 'Power Construct', 'Shadow Tag', 'Baton Pass',
612
604
  ],
613
- onBegin() {
614
- for (const pokemon of this.getAllPokemon()) {
615
- if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
616
- continue;
605
+ restricted: [
606
+ 'Baneful Bunker', 'Block', 'Copycat', 'Corrosive Gas', 'Detect', 'Destiny Bond', 'Disable', 'Encore', 'Fairy Lock', 'Hypnosis', 'Ingrain',
607
+ 'Instruct', 'Lovely Kiss', 'King\'s Shield', 'Mat Block', 'Mean Look', 'Memento', 'move:Metronome', 'Obstruct', 'Octolock', 'Nature Power',
608
+ 'Parting Shot', 'Psycho Shift', 'Protect', 'Roar', 'Sing', 'Skill Swap', 'Sleep Powder', 'Sleep Talk', 'Spiky Shield', 'Spore', 'Substitute',
609
+ 'Teleport', 'Whirlwind', 'Wish', 'Yawn',
610
+ ],
611
+ onValidateTeam(team, format, teamHas) {
612
+ const problems = [];
613
+ for (const trademark in teamHas.trademarks) {
614
+ if (teamHas.trademarks[trademark] > 1) {
615
+ problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks[trademark]} Pok\u00e9mon with ${trademark} as a Trademark.)`);
617
616
  }
618
- pokemon.m.innates = Object.keys(pokemon.species.abilities)
619
- .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
620
- .map(key => this.toID(pokemon.species.abilities[key]))
621
- .filter(ability => ability !== pokemon.ability);
622
617
  }
618
+ return problems;
623
619
  },
624
- onSwitchInPriority: 2,
625
- onSwitchIn(pokemon) {
626
- if (pokemon.m.innates) {
627
- for (const innate of pokemon.m.innates) {
628
- pokemon.addVolatile("ability:" + innate, pokemon);
629
- }
620
+ validateSet(set, teamHas) {
621
+ const dex = this.dex;
622
+ const ability = dex.moves.get(set.ability);
623
+ if (!ability.exists) { // Not even a real move
624
+ return this.validateSet(set, teamHas);
630
625
  }
631
- },
632
- onAfterMega(pokemon) {
633
- for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
634
- pokemon.removeVolatile(innate);
626
+ // Absolute trademark bans
627
+ if (ability.category !== 'Status') {
628
+ return [`${ability.name} is not a status move, and cannot be used as a trademark.`];
635
629
  }
636
- pokemon.m.innates = undefined;
630
+ if (ability.forceSwitch || ability.selfSwitch) {
631
+ return [
632
+ `Force-switching and self-switching moves are banned from being used as trademarks.`,
633
+ `(${ability.name} is a ${ability.forceSwitch ? 'force' : 'self'}-switching move.)`,
634
+ ];
635
+ }
636
+ const irrevokablyRestricted = [
637
+ 'Assist', 'Copycat', 'Metronome', 'Mirror Move', 'Sleep Talk',
638
+ 'Skill Swap', // Self-propagates indefinitely
639
+ ];
640
+ if (irrevokablyRestricted.includes(ability.name)) {
641
+ return [`${ability.name} cannot safely function as a trademark.`];
642
+ }
643
+ // Contingent trademark bans
644
+ if (this.ruleTable.isRestricted(`move:${ability.id}`)) {
645
+ return [`${ability.name} is restricted from being used as a trademark.`];
646
+ }
647
+ if (set.moves.map(this.toID).includes(ability.id)) {
648
+ return [`${set.name} may not use ${ability.name} as both a trademark and one of its moves simultaneously.`];
649
+ }
650
+ const customRules = this.format.customRules || [];
651
+ if (!customRules.includes('!obtainableabilities'))
652
+ customRules.push('!obtainableabilities');
653
+ const TeamValidator = require('../sim/team-validator').TeamValidator;
654
+ const validator = new TeamValidator(dex.formats.get(`${this.format.id}@@@${customRules.join(',')}`));
655
+ const moves = set.moves;
656
+ set.moves = [ability.id];
657
+ set.ability = dex.species.get(set.species).abilities['0'];
658
+ let problems = validator.validateSet(set, {}) || [];
659
+ if (problems.length)
660
+ return problems;
661
+ set.moves = moves;
662
+ set.ability = dex.species.get(set.species).abilities['0'];
663
+ problems = problems.concat(validator.validateSet(set, teamHas) || []);
664
+ set.ability = ability.id;
665
+ if (!teamHas.trademarks)
666
+ teamHas.trademarks = {};
667
+ teamHas.trademarks[ability.name] = (teamHas.trademarks[ability.name] || 0) + 1;
668
+ return problems.length ? problems : null;
669
+ },
670
+ pokemon: {
671
+ getAbility() {
672
+ const move = this.battle.dex.moves.get(this.battle.toID(this.ability));
673
+ if (!move.exists)
674
+ return Object.getPrototypeOf(this).getAbility.call(this);
675
+ return {
676
+ id: move.id,
677
+ name: move.name,
678
+ onStart(pokemon) {
679
+ this.add('-activate', pokemon, 'ability: ' + move.name);
680
+ this.actions.useMove(move, pokemon);
681
+ },
682
+ toString() {
683
+ return "";
684
+ },
685
+ };
686
+ },
637
687
  },
638
688
  },
639
689
  {
640
- name: "[Gen 8] Camomons",
641
- desc: `Pok&eacute;mon change type to match their first two moves.`,
690
+ name: "[Gen 8] Linked",
691
+ desc: `The first two moves in a Pok&eacute;mon's moveset are used simultaneously.`,
642
692
  threads: [
643
- `&bullet; <a href="https://www.smogon.com/forums/threads/3656413/">Camomons</a>`,
693
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3660421/">Linked</a>`,
644
694
  ],
645
- mod: 'gen8',
646
- // searchShow: false,
647
- 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'],
695
+ mod: 'linked',
696
+ ruleset: ['Standard', 'Dynamax Clause'],
648
697
  banlist: [
649
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin',
650
- 'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Latias', 'Latios', 'Lugia',
651
- 'Lunala', 'Marshadow', 'Mew', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
652
- 'Reuniclus', 'Shedinja', 'Slowking-Galar', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Volcarona', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
653
- 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
698
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Cloyster', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
699
+ 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna',
700
+ 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo',
701
+ 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base',
702
+ 'Zygarde-Complete', 'Arena Trap', 'Chlorophyll', 'Moody', 'Power Construct', 'Sand Rush', 'Sand Veil', 'Shadow Tag', 'Slush Rush', 'Snow Cloak',
703
+ 'Surge Surfer', 'Swift Swim', 'Unburden', 'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Baton Pass',
654
704
  ],
655
- onModifySpeciesPriority: 2,
656
- onModifySpecies(species, target, source, effect) {
657
- if (!target)
658
- return; // Chat command
659
- if (effect && ['imposter', 'transform'].includes(effect.id))
660
- return;
661
- const types = [...new Set(target.baseMoveSlots.slice(0, 2).map(move => this.dex.moves.get(move.id).type))];
662
- return { ...species, types: types };
663
- },
664
- onSwitchIn(pokemon) {
665
- this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
666
- },
667
- onAfterMega(pokemon) {
668
- this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
705
+ restricted: [
706
+ 'Baneful Bunker', 'Bounce', 'Protect', 'Detect', 'Dig', 'Dive', 'Fly', 'King\'s Shield', 'Nature\'s Madness', 'Night Shade',
707
+ 'Obstruct', 'Phantom Force', 'Seismic Toss', 'Shadow Force', 'Sky Drop', 'Spiky Shield', 'Super Fang', 'Trick Room',
708
+ ],
709
+ onValidateSet(set) {
710
+ const problems = [];
711
+ for (const [i, moveid] of set.moves.entries()) {
712
+ const move = this.dex.moves.get(moveid);
713
+ if ([0, 1].includes(i) && this.ruleTable.isRestricted(`move:${move.id}`)) {
714
+ problems.push(`${set.name || set.species}'s move ${move.name} cannot be linked.`);
715
+ }
716
+ }
717
+ return problems;
669
718
  },
670
719
  },
671
720
  // Other Metagames
@@ -710,6 +759,34 @@ exports.Formats = [
710
759
  }
711
760
  },
712
761
  },
762
+ {
763
+ name: "[Gen 8] Almost Any Ability",
764
+ desc: `Pok&eacute;mon have access to almost any ability.`,
765
+ threads: [
766
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3656414/">Almost Any Ability</a>`,
767
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3682690/">AAA Resources</a>`,
768
+ ],
769
+ mod: 'gen8',
770
+ 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'],
771
+ banlist: [
772
+ 'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Gengar', 'Giratina',
773
+ 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow',
774
+ 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja',
775
+ 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom',
776
+ 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter',
777
+ 'Innards Out', 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag',
778
+ 'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
779
+ ],
780
+ onValidateSet(set) {
781
+ // Temporary fix until battle-only is implemented properly
782
+ if (this.toID(set.species) === 'zamazentacrowned' && this.toID(set.ability) !== 'dauntlessshield') {
783
+ return [`Zamazenta-Crowned can only use Dauntless Shield because it is a battle-only forme.`];
784
+ }
785
+ if (this.toID(set.species) === 'zaciancrowned' && this.toID(set.ability) !== 'intrepidsword') {
786
+ return [`Zacian-Crowned can only use Intrepid Sword because it is a battle-only forme.`];
787
+ }
788
+ },
789
+ },
713
790
  {
714
791
  name: "[Gen 8] Mix and Mega",
715
792
  desc: `Mega evolve any Pok&eacute;mon with any mega stone and no limit. Boosts based on mega evolution from gen 7.`,
@@ -727,7 +804,8 @@ exports.Formats = [
727
804
  restricted: [
728
805
  'Calyrex-Ice', 'Dialga', 'Eternatus', 'Gengar', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyurem-Black', 'Kyurem-White',
729
806
  'Lugia', 'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
730
- 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zekrom', 'Zygarde-Complete',
807
+ 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu', 'Urshifu-Rapid-Strike', 'Xerneas',
808
+ 'Yveltal', 'Zekrom', 'Zygarde-Complete',
731
809
  ],
732
810
  onValidateTeam(team) {
733
811
  const itemTable = new Set();
@@ -772,49 +850,23 @@ exports.Formats = [
772
850
  }
773
851
  },
774
852
  },
775
- {
776
- name: "[Gen 8] Almost Any Ability",
777
- desc: `Pok&eacute;mon have access to almost any ability.`,
778
- threads: [
779
- `&bullet; <a href="https://www.smogon.com/forums/threads/3656414/">Almost Any Ability</a>`,
780
- `&bullet; <a href="https://www.smogon.com/forums/threads/3682690/">AAA Resources</a>`,
781
- ],
782
- mod: 'gen8',
783
- 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'],
784
- banlist: [
785
- 'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Gengar', 'Giratina',
786
- 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow',
787
- 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja',
788
- 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom',
789
- 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter',
790
- 'Innards Out', 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Power Construct', 'Protean', 'Pure Power',
791
- 'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
792
- ],
793
- onValidateSet(set) {
794
- // Temporary fix until battle-only is implemented properly
795
- if (this.toID(set.species) === 'zamazentacrowned' && this.toID(set.ability) !== 'dauntlessshield') {
796
- return [`Zamazenta-Crowned can only use Dauntless Shield because it is a battle-only forme.`];
797
- }
798
- if (this.toID(set.species) === 'zaciancrowned' && this.toID(set.ability) !== 'intrepidsword') {
799
- return [`Zacian-Crowned can only use Intrepid Sword because it is a battle-only forme.`];
800
- }
801
- },
802
- },
803
853
  {
804
854
  name: "[Gen 8] STABmons",
805
855
  desc: `Pok&eacute;mon can use any move of their typing, in addition to the moves they can normally learn.`,
806
856
  threads: [
807
857
  `&bullet; <a href="https://www.smogon.com/forums/threads/3656429/">STABmons</a>`,
858
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3695169/">STABmons Resources</a>`,
808
859
  ],
809
860
  mod: 'gen8',
810
- ruleset: ['Standard', 'STABmons Move Legality', 'Dynamax Clause', 'Sleep Moves Clause'],
861
+ ruleset: ['Standard', 'STABmons Move Legality', 'Dynamax Clause', 'Sleep Moves Clause', '!Sleep Clause Mod'],
811
862
  banlist: [
812
- 'Aegislash', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Genesect',
813
- 'Garchomp', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus', 'Landorus-Therian',
814
- 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Porygon-Z',
815
- 'Rayquaza', 'Reshiram', 'Silvally', 'Solgaleo', 'Spectrier', 'Tapu Bulu', 'Tapu Koko', 'Thundurus-Base', 'Urshifu-Base', 'Xerneas', 'Yveltal',
816
- 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zapdos-Galar', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody',
817
- 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
863
+ 'Aegislash', 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite',
864
+ 'Eternatus', 'Genesect', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black',
865
+ 'Kyurem-White', 'Landorus', 'Landorus-Therian', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings',
866
+ 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Silvally', 'Solgaleo', 'Spectrier', 'Tapu Bulu',
867
+ 'Tapu Koko', 'Thundurus-Base', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
868
+ 'Zapdos-Galar', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock',
869
+ 'Baton Pass',
818
870
  ],
819
871
  restricted: [
820
872
  'Acupressure', 'Astral Barrage', 'Belly Drum', 'Bolt Beak', 'Clangorous Soul', 'Double Iron Bash', 'Electrify', 'Extreme Speed', 'Fishious Rend',
@@ -846,7 +898,7 @@ exports.Formats = [
846
898
  banlist: [
847
899
  'Blissey', 'Calyrex-Shadow', 'Chansey', 'Dragapult', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Pikachu', 'Toxapex',
848
900
  'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power', 'Moody', 'Pure Power',
849
- 'Shadow Tag', 'Baton Pass',
901
+ 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Baton Pass',
850
902
  ],
851
903
  onValidateTeam(team) {
852
904
  const gods = new Set();
@@ -928,7 +980,8 @@ exports.Formats = [
928
980
  name: "[Gen 8 BDSP] OU",
929
981
  threads: [
930
982
  `&bullet; <a href="https://www.smogon.com/forums/threads/3693629/">BDSP OU Metagame Discussion</a>`,
931
- `&bullet; <a href="https://www.smogon.com/forums/threads/3693620/">BDSP OU Viability List</a>`,
983
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3693721/">BDSP OU Sample Teams</a>`,
984
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3696088/">BDSP OU Viability Rankings</a>`,
932
985
  ],
933
986
  mod: 'gen8bdsp',
934
987
  ruleset: ['Standard'],
@@ -957,9 +1010,31 @@ exports.Formats = [
957
1010
  },
958
1011
  {
959
1012
  name: "[Gen 8 BDSP] RU",
1013
+ threads: [
1014
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3695563/">BDSP RU</a>`,
1015
+ ],
960
1016
  mod: 'gen8bdsp',
961
1017
  ruleset: ['[Gen 8 BDSP] UU'],
962
- banlist: ['UU', 'RUBL'],
1018
+ banlist: ['UU', 'RUBL', 'Drought'],
1019
+ },
1020
+ {
1021
+ name: "[Gen 8 BDSP] NU",
1022
+ threads: [
1023
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3697080/">BDSP NU</a>`,
1024
+ ],
1025
+ mod: 'gen8bdsp',
1026
+ searchShow: false,
1027
+ ruleset: ['[Gen 8 BDSP] RU'],
1028
+ banlist: ['RU', 'NUBL'],
1029
+ },
1030
+ {
1031
+ name: "[Gen 8 BDSP] LC",
1032
+ threads: [
1033
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3696004/">BDSP LC</a>`,
1034
+ ],
1035
+ mod: 'gen8bdsp',
1036
+ ruleset: ['Little Cup', 'Standard'],
1037
+ banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Moody', 'Baton Pass'],
963
1038
  },
964
1039
  {
965
1040
  name: "[Gen 8 BDSP] Monotype",
@@ -1023,6 +1098,38 @@ exports.Formats = [
1023
1098
  section: "Challengeable OMs",
1024
1099
  column: 2,
1025
1100
  },
1101
+ {
1102
+ name: "[Gen 8] Camomons",
1103
+ desc: `Pok&eacute;mon change type to match their first two moves.`,
1104
+ threads: [
1105
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3656413/">Camomons</a>`,
1106
+ ],
1107
+ mod: 'gen8',
1108
+ searchShow: false,
1109
+ 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'],
1110
+ banlist: [
1111
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin',
1112
+ 'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Latias', 'Latios', 'Lugia',
1113
+ 'Lunala', 'Marshadow', 'Mew', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
1114
+ 'Reuniclus', 'Shedinja', 'Slowking-Galar', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Volcarona', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
1115
+ 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
1116
+ ],
1117
+ onModifySpeciesPriority: 2,
1118
+ onModifySpecies(species, target, source, effect) {
1119
+ if (!target)
1120
+ return; // Chat command
1121
+ if (effect && ['imposter', 'transform'].includes(effect.id))
1122
+ return;
1123
+ const types = [...new Set(target.baseMoveSlots.slice(0, 2).map(move => this.dex.moves.get(move.id).type))];
1124
+ return { ...species, types: types };
1125
+ },
1126
+ onSwitchIn(pokemon) {
1127
+ this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
1128
+ },
1129
+ onAfterMega(pokemon) {
1130
+ this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
1131
+ },
1132
+ },
1026
1133
  {
1027
1134
  name: "[Gen 8] Inheritance",
1028
1135
  desc: `Pok&eacute;mon may use the ability and moves of another, as long as they forfeit their own learnset.`,
@@ -1471,6 +1578,53 @@ exports.Formats = [
1471
1578
  },
1472
1579
  },
1473
1580
  },
1581
+ {
1582
+ name: "[Gen 8] Pokebilities",
1583
+ desc: `Pok&eacute;mon have all of their released abilities simultaneously.`,
1584
+ threads: [
1585
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3679692/">Pok&eacute;bilities</a>`,
1586
+ ],
1587
+ mod: 'pokebilities',
1588
+ searchShow: false,
1589
+ ruleset: ['Standard', 'Dynamax Clause'],
1590
+ banlist: [
1591
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Conkeldurr', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dracozolt',
1592
+ 'Eternatus', 'Excadrill', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
1593
+ 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings',
1594
+ 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base',
1595
+ 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zygarde-Base', 'Power Construct',
1596
+ 'Baton Pass', 'King\'s Rock',
1597
+ // Moody users
1598
+ 'Glalie', 'Octillery', 'Remoraid', 'Snorunt',
1599
+ // Shadow Tag/Arena Trap
1600
+ 'Diglett-Base', 'Dugtrio-Base', 'Gothita', 'Gothitelle', 'Gothorita', 'Trapinch', 'Wobbuffet', 'Wynaut',
1601
+ ],
1602
+ onBegin() {
1603
+ for (const pokemon of this.getAllPokemon()) {
1604
+ if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
1605
+ continue;
1606
+ }
1607
+ pokemon.m.innates = Object.keys(pokemon.species.abilities)
1608
+ .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
1609
+ .map(key => this.toID(pokemon.species.abilities[key]))
1610
+ .filter(ability => ability !== pokemon.ability);
1611
+ }
1612
+ },
1613
+ onSwitchInPriority: 2,
1614
+ onSwitchIn(pokemon) {
1615
+ if (pokemon.m.innates) {
1616
+ for (const innate of pokemon.m.innates) {
1617
+ pokemon.addVolatile("ability:" + innate, pokemon);
1618
+ }
1619
+ }
1620
+ },
1621
+ onAfterMega(pokemon) {
1622
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
1623
+ pokemon.removeVolatile(innate);
1624
+ }
1625
+ pokemon.m.innates = undefined;
1626
+ },
1627
+ },
1474
1628
  {
1475
1629
  name: "[Gen 8] Shared Power",
1476
1630
  desc: `Once a Pok&eacute;mon switches in, its ability is shared with the rest of the team.`,
@@ -1657,106 +1811,6 @@ exports.Formats = [
1657
1811
  },
1658
1812
  },
1659
1813
  },
1660
- {
1661
- name: "[Gen 8] Trademarked",
1662
- desc: `Sacrifice your Pok&eacute;mon's ability for a status move that activates on switch-in.`,
1663
- threads: [
1664
- `&bullet; <a href="https://www.smogon.com/forums/threads/3656980/">Trademarked</a>`,
1665
- ],
1666
- mod: 'gen8',
1667
- searchShow: false,
1668
- ruleset: ['Standard', 'Dynamax Clause'],
1669
- banlist: [
1670
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Kyurem-Black', 'Kyurem-White',
1671
- 'Giratina', 'Giratina-Origin', 'Genesect', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Lugia', 'Lunala', 'Magearna', 'Marshadow',
1672
- 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
1673
- 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base',
1674
- 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
1675
- ],
1676
- restricted: [
1677
- 'Baneful Bunker', 'Block', 'Copycat', 'Corrosive Gas', 'Detect', 'Destiny Bond', 'Disable', 'Encore', 'Fairy Lock', 'Hypnosis', 'Ingrain',
1678
- 'Instruct', 'Lovely Kiss', 'King\'s Shield', 'Mat Block', 'Mean Look', 'move:Metronome', 'Obstruct', 'Octolock', 'Nature Power', 'Parting Shot',
1679
- 'Psycho Shift', 'Protect', 'Roar', 'Sing', 'Skill Swap', 'Sleep Powder', 'Sleep Talk', 'Spiky Shield', 'Spore', 'Substitute', 'Teleport',
1680
- 'Whirlwind', 'Wish', 'Yawn',
1681
- ],
1682
- onValidateTeam(team, format, teamHas) {
1683
- const problems = [];
1684
- for (const trademark in teamHas.trademarks) {
1685
- if (teamHas.trademarks[trademark] > 1) {
1686
- problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks[trademark]} Pok\u00e9mon with ${trademark} as a Trademark.)`);
1687
- }
1688
- }
1689
- return problems;
1690
- },
1691
- validateSet(set, teamHas) {
1692
- const dex = this.dex;
1693
- const ability = dex.moves.get(set.ability);
1694
- if (!ability.exists) { // Not even a real move
1695
- return this.validateSet(set, teamHas);
1696
- }
1697
- // Absolute trademark bans
1698
- if (ability.category !== 'Status') {
1699
- return [`${ability.name} is not a status move, and cannot be used as a trademark.`];
1700
- }
1701
- if (ability.forceSwitch || ability.selfSwitch) {
1702
- return [
1703
- `Force-switching and self-switching moves are banned from being used as trademarks.`,
1704
- `(${ability.name} is a ${ability.forceSwitch ? 'force' : 'self'}-switching move.)`,
1705
- ];
1706
- }
1707
- const irrevokablyRestricted = [
1708
- 'Assist', 'Copycat', 'Metronome', 'Mirror Move', 'Sleep Talk',
1709
- 'Skill Swap', // Self-propagates indefinitely
1710
- ];
1711
- if (irrevokablyRestricted.includes(ability.name)) {
1712
- return [`${ability.name} cannot safely function as a trademark.`];
1713
- }
1714
- // Contingent trademark bans
1715
- if (this.ruleTable.isRestricted(`move:${ability.id}`)) {
1716
- return [`${ability.name} is restricted from being used as a trademark.`];
1717
- }
1718
- if (set.moves.map(this.toID).includes(ability.id)) {
1719
- return [`${set.name} may not use ${ability.name} as both a trademark and one of its moves simultaneously.`];
1720
- }
1721
- const customRules = this.format.customRules || [];
1722
- if (!customRules.includes('!obtainableabilities'))
1723
- customRules.push('!obtainableabilities');
1724
- const TeamValidator = require('../sim/team-validator').TeamValidator;
1725
- const validator = new TeamValidator(dex.formats.get(`${this.format.id}@@@${customRules.join(',')}`));
1726
- const moves = set.moves;
1727
- set.moves = [ability.id];
1728
- set.ability = dex.species.get(set.species).abilities['0'];
1729
- let problems = validator.validateSet(set, {}) || [];
1730
- if (problems.length)
1731
- return problems;
1732
- set.moves = moves;
1733
- set.ability = dex.species.get(set.species).abilities['0'];
1734
- problems = problems.concat(validator.validateSet(set, teamHas) || []);
1735
- set.ability = ability.id;
1736
- if (!teamHas.trademarks)
1737
- teamHas.trademarks = {};
1738
- teamHas.trademarks[ability.name] = (teamHas.trademarks[ability.name] || 0) + 1;
1739
- return problems.length ? problems : null;
1740
- },
1741
- pokemon: {
1742
- getAbility() {
1743
- const move = this.battle.dex.moves.get(this.battle.toID(this.ability));
1744
- if (!move.exists)
1745
- return Object.getPrototypeOf(this).getAbility.call(this);
1746
- return {
1747
- id: move.id,
1748
- name: move.name,
1749
- onStart(pokemon) {
1750
- this.add('-activate', pokemon, 'ability: ' + move.name);
1751
- this.actions.useMove(move, pokemon);
1752
- },
1753
- toString() {
1754
- return "";
1755
- },
1756
- };
1757
- },
1758
- },
1759
- },
1760
1814
  // Randomized Metas
1761
1815
  ///////////////////////////////////////////////////////////////////
1762
1816
  {
@@ -1864,7 +1918,8 @@ exports.Formats = [
1864
1918
  desc: `Randomized teams of level-balanced Pok&eacute;mon with absolutely any ability, moves, and item.`,
1865
1919
  mod: 'gen8',
1866
1920
  team: 'randomHC',
1867
- ruleset: ['Obtainable Formes', 'HP Percentage Mod', 'Cancel Mod'],
1921
+ ruleset: ['HP Percentage Mod', 'Cancel Mod'],
1922
+ banlist: ['Nonexistent'],
1868
1923
  },
1869
1924
  {
1870
1925
  name: "[Gen 8] Doubles Hackmons Cup",
@@ -1872,7 +1927,8 @@ exports.Formats = [
1872
1927
  gameType: 'doubles',
1873
1928
  team: 'randomHC',
1874
1929
  searchShow: false,
1875
- ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'],
1930
+ ruleset: ['HP Percentage Mod', 'Cancel Mod'],
1931
+ banlist: ['Nonexistent'],
1876
1932
  },
1877
1933
  {
1878
1934
  name: "[Gen 8] CAP 1v1",
@@ -1941,6 +1997,7 @@ exports.Formats = [
1941
1997
  team: 'randomHC',
1942
1998
  searchShow: false,
1943
1999
  ruleset: ['HP Percentage Mod', 'Cancel Mod'],
2000
+ banlist: ['Nonexistent'],
1944
2001
  },
1945
2002
  {
1946
2003
  name: "[Gen 7 Let's Go] Random Battle",
@@ -2007,6 +2064,7 @@ exports.Formats = [
2007
2064
  team: 'randomHC',
2008
2065
  searchShow: false,
2009
2066
  ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Desync Clause Mod', 'Sleep Clause Mod', 'Freeze Clause Mod', 'Team Type Preview'],
2067
+ banlist: ['Nonexistent'],
2010
2068
  onModifySpecies(species, target, source, effect) {
2011
2069
  if (!target)
2012
2070
  return;
@@ -2028,37 +2086,36 @@ exports.Formats = [
2028
2086
  column: 3,
2029
2087
  },
2030
2088
  {
2031
- name: "[Gen 2] UU",
2032
- threads: [`&bullet; <a href="https://www.smogon.com/forums/threads/3576710/">GSC UU</a>`],
2033
- mod: 'gen2',
2089
+ name: "[Gen 3] UU",
2090
+ threads: [
2091
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
2092
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
2093
+ ],
2094
+ mod: 'gen3',
2034
2095
  // searchShow: false,
2035
- ruleset: ['[Gen 2] OU'],
2036
- banlist: ['OU', 'UUBL'],
2096
+ ruleset: ['Standard', 'NFE Clause'],
2097
+ banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Baton Pass'],
2098
+ unbanlist: ['Scyther', 'Sand Veil'],
2037
2099
  },
2038
2100
  {
2039
- name: "[Gen 5] NU",
2101
+ name: "[Gen 1] NU",
2040
2102
  threads: [
2041
- `&bullet; <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
2042
- `&bullet; <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
2103
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
2043
2104
  ],
2044
- mod: 'gen5',
2105
+ mod: 'gen1',
2045
2106
  // searchShow: false,
2046
- ruleset: ['[Gen 5] RU', '!Sleep Moves Clause', 'Sleep Clause Mod'],
2047
- banlist: ['RU', 'NUBL', 'Assist', 'Copycat'],
2107
+ ruleset: ['[Gen 1] UU'],
2108
+ banlist: ['UU', 'NUBL'],
2048
2109
  },
2049
2110
  {
2050
- name: "[Gen 5] LC",
2111
+ name: "[Gen 4] Ubers",
2051
2112
  threads: [
2052
- `&bullet; <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
2053
- `&bullet; <a href="https://www.smogon.com/forums/threads/3485860/">BW2 LC Viability Rankings</a>`,
2113
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
2054
2114
  ],
2055
- mod: 'gen5',
2115
+ mod: 'gen4',
2056
2116
  // searchShow: false,
2057
- ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
2058
- banlist: [
2059
- 'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma',
2060
- 'Sand Rush', 'Sand Veil', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
2061
- ],
2117
+ ruleset: ['Standard'],
2118
+ banlist: ['AG'],
2062
2119
  },
2063
2120
  // Past Gens OU
2064
2121
  ///////////////////////////////////////////////////////////////////
@@ -2095,8 +2152,8 @@ exports.Formats = [
2095
2152
  `&bullet; <a href="https://www.smogon.com/forums/threads/3668699/">BW2 OU Viability Rankings</a>`,
2096
2153
  ],
2097
2154
  mod: 'gen5',
2098
- ruleset: ['Standard', 'Evasion Abilities Clause', 'Baton Pass Clause', 'Sleep Moves Clause', 'Swagger Clause'],
2099
- banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist'],
2155
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Swagger Clause'],
2156
+ banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist', 'Baton Pass'],
2100
2157
  },
2101
2158
  {
2102
2159
  name: "[Gen 4] OU",
@@ -2107,7 +2164,7 @@ exports.Formats = [
2107
2164
  ],
2108
2165
  mod: 'gen4',
2109
2166
  ruleset: ['Standard'],
2110
- banlist: ['AG', 'Uber', 'Arena Trap', 'Sand Veil', 'Swinub + Snow Cloak', 'Piloswine + Snow Cloak', 'Mamoswine + Snow Cloak', 'Soul Dew', 'Baton Pass'],
2167
+ banlist: ['AG', 'Uber', 'Arena Trap', 'Sand Veil', 'Swinub + Snow Cloak', 'Piloswine + Snow Cloak', 'Mamoswine + Snow Cloak', 'Soul Dew', 'Baton Pass', 'Swagger'],
2111
2168
  },
2112
2169
  {
2113
2170
  name: "[Gen 3] OU",
@@ -2117,7 +2174,7 @@ exports.Formats = [
2117
2174
  ],
2118
2175
  mod: 'gen3',
2119
2176
  ruleset: ['Standard', 'One Boost Passer Clause'],
2120
- banlist: ['Uber', 'Sand Veil', 'Assist', 'Smeargle + Ingrain'],
2177
+ banlist: ['Uber', 'Sand Veil', 'Assist', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'],
2121
2178
  },
2122
2179
  {
2123
2180
  name: "[Gen 2] OU",
@@ -2261,6 +2318,15 @@ exports.Formats = [
2261
2318
  mod: 'gen6',
2262
2319
  ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause', 'EV limit = 510'],
2263
2320
  },
2321
+ {
2322
+ name: "[Gen 5] ZU",
2323
+ threads: [
2324
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8034680/">BW2 ZU</a>`,
2325
+ ],
2326
+ mod: 'gen5',
2327
+ ruleset: ['[Gen 5] PU'],
2328
+ banlist: ['PU', 'Dragonair', 'Glalie', 'Machoke', 'Marowak', 'Omanyte', 'Regigigas', 'Trubbish', 'Whirlipede', 'Baton Pass'],
2329
+ },
2264
2330
  // US/UM Singles
2265
2331
  ///////////////////////////////////////////////////////////////////
2266
2332
  {
@@ -2843,6 +2909,17 @@ exports.Formats = [
2843
2909
  banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
2844
2910
  unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
2845
2911
  },
2912
+ {
2913
+ name: "[Gen 5] NU",
2914
+ threads: [
2915
+ `&bullet; <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
2916
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
2917
+ ],
2918
+ mod: 'gen5',
2919
+ searchShow: false,
2920
+ ruleset: ['[Gen 5] RU', '!Sleep Moves Clause', 'Sleep Clause Mod'],
2921
+ banlist: ['RU', 'NUBL', 'Assist', 'Copycat'],
2922
+ },
2846
2923
  {
2847
2924
  name: "[Gen 5] PU",
2848
2925
  threads: [
@@ -2851,7 +2928,21 @@ exports.Formats = [
2851
2928
  mod: 'gen5',
2852
2929
  searchShow: false,
2853
2930
  ruleset: ['[Gen 5] NU', 'Sleep Moves Clause'],
2854
- banlist: ['NU', 'Combusken', 'Gothorita', 'Linoone', 'Riolu', 'Rotom-Frost', 'Simipour', 'Throh', 'Vigoroth'],
2931
+ banlist: ['NU', 'PUBL'],
2932
+ },
2933
+ {
2934
+ name: "[Gen 5] LC",
2935
+ threads: [
2936
+ `&bullet; <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
2937
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3485860/">BW2 LC Viability Rankings</a>`,
2938
+ ],
2939
+ mod: 'gen5',
2940
+ searchShow: false,
2941
+ ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
2942
+ banlist: [
2943
+ 'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma',
2944
+ 'Sand Rush', 'Sand Veil', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
2945
+ ],
2855
2946
  },
2856
2947
  {
2857
2948
  name: "[Gen 5] Monotype",
@@ -2963,16 +3054,6 @@ exports.Formats = [
2963
3054
  section: "DPP Singles",
2964
3055
  column: 5,
2965
3056
  },
2966
- {
2967
- name: "[Gen 4] Ubers",
2968
- threads: [
2969
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
2970
- ],
2971
- mod: 'gen4',
2972
- searchShow: false,
2973
- ruleset: ['Standard'],
2974
- banlist: ['AG'],
2975
- },
2976
3057
  {
2977
3058
  name: "[Gen 4] UU",
2978
3059
  threads: [
@@ -2983,7 +3064,7 @@ exports.Formats = [
2983
3064
  searchShow: false,
2984
3065
  ruleset: ['[Gen 4] OU'],
2985
3066
  banlist: ['OU', 'UUBL'],
2986
- unbanlist: ['Arena Trap'],
3067
+ unbanlist: ['Arena Trap', 'Swagger'],
2987
3068
  },
2988
3069
  {
2989
3070
  name: "[Gen 4] NU",
@@ -3040,7 +3121,7 @@ exports.Formats = [
3040
3121
  '[Gen 4] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
3041
3122
  ],
3042
3123
  banlist: ['Latias', 'Machamp', 'Porygon-Z', 'Shaymin', 'Snorlax', 'Togekiss', 'Focus Sash', 'Destiny Bond', 'Explosion', 'Perish Song', 'Self-Destruct'],
3043
- unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil'],
3124
+ unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil', 'Swagger'],
3044
3125
  },
3045
3126
  {
3046
3127
  name: "[Gen 4] Anything Goes",
@@ -3071,7 +3152,7 @@ exports.Formats = [
3071
3152
  searchShow: false,
3072
3153
  ruleset: ['[Gen 4] OU'],
3073
3154
  banlist: ['Explosion'],
3074
- unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut'],
3155
+ unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut', 'Swagger'],
3075
3156
  },
3076
3157
  {
3077
3158
  name: "[Gen 4] VGC 2010",
@@ -3113,21 +3194,9 @@ exports.Formats = [
3113
3194
  ],
3114
3195
  mod: 'gen3',
3115
3196
  searchShow: false,
3116
- ruleset: ['Standard', 'Deoxys Camouflage Clause'],
3197
+ ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
3117
3198
  banlist: ['Wobbuffet + Leftovers'],
3118
3199
  },
3119
- {
3120
- name: "[Gen 3] UU",
3121
- threads: [
3122
- `&bullet; <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
3123
- `&bullet; <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
3124
- ],
3125
- mod: 'gen3',
3126
- searchShow: false,
3127
- ruleset: ['Standard', 'NFE Clause'],
3128
- banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Baton Pass'],
3129
- unbanlist: ['Scyther', 'Sand Veil'],
3130
- },
3131
3200
  {
3132
3201
  name: "[Gen 3] NU",
3133
3202
  threads: [
@@ -3191,6 +3260,14 @@ exports.Formats = [
3191
3260
  searchShow: false,
3192
3261
  ruleset: ['Standard'],
3193
3262
  },
3263
+ {
3264
+ name: "[Gen 2] UU",
3265
+ threads: [`&bullet; <a href="https://www.smogon.com/forums/threads/3576710/">GSC UU</a>`],
3266
+ mod: 'gen2',
3267
+ searchShow: false,
3268
+ ruleset: ['[Gen 2] OU'],
3269
+ banlist: ['OU', 'UUBL'],
3270
+ },
3194
3271
  {
3195
3272
  name: "[Gen 2] NU",
3196
3273
  threads: [`&bullet; <a href="https://www.smogon.com/forums/threads/3642565/">GSC NU</a>`],
@@ -3208,7 +3285,10 @@ exports.Formats = [
3208
3285
  'Picked Team Size = 1', 'Max Team Size = 3',
3209
3286
  '[Gen 2] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
3210
3287
  ],
3211
- banlist: ['Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Destiny Bond', 'Explosion', 'Perish Song', 'Present', 'Self-Destruct'],
3288
+ banlist: [
3289
+ 'Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw',
3290
+ 'Attract', 'Destiny Bond', 'Explosion', 'Perish Song', 'Present', 'Self-Destruct', 'Swagger',
3291
+ ],
3212
3292
  },
3213
3293
  {
3214
3294
  name: "[Gen 2] Nintendo Cup 2000",
@@ -3262,16 +3342,6 @@ exports.Formats = [
3262
3342
  ruleset: ['[Gen 1] OU'],
3263
3343
  banlist: ['OU', 'UUBL'],
3264
3344
  },
3265
- {
3266
- name: "[Gen 1] NU",
3267
- threads: [
3268
- `&bullet; <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
3269
- ],
3270
- mod: 'gen1',
3271
- searchShow: false,
3272
- ruleset: ['[Gen 1] UU'],
3273
- banlist: ['UU', 'NUBL'],
3274
- },
3275
3345
  {
3276
3346
  name: "[Gen 1] Japanese OU",
3277
3347
  desc: `Generation 1 with Japanese battle mechanics.`,