Save files

From Satisfactory Wiki
Jump to navigation Jump to search

Save files are files that contain the .sav file extension.

Save file location

Both Steam and Epic Games use the same path:

  • Windows
    • %LOCALAPPDATA%\FactoryGame\Saved\SaveGames\{YOUR ID}
    • C:\Users\<your Windows username>\AppData\Local\FactoryGame\Saved\SaveGames\{YOUR ID}
      • If you cannot find your Steam save folder (such as due to purchasing the game on Steam after previously owning on Epic), first start a new game with Steam, then save the new game. You should now be able to see your Steam save folder beside epic. The Steam ID is usually shorter than the Epic ID. The folder location is stated above.
  • Linux
    • Using Steam Play (one of these locations):
      • ~/.local/share/Steam/steamapps/compatdata/526870/pfx/drive_c/users/steamuser/Local Settings/Application Data/FactoryGame/Saved/SaveGames/{YOUR STEAM ID}
      • ~/.steam/steam/steamapps/compatdata/526870/pfx/drive_c/users/steamuser/Local Settings/Application Data/FactoryGame/Saved/SaveGames/{YOUR STEAM ID}
    • Steam: ~/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/compatdata/526870/pfx/drive_c/users/steamuser/AppData/Local/FactoryGame/Saved/SaveGames/{YOUR STEAM ID}
    • Steam (installation on another drive than your home dir): {YOUR DRIVE}/SteamLibrary/steamapps/compatdata/526870/pfx/drive_c/users/steamuser/AppData/Local/FactoryGame/Saved/SaveGames/{YOUR STEAM ID}
  • Unraid, docker
    • ich777/steamcmd:satisfactory: /mnt/user/appdata/satisfactory/.config/Epic/FactoryGame/Saved/SaveGames/{YOUR ID}

Automatic backup

When a save file is saved by overwriting another, the game creates a backup of the previous save file. This doesn't happen when an autosave occurs, unless you manually overwrite it.

Both Steam and Epic Games use the same path:

  • Windows
    • %LOCALAPPDATA%\FactoryGame\Saved\SaveGames\SaveGames_backup
    • C:\Users\<your Windows username>\AppData\Local\FactoryGame\Saved\SaveGames\SaveGames_backup
      • If you cannot find your steam save folder (probably because you have owned the game in Epic and just bought the Steam copy recently), first start a new game with Steam, then save the new game. You should now be able to see your steam save folder beside epic. The steam ID is usually shorter than the Epic ID. The folder location is stated above.
  • Linux
    • Using Steam Play: ~/.local/share/Steam/steamapps/compatdata/526870/pfx/drive_c/users/steamuser/Local Settings/Application Data/FactoryGame/Saved/SaveGames/SaveGames_backup
    • Steam: ~/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/compatdata/526870/pfx/drive_c/users/steamuser/AppData/Local/FactoryGame/Saved/SaveGames/SaveGames_backup
    • Steam (installation on another drive than your home dir): {YOUR DRIVE}/SteamLibrary/steamapps/compatdata/526870/pfx/drive_c/users/steamuser/AppData/Local/FactoryGame/Saved/SaveGames/SaveGames_backup
  • Unraid, docker
    • ich777/steamcmd:satisfactory: /mnt/user/appdata/satisfactory/.config/Epic/FactoryGame/Saved/SaveGames_backup

Save editing

Save files can be edited using online tools such as Satisfactory Interactive Map. See here.

Cloud sync

Example of a sync conflict dialog on Steam

If playing on Epic Games or Steam and Cloud Sync is enabled, a notification may sometimes appear when the player:

  • Switches the game version between experimental and stable
  • Copies over the save game across different platforms
  • Continues a game at different machine

And you will be prompted to either upload your save file to the cloud or download the save file from the cloud to your PC.

Unless you are playing across multiple PC, always choose upload your save file to the cloud to avoid losing your progress. And always back up your saves!


Save file format

A save file has a header and a body. The body of the file is compressed in chunks.

