For creating new Pokémon species, see Defining a species.
For information on how Mega Evolution works, see Mega Evolution.
For information on how shiny Pokémon behave, see Shiny Pokémon.

This page describes how Pokémon forms are defined and how they work. This includes proper alternate forms (e.g. Deoxys), and also gender differences (e.g. Meowstic).

Which Pokémon have forms

Several Pokémon have multiple forms. These are:

  • Arceus
  • Basculin
  • Burmy/Wormadam (Burmy is sprite difference only)
  • Castform
  • Cherrim (sprite difference only)
  • Darmanitan
  • Deerling/Sawsbuck (sprite difference only)
  • Deoxys
  • Genesect (sprite difference only)
  • Giratina
  • Keldeo
  • Kyurem
  • Landorus
  • Meloetta
  • Pichu (sprite difference only)
  • Rotom
  • Shaymin
  • Shellos/Gastrodon (sprite difference only)
  • Spinda (sprite difference only)
  • Thundurus
  • Tornadus
  • Unown (sprite difference only)
  • Any species which can Mega Evolve

Defining an alternate form

A Pokémon's forms are split into a base form and alternate forms. The base form is the one defined in the PBS file "pokemon.txt", while alternate forms are defined in the PBS file "pokemonforms.txt" and are modifications of the base form. The base form is number 0, and alternate forms are other numbers (1, 2, 3...).

A variety of properties of a species can be modified by a form, such as type, abilities, moveset and held items. With a few exceptions (see below), anything defined about a species in the PBS file "pokemon.txt" can be modified for an alternate form of that species.


The PBS file "pokemonforms.txt" is laid out in nearly the same way as "pokemon.txt".

The first main difference is in the section names (the lines that have square brackets around them to mark the beginning of a new species/form). In "pokemon.txt" these names are simply numbers (the ID of each species), whereas in "pokemonforms.txt" they are the internal name of a species, followed by a hyphen, followed by a form number:


Since form 0 is the base form and is defined in "pokemon.txt", properties for form 0 of a species should not be defined in "pokemonforms.txt".

The other difference is in which properties can be defined. All of this information is optional, even if is it required in "pokemon.txt". See Defining a species for a more detailed description of each property.

Property Notes
If just Type1 is defined, then this form's second type will be the same as this form's first type (i.e. the form will be a single type), rather than inheriting the second type from the base form.

If just Type2 is defined, then this form's first type will be inherited from the base form. There is no harm in defining Type1 as well, though, even if it will be the same as the base form's.

BaseStats All six stats must be defined if any are.
BaseEXP -
EffortPoints All six EV stats must be defined if any are.
Rareness -
Happiness -
Both of these properties must be defined if either are any different to the base form's. If one of these properties is left blank, it will not inherit from the base form, but will instead be treated as empty.
Moves The entire moveset must be defined here if it is at all different to that of the base form's.
EggMoves The entire set of egg moves must be defined here if it is at all different to that of the base form's.

Species with different egg moves depending on their form should not be able to change their form at all. The breeding code does not support that.

StepsToHatch -
Height -
Weight -
Color -
Shape -
Habitat -
Kind -
Pokedex -
FormName If this is blank, then this form will not appear in the Pokédex.

If you have a species which has gender differences in an alternate form, you should define them as two separate forms instead. Only one version of each alternate form will appear in the Pokédex.

All three of these properties must be defined if any are different to the base form's. If one of these properties is left blank, it will not inherit from the base form, but will instead be treated as empty.
Evolutions These should only affect the evolution method and associated variable (e.g. Alolan Vulpix using an Ice Stone rather than a Fire Stone), and not which species a Pokémon can evolve into. The code does not well support varying evolution paths between forms of a species (i.e. evolving into different species depending on form).

If you want to have varying evolution paths, though (i.e. different forms evolve into different species), then the base form defined in "pokemon.txt" should list ALL of those species, not just the one(s) the base form can evolve into. To ensure that the base form cannot evolve into a species it shouldn't, make it evolve into those unattainable species via evolution methods that are impossible for it to achieve (e.g. levelling up on a non-existent map). Just be aware that you may run into other difficulties too.

If you just want to change HOW a particular form evolves (e.g. change which evolution stone is required, or change the evolution method), but not WHAT it evolves INTO, you can ignore the previous paragraph.

In addition to the above, there are also some properties exclusive to alternate forms which can also be defined. These properties are all relevant to Mega Evolution forms.

Property Description
MegaStone The internal name of an item which needs to be held to allow the holder to Mega Evolve into this form.

These items cannot be dropped or otherwise lost in battle.

UnmegaForm A Pokémon of this Mega Evolved form reverts to its unmega form at the end of battle. If undefined, this is 0.
MegaMove The internal name of a move which needs to be known by a Pokémon to allow that Pokémon to Mega Evolve into this form. This typically only applies to Rayquaza (whose move is Dragon Ascent).
MegaMessage A number which indicates the message that is shown when a Pokémon is Mega Evolving into this form. The messages themselves are hardcoded in def pbMegaEvolve in script section PokeBattle_Battle. If undefined, this is 0. This typically only applies to Rayquaza (which uses message 1).
  • 0 = "{Pokémon}'s {Mega Stone} is reacting to {Player}'s {Mega Ring}!"
  • 1 = "{Player}'s fervent wish has reached {Pokémon}!"

For completion's sake, the following properties cannot be defined for an alternate form, even though they can be defined in "pokemon.txt". The reasons for why they are disabled vary.

