@pkmn/sim 0.5.25 → 0.5.27

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 (57) hide show
  1. package/build/config/formats.js +195 -162
  2. package/build/config/formats.js.map +1 -1
  3. package/build/data/aliases.js +2 -2
  4. package/build/data/aliases.js.map +1 -1
  5. package/build/data/conditions.js +1 -1
  6. package/build/data/conditions.js.map +1 -1
  7. package/build/data/formats-data.js +24 -25
  8. package/build/data/formats-data.js.map +1 -1
  9. package/build/data/learnsets.js +27 -20
  10. package/build/data/learnsets.js.map +1 -1
  11. package/build/data/mods/gen1/formats-data.js +0 -5
  12. package/build/data/mods/gen1/formats-data.js.map +1 -1
  13. package/build/data/mods/gen1/moves.js +54 -22
  14. package/build/data/mods/gen1/moves.js.map +1 -1
  15. package/build/data/mods/gen2/moves.js +10 -5
  16. package/build/data/mods/gen2/moves.js.map +1 -1
  17. package/build/data/mods/gen3/formats-data.js +2 -2
  18. package/build/data/mods/gen3/formats-data.js.map +1 -1
  19. package/build/data/mods/gen3/moves.js +9 -0
  20. package/build/data/mods/gen3/moves.js.map +1 -1
  21. package/build/data/mods/gen6/formats-data.js +14 -14
  22. package/build/data/mods/gen6/formats-data.js.map +1 -1
  23. package/build/data/mods/gen7/pokedex.js +4 -5
  24. package/build/data/mods/gen7/pokedex.js.map +1 -1
  25. package/build/data/pokedex.js +14 -14
  26. package/build/data/pokedex.js.map +1 -1
  27. package/build/data/rulesets.js +1 -1
  28. package/build/data/rulesets.js.map +1 -1
  29. package/build/data/text/abilities.js +321 -139
  30. package/build/data/text/abilities.js.map +1 -1
  31. package/build/data/text/moves.js +8 -2
  32. package/build/data/text/moves.js.map +1 -1
  33. package/build/sim/battle-actions.js.map +1 -1
  34. package/build/sim/pokemon.js +1 -1
  35. package/build/sim/pokemon.js.map +1 -1
  36. package/build/sim/team-validator.js +30 -18
  37. package/build/sim/team-validator.js.map +1 -1
  38. package/config/formats.ts +194 -159
  39. package/data/aliases.ts +2 -2
  40. package/data/conditions.ts +1 -1
  41. package/data/formats-data.ts +24 -25
  42. package/data/learnsets.ts +27 -20
  43. package/data/mods/gen1/formats-data.ts +0 -5
  44. package/data/mods/gen1/moves.ts +54 -23
  45. package/data/mods/gen2/moves.ts +10 -5
  46. package/data/mods/gen3/formats-data.ts +2 -2
  47. package/data/mods/gen3/moves.ts +9 -0
  48. package/data/mods/gen6/formats-data.ts +14 -14
  49. package/data/mods/gen7/pokedex.ts +4 -5
  50. package/data/pokedex.ts +14 -14
  51. package/data/rulesets.ts +1 -1
  52. package/data/text/abilities.ts +321 -139
  53. package/data/text/moves.ts +8 -2
  54. package/package.json +1 -1
  55. package/sim/battle-actions.ts +1 -0
  56. package/sim/pokemon.ts +1 -1
  57. package/sim/team-validator.ts +31 -20