As of Patch 1.0.0.3 (Build 368883, released on September 25, 2024), the produced save file header has version 13, the save version is 46 and the editor object version is 40. For these versions, this format description should be correct, but may not be complete: It is possible that not all potential structures were present in the analyzed save files.

Basic data types

There are nine basic types that are used to compose more elaborated structures in the save files:

Byte

A single 8-bit byte that represents a signed integer between -128 and 127.

Int

Four consecutive bytes in little-endian order that represent a signed integer between -2,147,483,648 and 2,147,483,647.

Uint32

Four consecutive bytes in little-endian order that represent an unsigned integer between 0 and 4,294,967,295.

Long

Eight consecutive bytes in little-endian order that represent a signed integer between -9,223,372,036,854,775,808 and 9,223,372,036,854,775,807.

Uint64

Eight consecutive bytes in little-endian order that represent an unsigned integer between 0 and 18,446,744,073,709,551,615.

Float

Four consecutive bytes in little-endian order that represent a signed floating-point number with single precision, according to the binary32 format of IEEE 754.

Double

Eight consecutive bytes in little-endian order that represent a signed floating-point number with double precision, according to the binary64 format of IEEE 754.

String

A variable-length byte sequence of UTF-encoded characters, null-terminated:

number of bytes description example notes
4 string length in characters, including null-termination bytes 22 as an Int, see above
variable the encoded characters "Hello Massage-2(A-B)b" without the quotation marks
1 or 2 null-termination N/A one byte if UTF-8, two bytes if UTF-16

A length of zero represents the empty string and occupies just these four bytes. A positive length means that the characters are encoded in UTF-8. A negative length means that the characters are encoded in UTF-16 little-endian, without a byte-order mark. In this case, the given negative length has to be multiplied by minus two to get the number of bytes the rest of the string occupies (including the two bytes for null-termination).

Composite data types

Using the basic data types defined above, a save file has two top-level structures: a SaveFileHeader and a SaveFileBody. These are composed of different intermediate data types themselves.

These composite data types are documented below. A data type is a list of ordered fields, each field is a row in the table of the data type. So, for example: The SaveFileHeader begins with an Int (four bytes) that represents the save header version. This is followed by another Int (the next four bytes) that represents the save version and so on.

SaveFileHeader

basic data type description example notes
Uint32 save header version 13 for a version list see the header SaveCustomVersion.h in the Community resources
Uint32 save version 46 for a version list see the header FGSaveManagerInterface.h in the Community resources
Uint32 build version 202,470 this is Patch 0.6.1.3
String map name "Persistent_Level"
String map options "?startloc=Rocky Desert?sessionName=only one way to find out?Visibility=SV_Private"
String session name "only one way to find out"
Uint32 played seconds 941,514
Uint64 save timestamp as Ticks 637,894,867,432,920,000 this is 2022-05-30 05:52:23 UTC
Byte session visibility 0 this is "private" visibility, 1 would be "friends only"
Uint32 editor object version 40 depends on the unreal engine version used
String mod metadata "" empty if no mods where used
Uint32 mod flags 0 zero if no mods where used
String save identifier _tYytyulUk6z2Ah42xvScg a unique identifier (GUID) for this save, for analytics purposes
Uint32 1 always 1
Uint32 1 always 1
Uint64 random, but persistent for each session
Uint64 random, but persistent for each session
Uint32 cheat flag 0 0 or 1

CompressedSaveFileBody

Directly after the save file header, the save file body begins with a list of zlib-compressed chunks. Each compressed chunk has this format:

basic data type description example notes
Uint32 unreal engine package signature 2,653,586,369 always the magic number "9E2A83C1" in hex (not really an Int as defined above, more like a four byte unsigned integer)
Uint32 0x22222222 always 0x22222222
Byte 0 always 0
Uint32 maximum chunk size 131,072 in number of bytes, always 128 * 1,024
Uint32 0x03000000 always 0x03000000
Uint64 compressed size 3,814 in number of bytes
Uint64 uncompressed size 131,072 in number of bytes
Uint64 compressed size 3,814 this is a repeat of the above data
Uint64 uncompressed size 131,072 this is a repeat of the above data
N/A compressed bytes of the chunk N/A number of bytes: see "compressed size" above

