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