Pokémon data substructures (Generation III)

This is the list of Pokémon data substructures in the Generation III Game Boy Advance games, Pokémon Ruby, Sapphire, .
==Format==
A Pokémon's data is slightly more complex than the rest of the . It is stored as four distinct substructures, each 12 bytes in length. (The Notes section below explains some of these fields in greater detail.)
Growth 	Growth 	Growth 	Attacks	Attacks 	Attacks 	EVs & Condition 	EVs & Condition	EVs & Condition	Miscellaneous 	Miscellaneous	Miscellaneous
 	size(bytes)	offset(bytes)	 	size(bytes)	offset(bytes)	 	size(bytes) 	offset(bytes) 	 	size(bytes) 	offset(bytes)
Species 	2 	0 	Move 1 	2 	0 	HP EV 	1 	0 	Pokérus status 	1 	0
Item held 	2 	2 	Move 2 	2 	2 	Attack EV 	1 	1 	Met location 	1 	1
Experience	4 	4 	Move 3 	2 	4 	Defense EV 	1 	2 	Origins info 	2 	2
PP bonuses	1 	8 	Move 4 	2 	6 	Speed EV 	1 	3 	IVs, , and Ability 	4 	4
Friendship	1 	9 	PP 1 	1 	8 	Special Attack EV 	1 	4 	Ribbons and Obedience	4 	8
Unused 	2 	10 	PP 2 	1 	9 	Special Defense EV	1 	5 	 	 	
 	 	 	PP 3 	1 	10 	ness 	1 	6 	 	 	
 	 	 	PP 4 	1 	11 	 	1 	7 	 	 	
 	 	 	 	 	 	ness 	1 	8 	 	 	
 	 	 	 	 	 	ness 	1 	9 	 	 	
 	 	 	 	 	 	ness 	1 	10 	 	 	
 	 	 	 	 	 	 	1 	11 	 	 	
===Substructure order===
The order of the structures is determined by the personality value of the Pokémon modulo 24, as shown below, where G, A, E, and M stand for the substructures growth, attacks, EVs and condition, and miscellaneous, respectively.
00. GAEM	06. AGEM	12. EGAM	18. MGAE
01. GAME	07. AGME	13. EGMA	19. MGEA
02. GEAM	08. AEGM	14. EAGM	20. MAGE
03. GEMA	09. AEMG	15. EAMG	21. MAEG
04. GMAE	10. AMGE	16. EMGA	22. MEGA
05. GMEA	11. AMEG	17. EMAG	23. MEAG
===Encryption===
The four data substructures are stored in an encrypted form. Decrypting the data involves two steps: actually decrypting the data, and validating the decrypted data. To obtain the 32-bit decryption key, the entire Original Trainer ID number must be ed with the personality value of the entry. This key can then be used to decrypt the data by XORing it, 32 bits (or 4 bytes) at a time. To validate the checksum given in the encapsulating , the entirety of the four unencrypted data substructures must be summed into a 16-bit value.
==Notes==
===PP bonuses===
The PP bonuses byte stores the number of times PP has been increased for each move in the attacks substructure. Each move has two bits, meaning the PP of each move can be increased 0 to 3 times.
Bits	Move
0-1 	Move 1
2-3 	Move 2
4-5 	Move 3
6-7 	Move 4
===Pokérus status===
Pokérus status is stored in a single byte, with the upper and lower halves representing distinct values.
Bits	Interpretation
0-3 	Days left until Pokérus is cured
4-7 	Pokérus "strain"
Any value from 0 to 15 is valid for the strain, with 0 indicating that the Pokémon does not have Pokérus at all. The number of days can be any value from 0 to 4, although for some "strains", some of those higher values are also invalid. If any bit is set in the "strain" and the number of days is at 0, the Pokémon has been "cured" of Pokérus, as indicated by a small black dot on the Pokémon's status screen.
===Origins===
Trainer gender tells the game how to color the name of the Pokémon's Original Trainer on the Pokémon's status screen. If Level met is 0, it is interpreted as the Pokémon having been hatched from an ; however, the games only differentiate a hatched Pokémon from other Pokémon if its current Trainer is the Pokémon's Original Trainer. If a hatched Pokémon is traded, its origin text on the status screen is displayed just like a caught Pokémon's and will not say "Hatched" or "Egg".
Trainer gender	Trainer gender	Poké Ball caught in	Poké Ball caught in	Game of origin	Game of origin	Level met 	Level met
Bit 15 	Bit 15 	Bits 11 - 14 	Bits 11 - 14 	Bits 7 - 10 	Bits 7 - 10 	Bits 0 - 6	Bits 0 - 6
Value 	Gender 	Value 	Ball 	Value 	Game 	Value 	Interpretation
0 	Male 	1 	 	1 	 	0 	Hatched
1 	Female 	2 	 	2 	 	>0 	Caught or other
 	 	3 	 	3 	 	 	
 	 	4 	 	4 	 	 	
 	 	5 	 	5 	 	 	
 	 	6 	 	15 	or 	 	
 	 	7 	 	 	 	 	
 	 	8 	 	 	 	 	
 	 	9 	 	 	 	 	
 	 	10 	 	 	 	 	
 	 	11 	 	 	 	 	
 	 	12 	 	 	 	 	
===IVs, Egg, and Ability===
IVs for each of the stats from HP to Special Defense take up the lowest 30 bits of this field, each IV taking 5 bits. Bit 30 is a 1 if the Pokémon is still an Egg or 0 otherwise. Bit 31 indicates the Ability the Pokémon has: 0 indicates its first Ability, while 1 indicates its second Ability (if it has one).
In the table below, bit 0 is the least significant bit of the 32-bit field and bit 31 is the most significant.
Bits 	Stat
0-4 	HP
5-9 	Attack
10-14	Defense
15-19	Speed
20-24	Special Attack
25-29	Special Defense
30 	Egg?
31 	Ability
===Ribbons and Obedience===
For most of the Ribbons, a value of 0 indicates that the Pokémon does not have the Ribbon while 1 indicates that it does. For the Ribbons, the values 1 to 4 indicate that the Pokémon has the Ribbon or Ribbons for (respectively) the Normal, Super, Hyper, and Master Ranks of that Contest.
In-game, the descriptions of the last 7 ribbons (corresponding to bits 20-26) are blank by default. What text appears there is determined by the method those ribbons are attained. Also note that some of these ribbons are unobtainable and/or had different names prior to Gen 5. For a full list of possible descriptions see here.
Bits 	Ribbon
0-2 	
3-5 	
6-8 	
9-11 	
12-14	
15 	
16 	
17 	
18 	
19 	
20 	
21 	
22 	
23 	
24 	
25 	
26 	
The highest bit of this field, bit 31, determines the obedience of and . If this bit is not set, Mew and Deoxys cannot be traded to or from Pokémon FireRed, LeafGreen, or Emerald, and will always disobey the player in battle in those games (except in link battles). If this bit is set on a Pokémon that is transferred to a later generation, the Pokémon will be treated as having had a fateful encounter.Pokémon Ruby, Sapphire, and Emerald - Various Notes (Upokecenter via the Internet Archive)
==See also==
* Pokémon data structure (Generation III)
==Links==
* PokemonMakerV4x Help and 80 bytes Make a Pokémon
==References==
==Related articles==