@@ -134,7 +134,7 @@ exports.Formats = [
134
134
  {
135
135
  name: "[Gen 8] PU",
136
136
  threads: [
137
- `&bullet; <a href="https://www.smogon.com/forums/threads/3686048/">PU Metagame Discussion</a>`,
137
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3707179/">PU Metagame Discussion</a>`,
138
138
  `&bullet; <a href="https://www.smogon.com/forums/threads/3676106/">PU Viability Rankings</a>`,
139
139
  ],
140
140
  mod: 'gen8',
@@ -232,7 +232,7 @@ exports.Formats = [
232
232
  // LC OU
233
233
  'Abra', 'Carvanha', 'Diglett-Base', 'Dwebble', 'Ferroseed', 'Foongus', 'Frillish', 'Grookey', 'Koffing',
234
234
  'Larvesta', 'Magby', 'Magnemite', 'Mareanie', 'Mienfoo', 'Mudbray', 'Natu', 'Onix', 'Pawniard',
235
- 'Ponyta-Base', 'Porygon', 'Slowpoke-Base', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
235
+ 'Ponyta-Base', 'Porygon', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
236
236
  // LC UUBL
237
237
  'Archen', 'Farfetch\u2019d-Galar', 'Scorbunny', 'Shellder', 'Wingull',
238
238
  ],
@@ -268,14 +268,21 @@ exports.Formats = [
268
268
  unbanlist: ['Mythical', 'Restricted Legendary'],
269
269
  },
270
270
  {
271
- name: "[Gen 8] I Choose 'Chu!",
271
+ name: "[Gen 8] Champion League",
272
272
  threads: [
273
- `&bullet; <a href="https://www.smogon.com/forums/threads/3705481/">I Choose 'Chu! Discussion</a>`,
273
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3707533/">Champion League Discussion</a>`,
274
274
  ],
275
275
  mod: 'gen8',
276
276
  ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
277
- banlist: ['All Pokemon', 'Raichu-Alola + Sing'],
278
- unbanlist: ['Pichu', 'Pikachu', 'Raichu'],
277
+ banlist: ['All Pokemon'],
278
+ unbanlist: [
279
+ 'Venusaur', 'Charizard', 'Blastoise', 'Sandslash-Base', 'Ninetales-Base', 'Arcanine', 'Alakazam', 'Tentacruel', 'Magneton', 'Cloyster',
280
+ 'Exeggutor-Base', 'Rhydon', 'Gyarados', 'Lapras', 'Vaporeon', 'Jolteon', 'Flareon', 'Aerodactyl', 'Dragonite', 'Heracross', 'Skarmory',
281
+ 'Tyranitar', 'Ludicolo', 'Gardevoir', 'Aggron', 'Wailord', 'Altaria', 'Whiscash', 'Claydol', 'Cradily', 'Armaldo', 'Milotic', 'Salamence',
282
+ 'Metagross', 'Roserade', 'Gastrodon', 'Spiritomb', 'Garchomp', 'Lucario', 'Rhyperior', 'Togekiss', 'Seismitoad', 'Archeops',
283
+ 'Vanilluxe', 'Escavalier', 'Haxorus', 'Accelgor', 'Druddigon', 'Bouffalant', 'Hydreigon', 'Volcarona', 'Aegislash', 'Tyrantrum',
284
+ 'Aurorus', 'Hawlucha', 'Carbink', 'Goodra', 'Gourgeist', 'Rillaboom', 'Cinderace', 'Inteleon', 'Mr. Rime', 'Dragapult',
285
+ ],
279
286
  },
280
287
  {
281
288
  name: "[Gen 8] Custom Game",
@@ -530,7 +537,7 @@ exports.Formats = [
530
537
  ruleset: ['-Nonexistent', 'Standard NatDex', 'Forme Clause', 'Sleep Moves Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', '!Obtainable'],
531
538
  banlist: [
532
539
  // Pokemon
533
- 'Eternatus-Eternamax', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Cramorant-Gorging', 'Calyrex-Shadow',
540
+ 'Eternatus-Eternamax', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Cramorant-Gorging', 'Calyrex-Shadow', 'Darmanitan-Galar-Zen',
534
541
  // Abilities
535
542
  'Arena Trap', 'Contrary', 'Gorilla Tactics', 'Huge Power', 'Illusion', 'Innards Out', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard',
536
543
  // Items
@@ -591,117 +598,35 @@ exports.Formats = [
591
598
  column: 2,
592
599
  },
593
600
  {
594
- name: "[Gen 8] Partners in Crime",
595
- desc: `Doubles-based metagame where both active ally Pok&eacute;mon share abilities and moves.`,
601
+ name: "[Gen 8] Revelationmons",
602
+ 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).`,
596
603
  threads: [
597
- `&bullet; <a href="https://www.smogon.com/forums/threads/3706080/">Partners in Crime</a>`,
604
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3692297/">Revelationmons</a>`,
598
605
  ],
599
- mod: 'partnersincrime',
600
- gameType: 'doubles',
601
- // searchShow: false,
602
- ruleset: ['Standard Doubles', 'Dynamax Clause'],
606
+ mod: 'gen8',
607
+ ruleset: ['Standard OMs', 'Revelationmons Mod', 'Sleep Moves Clause'],
603
608
  banlist: [
604
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin',
605
- 'Groudon', 'Ho-Oh', 'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna',
606
- 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
607
- 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
608
- 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Bolt Beak', 'Fishious Rend', 'Shell Smash',
609
- 'Emergency Exit', 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard',
609
+ 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Dragapult', 'Eternatus', 'Genesect',
610
+ 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kommo-o', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala',
611
+ 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza',
612
+ 'Reshiram', 'Solgaleo', 'Spectrier', 'Thundurus-Therian', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta',
613
+ 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
610
614
  ],
611
- onBeforeSwitchIn(pokemon) {
612
- pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
613
- let ngas = false;
614
- for (const poke of this.getAllActive()) {
615
- if (this.toID(poke.ability) === 'neutralizinggas') {
616
- ngas = true;
617
- break;
618
- }
619
- }
620
- const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
621
- // Abilities that must be applied before both sides trigger onSwitchIn to correctly
622
- // handle switch-in ability-to-ability interactions, e.g. Intimidate counters
623
- const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
624
- 'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
625
- 'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
626
- ];
627
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
628
- if (ally && ally.ability !== pokemon.ability) {
629
- if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
630
- NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
631
- pokemon.m.innate = 'ability:' + ally.ability;
632
- delete pokemon.volatiles[pokemon.m.innate];
633
- if (!ngas || ally.getAbility().isPermanent)
634
- pokemon.addVolatile(pokemon.m.innate);
635
- }
636
- if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
637
- NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
638
- ally.m.innate = 'ability:' + pokemon.ability;
639
- delete ally.volatiles[ally.m.innate];
640
- if (!ngas || pokemon.getAbility().isPermanent)
641
- ally.addVolatile(ally.m.innate);
642
- }
643
- }
644
- },
645
- onSwitchInPriority: 2,
646
- onSwitchIn(pokemon) {
647
- let ngas = false;
648
- for (const poke of this.getAllActive()) {
649
- if (this.toID(poke.ability) === 'neutralizinggas') {
650
- ngas = true;
651
- break;
652
- }
653
- }
654
- const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
655
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
656
- if (ally && ally.ability !== pokemon.ability) {
657
- if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
658
- pokemon.m.innate = 'ability:' + ally.ability;
659
- delete pokemon.volatiles[pokemon.m.innate];
660
- if (!ngas || ally.getAbility().isPermanent)
661
- pokemon.addVolatile(pokemon.m.innate);
662
- }
663
- if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
664
- ally.m.innate = 'ability:' + pokemon.ability;
665
- delete ally.volatiles[ally.m.innate];
666
- if (!ngas || pokemon.getAbility().isPermanent)
667
- ally.addVolatile(ally.m.innate);
668
- }
669
- }
670
- },
671
- onSwitchOut(pokemon) {
672
- if (pokemon.m.innate) {
673
- pokemon.removeVolatile(pokemon.m.innate);
674
- delete pokemon.m.innate;
675
- }
676
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
677
- if (ally && ally.m.innate) {
678
- ally.removeVolatile(ally.m.innate);
679
- delete ally.m.innate;
680
- }
681
- },
682
- onFaint(pokemon) {
683
- if (pokemon.m.innate) {
684
- pokemon.removeVolatile(pokemon.m.innate);
685
- delete pokemon.m.innate;
686
- }
687
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
688
- if (ally && ally.m.innate) {
689
- ally.removeVolatile(ally.m.innate);
690
- delete ally.m.innate;
691
- }
692
- },
615
+ restricted: ['Bolt Beak', 'Close Combat', 'U-turn', 'Volt Switch'],
693
616
  },
