Documentation Index Fetch the complete documentation index at: https://mintlify.com/smogon/pokemon-showdown/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The Abilities API provides information about Pokémon abilities including their effects, competitive ratings, and when they were introduced.
Basic Usage
Get an Ability
Retrieve ability information using Dex.abilities.get():
const { Dex } = require ( 'pokemon-showdown' );
const overgrow = Dex . abilities . get ( 'Overgrow' );
console . log ( overgrow . name ); // 'Overgrow'
console . log ( overgrow . rating ); // 2
console . log ( overgrow . num ); // 65
Ability names are case-insensitive and whitespace is ignored.
// All of these work
Dex . abilities . get ( 'overgrow' );
Dex . abilities . get ( 'Overgrow' );
Dex . abilities . get ( 'OVERGROW' );
Dex . abilities . get ( 'O v e r g r o w' );
Ability Properties
Basic Properties
Flags
Generation Info
const intimidate = Dex . abilities . get ( 'Intimidate' );
console . log ( intimidate . name ); // 'Intimidate'
console . log ( intimidate . num ); // Ability dex number
console . log ( intimidate . rating ); // 3.5
// Rating scale: -1 to 5
// 5 = Essential, 4 = Very useful, 3 = Effective,
// 2 = Useful, 1 = Ineffective, 0 = Useless, -1 = Detrimental
Ability Ratings
Abilities are rated on their competitive viability:
Essential (5)
Very Useful (4)
Effective (3)
Detrimental (-1)
const imposter = Dex . abilities . get ( 'Imposter' );
console . log ( imposter . rating ); // 5
// Metagame-defining abilities
const shadowTag = Dex . abilities . get ( 'Shadow Tag' );
console . log ( shadowTag . rating ); // 5
Common Ability Types
Type-Boosting Abilities
// Starter abilities
const overgrow = Dex . abilities . get ( 'Overgrow' );
const blaze = Dex . abilities . get ( 'Blaze' );
const torrent = Dex . abilities . get ( 'Torrent' );
console . log ( overgrow . name ); // 'Overgrow'
console . log ( blaze . name ); // 'Blaze'
console . log ( torrent . name ); // 'Torrent'
// All boost type moves at 1/3 HP
// STAB boosters
const adaptability = Dex . abilities . get ( 'Adaptability' );
console . log ( adaptability . rating ); // 4
// Increases STAB from 1.5x to 2x
Weather Abilities
const drought = Dex . abilities . get ( 'Drought' );
const drizzle = Dex . abilities . get ( 'Drizzle' );
const sandStream = Dex . abilities . get ( 'Sand Stream' );
const snowWarning = Dex . abilities . get ( 'Snow Warning' );
console . log ( drought . rating ); // 4
console . log ( drizzle . rating ); // 4
// Automatically set weather on switch-in
// Weather beneficiaries
const chlorophyll = Dex . abilities . get ( 'Chlorophyll' );
const swiftSwim = Dex . abilities . get ( 'Swift Swim' );
console . log ( chlorophyll . rating ); // 3
// Doubles Speed in sun
console . log ( swiftSwim . rating ); // 3
// Doubles Speed in rain
Defensive Abilities
Immunity
Damage Reduction
Stat Boost
const levitate = Dex . abilities . get ( 'Levitate' );
console . log ( levitate . rating ); // 3.5
// Immune to Ground-type moves
const waterAbsorb = Dex . abilities . get ( 'Water Absorb' );
console . log ( waterAbsorb . rating ); // 3.5
// Immune to Water, heals 1/4 HP
const voltAbsorb = Dex . abilities . get ( 'Volt Absorb' );
console . log ( voltAbsorb . rating ); // 3.5
Offensive Abilities
const sheerForce = Dex . abilities . get ( 'Sheer Force' );
console . log ( sheerForce . rating ); // 3.5
// Removes secondary effects, increases power by 30%
const technician = Dex . abilities . get ( 'Technician' );
console . log ( technician . rating ); // 3.5
// Boosts moves with 60 BP or less by 50%
const skillLink = Dex . abilities . get ( 'Skill Link' );
console . log ( skillLink . rating ); // 3
// Multi-hit moves always hit 5 times
Status Abilities
const synchronize = Dex . abilities . get ( 'Synchronize' );
console . log ( synchronize . rating ); // 2
// Passes status conditions to opponent
const magicGuard = Dex . abilities . get ( 'Magic Guard' );
console . log ( magicGuard . rating ); // 4
// Immune to indirect damage
const naturalCure = Dex . abilities . get ( 'Natural Cure' );
console . log ( naturalCure . rating ); // 2.5
// Cures status on switch-out
Signature Abilities
Legendary Abilities
// Primal abilities
const desolateLand = Dex . abilities . get ( 'Desolate Land' );
console . log ( desolateLand . rating ); // 4.5
// Permanent harsh sunlight
const primoridialSea = Dex . abilities . get ( 'Primordial Sea' );
console . log ( primoridialSea . rating ); // 4.5
// Permanent heavy rain
const deltaStream = Dex . abilities . get ( 'Delta Stream' );
console . log ( deltaStream . rating ); // 4
// Permanent strong winds
Unique Mechanic Abilities
const disguise = Dex . abilities . get ( 'Disguise' );
console . log ( disguise . rating ); // 3.5
console . log ( disguise . flags );
// { failroleplay: 1, noreceiver: 1, ... }
// Blocks first hit, forme changes
const stanceChange = Dex . abilities . get ( 'Stance Change' );
console . log ( stanceChange . flags . failroleplay ); // 1
// Cannot be copied or swapped
const powerConstruct = Dex . abilities . get ( 'Power Construct' );
console . log ( powerConstruct . flags . cantsuppress ); // 1
// Cannot be suppressed
List All Abilities
Retrieve all ability data:
const allAbilities = Dex . abilities . all ();
console . log ( allAbilities . length ); // 300+ abilities
console . log ( allAbilities [ 0 ]. name );
// Filter by rating
const topAbilities = allAbilities . filter ( a =>
a . exists && ! a . isNonstandard && a . rating >= 4
);
topAbilities . forEach ( a => {
console . log ( ` ${ a . name } : Rating ${ a . rating } ` );
});
The .all() method includes nonstandard abilities from CAP and past generations. Always check exists and isNonstandard properties.
Generation-Specific Data
Abilities were introduced in Generation 3:
// Gen 1 has no abilities
const gen1Dex = Dex . mod ( 'gen1' );
const gen1Abilities = gen1Dex . abilities . all ();
console . log ( gen1Abilities . length ); // 0
// Gen 3 introduced abilities
const gen3Dex = Dex . mod ( 'gen3' );
const intimidate = gen3Dex . abilities . get ( 'Intimidate' );
console . log ( intimidate . exists ); // true
// Some abilities were added later
const multiscale = Dex . abilities . get ( 'Multiscale' );
// Introduced in Gen 5
const protosynthesis = Dex . abilities . get ( 'Protosynthesis' );
// Introduced in Gen 9
Ability Flags
Abilities have various flags indicating restrictions:
Cannot Be Copied
Breakable
Cannot Be Suppressed
const imposter = Dex . abilities . get ( 'Imposter' );
console . log ( imposter . flags );
// { failroleplay: 1, noreceiver: 1,
// noentrain: 1, notrace: 1,
// failskillswap: 1 }
const disguise = Dex . abilities . get ( 'Disguise' );
console . log ( disguise . flags . notrace ); // 1
Checking Ability Existence
const overgrow = Dex . abilities . get ( 'Overgrow' );
console . log ( overgrow . exists ); // true
console . log ( overgrow . isNonstandard ); // null (standard)
const rebound = Dex . abilities . get ( 'Rebound' );
console . log ( rebound . exists ); // true
console . log ( rebound . isNonstandard ); // 'CAP'
// Create-A-Pokémon ability
const fakeAbility = Dex . abilities . get ( 'Not Real' );
console . log ( fakeAbility . exists ); // false
Practical Examples
Find All Weather-Setting Abilities
const weatherSetters = [ 'Drought' , 'Drizzle' , 'Sand Stream' ,
'Snow Warning' , 'Desolate Land' , 'Primordial Sea' ];
weatherSetters . forEach ( name => {
const ability = Dex . abilities . get ( name );
console . log ( ` ${ ability . name } : Rating ${ ability . rating } ` );
});
Get Top-Rated Abilities
const topRated = Dex . abilities . all ()
. filter ( a => a . exists && ! a . isNonstandard )
. filter ( a => a . rating === 5 )
. map ( a => a . name );
console . log ( 'Essential abilities:' , topRated );
Find Immunity Abilities
const immunityNames = [
'Levitate' , 'Water Absorb' , 'Volt Absorb' ,
'Flash Fire' , 'Sap Sipper' , 'Lightning Rod' ,
'Storm Drain' , 'Dry Skin' , 'Earth Eater'
];
immunityNames . forEach ( name => {
const ability = Dex . abilities . get ( name );
if ( ability . exists ) {
console . log ( ` ${ ability . name } : Rating ${ ability . rating } ` );
}
});
Check Ability Restrictions
function canBeCopied ( abilityName ) {
const ability = Dex . abilities . get ( abilityName );
return ! ability . flags ?. failroleplay &&
! ability . flags ?. notrace &&
! ability . flags ?. noreceiver ;
}
console . log ( canBeCopied ( 'Intimidate' )); // true
console . log ( canBeCopied ( 'Disguise' )); // false
Ability Effects
Ability effects are implemented via callback functions. While these aren’t directly usable, they show how abilities work.
const intimidate = Dex . abilities . get ( 'Intimidate' );
console . log ( intimidate . onStart );
// function(pokemon) {
// Lowers adjacent opponents' Attack by 1 stage
// }
const speedBoost = Dex . abilities . get ( 'Speed Boost' );
console . log ( speedBoost . onResidual );
// function(pokemon) {
// Increases Speed by 1 stage at end of turn
// }
Species API Query Pokémon that have specific abilities
Moves API Learn about move interactions with abilities
Items API Discover Ability Shield and other items
Formats Data Check format-specific ability restrictions