diff --git a/config/formats.ts b/config/formats.ts
index 81ca95df94..db1fea833a 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -664,217 +664,174 @@ export const Formats: FormatList = [
column: 2,
},
{
- name: "[Gen 9] Foresighters",
- desc: `Moves in the first moveslot will be delayed by two turns.`,
+ name: "[Gen 9] Pokebilities",
+ desc: `Pokémon have all of their released abilities simultaneously.`,
threads: [
- `• Foresighters`,
+ `• Pokébilities`,
],
-
- mod: 'gen9',
- ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'],
+ mod: 'pokebilities',
+ // searchShow: false,
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Min Source Gen = 9'],
banlist: [
- 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chien-Pao', 'Chi-Yu', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra',
- 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base',
- 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram',
- 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap',
- 'Moody', 'Shadow Tag', 'Sand Veil', 'Snow Cloak', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Dire Claw', 'Last Respects', 'Shed Tail',
- ],
- restricted: [
- 'Beat Up', 'Belly Drum', 'Clangorous Soul', 'Dragon Dance', 'Endeavor', 'Quiver Dance', 'Shell Smash', 'Shift Gear', 'Tail Glow', 'Tidy Up', 'Victory Dance',
+ 'Arceus', 'Annihilape', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Conkeldurr', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra',
+ 'Eternatus', 'Excadrill', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
+ 'Landorus-Base', 'Lugia', 'Lunala', 'Miraidon', 'Mewtwo', 'Necrozma-Dusk-Mane', 'Necrozma-Dawn-Wings', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin',
+ 'Porygon-Z', 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Smeargle', 'Sneasler', 'Solgaleo', 'Spectrier', 'Terapagos', 'Ursaluna-Bloodmoon', 'Urshifu-Base',
+ 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail', 'Last Respects',
],
onValidateSet(set) {
- const fsMove = this.dex.moves.get(set.moves[0]);
- if (this.ruleTable.isRestricted(`move:${fsMove.id}`)) {
- return [`${set.name}'s move ${fsMove.name} cannot be used as a future move.`];
- }
- },
- onModifyMove(move, pokemon) {
- if (move.id === pokemon.moveSlots[0].id && !move.flags['futuremove']) {
- move.flags['futuremove'] = 1;
- delete move.flags['protect'];
- move.onTry = function (source, t) {
- if (!t.side.addSlotCondition(t, 'futuremove')) {
- this.hint('Future moves fail when the targeted slot already has a future move focused on it.');
- return false;
+ const species = this.dex.species.get(set.species);
+ const unSeenAbilities = Object.keys(species.abilities)
+ .filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden))
+ .map(key => species.abilities[key as "0" | "1" | "H" | "S"])
+ .filter(ability => ability !== set.ability);
+ if (unSeenAbilities.length && this.toID(set.ability) !== this.toID(species.abilities['S'])) {
+ for (const abilityName of unSeenAbilities) {
+ const banReason = this.ruleTable.check('ability:' + this.toID(abilityName));
+ if (banReason) {
+ return [`${set.name}'s ability ${abilityName} is ${banReason}.`];
}
- const moveData = this.dex.getActiveMove(move.id);
- moveData.flags['futuremove'] = 1;
- delete moveData.flags['protect'];
- Object.assign(t.side.slotConditions[t.position]['futuremove'], {
- duration: 3,
- move: moveData.id,
- source: source,
- moveData: moveData,
- });
- this.add('-message', `${source.name} foresaw an attack!`);
- return this.NOT_FAIL;
- };
+ }
}
},
- },
- {
- name: "[Gen 9] Balanced Hackmons UU",
- desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`,
- threads: [
- `• Balanced Hackmons`,
- `• BH Resources`,
- ],
-
- mod: 'gen9',
- ruleset: ['[Gen 9] Balanced Hackmons'],
- banlist: [
- 'Alakazam-Mega', 'Arceus-Fairy', 'Arceus-Ghost', 'Arceus-Ground', 'Arceus-Water', 'Audino-Mega', 'Blissey', 'Celesteela', 'Chansey',
- 'Dialga-Origin', 'Eternatus', 'Flutter Mane', 'Garchomp-Mega', 'Greninja-Ash', 'Ho-Oh', 'Kyogre-Primal', 'Lucario-Mega', 'Lunala',
- 'Miraidon', 'Necrozma-Ultra', 'Slowbro-Mega', 'Steelix-Mega', 'Swampert-Mega', 'Yveltal',
- ],
- },
- {
- name: "[Gen 9] Partners in Crime",
- desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`,
- threads: [
- `• Partners in Crime`,
- ],
-
- mod: 'partnersincrime',
- gameType: 'doubles',
- ruleset: ['Standard Doubles'],
- banlist: [
- 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Cresselia', 'Darkrai', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Flutter Mane',
- 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo',
- 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Smeargle', 'Solgaleo', 'Terapagos',
- 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Contrary', 'Dancer', 'Huge Power',
- 'Moody', 'Pure Power', 'Serene Grace', 'Shadow Tag', 'Bright Powder', 'King\'s Rock', 'Razor Fang', 'Ally Switch', 'Last Respects', 'Revival Blessing',
- 'Swagger',
- ],
onBegin() {
for (const pokemon of this.getAllPokemon()) {
- pokemon.m.trackPP = new Map();
+ if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
+ continue;
+ }
+ pokemon.m.innates = Object.keys(pokemon.species.abilities)
+ .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
+ .map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
+ .filter(ability => ability !== pokemon.ability);
}
},
onBeforeSwitchIn(pokemon) {
- pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
- let ngas = false;
- for (const poke of this.getAllActive()) {
- if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
- ngas = true;
- break;
- }
- }
- const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas', 'illusion', 'wanderingspirit'];
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
- if (ally && ally.ability !== pokemon.ability) {
- if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
- pokemon.m.innate = 'ability:' + ally.ability;
- if (!ngas || ally.getAbility().flags['cantsuppress'] || pokemon.hasItem('Ability Shield')) {
- pokemon.volatiles[pokemon.m.innate] = {id: pokemon.m.innate, target: pokemon};
- pokemon.m.startVolatile = true;
- }
- }
- if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
- ally.m.innate = 'ability:' + pokemon.ability;
- if (!ngas || pokemon.getAbility().flags['cantsuppress'] || ally.hasItem('Ability Shield')) {
- ally.volatiles[ally.m.innate] = {id: ally.m.innate, target: ally};
- ally.m.startVolatile = true;
- }
+ // Abilities that must be applied before both sides trigger onSwitchIn to correctly
+ // handle switch-in ability-to-ability interactions, e.g. Intimidate counters
+ const neededBeforeSwitchInIDs = [
+ 'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
+ 'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
+ ];
+ if (pokemon.m.innates) {
+ for (const innate of pokemon.m.innates) {
+ if (!neededBeforeSwitchInIDs.includes(innate)) continue;
+ if (pokemon.hasAbility(innate)) continue;
+ pokemon.addVolatile("ability:" + innate, pokemon);
}
}
},
- // Starting innate abilities in scripts#actions
- onSwitchOut(pokemon) {
- if (pokemon.m.innate) {
- pokemon.removeVolatile(pokemon.m.innate);
- delete pokemon.m.innate;
+ onSwitchInPriority: 2,
+ onSwitchIn(pokemon) {
+ if (pokemon.m.innates) {
+ for (const innate of pokemon.m.innates) {
+ if (pokemon.hasAbility(innate)) continue;
+ pokemon.addVolatile("ability:" + innate, pokemon);
+ }
}
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
- if (ally && ally.m.innate) {
- ally.removeVolatile(ally.m.innate);
- delete ally.m.innate;
+ },
+ onSwitchOut(pokemon) {
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
+ pokemon.removeVolatile(innate);
}
},
onFaint(pokemon) {
- if (pokemon.m.innate) {
- pokemon.removeVolatile(pokemon.m.innate);
- delete pokemon.m.innate;
- }
- const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
- if (ally && ally.m.innate) {
- ally.removeVolatile(ally.m.innate);
- delete ally.m.innate;
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
+ const innateEffect = this.dex.conditions.get(innate) as Effect;
+ this.singleEvent('End', innateEffect, null, pokemon);
}
},
- },
-
- // Other Metagames
- ///////////////////////////////////////////////////////////////////
-
- {
- section: "Other Metagames",
- column: 2,
+ onAfterMega(pokemon) {
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
+ pokemon.removeVolatile(innate);
+ }
+ pokemon.m.innates = undefined;
+ },
},
{
- name: "[Gen 9] Almost Any Ability",
- desc: `Pokémon have access to almost any ability.`,
+ name: "[Gen 9] The Loser's Game",
+ desc: `The first player to lose all of their Pokémon wins.`,
threads: [
- `• Almost Any Ability`,
- `• AAA Resources`,
+ `• The Loser's Game`,
],
mod: 'gen9',
- ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'],
- banlist: [
- 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult',
- 'Enamorus-Base', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant',
- 'Keldeo', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings',
- 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Palkia-Origin', 'Raging Bolt', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shaymin-Sky', 'Slaking', 'Sneasler',
- 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike', 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Arena Trap', 'Comatose', 'Contrary',
- 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Magnet Pull', 'Moody',
- 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Pure Power', 'Shadow Tag', 'Simple', 'Speed Boost', 'Stakeout', 'Toxic Debris',
- 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail',
- ],
- },
- {
- name: "[Gen 9] Balanced Hackmons",
- desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`,
- threads: [
- `• Balanced Hackmons`,
- `• BH Resources`,
- ],
+ // searchShow: false,
+ ruleset: ['Standard OMs', 'Sleep Clause Mod', '!OHKO Clause', 'Picked Team Size = 6', 'Adjust Level = 100', 'Min Source Gen = 9'],
+ banlist: ['Infiltrator', 'Choice Scarf', 'Explosion', 'Final Gambit', 'Healing Wish', 'Lunar Dance', 'Magic Room', 'Memento', 'Misty Explosion', 'Self-Destruct'],
+ onValidateTeam(team) {
+ const familyTable = new Set();
+ for (const set of team) {
+ let species = this.dex.species.get(set.species);
+ while (species.prevo) {
+ species = this.dex.species.get(species.prevo);
+ }
+ if (familyTable.has(species.id)) {
+ return [
+ `You are limited to one Pokémon from each family by the Family Clause.`,
+ `(You have more than one evolution of ${species.name}.)`,
+ ];
+ }
+ familyTable.add(species.id);
+ }
+ },
+ battle: {
+ tiebreak() {
+ if (this.ended) return false;
- mod: 'gen9',
- ruleset: [
- 'OHKO Clause', 'Evasion Clause', 'Species Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Moves Clause',
- 'Endless Battle Clause', 'Hackmons Forme Legality', 'Species Reveal Clause', 'Terastal Clause',
- ],
- banlist: [
- 'Calyrex-Shadow', 'Deoxys-Attack', 'Diancie-Mega', 'Gengar-Mega', 'Groudon-Primal', 'Kartana', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Rayquaza-Mega',
- 'Regigigas', 'Shedinja', 'Slaking', 'Arena Trap', 'Comatose', 'Contrary', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Illusion', 'Innards Out',
- 'Libero', 'Liquid Ooze', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power',
- 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard', 'Baton Pass', 'Belly Drum', 'Ceaseless Edge', 'Dire Claw', 'Electro Shot', 'Fillet Away',
- 'Imprison', 'Last Respects', 'Lumina Crash', 'Photon Geyser', 'Quiver Dance', 'Rage Fist', 'Revival Blessing', 'Shed Tail', 'Substitute', 'Shell Smash',
- 'Tail Glow',
- ],
- },
- {
- name: "[Gen 9] Godly Gift",
- desc: `Each Pokémon receives one base stat from a God (Restricted Pokémon) depending on its position in the team. If there is no restricted Pokémon, it uses the Pokémon in the first slot.`,
- threads: [
- `• Godly Gift`,
- `• Godly Gift Resources`,
- ],
+ this.inputLog.push(`>tiebreak`);
+ this.add('message', "Time's up! Going to tiebreaker...");
+ const notFainted = this.sides.map(side => (
+ side.pokemon.filter(pokemon => !pokemon.fainted).length
+ ));
+ this.add('-message', this.sides.map((side, i) => (
+ `${side.name}: ${notFainted[i]} Pokemon left`
+ )).join('; '));
+ const maxNotFainted = Math.max(...notFainted);
+ let tiedSides = this.sides.filter((side, i) => notFainted[i] === maxNotFainted);
+ if (tiedSides.length <= 1) {
+ return this.win(tiedSides[1]);
+ }
- mod: 'gen9',
- ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Godly Gift Mod', 'Min Source Gen = 9'],
- banlist: [
- 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Deoxys-Attack', 'Koraidon', 'Miraidon', 'Arena Trap', 'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag',
- 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
- ],
- restricted: [
- 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Chi-Yu', 'Crawdaunt', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Espathra', 'Eternatus',
- 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gliscor', 'Groudon', 'Hawlucha', 'Ho-Oh', 'Iron Bundle', 'Kingambit', 'Kyogre', 'Kyurem', 'Kyurem-Black',
- 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin',
- 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Smeargle', 'Solgaleo', 'Terapagos', 'Toxapex', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Zacian', 'Zacian-Crowned',
- 'Zamazenta-Crowned', 'Zekrom',
- ],
+ const hpPercentage = tiedSides.map(side => (
+ side.pokemon.map(pokemon => pokemon.hp / pokemon.maxhp).reduce((a, b) => a + b) * 100 / 6
+ ));
+ this.add('-message', tiedSides.map((side, i) => (
+ `${side.name}: ${Math.round(hpPercentage[i])}% total HP left`
+ )).join('; '));
+ const maxPercentage = Math.max(...hpPercentage);
+ tiedSides = tiedSides.filter((side, i) => hpPercentage[i] === maxPercentage);
+ if (tiedSides.length <= 1) {
+ return this.win(tiedSides[1]);
+ }
+
+ const hpTotal = tiedSides.map(side => (
+ side.pokemon.map(pokemon => pokemon.hp).reduce((a, b) => a + b)
+ ));
+ this.add('-message', tiedSides.map((side, i) => (
+ `${side.name}: ${Math.round(hpTotal[i])} total HP left`
+ )).join('; '));
+ const maxTotal = Math.max(...hpTotal);
+ tiedSides = tiedSides.filter((side, i) => hpTotal[i] === maxTotal);
+ if (tiedSides.length <= 1) {
+ return this.win(tiedSides[1]);
+ }
+ return this.tie();
+ },
+ checkWin(faintData) {
+ const team1PokemonLeft = this.sides[0].pokemonLeft;
+ const team2PokemonLeft = this.sides[1].pokemonLeft;
+ if (!team1PokemonLeft && !team2PokemonLeft) {
+ this.win(faintData?.target.side || null);
+ return true;
+ }
+ for (const side of this.sides) {
+ if (!side.pokemonLeft) {
+ this.win(side);
+ return true;
+ }
+ }
+ },
+ },
},
{
name: "[Gen 9] Inheritance",
@@ -1070,6 +1027,79 @@ export const Formats: FormatList = [
this.add('-start', pokemon, donorTemplate.name, '[silent]');
},
},
+
+ // Other Metagames
+ ///////////////////////////////////////////////////////////////////
+
+ {
+ section: "Other Metagames",
+ column: 2,
+ },
+ {
+ name: "[Gen 9] Almost Any Ability",
+ desc: `Pokémon have access to almost any ability.`,
+ threads: [
+ `• Almost Any Ability`,
+ `• AAA Resources`,
+ ],
+
+ mod: 'gen9',
+ ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'],
+ banlist: [
+ 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult',
+ 'Enamorus-Base', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant',
+ 'Keldeo', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings',
+ 'Necrozma-Dusk-Mane', 'Noivern', 'Palkia', 'Palkia-Origin', 'Raging Bolt', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shaymin-Sky', 'Slaking', 'Sneasler',
+ 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike', 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Arena Trap', 'Comatose', 'Contrary',
+ 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Magnet Pull', 'Moody',
+ 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Pure Power', 'Shadow Tag', 'Simple', 'Speed Boost', 'Stakeout', 'Toxic Debris',
+ 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail',
+ ],
+ },
+ {
+ name: "[Gen 9] Balanced Hackmons",
+ desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`,
+ threads: [
+ `• Balanced Hackmons`,
+ `• BH Resources`,
+ ],
+
+ mod: 'gen9',
+ ruleset: [
+ 'OHKO Clause', 'Evasion Clause', 'Species Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Moves Clause',
+ 'Endless Battle Clause', 'Hackmons Forme Legality', 'Species Reveal Clause', 'Terastal Clause',
+ ],
+ banlist: [
+ 'Calyrex-Shadow', 'Deoxys-Attack', 'Diancie-Mega', 'Gengar-Mega', 'Groudon-Primal', 'Kartana', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Rayquaza-Mega',
+ 'Regigigas', 'Shedinja', 'Slaking', 'Arena Trap', 'Comatose', 'Contrary', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Illusion', 'Innards Out',
+ 'Libero', 'Liquid Ooze', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power',
+ 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard', 'Baton Pass', 'Belly Drum', 'Ceaseless Edge', 'Dire Claw', 'Electro Shot', 'Fillet Away',
+ 'Imprison', 'Last Respects', 'Lumina Crash', 'Photon Geyser', 'Quiver Dance', 'Rage Fist', 'Revival Blessing', 'Shed Tail', 'Substitute', 'Shell Smash',
+ 'Tail Glow',
+ ],
+ },
+ {
+ name: "[Gen 9] Godly Gift",
+ desc: `Each Pokémon receives one base stat from a God (Restricted Pokémon) depending on its position in the team. If there is no restricted Pokémon, it uses the Pokémon in the first slot.`,
+ threads: [
+ `• Godly Gift`,
+ `• Godly Gift Resources`,
+ ],
+
+ mod: 'gen9',
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Godly Gift Mod', 'Min Source Gen = 9'],
+ banlist: [
+ 'Blissey', 'Calyrex-Shadow', 'Chansey', 'Deoxys-Attack', 'Koraidon', 'Miraidon', 'Arena Trap', 'Huge Power', 'Moody', 'Pure Power', 'Shadow Tag',
+ 'Swift Swim', 'Bright Powder', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
+ ],
+ restricted: [
+ 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Chi-Yu', 'Crawdaunt', 'Deoxys-Base', 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Espathra', 'Eternatus',
+ 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gliscor', 'Groudon', 'Hawlucha', 'Ho-Oh', 'Iron Bundle', 'Kingambit', 'Kyogre', 'Kyurem', 'Kyurem-Black',
+ 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin',
+ 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Smeargle', 'Solgaleo', 'Terapagos', 'Toxapex', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Zacian', 'Zacian-Crowned',
+ 'Zamazenta-Crowned', 'Zekrom',
+ ],
+ },
{
name: "[Gen 9] Mix and Mega",
desc: `Mega evolve any Pokémon with any mega stone, or transform them with Primal orbs, Origin orbs, and Rusted items with no limit. Mega and Primal boosts based on form changes from gen 7.`,
@@ -1143,6 +1173,81 @@ export const Formats: FormatList = [
}
},
},
+ {
+ name: "[Gen 9] Partners in Crime",
+ desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`,
+ threads: [
+ `• Partners in Crime`,
+ ],
+
+ mod: 'partnersincrime',
+ gameType: 'doubles',
+ ruleset: ['Standard Doubles'],
+ banlist: [
+ 'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Cresselia', 'Darkrai', 'Dialga', 'Dialga-Origin', 'Eternatus', 'Flutter Mane',
+ 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo',
+ 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Smeargle', 'Solgaleo', 'Terapagos',
+ 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Contrary', 'Dancer', 'Huge Power',
+ 'Moody', 'Pure Power', 'Serene Grace', 'Shadow Tag', 'Bright Powder', 'King\'s Rock', 'Razor Fang', 'Ally Switch', 'Last Respects', 'Revival Blessing',
+ 'Swagger',
+ ],
+ onBegin() {
+ for (const pokemon of this.getAllPokemon()) {
+ pokemon.m.trackPP = new Map();
+ }
+ },
+ onBeforeSwitchIn(pokemon) {
+ pokemon.m.curMoves = this.dex.deepClone(pokemon.moves);
+ let ngas = false;
+ for (const poke of this.getAllActive()) {
+ if (this.toID(poke.ability) === ('neutralizinggas' as ID)) {
+ ngas = true;
+ break;
+ }
+ }
+ const BAD_ABILITIES = ['trace', 'imposter', 'neutralizinggas', 'illusion', 'wanderingspirit'];
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
+ if (ally && ally.ability !== pokemon.ability) {
+ if (!pokemon.m.innate && !BAD_ABILITIES.includes(this.toID(ally.ability))) {
+ pokemon.m.innate = 'ability:' + ally.ability;
+ if (!ngas || ally.getAbility().flags['cantsuppress'] || pokemon.hasItem('Ability Shield')) {
+ pokemon.volatiles[pokemon.m.innate] = {id: pokemon.m.innate, target: pokemon};
+ pokemon.m.startVolatile = true;
+ }
+ }
+ if (!ally.m.innate && !BAD_ABILITIES.includes(this.toID(pokemon.ability))) {
+ ally.m.innate = 'ability:' + pokemon.ability;
+ if (!ngas || pokemon.getAbility().flags['cantsuppress'] || ally.hasItem('Ability Shield')) {
+ ally.volatiles[ally.m.innate] = {id: ally.m.innate, target: ally};
+ ally.m.startVolatile = true;
+ }
+ }
+ }
+ },
+ // Starting innate abilities in scripts#actions
+ onSwitchOut(pokemon) {
+ if (pokemon.m.innate) {
+ pokemon.removeVolatile(pokemon.m.innate);
+ delete pokemon.m.innate;
+ }
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
+ if (ally && ally.m.innate) {
+ ally.removeVolatile(ally.m.innate);
+ delete ally.m.innate;
+ }
+ },
+ onFaint(pokemon) {
+ if (pokemon.m.innate) {
+ pokemon.removeVolatile(pokemon.m.innate);
+ delete pokemon.m.innate;
+ }
+ const ally = pokemon.side.active.find(mon => mon && mon !== pokemon && !mon.fainted);
+ if (ally && ally.m.innate) {
+ ally.removeVolatile(ally.m.innate);
+ delete ally.m.innate;
+ }
+ },
+ },
{
name: "[Gen 9] Shared Power",
desc: `Once a Pokémon switches in, its ability is shared with the rest of the team.`,
@@ -1431,6 +1536,56 @@ export const Formats: FormatList = [
}
},
},
+ {
+ name: "[Gen 9] Foresighters",
+ desc: `Moves in the first moveslot will be delayed by two turns.`,
+ threads: [
+ `• Foresighters`,
+ ],
+
+ mod: 'gen9',
+ searchShow: false,
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause', 'Min Source Gen = 9'],
+ banlist: [
+ 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chien-Pao', 'Chi-Yu', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra',
+ 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base',
+ 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram',
+ 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu', 'Urshifu-Rapid-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap',
+ 'Moody', 'Shadow Tag', 'Sand Veil', 'Snow Cloak', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Dire Claw', 'Last Respects', 'Shed Tail',
+ ],
+ restricted: [
+ 'Beat Up', 'Belly Drum', 'Clangorous Soul', 'Dragon Dance', 'Endeavor', 'Quiver Dance', 'Shell Smash', 'Shift Gear', 'Tail Glow', 'Tidy Up', 'Victory Dance',
+ ],
+ onValidateSet(set) {
+ const fsMove = this.dex.moves.get(set.moves[0]);
+ if (this.ruleTable.isRestricted(`move:${fsMove.id}`)) {
+ return [`${set.name}'s move ${fsMove.name} cannot be used as a future move.`];
+ }
+ },
+ onModifyMove(move, pokemon) {
+ if (move.id === pokemon.moveSlots[0].id && !move.flags['futuremove']) {
+ move.flags['futuremove'] = 1;
+ delete move.flags['protect'];
+ move.onTry = function (source, t) {
+ if (!t.side.addSlotCondition(t, 'futuremove')) {
+ this.hint('Future moves fail when the targeted slot already has a future move focused on it.');
+ return false;
+ }
+ const moveData = this.dex.getActiveMove(move.id);
+ moveData.flags['futuremove'] = 1;
+ delete moveData.flags['protect'];
+ Object.assign(t.side.slotConditions[t.position]['futuremove'], {
+ duration: 3,
+ move: moveData.id,
+ source: source,
+ moveData: moveData,
+ });
+ this.add('-message', `${source.name} foresaw an attack!`);
+ return this.NOT_FAIL;
+ };
+ }
+ },
+ },
{
name: "[Gen 9] Fortemons",
desc: `Put an attacking move in the item slot to have all of a Pokémon's attacks inherit its properties.`,
@@ -1658,90 +1813,6 @@ export const Formats: FormatList = [
'Baton Pass', 'Shed Tail', 'Tailwind',
],
},
- {
- name: "[Gen 9] Pokebilities",
- desc: `Pokémon have all of their released abilities simultaneously.`,
- threads: [
- `• Pokébilities`,
- ],
- mod: 'pokebilities',
- searchShow: false,
- ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Min Source Gen = 9'],
- banlist: [
- 'Arceus', 'Annihilape', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Conkeldurr', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Espathra',
- 'Eternatus', 'Excadrill', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
- 'Landorus-Base', 'Lugia', 'Lunala', 'Miraidon', 'Mewtwo', 'Necrozma-Dusk-Mane', 'Necrozma-Dawn-Wings', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin',
- 'Porygon-Z', 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Smeargle', 'Sneasler', 'Solgaleo', 'Spectrier', 'Terapagos', 'Ursaluna-Bloodmoon', 'Urshifu-Base',
- 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail', 'Last Respects',
- ],
- onValidateSet(set) {
- const species = this.dex.species.get(set.species);
- const unSeenAbilities = Object.keys(species.abilities)
- .filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden))
- .map(key => species.abilities[key as "0" | "1" | "H" | "S"])
- .filter(ability => ability !== set.ability);
- if (unSeenAbilities.length && this.toID(set.ability) !== this.toID(species.abilities['S'])) {
- for (const abilityName of unSeenAbilities) {
- const banReason = this.ruleTable.check('ability:' + this.toID(abilityName));
- if (banReason) {
- return [`${set.name}'s ability ${abilityName} is ${banReason}.`];
- }
- }
- }
- },
- onBegin() {
- for (const pokemon of this.getAllPokemon()) {
- if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
- continue;
- }
- pokemon.m.innates = Object.keys(pokemon.species.abilities)
- .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
- .map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
- .filter(ability => ability !== pokemon.ability);
- }
- },
- onBeforeSwitchIn(pokemon) {
- // Abilities that must be applied before both sides trigger onSwitchIn to correctly
- // handle switch-in ability-to-ability interactions, e.g. Intimidate counters
- const neededBeforeSwitchInIDs = [
- 'clearbody', 'competitive', 'contrary', 'defiant', 'fullmetalbody', 'hypercutter', 'innerfocus',
- 'mirrorarmor', 'oblivious', 'owntempo', 'rattled', 'scrappy', 'simple', 'whitesmoke',
- ];
- if (pokemon.m.innates) {
- for (const innate of pokemon.m.innates) {
- if (!neededBeforeSwitchInIDs.includes(innate)) continue;
- if (pokemon.hasAbility(innate)) continue;
- pokemon.addVolatile("ability:" + innate, pokemon);
- }
- }
- },
- onSwitchInPriority: 2,
- onSwitchIn(pokemon) {
- if (pokemon.m.innates) {
- for (const innate of pokemon.m.innates) {
- if (pokemon.hasAbility(innate)) continue;
- pokemon.addVolatile("ability:" + innate, pokemon);
- }
- }
- },
- onSwitchOut(pokemon) {
- for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
- pokemon.removeVolatile(innate);
- }
- },
- onFaint(pokemon) {
- for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
- const innateEffect = this.dex.conditions.get(innate) as Effect;
- this.singleEvent('End', innateEffect, null, pokemon);
- }
- },
- onAfterMega(pokemon) {
- for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
- pokemon.removeVolatile(innate);
- }
- pokemon.m.innates = undefined;
- },
- },
{
name: "[Gen 9] Pure Hackmons",
desc: `Anything directly hackable onto a set (EVs, IVs, forme, ability, item, and move) and is usable in local battles is allowed.`,
@@ -2080,92 +2151,6 @@ export const Formats: FormatList = [
pokemon.apparentType = pokemon.getTypes(true).join('/');
},
},
- {
- name: "[Gen 9] The Loser's Game",
- desc: `The first player to lose all of their Pokémon wins.`,
- threads: [
- `• The Loser's Game`,
- ],
-
- mod: 'gen9',
- searchShow: false,
- ruleset: ['Standard OMs', 'Sleep Clause Mod', '!OHKO Clause', 'Picked Team Size = 6', 'Adjust Level = 100', 'Min Source Gen = 9'],
- banlist: ['Infiltrator', 'Choice Scarf', 'Explosion', 'Final Gambit', 'Healing Wish', 'Lunar Dance', 'Magic Room', 'Memento', 'Misty Explosion', 'Self-Destruct'],
- onValidateTeam(team) {
- const familyTable = new Set();
- for (const set of team) {
- let species = this.dex.species.get(set.species);
- while (species.prevo) {
- species = this.dex.species.get(species.prevo);
- }
- if (familyTable.has(species.id)) {
- return [
- `You are limited to one Pokémon from each family by the Family Clause.`,
- `(You have more than one evolution of ${species.name}.)`,
- ];
- }
- familyTable.add(species.id);
- }
- },
- battle: {
- tiebreak() {
- if (this.ended) return false;
-
- this.inputLog.push(`>tiebreak`);
- this.add('message', "Time's up! Going to tiebreaker...");
- const notFainted = this.sides.map(side => (
- side.pokemon.filter(pokemon => !pokemon.fainted).length
- ));
- this.add('-message', this.sides.map((side, i) => (
- `${side.name}: ${notFainted[i]} Pokemon left`
- )).join('; '));
- const maxNotFainted = Math.max(...notFainted);
- let tiedSides = this.sides.filter((side, i) => notFainted[i] === maxNotFainted);
- if (tiedSides.length <= 1) {
- return this.win(tiedSides[1]);
- }
-
- const hpPercentage = tiedSides.map(side => (
- side.pokemon.map(pokemon => pokemon.hp / pokemon.maxhp).reduce((a, b) => a + b) * 100 / 6
- ));
- this.add('-message', tiedSides.map((side, i) => (
- `${side.name}: ${Math.round(hpPercentage[i])}% total HP left`
- )).join('; '));
- const maxPercentage = Math.max(...hpPercentage);
- tiedSides = tiedSides.filter((side, i) => hpPercentage[i] === maxPercentage);
- if (tiedSides.length <= 1) {
- return this.win(tiedSides[1]);
- }
-
- const hpTotal = tiedSides.map(side => (
- side.pokemon.map(pokemon => pokemon.hp).reduce((a, b) => a + b)
- ));
- this.add('-message', tiedSides.map((side, i) => (
- `${side.name}: ${Math.round(hpTotal[i])} total HP left`
- )).join('; '));
- const maxTotal = Math.max(...hpTotal);
- tiedSides = tiedSides.filter((side, i) => hpTotal[i] === maxTotal);
- if (tiedSides.length <= 1) {
- return this.win(tiedSides[1]);
- }
- return this.tie();
- },
- checkWin(faintData) {
- const team1PokemonLeft = this.sides[0].pokemonLeft;
- const team2PokemonLeft = this.sides[1].pokemonLeft;
- if (!team1PokemonLeft && !team2PokemonLeft) {
- this.win(faintData?.target.side || null);
- return true;
- }
- for (const side of this.sides) {
- if (!side.pokemonLeft) {
- this.win(side);
- return true;
- }
- }
- },
- },
- },
{
name: "[Gen 9] Trademarked",
desc: `Sacrifice your Pokémon's ability for a status move that activates on switch-in.`,
@@ -2343,23 +2328,25 @@ export const Formats: FormatList = [
],
},
{
- name: "[Gen 9] National Dex AAA",
+ name: "[Gen 9] National Dex STABmons",
threads: [
- `• National Dex AAA Resources`,
+ `• National Dex STABmons`,
],
mod: 'gen9',
- ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Sleep Moves Clause', 'Terastal Clause', 'Ability Clause = 2', 'Mega Rayquaza Clause', '!Obtainable Abilities'],
+ ruleset: ['Standard NatDex', 'OHKO Clause', 'Evasion Moves Clause', 'Species Clause', 'Sleep Moves Clause', 'Terastal Clause', 'STABmons Move Legality'],
banlist: [
- 'Alakazam-Mega', 'Annihilape', 'Arceus', 'Archeops', 'Baxcalibur', 'Blacephalon', 'Blastoise-Mega', 'Blaziken-Mega', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chien-Pao', 'Darkrai',
- 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dracovish', 'Dragapult', 'Enamorus', 'Eternatus-Base', 'Flutter Mane', 'Gengar-Mega', 'Giratina-Base', 'Giratina-Origin',
- 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Boulder', 'Iron Bundle', 'Iron Valiant', 'Kangaskhan-Mega', 'Kartana', 'Keldeo', 'Kingambit', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black',
- 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Mewtwo', 'Miraidon', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
- 'Noivern', 'Palkia', 'Palkia-Origin', 'Pheromosa', 'Raging Bolt', 'Rayquaza', 'Regigigas', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Shedinja', 'Slaking', 'Sneasler',
- 'Solgaleo', 'Spectrier', 'Urshifu', 'Urshifu-Rapid-Strike', 'Weavile', 'Xerneas', 'Xurkitree', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Base', 'Zekrom', 'Zeraora', 'Zygarde-Base',
- 'Arena Trap', 'Comatose', 'Contrary', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Magnet Pull', 'Moody',
- 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Pure Power', 'Shadow Tag', 'Simple', 'Speed Boost', 'Stakeout', 'Triage', 'Unburden', 'Water Bubble',
- 'Wonder Guard', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Assist', 'Baton Pass', 'Electrify', 'Last Respects', 'Shed Tail',
+ 'Arceus', 'Blastoise-Mega', 'Blaziken-Mega', 'Basculegion', 'Basculegion-F', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Cloyster', 'Darkrai', 'Darmanitan-Galar',
+ 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Dracovish', 'Dragapult', 'Dragonite', 'Enamorus-Base', 'Espathra', 'Eternatus', 'Flutter Mane',
+ 'Gengar-Mega', 'Genesect', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kangaskhan-Mega', 'Kartana', 'Koraidon', 'Komala', 'Kyogre', 'Kyurem-Black',
+ 'Kyurem-White', 'Landorus-Base', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Melmetal', 'Metagross-Mega', 'Mewtwo', 'Miraidon', 'Naganadel', 'Necrozma-Dawn-Wings',
+ 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Pheromosa', 'Rayquaza', 'Regieleki', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Tapu Koko',
+ 'Tapu Lele', 'Urshifu-Base', 'Walking Wake', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Zygarde-Base', 'Arena Trap',
+ 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Assist', 'Baton Pass', 'Shed Tail',
+ ],
+ restricted: [
+ 'Acupressure', 'Astral Barrage', 'Belly Drum', 'Bolt Beak', 'Chatter', 'Dire Claw', 'Double Iron Bash', 'Electrify', 'Extreme Speed', 'Fillet Away', 'Fishious Rend', 'Geomancy',
+ 'Gigaton Hammer', 'Last Respects', 'No Retreat', 'Revival Blessing', 'Shell Smash', 'Shift Gear', 'Thousand Arrows', 'V-create', 'VIctory Dance', 'Wicked Blow',
],
},
{
@@ -3519,43 +3506,27 @@ export const Formats: FormatList = [
column: 4,
},
{
- name: "[Gen 4] UU",
+ name: "[Gen 5] UU",
threads: [
- `• DPP UU Metagame Discussion`,
- `• DPP UU Viability Rankings`,
- ],
-
- mod: 'gen4',
- // searchShow: false,
- ruleset: ['[Gen 4] OU', '!Baton Pass Stat Trap Clause', '!Freeze Clause Mod'],
- banlist: ['OU', 'UUBL', 'Baton Pass'],
- unbanlist: ['Arena Trap', 'Snow Cloak', 'Quick Claw', 'Swagger'],
- },
- {
- name: "[Gen 5] RU",
- threads: [
- `• BW2 RU Resources`,
+ `• BW2 UU Viability Rankings`,
+ `• BW2 Sample Teams`,
],
mod: 'gen5',
// searchShow: false,
- ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'],
- banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
- unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
- },
- {
- name: "[Gen 5] Doubles OU",
- threads: [
- `• BW2 Doubles Metagame Discussion`,
- `• BW2 Doubles Viability Rankings`,
- `• BW2 Doubles Sample Teams`,
- ],
-
- mod: 'gen5',
- gameType: 'doubles',
- // searchShow: false,
ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
- banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Gravity'],
+ banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
+ },
+ {
+ name: "[Gen 6] NU",
+ threads: [
+ `• ORAS NU Resources`,
+ ],
+
+ mod: 'gen6',
+ // searchShow: false,
+ ruleset: ['[Gen 6] RU'],
+ banlist: ['RU', 'NUBL'],
},
// Past Gens OU
@@ -3708,6 +3679,20 @@ export const Formats: FormatList = [
ruleset: ['Standard Doubles', 'Swagger Clause'],
banlist: ['DUber', 'Soul Dew', 'Dark Void'],
},
+ {
+ name: "[Gen 5] Doubles OU",
+ threads: [
+ `• BW2 Doubles Metagame Discussion`,
+ `• BW2 Doubles Viability Rankings`,
+ `• BW2 Doubles Sample Teams`,
+ ],
+
+ mod: 'gen5',
+ gameType: 'doubles',
+ searchShow: false,
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
+ banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Gravity'],
+ },
{
name: "[Gen 4] Doubles OU",
threads: [`• DPP Doubles`],
@@ -4373,17 +4358,6 @@ export const Formats: FormatList = [
ruleset: ['[Gen 6] UU'],
banlist: ['UU', 'RUBL'],
},
- {
- name: "[Gen 6] NU",
- threads: [
- `• ORAS NU Resources`,
- ],
-
- mod: 'gen6',
- searchShow: false,
- ruleset: ['[Gen 6] RU'],
- banlist: ['RU', 'NUBL'],
- },
{
name: "[Gen 6] PU",
threads: [
@@ -4626,16 +4600,16 @@ export const Formats: FormatList = [
ruleset: ['Standard', 'Sleep Clause Mod'],
},
{
- name: "[Gen 5] UU",
+ name: "[Gen 5] RU",
threads: [
- `• BW2 UU Viability Rankings`,
- `• BW2 Sample Teams`,
+ `• BW2 RU Resources`,
],
mod: 'gen5',
searchShow: false,
- ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
- banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
+ ruleset: ['[Gen 5] UU', 'Baton Pass Clause', '!Sleep Clause Mod', 'Sleep Moves Clause'],
+ banlist: ['UU', 'RUBL', 'Shadow Tag', 'Shell Smash + Baton Pass'],
+ unbanlist: ['Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
},
{
name: "[Gen 5] NU",
@@ -4838,6 +4812,19 @@ export const Formats: FormatList = [
ruleset: ['Standard'],
banlist: ['AG'],
},
+ {
+ name: "[Gen 4] UU",
+ threads: [
+ `• DPP UU Metagame Discussion`,
+ `• DPP UU Viability Rankings`,
+ ],
+
+ mod: 'gen4',
+ searchShow: false,
+ ruleset: ['[Gen 4] OU', '!Baton Pass Stat Trap Clause', '!Freeze Clause Mod'],
+ banlist: ['OU', 'UUBL', 'Baton Pass'],
+ unbanlist: ['Arena Trap', 'Snow Cloak', 'Quick Claw', 'Swagger'],
+ },
{
name: "[Gen 4] NU",
threads: [