@pkmn/sim 0.5.5 → 0.5.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/config/formats.js +325 -254
- package/build/config/formats.js.map +1 -1
- package/build/data/aliases.js +4 -4
- package/build/data/aliases.js.map +1 -1
- package/build/data/formats-data.js +130 -17
- package/build/data/formats-data.js.map +1 -1
- package/build/data/items.js +2 -2
- package/build/data/items.js.map +1 -1
- package/build/data/learnsets.js +6 -5
- package/build/data/learnsets.js.map +1 -1
- package/build/data/mods/gen2/moves.js +13 -1
- package/build/data/mods/gen2/moves.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/gen4/formats-data.js +4 -4
- package/build/data/mods/gen4/formats-data.js.map +1 -1
- package/build/data/mods/gen4/moves.js +7 -5
- package/build/data/mods/gen4/moves.js.map +1 -1
- package/build/data/mods/gen5/formats-data.js +1 -1
- package/build/data/mods/gen5/formats-data.js.map +1 -1
- package/build/data/mods/gen5/moves.js +6 -4
- package/build/data/mods/gen5/moves.js.map +1 -1
- package/build/data/mods/gen6/formats-data.js +3 -2
- package/build/data/mods/gen6/formats-data.js.map +1 -1
- package/build/data/mods/gen6/items.js +2 -2
- package/build/data/mods/gen6/items.js.map +1 -1
- package/build/data/mods/gen7/formats-data.js +2 -1
- package/build/data/mods/gen7/formats-data.js.map +1 -1
- package/build/data/mods/gen7/moves.js +3 -3
- package/build/data/mods/gen7/moves.js.map +1 -1
- package/build/data/mods/gen7/pokedex.js +4 -0
- package/build/data/mods/gen7/pokedex.js.map +1 -1
- package/build/data/moves.js +6 -5
- package/build/data/moves.js.map +1 -1
- package/build/data/pokedex.js +480 -11
- package/build/data/pokedex.js.map +1 -1
- package/build/data/rulesets.js +26 -1
- package/build/data/rulesets.js.map +1 -1
- package/build/sim/battle.js +23 -22
- package/build/sim/battle.js.map +1 -1
- package/build/sim/dex-species.js +5 -2
- package/build/sim/dex-species.js.map +1 -1
- package/build/sim/exported-global-types.d.ts +1 -0
- package/build/sim/global-types.d.ts +1 -0
- package/build/sim/team-validator.js +11 -0
- package/build/sim/team-validator.js.map +1 -1
- package/config/formats.ts +327 -257
- package/data/aliases.ts +4 -4
- package/data/formats-data.ts +130 -17
- package/data/items.ts +2 -2
- package/data/learnsets.ts +6 -5
- package/data/mods/gen2/moves.ts +13 -1
- package/data/mods/gen3/formats-data.ts +3 -3
- package/data/mods/gen4/formats-data.ts +4 -4
- package/data/mods/gen4/moves.ts +6 -4
- package/data/mods/gen5/formats-data.ts +1 -1
- package/data/mods/gen5/moves.ts +6 -4
- package/data/mods/gen6/formats-data.ts +3 -2
- package/data/mods/gen6/items.ts +2 -2
- package/data/mods/gen7/formats-data.ts +2 -1
- package/data/mods/gen7/moves.ts +3 -3
- package/data/mods/gen7/pokedex.ts +4 -0
- package/data/moves.ts +6 -5
- package/data/pokedex.ts +480 -11
- package/data/rulesets.ts +23 -1
- package/package.json +2 -2
- package/sim/battle.ts +24 -23
- package/sim/dex-species.ts +5 -2
- package/sim/exported-global-types.ts +1 -0
- package/sim/global-types.ts +1 -0
- package/sim/team-validator.ts +13 -0
package/config/formats.ts
CHANGED
|
@@ -285,14 +285,6 @@ export const Formats: FormatList = [
|
|
|
285
285
|
name: "[Gen 8] Battle Stadium Singles",
|
|
286
286
|
|
|
287
287
|
mod: 'gen8',
|
|
288
|
-
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'Limit One Restricted'],
|
|
289
|
-
restricted: ['Restricted Legendary'],
|
|
290
|
-
},
|
|
291
|
-
{
|
|
292
|
-
name: "[Gen 8] Battle Stadium Singles Series 12",
|
|
293
|
-
|
|
294
|
-
mod: 'gen8',
|
|
295
|
-
searchShow: false,
|
|
296
288
|
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'Limit Two Restricted'],
|
|
297
289
|
restricted: ['Restricted Legendary'],
|
|
298
290
|
},
|
|
@@ -370,27 +362,19 @@ export const Formats: FormatList = [
|
|
|
370
362
|
},
|
|
371
363
|
{
|
|
372
364
|
name: "[Gen 8] VGC 2022",
|
|
373
|
-
|
|
374
|
-
mod: 'gen8',
|
|
375
|
-
gameType: 'doubles',
|
|
376
|
-
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit Two Restricted'],
|
|
377
|
-
restricted: ['Restricted Legendary'],
|
|
378
|
-
},
|
|
379
|
-
{
|
|
380
|
-
name: "[Gen 8] VGC 2021 Series 11",
|
|
381
365
|
threads: [
|
|
382
|
-
`• <a href="https://www.smogon.com/forums/threads/3677186/">VGC
|
|
383
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
384
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
366
|
+
`• <a href="https://www.smogon.com/forums/threads/3677186/">VGC 2022 Metagame Discussion</a>`,
|
|
367
|
+
`• <a href="https://www.smogon.com/forums/threads/3695848/">VGC 2022 Sample Teams</a>`,
|
|
368
|
+
`• <a href="https://www.smogon.com/forums/threads/3696395/">VGC 2022 Viability Rankings</a>`,
|
|
385
369
|
],
|
|
386
370
|
|
|
387
371
|
mod: 'gen8',
|
|
388
372
|
gameType: 'doubles',
|
|
389
|
-
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit
|
|
373
|
+
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 8', 'VGC Timer', 'Limit Two Restricted'],
|
|
390
374
|
restricted: ['Restricted Legendary'],
|
|
391
375
|
},
|
|
392
376
|
{
|
|
393
|
-
name: "[Gen 8] VGC 2021
|
|
377
|
+
name: "[Gen 8] VGC 2021",
|
|
394
378
|
|
|
395
379
|
mod: 'gen8',
|
|
396
380
|
gameType: 'doubles',
|
|
@@ -438,7 +422,7 @@ export const Formats: FormatList = [
|
|
|
438
422
|
'HP Percentage Mod', 'Cancel Mod',
|
|
439
423
|
],
|
|
440
424
|
banlist: [
|
|
441
|
-
'Pokestar Spirit', 'Shedinja + Sturdy', 'Battle Bond', 'Cheek Pouch', 'Cursed Body', 'Dry Skin', '
|
|
425
|
+
'Pokestar Spirit', 'Shedinja + Sturdy', 'Battle Bond', 'Cheek Pouch', 'Cursed Body', 'Dry Skin', 'Fur Coat', 'Gorilla Tactics',
|
|
442
426
|
'Grassy Surge', 'Huge Power', 'Ice Body', 'Iron Barbs', 'Libero', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Perish Body', 'Poison Heal',
|
|
443
427
|
'Power Construct', 'Pressure', 'Protean', 'Pure Power', 'Rain Dish', 'Rough Skin', 'Sand Spit', 'Sand Stream', 'Snow Warning', 'Stamina',
|
|
444
428
|
'Volt Absorb', 'Water Absorb', 'Wonder Guard', 'Abomasite', 'Aguav Berry', 'Assault Vest', 'Berry', 'Berry Juice', 'Berserk Gene',
|
|
@@ -497,7 +481,7 @@ export const Formats: FormatList = [
|
|
|
497
481
|
ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Dynamax Clause', 'Sleep Clause Mod'],
|
|
498
482
|
banlist: [
|
|
499
483
|
'Alakazam-Mega', 'Arceus', 'Blastoise-Mega', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darkrai',
|
|
500
|
-
'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', '
|
|
484
|
+
'Darmanitan-Galar', 'Deoxys-Attack', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dracovish', 'Eternatus',
|
|
501
485
|
'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black',
|
|
502
486
|
'Kyurem-White', 'Landorus-Base', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Metagross-Mega', 'Mewtwo',
|
|
503
487
|
'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
|
|
@@ -527,15 +511,16 @@ export const Formats: FormatList = [
|
|
|
527
511
|
'Drizzle', 'Drought',
|
|
528
512
|
// Slowbronite is banned so it doesn't validate on Galarian Slowbro
|
|
529
513
|
'Slowbronite',
|
|
514
|
+
// NDOU suspect
|
|
515
|
+
'Dragapult',
|
|
530
516
|
],
|
|
531
517
|
// Used to distinguish UU from below UU in the client
|
|
532
518
|
restricted: [
|
|
533
|
-
'Aegislash', 'Alakazam-Base', 'Altaria-Mega', 'Amoonguss', 'Beedrill-Mega', 'Blaziken-Base', 'Breloom', 'Celesteela',
|
|
534
|
-
'Chandelure', 'Donphan', 'Dracozolt', 'Dragonite', 'Feraligatr', 'Gastrodon', 'Hatterene', 'Hippowdon', 'Infernape',
|
|
535
|
-
'
|
|
536
|
-
'
|
|
537
|
-
'
|
|
538
|
-
'Urshifu-Rapid-Strike',
|
|
519
|
+
'Aegislash', 'Alakazam-Base', 'Altaria-Mega', 'Amoonguss', 'Azumarill', 'Beedrill-Mega', 'Blaziken-Base', 'Breloom', 'Celesteela',
|
|
520
|
+
'Chandelure', 'Donphan', 'Dracozolt', 'Dragonite', 'Feraligatr', 'Gastrodon', 'Hatterene', 'Hippowdon', 'Infernape', 'Keldeo',
|
|
521
|
+
'Krookodile', 'Mamoswine', 'Mandibuzz', 'Manectric-Mega', 'Melmetal', 'Mienshao', 'Moltres-Base', 'Nidoking', 'Nidoqueen', 'Nihilego',
|
|
522
|
+
'Quagsire', 'Regieleki', 'Ribombee', 'Rotom-Heat', 'Rotom-Wash', 'Salamence', 'Scizor', 'Skarmory', 'Slowking-Base', 'Swampert-Base',
|
|
523
|
+
'Talonflame', 'Tangrowth', 'Tornadus-Base', 'Umbreon', 'Urshifu-Rapid-Strike',
|
|
539
524
|
],
|
|
540
525
|
},
|
|
541
526
|
{
|
|
@@ -654,80 +639,142 @@ export const Formats: FormatList = [
|
|
|
654
639
|
column: 2,
|
|
655
640
|
},
|
|
656
641
|
{
|
|
657
|
-
name: "[Gen 8]
|
|
658
|
-
desc: `Pokémon
|
|
642
|
+
name: "[Gen 8] Trademarked",
|
|
643
|
+
desc: `Sacrifice your Pokémon's ability for a status move that activates on switch-in.`,
|
|
659
644
|
threads: [
|
|
660
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
645
|
+
`• <a href="https://www.smogon.com/forums/threads/3656980/">Trademarked</a>`,
|
|
661
646
|
],
|
|
662
|
-
|
|
647
|
+
|
|
648
|
+
mod: 'gen8',
|
|
649
|
+
// searchShow: false,
|
|
663
650
|
ruleset: ['Standard', 'Dynamax Clause'],
|
|
664
651
|
banlist: [
|
|
665
|
-
'Calyrex-Ice', 'Calyrex-Shadow', '
|
|
666
|
-
'
|
|
667
|
-
'
|
|
668
|
-
'
|
|
669
|
-
'
|
|
670
|
-
'Baton Pass', 'King\'s Rock',
|
|
671
|
-
// Moody users
|
|
672
|
-
'Glalie', 'Octillery', 'Remoraid', 'Snorunt',
|
|
673
|
-
// Shadow Tag/Arena Trap
|
|
674
|
-
'Diglett-Base', 'Dugtrio-Base', 'Gothita', 'Gothitelle', 'Gothorita', 'Trapinch', 'Wobbuffet', 'Wynaut',
|
|
652
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Kyurem-Black', 'Kyurem-White', 'Giratina',
|
|
653
|
+
'Giratina-Origin', 'Genesect', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Lugia', 'Lunala', 'Magearna', 'Marowak-Alola', 'Marshadow', 'Melmetal',
|
|
654
|
+
'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier',
|
|
655
|
+
'Urshifu-Base', 'Victini', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base',
|
|
656
|
+
'Arena Trap', 'Moody', 'Neutralizing Gas', 'Power Construct', 'Shadow Tag', 'Baton Pass',
|
|
675
657
|
],
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
658
|
+
restricted: [
|
|
659
|
+
'Baneful Bunker', 'Block', 'Copycat', 'Corrosive Gas', 'Detect', 'Destiny Bond', 'Disable', 'Encore', 'Fairy Lock', 'Hypnosis', 'Ingrain',
|
|
660
|
+
'Instruct', 'Lovely Kiss', 'King\'s Shield', 'Mat Block', 'Mean Look', 'Memento', 'move:Metronome', 'Obstruct', 'Octolock', 'Nature Power',
|
|
661
|
+
'Parting Shot', 'Psycho Shift', 'Protect', 'Roar', 'Sing', 'Skill Swap', 'Sleep Powder', 'Sleep Talk', 'Spiky Shield', 'Spore', 'Substitute',
|
|
662
|
+
'Switcheroo', 'Teleport', 'Trick', 'Whirlwind', 'Wish', 'Yawn',
|
|
663
|
+
],
|
|
664
|
+
onValidateTeam(team, format, teamHas) {
|
|
665
|
+
const problems = [];
|
|
666
|
+
for (const trademark in teamHas.trademarks) {
|
|
667
|
+
if (teamHas.trademarks[trademark] > 1) {
|
|
668
|
+
problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks[trademark]} Pok\u00e9mon with ${trademark} as a Trademark.)`);
|
|
680
669
|
}
|
|
681
|
-
pokemon.m.innates = Object.keys(pokemon.species.abilities)
|
|
682
|
-
.filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
|
|
683
|
-
.map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
|
|
684
|
-
.filter(ability => ability !== pokemon.ability);
|
|
685
670
|
}
|
|
671
|
+
return problems;
|
|
686
672
|
},
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
673
|
+
validateSet(set, teamHas) {
|
|
674
|
+
const dex = this.dex;
|
|
675
|
+
const ability = dex.moves.get(set.ability);
|
|
676
|
+
if (!ability.exists) { // Not even a real move
|
|
677
|
+
return this.validateSet(set, teamHas);
|
|
678
|
+
}
|
|
679
|
+
// Absolute trademark bans
|
|
680
|
+
if (ability.category !== 'Status') {
|
|
681
|
+
return [`${ability.name} is not a status move, and cannot be used as a trademark.`];
|
|
682
|
+
}
|
|
683
|
+
if (ability.forceSwitch || ability.selfSwitch) {
|
|
684
|
+
return [
|
|
685
|
+
`Force-switching and self-switching moves are banned from being used as trademarks.`,
|
|
686
|
+
`(${ability.name} is a ${ability.forceSwitch ? 'force' : 'self'}-switching move.)`,
|
|
687
|
+
];
|
|
688
|
+
}
|
|
689
|
+
const irrevokablyRestricted = [
|
|
690
|
+
'Assist', 'Copycat', 'Metronome', 'Mirror Move', 'Sleep Talk', // Could call another unsafe trademark
|
|
691
|
+
'Recycle', 'Trace', // Causes endless turns
|
|
692
|
+
'Skill Swap', // Self-propagates indefinitely
|
|
693
|
+
];
|
|
694
|
+
for (const m of set.moves) {
|
|
695
|
+
const move = dex.moves.get(m);
|
|
696
|
+
if (irrevokablyRestricted.includes(move.name)) {
|
|
697
|
+
return [`${move.name} is banned from Trademark, irrespective of custom rules, because it can cause endless turns.`];
|
|
692
698
|
}
|
|
693
699
|
}
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
|
|
697
|
-
pokemon.removeVolatile(innate);
|
|
700
|
+
if (irrevokablyRestricted.includes(ability.name)) {
|
|
701
|
+
return [`${ability.name} cannot safely function as a trademark.`];
|
|
698
702
|
}
|
|
699
|
-
|
|
703
|
+
// Contingent trademark bans
|
|
704
|
+
if (this.ruleTable.isRestricted(`move:${ability.id}`)) {
|
|
705
|
+
return [`${ability.name} is restricted from being used as a trademark.`];
|
|
706
|
+
}
|
|
707
|
+
if (set.moves.map(this.toID).includes(ability.id)) {
|
|
708
|
+
return [`${set.name} may not use ${ability.name} as both a trademark and one of its moves simultaneously.`];
|
|
709
|
+
}
|
|
710
|
+
const customRules = this.format.customRules || [];
|
|
711
|
+
if (!customRules.includes('!obtainableabilities')) customRules.push('!obtainableabilities');
|
|
712
|
+
|
|
713
|
+
const TeamValidator: typeof import('../sim/team-validator').TeamValidator =
|
|
714
|
+
require('../sim/team-validator').TeamValidator;
|
|
715
|
+
|
|
716
|
+
const validator = new TeamValidator(dex.formats.get(`${this.format.id}@@@${customRules.join(',')}`));
|
|
717
|
+
const moves = set.moves;
|
|
718
|
+
set.moves = [ability.id];
|
|
719
|
+
set.ability = dex.species.get(set.species).abilities['0'];
|
|
720
|
+
let problems = validator.validateSet(set, {}) || [];
|
|
721
|
+
if (problems.length) return problems;
|
|
722
|
+
set.moves = moves;
|
|
723
|
+
set.ability = dex.species.get(set.species).abilities['0'];
|
|
724
|
+
problems = problems.concat(validator.validateSet(set, teamHas) || []);
|
|
725
|
+
set.ability = ability.id;
|
|
726
|
+
if (!teamHas.trademarks) teamHas.trademarks = {};
|
|
727
|
+
teamHas.trademarks[ability.name] = (teamHas.trademarks[ability.name] || 0) + 1;
|
|
728
|
+
return problems.length ? problems : null;
|
|
729
|
+
},
|
|
730
|
+
pokemon: {
|
|
731
|
+
getAbility() {
|
|
732
|
+
const move = this.battle.dex.moves.get(this.battle.toID(this.ability));
|
|
733
|
+
if (!move.exists) return Object.getPrototypeOf(this).getAbility.call(this);
|
|
734
|
+
return {
|
|
735
|
+
id: move.id,
|
|
736
|
+
name: move.name,
|
|
737
|
+
onStart(this: Battle, pokemon: Pokemon) {
|
|
738
|
+
this.add('-activate', pokemon, 'ability: ' + move.name);
|
|
739
|
+
this.actions.useMove(move, pokemon);
|
|
740
|
+
},
|
|
741
|
+
toString() {
|
|
742
|
+
return "";
|
|
743
|
+
},
|
|
744
|
+
};
|
|
745
|
+
},
|
|
700
746
|
},
|
|
701
747
|
},
|
|
702
748
|
{
|
|
703
|
-
name: "[Gen 8]
|
|
704
|
-
desc: `Pokémon
|
|
749
|
+
name: "[Gen 8] Linked",
|
|
750
|
+
desc: `The first two moves in a Pokémon's moveset are used simultaneously.`,
|
|
705
751
|
threads: [
|
|
706
|
-
`• <a href="https://www.smogon.com/forums/threads/
|
|
752
|
+
`• <a href="https://www.smogon.com/forums/threads/3660421/">Linked</a>`,
|
|
707
753
|
],
|
|
708
754
|
|
|
709
|
-
mod: '
|
|
710
|
-
|
|
711
|
-
ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Dynamax Clause', 'Sleep Clause Mod', 'Endless Battle Clause'],
|
|
755
|
+
mod: 'linked',
|
|
756
|
+
ruleset: ['Standard', 'Dynamax Clause'],
|
|
712
757
|
banlist: [
|
|
713
|
-
'Calyrex-Ice', 'Calyrex-Shadow', '
|
|
714
|
-
'
|
|
715
|
-
'
|
|
716
|
-
'
|
|
717
|
-
'
|
|
758
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Cloyster', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
|
|
759
|
+
'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna',
|
|
760
|
+
'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Solgaleo',
|
|
761
|
+
'Spectrier', 'Urshifu-Base', 'Volcarona', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
|
|
762
|
+
'Zygarde-Base', 'Zygarde-Complete', 'Arena Trap', 'Chlorophyll', 'Moody', 'Power Construct', 'Sand Rush', 'Sand Veil', 'Shadow Tag', 'Slush Rush',
|
|
763
|
+
'Snow Cloak', 'Speed Boost', 'Surge Surfer', 'Swift Swim', 'Unburden', 'Bright Powder', 'King\'s Rock', 'Lax Incense', 'Baton Pass',
|
|
718
764
|
],
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
765
|
+
restricted: [
|
|
766
|
+
'Baneful Bunker', 'Bounce', 'Protect', 'Detect', 'Dig', 'Dive', 'Fly', 'King\'s Shield', 'Nature\'s Madness', 'Night Shade',
|
|
767
|
+
'Obstruct', 'Phantom Force', 'Seismic Toss', 'Shadow Force', 'Sky Drop', 'Spiky Shield', 'Super Fang', 'Trick Room',
|
|
768
|
+
],
|
|
769
|
+
onValidateSet(set) {
|
|
770
|
+
const problems = [];
|
|
771
|
+
for (const [i, moveid] of set.moves.entries()) {
|
|
772
|
+
const move = this.dex.moves.get(moveid);
|
|
773
|
+
if ([0, 1].includes(i) && this.ruleTable.isRestricted(`move:${move.id}`)) {
|
|
774
|
+
problems.push(`${set.name || set.species}'s move ${move.name} cannot be linked.`);
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
return problems;
|
|
731
778
|
},
|
|
732
779
|
},
|
|
733
780
|
|
|
@@ -791,8 +838,8 @@ export const Formats: FormatList = [
|
|
|
791
838
|
'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shedinja',
|
|
792
839
|
'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom',
|
|
793
840
|
'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter',
|
|
794
|
-
'Innards Out', 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', '
|
|
795
|
-
'
|
|
841
|
+
'Innards Out', 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag',
|
|
842
|
+
'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
|
|
796
843
|
],
|
|
797
844
|
onValidateSet(set) {
|
|
798
845
|
// Temporary fix until battle-only is implemented properly
|
|
@@ -877,17 +924,17 @@ export const Formats: FormatList = [
|
|
|
877
924
|
mod: 'gen8',
|
|
878
925
|
ruleset: ['Standard', 'STABmons Move Legality', 'Dynamax Clause', 'Sleep Moves Clause', '!Sleep Clause Mod'],
|
|
879
926
|
banlist: [
|
|
880
|
-
'Aegislash', 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite',
|
|
881
|
-
'
|
|
882
|
-
'
|
|
883
|
-
'
|
|
884
|
-
'
|
|
885
|
-
'
|
|
886
|
-
'Baton Pass',
|
|
927
|
+
'Aegislash', 'Blacephalon', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Dragonite', 'Eternatus',
|
|
928
|
+
'Genesect', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus',
|
|
929
|
+
'Landorus-Therian', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
|
|
930
|
+
'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Silvally', 'Solgaleo', 'Spectrier', 'Tapu Bulu', 'Tapu Koko', 'Tapu Lele', 'Thundurus-Base',
|
|
931
|
+
'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zapdos-Galar', 'Zekrom', 'Zygarde-Base',
|
|
932
|
+
'Arena Trap', 'Magnet Pull', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Baton Pass',
|
|
887
933
|
],
|
|
888
934
|
restricted: [
|
|
889
935
|
'Acupressure', 'Astral Barrage', 'Belly Drum', 'Bolt Beak', 'Clangorous Soul', 'Double Iron Bash', 'Electrify', 'Extreme Speed', 'Fishious Rend',
|
|
890
|
-
'Geomancy', 'Glacial Lance', 'Oblivion Wing', 'Precipice Blades', 'Shell Smash', 'Shift Gear', 'Thousand Arrows', '
|
|
936
|
+
'Geomancy', 'Glacial Lance', 'Oblivion Wing', 'Precipice Blades', 'Shell Smash', 'Shift Gear', 'Thousand Arrows', 'Thunderous Kick', 'V-create',
|
|
937
|
+
'Wicked Blow',
|
|
891
938
|
],
|
|
892
939
|
},
|
|
893
940
|
{
|
|
@@ -917,7 +964,7 @@ export const Formats: FormatList = [
|
|
|
917
964
|
banlist: [
|
|
918
965
|
'Blissey', 'Calyrex-Shadow', 'Chansey', 'Dragapult', 'Hawlucha', 'Marowak-Alola', 'Melmetal', 'Pikachu', 'Toxapex',
|
|
919
966
|
'Xerneas', 'Zacian', 'Zacian-Crowned', 'Uber > 1', 'AG ++ Uber > 1', 'Arena Trap', 'Huge Power', 'Moody', 'Pure Power',
|
|
920
|
-
'Shadow Tag', 'Baton Pass',
|
|
967
|
+
'Shadow Tag', 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Baton Pass',
|
|
921
968
|
],
|
|
922
969
|
onValidateTeam(team) {
|
|
923
970
|
const gods = new Set<string>();
|
|
@@ -1037,7 +1084,18 @@ export const Formats: FormatList = [
|
|
|
1037
1084
|
|
|
1038
1085
|
mod: 'gen8bdsp',
|
|
1039
1086
|
ruleset: ['[Gen 8 BDSP] UU'],
|
|
1040
|
-
banlist: ['UU', 'RUBL'],
|
|
1087
|
+
banlist: ['UU', 'RUBL', 'Drought'],
|
|
1088
|
+
},
|
|
1089
|
+
{
|
|
1090
|
+
name: "[Gen 8 BDSP] NU",
|
|
1091
|
+
threads: [
|
|
1092
|
+
`• <a href="https://www.smogon.com/forums/threads/3697080/">BDSP NU</a>`,
|
|
1093
|
+
],
|
|
1094
|
+
|
|
1095
|
+
mod: 'gen8bdsp',
|
|
1096
|
+
searchShow: false,
|
|
1097
|
+
ruleset: ['[Gen 8 BDSP] RU'],
|
|
1098
|
+
banlist: ['RU', 'NUBL'],
|
|
1041
1099
|
},
|
|
1042
1100
|
{
|
|
1043
1101
|
name: "[Gen 8 BDSP] LC",
|
|
@@ -1047,7 +1105,7 @@ export const Formats: FormatList = [
|
|
|
1047
1105
|
|
|
1048
1106
|
mod: 'gen8bdsp',
|
|
1049
1107
|
ruleset: ['Little Cup', 'Standard'],
|
|
1050
|
-
banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Baton Pass'],
|
|
1108
|
+
banlist: ['Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma', 'Moody', 'Baton Pass'],
|
|
1051
1109
|
},
|
|
1052
1110
|
{
|
|
1053
1111
|
name: "[Gen 8 BDSP] Monotype",
|
|
@@ -1117,6 +1175,24 @@ export const Formats: FormatList = [
|
|
|
1117
1175
|
section: "Challengeable OMs",
|
|
1118
1176
|
column: 2,
|
|
1119
1177
|
},
|
|
1178
|
+
{
|
|
1179
|
+
name: "[Gen 8] Camomons",
|
|
1180
|
+
desc: `Pokémon change type to match their first two moves.`,
|
|
1181
|
+
threads: [
|
|
1182
|
+
`• <a href="https://www.smogon.com/forums/threads/3656413/">Camomons</a>`,
|
|
1183
|
+
],
|
|
1184
|
+
|
|
1185
|
+
mod: 'gen8',
|
|
1186
|
+
searchShow: false,
|
|
1187
|
+
ruleset: ['Standard', 'Dynamax Clause', 'Camomons Mod'],
|
|
1188
|
+
banlist: [
|
|
1189
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragonite', 'Eternatus', 'Genesect', 'Giratina', 'Giratina-Origin',
|
|
1190
|
+
'Groudon', 'Ho-Oh', 'Hydreigon', 'Kartana', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Latias', 'Latios', 'Lugia',
|
|
1191
|
+
'Lunala', 'Marshadow', 'Mew', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
|
|
1192
|
+
'Reuniclus', 'Shedinja', 'Slowking-Galar', 'Solgaleo', 'Spectrier', 'Tornadus-Therian', 'Volcarona', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned',
|
|
1193
|
+
'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zeraora', 'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
|
|
1194
|
+
],
|
|
1195
|
+
},
|
|
1120
1196
|
{
|
|
1121
1197
|
name: "[Gen 8] Inheritance",
|
|
1122
1198
|
desc: `Pokémon may use the ability and moves of another, as long as they forfeit their own learnset.`,
|
|
@@ -1544,6 +1620,68 @@ export const Formats: FormatList = [
|
|
|
1544
1620
|
},
|
|
1545
1621
|
},
|
|
1546
1622
|
},
|
|
1623
|
+
{
|
|
1624
|
+
name: "[Gen 8] Pokebilities",
|
|
1625
|
+
desc: `Pokémon have all of their released abilities simultaneously.`,
|
|
1626
|
+
threads: [
|
|
1627
|
+
`• <a href="https://www.smogon.com/forums/threads/3679692/">Pokébilities</a>`,
|
|
1628
|
+
],
|
|
1629
|
+
mod: 'pokebilities',
|
|
1630
|
+
searchShow: false,
|
|
1631
|
+
ruleset: ['Standard', 'Dynamax Clause'],
|
|
1632
|
+
banlist: [
|
|
1633
|
+
'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Conkeldurr', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dracozolt',
|
|
1634
|
+
'Eternatus', 'Excadrill', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
|
|
1635
|
+
'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings',
|
|
1636
|
+
'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base',
|
|
1637
|
+
'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zygarde-Base', 'Power Construct',
|
|
1638
|
+
'Baton Pass', 'King\'s Rock',
|
|
1639
|
+
// Moody users
|
|
1640
|
+
'Glalie', 'Octillery', 'Remoraid', 'Snorunt',
|
|
1641
|
+
// Shadow Tag/Arena Trap
|
|
1642
|
+
'Diglett-Base', 'Dugtrio-Base', 'Gothita', 'Gothitelle', 'Gothorita', 'Trapinch', 'Wobbuffet', 'Wynaut',
|
|
1643
|
+
],
|
|
1644
|
+
onValidateSet(set) {
|
|
1645
|
+
const species = this.dex.species.get(set.species);
|
|
1646
|
+
const unSeenAbilities = Object.keys(species.abilities)
|
|
1647
|
+
.filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden))
|
|
1648
|
+
.map(key => species.abilities[key as "0" | "1" | "H" | "S"])
|
|
1649
|
+
.filter(ability => ability !== set.ability);
|
|
1650
|
+
if (unSeenAbilities.length && this.toID(set.ability) !== this.toID(species.abilities['S'])) {
|
|
1651
|
+
for (const abilityName of unSeenAbilities) {
|
|
1652
|
+
const banReason = this.ruleTable.check('ability:' + this.toID(abilityName));
|
|
1653
|
+
if (banReason) {
|
|
1654
|
+
return [`${set.name}'s ability ${abilityName} is ${banReason}.`];
|
|
1655
|
+
}
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1658
|
+
},
|
|
1659
|
+
onBegin() {
|
|
1660
|
+
for (const pokemon of this.getAllPokemon()) {
|
|
1661
|
+
if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
|
|
1662
|
+
continue;
|
|
1663
|
+
}
|
|
1664
|
+
pokemon.m.innates = Object.keys(pokemon.species.abilities)
|
|
1665
|
+
.filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
|
|
1666
|
+
.map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
|
|
1667
|
+
.filter(ability => ability !== pokemon.ability);
|
|
1668
|
+
}
|
|
1669
|
+
},
|
|
1670
|
+
onSwitchInPriority: 2,
|
|
1671
|
+
onSwitchIn(pokemon) {
|
|
1672
|
+
if (pokemon.m.innates) {
|
|
1673
|
+
for (const innate of pokemon.m.innates) {
|
|
1674
|
+
pokemon.addVolatile("ability:" + innate, pokemon);
|
|
1675
|
+
}
|
|
1676
|
+
}
|
|
1677
|
+
},
|
|
1678
|
+
onAfterMega(pokemon) {
|
|
1679
|
+
for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
|
|
1680
|
+
pokemon.removeVolatile(innate);
|
|
1681
|
+
}
|
|
1682
|
+
pokemon.m.innates = undefined;
|
|
1683
|
+
},
|
|
1684
|
+
},
|
|
1547
1685
|
{
|
|
1548
1686
|
name: "[Gen 8] Shared Power",
|
|
1549
1687
|
desc: `Once a Pokémon switches in, its ability is shared with the rest of the team.`,
|
|
@@ -1740,106 +1878,6 @@ export const Formats: FormatList = [
|
|
|
1740
1878
|
},
|
|
1741
1879
|
},
|
|
1742
1880
|
},
|
|
1743
|
-
{
|
|
1744
|
-
name: "[Gen 8] Trademarked",
|
|
1745
|
-
desc: `Sacrifice your Pokémon's ability for a status move that activates on switch-in.`,
|
|
1746
|
-
threads: [
|
|
1747
|
-
`• <a href="https://www.smogon.com/forums/threads/3656980/">Trademarked</a>`,
|
|
1748
|
-
],
|
|
1749
|
-
|
|
1750
|
-
mod: 'gen8',
|
|
1751
|
-
searchShow: false,
|
|
1752
|
-
ruleset: ['Standard', 'Dynamax Clause'],
|
|
1753
|
-
banlist: [
|
|
1754
|
-
'Calyrex-Ice', 'Calyrex-Shadow', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Dragapult', 'Eternatus', 'Kyurem-Black', 'Kyurem-White',
|
|
1755
|
-
'Giratina', 'Giratina-Origin', 'Genesect', 'Groudon', 'Ho-Oh', 'Kartana', 'Kyogre', 'Lugia', 'Lunala', 'Magearna', 'Marshadow',
|
|
1756
|
-
'Melmetal', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
|
|
1757
|
-
'Solgaleo', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base',
|
|
1758
|
-
'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Baton Pass',
|
|
1759
|
-
],
|
|
1760
|
-
restricted: [
|
|
1761
|
-
'Baneful Bunker', 'Block', 'Copycat', 'Corrosive Gas', 'Detect', 'Destiny Bond', 'Disable', 'Encore', 'Fairy Lock', 'Hypnosis', 'Ingrain',
|
|
1762
|
-
'Instruct', 'Lovely Kiss', 'King\'s Shield', 'Mat Block', 'Mean Look', 'move:Metronome', 'Obstruct', 'Octolock', 'Nature Power', 'Parting Shot',
|
|
1763
|
-
'Psycho Shift', 'Protect', 'Roar', 'Sing', 'Skill Swap', 'Sleep Powder', 'Sleep Talk', 'Spiky Shield', 'Spore', 'Substitute', 'Teleport',
|
|
1764
|
-
'Whirlwind', 'Wish', 'Yawn',
|
|
1765
|
-
],
|
|
1766
|
-
onValidateTeam(team, format, teamHas) {
|
|
1767
|
-
const problems = [];
|
|
1768
|
-
for (const trademark in teamHas.trademarks) {
|
|
1769
|
-
if (teamHas.trademarks[trademark] > 1) {
|
|
1770
|
-
problems.push(`You are limited to 1 of each Trademark.`, `(You have ${teamHas.trademarks[trademark]} Pok\u00e9mon with ${trademark} as a Trademark.)`);
|
|
1771
|
-
}
|
|
1772
|
-
}
|
|
1773
|
-
return problems;
|
|
1774
|
-
},
|
|
1775
|
-
validateSet(set, teamHas) {
|
|
1776
|
-
const dex = this.dex;
|
|
1777
|
-
const ability = dex.moves.get(set.ability);
|
|
1778
|
-
if (!ability.exists) { // Not even a real move
|
|
1779
|
-
return this.validateSet(set, teamHas);
|
|
1780
|
-
}
|
|
1781
|
-
// Absolute trademark bans
|
|
1782
|
-
if (ability.category !== 'Status') {
|
|
1783
|
-
return [`${ability.name} is not a status move, and cannot be used as a trademark.`];
|
|
1784
|
-
}
|
|
1785
|
-
if (ability.forceSwitch || ability.selfSwitch) {
|
|
1786
|
-
return [
|
|
1787
|
-
`Force-switching and self-switching moves are banned from being used as trademarks.`,
|
|
1788
|
-
`(${ability.name} is a ${ability.forceSwitch ? 'force' : 'self'}-switching move.)`,
|
|
1789
|
-
];
|
|
1790
|
-
}
|
|
1791
|
-
const irrevokablyRestricted = [
|
|
1792
|
-
'Assist', 'Copycat', 'Metronome', 'Mirror Move', 'Sleep Talk', // Could call another unsafe trademark
|
|
1793
|
-
'Skill Swap', // Self-propagates indefinitely
|
|
1794
|
-
];
|
|
1795
|
-
if (irrevokablyRestricted.includes(ability.name)) {
|
|
1796
|
-
return [`${ability.name} cannot safely function as a trademark.`];
|
|
1797
|
-
}
|
|
1798
|
-
// Contingent trademark bans
|
|
1799
|
-
if (this.ruleTable.isRestricted(`move:${ability.id}`)) {
|
|
1800
|
-
return [`${ability.name} is restricted from being used as a trademark.`];
|
|
1801
|
-
}
|
|
1802
|
-
if (set.moves.map(this.toID).includes(ability.id)) {
|
|
1803
|
-
return [`${set.name} may not use ${ability.name} as both a trademark and one of its moves simultaneously.`];
|
|
1804
|
-
}
|
|
1805
|
-
const customRules = this.format.customRules || [];
|
|
1806
|
-
if (!customRules.includes('!obtainableabilities')) customRules.push('!obtainableabilities');
|
|
1807
|
-
|
|
1808
|
-
const TeamValidator: typeof import('../sim/team-validator').TeamValidator =
|
|
1809
|
-
require('../sim/team-validator').TeamValidator;
|
|
1810
|
-
|
|
1811
|
-
const validator = new TeamValidator(dex.formats.get(`${this.format.id}@@@${customRules.join(',')}`));
|
|
1812
|
-
const moves = set.moves;
|
|
1813
|
-
set.moves = [ability.id];
|
|
1814
|
-
set.ability = dex.species.get(set.species).abilities['0'];
|
|
1815
|
-
let problems = validator.validateSet(set, {}) || [];
|
|
1816
|
-
if (problems.length) return problems;
|
|
1817
|
-
set.moves = moves;
|
|
1818
|
-
set.ability = dex.species.get(set.species).abilities['0'];
|
|
1819
|
-
problems = problems.concat(validator.validateSet(set, teamHas) || []);
|
|
1820
|
-
set.ability = ability.id;
|
|
1821
|
-
if (!teamHas.trademarks) teamHas.trademarks = {};
|
|
1822
|
-
teamHas.trademarks[ability.name] = (teamHas.trademarks[ability.name] || 0) + 1;
|
|
1823
|
-
return problems.length ? problems : null;
|
|
1824
|
-
},
|
|
1825
|
-
pokemon: {
|
|
1826
|
-
getAbility() {
|
|
1827
|
-
const move = this.battle.dex.moves.get(this.battle.toID(this.ability));
|
|
1828
|
-
if (!move.exists) return Object.getPrototypeOf(this).getAbility.call(this);
|
|
1829
|
-
return {
|
|
1830
|
-
id: move.id,
|
|
1831
|
-
name: move.name,
|
|
1832
|
-
onStart(this: Battle, pokemon: Pokemon) {
|
|
1833
|
-
this.add('-activate', pokemon, 'ability: ' + move.name);
|
|
1834
|
-
this.actions.useMove(move, pokemon);
|
|
1835
|
-
},
|
|
1836
|
-
toString() {
|
|
1837
|
-
return "";
|
|
1838
|
-
},
|
|
1839
|
-
};
|
|
1840
|
-
},
|
|
1841
|
-
},
|
|
1842
|
-
},
|
|
1843
1881
|
|
|
1844
1882
|
// Randomized Metas
|
|
1845
1883
|
///////////////////////////////////////////////////////////////////
|
|
@@ -1863,6 +1901,38 @@ export const Formats: FormatList = [
|
|
|
1863
1901
|
searchShow: false,
|
|
1864
1902
|
ruleset: ['[Gen 8] Random Battle', 'Dynamax Clause'],
|
|
1865
1903
|
},
|
|
1904
|
+
{
|
|
1905
|
+
name: "[Gen 8] Random Battle Mayhem",
|
|
1906
|
+
desc: `[Gen 8] Random Battle (No Dmax) with Team Preview and elements of Camomons, Inverse, Scalemons, and Shared Power.`,
|
|
1907
|
+
|
|
1908
|
+
mod: 'sharedpower',
|
|
1909
|
+
team: 'random',
|
|
1910
|
+
searchShow: false,
|
|
1911
|
+
ruleset: ['[Gen 8] Random Battle', 'Team Preview', 'Dynamax Clause', 'Camomons Mod', 'Inverse Mod', 'Scalemons Mod'],
|
|
1912
|
+
onBeforeSwitchIn(pokemon) {
|
|
1913
|
+
let format = this.format;
|
|
1914
|
+
if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
|
|
1915
|
+
for (const ability of format.getSharedPower!(pokemon)) {
|
|
1916
|
+
const effect = 'ability:' + ability;
|
|
1917
|
+
pokemon.volatiles[effect] = {id: this.toID(effect), target: pokemon};
|
|
1918
|
+
if (!pokemon.m.abils) pokemon.m.abils = [];
|
|
1919
|
+
if (!pokemon.m.abils.includes(effect)) pokemon.m.abils.push(effect);
|
|
1920
|
+
}
|
|
1921
|
+
},
|
|
1922
|
+
onSwitchInPriority: 2,
|
|
1923
|
+
onSwitchIn(pokemon) {
|
|
1924
|
+
let format = this.format;
|
|
1925
|
+
if (!format.getSharedPower) format = this.dex.formats.get('gen8sharedpower');
|
|
1926
|
+
for (const ability of format.getSharedPower!(pokemon)) {
|
|
1927
|
+
if (ability === 'noability') {
|
|
1928
|
+
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.`);
|
|
1929
|
+
}
|
|
1930
|
+
const effect = 'ability:' + ability;
|
|
1931
|
+
delete pokemon.volatiles[effect];
|
|
1932
|
+
pokemon.addVolatile(effect);
|
|
1933
|
+
}
|
|
1934
|
+
},
|
|
1935
|
+
},
|
|
1866
1936
|
{
|
|
1867
1937
|
name: "[Gen 8] BSS Factory",
|
|
1868
1938
|
desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Stadium Singles.`,
|
|
@@ -2140,40 +2210,39 @@ export const Formats: FormatList = [
|
|
|
2140
2210
|
column: 3,
|
|
2141
2211
|
},
|
|
2142
2212
|
{
|
|
2143
|
-
name: "[Gen
|
|
2144
|
-
threads: [
|
|
2213
|
+
name: "[Gen 3] UU",
|
|
2214
|
+
threads: [
|
|
2215
|
+
`• <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
|
|
2216
|
+
`• <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
|
|
2217
|
+
],
|
|
2145
2218
|
|
|
2146
|
-
mod: '
|
|
2219
|
+
mod: 'gen3',
|
|
2147
2220
|
// searchShow: false,
|
|
2148
|
-
ruleset: ['
|
|
2149
|
-
banlist: ['OU', 'UUBL'],
|
|
2221
|
+
ruleset: ['Standard', 'NFE Clause'],
|
|
2222
|
+
banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Baton Pass'],
|
|
2223
|
+
unbanlist: ['Scyther', 'Sand Veil'],
|
|
2150
2224
|
},
|
|
2151
2225
|
{
|
|
2152
|
-
name: "[Gen
|
|
2226
|
+
name: "[Gen 1] NU",
|
|
2153
2227
|
threads: [
|
|
2154
|
-
`• <a href="https://www.smogon.com/forums/
|
|
2155
|
-
`• <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
|
|
2228
|
+
`• <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
|
|
2156
2229
|
],
|
|
2157
2230
|
|
|
2158
|
-
mod: '
|
|
2231
|
+
mod: 'gen1',
|
|
2159
2232
|
// searchShow: false,
|
|
2160
|
-
ruleset: ['[Gen
|
|
2161
|
-
banlist: ['
|
|
2233
|
+
ruleset: ['[Gen 1] UU'],
|
|
2234
|
+
banlist: ['UU', 'NUBL'],
|
|
2162
2235
|
},
|
|
2163
2236
|
{
|
|
2164
|
-
name: "[Gen
|
|
2237
|
+
name: "[Gen 4] Ubers",
|
|
2165
2238
|
threads: [
|
|
2166
|
-
`• <a href="https://www.smogon.com/forums/posts/
|
|
2167
|
-
`• <a href="https://www.smogon.com/forums/threads/3485860/">BW2 LC Viability Rankings</a>`,
|
|
2239
|
+
`• <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
|
|
2168
2240
|
],
|
|
2169
2241
|
|
|
2170
|
-
mod: '
|
|
2242
|
+
mod: 'gen4',
|
|
2171
2243
|
// searchShow: false,
|
|
2172
|
-
ruleset: ['Standard'
|
|
2173
|
-
banlist: [
|
|
2174
|
-
'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma',
|
|
2175
|
-
'Sand Rush', 'Sand Veil', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
|
|
2176
|
-
],
|
|
2244
|
+
ruleset: ['Standard'],
|
|
2245
|
+
banlist: ['AG'],
|
|
2177
2246
|
},
|
|
2178
2247
|
|
|
2179
2248
|
// Past Gens OU
|
|
@@ -2228,7 +2297,7 @@ export const Formats: FormatList = [
|
|
|
2228
2297
|
|
|
2229
2298
|
mod: 'gen4',
|
|
2230
2299
|
ruleset: ['Standard'],
|
|
2231
|
-
banlist: ['AG', 'Uber', 'Arena Trap', 'Sand Veil', 'Swinub + Snow Cloak', 'Piloswine + Snow Cloak', 'Mamoswine + Snow Cloak', 'Soul Dew', 'Baton Pass'],
|
|
2300
|
+
banlist: ['AG', 'Uber', 'Arena Trap', 'Sand Veil', 'Swinub + Snow Cloak', 'Piloswine + Snow Cloak', 'Mamoswine + Snow Cloak', 'Soul Dew', 'Baton Pass', 'Swagger'],
|
|
2232
2301
|
},
|
|
2233
2302
|
{
|
|
2234
2303
|
name: "[Gen 3] OU",
|
|
@@ -3034,6 +3103,18 @@ export const Formats: FormatList = [
|
|
|
3034
3103
|
banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
|
|
3035
3104
|
unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
|
|
3036
3105
|
},
|
|
3106
|
+
{
|
|
3107
|
+
name: "[Gen 5] NU",
|
|
3108
|
+
threads: [
|
|
3109
|
+
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
3110
|
+
`• <a href="https://www.smogon.com/forums/threads/3484121/">BW2 NU Viability Rankings</a>`,
|
|
3111
|
+
],
|
|
3112
|
+
|
|
3113
|
+
mod: 'gen5',
|
|
3114
|
+
searchShow: false,
|
|
3115
|
+
ruleset: ['[Gen 5] RU', '!Sleep Moves Clause', 'Sleep Clause Mod'],
|
|
3116
|
+
banlist: ['RU', 'NUBL', 'Assist', 'Copycat'],
|
|
3117
|
+
},
|
|
3037
3118
|
{
|
|
3038
3119
|
name: "[Gen 5] PU",
|
|
3039
3120
|
threads: [
|
|
@@ -3045,6 +3126,21 @@ export const Formats: FormatList = [
|
|
|
3045
3126
|
ruleset: ['[Gen 5] NU', 'Sleep Moves Clause'],
|
|
3046
3127
|
banlist: ['NU', 'PUBL'],
|
|
3047
3128
|
},
|
|
3129
|
+
{
|
|
3130
|
+
name: "[Gen 5] LC",
|
|
3131
|
+
threads: [
|
|
3132
|
+
`• <a href="https://www.smogon.com/forums/posts/6431094/">BW2 Sample Teams</a>`,
|
|
3133
|
+
`• <a href="https://www.smogon.com/forums/threads/3485860/">BW2 LC Viability Rankings</a>`,
|
|
3134
|
+
],
|
|
3135
|
+
|
|
3136
|
+
mod: 'gen5',
|
|
3137
|
+
searchShow: false,
|
|
3138
|
+
ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
|
|
3139
|
+
banlist: [
|
|
3140
|
+
'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma',
|
|
3141
|
+
'Sand Rush', 'Sand Veil', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
|
|
3142
|
+
],
|
|
3143
|
+
},
|
|
3048
3144
|
{
|
|
3049
3145
|
name: "[Gen 5] Monotype",
|
|
3050
3146
|
desc: `All the Pokémon on a team must share a type.`,
|
|
@@ -3169,17 +3265,6 @@ export const Formats: FormatList = [
|
|
|
3169
3265
|
section: "DPP Singles",
|
|
3170
3266
|
column: 5,
|
|
3171
3267
|
},
|
|
3172
|
-
{
|
|
3173
|
-
name: "[Gen 4] Ubers",
|
|
3174
|
-
threads: [
|
|
3175
|
-
`• <a href="https://www.smogon.com/forums/posts/8286279/">DPP Ubers</a>`,
|
|
3176
|
-
],
|
|
3177
|
-
|
|
3178
|
-
mod: 'gen4',
|
|
3179
|
-
searchShow: false,
|
|
3180
|
-
ruleset: ['Standard'],
|
|
3181
|
-
banlist: ['AG'],
|
|
3182
|
-
},
|
|
3183
3268
|
{
|
|
3184
3269
|
name: "[Gen 4] UU",
|
|
3185
3270
|
threads: [
|
|
@@ -3191,7 +3276,7 @@ export const Formats: FormatList = [
|
|
|
3191
3276
|
searchShow: false,
|
|
3192
3277
|
ruleset: ['[Gen 4] OU'],
|
|
3193
3278
|
banlist: ['OU', 'UUBL'],
|
|
3194
|
-
unbanlist: ['Arena Trap'],
|
|
3279
|
+
unbanlist: ['Arena Trap', 'Swagger'],
|
|
3195
3280
|
},
|
|
3196
3281
|
{
|
|
3197
3282
|
name: "[Gen 4] NU",
|
|
@@ -3252,7 +3337,7 @@ export const Formats: FormatList = [
|
|
|
3252
3337
|
'[Gen 4] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
|
|
3253
3338
|
],
|
|
3254
3339
|
banlist: ['Latias', 'Machamp', 'Porygon-Z', 'Shaymin', 'Snorlax', 'Togekiss', 'Focus Sash', 'Destiny Bond', 'Explosion', 'Perish Song', 'Self-Destruct'],
|
|
3255
|
-
unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil'],
|
|
3340
|
+
unbanlist: ['Wobbuffet', 'Wynaut', 'Sand Veil', 'Swagger'],
|
|
3256
3341
|
},
|
|
3257
3342
|
{
|
|
3258
3343
|
name: "[Gen 4] Anything Goes",
|
|
@@ -3288,7 +3373,7 @@ export const Formats: FormatList = [
|
|
|
3288
3373
|
searchShow: false,
|
|
3289
3374
|
ruleset: ['[Gen 4] OU'],
|
|
3290
3375
|
banlist: ['Explosion'],
|
|
3291
|
-
unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut'],
|
|
3376
|
+
unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut', 'Swagger'],
|
|
3292
3377
|
},
|
|
3293
3378
|
{
|
|
3294
3379
|
name: "[Gen 4] VGC 2010",
|
|
@@ -3339,19 +3424,6 @@ export const Formats: FormatList = [
|
|
|
3339
3424
|
ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
|
|
3340
3425
|
banlist: ['Wobbuffet + Leftovers'],
|
|
3341
3426
|
},
|
|
3342
|
-
{
|
|
3343
|
-
name: "[Gen 3] UU",
|
|
3344
|
-
threads: [
|
|
3345
|
-
`• <a href="https://www.smogon.com/forums/threads/3585923/">ADV UU Metagame Discussion</a>`,
|
|
3346
|
-
`• <a href="https://www.smogon.com/forums/threads/3548578/">ADV UU Viability Rankings</a>`,
|
|
3347
|
-
],
|
|
3348
|
-
|
|
3349
|
-
mod: 'gen3',
|
|
3350
|
-
searchShow: false,
|
|
3351
|
-
ruleset: ['Standard', 'NFE Clause'],
|
|
3352
|
-
banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Baton Pass'],
|
|
3353
|
-
unbanlist: ['Scyther', 'Sand Veil'],
|
|
3354
|
-
},
|
|
3355
3427
|
{
|
|
3356
3428
|
name: "[Gen 3] NU",
|
|
3357
3429
|
threads: [
|
|
@@ -3421,6 +3493,15 @@ export const Formats: FormatList = [
|
|
|
3421
3493
|
searchShow: false,
|
|
3422
3494
|
ruleset: ['Standard'],
|
|
3423
3495
|
},
|
|
3496
|
+
{
|
|
3497
|
+
name: "[Gen 2] UU",
|
|
3498
|
+
threads: [`• <a href="https://www.smogon.com/forums/threads/3576710/">GSC UU</a>`],
|
|
3499
|
+
|
|
3500
|
+
mod: 'gen2',
|
|
3501
|
+
searchShow: false,
|
|
3502
|
+
ruleset: ['[Gen 2] OU'],
|
|
3503
|
+
banlist: ['OU', 'UUBL'],
|
|
3504
|
+
},
|
|
3424
3505
|
{
|
|
3425
3506
|
name: "[Gen 2] NU",
|
|
3426
3507
|
threads: [`• <a href="https://www.smogon.com/forums/threads/3642565/">GSC NU</a>`],
|
|
@@ -3441,7 +3522,7 @@ export const Formats: FormatList = [
|
|
|
3441
3522
|
'[Gen 2] OU', 'Accuracy Moves Clause', 'Sleep Moves Clause', 'Team Preview',
|
|
3442
3523
|
],
|
|
3443
3524
|
banlist: [
|
|
3444
|
-
'Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw',
|
|
3525
|
+
'Alakazam', 'Clefable', 'Snorlax', 'Zapdos', 'Berserk Gene', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw',
|
|
3445
3526
|
'Attract', 'Destiny Bond', 'Explosion', 'Perish Song', 'Present', 'Self-Destruct', 'Swagger',
|
|
3446
3527
|
],
|
|
3447
3528
|
},
|
|
@@ -3502,17 +3583,6 @@ export const Formats: FormatList = [
|
|
|
3502
3583
|
ruleset: ['[Gen 1] OU'],
|
|
3503
3584
|
banlist: ['OU', 'UUBL'],
|
|
3504
3585
|
},
|
|
3505
|
-
{
|
|
3506
|
-
name: "[Gen 1] NU",
|
|
3507
|
-
threads: [
|
|
3508
|
-
`• <a href="https://www.smogon.com/forums/threads/3668913/">RBY NU Viability Rankings</a>`,
|
|
3509
|
-
],
|
|
3510
|
-
|
|
3511
|
-
mod: 'gen1',
|
|
3512
|
-
searchShow: false,
|
|
3513
|
-
ruleset: ['[Gen 1] UU'],
|
|
3514
|
-
banlist: ['UU', 'NUBL'],
|
|
3515
|
-
},
|
|
3516
3586
|
{
|
|
3517
3587
|
name: "[Gen 1] Japanese OU",
|
|
3518
3588
|
desc: `Generation 1 with Japanese battle mechanics.`,
|