Persist.dat

From OniGalore
Revision as of 02:00, 24 November 2009 by Iritscen (talk | contribs) (+tmp, +cat)
Jump to navigation Jump to search
Merge sign-60px.jpg

This page's content overlaps with information found on the Oni (folder)/persist.dat page.
Merging the articles will prevent confusion and help streamline the wiki.

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

Persist header.gif

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:
0x01 00 00 00 - level 0 (always unlocked, ignored)
0x02 00 00 00 - level 1 (always unlocked, ignored)
0x04 00 00 00 - level 2
...
0x00 00 08 00 - level 19
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:
0 - extra low
1 - low
2 - medium
3 - high
4 - extra high
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:
0x01 00 00 00 - show subtitles
0x02 00 00 00 - invert mouse
0x04 00 00 00 - game won (aka cheats enabled)
0x48 int32 02 00 00 00 2 difficulity; the following values are possible:
0 - easy
1 - medium
2 - hard
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.


Savepoint

save_m.gif


Offset Type Raw Hex Value Description
0x00 char[64] "Save Point 2" name of the save point
0x40 int32 01 00 00 00 1 valid (was saved previously) savepoint (0 = no, 1 = yes)
0x44 int32 BE 00 00 00 190 current player health
0x48 int32 C8 00 00 00 200 max player health
0x4C float AE 20 FB 43 502.255310 x position of the player
0x50 float 03 32 4B 42 50.798839 y position of the player
0x54 float 55 12 25 C4 -660.286437 z position of the player
0x58 float 80 06 C1 3F 1.508010 player facing direction (radians)
0x5C int32 00 00 00 00 0 ammo amount
0x60 int32 01 00 00 00 1 energy cells amount
0x64 int32 00 00 00 00 0 shield (percent)
0x68 int32 00 00 00 00 0 invisibility (1/60 seconds)
0x6C int32 01 00 00 00 1 hypo ammount
0x70 int32 00 00 00 00 0 door keys
0x74 int32 01 00 00 00 1 character has lsi (0 = no, 1 = yes)
0x78 char[128] "" weapon name
0xF8 int32 00 00 00 00 0 weapon ammo
0xFC char[128] "" weapon name
0x17C int32 00 00 00 00 0 weapon ammo
0x180 char[128] "w2_sap" weapon name
0x200 int32 1E 00 00 00 30 weapon ammo