@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
package/config/formats.ts CHANGED
@@ -145,7 +145,7 @@ export const Formats: FormatList = [
145
145
  {
146
146
  name: "[Gen 8] PU",
147
147
  threads: [
148
- `&bullet; <a href="https://www.smogon.com/forums/threads/3686048/">PU Metagame Discussion</a>`,
148
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3707179/">PU Metagame Discussion</a>`,
149
149
  `&bullet; <a href="https://www.smogon.com/forums/threads/3676106/">PU Viability Rankings</a>`,
150
150
  ],
151
151
 
@@ -250,7 +250,7 @@ export const Formats: FormatList = [
250
250
  // LC OU
251
251
  'Abra', 'Carvanha', 'Diglett-Base', 'Dwebble', 'Ferroseed', 'Foongus', 'Frillish', 'Grookey', 'Koffing',
252
252
  'Larvesta', 'Magby', 'Magnemite', 'Mareanie', 'Mienfoo', 'Mudbray', 'Natu', 'Onix', 'Pawniard',
253
- 'Ponyta-Base', 'Porygon', 'Slowpoke-Base', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
253
+ 'Ponyta-Base', 'Porygon', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
254
254
  // LC UUBL
255
255
  'Archen', 'Farfetch\u2019d-Galar', 'Scorbunny', 'Shellder', 'Wingull',
256
256
  ],
@@ -289,15 +289,22 @@ export const Formats: FormatList = [
289
289
  unbanlist: ['Mythical', 'Restricted Legendary'],
290
290
  },
291
291
  {
292
- name: "[Gen 8] I Choose 'Chu!",
292
+ name: "[Gen 8] Champion League",
293
293
  threads: [
294
- `&bullet; <a href="https://www.smogon.com/forums/threads/3705481/">I Choose 'Chu! Discussion</a>`,
294
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3707533/">Champion League Discussion</a>`,
295
295
  ],
296
296
 
297
297
  mod: 'gen8',
298
298
  ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
299
- banlist: ['All Pokemon', 'Raichu-Alola + Sing'],
300
- unbanlist: ['Pichu', 'Pikachu', 'Raichu'],
299
+ banlist: ['All Pokemon'],
300
+ unbanlist: [
301
+ 'Venusaur', 'Charizard', 'Blastoise', 'Sandslash-Base', 'Ninetales-Base', 'Arcanine', 'Alakazam', 'Tentacruel', 'Magneton', 'Cloyster',
302
+ 'Exeggutor-Base', 'Rhydon', 'Gyarados', 'Lapras', 'Vaporeon', 'Jolteon', 'Flareon', 'Aerodactyl', 'Dragonite', 'Heracross', 'Skarmory',
303
+ 'Tyranitar', 'Ludicolo', 'Gardevoir', 'Aggron', 'Wailord', 'Altaria', 'Whiscash', 'Claydol', 'Cradily', 'Armaldo', 'Milotic', 'Salamence',
304
+ 'Metagross', 'Roserade', 'Gastrodon', 'Spiritomb', 'Garchomp', 'Lucario', 'Rhyperior', 'Togekiss', 'Seismitoad', 'Archeops',
305
+ 'Vanilluxe', 'Escavalier', 'Haxorus', 'Accelgor', 'Druddigon', 'Bouffalant', 'Hydreigon', 'Volcarona', 'Aegislash', 'Tyrantrum',
306
+ 'Aurorus', 'Hawlucha', 'Carbink', 'Goodra', 'Gourgeist', 'Rillaboom', 'Cinderace', 'Inteleon', 'Mr. Rime', 'Dragapult',
307
+ ],
301
308
  },
302
309
  {
303
310
  name: "[Gen 8] Custom Game",
@@ -577,7 +584,7 @@ export const Formats: FormatList = [
577
584
  ruleset: ['-Nonexistent', 'Standard NatDex', 'Forme Clause', 'Sleep Moves Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', '!Obtainable'],
578
585
  banlist: [
579
586
  // Pokemon
580
- 'Eternatus-Eternamax', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Cramorant-Gorging', 'Calyrex-Shadow',
587
+ 'Eternatus-Eternamax', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Cramorant-Gorging', 'Calyrex-Shadow', 'Darmanitan-Galar-Zen',
581
588
  // Abilities
582
589
  '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',
583
590
  // Items
@@ -640,115 +647,37 @@ export const Formats: FormatList = [
640
647
  column: 2,
641
648
  },
642
649
  {
643
- name: "[Gen 8] Partners in Crime",
644
- desc: `Doubles-based metagame where both active ally Pok&eacute;mon share abilities and moves.`,
650
+ name: "[Gen 8] Revelationmons",
651
+ 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).`,
645
652
  threads: [
646
- `&bullet; <a href="https://www.smogon.com/forums/threads/3706080/">Partners in Crime</a>`,
653
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3692297/">Revelationmons</a>`,
647
654
  ],
648
655
 
649
- mod: 'partnersincrime',
650
- gameType: 'doubles',
651
- // searchShow: false,
652
- ruleset: ['Standard Doubles', 'Dynamax Clause'],
656
+ mod: 'gen8',
657
+ ruleset: ['Standard OMs', 'Revelationmons Mod', 'Sleep Moves Clause'],
653
658
  banlist: [
654
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin',
655
- 'Groudon', 'Ho-Oh', 'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna',
656
- 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
657
- 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
658
- 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Bolt Beak', 'Fishious Rend', 'Shell Smash',
659
- 'Emergency Exit', 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard',
659
+ 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Dragapult', 'Eternatus', 'Genesect',
660
+ 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kommo-o', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala',
661
+ 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza',
662
+ 'Reshiram', 'Solgaleo', 'Spectrier', 'Thundurus-Therian', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta',
663
+ 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
660
664
  ],
661
- onBeforeSwitchIn(pokemon) {
662
- pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
663
- let ngas = false;
664
- for (const poke of this.getAllActive()) {
665
- if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
666
- ngas = true;
667
- break;
668
- }
669
- }
670
- const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
671
- // Abilities that must be applied before both sides trigger onSwitchIn to correctly
672
- // handle switch-in ability-to-ability interactions, e.g. Intimidate counters
673
- const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
674
- 'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
675
- 'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
676
- ];
677
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
678
- if (ally && ally.ability !== pokemon.ability) {
679
- if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
680
- NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
681
- pokemon.m.innate = 'ability:' + ally.ability;
682
- delete pokemon.volatiles[pokemon.m.innate];
683
- if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
684
- }
685
- if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
686
- NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
687
- ally.m.innate = 'ability:' + pokemon.ability;
688
- delete ally.volatiles[ally.m.innate];
689
- if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
690
- }
691
- }
692
- },
693
- onSwitchInPriority: 2,
694
- onSwitchIn(pokemon) {
695
- let ngas = false;
696
- for (const poke of this.getAllActive()) {
697
- if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
698
- ngas = true;
699
- break;
700
- }
701
- }
702
- const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
703
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
704
- if (ally && ally.ability !== pokemon.ability) {
705
- if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
706
- pokemon.m.innate = 'ability:' + ally.ability;
707
- delete pokemon.volatiles[pokemon.m.innate];
708
- if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
709
- }
710
- if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
711
- ally.m.innate = 'ability:' + pokemon.ability;
712
- delete ally.volatiles[ally.m.innate];
713
- if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
714
- }
715
- }
716
- },
717
- onSwitchOut(pokemon) {
718
- if (pokemon.m.innate) {
719
- pokemon.removeVolatile(pokemon.m.innate);
720
- delete pokemon.m.innate;
721
- }
722
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
723
- if (ally && ally.m.innate) {
724
- ally.removeVolatile(ally.m.innate);
725
- delete ally.m.innate;
726
- }
727
- },
728
- onFaint(pokemon) {
729
- if (pokemon.m.innate) {
730
- pokemon.removeVolatile(pokemon.m.innate);
731
- delete pokemon.m.innate;
732
- }
733
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
734
- if (ally && ally.m.innate) {
735
- ally.removeVolatile(ally.m.innate);
736
- delete ally.m.innate;
737
- }
738
- },
665
+ restricted: ['Bolt Beak', 'Close Combat', 'U-turn', 'Volt Switch'],
739
666
  },
