Pokemon Save Structure: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
Pokémon in the games Pokémon [[Pokémon Diamond|Diamond]], [[Pokemon Pearl|Pearl]], and [[Pokémon Platinum Version|Platinum]] are stored in a 136 byte or 236 byte structures. All unencrypted values are stored in [[little-endian|little-endian]] format. The game encrypts the data when it is stored in the [[Pokémon NDS Save File Structure|save file]]. Party Pokémon have additional values to hold current battle stats and conditions. The information below describes the Pokémon data format. | Pokémon in the games Pokémon [[Pokémon Diamond|Diamond]], [[Pokemon Pearl|Pearl]], and [[Pokémon Platinum Version|Platinum]] are stored in a 136 byte or 236 byte structures. All unencrypted values are stored in [[little-endian|little-endian]] format. The game encrypts the data when it is stored in the [[Pokémon NDS Save File Structure|save file]]. Party Pokémon have additional values to hold current battle stats and conditions. The information below describes the Pokémon data format. | ||
Line 16: | Line 15: | ||
The 128 bytes of Pokémon data are split into four 32-byte blocks for shuffling. The blocks are shuffled according to a shift value derived from the [[personality value]]. Given the personality value ''pv'', the expression yielding the shift value is: | The 128 bytes of Pokémon data are split into four 32-byte blocks for shuffling. The blocks are shuffled according to a shift value derived from the [[personality value]]. Given the personality value ''pv'', the expression yielding the shift value is: | ||
: ''((pv | : ''((pv >> 0xD) & 0x1F) % 24'' | ||
The right shifting (pv | The right shifting (pv >> 0xD) is equivalent to a division of 8192. | ||
To shuffle the blocks, take the four blocks of unencrypted data, ''A'', ''B'', ''C'', and ''D''. The blocks shall be rearranged in the encrypted data according to the Block Order column of the following table. (To unshuffle, use the Inverse column.) | To shuffle the blocks, take the four blocks of unencrypted data, ''A'', ''B'', ''C'', and ''D''. The blocks shall be rearranged in the encrypted data according to the Block Order column of the following table. (To unshuffle, use the Inverse column.) | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style= | |- style="background: #ccc;" align="center" | ||
! Shift Value (decimal) | ! Shift Value (decimal) | ||
! Block Order | ! Block Order | ||
! Inverse | ! Inverse | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 00 | | 00 | ||
| ABCD | | ABCD | ||
| ABCD | | ABCD | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 01 | | 01 | ||
| ABDC | | ABDC | ||
| ABDC | | ABDC | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 02 | | 02 | ||
| ACBD | | ACBD | ||
| ACBD | | ACBD | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 03 | | 03 | ||
| ACDB | | ACDB | ||
| ADBC | | ADBC | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 04 | | 04 | ||
| ADBC | | ADBC | ||
| ACDB | | ACDB | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 05 | | 05 | ||
| ADCB | | ADCB | ||
| ADCB | | ADCB | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 06 | | 06 | ||
| BACD | | BACD | ||
| BACD | | BACD | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 07 | | 07 | ||
| BADC | | BADC | ||
| BADC | | BADC | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 08 | | 08 | ||
| BCAD | | BCAD | ||
| CABD | | CABD | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 09 | | 09 | ||
| BCDA | | BCDA | ||
| DABC | | DABC | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 10 | | 10 | ||
| BDAC | | BDAC | ||
| CADB | | CADB | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 11 | | 11 | ||
| BDCA | | BDCA | ||
| DACB | | DACB | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 12 | | 12 | ||
| CABD | | CABD | ||
| BCAD | | BCAD | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 13 | | 13 | ||
| CADB | | CADB | ||
| BDAC | | BDAC | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 14 | | 14 | ||
| CBAD | | CBAD | ||
| CBAD | | CBAD | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 15 | | 15 | ||
| CBDA | | CBDA | ||
| DBAC | | DBAC | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 16 | | 16 | ||
| CDAB | | CDAB | ||
| CDAB | | CDAB | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 17 | | 17 | ||
| CDBA | | CDBA | ||
| DCAB | | DCAB | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 18 | | 18 | ||
| DABC | | DABC | ||
| BCDA | | BCDA | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 19 | | 19 | ||
| DACB | | DACB | ||
| BDCA | | BDCA | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 20 | | 20 | ||
| DBAC | | DBAC | ||
| CBDA | | CBDA | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 21 | | 21 | ||
| DBCA | | DBCA | ||
| DBCA | | DBCA | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 22 | | 22 | ||
| DCAB | | DCAB | ||
| CDBA | | CDBA | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 23 | | 23 | ||
| DCBA | | DCBA | ||
Line 140: | Line 139: | ||
== Unencrypted bytes == | == Unencrypted bytes == | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style= | |- style="background: #ccc;" align="center" | ||
! Offset | ! Offset | ||
! Contents | ! Contents | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x00-0x03 | | 0x00-0x03 | ||
| [[Personality value]] (Also known as the [[PID]]) | | [[Personality value]] (Also known as the [[PID]]) | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x04-0x05 | | 0x04-0x05 | ||
| ''Unused'' | | ''Unused'' | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x06-0x07 | | 0x06-0x07 | ||
| Checksum | | Checksum | ||
Line 158: | Line 157: | ||
=== Block A === | === Block A === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style= | |- style="background: #ccc;" align="center" | ||
! Offset | ! Offset | ||
! Contents | ! Contents | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x08-0x09 | | 0x08-0x09 | ||
| [[Nationaldex|National Pokédex ID]] | | [[Nationaldex|National Pokédex ID]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x0A-0x0B | | 0x0A-0x0B | ||
| [[item index|Held Item]] | | [[item index|Held Item]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x0C-0x0D | | 0x0C-0x0D | ||
| [[Original Trainer|OT ID]] | | [[Original Trainer|OT ID]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x0E-0x0F | | 0x0E-0x0F | ||
| [[Original Trainer|OT Secret ID]] | | [[Original Trainer|OT Secret ID]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x10-0x13 | | 0x10-0x13 | ||
| [[Experience Points|Experience points]] | | [[Experience Points|Experience points]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x14 | | 0x14 | ||
| Friendship (Steps to Hatch if an egg) | | Friendship (Steps to Hatch if an egg) | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x15 | | 0x15 | ||
| [[Ability]] | | [[Ability]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x16 | | 0x16 | ||
| [[#Markings|Markings]] | | [[#Markings|Markings]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x17 | | 0x17 | ||
| [[#Original Language|Original Language]] | | [[#Original Language|Original Language]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x18 | | 0x18 | ||
| [[Effort Values#Hit Points|HP Effort Value]] | | [[Effort Values#Hit Points|HP Effort Value]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x19 | | 0x19 | ||
| [[Effort Values#Attack Points|Attack Effort Value]] | | [[Effort Values#Attack Points|Attack Effort Value]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x1A | | 0x1A | ||
| [[Effort Values#Defense Points|Defense Effort Value]] | | [[Effort Values#Defense Points|Defense Effort Value]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x1B | | 0x1B | ||
| [[Effort Values#Speed Points|Speed Effort Value]] | | [[Effort Values#Speed Points|Speed Effort Value]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x1C | | 0x1C | ||
| [[Effort Values#Special Attack Points|SP Attack Effort Value]] | | [[Effort Values#Special Attack Points|SP Attack Effort Value]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x1D | | 0x1D | ||
| [[Effort Values#Special Defense Points|SP Defense Effort Value]] | | [[Effort Values#Special Defense Points|SP Defense Effort Value]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x1E | | 0x1E | ||
| [[Contest Stats#Cool|Cool Contest Value]] | | [[Contest Stats#Cool|Cool Contest Value]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x1F | | 0x1F | ||
| [[Contest Stats#Beauty|Beauty Contest Value]] | | [[Contest Stats#Beauty|Beauty Contest Value]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x20 | | 0x20 | ||
| [[Contest Stats#Cute|Cute Contest Value]] | | [[Contest Stats#Cute|Cute Contest Value]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x21 | | 0x21 | ||
| [[Contest Stats#Smart|Smart Contest Value]] | | [[Contest Stats#Smart|Smart Contest Value]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x22 | | 0x22 | ||
| [[Contest Stats#Tough|Tough Contest Value]] | | [[Contest Stats#Tough|Tough Contest Value]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x23 | | 0x23 | ||
| [[Contest Stats#Sheen|Sheen Contest Value]] | | [[Contest Stats#Sheen|Sheen Contest Value]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x24-0x25 | | 0x24-0x25 | ||
| [[#Sinnoh Ribbon Set 1|Sinnoh Ribbon Set 1]] | | [[#Sinnoh Ribbon Set 1|Sinnoh Ribbon Set 1]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x26-0x27 | | 0x26-0x27 | ||
| [[#Sinnoh Ribbon Set 2|Sinnoh Ribbon Set 2]] | | [[#Sinnoh Ribbon Set 2|Sinnoh Ribbon Set 2]] | ||
Line 241: | Line 240: | ||
=== Block B === | === Block B === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style= | |- style="background: #ccc;" align="center" | ||
! Offset | ! Offset | ||
! Contents | ! Contents | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x28-0x29 | | 0x28-0x29 | ||
| [[Pokemon Moves|Move 1 ID]] | | [[Pokemon Moves|Move 1 ID]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x2A-0x2B | | 0x2A-0x2B | ||
| [[Pokemon Moves|Move 2 ID]] | | [[Pokemon Moves|Move 2 ID]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x2C-0x2D | | 0x2C-0x2D | ||
| [[Pokemon Moves|Move 3 ID]] | | [[Pokemon Moves|Move 3 ID]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x2E-0x2F | | 0x2E-0x2F | ||
| [[Pokemon Moves|Move 4 ID]] | | [[Pokemon Moves|Move 4 ID]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x30 | | 0x30 | ||
| [[Pokemon Moves#Power Points|Move 1 Current PP]] | | [[Pokemon Moves#Power Points|Move 1 Current PP]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x31 | | 0x31 | ||
| [[Pokemon Moves#Power Points|Move 2 Current PP]] | | [[Pokemon Moves#Power Points|Move 2 Current PP]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x32 | | 0x32 | ||
| [[Pokemon Moves#Power Points|Move 3 Current PP]] | | [[Pokemon Moves#Power Points|Move 3 Current PP]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x33 | | 0x33 | ||
| [[Pokemon Moves#Power Points|Move 4 Current PP]] | | [[Pokemon Moves#Power Points|Move 4 Current PP]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x34-0x37 | | 0x34-0x37 | ||
| [[Pokemon Moves#Power Points|Move PP Ups]] | | [[Pokemon Moves#Power Points|Move PP Ups]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x38-0x3B | | 0x38-0x3B | ||
| Bits 0-29 - [[Individual Values]] | | Bits 0-29 - [[Individual Values]]<br> | ||
[[Individual Values#Hit Points|HP]] ( [0-31] | [[Individual Values#Hit Points|HP]] ( [0-31] << 0 )<br> | ||
[[Individual Values#Attack Points|Attack]] ( [0-31] | [[Individual Values#Attack Points|Attack]] ( [0-31] << 5 )<br> | ||
[[Individual Values#Defense Points|Defense]] ( [0-31] | [[Individual Values#Defense Points|Defense]] ( [0-31] << 10 )<br> | ||
[[Individual Values#Speed Points|Speed]] ( [0-31] | [[Individual Values#Speed Points|Speed]] ( [0-31] << 15 )<br> | ||
[[Individual Values#Special Attack Points|SP Attack]] ( [0-31] | [[Individual Values#Special Attack Points|SP Attack]] ( [0-31] << 20 )<br> | ||
[[Individual Values#Special Defense Points|SP Defense]] ( [0-31] | [[Individual Values#Special Defense Points|SP Defense]] ( [0-31] << 25 )<br> | ||
Bit 30 - IsEgg Flag | Bit 30 - IsEgg Flag<br>Bit 31 - IsNicknamed Flag | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3C-0x3D | | 0x3C-0x3D | ||
| [[#Hoenn Ribbon Set 1|Hoenn Ribbon Set 1]] | | [[#Hoenn Ribbon Set 1|Hoenn Ribbon Set 1]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3E-0x3F | | 0x3E-0x3F | ||
| [[#Hoenn Ribbon Set 2|Hoenn Ribbon Set 2]] | | [[#Hoenn Ribbon Set 2|Hoenn Ribbon Set 2]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x40 | | 0x40 | ||
| Bit 0 - Fateful Encounter Flag | | Bit 0 - Fateful Encounter Flag<br>Bit 1 - Female<br>Bit 2 - Genderless<br>Bit 3-7 - [[#Alternate Forms|Alternate Forms]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x41 | | 0x41 | ||
| Shiny Leaves (HGSS) | | Shiny Leaves (HGSS)<br>Bit 5 - Leaf Crown<br>Bits 0–4 - Leaves A–E (bit 0 is leftmost) | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x42-0x43 | | 0x42-0x43 | ||
| ''Unused'' | | ''Unused'' | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x44-0x45 | | 0x44-0x45 | ||
| Egg [[Pokemon NDS Locations#Egg Locations|Location]] (Platinum) | | Egg [[Pokemon NDS Locations#Egg Locations|Location]] (Platinum) | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x46-0x47 | | 0x46-0x47 | ||
| Met at [[Pokemon NDS Locations|Location]] (Platinum) | | Met at [[Pokemon NDS Locations|Location]] (Platinum) | ||
Line 306: | Line 305: | ||
=== Block C === | === Block C === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style= | |- style="background: #ccc;" align="center" | ||
! Offset | ! Offset | ||
! Contents | ! Contents | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x48-0x5D | | 0x48-0x5D | ||
| Nickname | | Nickname | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x5E | | 0x5E | ||
| ''Unused'' | | ''Unused'' | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x5F | | 0x5F | ||
| [[Pokemon Hometown|Hometown]] | | [[Pokemon Hometown|Hometown]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x60-0x61 | | 0x60-0x61 | ||
| [[#Sinnoh Ribbon Set 3|Sinnoh Ribbon Set 3]] | | [[#Sinnoh Ribbon Set 3|Sinnoh Ribbon Set 3]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x62-0x63 | | 0x62-0x63 | ||
| [[#Sinnoh Ribbon Set 4|Sinnoh Ribbon Set 4]] | | [[#Sinnoh Ribbon Set 4|Sinnoh Ribbon Set 4]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x64-0x67 | | 0x64-0x67 | ||
| ''Unused'' | | ''Unused'' | ||
Line 331: | Line 330: | ||
=== Block D === | === Block D === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style= | |- style="background: #ccc;" align="center" | ||
! Offset | ! Offset | ||
! Contents | ! Contents | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x68-0x77 | | 0x68-0x77 | ||
| [[Original Trainer|OT Name]] | | [[Original Trainer|OT Name]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x78-0x7A | | 0x78-0x7A | ||
| Date Egg Received | | Date Egg Received | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x7B-0x7D | | 0x7B-0x7D | ||
| Date Met | | Date Met | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x7E-0x7F | | 0x7E-0x7F | ||
| Egg [[Pokemon NDS Locations|Location]] (Diamond/Pearl) | | Egg [[Pokemon NDS Locations|Location]] (Diamond/Pearl) | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x80-0x81 | | 0x80-0x81 | ||
| Met At [[Pokemon NDS Locations|Location]] (Diamond/Pearl) | | Met At [[Pokemon NDS Locations|Location]] (Diamond/Pearl) | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x82 | | 0x82 | ||
| [[Pokerus|Pokérus]] | | [[Pokerus|Pokérus]] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x83 | | 0x83 | ||
| [http://projectpokemon.org/wiki/List_of_Diamond,_Pearl,_Platinum,_HeartGold_and_SoulSilver_Items_by_Index_Number#Balls Poké Ball] | | [http://projectpokemon.org/wiki/List_of_Diamond,_Pearl,_Platinum,_HeartGold_and_SoulSilver_Items_by_Index_Number#Balls Poké Ball] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x84 | | 0x84 | ||
| Bit 0-6 - Met At Level | | Bit 0-6 - Met At Level<br>Bit 7 - Female OT Gender | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x85 | | 0x85 | ||
| [[#Encounter Types|Encounter Type]] | | [[#Encounter Types|Encounter Type]] | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x86 | | 0x86 | ||
|[http://projectpokemon.org/wiki/List_of_Diamond,_Pearl,_Platinum,_HeartGold_and_SoulSilver_Items_by_Index_Number#HeartGold_and_SoulSilver_exclusive_Balls HGSS Poké Ball] | |[http://projectpokemon.org/wiki/List_of_Diamond,_Pearl,_Platinum,_HeartGold_and_SoulSilver_Items_by_Index_Number#HeartGold_and_SoulSilver_exclusive_Balls HGSS Poké Ball] | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x87 | | 0x87 | ||
| ''Unused'' | | ''Unused'' | ||
Line 376: | Line 375: | ||
=== Encrypted Bytes === | === Encrypted Bytes === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
|- style= | |- style="background: #ccc;" align="center" | ||
! Offset | ! Offset | ||
! Contents | ! Contents | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x88 | | 0x88 | ||
| Bits 0-2 - Asleep (0-7 rounds) | | Bits 0-2 - Asleep (0-7 rounds)<br>Bit 3 - Poisoned<br>Bit 4 - Burned<br>Bit 5 - Frozen<br>Bit 6 - Paralyzed<br>Bit 7 - Toxic | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x89 | | 0x89 | ||
| ''Unknown'' - Flags - Max Value 0xF0 | | ''Unknown'' - Flags - Max Value 0xF0 | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x8A-0x8B | | 0x8A-0x8B | ||
| ''Unknown'' | | ''Unknown'' | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x8C | | 0x8C | ||
| Level | | Level | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x8D | | 0x8D | ||
| Capsule Index (Seals) | | Capsule Index (Seals) | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x8E-0x8F | | 0x8E-0x8F | ||
| Current HP | | Current HP | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x90-0x91 | | 0x90-0x91 | ||
| Max HP | | Max HP | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x92-0x93 | | 0x92-0x93 | ||
| Attack | | Attack | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x94-0x95 | | 0x94-0x95 | ||
| Defense | | Defense | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x96-0x97 | | 0x96-0x97 | ||
| Speed | | Speed | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x98-0x99 | | 0x98-0x99 | ||
| Special Attack | | Special Attack | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x9A-0x9B | | 0x9A-0x9B | ||
| Special Defense | | Special Defense | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x9C-0xD3 | | 0x9C-0xD3 | ||
| ''Unknown'' - Contains Trash Data | | ''Unknown'' - Contains Trash Data | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0xD4-0xEB | | 0xD4-0xEB | ||
| Seal Coordinates | | Seal Coordinates | ||
Line 425: | Line 424: | ||
== Original Language == | == Original Language == | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Value | ! Value | ||
! Language | ! Language | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x1 | | 0x1 | ||
| 日本語 (Japan) | | 日本語 (Japan) | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x2 | | 0x2 | ||
| English (US/UK/AU) | | English (US/UK/AU) | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3 | | 0x3 | ||
| Français (France/Québec) | | Français (France/Québec) | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x4 | | 0x4 | ||
| Italiano (Italy) | | Italiano (Italy) | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x5 | | 0x5 | ||
| Deutsch (Germany) | | Deutsch (Germany) | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x7 | | 0x7 | ||
| Español (Spain/Latin Americas) | | Español (Spain/Latin Americas) | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x8 | | 0x8 | ||
| 한국어 (South Korea) | | 한국어 (South Korea) | ||
Line 452: | Line 451: | ||
== Markings == | == Markings == | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Marking | ! Marking | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x01 | | 0x01 | ||
| Circle | | Circle | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x02 | | 0x02 | ||
| Triangle | | Triangle | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x04 | | 0x04 | ||
| Square | | Square | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x08 | | 0x08 | ||
| Heart | | Heart | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x10 | | 0x10 | ||
| Star | | Star | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x20 | | 0x20 | ||
| Diamond | | Diamond | ||
Line 476: | Line 475: | ||
== Alternate Forms == | == Alternate Forms == | ||
Alternate forms are stored at offset 0x40 of the Pokemon structure. Each form follows the pattern of ''index | Alternate forms are stored at offset 0x40 of the Pokemon structure. Each form follows the pattern of ''index << 3'' where index starts at zero for the main form. | ||
=== Unown's Forms === | === Unown's Forms === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Form | ! Form | ||
Line 488: | Line 487: | ||
! Bit | ! Bit | ||
! Form | ! Form | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x00 | | 0x00 | ||
| A | | A | ||
Line 497: | Line 496: | ||
| 0xA8 | | 0xA8 | ||
| V | | V | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x08 | | 0x08 | ||
| B | | B | ||
Line 506: | Line 505: | ||
| 0xB0 | | 0xB0 | ||
| W | | W | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x10 | | 0x10 | ||
| C | | C | ||
Line 515: | Line 514: | ||
| 0xB8 | | 0xB8 | ||
| X | | X | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x18 | | 0x18 | ||
| D | | D | ||
Line 524: | Line 523: | ||
| 0xC0 | | 0xC0 | ||
| Y | | Y | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x20 | | 0x20 | ||
| E | | E | ||
Line 533: | Line 532: | ||
| 0xC8 | | 0xC8 | ||
| Z | | Z | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x28 | | 0x28 | ||
| F | | F | ||
Line 542: | Line 541: | ||
| 0xD0 | | 0xD0 | ||
| ! | | ! | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x30 | | 0x30 | ||
| G | | G | ||
Line 554: | Line 553: | ||
=== Deoxy's Forms === | === Deoxy's Forms === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Form | ! Form | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x00 | | 0x00 | ||
| Normal | | Normal | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x08 | | 0x08 | ||
| Attack | | Attack | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x10 | | 0x10 | ||
| Defense | | Defense | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x18 | | 0x18 | ||
| Speed | | Speed | ||
|} | |} | ||
=== Burmy's & | === Burmy's & Wormadam's Forms === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Form | ! Form | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x00 | | 0x00 | ||
| Plant | | Plant | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x08 | | 0x08 | ||
| Sandy | | Sandy | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x10 | | 0x10 | ||
| Trash | | Trash | ||
|} | |} | ||
=== Shellos' & | === Shellos' & Gastrodon's Forms === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Form | ! Form | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x00 | | 0x00 | ||
| West | | West | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x08 | | 0x08 | ||
| East | | East | ||
Line 600: | Line 599: | ||
=== Rotom's Forms === | === Rotom's Forms === | ||
Rotom's alternate forms will only be displayed in Pokemon Platinum. Rotom may be traded between Diamond, Pearl, and Platinum without losing the alternate form. | Rotom's alternate forms will only be displayed in Pokemon Platinum. Rotom may be traded between Diamond, Pearl, and Platinum without losing the alternate form. | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Form | ! Form | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x00 | | 0x00 | ||
| Normal | | Normal | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x08 | | 0x08 | ||
| Heat | | Heat | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x10 | | 0x10 | ||
| Wash | | Wash | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x18 | | 0x18 | ||
| Frost | | Frost | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x20 | | 0x20 | ||
| Fan | | Fan | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x28 | | 0x28 | ||
| Cut | | Cut | ||
Line 625: | Line 624: | ||
=== Giratina's Forms === | === Giratina's Forms === | ||
Giratina's Origin form will only be displayed in Pokemon Platinum. | Giratina's Origin form will only be displayed in Pokemon Platinum. | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Form | ! Form | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x00 | | 0x00 | ||
| Altered | | Altered | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x08 | | 0x08 | ||
| Origin | | Origin | ||
Line 638: | Line 637: | ||
=== Shaymin's Forms === | === Shaymin's Forms === | ||
Shaymin's Sky form will only be displayed in Pokemon Platinum. | Shaymin's Sky form will only be displayed in Pokemon Platinum. | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Form | ! Form | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x00 | | 0x00 | ||
| Land | | Land | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x08 | | 0x08 | ||
| Sky | | Sky | ||
Line 650: | Line 649: | ||
=== Arceus' Forms === | === Arceus' Forms === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Form | ! Form | ||
Line 657: | Line 656: | ||
! Bit | ! Bit | ||
! Form | ! Form | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x00 | | 0x00 | ||
| Normal | | Normal | ||
Line 664: | Line 663: | ||
| 0x60 | | 0x60 | ||
| Zap | | Zap | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x08 | | 0x08 | ||
| Fist | | Fist | ||
Line 671: | Line 670: | ||
| 0x68 | | 0x68 | ||
| Mind | | Mind | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x10 | | 0x10 | ||
| Sky | | Sky | ||
Line 678: | Line 677: | ||
| 0x70 | | 0x70 | ||
| Icicle | | Icicle | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x18 | | 0x18 | ||
| Toxic | | Toxic | ||
Line 685: | Line 684: | ||
| 0x78 | | 0x78 | ||
| Draco | | Draco | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x20 | | 0x20 | ||
| Earth | | Earth | ||
Line 692: | Line 691: | ||
| 0x80 | | 0x80 | ||
| Dread | | Dread | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x28 | | 0x28 | ||
| Stone | | Stone | ||
Line 701: | Line 700: | ||
|} | |} | ||
== Encounter Types == | == Encounter Types == | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Value | ! Value | ||
! Country | ! Country | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x0 | | 0x0 | ||
| Pal Park, Egg, Hatched, Special Event | | Pal Park, Egg, Hatched, Special Event | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x2 | | 0x2 | ||
| Tall Grass | | Tall Grass | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x4 | | 0x4 | ||
| Dialga/Palkia In-Game Event | | Dialga/Palkia In-Game Event | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x5 | | 0x5 | ||
| Cave, Hall of Origin | | Cave, Hall of Origin | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x7 | | 0x7 | ||
| Surfing, Fishing | | Surfing, Fishing | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x9 | | 0x9 | ||
| Building | | Building | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0xA | | 0xA | ||
| Great Marsh (Safari Zone) | | Great Marsh (Safari Zone) | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0xC | | 0xC | ||
| Starter, Fossil, Gift (Eevee) | | Starter, Fossil, Gift (Eevee) | ||
Line 734: | Line 733: | ||
=== Sinnoh Ribbon Set 1 === | === Sinnoh Ribbon Set 1 === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Ribbon | ! Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x24 & | | 0x24 & 0x01 | ||
| Sinnoh Champ Ribbon | | Sinnoh Champ Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x24 & | | 0x24 & 0x02 | ||
| Ability Ribbon | | Ability Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x24 & | | 0x24 & 0x04 | ||
| Great Ability Ribbon | | Great Ability Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x24 & | | 0x24 & 0x08 | ||
| Double Ability Ribbon | | Double Ability Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x24 & | | 0x24 & 0x10 | ||
| Multi Ability Ribbon | | Multi Ability Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x24 & | | 0x24 & 0x20 | ||
| Pair Ability Ribbon | | Pair Ability Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x24 & | | 0x24 & 0x40 | ||
| World Ability Ribbon | | World Ability Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x24 & | | 0x24 & 0x80 | ||
| Alert Ribbon | | Alert Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x25 & | | 0x25 & 0x01 | ||
| Shock Ribbon | | Shock Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x25 & | | 0x25 & 0x02 | ||
| Downcast Ribbon | | Downcast Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x25 & | | 0x25 & 0x04 | ||
| Careless Ribbon | | Careless Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x25 & | | 0x25 & 0x08 | ||
| Relax Ribbon | | Relax Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x25 & | | 0x25 & 0x10 | ||
| Snooze Ribbon | | Snooze Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x25 & | | 0x25 & 0x20 | ||
| Smile Ribbon | | Smile Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x25 & | | 0x25 & 0x40 | ||
| Gorgeous Ribbon | | Gorgeous Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x25 & | | 0x25 & 0x80 | ||
| Royal Ribbon | | Royal Ribbon | ||
|} | |} | ||
Line 789: | Line 788: | ||
=== Sinnoh Ribbon Set 2 === | === Sinnoh Ribbon Set 2 === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Ribbon | ! Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x26 & | | 0x26 & 0x01 | ||
| Gorgeous Royal Ribbon | | Gorgeous Royal Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x26 & | | 0x26 & 0x02 | ||
| Footprint Ribbon | | Footprint Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x26 & | | 0x26 & 0x04 | ||
| Record Ribbon | | Record Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x26 & | | 0x26 & 0x08 | ||
| History Ribbon | | History Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x26 & | | 0x26 & 0x10 | ||
| Legend Ribbon | | Legend Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x26 & | | 0x26 & 0x20 | ||
| Red Ribbon | | Red Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x26 & | | 0x26 & 0x40 | ||
| Green Ribbon | | Green Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x26 & | | 0x26 & 0x80 | ||
| Blue Ribbon | | Blue Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x27 & | | 0x27 & 0x01 | ||
| Festival Ribbon | | Festival Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x27 & | | 0x27 & 0x02 | ||
| Carnival Ribbon | | Carnival Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x27 & | | 0x27 & 0x04 | ||
| Classic Ribbon | | Classic Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x27 & | | 0x27 & 0x08 | ||
| Premier Ribbon | | Premier Ribbon | ||
|} | |} | ||
=== Sinnoh Ribbon Set 3 === | === Sinnoh Ribbon Set 3 === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Ribbon | ! Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x60 & | | 0x60 & 0x01 | ||
| Cool Ribbon | | Cool Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x60 & | | 0x60 & 0x02 | ||
| Cool Ribbon Great | | Cool Ribbon Great | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x60 & | | 0x60 & 0x04 | ||
| Cool Ribbon Ultra | | Cool Ribbon Ultra | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x60 & | | 0x60 & 0x08 | ||
| Cool Ribbon Master | | Cool Ribbon Master | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x60 & | | 0x60 & 0x10 | ||
| Beauty Ribbon | | Beauty Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x60 & | | 0x60 & 0x20 | ||
| Beauty Ribbon Great | | Beauty Ribbon Great | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x60 & | | 0x60 & 0x40 | ||
| Beauty Ribbon Ultra | | Beauty Ribbon Ultra | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x60 & | | 0x60 & 0x80 | ||
| Beauty Ribbon Master | | Beauty Ribbon Master | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x61 & | | 0x61 & 0x01 | ||
| Cute Ribbon | | Cute Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x61 & | | 0x61 & 0x02 | ||
| Cute Ribbon Great | | Cute Ribbon Great | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x61 & | | 0x61 & 0x04 | ||
| Cute Ribbon Ultra | | Cute Ribbon Ultra | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x61 & | | 0x61 & 0x08 | ||
| Cute Ribbon Master | | Cute Ribbon Master | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x61 & | | 0x61 & 0x10 | ||
| Smart Ribbon | | Smart Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x61 & | | 0x61 & 0x20 | ||
| Smart Ribbon Great | | Smart Ribbon Great | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x61 & | | 0x61 & 0x40 | ||
| Smart Ribbon Ultra | | Smart Ribbon Ultra | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x61 & | | 0x61 & 0x80 | ||
| Smart Ribbon Master | | Smart Ribbon Master | ||
|} | |} | ||
=== Sinnoh Ribbon Set 4 === | === Sinnoh Ribbon Set 4 === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Ribbon | ! Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x62 & | | 0x62 & 0x01 | ||
| Tough Ribbon | | Tough Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x62 & | | 0x62 & 0x02 | ||
| Tough Ribbon Great | | Tough Ribbon Great | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x62 & | | 0x62 & 0x04 | ||
| Tough Ribbon Ultra | | Tough Ribbon Ultra | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x62 & | | 0x62 & 0x08 | ||
| Tough Ribbon Master | | Tough Ribbon Master | ||
|} | |} | ||
Line 904: | Line 903: | ||
=== Hoenn Ribbon Set 1 === | === Hoenn Ribbon Set 1 === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Ribbon | ! Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3C & | | 0x3C & 0x01 | ||
| Cool Ribbon | | Cool Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3C & | | 0x3C & 0x02 | ||
| Cool Ribbon Super | | Cool Ribbon Super | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3C & | | 0x3C & 0x04 | ||
| Cool Ribbon Hyper | | Cool Ribbon Hyper | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3C & | | 0x3C & 0x08 | ||
| Cool Ribbon Master | | Cool Ribbon Master | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3C & | | 0x3C & 0x10 | ||
| Beauty Ribbon | | Beauty Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3C & | | 0x3C & 0x20 | ||
| Beauty Ribbon Super | | Beauty Ribbon Super | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3C & | | 0x3C & 0x40 | ||
| Beauty Ribbon Hyper | | Beauty Ribbon Hyper | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3C & | | 0x3C & 0x80 | ||
| Beauty Ribbon Master | | Beauty Ribbon Master | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3D & | | 0x3D & 0x01 | ||
| Cute Ribbon | | Cute Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3D & | | 0x3D & 0x02 | ||
| Cute Ribbon Super | | Cute Ribbon Super | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3D & | | 0x3D & 0x04 | ||
| Cute Ribbon Hyper | | Cute Ribbon Hyper | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3D & | | 0x3D & 0x08 | ||
| Cute Ribbon Master | | Cute Ribbon Master | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3D & | | 0x3D & 0x10 | ||
| Smart Ribbon | | Smart Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3D & | | 0x3D & 0x20 | ||
| Smart Ribbon Super | | Smart Ribbon Super | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3D & | | 0x3D & 0x40 | ||
| Smart Ribbon Hyper | | Smart Ribbon Hyper | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3D & | | 0x3D & 0x80 | ||
| Smart Ribbon Master | | Smart Ribbon Master | ||
|} | |} | ||
Line 959: | Line 958: | ||
=== Hoenn Ribbon Set 2 === | === Hoenn Ribbon Set 2 === | ||
{| border= | {| border="1" style="border: 1px solid #999; border-collapse: collapse;" | ||
! Bit | ! Bit | ||
! Ribbon | ! Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3F & | | 0x3F & 0x01 | ||
| Tough Ribbon | | Tough Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3F & | | 0x3F & 0x02 | ||
| Tough Ribbon Super | | Tough Ribbon Super | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3F & | | 0x3F & 0x04 | ||
| Tough Ribbon Hyper | | Tough Ribbon Hyper | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3F & | | 0x3F & 0x08 | ||
| Tough Ribbon Master | | Tough Ribbon Master | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3F & | | 0x3F & 0x10 | ||
| Champion Ribbon | | Champion Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3F & | | 0x3F & 0x20 | ||
| Winning Ribbon | | Winning Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3F & | | 0x3F & 0x40 | ||
| Victory Ribbon | | Victory Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3F & | | 0x3F & 0x80 | ||
| Artist Ribbon | | Artist Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3E & | | 0x3E & 0x01 | ||
| Effort Ribbon | | Effort Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3E & | | 0x3E & 0x02 | ||
| Marine Ribbon | | Marine Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3E & | | 0x3E & 0x04 | ||
| Land Ribbon | | Land Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3E & | | 0x3E & 0x08 | ||
| Sky Ribbon | | Sky Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3E & | | 0x3E & 0x10 | ||
| Country Ribbon | | Country Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3E & | | 0x3E & 0x20 | ||
| National Ribbon | | National Ribbon | ||
|- style= | |- style="background: #eee;" align="center" | ||
| 0x3E & | | 0x3E & 0x40 | ||
| Earth Ribbon | | Earth Ribbon | ||
|- style= | |- style="background: #ddd;" align="center" | ||
| 0x3E & | | 0x3E & 0x80 | ||
| World Ribbon | | World Ribbon | ||
|} | |} |
Revision as of 04:39, 27 November 2010
Pokémon in the games Pokémon Diamond, Pearl, and Platinum are stored in a 136 byte or 236 byte structures. All unencrypted values are stored in little-endian format. The game encrypts the data when it is stored in the save file. Party Pokémon have additional values to hold current battle stats and conditions. The information below describes the Pokémon data format.
Checksum
The checksum serves two purposes:
- It validates the data after decryption, and
- It serves as the encryption key for the data.
The checksum is calculated in three steps:
- Split the unencrypted data from offsets 0x08 to 0x87 into two-byte words,
- Take the sum of the words, and
- Truncate the sum to 16 bits.
Block Shuffling
The 128 bytes of Pokémon data are split into four 32-byte blocks for shuffling. The blocks are shuffled according to a shift value derived from the personality value. Given the personality value pv, the expression yielding the shift value is:
- ((pv >> 0xD) & 0x1F) % 24
The right shifting (pv >> 0xD) is equivalent to a division of 8192.
To shuffle the blocks, take the four blocks of unencrypted data, A, B, C, and D. The blocks shall be rearranged in the encrypted data according to the Block Order column of the following table. (To unshuffle, use the Inverse column.)
Shift Value (decimal) | Block Order | Inverse |
---|---|---|
00 | ABCD | ABCD |
01 | ABDC | ABDC |
02 | ACBD | ACBD |
03 | ACDB | ADBC |
04 | ADBC | ACDB |
05 | ADCB | ADCB |
06 | BACD | BACD |
07 | BADC | BADC |
08 | BCAD | CABD |
09 | BCDA | DABC |
10 | BDAC | CADB |
11 | BDCA | DACB |
12 | CABD | BCAD |
13 | CADB | BDAC |
14 | CBAD | CBAD |
15 | CBDA | DBAC |
16 | CDAB | CDAB |
17 | CDBA | DCAB |
18 | DABC | BCDA |
19 | DACB | BDCA |
20 | DBAC | CBDA |
21 | DBCA | DBCA |
22 | DCAB | CDBA |
23 | DCBA | DCBA |
Encryption
The encryption uses the pseudorandom number generator (PRNG), a linear congruential generator. Elements of the PRNG can be described with the recursive function:
- X[n+1] = (0x41C64E6D * X[n] + 0x6073)
To decrypt the data, given a function rand() which returns the upper 16 bits of consecutive results of the above given function:
- Seed the PRNG with the checksum (let X[n] be the checksum).
- Sequentially, for each 2-byte word Y from 0x08 to 0x87, apply the transformation: unencryptedByte = Y xor rand()
- Unshuffle the blocks using the block shuffling algorithm above.
To encrypt the data:
- Shuffle the blocks using the block shuffling algorithm above.
- Seed the PRNG with the checksum (let X[n] be the checksum),
- Sequentially, for each 2-byte word Y from 0x08 to 0x87, apply the transformation: unencryptedByte = Y xor rand()
Unencrypted bytes
Offset | Contents |
---|---|
0x00-0x03 | Personality value (Also known as the PID) |
0x04-0x05 | Unused |
0x06-0x07 | Checksum |
Encrypted bytes
Block A
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 | Friendship (Steps to Hatch if an egg) |
0x15 | Ability |
0x16 | Markings |
0x17 | Original Language |
0x18 | HP Effort Value |
0x19 | Attack Effort Value |
0x1A | Defense Effort Value |
0x1B | Speed Effort Value |
0x1C | SP Attack Effort Value |
0x1D | SP Defense Effort Value |
0x1E | Cool Contest Value |
0x1F | Beauty Contest Value |
0x20 | Cute Contest Value |
0x21 | Smart Contest Value |
0x22 | Tough Contest Value |
0x23 | Sheen Contest Value |
0x24-0x25 | Sinnoh Ribbon Set 1 |
0x26-0x27 | Sinnoh Ribbon Set 2 |
Block B
Offset | Contents |
---|---|
0x28-0x29 | Move 1 ID |
0x2A-0x2B | Move 2 ID |
0x2C-0x2D | Move 3 ID |
0x2E-0x2F | Move 4 ID |
0x30 | Move 1 Current PP |
0x31 | Move 2 Current PP |
0x32 | Move 3 Current PP |
0x33 | Move 4 Current PP |
0x34-0x37 | Move PP Ups |
0x38-0x3B | Bits 0-29 - Individual Values HP ( [0-31] << 0 ) |
0x3C-0x3D | Hoenn Ribbon Set 1 |
0x3E-0x3F | Hoenn Ribbon Set 2 |
0x40 | Bit 0 - Fateful Encounter Flag Bit 1 - Female Bit 2 - Genderless Bit 3-7 - Alternate Forms |
0x41 | Shiny Leaves (HGSS) Bit 5 - Leaf Crown Bits 0–4 - Leaves A–E (bit 0 is leftmost) |
0x42-0x43 | Unused |
0x44-0x45 | Egg Location (Platinum) |
0x46-0x47 | Met at Location (Platinum) |
Block C
Offset | Contents |
---|---|
0x48-0x5D | Nickname |
0x5E | Unused |
0x5F | Hometown |
0x60-0x61 | Sinnoh Ribbon Set 3 |
0x62-0x63 | Sinnoh Ribbon Set 4 |
0x64-0x67 | Unused |
Block D
Offset | Contents |
---|---|
0x68-0x77 | OT Name |
0x78-0x7A | Date Egg Received |
0x7B-0x7D | Date Met |
0x7E-0x7F | Egg Location (Diamond/Pearl) |
0x80-0x81 | Met At Location (Diamond/Pearl) |
0x82 | Pokérus |
0x83 | Poké Ball |
0x84 | Bit 0-6 - Met At Level Bit 7 - Female OT Gender |
0x85 | Encounter Type |
0x86 | HGSS Poké Ball |
0x87 | Unused |
Battle Stats
The battle stats are encrypted in the same manner, however the seed is not the checksum, it is the PID.
Encrypted Bytes
Offset | Contents |
---|---|
0x88 | Bits 0-2 - Asleep (0-7 rounds) Bit 3 - Poisoned Bit 4 - Burned Bit 5 - Frozen Bit 6 - Paralyzed Bit 7 - Toxic |
0x89 | Unknown - Flags - Max Value 0xF0 |
0x8A-0x8B | Unknown |
0x8C | Level |
0x8D | Capsule Index (Seals) |
0x8E-0x8F | Current HP |
0x90-0x91 | Max HP |
0x92-0x93 | Attack |
0x94-0x95 | Defense |
0x96-0x97 | Speed |
0x98-0x99 | Special Attack |
0x9A-0x9B | Special Defense |
0x9C-0xD3 | Unknown - Contains Trash Data |
0xD4-0xEB | Seal Coordinates |
Original Language
Value | Language |
---|---|
0x1 | 日本語 (Japan) |
0x2 | English (US/UK/AU) |
0x3 | Français (France/Québec) |
0x4 | Italiano (Italy) |
0x5 | Deutsch (Germany) |
0x7 | Español (Spain/Latin Americas) |
0x8 | 한국어 (South Korea) |
Markings
Bit | Marking |
---|---|
0x01 | Circle |
0x02 | Triangle |
0x04 | Square |
0x08 | Heart |
0x10 | Star |
0x20 | Diamond |
Alternate Forms
Alternate forms are stored at offset 0x40 of the Pokemon structure. Each form follows the pattern of index << 3 where index starts at zero for the main form.
Unown's Forms
Bit | Form | Bit | Form | Bit | Form | Bit | Form |
---|---|---|---|---|---|---|---|
0x00 | A | 0x38 | H | 0x70 | O | 0xA8 | V |
0x08 | B | 0x40 | I | 0x78 | P | 0xB0 | W |
0x10 | C | 0x48 | J | 0x80 | Q | 0xB8 | X |
0x18 | D | 0x50 | K | 0x88 | R | 0xC0 | Y |
0x20 | E | 0x58 | L | 0x90 | S | 0xC8 | Z |
0x28 | F | 0x60 | M | 0x98 | T | 0xD0 | ! |
0x30 | G | 0x68 | N | 0xA0 | U | 0xD8 | ? |
Deoxy's Forms
Bit | Form |
---|---|
0x00 | Normal |
0x08 | Attack |
0x10 | Defense |
0x18 | Speed |
Burmy's & Wormadam's Forms
Bit | Form |
---|---|
0x00 | Plant |
0x08 | Sandy |
0x10 | Trash |
Shellos' & Gastrodon's Forms
Bit | Form |
---|---|
0x00 | West |
0x08 | East |
Rotom's Forms
Rotom's alternate forms will only be displayed in Pokemon Platinum. Rotom may be traded between Diamond, Pearl, and Platinum without losing the alternate form.
Bit | Form |
---|---|
0x00 | Normal |
0x08 | Heat |
0x10 | Wash |
0x18 | Frost |
0x20 | Fan |
0x28 | Cut |
Giratina's Forms
Giratina's Origin form will only be displayed in Pokemon Platinum.
Bit | Form |
---|---|
0x00 | Altered |
0x08 | Origin |
Shaymin's Forms
Shaymin's Sky form will only be displayed in Pokemon Platinum.
Bit | Form |
---|---|
0x00 | Land |
0x08 | Sky |
Arceus' Forms
Bit | Form | Bit | Form | Bit | Form |
---|---|---|---|---|---|
0x00 | Normal | 0x30 | Insect | 0x60 | Zap |
0x08 | Fist | 0x38 | Spooky | 0x68 | Mind |
0x10 | Sky | 0x40 | Iron | 0x70 | Icicle |
0x18 | Toxic | 0x48 | Flame | 0x78 | Draco |
0x20 | Earth | 0x50 | Splash | 0x80 | Dread |
0x28 | Stone | 0x58 | Meadow | 0x4C | Curse |
Encounter Types
Value | Country |
---|---|
0x0 | Pal Park, Egg, Hatched, Special Event |
0x2 | Tall Grass |
0x4 | Dialga/Palkia In-Game Event |
0x5 | Cave, Hall of Origin |
0x7 | Surfing, Fishing |
0x9 | Building |
0xA | Great Marsh (Safari Zone) |
0xC | Starter, Fossil, Gift (Eevee) |
Ribbons
Diamond, Pearl, and Platinum store the ribbon information as bitfields in 1-byte words. Given below are the bytewise representation of the ribbon bitfields.
Sinnoh Ribbon Set 1
Bit | Ribbon |
---|---|
0x24 & 0x01 | Sinnoh Champ Ribbon |
0x24 & 0x02 | Ability Ribbon |
0x24 & 0x04 | Great Ability Ribbon |
0x24 & 0x08 | Double Ability Ribbon |
0x24 & 0x10 | Multi Ability Ribbon |
0x24 & 0x20 | Pair Ability Ribbon |
0x24 & 0x40 | World Ability Ribbon |
0x24 & 0x80 | Alert Ribbon |
0x25 & 0x01 | Shock Ribbon |
0x25 & 0x02 | Downcast Ribbon |
0x25 & 0x04 | Careless Ribbon |
0x25 & 0x08 | Relax Ribbon |
0x25 & 0x10 | Snooze Ribbon |
0x25 & 0x20 | Smile Ribbon |
0x25 & 0x40 | Gorgeous Ribbon |
0x25 & 0x80 | Royal Ribbon |
Sinnoh Ribbon Set 2
Bit | Ribbon |
---|---|
0x26 & 0x01 | Gorgeous Royal Ribbon |
0x26 & 0x02 | Footprint Ribbon |
0x26 & 0x04 | Record Ribbon |
0x26 & 0x08 | History Ribbon |
0x26 & 0x10 | Legend Ribbon |
0x26 & 0x20 | Red Ribbon |
0x26 & 0x40 | Green Ribbon |
0x26 & 0x80 | Blue Ribbon |
0x27 & 0x01 | Festival Ribbon |
0x27 & 0x02 | Carnival Ribbon |
0x27 & 0x04 | Classic Ribbon |
0x27 & 0x08 | Premier Ribbon |
Sinnoh Ribbon Set 3
Bit | Ribbon |
---|---|
0x60 & 0x01 | Cool Ribbon |
0x60 & 0x02 | Cool Ribbon Great |
0x60 & 0x04 | Cool Ribbon Ultra |
0x60 & 0x08 | Cool Ribbon Master |
0x60 & 0x10 | Beauty Ribbon |
0x60 & 0x20 | Beauty Ribbon Great |
0x60 & 0x40 | Beauty Ribbon Ultra |
0x60 & 0x80 | Beauty Ribbon Master |
0x61 & 0x01 | Cute Ribbon |
0x61 & 0x02 | Cute Ribbon Great |
0x61 & 0x04 | Cute Ribbon Ultra |
0x61 & 0x08 | Cute Ribbon Master |
0x61 & 0x10 | Smart Ribbon |
0x61 & 0x20 | Smart Ribbon Great |
0x61 & 0x40 | Smart Ribbon Ultra |
0x61 & 0x80 | Smart Ribbon Master |
Sinnoh Ribbon Set 4
Bit | Ribbon |
---|---|
0x62 & 0x01 | Tough Ribbon |
0x62 & 0x02 | Tough Ribbon Great |
0x62 & 0x04 | Tough Ribbon Ultra |
0x62 & 0x08 | Tough Ribbon Master |
Hoenn Ribbon Set 1
Bit | Ribbon |
---|---|
0x3C & 0x01 | Cool Ribbon |
0x3C & 0x02 | Cool Ribbon Super |
0x3C & 0x04 | Cool Ribbon Hyper |
0x3C & 0x08 | Cool Ribbon Master |
0x3C & 0x10 | Beauty Ribbon |
0x3C & 0x20 | Beauty Ribbon Super |
0x3C & 0x40 | Beauty Ribbon Hyper |
0x3C & 0x80 | Beauty Ribbon Master |
0x3D & 0x01 | Cute Ribbon |
0x3D & 0x02 | Cute Ribbon Super |
0x3D & 0x04 | Cute Ribbon Hyper |
0x3D & 0x08 | Cute Ribbon Master |
0x3D & 0x10 | Smart Ribbon |
0x3D & 0x20 | Smart Ribbon Super |
0x3D & 0x40 | Smart Ribbon Hyper |
0x3D & 0x80 | Smart Ribbon Master |
Hoenn Ribbon Set 2
Bit | Ribbon |
---|---|
0x3F & 0x01 | Tough Ribbon |
0x3F & 0x02 | Tough Ribbon Super |
0x3F & 0x04 | Tough Ribbon Hyper |
0x3F & 0x08 | Tough Ribbon Master |
0x3F & 0x10 | Champion Ribbon |
0x3F & 0x20 | Winning Ribbon |
0x3F & 0x40 | Victory Ribbon |
0x3F & 0x80 | Artist Ribbon |
0x3E & 0x01 | Effort Ribbon |
0x3E & 0x02 | Marine Ribbon |
0x3E & 0x04 | Land Ribbon |
0x3E & 0x08 | Sky Ribbon |
0x3E & 0x10 | Country Ribbon |
0x3E & 0x20 | National Ribbon |
0x3E & 0x40 | Earth Ribbon |
0x3E & 0x80 | World Ribbon |
Save File Location
The party Pokémon are stored in the save file beginning at offset 0x00098 for the first small block, and 0x40098 for the second small block.
In the first small save block, the first Daycare Pokémon is located at 0x0141C, and the second is located at 0x01508. In the second small block, the first Daycare Pokémon is located at 0x4141C, and the second is located at 0x41508.
In the first small save block, the Pal Park Pokémon are stored beginning at 0x0BA28. In the second small save block, the Pal Park Pokémon are stored beginning at 0x4BA28.
Each party, Daycare, and Pal Park Pokémon is 236 bytes in size.
The PC storage Pokémon are stored in the save file from Box 1 to Box 18. The offset starts at 0x0C104 for the first big block and 0x4C104 for the second big block. Each PC stored Pokémon is 136 bytes in size.