Format-specific data contains tier placements, banned moves, and other restrictions for different competitive formats. This data is separate from base species/move/ability data.
Format-specific data is accessed through the species object:
const {Dex} = require('pokemon-showdown');// Get a Pokemon's tierconst pikachu = Dex.species.get('Pikachu');console.log(pikachu.tier); // Tier assigned in formats-data// Check if a move is available in a formatconst formatDex = Dex.forFormat('gen8ou');const move = formatDex.moves.get('Dynamax Cannon');
// Check if a species is allowed in a formatconst formatDex = Dex.forFormat('gen9ou');const miraidon = formatDex.species.get('Miraidon');// Uber Pokémon are banned in OUconsole.log(miraidon.tier); // 'Uber'// Would not be usable in OU formatconst garchomp = formatDex.species.get('Garchomp');console.log(garchomp.tier); // 'OU'// Allowed in OU format
// Some moves are banned in certain formats// Example: Dynamax moves in Gen 9const gen9Dex = Dex.forFormat('gen9ou');const maxAirstream = gen9Dex.moves.get('Max Airstream');console.log(maxAirstream.isMax); // 'Flying'console.log(maxAirstream.isNonstandard); // 'Past'// Max Moves not available in Gen 9const gen8Dex = Dex.forFormat('gen8ou');const dynamaxed = gen8Dex.moves.get('Max Airstream');// Available in Gen 8 formats
// Some abilities are banned or restrictedconst shadowTag = Dex.abilities.get('Shadow Tag');console.log(shadowTag.rating); // 5// Often banned in competitive formatsconst moody = Dex.abilities.get('Moody');// Commonly banned due to RNG-based boosts
Validate if a Pokémon/move/ability is legal in a format:
function isLegalInFormat(speciesName, formatId) { const formatDex = Dex.forFormat(formatId); const species = formatDex.species.get(speciesName); // Check if species exists and isn't nonstandard if (!species.exists) return false; if (species.isNonstandard) return false; // Check tier restrictions // This is a simplified example const format = formatDex.formats.get(formatId); return true; // Actual implementation is complex}console.log(isLegalInFormat('Pikachu', 'gen9ou'));
Some Pokémon have different viability in different formats:
// Incineroar is much stronger in VGC (Doubles)const incineroar = Dex.species.get('Incineroar');console.log(incineroar.tier); // Lower in Singles// But extremely popular in VGC due to Intimidate + Fake Outconst vgcDex = Dex.forFormat('gen9vgc2024regf');const vgcIncineroar = vgcDex.species.get('Incineroar');// Widely used in VGC// Opposite example: Landorus-Tconst landorus = Dex.species.get('Landorus-Therian');console.log(landorus.tier); // 'OU' in Singles// Less common in Doubles/VGC
function getRestrictedContent(formatId) { const dex = Dex.forFormat(formatId); const format = dex.formats.get(formatId); // This is a simplified example // Actual implementation requires accessing format rules console.log(`Format: ${format.name}`); console.log(`Mod: ${format.mod}`);}getRestrictedContent('gen9ou');