694
617
  {
695
- name: "[Gen 8] Chimera 1v1",
696
- desc: `One Pok&eacute;mon inherits specific traits from your entire 6-mon team, based on their order.`,
618
+ name: "[Gen 8] Tag Team Singles",
619
+ desc: `Bring four Pok&eacute;mon to Team Preview and choose two to battle in a singles battle.`,
697
620
  threads: [
698
- `&bullet; <a href="https://www.smogon.com/forums/threads/3661215/">Chimera 1v1</a>`,
621
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
699
622
  ],
700
623
  mod: 'gen8',
701
- ruleset: ['Chimera 1v1 Rule', 'Standard', 'Dynamax Clause', 'Sleep Moves Clause'],
624
+ ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
702
625
  banlist: [
703
- 'Shedinja', 'Huge Power', 'Moody', 'Neutralizing Gas', 'Truant', 'Perish Body', 'Eviolite', 'Focus Sash', 'Leek', 'Light Ball',
704
- 'Bolt Beak', 'Disable', 'Double Iron Bash', 'Fishious Rend', 'Perish Song', 'Switcheroo', 'Transform', 'Trick',
626
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
627
+ 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
628
+ 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
629
+ 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
705
630
  ],
706
631
  },
707
632
  // Other Metagames
@@ -863,10 +788,10 @@ exports.Formats = [
863
788
  mod: 'gen8',
864
789
  ruleset: ['Standard OMs', 'Sleep Moves Clause'],
865
790
  banlist: [
866
- 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Nidoking',
867
- 'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power',
868
- 'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw',
869
- 'Baton Pass',
791
+ 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Kyogre', 'Marowak-Alola', 'Melmetal',
792
+ 'Nidoking', 'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap',
793
+ 'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense',
794
+ 'Quick Claw', 'Baton Pass',
870
795
  ],
871
796
  onValidateTeam(team) {
872
797
  const gods = new Set();
@@ -1723,6 +1648,107 @@ exports.Formats = [
1723
1648
  },
1724
1649
  },
1725
1650
  },
