@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.
Files changed (42) hide show
  1. package/README.md +2 -1
  2. package/build/index.d.ts +2 -2
  3. package/build/index.js +4 -4
  4. package/build/parser/byte/alignment.enum.js +1 -1
  5. package/build/parser/byte/byte-writer.class.js +1 -1
  6. package/build/parser/file.types.js +1 -1
  7. package/build/parser/parser.d.ts +0 -1
  8. package/build/parser/parser.js +1 -1
  9. package/build/parser/satisfactory/blueprint/blueprint-reader.js +2 -2
  10. package/build/parser/satisfactory/blueprint/blueprint-writer.js +1 -1
  11. package/build/parser/satisfactory/edit/edit-constants.d.ts +729 -23
  12. package/build/parser/satisfactory/edit/edit-constants.js +743 -53
  13. package/build/parser/satisfactory/objects/DataFields.d.ts +13 -3
  14. package/build/parser/satisfactory/objects/DataFields.js +51 -2
  15. package/build/parser/satisfactory/objects/GUIDInfo.d.ts +3 -2
  16. package/build/parser/satisfactory/objects/GUIDInfo.js +2 -2
  17. package/build/parser/satisfactory/objects/Property.d.ts +17 -10
  18. package/build/parser/satisfactory/objects/Property.js +87 -26
  19. package/build/parser/satisfactory/objects/SaveComponent.js +1 -1
  20. package/build/parser/satisfactory/objects/SaveEntity.d.ts +1 -1
  21. package/build/parser/satisfactory/objects/SaveEntity.js +4 -4
  22. package/build/parser/satisfactory/objects/ue/MD5Hash.d.ts +2 -1
  23. package/build/parser/satisfactory/objects/ue/MD5Hash.js +1 -1
  24. package/build/parser/satisfactory/objects/values/GUID.d.ts +7 -0
  25. package/build/parser/satisfactory/objects/values/GUID.js +21 -0
  26. package/build/parser/satisfactory/objects/values/ObjectReference.d.ts +10 -0
  27. package/build/parser/satisfactory/objects/values/ObjectReference.js +17 -0
  28. package/build/parser/satisfactory/objects/values/SoftObjectReference.d.ts +11 -0
  29. package/build/parser/satisfactory/objects/values/SoftObjectReference.js +19 -0
  30. package/build/parser/satisfactory/save/level.class.d.ts +1 -1
  31. package/build/parser/satisfactory/save/level.class.js +1 -1
  32. package/build/parser/satisfactory/save/satisfactory-save.d.ts +1 -1
  33. package/build/parser/satisfactory/save/save-reader.d.ts +1 -1
  34. package/build/parser/satisfactory/save/save-reader.js +10 -7
  35. package/build/parser/satisfactory/save/save-writer.js +1 -2
  36. package/build/parser/satisfactory/save/save.types.d.ts +1 -1
  37. package/build/parser/satisfactory/structs/util.types.d.ts +37 -25
  38. package/build/parser/satisfactory/structs/util.types.js +145 -143
  39. package/build/parser/stream/reworked/readable-stream-parser.js +6 -6
  40. package/build/parser/stream/reworked/save-stream-json-stringifier.d.ts +1 -2
  41. package/build/parser/stream/reworked/save-stream-writer.class.d.ts +3 -2
  42. 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 "../structs/util.types";
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 = (0, util_types_1.ParseVec3f)(reader);
67
- property.targetTranslation = (0, util_types_1.ParseVec3f)(reader);
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, ByteWriter } from '../../../';
2
- import { GUID } from './ue/GUID';
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("./ue/GUID");
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 = exports.GUIDInfo || (exports.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
- unk2: string;
190
- unk3: string;
191
- properties: any[];
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 GENERIC_STRUCT_PROPERTY_VALUE = BasicMultipleStructPropertyValue | BasicStructPropertyValue | BoxStructPropertyValue | RailroadTrackPositionStructPropertyValue | InventoryItemStructPropertyValue | FICFrameRangeStructPropertyValue | DynamicStructPropertyValue | col4 | vec3 | vec4 | string;
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 ObjectReference_1 = require("./ObjectReference");
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 = (0, util_types_1.ParseCol4BGRA)(reader);
501
+ value = util_types_1.col4.ParseBGRA(reader);
500
502
  break;
501
503
  case 'LinearColor':
502
- value = (0, util_types_1.ParseCol4RGBA)(reader);
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) ? (0, util_types_1.ParseVec3f)(reader) : (0, util_types_1.ParseVec3)(reader);
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) ? (0, util_types_1.ParseVec4f)(reader) : (0, util_types_1.ParseVec4)(reader);
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: (0, util_types_1.ParseVec3f)(reader),
517
- max: (0, util_types_1.ParseVec3f)(reader),
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: (0, util_types_1.ParseVec3)(reader),
521
- max: (0, util_types_1.ParseVec3)(reader),
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
- unk2: reader.readString(),
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
- (0, util_types_1.SerializeCol4BGRA)(writer, value);
614
+ util_types_1.col4.SerializeBGRA(writer, value);
595
615
  break;
596
616
  case 'LinearColor':
597
617
  value = value;
598
- (0, util_types_1.SerializeCol4RGBA)(writer, value);
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
- (0, util_types_1.SerializeVec3)(writer, value);
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
- (0, util_types_1.SerializeVec4)(writer, value);
630
+ util_types_1.vec4.Serialize(writer, value);
611
631
  break;
612
632
  case 'Box':
613
633
  value = value;
614
- (0, util_types_1.SerializeVec3)(writer, value.min);
615
- (0, util_types_1.SerializeVec3)(writer, value.max);
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.writeString(value.unk2);
638
- writer.writeString(value.unk3);
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.values.forEach(v => (0, util_types_1.SerializeVec3f)(writer, v));
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 = propertyName;
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(property.structKeyProxy);
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;
@@ -27,5 +27,5 @@ class SaveComponent extends SaveObject_1.SaveObject {
27
27
  SaveObject_1.SaveObject.ParseData(component, length, reader, buildVersion, typePath);
28
28
  }
29
29
  }
30
- SaveComponent.TypeID = 0;
31
30
  exports.SaveComponent = SaveComponent;
31
+ SaveComponent.TypeID = 0;
@@ -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 = (0, util_types_1.ParseTransform)(reader);
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
- (0, util_types_1.SerializeTransform)(writer, entity.transform);
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;
@@ -1,4 +1,5 @@
1
- import { ByteReader, ByteWriter } from '../../../..';
1
+ import { ByteReader } from '../../../byte/byte-reader.class';
2
+ import { ByteWriter } from '../../../byte/byte-writer.class';
2
3
  export type MD5Hash = {
3
4
  isValid: boolean;
4
5
  hash?: number[];
@@ -17,5 +17,5 @@ var MD5Hash;
17
17
  writer.writeBytesArray(md5Hash.hash);
18
18
  }
19
19
  };
20
- })(MD5Hash = exports.MD5Hash || (exports.MD5Hash = {}));
20
+ })(MD5Hash || (exports.MD5Hash = MD5Hash = {}));
21
21
  ;
@@ -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';