SaveFileBody

The save file body is the concatenation of the uncompressed chunks. The body mainly consists of a list of sublevels and the persistent level.

data type description example notes
Uint64 uncompressed size 90,103,391 in number of bytes, for the whole body except this size field itself
Uint32 6 always 6
String "None" always "None"
Uint32 0 always 0
Uint32
Uint32 1 always 1
String "None" always "None"
Uint32
N/A 5 level-grouping grids N/A
Uint32 sublevel count 107 the number of sublevels that follow - does not include the persistent level
N/A levels N/A sublevels and the persistent level. There is one more level than the sublevel count above, the last entry being the persistent level. For the format of one Level, see below
Uint32 0 always 0
Uint32 reference list count 6 the number of object references to follow
N/A reference list a list of object references of type ObjectReference. Seems to always be references to Mercer Sphere instances.

Level-Grouping Grid

Five groups of level lists.

basic data type description example notes
String grid name "MainGrid" "MainGrid", "LandscapeGrid", "ExplorationGrid", "FoliageGrid", "HLOD0_256m_1023m"
Uint32
Uint32
Uint32 level count the number of string/integer pairs
N/A level info N/A a String and a Uint32 per level

Level

Each level has a list of game objects (actors and components), preceded by a list of headers for these objects.

basic data type description example notes
String sublevel name "Level /Game/FactoryGame/Map/GameLevel01/Cave_X3_Y4_DesertCanyon_1_01.Cave_X3_Y4_DesertCanyon_1_01:PersistentLevel" the name of the sublevel. if this is the persistent level, the field is absent
Uint64 object header and collectables size 21,499,825 in number of bytes
Uint32 object header count 86,644 the number of headers that follow
N/A object headers N/A for the format of one ObjectHeader, see below
Uint32 collectables count 223 the number of collectable objects that follow (e.g. Power Slugs)
N/A collectables N/A a list of object references, for the format of one such ObjectReference, see below
Uint64 objects size 92,259 in number of bytes, for all game objects in that level (actors and components)
Uint32 object count 504 should be the same as the number of object headers above
N/A objects N/A the additional data for each of the object headers above. for the format of objects, see below (ActorObject or ComponentObject, depending on the header type the object belongs to)
Uint32 second collectables count 223 the number of collectables in the second list that follows. can be igonred, since the collectables should be exactly the same as above
N/A second collectables N/A a list of object references, for the format of one such ObjectReference, see below. can also be ignored

ObjectHeader

basic data type description example notes
Uint32 header type 1 this is a header for an actor object, 0 would be a component header
N/A the bytes of the header N/A either an ActorHeader or a ComponentHeader, see below

ActorHeader

basic data type description example notes
String type path "/Game/FactoryGame/Buildable/Factory/ConstructorMk1/Build_ConstructorMk1.Build_ConstructorMk1_C" the type of actor, described in a hierarchical path
String root object "Persistent_Level"
String instance name "Persistent_Level:PersistentLevel.Build_ConstructorMk1_C_2147169479" the name of this single actor object
Uint32 need transform? 1 seems to be more like a boolean flag, semantics unclear
Float rotation x -0.0
Float rotation y 0.0
Float rotation z -0.99999994
Float rotation w 3.5762787E-7
Float position x -165,200.0
Float position y -33,599.996
Float position z -450.0
Float scale x 1.0
Float scale y 1.0
Float scale z 1.0
Uint32 was placed in level? 0 seems to be more like a boolean flag, semantics unclear

ComponentHeader

basic data type description example notes
String type path "/Script/FactoryGame.FGPowerCircuit" the type of component, described in a hierarchical path
String root object "Persistent_Level"
String instance name "Persistent_Level:PersistentLevel.CircuitSubsystem.FGPowerCircuit_2147177256" the name of this single component object
String parent actor name "Persistent_Level:PersistentLevel.CircuitSubsystem" a reference to the instance name of an actor

