Save files

This page is a work in progress.

This page describes the save file format. These values and structures were determined by opening save files using a hex editor such as HxD.

If the length is specified as 🡅 that means it is the length of previous Int32. A description of 🡇 means 'see below.'

For example, the below table states, "The string that represents the world type is prefaced by an Int32 (4 bytes long). The length of the string is the value stored in the Int32."

Note that all strings are null-terminated, so you almost always want to read all strings of their length - 1. In Unreal Engine, 'null' is represented by 'None'.

Initial header and array?
This is the point when save file suddenly makes no sense anymore. You should be around halfway through the save file with just the above format.

I noticed that each of the array items finished with (0x00, 0x00, 0x00, 0x00) or (0x01, 0x00, 0x00, 0x00), and then suddenly didn't.

I check if those bytes are either of those combinations, if not, I read "extra int32 with following string" until I hit a string that contains "None". (note that each extra has a 4 byte space after it)

Once I have gone over all None's, I have a few strings that might be continuations of the array, but they don't seem to follow any structure.

Some unstructured data?
We are past the unstructured data, now we start to get interesting properties.

Here is a generic property type format, each property then has a descendant with extras.

Property
This generic property type is used for primitive types like integers, floats, strings, booleans, etc.