Pokémon species data structure (Generation III)

The Pokémon species data structure is a 28-byte structure, stored in the ROM of the Generation III games for every Pokémon species, that determines most of the information inherent to the species, such as base stats, types, Egg Groups, and effort value yield. Level-up moves (including those known at level 1), TM and HM flags, and Evolutions are stored elsewhere. The Pokémon species' names are not part of this structure, but are instead stored elsewhere.

Notes

Offset Contents Size
0x00 Base HP byte
0x01 Base Attack byte
0x02 Base Defense byte
0x03 Base Speed byte
0x04 Base Sp. Attack byte
0x05 Base Sp. Defense byte
0x06 Type 1 byte
0x07 Type 2 byte
0x08 Catch rate byte
0x09 Base experience yield byte
0x0A Effort yield word
0x0C Wild held item 1 word
0x0E Wild held item 2 word
0x10 Gender ratio byte
0x11 Egg cycles byte
0x12 Base friendship byte
0x13 Growth rate byte
0x14 Egg group 1 byte
0x15 Egg group 2 byte
0x16 Ability 1 byte
0x17 Ability 2 byte
0x18 Safari Zone rate byte
0x19 Color and flip byte
0x1A Padding (always 0) word

Types

The types are associated with the following values. For a single-type Pokémon, both types are set to the same value.

Value Type Value Type Value Type
0 Normal 6 Bug 12 Grass
1 Fighting 7 Ghost 13 Electric
2 Flying 8 Steel 14 Psychic
3 Poison 9 ??? 15 Ice
4 Ground 10 Fire 16 Dragon
5 Rock 11 Water 17 Dark

Effort yield

Each stat is assigned two bits, which give how many effort values (0-3) the Pokémon yields in that stat when defeated. The last 4 bits of the word are unused and always 0.

Bits Stat
0-1 HP
2-3 Attack
4-5 Defense
6-7 Speed
8-9 Special Attack
10-11 Special Defense

Wild held items

The item entries refer to items by their index number. The first item has a 50% chance of being held when the Pokémon is encountered in the wild, and the second has a 5% chance of being held. If both items are the same, the Pokémon always holds that item. If the first Pokémon in the player's party has Compound Eyes, these chances become 60% and 20%.

Gender ratio

Main article: Personality value → Gender

The gender ratio is expressed as a 1-byte threshold for the Pokémon to be male. If the species is not all male, all female, or gender unknown, this value is compared to the lowest byte of the Pokémon's personality value: the Pokémon is female if that byte is less than the threshold and male otherwise.

Gender threshold Gender ratio
Binary Decimal Male Female
11111111 255 Gender unknown
11111110 254 0.0% 100.0%
11100001 225 (unused) 12.5% 87.5%
10111111 191 25.0% 75.0%
01111111 127 50.0% 50.0%
00111111 63 75.0% 25.0%
00011111 31 87.5% 12.5%
00000000 0 100.0% 0.0%

Growth rate

The following values correspond to the different growth rates a Pokémon can have:

Value Growth rate Lv. 100 Exp
0 Medium Fast 1,000,000
1 Erratic 600,000
2 Fluctuating 1,640,000
3 Medium Slow 1,059,860
4 Fast 800,000
5 Slow 1,250,000

Egg groups

For a Pokémon in only one group, both are set to the same value. The following values correspond to the different Egg Groups a Pokémon can belong to:

Value Egg group Value Egg group Value Egg group
1 Monster 6 Fairy 11 Amorphous
2 Water 1 7 Grass 12 Water 2
3 Bug 8 Human-Like 13 Ditto
4 Flying 9 Water 3 14 Dragon
5 Field 10 Mineral 15 No Eggs Discovered

Safari Zone rate

This value determines the rate at which the Pokémon will flee when encountered in the Safari Zone. For Pokémon that do not appear in the Safari Zone, this value is 0.

Color and flip

Color is used in the Pokédex's search function in Ruby, Sapphire, and Emerald. The following values correspond to the different possible colors:

Value Color Value Color
0 Red 5 Brown
1 Blue 6 Purple
2 Yellow 7 Gray
3 Green 8 White
4 Black 9 Pink

"Flip" refers to whether the Pokémon's image is flipped when seen in the summary screen as opposed to when seen in the Pokédex or PC. This is determined by bit 7 (the most significant bit) of this field. For some Pokémon, such as Poliwag, Kingler, and Unown, this bit is set and the image is not flipped (i.e., the image is oriented the same in both places).

