@etothepii/satisfactory-file-parser 0.3.7 → 0.4.4
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 -1
- package/build/index.d.ts +2 -2
- package/build/index.js +4 -4
- package/build/parser/byte/alignment.enum.js +1 -1
- package/build/parser/byte/byte-writer.class.js +1 -1
- package/build/parser/file.types.js +1 -1
- package/build/parser/parser.d.ts +0 -1
- package/build/parser/parser.js +1 -1
- package/build/parser/satisfactory/blueprint/blueprint-reader.js +2 -2
- package/build/parser/satisfactory/blueprint/blueprint-writer.js +1 -1
- package/build/parser/satisfactory/edit/edit-constants.d.ts +729 -23
- package/build/parser/satisfactory/edit/edit-constants.js +743 -53
- package/build/parser/satisfactory/objects/DataFields.d.ts +13 -3
- package/build/parser/satisfactory/objects/DataFields.js +51 -2
- package/build/parser/satisfactory/objects/GUIDInfo.d.ts +3 -2
- package/build/parser/satisfactory/objects/GUIDInfo.js +2 -2
- package/build/parser/satisfactory/objects/Property.d.ts +17 -10
- package/build/parser/satisfactory/objects/Property.js +87 -26
- package/build/parser/satisfactory/objects/SaveComponent.js +1 -1
- package/build/parser/satisfactory/objects/SaveEntity.d.ts +1 -1
- package/build/parser/satisfactory/objects/SaveEntity.js +4 -4
- package/build/parser/satisfactory/objects/ue/MD5Hash.d.ts +2 -1
- package/build/parser/satisfactory/objects/ue/MD5Hash.js +1 -1
- package/build/parser/satisfactory/objects/values/GUID.d.ts +7 -0
- package/build/parser/satisfactory/objects/values/GUID.js +21 -0
- package/build/parser/satisfactory/objects/values/ObjectReference.d.ts +10 -0
- package/build/parser/satisfactory/objects/values/ObjectReference.js +17 -0
- package/build/parser/satisfactory/objects/values/SoftObjectReference.d.ts +11 -0
- package/build/parser/satisfactory/objects/values/SoftObjectReference.js +19 -0
- package/build/parser/satisfactory/save/level.class.d.ts +1 -1
- package/build/parser/satisfactory/save/level.class.js +1 -1
- package/build/parser/satisfactory/save/satisfactory-save.d.ts +1 -1
- package/build/parser/satisfactory/save/save-reader.d.ts +1 -1
- package/build/parser/satisfactory/save/save-reader.js +10 -7
- package/build/parser/satisfactory/save/save-writer.js +1 -2
- package/build/parser/satisfactory/save/save.types.d.ts +1 -1
- package/build/parser/satisfactory/structs/util.types.d.ts +37 -25
- package/build/parser/satisfactory/structs/util.types.js +145 -143
- package/build/parser/stream/reworked/readable-stream-parser.js +6 -6
- package/build/parser/stream/reworked/save-stream-json-stringifier.d.ts +1 -2
- package/build/parser/stream/reworked/save-stream-writer.class.d.ts +3 -2
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ByteWriter } from "../../..";
|
|
2
1
|
import { BinaryReadable } from "../../byte/binary-readable.interface";
|
|
2
|
+
import { ByteWriter } from '../../byte/byte-writer.class';
|
|
3
3
|
import { SaveWriter } from "../save/save-writer";
|
|
4
|
-
import { vec3 } from
|
|
5
|
-
import { ObjectReference } from "./ObjectReference";
|
|
4
|
+
import { Transform, vec3 } from '../structs/util.types';
|
|
6
5
|
import { AbstractBaseProperty } from "./Property";
|
|
7
6
|
import { SaveObject } from "./SaveObject";
|
|
7
|
+
import { ObjectReference } from "./values/ObjectReference";
|
|
8
8
|
export type SpecialAnyProperty = {} | PowerLineSpecialProperty | PlayerSpecialProperty;
|
|
9
9
|
export type PowerLineSpecialProperty = {
|
|
10
10
|
num: number;
|
|
@@ -27,6 +27,16 @@ export type ItemSpecialProperty = {
|
|
|
27
27
|
export type ConveyorSpecialProperty = {
|
|
28
28
|
items: ItemSpecialProperty[];
|
|
29
29
|
};
|
|
30
|
+
export type BuildableSubsystemSpecialProperty = {
|
|
31
|
+
buildables: {
|
|
32
|
+
typePath: string;
|
|
33
|
+
instances: {
|
|
34
|
+
transform: Transform;
|
|
35
|
+
swatchSlotTypePath: string;
|
|
36
|
+
recipeTypePath: string;
|
|
37
|
+
}[];
|
|
38
|
+
}[];
|
|
39
|
+
};
|
|
30
40
|
export declare class DataFields {
|
|
31
41
|
constructor();
|
|
32
42
|
static ParseProperties(obj: SaveObject, length: number, reader: BinaryReadable, buildVersion: number, typePath: string): void;
|
|
@@ -63,8 +63,8 @@ class DataFields {
|
|
|
63
63
|
target: Property_1.ObjectProperty.ReadValue(reader)
|
|
64
64
|
};
|
|
65
65
|
if (remainingLen - (reader.getBufferPosition() - start) >= 24) {
|
|
66
|
-
property.sourceTranslation =
|
|
67
|
-
property.targetTranslation =
|
|
66
|
+
property.sourceTranslation = util_types_1.vec3.ParseF(reader);
|
|
67
|
+
property.targetTranslation = util_types_1.vec3.ParseF(reader);
|
|
68
68
|
}
|
|
69
69
|
break;
|
|
70
70
|
case '/Game/FactoryGame/Character/Player/BP_PlayerState.BP_PlayerState_C':
|
|
@@ -81,6 +81,36 @@ class DataFields {
|
|
|
81
81
|
break;
|
|
82
82
|
}
|
|
83
83
|
break;
|
|
84
|
+
case '/Script/FactoryGame.FGLightweightBuildableSubsystem':
|
|
85
|
+
property = { buildables: [] };
|
|
86
|
+
const entriesCount = reader.readInt32();
|
|
87
|
+
if (entriesCount > 0) {
|
|
88
|
+
for (let i = 0; i < entriesCount; i++) {
|
|
89
|
+
reader.readInt32();
|
|
90
|
+
const typePath = reader.readString();
|
|
91
|
+
const count = reader.readInt32();
|
|
92
|
+
const instances = [];
|
|
93
|
+
for (let j = 0; j < count; j++) {
|
|
94
|
+
const transform = util_types_1.Transform.Parse(reader);
|
|
95
|
+
reader.readInt32();
|
|
96
|
+
const swatchSlotTypePath = reader.readString();
|
|
97
|
+
reader.readBytes(69);
|
|
98
|
+
const recipeTypePath = reader.readString();
|
|
99
|
+
reader.readInt32();
|
|
100
|
+
reader.readInt32();
|
|
101
|
+
instances.push({
|
|
102
|
+
transform,
|
|
103
|
+
swatchSlotTypePath,
|
|
104
|
+
recipeTypePath,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
property.buildables.push({
|
|
108
|
+
typePath,
|
|
109
|
+
instances
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
84
114
|
default:
|
|
85
115
|
property = {};
|
|
86
116
|
break;
|
|
@@ -219,6 +249,25 @@ class DataFields {
|
|
|
219
249
|
break;
|
|
220
250
|
}
|
|
221
251
|
break;
|
|
252
|
+
case '/Script/FactoryGame.FGLightweightBuildableSubsystem':
|
|
253
|
+
writer.writeInt32(property.buildables.length);
|
|
254
|
+
if (property.buildables.length > 0) {
|
|
255
|
+
for (const buildable of property.buildables) {
|
|
256
|
+
writer.writeInt32(0);
|
|
257
|
+
writer.writeString(buildable.typePath);
|
|
258
|
+
writer.writeInt32(buildable.instances.length);
|
|
259
|
+
for (const instance of buildable.instances) {
|
|
260
|
+
util_types_1.Transform.Serialize(writer, instance.transform);
|
|
261
|
+
writer.writeInt32(0);
|
|
262
|
+
writer.writeString(instance.swatchSlotTypePath);
|
|
263
|
+
writer.writeBytesArray(new Array(69).fill(0));
|
|
264
|
+
writer.writeString(instance.recipeTypePath);
|
|
265
|
+
writer.writeInt32(0);
|
|
266
|
+
writer.writeInt32(0);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
break;
|
|
222
271
|
}
|
|
223
272
|
}
|
|
224
273
|
static SerializeProperty(writer, property, propertyName, buildVersion) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { BinaryReadable
|
|
2
|
-
import {
|
|
1
|
+
import { BinaryReadable } from '../../byte/binary-readable.interface';
|
|
2
|
+
import { ByteWriter } from '../../byte/byte-writer.class';
|
|
3
|
+
import { GUID } from './values/GUID';
|
|
3
4
|
export type GUIDInfo = undefined | GUID;
|
|
4
5
|
export declare namespace GUIDInfo {
|
|
5
6
|
const read: (reader: BinaryReadable) => GUIDInfo;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GUIDInfo = void 0;
|
|
4
|
-
const GUID_1 = require("./
|
|
4
|
+
const GUID_1 = require("./values/GUID");
|
|
5
5
|
var GUIDInfo;
|
|
6
6
|
(function (GUIDInfo) {
|
|
7
7
|
GUIDInfo.read = (reader) => {
|
|
@@ -22,5 +22,5 @@ var GUIDInfo;
|
|
|
22
22
|
GUID_1.GUID.write(writer, guid);
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
|
-
})(GUIDInfo
|
|
25
|
+
})(GUIDInfo || (exports.GUIDInfo = GUIDInfo = {}));
|
|
26
26
|
;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ByteWriter } from "../../..";
|
|
2
1
|
import { BinaryReadable } from "../../byte/binary-readable.interface";
|
|
2
|
+
import { ByteWriter } from '../../byte/byte-writer.class';
|
|
3
3
|
import { col4, vec3, vec4 } from "../structs/util.types";
|
|
4
4
|
import { GUIDInfo } from './GUIDInfo';
|
|
5
|
-
import { ObjectReference } from "./ObjectReference";
|
|
5
|
+
import { ObjectReference } from "./values/ObjectReference";
|
|
6
6
|
export type PropertiesMap = {
|
|
7
7
|
[name: string]: AbstractBaseProperty | AbstractBaseProperty[];
|
|
8
8
|
};
|
|
@@ -20,9 +20,6 @@ export declare abstract class BasicProperty extends AbstractBaseProperty {
|
|
|
20
20
|
guidInfo: GUIDInfo;
|
|
21
21
|
constructor(type: string, ueType: string, guidInfo: GUIDInfo, index?: number);
|
|
22
22
|
}
|
|
23
|
-
export type OverheadResult = {
|
|
24
|
-
overhead: number;
|
|
25
|
-
};
|
|
26
23
|
export declare class BoolProperty extends BasicProperty {
|
|
27
24
|
value: boolean;
|
|
28
25
|
constructor(value: boolean, ueType?: string, guidInfo?: GUIDInfo, index?: number);
|
|
@@ -186,9 +183,13 @@ export type RailroadTrackPositionStructPropertyValue = {
|
|
|
186
183
|
export type InventoryItemStructPropertyValue = {
|
|
187
184
|
unk1: number;
|
|
188
185
|
itemName: string;
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
186
|
+
hasItemState: number;
|
|
187
|
+
itemState?: {
|
|
188
|
+
unk: number;
|
|
189
|
+
pathName: string;
|
|
190
|
+
binarySize: number;
|
|
191
|
+
itemStateRaw: number[];
|
|
192
|
+
};
|
|
192
193
|
};
|
|
193
194
|
export type FICFrameRangeStructPropertyValue = {
|
|
194
195
|
begin: string;
|
|
@@ -198,7 +199,14 @@ export type DynamicStructPropertyValue = {
|
|
|
198
199
|
type: string;
|
|
199
200
|
properties: PropertiesMap;
|
|
200
201
|
};
|
|
201
|
-
export type
|
|
202
|
+
export type ClientIdentityInfo = {
|
|
203
|
+
id: string;
|
|
204
|
+
clientUnk1: number;
|
|
205
|
+
clientUnk2: number;
|
|
206
|
+
clientHashSize: number;
|
|
207
|
+
someClientHash: number[];
|
|
208
|
+
};
|
|
209
|
+
export type GENERIC_STRUCT_PROPERTY_VALUE = BasicMultipleStructPropertyValue | BasicStructPropertyValue | BoxStructPropertyValue | RailroadTrackPositionStructPropertyValue | InventoryItemStructPropertyValue | FICFrameRangeStructPropertyValue | ClientIdentityInfo | DynamicStructPropertyValue | col4 | vec3 | vec4 | string;
|
|
202
210
|
export declare class StructProperty extends AbstractBaseProperty {
|
|
203
211
|
subtype: string;
|
|
204
212
|
guid: number;
|
|
@@ -246,7 +254,6 @@ export type GENERIC_MAP_VALUE_TYPE = number | ObjectReference | boolean | GENERI
|
|
|
246
254
|
export declare class MapProperty extends BasicProperty {
|
|
247
255
|
keyType: string;
|
|
248
256
|
valueType: string;
|
|
249
|
-
structKeyProxy: MAP_STRUCT_KEY_PROXY;
|
|
250
257
|
modeType: number;
|
|
251
258
|
modeUnk1: string | undefined;
|
|
252
259
|
modeUnk2: string;
|
|
@@ -4,7 +4,9 @@ exports.SerializeFINLuaProcessorStateStorage = exports.ReadFINLuaProcessorStateS
|
|
|
4
4
|
const util_types_1 = require("../structs/util.types");
|
|
5
5
|
const DataFields_1 = require("./DataFields");
|
|
6
6
|
const GUIDInfo_1 = require("./GUIDInfo");
|
|
7
|
-
const
|
|
7
|
+
const GUID_1 = require("./values/GUID");
|
|
8
|
+
const ObjectReference_1 = require("./values/ObjectReference");
|
|
9
|
+
const SoftObjectReference_1 = require("./values/SoftObjectReference");
|
|
8
10
|
class AbstractProperty {
|
|
9
11
|
constructor(type, index) {
|
|
10
12
|
this.type = type;
|
|
@@ -496,29 +498,29 @@ class StructProperty extends AbstractBaseProperty {
|
|
|
496
498
|
let value;
|
|
497
499
|
switch (subtype) {
|
|
498
500
|
case 'Color':
|
|
499
|
-
value =
|
|
501
|
+
value = util_types_1.col4.ParseBGRA(reader);
|
|
500
502
|
break;
|
|
501
503
|
case 'LinearColor':
|
|
502
|
-
value =
|
|
504
|
+
value = util_types_1.col4.ParseRGBA(reader);
|
|
503
505
|
break;
|
|
504
506
|
case 'Vector':
|
|
505
507
|
case 'Rotator':
|
|
506
508
|
case 'Vector2D':
|
|
507
|
-
value = (size === 12) ?
|
|
509
|
+
value = (size === 12) ? util_types_1.vec3.ParseF(reader) : util_types_1.vec3.Parse(reader);
|
|
508
510
|
break;
|
|
509
511
|
case 'Quat':
|
|
510
512
|
case 'Vector4':
|
|
511
513
|
case 'Vector4D':
|
|
512
|
-
value = (size === 16) ?
|
|
514
|
+
value = (size === 16) ? util_types_1.vec4.ParseF(reader) : util_types_1.vec4.Parse(reader);
|
|
513
515
|
break;
|
|
514
516
|
case 'Box':
|
|
515
517
|
value = (size === 25) ? {
|
|
516
|
-
min:
|
|
517
|
-
max:
|
|
518
|
+
min: util_types_1.vec3.ParseF(reader),
|
|
519
|
+
max: util_types_1.vec3.ParseF(reader),
|
|
518
520
|
isValid: reader.readByte() >= 1
|
|
519
521
|
} : {
|
|
520
|
-
min:
|
|
521
|
-
max:
|
|
522
|
+
min: util_types_1.vec3.Parse(reader),
|
|
523
|
+
max: util_types_1.vec3.Parse(reader),
|
|
522
524
|
isValid: reader.readByte() >= 1
|
|
523
525
|
};
|
|
524
526
|
break;
|
|
@@ -536,14 +538,32 @@ class StructProperty extends AbstractBaseProperty {
|
|
|
536
538
|
case 'Guid':
|
|
537
539
|
value = reader.readString();
|
|
538
540
|
break;
|
|
541
|
+
case 'ClientIdentityInfo':
|
|
542
|
+
const id = reader.readString();
|
|
543
|
+
const clientUnk1 = reader.readInt32();
|
|
544
|
+
const clientUnk2 = reader.readByte();
|
|
545
|
+
const clientHashSize = reader.readInt32();
|
|
546
|
+
const someClientHash = Array.from(reader.readBytes(clientHashSize));
|
|
547
|
+
value = { id, clientUnk1, clientUnk2, clientHashSize, someClientHash };
|
|
548
|
+
break;
|
|
539
549
|
case 'InventoryItem':
|
|
540
550
|
value = {
|
|
541
551
|
unk1: reader.readInt32(),
|
|
542
552
|
itemName: reader.readString(),
|
|
543
|
-
|
|
544
|
-
unk3: reader.readString(),
|
|
545
|
-
properties: [],
|
|
553
|
+
hasItemState: reader.readInt32(),
|
|
546
554
|
};
|
|
555
|
+
if (value.hasItemState >= 1) {
|
|
556
|
+
const stateUnk = reader.readInt32();
|
|
557
|
+
const statePathName = reader.readString();
|
|
558
|
+
const stateBinarySize = reader.readInt32();
|
|
559
|
+
const itemStateRaw = Array.from(reader.readBytes(stateBinarySize));
|
|
560
|
+
value.itemState = {
|
|
561
|
+
unk: stateUnk,
|
|
562
|
+
pathName: statePathName,
|
|
563
|
+
binarySize: stateBinarySize,
|
|
564
|
+
itemStateRaw: itemStateRaw
|
|
565
|
+
};
|
|
566
|
+
}
|
|
547
567
|
break;
|
|
548
568
|
case 'FluidBox':
|
|
549
569
|
value = {
|
|
@@ -591,28 +611,28 @@ class StructProperty extends AbstractBaseProperty {
|
|
|
591
611
|
switch (subtype) {
|
|
592
612
|
case 'Color':
|
|
593
613
|
value = value;
|
|
594
|
-
|
|
614
|
+
util_types_1.col4.SerializeBGRA(writer, value);
|
|
595
615
|
break;
|
|
596
616
|
case 'LinearColor':
|
|
597
617
|
value = value;
|
|
598
|
-
|
|
618
|
+
util_types_1.col4.SerializeRGBA(writer, value);
|
|
599
619
|
break;
|
|
600
620
|
case 'Vector':
|
|
601
621
|
case 'Rotator':
|
|
602
622
|
case 'Vector2D':
|
|
603
623
|
value = value;
|
|
604
|
-
|
|
624
|
+
util_types_1.vec3.Serialize(writer, value);
|
|
605
625
|
break;
|
|
606
626
|
case 'Quat':
|
|
607
627
|
case 'Vector4':
|
|
608
628
|
case 'Vector4D':
|
|
609
629
|
value = value;
|
|
610
|
-
|
|
630
|
+
util_types_1.vec4.Serialize(writer, value);
|
|
611
631
|
break;
|
|
612
632
|
case 'Box':
|
|
613
633
|
value = value;
|
|
614
|
-
|
|
615
|
-
|
|
634
|
+
util_types_1.vec3.Serialize(writer, value.min);
|
|
635
|
+
util_types_1.vec3.Serialize(writer, value.max);
|
|
616
636
|
writer.writeByte(value.isValid ? 1 : 0);
|
|
617
637
|
break;
|
|
618
638
|
case 'RailroadTrackPosition':
|
|
@@ -630,12 +650,26 @@ class StructProperty extends AbstractBaseProperty {
|
|
|
630
650
|
value = value;
|
|
631
651
|
writer.writeString(value);
|
|
632
652
|
break;
|
|
653
|
+
case 'ClientIdentityInfo':
|
|
654
|
+
value = value;
|
|
655
|
+
writer.writeString(value.id);
|
|
656
|
+
writer.writeInt32(value.clientUnk1);
|
|
657
|
+
writer.writeByte(value.clientUnk2);
|
|
658
|
+
writer.writeInt32(value.clientHashSize);
|
|
659
|
+
writer.writeBytesArray(value.someClientHash);
|
|
660
|
+
break;
|
|
633
661
|
case 'InventoryItem':
|
|
634
662
|
value = value;
|
|
635
663
|
writer.writeInt32(value.unk1);
|
|
636
664
|
writer.writeString(value.itemName);
|
|
637
|
-
writer.
|
|
638
|
-
|
|
665
|
+
writer.writeInt32(value.hasItemState);
|
|
666
|
+
if (value.hasItemState >= 1) {
|
|
667
|
+
writer.writeInt32(value.itemState.unk);
|
|
668
|
+
writer.writeString(value.itemState.pathName);
|
|
669
|
+
writer.writeInt32(value.itemState.binarySize);
|
|
670
|
+
writer.writeBytesArray(value.itemState.itemStateRaw);
|
|
671
|
+
}
|
|
672
|
+
break;
|
|
639
673
|
break;
|
|
640
674
|
case 'FluidBox':
|
|
641
675
|
value = value;
|
|
@@ -678,7 +712,7 @@ class ArrayProperty extends BasicProperty {
|
|
|
678
712
|
}
|
|
679
713
|
static Parse(reader, ueType, index, propertyName) {
|
|
680
714
|
const subtype = reader.readString();
|
|
681
|
-
reader.skipBytes();
|
|
715
|
+
reader.skipBytes(1);
|
|
682
716
|
let property;
|
|
683
717
|
const elementCount = reader.readInt32();
|
|
684
718
|
switch (subtype) {
|
|
@@ -713,6 +747,9 @@ class ArrayProperty extends BasicProperty {
|
|
|
713
747
|
case "ObjectProperty":
|
|
714
748
|
property = new ArrayProperty(subtype, new Array(elementCount).fill(0).map(() => ObjectProperty.ReadValue(reader)), ueType, index);
|
|
715
749
|
break;
|
|
750
|
+
case "SoftObjectProperty":
|
|
751
|
+
property = new ArrayProperty(subtype, new Array(elementCount).fill(0).map(() => SoftObjectReference_1.SoftObjectReference.read(reader)), ueType, index);
|
|
752
|
+
break;
|
|
716
753
|
case "StructProperty":
|
|
717
754
|
const name = reader.readString();
|
|
718
755
|
const type = reader.readString();
|
|
@@ -794,6 +831,9 @@ class ArrayProperty extends BasicProperty {
|
|
|
794
831
|
case "ObjectProperty":
|
|
795
832
|
property.values.forEach(v => ObjectProperty.SerializeValue(writer, v));
|
|
796
833
|
break;
|
|
834
|
+
case "SoftObjectProperty":
|
|
835
|
+
property.values.forEach(v => SoftObjectReference_1.SoftObjectReference.write(writer, v));
|
|
836
|
+
break;
|
|
797
837
|
case "StructProperty":
|
|
798
838
|
writer.writeString(propertyName);
|
|
799
839
|
writer.writeString(property.subtype);
|
|
@@ -841,6 +881,14 @@ class SetProperty extends BasicProperty {
|
|
|
841
881
|
case "NameProperty":
|
|
842
882
|
property = new SetProperty(subtype, new Array(elementCount).fill(0).map(() => StrProperty.ReadValue(reader)), ueType, index);
|
|
843
883
|
break;
|
|
884
|
+
case "StructProperty":
|
|
885
|
+
if (propertyName === 'mDestroyedPickups') {
|
|
886
|
+
property = new SetProperty(subtype, new Array(elementCount).fill(0).map(() => GUID_1.GUID.read(reader)), ueType, index);
|
|
887
|
+
}
|
|
888
|
+
else {
|
|
889
|
+
throw new Error(`Not Implemented SetProperty of StructProperty for property ${propertyName}.`);
|
|
890
|
+
}
|
|
891
|
+
break;
|
|
844
892
|
default:
|
|
845
893
|
throw new Error(`Not Implemented SetProperty of ${subtype}.`);
|
|
846
894
|
}
|
|
@@ -870,7 +918,16 @@ class SetProperty extends BasicProperty {
|
|
|
870
918
|
property.values.forEach(v => StrProperty.SerializeValue(writer, v));
|
|
871
919
|
break;
|
|
872
920
|
case "StructProperty":
|
|
873
|
-
property.
|
|
921
|
+
if (property.name === 'mRemovalLocations') {
|
|
922
|
+
console.warn('serializing mRemovalLocations, this is still under investigation.');
|
|
923
|
+
property.values.forEach(v => util_types_1.vec3.SerializeF(writer, v));
|
|
924
|
+
}
|
|
925
|
+
else if (property.name === 'mDestroyedPickups') {
|
|
926
|
+
property.values.forEach(v => GUID_1.GUID.write(writer, v));
|
|
927
|
+
}
|
|
928
|
+
else {
|
|
929
|
+
throw new Error(`Not Implemented serializing SetProperty of StructProperty for property ${property.name}.`);
|
|
930
|
+
}
|
|
874
931
|
break;
|
|
875
932
|
default:
|
|
876
933
|
throw new Error(`Not Implemented SetProperty of ${property.subtype}.`);
|
|
@@ -883,7 +940,6 @@ class MapProperty extends BasicProperty {
|
|
|
883
940
|
super('MapProperty', ueType, undefined, index);
|
|
884
941
|
this.keyType = keyType;
|
|
885
942
|
this.valueType = valueType;
|
|
886
|
-
this.structKeyProxy = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
|
887
943
|
this.modeType = 0;
|
|
888
944
|
this.modeUnk2 = '';
|
|
889
945
|
this.modeUnk3 = '';
|
|
@@ -901,8 +957,7 @@ class MapProperty extends BasicProperty {
|
|
|
901
957
|
switch (property.keyType) {
|
|
902
958
|
case 'StructProperty':
|
|
903
959
|
if (propertyName === 'mSaveData' || propertyName === 'mUnresolvedSaveData') {
|
|
904
|
-
key =
|
|
905
|
-
property.structKeyProxy = Array.from(reader.readBytes(12));
|
|
960
|
+
key = Array.from(reader.readBytes(12));
|
|
906
961
|
}
|
|
907
962
|
else {
|
|
908
963
|
key = (0, exports.ParseDynamicStructData)(reader, 0, property.keyType);
|
|
@@ -946,6 +1001,9 @@ class MapProperty extends BasicProperty {
|
|
|
946
1001
|
case 'Int32Property':
|
|
947
1002
|
value = Int32Property.ReadValue(reader);
|
|
948
1003
|
break;
|
|
1004
|
+
case 'Int64Property':
|
|
1005
|
+
value = Int64Property.ReadValue(reader);
|
|
1006
|
+
break;
|
|
949
1007
|
case 'ByteProperty':
|
|
950
1008
|
value = ByteProperty.ReadValue(reader);
|
|
951
1009
|
break;
|
|
@@ -969,7 +1027,7 @@ class MapProperty extends BasicProperty {
|
|
|
969
1027
|
switch (property.keyType) {
|
|
970
1028
|
case 'StructProperty':
|
|
971
1029
|
if (property.name === 'mSaveData' || property.name === 'mUnresolvedSaveData') {
|
|
972
|
-
writer.writeBytesArray(
|
|
1030
|
+
writer.writeBytesArray(entry[0]);
|
|
973
1031
|
}
|
|
974
1032
|
else {
|
|
975
1033
|
(0, exports.SerializeDynamicStructData)(writer, 0, entry[0]);
|
|
@@ -1013,6 +1071,9 @@ class MapProperty extends BasicProperty {
|
|
|
1013
1071
|
case 'Int32Property':
|
|
1014
1072
|
Int32Property.SerializeValue(writer, entry[1]);
|
|
1015
1073
|
break;
|
|
1074
|
+
case 'Int64Property':
|
|
1075
|
+
Int64Property.SerializeValue(writer, entry[1]);
|
|
1076
|
+
break;
|
|
1016
1077
|
case 'ByteProperty':
|
|
1017
1078
|
ByteProperty.SerializeValue(writer, entry[1]);
|
|
1018
1079
|
break;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { BinaryReadable } from "../../byte/binary-readable.interface";
|
|
2
2
|
import { ByteWriter } from "../../byte/byte-writer.class";
|
|
3
3
|
import { Transform } from "../structs/util.types";
|
|
4
|
-
import { ObjectReference } from "./ObjectReference";
|
|
5
4
|
import { SaveObject, SaveObjectHeader } from "./SaveObject";
|
|
5
|
+
import { ObjectReference } from "./values/ObjectReference";
|
|
6
6
|
export declare const isSaveEntity: (obj: any) => obj is SaveEntity;
|
|
7
7
|
export interface SaveEntityHeader extends SaveObjectHeader {
|
|
8
8
|
needTransform: boolean;
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SaveEntity = exports.isSaveEntity = void 0;
|
|
4
4
|
const util_types_1 = require("../structs/util.types");
|
|
5
|
-
const ObjectReference_1 = require("./ObjectReference");
|
|
6
5
|
const SaveObject_1 = require("./SaveObject");
|
|
6
|
+
const ObjectReference_1 = require("./values/ObjectReference");
|
|
7
7
|
const isSaveEntity = (obj) => {
|
|
8
8
|
return obj.type === 'SaveEntity';
|
|
9
9
|
};
|
|
@@ -30,7 +30,7 @@ class SaveEntity extends SaveObject_1.SaveObject {
|
|
|
30
30
|
static ParseHeader(reader, obj) {
|
|
31
31
|
SaveObject_1.SaveObject.ParseHeader(reader, obj);
|
|
32
32
|
obj.needTransform = reader.readInt32() == 1;
|
|
33
|
-
obj.transform =
|
|
33
|
+
obj.transform = util_types_1.Transform.ParseF(reader);
|
|
34
34
|
obj.wasPlacedInLevel = reader.readInt32() == 1;
|
|
35
35
|
}
|
|
36
36
|
static ParseData(entity, length, reader, buildVersion, typePath) {
|
|
@@ -48,7 +48,7 @@ class SaveEntity extends SaveObject_1.SaveObject {
|
|
|
48
48
|
static SerializeHeader(writer, entity) {
|
|
49
49
|
SaveObject_1.SaveObject.SerializeHeader(writer, entity);
|
|
50
50
|
writer.writeInt32(entity.needTransform ? 1 : 0);
|
|
51
|
-
|
|
51
|
+
util_types_1.Transform.SerializeF(writer, entity.transform);
|
|
52
52
|
writer.writeInt32(entity.wasPlacedInLevel ? 1 : 0);
|
|
53
53
|
}
|
|
54
54
|
static SerializeData(writer, entity, buildVersion) {
|
|
@@ -62,5 +62,5 @@ class SaveEntity extends SaveObject_1.SaveObject {
|
|
|
62
62
|
SaveObject_1.SaveObject.SerializeData(writer, entity, buildVersion);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
SaveEntity.TypeID = 1;
|
|
66
65
|
exports.SaveEntity = SaveEntity;
|
|
66
|
+
SaveEntity.TypeID = 1;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BinaryReadable } from '../../../byte/binary-readable.interface';
|
|
2
|
+
import { ByteWriter } from '../../../byte/byte-writer.class';
|
|
3
|
+
export type GUID = [number, number, number, number];
|
|
4
|
+
export declare namespace GUID {
|
|
5
|
+
const read: (reader: BinaryReadable) => GUID;
|
|
6
|
+
const write: (writer: ByteWriter, guid: GUID) => void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GUID = void 0;
|
|
4
|
+
var GUID;
|
|
5
|
+
(function (GUID) {
|
|
6
|
+
GUID.read = (reader) => {
|
|
7
|
+
return [
|
|
8
|
+
reader.readUint32(),
|
|
9
|
+
reader.readUint32(),
|
|
10
|
+
reader.readUint32(),
|
|
11
|
+
reader.readUint32(),
|
|
12
|
+
];
|
|
13
|
+
};
|
|
14
|
+
GUID.write = (writer, guid) => {
|
|
15
|
+
writer.writeUint32(guid[0]);
|
|
16
|
+
writer.writeUint32(guid[1]);
|
|
17
|
+
writer.writeUint32(guid[2]);
|
|
18
|
+
writer.writeUint32(guid[3]);
|
|
19
|
+
};
|
|
20
|
+
})(GUID || (exports.GUID = GUID = {}));
|
|
21
|
+
;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BinaryReadable } from "../../../byte/binary-readable.interface";
|
|
2
|
+
import { ByteWriter } from "../../../byte/byte-writer.class";
|
|
3
|
+
export type ObjectReference = {
|
|
4
|
+
levelName: string;
|
|
5
|
+
pathName: string;
|
|
6
|
+
};
|
|
7
|
+
export declare namespace ObjectReference {
|
|
8
|
+
const read: (reader: BinaryReadable) => ObjectReference;
|
|
9
|
+
const write: (writer: ByteWriter, ref: ObjectReference) => void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObjectReference = void 0;
|
|
4
|
+
var ObjectReference;
|
|
5
|
+
(function (ObjectReference) {
|
|
6
|
+
ObjectReference.read = (reader) => {
|
|
7
|
+
return {
|
|
8
|
+
levelName: reader.readString(),
|
|
9
|
+
pathName: reader.readString()
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
ObjectReference.write = (writer, ref) => {
|
|
13
|
+
writer.writeString(ref.levelName);
|
|
14
|
+
writer.writeString(ref.pathName);
|
|
15
|
+
};
|
|
16
|
+
})(ObjectReference || (exports.ObjectReference = ObjectReference = {}));
|
|
17
|
+
;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BinaryReadable } from "../../../byte/binary-readable.interface";
|
|
2
|
+
import { ByteWriter } from "../../../byte/byte-writer.class";
|
|
3
|
+
export type SoftObjectReference = {
|
|
4
|
+
instanceName: string;
|
|
5
|
+
pathName: string;
|
|
6
|
+
unk: number;
|
|
7
|
+
};
|
|
8
|
+
export declare namespace SoftObjectReference {
|
|
9
|
+
const read: (reader: BinaryReadable) => SoftObjectReference;
|
|
10
|
+
const write: (writer: ByteWriter, ref: SoftObjectReference) => void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SoftObjectReference = void 0;
|
|
4
|
+
var SoftObjectReference;
|
|
5
|
+
(function (SoftObjectReference) {
|
|
6
|
+
SoftObjectReference.read = (reader) => {
|
|
7
|
+
return {
|
|
8
|
+
pathName: reader.readString(),
|
|
9
|
+
instanceName: reader.readString(),
|
|
10
|
+
unk: reader.readInt32()
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
SoftObjectReference.write = (writer, ref) => {
|
|
14
|
+
writer.writeString(ref.pathName);
|
|
15
|
+
writer.writeString(ref.instanceName);
|
|
16
|
+
writer.writeInt32(ref.unk);
|
|
17
|
+
};
|
|
18
|
+
})(SoftObjectReference || (exports.SoftObjectReference = SoftObjectReference = {}));
|
|
19
|
+
;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { BinaryReadable } from "../../byte/binary-readable.interface";
|
|
2
2
|
import { ByteWriter } from "../../byte/byte-writer.class";
|
|
3
|
-
import { ObjectReference } from "../objects/ObjectReference";
|
|
4
3
|
import { SaveComponent } from "../objects/SaveComponent";
|
|
5
4
|
import { SaveEntity } from "../objects/SaveEntity";
|
|
6
5
|
import { SaveObject } from "../objects/SaveObject";
|
|
6
|
+
import { ObjectReference } from "../objects/values/ObjectReference";
|
|
7
7
|
import { SaveReader } from "./save-reader";
|
|
8
8
|
export declare class Level {
|
|
9
9
|
name: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Level = void 0;
|
|
4
|
-
const ObjectReference_1 = require("../objects/ObjectReference");
|
|
5
4
|
const SaveComponent_1 = require("../objects/SaveComponent");
|
|
6
5
|
const SaveEntity_1 = require("../objects/SaveEntity");
|
|
6
|
+
const ObjectReference_1 = require("../objects/values/ObjectReference");
|
|
7
7
|
class Level {
|
|
8
8
|
constructor(name) {
|
|
9
9
|
this.name = name;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChunkCompressionInfo } from "../../file.types";
|
|
2
|
-
import { ObjectReference } from "../objects/ObjectReference";
|
|
2
|
+
import { ObjectReference } from "../objects/values/ObjectReference";
|
|
3
3
|
import { Level } from "./level.class";
|
|
4
4
|
import { ByteArray4, Grids } from "./save-reader";
|
|
5
5
|
import { SatisfactorySaveHeader } from "./save.types";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ByteReader } from "../../byte/byte-reader.class";
|
|
2
2
|
import { ChunkCompressionInfo } from "../../file.types";
|
|
3
|
-
import { ObjectReference } from "../objects/ObjectReference";
|
|
3
|
+
import { ObjectReference } from "../objects/values/ObjectReference";
|
|
4
4
|
import { Level } from "./level.class";
|
|
5
5
|
import { RoughSaveVersion, SatisfactorySaveHeader } from "./save.types";
|
|
6
6
|
export type ReadMode = 'stream' | 'whole';
|