Pokémon evolution data structure (Generation III): Difference between revisions

From Bulbapedia, the community-driven Pokémon encyclopedia.
Jump to navigationJump to search
No edit summary
(Considering the padding as part of the struct instead of part of the array makes much more sense.)
(4 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Data on the '''[[Pokémon Evolution|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.
Data on the '''[[Evolution|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.
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.
Line 8: Line 8:
! Offset !! Size !! Type !! Notes
! Offset !! Size !! Type !! Notes
|-
|-
| 0x00 || 6 || Substructure || First Substructure
| 0x00 || 8 || Substructure || First Substructure
|-
|-
| 0x06 || 2 || colspan="2" | Padding due to alignment
| 0x08 || 8 || Substructure || Second Substructure
|-
|-
| 0x08 || 6 || Substructure || Second Substructure
| 0x10 || 8 || Substructure || Third Substructure
|-
|-
| 0x0E || 2 || colspan="2" | Padding due to alignment
| 0x18 || 8 || Substructure || Fourth Substructure
|-
|-
| 0x10 || 6 || Substructure || Third Substructure
| 0x20 || 8 || Substructure || Fifth Substructure
|-
| 0x16 || 2 || colspan="2" | Padding due to alignment
|-
| 0x18 || 6 || Substructure || Fourth Substructure
|-
| 0x1E || 2 || colspan="2" | Padding due to alignment
|-
| 0x20 || 6 || Substructure || Fifth Substructure
|-
| 0x26 || 2 || colspan="2" | Padding due to alignment
|}
|}


Line 36: Line 26:
| 0x00 || 2 || uint16_t
| 0x00 || 2 || uint16_t
| Method of evolution - How this Pokémon will evolve.  This can be one of the following values:
| Method of evolution - How this Pokémon will evolve.  This can be one of the following values:
* 0x0001 - Evolves by happiness without regards to time of day
* 0x0001 - Evolves by friendship without regards to time of day
* 0x0002 - Evolves by happiness during the day
* 0x0002 - Evolves by friendship during the day
* 0x0003 - Evolves by happiness at night
* 0x0003 - Evolves by friendship at night
* 0x0004 - Evolves by level up
* 0x0004 - Evolves by level up
* 0x0005 - Evolves by trade without items
* 0x0005 - Evolves by trade without items
* 0x0006 - Evolves by using an item on the Pokémon
* 0x0006 - Evolves by trading the Pokémon while holding an item
* 0x0007 - Evolves by trading the Pokémon while holding an item
* 0x0007 - Evolves by using an item on the Pokémon
* 0x0008 - Evolves by level up, but only when Attack is greater than Defense
* 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
* 0x0009 - Evolves by level up, but only when Attack is equal to Defense
Line 53: Line 43:
|-
|-
| 0x02 || 2 || uint16_t
| 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 happiness thresholds.
| 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.
| 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.
|-
| 0x06 || 2 || uint16_t || Padding due to alignment. Zeroed out.
|}
|}


All unused entries will be entirely zeroed-out.
All unused entries will be entirely zeroed-out.


{{data structure}}
{{data structure}}<br>
{{Project Games notice|data structure}}
{{Project Games notice|data structure}}
[[Category:Structures]]
[[Category:Structures]]

Revision as of 00:51, 7 December 2016

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 8 Substructure First Substructure
0x08 8 Substructure Second Substructure
0x10 8 Substructure Third Substructure
0x18 8 Substructure Fourth Substructure
0x20 8 Substructure Fifth Substructure

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 trading the Pokémon while holding an item
  • 0x0007 - Evolves by using an item on the Pokémon
  • 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.
0x06 2 uint16_t Padding due to alignment. Zeroed out.

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


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