This page describes how Pokémon work in-game. This includes the properties an individual Pokémon has, along with other general information about them.

A Pokémon's attributes

Each individual Pokémon in the game has a number of attributes. Together, these attributes define that specific Pokémon.

The term "pkmn" in the examples below should be replaced with the Pokémon to be modified (e.g. $[0] is the first Pokémon in the player's party) - see Manipulating Pokémon for ways to refer to individual Pokémon.

Attribute Description
species The Pokemon's species.
name The Pokemon's nickname. If blank, is the Pokémon's species name instead.
level The Pokémon's current level. Depends on the attribute "exp".
exp The Pokémon's Experience Points. The attribute "level" depends on this.
The Pokemon's first and second types. Depends on the first/second types as defined for the Pokémon's species in the PBS file "pokemon.txt" or "pokemonforms.txt".

If the Pokémon only has one type, then "type2" will be the same as "type1".

ability The ID number of the Pokemon's ability. Depends on the attribute "abilityflag" if defined, or the attribute "personalid" if not.
abilityflag If defined, forces the Pokémon's ability to be the first natural (0), second natural (1) or hidden (2) ability available to its species. It is not possible to give the Pokémon any ability other than those defined in the PBS file "pokemon.txt" for its species (or "pokemonforms.txt" for its species and form).
gender The Pokémon's gender. Is either 0 (male), 1 (female) or 2 (genderless). Depends on the attribute "genderflag" if defined, or the attribute "personalID" if not.
genderflag If defined, forces the Pokémon to be male (0) or female (1). It cannot be set to a gender that the Pokémon cannot have.
nature The Pokémon's nature. Depends on the attribute "natureflag" if defined, or the attribute "personalID" if not.
natureflag If defined, forces the Pokémon's nature to be the value of this attribute.
isShiny? Whether the Pokémon is shiny or not. Depends on the attribute "personalID".
shinyflag If defined, forces the Pokémon to be shiny (true) or not (false).
form The Pokémon's form. 0 is the default form, and Pokémon with form 0 are as defined in the PBS file "pokemon.txt". See Forms for more information.
hp The Pokémon's current HP.
In order:
  • The current maximum HP amount the Pokémon can have
  • The Pokémon's Attack stat
  • The Pokémon's Defense stat
  • The Pokémon's Speed stat
  • The Pokémon's Special Attack stat
  • The Pokémon's Special Defense stat

All of these are calculated depending on the Pokémon's species, level, IVs, EVs and nature.

happiness The Pokémon's happiness. Is a number between 0 and 255 inclusive.
status The Pokémon's status. One of:
  • 0 (healthy)
  • 1 (or PBStatuses::SLEEP)
  • 2 (or PBStatuses::POISON)
  • 3 (or PBStatuses::BURN)
  • 4 (or PBStatuses::PARALYSIS)
  • 5 (or PBStatuses::FROZEN)
statusCount Is 0, except if the Pokémon is:
  • Asleep - Is the number of rounds the Pokémon will remain asleep. This number is set when the Pokémon is made to fall asleep.
  • Badly poisoned - If the Pokémon is Poisoned and this is "1", the Pokémon is badly poisoned instead (which affects how much poison damage it takes in battle). When the Pokémon leaves battle while badly poisoned, this value is set to 0 and it becomes regular Poisoned (even in later battles).
eggsteps Used for Pokémon eggs. The number of steps until the egg hatches. If it is 0, it is a Pokémon. The code pkmn.egg? will return whether pkmn is an egg (it is if "eggsteps" is a positive number).

This is the only way in which eggs are different to Pokémon.

moves An array of 4 move slots that the Pokémon has. Each move slot has the following attributes:
  • id - The internal number of the move. Can also be referred to as PBMoves::TACKLE. Is 0 if the move slot is empty.
  • pp - The remaining PP of the move.
  • ppup - The number of boosts to the maximum PP this move has had. One boost will add 20% of the original maximum PP, and item effects limit the maximum number of allowed boosts to 3 (there is no inherent limit on the number of boosts allowed).
  • type - The move's type. Is looked up from the PBS file "moves.txt".
  • totalpp - The maximum PP of this move. Is calculated from data in the PBS file "moves.txt" and the "ppup" attribute.
ballused A number representing the type of Poké Ball that the Pokémon is in. The list of Poké Balls and their corresponding numbers is in the script section PItem_PokeBalls. Is 0 by default, i.e. a regular Poké Ball.
item The Pokémon's held item. Is the internal number of that item, which is the same as PBItems::ORANBERRY (or similar).
mail If the Pokémon's item is not a mail item, this attribute is nil. If it is a mail item, then this attribute is an array of several attributes:
  • item - Is the same value as the Pokémon's held item. This determines the mail's background image.
  • message - The mail's message.
  • sender - The name of the mail's sender.
  • pokeX, formX - The species and forms of up to three Pokémon to appear on the mail, if appropriate ("X" is 1, 2 or 3).
ev An array of the Effort Values this Pokémon has, in the order:
  1. HP
  2. Attack
  3. Defense
  4. Speed
  5. Special Attack
  6. Special Defense

These can each be between 0 and 255 inclusive. They are all 0 when the Pokémon is created.

iv An array of the Individual Values this Pokémon has, in the order:
  1. HP
  2. Attack
  3. Defense
  4. Speed
  5. Special Attack
  6. Special Defense

These can each be between 0 and 31 inclusive. They are randomly set when the Pokémon is created.

pokerus Is a number between 0 and 255 which describes the Pokérus infection state of this Pokémon. It contains both the strain of the virus and the remaining infection time in days. As a rough explanation:
  • 0 - The Pokémon does not have Pokérus, and has never had it.
  • >15, has a remainder when divided by 16 - The Pokémon has Pokérus and is infectious. The remainder is the number of days remaining for it to be infectious.
  • >15, has no remainder when divided by 16 - The Pokémon has had Pokérus in the past, and is no longer infectious.
fused Another Pokémon which has been fused with this Pokémon (or nil if there is none). It is a Pokémon itself. Currently only used by Kyurem, to record a fused Reshiram or Zekrom.
The Pokémon's contest stats.

They currently do nothing in Essentials (except for "beauty" which is involved in the evolution method "Feebas", although there is no existing way to change its value).

markings The Pokémon's markings. The binary version of this number indicates which markings the Pokémon has.
ribbons An array of the Pokémon's ribbons. Each element of the array is either TRUE (has that particular ribbon) or FALSE (doesn't have that particular ribbon).
personalID The Pokémon's personal ID number. A 32-bit number (i.e. a number between 0 and 4,294,967,295), which is randomly generated when the Pokémon is created. The last two octets of the binary version of the ID number (a number between 0 and 65535) is displayed in a Pokémon summary screen, and is given by pkmn.publicID.

