Pokémon base stats data structure in Generation I

Contents

Specs

A base stats structure is a 28-byte piece of data.

Every Pokémon species in the Generation Igames has a 28-byte base stats structure stored in the game's ROM somewhere. The structures (with the exception of Mew in Red and Blue) appear in Pokédex order rather than index number. It determines some information inherent to the species, such as base Attack, Types, and catch rate. Cries and level-up moves (not starting moves), as well as evolutions are stored elsewhere.

Sprites

The dimensions of the frontsprite are given in the base stats structure even though they can also be found at the beginning of the (compressed) image data. The high nybble is the width, and the low nybble is the height. The width and height are given in tiles; to convert to pixels, multiply by 8. The backsprite is always 4x4.

The bank in which the sprite is located is based on the internal id of the Pokémon:

id

bank

0x15

0x01

0xB6

0x0B

0x00 to 0x1E

0x09

0x1F to 0x49

0x0A

0x4A to 0x73

0x0B

0x74 to 0x98

0x0C

0x99 to 0xFF

0x0D

(Note: these values may not be correct for Yellow.)

The full offset to a sprite is then (bank << 14) + (pointer & 0x3fff).

The compression algorithm used by the sprites is, unfortunately, outside the scope of this article. It is covered in detail at [1].

Growth Rate

0. Medium Fast

3. Medium Slow

4. Fast

5. Slow

TMs

The TMs which a Pokémon can learn are stored as a bunch of flags. Starting from the LSB of the first byte, and ending with the MSB of the last byte. The five HMs are treated as TMs 51-55.