@pkmn/sim 0.6.1 → 0.6.3

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 (51) hide show
  1. package/build/config/formats.js +161 -166
  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/formats-data.js +111 -115
  6. package/build/data/formats-data.js.map +1 -1
  7. package/build/data/items.js +7 -1
  8. package/build/data/items.js.map +1 -1
  9. package/build/data/learnsets.js +3 -2
  10. package/build/data/learnsets.js.map +1 -1
  11. package/build/data/mods/gen1/moves.js +0 -10
  12. package/build/data/mods/gen1/moves.js.map +1 -1
  13. package/build/data/mods/gen1/scripts.js +87 -52
  14. package/build/data/mods/gen1/scripts.js.map +1 -1
  15. package/build/data/mods/gen2/moves.js +0 -1
  16. package/build/data/mods/gen2/moves.js.map +1 -1
  17. package/build/data/mods/gen2/scripts.js +1 -1
  18. package/build/data/moves.js +44 -25
  19. package/build/data/moves.js.map +1 -1
  20. package/build/data/pokedex.js +1 -1
  21. package/build/data/rulesets.js +58 -0
  22. package/build/data/rulesets.js.map +1 -1
  23. package/build/sim/battle.js +8 -4
  24. package/build/sim/battle.js.map +1 -1
  25. package/build/sim/dex-conditions.d.ts +1 -0
  26. package/build/sim/dex-conditions.js.map +1 -1
  27. package/build/sim/field.js +1 -0
  28. package/build/sim/field.js.map +1 -1
  29. package/build/sim/pokemon.js +2 -10
  30. package/build/sim/pokemon.js.map +1 -1
  31. package/build/sim/team-validator.d.ts +2 -2
  32. package/build/sim/team-validator.js +19 -14
  33. package/build/sim/team-validator.js.map +1 -1
  34. package/config/formats.ts +168 -169
  35. package/data/aliases.ts +2 -2
  36. package/data/formats-data.ts +111 -115
  37. package/data/items.ts +7 -1
  38. package/data/learnsets.ts +3 -2
  39. package/data/mods/gen1/moves.ts +0 -10
  40. package/data/mods/gen1/scripts.ts +85 -51
  41. package/data/mods/gen2/moves.ts +0 -1
  42. package/data/mods/gen2/scripts.ts +1 -1
  43. package/data/moves.ts +43 -23
  44. package/data/pokedex.ts +1 -1
  45. package/data/rulesets.ts +59 -0
  46. package/package.json +1 -1
  47. package/sim/battle.ts +6 -4
  48. package/sim/dex-conditions.ts +1 -0
  49. package/sim/field.ts +1 -0
  50. package/sim/pokemon.ts +1 -8
  51. package/sim/team-validator.ts +27 -15
