Pokemon Save Structure (X/Y): Difference between revisions
No edit summary |
(Added category, added unknown section for block C, altered block size (to not extend past, feel free to revert if my terminology is wrong)) |
||
Line 2: | Line 2: | ||
== Checksum / Block Shuffling / Encryption == | == Checksum / Block Shuffling / Encryption == | ||
There have been some changes compared to the [[Pokemon NDS Structure|Generation 4]] and [[Pokemon Black/White NDS Structure|Generation 5]] structures. First, the LCRNG to decrypt the structure's blocks is now seeded with the PID. Second, the blocks are now 56 bytes instead of the previous 32. However, the way the blocks are shuffled based on the PID did not change. | There have been some changes compared to the [[Pokemon NDS Structure|Generation 4]] and [[Pokemon Black/White NDS Structure|Generation 5]] structures. First, the LCRNG to decrypt the structure's blocks is now seeded with the PID. Second, the blocks are now 56 bytes instead of the previous 32. However, the way the blocks are shuffled based on the PID did not change. | ||
== Unencrypted bytes ( | == Unencrypted bytes (0x0-0x7) == | ||
{| border="1" style="border: 1px solid #999; border-collapse: collapse;" | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style="background: #ccc;" align="center" | |- style="background: #ccc;" align="center" | ||
Line 19: | Line 19: | ||
== Encrypted bytes == | == Encrypted bytes == | ||
=== Block A ( | === Block A (0x8-0x3F) === | ||
{| border="1" style="border: 1px solid #999; border-collapse: collapse;" | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style="background: #ccc;" align="center" | |- style="background: #ccc;" align="center" | ||
Line 86: | Line 86: | ||
|} | |} | ||
=== Block B ( | === Block B (0x40-0x77) === | ||
{| border="1" style="border: 1px solid #999; border-collapse: collapse;" | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style="background: #ccc;" align="center" | |- style="background: #ccc;" align="center" | ||
Line 148: | Line 148: | ||
|} | |} | ||
=== Block C ( | === Block C (0x78-0xAF) === | ||
This block is dedicated to the history/memory of the Pokémon. | This block is dedicated to the history/memory of the Pokémon. | ||
{| border="1" style="border: 1px solid #999; border-collapse: collapse;" | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
Line 157: | Line 157: | ||
| 0x78-0x88 | | 0x78-0x88 | ||
| OT Name traded to (updated every time the owner's OT changes) | | OT Name traded to (updated every time the owner's OT changes) | ||
|- style="background: #ddd;" align="center" | |||
| 0x89-0xAF | |||
| Unknown | |||
|} | |} | ||
=== Block D ( | |||
=== Block D (0xB0-0xE7) === | |||
{| border="1" style="border: 1px solid #999; border-collapse: collapse;" | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style="background: #ccc;" align="center" | |- style="background: #ccc;" align="center" | ||
Line 262: | Line 266: | ||
| Unknown / Unused | | Unknown / Unused | ||
|} | |} | ||
[[Category:Structures]] | |||
[[Category:Game Mechanics]] | |||
[[Category:ROM Research]] |
Revision as of 15:44, 28 October 2013
Pokémon in the games Pokémon X and Y are stored in a new 232 byte structure (for the box data only). Party Pokémon hold 28 bytes of additional data for overworld and battle values. We recommend using the pkx extension for decrypted 232-byte box data and 260-byte party data structures.
Checksum / Block Shuffling / Encryption
There have been some changes compared to the Generation 4 and Generation 5 structures. First, the LCRNG to decrypt the structure's blocks is now seeded with the PID. Second, the blocks are now 56 bytes instead of the previous 32. However, the way the blocks are shuffled based on the PID did not change.
Unencrypted bytes (0x0-0x7)
Offset | Contents |
---|---|
0x00-0x03 | Personality value (Also known as the PID) |
0x04-0x05 | Sanity Placeholder |
0x06-0x07 | Checksum |
Encrypted bytes
Block A (0x8-0x3F)
Offset | Contents |
---|---|
0x08-0x09 | National Pokédex ID |
0x0A-0x0B | Held Item |
0x0C-0x0D | OT ID |
0x0E-0x0F | OT Secret ID |
0x10-0x13 | Experience points |
0x14 | Ability |
0x15 | Ability number |
0x16-0x17 | Unknown |
0x18-0x1B | Unknown |
0x1C | Nature |
0x1D | Bit 0 - Fateful Encounter Flag Bit 1 - Female Bit 2 - Genderless Bit 3-7 - Alternate Forms |
0x1E | HP Effort Value |
0x1F | Attack Effort Value |
0x20 | Defense Effort Value |
0x21 | Speed Effort Value |
0x22 | SP Attack Effort Value |
0x23 | SP Defense Effort Value |
0x28-0x2A | Unknown / Unused |
0x2B | Pokérus |
0x2C-0x3F | Unknown / Unused |
Block B (0x40-0x77)
Offset | Contents |
---|---|
0x40-0x57 | Nickname |
0x58-0x59 | Unknown |
0x5A-0x5B | Move 1 ID |
0x5C-0x5D | Move 2 ID |
0x5E-0x5F | Move 3 ID |
0x60-0x61 | Move 4 ID |
0x62 | Move 1 Current PP |
0x63 | Move 2 Current PP |
0x64 | Move 3 Current PP |
0x65 | Move 4 Current PP |
0x66-0x69 | Move PP Ups |
0x6A-0x6B | Move 1 ID at hatching |
0x6C-0x6D | Move 2 ID at hatching |
0x6E-0x6F | Move 3 ID at hatching |
0x70-0x71 | Move 4 ID at hatching |
0x74-0x78 | Bits 0-29 - Individual Values HP ( [0-31] << 0 ) |
Block C (0x78-0xAF)
This block is dedicated to the history/memory of the Pokémon.
Offset | Contents |
---|---|
0x78-0x88 | OT Name traded to (updated every time the owner's OT changes) |
0x89-0xAF | Unknown |
Block D (0xB0-0xE7)
Offset | Contents |
---|---|
0xB0-0xBF | OT Name |
0xD1-0xD3 | Date Egg Received |
0xD4-0xD6 | Date Met |
0xD8-0xD9 | Egg Location |
0xDA-0xDB | Met At Location |
0xDC | Pokéball |
0xDD | Bit 0-6 - Encounter Level Bit 7 - Female OT Gender |
0xDE | Unknown / Unused |
0xDF | OT Game version (24=X, 25=Y) |
0xE0 | Country ID |
0xE1 | Region ID |
0xE2 | 3DS region ID |
0xE3 | OT language |
0xE4-0xE7 | Unknown / Unused |
Battle Stats
The battle stats are encrypted in the exact same manner as the main pkx data. The seed is still the PID.
Encrypted Bytes
Offset | Contents |
---|---|
0xE8 | Bits 0-2 - Asleep (0-7 rounds) Bit 3 - Poisoned Bit 4 - Burned Bit 5 - Frozen Bit 6 - Paralyzed Bit 7 - Toxic |
0xE9 | Unknown - Flags |
0xEA-0xEB | Unknown / Unused |
0xEC | Level |
0xED-0xEE | Unknown / Unused |
0xEF | Unknown / Unused |
0xF0-0xF1 | Current HP |
0xF2-0xF3 | Max HP |
0xF4-0xF5 | Attack |
0xF6-0xF7 | Defense |
0xF8-0xF9 | Speed |
0xFA-0xFB | Special Attack |
0xFC-0xFD | Special Defense |
0xFE-0xFF | Unknown / Unused |
0x100-0x103 | Unknown / Unused |