Editing Pikmin 2 save file
Jump to navigation
Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
− | + | Data about the ''Pikmin 2'' save file format. The following info was taken from the PAL version of ''Pikmin 2'' based on a .gci save taken from Dolphin. | |
− | Data about the ''Pikmin 2'' save file format. The following info was taken from the | ||
{{todo|Figure out how to decrypt save files for the NPC version}} | {{todo|Figure out how to decrypt save files for the NPC version}} | ||
+ | {{todo|Check if this info applies to the JP version of Pikmin 2 on GC}} | ||
− | The save file contains save data for each of the 3 save slot used in-game. The data of such a save slot starts with the 8 byte | + | The save file contains save data for each of the 3 save slot used in-game. The data of such a save slot starts with the 8 byte string <code>PlVa0003</code> and is 0xC000 bytes (49152 bytes in decimal) long. Directly after the string follows a byte which has the slot number of the save (<code>0x00</code> for first slot, <code>0x01</code> for second, <code>0x02</code> for third). The last 4 bytes of the slot data contain the checksum calculated for the preceding slot data. The checksum is calculated according to this method: http://hitmen.c02.at/files/yagcd/yagcd/chap12.html#sec12.5 |
− | + | Addresses of interest relative to the start of the string: | |
− | Addresses of interest relative to the start of the | ||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
! Address || Size || Description | ! Address || Size || Description | ||
− | |||
− | |||
− | |||
|- | |- | ||
| <code>0x14</code> || 4 bytes | | <code>0x14</code> || 4 bytes | ||
Line 27: | Line 23: | ||
| Integer representing the time (in minutes) played on the save file as shown on the file select screen. | | Integer representing the time (in minutes) played on the save file as shown on the file select screen. | ||
|- | |- | ||
− | | <code> | + | | <code>0x164</code> || {{unsure|array of 4 bytes and 1 byte separators, unsure of length}} |
− | | 4 byte | + | | Appears to be 4 byte enemy data of pikmin lost and enemies killed to said enemy, {{unsure|followed by a 1 byte separator}} {{todo|Figure this out}} |
|- | |- | ||
− | | <code> | + | | <code>0x3ED</code> || 1 byte |
− | | | + | | Treasure gauge as shown in the HUD. This counts as an Exploration Kit Item on the pause screen, but does not collect the treasure itself. Value of <code>0x5</code> makes it active. {{todo|Figure out if other exploration kit items appear before or after this one}} |
|- | |- | ||
− | | <code> | + | | <code>0x4D0</code> || 188 byte array |
− | + | | 1 byte each represents the treasure as accessed on the area select screen. Treasures appear to follow their internal IDs for order. These are all the treasures not part of the Exploration Kit. Non-zero values mean collected. {{todo|find if there is a difference between the value being <code>0x2</code> or the more common <code>0x6</code>}} | |
− | + | | <code>0x58D</code> || 13 byte array | |
− | + | | Same as above, only for Exploration Kit treasures including The Key | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | 1 byte each represents the treasure as accessed on the area select screen. Treasures appear to follow their | ||
− | | | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | <code> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | Same as | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | + | The following Python script (requires Python >3.4) assists with calculating the checksum for the data in a save slot: https://gist.github.com/RenolY2/e0d93dde832b63f9197ef60861f22d89 Not recalculating and fixing the checksum results in the game detecting the modified save slot as being corrupted (but if you have any unmodified save slots, those will still work fine). | |
− | The | ||
− | |||
− | |||
Very careful editing might allow you to fool the corruption detection without having to recalculate the value: Due to the checksum being an additive one, {{unsure|if you increase one value by 1 and decrease a different value by 1, the checksum should still remain valid.}} | Very careful editing might allow you to fool the corruption detection without having to recalculate the value: Due to the checksum being an additive one, {{unsure|if you increase one value by 1 and decrease a different value by 1, the checksum should still remain valid.}} |