@@ -263,6 +263,13 @@ exports.Formats = [
263
263
  {
264
264
  name: "[Gen 8] Battle Stadium Singles",
265
265
  mod: 'gen8',
266
+ ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit Two Restricted'],
267
+ restricted: ['Restricted Legendary'],
268
+ },
269
+ {
270
+ name: "[Gen 8] Battle Stadium Singles Series 13",
271
+ mod: 'gen8',
272
+ searchShow: false,
266
273
  ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
267
274
  banlist: ['Eternatus-Eternamax'],
268
275
  unbanlist: ['Mythical', 'Restricted Legendary'],
@@ -346,20 +353,12 @@ exports.Formats = [
346
353
  {
347
354
  name: "[Gen 8] Battle Stadium Doubles Series 13",
348
355
  mod: 'gen8',
356
+ searchShow: false,
349
357
  gameType: 'doubles',
350
358
  ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer'],
351
359
  banlist: ['Eternatus-Eternamax'],
352
360
  unbanlist: ['Mythical', 'Restricted Legendary'],
353
361
  },
354
- {
355
- name: "[Gen 8] Ultimate Finale",
356
- threads: [
357
- `&bullet; <a href="https://www.smogon.com/forums/threads/3709248/">Ultimate Finale Discussion</a>`,
358
- ],
359
- mod: 'gen8',
360
- gameType: 'doubles',
361
- ruleset: ['Obtainable', 'Team Preview', 'Nickname Clause', 'Adjust Level = 100', 'Cancel Mod', 'Min Source Gen = 8'],
362
- },
363
362
  {
364
363
  name: "[Gen 8] Spikemuth Cup",
365
364
  mod: 'gen8',
@@ -590,37 +589,13 @@ exports.Formats = [
590
589
  column: 2,
591
590
  },
592
591
  {
593
- name: "[Gen 8] Revelationmons",
594
- 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).`,
595
- threads: [
596
- `&bullet; <a href="https://www.smogon.com/forums/threads/3692297/">Revelationmons</a>`,
597
- ],
598
- mod: 'gen8',
599
- ruleset: ['Standard OMs', 'Revelationmons Mod', 'Sleep Moves Clause'],
600
- banlist: [
601
- 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Dragapult', 'Eternatus',
602
- 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kingdra', 'Kommo-o', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
603
- 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
604
- 'Noivern', 'Palkia', 'Pheromosa', 'Polteageist', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Thundurus-Therian', 'Urshifu-Base',
605
- 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull',
606
- 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
607
- ],
608
- restricted: ['Bolt Beak', 'Close Combat', 'U-turn', 'Volt Switch'],
609
- },
610
- {
611
- name: "[Gen 8] Tag Team Singles",
612
- desc: `Bring four Pok&eacute;mon to Team Preview and choose two to battle in a singles battle.`,
592
+ name: "[Gen 8] Pure Hackmons",
593
+ desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`,
613
594
  threads: [
614
- `&bullet; <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
595
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3656851/">Pure Hackmons</a>`,
615
596
  ],
616
597
  mod: 'gen8',
617
- ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
618
- banlist: [
619
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
620
- 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
621
- 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
622
- 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
623
- ],
598
+ ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
624
599
  },
625
600
  // Other Metagames
626
601
  ///////////////////////////////////////////////////////////////////
@@ -630,7 +605,7 @@ exports.Formats = [
630
605
  },
631
606
  {
632
607
  name: "[Gen 8] Balanced Hackmons",
633
- desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
608
+ desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`,
634
609
  threads: [
635
610
  `&bullet; <a href="https://www.smogon.com/forums/threads/3656408/">Balanced Hackmons</a>`,
636
611
  `&bullet; <a href="https://www.smogon.com/forums/threads/3659817/">BH Resources</a>`,
@@ -662,7 +637,7 @@ exports.Formats = [
662
637
  'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy',
663
638
  'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Intrepid Sword', 'Libero', 'Magic Bounce',
664
639
  'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout',
665
- 'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
640
+ 'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass', 'Electrify',
666
641
  ],
667
642
  },
668
643
  {
@@ -779,70 +754,12 @@ exports.Formats = [
779
754
  `&bullet; <a href="https://www.smogon.com/forums/threads/3660461/">Godly Gift</a>`,
780
755
  ],
781
756
  mod: 'gen8',
782
- ruleset: ['Standard OMs', 'Sleep Moves Clause'],
757
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Godly Gift Mod'],
783
758
  banlist: [
784
759
  'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Kyogre', 'Marowak-Alola', 'Melmetal',
785
- 'Nidoking', 'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap',
786
- 'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense',
787
- 'Quick Claw', 'Baton Pass',
760
+ 'Nidoking', 'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Arena Trap', 'Huge Power', 'Moody',
761
+ 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Baton Pass',
788
762
  ],
789
- onValidateTeam(team) {
790
- const gods = new Set();
791
- for (const set of team) {
792
- let species = this.dex.species.get(set.species);
793
- if (typeof species.battleOnly === 'string')
794
- species = this.dex.species.get(species.battleOnly);
795
- if (set.item && this.dex.items.get(set.item).megaStone) {
796
- const item = this.dex.items.get(set.item);
797
- if (item.megaEvolves === species.baseSpecies) {
798
- species = this.dex.species.get(item.megaStone);
799
- }
800
- }
801
- if (this.ruleTable.has('standardnatdex')) {
802
- const format = this.dex.formats.getRuleTable(this.dex.formats.get('gen8nationaldex'));
803
- if (format.isBannedSpecies(species))
804
- gods.add(species.name);
805
- }
806
- else {
807
- if (['ag', 'uber'].includes(this.toID(species.tier)) || this.toID(set.ability) === 'powerconstruct') {
808
- gods.add(species.name);
809
- }
810
- }
811
- }
812
- if (gods.size > 1) {
813
- return [`You have too many Gods.`, `(${Array.from(gods).join(', ')} are Gods.)`];
814
- }
815
- },
816
- onModifySpeciesPriority: 3,
817
- onModifySpecies(species, target, source) {
818
- if (source || !target?.side)
819
- return;
820
- const god = target.side.team.find(set => {
821
- let godSpecies = this.dex.species.get(set.species);
822
- const isNatDex = this.format.ruleTable?.has('standardnatdex');
823
- const validator = this.dex.formats.getRuleTable(this.dex.formats.get(`gen${isNatDex && this.gen < 8 ? 8 : this.gen}${isNatDex ? 'nationaldex' : 'ou'}`));
824
- if (this.toID(set.ability) === 'powerconstruct') {
825
- return true;
826
- }
827
- if (set.item) {
828
- const item = this.dex.items.get(set.item);
829
- if (item.megaEvolves === set.species)
830
- godSpecies = this.dex.species.get(item.megaStone);
831
- }
832
- const isBanned = validator.isBannedSpecies(godSpecies);
833
- return isBanned;
834
- }) || target.side.team[0];
835
- const stat = Dex.stats.ids()[target.side.team.indexOf(target.set)];
836
- const newSpecies = this.dex.deepClone(species);
837
- let godSpecies = this.dex.species.get(god.species);
838
- if (typeof godSpecies.battleOnly === 'string') {
839
- godSpecies = this.dex.species.get(godSpecies.battleOnly);
840
- }
841
- newSpecies.bst -= newSpecies.baseStats[stat];
842
- newSpecies.baseStats[stat] = godSpecies.baseStats[stat];
843
- newSpecies.bst += newSpecies.baseStats[stat];
844
- return newSpecies;
845
- },
846
763
  },
847
764
  {
848
765
  name: "[Gen 8] Free-For-All",
@@ -1655,9 +1572,9 @@ exports.Formats = [
1655
1572
  'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
1656
1573
  'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
1657
1574
  'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
1658
- 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
1659
- 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
1660
- 'Shell Smash', 'Swagger',
1575
+ 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Contrary',
1576
+ 'Emergency Exit', 'Huge Power', 'Moody', 'Power Construct', 'Serene Grace', 'Shadow Tag', 'Wimp Out',
1577
+ 'Wonder Guard', 'Ally Switch', 'Bolt Beak', 'Fishious Rend', 'Shell Smash', 'Swagger',
1661
1578
  ],
1662
1579
  onBeforeSwitchIn(pokemon) {
1663
1580
  pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
@@ -1834,16 +1751,6 @@ exports.Formats = [
1834
1751
  pokemon.m.innates = undefined;
1835
1752
  },
1836
1753
  },
1837
- {
1838
- name: "[Gen 8] Pure Hackmons",
1839
- desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
1840
- threads: [
1841
- `&bullet; <a href="https://www.smogon.com/forums/threads/3656851/">Pure Hackmons</a>`,
1842
- ],
1843
- mod: 'gen8',
1844
- searchShow: false,
1845
- ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
1846
- },
1847
1754
  {
1848
1755
  name: "[Gen 8] Shared Power",
1849
1756
  desc: `Once a Pok&eacute;mon switches in, its ability is shared with the rest of the team.`,
@@ -1908,6 +1815,22 @@ exports.Formats = [
1908
1815
  }
1909
1816
  },
1910
1817
  },
1818
+ {
1819
+ name: "[Gen 8] Tag Team Singles",
1820
+ desc: `Bring four Pok&eacute;mon to Team Preview and choose two to battle in a singles battle.`,
1821
+ threads: [
1822
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
1823
+ ],
1824
+ mod: 'gen8',
1825
+ searchShow: false,
1826
+ ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
1827
+ banlist: [
1828
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
1829
+ 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
1830
+ 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
1831
+ 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
1832
+ ],
1833
+ },
1911
1834
  {
1912
1835
  name: "[Gen 8] Trademarked",
1913
1836
  desc: `Sacrifice your Pok&eacute;mon's ability for a status move that activates on switch-in.`,
@@ -2147,11 +2070,90 @@ exports.Formats = [
2147
2070
  column: 2,
2148
2071
  },
2149
2072
  {
2150
- name: "[Gen 7] Pick-Your-Team Random Battle",
2151
- mod: 'gen7',
2073
+ name: "[Gen 4] Shared Power Random Battle",
2074
+ desc: `[Gen 4] Random Battle with aspects of [Gen 8] Shared Power`,
2075
+ mod: 'gen4',
2152
2076
  team: 'random',
2153
- ruleset: ['[Gen 7] Random Battle', 'Max Team Size = 12', 'Picked Team Size = 6', 'Team Preview'],
2154
- desc: `Twelve Pokémon sets are randomly chosen, then you pick six for your team!`,
2077
+ ruleset: ['[Gen 4] Random Battle', 'Team Preview'],
2078
+ getSharedPower(pokemon) {
2079
+ const sharedPower = new Set();
2080
+ for (const ally of pokemon.side.pokemon) {
2081
+ if (ally.previouslySwitchedIn > 0) {
2082
+ if (pokemon.battle.dex.currentMod !== 'sharedpower' && ['trace', 'mirrorarmor'].includes(ally.baseAbility)) {
2083
+ sharedPower.add('noability');
2084
+ continue;
2085
+ }
2086
+ sharedPower.add(ally.baseAbility);
2087
+ }
2088
+ }
2089
+ sharedPower.delete(pokemon.baseAbility);
2090
+ return sharedPower;
2091
+ },
2092
+ onBeforeSwitchIn(pokemon) {
2093
+ let format = this.format;
2094
+ if (!format.getSharedPower)
2095
+ format = this.dex.formats.get('gen8sharedpower');
2096
+ for (const ability of format.getSharedPower(pokemon)) {
2097
+ const effect = 'ability:' + ability;
2098
+ pokemon.volatiles[effect] = { id: this.toID(effect), target: pokemon };
2099
+ if (!pokemon.m.abils)
2100
+ pokemon.m.abils = [];
2101
+ if (!pokemon.m.abils.includes(effect))
2102
+ pokemon.m.abils.push(effect);
2103
+ }
2104
+ },
2105
+ onSwitchInPriority: 2,
2106
+ onSwitchIn(pokemon) {
2107
+ let format = this.format;
2108
+ if (!format.getSharedPower)
2109
+ format = this.dex.formats.get('gen8sharedpower');
2110
+ for (const ability of format.getSharedPower(pokemon)) {
2111
+ if (ability === 'noability') {
2112
+ this.hint(`Mirror Armor and Trace break in Shared Power formats that don't use Shared Power as a base, so they get removed from non-base users.`);
2113
+ }
2114
+ const effect = 'ability:' + ability;
2115
+ delete pokemon.volatiles[effect];
2116
+ pokemon.addVolatile(effect);
2117
+ }
2118
+ },
2119
+ field: {
2120
+ suppressingWeather() {
2121
+ for (const pokemon of this.battle.getAllActive()) {
2122
+ const innates = Object.keys(pokemon.volatiles).filter(x => x.startsWith('ability:'));
2123
+ if (pokemon && !pokemon.ignoringAbility() &&
2124
+ (pokemon.getAbility().suppressWeather || innates.some(x => (this.battle.dex.abilities.get(x.replace('ability:', '')).suppressWeather)))) {
2125
+ return true;
2126
+ }
2127
+ }
2128
+ return false;
2129
+ },
2130
+ },
2131
+ pokemon: {
2132
+ hasAbility(ability) {
2133
+ if (this.ignoringAbility())
2134
+ return false;
2135
+ if (Array.isArray(ability))
2136
+ return ability.some(abil => this.hasAbility(abil));
2137
+ const abilityid = this.battle.toID(ability);
2138
+ return this.ability === abilityid || !!this.volatiles['ability:' + abilityid];
2139
+ },
2140
+ ignoringAbility() {
2141
+ // Check if any active pokemon have the ability Neutralizing Gas
2142
+ let neutralizinggas = false;
2143
+ for (const pokemon of this.battle.getAllActive()) {
2144
+ // can't use hasAbility because it would lead to infinite recursion
2145
+ if ((pokemon.ability === 'neutralizinggas' || pokemon.m.abils?.includes('ability:neutralizinggas')) &&
2146
+ !pokemon.volatiles['gastroacid'] && !pokemon.abilityState.ending) {
2147
+ neutralizinggas = true;
2148
+ break;
2149
+ }
2150
+ }
2151
+ return !!((this.battle.gen >= 5 && !this.isActive) ||
2152
+ ((this.volatiles['gastroacid'] ||
2153
+ (neutralizinggas && (this.ability !== 'neutralizinggas' ||
2154
+ this.m.abils?.includes('ability:neutralizinggas')))) && !this.getAbility().isPermanent));
2155
+ },
2156
+ },
2155
2157
  },
2156
2158
  // Randomized Metas
2157
2159
  ///////////////////////////////////////////////////////////////////
@@ -2480,31 +2482,36 @@ exports.Formats = [
2480
2482
  column: 3,
2481
2483
  },
2482
2484
  {
2483
- name: "[Gen 5] Ubers",
2485
+ name: "[Gen 6] Ubers",
2484
2486
  threads: [
2485
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
2487
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286277/">ORAS Ubers</a>`,
2486
2488
  ],
2487
- mod: 'gen5',
2489
+ mod: 'gen6',
2488
2490
  // searchShow: false,
2489
- ruleset: ['Standard', 'Sleep Clause Mod'],
2491
+ ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'],
2490
2492
  },
2491
2493
  {
2492
- name: "[Gen 7] PU",
2494
+ name: "[Gen 3] Doubles OU",
2493
2495
  threads: [
2494
- `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2495
- `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2496
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3666831/">ADV Doubles OU</a>`,
2496
2497
  ],
2497
- mod: 'gen7',
2498
+ mod: 'gen3',
2498
2499
  // searchShow: false,
2499
- ruleset: ['[Gen 7] NU'],
2500
- banlist: ['NU', 'PUBL'],
2500
+ gameType: 'doubles',
2501
+ ruleset: ['Standard', '!Switch Priority Clause Mod'],
2502
+ banlist: ['Uber', 'Soul Dew', 'Swagger'],
2503
+ unbanlist: ['Deoxys-Defense', 'Latias', 'Wobbuffet', 'Wynaut'],
2501
2504
  },
2502
2505
  {
2503
- name: "[Gen 2] UUBL",
2504
- threads: [`&bullet; <a href="https://www.smogon.com/forums/threads/3662389/">GSC UUBL</a>`],
2505
- mod: 'gen2',
2506
- ruleset: ['[Gen 2] OU'],
2507
- banlist: ['OU'],
2506
+ name: "[Gen 3] UU",
2507
+ threads: [
2508
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
2509
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
2510
+ ],
2511
+ mod: 'gen3',
2512
+ // searchShow: false,
2513
+ ruleset: ['Standard'],
2514
+ banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'],
2508
2515
  },
2509
2516
  // Past Gens OU
2510
2517
  ///////////////////////////////////////////////////////////////////
@@ -2593,7 +2600,7 @@ exports.Formats = [
2593
2600
  },
2594
2601
  {
2595
2602
  name: "[Gen 7] Balanced Hackmons",
2596
- desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
2603
+ desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`,
2597
2604
  threads: [
2598
2605
  `&bullet; <a href="https://www.smogon.com/forums/posts/8407209/">USM Balanced Hackmons</a>`,
2599
2606
  ],
@@ -2757,6 +2764,17 @@ exports.Formats = [
2757
2764
  ruleset: ['[Gen 7] RU'],
2758
2765
  banlist: ['RU', 'NUBL', 'Drought'],
2759
2766
  },
2767
+ {
2768
+ name: "[Gen 7] PU",
2769
+ threads: [
2770
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2771
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2772
+ ],
2773
+ mod: 'gen7',
2774
+ searchShow: false,
2775
+ ruleset: ['[Gen 7] NU'],
2776
+ banlist: ['NU', 'PUBL'],
2777
+ },
2760
2778
  {
2761
2779
  name: "[Gen 7] LC",
2762
2780
  threads: [
@@ -2995,15 +3013,6 @@ exports.Formats = [
2995
3013
  section: "OR/AS Singles",
2996
3014
  column: 4,
2997
3015
  },
2998
- {
2999
- name: "[Gen 6] Ubers",
3000
- threads: [
3001
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286277/">ORAS Ubers</a>`,
3002
- ],
3003
- mod: 'gen6',
3004
- searchShow: false,
3005
- ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'],
3006
- },
3007
3016
  {
3008
3017
  name: "[Gen 6] UU",
3009
3018
  threads: [
@@ -3257,6 +3266,15 @@ exports.Formats = [
3257
3266
  section: "B2/W2 Singles",
3258
3267
  column: 4,
3259
3268
  },
3269
+ {
3270
+ name: "[Gen 5] Ubers",
3271
+ threads: [
3272
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
3273
+ ],
3274
+ mod: 'gen5',
3275
+ searchShow: false,
3276
+ ruleset: ['Standard', 'Sleep Clause Mod'],
3277
+ },
3260
3278
  {
3261
3279
  name: "[Gen 5] UU",
3262
3280
  threads: [
@@ -3606,17 +3624,6 @@ exports.Formats = [
3606
3624
  ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
3607
3625
  banlist: ['Wobbuffet + Leftovers'],
3608
3626
  },
3609
- {
3610
- name: "[Gen 3] UU",
3611
- threads: [
3612
- `&bullet; <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
3613
- `&bullet; <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
3614
- ],
3615
- mod: 'gen3',
3616
- searchShow: false,
3617
- ruleset: ['Standard'],
3618
- banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'],
3619
- },
3620
3627
  {
3621
3628
  name: "[Gen 3] NU",
3622
3629
  threads: [
@@ -3645,18 +3652,6 @@ exports.Formats = [
3645
3652
  ],
3646
3653
  unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil', 'Soundproof'],
3647
3654
  },
3648
- {
3649
- name: "[Gen 3] Doubles OU",
3650
- threads: [
3651
- `&bullet; <a href="https://www.smogon.com/forums/threads/3666831/">ADV Doubles OU</a>`,
3652
- ],
3653
- mod: 'gen3',
3654
- searchShow: false,
3655
- gameType: 'doubles',
3656
- ruleset: ['Standard', '!Sleep Clause Mod', '!Switch Priority Clause Mod'],
3657
- banlist: ['Uber'],
3658
- unbanlist: ['Deoxys-Speed', 'Wobbuffet', 'Wynaut'],
3659
- },
3660
3655
  {
3661
3656
  name: "[Gen 3] Custom Game",
3662
3657
  mod: 'gen3',
@@ -3769,7 +3764,7 @@ exports.Formats = [
3769
3764
  {
3770
3765
  name: "[Gen 1] NU",
3771
3766
  threads: [
3772
- `&bullet; <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
3767
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3679758/">RBY NU Metagame Discussion &amp; Resources</a>`,
3773
3768
  ],
3774
3769
  mod: 'gen1',
3775
3770
  searchShow: false,