@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
package/config/formats.ts CHANGED
@@ -232,7 +232,7 @@ export const Formats: FormatList = [
232
232
  mod: 'gen8',
233
233
  ruleset: ['[Gen 8] PU'],
234
234
  banlist: [
235
- 'PU', 'Arctovish', 'Aurorus', 'Basculin', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Haunter', 'Magmortar', 'Magneton',
235
+ 'PU', 'Arctovish', 'Aurorus', 'Basculin', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Glastrier', 'Haunter', 'Magmortar', 'Magneton',
236
236
  'Malamar', 'Ninjask', 'Omastar', 'Rotom-Frost', 'Turtonator', 'Vanilluxe', 'Vikavolt', 'Silvally-Dragon', 'Silvally-Ground', 'Sneasel',
237
237
  'Damp Rock', 'Grassy Seed',
238
238
  ],
@@ -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
  ],
@@ -300,7 +300,7 @@ export const Formats: FormatList = [
300
300
  unbanlist: [
301
301
  'Venusaur', 'Charizard', 'Blastoise', 'Sandslash-Base', 'Ninetales-Base', 'Arcanine', 'Alakazam', 'Tentacruel', 'Magneton', 'Cloyster',
302
302
  'Exeggutor-Base', 'Rhydon', 'Gyarados', 'Lapras', 'Vaporeon', 'Jolteon', 'Flareon', 'Aerodactyl', 'Dragonite', 'Heracross', 'Skarmory',
303
- 'Tyranitar', 'Ludicolo', 'Aggron', 'Wailord', 'Altaria', 'Whiscash', 'Claydol', 'Cradily', 'Armaldo', 'Milotic', 'Salamence',
303
+ 'Tyranitar', 'Ludicolo', 'Gardevoir', 'Aggron', 'Wailord', 'Altaria', 'Whiscash', 'Claydol', 'Cradily', 'Armaldo', 'Milotic', 'Salamence',
304
304
  'Metagross', 'Roserade', 'Gastrodon', 'Spiritomb', 'Garchomp', 'Lucario', 'Rhyperior', 'Togekiss', 'Seismitoad', 'Archeops',
305
305
  'Vanilluxe', 'Escavalier', 'Haxorus', 'Accelgor', 'Druddigon', 'Bouffalant', 'Hydreigon', 'Volcarona', 'Aegislash', 'Tyrantrum',
306
306
  'Aurorus', 'Hawlucha', 'Carbink', 'Goodra', 'Gourgeist', 'Rillaboom', 'Cinderace', 'Inteleon', 'Mr. Rime', 'Dragapult',
@@ -584,7 +584,7 @@ export const Formats: FormatList = [
584
584
  ruleset: ['-Nonexistent', 'Standard NatDex', 'Forme Clause', 'Sleep Moves Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', '!Obtainable'],
585
585
  banlist: [
586
586
  // Pokemon
587
- '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',
588
588
  // Abilities
589
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',
590
590
  // Items
@@ -647,115 +647,38 @@ export const Formats: FormatList = [
647
647
  column: 2,
648
648
  },
649
649
  {
650
- name: "[Gen 8] Partners in Crime",
651
- desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`,
650
+ name: "[Gen 8] Revelationmons",
651
+ 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).`,
652
652
  threads: [
653
- `&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>`,
654
654
  ],
655
655
 
656
- mod: 'partnersincrime',
657
- gameType: 'doubles',
658
- // searchShow: false,
659
- ruleset: ['Standard Doubles', 'Dynamax Clause'],
656
+ mod: 'gen8',
657
+ ruleset: ['Standard OMs', 'Revelationmons Mod', 'Sleep Moves Clause'],
660
658
  banlist: [
661
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
662
- 'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
663
- 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
664
- 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
665
- 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
666
- 'Shell Smash', 'Swagger',
659
+ 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Dragapult', 'Eternatus',
660
+ 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kingdra', 'Kommo-o', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
661
+ 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
662
+ 'Noivern', 'Palkia', 'Pheromosa', 'Polteageist', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Thundurus-Therian', 'Urshifu-Base',
663
+ 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull',
664
+ 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
667
665
  ],
668
- onBeforeSwitchIn(pokemon) {
669
- pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
670
- let ngas = false;
671
- for (const poke of this.getAllActive()) {
672
- if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
673
- ngas = true;
674
- break;
675
- }
676
- }
677
- const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
678
- // Abilities that must be applied before both sides trigger onSwitchIn to correctly
679
- // handle switch-in ability-to-ability interactions, e.g. Intimidate counters
680
- const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
681
- 'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
682
- 'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
683
- ];
684
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
685
- if (ally && ally.ability !== pokemon.ability) {
686
- if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
687
- NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
688
- pokemon.m.innate = 'ability:' + ally.ability;
689
- delete pokemon.volatiles[pokemon.m.innate];
690
- if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
691
- }
692
- if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
693
- NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
694
- ally.m.innate = 'ability:' + pokemon.ability;
695
- delete ally.volatiles[ally.m.innate];
696
- if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
697
- }
698
- }
699
- },
700
- onSwitchInPriority: 2,
701
- onSwitchIn(pokemon) {
702
- let ngas = false;
703
- for (const poke of this.getAllActive()) {
704
- if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
705
- ngas = true;
706
- break;
707
- }
708
- }
709
- const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
710
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
711
- if (ally && ally.ability !== pokemon.ability) {
712
- if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
713
- pokemon.m.innate = 'ability:' + ally.ability;
714
- delete pokemon.volatiles[pokemon.m.innate];
715
- if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
716
- }
717
- if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
718
- ally.m.innate = 'ability:' + pokemon.ability;
719
- delete ally.volatiles[ally.m.innate];
720
- if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
721
- }
722
- }
723
- },
724
- onSwitchOut(pokemon) {
725
- if (pokemon.m.innate) {
726
- pokemon.removeVolatile(pokemon.m.innate);
727
- delete pokemon.m.innate;
728
- }
729
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
730
- if (ally && ally.m.innate) {
731
- ally.removeVolatile(ally.m.innate);
732
- delete ally.m.innate;
733
- }
734
- },
735
- onFaint(pokemon) {
736
- if (pokemon.m.innate) {
737
- pokemon.removeVolatile(pokemon.m.innate);
738
- delete pokemon.m.innate;
739
- }
740
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
741
- if (ally && ally.m.innate) {
742
- ally.removeVolatile(ally.m.innate);
743
- delete ally.m.innate;
744
- }
745
- },
666
+ restricted: ['Bolt Beak', 'Close Combat', 'U-turn', 'Volt Switch'],
746
667
  },
