6th Generation Pokemon Link Map
Overall structure
Pokémon link data is stored at block ID 0x30 of the savegame, located at offset 0x1FE00 for X/Y and 0x20DFF for OR/AS (add 0x5400 if using the referenced offsets located at Pokémon X/Y Save Structure and ORAS Save Structure respectively).
Offset | Description |
---|---|
0x00-0x? | Pokémon Transfer Flags? * |
0x1FF-0xC45 | Pokémon Link Data |
0xC46-0xDFF | Unused? |
* Pokémon Transfer flags: this value prevents receiving the same pokémon trough Pokémon Link Multiple times. If this value is cleared, the Pokémon can be received again. This has only been used for ORAS Demo Glalie/Steeliex, both of which set this value to 0x02.
Pokémon Link Data
Savegame Offsets
Pokémon Link Data starts in the following offsets for decrypted savegame files and is 2631 bytes long:
- Pokémon X/Y: 0x1FFFF
- Pokémon OR/AS: 0x20FFF
Modifying this data requires checksum #0x30 to be updated.
Also, for ramsav users (ramsav method does not require to fix checksum):
- ramsav.bin offset Pokémon X/Y: 0x1CF9F
- ramsav.bin offset Pokémon OR/AS: 0x1E05B
Pokémon Link Data Map
Offset | Description |
---|---|
0x00 |
Pokémon Link flag
(0x00 disabled, 0x80 enabled) |
0x01-0x6C | Name of application that produce Pokémon Link Data |
0x6D-0x6E | NULL terminator? |
0x6F-0x94 | Unknown/Unused |
0x95-0x98 | Unknown/Unused (0x00000000) |
0x99-0x9C | Pokémon transfer flags?1 (see notes) |
0x9D-0x13C | Pokémon slot 1 (160 bytes 2 see notes) |
0x13D-0x140 | Unknown/Unused (0x00000000) |
0x141-0x144 | Pokémon transfer flags?1 (see notes) |
0x145-0x1E4 | Pokémon slot 2 (160 bytes 2 see notes) |
0x1E5-0x1E8 | Unknown/Unused (0x00000000) |
0x1E9-0x1EC | Pokémon transfer flags?1 (see notes) |
0x1ED-0x28C | Pokémon slot 3 (160 bytes 2 see notes) |
0x28D-0x290 | Unknown/Unused (0x00000000) |
0x291-0x294 | Pokémon transfer flags?1 (see notes) |
0x295-0x334 | Pokémon slot 4 (160 bytes 2 see notes) |
0x335-0x338 | Unknown/Unused (0x00000000) |
0x339-0x33C | Pokémon transfer flags?1 (see notes) |
0x33D-0x3DC | Pokémon slot 5 (160 bytes 2 see notes) |
0x3DD-0x3E0 | Unknown/Unused (0x00000000) |
0x3E1-0x3E4 | Pokémon transfer flags?1 (see notes) |
0x3E5-0x484 | Pokémon slot 6 (160 bytes 2 see notes) |
0x485-0x488 | Unknown/Unused (0x00000000) |
0x489-0x48A | Item 1 (3 see notes) |
0x48B-0x48C | Item 1 quantity |
0x48D-0x48E | Item 2 (3 see notes) |
0x48F-0x490 | Item 2 quantity |
0x491-0x492 | Item 3 (3 see notes) |
0x493-0x494 | Item 3 quantity |
0x495-0x496 | Item 4 (3 see notes) |
0x497-0x498 | Item 4 quantity |
0x499-0x49A | Item 5 (3 see notes) |
0x49B-0x49C | Item 5 quantity |
0x49D-0x49E | Item 6 (3 see notes) |
0x49F-0x4A0 | Item 6 quantity |
0x4A1-0x4A2 | Battle Points (max. value 9999) |
0x4A3-0x4A4 | Poké Miles |
0x4A5-0xA44 | Unknown/Unused (All 0x00) |
0xA45-0xA46 | CRC-16/CCITT checksum for 0x01-0xA44 data |
When no Pokémon Link Data is available, 0x01-0xA46 is set to 0x00.
Pokémon slot structure
Offset | Description |
---|---|
0x00-0x01 | TID |
0x02-0x03 | SID |
0x04 |
Pokemon Origin Game (OT Game ID)
00 for Game Received in |
0x05-0x07 | Unknown/Unused (0x000000) |
0x08-0x0B |
[Pokemon] Encryption Constant
Unset = 00000000 |
0x0C |
Primary Ribbons
Ribbon data available below. |
0x0D |
Secondary Ribbons
Ribbon data available below. |
0x0E | PokéBall |
0x0F | Unused/Unknown |
0x10-0x11 | Held Item |
0x12-0x13 | Move ID #1 |
0x14-0x15 | Move ID #2 |
0x16-0x17 | Move ID #3 |
0x18-0x19 | Move ID #4 |
0x1A-0x1B | PokéDex Number (4 see notes) |
0x1C | Form No. |
0x1D |
Language
00 for Game Received In |
0x1E-0x37 |
Pokémon Nickname
Null terminator for last two bytes. |
0x38 |
Nature
FF - Unset |
0x39 |
Pokémon Gender
00 - Male |
0x3A |
Pokémon Ability
00 - Ability 1 |
0x3B |
PID Toggle
00 - Generate Specified PID (from 0x6C-0x6F) |
0x3C-0x3D | Egg Met Location (5 see notes) |
0x3E-0x3F | Met Location of Pokémon (5 see notes) |
0x40 | Met Level |
0x41-0x46 |
Contest Stats
Last byte is Sheen |
0x47-0x4C |
IVs
FFs for unset IVs |
0x4D |
OT Gender
00 - Male |
0x4E-0x67 |
OT Name
Null terminator for last two bytes. |
0x68 | Current Level(random if set to 0) |
0x69 |
Egg Flag
00 - Is Not Egg |
0x6A-0x6B | 'Unknown' |
0x6C-0x6F | PID (used if PID toogle is 00) |
0x70-0x71 | Relearn Move 1 |
0x72-0x73 | Relearn Move 2 |
0x74-0x75 | Relearn Move 3 |
0x76-0x77 | Relearn Move 4 |
0x78 | OT Memory Intensity |
0x79 | OT Memory Line |
0x7A-0x7B | OT Memory TextVar |
0x7C | OT Memory Feeling |
0x7D-0x9F | Unknown/Unused/Reserved bytes |
Ribbon Set
Flag Value | 0x74 | 0x75 |
---|---|---|
0x01 | Battle Champ Ribbon | World Champ Ribbon |
0x02 | Regional Champ Ribbon | Birthday Ribbon |
0x04 | National Champ Ribbon | Special Ribbon |
0x08 | Country Ribbon | Souvenir Ribbon |
0x10 | National Ribbon | Wishing Ribbon |
0x20 | Earth Ribbon | Classic Ribbon |
0x40 | World Ribbon | Premier Ribbon |
0x80 | Event Ribbon | Empty |
Notes
- Pokémon transfer flags: for ORAS demo Glalie/Steelix this is set to 0x0001 0x0001; for Celebi and Johto starters 0x0000 0x0000. Somehow this sets a value in the XY/ORAS savegame that makes the game unable to receive the pokemon again, this is what makes Glalie/Steelix from ORAS Demo only be able to be received once per savegame. Removing that value from the savegame allows to import another Glalie/Steelix. Todo: add offset where that value is stored in XY and ORAS.
- The statement that pokemon data is 160 bytes long is made due to this data being essentially the same as in wondercard data, which is 160 bytes long from TID to end of file.
- If item is not valid, it won't be obtained.
- If pokemon species is not valid (i.e 0x0000), no pokemon will be generated.
- Pokemon link will set egg met location to "Pokemon Link" and met at location to "Pokemon Link" regardless of the value in the data.
Edited by evandixon
Update table formatting
Recommended Comments
There are no comments to display.