@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/config/formats.ts
CHANGED
|
@@ -187,7 +187,7 @@ export const Formats: FormatList = [
|
|
|
187
187
|
'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel',
|
|
188
188
|
'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal',
|
|
189
189
|
'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Moody', 'Power Construct', 'Shadow Tag', 'Bright Powder',
|
|
190
|
-
'Damp Rock', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Smooth Rock', 'Terrain Extender', 'Baton Pass',
|
|
190
|
+
'Damp Rock', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Smooth Rock', 'Terrain Extender', 'Acupressure', 'Baton Pass',
|
|
191
191
|
],
|
|
192
192
|
},
|
|
193
193
|
{
|
|
@@ -206,7 +206,7 @@ export const Formats: FormatList = [
|
|
|
206
206
|
],
|
|
207
207
|
banlist: [
|
|
208
208
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Dialga', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Jirachi',
|
|
209
|
-
'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mew', 'Mewtwo', 'Mimikyu', 'Necrozma-Dawn-Wings',
|
|
209
|
+
'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mew', 'Mewtwo', 'Mimikyu', 'Necrozma', 'Necrozma-Dawn-Wings',
|
|
210
210
|
'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye', 'Snorlax', 'Solgaleo', 'Victini', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
211
211
|
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Power Construct', 'Bright Powder', 'Focus Band', 'Focus Sash', 'Lax Incense', 'Quick Claw', 'Perish Song',
|
|
212
212
|
],
|
|
@@ -249,9 +249,9 @@ export const Formats: FormatList = [
|
|
|
249
249
|
ruleset: ['[Gen 8] LC'],
|
|
250
250
|
banlist: [
|
|
251
251
|
// LC OU
|
|
252
|
-
'Abra', 'Carvanha', '
|
|
253
|
-
'
|
|
254
|
-
'Ponyta', 'Ponyta-Galar', 'Porygon', 'Slowpoke-Base', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
|
|
252
|
+
'Abra', 'Carvanha', 'Diglett-Base', 'Dwebble', 'Ferroseed', 'Foongus', 'Frillish', 'Grookey', 'Koffing',
|
|
253
|
+
'Larvesta', 'Magby', 'Magnemite', 'Mareanie', 'Mienfoo', 'Mudbray', 'Munchlax', 'Natu', 'Onix', 'Pawniard',
|
|
254
|
+
'Ponyta', 'Ponyta-Galar', 'Porygon', 'Slowpoke-Base', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
|
|
255
255
|
// LC UUBL
|
|
256
256
|
'Farfetch\u2019d-Galar', 'Scorbunny', 'Shellder', 'Wingull',
|
|
257
257
|
],
|
|
@@ -358,7 +358,7 @@ export const Formats: FormatList = [
|
|
|
358
358
|
gameType: 'doubles',
|
|
359
359
|
searchShow: false,
|
|
360
360
|
ruleset: ['Standard Doubles', 'Little Cup', 'Dynamax Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
361
|
-
banlist: ['Corsola-Galar', 'Cutiefly', 'Ponyta-Base', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix', 'Vulpix-Alola'],
|
|
361
|
+
banlist: ['Corsola-Galar', 'Cutiefly', 'Ponyta-Base', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix', 'Vulpix-Alola', 'Ally Switch'],
|
|
362
362
|
},
|
|
363
363
|
{
|
|
364
364
|
name: "[Gen 8] VGC 2022",
|
|
@@ -405,8 +405,8 @@ export const Formats: FormatList = [
|
|
|
405
405
|
banlist: [
|
|
406
406
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Jirachi', 'Kyogre',
|
|
407
407
|
'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
408
|
-
'Rayquaza', 'Reshiram', 'Solgaleo', '
|
|
409
|
-
'Zekrom', 'Power Construct', 'Focus Sash', 'Ally Switch', 'Final Gambit', 'Perish Song', 'Swagger',
|
|
408
|
+
'Rayquaza', 'Reshiram', 'Solgaleo', 'Tornadus-Base', 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
409
|
+
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Moody', 'Power Construct', 'Focus Sash', 'Ally Switch', 'Final Gambit', 'Perish Song', 'Swagger',
|
|
410
410
|
],
|
|
411
411
|
},
|
|
412
412
|
{
|
|
@@ -480,8 +480,8 @@ export const Formats: FormatList = [
|
|
|
480
480
|
mod: 'gen8',
|
|
481
481
|
ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
|
|
482
482
|
banlist: [
|
|
483
|
-
'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', '
|
|
484
|
-
'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Eternatus',
|
|
483
|
+
'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darkrai',
|
|
484
|
+
'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus',
|
|
485
485
|
'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black',
|
|
486
486
|
'Kyurem-White', 'Landorus-Base', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Metagross-Mega', 'Mewtwo',
|
|
487
487
|
'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
|
|
@@ -511,16 +511,16 @@ export const Formats: FormatList = [
|
|
|
511
511
|
'Drizzle', 'Drought',
|
|
512
512
|
// Slowbronite is banned so it doesn't validate on Galarian Slowbro
|
|
513
513
|
'Slowbronite',
|
|
514
|
-
//
|
|
515
|
-
'
|
|
514
|
+
// Ban for ou suspect
|
|
515
|
+
'Blaziken-Mega',
|
|
516
516
|
],
|
|
517
517
|
// Used to distinguish UU from below UU in the client
|
|
518
518
|
restricted: [
|
|
519
|
-
'Aegislash', '
|
|
520
|
-
'
|
|
521
|
-
'
|
|
522
|
-
'
|
|
523
|
-
'
|
|
519
|
+
'Aegislash', 'Altaria-Mega', 'Amoonguss', 'Azumarill', 'Beedrill-Mega', 'Breloom', 'Celesteela', 'Chandelure', 'Donphan', 'Dracozolt',
|
|
520
|
+
'Dragonite', 'Feraligatr', 'Gastrodon', 'Hatterene', 'Hippowdon', 'Infernape', 'Keldeo', 'Krookodile', 'Mamoswine', 'Mandibuzz',
|
|
521
|
+
'Manectric-Mega', 'Melmetal', 'Mienshao', 'Moltres-Base', 'Nidoking', 'Nidoqueen', 'Nihilego', 'Quagsire', 'Regieleki', 'Ribombee',
|
|
522
|
+
'Rotom-Heat', 'Rotom-Wash', 'Salamence', 'Scizor', 'Skarmory', 'Slowking-Base', 'Swampert-Base', 'Talonflame', 'Tangrowth', 'Tornadus-Base',
|
|
523
|
+
'Umbreon', 'Urshifu-Rapid-Strike',
|
|
524
524
|
],
|
|
525
525
|
},
|
|
526
526
|
{
|
|
@@ -639,197 +639,43 @@ export const Formats: FormatList = [
|
|
|
639
639
|
column: 2,
|
|
640
640
|
},
|
|
641
641
|
{
|
|
642
|
-
name: "[Gen 8]
|
|
643
|
-
desc: `
|
|
642
|
+
name: "[Gen 8] Sketchmons",
|
|
643
|
+
desc: `Every Pokémon gets a new move once.`,
|
|
644
644
|
threads: [
|
|
645
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
645
|
+
`• <a href="https://www.smogon.com/forums/threads/3680298/">Sketchmons</a>`,
|
|
646
646
|
],
|
|
647
647
|
|
|
648
|
-
mod: '
|
|
649
|
-
|
|
650
|
-
ruleset: ['Standard', 'Dynamax Clause'],
|
|
648
|
+
mod: 'gen8',
|
|
649
|
+
ruleset: ['Standard', 'Sketchmons Move Legality', 'Dynamax Clause'],
|
|
651
650
|
banlist: [
|
|
652
|
-
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
|
|
653
|
-
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', '
|
|
654
|
-
'Marshadow', '
|
|
655
|
-
'
|
|
656
|
-
'
|
|
657
|
-
'
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
'
|
|
661
|
-
'
|
|
662
|
-
'
|
|
651
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Genesect', 'Giratina',
|
|
652
|
+
'Giratina-Origin', 'Groudon', 'Hawlucha', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala',
|
|
653
|
+
'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Porygon-Z', 'Pheromosa', 'Rayquaza', 'Regieleki',
|
|
654
|
+
'Reshiram', 'Rillaboom', 'Shedinja', 'Solgaleo', 'Spectrier', 'Swoobat', 'Tapu Bulu', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
655
|
+
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Sand Rush',
|
|
656
|
+
'Shadow Tag', 'King\'s Rock', 'Baton Pass',
|
|
657
|
+
],
|
|
658
|
+
restricted: [
|
|
659
|
+
'Acupressure', 'Astral Barrage', 'Belly Drum', 'Bolt Beak', 'Clangorous Soul', 'Double Iron Bash', 'Electrify', 'Extreme Speed', 'Fishious Rend',
|
|
660
|
+
'Geomancy', 'Glacial Lance', 'Lovely Kiss', 'No Retreat', 'Oblivion Wing', 'Octolock', 'Quiver Dance', 'Secret Sword', 'Shell Smash', 'Shift Gear',
|
|
661
|
+
'Sleep Powder', 'Spore', 'Thousand Arrows', 'Transform', 'V-create', 'Wicked Blow',
|
|
663
662
|
],
|
|
664
|
-
getSharedPower(pokemon) {
|
|
665
|
-
const sharedPower = new Set<string>();
|
|
666
|
-
for (const ally of pokemon.side.pokemon) {
|
|
667
|
-
if (ally.previouslySwitchedIn > 0) {
|
|
668
|
-
if (pokemon.battle.dex.currentMod !== 'sharedpower' && ['trace', 'mirrorarmor'].includes(ally.baseAbility)) {
|
|
669
|
-
sharedPower.add('noability');
|
|
670
|
-
continue;
|
|
671
|
-
}
|
|
672
|
-
sharedPower.add(ally.baseAbility);
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
sharedPower.delete(pokemon.baseAbility);
|
|
676
|
-
return sharedPower;
|
|
677
|
-
},
|
|
678
|
-
onBeforeSwitchIn(pokemon) {
|
|
679
|
-
let format = this.format;
|
|
680
|
-
if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
|
|
681
|
-
for (const ability of format.getSharedPower!(pokemon)) {
|
|
682
|
-
const effect = 'ability:' + ability;
|
|
683
|
-
pokemon.volatiles[effect] = {id: this.toID(effect), target: pokemon};
|
|
684
|
-
if (!pokemon.m.abils) pokemon.m.abils = [];
|
|
685
|
-
if (!pokemon.m.abils.includes(effect)) pokemon.m.abils.push(effect);
|
|
686
|
-
}
|
|
687
|
-
},
|
|
688
|
-
onSwitchInPriority: 2,
|
|
689
|
-
onSwitchIn(pokemon) {
|
|
690
|
-
let format = this.format;
|
|
691
|
-
if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
|
|
692
|
-
for (const ability of format.getSharedPower!(pokemon)) {
|
|
693
|
-
if (ability === 'noability') {
|
|
694
|
-
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.`);
|
|
695
|
-
}
|
|
696
|
-
const effect = 'ability:' + ability;
|
|
697
|
-
delete pokemon.volatiles[effect];
|
|
698
|
-
pokemon.addVolatile(effect);
|
|
699
|
-
}
|
|
700
|
-
},
|
|
701
663
|
},
|
|
702
664
|
{
|
|
703
|
-
name: "[Gen 8]
|
|
704
|
-
desc: `
|
|
665
|
+
name: "[Gen 8] Flipped",
|
|
666
|
+
desc: `Pokémon have their base stats flipped.`,
|
|
705
667
|
threads: [
|
|
706
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
668
|
+
`• <a href="https://www.smogon.com/forums/threads/3662020/">Flipped</a>`,
|
|
707
669
|
],
|
|
708
670
|
|
|
709
671
|
mod: 'gen8',
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
const name = set.name;
|
|
718
|
-
if (names.has(this.dex.toID(name))) {
|
|
719
|
-
return [
|
|
720
|
-
`Your Pok\u00e9mon must have different nicknames.`,
|
|
721
|
-
`(You have more than one Pok\u00e9mon named '${name}')`,
|
|
722
|
-
];
|
|
723
|
-
}
|
|
724
|
-
names.add(this.dex.toID(name));
|
|
725
|
-
}
|
|
726
|
-
if (!names.size) {
|
|
727
|
-
return [
|
|
728
|
-
`${this.format.name} works using nicknames; your team has 0 nicknamed Pok\u00e9mon.`,
|
|
729
|
-
`(If this was intentional, add a nickname to one Pok\u00e9mon that isn't the name of a Pok\u00e9mon species.)`,
|
|
730
|
-
];
|
|
731
|
-
}
|
|
732
|
-
},
|
|
733
|
-
checkCanLearn(move, species, lsetData, set) {
|
|
734
|
-
// @ts-ignore
|
|
735
|
-
if (!set.sp?.exists || !set.crossSpecies?.exists) {
|
|
736
|
-
return this.checkCanLearn(move, species, lsetData, set);
|
|
737
|
-
}
|
|
738
|
-
// @ts-ignore
|
|
739
|
-
const problem = this.checkCanLearn(move, set.sp);
|
|
740
|
-
if (!problem) return null;
|
|
741
|
-
// @ts-ignore
|
|
742
|
-
if (!set.crossMovesLeft) return problem;
|
|
743
|
-
// @ts-ignore
|
|
744
|
-
if (this.checkCanLearn(move, set.crossSpecies)) return problem;
|
|
745
|
-
// @ts-ignore
|
|
746
|
-
set.crossMovesLeft--;
|
|
747
|
-
return null;
|
|
748
|
-
},
|
|
749
|
-
validateSet(set, teamHas) {
|
|
750
|
-
const crossSpecies = this.dex.species.get(set.name);
|
|
751
|
-
let problems = this.dex.formats.get('Pokemon').onChangeSet?.call(this, set, this.format) || null;
|
|
752
|
-
if (Array.isArray(problems) && problems.length) return problems;
|
|
753
|
-
const crossNonstandard = (!this.ruleTable.has('standardnatdex') && crossSpecies.isNonstandard === 'Past') ||
|
|
754
|
-
crossSpecies.isNonstandard === 'Future';
|
|
755
|
-
const crossIsCap = !this.ruleTable.has('+pokemontag:cap') && crossSpecies.isNonstandard === 'CAP';
|
|
756
|
-
if (!crossSpecies.exists || crossNonstandard || crossIsCap) return this.validateSet(set, teamHas);
|
|
757
|
-
const species = this.dex.species.get(set.species);
|
|
758
|
-
const check = this.checkSpecies(set, species, species, {});
|
|
759
|
-
if (check) return [check];
|
|
760
|
-
const nonstandard = !this.ruleTable.has('standardnatdex') && species.isNonstandard === 'Past';
|
|
761
|
-
const isCap = !this.ruleTable.has('+pokemontag:cap') && species.isNonstandard === 'CAP';
|
|
762
|
-
if (!species.exists || nonstandard || isCap || species === crossSpecies) return this.validateSet(set, teamHas);
|
|
763
|
-
if (!species.nfe) return [`${species.name} cannot cross evolve because it doesn't evolve.`];
|
|
764
|
-
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
765
|
-
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) {
|
|
766
|
-
return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it isn't an evolution.`];
|
|
767
|
-
}
|
|
768
|
-
if (this.ruleTable.isRestrictedSpecies(crossSpecies)) {
|
|
769
|
-
return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it is banned.`];
|
|
770
|
-
}
|
|
771
|
-
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
772
|
-
if (!crossPrevoSpecies.prevo !== !species.prevo) {
|
|
773
|
-
return [
|
|
774
|
-
`${species.name} cannot cross evolve into ${crossSpecies.name} because they are not consecutive evolution stages.`,
|
|
775
|
-
];
|
|
776
|
-
}
|
|
777
|
-
const ability = this.dex.abilities.get(set.ability);
|
|
778
|
-
if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) {
|
|
779
|
-
set.species = crossSpecies.name;
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
// @ts-ignore
|
|
783
|
-
set.sp = species;
|
|
784
|
-
// @ts-ignore
|
|
785
|
-
set.crossSpecies = crossSpecies;
|
|
786
|
-
// @ts-ignore
|
|
787
|
-
set.crossMovesLeft = 2;
|
|
788
|
-
problems = this.validateSet(set, teamHas);
|
|
789
|
-
set.name = crossSpecies.name;
|
|
790
|
-
set.species = species.name;
|
|
791
|
-
return problems;
|
|
792
|
-
},
|
|
793
|
-
onModifySpecies(species, target, source, effect) {
|
|
794
|
-
if (!target) return; // chat
|
|
795
|
-
if (effect && ['imposter', 'transform'].includes(effect.id)) return;
|
|
796
|
-
if (target.set.name === target.set.species) return;
|
|
797
|
-
const crossSpecies = this.dex.species.get(target.set.name);
|
|
798
|
-
if (!crossSpecies.exists) return;
|
|
799
|
-
if (species.battleOnly || !species.nfe) return;
|
|
800
|
-
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
801
|
-
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) return;
|
|
802
|
-
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
803
|
-
if (!crossPrevoSpecies.prevo !== !species.prevo) return;
|
|
804
|
-
|
|
805
|
-
const mixedSpecies = this.dex.deepClone(species);
|
|
806
|
-
mixedSpecies.baseSpecies = mixedSpecies.name = `${species.name}-${crossSpecies.name}`;
|
|
807
|
-
mixedSpecies.weightkg =
|
|
808
|
-
Math.max(0.1, +(species.weightkg + crossSpecies.weightkg - crossPrevoSpecies.weightkg)).toFixed(1);
|
|
809
|
-
mixedSpecies.nfe = false;
|
|
810
|
-
mixedSpecies.evos = [];
|
|
811
|
-
mixedSpecies.eggGroups = crossSpecies.eggGroups;
|
|
812
|
-
mixedSpecies.abilities = crossSpecies.abilities;
|
|
813
|
-
mixedSpecies.bst = 0;
|
|
814
|
-
let i: StatID;
|
|
815
|
-
for (i in species.baseStats) {
|
|
816
|
-
const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i];
|
|
817
|
-
mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255);
|
|
818
|
-
mixedSpecies.bst += mixedSpecies.baseStats[i];
|
|
819
|
-
}
|
|
820
|
-
if (crossSpecies.types[0] !== crossPrevoSpecies.types[0]) mixedSpecies.types[0] = crossSpecies.types[0];
|
|
821
|
-
if (crossSpecies.types[1] !== crossPrevoSpecies.types[1]) {
|
|
822
|
-
mixedSpecies.types[1] = crossSpecies.types[1] || crossSpecies.types[0];
|
|
823
|
-
}
|
|
824
|
-
if (mixedSpecies.types[0] === mixedSpecies.types[1]) mixedSpecies.types = [mixedSpecies.types[0]];
|
|
825
|
-
|
|
826
|
-
return mixedSpecies;
|
|
827
|
-
},
|
|
828
|
-
onBegin() {
|
|
829
|
-
for (const pokemon of this.getAllPokemon()) {
|
|
830
|
-
pokemon.baseSpecies = pokemon.species;
|
|
831
|
-
}
|
|
832
|
-
},
|
|
672
|
+
ruleset: ['Standard', 'Flipped Mod', 'Dynamax Clause'],
|
|
673
|
+
banlist: [
|
|
674
|
+
'Azumarill', 'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre',
|
|
675
|
+
'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn Wings', 'Necrozma-Dusk Mane', 'Palkia',
|
|
676
|
+
'Rayquaza', 'Reshiram', 'Solgaleo', 'Steelix', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
|
|
677
|
+
'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Psychic Surge', 'Shadow Tag', 'Baton Pass', 'Psychic Terrain', 'Shell Smash',
|
|
678
|
+
],
|
|
833
679
|
},
|
|
834
680
|
|
|
835
681
|
// Other Metagames
|
|
@@ -885,15 +731,16 @@ export const Formats: FormatList = [
|
|
|
885
731
|
],
|
|
886
732
|
|
|
887
733
|
mod: 'gen8',
|
|
888
|
-
ruleset: ['
|
|
734
|
+
ruleset: ['Standard', '!Obtainable Abilities', '2 Ability Clause', 'Dynamax Clause', 'Sleep Moves Clause', '!Sleep Clause Mod'],
|
|
889
735
|
banlist: [
|
|
890
|
-
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
|
|
891
|
-
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White',
|
|
892
|
-
'
|
|
893
|
-
'
|
|
894
|
-
'
|
|
895
|
-
'
|
|
896
|
-
'
|
|
736
|
+
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
|
|
737
|
+
'Gengar', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White',
|
|
738
|
+
'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern',
|
|
739
|
+
'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike',
|
|
740
|
+
'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base',
|
|
741
|
+
'Arena Trap', 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter',
|
|
742
|
+
'Innards Out', 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean',
|
|
743
|
+
'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
|
|
897
744
|
],
|
|
898
745
|
onValidateSet(set) {
|
|
899
746
|
// Temporary fix until battle-only is implemented properly
|
|
@@ -914,15 +761,15 @@ export const Formats: FormatList = [
|
|
|
914
761
|
],
|
|
915
762
|
|
|
916
763
|
mod: 'mixandmega',
|
|
917
|
-
ruleset: ['
|
|
764
|
+
ruleset: ['Standard', 'Overflow Stat Mod', 'Dynamax Clause'],
|
|
918
765
|
banlist: [
|
|
919
|
-
'Calyrex-Shadow', 'Kyogre', 'Zacian',
|
|
766
|
+
'Calyrex-Shadow', 'Eternatus', 'Kyogre', 'Zacian',
|
|
920
767
|
'Beedrillite', 'Blazikenite', 'Gengarite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite',
|
|
921
768
|
'Moody', 'Shadow Tag', 'Baton Pass', 'Electrify',
|
|
922
769
|
],
|
|
923
770
|
restricted: [
|
|
924
|
-
'Calyrex-Ice', 'Dialga', '
|
|
925
|
-
'
|
|
771
|
+
'Calyrex-Ice', 'Dialga', 'Gengar', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
|
|
772
|
+
'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
|
|
926
773
|
'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu', 'Urshifu-Rapid-Strike', 'Xerneas',
|
|
927
774
|
'Yveltal', 'Zekrom', 'Zygarde-Complete',
|
|
928
775
|
],
|
|
@@ -931,8 +778,15 @@ export const Formats: FormatList = [
|
|
|
931
778
|
for (const set of team) {
|
|
932
779
|
const item = this.dex.items.get(set.item);
|
|
933
780
|
if (!item.megaStone) continue;
|
|
781
|
+
const natdex = this.ruleTable.has('standardnatdex');
|
|
782
|
+
if (natdex && item.id !== 'ultranecroziumz') continue;
|
|
934
783
|
const species = this.dex.species.get(set.species);
|
|
935
|
-
if (species.isNonstandard
|
|
784
|
+
if (species.isNonstandard && !this.ruleTable.has(`+${this.toID(species.isNonstandard)}`)) {
|
|
785
|
+
return [`${species.baseSpecies} does not exist in gen 8.`];
|
|
786
|
+
}
|
|
787
|
+
if (natdex && species.name.startsWith('Necrozma-') && item.id === 'ultranecroziumz') {
|
|
788
|
+
continue;
|
|
789
|
+
}
|
|
936
790
|
if (this.ruleTable.isRestrictedSpecies(species) || this.toID(set.ability) === 'powerconstruct') {
|
|
937
791
|
return [`${species.name} is not allowed to hold ${item.name}.`];
|
|
938
792
|
}
|
|
@@ -1002,8 +856,8 @@ export const Formats: FormatList = [
|
|
|
1002
856
|
mod: 'gen8',
|
|
1003
857
|
ruleset: ['Not Fully Evolved', 'Standard', 'Dynamax Clause'],
|
|
1004
858
|
banlist: [
|
|
1005
|
-
'Chansey', 'Doublade', 'Haunter', 'Kadabra', 'Magneton', 'Mr. Mime-Galar', 'Pawniard', 'Pikachu',
|
|
1006
|
-
'Rhydon', 'Scyther', 'Sneasel', 'Type: Null', 'Vulpix-Base', 'Arena Trap', 'Shadow Tag', 'Baton Pass',
|
|
859
|
+
'Chansey', 'Doublade', 'Golbat', 'Haunter', 'Kadabra', 'Magmar', 'Magneton', 'Mr. Mime-Galar', 'Pawniard', 'Pikachu',
|
|
860
|
+
'Porygon2', 'Rhydon', 'Scyther', 'Sneasel', 'Type: Null', 'Vulpix-Base', 'Arena Trap', 'Shadow Tag', 'Baton Pass',
|
|
1007
861
|
],
|
|
1008
862
|
},
|
|
1009
863
|
{
|
|
@@ -1016,17 +870,29 @@ export const Formats: FormatList = [
|
|
|
1016
870
|
mod: 'gen8',
|
|
1017
871
|
ruleset: ['Standard', 'Dynamax Clause', 'Sleep Moves Clause'],
|
|
1018
872
|
banlist: [
|
|
1019
|
-
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Dragapult', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Pikachu',
|
|
1020
|
-
'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power', 'Moody',
|
|
1021
|
-
'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw',
|
|
873
|
+
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Dragapult', 'Eternatus', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Pikachu',
|
|
874
|
+
'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power', 'Moody',
|
|
875
|
+
'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw',
|
|
876
|
+
'Baton Pass',
|
|
1022
877
|
],
|
|
1023
878
|
onValidateTeam(team) {
|
|
1024
879
|
const gods = new Set<string>();
|
|
1025
880
|
for (const set of team) {
|
|
1026
881
|
let species = this.dex.species.get(set.species);
|
|
1027
882
|
if (typeof species.battleOnly === 'string') species = this.dex.species.get(species.battleOnly);
|
|
1028
|
-
if (
|
|
1029
|
-
|
|
883
|
+
if (set.item && this.dex.items.get(set.item).megaStone) {
|
|
884
|
+
const item = this.dex.items.get(set.item);
|
|
885
|
+
if (item.megaEvolves === species.baseSpecies) {
|
|
886
|
+
species = this.dex.species.get(item.megaStone);
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
if (this.ruleTable.has('standardnatdex')) {
|
|
890
|
+
const format = this.dex.formats.getRuleTable(this.dex.formats.get('gen8nationaldex'));
|
|
891
|
+
if (format.isBannedSpecies(species)) gods.add(species.name);
|
|
892
|
+
} else {
|
|
893
|
+
if (['ag', 'uber'].includes(this.toID(species.tier)) || this.toID(set.ability) === 'powerconstruct') {
|
|
894
|
+
gods.add(species.name);
|
|
895
|
+
}
|
|
1030
896
|
}
|
|
1031
897
|
}
|
|
1032
898
|
if (gods.size > 1) {
|
|
@@ -1038,7 +904,10 @@ export const Formats: FormatList = [
|
|
|
1038
904
|
if (source || !target?.side) return;
|
|
1039
905
|
const god = target.side.team.find(set => {
|
|
1040
906
|
let godSpecies = this.dex.species.get(set.species);
|
|
1041
|
-
const
|
|
907
|
+
const isNatDex = this.format.ruleTable?.has('standardnatdex');
|
|
908
|
+
const validator = this.dex.formats.getRuleTable(
|
|
909
|
+
this.dex.formats.get(`gen${isNatDex && this.gen < 8 ? 8 : this.gen}${isNatDex ? 'nationaldex' : 'ou'}`)
|
|
910
|
+
);
|
|
1042
911
|
if (this.toID(set.ability) === 'powerconstruct') {
|
|
1043
912
|
return true;
|
|
1044
913
|
}
|
|
@@ -1055,6 +924,9 @@ export const Formats: FormatList = [
|
|
|
1055
924
|
if (godSpecies.forme === 'Crowned') {
|
|
1056
925
|
godSpecies = this.dex.species.get(godSpecies.changesFrom || godSpecies.baseSpecies);
|
|
1057
926
|
}
|
|
927
|
+
if (typeof godSpecies.battleOnly === 'string') {
|
|
928
|
+
godSpecies = this.dex.species.get(godSpecies.battleOnly);
|
|
929
|
+
}
|
|
1058
930
|
newSpecies.bst -= newSpecies.baseStats[stat];
|
|
1059
931
|
newSpecies.baseStats[stat] = godSpecies.baseStats[stat];
|
|
1060
932
|
newSpecies.bst += newSpecies.baseStats[stat];
|
|
@@ -1148,7 +1020,17 @@ export const Formats: FormatList = [
|
|
|
1148
1020
|
|
|
1149
1021
|
mod: 'gen8bdsp',
|
|
1150
1022
|
ruleset: ['[Gen 8 BDSP] RU'],
|
|
1151
|
-
banlist: ['RU', 'NUBL'],
|
|
1023
|
+
banlist: ['RU', 'NUBL', 'Damp Rock', 'Heat Rock'],
|
|
1024
|
+
},
|
|
1025
|
+
{
|
|
1026
|
+
name: "[Gen 8 BDSP] PU",
|
|
1027
|
+
threads: [
|
|
1028
|
+
`• <a href="https://www.smogon.com/forums/threads/3700009/">BDSP PU</a>`,
|
|
1029
|
+
],
|
|
1030
|
+
|
|
1031
|
+
mod: 'gen8bdsp',
|
|
1032
|
+
ruleset: ['[Gen 8 BDSP] NU'],
|
|
1033
|
+
banlist: ['NU', 'PUBL'],
|
|
1152
1034
|
},
|
|
1153
1035
|
{
|
|
1154
1036
|
name: "[Gen 8 BDSP] LC",
|
|
@@ -1158,7 +1040,7 @@ export const Formats: FormatList = [
|
|
|
1158
1040
|
|
|
1159
1041
|
mod: 'gen8bdsp',
|
|
1160
1042
|
ruleset: ['Little Cup', 'Standard'],
|
|
1161
|
-
banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Moody', 'Baton Pass'],
|
|
1043
|
+
banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Moody', 'Baton Pass', 'Sticky Web'],
|
|
1162
1044
|
},
|
|
1163
1045
|
{
|
|
1164
1046
|
name: "[Gen 8 BDSP] Monotype",
|
|
@@ -1169,7 +1051,7 @@ export const Formats: FormatList = [
|
|
|
1169
1051
|
mod: 'gen8bdsp',
|
|
1170
1052
|
ruleset: ['Standard', 'Same Type Clause'],
|
|
1171
1053
|
banlist: [
|
|
1172
|
-
'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Lugia', 'Mewtwo', 'Palkia', 'Rayquaza',
|
|
1054
|
+
'Arceus', 'Darkrai', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Lugia', 'Mewtwo', 'Palkia', 'Rayquaza', 'Shaymin-Sky',
|
|
1173
1055
|
'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass',
|
|
1174
1056
|
],
|
|
1175
1057
|
},
|
|
@@ -1190,6 +1072,7 @@ export const Formats: FormatList = [
|
|
|
1190
1072
|
],
|
|
1191
1073
|
|
|
1192
1074
|
mod: 'gen8bdsp',
|
|
1075
|
+
searchShow: false,
|
|
1193
1076
|
ruleset: ['Flat Rules', 'Min Source Gen = 8'],
|
|
1194
1077
|
},
|
|
1195
1078
|
{
|
|
@@ -1201,7 +1084,7 @@ export const Formats: FormatList = [
|
|
|
1201
1084
|
mod: 'gen8bdsp',
|
|
1202
1085
|
gameType: 'doubles',
|
|
1203
1086
|
ruleset: ['Standard Doubles'],
|
|
1204
|
-
banlist: ['DUber'],
|
|
1087
|
+
banlist: ['DUber', 'Dark Void'],
|
|
1205
1088
|
},
|
|
1206
1089
|
{
|
|
1207
1090
|
name: "[Gen 8 BDSP] Battle Festival Doubles",
|
|
@@ -1240,12 +1123,149 @@ export const Formats: FormatList = [
|
|
|
1240
1123
|
ruleset: ['Standard', 'Dynamax Clause', 'Camomons Mod'],
|
|
1241
1124
|
banlist: [
|
|
1242
1125
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin',
|
|
1243
|
-
'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', '
|
|
1244
|
-
'
|
|
1245
|
-
'
|
|
1246
|
-
'
|
|
1126
|
+
'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Marshadow',
|
|
1127
|
+
'Mew', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo',
|
|
1128
|
+
'Spectrier', 'Tornadus-Therian', 'Volcarona', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zeraora',
|
|
1129
|
+
'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass', 'Calm Mind',
|
|
1247
1130
|
],
|
|
1248
1131
|
},
|
|
1132
|
+
{
|
|
1133
|
+
name: "[Gen 8] Cross Evolution",
|
|
1134
|
+
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.`,
|
|
1135
|
+
threads: [
|
|
1136
|
+
`• <a href="https://www.smogon.com/forums/threads/3657562/">Cross Evolution</a>`,
|
|
1137
|
+
],
|
|
1138
|
+
|
|
1139
|
+
mod: 'gen8',
|
|
1140
|
+
searchShow: false,
|
|
1141
|
+
ruleset: ['Standard', 'Overflow Stat Mod', 'Dynamax Clause', '2 Ability Clause'],
|
|
1142
|
+
banlist: ['Corsola-Galar', 'Sneasel', 'Type: Null', 'Arena Trap', 'Ice Scales', 'Moody', 'King\'s Rock', 'Baton Pass'],
|
|
1143
|
+
restricted: ['Chansey', 'Lunala', 'Shedinja', 'Solgaleo', 'Gorilla Tactics', 'Huge Power', 'Pure Power', 'Shadow Tag'],
|
|
1144
|
+
onValidateTeam(team) {
|
|
1145
|
+
const names = new Set<ID>();
|
|
1146
|
+
for (const set of team) {
|
|
1147
|
+
const name = set.name;
|
|
1148
|
+
if (names.has(this.dex.toID(name))) {
|
|
1149
|
+
return [
|
|
1150
|
+
`Your Pok\u00e9mon must have different nicknames.`,
|
|
1151
|
+
`(You have more than one Pok\u00e9mon named '${name}')`,
|
|
1152
|
+
];
|
|
1153
|
+
}
|
|
1154
|
+
names.add(this.dex.toID(name));
|
|
1155
|
+
}
|
|
1156
|
+
if (!names.size) {
|
|
1157
|
+
return [
|
|
1158
|
+
`${this.format.name} works using nicknames; your team has 0 nicknamed Pok\u00e9mon.`,
|
|
1159
|
+
`(If this was intentional, add a nickname to one Pok\u00e9mon that isn't the name of a Pok\u00e9mon species.)`,
|
|
1160
|
+
];
|
|
1161
|
+
}
|
|
1162
|
+
},
|
|
1163
|
+
checkCanLearn(move, species, lsetData, set) {
|
|
1164
|
+
// @ts-ignore
|
|
1165
|
+
if (!set.sp?.exists || !set.crossSpecies?.exists) {
|
|
1166
|
+
return this.checkCanLearn(move, species, lsetData, set);
|
|
1167
|
+
}
|
|
1168
|
+
// @ts-ignore
|
|
1169
|
+
const problem = this.checkCanLearn(move, set.sp);
|
|
1170
|
+
if (!problem) return null;
|
|
1171
|
+
// @ts-ignore
|
|
1172
|
+
if (!set.crossMovesLeft) return problem;
|
|
1173
|
+
// @ts-ignore
|
|
1174
|
+
if (this.checkCanLearn(move, set.crossSpecies)) return problem;
|
|
1175
|
+
// @ts-ignore
|
|
1176
|
+
set.crossMovesLeft--;
|
|
1177
|
+
return null;
|
|
1178
|
+
},
|
|
1179
|
+
validateSet(set, teamHas) {
|
|
1180
|
+
const crossSpecies = this.dex.species.get(set.name);
|
|
1181
|
+
let problems = this.dex.formats.get('Pokemon').onChangeSet?.call(this, set, this.format) || null;
|
|
1182
|
+
if (Array.isArray(problems) && problems.length) return problems;
|
|
1183
|
+
const crossNonstandard = (!this.ruleTable.has('standardnatdex') && crossSpecies.isNonstandard === 'Past') ||
|
|
1184
|
+
crossSpecies.isNonstandard === 'Future';
|
|
1185
|
+
const crossIsCap = !this.ruleTable.has('+pokemontag:cap') && crossSpecies.isNonstandard === 'CAP';
|
|
1186
|
+
if (!crossSpecies.exists || crossNonstandard || crossIsCap) return this.validateSet(set, teamHas);
|
|
1187
|
+
const species = this.dex.species.get(set.species);
|
|
1188
|
+
const check = this.checkSpecies(set, species, species, {});
|
|
1189
|
+
if (check) return [check];
|
|
1190
|
+
const nonstandard = !this.ruleTable.has('standardnatdex') && species.isNonstandard === 'Past';
|
|
1191
|
+
const isCap = !this.ruleTable.has('+pokemontag:cap') && species.isNonstandard === 'CAP';
|
|
1192
|
+
if (!species.exists || nonstandard || isCap || species === crossSpecies) return this.validateSet(set, teamHas);
|
|
1193
|
+
if (!species.nfe) return [`${species.name} cannot cross evolve because it doesn't evolve.`];
|
|
1194
|
+
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
1195
|
+
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) {
|
|
1196
|
+
return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it isn't an evolution.`];
|
|
1197
|
+
}
|
|
1198
|
+
if (this.ruleTable.isRestrictedSpecies(crossSpecies)) {
|
|
1199
|
+
return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it is banned.`];
|
|
1200
|
+
}
|
|
1201
|
+
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
1202
|
+
if (!crossPrevoSpecies.prevo !== !species.prevo) {
|
|
1203
|
+
return [
|
|
1204
|
+
`${species.name} cannot cross evolve into ${crossSpecies.name} because they are not consecutive evolution stages.`,
|
|
1205
|
+
];
|
|
1206
|
+
}
|
|
1207
|
+
const item = this.dex.items.get(set.item);
|
|
1208
|
+
if (item.itemUser?.length) {
|
|
1209
|
+
if (!item.itemUser.includes(crossSpecies.name) || crossSpecies.name !== species.name) {
|
|
1210
|
+
return [`${species.name} cannot use ${item.name} because it is cross evolved into ${crossSpecies.name}.`];
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
const ability = this.dex.abilities.get(set.ability);
|
|
1214
|
+
if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) {
|
|
1215
|
+
set.species = crossSpecies.name;
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
// @ts-ignore
|
|
1219
|
+
set.sp = species;
|
|
1220
|
+
// @ts-ignore
|
|
1221
|
+
set.crossSpecies = crossSpecies;
|
|
1222
|
+
// @ts-ignore
|
|
1223
|
+
set.crossMovesLeft = 2;
|
|
1224
|
+
problems = this.validateSet(set, teamHas);
|
|
1225
|
+
set.name = crossSpecies.name;
|
|
1226
|
+
set.species = species.name;
|
|
1227
|
+
return problems;
|
|
1228
|
+
},
|
|
1229
|
+
onModifySpecies(species, target, source, effect) {
|
|
1230
|
+
if (!target) return; // chat
|
|
1231
|
+
if (effect && ['imposter', 'transform'].includes(effect.id)) return;
|
|
1232
|
+
if (target.set.name === target.set.species) return;
|
|
1233
|
+
const crossSpecies = this.dex.species.get(target.set.name);
|
|
1234
|
+
if (!crossSpecies.exists) return;
|
|
1235
|
+
if (species.battleOnly || !species.nfe) return;
|
|
1236
|
+
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
1237
|
+
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) return;
|
|
1238
|
+
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
1239
|
+
if (!crossPrevoSpecies.prevo !== !species.prevo) return;
|
|
1240
|
+
|
|
1241
|
+
const mixedSpecies = this.dex.deepClone(species);
|
|
1242
|
+
mixedSpecies.weightkg =
|
|
1243
|
+
Math.max(0.1, +(species.weightkg + crossSpecies.weightkg - crossPrevoSpecies.weightkg)).toFixed(1);
|
|
1244
|
+
mixedSpecies.nfe = false;
|
|
1245
|
+
mixedSpecies.evos = [];
|
|
1246
|
+
mixedSpecies.eggGroups = crossSpecies.eggGroups;
|
|
1247
|
+
mixedSpecies.abilities = crossSpecies.abilities;
|
|
1248
|
+
mixedSpecies.bst = 0;
|
|
1249
|
+
let i: StatID;
|
|
1250
|
+
for (i in species.baseStats) {
|
|
1251
|
+
const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i];
|
|
1252
|
+
mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255);
|
|
1253
|
+
mixedSpecies.bst += mixedSpecies.baseStats[i];
|
|
1254
|
+
}
|
|
1255
|
+
if (crossSpecies.types[0] !== crossPrevoSpecies.types[0]) mixedSpecies.types[0] = crossSpecies.types[0];
|
|
1256
|
+
if (crossSpecies.types[1] !== crossPrevoSpecies.types[1]) {
|
|
1257
|
+
mixedSpecies.types[1] = crossSpecies.types[1] || crossSpecies.types[0];
|
|
1258
|
+
}
|
|
1259
|
+
if (mixedSpecies.types[0] === mixedSpecies.types[1]) mixedSpecies.types = [mixedSpecies.types[0]];
|
|
1260
|
+
|
|
1261
|
+
return mixedSpecies;
|
|
1262
|
+
},
|
|
1263
|
+
onBegin() {
|
|
1264
|
+
for (const pokemon of this.getAllPokemon()) {
|
|
1265
|
+
pokemon.baseSpecies = pokemon.species;
|
|
1266
|
+
}
|
|
1267
|
+
},
|
|
1268
|
+
},
|
|
1249
1269
|
{
|
|
1250
1270
|
name: "[Gen 8] Inheritance",
|
|
1251
1271
|
desc: `Pokémon may use the ability and moves of another, as long as they forfeit their own learnset.`,
|
|
@@ -1768,6 +1788,67 @@ export const Formats: FormatList = [
|
|
|
1768
1788
|
pokemon.m.innates = undefined;
|
|
1769
1789
|
},
|
|
1770
1790
|
},
|
|
1791
|
+
{
|
|
1792
|
+
name: "[Gen 8] Shared Power",
|
|
1793
|
+
desc: `Once a Pokémon switches in, its ability is shared with the rest of the team.`,
|
|
1794
|
+
threads: [
|
|
1795
|
+
`• <a href="https://www.smogon.com/forums/threads/3660877/">Shared Power</a>`,
|
|
1796
|
+
],
|
|
1797
|
+
|
|
1798
|
+
mod: 'sharedpower',
|
|
1799
|
+
searchShow: false,
|
|
1800
|
+
ruleset: ['Standard', 'Dynamax Clause'],
|
|
1801
|
+
banlist: [
|
|
1802
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
|
|
1803
|
+
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna',
|
|
1804
|
+
'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
1805
|
+
'Pheromosa', 'Rayquaza', 'Reshiram', 'Shedinja', 'Solgaleo', 'Urshifu-Base', 'Urshifu-Rapid-Strike',
|
|
1806
|
+
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
|
|
1807
|
+
'Arena Trap', 'Contrary', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Electric Surge ++ Surge Surfer',
|
|
1808
|
+
'Fur Coat', 'Guts', 'Harvest', 'Huge Power', 'Imposter', 'Innards Out', 'Libero', 'Magic Bounce', 'Magic Guard',
|
|
1809
|
+
'Magnet Pull', 'Mold Breaker', 'Moody', 'Neutralizing Gas', 'Power Construct', 'Queenly Majesty', 'Quick Draw',
|
|
1810
|
+
'Regenerator', 'Sand Rush', 'Sand Veil', 'Shadow Tag', 'Simple', 'Snow Cloak', 'Snow Warning ++ Slush Rush',
|
|
1811
|
+
'Speed Boost', 'Stakeout', 'Steelworker ++ Steely Spirit', 'Stench', 'Tinted Lens', 'Triage', 'Unaware',
|
|
1812
|
+
'Unburden', 'Water Bubble', 'King\'s Rock', 'Baton Pass',
|
|
1813
|
+
],
|
|
1814
|
+
getSharedPower(pokemon) {
|
|
1815
|
+
const sharedPower = new Set<string>();
|
|
1816
|
+
for (const ally of pokemon.side.pokemon) {
|
|
1817
|
+
if (ally.previouslySwitchedIn > 0) {
|
|
1818
|
+
if (pokemon.battle.dex.currentMod !== 'sharedpower' && ['trace', 'mirrorarmor'].includes(ally.baseAbility)) {
|
|
1819
|
+
sharedPower.add('noability');
|
|
1820
|
+
continue;
|
|
1821
|
+
}
|
|
1822
|
+
sharedPower.add(ally.baseAbility);
|
|
1823
|
+
}
|
|
1824
|
+
}
|
|
1825
|
+
sharedPower.delete(pokemon.baseAbility);
|
|
1826
|
+
return sharedPower;
|
|
1827
|
+
},
|
|
1828
|
+
onBeforeSwitchIn(pokemon) {
|
|
1829
|
+
let format = this.format;
|
|
1830
|
+
if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
|
|
1831
|
+
for (const ability of format.getSharedPower!(pokemon)) {
|
|
1832
|
+
const effect = 'ability:' + ability;
|
|
1833
|
+
pokemon.volatiles[effect] = {id: this.toID(effect), target: pokemon};
|
|
1834
|
+
if (!pokemon.m.abils) pokemon.m.abils = [];
|
|
1835
|
+
if (!pokemon.m.abils.includes(effect)) pokemon.m.abils.push(effect);
|
|
1836
|
+
}
|
|
1837
|
+
},
|
|
1838
|
+
onSwitchInPriority: 2,
|
|
1839
|
+
onSwitchIn(pokemon) {
|
|
1840
|
+
let format = this.format;
|
|
1841
|
+
if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
|
|
1842
|
+
for (const ability of format.getSharedPower!(pokemon)) {
|
|
1843
|
+
if (ability === 'noability') {
|
|
1844
|
+
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.`);
|
|
1845
|
+
}
|
|
1846
|
+
const effect = 'ability:' + ability;
|
|
1847
|
+
delete pokemon.volatiles[effect];
|
|
1848
|
+
pokemon.addVolatile(effect);
|
|
1849
|
+
}
|
|
1850
|
+
},
|
|
1851
|
+
},
|
|
1771
1852
|
{
|
|
1772
1853
|
name: "[Gen 8] Trademarked",
|
|
1773
1854
|
desc: `Sacrifice your Pokémon's ability for a status move that activates on switch-in.`,
|
|
@@ -2042,7 +2123,6 @@ export const Formats: FormatList = [
|
|
|
2042
2123
|
|
|
2043
2124
|
mod: 'sharedpower',
|
|
2044
2125
|
team: 'random',
|
|
2045
|
-
searchShow: false,
|
|
2046
2126
|
ruleset: ['[Gen 8] Random Battle', 'Team Preview', 'Dynamax Clause', 'Camomons Mod', 'Inverse Mod', 'Scalemons Mod'],
|
|
2047
2127
|
onBeforeSwitchIn(pokemon) {
|
|
2048
2128
|
let format = this.format;
|
|
@@ -2345,45 +2425,40 @@ export const Formats: FormatList = [
|
|
|
2345
2425
|
column: 3,
|
|
2346
2426
|
},
|
|
2347
2427
|
{
|
|
2348
|
-
name: "[Gen
|
|
2428
|
+
name: "[Gen 5] UU",
|
|
2349
2429
|
threads: [
|
|
2350
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
2351
|
-
`• <a href="https://www.smogon.com/forums/
|
|
2430
|
+
`• <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
|
|
2431
|
+
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
2352
2432
|
],
|
|
2353
2433
|
|
|
2354
|
-
mod: '
|
|
2434
|
+
mod: 'gen5',
|
|
2355
2435
|
// searchShow: false,
|
|
2356
|
-
ruleset: ['
|
|
2357
|
-
banlist: ['OU', 'UUBL'],
|
|
2358
|
-
unbanlist: ['Arena Trap', 'Swagger'],
|
|
2436
|
+
ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
2437
|
+
banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
2359
2438
|
},
|
|
2360
2439
|
{
|
|
2361
|
-
name: "[Gen
|
|
2440
|
+
name: "[Gen 5] NU",
|
|
2362
2441
|
threads: [
|
|
2363
|
-
`• <a href="https://www.smogon.com/
|
|
2364
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
2365
|
-
`• <a href="https://www.smogon.com/forums/threads/3621440/">USM LC Viability Rankings</a>`,
|
|
2442
|
+
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
2443
|
+
`• <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
|
|
2366
2444
|
],
|
|
2367
2445
|
|
|
2368
|
-
mod: '
|
|
2446
|
+
mod: 'gen5',
|
|
2369
2447
|
// searchShow: false,
|
|
2370
|
-
ruleset: ['
|
|
2371
|
-
banlist: [
|
|
2372
|
-
'Aipom', 'Cutiefly', 'Drifloon', 'Gligar', 'Gothita', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon',
|
|
2373
|
-
'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Trapinch', 'Vulpix-Base', 'Wingull', 'Yanma',
|
|
2374
|
-
'Eevium Z', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Sticky Web',
|
|
2375
|
-
],
|
|
2448
|
+
ruleset: ['[Gen 5] RU', '!Sleep Moves Clause', 'Sleep Clause Mod'],
|
|
2449
|
+
banlist: ['RU', 'NUBL', 'Assist', 'Copycat'],
|
|
2376
2450
|
},
|
|
2377
2451
|
{
|
|
2378
|
-
name: "[Gen
|
|
2452
|
+
name: "[Gen 6] PU",
|
|
2379
2453
|
threads: [
|
|
2380
|
-
`• <a href="https://www.smogon.com/
|
|
2454
|
+
`• <a href="https://www.smogon.com/dex/xy/tags/pu/">ORAS PU Banlist</a>`,
|
|
2455
|
+
`• <a href="https://www.smogon.com/forums/threads/3528743/">ORAS PU Viability Rankings</a>`,
|
|
2381
2456
|
],
|
|
2382
2457
|
|
|
2383
|
-
mod: '
|
|
2458
|
+
mod: 'gen6',
|
|
2384
2459
|
// searchShow: false,
|
|
2385
|
-
ruleset: ['[Gen
|
|
2386
|
-
banlist: ['NU', 'PUBL'],
|
|
2460
|
+
ruleset: ['[Gen 6] NU'],
|
|
2461
|
+
banlist: ['NU', 'PUBL', 'Chatter'],
|
|
2387
2462
|
},
|
|
2388
2463
|
|
|
2389
2464
|
// Past Gens OU
|
|
@@ -2449,7 +2524,7 @@ export const Formats: FormatList = [
|
|
|
2449
2524
|
|
|
2450
2525
|
mod: 'gen3',
|
|
2451
2526
|
ruleset: ['Standard', 'One Boost Passer Clause'],
|
|
2452
|
-
banlist: ['Uber', 'Sand Veil', 'Assist', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'],
|
|
2527
|
+
banlist: ['Uber', 'Sand Veil', 'Soundproof', 'Assist', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'],
|
|
2453
2528
|
},
|
|
2454
2529
|
{
|
|
2455
2530
|
name: "[Gen 2] OU",
|
|
@@ -2676,6 +2751,23 @@ export const Formats: FormatList = [
|
|
|
2676
2751
|
ruleset: ['[Gen 7] NU'],
|
|
2677
2752
|
banlist: ['NU', 'PUBL'],
|
|
2678
2753
|
},
|
|
2754
|
+
{
|
|
2755
|
+
name: "[Gen 7] LC",
|
|
2756
|
+
threads: [
|
|
2757
|
+
`• <a href="https://www.smogon.com/dex/sm/formats/lc/">USM LC Banlist</a>`,
|
|
2758
|
+
`• <a href="https://www.smogon.com/forums/threads/3639319/">USM LC Sample Teams</a>`,
|
|
2759
|
+
`• <a href="https://www.smogon.com/forums/threads/3621440/">USM LC Viability Rankings</a>`,
|
|
2760
|
+
],
|
|
2761
|
+
|
|
2762
|
+
mod: 'gen7',
|
|
2763
|
+
searchShow: false,
|
|
2764
|
+
ruleset: ['Little Cup', 'Standard', 'Swagger Clause'],
|
|
2765
|
+
banlist: [
|
|
2766
|
+
'Aipom', 'Cutiefly', 'Drifloon', 'Gligar', 'Gothita', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon',
|
|
2767
|
+
'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Trapinch', 'Vulpix-Base', 'Wingull', 'Yanma',
|
|
2768
|
+
'Eevium Z', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Sticky Web',
|
|
2769
|
+
],
|
|
2770
|
+
},
|
|
2679
2771
|
{
|
|
2680
2772
|
name: "[Gen 7] Monotype",
|
|
2681
2773
|
desc: `All the Pokémon on a team must share a type.`,
|
|
@@ -2963,18 +3055,6 @@ export const Formats: FormatList = [
|
|
|
2963
3055
|
ruleset: ['[Gen 6] RU'],
|
|
2964
3056
|
banlist: ['RU', 'NUBL'],
|
|
2965
3057
|
},
|
|
2966
|
-
{
|
|
2967
|
-
name: "[Gen 6] PU",
|
|
2968
|
-
threads: [
|
|
2969
|
-
`• <a href="https://www.smogon.com/dex/xy/tags/pu/">ORAS PU Banlist</a>`,
|
|
2970
|
-
`• <a href="https://www.smogon.com/forums/threads/3528743/">ORAS PU Viability Rankings</a>`,
|
|
2971
|
-
],
|
|
2972
|
-
|
|
2973
|
-
mod: 'gen6',
|
|
2974
|
-
searchShow: false,
|
|
2975
|
-
ruleset: ['[Gen 6] NU'],
|
|
2976
|
-
banlist: ['NU', 'PUBL', 'Chatter'],
|
|
2977
|
-
},
|
|
2978
3058
|
{
|
|
2979
3059
|
name: "[Gen 6] LC",
|
|
2980
3060
|
threads: [
|
|
@@ -3203,18 +3283,6 @@ export const Formats: FormatList = [
|
|
|
3203
3283
|
searchShow: false,
|
|
3204
3284
|
ruleset: ['Standard', 'Sleep Clause Mod'],
|
|
3205
3285
|
},
|
|
3206
|
-
{
|
|
3207
|
-
name: "[Gen 5] UU",
|
|
3208
|
-
threads: [
|
|
3209
|
-
`• <a href="https://www.smogon.com/forums/threads/3474024/">BW2 UU Viability Rankings</a>`,
|
|
3210
|
-
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
3211
|
-
],
|
|
3212
|
-
|
|
3213
|
-
mod: 'gen5',
|
|
3214
|
-
searchShow: false,
|
|
3215
|
-
ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
3216
|
-
banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
3217
|
-
},
|
|
3218
3286
|
{
|
|
3219
3287
|
name: "[Gen 5] RU",
|
|
3220
3288
|
threads: [
|
|
@@ -3229,16 +3297,15 @@ export const Formats: FormatList = [
|
|
|
3229
3297
|
unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
3230
3298
|
},
|
|
3231
3299
|
{
|
|
3232
|
-
name: "[Gen 5]
|
|
3300
|
+
name: "[Gen 5] PU",
|
|
3233
3301
|
threads: [
|
|
3234
|
-
`• <a href="https://www.smogon.com/forums/posts/
|
|
3235
|
-
`• <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
|
|
3302
|
+
`• <a href="https://www.smogon.com/forums/posts/7326932/">BW2 PU</a>`,
|
|
3236
3303
|
],
|
|
3237
3304
|
|
|
3238
3305
|
mod: 'gen5',
|
|
3239
3306
|
searchShow: false,
|
|
3240
|
-
ruleset: ['[Gen 5]
|
|
3241
|
-
banlist: ['
|
|
3307
|
+
ruleset: ['[Gen 5] NU', 'Sleep Moves Clause'],
|
|
3308
|
+
banlist: ['NU', 'PUBL'],
|
|
3242
3309
|
},
|
|
3243
3310
|
{
|
|
3244
3311
|
name: "[Gen 5] LC",
|
|
@@ -3329,7 +3396,7 @@ export const Formats: FormatList = [
|
|
|
3329
3396
|
gameType: 'doubles',
|
|
3330
3397
|
searchShow: false,
|
|
3331
3398
|
ruleset: ['Flat Rules'],
|
|
3332
|
-
banlist: ['Dark Void', 'Sky Drop', 'Soul Dew'],
|
|
3399
|
+
banlist: ['Chatot', 'Dark Void', 'Sky Drop', 'Soul Dew'],
|
|
3333
3400
|
},
|
|
3334
3401
|
{
|
|
3335
3402
|
name: "[Gen 5] VGC 2012",
|
|
@@ -3390,6 +3457,19 @@ export const Formats: FormatList = [
|
|
|
3390
3457
|
ruleset: ['Standard'],
|
|
3391
3458
|
banlist: ['AG'],
|
|
3392
3459
|
},
|
|
3460
|
+
{
|
|
3461
|
+
name: "[Gen 4] UU",
|
|
3462
|
+
threads: [
|
|
3463
|
+
`• <a href="https://www.smogon.com/forums/threads/3532624/">DPP UU Metagame Discussion</a>`,
|
|
3464
|
+
`• <a href="https://www.smogon.com/forums/threads/3503638/">DPP UU Viability Rankings</a>`,
|
|
3465
|
+
],
|
|
3466
|
+
|
|
3467
|
+
mod: 'gen4',
|
|
3468
|
+
searchShow: false,
|
|
3469
|
+
ruleset: ['[Gen 4] OU'],
|
|
3470
|
+
banlist: ['OU', 'UUBL'],
|
|
3471
|
+
unbanlist: ['Arena Trap', 'Swagger'],
|
|
3472
|
+
},
|
|
3393
3473
|
{
|
|
3394
3474
|
name: "[Gen 4] NU",
|
|
3395
3475
|
threads: [
|
|
@@ -3504,7 +3584,7 @@ export const Formats: FormatList = [
|
|
|
3504
3584
|
gameType: 'doubles',
|
|
3505
3585
|
searchShow: false,
|
|
3506
3586
|
ruleset: ['Flat Rules', '! Adjust Level Down', 'Max Level = 50', 'Max Team Size = 4'],
|
|
3507
|
-
banlist: ['
|
|
3587
|
+
banlist: ['Tyranitar', 'Rotom', 'Judgment', 'Soul Dew'],
|
|
3508
3588
|
},
|
|
3509
3589
|
{
|
|
3510
3590
|
name: "[Gen 4] Doubles Custom Game",
|
|
@@ -3547,7 +3627,7 @@ export const Formats: FormatList = [
|
|
|
3547
3627
|
searchShow: false,
|
|
3548
3628
|
ruleset: ['Standard', 'NFE Clause'],
|
|
3549
3629
|
banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Baton Pass'],
|
|
3550
|
-
unbanlist: ['Scyther'
|
|
3630
|
+
unbanlist: ['Scyther'],
|
|
3551
3631
|
},
|
|
3552
3632
|
{
|
|
3553
3633
|
name: "[Gen 3] NU",
|