Pokémon evolution data structure (Generation III)

Data on the evolution of Pokémon is stored as a series of 6-byte structures in Generation III. These structures must be aligned on a 4-byte boundary, and each Pokémon species has 5 such entries, for a total of 40 bytes per species.

In all Generation III games, evolution data is situated between the Pokémon move list data pool and the actual Pokémon move list index; see Move list data structures in Generation III for a list of locations.

Pokémon Evolution Data Structure

Each species has 5 substructures, as Eevee has 5 evolution options. The overall structure is laid out as follows:

Offset Size Type Notes
0x00 6 Substructure First Substructure
0x06 2 Padding due to alignment
0x08 6 Substructure Second Substructure
0x0E 2 Padding due to alignment
0x10 6 Substructure Third Substructure
0x16 2 Padding due to alignment
0x18 6 Substructure Fourth Substructure
0x1E 2 Padding due to alignment
0x20 6 Substructure Fifth Substructure
0x26 2 Padding due to alignment

Pokémon Evolution Data Substructure

The 6-byte substructure is organized as follows:

Offset Size Type Notes
0x00 2 uint16_t Method of evolution - How this Pokémon will evolve. This can be one of the following values:
  • 0x0001 - Evolves by friendship without regards to time of day
  • 0x0002 - Evolves by friendship during the day
  • 0x0003 - Evolves by friendship at night
  • 0x0004 - Evolves by level up
  • 0x0005 - Evolves by trade without items
  • 0x0006 - Evolves by using an item on the Pokémon
  • 0x0007 - Evolves by trading the Pokémon while holding an item
  • 0x0008 - Evolves by level up, but only when Attack is greater than Defense
  • 0x0009 - Evolves by level up, but only when Attack is equal to Defense
  • 0x000A - Evolves by level up, but only when Attack is lower than Defense
  • 0x000B - Evolves by level up, but only when the personality value permits (WurmpleSilcoon evolution)
  • 0x000C - Evolves by level up, but only when the personality value permits (WurmpleCascoon evolution)
  • 0x000D - Evolves by level up, but may spawn another Pokémon if permitted (NincadaNinjask evolution)
  • 0x000E - Evolves by level up, but is only spawned if the conditions permit (NincadaShedinja evolution)
  • 0x000F - Evolves by beauty
0x02 2 uint16_t Parameter - The meaning of this is dependent on the method of evolution - the item, the level, etc. Not used and zeroed out where applicable. Note that the parameter is used for the beauty threshold, but is not used for friendship thresholds.
0x04 2 uint16_t Target Pokémon - The Pokémon which this Pokémon will evolve to. See List of Pokémon by index number (Generation III) for a list of values.

All unused entries will be entirely zeroed-out.


Data structure in the Pokémon games
Generation I Pokémon speciesPokémonPoké MartCharacter encodingSave
Generation II Pokémon speciesPokémonTrainerCharacter encoding (Korean) • Save
Generation III Pokémon species (Pokémon evolutionPokédexType chart)
Pokémon (substructures) • MoveContestContest moveItem
Trainer TowerBattle FrontierCharacter encodingSave
Generation IV Pokémon species (Pokémon evolutionLearnsets)
PokémonSaveCharacter encoding
Generation V-present Character encoding
TCG GB and GB2 Character encoding


  This data structure article is part of Project Games, a Bulbapedia project that aims to write comprehensive articles on the Pokémon games.