ActorObject

basic data type description example notes
Uint32 save version 46 similar to the save version in SaveFileHeader, but can contain older values for saves played during older game releases
Uint32 flag 0 0 or 1
Uint32 size 2,333 the number of bytes this ActorObject has, including trailing bytes
N/A parent object reference N/A ObjectReference
Uint32 component count 8 the number of components this actor has (e.g. a Constructor has an input inventory)
N/A components N/A a list of object references, for the format of one such ObjectReference, see below
N/A properties N/A a list of properties, see PropertyList below
N/A trailing bytes N/A some actors have trailing bytes that contain additional information or are just padding zeros. for interpreting this data, see TrailingBytes

ComponentObject

basic data type description example notes
Uint32 save version 46 similar to the save version in SaveFileHeader, but can contain older values for saves played during older game releases
Uint32 flag 0 0 or 1
Uint32 size 194,584 the number of bytes this ComponentObject has, including trailing bytes. Some components only have their header information, so this size could be zero
N/A properties N/A a list of properties, see PropertyList below
Uint32 0 always 0
N/A trailing bytes N/A some components have trailing bytes that contain additional information or are just padding zeros. for interpreting this data, see existing save file parsers like SCIM

ObjectReference

basic data type description example notes
String level name "Persistent_Level"
String path name "Persistent_Level:PersistentLevel.Build_WorkBench_C_2146781450.FGFactoryLegs"

Properties

Properties contain very different types of information. Every property has a name, which has the basic data type String.

PropertyList

Zero, one or multiple properties concatenated form a PropertyList. The special property named "None" marks the end of a PropertyList. All other properties in a PropertyList also have a type, which has the basic data type String. After the "name" and the "type" strings, the type-specific part begins. For these, see the following "...Property" descriptions.

ArrayProperty
basic data type description example notes
Uint32 size 112 the number of bytes this property has, starting after the first padding
Uint32 index 0
String type "ObjectProperty" the type of the elements in this array
Byte padding 0 always zero, as all padding should be
Uint32 length 1 the number of elements in this array
N/A array elements N/A a list of values, according to the stated element type and number of elements. although the types are named like the other "...Property" structures here, most are actually simpler:
  • "ByteProperty": a single Byte per element
  • "EnumProperty" or "StrProperty": a single String per element
  • "InterfaceProperty" or "ObjectProperty": two Strings per element, "level name" and "path name"
  • "IntProperty": a single Int per element
  • "Int64Property": a single Long per element
  • "FloatProperty": a single Float per element
  • "SoftObjectProperty": an ObjectReference and a Uint32 per element
  • "StructProperty" as element type in this context has more fields per element:
basic data type description example notes
String name "mStops" always matches the property name
String type "StructProperty" seems to always be "StructProperty"
Uint32 size 1234 the combined size of all StructProperty elements in the array, starting after the "UUID" and the one byte padding below
Uint32 padding 0
String element type "TimeTableStop" the type of elements in the payload of these StructProperty array elements

"LinearColor", "Vector", "SpawnData", "BlueprintCategoryRecord", "BlueprintSubCategoryRecord", "DroneTripInformation", "FactoryCustomizationColorSlot", "FeetOffset", "FGCachedConnectedWire", "FGDroneFuelRuntimeData", "GCheckmarkUnlockData", "GlobalColorPreset", "HardDriveData", "HighlightedMarkerPair", "Hotbar", "InventoryStack", "ItemAmount", "MapMarker", "MessageData", "MiniGameResult", "PhaseCost", "PrefabIconElementSaveData", "PrefabTextElementSaveData", "ProjectAssemblyLaunchSequenceValue", "ResearchData", "ResearchTime", "ResourceSinkHistory", "ScannableObjectData", "ScannableResourcePair", "SchematicCost", "ShoppingListBlueprintEntry", "ShoppingListClassEntry", "ShoppingListRecipeEntry", "SplinePointData", "SplitterSortRule", "SubCategoryMaterialDefault", "TimeTableStop", "WireInstance"

