RNG Research
After intensive debugging it turned out Pokemon Platinum uses standard PRNG to decode/encode whole section containing achievements like: trainer card score, number of link battles, number of trades, number of wins in link battles, number of loses in link battles, etc.
Section responsible for holding these data can be located in save game at offsets 0x61B4 - 0x6364 (or 0x461B4 - 0x46364 depending which save is newer). Futhermore PRNG Seed required to decode this section is found at the end of it, that is at 0x6368 (or 0x46368). Decoding/Encoding algorithm uses seed as initialisation for PRNG and then XORs words (16bit) with next values of PRNG. For instance 2byte number in 0x61b4-b5 is xored with PRNG[1], 0x61b6-b7 with PRNG[2] where PRNG[i] is i-th frame of PRNG with seed taken from 0x6368.
PS> I hope COM will eventually add this to Pokesav for everyone to enjoy.
61B4-6367 - Section range
6368-636B - Section PRNG seed (sum+? make encryption seed)
6368-6369 - Section 16bit sum
636A-636B - ?
Address - Meaning
61B4-61B7 - Score (32bit)
61B8-61CB - ?
61CC-61CF - Number of Wild Pokemon Battled (assume 32bit)
61D0-61D3 - Number of Trainer Battles (assume 32bit)
61D4-61D7 - Number of Pokemons Caught (assume 32bit)
61D8-61DB - Number of Pokemons Met at Fishing (assume 32bit)
61DC-61DF - Number of Eggs Hatched (assume 32bit)
61E0-61E3 - Number of Pokemons Evolded (assume 32bit)
61E4-61FB - ?
61FC-61FF - Number of Link Trades (assume 32bit)
6200-6203 - (assumed Number of Link Battles Played) (assume 32bit)
6204-6207 - Number of Link Battles Won (assume 32bit)
6208-620B - Number of Link Battles Lost (assume 32bit)
620C-624F - ?
6250-6253 - Number of Pokemons Put to Daycare Center (assume 32bit)
6254-6257 - Number of Pokemons Defeated (assume 32bit)
6258-628B - ?
628C-628F - Number of Trainers Beaten (assume 32bit)
6290-62F1 - ?
62F2-62F3 - Number of Contests Played (assume 16bit)
62F4-62F5 - ?
62F6-62F7 - Number of Contests Won (assume 16bit)
62F8-62F9 - ?
62FA-62FB - Number of Contests Ribbon Received (assume 16bit)
62FC-62FD - Number of Times Player's Skill Didn't Affect Enemy Pokemon (assume 16bit)
62FE-62FF - Number of Player's Pokemon Fainted (assume 16bit)
6300-6367 - ?
? - currently unknown
assume - not verified.
|