@pkmn/sim 0.5.25 → 0.5.27
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 +195 -162
- 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/conditions.js +1 -1
- package/build/data/conditions.js.map +1 -1
- package/build/data/formats-data.js +24 -25
- package/build/data/formats-data.js.map +1 -1
- package/build/data/learnsets.js +27 -20
- package/build/data/learnsets.js.map +1 -1
- package/build/data/mods/gen1/formats-data.js +0 -5
- package/build/data/mods/gen1/formats-data.js.map +1 -1
- package/build/data/mods/gen1/moves.js +54 -22
- package/build/data/mods/gen1/moves.js.map +1 -1
- package/build/data/mods/gen2/moves.js +10 -5
- package/build/data/mods/gen2/moves.js.map +1 -1
- package/build/data/mods/gen3/formats-data.js +2 -2
- package/build/data/mods/gen3/formats-data.js.map +1 -1
- package/build/data/mods/gen3/moves.js +9 -0
- package/build/data/mods/gen3/moves.js.map +1 -1
- package/build/data/mods/gen6/formats-data.js +14 -14
- package/build/data/mods/gen6/formats-data.js.map +1 -1
- package/build/data/mods/gen7/pokedex.js +4 -5
- package/build/data/mods/gen7/pokedex.js.map +1 -1
- package/build/data/pokedex.js +14 -14
- package/build/data/pokedex.js.map +1 -1
- package/build/data/rulesets.js +1 -1
- package/build/data/rulesets.js.map +1 -1
- package/build/data/text/abilities.js +321 -139
- package/build/data/text/abilities.js.map +1 -1
- package/build/data/text/moves.js +8 -2
- package/build/data/text/moves.js.map +1 -1
- package/build/sim/battle-actions.js.map +1 -1
- package/build/sim/pokemon.js +1 -1
- package/build/sim/pokemon.js.map +1 -1
- package/build/sim/team-validator.js +30 -18
- package/build/sim/team-validator.js.map +1 -1
- package/config/formats.ts +194 -159
- package/data/aliases.ts +2 -2
- package/data/conditions.ts +1 -1
- package/data/formats-data.ts +24 -25
- package/data/learnsets.ts +27 -20
- package/data/mods/gen1/formats-data.ts +0 -5
- package/data/mods/gen1/moves.ts +54 -23
- package/data/mods/gen2/moves.ts +10 -5
- package/data/mods/gen3/formats-data.ts +2 -2
- package/data/mods/gen3/moves.ts +9 -0
- package/data/mods/gen6/formats-data.ts +14 -14
- package/data/mods/gen7/pokedex.ts +4 -5
- package/data/pokedex.ts +14 -14
- package/data/rulesets.ts +1 -1
- package/data/text/abilities.ts +321 -139
- package/data/text/moves.ts +8 -2
- package/package.json +1 -1
- package/sim/battle-actions.ts +1 -0
- package/sim/pokemon.ts +1 -1
- package/sim/team-validator.ts +31 -20
package/config/formats.ts
CHANGED
|
@@ -145,7 +145,7 @@ export const Formats: FormatList = [
|
|
|
145
145
|
{
|
|
146
146
|
name: "[Gen 8] PU",
|
|
147
147
|
threads: [
|
|
148
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
148
|
+
`• <a href="https://www.smogon.com/forums/threads/3707179/">PU Metagame Discussion</a>`,
|
|
149
149
|
`• <a href="https://www.smogon.com/forums/threads/3676106/">PU Viability Rankings</a>`,
|
|
150
150
|
],
|
|
151
151
|
|
|
@@ -250,7 +250,7 @@ export const Formats: FormatList = [
|
|
|
250
250
|
// LC OU
|
|
251
251
|
'Abra', 'Carvanha', 'Diglett-Base', 'Dwebble', 'Ferroseed', 'Foongus', 'Frillish', 'Grookey', 'Koffing',
|
|
252
252
|
'Larvesta', 'Magby', 'Magnemite', 'Mareanie', 'Mienfoo', 'Mudbray', 'Natu', 'Onix', 'Pawniard',
|
|
253
|
-
'Ponyta-Base', 'Porygon', '
|
|
253
|
+
'Ponyta-Base', 'Porygon', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
|
|
254
254
|
// LC UUBL
|
|
255
255
|
'Archen', 'Farfetch\u2019d-Galar', 'Scorbunny', 'Shellder', 'Wingull',
|
|
256
256
|
],
|
|
@@ -289,15 +289,22 @@ export const Formats: FormatList = [
|
|
|
289
289
|
unbanlist: ['Mythical', 'Restricted Legendary'],
|
|
290
290
|
},
|
|
291
291
|
{
|
|
292
|
-
name: "[Gen 8]
|
|
292
|
+
name: "[Gen 8] Champion League",
|
|
293
293
|
threads: [
|
|
294
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
294
|
+
`• <a href="https://www.smogon.com/forums/threads/3707533/">Champion League Discussion</a>`,
|
|
295
295
|
],
|
|
296
296
|
|
|
297
297
|
mod: 'gen8',
|
|
298
298
|
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
|
|
299
|
-
banlist: ['All Pokemon'
|
|
300
|
-
unbanlist: [
|
|
299
|
+
banlist: ['All Pokemon'],
|
|
300
|
+
unbanlist: [
|
|
301
|
+
'Venusaur', 'Charizard', 'Blastoise', 'Sandslash-Base', 'Ninetales-Base', 'Arcanine', 'Alakazam', 'Tentacruel', 'Magneton', 'Cloyster',
|
|
302
|
+
'Exeggutor-Base', 'Rhydon', 'Gyarados', 'Lapras', 'Vaporeon', 'Jolteon', 'Flareon', 'Aerodactyl', 'Dragonite', 'Heracross', 'Skarmory',
|
|
303
|
+
'Tyranitar', 'Ludicolo', 'Gardevoir', 'Aggron', 'Wailord', 'Altaria', 'Whiscash', 'Claydol', 'Cradily', 'Armaldo', 'Milotic', 'Salamence',
|
|
304
|
+
'Metagross', 'Roserade', 'Gastrodon', 'Spiritomb', 'Garchomp', 'Lucario', 'Rhyperior', 'Togekiss', 'Seismitoad', 'Archeops',
|
|
305
|
+
'Vanilluxe', 'Escavalier', 'Haxorus', 'Accelgor', 'Druddigon', 'Bouffalant', 'Hydreigon', 'Volcarona', 'Aegislash', 'Tyrantrum',
|
|
306
|
+
'Aurorus', 'Hawlucha', 'Carbink', 'Goodra', 'Gourgeist', 'Rillaboom', 'Cinderace', 'Inteleon', 'Mr. Rime', 'Dragapult',
|
|
307
|
+
],
|
|
301
308
|
},
|
|
302
309
|
{
|
|
303
310
|
name: "[Gen 8] Custom Game",
|
|
@@ -577,7 +584,7 @@ export const Formats: FormatList = [
|
|
|
577
584
|
ruleset: ['-Nonexistent', 'Standard NatDex', 'Forme Clause', 'Sleep Moves Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', '!Obtainable'],
|
|
578
585
|
banlist: [
|
|
579
586
|
// Pokemon
|
|
580
|
-
'Eternatus-Eternamax', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Cramorant-Gorging', 'Calyrex-Shadow',
|
|
587
|
+
'Eternatus-Eternamax', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Cramorant-Gorging', 'Calyrex-Shadow', 'Darmanitan-Galar-Zen',
|
|
581
588
|
// Abilities
|
|
582
589
|
'Arena Trap', 'Contrary', 'Gorilla Tactics', 'Huge Power', 'Illusion', 'Innards Out', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard',
|
|
583
590
|
// Items
|
|
@@ -640,115 +647,37 @@ export const Formats: FormatList = [
|
|
|
640
647
|
column: 2,
|
|
641
648
|
},
|
|
642
649
|
{
|
|
643
|
-
name: "[Gen 8]
|
|
644
|
-
desc: `
|
|
650
|
+
name: "[Gen 8] Revelationmons",
|
|
651
|
+
desc: `The moves in the first slot(s) of a Pokémon's set have their types changed to match the Pokémon's type(s).`,
|
|
645
652
|
threads: [
|
|
646
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
653
|
+
`• <a href="https://www.smogon.com/forums/threads/3692297/">Revelationmons</a>`,
|
|
647
654
|
],
|
|
648
655
|
|
|
649
|
-
mod: '
|
|
650
|
-
|
|
651
|
-
// searchShow: false,
|
|
652
|
-
ruleset: ['Standard Doubles', 'Dynamax Clause'],
|
|
656
|
+
mod: 'gen8',
|
|
657
|
+
ruleset: ['Standard OMs', 'Revelationmons Mod', 'Sleep Moves Clause'],
|
|
653
658
|
banlist: [
|
|
654
|
-
'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', '
|
|
655
|
-
'Groudon', 'Ho-Oh', '
|
|
656
|
-
'
|
|
657
|
-
'
|
|
658
|
-
'Zamazenta', '
|
|
659
|
-
'Emergency Exit', 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard',
|
|
659
|
+
'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Dragapult', 'Eternatus', 'Genesect',
|
|
660
|
+
'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kommo-o', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala',
|
|
661
|
+
'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza',
|
|
662
|
+
'Reshiram', 'Solgaleo', 'Spectrier', 'Thundurus-Therian', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta',
|
|
663
|
+
'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
|
|
660
664
|
],
|
|
661
|
-
|
|
662
|
-
pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
|
|
663
|
-
let ngas = false;
|
|
664
|
-
for (const poke of this.getAllActive()) {
|
|
665
|
-
if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
|
|
666
|
-
ngas = true;
|
|
667
|
-
break;
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
|
-
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
671
|
-
// Abilities that must be applied before both sides trigger onSwitchIn to correctly
|
|
672
|
-
// handle switch-in ability-to-ability interactions, e.g. Intimidate counters
|
|
673
|
-
const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
|
|
674
|
-
'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
|
|
675
|
-
'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
|
|
676
|
-
];
|
|
677
|
-
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
678
|
-
if (ally && ally.ability !== pokemon.ability) {
|
|
679
|
-
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
|
|
680
|
-
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
|
|
681
|
-
pokemon.m.innate = 'ability:' + ally.ability;
|
|
682
|
-
delete pokemon.volatiles[pokemon.m.innate];
|
|
683
|
-
if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
|
|
684
|
-
}
|
|
685
|
-
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
|
|
686
|
-
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
687
|
-
ally.m.innate = 'ability:' + pokemon.ability;
|
|
688
|
-
delete ally.volatiles[ally.m.innate];
|
|
689
|
-
if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
},
|
|
693
|
-
onSwitchInPriority: 2,
|
|
694
|
-
onSwitchIn(pokemon) {
|
|
695
|
-
let ngas = false;
|
|
696
|
-
for (const poke of this.getAllActive()) {
|
|
697
|
-
if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
|
|
698
|
-
ngas = true;
|
|
699
|
-
break;
|
|
700
|
-
}
|
|
701
|
-
}
|
|
702
|
-
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
703
|
-
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
704
|
-
if (ally && ally.ability !== pokemon.ability) {
|
|
705
|
-
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
|
|
706
|
-
pokemon.m.innate = 'ability:' + ally.ability;
|
|
707
|
-
delete pokemon.volatiles[pokemon.m.innate];
|
|
708
|
-
if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
|
|
709
|
-
}
|
|
710
|
-
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
711
|
-
ally.m.innate = 'ability:' + pokemon.ability;
|
|
712
|
-
delete ally.volatiles[ally.m.innate];
|
|
713
|
-
if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
},
|
|
717
|
-
onSwitchOut(pokemon) {
|
|
718
|
-
if (pokemon.m.innate) {
|
|
719
|
-
pokemon.removeVolatile(pokemon.m.innate);
|
|
720
|
-
delete pokemon.m.innate;
|
|
721
|
-
}
|
|
722
|
-
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
723
|
-
if (ally && ally.m.innate) {
|
|
724
|
-
ally.removeVolatile(ally.m.innate);
|
|
725
|
-
delete ally.m.innate;
|
|
726
|
-
}
|
|
727
|
-
},
|
|
728
|
-
onFaint(pokemon) {
|
|
729
|
-
if (pokemon.m.innate) {
|
|
730
|
-
pokemon.removeVolatile(pokemon.m.innate);
|
|
731
|
-
delete pokemon.m.innate;
|
|
732
|
-
}
|
|
733
|
-
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
734
|
-
if (ally && ally.m.innate) {
|
|
735
|
-
ally.removeVolatile(ally.m.innate);
|
|
736
|
-
delete ally.m.innate;
|
|
737
|
-
}
|
|
738
|
-
},
|
|
665
|
+
restricted: ['Bolt Beak', 'Close Combat', 'U-turn', 'Volt Switch'],
|
|
739
666
|
},
|
|
740
667
|
{
|
|
741
|
-
name: "[Gen 8]
|
|
742
|
-
desc: `
|
|
668
|
+
name: "[Gen 8] Tag Team Singles",
|
|
669
|
+
desc: `Bring four Pokémon to Team Preview and choose two to battle in a singles battle.`,
|
|
743
670
|
threads: [
|
|
744
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
671
|
+
`• <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
|
|
745
672
|
],
|
|
746
673
|
|
|
747
674
|
mod: 'gen8',
|
|
748
|
-
ruleset: ['
|
|
675
|
+
ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
|
|
749
676
|
banlist: [
|
|
750
|
-
'
|
|
751
|
-
'
|
|
677
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
|
|
678
|
+
'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
679
|
+
'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
|
|
680
|
+
'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
|
|
752
681
|
],
|
|
753
682
|
},
|
|
754
683
|
|
|
@@ -916,10 +845,10 @@ export const Formats: FormatList = [
|
|
|
916
845
|
mod: 'gen8',
|
|
917
846
|
ruleset: ['Standard OMs', 'Sleep Moves Clause'],
|
|
918
847
|
banlist: [
|
|
919
|
-
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Marowak-Alola', 'Melmetal',
|
|
920
|
-
'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap',
|
|
921
|
-
'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense',
|
|
922
|
-
'Baton Pass',
|
|
848
|
+
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Kyogre', 'Marowak-Alola', 'Melmetal',
|
|
849
|
+
'Nidoking', 'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap',
|
|
850
|
+
'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense',
|
|
851
|
+
'Quick Claw', 'Baton Pass',
|
|
923
852
|
],
|
|
924
853
|
onValidateTeam(team) {
|
|
925
854
|
const gods = new Set<string>();
|
|
@@ -1758,6 +1687,104 @@ export const Formats: FormatList = [
|
|
|
1758
1687
|
},
|
|
1759
1688
|
},
|
|
1760
1689
|
},
|
|
1690
|
+
{
|
|
1691
|
+
name: "[Gen 8] Partners in Crime",
|
|
1692
|
+
desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`,
|
|
1693
|
+
threads: [
|
|
1694
|
+
`• <a href="https://www.smogon.com/forums/threads/3706080/">Partners in Crime</a>`,
|
|
1695
|
+
],
|
|
1696
|
+
|
|
1697
|
+
mod: 'partnersincrime',
|
|
1698
|
+
gameType: 'doubles',
|
|
1699
|
+
searchShow: false,
|
|
1700
|
+
ruleset: ['Standard Doubles', 'Dynamax Clause'],
|
|
1701
|
+
banlist: [
|
|
1702
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
|
|
1703
|
+
'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
|
|
1704
|
+
'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
|
|
1705
|
+
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
|
|
1706
|
+
'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
|
|
1707
|
+
'Shell Smash', 'Swagger',
|
|
1708
|
+
],
|
|
1709
|
+
onBeforeSwitchIn(pokemon) {
|
|
1710
|
+
pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
|
|
1711
|
+
let ngas = false;
|
|
1712
|
+
for (const poke of this.getAllActive()) {
|
|
1713
|
+
if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
|
|
1714
|
+
ngas = true;
|
|
1715
|
+
break;
|
|
1716
|
+
}
|
|
1717
|
+
}
|
|
1718
|
+
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
1719
|
+
// Abilities that must be applied before both sides trigger onSwitchIn to correctly
|
|
1720
|
+
// handle switch-in ability-to-ability interactions, e.g. Intimidate counters
|
|
1721
|
+
const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
|
|
1722
|
+
'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
|
|
1723
|
+
'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
|
|
1724
|
+
];
|
|
1725
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
1726
|
+
if (ally && ally.ability !== pokemon.ability) {
|
|
1727
|
+
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
|
|
1728
|
+
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
|
|
1729
|
+
pokemon.m.innate = 'ability:' + ally.ability;
|
|
1730
|
+
delete pokemon.volatiles[pokemon.m.innate];
|
|
1731
|
+
if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
|
|
1732
|
+
}
|
|
1733
|
+
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
|
|
1734
|
+
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
1735
|
+
ally.m.innate = 'ability:' + pokemon.ability;
|
|
1736
|
+
delete ally.volatiles[ally.m.innate];
|
|
1737
|
+
if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
},
|
|
1741
|
+
onSwitchInPriority: 2,
|
|
1742
|
+
onSwitchIn(pokemon) {
|
|
1743
|
+
let ngas = false;
|
|
1744
|
+
for (const poke of this.getAllActive()) {
|
|
1745
|
+
if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
|
|
1746
|
+
ngas = true;
|
|
1747
|
+
break;
|
|
1748
|
+
}
|
|
1749
|
+
}
|
|
1750
|
+
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
1751
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
1752
|
+
if (ally && ally.ability !== pokemon.ability) {
|
|
1753
|
+
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
|
|
1754
|
+
pokemon.m.innate = 'ability:' + ally.ability;
|
|
1755
|
+
delete pokemon.volatiles[pokemon.m.innate];
|
|
1756
|
+
if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
|
|
1757
|
+
}
|
|
1758
|
+
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
1759
|
+
ally.m.innate = 'ability:' + pokemon.ability;
|
|
1760
|
+
delete ally.volatiles[ally.m.innate];
|
|
1761
|
+
if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
},
|
|
1765
|
+
onSwitchOut(pokemon) {
|
|
1766
|
+
if (pokemon.m.innate) {
|
|
1767
|
+
pokemon.removeVolatile(pokemon.m.innate);
|
|
1768
|
+
delete pokemon.m.innate;
|
|
1769
|
+
}
|
|
1770
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
1771
|
+
if (ally && ally.m.innate) {
|
|
1772
|
+
ally.removeVolatile(ally.m.innate);
|
|
1773
|
+
delete ally.m.innate;
|
|
1774
|
+
}
|
|
1775
|
+
},
|
|
1776
|
+
onFaint(pokemon) {
|
|
1777
|
+
if (pokemon.m.innate) {
|
|
1778
|
+
pokemon.removeVolatile(pokemon.m.innate);
|
|
1779
|
+
delete pokemon.m.innate;
|
|
1780
|
+
}
|
|
1781
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
1782
|
+
if (ally && ally.m.innate) {
|
|
1783
|
+
ally.removeVolatile(ally.m.innate);
|
|
1784
|
+
delete ally.m.innate;
|
|
1785
|
+
}
|
|
1786
|
+
},
|
|
1787
|
+
},
|
|
1761
1788
|
{
|
|
1762
1789
|
name: "[Gen 8] Pokebilities",
|
|
1763
1790
|
desc: `Pokémon have all of their released abilities simultaneously.`,
|
|
@@ -2173,11 +2200,12 @@ export const Formats: FormatList = [
|
|
|
2173
2200
|
column: 2,
|
|
2174
2201
|
},
|
|
2175
2202
|
{
|
|
2176
|
-
name: "[Gen
|
|
2203
|
+
name: "[Gen 7] Pick-Your-Team Random Battle",
|
|
2177
2204
|
|
|
2178
|
-
mod: '
|
|
2179
|
-
team: '
|
|
2180
|
-
ruleset: ['
|
|
2205
|
+
mod: 'gen7',
|
|
2206
|
+
team: 'random',
|
|
2207
|
+
ruleset: ['[Gen 7] Random Battle', 'Max Team Size = 12', 'Picked Team Size = 6', 'Team Preview'],
|
|
2208
|
+
desc: `Twelve Pokémon sets are randomly chosen, then you pick six for your team!`,
|
|
2181
2209
|
},
|
|
2182
2210
|
|
|
2183
2211
|
// Randomized Metas
|
|
@@ -2233,6 +2261,14 @@ export const Formats: FormatList = [
|
|
|
2233
2261
|
}
|
|
2234
2262
|
},
|
|
2235
2263
|
},
|
|
2264
|
+
{
|
|
2265
|
+
name: "[Gen 8] Battle Factory",
|
|
2266
|
+
desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`,
|
|
2267
|
+
|
|
2268
|
+
mod: 'gen8',
|
|
2269
|
+
team: 'randomFactory',
|
|
2270
|
+
ruleset: ['Standard', 'Dynamax Clause'],
|
|
2271
|
+
},
|
|
2236
2272
|
{
|
|
2237
2273
|
name: "[Gen 8] BSS Factory",
|
|
2238
2274
|
desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Stadium Singles.`,
|
|
@@ -2521,39 +2557,35 @@ export const Formats: FormatList = [
|
|
|
2521
2557
|
column: 3,
|
|
2522
2558
|
},
|
|
2523
2559
|
{
|
|
2524
|
-
name: "[Gen
|
|
2560
|
+
name: "[Gen 5] Ubers",
|
|
2525
2561
|
threads: [
|
|
2526
|
-
`• <a href="https://www.smogon.com/forums/posts/
|
|
2562
|
+
`• <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
|
|
2527
2563
|
],
|
|
2528
2564
|
|
|
2529
|
-
mod: '
|
|
2565
|
+
mod: 'gen5',
|
|
2530
2566
|
// searchShow: false,
|
|
2531
|
-
ruleset: ['Standard', '
|
|
2532
|
-
banlist: ['Wobbuffet + Leftovers'],
|
|
2567
|
+
ruleset: ['Standard', 'Sleep Clause Mod'],
|
|
2533
2568
|
},
|
|
2534
2569
|
{
|
|
2535
|
-
name: "[Gen
|
|
2570
|
+
name: "[Gen 7] PU",
|
|
2536
2571
|
threads: [
|
|
2537
|
-
`• <a href="https://www.smogon.com/forums/
|
|
2538
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
2572
|
+
`• <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
|
|
2573
|
+
`• <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
|
|
2539
2574
|
],
|
|
2540
2575
|
|
|
2541
|
-
mod: '
|
|
2576
|
+
mod: 'gen7',
|
|
2542
2577
|
// searchShow: false,
|
|
2543
|
-
ruleset: ['[Gen
|
|
2544
|
-
banlist: ['
|
|
2545
|
-
unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
2578
|
+
ruleset: ['[Gen 7] NU'],
|
|
2579
|
+
banlist: ['NU', 'PUBL'],
|
|
2546
2580
|
},
|
|
2547
2581
|
{
|
|
2548
|
-
name: "[Gen
|
|
2549
|
-
threads: [
|
|
2550
|
-
`• <a href="https://www.smogon.com/forums/threads/3659882/">LGPE UU Metagame Discussion & Resources</a>`,
|
|
2551
|
-
],
|
|
2582
|
+
name: "[Gen 2] UUBL",
|
|
2583
|
+
threads: [`• <a href="https://www.smogon.com/forums/threads/3662389/">GSC UUBL</a>`],
|
|
2552
2584
|
|
|
2553
|
-
mod: '
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2585
|
+
mod: 'gen2',
|
|
2586
|
+
ruleset: ['[Gen 2] OU'],
|
|
2587
|
+
banlist: ['OU'],
|
|
2588
|
+
unbanlist: ['Mean Look + Baton Pass', 'Spider Web + Baton Pass'],
|
|
2557
2589
|
},
|
|
2558
2590
|
|
|
2559
2591
|
// Past Gens OU
|
|
@@ -2824,18 +2856,6 @@ export const Formats: FormatList = [
|
|
|
2824
2856
|
ruleset: ['[Gen 7] RU'],
|
|
2825
2857
|
banlist: ['RU', 'NUBL', 'Drought'],
|
|
2826
2858
|
},
|
|
2827
|
-
{
|
|
2828
|
-
name: "[Gen 7] PU",
|
|
2829
|
-
threads: [
|
|
2830
|
-
`• <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
|
|
2831
|
-
`• <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
|
|
2832
|
-
],
|
|
2833
|
-
|
|
2834
|
-
mod: 'gen7',
|
|
2835
|
-
searchShow: false,
|
|
2836
|
-
ruleset: ['[Gen 7] NU'],
|
|
2837
|
-
banlist: ['NU', 'PUBL'],
|
|
2838
|
-
},
|
|
2839
2859
|
{
|
|
2840
2860
|
name: "[Gen 7] LC",
|
|
2841
2861
|
threads: [
|
|
@@ -2885,10 +2905,11 @@ export const Formats: FormatList = [
|
|
|
2885
2905
|
'Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Swagger Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause',
|
|
2886
2906
|
],
|
|
2887
2907
|
banlist: [
|
|
2888
|
-
'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon',
|
|
2889
|
-
'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', '
|
|
2890
|
-
'
|
|
2891
|
-
'
|
|
2908
|
+
'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon',
|
|
2909
|
+
'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mew', 'Mewtwo',
|
|
2910
|
+
'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky',
|
|
2911
|
+
'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom', 'Moody', 'Focus Sash', 'Grass Whistle', 'Hypnosis',
|
|
2912
|
+
'Perish Song', 'Sing', 'Detect + Fightinium Z',
|
|
2892
2913
|
],
|
|
2893
2914
|
},
|
|
2894
2915
|
{
|
|
@@ -3381,26 +3402,29 @@ export const Formats: FormatList = [
|
|
|
3381
3402
|
column: 4,
|
|
3382
3403
|
},
|
|
3383
3404
|
{
|
|
3384
|
-
name: "[Gen 5]
|
|
3405
|
+
name: "[Gen 5] UU",
|
|
3385
3406
|
threads: [
|
|
3386
|
-
`• <a href="https://www.smogon.com/forums/
|
|
3407
|
+
`• <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
|
|
3408
|
+
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
3387
3409
|
],
|
|
3388
3410
|
|
|
3389
3411
|
mod: 'gen5',
|
|
3390
3412
|
searchShow: false,
|
|
3391
|
-
ruleset: ['Standard', 'Sleep Clause Mod'],
|
|
3413
|
+
ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
3414
|
+
banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
3392
3415
|
},
|
|
3393
3416
|
{
|
|
3394
|
-
name: "[Gen 5]
|
|
3417
|
+
name: "[Gen 5] RU",
|
|
3395
3418
|
threads: [
|
|
3396
|
-
`• <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
|
|
3397
3419
|
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
3420
|
+
`• <a href="https://www.smogon.com/forums/threads/3473124/">BW2 RU Viability Rankings</a>`,
|
|
3398
3421
|
],
|
|
3399
3422
|
|
|
3400
3423
|
mod: 'gen5',
|
|
3401
3424
|
searchShow: false,
|
|
3402
|
-
ruleset: ['
|
|
3403
|
-
banlist: ['
|
|
3425
|
+
ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'],
|
|
3426
|
+
banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
|
|
3427
|
+
unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
3404
3428
|
},
|
|
3405
3429
|
{
|
|
3406
3430
|
name: "[Gen 5] NU",
|
|
@@ -3753,6 +3777,17 @@ export const Formats: FormatList = [
|
|
|
3753
3777
|
section: "Past Generations",
|
|
3754
3778
|
column: 5,
|
|
3755
3779
|
},
|
|
3780
|
+
{
|
|
3781
|
+
name: "[Gen 3] Ubers",
|
|
3782
|
+
threads: [
|
|
3783
|
+
`• <a href="https://www.smogon.com/forums/posts/8286280/">ADV Ubers</a>`,
|
|
3784
|
+
],
|
|
3785
|
+
|
|
3786
|
+
mod: 'gen3',
|
|
3787
|
+
searchShow: false,
|
|
3788
|
+
ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
|
|
3789
|
+
banlist: ['Wobbuffet + Leftovers'],
|
|
3790
|
+
},
|
|
3756
3791
|
{
|
|
3757
3792
|
name: "[Gen 3] UU",
|
|
3758
3793
|
threads: [
|
|
@@ -3793,7 +3828,7 @@ export const Formats: FormatList = [
|
|
|
3793
3828
|
'Clefable', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song',
|
|
3794
3829
|
'Self-Destruct', 'Focus Band', 'King\'s Rock', 'Quick Claw',
|
|
3795
3830
|
],
|
|
3796
|
-
unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil'],
|
|
3831
|
+
unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil', 'Soundproof'],
|
|
3797
3832
|
},
|
|
3798
3833
|
{
|
|
3799
3834
|
name: "[Gen 3] Doubles OU",
|
|
@@ -3924,7 +3959,7 @@ export const Formats: FormatList = [
|
|
|
3924
3959
|
|
|
3925
3960
|
mod: 'gen1',
|
|
3926
3961
|
searchShow: false,
|
|
3927
|
-
ruleset: ['[Gen 1] OU', 'APT Clause'],
|
|
3962
|
+
ruleset: ['[Gen 1] OU', 'APT Clause', 'Sleep Moves Clause'],
|
|
3928
3963
|
banlist: ['OU', 'UUBL'],
|
|
3929
3964
|
},
|
|
3930
3965
|
{
|
|
@@ -3935,7 +3970,7 @@ export const Formats: FormatList = [
|
|
|
3935
3970
|
|
|
3936
3971
|
mod: 'gen1',
|
|
3937
3972
|
searchShow: false,
|
|
3938
|
-
ruleset: ['[Gen 1] UU', '!APT Clause'],
|
|
3973
|
+
ruleset: ['[Gen 1] UU', '!APT Clause', '!Sleep Moves Clause'],
|
|
3939
3974
|
banlist: ['UU', 'NUBL'],
|
|
3940
3975
|
},
|
|
3941
3976
|
{
|
|
@@ -3971,7 +4006,7 @@ export const Formats: FormatList = [
|
|
|
3971
4006
|
searchShow: false,
|
|
3972
4007
|
ruleset: [
|
|
3973
4008
|
'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
|
|
3974
|
-
'Obtainable', 'Team Preview', 'Sleep Clause
|
|
4009
|
+
'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
|
|
3975
4010
|
],
|
|
3976
4011
|
banlist: ['Uber'],
|
|
3977
4012
|
},
|
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]
|
|
74
|
+
omotm: "[Gen 8] Revelationmons",
|
|
75
|
+
lcotm: "[Gen 8] Tag Team Singles",
|
|
76
76
|
|
|
77
77
|
// mega evos
|
|
78
78
|
fabio: "Ampharos-Mega",
|
package/data/conditions.ts
CHANGED
|
@@ -287,7 +287,7 @@ export const Conditions: {[k: string]: ConditionData} = {
|
|
|
287
287
|
// note that this is not updated for moves called by other moves
|
|
288
288
|
// i.e. if Dig is called by Metronome, lastMoveTargetLoc will still be the user's location
|
|
289
289
|
let moveTargetLoc: number = attacker.lastMoveTargetLoc!;
|
|
290
|
-
if (effect.sourceEffect && this.dex.moves.get(effect.id).target
|
|
290
|
+
if (effect.sourceEffect && this.dex.moves.get(effect.id).target !== 'self') {
|
|
291
291
|
// this move was called by another move such as Metronome
|
|
292
292
|
// and needs a random target to be determined this turn
|
|
293
293
|
// it will already have one by now if there is any valid target
|