740
667
  {
741
- name: "[Gen 8] Chimera 1v1",
742
- desc: `One Pok&eacute;mon inherits specific traits from your entire 6-mon team, based on their order.`,
668
+ name: "[Gen 8] Tag Team Singles",
669
+ desc: `Bring four Pok&eacute;mon to Team Preview and choose two to battle in a singles battle.`,
743
670
  threads: [
744
- `&bullet; <a href="https://www.smogon.com/forums/threads/3661215/">Chimera 1v1</a>`,
671
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
745
672
  ],
746
673
 
747
674
  mod: 'gen8',
748
- ruleset: ['Chimera 1v1 Rule', 'Standard', 'Dynamax Clause', 'Sleep Moves Clause'],
675
+ ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
749
676
  banlist: [
750
- 'Shedinja', 'Huge Power', 'Moody', 'Neutralizing Gas', 'Truant', 'Perish Body', 'Eviolite', 'Focus Sash', 'Leek', 'Light Ball',
751
- 'Bolt Beak', 'Disable', 'Double Iron Bash', 'Fishious Rend', 'Perish Song', 'Switcheroo', 'Transform', 'Trick',
677
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
678
+ 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
679
+ 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
680
+ 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
752
681
  ],
753
682
  },
754
683
 
@@ -916,10 +845,10 @@ export const Formats: FormatList = [
916
845
  mod: 'gen8',
917
846
  ruleset: ['Standard OMs', 'Sleep Moves Clause'],
918
847
  banlist: [
919
- 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Nidoking',
920
- 'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power',
921
- 'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw',
922
- 'Baton Pass',
848
+ 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Kyogre', 'Marowak-Alola', 'Melmetal',
849
+ 'Nidoking', 'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap',
850
+ 'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense',
851
+ 'Quick Claw', 'Baton Pass',
923
852
  ],
924
853
  onValidateTeam(team) {
925
854
  const gods = new Set<string>();
@@ -1758,6 +1687,104 @@ export const Formats: FormatList = [
1758
1687
  },
1759
1688
  },
1760
1689
  },