Determines the Pokémon's gender, ability, nature and shininess. It also determines where Spinda's spots are, and is used in the evolution methods "Silcoon" and "Cascoon".

The Pokémon's original trainer's ID number (a 32-bit number), name and gender respectively. The last two octets of the binary version of the ID number (a number between 0 and 65535) is displayed in a Pokémon summary screen. "otgender" is either 0 (male), 1 (female), 2 (mixed) or 3 (unknown), and is only used to colour in some text in a Pokémon summary screen.

Use pkmn.isForeign?($Trainer) to determine whether the Pokémon was originally owned by the player. Returns TRUE if either "trainerID" or "ot" do not match the player's (i.e. pkmn is foreign to the player), and FALSE if they both match (i.e. the player is the original owner). This example considers the player ($Trainer), but the script can be used for other (NPC) trainers, e.g. in battle.

The method, map ID and Level at which the Pokémon was obtained, and the map the Pokémon hatched from an egg on. "obtainMode" is either nil, 0 (met), 1 (egg received), 2 (traded) or 4 (fateful encounter).

The first three of these attributes are set when the Pokémon is generated, and again (except for "obtainMode") when an egg hatches.

pkmn.timeReceived returns the time and date the Pokémon was met (in seconds since the Unix epoch). Similarly, pkmn.timeEggHatched returns the time/date the Pokémon hatched.

obtainText If this is a string of text, that text will be shown instead of the name of the "obtainMap" in the summary screens.

Any egg obtained from the Day Care will have this set to "Day-Care Couple".

language The Pokémon's language. Is one of the following:
  • 0 - Unknown
  • 1 - Japanese
  • 2 - English (default)
  • 3 - French
  • 4 - Italian
  • 5 - German
  • 7 - Spanish
  • 8 - Korean

Pokémon that the player catches will have the same language as the player.

There are also two functions that affect Pokémon, as follows:

Function What it does
pkmn.heal Fully heals the Pokémon. Restores the HP to full, the status to normal, and the PP of all moves to full.
pkmn.calcStats Recalculates the Pokémon's stats (total HP, Attack, Defense, etc.).

Used when creating a Pokémon or egg, when an egg hatches, when a Pokémon's level/species/nature/gender/shininess changes, when an EV-modifying item is used, and when a Pokémon's form changes.

Level limit

The level limit is defined in the script section Settings, and is a variable called MAXLEVEL (default 100).

In the script section PBExperience is a large array containing all the "Exp per level" numbers for each growth rate. These numbers only go up to level 100. If the level limit is increased, then the "Exp per level" numbers for levels above 100 are calculated by formulae instead of being looked up in the array. These calculations are written in def self.pbGetExpInternal. There are different calculations depending on which growth rate the Pokémon's species has.


Pokérus is a virus that can rarely be contracted by a Pokémon. While it is infected, a Pokémon will receive more EVs from battle than usual. A Pokémon will be infectious for a while after contracting Pokérus, but will still receive the effect of it forever after.

The attribute which records a Pokémon's Pokérus is described above. It works the same as in the official games.

Only wild Pokémon or eggs from the Day Care may be generated with Pokérus. The chance of this is defined in the script section Settings, and is a variable called POKERUSCHANCE (default 3).

After any battle, an uninfected Pokémon in the player's party will have a 33% chance of catching Pokérus from each infected Pokémon next to it.

Community content is available under CC-BY-SA unless otherwise noted.