Persist.dat: Difference between revisions
Jump to navigation
Jump to search
("New Info" - level unlocks >31) |
(attempting to fix table... table not fixed, table replaced :)) |
||
Line 1: | Line 1: | ||
==Unlocking more levels== | ==Unlocking more levels== | ||
To unlock (all) of the levels, fill the range 0x08 to 0x28 with "FF". So far this has caused no problems, and allows you to add more levels to the game. Levels will not be visible unless there is a corrisponding LevelX_Final.dat in the Gamedata folder, and an ONLD that matches the level number in the level0_final.dat. Levels | To unlock (all) of the levels, fill the range 0x08 to 0x28 with "FF". So far this has caused no problems, and allows you to add more levels to the game. Levels will not be visible unless there is a corrisponding LevelX_Final.dat in the Gamedata folder, and an ONLD that matches the level number in the level0_final.dat. Levels above 39 are not currently unlockable due to the 40 level savepoint limit in the persist.dat (probably reflecting an underlying engine restriction). | ||
==Header== | ==Header== | ||
[[Image:Persist_header.gif]] | [[Image:Persist_header.gif]] | ||
{{Table}} | |||
{{OBDth}} | |||
{{OBDtr| 0x00 | int32 |FF0000| 0F 00 00 00 | 15 | version }} | |||
{{OBDtr| 0x04 | int32 |FF0000| 0E 0B D0 D0 | 0xD0D00B0E | signature }} | |||
{{OBDtr| 0x08 | int32 |FF0000| 5C 7F 0C 00 | 0x000C7F5C | level unlock data for levels 0-31; each level has a corresponding bit: | |||
:0x'''01''' 00 00 00 - level 0 (always unlocked, ignored) | |||
:0x'''02''' 00 00 00 - level 1 (always unlocked, ignored) | |||
:0x'''04''' 00 00 00 - level 2 | |||
:... | |||
:0x00 00 '''08''' 00 - level 19 }} | |||
{{OBDtr| 0x0C | int32 |FF0000| 00 00 00 00 | | level unlock data for levels 32-63 }} | |||
{{OBDtr| 0x10 | int32 |FF0000| 00 00 00 00 | | level unlock data for levels 64-95 }} | |||
{{OBDtr| 0x14 | int32 |FF0000| 00 00 00 00 | | level unlock data for levels 96-127 }} | |||
{{OBDtr| 0x18 | int32 |FF0000| 00 00 00 00 | | level unlock data for levels 128-159 }} | |||
{{OBDtr| 0x1C | int32 |FF0000| 00 00 00 00 | | level unlock data for levels 160-191 }} | |||
{{OBDtr| 0x20 | int32 |FF0000| 00 00 00 00 | | level unlock data for levels 192-223 }} | |||
{{OBDtr| 0x24 | int32 |FF0000| 00 00 00 00 | | level unlock data for levels 224-255 }} | |||
{{OBDtr| 0x28 | int32 |FFFF00| 01 00 00 00 | 1 | killed Griffin (0 <nowiki>=</nowiki> no, 1 <nowiki>=</nowiki> yes) }} | |||
{{OBDtr| 0x2C | |00FF00| FE 1B 00 00 | 7166 | unlocked weapons; one bit for each weapon; the number of corresponding bit is given by the skill index value in the primary firing mode block of each [[ONWC]] }} | |||
{{OBDtr| 0x30 | |00FFFF| 1F 00 00 00 | 31 | unlocked items; one bit for each item type (hypo, ammo etc.) }} | |||
{{OBDtr| 0x34 | |FF00FF| 13 00 00 00 | 19 | last read diary page (level) }} | |||
{{OBDtr| 0x38 | |FFC8C8| 01 00 00 00 | 1 | last read diary page (page) }} | |||
{{OBDtr| 0x3C | int32 |FFFFC8| 04 00 00 00 | 4 | level of detail; the following options are possible: | |||
:0 - extra low | |||
:1 - low | |||
:2 - medium | |||
:3 - high | |||
:4 - extra high }} | |||
{{OBDtr| 0x40 | float |C8FFC8| 00 00 80 3F | 1.0 | music volume (0.0 <nowiki>=</nowiki> min, 1.0 <nowiki>=</nowiki> max) }} | |||
{{OBDtr| 0x44 | int32 |C8FFFF| 06 00 00 00 | 6 | option flags; the following values are possible: | |||
:0x'''01''' 00 00 00 - show subtitles | |||
:0x'''02''' 00 00 00 - invert mouse | |||
:0x'''04''' 00 00 00 - game won (aka cheats enabled) }} | |||
{{OBDtr| 0x48 | int32 |FFC8FF| 02 00 00 00 | 2 | difficulity; the following values are possible: | |||
:0 - easy | |||
:1 - medium | |||
:2 - hard }} | |||
{{OBDtr| 0x4C | int16 |FFC800| 20 03 | 800 | resolution: width }} | |||
{{OBDtr| 0x4E | int16 |FFC800| 02 58 | 800 | resolution: height }} | |||
{{OBDtr| 0x50 | int16 |C800C8| 20 00 | 32 | color depth }} | |||
{{OBDtr| 0x52 | |C800C8| 00 00 | | padding }} | |||
{{OBDtr| 0x54 | float |C87C64| 00 00 00 3F | 0.5 | gamma correction (0.0 <nowiki>=</nowiki> min, 1.0 <nowiki>=</nowiki> max) }} | |||
{{OBDtr| 0x58 | int32 |B0C3D4| 03 00 00 00 | 3 | last saved level }} | |||
{{OBDtr| 0x5C | int32 |E7CEA5| 02 00 00 00 | 3 | last saved savepoint }} | |||
|} | |||
This header is followed by an array of 400 savepoints (40 levels, 10 savepoints per level). The size of a savepoint is 516 bytes so the array size is 206400 bytes. |
Revision as of 07:23, 25 August 2008
Unlocking more levels
To unlock (all) of the levels, fill the range 0x08 to 0x28 with "FF". So far this has caused no problems, and allows you to add more levels to the game. Levels will not be visible unless there is a corrisponding LevelX_Final.dat in the Gamedata folder, and an ONLD that matches the level number in the level0_final.dat. Levels above 39 are not currently unlockable due to the 40 level savepoint limit in the persist.dat (probably reflecting an underlying engine restriction).
Header
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x00 | int32 | 0F 00 00 00 | 15 | version |
0x04 | int32 | 0E 0B D0 D0 | 0xD0D00B0E | signature |
0x08 | int32 | 5C 7F 0C 00 | 0x000C7F5C | level unlock data for levels 0-31; each level has a corresponding bit:
|
0x0C | int32 | 00 00 00 00 | level unlock data for levels 32-63 | |
0x10 | int32 | 00 00 00 00 | level unlock data for levels 64-95 | |
0x14 | int32 | 00 00 00 00 | level unlock data for levels 96-127 | |
0x18 | int32 | 00 00 00 00 | level unlock data for levels 128-159 | |
0x1C | int32 | 00 00 00 00 | level unlock data for levels 160-191 | |
0x20 | int32 | 00 00 00 00 | level unlock data for levels 192-223 | |
0x24 | int32 | 00 00 00 00 | level unlock data for levels 224-255 | |
0x28 | int32 | 01 00 00 00 | 1 | killed Griffin (0 = no, 1 = yes) |
0x2C | FE 1B 00 00 | 7166 | unlocked weapons; one bit for each weapon; the number of corresponding bit is given by the skill index value in the primary firing mode block of each ONWC | |
0x30 | 1F 00 00 00 | 31 | unlocked items; one bit for each item type (hypo, ammo etc.) | |
0x34 | 13 00 00 00 | 19 | last read diary page (level) | |
0x38 | 01 00 00 00 | 1 | last read diary page (page) | |
0x3C | int32 | 04 00 00 00 | 4 | level of detail; the following options are possible:
|
0x40 | float | 00 00 80 3F | 1.0 | music volume (0.0 = min, 1.0 = max) |
0x44 | int32 | 06 00 00 00 | 6 | option flags; the following values are possible:
|
0x48 | int32 | 02 00 00 00 | 2 | difficulity; the following values are possible:
|
0x4C | int16 | 20 03 | 800 | resolution: width |
0x4E | int16 | 02 58 | 800 | resolution: height |
0x50 | int16 | 20 00 | 32 | color depth |
0x52 | 00 00 | padding | ||
0x54 | float | 00 00 00 3F | 0.5 | gamma correction (0.0 = min, 1.0 = max) |
0x58 | int32 | 03 00 00 00 | 3 | last saved level |
0x5C | int32 | 02 00 00 00 | 3 | last saved savepoint |
This header is followed by an array of 400 savepoints (40 levels, 10 savepoints per level). The size of a savepoint is 516 bytes so the array size is 206400 bytes.