Jump to content

Some research in NDS save files


Tux

Recommended Posts

Hi,

I don't know if this has already been done by someone, but yesterday I did some research in my Platinium save file.

EDIT : Now in HGSS.

Here is the results (in addition to the wiki) (all offsets are relative to the starting offset of a block) :

Pokémon Platinium

General block offsets :

Adventure started : 0x34

  • Unsigned 32-bit integer

  • In seconds since 1/1/2000 00:00:00

Pokémon League Champion date : 0x3C

  • Unsigned 32-bit integer

  • In seconds since 1/1/2000 00:00:00

Total Playtime : 0x8A

  • Same as in DP

Museum resurrected Pokemon's Pokedex ID : 0xF14

  • Unsigned 16-bit integer

  • National Pokedex's Pokemon ID (?)

Poketch structure : starting at 0x1160

  • In order : Poketch enabled flag (0 : disabled; else : enabled), number of Poketch Apps enabled (max 25 / 0x19, offset : 0x1161) , currently viewed one (0x1162) , "Poketch Apps enabled" flag list (25 flags starting at 0x1163).

  • Same as in DP.

Map ID number : 0x1280

  • Unsigned 16-bit integer

"Sinnoh Pokedex" flag : 0x1642

"National Pokedex" flag : 0x1643

First Daycare Pokémon : 0x1654


  • 236-byte Pokemon structure

Second Daycare Pokemon : 0x1740

  • 236-byte Pokemon structure

Daycare Egg's PID : 0x128C

  • Unsigned 32-bit integer

Map Coordinates :

  • Each coordinates is a unsigned 16-bit (32-bit, with 16 unused bits, IMO) integer.

  • X :
    0x287E

  • Y :
    0x2882

  • Z :
    0x2886


Underground scores :

  • Each coordinates is a unsigned 32-bit integer.

  • Players met :
    0x3CB4

  • Gifts given :
    0x3CB8

  • Spheres obtained :
    0x3CC0

  • Fossils obtained :
    0x3CC4

  • Traps avoided :
    0x3CCC
    :cool:

  • Traps triggered :
    0x3CD0

  • Flags captured :
    0x3CE8

Poffins : starting at 0x52E8

  • Same Poffin structure as in DP (?)

  • Note about poffin type : 0x1E = No poffin; 0x01 = Spicy/dry (?)

Battle scores (battle wins) : starting at 0x68E0

  • 10 consecutive unsigned 16-bit integers

  • Same order as in DP and as in the wiki.

Battle points : 0x7234

  • Unsigned 16-bit integer

Repel remaining effect's countdown : 0x8073

  • Unsigned 8-bit integer

GTS Pokemon : 0x8080

  • 236-byte Pokemon structure

  • Offset may not be correct

Storage block offsets :

Currently viewed box (?) : 0x00

  • 8-bit integer

  • Box 1 is 0x00

Pokemon : starting at 0x04

  • Each Pokemon is 236-byte long

  • There isn't any padding between boxes.

Box names : 18 names, starting at 0x11EE4

Missing informations :

  • Pal Park's Pokémon offsets (but this is very easy to find ... )
  • Global score, Pokémon scores (?), Number of won contests (?), Number of Ribbons (?) :

  • Cannot be found "raw" in the savefile. (I'm sure of this for the global score)

  • COM himself wasn't able to find them.

  • So, these infos are probably encrypted, somehow, somewhere.

Pokémon Heart Gold & Soul Silver

General block offsets :

Counters box : 0x84

  • Unsigned 16-bit integer

  • Max. value is 50,000 (0xC350)

Lotto number : 0xE5C

  • Unsigned 16-bit integer

Blue card points : 0x1058

  • Unsigned 16-bit integer (max 9999)

Pokédex stucture :

  • Pokémon caugth :
    0x12BC

  • Pokémon seen :
    0x12FC

  • Lang entries unlocked :
    0x13FD
    (1 byte (bitfield, see link) per Pokémon)

  • Default form :
    0x133C
    (1 bit per Pokémon) (1b = Female, 0b = Male)

  • Genders (forms) unlocked (1bit per Pokémon) :
    0x13FC

  • If only one form has been unlocked, then 1b = Female, 0b = Male

  • Else, 1b = Male, 0b = Female

Special cases
:

  • First Spinda seen's PID :
    0x13BC
    (prediction)

  • Shellos forms :
    0x13C0

  • Gastrodon forms :
    0x13C1

  • Burmy forms :
    0x13C2

  • Wormadam forms :
    0x13C3

  • Unown forms :
    0x13C5

  • Rotom forms :
    0x15F0

  • Deoxys forms 1 :
    0x12FB

  • Deoxys forms 2 :
    0x133B

  • Shaymin forms :
    0x15F4

  • Giratina forms :
    0x15F5

First daycare Pokémon : 0x15FC

  • 136-byte Pokémon structure

Second daycare Pokémon : 0x16E8

  • 136-byte Pokémon structure

Daycare Egg's PID : 0x17D4

  • Unsigned 32-bit integer

Seals box's data : 0x4E20

  • 80 8-bit integers, each corresponding to a quantity (max 99 / 0x63).

Apicorn box's data : 0xE558

  • 7 8-bit integers, each corresponding to a quantity (max 99/0x63).

Battle points : 0x5BB8

  • Unsigned 16-bit integer

Castle points : 0x52F4 (?)

  • Unsigned 16-bit integer

Battle tower wins : (?)

  • Unsigned 16-bit integers

  • Record :
    0x5264

  • Current :
    0x5266

Repel's remaining steps : 0x6909

  • Unsigned 8-bit integer

GTS backup Pokémon : 0x6910

  • 236-byte Pokémon structure

Pokéathlon points : 0xE548

  • Unsigned 32-bit integer

Pokéwalker backup Pokémon : 0xE5E0

  • 136-byte Pokémon structure

Pokéwalker Steps : 0xE704

  • Unsigned 32-bit integer

Pokéwalker Steps : 0xE708

  • Unsigned 32-bit integer

Storage block offsets :

Currently viewed box : 0x12000

  • 8-bit integer

  • Box 1 is 0x00

  • Remember : all offsets here are relative to their block's start (here, the storage block start is 0x7200)

Missing informations :

  • Pal Park's Pokémon offsets (but this is very easy to find ... )
  • Global score, Pokémon scores (?), Number of won contests (?), Number of Ribbons (?), battle scores etc... :

  • Cannot be found "raw" in the savefile. (I'm sure of this for the global score)

  • These infos are probably encrypted, somehow, somewhere.

Software I used / credits :

  • Pokésav
  • vbindiff
  • An emulator
  • PokéGen

I'll now do some research in HGSS save files, then in BW ones ...

I hope my research will be useful.

Edited by Tux
Adding info
Link to comment
Share on other sites

  • 8 years later...
  • 3 weeks later...
  • 2 months later...
On 11/6/2019 at 4:05 PM, VersaceBot said:

Confused as to what these values are. Are they memory addresses? Values? 

These are addresses via the save file itself. I wouldn't use this on any ordinary save for the simple fact that changing certain things can actually cause the save to be corrupted when using it in the game, this is purely for documentation purposes for generally more advanced users who know what they are doing, that's why things like PKHeX exist because these creators know the saves better than the average user, they know what needs to be changed and what not.

 

As for the physical memory addresses (aka RAM), most of this information is actually dynamic rather than static. The addresses above are NOT for the memory but the save itself, I repeat these addresses are for the save itself, NOT the memory.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...