@pkmn/sim 0.5.26 → 0.5.28

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 (56) hide show
  1. package/build/config/formats.js +205 -169
  2. package/build/config/formats.js.map +1 -1
  3. package/build/data/abilities.js +2 -4
  4. package/build/data/abilities.js.map +1 -1
  5. package/build/data/aliases.js +2 -2
  6. package/build/data/aliases.js.map +1 -1
  7. package/build/data/conditions.js +1 -1
  8. package/build/data/conditions.js.map +1 -1
  9. package/build/data/formats-data.js +24 -25
  10. package/build/data/formats-data.js.map +1 -1
  11. package/build/data/items.js +5 -5
  12. package/build/data/items.js.map +1 -1
  13. package/build/data/learnsets.js +30 -28
  14. package/build/data/learnsets.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/gen5/formats-data.js +69 -69
  22. package/build/data/mods/gen5/formats-data.js.map +1 -1
  23. package/build/data/pokedex.js +13 -13
  24. package/build/data/pokedex.js.map +1 -1
  25. package/build/data/text/abilities.js +321 -139
  26. package/build/data/text/abilities.js.map +1 -1
  27. package/build/data/text/items.js +5 -5
  28. package/build/data/text/moves.js +8 -2
  29. package/build/data/text/moves.js.map +1 -1
  30. package/build/sim/battle-actions.js.map +1 -1
  31. package/build/sim/battle.js +2 -2
  32. package/build/sim/battle.js.map +1 -1
  33. package/build/sim/pokemon.js +1 -1
  34. package/build/sim/pokemon.js.map +1 -1
  35. package/build/sim/team-validator.js +21 -16
  36. package/build/sim/team-validator.js.map +1 -1
  37. package/config/formats.ts +206 -167
  38. package/data/abilities.ts +2 -4
  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/items.ts +5 -5
  43. package/data/learnsets.ts +30 -28
  44. package/data/mods/gen2/moves.ts +10 -5
  45. package/data/mods/gen3/formats-data.ts +2 -2
  46. package/data/mods/gen3/moves.ts +9 -0
  47. package/data/mods/gen5/formats-data.ts +69 -69
  48. package/data/pokedex.ts +13 -13
  49. package/data/text/abilities.ts +321 -139
  50. package/data/text/items.ts +5 -5
  51. package/data/text/moves.ts +8 -2
  52. package/package.json +1 -1
  53. package/sim/battle-actions.ts +1 -0
  54. package/sim/battle.ts +2 -2
  55. package/sim/pokemon.ts +1 -1
  56. package/sim/team-validator.ts +22 -18
@@ -215,7 +215,7 @@ exports.Formats = [
215
215
  mod: 'gen8',
216
216
  ruleset: ['[Gen 8] PU'],
217
217
  banlist: [
218
- 'PU', 'Arctovish', 'Aurorus', 'Basculin', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Haunter', 'Magmortar', 'Magneton',
218
+ 'PU', 'Arctovish', 'Aurorus', 'Basculin', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Glastrier', 'Haunter', 'Magmortar', 'Magneton',
219
219
  'Malamar', 'Ninjask', 'Omastar', 'Rotom-Frost', 'Turtonator', 'Vanilluxe', 'Vikavolt', 'Silvally-Dragon', 'Silvally-Ground', 'Sneasel',
220
220
  'Damp Rock', 'Grassy Seed',
221
221
  ],
@@ -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
  ],
