Pokédex data structure in Generation III

Specs
A Pokédex data structure is a 36-byte (32-byte for Pokémon Emerald) piece of data.

Every Pokémon species in the Generation III games has data stored in the game that is used in Pokédex related functions and by certain moves, such as.

Size compare function
In Generation III, there is a size page on the Pokédex, which uses data from the Pokédex to create a silhouette of the Pokémon standing next to the Trainer. The size of both the Trainer and Pokémon are determined by this formula:

Where y is the sprite size (64 pixels in this case) and z is the appropriate scale in hex and x rounded down is the size of silhouette. The game then resizes the sprite in a way similar a computer would do (without anti-aliasing).

The offset determines where exactly the silhouette will be placed. For example if Pokémon offset = 10 then the silhouette of the Pokémon will be 10 pixels from the top and 10 pixels from the left. (For some reason, that cannot be exactly simulated outside of the game).

Offsets
Ruby: 0x083B1858

Sapphire: 0x083B18B0

Emerald: 0x0856B5B0

FireRed: 0x0844E850

LeafGreen: 0x0844E270

Fingerprint
For Ruby/Sapphire: cf c8 c5 c8 c9 d1 c8 ff 00 00 00 00 00 00 00 00 59 04 3a 08 a2 04 3a 08 00 00 00 01 00 00 00 01 00 00 00 00 // - cd bf bf be ff 00 00 00 00 00 00 00 07 00 45 00 d5 04 3a 08 24 05 3a 08 00 00 64 01 11 00 00 01 00 00 00 00 // BULBASAUR cd bf bf be ff 00 00 00 00 00 00 00 0a 00 82 00 67 05 3a 08 d5 05 3a 08 00 00 4f 01 0d 00 00 01 00 00 00 00 // IVYSAUR cd bf bf be ff 00 00 00 00 00 00 00 14 00 e8 03 4a 06 3a 08 c0 06 3a 08 00 00 00 01 00 00 84 01 06 00 00 00 // VENUSAUR c6 c3 d4 bb cc be ff 00 00 00 00 00 06 00 55 00 01 07 3a 08 73 07 3a 08 00 00 bc 01 12 00 00 01 00 00 00 00 // CHARMANDER c0 c6 bb c7 bf ff 00 00 00 00 00 00 0b 00 be 00 be 07 3a 08 26 08 3a 08 00 00 2e 01 09 00 00 01 00 00 00 00 // CHARMELEON c0 c6 bb c7 bf ff 00 00 00 00 00 00 11 00 89 03 8c 08 3a 08 f0 08 3a 08 00 00 00 01 01 00 2e 01 03 00 00 00 // CHARIZARD ...