Fingerprint

The first entries of the table are shown below and can be used to locate it in a ROM.

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ?????????? (used for unknown/glitch Pokémon)
2D 31 31 2D 41 41 0C 03 2D 40 00 01 00 00 00 00 1F 14 46 03 01 07 41 00 00 03 00 00  // BULBASAUR
3C 3E 3F 3C 50 50 0C 03 2D 8D 00 05 00 00 00 00 1F 14 46 03 01 07 41 00 00 03 00 00  // IVYSAUR
50 52 53 50 64 64 0C 03 2D D0 00 06 00 00 00 00 1F 14 46 03 01 07 41 00 00 03 00 00  // VENUSAUR
27 34 2B 41 3C 32 0A 0A 2D 41 40 00 00 00 00 00 1F 14 46 03 01 0E 42 00 00 00 00 00  // CHARMANDER
3A 40 3A 50 50 41 0A 0A 2D 8E 40 01 00 00 00 00 1F 14 46 03 01 0E 42 00 00 00 00 00  // CHARMELEON
4E 54 4E 64 6D 55 0A 02 2D D1 00 03 00 00 00 00 1F 14 46 03 01 0E 42 00 00 00 00 00  // CHARIZARD
2C 30 41 2B 32 40 0B 0B 2D 42 10 00 00 00 00 00 1F 14 46 03 01 02 43 00 00 01 00 00  // SQUIRTLE
3B 3F 50 3A 41 50 0B 0B 2D 8F 10 04 00 00 00 00 1F 14 46 03 01 02 43 00 00 01 00 00  // WARTORTLE
4F 53 64 4E 55 69 0B 0B 2D D2 00 0C 00 00 00 00 1F 14 46 03 01 02 43 00 00 01 00 00  // BLASTOISE
...

Storage

The following are the addresses of the first data entry (Bulbasaur) in each release of the Generation III games. The table begins with an all-zero entry for index 0, so each address is 28 bytes after the start of the table. Since the ROM is mapped at 0x08000000, the offset in a ROM dump only uses the last six hexadecimal digits.

Game Language Address
Ruby Japanese 0x081D09E8
Japanese (Rev 1)
English 0x081FEC34
English (Rev 1) 0x081FEC4C
English (Rev 2)
German 0x0820BC04
German (Rev 1)
French 0x08207080
French (Rev 1)
Italian 0x0820090C
Italian (Rev 1)
Spanish 0x082039B0
Spanish (Rev 1)
Sapphire Japanese 0x081D0978
Japanese (Rev 1)
English 0x081FEBC4
English (Rev 1) 0x081FEBDC
English (Rev 2)
German 0x0820BB98
German (Rev 1)
French 0x08207010
French (Rev 1)
Italian 0x0820089C
Italian (Rev 1)
Spanish 0x08203940
Spanish (Rev 1)
Emerald Japanese 0x082F0D70
English 0x083203E8
German 0x08334DA8
French 0x08327F58
Italian 0x0831FDE8
Spanish 0x083266A4
FireRed Japanese 0x082111A8
Japanese (Rev 1) 0x0820C9C0
English 0x082547A0
English (Rev 1) 0x08254810
German 0x082546C4
French 0x0824EBF0
Italian 0x0824D880
Spanish 0x0824FF68
LeafGreen Japanese 0x08211184
Japanese (Rev 1) 0x0820C99C
English 0x0825477C
English (Rev 1) 0x082547EC
German 0x082546A0
French 0x0824EBCC
Italian 0x0824D85C
Spanish 0x0824FF44

Related articles

Data structure in the Pokémon games
General Character encoding
Generation I Pokémon species • Pokémon • Poké Mart • Character encoding (Stadium) • Save
Generation II Pokémon species • Pokémon • Trainer • Character encoding (Stadium • Korean) • Save
Generation III Pokémon species (Evolution • Pokédex • Type chart)
Pokémon (substructures) • Move • Contest • Contest move • Item
Trainer Tower • Battle Frontier • Character encoding (GameCube) • Save
Generation IV Pokémon species (Evolution • Learnsets)
Pokémon • Save • Character encoding (Wii)
Generation V–present Character encoding
Generation VIII Save
TCG GB and GB2 Character encoding
This data structure article is part of Project Games, a Bulbapedia project that aims to write comprehensive articles on the Pokémon games.