Uint32 ? 0 In v0.8 and later, these four Uint32s are always zeros like in a padding
Uint32 ? 0
Uint32 ? 0
Uint32 ? 0
Byte padding 0
N/A typed data N/A the list of elements with the actual payload of the property, see "TypedData" below for one such element
BoolProperty
basic data type description example notes
Uint32 padding 0 always 0. Note that this is where the "size" is for all other property fields. The structure of the BoolProperty is different from all the other property types.
Uint32 index 0 seems to always be zero
Byte the boolean value 1 0 or 1. zero is considered "false", everything else is "true"
Byte padding 0 always 0
ByteProperty
basic data type description example notes
Uint32 size 17 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
String type "EGamePhase" semantics unclear, why is it not just a byte?
Byte padding 0 always 0
Byte or String the byte value "EGP_LateGame" the actual value of this property. if type is "None", then its just a Byte, otherwise a String
EnumProperty
basic data type description example notes
Uint32 size 34 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
String type "EIntroTutorialSteps" semantics unclear
Byte padding 0 always 0
String the enum value "EIntroTutorialSteps::ITS_DONE" the actual value of this property
FloatProperty
basic data type description example notes
Uint32 size 4 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0 always 0
Float the float value 0.37677494 the actual value of this property
DoubleProperty
basic data type description example notes
Uint32 size 4 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0 always 0
Double the double value 0.37677494 the actual value of this property
IntProperty
basic data type description example notes
Uint32 size 4 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0 always 0
Int the int value 10 the actual value of this property
Int8Property
basic data type description example notes
Uint32 size 4 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0 always 0
Byte the int8 value 4 the actual value of this property
UInt32Property
basic data type description example notes
Uint32 size 8 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0 always 0
Uint32 the uint32 value 2,830,424,080 the actual value of this property
Int64Property
basic data type description example notes
Uint32 size 8 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0 always 0
Long the long value 2,830,424,080 the actual value of this property
MapProperty
basic data type description example notes
Uint32 size 370 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
String key type "ObjectProperty" the type the keys of this map have
String value type "IntProperty" the type the values of this map have
Byte padding 0 always 0
Uint32 mode type 0 semantics unclear, seems to be always 0, but does not seem to be a simple padding
Uint32 number of elements 4 the number of key-value pairs in this map
N/A map elements N/A a list of key-value pairs, according to the stated types and number of pairs. although the types are named like the other "...Property" structures here, they are actually simpler:
  • the key types seem to always be one of these:
    • "ObjectProperty": a single ObjectReference per key-value pair
    • "IntProperty": a single Int per key-value pair
    • "StructProperty": 3 Int's per key-value pair
  • the value types seem to always be one of these:
    • "ByteProperty": a single Byte per key-value pair
    • "IntProperty": a single Int per key-value pair
    • "Int64Property": a single Int64 per key-value pair
    • "StructProperty": a list of properties per key-value pair, see "PropertyList" above for one of this list
NameProperty
basic data type description example notes
Uint32 size 17 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0 always 0
String the string value "Rocky Desert" the actual value of this property
ObjectProperty
data type description example notes
Uint32 size 104 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0 always 0
ObjectReference level/path the actual value of this property
SoftObjectProperty
data type description example notes
Uint32 size 104 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0 always 0
ObjectReference level/path the actual value of this property
Uint32 the actual value of this property
SetProperty
basic data type description example notes
Uint32 size 5,240 the number of bytes this property has, starting after the first padding
Uint32 index 0 seems to always be zero
String type "StructProperty" the type of the elements in this set, either "UInt32Property" or "StructProperty"
Byte padding 0 always 0
Uint32 padding 0 always 0
Uint32 length 436 the number of elements in this set
N/A set elements N/A a list of values, according to the stated element type and number of elements. e.g. for the "mRemovalLocations" property of "/Script/FactoryGame.FGFoliageRemoval", each removal location element is of type "StructProperty". The actual location element is simpler than the StructProperty described below, since a location is just x/y/z, each of basic data type Float.
  • "UInt32Property": a single Uint32 per element
  • "StructProperty": 2 Uint64s per element
  • "ObjectProperty": a single ObjectReference
