@etothepii/satisfactory-file-parser 0.1.11 → 0.1.13
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/README.md +2 -2
- package/build/parser/satisfactory/blueprint/blueprint-reader.js +3 -3
- package/build/parser/satisfactory/blueprint/blueprint-writer.js +2 -2
- package/build/parser/satisfactory/objects/Property.d.ts +3 -4
- package/build/parser/satisfactory/objects/Property.js +19 -20
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,13 +13,13 @@ The version support of the packages is indicated below.
|
|
|
13
13
|
|
|
14
14
|
Game Version Files of U5 and below are NOT supported.
|
|
15
15
|
|
|
16
|
-
U8 has
|
|
16
|
+
U8 has read and write support for blueprints, but only read support for saves. More coming soon.
|
|
17
17
|
|
|
18
18
|
| Game Version | Package |
|
|
19
19
|
|:--------------:|:-----------------------------|
|
|
20
20
|
| <= U5 | ❌ |
|
|
21
21
|
| U6 + U7 | ✅ 0.0.1 - 0.0.34 |
|
|
22
|
-
| U8 | ⚠️ >= 0.1.
|
|
22
|
+
| U8 | ⚠️ >= 0.1.13 (readig for both saves and blueprints, writing only for blueprints) |
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
## Installation via npm
|
|
@@ -23,8 +23,9 @@ class BlueprintReader extends byte_reader_class_1.ByteReader {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
static ReadHeader(reader) {
|
|
26
|
-
const
|
|
27
|
-
const
|
|
26
|
+
const blueprintTypeOrWhat = reader.readBytes(4);
|
|
27
|
+
const versionThing = reader.readBytes(2 * 4);
|
|
28
|
+
const probablyDimensions = (0, util_types_1.ParseVec3f)(reader);
|
|
28
29
|
let itemTypeCount = reader.readInt32();
|
|
29
30
|
const itemCosts = new Array(itemTypeCount).fill(['', 0]);
|
|
30
31
|
for (let i = 0; i < itemTypeCount; i++) {
|
|
@@ -104,7 +105,6 @@ class BlueprintReader extends byte_reader_class_1.ByteReader {
|
|
|
104
105
|
const suomeChecksumThing = reader.readInt32();
|
|
105
106
|
BlueprintReader.ReadBlueprintObjectContents('', reader, objects, 0);
|
|
106
107
|
const pos = reader.getBufferPosition();
|
|
107
|
-
console.log(pos, reader.getBufferLength(), reader.getBufferProgress());
|
|
108
108
|
return objects;
|
|
109
109
|
}
|
|
110
110
|
static ReadBlueprintObjectContents(levelName, reader, objectsList, buildVersion) {
|
|
@@ -13,8 +13,8 @@ class BlueprintWriter extends byte_writer_class_1.ByteWriter {
|
|
|
13
13
|
}
|
|
14
14
|
static SerializeHeader(writer, header) {
|
|
15
15
|
writer.writeInt32(2);
|
|
16
|
-
writer.writeInt32(
|
|
17
|
-
writer.writeInt32(
|
|
16
|
+
writer.writeInt32(42);
|
|
17
|
+
writer.writeInt32(249836);
|
|
18
18
|
writer.writeInt32(4);
|
|
19
19
|
writer.writeInt32(4);
|
|
20
20
|
writer.writeInt32(4);
|
|
@@ -245,6 +245,8 @@ export declare class SetProperty<T> extends BasicProperty {
|
|
|
245
245
|
static CalcOverhead(property: SetProperty<any>): number;
|
|
246
246
|
static Serialize(writer: ByteWriter, property: SetProperty<any>): void;
|
|
247
247
|
}
|
|
248
|
+
export type GENERIC_MAP_KEY_TYPE = number | ObjectReference | boolean | GENERIC_STRUCT_PROPERTY_VALUE;
|
|
249
|
+
export type GENERIC_MAP_VALUE_TYPE = number | ObjectReference | boolean | GENERIC_STRUCT_PROPERTY_VALUE;
|
|
248
250
|
export declare class MapProperty extends BasicProperty {
|
|
249
251
|
keyType: string;
|
|
250
252
|
valueType: string;
|
|
@@ -253,10 +255,7 @@ export declare class MapProperty extends BasicProperty {
|
|
|
253
255
|
modeUnk2: string;
|
|
254
256
|
modeUnk3: string;
|
|
255
257
|
remainingData: number[];
|
|
256
|
-
values:
|
|
257
|
-
key: any;
|
|
258
|
-
value: any;
|
|
259
|
-
}[];
|
|
258
|
+
values: [key: GENERIC_MAP_KEY_TYPE, value: GENERIC_MAP_VALUE_TYPE][];
|
|
260
259
|
constructor(keyType: string, valueType: string, ueType: string, index: number);
|
|
261
260
|
static Parse(reader: BinaryReadable, propertyName: string, buildVersion: number, size: number, ueType?: string, index?: number): MapProperty;
|
|
262
261
|
static CalcOverhead(property: MapProperty): number;
|
|
@@ -518,28 +518,25 @@ class StructProperty extends AbstractBaseProperty {
|
|
|
518
518
|
value = (0, util_types_1.ParseCol4RGBA)(reader);
|
|
519
519
|
break;
|
|
520
520
|
case 'Vector':
|
|
521
|
-
value = (size === 12) ? (0, util_types_1.ParseVec3f)(reader) : (0, util_types_1.ParseVec3)(reader);
|
|
522
|
-
break;
|
|
523
521
|
case 'Rotator':
|
|
524
522
|
case 'Vector2D':
|
|
525
|
-
value = (0, util_types_1.ParseVec3f)(reader);
|
|
523
|
+
value = (size === 12) ? (0, util_types_1.ParseVec3f)(reader) : (0, util_types_1.ParseVec3)(reader);
|
|
526
524
|
break;
|
|
527
525
|
case 'Quat':
|
|
528
|
-
value = value = (size === 16) ? (0, util_types_1.ParseVec4f)(reader) : (0, util_types_1.ParseVec4)(reader);
|
|
529
|
-
break;
|
|
530
526
|
case 'Vector4':
|
|
531
527
|
case 'Vector4D':
|
|
532
|
-
value = (0, util_types_1.ParseVec4f)(reader);
|
|
528
|
+
value = (size === 16) ? (0, util_types_1.ParseVec4f)(reader) : (0, util_types_1.ParseVec4)(reader);
|
|
533
529
|
break;
|
|
534
530
|
case 'Box':
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
other2: (0, util_types_1.ParseVec3f)(reader)
|
|
538
|
-
};
|
|
539
|
-
value = {
|
|
531
|
+
console.error('found box here!!');
|
|
532
|
+
value = (size === 25) ? {
|
|
540
533
|
min: (0, util_types_1.ParseVec3f)(reader),
|
|
541
534
|
max: (0, util_types_1.ParseVec3f)(reader),
|
|
542
535
|
isValid: reader.readByte() >= 1
|
|
536
|
+
} : {
|
|
537
|
+
min: (0, util_types_1.ParseVec3)(reader),
|
|
538
|
+
max: (0, util_types_1.ParseVec3)(reader),
|
|
539
|
+
isValid: reader.readByte() >= 1
|
|
543
540
|
};
|
|
544
541
|
break;
|
|
545
542
|
case 'RailroadTrackPosition':
|
|
@@ -621,18 +618,18 @@ class StructProperty extends AbstractBaseProperty {
|
|
|
621
618
|
case 'Rotator':
|
|
622
619
|
case 'Vector2D':
|
|
623
620
|
value = value;
|
|
624
|
-
(0, util_types_1.
|
|
621
|
+
(0, util_types_1.SerializeVec3)(writer, value);
|
|
625
622
|
break;
|
|
626
623
|
case 'Quat':
|
|
627
624
|
case 'Vector4':
|
|
628
625
|
case 'Vector4D':
|
|
629
626
|
value = value;
|
|
630
|
-
(0, util_types_1.
|
|
627
|
+
(0, util_types_1.SerializeVec4)(writer, value);
|
|
631
628
|
break;
|
|
632
629
|
case 'Box':
|
|
633
630
|
value = value;
|
|
634
|
-
(0, util_types_1.
|
|
635
|
-
(0, util_types_1.
|
|
631
|
+
(0, util_types_1.SerializeVec3)(writer, value.min);
|
|
632
|
+
(0, util_types_1.SerializeVec3)(writer, value.max);
|
|
636
633
|
writer.writeByte(value.isValid ? 1 : 0);
|
|
637
634
|
break;
|
|
638
635
|
case 'RailroadTrackPosition':
|
|
@@ -898,7 +895,7 @@ class MapProperty extends BasicProperty {
|
|
|
898
895
|
super('MapProperty', ueType, undefined, index);
|
|
899
896
|
this.keyType = keyType;
|
|
900
897
|
this.valueType = valueType;
|
|
901
|
-
this.modeType =
|
|
898
|
+
this.modeType = 0;
|
|
902
899
|
this.modeUnk2 = '';
|
|
903
900
|
this.modeUnk3 = '';
|
|
904
901
|
this.remainingData = [];
|
|
@@ -916,10 +913,11 @@ class MapProperty extends BasicProperty {
|
|
|
916
913
|
switch (property.keyType) {
|
|
917
914
|
case 'StructProperty':
|
|
918
915
|
if (propertyName === 'mSaveData' || propertyName === 'mUnresolvedSaveData') {
|
|
919
|
-
key =
|
|
916
|
+
key = propertyName;
|
|
917
|
+
reader.skipBytes(12);
|
|
920
918
|
}
|
|
921
919
|
else {
|
|
922
|
-
key = (0, exports.ParseDynamicStructData)(reader, 0,
|
|
920
|
+
key = (0, exports.ParseDynamicStructData)(reader, 0, property.keyType);
|
|
923
921
|
}
|
|
924
922
|
break;
|
|
925
923
|
case 'ObjectProperty':
|
|
@@ -944,7 +942,7 @@ class MapProperty extends BasicProperty {
|
|
|
944
942
|
}
|
|
945
943
|
switch (property.valueType) {
|
|
946
944
|
case 'StructProperty':
|
|
947
|
-
value = (0, exports.ParseDynamicStructData)(reader, 0,
|
|
945
|
+
value = (0, exports.ParseDynamicStructData)(reader, 0, property.valueType);
|
|
948
946
|
break;
|
|
949
947
|
case 'ObjectProperty':
|
|
950
948
|
value = ObjectProperty.ReadValue(reader);
|
|
@@ -966,6 +964,7 @@ class MapProperty extends BasicProperty {
|
|
|
966
964
|
default:
|
|
967
965
|
throw new Error(`not implemented map value type ${property.valueType}`);
|
|
968
966
|
}
|
|
967
|
+
property.values.push([key, value]);
|
|
969
968
|
}
|
|
970
969
|
return property;
|
|
971
970
|
}
|
|
@@ -1005,8 +1004,8 @@ const ParseDynamicStructData = (reader, buildVersion, type) => {
|
|
|
1005
1004
|
exports.ParseDynamicStructData = ParseDynamicStructData;
|
|
1006
1005
|
const SerializeDynamicStructData = (writer, buildVersion, data) => {
|
|
1007
1006
|
for (const key in data.properties) {
|
|
1008
|
-
writer.writeString(key);
|
|
1009
1007
|
for (const prop of (Array.isArray(data.properties[key]) ? data.properties[key] : [data.properties[key]])) {
|
|
1008
|
+
writer.writeString(key);
|
|
1010
1009
|
DataFields_1.DataFields.SerializeProperty(writer, prop, key, buildVersion);
|
|
1011
1010
|
}
|
|
1012
1011
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@etothepii/satisfactory-file-parser",
|
|
3
3
|
"author": "etothepii",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.13",
|
|
5
5
|
"description": "A file parser for satisfactory files. Includes save files and blueprint files.",
|
|
6
6
|
"types": "./build/index.d.ts",
|
|
7
7
|
"main": "./build/index.js",
|