1651
+ {
1652
+ name: "[Gen 8] Partners in Crime",
1653
+ desc: `Doubles-based metagame where both active ally Pok&eacute;mon share abilities and moves.`,
1654
+ threads: [
1655
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3706080/">Partners in Crime</a>`,
1656
+ ],
1657
+ mod: 'partnersincrime',
1658
+ gameType: 'doubles',
1659
+ searchShow: false,
1660
+ ruleset: ['Standard Doubles', 'Dynamax Clause'],
1661
+ banlist: [
1662
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
1663
+ 'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
1664
+ 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
1665
+ 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
1666
+ 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
1667
+ 'Shell Smash', 'Swagger',
1668
+ ],
1669
+ onBeforeSwitchIn(pokemon) {
1670
+ pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
1671
+ let ngas = false;
1672
+ for (const poke of this.getAllActive()) {
1673
+ if (this.toID(poke.ability) === 'neutralizinggas') {
1674
+ ngas = true;
1675
+ break;
1676
+ }
1677
+ }
1678
+ const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
1679
+ // Abilities that must be applied before both sides trigger onSwitchIn to correctly
1680
+ // handle switch-in ability-to-ability interactions, e.g. Intimidate counters
1681
+ const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
1682
+ 'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
1683
+ 'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
1684
+ ];
1685
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1686
+ if (ally && ally.ability !== pokemon.ability) {
1687
+ if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
1688
+ NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
1689
+ pokemon.m.innate = 'ability:' + ally.ability;
1690
+ delete pokemon.volatiles[pokemon.m.innate];
1691
+ if (!ngas || ally.getAbility().isPermanent)
1692
+ pokemon.addVolatile(pokemon.m.innate);
1693
+ }
1694
+ if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
1695
+ NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
1696
+ ally.m.innate = 'ability:' + pokemon.ability;
1697
+ delete ally.volatiles[ally.m.innate];
1698
+ if (!ngas || pokemon.getAbility().isPermanent)
1699
+ ally.addVolatile(ally.m.innate);
1700
+ }
1701
+ }
1702
+ },
1703
+ onSwitchInPriority: 2,
1704
+ onSwitchIn(pokemon) {
1705
+ let ngas = false;
1706
+ for (const poke of this.getAllActive()) {
1707
+ if (this.toID(poke.ability) === 'neutralizinggas') {
1708
+ ngas = true;
1709
+ break;
1710
+ }
1711
+ }
1712
+ const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
1713
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1714
+ if (ally && ally.ability !== pokemon.ability) {
1715
+ if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
1716
+ pokemon.m.innate = 'ability:' + ally.ability;
1717
+ delete pokemon.volatiles[pokemon.m.innate];
1718
+ if (!ngas || ally.getAbility().isPermanent)
1719
+ pokemon.addVolatile(pokemon.m.innate);
1720
+ }
1721
+ if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
1722
+ ally.m.innate = 'ability:' + pokemon.ability;
1723
+ delete ally.volatiles[ally.m.innate];
1724
+ if (!ngas || pokemon.getAbility().isPermanent)
1725
+ ally.addVolatile(ally.m.innate);
1726
+ }
1727
+ }
1728
+ },
1729
+ onSwitchOut(pokemon) {
1730
+ if (pokemon.m.innate) {
1731
+ pokemon.removeVolatile(pokemon.m.innate);
1732
+ delete pokemon.m.innate;
1733
+ }
1734
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1735
+ if (ally && ally.m.innate) {
1736
+ ally.removeVolatile(ally.m.innate);
1737
+ delete ally.m.innate;
1738
+ }
1739
+ },
1740
+ onFaint(pokemon) {
1741
+ if (pokemon.m.innate) {
1742
+ pokemon.removeVolatile(pokemon.m.innate);
1743
+ delete pokemon.m.innate;
1744
+ }
1745
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1746
+ if (ally && ally.m.innate) {
1747
+ ally.removeVolatile(ally.m.innate);
1748
+ delete ally.m.innate;
1749
+ }
1750
+ },
1751
+ },
1726
1752
  {
1727
1753
  name: "[Gen 8] Pokebilities",
1728
1754
  desc: `Pok&eacute;mon have all of their released abilities simultaneously.`,
@@ -2128,10 +2154,11 @@ exports.Formats = [
2128
2154
  column: 2,
2129
2155
  },
2130
2156
  {
2131
- name: "[Gen 3] Challenge Cup",
2132
- mod: 'gen3',
2133
- team: 'randomCC',
2134
- ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'],
2157
+ name: "[Gen 7] Pick-Your-Team Random Battle",
2158
+ mod: 'gen7',
2159
+ team: 'random',
2160
+ ruleset: ['[Gen 7] Random Battle', 'Max Team Size = 12', 'Picked Team Size = 6', 'Team Preview'],
2161
+ desc: `Twelve Pokémon sets are randomly chosen, then you pick six for your team!`,
2135
2162
  },
2136
2163
  // Randomized Metas
2137
2164
  ///////////////////////////////////////////////////////////////////
@@ -2186,6 +2213,13 @@ exports.Formats = [
2186
2213
  }
2187
2214
  },