747
668
  {
748
- name: "[Gen 8] Chimera 1v1",
749
- desc: `One Pok&eacute;mon inherits specific traits from your entire 6-mon team, based on their order.`,
669
+ name: "[Gen 8] Tag Team Singles",
670
+ desc: `Bring four Pok&eacute;mon to Team Preview and choose two to battle in a singles battle.`,
750
671
  threads: [
751
- `&bullet; <a href="https://www.smogon.com/forums/threads/3661215/">Chimera 1v1</a>`,
672
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
752
673
  ],
753
674
 
754
675
  mod: 'gen8',
755
- ruleset: ['Chimera 1v1 Rule', 'Standard', 'Dynamax Clause', 'Sleep Moves Clause'],
676
+ ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
756
677
  banlist: [
757
- 'Shedinja', 'Huge Power', 'Moody', 'Neutralizing Gas', 'Truant', 'Perish Body', 'Eviolite', 'Focus Sash', 'Leek', 'Light Ball',
758
- 'Bolt Beak', 'Disable', 'Double Iron Bash', 'Fishious Rend', 'Perish Song', 'Switcheroo', 'Transform', 'Trick',
678
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
679
+ 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
680
+ 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
681
+ 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
759
682
  ],
760
683
  },
761
684
 
@@ -795,14 +718,14 @@ export const Formats: FormatList = [
795
718
  mod: 'gen8',
796
719
  ruleset: ['Standard OMs', '!Obtainable Abilities', '2 Ability Clause', 'Sleep Moves Clause'],
797
720
  banlist: [
798
- 'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
799
- 'Gengar', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White',
800
- 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern',
801
- 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike',
802
- 'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap',
803
- 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out',
804
- 'Intrepid Sword', 'Libero', 'Magic Bounce', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean',
805
- 'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
721
+ 'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Genesect',
722
+ 'Gengar', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
723
+ 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa',
724
+ 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas',
725
+ 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy',
726
+ 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Intrepid Sword', 'Libero', 'Magic Bounce',
727
+ 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout',
728
+ 'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
806
729
  ],
807
730
  },
808
731
  {
@@ -1765,6 +1688,104 @@ export const Formats: FormatList = [
1765
1688
  },
1766
1689
  },
1767
1690
  },