Property Why not?
Name The species name is for the species as a whole, not for individual forms.
InternalName The internal name is for the species as a whole, not for individual forms.
GenderRate There can be a clash between having a form-specific gender rate and forms which depend on the Pokémon's gender (e.g. Meowstic).
GrowthRate If a Pokémon's form changes, this property being form-specific will change the Pokémon's level, which is not desirable.
Compatibility No real reason, but it doesn't make sense for a form to be so different to its base form that it can breed with different species.
RegionalNumbers The Regional Dex numbers are for the species as a whole, not for individual forms.
Incense Difficulties ensuring that breeding will produce the correct offspring.

Finally, a form's TM compatibility (i.e. information defined in the PBS file "tm.txt") cannot be added to "pokemonforms.txt". Instead, this information needs to be defined in the scripts. An example for you to copy is Wormadam:

   next if pokemon.form==0
   case pokemon.form
   when 1; movelist=[# TMs
                     # Move Tutors
   when 2; movelist=[# TMs
                     # Move Tutors
   for i in 0...movelist.length
   next movelist

The above code can be found in the script section Pokemon_Forms.

Choosing the form to use

A Pokémon's form is the value of pkmn.form. If this value does not correspond to a defined alternate form, then the Pokémon will appear as the base form - it will technically still be an alternate form, but just one that doesn't differ from the original in any way.

By default, a Pokémon will be form 0. For some species with alternate forms, each Pokémon can have a different form depending on various factors, such as location (Shellos), held item (Arceus), moves known (Keldeo) or just a random choice (Unown).

The script section Pokemon_Forms contains scripts that make the decision for each Pokémon of which form they should have. These are:

Proc Description Species
getForm Checked whenever the game looks at the Pokémon; this procedure determines which form it should be. The form can depend on anything, such as location, held item or time.

Used for species which can change their forms automatically depending on various factors.

  • Arceus
  • Deerling, Sawsbuck
  • Furfrou
  • Genesect
  • Giratina
  • Hoopa
  • Keldeo
  • Shaymin
getFormOnCreation Checked when the Pokémon is first created, and determines which form it should be (at least initially). The form can depend on anything, such as location, the type of terrain nearby, or a random choice.

Used for species which cannot change forms, and which appear in the wild in multiple forms.

  • Basculin
  • Burmy, Wormadam
  • Flabébé, Floette, Florges
  • Pumpkaboo, Gourgeist
  • Scatterbug, Spewpa, Vivillon
  • Shellos, Gastrodon
  • Unown
getFormOnEnteringBattle Checked when the Pokémon is sent into battle, and determines which form the Pokémon should be changed to. For example, Burmy's form depends on the type of terrain the battle is taking place on.
  • Burmy
  • Xerneas
onSetForm This doesn't change the Pokémon's form.

Checked when the Pokémon's form has been changed (by one of the above procedures, or through Debug mode), and does further things. For example, Rotom tries to learn a form-specific moves when it adopts a new form, and Furfrou/Hoopa remember when their form was changed because they revert back to their base form after a certain amount of time.

  • Furfrou
  • Hoopa
  • Rotom

There are also some procedures used solely for Mega Evolutions, which are not listed here.

Some species can change their forms, but only due to an outside influence (e.g. Deoxys changes when inspecting certain meteorites). These species do not need to use any of the procedures listed above.

Some species change form in battle (e.g. Castform depending on the weather). The methods def pbCheckForm and def pbResetForm in script section PokeBattle_Battler contain code which handles this.

Gender differences

A number of species have gender differences. These are purely cosmetic, as only the sprite displayed for a Pokémon of that species can vary.

If a species has non-cosmetic gender differences (e.g. Meowstic's moveset changes depending on its gender), then it should have two different forms to deal with this. The base form would have a form name of "Male" and the alternate form would be called "Female". It would also have a "getForm" prcedure (see above) which sets the form depending on the Pokémon's gender.

Graphics and audio

Sprites and icons

Pokémon sprites are stored in the folder "Graphics/Battlers", and Pokémon icons are stored in the folder "Graphics/Icons".

Whenever a Pokémon's sprite or icon is displayed, one of a variety of methods are called that decides which picture to use as that sprite/icon. These methods are in the script section PSystem_FileUtilities. These methods check several properties of the Pokémon they are finding a sprite/icon for, to make sure they return the most appropriate graphic.

Pokémon sprites are stored in the folder "Graphics/Battlers". Their filenames are constructed from one or more elements in the following order:

  • XXX - the internal name of the species, or its ID number padded to 3 digits (always present)
  • f - if female
  • s - if shiny
  • b - if a back sprite
  • _1 - if an alternate form (the number is the form number)
  • _shadow - if a Shadow Pokémon

Pokémon icons are stored in the folder "Graphics/Icons". Their filenames are named in the same way as sprites, except that they also have "icon" at the beginning (before the "XXX").

You do not need a file for each combination of the above elements. Essentials checks through each relevant permutation of elements in order until it finds the most appropriate one which exists as a file.

For example, the back sprite of a female shiny East Sea Gastrodon would be "423fsb_1". However, Gastrodon does not have gender differences, so there would be no file with this name. Upon ignoring the gender, the new filename "423sb_1" is generated. This matches a file that exists, so that file is used as the sprite.

There are plenty of examples in Essentials of how the sprites and icons are named. If you are unsure about file naming, look at those.


Pokémon cries are stored in the folder "Audio/SE/Cries". Their filenames include fewer elements than sprites/icons, but are still constructed in the same way:

  • XXX - the internal name of the species, or its ID number padded to 3 digits (always present)
  • "Cry" - this is text (always present)
  • _1 - if an alternate form (the number is the form number)

For example, Sky Forme Shamin's cry has a filename of "492Cry_1".

Important note!

Files for form 0 should not have a form part of "_0" in them. Simply omit that element when naming the files. For example, Gastrodon would have front sprite files named "423.png" and "423_1.png" only (the default form West Sea and the alternate form East Sea respectively).

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