StrProperty
basic data type description example notes
Uint32 size 9 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0 always 0
String the string value "Name" the actual value of this property
StructProperty
basic data type description example notes
Uint32 size 387 the number of bytes this property has, starting after the padding
Uint32 index 1
String type "TrainDockingRuleSet" the type of structure this property's payload represents: , "BlueprintRecord", "BoomBoxPlayerState", "DroneDockingStateInfo", "DroneTripInformation", "FGPlayerPortalData", "FGPortalCachedFactoryTickData", "FactoryCustomizationColorSlot", "FactoryCustomizationData", "InventoryStack", "LightSourceControlData", "MapMarker", "PersistentGlobalIconId", "PlayerCustomizationData", "PlayerRules", "ResearchData", "ShoppingListSettings", "TimerHandle", "TopLevelAssetPath", "TrainDockingRuleSet", "TrainSimulationData", "Transform", "Vector_NetQuantize"
Long padding 0
Long padding 0
Byte padding 0
N/A typed data N/A the actual payload of the property, see "TypedData" below for "InventoryItem", "LinearColor", "Vector", "Quat", "Box", "FluidBox", "RailroadTrackPosition", "DateTime", "ClientIdentityInfo";

all other types represent a PropertyList

TextProperty
basic data type description example notes
Uint32 size 34 the number of bytes this property has, starting after the padding
Uint32 index 0 seems to always be zero
Byte padding 0
Uint32 flags 18 semantics unclear
Byte history type -1 semantics unclear, seems to be always -1
Uint32 is text culture invariant? 1 semantics unclear, seems to be always 1 (as a boolean, this would be "true", sincei it is not zero)
String the text value "my fancy train station" the actual value of this property

TypedData

As the payload of a ArrayProperty's StructProperty, several custom types can occur. Note that the actual type is stated beforehand as a String, with a gap of 17 bytes to this structure.

Box
basic data type description example notes
Double min x -269,069.38
Double min y -309,234.5
Double min z -27,460.76
Double max x 318,316.0
Double max y 303,073.75
Double max z 29,100.76
Byte is valid? 1 0 or 1. semantics unclear
FluidBox
basic data type description example notes
Float the float value of this FluidBox 6.3548093
InventoryItem
data type description example notes
Uint32 padding 0 always 0
String item name
Uint32 item has properties flag 0 0 or 1
Uint32 padding 0 always 0
String item type "/Game/FactoryGame/Resource/Equipment/NailGun/Desc_RebarGunProjectile.Desc_RebarGunProjectile_C"
Uint32 property size the number of bytes of the following properties
PropertyList properties
LinearColor
basic data type description example notes
Float r 0.783538
Float g 0.291771
Float b 0.057805
Float a 1.0
Quat
basic data type description example notes
Float x 0.42907318
Float y -0.13565472
Float z -0.23136456
Float w 0.8625337
RailroadTrackPosition
data type description example notes
ObjectReference object reference
Float offset 93.29132
Float forward 1.0
Vector
basic data type description example notes
Float x 2.1905906
Float y 2.1905906
Float z 2.1905909
DateTime
basic data type description example notes
Int64 date time
ClientIdentityInfo
basic data type description example notes
String UUID
Uint32 identity count 1 the number of identities to follow
N/A identity
basic data type description example notes
Byte 6 1=Epic. 6=Steam.
Uint32 identity data size 8 the number of bytes of the following data
N/A identity data

Trailing Bytes

Trailing bytes can be present after an ActorObject or ComponentObject. The format of the trailing bytes is specific to the game object.

Note: Saves created by Satisfactory Calculator's Interactive Map have trailing bytes for additional objects not shown in this table. This table includes only those objects given trailing bytes by Satifactory game itself. The additional SCIM bytes are always a single zero Uint32.

