“The Website Previously Known as Legendary Pokémon.”

Legacy, Weeklymech

Pokedex Data Structure

by Arty2

Introduction

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.

Specs.

A base stats structure is a 34-byte piece of data in the Advanced Generation games.

Pokédex Data Structure
Data  Type  Description
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.

Functions

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

round(($value)*2.20459)/10

Size compare

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.

Related links

About the author

Arty2

Heracles is an Athens-based architect and designer.
He founded LegendaryPKMN in 2001.