2188
2215
  },
2216
+ {
2217
+ name: "[Gen 8] Battle Factory",
2218
+ desc: `Randomized teams of Pok&eacute;mon for a generated Smogon tier with sets that are competitively viable.`,
2219
+ mod: 'gen8',
2220
+ team: 'randomFactory',
2221
+ ruleset: ['Standard', 'Dynamax Clause'],
2222
+ },
2189
2223
  {
2190
2224
  name: "[Gen 8] BSS Factory",
2191
2225
  desc: `Randomized 3v3 Singles featuring Pok&eacute;mon and movesets popular in Battle Stadium Singles.`,
@@ -2453,36 +2487,32 @@ exports.Formats = [
2453
2487
  column: 3,
2454
2488
  },
2455
2489
  {
2456
- name: "[Gen 3] Ubers",
2490
+ name: "[Gen 5] Ubers",
2457
2491
  threads: [
2458
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286280/">ADV Ubers</a>`,
2492
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
2459
2493
  ],
2460
- mod: 'gen3',
2494
+ mod: 'gen5',
2461
2495
  // searchShow: false,
2462
- ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
2463
- banlist: ['Wobbuffet + Leftovers'],
2496
+ ruleset: ['Standard', 'Sleep Clause Mod'],
2464
2497
  },
2465
2498
  {
2466
- name: "[Gen 5] RU",
2499
+ name: "[Gen 7] PU",
2467
2500
  threads: [
2468
- `&bullet; <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
2469
- `&bullet; <a href="https://www.smogon.com/forums/threads/3473124/">BW2 RU Viability Rankings</a>`,
2501
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2502
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2470
2503
  ],
2471
- mod: 'gen5',
2504
+ mod: 'gen7',
2472
2505
  // searchShow: false,
2473
- ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'],
2474
- banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
2475
- unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
2506
+ ruleset: ['[Gen 7] NU'],
2507
+ banlist: ['NU', 'PUBL'],
2476
2508
  },
2477
2509
  {
2478
- name: "[Gen 7 Let's Go] UU",
2479
- threads: [
2480
- `&bullet; <a href="https://www.smogon.com/forums/threads/3659882/">LGPE UU Metagame Discussion &amp; Resources</a>`,
2481
- ],
2482
- mod: 'gen7letsgo',
2483
- // searchShow: false,
2484
- ruleset: ['[Gen 7 Let\'s Go] OU'],
2485
- banlist: ['OU', 'UUBL'],
2510
+ name: "[Gen 2] UUBL",
2511
+ threads: [`&bullet; <a href="https://www.smogon.com/forums/threads/3662389/">GSC UUBL</a>`],
2512
+ mod: 'gen2',
2513
+ ruleset: ['[Gen 2] OU'],
2514
+ banlist: ['OU'],
2515
+ unbanlist: ['Mean Look + Baton Pass', 'Spider Web + Baton Pass'],
2486
2516
  },
2487
2517
  // Past Gens OU
2488
2518
  ///////////////////////////////////////////////////////////////////
@@ -2735,17 +2765,6 @@ exports.Formats = [
2735
2765
  ruleset: ['[Gen 7] RU'],
2736
2766
  banlist: ['RU', 'NUBL', 'Drought'],
2737
2767
  },
2738
- {
2739
- name: "[Gen 7] PU",
2740
- threads: [
2741
- `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2742
- `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2743
- ],
2744
- mod: 'gen7',
2745
- searchShow: false,
2746
- ruleset: ['[Gen 7] NU'],
2747
- banlist: ['NU', 'PUBL'],
2748
- },
2749
2768
  {
2750
2769
  name: "[Gen 7] LC",
2751
2770
  threads: [
@@ -2792,10 +2811,11 @@ exports.Formats = [
2792
2811
  'Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Swagger Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause',
2793
2812
  ],
2794
2813
  banlist: [
2795
- 'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega',
2796
- 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
2797
- 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom',
2798
- 'Moody', 'Focus Sash', 'Grass Whistle', 'Hypnosis', 'Perish Song', 'Sing', 'Detect + Fightinium Z',
2814
+ 'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon',
2815
+ 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mew', 'Mewtwo',
2816
+ 'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky',
2817
+ 'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom', 'Moody', 'Focus Sash', 'Grass Whistle', 'Hypnosis',
2818
+ 'Perish Song', 'Sing', 'Detect + Fightinium Z',
2799
2819
  ],
2800
2820
  },
2801
2821
  {
@@ -3246,24 +3266,27 @@ exports.Formats = [
3246
3266
  column: 4,
3247
3267
  },
3248
3268
  {
3249
- name: "[Gen 5] Ubers",
3269
+ name: "[Gen 5] UU",
3250
3270
  threads: [
3251
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
3271
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
3272
+ `&bullet; <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
3252
3273
  ],
3253
3274
  mod: 'gen5',
3254
3275
  searchShow: false,
3255
- ruleset: ['Standard', 'Sleep Clause Mod'],
3276
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
3277
+ banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
3256
3278
  },
3257
3279
  {
3258
- name: "[Gen 5] UU",
3280
+ name: "[Gen 5] RU",
3259
3281
  threads: [
3260
- `&bullet; <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
3261
3282
  `&bullet; <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
3283
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3473124/">BW2 RU Viability Rankings</a>`,
3262
3284
  ],
3263
3285
  mod: 'gen5',
3264
3286
  searchShow: false,
3265
- ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
3266
- banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
3287
+ ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'],
3288
+ banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
3289
+ unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
3267
3290
  },
3268
3291
  {
3269
3292
  name: "[Gen 5] NU",
@@ -3581,6 +3604,16 @@ exports.Formats = [
3581
3604
  section: "Past Generations",
3582
3605
  column: 5,
3583
3606
  },
3607
+ {
3608
+ name: "[Gen 3] Ubers",
3609
+ threads: [
3610
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286280/">ADV Ubers</a>`,
3611
+ ],
3612
+ mod: 'gen3',
3613
+ searchShow: false,
3614
+ ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
3615
+ banlist: ['Wobbuffet + Leftovers'],
3616
+ },
3584
3617
  {
3585
3618
  name: "[Gen 3] UU",
3586
3619
  threads: [
@@ -3618,7 +3651,7 @@ exports.Formats = [
3618
3651
  'Clefable', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song',
3619
3652
  'Self-Destruct', 'Focus Band', 'King\'s Rock', 'Quick Claw',
3620
3653
  ],
3621
- unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil'],
3654
+ unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil', 'Soundproof'],
3622
3655
  },
3623
3656
  {
3624
3657
  name: "[Gen 3] Doubles OU",
@@ -3737,7 +3770,7 @@ exports.Formats = [
3737
3770
  ],
3738
3771
  mod: 'gen1',
3739
3772
  searchShow: false,
3740
- ruleset: ['[Gen 1] OU', 'APT Clause'],
3773
+ ruleset: ['[Gen 1] OU', 'APT Clause', 'Sleep Moves Clause'],
3741
3774
  banlist: ['OU', 'UUBL'],
3742
3775
  },
3743
3776
  {
@@ -3747,7 +3780,7 @@ exports.Formats = [
3747
3780
  ],
3748
3781
  mod: 'gen1',
3749
3782
  searchShow: false,
3750
- ruleset: ['[Gen 1] UU', '!APT Clause'],
3783
+ ruleset: ['[Gen 1] UU', '!APT Clause', '!Sleep Moves Clause'],
3751
3784
  banlist: ['UU', 'NUBL'],
3752
3785
  },
3753
3786
  {
@@ -3780,7 +3813,7 @@ exports.Formats = [
3780
3813
  searchShow: false,
3781
3814
  ruleset: [
3782
3815
  'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
3783
- 'Obtainable', 'Team Preview', 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
3816
+ 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
3784
3817
  ],
3785
3818
  banlist: ['Uber'],
3786
3819
  },