object type object name trailing bytes format
ActorObject "/Game/FactoryGame/Buildable/Factory/ConveyorBeltMk1/Build_ConveyorBeltMk1.Build_ConveyorBeltMk1_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorBeltMk2/Build_ConveyorBeltMk2.Build_ConveyorBeltMk2_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorBeltMk3/Build_ConveyorBeltMk3.Build_ConveyorBeltMk3_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorBeltMk4/Build_ConveyorBeltMk4.Build_ConveyorBeltMk4_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorBeltMk5/Build_ConveyorBeltMk5.Build_ConveyorBeltMk5_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorBeltMk6/Build_ConveyorBeltMk6.Build_ConveyorBeltMk6_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorLiftMk1/Build_ConveyorLiftMk1.Build_ConveyorLiftMk1_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorLiftMk2/Build_ConveyorLiftMk2.Build_ConveyorLiftMk2_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorLiftMk3/Build_ConveyorLiftMk3.Build_ConveyorLiftMk3_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorLiftMk4/Build_ConveyorLiftMk4.Build_ConveyorLiftMk4_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorLiftMk5/Build_ConveyorLiftMk5.Build_ConveyorLiftMk5_C"

"/Game/FactoryGame/Buildable/Factory/ConveyorLiftMk6/Build_ConveyorLiftMk6.Build_ConveyorLiftMk6_C"

Uint32 count

For each element:

  • Uint32 length
  • String name
  • String always empty
  • String always empty
  • Float position
ActorObject "/Game/FactoryGame/-Shared/Blueprint/BP_GameMode.BP_GameMode_C"

"/Game/FactoryGame/-Shared/Blueprint/BP_GameState.BP_GameState_C"

Uint32 count

For each element: ObjectReference

ActorObject "/Game/FactoryGame/Character/Player/BP_PlayerState.BP_PlayerState_C" Byte: Formatting, either 3 or 241

If the initial byte is 3, no more trailing data If the initial byte is 241:

  • Byte: 1=Epic, 6=Steam
  • Uint32: number of bytes remaining
  • Bytes of length specified
ActorObject "/Game/FactoryGame/Buildable/Factory/DroneStation/BP_DroneTransport.BP_DroneTransport_C"
ActorObject "/Game/FactoryGame/-Shared/Blueprint/BP_CircuitSubsystem.BP_CircuitSubsystem_C" Uint32 count

For each element:

  • Uint32
  • ObjectReference
ActorObject "/Game/FactoryGame/Buildable/Factory/PowerLine/Build_PowerLine.Build_PowerLine_C"

"/Game/FactoryGame/Events/Christmas/Buildings/PowerLineLights/Build_XmassLightsLine.Build_XmassLightsLine_C"

2 ObjectReferences
ActorObject "/Game/FactoryGame/Buildable/Vehicle/Train/Locomotive/BP_Locomotive.BP_Locomotive_C"

"/Game/FactoryGame/Buildable/Vehicle/Train/Wagon/BP_FreightWagon.BP_FreightWagon_C"

ActorObject "/Game/FactoryGame/Buildable/Vehicle/Cyberwagon/Testa_BP_WB.Testa_BP_WB_C"

"/Game/FactoryGame/Buildable/Vehicle/Explorer/BP_Explorer.BP_Explorer_C"

"/Game/FactoryGame/Buildable/Vehicle/Golfcart/BP_Golfcart.BP_Golfcart_C"

"/Game/FactoryGame/Buildable/Vehicle/Tractor/BP_Tractor.BP_Tractor_C"

"/Game/FactoryGame/Buildable/Vehicle/Truck/BP_Truck.BP_Truck_C"

Uint32 count

For each element:

  • Uint32
  • 105 Bytes
ActorObject "/Script/FactoryGame.FGItemPickup_Spawnable"
ActorObject "/Script/FactoryGame.FGLightweightBuildableSubsystem" Uint32 count

For each element:

  • Uint32 always 0
  • String
  • Uint32 count
    • 4 Doubles rotation quaternion
    • 3 Doubles position
    • 3 Doubles scale (always 1.0)
    • Uint32 always 0
    • String: swatch
    • 3 Uint32 always 0
    • String: pattern description number
    • 2 Uint32 always 0
    • 4 Floats primary color
    • 4 Floats secondary color
    • Uint32 always 0
    • Uint32 data size of unknown data
    • N/A Unknown data of specified size
    • Uint32: Seen values 0 thru 4
    • Byte always 0
    • String recipe
    • ObjectReference blueprint proxy
