@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.
- package/build/config/formats.js +161 -166
- package/build/config/formats.js.map +1 -1
- package/build/data/aliases.js +2 -2
- package/build/data/aliases.js.map +1 -1
- package/build/data/formats-data.js +111 -115
- package/build/data/formats-data.js.map +1 -1
- package/build/data/items.js +7 -1
- package/build/data/items.js.map +1 -1
- package/build/data/learnsets.js +3 -2
- package/build/data/learnsets.js.map +1 -1
- package/build/data/mods/gen1/moves.js +0 -10
- package/build/data/mods/gen1/moves.js.map +1 -1
- package/build/data/mods/gen1/scripts.js +87 -52
- package/build/data/mods/gen1/scripts.js.map +1 -1
- package/build/data/mods/gen2/moves.js +0 -1
- package/build/data/mods/gen2/moves.js.map +1 -1
- package/build/data/mods/gen2/scripts.js +1 -1
- package/build/data/moves.js +44 -25
- package/build/data/moves.js.map +1 -1
- package/build/data/pokedex.js +1 -1
- package/build/data/rulesets.js +58 -0
- package/build/data/rulesets.js.map +1 -1
- package/build/sim/battle.js +8 -4
- package/build/sim/battle.js.map +1 -1
- package/build/sim/dex-conditions.d.ts +1 -0
- package/build/sim/dex-conditions.js.map +1 -1
- package/build/sim/field.js +1 -0
- package/build/sim/field.js.map +1 -1
- package/build/sim/pokemon.js +2 -10
- package/build/sim/pokemon.js.map +1 -1
- package/build/sim/team-validator.d.ts +2 -2
- package/build/sim/team-validator.js +19 -14
- package/build/sim/team-validator.js.map +1 -1
- package/config/formats.ts +168 -169
- package/data/aliases.ts +2 -2
- package/data/formats-data.ts +111 -115
- package/data/items.ts +7 -1
- package/data/learnsets.ts +3 -2
- package/data/mods/gen1/moves.ts +0 -10
- package/data/mods/gen1/scripts.ts +85 -51
- package/data/mods/gen2/moves.ts +0 -1
- package/data/mods/gen2/scripts.ts +1 -1
- package/data/moves.ts +43 -23
- package/data/pokedex.ts +1 -1
- package/data/rulesets.ts +59 -0
- package/package.json +1 -1
- package/sim/battle.ts +6 -4
- package/sim/dex-conditions.ts +1 -0
- package/sim/field.ts +1 -0
- package/sim/pokemon.ts +1 -8
- 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
|
-
`• <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]
|
|
643
|
-
desc: `
|
|
644
|
-
threads: [
|
|
645
|
-
`• <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é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
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
644
|
+
`• <a href="https://www.smogon.com/forums/threads/3656851/">Pure Hackmons</a>`,
|
|
665
645
|
],
|
|
666
646
|
|
|
667
647
|
mod: 'gen8',
|
|
668
|
-
ruleset: ['
|
|
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
|
|
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
|
`• <a href="https://www.smogon.com/forums/threads/3656408/">Balanced Hackmons</a>`,
|
|
689
663
|
`• <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', '
|
|
843
|
-
'
|
|
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', '
|
|
1699
|
-
'
|
|
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
|
-
`• <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é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émon to Team Preview and choose two to battle in a singles battle.`,
|
|
1853
|
+
threads: [
|
|
1854
|
+
`• <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é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
|
|
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: '
|
|
2124
|
+
mod: 'gen4',
|
|
2199
2125
|
team: 'random',
|
|
2200
|
-
ruleset: ['[Gen
|
|
2201
|
-
|
|
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
|
|
2560
|
+
name: "[Gen 6] Ubers",
|
|
2554
2561
|
threads: [
|
|
2555
|
-
`• <a href="https://www.smogon.com/forums/posts/
|
|
2562
|
+
`• <a href="https://www.smogon.com/forums/posts/8286277/">ORAS Ubers</a>`,
|
|
2556
2563
|
],
|
|
2557
2564
|
|
|
2558
|
-
mod: '
|
|
2565
|
+
mod: 'gen6',
|
|
2559
2566
|
// searchShow: false,
|
|
2560
|
-
ruleset: ['Standard', '
|
|
2567
|
+
ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'],
|
|
2561
2568
|
},
|
|
2562
2569
|
{
|
|
2563
|
-
name: "[Gen
|
|
2570
|
+
name: "[Gen 3] Doubles OU",
|
|
2564
2571
|
threads: [
|
|
2565
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
2566
|
-
`• <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
|
|
2572
|
+
`• <a href="https://www.smogon.com/forums/threads/3666831/">ADV Doubles OU</a>`,
|
|
2567
2573
|
],
|
|
2568
2574
|
|
|
2569
|
-
mod: '
|
|
2575
|
+
mod: 'gen3',
|
|
2570
2576
|
// searchShow: false,
|
|
2571
|
-
|
|
2572
|
-
|
|
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
|
|
2576
|
-
threads: [
|
|
2583
|
+
name: "[Gen 3] UU",
|
|
2584
|
+
threads: [
|
|
2585
|
+
`• <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
|
|
2586
|
+
`• <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
|
|
2587
|
+
],
|
|
2577
2588
|
|
|
2578
|
-
mod: '
|
|
2579
|
-
|
|
2580
|
-
|
|
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
|
|
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
|
`• <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
|
+
`• <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
|
|
2867
|
+
`• <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
|
-
`• <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
|
+
`• <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
|
-
`• <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
|
|
3787
|
-
`• <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
|
-
`• <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
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
3960
|
+
`• <a href="https://www.smogon.com/forums/threads/3679758/">RBY NU Metagame Discussion & 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]
|
|
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",
|