1691
+ {
1692
+ name: "[Gen 8] Partners in Crime",
1693
+ desc: `Doubles-based metagame where both active ally Pok&eacute;mon share abilities and moves.`,
1694
+ threads: [
1695
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3706080/">Partners in Crime</a>`,
1696
+ ],
1697
+
1698
+ mod: 'partnersincrime',
1699
+ gameType: 'doubles',
1700
+ searchShow: false,
1701
+ ruleset: ['Standard Doubles', 'Dynamax Clause'],
1702
+ banlist: [
1703
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
1704
+ 'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
1705
+ 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
1706
+ 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
1707
+ 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
1708
+ 'Shell Smash', 'Swagger',
1709
+ ],
1710
+ onBeforeSwitchIn(pokemon) {
1711
+ pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
1712
+ let ngas = false;
1713
+ for (const poke of this.getAllActive()) {
1714
+ if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
1715
+ ngas = true;
1716
+ break;
1717
+ }
1718
+ }
1719
+ const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
1720
+ // Abilities that must be applied before both sides trigger onSwitchIn to correctly
1721
+ // handle switch-in ability-to-ability interactions, e.g. Intimidate counters
1722
+ const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
1723
+ 'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
1724
+ 'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
1725
+ ];
1726
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1727
+ if (ally && ally.ability !== pokemon.ability) {
1728
+ if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
1729
+ NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
1730
+ pokemon.m.innate = 'ability:' + ally.ability;
1731
+ delete pokemon.volatiles[pokemon.m.innate];
1732
+ if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
1733
+ }
1734
+ if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
1735
+ NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
1736
+ ally.m.innate = 'ability:' + pokemon.ability;
1737
+ delete ally.volatiles[ally.m.innate];
1738
+ if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
1739
+ }
1740
+ }
1741
+ },
1742
+ onSwitchInPriority: 2,
1743
+ onSwitchIn(pokemon) {
1744
+ let ngas = false;
1745
+ for (const poke of this.getAllActive()) {
1746
+ if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
1747
+ ngas = true;
1748
+ break;
1749
+ }
1750
+ }
1751
+ const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
1752
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1753
+ if (ally && ally.ability !== pokemon.ability) {
1754
+ if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
1755
+ pokemon.m.innate = 'ability:' + ally.ability;
1756
+ delete pokemon.volatiles[pokemon.m.innate];
1757
+ if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
1758
+ }
1759
+ if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
1760
+ ally.m.innate = 'ability:' + pokemon.ability;
1761
+ delete ally.volatiles[ally.m.innate];
1762
+ if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
1763
+ }
1764
+ }
1765
+ },
1766
+ onSwitchOut(pokemon) {
1767
+ if (pokemon.m.innate) {
1768
+ pokemon.removeVolatile(pokemon.m.innate);
1769
+ delete pokemon.m.innate;
1770
+ }
1771
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1772
+ if (ally && ally.m.innate) {
1773
+ ally.removeVolatile(ally.m.innate);
1774
+ delete ally.m.innate;
1775
+ }
1776
+ },
1777
+ onFaint(pokemon) {
1778
+ if (pokemon.m.innate) {
1779
+ pokemon.removeVolatile(pokemon.m.innate);
1780
+ delete pokemon.m.innate;
1781
+ }
1782
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
1783
+ if (ally && ally.m.innate) {
1784
+ ally.removeVolatile(ally.m.innate);
1785
+ delete ally.m.innate;
1786
+ }
1787
+ },
1788
+ },
1768
1789
  {
1769
1790
  name: "[Gen 8] Pokebilities",
1770
1791
  desc: `Pok&eacute;mon have all of their released abilities simultaneously.`,
@@ -2180,11 +2201,12 @@ export const Formats: FormatList = [
2180
2201
  column: 2,
2181
2202
  },
2182
2203
  {
2183
- name: "[Gen 3] Challenge Cup",
2204
+ name: "[Gen 7] Pick-Your-Team Random Battle",
2184
2205
 
2185
- mod: 'gen3',
2186
- team: 'randomCC',
2187
- ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'],
2206
+ mod: 'gen7',
2207
+ team: 'random',
2208
+ ruleset: ['[Gen 7] Random Battle', 'Max Team Size = 12', 'Picked Team Size = 6', 'Team Preview'],
2209
+ desc: `Twelve Pokémon sets are randomly chosen, then you pick six for your team!`,
2188
2210
  },
2189
2211
 
2190
2212
  // Randomized Metas
@@ -2240,6 +2262,14 @@ export const Formats: FormatList = [
2240
2262
  }
2241
2263
  },
2242
2264
  },