ActorObject "/Script/FactoryGame.FGConveyorChainActor"

"/Script/FactoryGame.FGConveyorChainActor_RepSizeNoCull"

"/Script/FactoryGame.FGConveyorChainActor_RepSizeMedium"

"/Script/FactoryGame.FGConveyorChainActor_RepSizeLarge"

"/Script/FactoryGame.FGConveyorChainActor_RepSizeHuge"

ObjectReference starting belt (the same reference as the first belt in the list below)

ObjectReference ending belt (the same reference as the last belt in the list below)

Uint32 number of belts in chain

For each belt:

  • ObjectReference conveyor chain actor (the same reference for each belt)
  • ObjectReference belt
  • Uint32 number of elements
  • For each element:
    • 9 Uint64s in 3 groups of 3
  • 3 Uint32s
  • 2 Ints
  • Uint32 belt index

Uint32

3 Ints

Uint32 number of items

For each item:

  • Uint32 always 0
  • String item
  • Uint32 always 0
  • Uint32
ComponentObject "/Script/FactoryGame.FGDroneMovementComponent"

"/Script/FactoryGame.FGFactoryConnectionComponent"

"/Script/FactoryGame.FGFactoryLegsComponent"

"/Script/FactoryGame.FGHealthComponent"

"/Script/FactoryGame.FGInventoryComponent"

"/Script/FactoryGame.FGInventoryComponentEquipment"

"/Script/FactoryGame.FGInventoryComponentTrash"

"/Script/FactoryGame.FGPipeConnectionComponent"

"/Script/FactoryGame.FGPipeConnectionComponentHyper"

"/Script/FactoryGame.FGPipeConnectionFactory"

"/Script/FactoryGame.FGPowerConnectionComponent"

"/Script/FactoryGame.FGPowerInfoComponent"

"/Script/FactoryGame.FGRailroadTrackConnectionComponent"

"/Script/FactoryGame.FGShoppingListComponent"

"/Script/FactoryGame.FGTrainPlatformConnection"

Uint32 always 0

Dedicated Server Settings File


This file is also an Unreal Engine save file.
Using the ingame Server Manager UI is currently the only supported method for modifying this file.
Settings may also be changed through the HTTPS API.

ServerSettings.PORT.sav
Property Description
ServerName Just a friendly name for this server. Can be used in UI dialogs to identify the server
AutoLoadSessionName If set, the most recent save from this session will be automatically loaded on server startup
AdminPassword Admin password set on the server. Used to access administration based functions of the Server API
ClientPassword Client password set on the server. Required to join the game in the first place.
ServerSecret Server secret encoded as hex nibble string. Used to hash the data used for the tokens and generate the fingerprint
CertificateData Generated certificate data that should be re-used across server restarts

Trivia

  • Creative Mode can be enabled by editing a save file, with third-party tools providing a GUI interface for doing so. Much like the 4-player limit for multiplayer, that there is no interface to change this option within the Satisfactory client indicates that this feature is unsupported.

History

  • Patch 0.8.1.1: Potential fix for a Crash related to save session
  • Patch 0.8.0.0: Optimized the save system to decrease saving time on larger saves by roughly 80-90%
  • Patch 0.6.0.11: Potentially fixed crash when saving/autosaving introduced in CL 198647
  • Patch 0.6.0.5
    • Fixed not being able to save without typing a name for the session first (Name will be auto set to “SessionName_Timestamp” if the name field is blank)
    • Fixed Delete Save button not working properly
  • Patch 0.6.0.4: Fixed a bug where “Invalid Session ID” could be displayed in the name of saves when trying to save a new session without typing a new save name
  • Patch 0.6.0.0: Implemented Sublevel Saving
  • Patch 2018-10-11: Made available