@pkmn/sim 0.5.22 → 0.5.25
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/LICENSE +1 -1
- package/build/config/formats.js +581 -481
- package/build/config/formats.js.map +1 -1
- package/build/data/aliases.js +9 -5
- package/build/data/aliases.js.map +1 -1
- package/build/data/conditions.js +1 -1
- package/build/data/conditions.js.map +1 -1
- package/build/data/formats-data.js +830 -28
- package/build/data/formats-data.js.map +1 -1
- package/build/data/learnsets.js +64 -39
- package/build/data/learnsets.js.map +1 -1
- package/build/data/mods/gen1/formats-data.js +1 -1
- package/build/data/mods/gen1/formats-data.js.map +1 -1
- package/build/data/mods/gen1/moves.js +5 -0
- package/build/data/mods/gen1/moves.js.map +1 -1
- package/build/data/mods/gen1/scripts.js +4 -2
- package/build/data/mods/gen1/scripts.js.map +1 -1
- package/build/data/mods/gen2/moves.js +0 -5
- package/build/data/mods/gen2/moves.js.map +1 -1
- package/build/data/mods/gen2/rulesets.js +7 -1
- package/build/data/mods/gen2/rulesets.js.map +1 -1
- package/build/data/mods/gen3/formats-data.js +3 -3
- package/build/data/mods/gen3/formats-data.js.map +1 -1
- package/build/data/mods/gen3/rulesets.js +1 -1
- package/build/data/mods/gen3/rulesets.js.map +1 -1
- package/build/data/mods/gen4/rulesets.js +1 -1
- package/build/data/mods/gen4/rulesets.js.map +1 -1
- package/build/data/mods/gen5/rulesets.js +1 -1
- package/build/data/mods/gen5/rulesets.js.map +1 -1
- package/build/data/mods/gen6/formats-data.js +64 -64
- package/build/data/mods/gen6/formats-data.js.map +1 -1
- package/build/data/mods/gen7/rulesets.js +1 -1
- package/build/data/mods/gen7/rulesets.js.map +1 -1
- package/build/data/pokedex.js +1 -1
- package/build/data/rulesets.js +232 -3
- package/build/data/rulesets.js.map +1 -1
- package/build/data/tags.js +26 -9
- package/build/data/tags.js.map +1 -1
- package/build/lib/utils.d.ts +4 -0
- package/build/lib/utils.js +20 -1
- package/build/lib/utils.js.map +1 -1
- package/build/sim/battle-stream.js +3 -0
- package/build/sim/battle-stream.js.map +1 -1
- package/build/sim/battle.d.ts +1 -1
- package/build/sim/battle.js.map +1 -1
- package/build/sim/dex-conditions.d.ts +1 -0
- package/build/sim/dex-conditions.js.map +1 -1
- package/build/sim/dex-species.d.ts +5 -0
- package/build/sim/dex-species.js +11 -3
- package/build/sim/dex-species.js.map +1 -1
- package/build/sim/exported-global-types.d.ts +4 -0
- package/build/sim/global-types.d.ts +4 -0
- package/build/sim/pokemon.d.ts +1 -0
- package/build/sim/pokemon.js +1 -0
- package/build/sim/pokemon.js.map +1 -1
- package/build/sim/team-validator.js +5 -1
- package/build/sim/team-validator.js.map +1 -1
- package/config/formats.ts +575 -466
- package/data/aliases.ts +9 -5
- package/data/conditions.ts +1 -1
- package/data/formats-data.ts +830 -28
- package/data/learnsets.ts +64 -39
- package/data/mods/gen1/formats-data.ts +1 -1
- package/data/mods/gen1/moves.ts +5 -0
- package/data/mods/gen1/scripts.ts +3 -2
- package/data/mods/gen2/moves.ts +0 -5
- package/data/mods/gen2/rulesets.ts +8 -1
- package/data/mods/gen3/formats-data.ts +3 -3
- package/data/mods/gen3/rulesets.ts +1 -1
- package/data/mods/gen4/rulesets.ts +1 -1
- package/data/mods/gen5/rulesets.ts +1 -1
- package/data/mods/gen6/formats-data.ts +64 -64
- package/data/mods/gen7/rulesets.ts +1 -1
- package/data/pokedex.ts +1 -1
- package/data/rulesets.ts +212 -3
- package/data/tags.ts +27 -9
- package/lib/utils.ts +16 -0
- package/package.json +2 -2
- package/sim/battle-stream.ts +3 -0
- package/sim/battle.ts +1 -1
- package/sim/dex-conditions.ts +1 -0
- package/sim/dex-species.ts +15 -3
- package/sim/exported-global-types.ts +4 -0
- package/sim/global-types.ts +4 -0
- package/sim/pokemon.ts +2 -0
- package/sim/team-validator.ts +6 -1
package/build/config/formats.js
CHANGED
|
@@ -80,10 +80,7 @@ exports.Formats = [
|
|
|
80
80
|
],
|
|
81
81
|
mod: 'gen8',
|
|
82
82
|
ruleset: ['Standard', 'Dynamax Clause'],
|
|
83
|
-
banlist: [
|
|
84
|
-
'Uber', 'AG', 'Arena Trap', 'Moody', 'Power Construct', 'Sand Veil', 'Shadow Tag', 'Snow Cloak',
|
|
85
|
-
'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Baton Pass',
|
|
86
|
-
],
|
|
83
|
+
banlist: ['Uber', 'AG', 'Arena Trap', 'Moody', 'Power Construct', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'King\'s Rock', 'Baton Pass'],
|
|
87
84
|
},
|
|
88
85
|
{
|
|
89
86
|
name: "[Gen 8] OU (Blitz)",
|
|
@@ -154,8 +151,8 @@ exports.Formats = [
|
|
|
154
151
|
mod: 'gen8',
|
|
155
152
|
ruleset: ['Little Cup', 'Standard', 'Dynamax Clause'],
|
|
156
153
|
banlist: [
|
|
157
|
-
'Corsola-Galar', 'Cutiefly', 'Drifloon', 'Gastly', 'Gothita', 'Rufflet', 'Scraggy', 'Scyther', 'Sneasel', 'Swirlix',
|
|
158
|
-
'Chlorophyll', 'Moody', 'Baton Pass', 'Sticky Web',
|
|
154
|
+
'Corsola-Galar', 'Cutiefly', 'Drifloon', 'Gastly', 'Gothita', 'Rufflet', 'Scraggy', 'Scyther', 'Sneasel', 'Swirlix',
|
|
155
|
+
'Tangela', 'Vullaby', 'Vulpix-Alola', 'Woobat', 'Zigzagoon-Base', 'Chlorophyll', 'Moody', 'Baton Pass', 'Sticky Web',
|
|
159
156
|
],
|
|
160
157
|
},
|
|
161
158
|
{
|
|
@@ -172,8 +169,8 @@ exports.Formats = [
|
|
|
172
169
|
'Blaziken', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh',
|
|
173
170
|
'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel',
|
|
174
171
|
'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal',
|
|
175
|
-
'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Moody', 'Power Construct', 'Shadow Tag', '
|
|
176
|
-
'
|
|
172
|
+
'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Moody', 'Power Construct', 'Shadow Tag', 'Damp Rock',
|
|
173
|
+
'Focus Band', 'King\'s Rock', 'Quick Claw', 'Smooth Rock', 'Terrain Extender', 'Acupressure', 'Baton Pass',
|
|
177
174
|
],
|
|
178
175
|
},
|
|
179
176
|
{
|
|
@@ -218,8 +215,9 @@ exports.Formats = [
|
|
|
218
215
|
mod: 'gen8',
|
|
219
216
|
ruleset: ['[Gen 8] PU'],
|
|
220
217
|
banlist: [
|
|
221
|
-
'PU', 'Arctovish', 'Aurorus', 'Basculin', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Haunter', 'Magmortar', 'Magneton',
|
|
222
|
-
'Omastar', 'Rotom-Frost', 'Turtonator', 'Vanilluxe', 'Vikavolt', 'Silvally-Dragon', 'Silvally-Ground', 'Sneasel',
|
|
218
|
+
'PU', 'Arctovish', 'Aurorus', 'Basculin', 'Centiskorch', 'Drampa', 'Exeggutor-Alola', 'Gallade', 'Haunter', 'Magmortar', 'Magneton',
|
|
219
|
+
'Malamar', 'Ninjask', 'Omastar', 'Rotom-Frost', 'Turtonator', 'Vanilluxe', 'Vikavolt', 'Silvally-Dragon', 'Silvally-Ground', 'Sneasel',
|
|
220
|
+
'Damp Rock', 'Grassy Seed',
|
|
223
221
|
],
|
|
224
222
|
},
|
|
225
223
|
{
|
|
@@ -265,8 +263,19 @@ exports.Formats = [
|
|
|
265
263
|
{
|
|
266
264
|
name: "[Gen 8] Battle Stadium Singles",
|
|
267
265
|
mod: 'gen8',
|
|
268
|
-
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'
|
|
269
|
-
|
|
266
|
+
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
|
|
267
|
+
banlist: ['Eternatus-Eternamax'],
|
|
268
|
+
unbanlist: ['Mythical', 'Restricted Legendary'],
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
name: "[Gen 8] I Choose 'Chu!",
|
|
272
|
+
threads: [
|
|
273
|
+
`• <a href="https://www.smogon.com/forums/threads/3705481/">I Choose 'Chu! Discussion</a>`,
|
|
274
|
+
],
|
|
275
|
+
mod: 'gen8',
|
|
276
|
+
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8'],
|
|
277
|
+
banlist: ['All Pokemon', 'Raichu-Alola + Sing'],
|
|
278
|
+
unbanlist: ['Pichu', 'Pikachu', 'Raichu'],
|
|
270
279
|
},
|
|
271
280
|
{
|
|
272
281
|
name: "[Gen 8] Custom Game",
|
|
@@ -344,6 +353,20 @@ exports.Formats = [
|
|
|
344
353
|
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit Two Restricted'],
|
|
345
354
|
restricted: ['Restricted Legendary'],
|
|
346
355
|
},
|
|
356
|
+
{
|
|
357
|
+
name: "[Gen 8] Battle Stadium Doubles Series 13",
|
|
358
|
+
mod: 'gen8',
|
|
359
|
+
gameType: 'doubles',
|
|
360
|
+
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer'],
|
|
361
|
+
banlist: ['Eternatus-Eternamax'],
|
|
362
|
+
unbanlist: ['Mythical', 'Restricted Legendary'],
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
name: "[Gen 8] Spikemuth Cup",
|
|
366
|
+
mod: 'gen8',
|
|
367
|
+
gameType: 'doubles',
|
|
368
|
+
ruleset: ['Flat Rules', 'Dynamax Clause', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer'],
|
|
369
|
+
},
|
|
347
370
|
{
|
|
348
371
|
name: "[Gen 8] VGC 2021",
|
|
349
372
|
mod: 'gen8',
|
|
@@ -418,17 +441,6 @@ exports.Formats = [
|
|
|
418
441
|
}
|
|
419
442
|
},
|
|
420
443
|
},
|
|
421
|
-
{
|
|
422
|
-
name: "[Gen 8] Jump! Magikarp!",
|
|
423
|
-
desc: `Every team must contain Magikarp and bring it to the game.`,
|
|
424
|
-
threads: [
|
|
425
|
-
`• <a href="https://www.smogon.com/forums/threads/3704588/">Jump! Magikarp!</a>`,
|
|
426
|
-
],
|
|
427
|
-
mod: 'gen8',
|
|
428
|
-
gameType: 'doubles',
|
|
429
|
-
ruleset: ['Flat Rules', '!! Picked Team Size = 2', '!! Adjust Level = 50', 'Min Source Gen = 8', 'Force Select = Magikarp'],
|
|
430
|
-
banlist: ['Sub-Legendary'],
|
|
431
|
-
},
|
|
432
444
|
{
|
|
433
445
|
name: "[Gen 8] Doubles Custom Game",
|
|
434
446
|
mod: 'gen8',
|
|
@@ -453,17 +465,7 @@ exports.Formats = [
|
|
|
453
465
|
],
|
|
454
466
|
mod: 'gen8',
|
|
455
467
|
ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
|
|
456
|
-
banlist: [
|
|
457
|
-
'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darkrai',
|
|
458
|
-
'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus',
|
|
459
|
-
'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black',
|
|
460
|
-
'Kyurem-White', 'Landorus-Base', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Metagross-Mega', 'Mewtwo',
|
|
461
|
-
'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
|
|
462
|
-
'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian',
|
|
463
|
-
'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Zygarde-Complete', 'Arena Trap', 'Moody',
|
|
464
|
-
'Power Construct', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Razor Fang',
|
|
465
|
-
'Quick Claw', 'Baton Pass',
|
|
466
|
-
],
|
|
468
|
+
banlist: ['ND Uber', 'Arena Trap', 'Moody', 'Power Construct', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Razor Fang', 'Quick Claw', 'Baton Pass'],
|
|
467
469
|
},
|
|
468
470
|
{
|
|
469
471
|
name: "[Gen 8] National Dex UU",
|
|
@@ -474,25 +476,17 @@ exports.Formats = [
|
|
|
474
476
|
],
|
|
475
477
|
mod: 'gen8',
|
|
476
478
|
ruleset: ['[Gen 8] National Dex'],
|
|
477
|
-
banlist: [
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
'ND UUBL',
|
|
484
|
-
'Drizzle', 'Drought', 'Light Clay',
|
|
485
|
-
// Slowbronite is banned so it doesn't validate on Galarian Slowbro
|
|
486
|
-
'Slowbronite',
|
|
487
|
-
],
|
|
488
|
-
// Used to distinguish UU from below UU in the client
|
|
489
|
-
restricted: [
|
|
490
|
-
'Aegislash', 'Altaria-Mega', 'Amoonguss', 'Azumarill', 'Beedrill-Mega', 'Breloom', 'Celesteela', 'Chandelure', 'Donphan', 'Dracozolt',
|
|
491
|
-
'Dragonite', 'Feraligatr', 'Gastrodon', 'Hatterene', 'Hippowdon', 'Infernape', 'Keldeo', 'Krookodile', 'Mamoswine', 'Mandibuzz',
|
|
492
|
-
'Manectric-Mega', 'Melmetal', 'Mienshao', 'Moltres-Base', 'Nidoking', 'Nidoqueen', 'Nihilego', 'Quagsire', 'Regieleki', 'Ribombee',
|
|
493
|
-
'Rotom-Heat', 'Rotom-Wash', 'Salamence', 'Scizor', 'Skarmory', 'Slowking-Base', 'Swampert-Base', 'Talonflame', 'Tangrowth', 'Tornadus-Base',
|
|
494
|
-
'Umbreon', 'Urshifu-Rapid-Strike',
|
|
479
|
+
banlist: ['ND OU', 'ND UUBL', 'Drizzle', 'Drought', 'Light Clay', 'Slowbronite'],
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
name: "[Gen 8] National Dex RU",
|
|
483
|
+
threads: [
|
|
484
|
+
`• <a href="https://www.smogon.com/forums/threads/3691290/">National Dex RU</a>`,
|
|
495
485
|
],
|
|
486
|
+
mod: 'gen8',
|
|
487
|
+
searchShow: false,
|
|
488
|
+
ruleset: ['[Gen 8] National Dex UU'],
|
|
489
|
+
banlist: ['ND UU', 'ND RUBL'],
|
|
496
490
|
},
|
|
497
491
|
{
|
|
498
492
|
name: "[Gen 8] National Dex Monotype",
|
|
@@ -527,41 +521,57 @@ exports.Formats = [
|
|
|
527
521
|
section: "Pet Mods",
|
|
528
522
|
},
|
|
529
523
|
{
|
|
530
|
-
name: "[Gen 8]
|
|
531
|
-
desc: `
|
|
524
|
+
name: "[Gen 8] National Dex BH",
|
|
525
|
+
desc: `Balanced Hackmons with National Dex elements mixed in.`,
|
|
532
526
|
threads: [
|
|
533
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
534
|
-
`• <a href="https://docs.google.com/spreadsheets/d/1XsplBqN8njHZJT9cTP_3i3YSFITB9WaVfNOYAbNY75M/edit?usp=sharing">Spreadsheet</a>`,
|
|
527
|
+
`• <a href="https://www.smogon.com/forums/threads/3658587/">National Dex Balanced Hackmons</a>`,
|
|
535
528
|
],
|
|
536
|
-
mod: '
|
|
537
|
-
ruleset: ['Standard', 'Dynamax Clause'],
|
|
538
|
-
banlist: [
|
|
539
|
-
|
|
540
|
-
'
|
|
541
|
-
|
|
542
|
-
'
|
|
543
|
-
|
|
544
|
-
'
|
|
529
|
+
mod: 'gen8',
|
|
530
|
+
ruleset: ['-Nonexistent', 'Standard NatDex', 'Forme Clause', 'Sleep Moves Clause', '2 Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', '!Obtainable'],
|
|
531
|
+
banlist: [
|
|
532
|
+
// Pokemon
|
|
533
|
+
'Eternatus-Eternamax', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Cramorant-Gorging', 'Calyrex-Shadow',
|
|
534
|
+
// Abilities
|
|
535
|
+
'Arena Trap', 'Contrary', 'Gorilla Tactics', 'Huge Power', 'Illusion', 'Innards Out', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard',
|
|
536
|
+
// Items
|
|
537
|
+
'Gengarite',
|
|
538
|
+
// Moves
|
|
539
|
+
'Chatter', 'Double Iron Bash', 'Octolock', 'Shell Smash', 'Bolt Beak', 'Belly Drum', 'Electrify', 'Court Change',
|
|
540
|
+
// Other
|
|
541
|
+
'Comatose + Sleep Talk', 'Imprison + Transform',
|
|
545
542
|
],
|
|
543
|
+
onValidateSet(set) {
|
|
544
|
+
if (this.toID(set.ability) === 'intrepidsword' &&
|
|
545
|
+
!this.toID(set.species).startsWith('zacian') && this.toID(set.item) !== 'rustedsword') {
|
|
546
|
+
return [`${set.ability} is banned.`];
|
|
547
|
+
}
|
|
548
|
+
if (set.species === 'Zacian-Crowned' &&
|
|
549
|
+
(this.toID(set.item) !== 'rustedsword' || this.toID(set.ability) !== 'intrepidsword')) {
|
|
550
|
+
return [`${set.species} is banned.`];
|
|
551
|
+
}
|
|
552
|
+
},
|
|
553
|
+
onValidateTeam(team) {
|
|
554
|
+
let arceus = 0;
|
|
555
|
+
for (const set of team) {
|
|
556
|
+
const species = this.dex.species.get(set.species);
|
|
557
|
+
if (species.baseSpecies === "Arceus")
|
|
558
|
+
arceus++;
|
|
559
|
+
}
|
|
560
|
+
if (arceus > 1) {
|
|
561
|
+
return [`You are limited to one Arceus forme.`, `(You have ${arceus} Arceus formes.)`];
|
|
562
|
+
}
|
|
563
|
+
},
|
|
546
564
|
},
|
|
547
565
|
{
|
|
548
|
-
name: "[Gen 8]
|
|
566
|
+
name: "[Gen 8] JolteMons Random Battle",
|
|
567
|
+
desc: `Pokémon, items, abilities, and moves are redesigned for OU, and new items, abilities, and moves are added, all without changing base stats.`,
|
|
549
568
|
threads: [
|
|
550
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
551
|
-
`• <a href="https://docs.google.com/spreadsheets/d/
|
|
569
|
+
`• <a href="https://www.smogon.com/forums/threads/3694234/">JolteMons</a>`,
|
|
570
|
+
`• <a href="https://docs.google.com/spreadsheets/d/149ZlQY0bJIAqfWB_233Dvbpqs3pVSHYpIoAQQkwquls/edit?usp=sharing">Spreadsheet</a>`,
|
|
552
571
|
],
|
|
572
|
+
mod: 'joltemons',
|
|
553
573
|
team: 'random',
|
|
554
|
-
|
|
555
|
-
ruleset: ['Standard NatDex'],
|
|
556
|
-
onSwitchIn(pokemon) {
|
|
557
|
-
this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
|
|
558
|
-
},
|
|
559
|
-
onChangeSet(set) {
|
|
560
|
-
if (set.species === 'Chillyte-Mega') {
|
|
561
|
-
set.species = 'Chillyte';
|
|
562
|
-
set.ability = 'Grassy Surge';
|
|
563
|
-
}
|
|
564
|
-
},
|
|
574
|
+
ruleset: ['Dynamax Clause', 'Obtainable', 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Mega Data Mod', 'Z-Move Clause'],
|
|
565
575
|
},
|
|
566
576
|
{
|
|
567
577
|
name: "[Gen 6] NEXT OU",
|
|
@@ -581,272 +591,118 @@ exports.Formats = [
|
|
|
581
591
|
column: 2,
|
|
582
592
|
},
|
|
583
593
|
{
|
|
584
|
-
name: "[Gen 8]
|
|
585
|
-
desc: `
|
|
594
|
+
name: "[Gen 8] Partners in Crime",
|
|
595
|
+
desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`,
|
|
586
596
|
threads: [
|
|
587
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
597
|
+
`• <a href="https://www.smogon.com/forums/threads/3706080/">Partners in Crime</a>`,
|
|
588
598
|
],
|
|
589
|
-
mod: '
|
|
590
|
-
|
|
599
|
+
mod: 'partnersincrime',
|
|
600
|
+
gameType: 'doubles',
|
|
601
|
+
// searchShow: false,
|
|
602
|
+
ruleset: ['Standard Doubles', 'Dynamax Clause'],
|
|
591
603
|
banlist: [
|
|
592
|
-
'Calyrex-Ice', 'Calyrex-Shadow', '
|
|
593
|
-
'
|
|
594
|
-
'
|
|
595
|
-
'
|
|
596
|
-
'Zamazenta
|
|
597
|
-
'
|
|
604
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Eternatus', 'Giratina', 'Giratina-Origin',
|
|
605
|
+
'Groudon', 'Ho-Oh', 'Jirachi', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna',
|
|
606
|
+
'Marshadow', 'Melmetal', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
607
|
+
'Rayquaza', 'Reshiram', 'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
608
|
+
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Bolt Beak', 'Fishious Rend', 'Shell Smash',
|
|
609
|
+
'Emergency Exit', 'Huge Power', 'Moody', 'Power Construct', 'Shadow Tag', 'Wimp Out', 'Wonder Guard',
|
|
598
610
|
],
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
const
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
return [
|
|
608
|
-
`${set.species} can't run ${item.name} (${moveName}) as its item because it already has that move in its moveset.`,
|
|
609
|
-
];
|
|
611
|
+
onBeforeSwitchIn(pokemon) {
|
|
612
|
+
pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
|
|
613
|
+
let ngas = false;
|
|
614
|
+
for (const poke of this.getAllActive()) {
|
|
615
|
+
if (this.toID(poke.ability) === 'neutralizinggas') {
|
|
616
|
+
ngas = true;
|
|
617
|
+
break;
|
|
618
|
+
}
|
|
610
619
|
}
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
if (
|
|
621
|
-
|
|
620
|
+
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
621
|
+
// Abilities that must be applied before both sides trigger onSwitchIn to correctly
|
|
622
|
+
// handle switch-in ability-to-ability interactions, e.g. Intimidate counters
|
|
623
|
+
const NEEDED_BEFORE_SWITCH_IN_ABILITIES = [
|
|
624
|
+
'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
|
|
625
|
+
'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
|
|
626
|
+
];
|
|
627
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
628
|
+
if (ally && ally.ability !== pokemon.ability) {
|
|
629
|
+
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability)) &&
|
|
630
|
+
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(ally.ability))) {
|
|
631
|
+
pokemon.m.innate = 'ability:' + ally.ability;
|
|
632
|
+
delete pokemon.volatiles[pokemon.m.innate];
|
|
633
|
+
if (!ngas || ally.getAbility().isPermanent)
|
|
634
|
+
pokemon.addVolatile(pokemon.m.innate);
|
|
635
|
+
}
|
|
636
|
+
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability)) &&
|
|
637
|
+
NEEDED_BEFORE_SWITCH_IN_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
638
|
+
ally.m.innate = 'ability:' + pokemon.ability;
|
|
639
|
+
delete ally.volatiles[ally.m.innate];
|
|
640
|
+
if (!ngas || pokemon.getAbility().isPermanent)
|
|
641
|
+
ally.addVolatile(ally.m.innate);
|
|
622
642
|
}
|
|
623
|
-
trs.add(item);
|
|
624
643
|
}
|
|
625
644
|
},
|
|
626
|
-
|
|
627
|
-
|
|
645
|
+
onSwitchInPriority: 2,
|
|
646
|
+
onSwitchIn(pokemon) {
|
|
647
|
+
let ngas = false;
|
|
648
|
+
for (const poke of this.getAllActive()) {
|
|
649
|
+
if (this.toID(poke.ability) === 'neutralizinggas') {
|
|
650
|
+
ngas = true;
|
|
651
|
+
break;
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas'];
|
|
655
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
656
|
+
if (ally && ally.ability !== pokemon.ability) {
|
|
657
|
+
if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
|
|
658
|
+
pokemon.m.innate = 'ability:' + ally.ability;
|
|
659
|
+
delete pokemon.volatiles[pokemon.m.innate];
|
|
660
|
+
if (!ngas || ally.getAbility().isPermanent)
|
|
661
|
+
pokemon.addVolatile(pokemon.m.innate);
|
|
662
|
+
}
|
|
663
|
+
if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
|
|
664
|
+
ally.m.innate = 'ability:' + pokemon.ability;
|
|
665
|
+
delete ally.volatiles[ally.m.innate];
|
|
666
|
+
if (!ngas || pokemon.getAbility().isPermanent)
|
|
667
|
+
ally.addVolatile(ally.m.innate);
|
|
668
|
+
}
|
|
669
|
+
}
|
|
628
670
|
},
|
|
629
|
-
|
|
630
|
-
if (
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
}
|
|
639
|
-
};
|
|
671
|
+
onSwitchOut(pokemon) {
|
|
672
|
+
if (pokemon.m.innate) {
|
|
673
|
+
pokemon.removeVolatile(pokemon.m.innate);
|
|
674
|
+
delete pokemon.m.innate;
|
|
675
|
+
}
|
|
676
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
677
|
+
if (ally && ally.m.innate) {
|
|
678
|
+
ally.removeVolatile(ally.m.innate);
|
|
679
|
+
delete ally.m.innate;
|
|
640
680
|
}
|
|
641
681
|
},
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
pp: move.pp * 8 / 5,
|
|
652
|
-
maxpp: move.pp * 8 / 5,
|
|
653
|
-
target: move.target,
|
|
654
|
-
disabled: false,
|
|
655
|
-
disabledSource: '',
|
|
656
|
-
used: false,
|
|
657
|
-
},
|
|
658
|
-
];
|
|
659
|
-
}
|
|
682
|
+
onFaint(pokemon) {
|
|
683
|
+
if (pokemon.m.innate) {
|
|
684
|
+
pokemon.removeVolatile(pokemon.m.innate);
|
|
685
|
+
delete pokemon.m.innate;
|
|
686
|
+
}
|
|
687
|
+
const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
|
|
688
|
+
if (ally && ally.m.innate) {
|
|
689
|
+
ally.removeVolatile(ally.m.innate);
|
|
690
|
+
delete ally.m.innate;
|
|
660
691
|
}
|
|
661
692
|
},
|
|
662
693
|
},
|
|
663
694
|
{
|
|
664
|
-
name: "[Gen 8]
|
|
665
|
-
desc: `Pokémon
|
|
695
|
+
name: "[Gen 8] Chimera 1v1",
|
|
696
|
+
desc: `One Pokémon inherits specific traits from your entire 6-mon team, based on their order.`,
|
|
666
697
|
threads: [
|
|
667
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
698
|
+
`• <a href="https://www.smogon.com/forums/threads/3661215/">Chimera 1v1</a>`,
|
|
668
699
|
],
|
|
669
700
|
mod: 'gen8',
|
|
670
|
-
|
|
671
|
-
ruleset: ['Standard', '!Sleep Clause Mod', 'Sleep Moves Clause', '2 Ability Clause', 'Dynamax Clause'],
|
|
701
|
+
ruleset: ['Chimera 1v1 Rule', 'Standard', 'Dynamax Clause', 'Sleep Moves Clause'],
|
|
672
702
|
banlist: [
|
|
673
|
-
'
|
|
674
|
-
'
|
|
675
|
-
'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Natu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regieleki',
|
|
676
|
-
'Regigigas', 'Reshiram', 'Sableye', 'Shedinja', 'Solgaleo', 'Spectrier', 'Tapu Koko', 'Toxtricity', 'Torkoal', 'Urshifu-Base', 'Xatu', 'Xerneas', 'Yveltal',
|
|
677
|
-
'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zeraora', 'Zekrom', 'Arena Trap', 'Contrary', 'Drizzle', 'Huge Power', 'Imposter', 'Innards Out',
|
|
678
|
-
'Libero', 'Moody', 'Power Construct', 'Pure Power', 'Quick Draw', 'Shadow Tag', 'Sheer Force', 'Simple', 'Unaware', 'Unburden', 'Water Bubble', 'King\'s Rock',
|
|
679
|
-
'Quick Claw', 'Baton Pass', 'Bolt Beak', 'Fishious Rend', 'Shell Smash', 'Thousand Arrows',
|
|
703
|
+
'Shedinja', 'Huge Power', 'Moody', 'Neutralizing Gas', 'Truant', 'Perish Body', 'Eviolite', 'Focus Sash', 'Leek', 'Light Ball',
|
|
704
|
+
'Bolt Beak', 'Disable', 'Double Iron Bash', 'Fishious Rend', 'Perish Song', 'Switcheroo', 'Transform', 'Trick',
|
|
680
705
|
],
|
|
681
|
-
getEvoFamily(speciesid) {
|
|
682
|
-
let species = Dex.species.get(speciesid);
|
|
683
|
-
while (species.prevo) {
|
|
684
|
-
species = Dex.species.get(species.prevo);
|
|
685
|
-
}
|
|
686
|
-
return species.id;
|
|
687
|
-
},
|
|
688
|
-
validateSet(set, teamHas) {
|
|
689
|
-
const unreleased = (pokemon) => pokemon.tier === "Unreleased" && pokemon.isNonstandard === "Unobtainable";
|
|
690
|
-
if (!teamHas.abilityMap) {
|
|
691
|
-
teamHas.abilityMap = Object.create(null);
|
|
692
|
-
for (const pokemon of Dex.species.all()) {
|
|
693
|
-
if (pokemon.isNonstandard || unreleased(pokemon))
|
|
694
|
-
continue;
|
|
695
|
-
if (pokemon.requiredAbility || pokemon.requiredItem || pokemon.requiredMove)
|
|
696
|
-
continue;
|
|
697
|
-
if (this.ruleTable.isBannedSpecies(pokemon))
|
|
698
|
-
continue;
|
|
699
|
-
for (const key of Object.values(pokemon.abilities)) {
|
|
700
|
-
const abilityId = this.dex.toID(key);
|
|
701
|
-
if (abilityId in teamHas.abilityMap) {
|
|
702
|
-
teamHas.abilityMap[abilityId][pokemon.evos ? 'push' : 'unshift'](pokemon.id);
|
|
703
|
-
}
|
|
704
|
-
else {
|
|
705
|
-
teamHas.abilityMap[abilityId] = [pokemon.id];
|
|
706
|
-
}
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
const problem = this.validateForme(set);
|
|
711
|
-
if (problem.length)
|
|
712
|
-
return problem;
|
|
713
|
-
const species = this.dex.species.get(set.species);
|
|
714
|
-
if (!species.exists || species.num < 1)
|
|
715
|
-
return [`The Pok\u00e9mon "${set.species}" does not exist.`];
|
|
716
|
-
if (species.isNonstandard || unreleased(species)) {
|
|
717
|
-
return [`${species.name} is not obtainable in Generation ${this.dex.gen}.`];
|
|
718
|
-
}
|
|
719
|
-
const name = set.name;
|
|
720
|
-
if (this.ruleTable.isBannedSpecies(species)) {
|
|
721
|
-
return this.validateSet(set, teamHas);
|
|
722
|
-
}
|
|
723
|
-
const ability = this.dex.abilities.get(set.ability);
|
|
724
|
-
if (!ability.exists || ability.isNonstandard)
|
|
725
|
-
return [`${name} needs to have a valid ability.`];
|
|
726
|
-
const pokemonWithAbility = teamHas.abilityMap[ability.id];
|
|
727
|
-
if (!pokemonWithAbility)
|
|
728
|
-
return [`${ability.name} is not available on a legal Pok\u00e9mon.`];
|
|
729
|
-
this.format.debug = true;
|
|
730
|
-
if (!teamHas.abilitySources)
|
|
731
|
-
teamHas.abilitySources = Object.create(null);
|
|
732
|
-
const validSources = teamHas.abilitySources[this.dex.toID(set.species)] = []; // Evolution families
|
|
733
|
-
let canonicalSource = ''; // Specific for the basic implementation of Donor Clause (see onValidateTeam).
|
|
734
|
-
for (const donor of pokemonWithAbility) {
|
|
735
|
-
const donorSpecies = this.dex.species.get(donor);
|
|
736
|
-
let format = this.format;
|
|
737
|
-
if (!format.getEvoFamily)
|
|
738
|
-
format = this.dex.formats.get('gen8inheritance');
|
|
739
|
-
const evoFamily = format.getEvoFamily(donorSpecies.id);
|
|
740
|
-
if (validSources.includes(evoFamily))
|
|
741
|
-
continue;
|
|
742
|
-
set.species = donorSpecies.name;
|
|
743
|
-
set.name = donorSpecies.baseSpecies;
|
|
744
|
-
const problems = this.validateSet(set, teamHas) || [];
|
|
745
|
-
if (!problems.length) {
|
|
746
|
-
validSources.push(evoFamily);
|
|
747
|
-
canonicalSource = donorSpecies.name;
|
|
748
|
-
}
|
|
749
|
-
// Specific for the basic implementation of Donor Clause (see onValidateTeam).
|
|
750
|
-
if (validSources.length > 1)
|
|
751
|
-
break;
|
|
752
|
-
}
|
|
753
|
-
this.format.debug = false;
|
|
754
|
-
set.name = name;
|
|
755
|
-
set.species = species.name;
|
|
756
|
-
if (!validSources.length) {
|
|
757
|
-
if (pokemonWithAbility.length > 1)
|
|
758
|
-
return [`${name}'s set is illegal.`];
|
|
759
|
-
return [`${name} has an illegal set with an ability from ${this.dex.species.get(pokemonWithAbility[0]).name}.`];
|
|
760
|
-
}
|
|
761
|
-
// Protocol: Include the data of the donor species in the `ability` data slot.
|
|
762
|
-
// Afterwards, we are going to reset the name to what the user intended.
|
|
763
|
-
set.ability = `${set.ability}0${canonicalSource}`;
|
|
764
|
-
return null;
|
|
765
|
-
},
|
|
766
|
-
onValidateTeam(team, f, teamHas) {
|
|
767
|
-
if (this.ruleTable.has('2abilityclause')) {
|
|
768
|
-
const abilityTable = new Map();
|
|
769
|
-
const base = {
|
|
770
|
-
airlock: 'cloudnine',
|
|
771
|
-
battlearmor: 'shellarmor',
|
|
772
|
-
clearbody: 'whitesmoke',
|
|
773
|
-
dazzling: 'queenlymajesty',
|
|
774
|
-
emergencyexit: 'wimpout',
|
|
775
|
-
filter: 'solidrock',
|
|
776
|
-
gooey: 'tanglinghair',
|
|
777
|
-
insomnia: 'vitalspirit',
|
|
778
|
-
ironbarbs: 'roughskin',
|
|
779
|
-
libero: 'protean',
|
|
780
|
-
minus: 'plus',
|
|
781
|
-
moxie: 'chillingneigh',
|
|
782
|
-
powerofalchemy: 'receiver',
|
|
783
|
-
propellertail: 'stalwart',
|
|
784
|
-
teravolt: 'moldbreaker',
|
|
785
|
-
turboblaze: 'moldbreaker',
|
|
786
|
-
};
|
|
787
|
-
for (const set of team) {
|
|
788
|
-
let ability = this.toID(set.ability.split('0')[0]);
|
|
789
|
-
if (!ability)
|
|
790
|
-
continue;
|
|
791
|
-
if (ability in base)
|
|
792
|
-
ability = base[ability];
|
|
793
|
-
if ((abilityTable.get(ability) || 0) >= 2) {
|
|
794
|
-
return [
|
|
795
|
-
`You are limited to two of each ability by 2 Ability Clause.`,
|
|
796
|
-
`(You have more than two ${this.dex.abilities.get(ability).name} variants)`,
|
|
797
|
-
];
|
|
798
|
-
}
|
|
799
|
-
abilityTable.set(ability, (abilityTable.get(ability) || 0) + 1);
|
|
800
|
-
}
|
|
801
|
-
}
|
|
802
|
-
// Donor Clause
|
|
803
|
-
const evoFamilyLists = [];
|
|
804
|
-
for (const set of team) {
|
|
805
|
-
const abilitySources = teamHas.abilitySources?.[this.dex.toID(set.species)];
|
|
806
|
-
if (!abilitySources)
|
|
807
|
-
continue;
|
|
808
|
-
let format = this.format;
|
|
809
|
-
if (!format.getEvoFamily)
|
|
810
|
-
format = this.dex.formats.get('gen8inheritance');
|
|
811
|
-
evoFamilyLists.push(abilitySources.map(format.getEvoFamily));
|
|
812
|
-
}
|
|
813
|
-
// Checking actual full incompatibility would require expensive algebra.
|
|
814
|
-
// Instead, we only check the trivial case of multiple Pokémon only legal for exactly one family. FIXME?
|
|
815
|
-
const requiredFamilies = Object.create(null);
|
|
816
|
-
for (const evoFamilies of evoFamilyLists) {
|
|
817
|
-
if (evoFamilies.length !== 1)
|
|
818
|
-
continue;
|
|
819
|
-
const [familyId] = evoFamilies;
|
|
820
|
-
if (!(familyId in requiredFamilies))
|
|
821
|
-
requiredFamilies[familyId] = 1;
|
|
822
|
-
requiredFamilies[familyId]++;
|
|
823
|
-
if (requiredFamilies[familyId] > 2) {
|
|
824
|
-
return [
|
|
825
|
-
`You are limited to up to two inheritances from each evolution family by the Donor Clause.`,
|
|
826
|
-
`(You inherit more than twice from ${this.dex.species.get(familyId).name}).`,
|
|
827
|
-
];
|
|
828
|
-
}
|
|
829
|
-
}
|
|
830
|
-
},
|
|
831
|
-
onBegin() {
|
|
832
|
-
for (const pokemon of this.getAllPokemon()) {
|
|
833
|
-
if (pokemon.baseAbility.includes('0')) {
|
|
834
|
-
const donor = pokemon.baseAbility.split('0')[1];
|
|
835
|
-
pokemon.m.donor = this.toID(donor);
|
|
836
|
-
pokemon.baseAbility = this.toID(pokemon.baseAbility.split('0')[0]);
|
|
837
|
-
pokemon.ability = pokemon.baseAbility;
|
|
838
|
-
}
|
|
839
|
-
}
|
|
840
|
-
},
|
|
841
|
-
onSwitchIn(pokemon) {
|
|
842
|
-
if (!pokemon.m.donor)
|
|
843
|
-
return;
|
|
844
|
-
const donorTemplate = this.dex.species.get(pokemon.m.donor);
|
|
845
|
-
if (!donorTemplate.exists)
|
|
846
|
-
return;
|
|
847
|
-
// Place volatiles on the Pokémon to show the donor details.
|
|
848
|
-
this.add('-start', pokemon, donorTemplate.name, '[silent]');
|
|
849
|
-
},
|
|
850
706
|
},
|
|
851
707
|
// Other Metagames
|
|
852
708
|
///////////////////////////////////////////////////////////////////
|
|
@@ -879,16 +735,16 @@ exports.Formats = [
|
|
|
879
735
|
`• <a href="https://www.smogon.com/forums/threads/3682690/">AAA Resources</a>`,
|
|
880
736
|
],
|
|
881
737
|
mod: 'gen8',
|
|
882
|
-
ruleset: ['Standard', '!Obtainable Abilities', '2 Ability Clause', '
|
|
738
|
+
ruleset: ['Standard OMs', '!Obtainable Abilities', '2 Ability Clause', 'Sleep Moves Clause'],
|
|
883
739
|
banlist: [
|
|
884
|
-
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
|
|
885
|
-
'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', '
|
|
740
|
+
'Archeops', 'Blacephalon', 'Buzzwole', 'Calyrex-Ice', 'Calyrex-Shadow', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
|
|
741
|
+
'Gengar', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White',
|
|
886
742
|
'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern',
|
|
887
743
|
'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja', 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike',
|
|
888
|
-
'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base',
|
|
889
|
-
'
|
|
890
|
-
'
|
|
891
|
-
'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
|
|
744
|
+
'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap',
|
|
745
|
+
'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out',
|
|
746
|
+
'Intrepid Sword', 'Libero', 'Magic Bounce', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean',
|
|
747
|
+
'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
|
|
892
748
|
],
|
|
893
749
|
},
|
|
894
750
|
{
|
|
@@ -899,7 +755,7 @@ exports.Formats = [
|
|
|
899
755
|
`• <a href="https://www.smogon.com/forums/threads/3659028/">M&M Resources</a>`,
|
|
900
756
|
],
|
|
901
757
|
mod: 'mixandmega',
|
|
902
|
-
ruleset: ['Standard', '
|
|
758
|
+
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
903
759
|
banlist: [
|
|
904
760
|
'Calyrex-Shadow', 'Eternatus', 'Kyogre', 'Zacian',
|
|
905
761
|
'Beedrillite', 'Blazikenite', 'Gengarite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite',
|
|
@@ -969,7 +825,7 @@ exports.Formats = [
|
|
|
969
825
|
`• <a href="https://www.smogon.com/forums/threads/3695169/">STABmons Resources</a>`,
|
|
970
826
|
],
|
|
971
827
|
mod: 'gen8',
|
|
972
|
-
ruleset: ['Standard', 'STABmons Move Legality', '
|
|
828
|
+
ruleset: ['Standard OMs', 'STABmons Move Legality', 'Sleep Moves Clause'],
|
|
973
829
|
banlist: [
|
|
974
830
|
'Aegislash', 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
|
|
975
831
|
'Genesect', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus',
|
|
@@ -992,7 +848,7 @@ exports.Formats = [
|
|
|
992
848
|
`• <a href="https://www.smogon.com/forums/threads/3672463/">NFE Resources</a>`,
|
|
993
849
|
],
|
|
994
850
|
mod: 'gen8',
|
|
995
|
-
ruleset: ['Not Fully Evolved', '
|
|
851
|
+
ruleset: ['Standard OMs', 'Not Fully Evolved', 'Sleep Clause Mod'],
|
|
996
852
|
banlist: [
|
|
997
853
|
'Chansey', 'Doublade', 'Golbat', 'Haunter', 'Kadabra', 'Magmar', 'Magneton', 'Mr. Mime-Galar', 'Pawniard', 'Pikachu',
|
|
998
854
|
'Porygon2', 'Rhydon', 'Scyther', 'Sneasel', 'Type: Null', 'Vulpix-Base', 'Arena Trap', 'Shadow Tag', 'Baton Pass',
|
|
@@ -1005,10 +861,10 @@ exports.Formats = [
|
|
|
1005
861
|
`• <a href="https://www.smogon.com/forums/threads/3660461/">Godly Gift</a>`,
|
|
1006
862
|
],
|
|
1007
863
|
mod: 'gen8',
|
|
1008
|
-
ruleset: ['Standard
|
|
864
|
+
ruleset: ['Standard OMs', 'Sleep Moves Clause'],
|
|
1009
865
|
banlist: [
|
|
1010
|
-
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Marowak-Alola', 'Melmetal',
|
|
1011
|
-
'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power',
|
|
866
|
+
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Crawdaunt', 'Dragapult', 'Eternatus', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Nidoking',
|
|
867
|
+
'Nidoqueen', 'Pikachu', 'Toxapex', 'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power',
|
|
1012
868
|
'Moody', 'Pure Power', 'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw',
|
|
1013
869
|
'Baton Pass',
|
|
1014
870
|
],
|
|
@@ -1088,6 +944,8 @@ exports.Formats = [
|
|
|
1088
944
|
'Decorate', 'Final Gambit', 'Flatter', 'Floral Healing', 'Flower Shield', 'Follow Me', 'Heal Pulse', 'Rage Powder', 'Swagger',
|
|
1089
945
|
],
|
|
1090
946
|
},
|
|
947
|
+
// Brilliant Diamond/Shining Pearl
|
|
948
|
+
///////////////////////////////////////////////////////////////////
|
|
1091
949
|
{
|
|
1092
950
|
section: "BD/SP",
|
|
1093
951
|
column: 2,
|
|
@@ -1111,10 +969,7 @@ exports.Formats = [
|
|
|
1111
969
|
],
|
|
1112
970
|
mod: 'gen8bdsp',
|
|
1113
971
|
ruleset: ['Standard'],
|
|
1114
|
-
banlist: [
|
|
1115
|
-
'Uber', 'Arena Trap', 'Drizzle', 'Moody', 'Sand Veil', 'Shadow Tag', 'Snow Cloak',
|
|
1116
|
-
'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Razor Fang', 'Baton Pass',
|
|
1117
|
-
],
|
|
972
|
+
banlist: ['Uber', 'Arena Trap', 'Drizzle', 'Moody', 'Sand Veil', 'Shadow Tag', 'Snow Cloak', 'King\'s Rock', 'Razor Fang', 'Baton Pass'],
|
|
1118
973
|
},
|
|
1119
974
|
{
|
|
1120
975
|
name: "[Gen 8 BDSP] Ubers",
|
|
@@ -1122,6 +977,7 @@ exports.Formats = [
|
|
|
1122
977
|
`• <a href="https://www.smogon.com/forums/threads/3694036/">BDSP Ubers Discussion & Resources</a>`,
|
|
1123
978
|
],
|
|
1124
979
|
mod: 'gen8bdsp',
|
|
980
|
+
searchShow: false,
|
|
1125
981
|
ruleset: ['Standard'],
|
|
1126
982
|
banlist: ['AG', 'Baton Pass'],
|
|
1127
983
|
},
|
|
@@ -1131,6 +987,7 @@ exports.Formats = [
|
|
|
1131
987
|
`• <a href="https://www.smogon.com/forums/threads/3694307/">BDSP UU</a>`,
|
|
1132
988
|
],
|
|
1133
989
|
mod: 'gen8bdsp',
|
|
990
|
+
searchShow: false,
|
|
1134
991
|
ruleset: ['[Gen 8 BDSP] OU'],
|
|
1135
992
|
banlist: ['OU', 'UUBL'],
|
|
1136
993
|
},
|
|
@@ -1140,6 +997,7 @@ exports.Formats = [
|
|
|
1140
997
|
`• <a href="https://www.smogon.com/forums/threads/3695563/">BDSP RU</a>`,
|
|
1141
998
|
],
|
|
1142
999
|
mod: 'gen8bdsp',
|
|
1000
|
+
searchShow: false,
|
|
1143
1001
|
ruleset: ['[Gen 8 BDSP] UU'],
|
|
1144
1002
|
banlist: ['UU', 'RUBL', 'Drought'],
|
|
1145
1003
|
},
|
|
@@ -1149,6 +1007,7 @@ exports.Formats = [
|
|
|
1149
1007
|
`• <a href="https://www.smogon.com/forums/threads/3697080/">BDSP NU</a>`,
|
|
1150
1008
|
],
|
|
1151
1009
|
mod: 'gen8bdsp',
|
|
1010
|
+
searchShow: false,
|
|
1152
1011
|
ruleset: ['[Gen 8 BDSP] RU'],
|
|
1153
1012
|
banlist: ['RU', 'NUBL', 'Damp Rock', 'Heat Rock'],
|
|
1154
1013
|
},
|
|
@@ -1158,6 +1017,7 @@ exports.Formats = [
|
|
|
1158
1017
|
`• <a href="https://www.smogon.com/forums/threads/3700009/">BDSP PU</a>`,
|
|
1159
1018
|
],
|
|
1160
1019
|
mod: 'gen8bdsp',
|
|
1020
|
+
searchShow: false,
|
|
1161
1021
|
ruleset: ['[Gen 8 BDSP] NU'],
|
|
1162
1022
|
banlist: ['NU', 'PUBL'],
|
|
1163
1023
|
},
|
|
@@ -1167,6 +1027,7 @@ exports.Formats = [
|
|
|
1167
1027
|
`• <a href="https://www.smogon.com/forums/threads/3696004/">BDSP LC</a>`,
|
|
1168
1028
|
],
|
|
1169
1029
|
mod: 'gen8bdsp',
|
|
1030
|
+
searchShow: false,
|
|
1170
1031
|
ruleset: ['Little Cup', 'Standard'],
|
|
1171
1032
|
banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Munchlax', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Moody', 'Baton Pass', 'Sticky Web'],
|
|
1172
1033
|
},
|
|
@@ -1176,6 +1037,7 @@ exports.Formats = [
|
|
|
1176
1037
|
`• <a href="https://www.smogon.com/forums/threads/3694267/">BDSP Monotype</a>`,
|
|
1177
1038
|
],
|
|
1178
1039
|
mod: 'gen8bdsp',
|
|
1040
|
+
searchShow: false,
|
|
1179
1041
|
ruleset: ['[Gen 8 BDSP] OU', 'Same Type Clause'],
|
|
1180
1042
|
},
|
|
1181
1043
|
{
|
|
@@ -1187,15 +1049,6 @@ exports.Formats = [
|
|
|
1187
1049
|
searchShow: false,
|
|
1188
1050
|
ruleset: ['[Gen 8 BDSP] OU', '+CAP'],
|
|
1189
1051
|
},
|
|
1190
|
-
{
|
|
1191
|
-
name: "[Gen 8 BDSP] 3v3 Singles",
|
|
1192
|
-
threads: [
|
|
1193
|
-
`• <a href="https://www.smogon.com/forums/threads/3695092/">BDSP 3v3 Singles</a>`,
|
|
1194
|
-
],
|
|
1195
|
-
mod: 'gen8bdsp',
|
|
1196
|
-
searchShow: false,
|
|
1197
|
-
ruleset: ['Flat Rules', 'Min Source Gen = 8'],
|
|
1198
|
-
},
|
|
1199
1052
|
{
|
|
1200
1053
|
name: "[Gen 8 BDSP] Doubles OU",
|
|
1201
1054
|
threads: [
|
|
@@ -1213,18 +1066,11 @@ exports.Formats = [
|
|
|
1213
1066
|
],
|
|
1214
1067
|
mod: 'gen8bdsp',
|
|
1215
1068
|
gameType: 'doubles',
|
|
1216
|
-
ruleset: ['Flat Rules', 'Min Source Gen = 8'],
|
|
1217
|
-
},
|
|
1218
|
-
{
|
|
1219
|
-
name: "[Gen 8 BDSP] Pure Hackmons",
|
|
1220
|
-
desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
|
|
1221
|
-
threads: [
|
|
1222
|
-
`• <a href="https://www.smogon.com/forums/threads/3693868/">Pure Hackmons</a>`,
|
|
1223
|
-
],
|
|
1224
|
-
mod: 'gen8bdsp',
|
|
1225
1069
|
searchShow: false,
|
|
1226
|
-
ruleset: ['
|
|
1070
|
+
ruleset: ['Flat Rules', 'Min Source Gen = 8'],
|
|
1227
1071
|
},
|
|
1072
|
+
// Challengeable OMs
|
|
1073
|
+
///////////////////////////////////////////////////////////////////
|
|
1228
1074
|
{
|
|
1229
1075
|
section: "Challengeable OMs",
|
|
1230
1076
|
column: 2,
|
|
@@ -1237,7 +1083,7 @@ exports.Formats = [
|
|
|
1237
1083
|
],
|
|
1238
1084
|
mod: 'gen8',
|
|
1239
1085
|
searchShow: false,
|
|
1240
|
-
ruleset: ['Standard', '
|
|
1086
|
+
ruleset: ['Standard OMs', 'Camomons Mod', 'Sleep Clause Mod'],
|
|
1241
1087
|
banlist: [
|
|
1242
1088
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin',
|
|
1243
1089
|
'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Marshadow',
|
|
@@ -1254,7 +1100,7 @@ exports.Formats = [
|
|
|
1254
1100
|
],
|
|
1255
1101
|
mod: 'gen8',
|
|
1256
1102
|
searchShow: false,
|
|
1257
|
-
ruleset: ['Standard', '
|
|
1103
|
+
ruleset: ['Standard OMs', '2 Ability Clause', 'Sleep Clause Mod'],
|
|
1258
1104
|
banlist: ['Corsola-Galar', 'Sneasel', 'Type: Null', 'Arena Trap', 'Ice Scales', 'Moody', 'King\'s Rock', 'Baton Pass'],
|
|
1259
1105
|
restricted: ['Chansey', 'Lunala', 'Shedinja', 'Solgaleo', 'Gorilla Tactics', 'Huge Power', 'Pure Power', 'Shadow Tag'],
|
|
1260
1106
|
onValidateTeam(team) {
|
|
@@ -1334,67 +1180,256 @@ exports.Formats = [
|
|
|
1334
1180
|
return [`${species.name} cannot use ${item.name} because it is cross evolved into ${crossSpecies.name}.`];
|
|
1335
1181
|
}
|
|
1336
1182
|
}
|
|
1337
|
-
const ability = this.dex.abilities.get(set.ability);
|
|
1338
|
-
if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) {
|
|
1339
|
-
set.species = crossSpecies.name;
|
|
1340
|
-
}
|
|
1341
|
-
// @ts-ignore
|
|
1342
|
-
set.sp = species;
|
|
1343
|
-
// @ts-ignore
|
|
1344
|
-
set.crossSpecies = crossSpecies;
|
|
1345
|
-
// @ts-ignore
|
|
1346
|
-
set.crossMovesLeft = 2;
|
|
1347
|
-
problems = this.validateSet(set, teamHas);
|
|
1348
|
-
set.name = crossSpecies.name;
|
|
1349
|
-
set.species = species.name;
|
|
1350
|
-
return problems;
|
|
1351
|
-
},
|
|
1352
|
-
onModifySpecies(species, target, source, effect) {
|
|
1353
|
-
if (!target)
|
|
1354
|
-
return; // chat
|
|
1355
|
-
if (effect && ['imposter', 'transform'].includes(effect.id))
|
|
1356
|
-
return;
|
|
1357
|
-
if (target.set.name === target.set.species)
|
|
1358
|
-
return;
|
|
1359
|
-
const crossSpecies = this.dex.species.get(target.set.name);
|
|
1360
|
-
if (!crossSpecies.exists)
|
|
1361
|
-
return;
|
|
1362
|
-
if (species.battleOnly || !species.nfe)
|
|
1363
|
-
return;
|
|
1364
|
-
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
1365
|
-
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo)
|
|
1366
|
-
return;
|
|
1367
|
-
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
1368
|
-
if (!crossPrevoSpecies.prevo !== !species.prevo)
|
|
1369
|
-
return;
|
|
1370
|
-
const mixedSpecies = this.dex.deepClone(species);
|
|
1371
|
-
mixedSpecies.weightkg =
|
|
1372
|
-
Math.max(0.1, +(species.weightkg + crossSpecies.weightkg - crossPrevoSpecies.weightkg)).toFixed(1);
|
|
1373
|
-
mixedSpecies.nfe = false;
|
|
1374
|
-
mixedSpecies.evos = [];
|
|
1375
|
-
mixedSpecies.eggGroups = crossSpecies.eggGroups;
|
|
1376
|
-
mixedSpecies.abilities = crossSpecies.abilities;
|
|
1377
|
-
mixedSpecies.bst = 0;
|
|
1378
|
-
let i;
|
|
1379
|
-
for (i in species.baseStats) {
|
|
1380
|
-
const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i];
|
|
1381
|
-
mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255);
|
|
1382
|
-
mixedSpecies.bst += mixedSpecies.baseStats[i];
|
|
1183
|
+
const ability = this.dex.abilities.get(set.ability);
|
|
1184
|
+
if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) {
|
|
1185
|
+
set.species = crossSpecies.name;
|
|
1186
|
+
}
|
|
1187
|
+
// @ts-ignore
|
|
1188
|
+
set.sp = species;
|
|
1189
|
+
// @ts-ignore
|
|
1190
|
+
set.crossSpecies = crossSpecies;
|
|
1191
|
+
// @ts-ignore
|
|
1192
|
+
set.crossMovesLeft = 2;
|
|
1193
|
+
problems = this.validateSet(set, teamHas);
|
|
1194
|
+
set.name = crossSpecies.name;
|
|
1195
|
+
set.species = species.name;
|
|
1196
|
+
return problems;
|
|
1197
|
+
},
|
|
1198
|
+
onModifySpecies(species, target, source, effect) {
|
|
1199
|
+
if (!target)
|
|
1200
|
+
return; // chat
|
|
1201
|
+
if (effect && ['imposter', 'transform'].includes(effect.id))
|
|
1202
|
+
return;
|
|
1203
|
+
if (target.set.name === target.set.species)
|
|
1204
|
+
return;
|
|
1205
|
+
const crossSpecies = this.dex.species.get(target.set.name);
|
|
1206
|
+
if (!crossSpecies.exists)
|
|
1207
|
+
return;
|
|
1208
|
+
if (species.battleOnly || !species.nfe)
|
|
1209
|
+
return;
|
|
1210
|
+
const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable");
|
|
1211
|
+
if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo)
|
|
1212
|
+
return;
|
|
1213
|
+
const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
|
|
1214
|
+
if (!crossPrevoSpecies.prevo !== !species.prevo)
|
|
1215
|
+
return;
|
|
1216
|
+
const mixedSpecies = this.dex.deepClone(species);
|
|
1217
|
+
mixedSpecies.weightkg =
|
|
1218
|
+
Math.max(0.1, +(species.weightkg + crossSpecies.weightkg - crossPrevoSpecies.weightkg)).toFixed(1);
|
|
1219
|
+
mixedSpecies.nfe = false;
|
|
1220
|
+
mixedSpecies.evos = [];
|
|
1221
|
+
mixedSpecies.eggGroups = crossSpecies.eggGroups;
|
|
1222
|
+
mixedSpecies.abilities = crossSpecies.abilities;
|
|
1223
|
+
mixedSpecies.bst = 0;
|
|
1224
|
+
let i;
|
|
1225
|
+
for (i in species.baseStats) {
|
|
1226
|
+
const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i];
|
|
1227
|
+
mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255);
|
|
1228
|
+
mixedSpecies.bst += mixedSpecies.baseStats[i];
|
|
1229
|
+
}
|
|
1230
|
+
if (crossSpecies.types[0] !== crossPrevoSpecies.types[0])
|
|
1231
|
+
mixedSpecies.types[0] = crossSpecies.types[0];
|
|
1232
|
+
if (crossSpecies.types[1] !== crossPrevoSpecies.types[1]) {
|
|
1233
|
+
mixedSpecies.types[1] = crossSpecies.types[1] || crossSpecies.types[0];
|
|
1234
|
+
}
|
|
1235
|
+
if (mixedSpecies.types[0] === mixedSpecies.types[1])
|
|
1236
|
+
mixedSpecies.types = [mixedSpecies.types[0]];
|
|
1237
|
+
return mixedSpecies;
|
|
1238
|
+
},
|
|
1239
|
+
onBegin() {
|
|
1240
|
+
for (const pokemon of this.getAllPokemon()) {
|
|
1241
|
+
pokemon.baseSpecies = pokemon.species;
|
|
1242
|
+
}
|
|
1243
|
+
},
|
|
1244
|
+
},
|
|
1245
|
+
{
|
|
1246
|
+
name: "[Gen 8] Inheritance",
|
|
1247
|
+
desc: `Pokémon may use the ability and moves of another, as long as they forfeit their own learnset.`,
|
|
1248
|
+
threads: [
|
|
1249
|
+
`• <a href="https://www.smogon.com/forums/threads/3656811/">Inheritance</a>`,
|
|
1250
|
+
],
|
|
1251
|
+
mod: 'gen8',
|
|
1252
|
+
searchShow: false,
|
|
1253
|
+
ruleset: ['Standard OMs', '2 Ability Clause', 'Sleep Moves Clause'],
|
|
1254
|
+
banlist: [
|
|
1255
|
+
'Blacephalon', 'Blaziken', 'Butterfree', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chansey', 'Combusken', 'Cresselia', 'Darmanitan-Galar', 'Dialga',
|
|
1256
|
+
'Dracovish', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
|
|
1257
|
+
'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Natu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza',
|
|
1258
|
+
'Regieleki', 'Regigigas', 'Reshiram', 'Sableye', 'Shedinja', 'Solgaleo', 'Spectrier', 'Tapu Koko', 'Toxtricity', 'Torkoal', 'Urshifu-Base',
|
|
1259
|
+
'Xatu', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zeraora', 'Zekrom', 'Arena Trap', 'Contrary',
|
|
1260
|
+
'Drizzle', 'Huge Power', 'Imposter', 'Innards Out', 'Libero', 'Moody', 'Power Construct', 'Pure Power', 'Quick Draw', 'Shadow Tag', 'Sheer Force',
|
|
1261
|
+
'Simple', 'Unaware', 'Unburden', 'Water Bubble', 'King\'s Rock', 'Quick Claw', 'Baton Pass', 'Bolt Beak', 'Fishious Rend', 'Shell Smash',
|
|
1262
|
+
'Thousand Arrows',
|
|
1263
|
+
],
|
|
1264
|
+
getEvoFamily(speciesid) {
|
|
1265
|
+
let species = Dex.species.get(speciesid);
|
|
1266
|
+
while (species.prevo) {
|
|
1267
|
+
species = Dex.species.get(species.prevo);
|
|
1268
|
+
}
|
|
1269
|
+
return species.id;
|
|
1270
|
+
},
|
|
1271
|
+
validateSet(set, teamHas) {
|
|
1272
|
+
const unreleased = (pokemon) => pokemon.tier === "Unreleased" && pokemon.isNonstandard === "Unobtainable";
|
|
1273
|
+
if (!teamHas.abilityMap) {
|
|
1274
|
+
teamHas.abilityMap = Object.create(null);
|
|
1275
|
+
for (const pokemon of Dex.species.all()) {
|
|
1276
|
+
if (pokemon.isNonstandard || unreleased(pokemon))
|
|
1277
|
+
continue;
|
|
1278
|
+
if (pokemon.requiredAbility || pokemon.requiredItem || pokemon.requiredMove)
|
|
1279
|
+
continue;
|
|
1280
|
+
if (this.ruleTable.isBannedSpecies(pokemon))
|
|
1281
|
+
continue;
|
|
1282
|
+
for (const key of Object.values(pokemon.abilities)) {
|
|
1283
|
+
const abilityId = this.dex.toID(key);
|
|
1284
|
+
if (abilityId in teamHas.abilityMap) {
|
|
1285
|
+
teamHas.abilityMap[abilityId][pokemon.evos ? 'push' : 'unshift'](pokemon.id);
|
|
1286
|
+
}
|
|
1287
|
+
else {
|
|
1288
|
+
teamHas.abilityMap[abilityId] = [pokemon.id];
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
const problem = this.validateForme(set);
|
|
1294
|
+
if (problem.length)
|
|
1295
|
+
return problem;
|
|
1296
|
+
const species = this.dex.species.get(set.species);
|
|
1297
|
+
if (!species.exists || species.num < 1)
|
|
1298
|
+
return [`The Pok\u00e9mon "${set.species}" does not exist.`];
|
|
1299
|
+
if (species.isNonstandard || unreleased(species)) {
|
|
1300
|
+
return [`${species.name} is not obtainable in Generation ${this.dex.gen}.`];
|
|
1301
|
+
}
|
|
1302
|
+
const name = set.name;
|
|
1303
|
+
if (this.ruleTable.isBannedSpecies(species)) {
|
|
1304
|
+
return this.validateSet(set, teamHas);
|
|
1305
|
+
}
|
|
1306
|
+
const ability = this.dex.abilities.get(set.ability);
|
|
1307
|
+
if (!ability.exists || ability.isNonstandard)
|
|
1308
|
+
return [`${name} needs to have a valid ability.`];
|
|
1309
|
+
const pokemonWithAbility = teamHas.abilityMap[ability.id];
|
|
1310
|
+
if (!pokemonWithAbility)
|
|
1311
|
+
return [`${ability.name} is not available on a legal Pok\u00e9mon.`];
|
|
1312
|
+
this.format.debug = true;
|
|
1313
|
+
if (!teamHas.abilitySources)
|
|
1314
|
+
teamHas.abilitySources = Object.create(null);
|
|
1315
|
+
const validSources = teamHas.abilitySources[this.dex.toID(set.species)] = []; // Evolution families
|
|
1316
|
+
let canonicalSource = ''; // Specific for the basic implementation of Donor Clause (see onValidateTeam).
|
|
1317
|
+
for (const donor of pokemonWithAbility) {
|
|
1318
|
+
const donorSpecies = this.dex.species.get(donor);
|
|
1319
|
+
let format = this.format;
|
|
1320
|
+
if (!format.getEvoFamily)
|
|
1321
|
+
format = this.dex.formats.get('gen8inheritance');
|
|
1322
|
+
const evoFamily = format.getEvoFamily(donorSpecies.id);
|
|
1323
|
+
if (validSources.includes(evoFamily))
|
|
1324
|
+
continue;
|
|
1325
|
+
set.species = donorSpecies.name;
|
|
1326
|
+
set.name = donorSpecies.baseSpecies;
|
|
1327
|
+
const problems = this.validateSet(set, teamHas) || [];
|
|
1328
|
+
if (!problems.length) {
|
|
1329
|
+
validSources.push(evoFamily);
|
|
1330
|
+
canonicalSource = donorSpecies.name;
|
|
1331
|
+
}
|
|
1332
|
+
// Specific for the basic implementation of Donor Clause (see onValidateTeam).
|
|
1333
|
+
if (validSources.length > 1)
|
|
1334
|
+
break;
|
|
1335
|
+
}
|
|
1336
|
+
this.format.debug = false;
|
|
1337
|
+
set.name = name;
|
|
1338
|
+
set.species = species.name;
|
|
1339
|
+
if (!validSources.length) {
|
|
1340
|
+
if (pokemonWithAbility.length > 1)
|
|
1341
|
+
return [`${name}'s set is illegal.`];
|
|
1342
|
+
return [`${name} has an illegal set with an ability from ${this.dex.species.get(pokemonWithAbility[0]).name}.`];
|
|
1343
|
+
}
|
|
1344
|
+
// Protocol: Include the data of the donor species in the `ability` data slot.
|
|
1345
|
+
// Afterwards, we are going to reset the name to what the user intended.
|
|
1346
|
+
set.ability = `${set.ability}0${canonicalSource}`;
|
|
1347
|
+
return null;
|
|
1348
|
+
},
|
|
1349
|
+
onValidateTeam(team, f, teamHas) {
|
|
1350
|
+
if (this.ruleTable.has('2abilityclause')) {
|
|
1351
|
+
const abilityTable = new Map();
|
|
1352
|
+
const base = {
|
|
1353
|
+
airlock: 'cloudnine',
|
|
1354
|
+
battlearmor: 'shellarmor',
|
|
1355
|
+
clearbody: 'whitesmoke',
|
|
1356
|
+
dazzling: 'queenlymajesty',
|
|
1357
|
+
emergencyexit: 'wimpout',
|
|
1358
|
+
filter: 'solidrock',
|
|
1359
|
+
gooey: 'tanglinghair',
|
|
1360
|
+
insomnia: 'vitalspirit',
|
|
1361
|
+
ironbarbs: 'roughskin',
|
|
1362
|
+
libero: 'protean',
|
|
1363
|
+
minus: 'plus',
|
|
1364
|
+
moxie: 'chillingneigh',
|
|
1365
|
+
powerofalchemy: 'receiver',
|
|
1366
|
+
propellertail: 'stalwart',
|
|
1367
|
+
teravolt: 'moldbreaker',
|
|
1368
|
+
turboblaze: 'moldbreaker',
|
|
1369
|
+
};
|
|
1370
|
+
for (const set of team) {
|
|
1371
|
+
let ability = this.toID(set.ability.split('0')[0]);
|
|
1372
|
+
if (!ability)
|
|
1373
|
+
continue;
|
|
1374
|
+
if (ability in base)
|
|
1375
|
+
ability = base[ability];
|
|
1376
|
+
if ((abilityTable.get(ability) || 0) >= 2) {
|
|
1377
|
+
return [
|
|
1378
|
+
`You are limited to two of each ability by 2 Ability Clause.`,
|
|
1379
|
+
`(You have more than two ${this.dex.abilities.get(ability).name} variants)`,
|
|
1380
|
+
];
|
|
1381
|
+
}
|
|
1382
|
+
abilityTable.set(ability, (abilityTable.get(ability) || 0) + 1);
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
// Donor Clause
|
|
1386
|
+
const evoFamilyLists = [];
|
|
1387
|
+
for (const set of team) {
|
|
1388
|
+
const abilitySources = teamHas.abilitySources?.[this.dex.toID(set.species)];
|
|
1389
|
+
if (!abilitySources)
|
|
1390
|
+
continue;
|
|
1391
|
+
let format = this.format;
|
|
1392
|
+
if (!format.getEvoFamily)
|
|
1393
|
+
format = this.dex.formats.get('gen8inheritance');
|
|
1394
|
+
evoFamilyLists.push(abilitySources.map(format.getEvoFamily));
|
|
1383
1395
|
}
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1396
|
+
// Checking actual full incompatibility would require expensive algebra.
|
|
1397
|
+
// Instead, we only check the trivial case of multiple Pokémon only legal for exactly one family. FIXME?
|
|
1398
|
+
const requiredFamilies = Object.create(null);
|
|
1399
|
+
for (const evoFamilies of evoFamilyLists) {
|
|
1400
|
+
if (evoFamilies.length !== 1)
|
|
1401
|
+
continue;
|
|
1402
|
+
const [familyId] = evoFamilies;
|
|
1403
|
+
if (!(familyId in requiredFamilies))
|
|
1404
|
+
requiredFamilies[familyId] = 1;
|
|
1405
|
+
requiredFamilies[familyId]++;
|
|
1406
|
+
if (requiredFamilies[familyId] > 2) {
|
|
1407
|
+
return [
|
|
1408
|
+
`You are limited to up to two inheritances from each evolution family by the Donor Clause.`,
|
|
1409
|
+
`(You inherit more than twice from ${this.dex.species.get(familyId).name}).`,
|
|
1410
|
+
];
|
|
1411
|
+
}
|
|
1388
1412
|
}
|
|
1389
|
-
if (mixedSpecies.types[0] === mixedSpecies.types[1])
|
|
1390
|
-
mixedSpecies.types = [mixedSpecies.types[0]];
|
|
1391
|
-
return mixedSpecies;
|
|
1392
1413
|
},
|
|
1393
1414
|
onBegin() {
|
|
1394
1415
|
for (const pokemon of this.getAllPokemon()) {
|
|
1395
|
-
pokemon.
|
|
1416
|
+
if (pokemon.baseAbility.includes('0')) {
|
|
1417
|
+
const donor = pokemon.baseAbility.split('0')[1];
|
|
1418
|
+
pokemon.m.donor = this.toID(donor);
|
|
1419
|
+
pokemon.baseAbility = this.toID(pokemon.baseAbility.split('0')[0]);
|
|
1420
|
+
pokemon.ability = pokemon.baseAbility;
|
|
1421
|
+
}
|
|
1396
1422
|
}
|
|
1397
1423
|
},
|
|
1424
|
+
onSwitchIn(pokemon) {
|
|
1425
|
+
if (!pokemon.m.donor)
|
|
1426
|
+
return;
|
|
1427
|
+
const donorTemplate = this.dex.species.get(pokemon.m.donor);
|
|
1428
|
+
if (!donorTemplate.exists)
|
|
1429
|
+
return;
|
|
1430
|
+
// Place volatiles on the Pokémon to show the donor details.
|
|
1431
|
+
this.add('-start', pokemon, donorTemplate.name, '[silent]');
|
|
1432
|
+
},
|
|
1398
1433
|
},
|
|
1399
1434
|
{
|
|
1400
1435
|
name: "[Gen 8] Linked",
|
|
@@ -1404,7 +1439,7 @@ exports.Formats = [
|
|
|
1404
1439
|
],
|
|
1405
1440
|
mod: 'linked',
|
|
1406
1441
|
searchShow: false,
|
|
1407
|
-
ruleset: ['Standard', '
|
|
1442
|
+
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
1408
1443
|
banlist: [
|
|
1409
1444
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Cloyster', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
|
|
1410
1445
|
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala',
|
|
@@ -1436,7 +1471,7 @@ exports.Formats = [
|
|
|
1436
1471
|
],
|
|
1437
1472
|
mod: 'gen8',
|
|
1438
1473
|
searchShow: false,
|
|
1439
|
-
ruleset: ['Standard
|
|
1474
|
+
ruleset: ['Standard OMs', '2 Ability Clause', 'Sleep Moves Clause'],
|
|
1440
1475
|
banlist: [
|
|
1441
1476
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus',
|
|
1442
1477
|
'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
|
|
@@ -1641,7 +1676,7 @@ exports.Formats = [
|
|
|
1641
1676
|
],
|
|
1642
1677
|
mod: 'gen8',
|
|
1643
1678
|
searchShow: false,
|
|
1644
|
-
ruleset: ['Standard', '
|
|
1679
|
+
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
1645
1680
|
banlist: [
|
|
1646
1681
|
'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chansey', 'Cloyster', 'Dialga', 'Eternatus', 'Genesect', 'Giratina',
|
|
1647
1682
|
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala',
|
|
@@ -1696,7 +1731,7 @@ exports.Formats = [
|
|
|
1696
1731
|
],
|
|
1697
1732
|
mod: 'pokebilities',
|
|
1698
1733
|
searchShow: false,
|
|
1699
|
-
ruleset: ['Standard', '
|
|
1734
|
+
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
1700
1735
|
banlist: [
|
|
1701
1736
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Conkeldurr', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dracozolt',
|
|
1702
1737
|
'Eternatus', 'Excadrill', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
|
|
@@ -1735,10 +1770,29 @@ exports.Formats = [
|
|
|
1735
1770
|
.filter(ability => ability !== pokemon.ability);
|
|
1736
1771
|
}
|
|
1737
1772
|
},
|
|
1773
|
+
onBeforeSwitchIn(pokemon) {
|
|
1774
|
+
// Abilities that must be applied before both sides trigger onSwitchIn to correctly
|
|
1775
|
+
// handle switch-in ability-to-ability interactions, e.g. Intimidate counters
|
|
1776
|
+
const neededBeforeSwitchInIDs = [
|
|
1777
|
+
'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
|
|
1778
|
+
'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
|
|
1779
|
+
];
|
|
1780
|
+
if (pokemon.m.innates) {
|
|
1781
|
+
for (const innate of pokemon.m.innates) {
|
|
1782
|
+
if (!neededBeforeSwitchInIDs.includes(innate))
|
|
1783
|
+
continue;
|
|
1784
|
+
if (pokemon.hasAbility(innate))
|
|
1785
|
+
continue;
|
|
1786
|
+
pokemon.addVolatile("ability:" + innate, pokemon);
|
|
1787
|
+
}
|
|
1788
|
+
}
|
|
1789
|
+
},
|
|
1738
1790
|
onSwitchInPriority: 2,
|
|
1739
1791
|
onSwitchIn(pokemon) {
|
|
1740
1792
|
if (pokemon.m.innates) {
|
|
1741
1793
|
for (const innate of pokemon.m.innates) {
|
|
1794
|
+
if (pokemon.hasAbility(innate))
|
|
1795
|
+
continue;
|
|
1742
1796
|
pokemon.addVolatile("ability:" + innate, pokemon);
|
|
1743
1797
|
}
|
|
1744
1798
|
}
|
|
@@ -1761,6 +1815,16 @@ exports.Formats = [
|
|
|
1761
1815
|
pokemon.m.innates = undefined;
|
|
1762
1816
|
},
|
|
1763
1817
|
},
|
|
1818
|
+
{
|
|
1819
|
+
name: "[Gen 8] Pure Hackmons",
|
|
1820
|
+
desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
|
|
1821
|
+
threads: [
|
|
1822
|
+
`• <a href="https://www.smogon.com/forums/threads/3656851/">Pure Hackmons</a>`,
|
|
1823
|
+
],
|
|
1824
|
+
mod: 'gen8',
|
|
1825
|
+
searchShow: false,
|
|
1826
|
+
ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
|
|
1827
|
+
},
|
|
1764
1828
|
{
|
|
1765
1829
|
name: "[Gen 8] Shared Power",
|
|
1766
1830
|
desc: `Once a Pokémon switches in, its ability is shared with the rest of the team.`,
|
|
@@ -1769,7 +1833,7 @@ exports.Formats = [
|
|
|
1769
1833
|
],
|
|
1770
1834
|
mod: 'sharedpower',
|
|
1771
1835
|
searchShow: false,
|
|
1772
|
-
ruleset: ['Standard', '
|
|
1836
|
+
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
1773
1837
|
banlist: [
|
|
1774
1838
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
|
|
1775
1839
|
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna',
|
|
@@ -1836,7 +1900,7 @@ exports.Formats = [
|
|
|
1836
1900
|
searchShow: false,
|
|
1837
1901
|
challengeShow: false,
|
|
1838
1902
|
tournamentShow: false,
|
|
1839
|
-
ruleset: ['Standard', '
|
|
1903
|
+
ruleset: ['Standard OMs', 'Sleep Clause Mod'],
|
|
1840
1904
|
banlist: [
|
|
1841
1905
|
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Kyurem-Black', 'Kyurem-White', 'Giratina',
|
|
1842
1906
|
'Giratina-Origin', 'Genesect', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Lugia', 'Lunala', 'Magearna', 'Marowak-Alola', 'Marshadow', 'Melmetal',
|
|
@@ -1943,7 +2007,7 @@ exports.Formats = [
|
|
|
1943
2007
|
],
|
|
1944
2008
|
mod: 'gen8',
|
|
1945
2009
|
searchShow: false,
|
|
1946
|
-
ruleset: ['Standard', '!OHKO Clause', 'Picked Team Size = 6', 'Adjust Level = 100'],
|
|
2010
|
+
ruleset: ['Standard OMs', 'Sleep Clause Mod', '!OHKO Clause', 'Picked Team Size = 6', 'Adjust Level = 100'],
|
|
1947
2011
|
banlist: [
|
|
1948
2012
|
'Sandshrew-Alola', 'Shedinja', 'Infiltrator', 'Magic Guard', 'Choice Scarf',
|
|
1949
2013
|
'Explosion', 'Final Gambit', 'Healing Wish', 'Lunar Dance', 'Magic Room', 'Memento', 'Misty Explosion', 'Self-Destruct',
|
|
@@ -2057,6 +2121,18 @@ exports.Formats = [
|
|
|
2057
2121
|
},
|
|
2058
2122
|
},
|
|
2059
2123
|
},
|
|
2124
|
+
// Randomized Format Spotlight
|
|
2125
|
+
///////////////////////////////////////////////////////////////////
|
|
2126
|
+
{
|
|
2127
|
+
section: "Randomized Format Spotlight",
|
|
2128
|
+
column: 2,
|
|
2129
|
+
},
|
|
2130
|
+
{
|
|
2131
|
+
name: "[Gen 3] Challenge Cup",
|
|
2132
|
+
mod: 'gen3',
|
|
2133
|
+
team: 'randomCC',
|
|
2134
|
+
ruleset: ['Obtainable', 'HP Percentage Mod', 'Cancel Mod'],
|
|
2135
|
+
},
|
|
2060
2136
|
// Randomized Metas
|
|
2061
2137
|
///////////////////////////////////////////////////////////////////
|
|
2062
2138
|
{
|
|
@@ -2377,44 +2453,36 @@ exports.Formats = [
|
|
|
2377
2453
|
column: 3,
|
|
2378
2454
|
},
|
|
2379
2455
|
{
|
|
2380
|
-
name: "[Gen
|
|
2456
|
+
name: "[Gen 3] Ubers",
|
|
2381
2457
|
threads: [
|
|
2382
|
-
`• <a href="https://www.smogon.com/forums/posts/
|
|
2458
|
+
`• <a href="https://www.smogon.com/forums/posts/8286280/">ADV Ubers</a>`,
|
|
2383
2459
|
],
|
|
2384
|
-
mod: '
|
|
2460
|
+
mod: 'gen3',
|
|
2385
2461
|
// searchShow: false,
|
|
2386
|
-
ruleset: ['Standard'],
|
|
2462
|
+
ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
|
|
2463
|
+
banlist: ['Wobbuffet + Leftovers'],
|
|
2387
2464
|
},
|
|
2388
2465
|
{
|
|
2389
|
-
name: "[Gen
|
|
2390
|
-
desc: `Bring three Pokémon to Team Preview and choose one to battle.`,
|
|
2466
|
+
name: "[Gen 5] RU",
|
|
2391
2467
|
threads: [
|
|
2392
|
-
`• <a href="https://www.smogon.com/forums/posts/
|
|
2468
|
+
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
2469
|
+
`• <a href="https://www.smogon.com/forums/threads/3473124/">BW2 RU Viability Rankings</a>`,
|
|
2393
2470
|
],
|
|
2394
|
-
mod: '
|
|
2471
|
+
mod: 'gen5',
|
|
2395
2472
|
// searchShow: false,
|
|
2396
|
-
ruleset: [
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
],
|
|
2400
|
-
banlist: [
|
|
2401
|
-
'Clefable', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song',
|
|
2402
|
-
'Self-Destruct', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw',
|
|
2403
|
-
],
|
|
2404
|
-
unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil'],
|
|
2473
|
+
ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'],
|
|
2474
|
+
banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
|
|
2475
|
+
unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
2405
2476
|
},
|
|
2406
2477
|
{
|
|
2407
|
-
name: "[Gen
|
|
2478
|
+
name: "[Gen 7 Let's Go] UU",
|
|
2408
2479
|
threads: [
|
|
2409
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
2480
|
+
`• <a href="https://www.smogon.com/forums/threads/3659882/">LGPE UU Metagame Discussion & Resources</a>`,
|
|
2410
2481
|
],
|
|
2411
|
-
mod: '
|
|
2482
|
+
mod: 'gen7letsgo',
|
|
2412
2483
|
// searchShow: false,
|
|
2413
|
-
ruleset: ['
|
|
2414
|
-
banlist: ['
|
|
2415
|
-
'Nidoking + Fury Attack + Thrash', 'Exeggutor + Poison Powder + Stomp', 'Exeggutor + Sleep Powder + Stomp',
|
|
2416
|
-
'Exeggutor + Stun Spore + Stomp', 'Jolteon + Focus Energy + Thunder Shock', 'Flareon + Focus Energy + Ember',
|
|
2417
|
-
],
|
|
2484
|
+
ruleset: ['[Gen 7 Let\'s Go] OU'],
|
|
2485
|
+
banlist: ['OU', 'UUBL'],
|
|
2418
2486
|
},
|
|
2419
2487
|
// Past Gens OU
|
|
2420
2488
|
///////////////////////////////////////////////////////////////////
|
|
@@ -2521,7 +2589,7 @@ exports.Formats = [
|
|
|
2521
2589
|
`• <a href="https://www.smogon.com/forums/posts/8778656/">USM Mix and Mega</a>`,
|
|
2522
2590
|
],
|
|
2523
2591
|
mod: 'gen7mixandmega',
|
|
2524
|
-
ruleset: ['Standard', 'Mega Rayquaza Clause', '
|
|
2592
|
+
ruleset: ['Standard OMs', 'Mega Rayquaza Clause', 'Sleep Clause Mod'],
|
|
2525
2593
|
banlist: ['Shadow Tag', 'Gengarite', 'Baton Pass', 'Electrify'],
|
|
2526
2594
|
restricted: [
|
|
2527
2595
|
'Arceus', 'Deoxys', 'Dialga', 'Dragonite', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem', 'Landorus-Therian', 'Lugia',
|
|
@@ -2708,8 +2776,7 @@ exports.Formats = [
|
|
|
2708
2776
|
'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kartana', 'Kyogre', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna',
|
|
2709
2777
|
'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
2710
2778
|
'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Tapu Lele', 'Xerneas', 'Yveltal', 'Zekrom', 'Zygarde',
|
|
2711
|
-
'Battle Bond', 'Shadow Tag', '
|
|
2712
|
-
'Smooth Rock', 'Terrain Extender', 'Baton Pass',
|
|
2779
|
+
'Battle Bond', 'Shadow Tag', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Terrain Extender', 'Baton Pass',
|
|
2713
2780
|
],
|
|
2714
2781
|
},
|
|
2715
2782
|
{
|
|
@@ -2997,8 +3064,7 @@ exports.Formats = [
|
|
|
2997
3064
|
'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Greninja', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White',
|
|
2998
3065
|
'Lucario-Mega', 'Lugia', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye-Mega',
|
|
2999
3066
|
'Salamence-Mega', 'Shaymin-Sky', 'Slowbro-Mega', 'Talonflame', 'Xerneas', 'Yveltal', 'Zekrom',
|
|
3000
|
-
'Shadow Tag', '
|
|
3001
|
-
'Soul Dew', 'Baton Pass',
|
|
3067
|
+
'Shadow Tag', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Soul Dew', 'Baton Pass',
|
|
3002
3068
|
],
|
|
3003
3069
|
},
|
|
3004
3070
|
{
|
|
@@ -3199,18 +3265,6 @@ exports.Formats = [
|
|
|
3199
3265
|
ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
|
|
3200
3266
|
banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
3201
3267
|
},
|
|
3202
|
-
{
|
|
3203
|
-
name: "[Gen 5] RU",
|
|
3204
|
-
threads: [
|
|
3205
|
-
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
3206
|
-
`• <a href="https://www.smogon.com/forums/threads/3473124/">BW2 RU Viability Rankings</a>`,
|
|
3207
|
-
],
|
|
3208
|
-
mod: 'gen5',
|
|
3209
|
-
searchShow: false,
|
|
3210
|
-
ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'],
|
|
3211
|
-
banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
|
|
3212
|
-
unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
3213
|
-
},
|
|
3214
3268
|
{
|
|
3215
3269
|
name: "[Gen 5] NU",
|
|
3216
3270
|
threads: [
|
|
@@ -3255,6 +3309,7 @@ exports.Formats = [
|
|
|
3255
3309
|
mod: 'gen5',
|
|
3256
3310
|
searchShow: false,
|
|
3257
3311
|
ruleset: ['[Gen 5] OU', 'Same Type Clause', '!Gems Clause'],
|
|
3312
|
+
banlist: ['Latios'],
|
|
3258
3313
|
},
|
|
3259
3314
|
{
|
|
3260
3315
|
name: "[Gen 5] 1v1",
|
|
@@ -3268,7 +3323,7 @@ exports.Formats = [
|
|
|
3268
3323
|
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
3269
3324
|
'Standard', 'Baton Pass Clause', 'Swagger Clause', 'Accuracy Moves Clause', 'Sleep Moves Clause',
|
|
3270
3325
|
],
|
|
3271
|
-
banlist: ['Uber', 'Cottonee', 'Dragonite', 'Jirachi', 'Kyurem-Black', 'Mew', 'Togekiss', 'Whimsicott', 'Victini', '
|
|
3326
|
+
banlist: ['Uber', 'Cottonee', 'Dragonite', 'Jirachi', 'Kyurem-Black', 'Mew', 'Togekiss', 'Whimsicott', 'Victini', 'Focus Band', 'Focus Sash', 'Quick Claw', 'Soul Dew', 'Perish Song'],
|
|
3272
3327
|
unbanlist: ['Genesect', 'Landorus', 'Manaphy', 'Thundurus', 'Tornadus-Therian'],
|
|
3273
3328
|
},
|
|
3274
3329
|
{
|
|
@@ -3280,6 +3335,7 @@ exports.Formats = [
|
|
|
3280
3335
|
searchShow: false,
|
|
3281
3336
|
ruleset: ['[Gen 5] PU'],
|
|
3282
3337
|
banlist: ['PU', 'Articuno', 'Dragonair', 'Glalie', 'Machoke', 'Marowak', 'Omanyte', 'Regigigas', 'Trubbish', 'Whirlipede', 'Baton Pass'],
|
|
3338
|
+
unbanlist: ['Damp Rock'],
|
|
3283
3339
|
},
|
|
3284
3340
|
{
|
|
3285
3341
|
name: "[Gen 5] GBU Singles",
|
|
@@ -3461,7 +3517,7 @@ exports.Formats = [
|
|
|
3461
3517
|
ruleset: ['[Gen 4] PU'],
|
|
3462
3518
|
banlist: [
|
|
3463
3519
|
'Ampharos', 'Armaldo', 'Bellossom', 'Dragonair', 'Electabuzz', 'Gabite', 'Gastrodon', 'Glaceon', 'Glalie',
|
|
3464
|
-
'Golduck', 'Gorebyss', 'Hippopotas', 'Kadabra', 'Machoke', 'Magmar', 'Mantine', 'Marowak', 'Metang',
|
|
3520
|
+
'Golduck', 'Gorebyss', 'Hippopotas', 'Kadabra', 'Lapras', 'Machoke', 'Magmar', 'Mantine', 'Marowak', 'Metang',
|
|
3465
3521
|
'Misdreavus', 'Monferno', 'Mr. Mime', 'Muk', 'Murkrow', 'Pinsir', 'Politoed', 'Purugly', 'Quagsire',
|
|
3466
3522
|
'Raichu', 'Rampardos', 'Rapidash', 'Regigigas', 'Relicanth', 'Rhydon', 'Scyther', 'Sneasel', 'Snover',
|
|
3467
3523
|
'Solrock', 'Tangela', 'Torkoal', 'Victreebel', 'Xatu', 'Zangoose', 'Damp Rock',
|
|
@@ -3525,16 +3581,6 @@ exports.Formats = [
|
|
|
3525
3581
|
section: "Past Generations",
|
|
3526
3582
|
column: 5,
|
|
3527
3583
|
},
|
|
3528
|
-
{
|
|
3529
|
-
name: "[Gen 3] Ubers",
|
|
3530
|
-
threads: [
|
|
3531
|
-
`• <a href="https://www.smogon.com/forums/posts/8286280/">ADV Ubers</a>`,
|
|
3532
|
-
],
|
|
3533
|
-
mod: 'gen3',
|
|
3534
|
-
searchShow: false,
|
|
3535
|
-
ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
|
|
3536
|
-
banlist: ['Wobbuffet + Leftovers'],
|
|
3537
|
-
},
|
|
3538
3584
|
{
|
|
3539
3585
|
name: "[Gen 3] UU",
|
|
3540
3586
|
threads: [
|
|
@@ -3544,7 +3590,7 @@ exports.Formats = [
|
|
|
3544
3590
|
mod: 'gen3',
|
|
3545
3591
|
searchShow: false,
|
|
3546
3592
|
ruleset: ['Standard'],
|
|
3547
|
-
banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Arena Trap', '
|
|
3593
|
+
banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'],
|
|
3548
3594
|
},
|
|
3549
3595
|
{
|
|
3550
3596
|
name: "[Gen 3] NU",
|
|
@@ -3556,6 +3602,24 @@ exports.Formats = [
|
|
|
3556
3602
|
ruleset: ['Standard'],
|
|
3557
3603
|
banlist: ['Uber', 'OU', 'UUBL', 'UU', 'Smeargle + Ingrain'],
|
|
3558
3604
|
},
|
|
3605
|
+
{
|
|
3606
|
+
name: "[Gen 3] 1v1",
|
|
3607
|
+
desc: `Bring three Pokémon to Team Preview and choose one to battle.`,
|
|
3608
|
+
threads: [
|
|
3609
|
+
`• <a href="https://www.smogon.com/forums/posts/8031456/">ADV 1v1</a>`,
|
|
3610
|
+
],
|
|
3611
|
+
mod: 'gen3',
|
|
3612
|
+
searchShow: false,
|
|
3613
|
+
ruleset: [
|
|
3614
|
+
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
3615
|
+
'[Gen 3] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview', '!Freeze Clause Mod',
|
|
3616
|
+
],
|
|
3617
|
+
banlist: [
|
|
3618
|
+
'Clefable', 'Slaking', 'Snorlax', 'Suicune', 'Zapdos', 'Destiny Bond', 'Explosion', 'Ingrain', 'Perish Song',
|
|
3619
|
+
'Self-Destruct', 'Focus Band', 'King\'s Rock', 'Quick Claw',
|
|
3620
|
+
],
|
|
3621
|
+
unbanlist: ['Mr. Mime', 'Wobbuffet', 'Wynaut', 'Sand Veil'],
|
|
3622
|
+
},
|
|
3559
3623
|
{
|
|
3560
3624
|
name: "[Gen 3] Doubles OU",
|
|
3561
3625
|
threads: [
|
|
@@ -3584,6 +3648,15 @@ exports.Formats = [
|
|
|
3584
3648
|
debug: true,
|
|
3585
3649
|
ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
|
|
3586
3650
|
},
|
|
3651
|
+
{
|
|
3652
|
+
name: "[Gen 2] Ubers",
|
|
3653
|
+
threads: [
|
|
3654
|
+
`• <a href="https://www.smogon.com/forums/posts/8286282/">GSC Ubers</a>`,
|
|
3655
|
+
],
|
|
3656
|
+
mod: 'gen2',
|
|
3657
|
+
searchShow: false,
|
|
3658
|
+
ruleset: ['Standard'],
|
|
3659
|
+
},
|
|
3587
3660
|
{
|
|
3588
3661
|
name: "[Gen 2] UU",
|
|
3589
3662
|
threads: [`• <a href="https://www.smogon.com/forums/threads/3576710/">GSC UU</a>`],
|
|
@@ -3591,6 +3664,7 @@ exports.Formats = [
|
|
|
3591
3664
|
searchShow: false,
|
|
3592
3665
|
ruleset: ['[Gen 2] OU'],
|
|
3593
3666
|
banlist: ['OU', 'UUBL'],
|
|
3667
|
+
unbanlist: ['Mean Look + Baton Pass', 'Spider Web + Baton Pass'],
|
|
3594
3668
|
},
|
|
3595
3669
|
{
|
|
3596
3670
|
name: "[Gen 2] NU",
|
|
@@ -3610,7 +3684,7 @@ exports.Formats = [
|
|
|
3610
3684
|
'[Gen 2] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
|
|
3611
3685
|
],
|
|
3612
3686
|
banlist: [
|
|
3613
|
-
'Alakazam', 'Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', '
|
|
3687
|
+
'Alakazam', 'Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', 'Focus Band', 'King\'s Rock', 'Quick Claw',
|
|
3614
3688
|
'Attract', 'Destiny Bond', 'Explosion', 'Perish Song', 'Present', 'Self-Destruct', 'Swagger',
|
|
3615
3689
|
],
|
|
3616
3690
|
},
|
|
@@ -3673,9 +3747,22 @@ exports.Formats = [
|
|
|
3673
3747
|
],
|
|
3674
3748
|
mod: 'gen1',
|
|
3675
3749
|
searchShow: false,
|
|
3676
|
-
ruleset: ['[Gen 1] UU'],
|
|
3750
|
+
ruleset: ['[Gen 1] UU', '!APT Clause'],
|
|
3677
3751
|
banlist: ['UU', 'NUBL'],
|
|
3678
3752
|
},
|
|
3753
|
+
{
|
|
3754
|
+
name: "[Gen 1] 1v1",
|
|
3755
|
+
threads: [
|
|
3756
|
+
`• <a href="https://www.smogon.com/forums/posts/8031462">RBY 1v1</a>`,
|
|
3757
|
+
],
|
|
3758
|
+
mod: 'gen1',
|
|
3759
|
+
searchShow: false,
|
|
3760
|
+
ruleset: [
|
|
3761
|
+
'Picked Team Size = 1', 'Max Team Size = 3',
|
|
3762
|
+
'[Gen 1] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
|
|
3763
|
+
],
|
|
3764
|
+
banlist: ['Bind', 'Clamp', 'Explosion', 'Fire Spin', 'Self-Destruct', 'Wrap'],
|
|
3765
|
+
},
|
|
3679
3766
|
{
|
|
3680
3767
|
name: "[Gen 1] Japanese OU",
|
|
3681
3768
|
desc: `Generation 1 with Japanese battle mechanics.`,
|
|
@@ -3697,6 +3784,19 @@ exports.Formats = [
|
|
|
3697
3784
|
],
|
|
3698
3785
|
banlist: ['Uber'],
|
|
3699
3786
|
},
|
|
3787
|
+
{
|
|
3788
|
+
name: "[Gen 1] Stadium OU",
|
|
3789
|
+
threads: [
|
|
3790
|
+
`• <a href="https://www.smogon.com/forums/threads/3685877/">Stadium OU Viability Rankings</a>`,
|
|
3791
|
+
],
|
|
3792
|
+
mod: 'gen1stadium',
|
|
3793
|
+
searchShow: false,
|
|
3794
|
+
ruleset: ['Standard', 'Team Preview'],
|
|
3795
|
+
banlist: ['Uber',
|
|
3796
|
+
'Nidoking + Fury Attack + Thrash', 'Exeggutor + Poison Powder + Stomp', 'Exeggutor + Sleep Powder + Stomp',
|
|
3797
|
+
'Exeggutor + Stun Spore + Stomp', 'Jolteon + Focus Energy + Thunder Shock', 'Flareon + Focus Energy + Ember',
|
|
3798
|
+
],
|
|
3799
|
+
},
|
|
3700
3800
|
{
|
|
3701
3801
|
name: "[Gen 1] Tradebacks OU",
|
|
3702
3802
|
desc: `RBY OU with movepool additions from the Time Capsule.`,
|