@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
package/config/formats.ts CHANGED
@@ -284,6 +284,14 @@ export const Formats: FormatList = [
284
284
  name: "[Gen 8] Battle Stadium Singles",
285
285
 
286
286
  mod: 'gen8',
287
+ ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit Two Restricted'],
288
+ restricted: ['Restricted Legendary'],
289
+ },
290
+ {
291
+ name: "[Gen 8] Battle Stadium Singles Series 13",
292
+
293
+ mod: 'gen8',
294
+ searchShow: false,
287
295
  ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
288
296
  banlist: ['Eternatus-Eternamax'],
289
297
  unbanlist: ['Mythical', 'Restricted Legendary'],
@@ -377,21 +385,12 @@ export const Formats: FormatList = [
377
385
  name: "[Gen 8] Battle Stadium Doubles Series 13",
378
386
 
379
387
  mod: 'gen8',
388
+ searchShow: false,
380
389
  gameType: 'doubles',
381
390
  ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer'],
382
391
  banlist: ['Eternatus-Eternamax'],
383
392
  unbanlist: ['Mythical', 'Restricted Legendary'],
384
393
  },
385
- {
386
- name: "[Gen 8] Ultimate Finale",
387
- threads: [
388
- `&bullet; <a href="https://www.smogon.com/forums/threads/3709248/">Ultimate Finale Discussion</a>`,
389
- ],
390
-
391
- mod: 'gen8',
392
- gameType: 'doubles',
393
- ruleset: ['Obtainable', 'Team Preview', 'Nickname Clause', 'Adjust Level = 100', 'Cancel Mod', 'Min Source Gen = 8'],
394
- },
395
394
  {
396
395
  name: "[Gen 8] Spikemuth Cup",
397
396
 
@@ -639,39 +638,14 @@ export const Formats: FormatList = [
639
638
  column: 2,
640
639
  },
641
640
  {
642
- name: "[Gen 8] Revelationmons",
643
- 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).`,
644
- threads: [
645
- `&bullet; <a href="https://www.smogon.com/forums/threads/3692297/">Revelationmons</a>`,
646
- ],
647
-
648
- mod: 'gen8',
649
- ruleset: ['Standard OMs', 'Revelationmons Mod', 'Sleep Moves Clause'],
650
- banlist: [
651
- 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Dragapult', 'Eternatus',
652
- 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kingdra', 'Kommo-o', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
653
- 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
654
- 'Noivern', 'Palkia', 'Pheromosa', 'Polteageist', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Thundurus-Therian', 'Urshifu-Base',
655
- 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull',
656
- 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
657
- ],
658
- restricted: ['Bolt Beak', 'Close Combat', 'U-turn', 'Volt Switch'],
659
- },
660
- {
661
- name: "[Gen 8] Tag Team Singles",
662
- desc: `Bring four Pok&eacute;mon to Team Preview and choose two to battle in a singles battle.`,
641
+ name: "[Gen 8] Pure Hackmons",
642
+ desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`,
663
643
  threads: [
664
- `&bullet; <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
644
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3656851/">Pure Hackmons</a>`,
665
645
  ],
666
646
 
667
647
  mod: 'gen8',
668
- ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
669
- banlist: [
670
- 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
671
- 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
672
- 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
673
- 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
674
- ],
648
+ ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
675
649
  },
676
650
 
677
651
  // Other Metagames
@@ -683,7 +657,7 @@ export const Formats: FormatList = [
683
657
  },
684
658
  {
685
659
  name: "[Gen 8] Balanced Hackmons",
686
- desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
660
+ desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`,
687
661
  threads: [
688
662
  `&bullet; <a href="https://www.smogon.com/forums/threads/3656408/">Balanced Hackmons</a>`,
689
663
  `&bullet; <a href="https://www.smogon.com/forums/threads/3659817/">BH Resources</a>`,
@@ -717,7 +691,7 @@ export const Formats: FormatList = [
717
691
  'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy',
718
692
  'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Intrepid Sword', 'Libero', 'Magic Bounce',
719
693
  'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout',
720
- 'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
694
+ 'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass', 'Electrify',
721
695
  ],
722
696
  },
723
697
  {
@@ -836,67 +810,12 @@ export const Formats: FormatList = [
836
810
  ],
837
811
 
838
812
  mod: 'gen8',
839
- ruleset: ['Standard OMs', 'Sleep Moves Clause'],
813
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Godly Gift Mod'],
840
814
  banlist: [
841
815
  'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Kyogre', 'Marowak-Alola', 'Melmetal',
842
- 'Nidoking', 'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap',
843
- 'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense',
844
- 'Quick Claw', 'Baton Pass',
816
+ 'Nidoking', 'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Arena Trap', 'Huge Power', 'Moody',
817
+ 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Baton Pass',
845
818
  ],
846
- onValidateTeam(team) {
847
- const gods = new Set<string>();
848
- for (const set of team) {
849
- let species = this.dex.species.get(set.species);
850
- if (typeof species.battleOnly === 'string') species = this.dex.species.get(species.battleOnly);
851
- if (set.item && this.dex.items.get(set.item).megaStone) {
852
- const item = this.dex.items.get(set.item);
853
- if (item.megaEvolves === species.baseSpecies) {
854
- species = this.dex.species.get(item.megaStone);
855
- }
856
- }
857
- if (this.ruleTable.has('standardnatdex')) {
858
- const format = this.dex.formats.getRuleTable(this.dex.formats.get('gen8nationaldex'));
859
- if (format.isBannedSpecies(species)) gods.add(species.name);
860
- } else {
861
- if (['ag', 'uber'].includes(this.toID(species.tier)) || this.toID(set.ability) === 'powerconstruct') {
862
- gods.add(species.name);
863
- }
864
- }
865
- }
866
- if (gods.size > 1) {
867
- return [`You have too many Gods.`, `(${Array.from(gods).join(', ')} are Gods.)`];
868
- }
869
- },
870
- onModifySpeciesPriority: 3,
871
- onModifySpecies(species, target, source) {
872
- if (source || !target?.side) return;
873
- const god = target.side.team.find(set => {
874
- let godSpecies = this.dex.species.get(set.species);
875
- const isNatDex = this.format.ruleTable?.has('standardnatdex');
876
- const validator = this.dex.formats.getRuleTable(
877
- this.dex.formats.get(`gen${isNatDex && this.gen < 8 ? 8 : this.gen}${isNatDex ? 'nationaldex' : 'ou'}`)
878
- );
879
- if (this.toID(set.ability) === 'powerconstruct') {
880
- return true;
881
- }
882
- if (set.item) {
883
- const item = this.dex.items.get(set.item);
884
- if (item.megaEvolves === set.species) godSpecies = this.dex.species.get(item.megaStone);
885
- }
886
- const isBanned = validator.isBannedSpecies(godSpecies);
887
- return isBanned;
888
- }) || target.side.team[0];
889
- const stat = Dex.stats.ids()[target.side.team.indexOf(target.set)];
890
- const newSpecies = this.dex.deepClone(species);
891
- let godSpecies = this.dex.species.get(god.species);
892
- if (typeof godSpecies.battleOnly === 'string') {
893
- godSpecies = this.dex.species.get(godSpecies.battleOnly);
894
- }
895
- newSpecies.bst -= newSpecies.baseStats[stat];
896
- newSpecies.baseStats[stat] = godSpecies.baseStats[stat];
897
- newSpecies.bst += newSpecies.baseStats[stat];
898
- return newSpecies;
899
- },
900
819
  },
901
820
  {
902
821
  name: "[Gen 8] Free-For-All",
@@ -1695,9 +1614,9 @@ export const Formats: FormatList = [
1695
1614
  'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
1696
1615
  'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
1697
1616
  'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
1698
- 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
1699
- 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
1700
- 'Shell Smash', 'Swagger',
1617
+ 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Contrary',
1618
+ 'Emergency Exit', 'Huge Power', 'Moody', 'Power Construct', 'Serene Grace', 'Shadow Tag', 'Wimp Out',
1619
+ 'Wonder Guard', 'Ally Switch', 'Bolt Beak', 'Fishious Rend', 'Shell Smash', 'Swagger',
1701
1620
  ],
1702
1621
  onBeforeSwitchIn(pokemon) {
1703
1622
  pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
@@ -1867,17 +1786,6 @@ export const Formats: FormatList = [
1867
1786
  pokemon.m.innates = undefined;
1868
1787
  },
1869
1788
  },
1870
- {
1871
- name: "[Gen 8] Pure Hackmons",
1872
- desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
1873
- threads: [
1874
- `&bullet; <a href="https://www.smogon.com/forums/threads/3656851/">Pure Hackmons</a>`,
1875
- ],
1876
-
1877
- mod: 'gen8',
1878
- searchShow: false,
1879
- ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
1880
- },
1881
1789
  {
1882
1790
  name: "[Gen 8] Shared Power",
1883
1791
  desc: `Once a Pok&eacute;mon switches in, its ability is shared with the rest of the team.`,
@@ -1939,6 +1847,23 @@ export const Formats: FormatList = [
1939
1847
  }
1940
1848
  },
1941
1849
  },
1850
+ {
1851
+ name: "[Gen 8] Tag Team Singles",
1852
+ desc: `Bring four Pok&eacute;mon to Team Preview and choose two to battle in a singles battle.`,
1853
+ threads: [
1854
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
1855
+ ],
1856
+
1857
+ mod: 'gen8',
1858
+ searchShow: false,
1859
+ ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
1860
+ banlist: [
1861
+ 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
1862
+ 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
1863
+ 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
1864
+ 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
1865
+ ],
1866
+ },
1942
1867
  {
1943
1868
  name: "[Gen 8] Trademarked",
1944
1869
  desc: `Sacrifice your Pok&eacute;mon's ability for a status move that activates on switch-in.`,
@@ -2193,12 +2118,94 @@ export const Formats: FormatList = [
2193
2118
  column: 2,
2194
2119
  },
2195
2120
  {
2196
- name: "[Gen 7] Pick-Your-Team Random Battle",
2121
+ name: "[Gen 4] Shared Power Random Battle",
2122
+ desc: `[Gen 4] Random Battle with aspects of [Gen 8] Shared Power`,
2197
2123
 
2198
- mod: 'gen7',
2124
+ mod: 'gen4',
2199
2125
  team: 'random',
2200
- ruleset: ['[Gen 7] Random Battle', 'Max Team Size = 12', 'Picked Team Size = 6', 'Team Preview'],
2201
- desc: `Twelve Pokémon sets are randomly chosen, then you pick six for your team!`,
2126
+ ruleset: ['[Gen 4] Random Battle', 'Team Preview'],
2127
+ getSharedPower(pokemon) {
2128
+ const sharedPower = new Set<string>();
2129
+ for (const ally of pokemon.side.pokemon) {
2130
+ if (ally.previouslySwitchedIn > 0) {
2131
+ if (pokemon.battle.dex.currentMod !== 'sharedpower' && ['trace', 'mirrorarmor'].includes(ally.baseAbility)) {
2132
+ sharedPower.add('noability');
2133
+ continue;
2134
+ }
2135
+ sharedPower.add(ally.baseAbility);
2136
+ }
2137
+ }
2138
+ sharedPower.delete(pokemon.baseAbility);
2139
+ return sharedPower;
2140
+ },
2141
+ onBeforeSwitchIn(pokemon) {
2142
+ let format = this.format;
2143
+ if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
2144
+ for (const ability of format.getSharedPower!(pokemon)) {
2145
+ const effect = 'ability:' + ability;
2146
+ pokemon.volatiles[effect] = {id: this.toID(effect), target: pokemon};
2147
+ if (!pokemon.m.abils) pokemon.m.abils = [];
2148
+ if (!pokemon.m.abils.includes(effect)) pokemon.m.abils.push(effect);
2149
+ }
2150
+ },
2151
+ onSwitchInPriority: 2,
2152
+ onSwitchIn(pokemon) {
2153
+ let format = this.format;
2154
+ if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
2155
+ for (const ability of format.getSharedPower!(pokemon)) {
2156
+ if (ability === 'noability') {
2157
+ 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.`);
2158
+ }
2159
+ const effect = 'ability:' + ability;
2160
+ delete pokemon.volatiles[effect];
2161
+ pokemon.addVolatile(effect);
2162
+ }
2163
+ },
2164
+ field: {
2165
+ suppressingWeather() {
2166
+ for (const pokemon of this.battle.getAllActive()) {
2167
+ const innates = Object.keys(pokemon.volatiles).filter(x => x.startsWith('ability:'));
2168
+ if (pokemon && !pokemon.ignoringAbility() &&
2169
+ (pokemon.getAbility().suppressWeather || innates.some(x => (
2170
+ this.battle.dex.abilities.get(x.replace('ability:', '')).suppressWeather
2171
+ )))) {
2172
+ return true;
2173
+ }
2174
+ }
2175
+ return false;
2176
+ },
2177
+ },
2178
+ pokemon: {
2179
+ hasAbility(ability) {
2180
+ if (this.ignoringAbility()) return false;
2181
+ if (Array.isArray(ability)) return ability.some(abil => this.hasAbility(abil));
2182
+ const abilityid = this.battle.toID(ability);
2183
+ return this.ability === abilityid || !!this.volatiles['ability:' + abilityid];
2184
+ },
2185
+ ignoringAbility() {
2186
+ // Check if any active pokemon have the ability Neutralizing Gas
2187
+ let neutralizinggas = false;
2188
+ for (const pokemon of this.battle.getAllActive()) {
2189
+ // can't use hasAbility because it would lead to infinite recursion
2190
+ if (
2191
+ (pokemon.ability === ('neutralizinggas' as ID) || pokemon.m.abils?.includes('ability:neutralizinggas')) &&
2192
+ !pokemon.volatiles['gastroacid'] && !pokemon.abilityState.ending
2193
+ ) {
2194
+ neutralizinggas = true;
2195
+ break;
2196
+ }
2197
+ }
2198
+
2199
+ return !!(
2200
+ (this.battle.gen >= 5 && !this.isActive) ||
2201
+ ((this.volatiles['gastroacid'] ||
2202
+ (neutralizinggas && (this.ability !== ('neutralizinggas' as ID) ||
2203
+ this.m.abils?.includes('ability:neutralizinggas'))
2204
+ )) && !this.getAbility().isPermanent
2205
+ )
2206
+ );
2207
+ },
2208
+ },
2202
2209
  },
2203
2210
 
2204
2211
  // Randomized Metas
@@ -2550,34 +2557,39 @@ export const Formats: FormatList = [
2550
2557
  column: 3,
2551
2558
  },
2552
2559
  {
2553
- name: "[Gen 5] Ubers",
2560
+ name: "[Gen 6] Ubers",
2554
2561
  threads: [
2555
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
2562
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286277/">ORAS Ubers</a>`,
2556
2563
  ],
2557
2564
 
2558
- mod: 'gen5',
2565
+ mod: 'gen6',
2559
2566
  // searchShow: false,
2560
- ruleset: ['Standard', 'Sleep Clause Mod'],
2567
+ ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'],
2561
2568
  },
2562
2569
  {
2563
- name: "[Gen 7] PU",
2570
+ name: "[Gen 3] Doubles OU",
2564
2571
  threads: [
2565
- `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2566
- `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2572
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3666831/">ADV Doubles OU</a>`,
2567
2573
  ],
2568
2574
 
2569
- mod: 'gen7',
2575
+ mod: 'gen3',
2570
2576
  // searchShow: false,
2571
- ruleset: ['[Gen 7] NU'],
2572
- banlist: ['NU', 'PUBL'],
2577
+ gameType: 'doubles',
2578
+ ruleset: ['Standard', '!Switch Priority Clause Mod'],
2579
+ banlist: ['Uber', 'Soul Dew', 'Swagger'],
2580
+ unbanlist: ['Deoxys-Defense', 'Latias', 'Wobbuffet', 'Wynaut'],
2573
2581
  },
2574
2582
  {
2575
- name: "[Gen 2] UUBL",
2576
- threads: [`&bullet; <a href="https://www.smogon.com/forums/threads/3662389/">GSC UUBL</a>`],
2583
+ name: "[Gen 3] UU",
2584
+ threads: [
2585
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
2586
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
2587
+ ],
2577
2588
 
2578
- mod: 'gen2',
2579
- ruleset: ['[Gen 2] OU'],
2580
- banlist: ['OU'],
2589
+ mod: 'gen3',
2590
+ // searchShow: false,
2591
+ ruleset: ['Standard'],
2592
+ banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'],
2581
2593
  },
2582
2594
 
2583
2595
  // Past Gens OU
@@ -2676,7 +2688,7 @@ export const Formats: FormatList = [
2676
2688
  },
2677
2689
  {
2678
2690
  name: "[Gen 7] Balanced Hackmons",
2679
- desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
2691
+ desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`,
2680
2692
  threads: [
2681
2693
  `&bullet; <a href="https://www.smogon.com/forums/posts/8407209/">USM Balanced Hackmons</a>`,
2682
2694
  ],
@@ -2848,6 +2860,18 @@ export const Formats: FormatList = [
2848
2860
  ruleset: ['[Gen 7] RU'],
2849
2861
  banlist: ['RU', 'NUBL', 'Drought'],
2850
2862
  },
2863
+ {
2864
+ name: "[Gen 7] PU",
2865
+ threads: [
2866
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
2867
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
2868
+ ],
2869
+
2870
+ mod: 'gen7',
2871
+ searchShow: false,
2872
+ ruleset: ['[Gen 7] NU'],
2873
+ banlist: ['NU', 'PUBL'],
2874
+ },
2851
2875
  {
2852
2876
  name: "[Gen 7] LC",
2853
2877
  threads: [
@@ -3106,16 +3130,6 @@ export const Formats: FormatList = [
3106
3130
  section: "OR/AS Singles",
3107
3131
  column: 4,
3108
3132
  },
3109
- {
3110
- name: "[Gen 6] Ubers",
3111
- threads: [
3112
- `&bullet; <a href="https://www.smogon.com/forums/posts/8286277/">ORAS Ubers</a>`,
3113
- ],
3114
-
3115
- mod: 'gen6',
3116
- searchShow: false,
3117
- ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'],
3118
- },
3119
3133
  {
3120
3134
  name: "[Gen 6] UU",
3121
3135
  threads: [
@@ -3393,6 +3407,16 @@ export const Formats: FormatList = [
3393
3407
  section: "B2/W2 Singles",
3394
3408
  column: 4,
3395
3409
  },
3410
+ {
3411
+ name: "[Gen 5] Ubers",
3412
+ threads: [
3413
+ `&bullet; <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
3414
+ ],
3415
+
3416
+ mod: 'gen5',
3417
+ searchShow: false,
3418
+ ruleset: ['Standard', 'Sleep Clause Mod'],
3419
+ },
3396
3420
  {
3397
3421
  name: "[Gen 5] UU",
3398
3422
  threads: [
@@ -3780,18 +3804,6 @@ export const Formats: FormatList = [
3780
3804
  ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
3781
3805
  banlist: ['Wobbuffet + Leftovers'],
3782
3806
  },
3783
- {
3784
- name: "[Gen 3] UU",
3785
- threads: [
3786
- `&bullet; <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
3787
- `&bullet; <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
3788
- ],
3789
-
3790
- mod: 'gen3',
3791
- searchShow: false,
3792
- ruleset: ['Standard'],
3793
- banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'],
3794
- },
3795
3807
  {
3796
3808
  name: "[Gen 3] NU",
3797
3809
  threads: [
@@ -3822,19 +3834,6 @@ export const Formats: FormatList = [
3822
3834
  ],
3823
3835
  unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil', 'Soundproof'],
3824
3836
  },
3825
- {
3826
- name: "[Gen 3] Doubles OU",
3827
- threads: [
3828
- `&bullet; <a href="https://www.smogon.com/forums/threads/3666831/">ADV Doubles OU</a>`,
3829
- ],
3830
-
3831
- mod: 'gen3',
3832
- searchShow: false,
3833
- gameType: 'doubles',
3834
- ruleset: ['Standard', '!Sleep Clause Mod', '!Switch Priority Clause Mod'],
3835
- banlist: ['Uber'],
3836
- unbanlist: ['Deoxys-Speed', 'Wobbuffet', 'Wynaut'],
3837
- },
3838
3837
  {
3839
3838
  name: "[Gen 3] Custom Game",
3840
3839
 
@@ -3958,7 +3957,7 @@ export const Formats: FormatList = [
3958
3957
  {
3959
3958
  name: "[Gen 1] NU",
3960
3959
  threads: [
3961
- `&bullet; <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
3960
+ `&bullet; <a href="https://www.smogon.com/forums/threads/3679758/">RBY NU Metagame Discussion &amp; Resources</a>`,
3962
3961
  ],
3963
3962
 
3964
3963
  mod: 'gen1',
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] Revelationmons",
75
- lcotm: "[Gen 8] Tag Team Singles",
74
+ omotm: "[Gen 8] Pure Hackmons",
75
+ // lcotm: "[Gen 8] Tag Team Singles",
76
76
 
77
77
  // mega evos
78
78
  fabio: "Ampharos-Mega",