2265
+ {
2266
+ name: "[Gen 8] Battle Factory",
2267
+ desc: `Randomized teams of Pok&eacute;mon for a generated Smogon tier with sets that are competitively viable.`,
2268
+
2269
+ mod: 'gen8',
2270
+ team: 'randomFactory',
2271
+ ruleset: ['Standard', 'Dynamax Clause'],
2272
+ },
2243
2273
  {
2244
2274
  name: "[Gen 8] BSS Factory",
2245
2275
  desc: `Randomized 3v3 Singles featuring Pok&eacute;mon and movesets popular in Battle Stadium Singles.`,
@@ -2528,44 +2558,34 @@ export const Formats: FormatList = [
2528
2558
  column: 3,
2529
2559
  },
2530
2560
  {
2531
- name: "[Gen 4] Ubers",
2561
+ name: "[Gen 5] Ubers",
2532
2562
  threads: [
2533
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
2563
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
2534
2564
  ],
2535
2565
 
2536
- mod: 'gen4',
2566
+ mod: 'gen5',
2537
2567
  // searchShow: false,
2538
- ruleset: ['Standard'],
2539
- banlist: ['AG'],
2568
+ ruleset: ['Standard', 'Sleep Clause Mod'],
2540
2569
  },
2541
2570
  {
2542
- name: "[Gen 4] LC",
2571
+ name: "[Gen 7] PU",
2543
2572
  threads: [
2544
- `&bullet; <a href="https://www.smogon.com/dp/articles/little_cup_guide">DPP LC Guide</a>`,
2545
- `&bullet; <a href="https://www.smogon.com/forums/posts/7336500/">DPP LC Viability Rankings</a>`,
2573
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2574
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2546
2575
  ],
2547
2576
 
2548
- mod: 'gen4',
2577
+ mod: 'gen7',
2549
2578
  // searchShow: false,
2550
- ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
2551
- banlist: [
2552
- 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma',
2553
- 'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Sonic Boom', 'Swagger',
2554
- ],
2579
+ ruleset: ['[Gen 7] NU'],
2580
+ banlist: ['NU', 'PUBL'],
2555
2581
  },
2556
2582
  {
2557
- name: "[Gen 1] Nintendo Cup 1997",
2558
- threads: [
2559
- `&bullet; <a href="https://www.smogon.com/forums/threads/3682412/">Nintendo Cup 1997 Discussion &amp; Resources</a>`,
2560
- ],
2583
+ name: "[Gen 2] UUBL",
2584
+ threads: [`&bullet; <a href="https://www.smogon.com/forums/threads/3662389/">GSC UUBL</a>`],
2561
2585
 
2562
- mod: 'gen1jpn',
2563
- // searchShow: false,
2564
- ruleset: [
2565
- 'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
2566
- 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
2567
- ],
2568
- banlist: ['Uber'],
2586
+ mod: 'gen2',
2587
+ ruleset: ['[Gen 2] OU'],
2588
+ banlist: ['OU'],
2569
2589
  },
2570
2590
 
2571
2591
  // Past Gens OU
@@ -2836,18 +2856,6 @@ export const Formats: FormatList = [
2836
2856
  ruleset: ['[Gen 7] RU'],
2837
2857
  banlist: ['RU', 'NUBL', 'Drought'],
2838
2858
  },
2839
- {
2840
- name: "[Gen 7] PU",
2841
- threads: [
2842
- `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2843
- `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2844
- ],
2845
-
2846
- mod: 'gen7',
2847
- searchShow: false,
2848
- ruleset: ['[Gen 7] NU'],
2849
- banlist: ['NU', 'PUBL'],
2850
- },
2851
2859
  {
2852
2860
  name: "[Gen 7] LC",
2853
2861
  threads: [
@@ -2897,10 +2905,11 @@ export const Formats: FormatList = [
2897
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',
2898
2906
  ],
2899
2907
  banlist: [
2900
- 'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega',
2901
- 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
2902
- 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom',
2903
- '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',
2904
2913
  ],
2905
2914
  },
2906
2915
  {
@@ -3392,16 +3401,6 @@ export const Formats: FormatList = [
3392
3401
  section: "B2/W2 Singles",
3393
3402
  column: 4,
3394
3403
  },
3395
- {
3396
- name: "[Gen 5] Ubers",
3397
- threads: [
3398
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
3399
- ],
3400
-
3401
- mod: 'gen5',
3402
- searchShow: false,
3403
- ruleset: ['Standard', 'Sleep Clause Mod'],
3404
- },
3405
3404
  {
3406
3405
  name: "[Gen 5] UU",
3407
3406
  threads: [
@@ -3602,6 +3601,17 @@ export const Formats: FormatList = [
3602
3601
  section: "DPP Singles",
3603
3602
  column: 5,
3604
3603
  },
3604
+ {
3605
+ name: "[Gen 4] Ubers",
3606
+ threads: [
3607
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
3608
+ ],
3609
+
3610
+ mod: 'gen4',
3611
+ searchShow: false,
3612
+ ruleset: ['Standard'],
3613
+ banlist: ['AG'],
3614
+ },
3605
3615
  {
3606
3616
  name: "[Gen 4] UU",
3607
3617
  threads: [
@@ -3645,6 +3655,21 @@ export const Formats: FormatList = [
3645
3655
  'Sharpedo', 'Shiftry', 'Skuntank', 'Slowking', 'Tauros', 'Typhlosion', 'Venomoth', 'Vileplume',
3646
3656
  ],
3647
3657
  },
3658
+ {
3659
+ name: "[Gen 4] LC",
3660
+ threads: [
3661
+ `&bullet; <a href="https://www.smogon.com/dp/articles/little_cup_guide">DPP LC Guide</a>`,
3662
+ `&bullet; <a href="https://www.smogon.com/forums/posts/7336500/">DPP LC Viability Rankings</a>`,
3663
+ ],
3664
+
3665
+ mod: 'gen4',
3666
+ searchShow: false,
3667
+ ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
3668
+ banlist: [
3669
+ 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma',
3670
+ 'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Sonic Boom', 'Swagger',
3671
+ ],
3672
+ },
3648
3673
  {
3649
3674
  name: "[Gen 4] Anything Goes",
3650
3675
 
@@ -3803,7 +3828,7 @@ export const Formats: FormatList = [
3803
3828
  'Clefable', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song',
3804
3829
  'Self-Destruct', 'Focus Band', 'King\'s Rock', 'Quick Claw',
3805
3830
  ],
3806
- unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil'],
3831
+ unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil', 'Soundproof'],
3807
3832
  },
3808
3833
  {
3809
3834
  name: "[Gen 3] Doubles OU",
@@ -3934,7 +3959,7 @@ export const Formats: FormatList = [
3934
3959
 
3935
3960
  mod: 'gen1',
3936
3961
  searchShow: false,
3937
- ruleset: ['[Gen 1] OU', 'APT Clause'],
3962
+ ruleset: ['[Gen 1] OU', 'APT Clause', 'Sleep Moves Clause'],
3938
3963
  banlist: ['OU', 'UUBL'],
3939
3964
  },
3940
3965
  {
@@ -3945,7 +3970,7 @@ export const Formats: FormatList = [
3945
3970
 
3946
3971
  mod: 'gen1',
3947
3972
  searchShow: false,
3948
- ruleset: ['[Gen 1] UU', '!APT Clause'],
3973
+ ruleset: ['[Gen 1] UU', '!APT Clause', '!Sleep Moves Clause'],
3949
3974
  banlist: ['UU', 'NUBL'],
3950
3975
  },
3951
3976
  {
@@ -3971,6 +3996,20 @@ export const Formats: FormatList = [
3971
3996
  ruleset: ['Standard'],
3972
3997
  banlist: ['Uber'],
3973
3998
  },
3999
+ {
4000
+ name: "[Gen 1] Nintendo Cup 1997",
4001
+ threads: [
4002
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3682412/">Nintendo Cup 1997 Discussion &amp; Resources</a>`,
4003
+ ],
4004
+
4005
+ mod: 'gen1jpn',
4006
+ searchShow: false,
4007
+ ruleset: [
4008
+ 'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
4009
+ 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
4010
+ ],
4011
+ banlist: ['Uber'],
4012
+ },
3974
4013
  {
3975
4014
  name: "[Gen 1] Stadium OU",
3976
4015
  threads: [
package/data/abilities.ts CHANGED
@@ -516,8 +516,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
516
516
  }
517
517
  }
518
518
  if (statsLowered) {
519
- this.add('-ability', target, 'Competitive');
520
- this.boost({spa: 2}, target, target, null, true);
519
+ this.boost({spa: 2}, target, target, null, false, true);
521
520
  }
522
521
  },
523
522
  name: "Competitive",
@@ -706,8 +705,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
706
705
  }
707
706
  }
708
707
  if (statsLowered) {
709
- this.add('-ability', target, 'Defiant');
710
- this.boost({atk: 2}, target, target, null, true);
708
+ this.boost({atk: 2}, target, target, null, false, true);
711
709
  }
712
710
  },
713
711
  name: "Defiant",
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