.sav file introduction
there are 3 different file types seen
profile (contains all save data)
ghost (a ghost replay file)
PMR (unknown)
interestingly the hall of fame records have default letters that are never seen
JEN = Time Trials
WTH = Letter Hunt
CKJ = clockbuster
file structure
the profile structure is relatively the same across each version except for an 8 byte language section
| bytes | section | |
|---|---|---|
| 0012 | file header | |
| 0040 | settings 1 | |
| 0008 |
language settings European version only |
|
| 0064 | controller? section | |
| 0160 | padding | |
| 0008 | settings 2 | |
| 0064 | padding | |
| 0320 | hall of fame circuit records | |
| 0064 | padding | |
| 1280 | hall of fame time trials | |
| 1088 | hall of fame letter hunt | |
| 1408 | hall of fame clockbuster | |
| 0224 | unlockables | |
| 4736 bytes | ||
File Header
| Offset | Type | Description |
|---|---|---|
| 00 | u32 |
file checksum CRC32 Init = 0 polynomial = 0x04C11DB7 |
| 04 | u32 | always 4 |
| 08 | u32 | amount of bytes in file |
settings 1
| Offset | Type | Description |
|---|---|---|
| 00 | u32 | 0 |
| 04 | u32 | 0 |
| 08 | u32 | 0 |
| 12 | u32 |
year |
| 16 | u32 | month |
| 20 | u32 | day |
| 24 | u32 | hour / 24 |
| 28 | u32 | minute |
| 32 | u32 |
last selected difficulty
* 0 = easy * 1 = mid * 2 = hard * 3 = nightmare |
| 36 | u32 |
auto save * 0 = off * 1 = on |
| 40 | u8 | sfx volume |
| 41 | u8 | music volume |
| 42 | u8 | unknown |
| 43 | u8 | Widescreen Mode * 0 = off * 1 = on |
language setting
if European version: append table:| Offset | Type | Description |
|---|---|---|
| 00 | u32 |
language * 0 = english * 1 = french * 2 = spanish * 3 = italian * 4 = german |
| 04 | u32 | padding? |
controller section
| Offset | Type | Description |
|---|---|---|
| 00 | u8 | rumble settings * 0 = off * 1 = on |
| 01 | u8 | 0 |
| 02 | u8 | 1 |
| 03 | u8 | 0 |
| 04 | u32 | 100 |
| repeat 8 times | ||
| 64 bytes | ||
+160 bytes padding / check if psp version changes
settings 2
| Offset | Type | Description |
|---|---|---|
| 00 | u8 |
default time trial letter 1 * 0 to 25 are letters * 26 is space |
| 01 | u8 | default time trial letter 2 |
| 02 | u8 | default time trial letter 3 |
| 03 | u8 |
pac mobile camera * 0 = on * 1 = off |
| 04 | u32 | always 1 |
| 8 bytes | ||
+64 bytes padding
hall of fame records
circuit records: organized like:
cherry cup
easy
mid
hard
nightmare
grape cup
ect...
| Offset | Type | Description |
|---|---|---|
| 00 | u8 |
trophy * 00 = no trophy * 01 = bronze * 02 = silver * 03 = gold |
| 01 | u8 | completed ? |
| 02 | u8 |
character
* 01 = pacman * 02 = blinky * 03 = pooka * 04 = toc man * 05 = inky * 06 = clyde * 07 = ms pac man * 08 = pinky * 09 = jr pac man * 10 = spooky * 11 = pac devil * 12 = erwin * 13 = flygar * 14 = mr driller * 15 = prince * 16 = mappy |
| 03 | u8 | always 0 padding maybe |
| 04 | u32 | points | max = 1000000 |
| 08 | u32 | time | max = 333:20:00 |
| 12 | u32 |
show cup in hall of fame
* 00 = show * 01 = don't show |
| 16 bytes | ||
time trials
each track is 80 bytes each
time trial fast lap:
| Offset | Type | Description |
|---|---|---|
| 00 | u32 |
show cup in hall of fame
* 00 = show * 01 = don't show |
| 04 | u32 | padding? |
| 08 | u8 | 0 ? |
| 09 | u8 |
if last run was a fast lap
* 0 = no fast lap * 1 = fast lap |
| 10 | u8 |
last runs placement
* 0 = didn't place * 1 = 1st * 2 = 2nd * 3 = 3rd * 4 = 4th * 5 = 5th |
| 11 | u8 | letter 1 |
| 12 | u8 | letter 2 |
| 13 | u8 | letter 3 |
| 14 | u8 | character |
| 15 | u8 | 0 |
| 16 | u32 | time |
| 20 bytes | ||
time trial lap:
| Offset | Type | Description |
|---|---|---|
| 00 | u32 | padding? |
| 04 | u8 | letter 1 |
| 05 | u8 | letter 2 |
| 06 | u8 | letter 3 |
| 07 | u8 | character |
| 08 | u32 | time |
| 12 bytes | ||
| repeat 5 times | ||
letter hunt
| Offset | Type | Description |
|---|---|---|
| 00 | u32 | padding? |
| 04 | u32 | lock? |
| 8 bytes | ||
| Offset | Type | Description |
|---|---|---|
| 00 | u8 |
trophy
* 01 = bronze * 02 = silver * 03 = gold there is always a trophy |
| 01 | u8 | character |
| 02 | u8 | letter 1 |
| 03 | u8 | letter 2 |
| 04 | u8 | letter 3 |
| 05 | u8 | 0 |
| 06 | u8 | 0 |
| 07 | u8 | 0 |
| 08 | u32 | time |
| 12 bytes | ||
| 5 times | ||
clockbuster
| Offset | Type | Description |
|---|---|---|
| 00 | u32 | padding? |
| 04 | u32 | lock? |
| 8 bytes | ||
| Offset | Type | Description |
|---|---|---|
| 00 | u8 | trophy
* 00 = no trophy * 01 = bronze * 02 = silver * 03 = gold |
| 01 | u8 | character |
| 02 | u8 | letter 1 |
| 03 | u8 | letter 2 |
| 04 | u8 | letter 3 |
| 05 | u8 | 0 |
| 06 | u8 | 0 |
| 07 | u8 | 0 |
| 08 | u32 | pac dots | max = 2000000000 |
| 12 | u32 | 0 |
| 16 bytes | ||
| 5 times | ||
unlockables
unlocking the psp exclusive content doesn't work (sad)
| Offset | Type | Description |
|---|---|---|
| 000 | u32 | molten mountain arena |
| 004 | u32 | ghost mansion arena |
| 008 | u32 | canyon crusade arena |
| 012 | u32 | arctic iceberg arena (psp) |
| 016 | u32 | spooky castle (psp) |
| 020 | u32 | space arena |
| 024 | u32 | unknown |
| 028 | u32 | pac man |
| 032 | u32 | blinky |
| 036 | u32 | pooka |
| 040 | u32 | toc man |
| 044 | u32 | inky |
| 048 | u32 | clyde |
| 052 | u32 | ms pac man |
| 056 | u32 | pinky |
| 060 | u32 | jr pac man |
| 064 | u32 | spooky |
| 068 | u32 | pac devil |
| 072 | u32 | erwin |
| 076 | u32 | flygar |
| 080 | u32 | mr driller (psp) |
| 084 | u32 | prince |
| 088 | u32 | mappy (psp) |
| 092 | u32 | unknown |
| 096 | u32 | unknown |
| 100 | u32 | unknown |
| 104 | u32 | unknown |
| 108 | u32 | unknown |
| 112 | u32 | unknown |
| 116 | u32 | unknown |
| 120 | u32 | unknown |
| 124 | u32 | unknown |
| 128 | u32 | unknown |
| 132 | u32 | unknown |
| 136 | u32 | unknown |
| 140 | u32 | unknown |
| 144 | u32 | unknown |
| 148 | u32 | unknown |
| 152 | u32 | unknown |
| 156 | u32 | unknown |
| 160 | u32 | unknown |
| 164 | u32 | unknown |
| 168 | u32 | nightmare |
| 172 | u32 | unknown |
| 176 | u32 | unknown |
| 180 | u32 | unknown |
| 184 | u32 | unknown |
| 188 | u32 | unknown |
| 192 | u32 | unknown |
| 196 | u32 | unknown |
| 200 | u32 | sir pac a lot |
| 204 | u32 | unknown |
| 208 | u32 | unknown |
| 212 | u32 | sira ice dragon |
| 216 | u32 | black bomb |
| 220 | u32 | galaga ship |
| 224 bytes | ||
ghost file structure
| bytes | section | |
|---|---|---|
| 0012 | file header | |
| 0004 | Ghost character | |
| 9608 |
compressed ghost position data? |
|
| 9624 bytes | ||
PMR
| bytes | section | |
|---|---|---|
| 0012 | file header | |
| 0004 | Always 1 | |
| 16 bytes | ||