The Pokémon: Symphonic Evolutions concert tour is coming to Philadelphia on September 19th. Seats are limited, so be sure to book your tickets quick!
Pokémon Omega Ruby and Alpha Sapphire are coming this November! Check BNN and Bulbanews for up-to-date Pokémon news and discuss it on the forums or in our IRC channel.

Pokémon base stats data structure in Generation I

From Bulbapedia, the community-driven Pokémon encyclopedia.
Jump to: navigation, search

Specs

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

Every Pokémon species in the Generation I games 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.

Offset Contents Size
0x00 Pokédex number byte
0x01 Base HP byte
0x02 Base Attack byte
0x03 Base Defense byte
0x04 Base Speed byte
0x05 Base Special byte
0x06 Type 1 byte
0x07 Type 2 byte
0x08 Catch rate byte
0x09 Base Exp. Yield byte
0x0A Dimensions of frontsprite byte
0x0B Pointer to frontsprite word
0x0D Pointer to backsprite word
0x0F-0x12 Attacks known at lv. 1 4 bytes
0x13 Growth rate byte
0x14-0x1A TM and HM flags 7 bytes
0x1B Padding byte

Notes

Types

Types are enumerated like this:

  • 0x00: Normal
  • 0x01: Fighting
  • 0x02: Flying
  • 0x03: Poison
  • 0x04: Ground
  • 0x05: Rock
  • 0x06: Bird
  • 0x07: Bug
  • 0x08: Ghost
  • 0x09-0x13: blank
  • 0x14: Fire
  • 0x15: Water
  • 0x16: Grass
  • 0x17: Electric
  • 0x18: Psychic
  • 0x19: Ice
  • 0x1A: Dragon

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.

Fingerprint

Red/Blue

01 2D 31 31 2D 41 16 03 2D 40 55 00 40 E5 40 21 2D 00 00 03 A4 03 38 C0 03 08 06 00  // BULBASAUR
02 3C 3E 3F 3C 50 16 03 2D 8D 66 2B 50 57 51 21 2D 49 00 03 A4 03 38 C0 03 08 06 00  // IVYSAUR
03 50 52 53 50 64 16 03 2D D0 77 62 41 97 43 21 2D 49 16 03 A4 43 38 C0 03 08 06 00  // VENUSAUR
04 27 34 2B 41 32 14 14 2D 41 55 5C 5C 5C 5D 0A 2D 00 00 03 B5 03 4F C8 E3 08 26 00  // CHARMANDER
05 3A 40 3A 50 41 14 14 2D 8E 66 0C 5F 48 60 0A 2D 34 00 03 B5 03 4F C8 E3 08 26 00  // CHARMELEON
06 4E 54 4E 64 55 14 02 2D D1 77 86 62 95 64 0A 2D 34 2B 03 B5 43 4F CE E3 08 26 00  // CHARIZARD
07 2C 30 41 2B 32 15 15 2D 42 55 B8 5D 8F 5E 21 27 00 00 03 B1 3F 0F C8 83 08 32 00  // SQUIRTLE
08 3B 3F 50 3A 41 15 15 2D 8F 66 B1 60 F1 61 21 27 91 00 03 B1 3F 0F C8 83 08 32 00  // WARTORTLE
09 4F 53 64 4E 55 15 15 2D D2 77 37 76 51 78 21 27 91 37 03 B1 7F 0F CE 83 08 32 00  // BLASTOISE
0A 2D 1E 23 2D 14 07 07 FF 35 55 49 4A E1 4A 21 51 00 00 00 00 00 00 00 00 00 00 00  // CATERPIE
...

Yellow

01 2D 31 31 2D 41 16 03 2D 40 55 00 40 E4 40 21 2D 00 00 03 A4 03 38 C0 03 08 06 00  // BULBASAUR
02 3C 3E 3F 3C 50 16 03 2D 8D 66 E9 4F 73 51 21 2D 49 00 03 A4 03 38 C0 03 08 06 00  // IVYSAUR
03 50 52 53 50 64 16 03 2D D0 77 61 41 81 43 21 2D 49 16 03 A4 43 38 C0 03 08 06 00  // VENUSAUR
04 27 34 2B 41 32 14 14 2D 41 55 F0 5D FC 5E 0A 2D 00 00 03 B5 03 4F C8 E3 08 26 00  // CHARMANDER
05 3A 40 3A 50 41 14 14 2D 8E 66 C8 60 25 62 0A 2D 34 00 03 B5 03 4F C8 E3 08 26 00  // CHARMELEON
06 4E 54 4E 64 55 14 02 2D D1 77 A9 64 00 67 0A 2D 34 2B 03 B5 43 4F CE E3 08 2E 00  // CHARIZARD
07 2C 30 41 2B 32 15 15 2D 42 55 58 5F 4B 60 21 27 00 00 03 B1 3F 0F C8 83 08 32 00  // SQUIRTLE
08 3B 3F 50 3A 41 15 15 2D 8F 66 8E 62 14 64 21 27 91 00 03 B1 3F 0F C8 83 08 32 00  // WARTORTLE
09 4F 53 64 4E 55 15 15 2D D2 77 FA 75 0B 78 21 27 91 37 03 B1 7F 0F CE 83 08 32 00  // BLASTOISE
0A 2D 1E 23 2D 14 07 07 FF 35 55 05 4B E8 4B 21 51 00 00 00 00 00 00 00 00 00 00 00  // CATERPIE
...

Storage

The following are ROM offsets for the first entry (Bulbasaur) in each GB game:

  • Red (en): 0x0383DE
  • Blue (en): 0x0383DE
  • Yellow (en): 0x0383DE

Note: In Red and Blue, Mew's stats are stored at 0x00425B. In Yellow, they are stored where one would expect them to be, after the other Pokémon.


Data structure in the Pokémon games
Generation I Pokémon data structurePokémon base stats data structureSave data structure
Generation II Pokémon data structurePokémon base stats data structureTrainer data structureSave data structure
Generation III Pokémon data structurePokémon data substructuresPokémon base stats data structureMove data structure
Contest data structureContest move data structureItem data structurePokédex data structureBattle Frontier data structures
Trainer Tower data structuresPokémon evolution data structureType Chart data structureSave data structure
Generation IV Pokémon data structureSave data structure

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.