Pokémon data substructures (Generation III)
Format
A Pokémon's data is slightly more complex than the rest of the structure. It is stored as four substructures, each 12 bytes in length:
Growth | |
---|---|
Species | word |
Item held | word |
Experience | long |
PP bonuses | byte |
Happiness | byte |
??? | word |
Attacks | |
---|---|
Attack 1 | word |
Attack 2 | word |
Attack 3 | word |
Attack 4 | word |
PP 1 | byte |
PP 2 | byte |
PP 3 | byte |
PP 4 | byte |
Effort | |
---|---|
HP EV | byte |
Attack EV | byte |
Defense EV | byte |
Speed EV | byte |
Sp. Attack EV | byte |
Sp. Defense EV | byte |
Coolness | byte |
Beauty | byte |
Cuteness | byte |
Smartness | byte |
Toughness | byte |
Fill | byte |
Misc. | |
---|---|
Pokérus status | byte |
Location caught | byte |
Level | signed byte |
Poké Ball | byte |
Trainer gender | |
DVs | long |
Ribbons | long |
Order
The order of the structures is determined by the personality value of the Pokémon. The order is determined by the value modulo 24:
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 |
Where G, A, E, and M stand for the substructures: growth, attacks, effort, and Caught respectively.
Encryption
The entire data structure is encrypted by XORing the entire Trainer ID with the personality value, then XORing the resulting value with the data (one long value at a time). The same process is used to decrypt the encrypted data. The correct checksum is found by summing the original values, not the encrypted values.
Notes
Pokérus status
Pokérus status is stored in a single byte. The lower 4 bits represents the number of units of time left until the virus wears away. If any bit in the upper 4 bits is set, the Pokémon is immune to Pokérus, indicated a small black dot appears on the Pokémon's status screen. Both values are completely random when caught, leading to the fact that not all Pokémon contract the virus for the same amount of time and some are able to catch it again.
PP bonuses
The PP bonuses byte stores the number of PP Ups used for each attack. (Order? Do the uppermost 2 bits represent attack 1 or 4?)
Poké Ball / Trainer gender
The gender of the trainer that caught a Pokémon is stored in the data section, and is determined by the most significant bit of this byte. The lower 4 bits of this byte store the Poké Ball type that the Pokémon was caught in.
DVs
DVs are stored pretty logically. Starting from the least significant bit, each stat from HP to Special Defense takes up 5 bits, leaving the uppermost 2 bits zeroed.