@@ -278,7 +278,7 @@ exports.Formats = [
278
278
  unbanlist: [
279
279
  'Venusaur', 'Charizard', 'Blastoise', 'Sandslash-Base', 'Ninetales-Base', 'Arcanine', 'Alakazam', 'Tentacruel', 'Magneton', 'Cloyster',
280
280
  'Exeggutor-Base', 'Rhydon', 'Gyarados', 'Lapras', 'Vaporeon', 'Jolteon', 'Flareon', 'Aerodactyl', 'Dragonite', 'Heracross', 'Skarmory',
281
- 'Tyranitar', 'Ludicolo', 'Aggron', 'Wailord', 'Altaria', 'Whiscash', 'Claydol', 'Cradily', 'Armaldo', 'Milotic', 'Salamence',
281
+ 'Tyranitar', 'Ludicolo', 'Gardevoir', 'Aggron', 'Wailord', 'Altaria', 'Whiscash', 'Claydol', 'Cradily', 'Armaldo', 'Milotic', 'Salamence',
282
282
  'Metagross', 'Roserade', 'Gastrodon', 'Spiritomb', 'Garchomp', 'Lucario', 'Rhyperior', 'Togekiss', 'Seismitoad', 'Archeops',
283
283
  'Vanilluxe', 'Escavalier', 'Haxorus', 'Accelgor', 'Druddigon', 'Bouffalant', 'Hydreigon', 'Volcarona', 'Aegislash', 'Tyrantrum',
284
284
  'Aurorus', 'Hawlucha', 'Carbink', 'Goodra', 'Gourgeist', 'Rillaboom', 'Cinderace', 'Inteleon', 'Mr. Rime', 'Dragapult',
@@ -537,7 +537,7 @@ exports.Formats = [
537
537
  ruleset: ['-Nonexistent', 'Standard NatDex', 'Forme Clause', 'Sleep Moves Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', '!Obtainable'],
538
538
  banlist: [
539
539
  // Pokemon
540
- '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',
541
541
  // Abilities
542
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',
543
543
  // Items
@@ -598,117 +598,36 @@ exports.Formats = [
598
598
  column: 2,
599
599
  },
600
600
  {
601
- name: "[Gen 8] Partners in Crime",
602
- desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`,
601
+ name: "[Gen 8] Revelationmons",
602
+ desc: `The moves in the first slot(s) of a Pokémon's set have their types changed to match the Pokémon's type(s).`,
603
603
  threads: [
604
- `&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>`,
605
605
  ],
606
- mod: 'partnersincrime',
607
- gameType: 'doubles',
608
- // searchShow: false,
609
- ruleset: ['Standard Doubles', 'Dynamax Clause'],
606
+ mod: 'gen8',
607
+ ruleset: ['Standard OMs', 'Revelationmons Mod', 'Sleep Moves Clause'],
610
608
  banlist: [
611
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
612
- 'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
613
- 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
614
- 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
615
- 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
616
- 'Shell Smash', 'Swagger',
609
+ 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Dragapult', 'Eternatus',
610
+ 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kingdra', 'Kommo-o', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
611
+ 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
612
+ 'Noivern', 'Palkia', 'Pheromosa', 'Polteageist', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Thundurus-Therian', 'Urshifu-Base',
613
+ 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull',
614
+ 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
617
615
  ],
618
- onBeforeSwitchIn(pokemon) {
619
- pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
620
- let ngas = false;
621
- for (const poke of this.getAllActive()) {
622
- if (this.toID(poke.ability) === 'neutralizinggas') {
623
- ngas = true;
624
- break;
625
- }
626
- }
627
- const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
628
- // Abilities that must be applied before both sides trigger onSwitchIn to correctly
629
- // handle switch-in ability-to-ability interactions, e.g. Intimidate counters
630
- const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
631
- 'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
632
- 'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
633
- ];
634
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
635
- if (ally && ally.ability !== pokemon.ability) {
636
- if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
637
- NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
638
- pokemon.m.innate = 'ability:' + ally.ability;
639
- delete pokemon.volatiles[pokemon.m.innate];
640
- if (!ngas || ally.getAbility().isPermanent)
641
- pokemon.addVolatile(pokemon.m.innate);
642
- }
643
- if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
644
- NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
645
- ally.m.innate = 'ability:' + pokemon.ability;
646
- delete ally.volatiles[ally.m.innate];
647
- if (!ngas || pokemon.getAbility().isPermanent)
648
- ally.addVolatile(ally.m.innate);
649
- }
650
- }
651
- },
652
- onSwitchInPriority: 2,
653
- onSwitchIn(pokemon) {
654
- let ngas = false;
655
- for (const poke of this.getAllActive()) {
656
- if (this.toID(poke.ability) === 'neutralizinggas') {
657
- ngas = true;
658
- break;
659
- }
660
- }
661
- const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
662
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
663
- if (ally && ally.ability !== pokemon.ability) {
664
- if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
665
- pokemon.m.innate = 'ability:' + ally.ability;
666
- delete pokemon.volatiles[pokemon.m.innate];
667
- if (!ngas || ally.getAbility().isPermanent)
668
- pokemon.addVolatile(pokemon.m.innate);
669
- }
670
- if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
671
- ally.m.innate = 'ability:' + pokemon.ability;
672
- delete ally.volatiles[ally.m.innate];
673
- if (!ngas || pokemon.getAbility().isPermanent)
674
- ally.addVolatile(ally.m.innate);
675
- }
676
- }
677
- },
678
- onSwitchOut(pokemon) {
679
- if (pokemon.m.innate) {
680
- pokemon.removeVolatile(pokemon.m.innate);
681
- delete pokemon.m.innate;
682
- }
683
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
684
- if (ally && ally.m.innate) {
685
- ally.removeVolatile(ally.m.innate);
686
- delete ally.m.innate;
687
- }
688
- },
689
- onFaint(pokemon) {
690
- if (pokemon.m.innate) {
691
- pokemon.removeVolatile(pokemon.m.innate);
692
- delete pokemon.m.innate;
693
- }
694
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
695
- if (ally && ally.m.innate) {
696
- ally.removeVolatile(ally.m.innate);
697
- delete ally.m.innate;
698
- }
699
- },
616
+ restricted: ['Bolt Beak', 'Close Combat', 'U-turn', 'Volt Switch'],
700
617
  },
701
618
  {
702
- name: "[Gen 8] Chimera 1v1",
703
- desc: `One Pok&eacute;mon inherits specific traits from your entire 6-mon team, based on their order.`,
619
+ name: "[Gen 8] Tag Team Singles",
620
+ desc: `Bring four Pok&eacute;mon to Team Preview and choose two to battle in a singles battle.`,
704
621
  threads: [
705
- `&bullet; <a href="https://www.smogon.com/forums/threads/3661215/">Chimera 1v1</a>`,
622
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
706
623
  ],
707
624
  mod: 'gen8',
708
- ruleset: ['Chimera 1v1 Rule', 'Standard', 'Dynamax Clause', 'Sleep Moves Clause'],
625
+ ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
709
626
  banlist: [
710
- 'Shedinja', 'Huge Power', 'Moody', 'Neutralizing Gas', 'Truant', 'Perish Body', 'Eviolite', 'Focus Sash', 'Leek', 'Light Ball',
711
- 'Bolt Beak', 'Disable', 'Double Iron Bash', 'Fishious Rend', 'Perish Song', 'Switcheroo', 'Transform', 'Trick',
627
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
628
+ 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
629
+ 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
630
+ 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
712
631
  ],
713
632
  },
714
633
  // Other Metagames
@@ -744,14 +663,14 @@ exports.Formats = [
744
663
  mod: 'gen8',
745
664
  ruleset: ['Standard OMs', '!Obtainable Abilities', '2 Ability Clause', 'Sleep Moves Clause'],
746
665
  banlist: [
747
- 'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
748
- 'Gengar', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White',
749
- 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern',
750
- 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike',
751
- 'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap',
752
- 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out',
753
- 'Intrepid Sword', 'Libero', 'Magic Bounce', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean',
754
- 'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
666
+ 'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Genesect',
667
+ 'Gengar', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
668
+ 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa',
669
+ 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas',
670
+ 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy',
671
+ 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Intrepid Sword', 'Libero', 'Magic Bounce',
672
+ 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout',
673
+ 'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
755
674
  ],
756
675
  },
757
676
  {
@@ -1730,6 +1649,107 @@ exports.Formats = [
1730
1649
  },
1731
1650
  },
1732
1651
  },
1652
+ {
1653
+ name: "[Gen 8] Partners in Crime",
1654
+ desc: `Doubles-based metagame where both active ally Pok&eacute;mon share abilities and moves.`,
1655
+ threads: [
1656
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3706080/">Partners in Crime</a>`,
1657
+ ],
1658
+ mod: 'partnersincrime',
1659
+ gameType: 'doubles',
1660
+ searchShow: false,
1661
+ ruleset: ['Standard Doubles', 'Dynamax Clause'],
1662
+ banlist: [
1663
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
1664
+ 'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
1665
+ 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
1666
+ 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
1667
+ 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
1668
+ 'Shell Smash', 'Swagger',
1669
+ ],
1670
+ onBeforeSwitchIn(pokemon) {
1671
+ pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
1672
+ let ngas = false;
1673
+ for (const poke of this.getAllActive()) {
1674
+ if (this.toID(poke.ability) === 'neutralizinggas') {
1675
+ ngas = true;
1676
+ break;
1677
+ }
1678
+ }
1679
+ const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
1680
+ // Abilities that must be applied before both sides trigger onSwitchIn to correctly
1681
+ // handle switch-in ability-to-ability interactions, e.g. Intimidate counters
1682
+ const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
1683
+ 'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
1684
+ 'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
1685
+ ];
1686
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1687
+ if (ally && ally.ability !== pokemon.ability) {
1688
+ if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
1689
+ NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
1690
+ pokemon.m.innate = 'ability:' + ally.ability;
1691
+ delete pokemon.volatiles[pokemon.m.innate];
1692
+ if (!ngas || ally.getAbility().isPermanent)
1693
+ pokemon.addVolatile(pokemon.m.innate);
1694
+ }
1695
+ if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
1696
+ NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
1697
+ ally.m.innate = 'ability:' + pokemon.ability;
1698
+ delete ally.volatiles[ally.m.innate];
1699
+ if (!ngas || pokemon.getAbility().isPermanent)
1700
+ ally.addVolatile(ally.m.innate);
1701
+ }
1702
+ }
1703
+ },
1704
+ onSwitchInPriority: 2,
1705
+ onSwitchIn(pokemon) {
1706
+ let ngas = false;
1707
+ for (const poke of this.getAllActive()) {
1708
+ if (this.toID(poke.ability) === 'neutralizinggas') {
1709
+ ngas = true;
1710
+ break;
1711
+ }
1712
+ }
1713
+ const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
1714
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1715
+ if (ally && ally.ability !== pokemon.ability) {
1716
+ if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
1717
+ pokemon.m.innate = 'ability:' + ally.ability;
1718
+ delete pokemon.volatiles[pokemon.m.innate];
1719
+ if (!ngas || ally.getAbility().isPermanent)
1720
+ pokemon.addVolatile(pokemon.m.innate);
1721
+ }
1722
+ if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
1723
+ ally.m.innate = 'ability:' + pokemon.ability;
1724
+ delete ally.volatiles[ally.m.innate];
1725
+ if (!ngas || pokemon.getAbility().isPermanent)
1726
+ ally.addVolatile(ally.m.innate);
1727
+ }
1728
+ }
1729
+ },
1730
+ onSwitchOut(pokemon) {
1731
+ if (pokemon.m.innate) {
1732
+ pokemon.removeVolatile(pokemon.m.innate);
1733
+ delete pokemon.m.innate;
1734
+ }
1735
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1736
+ if (ally && ally.m.innate) {
1737
+ ally.removeVolatile(ally.m.innate);
1738
+ delete ally.m.innate;
1739
+ }
1740
+ },
1741
+ onFaint(pokemon) {
1742
+ if (pokemon.m.innate) {
1743
+ pokemon.removeVolatile(pokemon.m.innate);
1744
+ delete pokemon.m.innate;
1745
+ }
1746
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1747
+ if (ally && ally.m.innate) {
1748
+ ally.removeVolatile(ally.m.innate);
1749
+ delete ally.m.innate;
1750
+ }
1751
+ },
1752
+ },
1733
1753
  {
1734
1754
  name: "[Gen 8] Pokebilities",
1735
1755
  desc: `Pok&eacute;mon have all of their released abilities simultaneously.`,
@@ -2135,10 +2155,11 @@ exports.Formats = [
2135
2155
  column: 2,
2136
2156
  },
2137
2157
  {
2138
- name: "[Gen 3] Challenge Cup",
2139
- mod: 'gen3',
2140
- team: 'randomCC',
2141
- ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'],
2158
+ name: "[Gen 7] Pick-Your-Team Random Battle",
2159
+ mod: 'gen7',
2160
+ team: 'random',
2161
+ ruleset: ['[Gen 7] Random Battle', 'Max Team Size = 12', 'Picked Team Size = 6', 'Team Preview'],
2162
+ desc: `Twelve Pokémon sets are randomly chosen, then you pick six for your team!`,
2142
2163
  },
2143
2164
  // Randomized Metas
2144
2165
  ///////////////////////////////////////////////////////////////////
@@ -2193,6 +2214,13 @@ exports.Formats = [
2193
2214
  }
2194
2215
  },
