@pkmn/sim 0.5.26 → 0.5.28
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 +205 -169
- package/build/config/formats.js.map +1 -1
- package/build/data/abilities.js +2 -4
- package/build/data/abilities.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/items.js +5 -5
- package/build/data/items.js.map +1 -1
- package/build/data/learnsets.js +30 -28
- package/build/data/learnsets.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/gen5/formats-data.js +69 -69
- package/build/data/mods/gen5/formats-data.js.map +1 -1
- package/build/data/pokedex.js +13 -13
- package/build/data/pokedex.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/items.js +5 -5
- 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/battle.js +2 -2
- package/build/sim/battle.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 +21 -16
- package/build/sim/team-validator.js.map +1 -1
- package/config/formats.ts +206 -167
- package/data/abilities.ts +2 -4
- package/data/aliases.ts +2 -2
- package/data/conditions.ts +1 -1
- package/data/formats-data.ts +24 -25
- package/data/items.ts +5 -5
- package/data/learnsets.ts +30 -28
- 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/gen5/formats-data.ts +69 -69
- package/data/pokedex.ts +13 -13
- package/data/text/abilities.ts +321 -139
- package/data/text/items.ts +5 -5
- package/data/text/moves.ts +8 -2
- package/package.json +1 -1
- package/sim/battle-actions.ts +1 -0
- package/sim/battle.ts +2 -2
- package/sim/pokemon.ts +1 -1
- package/sim/team-validator.ts +22 -18
package/config/formats.ts
CHANGED
|
@@ -232,7 +232,7 @@ export const Formats: FormatList = [
|
|
|
232
232
|
mod: 'gen8',
|
|
233
233
|
ruleset: ['[Gen 8] PU'],
|
|
234
234
|
banlist: [
|
|
235
|
-
'PU', 'Arctovish', 'Aurorus', 'Basculin', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Haunter', 'Magmortar', 'Magneton',
|
|
235
|
+
'PU', 'Arctovish', 'Aurorus', 'Basculin', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Glastrier', 'Haunter', 'Magmortar', 'Magneton',
|
|
236
236
|
'Malamar', 'Ninjask', 'Omastar', 'Rotom-Frost', 'Turtonator', 'Vanilluxe', 'Vikavolt', 'Silvally-Dragon', 'Silvally-Ground', 'Sneasel',
|
|
237
237
|
'Damp Rock', 'Grassy Seed',
|
|
238
238
|
],
|
|
@@ -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
|
],
|
|
@@ -300,7 +300,7 @@ export const Formats: FormatList = [
|
|
|
300
300
|
unbanlist: [
|
|
301
301
|
'Venusaur', 'Charizard', 'Blastoise', 'Sandslash-Base', 'Ninetales-Base', 'Arcanine', 'Alakazam', 'Tentacruel', 'Magneton', 'Cloyster',
|
|
302
302
|
'Exeggutor-Base', 'Rhydon', 'Gyarados', 'Lapras', 'Vaporeon', 'Jolteon', 'Flareon', 'Aerodactyl', 'Dragonite', 'Heracross', 'Skarmory',
|
|
303
|
-
'Tyranitar', 'Ludicolo', 'Aggron', 'Wailord', 'Altaria', 'Whiscash', 'Claydol', 'Cradily', 'Armaldo', 'Milotic', 'Salamence',
|
|
303
|
+
'Tyranitar', 'Ludicolo', 'Gardevoir', 'Aggron', 'Wailord', 'Altaria', 'Whiscash', 'Claydol', 'Cradily', 'Armaldo', 'Milotic', 'Salamence',
|
|
304
304
|
'Metagross', 'Roserade', 'Gastrodon', 'Spiritomb', 'Garchomp', 'Lucario', 'Rhyperior', 'Togekiss', 'Seismitoad', 'Archeops',
|
|
305
305
|
'Vanilluxe', 'Escavalier', 'Haxorus', 'Accelgor', 'Druddigon', 'Bouffalant', 'Hydreigon', 'Volcarona', 'Aegislash', 'Tyrantrum',
|
|
306
306
|
'Aurorus', 'Hawlucha', 'Carbink', 'Goodra', 'Gourgeist', 'Rillaboom', 'Cinderace', 'Inteleon', 'Mr. Rime', 'Dragapult',
|
|
@@ -584,7 +584,7 @@ export const Formats: FormatList = [
|
|
|
584
584
|
ruleset: ['-Nonexistent', 'Standard NatDex', 'Forme Clause', 'Sleep Moves Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', '!Obtainable'],
|
|
585
585
|
banlist: [
|
|
586
586
|
// Pokemon
|
|
587
|
-
'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',
|
|
588
588
|
// Abilities
|
|
589
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',
|
|
590
590
|
// Items
|
|
@@ -647,115 +647,38 @@ export const Formats: FormatList = [
|
|
|
647
647
|
column: 2,
|
|
648
648
|
},
|
|
649
649
|
{
|
|
650
|
-
name: "[Gen 8]
|
|
651
|
-
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).`,
|
|
652
652
|
threads: [
|
|
653
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
653
|
+
`• <a href="https://www.smogon.com/forums/threads/3692297/">Revelationmons</a>`,
|
|
654
654
|
],
|
|
655
655
|
|
|
656
|
-
mod: '
|
|
657
|
-
|
|
658
|
-
// searchShow: false,
|
|
659
|
-
ruleset: ['Standard Doubles', 'Dynamax Clause'],
|
|
656
|
+
mod: 'gen8',
|
|
657
|
+
ruleset: ['Standard OMs', 'Revelationmons Mod', 'Sleep Moves Clause'],
|
|
660
658
|
banlist: [
|
|
661
|
-
'Calyrex-Ice', 'Calyrex-Shadow', '
|
|
662
|
-
'
|
|
663
|
-
'
|
|
664
|
-
'
|
|
665
|
-
'
|
|
666
|
-
'
|
|
659
|
+
'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Dragapult', 'Eternatus',
|
|
660
|
+
'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kingdra', 'Kommo-o', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
|
|
661
|
+
'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
|
|
662
|
+
'Noivern', 'Palkia', 'Pheromosa', 'Polteageist', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Thundurus-Therian', 'Urshifu-Base',
|
|
663
|
+
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull',
|
|
664
|
+
'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
|
|
667
665
|
],
|
|
668
|
-
|
|
669
|
-
pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
|
|
670
|
-
let ngas = false;
|
|
671
|
-
for (const poke of this.getAllActive()) {
|
|
672
|
-
if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
|
|
673
|
-
ngas = true;
|
|
674
|
-
break;
|
|
675
|
-
}
|
|
676
|
-
}
|
|
677
|
-
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
678
|
-
// Abilities that must be applied before both sides trigger onSwitchIn to correctly
|
|
679
|
-
// handle switch-in ability-to-ability interactions, e.g. Intimidate counters
|
|
680
|
-
const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
|
|
681
|
-
'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
|
|
682
|
-
'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
|
|
683
|
-
];
|
|
684
|
-
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
685
|
-
if (ally && ally.ability !== pokemon.ability) {
|
|
686
|
-
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
|
|
687
|
-
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
|
|
688
|
-
pokemon.m.innate = 'ability:' + ally.ability;
|
|
689
|
-
delete pokemon.volatiles[pokemon.m.innate];
|
|
690
|
-
if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
|
|
691
|
-
}
|
|
692
|
-
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
|
|
693
|
-
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
694
|
-
ally.m.innate = 'ability:' + pokemon.ability;
|
|
695
|
-
delete ally.volatiles[ally.m.innate];
|
|
696
|
-
if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
|
|
697
|
-
}
|
|
698
|
-
}
|
|
699
|
-
},
|
|
700
|
-
onSwitchInPriority: 2,
|
|
701
|
-
onSwitchIn(pokemon) {
|
|
702
|
-
let ngas = false;
|
|
703
|
-
for (const poke of this.getAllActive()) {
|
|
704
|
-
if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
|
|
705
|
-
ngas = true;
|
|
706
|
-
break;
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
710
|
-
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
711
|
-
if (ally && ally.ability !== pokemon.ability) {
|
|
712
|
-
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
|
|
713
|
-
pokemon.m.innate = 'ability:' + ally.ability;
|
|
714
|
-
delete pokemon.volatiles[pokemon.m.innate];
|
|
715
|
-
if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
|
|
716
|
-
}
|
|
717
|
-
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
718
|
-
ally.m.innate = 'ability:' + pokemon.ability;
|
|
719
|
-
delete ally.volatiles[ally.m.innate];
|
|
720
|
-
if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
|
|
721
|
-
}
|
|
722
|
-
}
|
|
723
|
-
},
|
|
724
|
-
onSwitchOut(pokemon) {
|
|
725
|
-
if (pokemon.m.innate) {
|
|
726
|
-
pokemon.removeVolatile(pokemon.m.innate);
|
|
727
|
-
delete pokemon.m.innate;
|
|
728
|
-
}
|
|
729
|
-
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
730
|
-
if (ally && ally.m.innate) {
|
|
731
|
-
ally.removeVolatile(ally.m.innate);
|
|
732
|
-
delete ally.m.innate;
|
|
733
|
-
}
|
|
734
|
-
},
|
|
735
|
-
onFaint(pokemon) {
|
|
736
|
-
if (pokemon.m.innate) {
|
|
737
|
-
pokemon.removeVolatile(pokemon.m.innate);
|
|
738
|
-
delete pokemon.m.innate;
|
|
739
|
-
}
|
|
740
|
-
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
741
|
-
if (ally && ally.m.innate) {
|
|
742
|
-
ally.removeVolatile(ally.m.innate);
|
|
743
|
-
delete ally.m.innate;
|
|
744
|
-
}
|
|
745
|
-
},
|
|
666
|
+
restricted: ['Bolt Beak', 'Close Combat', 'U-turn', 'Volt Switch'],
|
|
746
667
|
},
|
|
747
668
|
{
|
|
748
|
-
name: "[Gen 8]
|
|
749
|
-
desc: `
|
|
669
|
+
name: "[Gen 8] Tag Team Singles",
|
|
670
|
+
desc: `Bring four Pokémon to Team Preview and choose two to battle in a singles battle.`,
|
|
750
671
|
threads: [
|
|
751
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
672
|
+
`• <a href="https://www.smogon.com/forums/threads/3705415/">Tag Team Singles</a>`,
|
|
752
673
|
],
|
|
753
674
|
|
|
754
675
|
mod: 'gen8',
|
|
755
|
-
ruleset: ['
|
|
676
|
+
ruleset: ['Picked Team Size = 2', 'Max Team Size = 4', 'Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause'],
|
|
756
677
|
banlist: [
|
|
757
|
-
'
|
|
758
|
-
'
|
|
678
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
|
|
679
|
+
'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
680
|
+
'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
|
|
681
|
+
'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Sash', 'King\'s Rock', 'Lax Incense', 'Final Gambit',
|
|
759
682
|
],
|
|
760
683
|
},
|
|
761
684
|
|
|
@@ -795,14 +718,14 @@ export const Formats: FormatList = [
|
|
|
795
718
|
mod: 'gen8',
|
|
796
719
|
ruleset: ['Standard OMs', '!Obtainable Abilities', '2 Ability Clause', 'Sleep Moves Clause'],
|
|
797
720
|
banlist: [
|
|
798
|
-
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
|
|
799
|
-
'Gengar', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White',
|
|
800
|
-
'
|
|
801
|
-
'
|
|
802
|
-
'
|
|
803
|
-
'
|
|
804
|
-
'
|
|
805
|
-
'
|
|
721
|
+
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus', 'Genesect',
|
|
722
|
+
'Gengar', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
|
|
723
|
+
'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa',
|
|
724
|
+
'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas',
|
|
725
|
+
'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy',
|
|
726
|
+
'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Intrepid Sword', 'Libero', 'Magic Bounce',
|
|
727
|
+
'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout',
|
|
728
|
+
'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
|
|
806
729
|
],
|
|
807
730
|
},
|
|
808
731
|
{
|
|
@@ -1765,6 +1688,104 @@ export const Formats: FormatList = [
|
|
|
1765
1688
|
},
|
|
1766
1689
|
},
|
|
1767
1690
|
},
|
|
1691
|
+
{
|
|
1692
|
+
name: "[Gen 8] Partners in Crime",
|
|
1693
|
+
desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`,
|
|
1694
|
+
threads: [
|
|
1695
|
+
`• <a href="https://www.smogon.com/forums/threads/3706080/">Partners in Crime</a>`,
|
|
1696
|
+
],
|
|
1697
|
+
|
|
1698
|
+
mod: 'partnersincrime',
|
|
1699
|
+
gameType: 'doubles',
|
|
1700
|
+
searchShow: false,
|
|
1701
|
+
ruleset: ['Standard Doubles', 'Dynamax Clause'],
|
|
1702
|
+
banlist: [
|
|
1703
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
|
|
1704
|
+
'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo',
|
|
1705
|
+
'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base',
|
|
1706
|
+
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Emergency Exit',
|
|
1707
|
+
'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard', 'Bolt Beak', 'Fishious Rend',
|
|
1708
|
+
'Shell Smash', 'Swagger',
|
|
1709
|
+
],
|
|
1710
|
+
onBeforeSwitchIn(pokemon) {
|
|
1711
|
+
pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
|
|
1712
|
+
let ngas = false;
|
|
1713
|
+
for (const poke of this.getAllActive()) {
|
|
1714
|
+
if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
|
|
1715
|
+
ngas = true;
|
|
1716
|
+
break;
|
|
1717
|
+
}
|
|
1718
|
+
}
|
|
1719
|
+
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
1720
|
+
// Abilities that must be applied before both sides trigger onSwitchIn to correctly
|
|
1721
|
+
// handle switch-in ability-to-ability interactions, e.g. Intimidate counters
|
|
1722
|
+
const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
|
|
1723
|
+
'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
|
|
1724
|
+
'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
|
|
1725
|
+
];
|
|
1726
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
1727
|
+
if (ally && ally.ability !== pokemon.ability) {
|
|
1728
|
+
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
|
|
1729
|
+
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
|
|
1730
|
+
pokemon.m.innate = 'ability:' + ally.ability;
|
|
1731
|
+
delete pokemon.volatiles[pokemon.m.innate];
|
|
1732
|
+
if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
|
|
1733
|
+
}
|
|
1734
|
+
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
|
|
1735
|
+
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
1736
|
+
ally.m.innate = 'ability:' + pokemon.ability;
|
|
1737
|
+
delete ally.volatiles[ally.m.innate];
|
|
1738
|
+
if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
|
|
1739
|
+
}
|
|
1740
|
+
}
|
|
1741
|
+
},
|
|
1742
|
+
onSwitchInPriority: 2,
|
|
1743
|
+
onSwitchIn(pokemon) {
|
|
1744
|
+
let ngas = false;
|
|
1745
|
+
for (const poke of this.getAllActive()) {
|
|
1746
|
+
if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
|
|
1747
|
+
ngas = true;
|
|
1748
|
+
break;
|
|
1749
|
+
}
|
|
1750
|
+
}
|
|
1751
|
+
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
1752
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
1753
|
+
if (ally && ally.ability !== pokemon.ability) {
|
|
1754
|
+
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
|
|
1755
|
+
pokemon.m.innate = 'ability:' + ally.ability;
|
|
1756
|
+
delete pokemon.volatiles[pokemon.m.innate];
|
|
1757
|
+
if (!ngas || ally.getAbility().isPermanent) pokemon.addVolatile(pokemon.m.innate);
|
|
1758
|
+
}
|
|
1759
|
+
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
1760
|
+
ally.m.innate = 'ability:' + pokemon.ability;
|
|
1761
|
+
delete ally.volatiles[ally.m.innate];
|
|
1762
|
+
if (!ngas || pokemon.getAbility().isPermanent) ally.addVolatile(ally.m.innate);
|
|
1763
|
+
}
|
|
1764
|
+
}
|
|
1765
|
+
},
|
|
1766
|
+
onSwitchOut(pokemon) {
|
|
1767
|
+
if (pokemon.m.innate) {
|
|
1768
|
+
pokemon.removeVolatile(pokemon.m.innate);
|
|
1769
|
+
delete pokemon.m.innate;
|
|
1770
|
+
}
|
|
1771
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
1772
|
+
if (ally && ally.m.innate) {
|
|
1773
|
+
ally.removeVolatile(ally.m.innate);
|
|
1774
|
+
delete ally.m.innate;
|
|
1775
|
+
}
|
|
1776
|
+
},
|
|
1777
|
+
onFaint(pokemon) {
|
|
1778
|
+
if (pokemon.m.innate) {
|
|
1779
|
+
pokemon.removeVolatile(pokemon.m.innate);
|
|
1780
|
+
delete pokemon.m.innate;
|
|
1781
|
+
}
|
|
1782
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
1783
|
+
if (ally && ally.m.innate) {
|
|
1784
|
+
ally.removeVolatile(ally.m.innate);
|
|
1785
|
+
delete ally.m.innate;
|
|
1786
|
+
}
|
|
1787
|
+
},
|
|
1788
|
+
},
|
|
1768
1789
|
{
|
|
1769
1790
|
name: "[Gen 8] Pokebilities",
|
|
1770
1791
|
desc: `Pokémon have all of their released abilities simultaneously.`,
|
|
@@ -2180,11 +2201,12 @@ export const Formats: FormatList = [
|
|
|
2180
2201
|
column: 2,
|
|
2181
2202
|
},
|
|
2182
2203
|
{
|
|
2183
|
-
name: "[Gen
|
|
2204
|
+
name: "[Gen 7] Pick-Your-Team Random Battle",
|
|
2184
2205
|
|
|
2185
|
-
mod: '
|
|
2186
|
-
team: '
|
|
2187
|
-
ruleset: ['
|
|
2206
|
+
mod: 'gen7',
|
|
2207
|
+
team: 'random',
|
|
2208
|
+
ruleset: ['[Gen 7] Random Battle', 'Max Team Size = 12', 'Picked Team Size = 6', 'Team Preview'],
|
|
2209
|
+
desc: `Twelve Pokémon sets are randomly chosen, then you pick six for your team!`,
|
|
2188
2210
|
},
|
|
2189
2211
|
|
|
2190
2212
|
// Randomized Metas
|
|
@@ -2240,6 +2262,14 @@ export const Formats: FormatList = [
|
|
|
2240
2262
|
}
|
|
2241
2263
|
},
|
|
2242
2264
|
},
|
|
2265
|
+
{
|
|
2266
|
+
name: "[Gen 8] Battle Factory",
|
|
2267
|
+
desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`,
|
|
2268
|
+
|
|
2269
|
+
mod: 'gen8',
|
|
2270
|
+
team: 'randomFactory',
|
|
2271
|
+
ruleset: ['Standard', 'Dynamax Clause'],
|
|
2272
|
+
},
|
|
2243
2273
|
{
|
|
2244
2274
|
name: "[Gen 8] BSS Factory",
|
|
2245
2275
|
desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Stadium Singles.`,
|
|
@@ -2528,44 +2558,34 @@ export const Formats: FormatList = [
|
|
|
2528
2558
|
column: 3,
|
|
2529
2559
|
},
|
|
2530
2560
|
{
|
|
2531
|
-
name: "[Gen
|
|
2561
|
+
name: "[Gen 5] Ubers",
|
|
2532
2562
|
threads: [
|
|
2533
|
-
`• <a href="https://www.smogon.com/forums/posts/
|
|
2563
|
+
`• <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
|
|
2534
2564
|
],
|
|
2535
2565
|
|
|
2536
|
-
mod: '
|
|
2566
|
+
mod: 'gen5',
|
|
2537
2567
|
// searchShow: false,
|
|
2538
|
-
ruleset: ['Standard'],
|
|
2539
|
-
banlist: ['AG'],
|
|
2568
|
+
ruleset: ['Standard', 'Sleep Clause Mod'],
|
|
2540
2569
|
},
|
|
2541
2570
|
{
|
|
2542
|
-
name: "[Gen
|
|
2571
|
+
name: "[Gen 7] PU",
|
|
2543
2572
|
threads: [
|
|
2544
|
-
`• <a href="https://www.smogon.com/
|
|
2545
|
-
`• <a href="https://www.smogon.com/forums/
|
|
2573
|
+
`• <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
|
|
2574
|
+
`• <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
|
|
2546
2575
|
],
|
|
2547
2576
|
|
|
2548
|
-
mod: '
|
|
2577
|
+
mod: 'gen7',
|
|
2549
2578
|
// searchShow: false,
|
|
2550
|
-
ruleset: ['
|
|
2551
|
-
banlist: [
|
|
2552
|
-
'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma',
|
|
2553
|
-
'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Sonic Boom', 'Swagger',
|
|
2554
|
-
],
|
|
2579
|
+
ruleset: ['[Gen 7] NU'],
|
|
2580
|
+
banlist: ['NU', 'PUBL'],
|
|
2555
2581
|
},
|
|
2556
2582
|
{
|
|
2557
|
-
name: "[Gen
|
|
2558
|
-
threads: [
|
|
2559
|
-
`• <a href="https://www.smogon.com/forums/threads/3682412/">Nintendo Cup 1997 Discussion & Resources</a>`,
|
|
2560
|
-
],
|
|
2583
|
+
name: "[Gen 2] UUBL",
|
|
2584
|
+
threads: [`• <a href="https://www.smogon.com/forums/threads/3662389/">GSC UUBL</a>`],
|
|
2561
2585
|
|
|
2562
|
-
mod: '
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
|
|
2566
|
-
'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
|
|
2567
|
-
],
|
|
2568
|
-
banlist: ['Uber'],
|
|
2586
|
+
mod: 'gen2',
|
|
2587
|
+
ruleset: ['[Gen 2] OU'],
|
|
2588
|
+
banlist: ['OU'],
|
|
2569
2589
|
},
|
|
2570
2590
|
|
|
2571
2591
|
// Past Gens OU
|
|
@@ -2836,18 +2856,6 @@ export const Formats: FormatList = [
|
|
|
2836
2856
|
ruleset: ['[Gen 7] RU'],
|
|
2837
2857
|
banlist: ['RU', 'NUBL', 'Drought'],
|
|
2838
2858
|
},
|
|
2839
|
-
{
|
|
2840
|
-
name: "[Gen 7] PU",
|
|
2841
|
-
threads: [
|
|
2842
|
-
`• <a href="https://www.smogon.com/forums/threads/3611496/">USM PU Sample Teams</a>`,
|
|
2843
|
-
`• <a href="https://www.smogon.com/forums/threads/3614892/">USM PU Viability Rankings</a>`,
|
|
2844
|
-
],
|
|
2845
|
-
|
|
2846
|
-
mod: 'gen7',
|
|
2847
|
-
searchShow: false,
|
|
2848
|
-
ruleset: ['[Gen 7] NU'],
|
|
2849
|
-
banlist: ['NU', 'PUBL'],
|
|
2850
|
-
},
|
|
2851
2859
|
{
|
|
2852
2860
|
name: "[Gen 7] LC",
|
|
2853
2861
|
threads: [
|
|
@@ -2897,10 +2905,11 @@ export const Formats: FormatList = [
|
|
|
2897
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',
|
|
2898
2906
|
],
|
|
2899
2907
|
banlist: [
|
|
2900
|
-
'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon',
|
|
2901
|
-
'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', '
|
|
2902
|
-
'
|
|
2903
|
-
'
|
|
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',
|
|
2904
2913
|
],
|
|
2905
2914
|
},
|
|
2906
2915
|
{
|
|
@@ -3392,16 +3401,6 @@ export const Formats: FormatList = [
|
|
|
3392
3401
|
section: "B2/W2 Singles",
|
|
3393
3402
|
column: 4,
|
|
3394
3403
|
},
|
|
3395
|
-
{
|
|
3396
|
-
name: "[Gen 5] Ubers",
|
|
3397
|
-
threads: [
|
|
3398
|
-
`• <a href="https://www.smogon.com/forums/posts/8286278/">BW2 Ubers</a>`,
|
|
3399
|
-
],
|
|
3400
|
-
|
|
3401
|
-
mod: 'gen5',
|
|
3402
|
-
searchShow: false,
|
|
3403
|
-
ruleset: ['Standard', 'Sleep Clause Mod'],
|
|
3404
|
-
},
|
|
3405
3404
|
{
|
|
3406
3405
|
name: "[Gen 5] UU",
|
|
3407
3406
|
threads: [
|
|
@@ -3602,6 +3601,17 @@ export const Formats: FormatList = [
|
|
|
3602
3601
|
section: "DPP Singles",
|
|
3603
3602
|
column: 5,
|
|
3604
3603
|
},
|
|
3604
|
+
{
|
|
3605
|
+
name: "[Gen 4] Ubers",
|
|
3606
|
+
threads: [
|
|
3607
|
+
`• <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
|
|
3608
|
+
],
|
|
3609
|
+
|
|
3610
|
+
mod: 'gen4',
|
|
3611
|
+
searchShow: false,
|
|
3612
|
+
ruleset: ['Standard'],
|
|
3613
|
+
banlist: ['AG'],
|
|
3614
|
+
},
|
|
3605
3615
|
{
|
|
3606
3616
|
name: "[Gen 4] UU",
|
|
3607
3617
|
threads: [
|
|
@@ -3645,6 +3655,21 @@ export const Formats: FormatList = [
|
|
|
3645
3655
|
'Sharpedo', 'Shiftry', 'Skuntank', 'Slowking', 'Tauros', 'Typhlosion', 'Venomoth', 'Vileplume',
|
|
3646
3656
|
],
|
|
3647
3657
|
},
|
|
3658
|
+
{
|
|
3659
|
+
name: "[Gen 4] LC",
|
|
3660
|
+
threads: [
|
|
3661
|
+
`• <a href="https://www.smogon.com/dp/articles/little_cup_guide">DPP LC Guide</a>`,
|
|
3662
|
+
`• <a href="https://www.smogon.com/forums/posts/7336500/">DPP LC Viability Rankings</a>`,
|
|
3663
|
+
],
|
|
3664
|
+
|
|
3665
|
+
mod: 'gen4',
|
|
3666
|
+
searchShow: false,
|
|
3667
|
+
ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
|
|
3668
|
+
banlist: [
|
|
3669
|
+
'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma',
|
|
3670
|
+
'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Sonic Boom', 'Swagger',
|
|
3671
|
+
],
|
|
3672
|
+
},
|
|
3648
3673
|
{
|
|
3649
3674
|
name: "[Gen 4] Anything Goes",
|
|
3650
3675
|
|
|
@@ -3803,7 +3828,7 @@ export const Formats: FormatList = [
|
|
|
3803
3828
|
'Clefable', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song',
|
|
3804
3829
|
'Self-Destruct', 'Focus Band', 'King\'s Rock', 'Quick Claw',
|
|
3805
3830
|
],
|
|
3806
|
-
unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil'],
|
|
3831
|
+
unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil', 'Soundproof'],
|
|
3807
3832
|
},
|
|
3808
3833
|
{
|
|
3809
3834
|
name: "[Gen 3] Doubles OU",
|
|
@@ -3934,7 +3959,7 @@ export const Formats: FormatList = [
|
|
|
3934
3959
|
|
|
3935
3960
|
mod: 'gen1',
|
|
3936
3961
|
searchShow: false,
|
|
3937
|
-
ruleset: ['[Gen 1] OU', 'APT Clause'],
|
|
3962
|
+
ruleset: ['[Gen 1] OU', 'APT Clause', 'Sleep Moves Clause'],
|
|
3938
3963
|
banlist: ['OU', 'UUBL'],
|
|
3939
3964
|
},
|
|
3940
3965
|
{
|
|
@@ -3945,7 +3970,7 @@ export const Formats: FormatList = [
|
|
|
3945
3970
|
|
|
3946
3971
|
mod: 'gen1',
|
|
3947
3972
|
searchShow: false,
|
|
3948
|
-
ruleset: ['[Gen 1] UU', '!APT Clause'],
|
|
3973
|
+
ruleset: ['[Gen 1] UU', '!APT Clause', '!Sleep Moves Clause'],
|
|
3949
3974
|
banlist: ['UU', 'NUBL'],
|
|
3950
3975
|
},
|
|
3951
3976
|
{
|
|
@@ -3971,6 +3996,20 @@ export const Formats: FormatList = [
|
|
|
3971
3996
|
ruleset: ['Standard'],
|
|
3972
3997
|
banlist: ['Uber'],
|
|
3973
3998
|
},
|
|
3999
|
+
{
|
|
4000
|
+
name: "[Gen 1] Nintendo Cup 1997",
|
|
4001
|
+
threads: [
|
|
4002
|
+
`• <a href="https://www.smogon.com/forums/threads/3682412/">Nintendo Cup 1997 Discussion & Resources</a>`,
|
|
4003
|
+
],
|
|
4004
|
+
|
|
4005
|
+
mod: 'gen1jpn',
|
|
4006
|
+
searchShow: false,
|
|
4007
|
+
ruleset: [
|
|
4008
|
+
'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
|
|
4009
|
+
'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'HP Percentage Mod', 'Cancel Mod', 'Nintendo Cup 1997 Move Legality',
|
|
4010
|
+
],
|
|
4011
|
+
banlist: ['Uber'],
|
|
4012
|
+
},
|
|
3974
4013
|
{
|
|
3975
4014
|
name: "[Gen 1] Stadium OU",
|
|
3976
4015
|
threads: [
|
package/data/abilities.ts
CHANGED
|
@@ -516,8 +516,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
|
|
|
516
516
|
}
|
|
517
517
|
}
|
|
518
518
|
if (statsLowered) {
|
|
519
|
-
this.
|
|
520
|
-
this.boost({spa: 2}, target, target, null, true);
|
|
519
|
+
this.boost({spa: 2}, target, target, null, false, true);
|
|
521
520
|
}
|
|
522
521
|
},
|
|
523
522
|
name: "Competitive",
|
|
@@ -706,8 +705,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
|
|
|
706
705
|
}
|
|
707
706
|
}
|
|
708
707
|
if (statsLowered) {
|
|
709
|
-
this.
|
|
710
|
-
this.boost({atk: 2}, target, target, null, true);
|
|
708
|
+
this.boost({atk: 2}, target, target, null, false, true);
|
|
711
709
|
}
|
|
712
710
|
},
|
|
713
711
|
name: "Defiant",
|
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
|