@etothepii/satisfactory-file-parser 2.0.1 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -1
- package/GUIDE.md +81 -0
- package/README.md +86 -41
- package/build/parser/satisfactory/blueprint/blueprint-reader.d.ts.map +1 -1
- package/build/parser/satisfactory/blueprint/blueprint-reader.js +5 -6
- package/build/parser/satisfactory/blueprint/blueprint-reader.js.map +1 -1
- package/build/parser/satisfactory/blueprint/blueprint-writer.d.ts.map +1 -1
- package/build/parser/satisfactory/blueprint/blueprint-writer.js +3 -4
- package/build/parser/satisfactory/blueprint/blueprint-writer.js.map +1 -1
- package/build/parser/satisfactory/blueprint/blueprint.types.d.ts +3 -2
- package/build/parser/satisfactory/blueprint/blueprint.types.d.ts.map +1 -1
- package/build/parser/satisfactory/blueprint/blueprint.types.js.map +1 -1
- package/build/parser/satisfactory/edit/edit-constants.d.ts +4 -0
- package/build/parser/satisfactory/edit/edit-constants.d.ts.map +1 -1
- package/build/parser/satisfactory/edit/edit-constants.js +4 -0
- package/build/parser/satisfactory/edit/edit-constants.js.map +1 -1
- package/build/parser/satisfactory/types/property/PropertiesList.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.d.ts +6 -4
- package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.js +10 -19
- package/build/parser/satisfactory/types/property/generic/AbstractBaseProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/BoolArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/ByteArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/DoubleArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/EnumArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/FloatArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int32ArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/Int64ArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/ObjectArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/SoftObjectArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/StrArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.js +10 -7
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/StructArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/ArrayProperty/TextArrayProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/BoolProperty.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/BoolProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/BoolProperty.js +18 -18
- package/build/parser/satisfactory/types/property/generic/BoolProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ByteProperty.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/ByteProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ByteProperty.js +18 -19
- package/build/parser/satisfactory/types/property/generic/ByteProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/DoubleProperty.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/DoubleProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/DoubleProperty.js +18 -18
- package/build/parser/satisfactory/types/property/generic/DoubleProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/EnumProperty.d.ts +9 -11
- package/build/parser/satisfactory/types/property/generic/EnumProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/EnumProperty.js +18 -19
- package/build/parser/satisfactory/types/property/generic/EnumProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/FloatProperty.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/FloatProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/FloatProperty.js +18 -18
- package/build/parser/satisfactory/types/property/generic/FloatProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Int32Property.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/Int32Property.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Int32Property.js +18 -18
- package/build/parser/satisfactory/types/property/generic/Int32Property.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Int64Property.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/Int64Property.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Int64Property.js +18 -18
- package/build/parser/satisfactory/types/property/generic/Int64Property.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Int8Property.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/Int8Property.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Int8Property.js +18 -18
- package/build/parser/satisfactory/types/property/generic/Int8Property.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/MapProperty.d.ts +7 -5
- package/build/parser/satisfactory/types/property/generic/MapProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/MapProperty.js +22 -20
- package/build/parser/satisfactory/types/property/generic/MapProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ObjectProperty.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/ObjectProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/ObjectProperty.js +18 -18
- package/build/parser/satisfactory/types/property/generic/ObjectProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.d.ts +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.js +5 -7
- package/build/parser/satisfactory/types/property/generic/SetProperty/Int32SetProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/SetProperty/ObjectSetProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/SetProperty/StrSetProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/SetProperty/StructSetProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.js +3 -5
- package/build/parser/satisfactory/types/property/generic/SetProperty/Uint32SetProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.js +20 -20
- package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/StrProperty.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/StrProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/StrProperty.js +18 -18
- package/build/parser/satisfactory/types/property/generic/StrProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/StructProperty.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/StructProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/StructProperty.js +21 -19
- package/build/parser/satisfactory/types/property/generic/StructProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/TextProperty.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/TextProperty.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/TextProperty.js +18 -18
- package/build/parser/satisfactory/types/property/generic/TextProperty.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Uint32Property.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/Uint32Property.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Uint32Property.js +18 -18
- package/build/parser/satisfactory/types/property/generic/Uint32Property.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Uint64Property.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/Uint64Property.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Uint64Property.js +18 -18
- package/build/parser/satisfactory/types/property/generic/Uint64Property.js.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Uint8Property.d.ts +9 -8
- package/build/parser/satisfactory/types/property/generic/Uint8Property.d.ts.map +1 -1
- package/build/parser/satisfactory/types/property/generic/Uint8Property.js +18 -18
- package/build/parser/satisfactory/types/property/generic/Uint8Property.js.map +1 -1
- package/docs/assets/highlight.css +7 -0
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/BlueprintConfigReader.html +3 -3
- package/docs/classes/BlueprintConfigWriter.html +3 -3
- package/docs/classes/BlueprintReader.html +3 -3
- package/docs/classes/BlueprintWriter.html +3 -3
- package/docs/classes/CompressionLibraryError.html +2 -2
- package/docs/classes/CorruptSaveError.html +2 -2
- package/docs/classes/Parser.html +6 -6
- package/docs/classes/ParserError.html +2 -2
- package/docs/classes/ReadableStreamParser.html +2 -2
- package/docs/classes/SatisfactorySave.html +2 -2
- package/docs/classes/SaveComponent.html +2 -2
- package/docs/classes/SaveEntity.html +2 -2
- package/docs/classes/SaveObject.html +2 -2
- package/docs/classes/SaveReader.html +3 -3
- package/docs/classes/SaveStreamJsonStringifier.html +2 -2
- package/docs/classes/SaveStreamWriter.html +2 -2
- package/docs/classes/SaveWriter.html +3 -3
- package/docs/classes/TimeoutError.html +2 -2
- package/docs/classes/UnimplementedError.html +2 -2
- package/docs/classes/UnsupportedVersionError.html +2 -2
- package/docs/functions/AbstractBaseProperty.Create.html +1 -0
- package/docs/functions/ArrayProperty.CalcOverhead.html +1 -1
- package/docs/functions/ArrayProperty.Parse.html +1 -1
- package/docs/functions/ArrayProperty.Serialize.html +1 -1
- package/docs/functions/BoolArrayProperty.Parse.html +1 -1
- package/docs/functions/BoolArrayProperty.Serialize.html +1 -1
- package/docs/functions/BoolProperty.CalcOverhead.html +1 -0
- package/docs/functions/BoolProperty.Parse.html +1 -0
- package/docs/functions/BoolProperty.ReadValue.html +1 -0
- package/docs/functions/BoolProperty.Serialize.html +1 -0
- package/docs/functions/BoolProperty.SerializeValue.html +1 -0
- package/docs/functions/BuildableSubsystemSpecialProperties.Parse.html +1 -1
- package/docs/functions/BuildableSubsystemSpecialProperties.Serialize.html +1 -1
- package/docs/functions/ByteArrayProperty.Parse.html +1 -1
- package/docs/functions/ByteArrayProperty.Serialize.html +1 -1
- package/docs/functions/ByteProperty.CalcOverhead.html +1 -0
- package/docs/functions/ByteProperty.Parse.html +1 -0
- package/docs/functions/ByteProperty.ReadValue.html +1 -0
- package/docs/functions/ByteProperty.Serialize.html +1 -0
- package/docs/functions/ByteProperty.SerializeValue.html +1 -0
- package/docs/functions/CircuitSpecialProperties.Parse.html +1 -1
- package/docs/functions/CircuitSpecialProperties.Serialize.html +1 -1
- package/docs/functions/ConveyorChainActorSpecialProperties.Parse.html +1 -1
- package/docs/functions/ConveyorChainActorSpecialProperties.Serialize.html +1 -1
- package/docs/functions/ConveyorSpecialProperties.Parse.html +1 -1
- package/docs/functions/ConveyorSpecialProperties.Serialize.html +1 -1
- package/docs/functions/DoubleArrayProperty.Parse.html +1 -1
- package/docs/functions/DoubleArrayProperty.Serialize.html +1 -1
- package/docs/functions/DoubleProperty.CalcOverhead.html +1 -0
- package/docs/functions/DoubleProperty.Parse.html +1 -0
- package/docs/functions/DoubleProperty.ReadValue.html +1 -0
- package/docs/functions/DoubleProperty.Serialize.html +1 -0
- package/docs/functions/DoubleProperty.SerializeValue.html +1 -0
- package/docs/functions/DynamicStructPropertyValue.read.html +1 -1
- package/docs/functions/DynamicStructPropertyValue.write.html +1 -1
- package/docs/functions/EmptySpecialProperties.Parse.html +1 -1
- package/docs/functions/EmptySpecialProperties.Serialize.html +1 -1
- package/docs/functions/EnumArrayProperty.Parse.html +1 -1
- package/docs/functions/EnumArrayProperty.Serialize.html +1 -1
- package/docs/functions/EnumProperty.CalcOverhead.html +1 -0
- package/docs/functions/EnumProperty.Parse.html +1 -0
- package/docs/functions/EnumProperty.ReadValue.html +1 -0
- package/docs/functions/EnumProperty.Serialize.html +1 -0
- package/docs/functions/EnumProperty.SerializeValue.html +1 -0
- package/docs/functions/FICFrameRange.Parse.html +1 -1
- package/docs/functions/FICFrameRange.Serialize.html +1 -1
- package/docs/functions/FloatArrayProperty.Parse.html +1 -1
- package/docs/functions/FloatArrayProperty.Serialize.html +1 -1
- package/docs/functions/FloatProperty.CalcOverhead.html +1 -0
- package/docs/functions/FloatProperty.Parse.html +1 -0
- package/docs/functions/FloatProperty.ReadValue.html +1 -0
- package/docs/functions/FloatProperty.Serialize.html +1 -0
- package/docs/functions/FloatProperty.SerializeValue.html +1 -0
- package/docs/functions/GUID.read.html +1 -1
- package/docs/functions/GUID.write.html +1 -1
- package/docs/functions/GUIDInfo.read.html +1 -1
- package/docs/functions/GUIDInfo.write.html +1 -1
- package/docs/functions/Int32ArrayProperty.Parse.html +1 -1
- package/docs/functions/Int32ArrayProperty.Serialize.html +1 -1
- package/docs/functions/Int32Property.CalcOverhead.html +1 -0
- package/docs/functions/Int32Property.Parse.html +1 -0
- package/docs/functions/Int32Property.ReadValue.html +1 -0
- package/docs/functions/Int32Property.Serialize.html +1 -0
- package/docs/functions/Int32Property.SerializeValue.html +1 -0
- package/docs/functions/Int32SetProperty.Parse.html +1 -1
- package/docs/functions/Int32SetProperty.Serialize.html +1 -1
- package/docs/functions/Int64ArrayProperty.Parse.html +1 -1
- package/docs/functions/Int64ArrayProperty.Serialize.html +1 -1
- package/docs/functions/Int64Property.CalcOverhead.html +1 -0
- package/docs/functions/Int64Property.Parse.html +1 -0
- package/docs/functions/Int64Property.ReadValue.html +1 -0
- package/docs/functions/Int64Property.Serialize.html +1 -0
- package/docs/functions/Int64Property.SerializeValue.html +1 -0
- package/docs/functions/Int8Property.CalcOverhead.html +1 -0
- package/docs/functions/Int8Property.Parse.html +1 -0
- package/docs/functions/Int8Property.ReadValue.html +1 -0
- package/docs/functions/Int8Property.Serialize.html +1 -0
- package/docs/functions/Int8Property.SerializeValue.html +1 -0
- package/docs/functions/Level.ReadAllObjectContents.html +1 -1
- package/docs/functions/Level.ReadAllObjectHeaders.html +1 -1
- package/docs/functions/Level.ReadLevel.html +1 -1
- package/docs/functions/Level.ReadNObjectContents.html +1 -1
- package/docs/functions/Level.ReadNObjectHeaders.html +1 -1
- package/docs/functions/Level.SerializeAllObjectContents.html +1 -1
- package/docs/functions/Level.SerializeAllObjectHeaders.html +1 -1
- package/docs/functions/Level.SerializeLevel.html +1 -1
- package/docs/functions/MD5Hash.read.html +1 -1
- package/docs/functions/MD5Hash.write.html +1 -1
- package/docs/functions/MapProperty.CalcOverhead.html +1 -0
- package/docs/functions/MapProperty.Parse.html +1 -0
- package/docs/functions/MapProperty.Serialize.html +1 -0
- package/docs/functions/ObjectArrayProperty.Parse.html +1 -1
- package/docs/functions/ObjectArrayProperty.Serialize.html +1 -1
- package/docs/functions/ObjectProperty.CalcOverhead.html +1 -0
- package/docs/functions/ObjectProperty.Parse.html +1 -0
- package/docs/functions/ObjectProperty.ReadValue.html +1 -0
- package/docs/functions/ObjectProperty.Serialize.html +1 -0
- package/docs/functions/ObjectProperty.SerializeValue.html +1 -0
- package/docs/functions/ObjectReference.read.html +1 -1
- package/docs/functions/ObjectReference.write.html +1 -1
- package/docs/functions/ObjectSetProperty.Parse.html +1 -1
- package/docs/functions/ObjectSetProperty.Serialize.html +1 -1
- package/docs/functions/ObjectsListSpecialProperties.Parse.html +1 -1
- package/docs/functions/ObjectsListSpecialProperties.Serialize.html +1 -1
- package/docs/functions/PlayerSpecialProperties.Parse.html +1 -1
- package/docs/functions/PlayerSpecialProperties.Serialize.html +1 -1
- package/docs/functions/PowerLineSpecialProperties.Parse.html +1 -1
- package/docs/functions/PowerLineSpecialProperties.Serialize.html +1 -1
- package/docs/functions/PropertiesList.ParseList.html +1 -1
- package/docs/functions/PropertiesList.ParseSingleProperty.html +1 -1
- package/docs/functions/PropertiesList.SerializeList.html +1 -1
- package/docs/functions/PropertiesList.SerializeSingleProperty.html +1 -1
- package/docs/functions/SetProperty.CalcOverhead.html +1 -1
- package/docs/functions/SetProperty.Parse.html +1 -1
- package/docs/functions/SetProperty.Serialize.html +1 -1
- package/docs/functions/SoftObjectArrayProperty.Parse.html +1 -1
- package/docs/functions/SoftObjectArrayProperty.Serialize.html +1 -1
- package/docs/functions/SoftObjectReference.read.html +1 -1
- package/docs/functions/SoftObjectReference.write.html +1 -1
- package/docs/functions/SpecialDroneActionProperties.Parse.html +1 -1
- package/docs/functions/SpecialDroneActionProperties.Serialize.html +1 -1
- package/docs/functions/SpecialProperties.ParseClassSpecificSpecialProperties.html +1 -1
- package/docs/functions/SpecialProperties.SerializeClassSpecificSpecialProperties.html +1 -1
- package/docs/functions/StrArrayProperty.Parse.html +1 -1
- package/docs/functions/StrArrayProperty.Serialize.html +1 -1
- package/docs/functions/StrProperty.CalcOverhead.html +1 -0
- package/docs/functions/StrProperty.Parse.html +1 -0
- package/docs/functions/StrProperty.ReadValue.html +1 -0
- package/docs/functions/StrProperty.Serialize.html +1 -0
- package/docs/functions/StrProperty.SerializeValue.html +1 -0
- package/docs/functions/StrSetProperty.Parse.html +1 -1
- package/docs/functions/StrSetProperty.Serialize.html +1 -1
- package/docs/functions/StructArrayProperty.Parse.html +1 -1
- package/docs/functions/StructArrayProperty.Serialize.html +1 -1
- package/docs/functions/StructProperty.CalcOverhead.html +1 -0
- package/docs/functions/StructProperty.Parse.html +1 -0
- package/docs/functions/StructProperty.ParseValue.html +1 -0
- package/docs/functions/StructProperty.Serialize.html +1 -0
- package/docs/functions/StructProperty.SerializeValue.html +1 -0
- package/docs/functions/StructSetProperty.Parse.html +1 -1
- package/docs/functions/StructSetProperty.Serialize.html +1 -1
- package/docs/functions/TextArrayProperty.Parse.html +1 -1
- package/docs/functions/TextArrayProperty.Serialize.html +1 -1
- package/docs/functions/TextProperty.CalcOverhead.html +1 -0
- package/docs/functions/TextProperty.Parse.html +1 -0
- package/docs/functions/TextProperty.ReadValue.html +1 -0
- package/docs/functions/TextProperty.Serialize.html +1 -0
- package/docs/functions/TextProperty.SerializeValue.html +1 -0
- package/docs/functions/Transform.Parse.html +1 -1
- package/docs/functions/Transform.ParseF.html +1 -1
- package/docs/functions/Transform.Serialize.html +1 -1
- package/docs/functions/Transform.SerializeF.html +1 -1
- package/docs/functions/Uint32Property.CalcOverhead.html +1 -0
- package/docs/functions/Uint32Property.Parse.html +1 -0
- package/docs/functions/Uint32Property.ReadValue.html +1 -0
- package/docs/functions/Uint32Property.Serialize.html +1 -0
- package/docs/functions/Uint32Property.SerializeValue.html +1 -0
- package/docs/functions/Uint32SetProperty.Parse.html +1 -1
- package/docs/functions/Uint32SetProperty.Serialize.html +1 -1
- package/docs/functions/Uint64Property.CalcOverhead.html +1 -0
- package/docs/functions/Uint64Property.Parse.html +1 -0
- package/docs/functions/Uint64Property.ReadValue.html +1 -0
- package/docs/functions/Uint64Property.Serialize.html +1 -0
- package/docs/functions/Uint64Property.SerializeValue.html +1 -0
- package/docs/functions/Uint8Property.CalcOverhead.html +1 -0
- package/docs/functions/Uint8Property.Parse.html +1 -0
- package/docs/functions/Uint8Property.ReadValue.html +1 -0
- package/docs/functions/Uint8Property.Serialize.html +1 -0
- package/docs/functions/Uint8Property.SerializeValue.html +1 -0
- package/docs/functions/VehicleSpecialProperties.Parse.html +1 -1
- package/docs/functions/VehicleSpecialProperties.Serialize.html +1 -1
- package/docs/functions/col4.ParseBGRA.html +1 -1
- package/docs/functions/col4.ParseRGBA.html +1 -1
- package/docs/functions/col4.SerializeBGRA.html +1 -1
- package/docs/functions/col4.SerializeRGBA.html +1 -1
- package/docs/functions/isArrayProperty.html +1 -1
- package/docs/functions/isBoolArrayProperty.html +1 -1
- package/docs/functions/isBoolProperty.html +1 -1
- package/docs/functions/isBuildableSubsystemSpecialProperties.html +1 -1
- package/docs/functions/isByteArrayProperty.html +1 -1
- package/docs/functions/isByteProperty.html +1 -1
- package/docs/functions/isCircuitSpecialProperties.html +1 -1
- package/docs/functions/isConveyorChainActorSpecialProperties.html +1 -1
- package/docs/functions/isConveyorSpecialProperties.html +1 -1
- package/docs/functions/isDoubleArrayProperty.html +1 -1
- package/docs/functions/isDoubleProperty.html +1 -1
- package/docs/functions/isEmptySpecialProperties.html +1 -1
- package/docs/functions/isEnumArrayProperty.html +1 -1
- package/docs/functions/isEnumProperty.html +1 -1
- package/docs/functions/isFloatArrayProperty.html +1 -1
- package/docs/functions/isFloatProperty.html +1 -1
- package/docs/functions/isInt32ArrayProperty.html +1 -1
- package/docs/functions/isInt32Property.html +1 -1
- package/docs/functions/isInt32SetProperty.html +1 -1
- package/docs/functions/isInt64ArrayProperty.html +1 -1
- package/docs/functions/isInt64Property.html +1 -1
- package/docs/functions/isInt8Property.html +1 -1
- package/docs/functions/isMapProperty.html +1 -1
- package/docs/functions/isObjectArrayProperty.html +1 -1
- package/docs/functions/isObjectProperty.html +1 -1
- package/docs/functions/isObjectSetProperty.html +1 -1
- package/docs/functions/isObjectsListSpecialProperties.html +1 -1
- package/docs/functions/isPlayerSpecialProperties.html +1 -1
- package/docs/functions/isPowerLineSpecialProperties.html +1 -1
- package/docs/functions/isSaveComponent.html +1 -1
- package/docs/functions/isSaveEntity.html +1 -1
- package/docs/functions/isSetProperty.html +1 -1
- package/docs/functions/isSoftObjectArrayProperty.html +1 -1
- package/docs/functions/isSpecialDroneActionProperties.html +1 -1
- package/docs/functions/isStrArrayProperty.html +1 -1
- package/docs/functions/isStrProperty.html +1 -1
- package/docs/functions/isStrSetProperty.html +1 -1
- package/docs/functions/isStructArrayProperty.html +1 -1
- package/docs/functions/isStructProperty.html +1 -1
- package/docs/functions/isStructSetProperty.html +1 -1
- package/docs/functions/isTextArrayProperty.html +1 -1
- package/docs/functions/isTextProperty.html +1 -1
- package/docs/functions/isUInt64Property.html +1 -1
- package/docs/functions/isUint32Property.html +1 -1
- package/docs/functions/isUint32SetProperty.html +1 -1
- package/docs/functions/isUint8Property.html +1 -1
- package/docs/functions/isVehicleSpecialProperties.html +1 -1
- package/docs/functions/vec2.Parse.html +1 -1
- package/docs/functions/vec2.ParseF.html +1 -1
- package/docs/functions/vec2.Serialize.html +1 -1
- package/docs/functions/vec2.SerializeF.html +1 -1
- package/docs/functions/vec3.Parse.html +1 -1
- package/docs/functions/vec3.ParseF.html +1 -1
- package/docs/functions/vec3.ParseInt.html +1 -1
- package/docs/functions/vec3.Serialize.html +1 -1
- package/docs/functions/vec3.SerializeF.html +1 -1
- package/docs/functions/vec3.SerializeInt.html +1 -1
- package/docs/functions/vec3.add.html +1 -1
- package/docs/functions/vec3.length.html +1 -1
- package/docs/functions/vec3.mult.html +1 -1
- package/docs/functions/vec3.norm.html +1 -1
- package/docs/functions/vec3.sub.html +1 -1
- package/docs/functions/vec4.Parse.html +1 -1
- package/docs/functions/vec4.ParseF.html +1 -1
- package/docs/functions/vec4.Serialize.html +1 -1
- package/docs/functions/vec4.SerializeF.html +1 -1
- package/docs/hierarchy.html +1 -1
- package/docs/index.html +24 -29
- package/docs/interfaces/Blueprint.html +2 -2
- package/docs/interfaces/BlueprintConfig.html +2 -2
- package/docs/interfaces/ModData.html +2 -2
- package/docs/interfaces/SatisfactoryModMetadata.html +2 -2
- package/docs/interfaces/SatisfactorySaveHeader.html +2 -2
- package/docs/interfaces/SaveComponentHeader.html +2 -2
- package/docs/interfaces/SaveEntityHeader.html +2 -2
- package/docs/interfaces/SaveObjectHeader.html +2 -2
- package/docs/modules/AbstractBaseProperty.html +2 -0
- package/docs/modules/ArrayProperty.html +1 -1
- package/docs/modules/BoolArrayProperty.html +1 -1
- package/docs/modules/BoolProperty.html +6 -0
- package/docs/modules/BuildableSubsystemSpecialProperties.html +1 -1
- package/docs/modules/ByteArrayProperty.html +1 -1
- package/docs/modules/ByteProperty.html +6 -0
- package/docs/modules/CircuitSpecialProperties.html +1 -1
- package/docs/modules/ConveyorChainActorSpecialProperties.html +1 -1
- package/docs/modules/ConveyorSpecialProperties.html +1 -1
- package/docs/modules/DoubleArrayProperty.html +1 -1
- package/docs/modules/DoubleProperty.html +6 -0
- package/docs/modules/DynamicStructPropertyValue.html +1 -1
- package/docs/modules/EmptySpecialProperties.html +1 -1
- package/docs/modules/EnumArrayProperty.html +1 -1
- package/docs/modules/EnumProperty.html +6 -0
- package/docs/modules/FICFrameRange.html +1 -1
- package/docs/modules/FloatArrayProperty.html +1 -1
- package/docs/modules/FloatProperty.html +6 -0
- package/docs/modules/GUID.html +1 -1
- package/docs/modules/GUIDInfo.html +1 -1
- package/docs/modules/Int32ArrayProperty.html +1 -1
- package/docs/modules/Int32Property.html +6 -0
- package/docs/modules/Int32SetProperty.html +1 -1
- package/docs/modules/Int64ArrayProperty.html +1 -1
- package/docs/modules/Int64Property.html +6 -0
- package/docs/modules/Int8Property.html +6 -0
- package/docs/modules/Level.html +1 -1
- package/docs/modules/MD5Hash.html +1 -1
- package/docs/modules/MapProperty.html +4 -0
- package/docs/modules/ObjectArrayProperty.html +1 -1
- package/docs/modules/ObjectProperty.html +6 -0
- package/docs/modules/ObjectReference.html +1 -1
- package/docs/modules/ObjectSetProperty.html +1 -1
- package/docs/modules/ObjectsListSpecialProperties.html +1 -1
- package/docs/modules/PlayerSpecialProperties.html +1 -1
- package/docs/modules/PowerLineSpecialProperties.html +1 -1
- package/docs/modules/PropertiesList.html +1 -1
- package/docs/modules/SetProperty.html +1 -1
- package/docs/modules/SoftObjectArrayProperty.html +1 -1
- package/docs/modules/SoftObjectReference.html +1 -1
- package/docs/modules/SpecialDroneActionProperties.html +1 -1
- package/docs/modules/SpecialProperties.html +1 -1
- package/docs/modules/StrArrayProperty.html +1 -1
- package/docs/modules/StrProperty.html +6 -0
- package/docs/modules/StrSetProperty.html +1 -1
- package/docs/modules/StructArrayProperty.html +1 -1
- package/docs/modules/StructProperty.html +6 -0
- package/docs/modules/StructSetProperty.html +1 -1
- package/docs/modules/TextArrayProperty.html +1 -1
- package/docs/modules/TextProperty.html +6 -0
- package/docs/modules/Transform.html +1 -1
- package/docs/modules/Uint32Property.html +6 -0
- package/docs/modules/Uint32SetProperty.html +1 -1
- package/docs/modules/Uint64Property.html +6 -0
- package/docs/modules/Uint8Property.html +6 -0
- package/docs/modules/VehicleSpecialProperties.html +1 -1
- package/docs/modules/col4.html +1 -1
- package/docs/modules/vec2.html +1 -1
- package/docs/modules/vec3.html +1 -1
- package/docs/modules/vec4.html +1 -1
- package/docs/modules.html +37 -20
- package/docs/types/AbstractBaseProperty-1.html +1 -0
- package/docs/types/ArrayProperty.AvailableArrayPropertyTypes.html +1 -1
- package/docs/types/ArrayPropertyStructValueFields.html +1 -1
- package/docs/types/BasicMultipleStructPropertyValue.html +1 -1
- package/docs/types/BasicStructPropertyValue.html +1 -1
- package/docs/types/BlueprintHeader.html +1 -1
- package/docs/types/BoolArrayProperty-1.html +1 -1
- package/docs/types/BoolProperty-1.html +1 -0
- package/docs/types/BoxStructPropertyValue.html +1 -1
- package/docs/types/BuildableSubsystemSpecialProperties-1.html +1 -1
- package/docs/types/BuildableTypeInstance.html +1 -1
- package/docs/types/ByteArrayProperty-1.html +1 -1
- package/docs/types/ByteProperty-1.html +1 -0
- package/docs/types/BytePropertyValue.html +1 -1
- package/docs/types/CircuitSpecialProperties-1.html +1 -1
- package/docs/types/ClientIdentityInfo.html +1 -1
- package/docs/types/ConveyorChainActorSpecialProperties-1.html +1 -1
- package/docs/types/ConveyorChainSegmentSpecialProperties.html +1 -1
- package/docs/types/ConveyorItemSpecialProperties.html +1 -1
- package/docs/types/ConveyorSpecialProperties-1.html +1 -1
- package/docs/types/DoubleArrayProperty-1.html +1 -1
- package/docs/types/DoubleProperty-1.html +1 -0
- package/docs/types/DynamicStructPropertyValue-1.html +1 -1
- package/docs/types/EmptySpecialProperties-1.html +1 -1
- package/docs/types/EnumArrayProperty-1.html +1 -1
- package/docs/types/EnumProperty-1.html +1 -0
- package/docs/types/FICFrameRange-1.html +1 -1
- package/docs/types/FICFrameRangeStructPropertyValue.html +1 -1
- package/docs/types/FloatArrayProperty-1.html +1 -1
- package/docs/types/FloatProperty-1.html +1 -0
- package/docs/types/GENERIC_MAP_KEY_TYPE.html +1 -1
- package/docs/types/GENERIC_MAP_VALUE_TYPE.html +1 -1
- package/docs/types/GENERIC_STRUCT_PROPERTY_VALUE.html +1 -1
- package/docs/types/GUID-1.html +1 -1
- package/docs/types/GUIDInfo-1.html +1 -1
- package/docs/types/Int32ArrayProperty-1.html +1 -1
- package/docs/types/Int32Property-1.html +1 -0
- package/docs/types/Int32SetProperty-1.html +1 -1
- package/docs/types/Int64ArrayProperty-1.html +1 -1
- package/docs/types/Int64Property-1.html +1 -0
- package/docs/types/Int8Property-1.html +1 -0
- package/docs/types/InventoryItemStructPropertyValue.html +1 -1
- package/docs/types/Level-1.html +1 -1
- package/docs/types/MAP_STRUCT_KEY_PROXY.html +1 -1
- package/docs/types/MD5Hash-1.html +1 -1
- package/docs/types/MapProperty-1.html +1 -0
- package/docs/types/ObjectArrayProperty-1.html +1 -1
- package/docs/types/ObjectProperty-1.html +1 -0
- package/docs/types/ObjectReference-1.html +1 -1
- package/docs/types/ObjectSetProperty-1.html +1 -1
- package/docs/types/ObjectsListSpecialProperties-1.html +1 -1
- package/docs/types/PlayerSpecialProperties-1.html +1 -1
- package/docs/types/PowerLineSpecialProperties-1.html +1 -1
- package/docs/types/PropertiesMap.html +1 -1
- package/docs/types/RailroadTrackPositionStructPropertyValue.html +1 -1
- package/docs/types/RoughSaveVersion.html +1 -1
- package/docs/types/SetProperty.AvailableSetPropertyTypes.html +1 -1
- package/docs/types/SoftObjectArrayProperty-1.html +1 -1
- package/docs/types/SoftObjectReference-1.html +1 -1
- package/docs/types/SpecialDroneAction.html +1 -1
- package/docs/types/SpecialDroneActionProperties-1.html +1 -1
- package/docs/types/SpecialProperties.AvailableSpecialPropertiesTypes.html +1 -1
- package/docs/types/StrArrayProperty-1.html +1 -1
- package/docs/types/StrProperty-1.html +1 -0
- package/docs/types/StrSetProperty-1.html +1 -1
- package/docs/types/StructArrayProperty-1.html +1 -1
- package/docs/types/StructProperty-1.html +1 -0
- package/docs/types/StructSetProperty-1.html +1 -1
- package/docs/types/TextArrayProperty-1.html +1 -1
- package/docs/types/TextProperty-1.html +1 -0
- package/docs/types/TextPropertyValue.html +1 -1
- package/docs/types/Transform-1.html +1 -1
- package/docs/types/Uint32Property-1.html +1 -0
- package/docs/types/Uint32SetProperty-1.html +1 -1
- package/docs/types/Uint64Property-1.html +1 -0
- package/docs/types/Uint8Property-1.html +1 -0
- package/docs/types/VehicleSpecialProperties-1.html +1 -1
- package/docs/types/col4-1.html +1 -1
- package/docs/types/vec2-1.html +1 -1
- package/docs/types/vec3-1.html +1 -1
- package/docs/types/vec4-1.html +1 -1
- package/docs/variables/EDIT.html +1 -1
- package/package.json +2 -2
- package/build/parser/satisfactory/types/property/generic/ArrayProperty.d.ts +0 -23
- package/build/parser/satisfactory/types/property/generic/ArrayProperty.d.ts.map +0 -1
- package/build/parser/satisfactory/types/property/generic/ArrayProperty.js +0 -172
- package/build/parser/satisfactory/types/property/generic/ArrayProperty.js.map +0 -1
- package/build/parser/satisfactory/types/property/generic/BasicProperty.d.ts +0 -26
- package/build/parser/satisfactory/types/property/generic/BasicProperty.d.ts.map +0 -1
- package/build/parser/satisfactory/types/property/generic/BasicProperty.js +0 -29
- package/build/parser/satisfactory/types/property/generic/BasicProperty.js.map +0 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty.d.ts +0 -13
- package/build/parser/satisfactory/types/property/generic/SetProperty.d.ts.map +0 -1
- package/build/parser/satisfactory/types/property/generic/SetProperty.js +0 -95
- package/build/parser/satisfactory/types/property/generic/SetProperty.js.map +0 -1
- package/build/parser/satisfactory/types/property/special/SpecialAnyProperties.d.ts +0 -55
- package/build/parser/satisfactory/types/property/special/SpecialAnyProperties.d.ts.map +0 -1
- package/build/parser/satisfactory/types/property/special/SpecialAnyProperties.js +0 -3
- package/build/parser/satisfactory/types/property/special/SpecialAnyProperties.js.map +0 -1
- package/docs/classes/AbstractBaseProperty.html +0 -7
- package/docs/classes/BoolProperty.html +0 -13
- package/docs/classes/ByteProperty.html +0 -13
- package/docs/classes/DoubleProperty.html +0 -13
- package/docs/classes/EnumProperty.html +0 -13
- package/docs/classes/FloatProperty.html +0 -13
- package/docs/classes/Int32Property.html +0 -13
- package/docs/classes/Int64Property.html +0 -13
- package/docs/classes/Int8Property.html +0 -13
- package/docs/classes/MapProperty.html +0 -17
- package/docs/classes/ObjectProperty.html +0 -13
- package/docs/classes/StrProperty.html +0 -13
- package/docs/classes/StructProperty.html +0 -18
- package/docs/classes/TextProperty.html +0 -13
- package/docs/classes/Uint32Property.html +0 -13
- package/docs/classes/Uint64Property.html +0 -13
- package/docs/classes/Uint8Property.html +0 -13
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
|
|
2
2
|
# Changelog
|
|
3
|
+
### [2.1.2] (2024-11-24)
|
|
4
|
+
#### Update README
|
|
5
|
+
* fixed link to auto-generated typedoc.
|
|
6
|
+
|
|
7
|
+
### [2.1.1] (2024-11-24)
|
|
8
|
+
#### Blueprint structure
|
|
9
|
+
* Item costs and recipes in a blueprint are now correctly treated as ObjectReference, instead a single path string.
|
|
10
|
+
#### Internal Updates
|
|
11
|
+
* Migrated the rest of the generic properties towards namespaces
|
|
12
|
+
#### Updated README examples
|
|
13
|
+
#### Provided auto-generated typedoc
|
|
14
|
+
|
|
3
15
|
### [2.0.1] (2024-10-31)
|
|
4
16
|
#### Normal Properties Update
|
|
5
17
|
* Most Normal Properties classes got refactored to namespaces as well. More will come. Please refrain from using instances of them. Background being, that its anyway only static methods and types.
|
|
@@ -9,7 +21,6 @@
|
|
|
9
21
|
#### Bugfix
|
|
10
22
|
* The total conveyor length in the special properties of a ConveyorChainActor got serialized as int32, but correctly now serialize as float32.
|
|
11
23
|
|
|
12
|
-
|
|
13
24
|
### [1.1.1] (2024-10-21)
|
|
14
25
|
#### Improved Special Properties
|
|
15
26
|
* Improved on SpecialProperties of BuildableSubsystem and ConveyorChainActor as the meaning became more clear.
|
package/GUIDE.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
|
|
2
|
+
# Basic Concepts
|
|
3
|
+
### SatisfactorySave
|
|
4
|
+
The [SatisfactorySave](https://github.com/etothepii4/satisfactory-file-parser/blob/main/src/parser/satisfactory/save/satisfactory-save.ts) is the main object getting parsed/serialized.
|
|
5
|
+
For Save Editing, only `header` and `levels` are relevant. The rest is meta info or info that does not change when the save changes.
|
|
6
|
+
```js
|
|
7
|
+
SatisfactorySave {
|
|
8
|
+
name: string;
|
|
9
|
+
header: SatisfactorySaveHeader;
|
|
10
|
+
levels: Level[];
|
|
11
|
+
...
|
|
12
|
+
}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Level
|
|
16
|
+
Each [level](https://github.com/etothepii4/satisfactory-file-parser/blob/main/src/parser/satisfactory/save/level.class.ts) has an array of `objects` and `collectibles`. Collectibles refer to the Somersloops and slugs if you collected them. Objects refer to Constructors, Manufacturers, Belts, Pipes, Foundations etc and many more. Each of them is either a [SaveEntity](https://github.com/etothepii4/satisfactory-file-parser/blob/main/src/parser/satisfactory/types/objects/SaveEntity.ts) or [SaveComponent](https://github.com/etothepii4/satisfactory-file-parser/blob/main/src/parser/satisfactory/types/objects/SaveComponent.ts), which both inherit from [SaveObject](https://github.com/etothepii4/satisfactory-file-parser/blob/main/src/parser/satisfactory/types/objects/SaveObject.ts).
|
|
17
|
+
```js
|
|
18
|
+
Level {
|
|
19
|
+
objects: (SaveEntity | SaveComponent)[];
|
|
20
|
+
collectables: ObjectReference[];
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### SaveObjects
|
|
25
|
+
All `SaveObjects` are either a `SaveEntity` or `SaveComponent`. Whereas a `SaveEntity` references child components. This would refer in Unreal Engine to Component and Actor if i am not mistaken.
|
|
26
|
+
|
|
27
|
+
But both have "normal" generic `properties` and some objects have actually `specialProperties`, that are very specific to this type of object and get serialized extra in the save.
|
|
28
|
+
```js
|
|
29
|
+
|
|
30
|
+
SaveObject {
|
|
31
|
+
typePath: string;
|
|
32
|
+
rootObject: string;
|
|
33
|
+
instanceName: string;
|
|
34
|
+
properties: PropertiesMap;
|
|
35
|
+
specialProperties: SpecialProperties.AvailableSpecialPropertiesTypes;
|
|
36
|
+
trailingData: number[] = [];
|
|
37
|
+
objectVersion: number;
|
|
38
|
+
unknownType2: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
SaveComponent = SaveObject & {
|
|
42
|
+
parentEntityName: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
SaveEntity = SaveObject & {
|
|
46
|
+
needTransform: boolean;
|
|
47
|
+
transform: Transform;
|
|
48
|
+
wasPlacedInLevel: boolean;
|
|
49
|
+
parentObjectRoot: string;
|
|
50
|
+
parentObjectName: string;
|
|
51
|
+
components: ObjectReference[];
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Generic Properties
|
|
56
|
+
All generic properties inherit from [AbstractBaseProperty](https://github.com/etothepii4/satisfactory-file-parser/blob/main/src/parser/satisfactory/types/property/generic/AbstractBaseProperty.ts).
|
|
57
|
+
For a given name, an object has property of type `AbstractBaseProperty | AbstractBaseProperty[]`. Which just means, that the game on rare occasions serializes multiple properties with the same name, just different `index` as number. Often this `index` is just not relevant, but as mentioned on rare occasions, the game tries to represent an array (Not to be confused with ArrayProperty).
|
|
58
|
+
Other properties such as `FloatProperty` inherit from the `AbstractBAseProperty`.
|
|
59
|
+
```js
|
|
60
|
+
type AbstractBaseProperty = {
|
|
61
|
+
type: string;
|
|
62
|
+
ueType: string;
|
|
63
|
+
name?: string;
|
|
64
|
+
guidInfo?: GUIDInfo;
|
|
65
|
+
index?: number;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
type FloatProperty = AbstractBaseProperty & {
|
|
69
|
+
type: 'FloatProperty';
|
|
70
|
+
value: number;
|
|
71
|
+
};
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Special Properties
|
|
75
|
+
They are specific to the type of object they are. For example objects of type `/Script/FactoryGame.FGLightweightBuildableSubsystem` always have some special properties, the parser calls this one `BuildableSubsystemSpecialProperties`. There you will find a specific structure.
|
|
76
|
+
Objects without any special properties, will always have `EmptySpecialProperties`. this is just the type for the parser to know.
|
|
77
|
+
|
|
78
|
+
## Collectibles (Slugs, Mercer Spheres, Somersloops, ...)
|
|
79
|
+
Collectibles in Satisfactory are only stored as objects in the save file, once they are visible to you.
|
|
80
|
+
If you collected them, they are instead in the `collectibles` array of a level.
|
|
81
|
+
So therefore you CAN NOT know the total list of collectibles alone from the save file, unless you uncovered everything in your save.
|
package/README.md
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
# Satisfactory File Parser
|
|
2
|
-
This is
|
|
3
|
-
The reporitory is written entirely in TypeScript and
|
|
2
|
+
This is a TypeScript [github project](https://github.com/etothepii4/satisfactory-file-parser) to parse Satisfactory Saves/Blueprints. Satisfactory is a game released by Coffee Stain Studios.
|
|
3
|
+
The reporitory is written entirely in TypeScript and is bundled on [NPM](https://www.npmjs.com/package/@etothepii/satisfactory-file-parser).
|
|
4
4
|
|
|
5
5
|
This parser can read, modify and write:
|
|
6
6
|
- Save Files `.sav`
|
|
7
7
|
- Blueprint Files `.sbp`, `.sbpcfg`
|
|
8
8
|
|
|
9
|
+
The parser is for deep save editing, since it just parses to JSON and back.
|
|
10
|
+
The purpose to have an editable structure, game logic is not known.
|
|
11
|
+
It is recommended that you look at the parsed save/blueprint to get an idea what you want to edit.
|
|
12
|
+
|
|
9
13
|
# Supported Versions
|
|
10
14
|
The version support of the packages is indicated below. Some bugs might still be present, see Bug Reporting further down.
|
|
11
15
|
|
|
@@ -18,12 +22,16 @@ Game Version Files of U5 and below are NOT supported.
|
|
|
18
22
|
| U8 | ✅ 0.1.20 - 0.3.7 |
|
|
19
23
|
| U1.0 | ✅ >= 0.4.20 |
|
|
20
24
|
|
|
25
|
+
|
|
21
26
|
# Installation
|
|
22
27
|
#### npm
|
|
23
28
|
`npm install @etothepii/satisfactory-file-parser`
|
|
24
29
|
#### yarn
|
|
25
30
|
`yarn add @etothepii/satisfactory-file-parser`
|
|
26
31
|
|
|
32
|
+
# Bug Reports or Feedback
|
|
33
|
+
You can always raise an issue on the linked [github project](https://github.com/etothepii4/satisfactory-file-parser) or hit me up on the satisfactory discord `etothepii`.
|
|
34
|
+
|
|
27
35
|
# Mod Support ✅
|
|
28
36
|
By Default, most Mods just reuse Properties and Structs of the base game.
|
|
29
37
|
If however a Mod should not be working or have just objects with a lot of trailing unparseable data, Raise an issue or contact me.
|
|
@@ -67,7 +75,7 @@ jsonFileStream.on('close', () => {
|
|
|
67
75
|
startStreaming();
|
|
68
76
|
```
|
|
69
77
|
|
|
70
|
-
|
|
78
|
+
# Writing a Save
|
|
71
79
|
Consequently, writing a parsed save file back is just as easy.
|
|
72
80
|
The SaveParser has callbacks to assist during syncing on different occasions during the process.
|
|
73
81
|
For example, when writing the header or when writing a chunk of the save body.
|
|
@@ -91,22 +99,7 @@ fs.writeFileSync('./MyModifiedSave.sav', Buffer.concat([fileHeader!, ...bodyChun
|
|
|
91
99
|
```
|
|
92
100
|
|
|
93
101
|
|
|
94
|
-
|
|
95
|
-
You can for example loop through players and print their cached names and positions.
|
|
96
|
-
|
|
97
|
-
```js
|
|
98
|
-
import { isSaveEntity, SatisfactorySave, SaveEntity, StrProperty } from '@etothepii/satisfactory-file-parser';
|
|
99
|
-
|
|
100
|
-
const objects = save.levels.flatMap(level => level.objects);
|
|
101
|
-
const players = objects.filter(obj => isSaveEntity(obj) && obj.typePath === '/Game/FactoryGame/Character/Player/Char_Player.Char_Player_C') as SaveEntity[];
|
|
102
|
-
for (const player of players) {
|
|
103
|
-
const name = (player.properties.mCachedPlayerName as StrProperty).value;
|
|
104
|
-
console.log(name, player.transform.translation);
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
# Usage of Blueprint Parsing
|
|
102
|
+
# Reading Blueprints
|
|
110
103
|
Note, that blueprints consist of 2 files. The `.sbp` main file and the config file `.sbpcfg`.
|
|
111
104
|
|
|
112
105
|
```js
|
|
@@ -118,6 +111,7 @@ const configFile = fs.readFileSync('./MyBlueprint.sbpcfg');
|
|
|
118
111
|
const blueprint = Parser.ParseBlueprintFiles('Myblueprint', mainFile, configFile);
|
|
119
112
|
```
|
|
120
113
|
|
|
114
|
+
# Writing Blueprints
|
|
121
115
|
Consequently, writing a blueprint into binary data works the same way with getting callbacks in the same style as the save parsing.
|
|
122
116
|
```js
|
|
123
117
|
import * as fs from 'fs';
|
|
@@ -143,7 +137,7 @@ fs.writeFileSync('./MyBlueprint.sbp', Buffer.concat([mainFileHeader!, ...mainFil
|
|
|
143
137
|
fs.writeFileSync('./MyBlueprint.sbpcfg', Buffer.from(summary.configFileBinary));
|
|
144
138
|
```
|
|
145
139
|
|
|
146
|
-
|
|
140
|
+
## Additional Options on the Parser Methods
|
|
147
141
|
For every parser call, you can pass optional callbacks to receive additional info.
|
|
148
142
|
Like a callback on the decompressed save body. Parsing saves provides a callback for reporting progress [0,1] and an occasional message.
|
|
149
143
|
```js
|
|
@@ -163,30 +157,81 @@ const blueprint = Parser.ParseBlueprintFiles('Myblueprint', file, configFile, {
|
|
|
163
157
|
});
|
|
164
158
|
```
|
|
165
159
|
|
|
166
|
-
#
|
|
167
|
-
|
|
160
|
+
# Save Editing Examples (in JS/TS)
|
|
161
|
+
```js
|
|
162
|
+
import { SaveComponent, SaveEntity, StructArrayProperty, Int32Property, ObjectProperty, StrProperty, StructProperty, InventoryItemStructPropertyValue, DynamicStructPropertyValue } from '@etothepii/satisfactory-file-parser';
|
|
163
|
+
|
|
164
|
+
// method to overwrite save objects
|
|
165
|
+
// currently quite inefficient to loop through everything, so theres room to improve in a future version. Feel free to raise an issue.
|
|
166
|
+
const modifyObjects = (...modifiedObjects: (SaveEntity | SaveComponent)[]) => {
|
|
167
|
+
for (const modifiedObject of modifiedObjects) {
|
|
168
|
+
for (const level of save.levels) {
|
|
169
|
+
for (let i = 0; i < level.objects.length; i++) {
|
|
170
|
+
if (level.objects[i].instanceName === modifiedObject.instanceName) {
|
|
171
|
+
level.objects[i] = modifiedObject;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
168
177
|
|
|
169
|
-
|
|
178
|
+
const objects = save.levels.flatMap(level => level.objects);
|
|
179
|
+
const collectables = save.levels.flatMap(level => level.collectables);
|
|
180
|
+
```
|
|
170
181
|
|
|
171
|
-
|
|
172
|
-
|
|
182
|
+
## Example Print Hub Terminal Location
|
|
183
|
+
```js
|
|
184
|
+
// get hub terminals. Beware that filter returns a COPIED array and not the original objects.
|
|
185
|
+
const hubTerminals = objects.filter(obj => obj.typePath === '/Game/FactoryGame/Buildable/Factory/HubTerminal/Build_HubTerminal.Build_HubTerminal_C') as SaveEntity[];
|
|
186
|
+
const firstHubPosition = hubTerminals[0].transform.translation;
|
|
187
|
+
console.log(`Hub terminal is located at ${firstHubPosition.x}, ${firstHubPosition.y}, ${firstHubPosition.z}`);
|
|
188
|
+
```
|
|
173
189
|
|
|
174
|
-
|
|
190
|
+
## Example Modify Player Locations
|
|
191
|
+
```js
|
|
192
|
+
const players = objects.filter(obj => obj.typePath === '/Game/FactoryGame/Character/Player/Char_Player.Char_Player_C') as SaveEntity[];
|
|
193
|
+
for (const player of players) {
|
|
194
|
+
const name = (player.properties.mCachedPlayerName as StrProperty).value;
|
|
195
|
+
player.transform.translation = {
|
|
196
|
+
x: player.transform.translation.x + 5000,
|
|
197
|
+
y: player.transform.translation.y + 5000,
|
|
198
|
+
z: player.transform.translation.z,
|
|
199
|
+
}
|
|
200
|
+
console.log(`Player ${name} is now located at ${player.transform.translation.x}, ${player.transform.translation.y}, ${player.transform.translation.z}`);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// modify original save objects
|
|
204
|
+
modifyObjects(...players);
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Example Overwrite Item Stack in a Storage Container
|
|
208
|
+
```js
|
|
209
|
+
// get the first storage container, either mk1 or mk2.
|
|
210
|
+
const storageContainers = objects.filter(obj =>
|
|
211
|
+
obj.typePath === '/Game/FactoryGame/Buildable/Factory/StorageContainerMk1/Build_StorageContainerMk1.Build_StorageContainerMk1_C'
|
|
212
|
+
|| obj.typePath === '/Game/FactoryGame/Buildable/Factory/StorageContainerMk2/Build_StorageContainerMk2.Build_StorageContainerMk2_C'
|
|
213
|
+
);
|
|
214
|
+
const firstContainer = storageContainers[0];
|
|
215
|
+
|
|
216
|
+
// the container has a reference name to an inventory component.
|
|
217
|
+
const inventoryReference = firstContainer.properties.mStorageInventory as ObjectProperty;
|
|
218
|
+
const inventory = objects.find(obj => obj.instanceName === inventoryReference.value.pathName) as SaveComponent;
|
|
219
|
+
const inventoryStacks = inventory.properties.mInventoryStacks as StructArrayProperty;
|
|
220
|
+
const firstStack = inventoryStacks.values[0];
|
|
221
|
+
|
|
222
|
+
// Items within ItemStacks are quite nested. And StructProperties can basically be anything.
|
|
223
|
+
// overwrite first item stack with 5 Rotors.
|
|
224
|
+
(((firstStack.value as DynamicStructPropertyValue).properties.Item as StructProperty).value as InventoryItemStructPropertyValue).itemName = '/Game/FactoryGame/Resource/Parts/Rotor/Desc_Rotor.Desc_Rotor_C';
|
|
225
|
+
((firstStack.value as DynamicStructPropertyValue).properties.NumItems as Int32Property).value = 5;
|
|
226
|
+
|
|
227
|
+
// modify original save object
|
|
228
|
+
modifyObjects(firstContainer);
|
|
229
|
+
```
|
|
230
|
+
# [Auto-Generated TypeDoc Reference](https://rawcdn.githack.com/etothepii4/satisfactory-file-parser/tree/main/docs/index.html).
|
|
175
231
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
in the Software without restriction, including without limitation the rights
|
|
179
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
180
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
181
|
-
furnished to do so, subject to the following conditions:
|
|
232
|
+
# [Basic Guide](https://github.com/etothepii4/satisfactory-file-parser/blob/main/GUIDE.md).
|
|
233
|
+
More detailed explanation of some basic things in the parser.
|
|
182
234
|
|
|
183
|
-
|
|
184
|
-
copies or substantial portions of the Software.
|
|
235
|
+
# [Changelog](https://github.com/etothepii4/satisfactory-file-parser/blob/main/CHANGELOG.md)
|
|
185
236
|
|
|
186
|
-
|
|
187
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
188
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
189
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
190
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
191
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
192
|
-
SOFTWARE.
|
|
237
|
+
# [Licence](https://github.com/etothepii4/satisfactory-file-parser/blob/main/LICENCE.md)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint-reader.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-reader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAmB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,UAAU,EAAgB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"blueprint-reader.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-reader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAmB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,UAAU,EAAgB,MAAM,6BAA6B,CAAC;AAKvE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAErE,qBAAa,eAAgB,SAAQ,UAAU;IAEvC,eAAe,EAAE,oBAAoB,CAI1C;gBAEU,eAAe,EAAE,WAAW;WAI1B,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe;IA+B1D,aAAa,IAAI,GAAG;WA6Eb,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE;IAmB9E,OAAO,CAAC,MAAM,CAAC,2BAA2B;CAmB1C;AAED,qBAAa,qBAAsB,SAAQ,UAAU;IAEjC,qBAAqB,EAAE,WAAW;gBAAlC,qBAAqB,EAAE,WAAW;IAI9C,KAAK,QAAO,eAAe,CAA4C;WAEhE,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe;CAoBlE"}
|
|
@@ -13,6 +13,7 @@ const save_reader_1 = require("../save/save-reader");
|
|
|
13
13
|
const SaveComponent_1 = require("../types/objects/SaveComponent");
|
|
14
14
|
const SaveEntity_1 = require("../types/objects/SaveEntity");
|
|
15
15
|
const col4_1 = require("../types/structs/col4");
|
|
16
|
+
const ObjectReference_1 = require("../types/structs/ObjectReference");
|
|
16
17
|
const vec3_1 = require("../types/structs/vec3");
|
|
17
18
|
class BlueprintReader extends byte_reader_class_1.ByteReader {
|
|
18
19
|
constructor(bluePrintBuffer) {
|
|
@@ -28,18 +29,16 @@ class BlueprintReader extends byte_reader_class_1.ByteReader {
|
|
|
28
29
|
const objectVersion = reader.readBytes(2 * 4);
|
|
29
30
|
const dimensions = vec3_1.vec3.ParseInt(reader);
|
|
30
31
|
let itemTypeCount = reader.readInt32();
|
|
31
|
-
const itemCosts = new Array(itemTypeCount).fill(['', 0]);
|
|
32
|
+
const itemCosts = new Array(itemTypeCount).fill([{ levelName: '', pathName: '' }, 0]);
|
|
32
33
|
for (let i = 0; i < itemTypeCount; i++) {
|
|
33
|
-
|
|
34
|
-
let itemPathName = reader.readString();
|
|
34
|
+
let itemPathName = ObjectReference_1.ObjectReference.read(reader);
|
|
35
35
|
let itemCount = reader.readInt32();
|
|
36
36
|
itemCosts[i] = [itemPathName, itemCount];
|
|
37
37
|
}
|
|
38
38
|
let recipeCount = reader.readInt32();
|
|
39
|
-
const recipeRefs = new Array(recipeCount).fill('');
|
|
39
|
+
const recipeRefs = new Array(recipeCount).fill({ levelName: '', pathName: '' });
|
|
40
40
|
for (let i = 0; i < recipeCount; i++) {
|
|
41
|
-
|
|
42
|
-
const recipeName = reader.readString();
|
|
41
|
+
const recipeName = ObjectReference_1.ObjectReference.read(reader);
|
|
43
42
|
recipeRefs[i] = recipeName;
|
|
44
43
|
}
|
|
45
44
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint-reader.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-reader.ts"],"names":[],"mappings":"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","sourcesContent":["import Pako from \"pako\";\nimport { Alignment } from \"../../byte/alignment.enum\";\nimport { BinaryReadable } from \"../../byte/binary-readable.interface\";\nimport { ByteReader } from \"../../byte/byte-reader.class\";\nimport { CorruptSaveError, ParserError } from \"../../error/parser.error\";\nimport { ChunkCompressionInfo } from \"../../file.types\";\nimport { Level } from '../save/level.class';\nimport { DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE } from \"../save/save-reader\";\nimport { SaveComponent, isSaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity, isSaveEntity } from \"../types/objects/SaveEntity\";\nimport { SaveObject } from \"../types/objects/SaveObject\";\nimport { col4 } from '../types/structs/col4';\nimport { vec3 } from '../types/structs/vec3';\nimport { BlueprintConfig, BlueprintHeader } from \"./blueprint.types\";\n\nexport class BlueprintReader extends ByteReader {\n\n\tpublic compressionInfo: ChunkCompressionInfo = {\n\t\tpackageFileTag: 0,\n\t\tmaxUncompressedChunkContentSize: 0,\n\t\tchunkHeaderSize: DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE\n\t};\n\n\tconstructor(bluePrintBuffer: ArrayBuffer) {\n\t\tsuper(bluePrintBuffer, Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic static ReadHeader(reader: BinaryReadable): BlueprintHeader {\n\t\tconst alwaysTwo = reader.readBytes(4); // 02 00 00 00 - always\n\t\tconst objectVersion = reader.readBytes(2 * 4); // 24 00 00 00, 7F 3B 03 00 - varies over updates - in 1.0 it's 46 and 0x7A960500.\n\t\tconst dimensions = vec3.ParseInt(reader); // 04 00 00 00, 04 00 00 00, 04 00 00 00 - dimensions in foundation size\n\n\n\t\t// list of item costs.\n\t\tlet itemTypeCount = reader.readInt32();\n\t\tconst itemCosts = new Array<[string, number]>(itemTypeCount).fill(['', 0]);\n\t\tfor (let i = 0; i < itemTypeCount; i++) {\n\t\t\treader.readInt32();\t// 0\n\t\t\tlet itemPathName = reader.readString();\n\t\t\tlet itemCount = reader.readInt32();\n\n\t\t\titemCosts[i] = [itemPathName, itemCount];\n\t\t}\n\n\t\t// list of recipes\n\t\tlet recipeCount = reader.readInt32();\n\t\tconst recipeRefs = new Array<string>(recipeCount).fill('');\n\t\tfor (let i = 0; i < recipeCount; i++) {\n\t\t\treader.readInt32();\t// 0\n\t\t\tconst recipeName = reader.readString();\n\t\t\trecipeRefs[i] = recipeName;\n\t\t}\n\n\t\treturn {\n\t\t\tdesignerDimension: dimensions,\n\t\t\trecipeReferences: recipeRefs,\n\t\t\titemCosts\n\t\t};\n\t}\n\n\tpublic inflateChunks(): any {\n\n\t\t// free memory\n\t\tthis.fileBuffer = this.fileBuffer.slice(this.currentByte);\n\n\t\tthis.handledByte = 0;\n\t\tthis.currentByte = 0;\n\t\tthis.maxByte = this.fileBuffer.byteLength;\n\n\t\tlet currentChunks = [];\n\t\tlet totalUncompressedBodySize = 0;\n\n\t\t// read while we can handle\n\t\twhile (this.handledByte < this.maxByte) {\n\n\t\t\t// Read chunk info size...\n\t\t\tlet chunkHeader = new DataView(this.fileBuffer.slice(0, this.compressionInfo.chunkHeaderSize));\n\t\t\tthis.currentByte = this.compressionInfo.chunkHeaderSize;\n\t\t\tthis.handledByte += this.compressionInfo.chunkHeaderSize;\n\n\t\t\tif (this.compressionInfo.packageFileTag <= 0) {\n\t\t\t\tthis.compressionInfo.packageFileTag = chunkHeader.getUint32(0, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\t}\n\t\t\tif (this.compressionInfo.maxUncompressedChunkContentSize <= 0) {\n\t\t\t\tthis.compressionInfo.maxUncompressedChunkContentSize = chunkHeader.getInt32(8, this.alignment === Alignment.LITTLE_ENDIAN); //00 00 02 00 = 131072\n\t\t\t}\n\n\t\t\tconst chunkCompressedLength = chunkHeader.getInt32(33, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\tconst chunkUncompressedLength = chunkHeader.getInt32(25, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\ttotalUncompressedBodySize += chunkUncompressedLength;\n\n\n\t\t\tconst currentChunkSize = chunkCompressedLength;\n\t\t\tlet currentChunk = this.fileBuffer.slice(this.currentByte, this.currentByte + currentChunkSize);\n\t\t\tthis.handledByte += currentChunkSize;\n\t\t\tthis.currentByte += currentChunkSize;\n\n\n\t\t\t// Free memory from previous chunk...\n\t\t\tthis.fileBuffer = this.fileBuffer.slice(this.currentByte);\n\t\t\tthis.currentByte = 0;\n\n\t\t\ttry {\n\t\t\t\t// Inflate current chunk\n\t\t\t\tlet currentInflatedChunk = null;\n\t\t\t\tcurrentInflatedChunk = Pako.inflate(currentChunk);\n\t\t\t\tcurrentChunks.push(currentInflatedChunk);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthrow new ParserError('ParserError', 'An error occurred while calling pako inflate.' + err);\n\t\t\t}\n\t\t}\n\n\n\t\t//TODO we can get rid of file buffer here.\n\n\t\t// Create one big chunk out of the little chunks\n\t\tlet newChunkLength = currentChunks.map<number>(cc => cc.length).reduce((prev, cur) => prev + cur);\n\t\tconst bigWholeChunk = new Uint8Array(newChunkLength);\n\t\tlet currentLength = 0;\n\t\tfor (let i = 0; i < currentChunks.length; i++) {\n\t\t\tbigWholeChunk.set(currentChunks[i], currentLength);\n\t\t\tcurrentLength += currentChunks[i].length;\n\t\t}\n\n\t\t// reset reader on this body content.\n\t\tthis.currentByte = 0;\n\t\tthis.maxByte = bigWholeChunk.buffer.byteLength;\n\t\tthis.bufferView = new DataView(bigWholeChunk.buffer);\n\n\t\treturn {\n\t\t\tnewChunkLength,\n\t\t\tnumChunks: currentChunks.length,\n\t\t\tinflatedData: bigWholeChunk\n\t\t};\n\t}\n\n\tpublic static ParseObjects(reader: ByteReader): (SaveEntity | SaveComponent)[] {\n\n\t\tconst totalBodyRestSize = reader.readInt32();\n\n\t\t// object headers\n\t\tconst objectHeadersBinarySize = reader.readInt32();\n\t\tlet objects: (SaveEntity | SaveComponent)[] = [];\n\t\tLevel.ReadAllObjectHeaders(reader, objects);\n\n\t\tconst someChecksumThing = reader.readInt32();\n\n\t\t// objects contents\n\t\tBlueprintReader.ReadBlueprintObjectContents(reader, objects, 0);\n\n\t\treader.getBufferPosition();\n\n\t\treturn objects;\n\t}\n\n\tprivate static ReadBlueprintObjectContents(reader: BinaryReadable, objectsList: SaveObject[], buildVersion: number): void {\n\t\tconst countEntities = reader.readInt32();\n\t\tfor (let i = 0; i < countEntities; i++) {\n\n\t\t\t// binary length\n\t\t\tconst len = reader.readInt32();\n\t\t\tif (len === 0) {\n\t\t\t\tthrow new CorruptSaveError(`check number is a wrong value (${len}). This normally indicates a corrupt entity or blueprint.`);\n\t\t\t}\n\n\t\t\tconst obj = objectsList[i];\n\t\t\tif (isSaveEntity(obj)) {\n\t\t\t\tSaveEntity.ParseData(obj, len, reader, buildVersion, obj.typePath);\n\t\t\t} else if (isSaveComponent(obj)) {\n\t\t\t\tSaveComponent.ParseData(obj, len, reader, buildVersion, obj.typePath);\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nexport class BlueprintConfigReader extends ByteReader {\n\n\tconstructor(public bluePrintConfigBuffer: ArrayBuffer) {\n\t\tsuper(bluePrintConfigBuffer, Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic parse = (): BlueprintConfig => BlueprintConfigReader.ParseConfig(this);\n\n\tpublic static ParseConfig(reader: BinaryReadable): BlueprintConfig {\n\t\tconst alwaysTwo = reader.readInt32();\n\t\tconst description = reader.readString();\n\t\tconst iconID = reader.readInt32();\n\t\tconst color = col4.ParseRGBA(reader);\n\n\t\tconst config: BlueprintConfig = {\n\t\t\tdescription,\n\t\t\tcolor,\n\t\t\ticonID,\n\t\t};\n\n\t\t// since 1.0, created blueprints have those two strings\n\t\tif (reader.getBufferPosition() < reader.getBufferLength()) {\n\t\t\tconfig.referencedIconLibrary = reader.readString();\n\t\t\tconfig.iconLibraryType = reader.readString();\n\t\t}\n\n\t\treturn config;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"blueprint-reader.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-reader.ts"],"names":[],"mappings":"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","sourcesContent":["import Pako from \"pako\";\nimport { Alignment } from \"../../byte/alignment.enum\";\nimport { BinaryReadable } from \"../../byte/binary-readable.interface\";\nimport { ByteReader } from \"../../byte/byte-reader.class\";\nimport { CorruptSaveError, ParserError } from \"../../error/parser.error\";\nimport { ChunkCompressionInfo } from \"../../file.types\";\nimport { Level } from '../save/level.class';\nimport { DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE } from \"../save/save-reader\";\nimport { SaveComponent, isSaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity, isSaveEntity } from \"../types/objects/SaveEntity\";\nimport { SaveObject } from \"../types/objects/SaveObject\";\nimport { col4 } from '../types/structs/col4';\nimport { ObjectReference } from '../types/structs/ObjectReference';\nimport { vec3 } from '../types/structs/vec3';\nimport { BlueprintConfig, BlueprintHeader } from \"./blueprint.types\";\n\nexport class BlueprintReader extends ByteReader {\n\n\tpublic compressionInfo: ChunkCompressionInfo = {\n\t\tpackageFileTag: 0,\n\t\tmaxUncompressedChunkContentSize: 0,\n\t\tchunkHeaderSize: DEFAULT_SATISFACTORY_CHUNK_HEADER_SIZE\n\t};\n\n\tconstructor(bluePrintBuffer: ArrayBuffer) {\n\t\tsuper(bluePrintBuffer, Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic static ReadHeader(reader: BinaryReadable): BlueprintHeader {\n\t\tconst alwaysTwo = reader.readBytes(4); // 02 00 00 00 - always\n\t\tconst objectVersion = reader.readBytes(2 * 4); // 24 00 00 00, 7F 3B 03 00 - varies over updates - in 1.0 it's 46 and 0x7A960500.\n\t\tconst dimensions = vec3.ParseInt(reader); // 04 00 00 00, 04 00 00 00, 04 00 00 00 - dimensions in foundation size\n\n\n\t\t// list of item costs.\n\t\tlet itemTypeCount = reader.readInt32();\n\t\tconst itemCosts = new Array<[ObjectReference, number]>(itemTypeCount).fill([{ levelName: '', pathName: '' }, 0]);\n\t\tfor (let i = 0; i < itemTypeCount; i++) {\n\t\t\tlet itemPathName = ObjectReference.read(reader);\n\t\t\tlet itemCount = reader.readInt32();\n\n\t\t\titemCosts[i] = [itemPathName, itemCount];\n\t\t}\n\n\t\t// list of recipes\n\t\tlet recipeCount = reader.readInt32();\n\t\tconst recipeRefs = new Array<ObjectReference>(recipeCount).fill({ levelName: '', pathName: '' });\n\t\tfor (let i = 0; i < recipeCount; i++) {\n\t\t\tconst recipeName = ObjectReference.read(reader);\n\t\t\trecipeRefs[i] = recipeName;\n\t\t}\n\n\t\treturn {\n\t\t\tdesignerDimension: dimensions,\n\t\t\trecipeReferences: recipeRefs,\n\t\t\titemCosts\n\t\t};\n\t}\n\n\tpublic inflateChunks(): any {\n\n\t\t// free memory\n\t\tthis.fileBuffer = this.fileBuffer.slice(this.currentByte);\n\n\t\tthis.handledByte = 0;\n\t\tthis.currentByte = 0;\n\t\tthis.maxByte = this.fileBuffer.byteLength;\n\n\t\tlet currentChunks = [];\n\t\tlet totalUncompressedBodySize = 0;\n\n\t\t// read while we can handle\n\t\twhile (this.handledByte < this.maxByte) {\n\n\t\t\t// Read chunk info size...\n\t\t\tlet chunkHeader = new DataView(this.fileBuffer.slice(0, this.compressionInfo.chunkHeaderSize));\n\t\t\tthis.currentByte = this.compressionInfo.chunkHeaderSize;\n\t\t\tthis.handledByte += this.compressionInfo.chunkHeaderSize;\n\n\t\t\tif (this.compressionInfo.packageFileTag <= 0) {\n\t\t\t\tthis.compressionInfo.packageFileTag = chunkHeader.getUint32(0, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\t}\n\t\t\tif (this.compressionInfo.maxUncompressedChunkContentSize <= 0) {\n\t\t\t\tthis.compressionInfo.maxUncompressedChunkContentSize = chunkHeader.getInt32(8, this.alignment === Alignment.LITTLE_ENDIAN); //00 00 02 00 = 131072\n\t\t\t}\n\n\t\t\tconst chunkCompressedLength = chunkHeader.getInt32(33, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\tconst chunkUncompressedLength = chunkHeader.getInt32(25, this.alignment === Alignment.LITTLE_ENDIAN);\n\t\t\ttotalUncompressedBodySize += chunkUncompressedLength;\n\n\n\t\t\tconst currentChunkSize = chunkCompressedLength;\n\t\t\tlet currentChunk = this.fileBuffer.slice(this.currentByte, this.currentByte + currentChunkSize);\n\t\t\tthis.handledByte += currentChunkSize;\n\t\t\tthis.currentByte += currentChunkSize;\n\n\n\t\t\t// Free memory from previous chunk...\n\t\t\tthis.fileBuffer = this.fileBuffer.slice(this.currentByte);\n\t\t\tthis.currentByte = 0;\n\n\t\t\ttry {\n\t\t\t\t// Inflate current chunk\n\t\t\t\tlet currentInflatedChunk = null;\n\t\t\t\tcurrentInflatedChunk = Pako.inflate(currentChunk);\n\t\t\t\tcurrentChunks.push(currentInflatedChunk);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthrow new ParserError('ParserError', 'An error occurred while calling pako inflate.' + err);\n\t\t\t}\n\t\t}\n\n\n\t\t//TODO we can get rid of file buffer here.\n\n\t\t// Create one big chunk out of the little chunks\n\t\tlet newChunkLength = currentChunks.map<number>(cc => cc.length).reduce((prev, cur) => prev + cur);\n\t\tconst bigWholeChunk = new Uint8Array(newChunkLength);\n\t\tlet currentLength = 0;\n\t\tfor (let i = 0; i < currentChunks.length; i++) {\n\t\t\tbigWholeChunk.set(currentChunks[i], currentLength);\n\t\t\tcurrentLength += currentChunks[i].length;\n\t\t}\n\n\t\t// reset reader on this body content.\n\t\tthis.currentByte = 0;\n\t\tthis.maxByte = bigWholeChunk.buffer.byteLength;\n\t\tthis.bufferView = new DataView(bigWholeChunk.buffer);\n\n\t\treturn {\n\t\t\tnewChunkLength,\n\t\t\tnumChunks: currentChunks.length,\n\t\t\tinflatedData: bigWholeChunk\n\t\t};\n\t}\n\n\tpublic static ParseObjects(reader: ByteReader): (SaveEntity | SaveComponent)[] {\n\n\t\tconst totalBodyRestSize = reader.readInt32();\n\n\t\t// object headers\n\t\tconst objectHeadersBinarySize = reader.readInt32();\n\t\tlet objects: (SaveEntity | SaveComponent)[] = [];\n\t\tLevel.ReadAllObjectHeaders(reader, objects);\n\n\t\tconst someChecksumThing = reader.readInt32();\n\n\t\t// objects contents\n\t\tBlueprintReader.ReadBlueprintObjectContents(reader, objects, 0);\n\n\t\treader.getBufferPosition();\n\n\t\treturn objects;\n\t}\n\n\tprivate static ReadBlueprintObjectContents(reader: BinaryReadable, objectsList: SaveObject[], buildVersion: number): void {\n\t\tconst countEntities = reader.readInt32();\n\t\tfor (let i = 0; i < countEntities; i++) {\n\n\t\t\t// binary length\n\t\t\tconst len = reader.readInt32();\n\t\t\tif (len === 0) {\n\t\t\t\tthrow new CorruptSaveError(`check number is a wrong value (${len}). This normally indicates a corrupt entity or blueprint.`);\n\t\t\t}\n\n\t\t\tconst obj = objectsList[i];\n\t\t\tif (isSaveEntity(obj)) {\n\t\t\t\tSaveEntity.ParseData(obj, len, reader, buildVersion, obj.typePath);\n\t\t\t} else if (isSaveComponent(obj)) {\n\t\t\t\tSaveComponent.ParseData(obj, len, reader, buildVersion, obj.typePath);\n\t\t\t}\n\t\t}\n\t}\n\n}\n\nexport class BlueprintConfigReader extends ByteReader {\n\n\tconstructor(public bluePrintConfigBuffer: ArrayBuffer) {\n\t\tsuper(bluePrintConfigBuffer, Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic parse = (): BlueprintConfig => BlueprintConfigReader.ParseConfig(this);\n\n\tpublic static ParseConfig(reader: BinaryReadable): BlueprintConfig {\n\t\tconst alwaysTwo = reader.readInt32();\n\t\tconst description = reader.readString();\n\t\tconst iconID = reader.readInt32();\n\t\tconst color = col4.ParseRGBA(reader);\n\n\t\tconst config: BlueprintConfig = {\n\t\t\tdescription,\n\t\t\tcolor,\n\t\t\ticonID,\n\t\t};\n\n\t\t// since 1.0, created blueprints have those two strings\n\t\tif (reader.getBufferPosition() < reader.getBufferLength()) {\n\t\t\tconfig.referencedIconLibrary = reader.readString();\n\t\t\tconfig.iconLibraryType = reader.readString();\n\t\t}\n\n\t\treturn config;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint-writer.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-writer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAAE,aAAa,EAAmB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,UAAU,EAAgB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"blueprint-writer.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-writer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EAAE,aAAa,EAAmB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,UAAU,EAAgB,MAAM,6BAA6B,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIrE,qBAAa,eAAgB,SAAQ,UAAU;;WAMhC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IA8BzE,cAAc,CACpB,eAAe,EAAE,oBAAoB,EACrC,cAAc,EAAE,MAAM,EAEtB,OAAO,EAAE,OAAO,CAAC;QAChB,yBAAyB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;QACzD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;QACvC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;KACrC,CAAC,GACA,YAAY,EAAE;WAkBH,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE,GAAG,IAAI;WAYnF,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAoBjJ;AAED,qBAAa,qBAAsB,SAAQ,UAAU;;WAMtC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;CAQhF"}
|
|
@@ -9,6 +9,7 @@ const save_writer_1 = require("../save/save-writer");
|
|
|
9
9
|
const SaveComponent_1 = require("../types/objects/SaveComponent");
|
|
10
10
|
const SaveEntity_1 = require("../types/objects/SaveEntity");
|
|
11
11
|
const col4_1 = require("../types/structs/col4");
|
|
12
|
+
const ObjectReference_1 = require("../types/structs/ObjectReference");
|
|
12
13
|
class BlueprintWriter extends byte_writer_class_1.ByteWriter {
|
|
13
14
|
constructor() {
|
|
14
15
|
super(alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
@@ -27,14 +28,12 @@ class BlueprintWriter extends byte_writer_class_1.ByteWriter {
|
|
|
27
28
|
writer.writeInt32(dimensions[2]);
|
|
28
29
|
writer.writeInt32(header.itemCosts.length);
|
|
29
30
|
for (const itemCost of header.itemCosts) {
|
|
30
|
-
|
|
31
|
-
writer.writeString(itemCost[0]);
|
|
31
|
+
ObjectReference_1.ObjectReference.write(writer, itemCost[0]);
|
|
32
32
|
writer.writeInt32(itemCost[1]);
|
|
33
33
|
}
|
|
34
34
|
writer.writeInt32(header.recipeReferences.length);
|
|
35
35
|
for (const recipeReference of header.recipeReferences) {
|
|
36
|
-
|
|
37
|
-
writer.writeString(recipeReference);
|
|
36
|
+
ObjectReference_1.ObjectReference.write(writer, recipeReference);
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
39
|
generateChunks(compressionInfo, posAfterHeader, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint-writer.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-writer.ts"],"names":[],"mappings":";;;AAAA,8DAAsD;AACtD,oEAA0D;AAC1D,2DAAuD;AAEvD,qDAA4C;AAC5C,qDAAiD;AACjD,kEAAgF;AAChF,4DAAuE;AACvE,gDAA6C;
|
|
1
|
+
{"version":3,"file":"blueprint-writer.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint-writer.ts"],"names":[],"mappings":";;;AAAA,8DAAsD;AACtD,oEAA0D;AAC1D,2DAAuD;AAEvD,qDAA4C;AAC5C,qDAAiD;AACjD,kEAAgF;AAChF,4DAAuE;AACvE,gDAA6C;AAC7C,sEAAmE;AAKnE,MAAa,eAAgB,SAAQ,8BAAU;IAE9C;QACC,KAAK,CAAC,0BAAS,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,MAAkB,EAAE,MAAuB;QACxE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,UAAU,GAAG;YAChB,MAAM,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC;YAChC,MAAM,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC;YAChC,MAAM,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC;SAChC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAGhC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAGjC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACzC,iCAAe,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1C,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QAGD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAClD,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACvD,iCAAe,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;IAEM,cAAc,CACpB,eAAqC,EACrC,cAAsB,EAEtB,OAIE;QAGF,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,0BAAW,CAAC,aAAa,EAAE,qGAAqG,CAAC,CAAC;QAC7I,CAAC;QAGD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;QACzE,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAGD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,wBAAU,CAAC,gCAAgC,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,yBAAyB,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtM,OAAO,YAAY,CAAC;IACrB,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,MAAkB,EAAE,OAAuC;QAGzF,MAAM,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACvD,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,mBAAK,CAAC,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,2BAA2B,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,CAAC,CAAC,CAAC;QAGjF,eAAe,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAEM,MAAM,CAAC,uBAAuB,CAAC,MAAkB,EAAE,OAAuC,EAAE,YAAoB,EAAE,SAAiB;QACzI,MAAM,oBAAoB,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACxD,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAErB,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAE3B,MAAM,sBAAsB,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC1D,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAErB,IAAI,IAAA,yBAAY,EAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,uBAAU,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,IAAA,+BAAe,EAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,6BAAa,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,CAAC,2BAA2B,CAAC,sBAAsB,EAAE,sBAAsB,GAAG,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,CAAC,2BAA2B,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,CAAC,CAAC,CAAC;IACpF,CAAC;CACD;AA/FD,0CA+FC;AAED,MAAa,qBAAsB,SAAQ,8BAAU;IAEpD;QACC,KAAK,CAAC,0BAAS,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,MAAkB,EAAE,MAAuB;QACxE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,WAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;CACD;AAdD,sDAcC","sourcesContent":["import { Alignment } from \"../../byte/alignment.enum\";\nimport { ByteWriter } from \"../../byte/byte-writer.class\";\nimport { ParserError } from \"../../error/parser.error\";\nimport { ChunkCompressionInfo, ChunkSummary } from \"../../file.types\";\nimport { Level } from '../save/level.class';\nimport { SaveWriter } from \"../save/save-writer\";\nimport { SaveComponent, isSaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity, isSaveEntity } from \"../types/objects/SaveEntity\";\nimport { col4 } from '../types/structs/col4';\nimport { ObjectReference } from '../types/structs/ObjectReference';\nimport { BlueprintConfig, BlueprintHeader } from \"./blueprint.types\";\n\n\n\nexport class BlueprintWriter extends ByteWriter {\n\n\tconstructor() {\n\t\tsuper(Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic static SerializeHeader(writer: ByteWriter, header: BlueprintHeader): void {\n\t\twriter.writeInt32(2); // 2\n\t\twriter.writeInt32(46); // TODO - changes with game updates. object version. - 46 in 1.0\n\t\twriter.writeInt32(366202); // TODO - some header build version? changes with game updates. // 0xECCF0300 // 0xE6060400 //0x7A960500 in 1.0\n\n\t\tlet dimensions = [\n\t\t\theader.designerDimension?.x ?? 4,\n\t\t\theader.designerDimension?.y ?? 4,\n\t\t\theader.designerDimension?.z ?? 4,\n\t\t].map(dim => dim < 4 ? 4 : dim); // dont let smaller values than 4 slip through.\n\n\t\t// designer dimensions in foundations.\n\t\twriter.writeInt32(dimensions[0]);\n\t\twriter.writeInt32(dimensions[1]);\n\t\twriter.writeInt32(dimensions[2]);\n\n\t\t// list of item costs.\n\t\twriter.writeInt32(header.itemCosts.length);\n\t\tfor (const itemCost of header.itemCosts) {\n\t\t\tObjectReference.write(writer, itemCost[0])\n\t\t\twriter.writeInt32(itemCost[1]);\n\t\t}\n\n\t\t// list of recipes.\n\t\twriter.writeInt32(header.recipeReferences.length);\n\t\tfor (const recipeReference of header.recipeReferences) {\n\t\t\tObjectReference.write(writer, recipeReference);\n\t\t}\n\t}\n\n\tpublic generateChunks(\n\t\tcompressionInfo: ChunkCompressionInfo,\n\t\tposAfterHeader: number,\n\n\t\toptions: Partial<{\n\t\t\tonBinaryBeforeCompressing: (binary: ArrayBuffer) => void,\n\t\t\tonHeader: (header: Uint8Array) => void,\n\t\t\tonChunk: (chunk: Uint8Array) => void,\n\t\t}>\n\t): ChunkSummary[] {\n\n\t\tif (posAfterHeader <= 0) {\n\t\t\tthrow new ParserError('ParserError', 'seems like this buffer has no header. Please write the header first before you can generate chunks.');\n\t\t}\n\n\t\t// send plain header first.\n\t\tconst header = new Uint8Array(this.bufferArray.slice(0, posAfterHeader));\n\t\tif (options.onHeader !== undefined) {\n\t\t\toptions.onHeader(header);\n\t\t}\n\n\t\t// create save body\n\t\tthis.bufferArray = this.bufferArray.slice(posAfterHeader);\n\t\tconst chunkSummary = SaveWriter.GenerateCompressedChunksFromData(this.bufferArray, compressionInfo, options.onBinaryBeforeCompressing ?? (() => { }), options.onChunk ?? (() => { }), this.alignment);\n\t\treturn chunkSummary;\n\t}\n\n\tpublic static SerializeObjects(writer: ByteWriter, objects: (SaveEntity | SaveComponent)[]): void {\n\n\t\t// object headers\n\t\tconst headersLenIndicator = writer.getBufferPosition();\n\t\twriter.writeInt32(0);\n\t\tLevel.SerializeAllObjectHeaders(writer, objects);\n\t\twriter.writeBinarySizeFromPosition(headersLenIndicator, headersLenIndicator + 4);\n\n\t\t// objects contents\n\t\tBlueprintWriter.SerializeObjectContents(writer, objects, 0, '');\n\t}\n\n\tpublic static SerializeObjectContents(writer: ByteWriter, objects: (SaveEntity | SaveComponent)[], buildVersion: number, levelName: string): void {\n\t\tconst lenIndicatorEntities = writer.getBufferPosition();\n\t\twriter.writeInt32(0);\n\n\t\twriter.writeInt32(objects.length);\n\t\tfor (const obj of objects) {\n\n\t\t\tconst lenReplacementPosition = writer.getBufferPosition();\n\t\t\twriter.writeInt32(0);\n\n\t\t\tif (isSaveEntity(obj)) {\n\t\t\t\tSaveEntity.SerializeData(writer, obj, buildVersion);\n\t\t\t} else if (isSaveComponent(obj)) {\n\t\t\t\tSaveComponent.SerializeData(writer, obj, buildVersion);\n\t\t\t}\n\n\t\t\twriter.writeBinarySizeFromPosition(lenReplacementPosition, lenReplacementPosition + 4);\n\t\t}\n\t\twriter.writeBinarySizeFromPosition(lenIndicatorEntities, lenIndicatorEntities + 4);\n\t}\n}\n\nexport class BlueprintConfigWriter extends ByteWriter {\n\n\tconstructor() {\n\t\tsuper(Alignment.LITTLE_ENDIAN);\n\t}\n\n\tpublic static SerializeConfig(writer: ByteWriter, config: BlueprintConfig): void {\n\t\twriter.writeInt32(2); // unknown, seems to always be 02.\n\t\twriter.writeString(config.description);\n\t\twriter.writeInt32(config.iconID);\n\t\tcol4.SerializeRGBA(writer, config.color);\n\t\twriter.writeString(config.referencedIconLibrary ?? '');\n\t\twriter.writeString(config.iconLibraryType ?? '');\n\t}\n}"]}
|
|
@@ -2,6 +2,7 @@ import { ChunkCompressionInfo } from "../../file.types";
|
|
|
2
2
|
import { SaveComponent } from "../types/objects/SaveComponent";
|
|
3
3
|
import { SaveEntity } from "../types/objects/SaveEntity";
|
|
4
4
|
import { col4 } from '../types/structs/col4';
|
|
5
|
+
import { ObjectReference } from '../types/structs/ObjectReference';
|
|
5
6
|
import { vec3 } from '../types/structs/vec3';
|
|
6
7
|
export interface BlueprintConfig {
|
|
7
8
|
description: string;
|
|
@@ -12,8 +13,8 @@ export interface BlueprintConfig {
|
|
|
12
13
|
}
|
|
13
14
|
export type BlueprintHeader = {
|
|
14
15
|
designerDimension?: vec3;
|
|
15
|
-
itemCosts: [
|
|
16
|
-
recipeReferences:
|
|
16
|
+
itemCosts: [ObjectReference, number][];
|
|
17
|
+
recipeReferences: ObjectReference[];
|
|
17
18
|
};
|
|
18
19
|
export interface Blueprint {
|
|
19
20
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint.types.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAG7C,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,MAAM,eAAe,GAAG;IAC1B,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,SAAS,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"blueprint.types.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAG7C,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,MAAM,eAAe,GAAG;IAC1B,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,SAAS,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;IACvC,gBAAgB,EAAE,eAAe,EAAE,CAAC;CACvC,CAAA;AAGD,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,oBAAoB,CAAC;IACtC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE,CAAC;CAC3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint.types.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint.types.ts"],"names":[],"mappings":"","sourcesContent":["import { ChunkCompressionInfo } from \"../../file.types\";\nimport { SaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity } from \"../types/objects/SaveEntity\";\nimport { col4 } from '../types/structs/col4';\nimport { vec3 } from '../types/structs/vec3';\n\n/** @public */\nexport interface BlueprintConfig {\n description: string;\n color: col4;\n iconID: number;\n referencedIconLibrary?: string;\n iconLibraryType?: string;\n}\n\n/** @public */\nexport type BlueprintHeader = {\n designerDimension?: vec3;\n itemCosts: [
|
|
1
|
+
{"version":3,"file":"blueprint.types.js","sourceRoot":"","sources":["../../../../src/parser/satisfactory/blueprint/blueprint.types.ts"],"names":[],"mappings":"","sourcesContent":["import { ChunkCompressionInfo } from \"../../file.types\";\nimport { SaveComponent } from \"../types/objects/SaveComponent\";\nimport { SaveEntity } from \"../types/objects/SaveEntity\";\nimport { col4 } from '../types/structs/col4';\nimport { ObjectReference } from '../types/structs/ObjectReference';\nimport { vec3 } from '../types/structs/vec3';\n\n/** @public */\nexport interface BlueprintConfig {\n description: string;\n color: col4;\n iconID: number;\n referencedIconLibrary?: string;\n iconLibraryType?: string;\n}\n\n/** @public */\nexport type BlueprintHeader = {\n designerDimension?: vec3;\n itemCosts: [ObjectReference, number][];\n recipeReferences: ObjectReference[];\n}\n\n/** @public */\nexport interface Blueprint {\n name: string;\n compressionInfo: ChunkCompressionInfo;\n header: BlueprintHeader;\n config: BlueprintConfig;\n objects: (SaveEntity | SaveComponent)[];\n}\n"]}
|
|
@@ -1698,6 +1698,10 @@ export declare const EDIT: {
|
|
|
1698
1698
|
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/DroneStation/BP_DroneTransport.BP_DroneTransport_C";
|
|
1699
1699
|
};
|
|
1700
1700
|
};
|
|
1701
|
+
readonly DROP_POD: {
|
|
1702
|
+
readonly TYPE_PATH: "/Game/FactoryGame/World/Benefit/DropPod/BP_DropPod.BP_DropPod_C";
|
|
1703
|
+
readonly CLASS_NAME: "BP_DropPod_C";
|
|
1704
|
+
};
|
|
1701
1705
|
readonly VEHICLE: {
|
|
1702
1706
|
readonly DRIVING_TARGET_LIST: {
|
|
1703
1707
|
readonly TYPE_PATH: "/Script/FactoryGame.FGDrivingTargetList";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit-constants.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/edit/edit-constants.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"edit-constants.d.ts","sourceRoot":"","sources":["../../../../src/parser/satisfactory/edit/edit-constants.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+zEP,CAAC"}
|
|
@@ -1704,6 +1704,10 @@ exports.EDIT = {
|
|
|
1704
1704
|
TYPE_PATH: '/Game/FactoryGame/Buildable/Factory/DroneStation/BP_DroneTransport.BP_DroneTransport_C'
|
|
1705
1705
|
},
|
|
1706
1706
|
},
|
|
1707
|
+
DROP_POD: {
|
|
1708
|
+
TYPE_PATH: '/Game/FactoryGame/World/Benefit/DropPod/BP_DropPod.BP_DropPod_C',
|
|
1709
|
+
CLASS_NAME: 'BP_DropPod_C'
|
|
1710
|
+
},
|
|
1707
1711
|
VEHICLE: {
|
|
1708
1712
|
DRIVING_TARGET_LIST: {
|
|
1709
1713
|
TYPE_PATH: '/Script/FactoryGame.FGDrivingTargetList'
|