@pkmn/sim 0.5.10 → 0.5.13
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/README.md +5 -0
- package/build/config/formats.js +376 -299
- package/build/config/formats.js.map +1 -1
- package/build/data/abilities.js +9 -9
- package/build/data/abilities.js.map +1 -1
- package/build/data/aliases.js +3 -0
- package/build/data/aliases.js.map +1 -1
- package/build/data/conditions.js +8 -12
- package/build/data/conditions.js.map +1 -1
- package/build/data/formats-data.js +36 -35
- package/build/data/formats-data.js.map +1 -1
- package/build/data/items.js +1 -1
- package/build/data/items.js.map +1 -1
- package/build/data/learnsets.js +5 -4
- package/build/data/learnsets.js.map +1 -1
- package/build/data/mods/gen1/formats-data.js +6 -4
- package/build/data/mods/gen1/formats-data.js.map +1 -1
- package/build/data/mods/gen1/moves.js +2 -4
- package/build/data/mods/gen1/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/gen6/formats-data.js +3 -3
- package/build/data/mods/gen6/formats-data.js.map +1 -1
- package/build/data/mods/gen7/formats-data.js +1 -1
- package/build/data/mods/gen7/formats-data.js.map +1 -1
- package/build/data/moves.js +14 -12
- package/build/data/moves.js.map +1 -1
- package/build/data/pokedex.js +2 -2
- 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/tags.js +4 -4
- package/build/data/tags.js.map +1 -1
- package/build/data/text/moves.js +1 -0
- package/build/data/text/moves.js.map +1 -1
- package/build/sim/battle-actions.js +0 -6
- package/build/sim/battle-actions.js.map +1 -1
- package/build/sim/battle-queue.js +1 -3
- package/build/sim/battle-queue.js.map +1 -1
- package/build/sim/battle.js +13 -11
- package/build/sim/battle.js.map +1 -1
- package/build/sim/dex-conditions.js +11 -3
- package/build/sim/dex-conditions.js.map +1 -1
- package/build/sim/dex-data.js +2 -0
- package/build/sim/dex-data.js.map +1 -1
- package/build/sim/dex-formats.js +1 -0
- package/build/sim/dex-formats.js.map +1 -1
- package/build/sim/dex-items.js +1 -0
- package/build/sim/dex-items.js.map +1 -1
- package/build/sim/dex-moves.js +1 -0
- package/build/sim/dex-moves.js.map +1 -1
- package/build/sim/dex-species.js +1 -0
- package/build/sim/dex-species.js.map +1 -1
- package/build/sim/team-validator.js +1 -1
- package/build/sim/team-validator.js.map +1 -1
- package/config/formats.ts +363 -283
- package/data/abilities.ts +9 -9
- package/data/aliases.ts +3 -0
- package/data/conditions.ts +8 -10
- package/data/formats-data.ts +36 -35
- package/data/items.ts +1 -1
- package/data/learnsets.ts +5 -4
- package/data/mods/gen1/formats-data.ts +6 -4
- package/data/mods/gen1/moves.ts +2 -4
- package/data/mods/gen3/formats-data.ts +2 -2
- package/data/mods/gen6/formats-data.ts +3 -3
- package/data/mods/gen7/formats-data.ts +1 -1
- package/data/moves.ts +13 -12
- package/data/pokedex.ts +2 -2
- package/data/rulesets.ts +1 -1
- package/data/tags.ts +4 -4
- package/data/text/moves.ts +2 -0
- package/package.json +3 -3
- package/sim/battle-actions.ts +0 -7
- package/sim/battle-queue.ts +1 -3
- package/sim/battle.ts +4 -1
- package/sim/dex-conditions.ts +10 -3
- package/sim/dex-data.ts +2 -0
- package/sim/dex-formats.ts +1 -0
- package/sim/dex-items.ts +1 -0
- package/sim/dex-moves.ts +1 -0
- package/sim/dex-species.ts +1 -0
- package/sim/team-validator.ts +1 -1
package/build/config/formats.js
CHANGED
|
@@ -173,7 +173,7 @@ exports.Formats = [
|
|
|
173
173
|
'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel',
|
|
174
174
|
'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal',
|
|
175
175
|
'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Moody', 'Power Construct', 'Shadow Tag', 'Bright Powder',
|
|
176
|
-
'Damp Rock', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Smooth Rock', 'Terrain Extender', 'Baton Pass',
|
|
176
|
+
'Damp Rock', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Smooth Rock', 'Terrain Extender', 'Acupressure', 'Baton Pass',
|
|
177
177
|
],
|
|
178
178
|
},
|
|
179
179
|
{
|
|
@@ -191,7 +191,7 @@ exports.Formats = [
|
|
|
191
191
|
],
|
|
192
192
|
banlist: [
|
|
193
193
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Jirachi',
|
|
194
|
-
'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mew', 'Mewtwo', 'Mimikyu', 'Necrozma-Dawn-Wings',
|
|
194
|
+
'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mew', 'Mewtwo', 'Mimikyu', 'Necrozma', 'Necrozma-Dawn-Wings',
|
|
195
195
|
'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye', 'Snorlax', 'Solgaleo', 'Victini', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
196
196
|
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Band', 'Focus Sash', 'Lax Incense', 'Quick Claw', 'Perish Song',
|
|
197
197
|
],
|
|
@@ -231,9 +231,9 @@ exports.Formats = [
|
|
|
231
231
|
ruleset: ['[Gen 8] LC'],
|
|
232
232
|
banlist: [
|
|
233
233
|
// LC OU
|
|
234
|
-
'Abra', 'Carvanha', '
|
|
235
|
-
'
|
|
236
|
-
'Ponyta', 'Ponyta-Galar', 'Porygon', 'Slowpoke-Base', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
|
|
234
|
+
'Abra', 'Carvanha', 'Diglett-Base', 'Dwebble', 'Ferroseed', 'Foongus', 'Frillish', 'Grookey', 'Koffing',
|
|
235
|
+
'Larvesta', 'Magby', 'Magnemite', 'Mareanie', 'Mienfoo', 'Mudbray', 'Munchlax', 'Natu', 'Onix', 'Pawniard',
|
|
236
|
+
'Ponyta', 'Ponyta-Galar', 'Porygon', 'Slowpoke-Base', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
|
|
237
237
|
// LC UUBL
|
|
238
238
|
'Farfetch\u2019d-Galar', 'Scorbunny', 'Shellder', 'Wingull',
|
|
239
239
|
],
|
|
@@ -329,7 +329,7 @@ exports.Formats = [
|
|
|
329
329
|
gameType: 'doubles',
|
|
330
330
|
searchShow: false,
|
|
331
331
|
ruleset: ['Standard Doubles', 'Little Cup', 'Dynamax Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
332
|
-
banlist: ['Corsola-Galar', 'Cutiefly', 'Ponyta-Base', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix', 'Vulpix-Alola'],
|
|
332
|
+
banlist: ['Corsola-Galar', 'Cutiefly', 'Ponyta-Base', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix', 'Vulpix-Alola', 'Ally Switch'],
|
|
333
333
|
},
|
|
334
334
|
{
|
|
335
335
|
name: "[Gen 8] VGC 2022",
|
|
@@ -372,8 +372,8 @@ exports.Formats = [
|
|
|
372
372
|
banlist: [
|
|
373
373
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Jirachi', 'Kyogre',
|
|
374
374
|
'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
375
|
-
'Rayquaza', 'Reshiram', 'Solgaleo', '
|
|
376
|
-
'Zekrom', 'Power Construct', 'Focus Sash', 'Ally Switch', 'Final Gambit', 'Perish Song', 'Swagger',
|
|
375
|
+
'Rayquaza', 'Reshiram', 'Solgaleo', 'Tornadus-Base', 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
376
|
+
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Power Construct', 'Focus Sash', 'Ally Switch', 'Final Gambit', 'Perish Song', 'Swagger',
|
|
377
377
|
],
|
|
378
378
|
},
|
|
379
379
|
{
|
|
@@ -442,8 +442,8 @@ exports.Formats = [
|
|
|
442
442
|
mod: 'gen8',
|
|
443
443
|
ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
|
|
444
444
|
banlist: [
|
|
445
|
-
'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', '
|
|
446
|
-
'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Eternatus',
|
|
445
|
+
'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darkrai',
|
|
446
|
+
'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus',
|
|
447
447
|
'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black',
|
|
448
448
|
'Kyurem-White', 'Landorus-Base', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Metagross-Mega', 'Mewtwo',
|
|
449
449
|
'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
|
|
@@ -472,16 +472,16 @@ exports.Formats = [
|
|
|
472
472
|
'Drizzle', 'Drought',
|
|
473
473
|
// Slowbronite is banned so it doesn't validate on Galarian Slowbro
|
|
474
474
|
'Slowbronite',
|
|
475
|
-
//
|
|
476
|
-
'
|
|
475
|
+
// Ban for ou suspect
|
|
476
|
+
'Blaziken-Mega',
|
|
477
477
|
],
|
|
478
478
|
// Used to distinguish UU from below UU in the client
|
|
479
479
|
restricted: [
|
|
480
|
-
'Aegislash', '
|
|
481
|
-
'
|
|
482
|
-
'
|
|
483
|
-
'
|
|
484
|
-
'
|
|
480
|
+
'Aegislash', 'Altaria-Mega', 'Amoonguss', 'Azumarill', 'Beedrill-Mega', 'Breloom', 'Celesteela', 'Chandelure', 'Donphan', 'Dracozolt',
|
|
481
|
+
'Dragonite', 'Feraligatr', 'Gastrodon', 'Hatterene', 'Hippowdon', 'Infernape', 'Keldeo', 'Krookodile', 'Mamoswine', 'Mandibuzz',
|
|
482
|
+
'Manectric-Mega', 'Melmetal', 'Mienshao', 'Moltres-Base', 'Nidoking', 'Nidoqueen', 'Nihilego', 'Quagsire', 'Regieleki', 'Ribombee',
|
|
483
|
+
'Rotom-Heat', 'Rotom-Wash', 'Salamence', 'Scizor', 'Skarmory', 'Slowking-Base', 'Swampert-Base', 'Talonflame', 'Tangrowth', 'Tornadus-Base',
|
|
484
|
+
'Umbreon', 'Urshifu-Rapid-Strike',
|
|
485
485
|
],
|
|
486
486
|
},
|
|
487
487
|
{
|
|
@@ -591,213 +591,41 @@ exports.Formats = [
|
|
|
591
591
|
column: 2,
|
|
592
592
|
},
|
|
593
593
|
{
|
|
594
|
-
name: "[Gen 8]
|
|
595
|
-
desc: `
|
|
594
|
+
name: "[Gen 8] Sketchmons",
|
|
595
|
+
desc: `Every Pokémon gets a new move once.`,
|
|
596
596
|
threads: [
|
|
597
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
597
|
+
`• <a href="https://www.smogon.com/forums/threads/3680298/">Sketchmons</a>`,
|
|
598
598
|
],
|
|
599
|
-
mod: '
|
|
600
|
-
|
|
601
|
-
ruleset: ['Standard', 'Dynamax Clause'],
|
|
599
|
+
mod: 'gen8',
|
|
600
|
+
ruleset: ['Standard', 'Sketchmons Move Legality', 'Dynamax Clause'],
|
|
602
601
|
banlist: [
|
|
603
|
-
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
|
|
604
|
-
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', '
|
|
605
|
-
'Marshadow', '
|
|
606
|
-
'
|
|
607
|
-
'
|
|
608
|
-
'
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
'
|
|
612
|
-
'
|
|
613
|
-
'
|
|
602
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Genesect', 'Giratina',
|
|
603
|
+
'Giratina-Origin', 'Groudon', 'Hawlucha', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala',
|
|
604
|
+
'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Porygon-Z', 'Pheromosa', 'Rayquaza', 'Regieleki',
|
|
605
|
+
'Reshiram', 'Rillaboom', 'Shedinja', 'Solgaleo', 'Spectrier', 'Swoobat', 'Tapu Bulu', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
606
|
+
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Sand Rush',
|
|
607
|
+
'Shadow Tag', 'King\'s Rock', 'Baton Pass',
|
|
608
|
+
],
|
|
609
|
+
restricted: [
|
|
610
|
+
'Acupressure', 'Astral Barrage', 'Belly Drum', 'Bolt Beak', 'Clangorous Soul', 'Double Iron Bash', 'Electrify', 'Extreme Speed', 'Fishious Rend',
|
|
611
|
+
'Geomancy', 'Glacial Lance', 'Lovely Kiss', 'No Retreat', 'Oblivion Wing', 'Octolock', 'Quiver Dance', 'Secret Sword', 'Shell Smash', 'Shift Gear',
|
|
612
|
+
'Sleep Powder', 'Spore', 'Thousand Arrows', 'Transform', 'V-create', 'Wicked Blow',
|
|
614
613
|
],
|
|
615
|
-
getSharedPower(pokemon) {
|
|
616
|
-
const sharedPower = new Set();
|
|
617
|
-
for (const ally of pokemon.side.pokemon) {
|
|
618
|
-
if (ally.previouslySwitchedIn > 0) {
|
|
619
|
-
if (pokemon.battle.dex.currentMod !== 'sharedpower' && ['trace', 'mirrorarmor'].includes(ally.baseAbility)) {
|
|
620
|
-
sharedPower.add('noability');
|
|
621
|
-
continue;
|
|
622
|
-
}
|
|
623
|
-
sharedPower.add(ally.baseAbility);
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
sharedPower.delete(pokemon.baseAbility);
|
|
627
|
-
return sharedPower;
|
|
628
|
-
},
|
|
629
|
-
onBeforeSwitchIn(pokemon) {
|
|
630
|
-
let format = this.format;
|
|
631
|
-
if (!format.getSharedPower)
|
|
632
|
-
format = this.dex.formats.get('gen8sharedpower');
|
|
633
|
-
for (const ability of format.getSharedPower(pokemon)) {
|
|
634
|
-
const effect = 'ability:' + ability;
|
|
635
|
-
pokemon.volatiles[effect] = { id: this.toID(effect), target: pokemon };
|
|
636
|
-
if (!pokemon.m.abils)
|
|
637
|
-
pokemon.m.abils = [];
|
|
638
|
-
if (!pokemon.m.abils.includes(effect))
|
|
639
|
-
pokemon.m.abils.push(effect);
|
|
640
|
-
}
|
|
641
|
-
},
|
|
642
|
-
onSwitchInPriority: 2,
|
|
643
|
-
onSwitchIn(pokemon) {
|
|
644
|
-
let format = this.format;
|
|
645
|
-
if (!format.getSharedPower)
|
|
646
|
-
format = this.dex.formats.get('gen8sharedpower');
|
|
647
|
-
for (const ability of format.getSharedPower(pokemon)) {
|
|
648
|
-
if (ability === 'noability') {
|
|
649
|
-
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.`);
|
|
650
|
-
}
|
|
651
|
-
const effect = 'ability:' + ability;
|
|
652
|
-
delete pokemon.volatiles[effect];
|
|
653
|
-
pokemon.addVolatile(effect);
|
|
654
|
-
}
|
|
655
|
-
},
|
|
656
614
|
},
|
|
657
615
|
{
|
|
658
|
-
name: "[Gen 8]
|
|
659
|
-
desc: `
|
|
616
|
+
name: "[Gen 8] Flipped",
|
|
617
|
+
desc: `Pokémon have their base stats flipped.`,
|
|
660
618
|
threads: [
|
|
661
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
619
|
+
`• <a href="https://www.smogon.com/forums/threads/3662020/">Flipped</a>`,
|
|
662
620
|
],
|
|
663
621
|
mod: 'gen8',
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
const name = set.name;
|
|
672
|
-
if (names.has(this.dex.toID(name))) {
|
|
673
|
-
return [
|
|
674
|
-
`Your Pok\u00e9mon must have different nicknames.`,
|
|
675
|
-
`(You have more than one Pok\u00e9mon named '${name}')`,
|
|
676
|
-
];
|
|
677
|
-
}
|
|
678
|
-
names.add(this.dex.toID(name));
|
|
679
|
-
}
|
|
680
|
-
if (!names.size) {
|
|
681
|
-
return [
|
|
682
|
-
`${this.format.name} works using nicknames; your team has 0 nicknamed Pok\u00e9mon.`,
|
|
683
|
-
`(If this was intentional, add a nickname to one Pok\u00e9mon that isn't the name of a Pok\u00e9mon species.)`,
|
|
684
|
-
];
|
|
685
|
-
}
|
|
686
|
-
},
|
|
687
|
-
checkCanLearn(move, species, lsetData, set) {
|
|
688
|
-
// @ts-ignore
|
|
689
|
-
if (!set.sp?.exists || !set.crossSpecies?.exists) {
|
|
690
|
-
return this.checkCanLearn(move, species, lsetData, set);
|
|
691
|
-
}
|
|
692
|
-
// @ts-ignore
|
|
693
|
-
const problem = this.checkCanLearn(move, set.sp);
|
|
694
|
-
if (!problem)
|
|
695
|
-
return null;
|
|
696
|
-
// @ts-ignore
|
|
697
|
-
if (!set.crossMovesLeft)
|
|
698
|
-
return problem;
|
|
699
|
-
// @ts-ignore
|
|
700
|
-
if (this.checkCanLearn(move, set.crossSpecies))
|
|
701
|
-
return problem;
|
|
702
|
-
// @ts-ignore
|
|
703
|
-
set.crossMovesLeft--;
|
|
704
|
-
return null;
|
|
705
|
-
},
|
|
706
|
-
validateSet(set, teamHas) {
|
|
707
|
-
const crossSpecies = this.dex.species.get(set.name);
|
|
708
|
-
let problems = this.dex.formats.get('Pokemon').onChangeSet?.call(this, set, this.format) || null;
|
|
709
|
-
if (Array.isArray(problems) && problems.length)
|
|
710
|
-
return problems;
|
|
711
|
-
const crossNonstandard = (!this.ruleTable.has('standardnatdex') && crossSpecies.isNonstandard === 'Past') ||
|
|
712
|
-
crossSpecies.isNonstandard === 'Future';
|
|
713
|
-
const crossIsCap = !this.ruleTable.has('+pokemontag:cap') && crossSpecies.isNonstandard === 'CAP';
|
|
714
|
-
if (!crossSpecies.exists || crossNonstandard || crossIsCap)
|
|
715
|
-
return this.validateSet(set, teamHas);
|
|
716
|
-
const species = this.dex.species.get(set.species);
|
|
717
|
-
const check = this.checkSpecies(set, species, species, {});
|
|
718
|
-
if (check)
|
|
719
|
-
return [check];
|
|
720
|
-
const nonstandard = !this.ruleTable.has('standardnatdex') && species.isNonstandard === 'Past';
|
|
721
|
-
const isCap = !this.ruleTable.has('+pokemontag:cap') && species.isNonstandard === 'CAP';
|
|
722
|
-
if (!species.exists || nonstandard || isCap || species === crossSpecies)
|
|
723
|
-
return this.validateSet(set, teamHas);
|
|
724
|
-
if (!species.nfe)
|
|
725
|
-
return [`${species.name} cannot cross evolve because it doesn't evolve.`];
|
|
726
|
-
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
727
|
-
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) {
|
|
728
|
-
return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it isn't an evolution.`];
|
|
729
|
-
}
|
|
730
|
-
if (this.ruleTable.isRestrictedSpecies(crossSpecies)) {
|
|
731
|
-
return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it is banned.`];
|
|
732
|
-
}
|
|
733
|
-
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
734
|
-
if (!crossPrevoSpecies.prevo !== !species.prevo) {
|
|
735
|
-
return [
|
|
736
|
-
`${species.name} cannot cross evolve into ${crossSpecies.name} because they are not consecutive evolution stages.`,
|
|
737
|
-
];
|
|
738
|
-
}
|
|
739
|
-
const ability = this.dex.abilities.get(set.ability);
|
|
740
|
-
if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) {
|
|
741
|
-
set.species = crossSpecies.name;
|
|
742
|
-
}
|
|
743
|
-
// @ts-ignore
|
|
744
|
-
set.sp = species;
|
|
745
|
-
// @ts-ignore
|
|
746
|
-
set.crossSpecies = crossSpecies;
|
|
747
|
-
// @ts-ignore
|
|
748
|
-
set.crossMovesLeft = 2;
|
|
749
|
-
problems = this.validateSet(set, teamHas);
|
|
750
|
-
set.name = crossSpecies.name;
|
|
751
|
-
set.species = species.name;
|
|
752
|
-
return problems;
|
|
753
|
-
},
|
|
754
|
-
onModifySpecies(species, target, source, effect) {
|
|
755
|
-
if (!target)
|
|
756
|
-
return; // chat
|
|
757
|
-
if (effect && ['imposter', 'transform'].includes(effect.id))
|
|
758
|
-
return;
|
|
759
|
-
if (target.set.name === target.set.species)
|
|
760
|
-
return;
|
|
761
|
-
const crossSpecies = this.dex.species.get(target.set.name);
|
|
762
|
-
if (!crossSpecies.exists)
|
|
763
|
-
return;
|
|
764
|
-
if (species.battleOnly || !species.nfe)
|
|
765
|
-
return;
|
|
766
|
-
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
767
|
-
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo)
|
|
768
|
-
return;
|
|
769
|
-
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
770
|
-
if (!crossPrevoSpecies.prevo !== !species.prevo)
|
|
771
|
-
return;
|
|
772
|
-
const mixedSpecies = this.dex.deepClone(species);
|
|
773
|
-
mixedSpecies.baseSpecies = mixedSpecies.name = `${species.name}-${crossSpecies.name}`;
|
|
774
|
-
mixedSpecies.weightkg =
|
|
775
|
-
Math.max(0.1, +(species.weightkg + crossSpecies.weightkg - crossPrevoSpecies.weightkg)).toFixed(1);
|
|
776
|
-
mixedSpecies.nfe = false;
|
|
777
|
-
mixedSpecies.evos = [];
|
|
778
|
-
mixedSpecies.eggGroups = crossSpecies.eggGroups;
|
|
779
|
-
mixedSpecies.abilities = crossSpecies.abilities;
|
|
780
|
-
mixedSpecies.bst = 0;
|
|
781
|
-
let i;
|
|
782
|
-
for (i in species.baseStats) {
|
|
783
|
-
const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i];
|
|
784
|
-
mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255);
|
|
785
|
-
mixedSpecies.bst += mixedSpecies.baseStats[i];
|
|
786
|
-
}
|
|
787
|
-
if (crossSpecies.types[0] !== crossPrevoSpecies.types[0])
|
|
788
|
-
mixedSpecies.types[0] = crossSpecies.types[0];
|
|
789
|
-
if (crossSpecies.types[1] !== crossPrevoSpecies.types[1]) {
|
|
790
|
-
mixedSpecies.types[1] = crossSpecies.types[1] || crossSpecies.types[0];
|
|
791
|
-
}
|
|
792
|
-
if (mixedSpecies.types[0] === mixedSpecies.types[1])
|
|
793
|
-
mixedSpecies.types = [mixedSpecies.types[0]];
|
|
794
|
-
return mixedSpecies;
|
|
795
|
-
},
|
|
796
|
-
onBegin() {
|
|
797
|
-
for (const pokemon of this.getAllPokemon()) {
|
|
798
|
-
pokemon.baseSpecies = pokemon.species;
|
|
799
|
-
}
|
|
800
|
-
},
|
|
622
|
+
ruleset: ['Standard', 'Flipped Mod', 'Dynamax Clause'],
|
|
623
|
+
banlist: [
|
|
624
|
+
'Azumarill', 'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre',
|
|
625
|
+
'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn Wings', 'Necrozma-Dusk Mane', 'Palkia',
|
|
626
|
+
'Rayquaza', 'Reshiram', 'Solgaleo', 'Steelix', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
|
|
627
|
+
'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Psychic Surge', 'Shadow Tag', 'Baton Pass', 'Psychic Terrain', 'Shell Smash',
|
|
628
|
+
],
|
|
801
629
|
},
|
|
802
630
|
// Other Metagames
|
|
803
631
|
///////////////////////////////////////////////////////////////////
|
|
@@ -849,15 +677,16 @@ exports.Formats = [
|
|
|
849
677
|
`• <a href="https://www.smogon.com/forums/threads/3682690/">AAA Resources</a>`,
|
|
850
678
|
],
|
|
851
679
|
mod: 'gen8',
|
|
852
|
-
ruleset: ['
|
|
680
|
+
ruleset: ['Standard', '!Obtainable Abilities', '2 Ability Clause', 'Dynamax Clause', 'Sleep Moves Clause', '!Sleep Clause Mod'],
|
|
853
681
|
banlist: [
|
|
854
|
-
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
|
|
855
|
-
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White',
|
|
856
|
-
'
|
|
857
|
-
'
|
|
858
|
-
'
|
|
859
|
-
'
|
|
860
|
-
'
|
|
682
|
+
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
|
|
683
|
+
'Gengar', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White',
|
|
684
|
+
'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern',
|
|
685
|
+
'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike',
|
|
686
|
+
'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base',
|
|
687
|
+
'Arena Trap', 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter',
|
|
688
|
+
'Innards Out', 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean',
|
|
689
|
+
'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
|
|
861
690
|
],
|
|
862
691
|
onValidateSet(set) {
|
|
863
692
|
// Temporary fix until battle-only is implemented properly
|
|
@@ -877,15 +706,15 @@ exports.Formats = [
|
|
|
877
706
|
`• <a href="https://www.smogon.com/forums/threads/3659028/">M&M Resources</a>`,
|
|
878
707
|
],
|
|
879
708
|
mod: 'mixandmega',
|
|
880
|
-
ruleset: ['
|
|
709
|
+
ruleset: ['Standard', 'Overflow Stat Mod', 'Dynamax Clause'],
|
|
881
710
|
banlist: [
|
|
882
|
-
'Calyrex-Shadow', 'Kyogre', 'Zacian',
|
|
711
|
+
'Calyrex-Shadow', 'Eternatus', 'Kyogre', 'Zacian',
|
|
883
712
|
'Beedrillite', 'Blazikenite', 'Gengarite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite',
|
|
884
713
|
'Moody', 'Shadow Tag', 'Baton Pass', 'Electrify',
|
|
885
714
|
],
|
|
886
715
|
restricted: [
|
|
887
|
-
'Calyrex-Ice', 'Dialga', '
|
|
888
|
-
'
|
|
716
|
+
'Calyrex-Ice', 'Dialga', 'Gengar', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
|
|
717
|
+
'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
|
|
889
718
|
'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu', 'Urshifu-Rapid-Strike', 'Xerneas',
|
|
890
719
|
'Yveltal', 'Zekrom', 'Zygarde-Complete',
|
|
891
720
|
],
|
|
@@ -895,9 +724,16 @@ exports.Formats = [
|
|
|
895
724
|
const item = this.dex.items.get(set.item);
|
|
896
725
|
if (!item.megaStone)
|
|
897
726
|
continue;
|
|
727
|
+
const natdex = this.ruleTable.has('standardnatdex');
|
|
728
|
+
if (natdex && item.id !== 'ultranecroziumz')
|
|
729
|
+
continue;
|
|
898
730
|
const species = this.dex.species.get(set.species);
|
|
899
|
-
if (species.isNonstandard)
|
|
731
|
+
if (species.isNonstandard && !this.ruleTable.has(`+${this.toID(species.isNonstandard)}`)) {
|
|
900
732
|
return [`${species.baseSpecies} does not exist in gen 8.`];
|
|
733
|
+
}
|
|
734
|
+
if (natdex && species.name.startsWith('Necrozma-') && item.id === 'ultranecroziumz') {
|
|
735
|
+
continue;
|
|
736
|
+
}
|
|
901
737
|
if (this.ruleTable.isRestrictedSpecies(species) || this.toID(set.ability) === 'powerconstruct') {
|
|
902
738
|
return [`${species.name} is not allowed to hold ${item.name}.`];
|
|
903
739
|
}
|
|
@@ -965,8 +801,8 @@ exports.Formats = [
|
|
|
965
801
|
mod: 'gen8',
|
|
966
802
|
ruleset: ['Not Fully Evolved', 'Standard', 'Dynamax Clause'],
|
|
967
803
|
banlist: [
|
|
968
|
-
'Chansey', 'Doublade', 'Haunter', 'Kadabra', 'Magneton', 'Mr. Mime-Galar', 'Pawniard', 'Pikachu',
|
|
969
|
-
'Rhydon', 'Scyther', 'Sneasel', 'Type: Null', 'Vulpix-Base', 'Arena Trap', 'Shadow Tag', 'Baton Pass',
|
|
804
|
+
'Chansey', 'Doublade', 'Golbat', 'Haunter', 'Kadabra', 'Magmar', 'Magneton', 'Mr. Mime-Galar', 'Pawniard', 'Pikachu',
|
|
805
|
+
'Porygon2', 'Rhydon', 'Scyther', 'Sneasel', 'Type: Null', 'Vulpix-Base', 'Arena Trap', 'Shadow Tag', 'Baton Pass',
|
|
970
806
|
],
|
|
971
807
|
},
|
|
972
808
|
{
|
|
@@ -978,9 +814,10 @@ exports.Formats = [
|
|
|
978
814
|
mod: 'gen8',
|
|
979
815
|
ruleset: ['Standard', 'Dynamax Clause', 'Sleep Moves Clause'],
|
|
980
816
|
banlist: [
|
|
981
|
-
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Dragapult', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Pikachu',
|
|
982
|
-
'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power', 'Moody',
|
|
983
|
-
'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw',
|
|
817
|
+
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Dragapult', 'Eternatus', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Pikachu',
|
|
818
|
+
'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power', 'Moody',
|
|
819
|
+
'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw',
|
|
820
|
+
'Baton Pass',
|
|
984
821
|
],
|
|
985
822
|
onValidateTeam(team) {
|
|
986
823
|
const gods = new Set();
|
|
@@ -988,8 +825,21 @@ exports.Formats = [
|
|
|
988
825
|
let species = this.dex.species.get(set.species);
|
|
989
826
|
if (typeof species.battleOnly === 'string')
|
|
990
827
|
species = this.dex.species.get(species.battleOnly);
|
|
991
|
-
if (
|
|
992
|
-
|
|
828
|
+
if (set.item && this.dex.items.get(set.item).megaStone) {
|
|
829
|
+
const item = this.dex.items.get(set.item);
|
|
830
|
+
if (item.megaEvolves === species.baseSpecies) {
|
|
831
|
+
species = this.dex.species.get(item.megaStone);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
if (this.ruleTable.has('standardnatdex')) {
|
|
835
|
+
const format = this.dex.formats.getRuleTable(this.dex.formats.get('gen8nationaldex'));
|
|
836
|
+
if (format.isBannedSpecies(species))
|
|
837
|
+
gods.add(species.name);
|
|
838
|
+
}
|
|
839
|
+
else {
|
|
840
|
+
if (['ag', 'uber'].includes(this.toID(species.tier)) || this.toID(set.ability) === 'powerconstruct') {
|
|
841
|
+
gods.add(species.name);
|
|
842
|
+
}
|
|
993
843
|
}
|
|
994
844
|
}
|
|
995
845
|
if (gods.size > 1) {
|
|
@@ -1002,7 +852,8 @@ exports.Formats = [
|
|
|
1002
852
|
return;
|
|
1003
853
|
const god = target.side.team.find(set => {
|
|
1004
854
|
let godSpecies = this.dex.species.get(set.species);
|
|
1005
|
-
const
|
|
855
|
+
const isNatDex = this.format.ruleTable?.has('standardnatdex');
|
|
856
|
+
const validator = this.dex.formats.getRuleTable(this.dex.formats.get(`gen${isNatDex && this.gen < 8 ? 8 : this.gen}${isNatDex ? 'nationaldex' : 'ou'}`));
|
|
1006
857
|
if (this.toID(set.ability) === 'powerconstruct') {
|
|
1007
858
|
return true;
|
|
1008
859
|
}
|
|
@@ -1020,6 +871,9 @@ exports.Formats = [
|
|
|
1020
871
|
if (godSpecies.forme === 'Crowned') {
|
|
1021
872
|
godSpecies = this.dex.species.get(godSpecies.changesFrom || godSpecies.baseSpecies);
|
|
1022
873
|
}
|
|
874
|
+
if (typeof godSpecies.battleOnly === 'string') {
|
|
875
|
+
godSpecies = this.dex.species.get(godSpecies.battleOnly);
|
|
876
|
+
}
|
|
1023
877
|
newSpecies.bst -= newSpecies.baseStats[stat];
|
|
1024
878
|
newSpecies.baseStats[stat] = godSpecies.baseStats[stat];
|
|
1025
879
|
newSpecies.bst += newSpecies.baseStats[stat];
|
|
@@ -1106,7 +960,16 @@ exports.Formats = [
|
|
|
1106
960
|
],
|
|
1107
961
|
mod: 'gen8bdsp',
|
|
1108
962
|
ruleset: ['[Gen 8 BDSP] RU'],
|
|
1109
|
-
banlist: ['RU', 'NUBL'],
|
|
963
|
+
banlist: ['RU', 'NUBL', 'Damp Rock', 'Heat Rock'],
|
|
964
|
+
},
|
|
965
|
+
{
|
|
966
|
+
name: "[Gen 8 BDSP] PU",
|
|
967
|
+
threads: [
|
|
968
|
+
`• <a href="https://www.smogon.com/forums/threads/3700009/">BDSP PU</a>`,
|
|
969
|
+
],
|
|
970
|
+
mod: 'gen8bdsp',
|
|
971
|
+
ruleset: ['[Gen 8 BDSP] NU'],
|
|
972
|
+
banlist: ['NU', 'PUBL'],
|
|
1110
973
|
},
|
|
1111
974
|
{
|
|
1112
975
|
name: "[Gen 8 BDSP] LC",
|
|
@@ -1115,7 +978,7 @@ exports.Formats = [
|
|
|
1115
978
|
],
|
|
1116
979
|
mod: 'gen8bdsp',
|
|
1117
980
|
ruleset: ['Little Cup', 'Standard'],
|
|
1118
|
-
banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Moody', 'Baton Pass'],
|
|
981
|
+
banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Moody', 'Baton Pass', 'Sticky Web'],
|
|
1119
982
|
},
|
|
1120
983
|
{
|
|
1121
984
|
name: "[Gen 8 BDSP] Monotype",
|
|
@@ -1125,7 +988,7 @@ exports.Formats = [
|
|
|
1125
988
|
mod: 'gen8bdsp',
|
|
1126
989
|
ruleset: ['Standard', 'Same Type Clause'],
|
|
1127
990
|
banlist: [
|
|
1128
|
-
'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Lugia', 'Mewtwo', 'Palkia', 'Rayquaza',
|
|
991
|
+
'Arceus', 'Darkrai', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Lugia', 'Mewtwo', 'Palkia', 'Rayquaza', 'Shaymin-Sky',
|
|
1129
992
|
'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass',
|
|
1130
993
|
],
|
|
1131
994
|
},
|
|
@@ -1144,6 +1007,7 @@ exports.Formats = [
|
|
|
1144
1007
|
`• <a href="https://www.smogon.com/forums/threads/3695092/">BDSP 3v3 Singles</a>`,
|
|
1145
1008
|
],
|
|
1146
1009
|
mod: 'gen8bdsp',
|
|
1010
|
+
searchShow: false,
|
|
1147
1011
|
ruleset: ['Flat Rules', 'Min Source Gen = 8'],
|
|
1148
1012
|
},
|
|
1149
1013
|
{
|
|
@@ -1154,7 +1018,7 @@ exports.Formats = [
|
|
|
1154
1018
|
mod: 'gen8bdsp',
|
|
1155
1019
|
gameType: 'doubles',
|
|
1156
1020
|
ruleset: ['Standard Doubles'],
|
|
1157
|
-
banlist: ['DUber'],
|
|
1021
|
+
banlist: ['DUber', 'Dark Void'],
|
|
1158
1022
|
},
|
|
1159
1023
|
{
|
|
1160
1024
|
name: "[Gen 8 BDSP] Battle Festival Doubles",
|
|
@@ -1190,11 +1054,161 @@ exports.Formats = [
|
|
|
1190
1054
|
ruleset: ['Standard', 'Dynamax Clause', 'Camomons Mod'],
|
|
1191
1055
|
banlist: [
|
|
1192
1056
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin',
|
|
1193
|
-
'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', '
|
|
1194
|
-
'
|
|
1195
|
-
'
|
|
1196
|
-
'
|
|
1057
|
+
'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Marshadow',
|
|
1058
|
+
'Mew', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo',
|
|
1059
|
+
'Spectrier', 'Tornadus-Therian', 'Volcarona', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zeraora',
|
|
1060
|
+
'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass', 'Calm Mind',
|
|
1061
|
+
],
|
|
1062
|
+
},
|
|
1063
|
+
{
|
|
1064
|
+
name: "[Gen 8] Cross Evolution",
|
|
1065
|
+
desc: `Give a Pokémon a Pokémon name of the next evolution stage as a nickname to inherit stat changes, typing, abilities, and up to 2 moves from the next stage Pokémon.`,
|
|
1066
|
+
threads: [
|
|
1067
|
+
`• <a href="https://www.smogon.com/forums/threads/3657562/">Cross Evolution</a>`,
|
|
1197
1068
|
],
|
|
1069
|
+
mod: 'gen8',
|
|
1070
|
+
searchShow: false,
|
|
1071
|
+
ruleset: ['Standard', 'Overflow Stat Mod', 'Dynamax Clause', '2 Ability Clause'],
|
|
1072
|
+
banlist: ['Corsola-Galar', 'Sneasel', 'Type: Null', 'Arena Trap', 'Ice Scales', 'Moody', 'King\'s Rock', 'Baton Pass'],
|
|
1073
|
+
restricted: ['Chansey', 'Lunala', 'Shedinja', 'Solgaleo', 'Gorilla Tactics', 'Huge Power', 'Pure Power', 'Shadow Tag'],
|
|
1074
|
+
onValidateTeam(team) {
|
|
1075
|
+
const names = new Set();
|
|
1076
|
+
for (const set of team) {
|
|
1077
|
+
const name = set.name;
|
|
1078
|
+
if (names.has(this.dex.toID(name))) {
|
|
1079
|
+
return [
|
|
1080
|
+
`Your Pok\u00e9mon must have different nicknames.`,
|
|
1081
|
+
`(You have more than one Pok\u00e9mon named '${name}')`,
|
|
1082
|
+
];
|
|
1083
|
+
}
|
|
1084
|
+
names.add(this.dex.toID(name));
|
|
1085
|
+
}
|
|
1086
|
+
if (!names.size) {
|
|
1087
|
+
return [
|
|
1088
|
+
`${this.format.name} works using nicknames; your team has 0 nicknamed Pok\u00e9mon.`,
|
|
1089
|
+
`(If this was intentional, add a nickname to one Pok\u00e9mon that isn't the name of a Pok\u00e9mon species.)`,
|
|
1090
|
+
];
|
|
1091
|
+
}
|
|
1092
|
+
},
|
|
1093
|
+
checkCanLearn(move, species, lsetData, set) {
|
|
1094
|
+
// @ts-ignore
|
|
1095
|
+
if (!set.sp?.exists || !set.crossSpecies?.exists) {
|
|
1096
|
+
return this.checkCanLearn(move, species, lsetData, set);
|
|
1097
|
+
}
|
|
1098
|
+
// @ts-ignore
|
|
1099
|
+
const problem = this.checkCanLearn(move, set.sp);
|
|
1100
|
+
if (!problem)
|
|
1101
|
+
return null;
|
|
1102
|
+
// @ts-ignore
|
|
1103
|
+
if (!set.crossMovesLeft)
|
|
1104
|
+
return problem;
|
|
1105
|
+
// @ts-ignore
|
|
1106
|
+
if (this.checkCanLearn(move, set.crossSpecies))
|
|
1107
|
+
return problem;
|
|
1108
|
+
// @ts-ignore
|
|
1109
|
+
set.crossMovesLeft--;
|
|
1110
|
+
return null;
|
|
1111
|
+
},
|
|
1112
|
+
validateSet(set, teamHas) {
|
|
1113
|
+
const crossSpecies = this.dex.species.get(set.name);
|
|
1114
|
+
let problems = this.dex.formats.get('Pokemon').onChangeSet?.call(this, set, this.format) || null;
|
|
1115
|
+
if (Array.isArray(problems) && problems.length)
|
|
1116
|
+
return problems;
|
|
1117
|
+
const crossNonstandard = (!this.ruleTable.has('standardnatdex') && crossSpecies.isNonstandard === 'Past') ||
|
|
1118
|
+
crossSpecies.isNonstandard === 'Future';
|
|
1119
|
+
const crossIsCap = !this.ruleTable.has('+pokemontag:cap') && crossSpecies.isNonstandard === 'CAP';
|
|
1120
|
+
if (!crossSpecies.exists || crossNonstandard || crossIsCap)
|
|
1121
|
+
return this.validateSet(set, teamHas);
|
|
1122
|
+
const species = this.dex.species.get(set.species);
|
|
1123
|
+
const check = this.checkSpecies(set, species, species, {});
|
|
1124
|
+
if (check)
|
|
1125
|
+
return [check];
|
|
1126
|
+
const nonstandard = !this.ruleTable.has('standardnatdex') && species.isNonstandard === 'Past';
|
|
1127
|
+
const isCap = !this.ruleTable.has('+pokemontag:cap') && species.isNonstandard === 'CAP';
|
|
1128
|
+
if (!species.exists || nonstandard || isCap || species === crossSpecies)
|
|
1129
|
+
return this.validateSet(set, teamHas);
|
|
1130
|
+
if (!species.nfe)
|
|
1131
|
+
return [`${species.name} cannot cross evolve because it doesn't evolve.`];
|
|
1132
|
+
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
1133
|
+
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) {
|
|
1134
|
+
return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it isn't an evolution.`];
|
|
1135
|
+
}
|
|
1136
|
+
if (this.ruleTable.isRestrictedSpecies(crossSpecies)) {
|
|
1137
|
+
return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it is banned.`];
|
|
1138
|
+
}
|
|
1139
|
+
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
1140
|
+
if (!crossPrevoSpecies.prevo !== !species.prevo) {
|
|
1141
|
+
return [
|
|
1142
|
+
`${species.name} cannot cross evolve into ${crossSpecies.name} because they are not consecutive evolution stages.`,
|
|
1143
|
+
];
|
|
1144
|
+
}
|
|
1145
|
+
const item = this.dex.items.get(set.item);
|
|
1146
|
+
if (item.itemUser?.length) {
|
|
1147
|
+
if (!item.itemUser.includes(crossSpecies.name) || crossSpecies.name !== species.name) {
|
|
1148
|
+
return [`${species.name} cannot use ${item.name} because it is cross evolved into ${crossSpecies.name}.`];
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
const ability = this.dex.abilities.get(set.ability);
|
|
1152
|
+
if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) {
|
|
1153
|
+
set.species = crossSpecies.name;
|
|
1154
|
+
}
|
|
1155
|
+
// @ts-ignore
|
|
1156
|
+
set.sp = species;
|
|
1157
|
+
// @ts-ignore
|
|
1158
|
+
set.crossSpecies = crossSpecies;
|
|
1159
|
+
// @ts-ignore
|
|
1160
|
+
set.crossMovesLeft = 2;
|
|
1161
|
+
problems = this.validateSet(set, teamHas);
|
|
1162
|
+
set.name = crossSpecies.name;
|
|
1163
|
+
set.species = species.name;
|
|
1164
|
+
return problems;
|
|
1165
|
+
},
|
|
1166
|
+
onModifySpecies(species, target, source, effect) {
|
|
1167
|
+
if (!target)
|
|
1168
|
+
return; // chat
|
|
1169
|
+
if (effect && ['imposter', 'transform'].includes(effect.id))
|
|
1170
|
+
return;
|
|
1171
|
+
if (target.set.name === target.set.species)
|
|
1172
|
+
return;
|
|
1173
|
+
const crossSpecies = this.dex.species.get(target.set.name);
|
|
1174
|
+
if (!crossSpecies.exists)
|
|
1175
|
+
return;
|
|
1176
|
+
if (species.battleOnly || !species.nfe)
|
|
1177
|
+
return;
|
|
1178
|
+
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
1179
|
+
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo)
|
|
1180
|
+
return;
|
|
1181
|
+
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
1182
|
+
if (!crossPrevoSpecies.prevo !== !species.prevo)
|
|
1183
|
+
return;
|
|
1184
|
+
const mixedSpecies = this.dex.deepClone(species);
|
|
1185
|
+
mixedSpecies.weightkg =
|
|
1186
|
+
Math.max(0.1, +(species.weightkg + crossSpecies.weightkg - crossPrevoSpecies.weightkg)).toFixed(1);
|
|
1187
|
+
mixedSpecies.nfe = false;
|
|
1188
|
+
mixedSpecies.evos = [];
|
|
1189
|
+
mixedSpecies.eggGroups = crossSpecies.eggGroups;
|
|
1190
|
+
mixedSpecies.abilities = crossSpecies.abilities;
|
|
1191
|
+
mixedSpecies.bst = 0;
|
|
1192
|
+
let i;
|
|
1193
|
+
for (i in species.baseStats) {
|
|
1194
|
+
const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i];
|
|
1195
|
+
mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255);
|
|
1196
|
+
mixedSpecies.bst += mixedSpecies.baseStats[i];
|
|
1197
|
+
}
|
|
1198
|
+
if (crossSpecies.types[0] !== crossPrevoSpecies.types[0])
|
|
1199
|
+
mixedSpecies.types[0] = crossSpecies.types[0];
|
|
1200
|
+
if (crossSpecies.types[1] !== crossPrevoSpecies.types[1]) {
|
|
1201
|
+
mixedSpecies.types[1] = crossSpecies.types[1] || crossSpecies.types[0];
|
|
1202
|
+
}
|
|
1203
|
+
if (mixedSpecies.types[0] === mixedSpecies.types[1])
|
|
1204
|
+
mixedSpecies.types = [mixedSpecies.types[0]];
|
|
1205
|
+
return mixedSpecies;
|
|
1206
|
+
},
|
|
1207
|
+
onBegin() {
|
|
1208
|
+
for (const pokemon of this.getAllPokemon()) {
|
|
1209
|
+
pokemon.baseSpecies = pokemon.species;
|
|
1210
|
+
}
|
|
1211
|
+
},
|
|
1198
1212
|
},
|
|
1199
1213
|
{
|
|
1200
1214
|
name: "[Gen 8] Inheritance",
|
|
@@ -1738,6 +1752,70 @@ exports.Formats = [
|
|
|
1738
1752
|
pokemon.m.innates = undefined;
|
|
1739
1753
|
},
|
|
1740
1754
|
},
|
|
1755
|
+
{
|
|
1756
|
+
name: "[Gen 8] Shared Power",
|
|
1757
|
+
desc: `Once a Pokémon switches in, its ability is shared with the rest of the team.`,
|
|
1758
|
+
threads: [
|
|
1759
|
+
`• <a href="https://www.smogon.com/forums/threads/3660877/">Shared Power</a>`,
|
|
1760
|
+
],
|
|
1761
|
+
mod: 'sharedpower',
|
|
1762
|
+
searchShow: false,
|
|
1763
|
+
ruleset: ['Standard', 'Dynamax Clause'],
|
|
1764
|
+
banlist: [
|
|
1765
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
|
|
1766
|
+
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna',
|
|
1767
|
+
'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
1768
|
+
'Pheromosa', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo', 'Urshifu-Base', 'Urshifu-Rapid-Strike',
|
|
1769
|
+
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
|
|
1770
|
+
'Arena Trap', 'Contrary', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Electric Surge ++ Surge Surfer',
|
|
1771
|
+
'Fur Coat', 'Guts', 'Harvest', 'Huge Power', 'Imposter', 'Innards Out', 'Libero', 'Magic Bounce', 'Magic Guard',
|
|
1772
|
+
'Magnet Pull', 'Mold Breaker', 'Moody', 'Neutralizing Gas', 'Power Construct', 'Queenly Majesty', 'Quick Draw',
|
|
1773
|
+
'Regenerator', 'Sand Rush', 'Sand Veil', 'Shadow Tag', 'Simple', 'Snow Cloak', 'Snow Warning ++ Slush Rush',
|
|
1774
|
+
'Speed Boost', 'Stakeout', 'Steelworker ++ Steely Spirit', 'Stench', 'Tinted Lens', 'Triage', 'Unaware',
|
|
1775
|
+
'Unburden', 'Water Bubble', 'King\'s Rock', 'Baton Pass',
|
|
1776
|
+
],
|
|
1777
|
+
getSharedPower(pokemon) {
|
|
1778
|
+
const sharedPower = new Set();
|
|
1779
|
+
for (const ally of pokemon.side.pokemon) {
|
|
1780
|
+
if (ally.previouslySwitchedIn > 0) {
|
|
1781
|
+
if (pokemon.battle.dex.currentMod !== 'sharedpower' && ['trace', 'mirrorarmor'].includes(ally.baseAbility)) {
|
|
1782
|
+
sharedPower.add('noability');
|
|
1783
|
+
continue;
|
|
1784
|
+
}
|
|
1785
|
+
sharedPower.add(ally.baseAbility);
|
|
1786
|
+
}
|
|
1787
|
+
}
|
|
1788
|
+
sharedPower.delete(pokemon.baseAbility);
|
|
1789
|
+
return sharedPower;
|
|
1790
|
+
},
|
|
1791
|
+
onBeforeSwitchIn(pokemon) {
|
|
1792
|
+
let format = this.format;
|
|
1793
|
+
if (!format.getSharedPower)
|
|
1794
|
+
format = this.dex.formats.get('gen8sharedpower');
|
|
1795
|
+
for (const ability of format.getSharedPower(pokemon)) {
|
|
1796
|
+
const effect = 'ability:' + ability;
|
|
1797
|
+
pokemon.volatiles[effect] = { id: this.toID(effect), target: pokemon };
|
|
1798
|
+
if (!pokemon.m.abils)
|
|
1799
|
+
pokemon.m.abils = [];
|
|
1800
|
+
if (!pokemon.m.abils.includes(effect))
|
|
1801
|
+
pokemon.m.abils.push(effect);
|
|
1802
|
+
}
|
|
1803
|
+
},
|
|
1804
|
+
onSwitchInPriority: 2,
|
|
1805
|
+
onSwitchIn(pokemon) {
|
|
1806
|
+
let format = this.format;
|
|
1807
|
+
if (!format.getSharedPower)
|
|
1808
|
+
format = this.dex.formats.get('gen8sharedpower');
|
|
1809
|
+
for (const ability of format.getSharedPower(pokemon)) {
|
|
1810
|
+
if (ability === 'noability') {
|
|
1811
|
+
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.`);
|
|
1812
|
+
}
|
|
1813
|
+
const effect = 'ability:' + ability;
|
|
1814
|
+
delete pokemon.volatiles[effect];
|
|
1815
|
+
pokemon.addVolatile(effect);
|
|
1816
|
+
}
|
|
1817
|
+
},
|
|
1818
|
+
},
|
|
1741
1819
|
{
|
|
1742
1820
|
name: "[Gen 8] Trademarked",
|
|
1743
1821
|
desc: `Sacrifice your Pokémon's ability for a status move that activates on switch-in.`,
|
|
@@ -1994,7 +2072,6 @@ exports.Formats = [
|
|
|
1994
2072
|
desc: `[Gen 8] Random Battle (No Dmax) with Team Preview and elements of Camomons, Inverse, Scalemons, and Shared Power.`,
|
|
1995
2073
|
mod: 'sharedpower',
|
|
1996
2074
|
team: 'random',
|
|
1997
|
-
searchShow: false,
|
|
1998
2075
|
ruleset: ['[Gen 8] Random Battle', 'Team Preview', 'Dynamax Clause', 'Camomons Mod', 'Inverse Mod', 'Scalemons Mod'],
|
|
1999
2076
|
onBeforeSwitchIn(pokemon) {
|
|
2000
2077
|
let format = this.format;
|
|
@@ -2280,42 +2357,37 @@ exports.Formats = [
|
|
|
2280
2357
|
column: 3,
|
|
2281
2358
|
},
|
|
2282
2359
|
{
|
|
2283
|
-
name: "[Gen
|
|
2360
|
+
name: "[Gen 5] UU",
|
|
2284
2361
|
threads: [
|
|
2285
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
2286
|
-
`• <a href="https://www.smogon.com/forums/
|
|
2362
|
+
`• <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
|
|
2363
|
+
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
2287
2364
|
],
|
|
2288
|
-
mod: '
|
|
2365
|
+
mod: 'gen5',
|
|
2289
2366
|
// searchShow: false,
|
|
2290
|
-
ruleset: ['
|
|
2291
|
-
banlist: ['OU', 'UUBL'],
|
|
2292
|
-
unbanlist: ['Arena Trap', 'Swagger'],
|
|
2367
|
+
ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
2368
|
+
banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
2293
2369
|
},
|
|
2294
2370
|
{
|
|
2295
|
-
name: "[Gen
|
|
2371
|
+
name: "[Gen 5] NU",
|
|
2296
2372
|
threads: [
|
|
2297
|
-
`• <a href="https://www.smogon.com/
|
|
2298
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
2299
|
-
`• <a href="https://www.smogon.com/forums/threads/3621440/">USM LC Viability Rankings</a>`,
|
|
2373
|
+
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
2374
|
+
`• <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
|
|
2300
2375
|
],
|
|
2301
|
-
mod: '
|
|
2376
|
+
mod: 'gen5',
|
|
2302
2377
|
// searchShow: false,
|
|
2303
|
-
ruleset: ['
|
|
2304
|
-
banlist: [
|
|
2305
|
-
'Aipom', 'Cutiefly', 'Drifloon', 'Gligar', 'Gothita', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon',
|
|
2306
|
-
'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Trapinch', 'Vulpix-Base', 'Wingull', 'Yanma',
|
|
2307
|
-
'Eevium Z', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Sticky Web',
|
|
2308
|
-
],
|
|
2378
|
+
ruleset: ['[Gen 5] RU', '!Sleep Moves Clause', 'Sleep Clause Mod'],
|
|
2379
|
+
banlist: ['RU', 'NUBL', 'Assist', 'Copycat'],
|
|
2309
2380
|
},
|
|
2310
2381
|
{
|
|
2311
|
-
name: "[Gen
|
|
2382
|
+
name: "[Gen 6] PU",
|
|
2312
2383
|
threads: [
|
|
2313
|
-
`• <a href="https://www.smogon.com/
|
|
2384
|
+
`• <a href="https://www.smogon.com/dex/xy/tags/pu/">ORAS PU Banlist</a>`,
|
|
2385
|
+
`• <a href="https://www.smogon.com/forums/threads/3528743/">ORAS PU Viability Rankings</a>`,
|
|
2314
2386
|
],
|
|
2315
|
-
mod: '
|
|
2387
|
+
mod: 'gen6',
|
|
2316
2388
|
// searchShow: false,
|
|
2317
|
-
ruleset: ['[Gen
|
|
2318
|
-
banlist: ['NU', 'PUBL'],
|
|
2389
|
+
ruleset: ['[Gen 6] NU'],
|
|
2390
|
+
banlist: ['NU', 'PUBL', 'Chatter'],
|
|
2319
2391
|
},
|
|
2320
2392
|
// Past Gens OU
|
|
2321
2393
|
///////////////////////////////////////////////////////////////////
|
|
@@ -2374,7 +2446,7 @@ exports.Formats = [
|
|
|
2374
2446
|
],
|
|
2375
2447
|
mod: 'gen3',
|
|
2376
2448
|
ruleset: ['Standard', 'One Boost Passer Clause'],
|
|
2377
|
-
banlist: ['Uber', 'Sand Veil', 'Assist', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'],
|
|
2449
|
+
banlist: ['Uber', 'Sand Veil', 'Soundproof', 'Assist', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'],
|
|
2378
2450
|
},
|
|
2379
2451
|
{
|
|
2380
2452
|
name: "[Gen 2] OU",
|
|
@@ -2588,6 +2660,22 @@ exports.Formats = [
|
|
|
2588
2660
|
ruleset: ['[Gen 7] NU'],
|
|
2589
2661
|
banlist: ['NU', 'PUBL'],
|
|
2590
2662
|
},
|
|
2663
|
+
{
|
|
2664
|
+
name: "[Gen 7] LC",
|
|
2665
|
+
threads: [
|
|
2666
|
+
`• <a href="https://www.smogon.com/dex/sm/formats/lc/">USM LC Banlist</a>`,
|
|
2667
|
+
`• <a href="https://www.smogon.com/forums/threads/3639319/">USM LC Sample Teams</a>`,
|
|
2668
|
+
`• <a href="https://www.smogon.com/forums/threads/3621440/">USM LC Viability Rankings</a>`,
|
|
2669
|
+
],
|
|
2670
|
+
mod: 'gen7',
|
|
2671
|
+
searchShow: false,
|
|
2672
|
+
ruleset: ['Little Cup', 'Standard', 'Swagger Clause'],
|
|
2673
|
+
banlist: [
|
|
2674
|
+
'Aipom', 'Cutiefly', 'Drifloon', 'Gligar', 'Gothita', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon',
|
|
2675
|
+
'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Trapinch', 'Vulpix-Base', 'Wingull', 'Yanma',
|
|
2676
|
+
'Eevium Z', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Sticky Web',
|
|
2677
|
+
],
|
|
2678
|
+
},
|
|
2591
2679
|
{
|
|
2592
2680
|
name: "[Gen 7] Monotype",
|
|
2593
2681
|
desc: `All the Pokémon on a team must share a type.`,
|
|
@@ -2852,17 +2940,6 @@ exports.Formats = [
|
|
|
2852
2940
|
ruleset: ['[Gen 6] RU'],
|
|
2853
2941
|
banlist: ['RU', 'NUBL'],
|
|
2854
2942
|
},
|
|
2855
|
-
{
|
|
2856
|
-
name: "[Gen 6] PU",
|
|
2857
|
-
threads: [
|
|
2858
|
-
`• <a href="https://www.smogon.com/dex/xy/tags/pu/">ORAS PU Banlist</a>`,
|
|
2859
|
-
`• <a href="https://www.smogon.com/forums/threads/3528743/">ORAS PU Viability Rankings</a>`,
|
|
2860
|
-
],
|
|
2861
|
-
mod: 'gen6',
|
|
2862
|
-
searchShow: false,
|
|
2863
|
-
ruleset: ['[Gen 6] NU'],
|
|
2864
|
-
banlist: ['NU', 'PUBL', 'Chatter'],
|
|
2865
|
-
},
|
|
2866
2943
|
{
|
|
2867
2944
|
name: "[Gen 6] LC",
|
|
2868
2945
|
threads: [
|
|
@@ -3071,17 +3148,6 @@ exports.Formats = [
|
|
|
3071
3148
|
searchShow: false,
|
|
3072
3149
|
ruleset: ['Standard', 'Sleep Clause Mod'],
|
|
3073
3150
|
},
|
|
3074
|
-
{
|
|
3075
|
-
name: "[Gen 5] UU",
|
|
3076
|
-
threads: [
|
|
3077
|
-
`• <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
|
|
3078
|
-
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
3079
|
-
],
|
|
3080
|
-
mod: 'gen5',
|
|
3081
|
-
searchShow: false,
|
|
3082
|
-
ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
3083
|
-
banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
3084
|
-
},
|
|
3085
3151
|
{
|
|
3086
3152
|
name: "[Gen 5] RU",
|
|
3087
3153
|
threads: [
|
|
@@ -3095,15 +3161,14 @@ exports.Formats = [
|
|
|
3095
3161
|
unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
3096
3162
|
},
|
|
3097
3163
|
{
|
|
3098
|
-
name: "[Gen 5]
|
|
3164
|
+
name: "[Gen 5] PU",
|
|
3099
3165
|
threads: [
|
|
3100
|
-
`• <a href="https://www.smogon.com/forums/posts/
|
|
3101
|
-
`• <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
|
|
3166
|
+
`• <a href="https://www.smogon.com/forums/posts/7326932/">BW2 PU</a>`,
|
|
3102
3167
|
],
|
|
3103
3168
|
mod: 'gen5',
|
|
3104
3169
|
searchShow: false,
|
|
3105
|
-
ruleset: ['[Gen 5]
|
|
3106
|
-
banlist: ['
|
|
3170
|
+
ruleset: ['[Gen 5] NU', 'Sleep Moves Clause'],
|
|
3171
|
+
banlist: ['NU', 'PUBL'],
|
|
3107
3172
|
},
|
|
3108
3173
|
{
|
|
3109
3174
|
name: "[Gen 5] LC",
|
|
@@ -3185,7 +3250,7 @@ exports.Formats = [
|
|
|
3185
3250
|
gameType: 'doubles',
|
|
3186
3251
|
searchShow: false,
|
|
3187
3252
|
ruleset: ['Flat Rules'],
|
|
3188
|
-
banlist: ['Dark Void', 'Sky Drop', 'Soul Dew'],
|
|
3253
|
+
banlist: ['Chatot', 'Dark Void', 'Sky Drop', 'Soul Dew'],
|
|
3189
3254
|
},
|
|
3190
3255
|
{
|
|
3191
3256
|
name: "[Gen 5] VGC 2012",
|
|
@@ -3239,6 +3304,18 @@ exports.Formats = [
|
|
|
3239
3304
|
ruleset: ['Standard'],
|
|
3240
3305
|
banlist: ['AG'],
|
|
3241
3306
|
},
|
|
3307
|
+
{
|
|
3308
|
+
name: "[Gen 4] UU",
|
|
3309
|
+
threads: [
|
|
3310
|
+
`• <a href="https://www.smogon.com/forums/threads/3532624/">DPP UU Metagame Discussion</a>`,
|
|
3311
|
+
`• <a href="https://www.smogon.com/forums/threads/3503638/">DPP UU Viability Rankings</a>`,
|
|
3312
|
+
],
|
|
3313
|
+
mod: 'gen4',
|
|
3314
|
+
searchShow: false,
|
|
3315
|
+
ruleset: ['[Gen 4] OU'],
|
|
3316
|
+
banlist: ['OU', 'UUBL'],
|
|
3317
|
+
unbanlist: ['Arena Trap', 'Swagger'],
|
|
3318
|
+
},
|
|
3242
3319
|
{
|
|
3243
3320
|
name: "[Gen 4] NU",
|
|
3244
3321
|
threads: [
|
|
@@ -3342,7 +3419,7 @@ exports.Formats = [
|
|
|
3342
3419
|
gameType: 'doubles',
|
|
3343
3420
|
searchShow: false,
|
|
3344
3421
|
ruleset: ['Flat Rules', '! Adjust Level Down', 'Max Level = 50', 'Max Team Size = 4'],
|
|
3345
|
-
banlist: ['
|
|
3422
|
+
banlist: ['Tyranitar', 'Rotom', 'Judgment', 'Soul Dew'],
|
|
3346
3423
|
},
|
|
3347
3424
|
{
|
|
3348
3425
|
name: "[Gen 4] Doubles Custom Game",
|
|
@@ -3380,7 +3457,7 @@ exports.Formats = [
|
|
|
3380
3457
|
searchShow: false,
|
|
3381
3458
|
ruleset: ['Standard', 'NFE Clause'],
|
|
3382
3459
|
banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Baton Pass'],
|
|
3383
|
-
unbanlist: ['Scyther'
|
|
3460
|
+
unbanlist: ['Scyther'],
|
|
3384
3461
|
},
|
|
3385
3462
|
{
|
|
3386
3463
|
name: "[Gen 3] NU",
|