This article provides detailed documentation on the Pokédex data structures in the GBA games.
If you have something to add feel free to comment and I’d be happy to see people contributing to these articles. After every article will follow some related links that will help you get additional information.
Some might notice that the following article looks like Bulbapedia’s related page; I started that one page and fellow Bulbapedia editors are free to take more details from this one article and add it to Bulbapedia. Most stuff is self-explicatory but let’s get into detail.
A base stats structure is a 34-byte piece of data in the Advanced Generation games.
|Pokédex Data Structure|
|Padding||byte||Always equals 0x00.|
|Name||12 bytes||This is the Pokémon’s species/nickname. It is always in capital letters and possible empty letters are filled with 0x00. The last byte is a normal slash /. (TINYRACCOON/ for example)|
|Height||2 bytes||This is the Pokémon’s height. It is stored in decimetres (1/10 metres) and converted to other units with in-game functions.|
|Weight||2 bytes||This is the Pokémon’s weight. It is stored in hectogrammes (1/10 kilogrammes) and converted to other units with in-game functions.|
|Description pointer start||4 bytes||These show the game where the description for that Pokémon is. The MSB byte is always set to 0x08, which matches a BRANCH instruction (B) in assembly. If a pointer looks like 0x12345608 (in hex) then the location is 0x563412.|
|Description pointer end||4 bytes|
|Pokémon scale||2 bytes||This is the Pokémon’s scale used in the compare size function.|
|Pokémon offset||2 bytes||This is the Pokémon’s offset used in the compare size function.|
|Trainer Scale||byte||This is the Trainer’s scale used in the compare size function.|
|Trainer Offset||1 bytes||This is the Pokémon’s offset used in the compare size function.|
|Padding||byte||Always equals 0x0000.|
Here follow some functions that are pretty similar to the ones used in the games.
Decimetres to Feet/inches
feet = (round($value/0.254)-$inches)/12
inches = (round($value/0.254)%12)
Hectogrammes to libres
This returns the picture’s height/width in Size Compare Mode.
x = floor(64*256/scale)
Note: 64pixels is a standard sprite size.
The offsets’ true use is not confirmed but they sure affect the placement of the Pokémon’s sprite. A Pokémon’s Levitate ability or Flying type, also seems to have something to do with the sprite’s placement.