2195
2216
  },
2217
+ {
2218
+ name: "[Gen 8] Battle Factory",
2219
+ desc: `Randomized teams of Pok&eacute;mon for a generated Smogon tier with sets that are competitively viable.`,
2220
+ mod: 'gen8',
2221
+ team: 'randomFactory',
2222
+ ruleset: ['Standard', 'Dynamax Clause'],
2223
+ },
2196
2224
  {
2197
2225
  name: "[Gen 8] BSS Factory",
2198
2226
  desc: `Randomized 3v3 Singles featuring Pok&eacute;mon and movesets popular in Battle Stadium Singles.`,
@@ -2460,41 +2488,31 @@ exports.Formats = [
2460
2488
  column: 3,
2461
2489
  },
2462
2490
  {
2463
- name: "[Gen 4] Ubers",
2491
+ name: "[Gen 5] Ubers",
2464
2492
  threads: [
2465
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
2493
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
2466
2494
  ],
2467
- mod: 'gen4',
2495
+ mod: 'gen5',
2468
2496
  // searchShow: false,
2469
- ruleset: ['Standard'],
2470
- banlist: ['AG'],
2497
+ ruleset: ['Standard', 'Sleep Clause Mod'],
2471
2498
  },
2472
2499
  {
2473
- name: "[Gen 4] LC",
2500
+ name: "[Gen 7] PU",
2474
2501
  threads: [
2475
- `&bullet; <a href="https://www.smogon.com/dp/articles/little_cup_guide">DPP LC Guide</a>`,
2476
- `&bullet; <a href="https://www.smogon.com/forums/posts/7336500/">DPP LC Viability Rankings</a>`,
2502
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2503
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2477
2504
  ],
2478
- mod: 'gen4',
2505
+ mod: 'gen7',
2479
2506
  // searchShow: false,
2480
- ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
2481
- banlist: [
2482
- 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma',
2483
- 'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Sonic Boom', 'Swagger',
2484
- ],
2507
+ ruleset: ['[Gen 7] NU'],
2508
+ banlist: ['NU', 'PUBL'],
2485
2509
  },
2486
2510
  {
2487
- name: "[Gen 1] Nintendo Cup 1997",
2488
- threads: [
2489
- `&bullet; <a href="https://www.smogon.com/forums/threads/3682412/">Nintendo Cup 1997 Discussion &amp; Resources</a>`,
2490
- ],
2491
- mod: 'gen1jpn',
2492
- // searchShow: false,
2493
- ruleset: [
2494
- 'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
2495
- 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
2496
- ],
2497
- banlist: ['Uber'],
2511
+ name: "[Gen 2] UUBL",
2512
+ threads: [`&bullet; <a href="https://www.smogon.com/forums/threads/3662389/">GSC UUBL</a>`],
2513
+ mod: 'gen2',
2514
+ ruleset: ['[Gen 2] OU'],
2515
+ banlist: ['OU'],
2498
2516
  },
2499
2517
  // Past Gens OU
2500
2518
  ///////////////////////////////////////////////////////////////////
@@ -2747,17 +2765,6 @@ exports.Formats = [
2747
2765
  ruleset: ['[Gen 7] RU'],
2748
2766
  banlist: ['RU', 'NUBL', 'Drought'],
2749
2767
  },
2750
- {
2751
- name: "[Gen 7] PU",
2752
- threads: [
2753
- `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2754
- `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2755
- ],
2756
- mod: 'gen7',
2757
- searchShow: false,
2758
- ruleset: ['[Gen 7] NU'],
2759
- banlist: ['NU', 'PUBL'],
2760
- },
2761
2768
  {
2762
2769
  name: "[Gen 7] LC",
2763
2770
  threads: [
@@ -2804,10 +2811,11 @@ exports.Formats = [
2804
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',
2805
2812
  ],
2806
2813
  banlist: [
2807
- 'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega',
2808
- 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
2809
- 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom',
2810
- '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',
2811
2819
  ],
2812
2820
  },
2813
2821
  {
@@ -3257,15 +3265,6 @@ exports.Formats = [
3257
3265
  section: "B2/W2 Singles",
3258
3266
  column: 4,
3259
3267
  },
3260
- {
3261
- name: "[Gen 5] Ubers",
3262
- threads: [
3263
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
3264
- ],
3265
- mod: 'gen5',
3266
- searchShow: false,
3267
- ruleset: ['Standard', 'Sleep Clause Mod'],
3268
- },
3269
3268
  {
3270
3269
  name: "[Gen 5] UU",
3271
3270
  threads: [
@@ -3446,6 +3445,16 @@ exports.Formats = [
3446
3445
  section: "DPP Singles",
3447
3446
  column: 5,
3448
3447
  },
3448
+ {
3449
+ name: "[Gen 4] Ubers",
3450
+ threads: [
3451
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
3452
+ ],
3453
+ mod: 'gen4',
3454
+ searchShow: false,
3455
+ ruleset: ['Standard'],
3456
+ banlist: ['AG'],
3457
+ },
3449
3458
  {
3450
3459
  name: "[Gen 4] UU",
3451
3460
  threads: [
@@ -3486,6 +3495,20 @@ exports.Formats = [
3486
3495
  'Sharpedo', 'Shiftry', 'Skuntank', 'Slowking', 'Tauros', 'Typhlosion', 'Venomoth', 'Vileplume',
3487
3496
  ],
3488
3497
  },
3498
+ {
3499
+ name: "[Gen 4] LC",
3500
+ threads: [
3501
+ `&bullet; <a href="https://www.smogon.com/dp/articles/little_cup_guide">DPP LC Guide</a>`,
3502
+ `&bullet; <a href="https://www.smogon.com/forums/posts/7336500/">DPP LC Viability Rankings</a>`,
3503
+ ],
3504
+ mod: 'gen4',
3505
+ searchShow: false,
3506
+ ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
3507
+ banlist: [
3508
+ 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma',
3509
+ 'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Sonic Boom', 'Swagger',
3510
+ ],
3511
+ },
3489
3512
  {
3490
3513
  name: "[Gen 4] Anything Goes",
3491
3514
  mod: 'gen4',
@@ -3628,7 +3651,7 @@ exports.Formats = [
3628
3651
  'Clefable', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song',
3629
3652
  'Self-Destruct', 'Focus Band', 'King\'s Rock', 'Quick Claw',
3630
3653
  ],
3631
- unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil'],
3654
+ unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil', 'Soundproof'],
3632
3655
  },
3633
3656
  {
3634
3657
  name: "[Gen 3] Doubles OU",
@@ -3747,7 +3770,7 @@ exports.Formats = [
3747
3770
  ],
3748
3771
  mod: 'gen1',
3749
3772
  searchShow: false,
3750
- ruleset: ['[Gen 1] OU', 'APT Clause'],
3773
+ ruleset: ['[Gen 1] OU', 'APT Clause', 'Sleep Moves Clause'],
3751
3774
  banlist: ['OU', 'UUBL'],
3752
3775
  },
3753
3776
  {
@@ -3757,7 +3780,7 @@ exports.Formats = [
3757
3780
  ],
3758
3781
  mod: 'gen1',
3759
3782
  searchShow: false,
3760
- ruleset: ['[Gen 1] UU', '!APT Clause'],
3783
+ ruleset: ['[Gen 1] UU', '!APT Clause', '!Sleep Moves Clause'],
3761
3784
  banlist: ['UU', 'NUBL'],
3762
3785
  },
3763
3786
  {
@@ -3781,6 +3804,19 @@ exports.Formats = [
3781
3804
  ruleset: ['Standard'],
3782
3805
  banlist: ['Uber'],
3783
3806
  },
3807
+ {
3808
+ name: "[Gen 1] Nintendo Cup 1997",
3809
+ threads: [
3810
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3682412/">Nintendo Cup 1997 Discussion &amp; Resources</a>`,
3811
+ ],
3812
+ mod: 'gen1jpn',
3813
+ searchShow: false,
3814
+ ruleset: [
3815
+ 'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
3816
+ 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
3817
+ ],
3818
+ banlist: ['Uber'],
3819
+ },
3784
3820
  {
3785
3821
  name: "[Gen 1] Stadium OU",
3786
3822
  threads: [