1690
+ {
1691
+ name: "[Gen 8] Partners in Crime",
1692
+ desc: `Doubles-based metagame where both active ally Pok&eacute;mon share abilities and moves.`,
1693
+ threads: [
1694
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3706080/">Partners in Crime</a>`,
1695
+ ],
1696
+
1697
+ mod: 'partnersincrime',
1698
+ gameType: 'doubles',
1699
+ searchShow: false,
1700
+ ruleset: ['Standard Doubles', 'Dynamax Clause'],
1701
+ banlist: [
1702
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
1703
+ 'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
1704
+ 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
1705
+ 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
1706
+ 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
1707
+ 'Shell Smash', 'Swagger',
1708
+ ],
1709
+ onBeforeSwitchIn(pokemon) {
1710
+ pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
1711
+ let ngas = false;
1712
+ for (const poke of this.getAllActive()) {
1713
+ if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
1714
+ ngas = true;
1715
+ break;
1716
+ }
1717
+ }
1718
+ const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
1719
+ // Abilities that must be applied before both sides trigger onSwitchIn to correctly
1720
+ // handle switch-in ability-to-ability interactions, e.g. Intimidate counters
1721
+ const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
1722
+ 'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
1723
+ 'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
1724
+ ];
1725
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1726
+ if (ally && ally.ability !== pokemon.ability) {
1727
+ if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
1728
+ NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
1729
+ pokemon.m.innate = 'ability:' + ally.ability;
1730
+ delete pokemon.volatiles[pokemon.m.innate];
1731
+ if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
1732
+ }
1733
+ if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
1734
+ NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
1735
+ ally.m.innate = 'ability:' + pokemon.ability;
1736
+ delete ally.volatiles[ally.m.innate];
1737
+ if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
1738
+ }
1739
+ }
1740
+ },
1741
+ onSwitchInPriority: 2,
1742
+ onSwitchIn(pokemon) {
1743
+ let ngas = false;
1744
+ for (const poke of this.getAllActive()) {
1745
+ if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
1746
+ ngas = true;
1747
+ break;
1748
+ }
1749
+ }
1750
+ const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
1751
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1752
+ if (ally && ally.ability !== pokemon.ability) {
1753
+ if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
1754
+ pokemon.m.innate = 'ability:' + ally.ability;
1755
+ delete pokemon.volatiles[pokemon.m.innate];
1756
+ if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
1757
+ }
1758
+ if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
1759
+ ally.m.innate = 'ability:' + pokemon.ability;
1760
+ delete ally.volatiles[ally.m.innate];
1761
+ if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
1762
+ }
1763
+ }
1764
+ },
1765
+ onSwitchOut(pokemon) {
1766
+ if (pokemon.m.innate) {
1767
+ pokemon.removeVolatile(pokemon.m.innate);
1768
+ delete pokemon.m.innate;
1769
+ }
1770
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1771
+ if (ally && ally.m.innate) {
1772
+ ally.removeVolatile(ally.m.innate);
1773
+ delete ally.m.innate;
1774
+ }
1775
+ },
1776
+ onFaint(pokemon) {
1777
+ if (pokemon.m.innate) {
1778
+ pokemon.removeVolatile(pokemon.m.innate);
1779
+ delete pokemon.m.innate;
1780
+ }
1781
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1782
+ if (ally && ally.m.innate) {
1783
+ ally.removeVolatile(ally.m.innate);
1784
+ delete ally.m.innate;
1785
+ }
1786
+ },
1787
+ },
1761
1788
  {
1762
1789
  name: "[Gen 8] Pokebilities",
1763
1790
  desc: `Pok&eacute;mon have all of their released abilities simultaneously.`,
@@ -2173,11 +2200,12 @@ export const Formats: FormatList = [
2173
2200
  column: 2,
2174
2201
  },
2175
2202
  {
2176
- name: "[Gen 3] Challenge Cup",
2203
+ name: "[Gen 7] Pick-Your-Team Random Battle",
2177
2204
 
2178
- mod: 'gen3',
2179
- team: 'randomCC',
2180
- ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'],
2205
+ mod: 'gen7',
2206
+ team: 'random',
2207
+ ruleset: ['[Gen 7] Random Battle', 'Max Team Size = 12', 'Picked Team Size = 6', 'Team Preview'],
2208
+ desc: `Twelve Pokémon sets are randomly chosen, then you pick six for your team!`,
2181
2209
  },
2182
2210
 
2183
2211
  // Randomized Metas
@@ -2233,6 +2261,14 @@ export const Formats: FormatList = [
2233
2261
  }
2234
2262
  },
