Save files

From Satisfactory Wiki
Jump to: navigation, search

Save File Location[edit | edit source]

As of Patch 0.2.1.10, the save files are located on this directory:

%appdata%\..\Local\FactoryGame\Saved\SaveGames\

Experimental Patch 0.1.5 documents the save file location as the following, but they resolve to the same location in default windows installations, so either can be used:

%localappdata%\FactoryGame\Saved\SaveGames\

Photo mode[edit | edit source]

Pressing P will bring up the photo mode, which removes the HUD elements, allows changing the field of view, and toggling of a Hi-Res mode.

Screenshots can be found in AppData\Local\FactoryGame\Saved\Screenshots\WindowsNoEditor or %userprofile%\Documents\My Games\FactoryGame\Screenshots.

Save File Format[edit | edit source]

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.

Starting with Save Version 21, the body of the file is compressed in chunks. See Compressed Save File Format below.

Multiple times throughout the file you will see templates like {1} used, that means it uses the value of that field for its size or other math.

Note that all strings are null-terminated, so you almost always want to read all strings of their length - 1.

The length of the string is determined by the previous Int32. A negative length means that the String is encoded in UTF16.

General Save Structure[edit | edit source]

Length (in bytes) Type Description
0x4 Int32 Save Header Version
0x4 Int32 Save Version
0x4 Int32 Build Version
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String World type
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String World properties
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Session Name
0x4 Int32 Play Time (seconds)
0x8 Int64 Save Date (Number of Ticks, See Microsoft Docs for details)
0x1 Byte Session Visibility
0x4 Int32 World Object Count {1}
{1} * N Array
Length (in bytes) Type Description
0x4 Int32 World Object Type
N - 0x4 World Object Data (Look Below)
0x4 Int32 World Object Property Count {2}
{2} * N Array
Length (in bytes) Type Description
N World Object Property Data (Look Below)
0x4 Int32 World Collected Object Count {3}
{3} * N Array
Length (in bytes) Type Description
N World Collected Object Data (Look Below)

World Object Data[edit | edit source]

Length (in bytes) Type Description
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Name
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Property Type
0x4 Int32 Value Length
0x4 Int32 Index (if object has multiple of the same key)
πŸ‘…πŸ‘… πŸ‘…πŸ‘…πŸ‘… Data of the property

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

Property[edit | edit source]

Length (in bytes) Type Description
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Name
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Property Type
0x4 Int32 Value Length
0x4 Int32 Index (if object has multiple of the same key)
πŸ‘…πŸ‘… πŸ‘…πŸ‘…πŸ‘… Data of the property

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

ObjectProperty[edit | edit source]

Length (in bytes) Type Description
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Name
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Property Type (ObjectProperty)
0x4 Int32 Value Length
0x4 Int32 Index (if object has multiple of the same key)
0x4 Int32 Quantity
πŸ‘… πŸ‘… Data of the property

ArrayProperty[edit | edit source]

Length (in bytes) Type Description
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Name
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Property Type (ArrayProperty)
0x4 Int32 Value Length
0x4 Int32 Index (if object has multiple of the same key)
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Element Property Type
0x4 Int32 Number of Elements
πŸ‘… πŸ‘… Array of Elements

StructProperty[edit | edit source]

Length (in bytes) Type Description
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Name
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Property Type (StructProperty)
0x4 Int32 Value Length
0x4 Int32 Index (if object has multiple of the same key)
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Structure (Class) Type
N * ??? Array?
Length (in bytes) Type Description
0x4 Int32 πŸ‘‡
πŸ‘… String Key Name
0x4 Int32 πŸ‘‡
πŸ‘… String Value Type
Dynamic πŸ‘… Value

MapProperty[edit | edit source]

Length (in bytes) Type Description
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Name
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Property Type (MapProperty)
0x4 Int32 Value Length
0x4 Int32 Index (if object has multiple of the same key)
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Key Property Type?
0x4 Int32 πŸ‘‡ (String length)
πŸ‘… String Value Property Type?
0x9 ??? ???
N * ??? Array?
Length (in bytes) Type Description
??? Key
??? Value

Compressed Save File Format[edit | edit source]

This section is a work in progress.

After reading the save file header and checking the save version is at least 21, the body is composed of a certain amount of compressed chunks. Each chunk have a 48 bytes header followed by a zlib compressed body.

Length (in bytes) Type Description
0x8 Int64 PACKAGE_FILE_TAG
0x8 Int64 Maximum chunk size (Default to 131072 in Unreal Engine)
0x8 Int64 Current chunk compressed length {1}
0x8 Int64 Current chunk uncompressed length
0x8 Int64 Current chunk compressed length {1}
0x8 Int64 Current chunk uncompressed length
{1} * N Zlib Zlib compressed chunk