@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/build/config/formats.js
CHANGED
|
@@ -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
|
-
`• <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]
|
|
594
|
-
desc: `
|
|
595
|
-
threads: [
|
|
596
|
-
`• <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é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
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
595
|
+
`• <a href="https://www.smogon.com/forums/threads/3656851/">Pure Hackmons</a>`,
|
|
615
596
|
],
|
|
616
597
|
mod: 'gen8',
|
|
617
|
-
ruleset: ['
|
|
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
|
|
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
|
`• <a href="https://www.smogon.com/forums/threads/3656408/">Balanced Hackmons</a>`,
|
|
636
611
|
`• <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
|
`• <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', '
|
|
786
|
-
'
|
|
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', '
|
|
1659
|
-
'
|
|
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
|
-
`• <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é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émon to Team Preview and choose two to battle in a singles battle.`,
|
|
1821
|
+
threads: [
|
|
1822
|
+
`• <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é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
|
|
2151
|
-
|
|
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
|
|
2154
|
-
|
|
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
|
|
2485
|
+
name: "[Gen 6] Ubers",
|
|
2484
2486
|
threads: [
|
|
2485
|
-
`• <a href="https://www.smogon.com/forums/posts/
|
|
2487
|
+
`• <a href="https://www.smogon.com/forums/posts/8286277/">ORAS Ubers</a>`,
|
|
2486
2488
|
],
|
|
2487
|
-
mod: '
|
|
2489
|
+
mod: 'gen6',
|
|
2488
2490
|
// searchShow: false,
|
|
2489
|
-
ruleset: ['Standard', '
|
|
2491
|
+
ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'],
|
|
2490
2492
|
},
|
|
2491
2493
|
{
|
|
2492
|
-
name: "[Gen
|
|
2494
|
+
name: "[Gen 3] Doubles OU",
|
|
2493
2495
|
threads: [
|
|
2494
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
2495
|
-
`• <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
|
|
2496
|
+
`• <a href="https://www.smogon.com/forums/threads/3666831/">ADV Doubles OU</a>`,
|
|
2496
2497
|
],
|
|
2497
|
-
mod: '
|
|
2498
|
+
mod: 'gen3',
|
|
2498
2499
|
// searchShow: false,
|
|
2499
|
-
|
|
2500
|
-
|
|
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
|
|
2504
|
-
threads: [
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2506
|
+
name: "[Gen 3] UU",
|
|
2507
|
+
threads: [
|
|
2508
|
+
`• <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
|
|
2509
|
+
`• <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
|
|
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
|
`• <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
|
+
`• <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
|
|
2771
|
+
`• <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
|
-
`• <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
|
+
`• <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
|
-
`• <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
|
|
3613
|
-
`• <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
|
-
`• <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
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
3767
|
+
`• <a href="https://www.smogon.com/forums/threads/3679758/">RBY NU Metagame Discussion & Resources</a>`,
|
|
3773
3768
|
],
|
|
3774
3769
|
mod: 'gen1',
|
|
3775
3770
|
searchShow: false,
|