2235
2263
  },
2264
+ {
2265
+ name: "[Gen 8] Battle Factory",
2266
+ desc: `Randomized teams of Pok&eacute;mon for a generated Smogon tier with sets that are competitively viable.`,
2267
+
2268
+ mod: 'gen8',
2269
+ team: 'randomFactory',
2270
+ ruleset: ['Standard', 'Dynamax Clause'],
2271
+ },
2236
2272
  {
2237
2273
  name: "[Gen 8] BSS Factory",
2238
2274
  desc: `Randomized 3v3 Singles featuring Pok&eacute;mon and movesets popular in Battle Stadium Singles.`,
@@ -2521,39 +2557,35 @@ export const Formats: FormatList = [
2521
2557
  column: 3,
2522
2558
  },
2523
2559
  {
2524
- name: "[Gen 3] Ubers",
2560
+ name: "[Gen 5] Ubers",
2525
2561
  threads: [
2526
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286280/">ADV Ubers</a>`,
2562
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
2527
2563
  ],
2528
2564
 
2529
- mod: 'gen3',
2565
+ mod: 'gen5',
2530
2566
  // searchShow: false,
2531
- ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
2532
- banlist: ['Wobbuffet + Leftovers'],
2567
+ ruleset: ['Standard', 'Sleep Clause Mod'],
2533
2568
  },
2534
2569
  {
2535
- name: "[Gen 5] RU",
2570
+ name: "[Gen 7] PU",
2536
2571
  threads: [
2537
- `&bullet; <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
2538
- `&bullet; <a href="https://www.smogon.com/forums/threads/3473124/">BW2 RU Viability Rankings</a>`,
2572
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2573
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2539
2574
  ],
2540
2575
 
2541
- mod: 'gen5',
2576
+ mod: 'gen7',
2542
2577
  // searchShow: false,
2543
- ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'],
2544
- banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
2545
- unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
2578
+ ruleset: ['[Gen 7] NU'],
2579
+ banlist: ['NU', 'PUBL'],
2546
2580
  },
2547
2581
  {
2548
- name: "[Gen 7 Let's Go] UU",
2549
- threads: [
2550
- `&bullet; <a href="https://www.smogon.com/forums/threads/3659882/">LGPE UU Metagame Discussion &amp; Resources</a>`,
2551
- ],
2582
+ name: "[Gen 2] UUBL",
2583
+ threads: [`&bullet; <a href="https://www.smogon.com/forums/threads/3662389/">GSC UUBL</a>`],
2552
2584
 
2553
- mod: 'gen7letsgo',
2554
- // searchShow: false,
2555
- ruleset: ['[Gen 7 Let\'s Go] OU'],
2556
- banlist: ['OU', 'UUBL'],
2585
+ mod: 'gen2',
2586
+ ruleset: ['[Gen 2] OU'],
2587
+ banlist: ['OU'],
2588
+ unbanlist: ['Mean Look + Baton Pass', 'Spider Web + Baton Pass'],
2557
2589
  },
2558
2590
 
2559
2591
  // Past Gens OU
@@ -2824,18 +2856,6 @@ export const Formats: FormatList = [
2824
2856
  ruleset: ['[Gen 7] RU'],
2825
2857
  banlist: ['RU', 'NUBL', 'Drought'],
2826
2858
  },
2827
- {
2828
- name: "[Gen 7] PU",
2829
- threads: [
2830
- `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2831
- `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2832
- ],
2833
-
2834
- mod: 'gen7',
2835
- searchShow: false,
2836
- ruleset: ['[Gen 7] NU'],
2837
- banlist: ['NU', 'PUBL'],
2838
- },
2839
2859
  {
2840
2860
  name: "[Gen 7] LC",
2841
2861
  threads: [
@@ -2885,10 +2905,11 @@ export const Formats: FormatList = [
2885
2905
  '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',
2886
2906
  ],
2887
2907
  banlist: [
2888
- 'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega',
2889
- 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
2890
- 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom',
2891
- 'Moody', 'Focus Sash', 'Grass Whistle', 'Hypnosis', 'Perish Song', 'Sing', 'Detect + Fightinium Z',
2908
+ 'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon',
2909
+ 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mew', 'Mewtwo',
2910
+ 'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky',
2911
+ 'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom', 'Moody', 'Focus Sash', 'Grass Whistle', 'Hypnosis',
2912
+ 'Perish Song', 'Sing', 'Detect + Fightinium Z',
2892
2913
  ],
2893
2914
  },
2894
2915
  {
@@ -3381,26 +3402,29 @@ export const Formats: FormatList = [
3381
3402
  column: 4,
3382
3403
  },
3383
3404
  {
3384
- name: "[Gen 5] Ubers",
3405
+ name: "[Gen 5] UU",
3385
3406
  threads: [
3386
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
3407
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
3408
+ `&bullet; <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
3387
3409
  ],
3388
3410
 
3389
3411
  mod: 'gen5',
3390
3412
  searchShow: false,
3391
- ruleset: ['Standard', 'Sleep Clause Mod'],
3413
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
3414
+ banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
3392
3415
  },
3393
3416
  {
3394
- name: "[Gen 5] UU",
3417
+ name: "[Gen 5] RU",
3395
3418
  threads: [
3396
- `&bullet; <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
3397
3419
  `&bullet; <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
3420
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3473124/">BW2 RU Viability Rankings</a>`,
3398
3421
  ],
3399
3422
 
3400
3423
  mod: 'gen5',
3401
3424
  searchShow: false,
3402
- ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
3403
- banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
3425
+ ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'],
3426
+ banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
3427
+ unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
3404
3428
  },
3405
3429
  {
3406
3430
  name: "[Gen 5] NU",
@@ -3753,6 +3777,17 @@ export const Formats: FormatList = [
3753
3777
  section: "Past Generations",
3754
3778
  column: 5,
3755
3779
  },
3780
+ {
3781
+ name: "[Gen 3] Ubers",
3782
+ threads: [
3783
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286280/">ADV Ubers</a>`,
3784
+ ],
3785
+
3786
+ mod: 'gen3',
3787
+ searchShow: false,
3788
+ ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
3789
+ banlist: ['Wobbuffet + Leftovers'],
3790
+ },
3756
3791
  {
3757
3792
  name: "[Gen 3] UU",
3758
3793
  threads: [
@@ -3793,7 +3828,7 @@ export const Formats: FormatList = [
3793
3828
  'Clefable', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song',
3794
3829
  'Self-Destruct', 'Focus Band', 'King\'s Rock', 'Quick Claw',
3795
3830
  ],
3796
- unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil'],
3831
+ unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil', 'Soundproof'],
3797
3832
  },
3798
3833
  {
3799
3834
  name: "[Gen 3] Doubles OU",
@@ -3924,7 +3959,7 @@ export const Formats: FormatList = [
3924
3959
 
3925
3960
  mod: 'gen1',
3926
3961
  searchShow: false,
3927
- ruleset: ['[Gen 1] OU', 'APT Clause'],
3962
+ ruleset: ['[Gen 1] OU', 'APT Clause', 'Sleep Moves Clause'],
3928
3963
  banlist: ['OU', 'UUBL'],
3929
3964
  },
3930
3965
  {
@@ -3935,7 +3970,7 @@ export const Formats: FormatList = [
3935
3970
 
3936
3971
  mod: 'gen1',
3937
3972
  searchShow: false,
3938
- ruleset: ['[Gen 1] UU', '!APT Clause'],
3973
+ ruleset: ['[Gen 1] UU', '!APT Clause', '!Sleep Moves Clause'],
3939
3974
  banlist: ['UU', 'NUBL'],
3940
3975
  },
3941
3976
  {
@@ -3971,7 +4006,7 @@ export const Formats: FormatList = [
3971
4006
  searchShow: false,
3972
4007
  ruleset: [
3973
4008
  'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
3974
- 'Obtainable', 'Team Preview', 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
4009
+ 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
3975
4010
  ],
3976
4011
  banlist: ['Uber'],
3977
4012
  },
package/data/aliases.ts CHANGED
@@ -71,8 +71,8 @@ export const Aliases: {[alias: string]: string} = {
71
71
  gen6ag: "[Gen 6] Anything Goes",
72
72
  crossevo: "[Gen 8] Cross Evolution",
73
73
  mayhem: "[Gen 8] Random Battle Mayhem",
74
- omotm: "[Gen 8] Partners in Crime",
75
- lcotm: "[Gen 8] Chimera 1v1",
74
+ omotm: "[Gen 8] Revelationmons",
75
+ lcotm: "[Gen 8] Tag Team Singles",
76
76
 
77
77
  // mega evos
78
78
  fabio: "Ampharos-Mega",
@@ -287,7 +287,7 @@ export const Conditions: {[k: string]: ConditionData} = {
287
287
  // note that this is not updated for moves called by other moves
288
288
  // i.e. if Dig is called by Metronome, lastMoveTargetLoc will still be the user's location
289
289
  let moveTargetLoc: number = attacker.lastMoveTargetLoc!;
290
- if (effect.sourceEffect && this.dex.moves.get(effect.id).target === 'normal') {
290
+ if (effect.sourceEffect && this.dex.moves.get(effect.id).target !== 'self') {
291
291
  // this move was called by another move such as Metronome
292
292
  // and needs a random target to be determined this turn
293
293
  // it will already have one by now if there is any valid target