@etothepii/satisfactory-file-parser 0.4.22 → 0.5.1

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 (30) hide show
  1. package/README.md +19 -1
  2. package/build/index.d.ts +5 -2
  3. package/build/index.js +5 -2
  4. package/build/parser/satisfactory/types/objects/SaveEntity.js +5 -5
  5. package/build/parser/satisfactory/types/objects/SaveObject.d.ts +2 -2
  6. package/build/parser/satisfactory/types/objects/SaveObject.js +19 -3
  7. package/build/parser/satisfactory/types/property/PropertiesList.d.ts +11 -0
  8. package/build/parser/satisfactory/types/property/PropertiesList.js +249 -0
  9. package/build/parser/satisfactory/types/property/generic/ArrayProperty.js +4 -4
  10. package/build/parser/satisfactory/types/property/generic/BoolProperty.js +1 -1
  11. package/build/parser/satisfactory/types/property/generic/EnumProperty.js +1 -1
  12. package/build/parser/satisfactory/types/property/generic/MapProperty.js +11 -5
  13. package/build/parser/satisfactory/types/property/generic/ObjectProperty.js +3 -7
  14. package/build/parser/satisfactory/types/property/generic/SetProperty.js +2 -2
  15. package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.d.ts +2 -0
  16. package/build/parser/satisfactory/types/property/generic/SoftObjectProperty.js +6 -0
  17. package/build/parser/satisfactory/types/property/generic/StructProperty.d.ts +2 -11
  18. package/build/parser/satisfactory/types/property/generic/StructProperty.js +14 -119
  19. package/build/parser/satisfactory/types/property/generic/TextProperty.d.ts +1 -1
  20. package/build/parser/satisfactory/types/property/generic/TextProperty.js +5 -5
  21. package/build/parser/satisfactory/types/property/generic/Uint8Property.js +1 -1
  22. package/build/parser/satisfactory/types/property/special/SpecialAnyProperties.d.ts +54 -0
  23. package/build/parser/satisfactory/types/property/special/SpecialAnyProperties.js +2 -0
  24. package/build/parser/satisfactory/types/property/special/SpecialProperties.d.ts +7 -0
  25. package/build/parser/satisfactory/types/property/special/SpecialProperties.js +234 -0
  26. package/build/parser/satisfactory/types/structs/DynamicStructPropertyValue.d.ts +11 -0
  27. package/build/parser/satisfactory/types/structs/DynamicStructPropertyValue.js +37 -0
  28. package/build/parser/satisfactory/types/structs/mods/FicsItCam/FICFrameRange.d.ts +10 -0
  29. package/build/parser/satisfactory/types/structs/mods/FicsItCam/FICFrameRange.js +16 -0
  30. package/package.json +1 -1
package/README.md CHANGED
@@ -140,7 +140,25 @@ fs.writeFileSync('./MyModifiedBlueprint.sbpcfg', Buffer.from(summary.configFileB
140
140
  So far this was just a private hobby project. But i figure some people actually use it.
141
141
  If you find a bug or have feedback about the parser, you can just open an issue on the github repo or hit me up on the satisfactory discord `etothepii`.
142
142
 
143
+ # Explicitly Supported/Tested Mods (No guarantee for other mods)
144
+ ### Ficsit-Cam (`FicsItCam`)
145
+ ### Structural Solutions (`SS_Mod`)
146
+ ### Linear Motion (`LinearMotion`)
147
+ ### Container Screens (`ContainerScreen`)
148
+ ### Conveyor Wall Hole (`WallHoleConveyor`)
149
+ ### X3-Signs (`x3_signs`)
150
+ ### X3-Roads (`x3_roads`)
151
+
143
152
  # Changelog
153
+ ### [0.5.1] (2024-10-15)
154
+ #### Added Mod Support
155
+ #### Internal Renamings
156
+ * `DynamicStructPropertyValue` extracted to own file.
157
+ * Parsing of object data partially moved to `SaveObject`.
158
+ * Renamed `DataFields` class to `PropertiesList`.
159
+ * Moved parsing of class-specific properties into own namespace.
160
+ * `ObjectProperty` and `SoftObjectProperty` now reuse the correct method for parsing/serializing the reference value.
161
+
144
162
  ### [0.4.22] (2024-10-07)
145
163
  #### compatibility fix
146
164
  * referenced icon libraries in blueprints are now optional when being parsed.
@@ -189,7 +207,7 @@ If you find a bug or have feedback about the parser, you can just open an issue
189
207
  # License
190
208
  MIT License
191
209
 
192
- Copyright (c) 2024 etothepii
210
+ Copyright (c) 2021-2024 etothepii
193
211
 
194
212
  Permission is hereby granted, free of charge, to any person obtaining a copy
195
213
  of this software and associated documentation files (the "Software"), to deal
package/build/index.d.ts CHANGED
@@ -4,7 +4,6 @@ export * from './parser/satisfactory/save/satisfactory-save';
4
4
  export * from './parser/satisfactory/save/save.types';
5
5
  export * from './parser/satisfactory/types/objects/SaveComponent';
6
6
  export * from './parser/satisfactory/types/objects/SaveEntity';
7
- export * from './parser/satisfactory/types/property/DataFields';
8
7
  export * from './parser/satisfactory/types/property/generic/ArrayProperty';
9
8
  export * from './parser/satisfactory/types/property/generic/BasicProperty';
10
9
  export * from './parser/satisfactory/types/property/generic/BoolProperty';
@@ -24,11 +23,15 @@ export * from './parser/satisfactory/types/property/generic/TextProperty';
24
23
  export * from './parser/satisfactory/types/property/generic/Uint32Property';
25
24
  export * from './parser/satisfactory/types/property/generic/Uint64Property';
26
25
  export * from './parser/satisfactory/types/property/generic/Uint8Property';
27
- export * from './parser/satisfactory/types/property/special/SpecialAnyProperty';
26
+ export * from './parser/satisfactory/types/property/PropertiesList';
27
+ export * from './parser/satisfactory/types/property/special/SpecialAnyProperties';
28
+ export * from './parser/satisfactory/types/property/special/SpecialProperties';
28
29
  export * from './parser/satisfactory/types/structs/col4';
30
+ export * from './parser/satisfactory/types/structs/DynamicStructPropertyValue';
29
31
  export * from './parser/satisfactory/types/structs/GUID';
30
32
  export * from './parser/satisfactory/types/structs/GUIDInfo';
31
33
  export * from './parser/satisfactory/types/structs/MD5Hash';
34
+ export * from './parser/satisfactory/types/structs/mods/FicsItCam/FICFrameRange';
32
35
  export * from './parser/satisfactory/types/structs/ObjectReference';
33
36
  export * from './parser/satisfactory/types/structs/SoftObjectReference';
34
37
  export * from './parser/satisfactory/types/structs/Transform';
package/build/index.js CHANGED
@@ -21,7 +21,6 @@ __exportStar(require("./parser/satisfactory/save/satisfactory-save"), exports);
21
21
  __exportStar(require("./parser/satisfactory/save/save.types"), exports);
22
22
  __exportStar(require("./parser/satisfactory/types/objects/SaveComponent"), exports);
23
23
  __exportStar(require("./parser/satisfactory/types/objects/SaveEntity"), exports);
24
- __exportStar(require("./parser/satisfactory/types/property/DataFields"), exports);
25
24
  __exportStar(require("./parser/satisfactory/types/property/generic/ArrayProperty"), exports);
26
25
  __exportStar(require("./parser/satisfactory/types/property/generic/BasicProperty"), exports);
27
26
  __exportStar(require("./parser/satisfactory/types/property/generic/BoolProperty"), exports);
@@ -41,11 +40,15 @@ __exportStar(require("./parser/satisfactory/types/property/generic/TextProperty"
41
40
  __exportStar(require("./parser/satisfactory/types/property/generic/Uint32Property"), exports);
42
41
  __exportStar(require("./parser/satisfactory/types/property/generic/Uint64Property"), exports);
43
42
  __exportStar(require("./parser/satisfactory/types/property/generic/Uint8Property"), exports);
44
- __exportStar(require("./parser/satisfactory/types/property/special/SpecialAnyProperty"), exports);
43
+ __exportStar(require("./parser/satisfactory/types/property/PropertiesList"), exports);
44
+ __exportStar(require("./parser/satisfactory/types/property/special/SpecialAnyProperties"), exports);
45
+ __exportStar(require("./parser/satisfactory/types/property/special/SpecialProperties"), exports);
45
46
  __exportStar(require("./parser/satisfactory/types/structs/col4"), exports);
47
+ __exportStar(require("./parser/satisfactory/types/structs/DynamicStructPropertyValue"), exports);
46
48
  __exportStar(require("./parser/satisfactory/types/structs/GUID"), exports);
47
49
  __exportStar(require("./parser/satisfactory/types/structs/GUIDInfo"), exports);
48
50
  __exportStar(require("./parser/satisfactory/types/structs/MD5Hash"), exports);
51
+ __exportStar(require("./parser/satisfactory/types/structs/mods/FicsItCam/FICFrameRange"), exports);
49
52
  __exportStar(require("./parser/satisfactory/types/structs/ObjectReference"), exports);
50
53
  __exportStar(require("./parser/satisfactory/types/structs/SoftObjectReference"), exports);
51
54
  __exportStar(require("./parser/satisfactory/types/structs/Transform"), exports);
@@ -34,7 +34,7 @@ class SaveEntity extends SaveObject_1.SaveObject {
34
34
  obj.wasPlacedInLevel = reader.readInt32() == 1;
35
35
  }
36
36
  static ParseData(entity, length, reader, buildVersion, typePath) {
37
- const afterSizeIndicator = reader.getBufferPosition();
37
+ const start = reader.getBufferPosition();
38
38
  entity.parentObjectRoot = reader.readString();
39
39
  entity.parentObjectName = reader.readString();
40
40
  var componentCount = reader.readInt32();
@@ -42,7 +42,7 @@ class SaveEntity extends SaveObject_1.SaveObject {
42
42
  var componentRef = ObjectReference_1.ObjectReference.read(reader);
43
43
  entity.components.push(componentRef);
44
44
  }
45
- const remainingSize = length - (reader.getBufferPosition() - afterSizeIndicator);
45
+ const remainingSize = length - (reader.getBufferPosition() - start);
46
46
  return SaveObject_1.SaveObject.ParseData(entity, remainingSize, reader, buildVersion, typePath);
47
47
  }
48
48
  static SerializeHeader(writer, entity) {
@@ -55,9 +55,9 @@ class SaveEntity extends SaveObject_1.SaveObject {
55
55
  writer.writeString(entity.parentObjectRoot);
56
56
  writer.writeString(entity.parentObjectName);
57
57
  writer.writeInt32(entity.components.length);
58
- for (const com of entity.components) {
59
- writer.writeString(com.levelName);
60
- writer.writeString(com.pathName);
58
+ for (const component of entity.components) {
59
+ writer.writeString(component.levelName);
60
+ writer.writeString(component.pathName);
61
61
  }
62
62
  SaveObject_1.SaveObject.SerializeData(writer, entity, buildVersion);
63
63
  }
@@ -1,7 +1,7 @@
1
1
  import { BinaryReadable } from "../../../byte/binary-readable.interface";
2
2
  import { ByteWriter } from "../../../byte/byte-writer.class";
3
3
  import { PropertiesMap } from "../property/generic/BasicProperty";
4
- import { SpecialAnyProperty } from '../property/special/SpecialAnyProperty';
4
+ import { SpecialAnyProperties } from '../property/special/SpecialAnyProperties';
5
5
  export interface SaveObjectHeader {
6
6
  typePath: string;
7
7
  rootObject: string;
@@ -12,7 +12,7 @@ export declare abstract class SaveObject implements SaveObjectHeader {
12
12
  rootObject: string;
13
13
  instanceName: string;
14
14
  properties: PropertiesMap;
15
- specialProperties: SpecialAnyProperty;
15
+ specialProperties: SpecialAnyProperties;
16
16
  trailingData: number[];
17
17
  objectVersion: number;
18
18
  unknownType2: number;
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SaveObject = void 0;
4
- const DataFields_1 = require("../property/DataFields");
4
+ const parser_error_1 = require("../../../error/parser.error");
5
+ const PropertiesList_1 = require("../property/PropertiesList");
6
+ const SpecialProperties_1 = require("../property/special/SpecialProperties");
5
7
  class SaveObject {
6
8
  constructor(typePath, rootObject, instanceName) {
7
9
  this.typePath = typePath;
@@ -24,10 +26,24 @@ class SaveObject {
24
26
  writer.writeString(obj.instanceName);
25
27
  }
26
28
  static ParseData(obj, length, reader, buildVersion, typePath) {
27
- DataFields_1.DataFields.ParseProperties(obj, length, reader, buildVersion, typePath);
29
+ const start = reader.getBufferPosition();
30
+ PropertiesList_1.PropertiesList.ParseList(obj, length, reader, buildVersion, typePath);
31
+ reader.readInt32();
32
+ let remainingSize = length - (reader.getBufferPosition() - start);
33
+ obj.specialProperties = SpecialProperties_1.SpecialProperties.ParseClassSpecificSpecialProperties(reader, typePath, remainingSize);
34
+ remainingSize = length - (reader.getBufferPosition() - start);
35
+ if (remainingSize > 0) {
36
+ obj.trailingData = Array.from(reader.readBytes(remainingSize));
37
+ }
38
+ else if (remainingSize < 0) {
39
+ throw new parser_error_1.ParserError('ParserError', `Unexpected. Read more bytes than are indicated for entity ${obj.instanceName}. bytes left to read is ${remainingSize}`);
40
+ }
28
41
  }
29
42
  static SerializeData(writer, obj, buildVersion) {
30
- DataFields_1.DataFields.Serialize(obj, writer, buildVersion, obj.typePath);
43
+ PropertiesList_1.PropertiesList.SerializeList(obj, writer, buildVersion, obj.typePath);
44
+ writer.writeInt32(0);
45
+ SpecialProperties_1.SpecialProperties.SerializeClassSpecificSpecialProperties(writer, obj.typePath, obj.specialProperties);
46
+ writer.writeBytesArray(obj.trailingData);
31
47
  }
32
48
  }
33
49
  exports.SaveObject = SaveObject;
@@ -0,0 +1,11 @@
1
+ import { BinaryReadable } from '../../../byte/binary-readable.interface';
2
+ import { ByteWriter } from '../../../byte/byte-writer.class';
3
+ import { SaveWriter } from '../../save/save-writer';
4
+ import { SaveObject } from '../objects/SaveObject';
5
+ import { AbstractBaseProperty } from './generic/BasicProperty';
6
+ export declare namespace PropertiesList {
7
+ const ParseList: (obj: SaveObject, length: number, reader: BinaryReadable, buildVersion: number, typePath: string) => void;
8
+ const SerializeList: (obj: SaveObject, writer: SaveWriter, buildVersion: number, typePath: string) => void;
9
+ const ParseSingleProperty: (reader: BinaryReadable, buildVersion: number, propertyName: string) => AbstractBaseProperty;
10
+ const SerializeSingleProperty: (writer: ByteWriter, property: AbstractBaseProperty, propertyName: string, buildVersion: number) => void;
11
+ }
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PropertiesList = void 0;
4
+ const parser_error_1 = require("../../../error/parser.error");
5
+ const ArrayProperty_1 = require("./generic/ArrayProperty");
6
+ const BoolProperty_1 = require("./generic/BoolProperty");
7
+ const ByteProperty_1 = require("./generic/ByteProperty");
8
+ const DoubleProperty_1 = require("./generic/DoubleProperty");
9
+ const EnumProperty_1 = require("./generic/EnumProperty");
10
+ const FloatProperty_1 = require("./generic/FloatProperty");
11
+ const Int32Property_1 = require("./generic/Int32Property");
12
+ const Int64Property_1 = require("./generic/Int64Property");
13
+ const Int8Property_1 = require("./generic/Int8Property");
14
+ const MapProperty_1 = require("./generic/MapProperty");
15
+ const ObjectProperty_1 = require("./generic/ObjectProperty");
16
+ const SetProperty_1 = require("./generic/SetProperty");
17
+ const SoftObjectProperty_1 = require("./generic/SoftObjectProperty");
18
+ const StrProperty_1 = require("./generic/StrProperty");
19
+ const StructProperty_1 = require("./generic/StructProperty");
20
+ const TextProperty_1 = require("./generic/TextProperty");
21
+ const Uint32Property_1 = require("./generic/Uint32Property");
22
+ const Uint64Property_1 = require("./generic/Uint64Property");
23
+ const Uint8Property_1 = require("./generic/Uint8Property");
24
+ var PropertiesList;
25
+ (function (PropertiesList) {
26
+ PropertiesList.ParseList = (obj, length, reader, buildVersion, typePath) => {
27
+ obj.properties = {};
28
+ if (length === 0) {
29
+ console.warn(`properties length for object ${obj.instanceName} was indicated as 0. Which is suspicious. Skipping object properties.`);
30
+ return;
31
+ }
32
+ let propertyName = reader.readString();
33
+ while (propertyName !== 'None') {
34
+ const parsedProperty = PropertiesList.ParseSingleProperty(reader, buildVersion, propertyName);
35
+ if (obj.properties[propertyName]) {
36
+ if (!Array.isArray(obj.properties[propertyName])) {
37
+ obj.properties[propertyName] = [obj.properties[propertyName]];
38
+ }
39
+ obj.properties[propertyName].push(parsedProperty);
40
+ }
41
+ else {
42
+ obj.properties[propertyName] = parsedProperty;
43
+ }
44
+ propertyName = reader.readString();
45
+ }
46
+ };
47
+ PropertiesList.SerializeList = (obj, writer, buildVersion, typePath) => {
48
+ for (const property of Object.values(obj.properties).flatMap(val => Array.isArray(val) ? val : [val])) {
49
+ writer.writeString(property.name);
50
+ PropertiesList.SerializeSingleProperty(writer, property, property.name, buildVersion);
51
+ }
52
+ writer.writeString('None');
53
+ };
54
+ PropertiesList.ParseSingleProperty = (reader, buildVersion, propertyName) => {
55
+ let currentProperty = {};
56
+ const propertyType = reader.readString();
57
+ const binarySize = reader.readInt32();
58
+ const index = reader.readInt32();
59
+ const before = reader.getBufferPosition();
60
+ let overhead = 0;
61
+ switch (propertyType) {
62
+ case 'BoolProperty':
63
+ currentProperty = BoolProperty_1.BoolProperty.Parse(reader, propertyType, index);
64
+ overhead = BoolProperty_1.BoolProperty.CalcOverhead(currentProperty);
65
+ break;
66
+ case 'ByteProperty':
67
+ currentProperty = ByteProperty_1.ByteProperty.Parse(reader, propertyType, index);
68
+ overhead = ByteProperty_1.ByteProperty.CalcOverhead(currentProperty);
69
+ break;
70
+ case 'Int8Property':
71
+ currentProperty = Int8Property_1.Int8Property.Parse(reader, propertyType, index);
72
+ overhead = Int8Property_1.Int8Property.CalcOverhead(currentProperty);
73
+ break;
74
+ case 'UInt8Property':
75
+ currentProperty = Uint8Property_1.Uint8Property.Parse(reader, propertyType, index);
76
+ overhead = Uint8Property_1.Uint8Property.CalcOverhead(currentProperty);
77
+ break;
78
+ case 'IntProperty':
79
+ case 'Int32Property':
80
+ currentProperty = Int32Property_1.Int32Property.Parse(reader, propertyType, index);
81
+ overhead = Int32Property_1.Int32Property.CalcOverhead(currentProperty);
82
+ break;
83
+ case 'UInt32Property':
84
+ currentProperty = Uint32Property_1.Uint32Property.Parse(reader, propertyType, index);
85
+ overhead = Uint32Property_1.Uint32Property.CalcOverhead(currentProperty);
86
+ break;
87
+ case 'Int64Property':
88
+ currentProperty = Int64Property_1.Int64Property.Parse(reader, propertyType, index);
89
+ overhead = Int64Property_1.Int64Property.CalcOverhead(currentProperty);
90
+ break;
91
+ case 'UInt64Property':
92
+ currentProperty = Uint64Property_1.Uint64Property.Parse(reader, propertyType, index);
93
+ break;
94
+ case 'SingleProperty':
95
+ case 'FloatProperty':
96
+ currentProperty = FloatProperty_1.FloatProperty.Parse(reader, propertyType, index);
97
+ overhead = FloatProperty_1.FloatProperty.CalcOverhead(currentProperty);
98
+ break;
99
+ case 'DoubleProperty':
100
+ currentProperty = DoubleProperty_1.DoubleProperty.Parse(reader, propertyType, index);
101
+ overhead = DoubleProperty_1.DoubleProperty.CalcOverhead(currentProperty);
102
+ break;
103
+ case 'StrProperty':
104
+ case 'NameProperty':
105
+ currentProperty = StrProperty_1.StrProperty.Parse(reader, propertyType, index);
106
+ overhead = StrProperty_1.StrProperty.CalcOverhead(currentProperty);
107
+ break;
108
+ case 'ObjectProperty':
109
+ case 'InterfaceProperty':
110
+ currentProperty = ObjectProperty_1.ObjectProperty.Parse(reader, propertyType, index);
111
+ overhead = ObjectProperty_1.ObjectProperty.CalcOverhead(currentProperty);
112
+ break;
113
+ case 'SoftObjectProperty':
114
+ currentProperty = SoftObjectProperty_1.SoftObjectProperty.Parse(reader, propertyType, index);
115
+ overhead = SoftObjectProperty_1.SoftObjectProperty.CalcOverhead(currentProperty);
116
+ break;
117
+ case 'EnumProperty':
118
+ currentProperty = EnumProperty_1.EnumProperty.Parse(reader, propertyType, index);
119
+ overhead = EnumProperty_1.EnumProperty.CalcOverhead(currentProperty);
120
+ break;
121
+ case 'StructProperty':
122
+ currentProperty = StructProperty_1.StructProperty.Parse(reader, propertyType, index, binarySize);
123
+ overhead = StructProperty_1.StructProperty.CalcOverhead(currentProperty);
124
+ break;
125
+ case 'ArrayProperty':
126
+ currentProperty = ArrayProperty_1.ArrayProperty.Parse(reader, propertyType, index, propertyName);
127
+ overhead = ArrayProperty_1.ArrayProperty.CalcOverhead(currentProperty);
128
+ break;
129
+ case 'MapProperty':
130
+ currentProperty = MapProperty_1.MapProperty.Parse(reader, propertyName, buildVersion, binarySize);
131
+ overhead = MapProperty_1.MapProperty.CalcOverhead(currentProperty);
132
+ break;
133
+ case 'TextProperty':
134
+ currentProperty = TextProperty_1.TextProperty.Parse(reader, propertyType, index);
135
+ overhead = TextProperty_1.TextProperty.CalcOverhead(currentProperty);
136
+ break;
137
+ case 'SetProperty':
138
+ currentProperty = SetProperty_1.SetProperty.Parse(reader, propertyType, index, propertyName);
139
+ overhead = SetProperty_1.SetProperty.CalcOverhead(currentProperty);
140
+ break;
141
+ default:
142
+ throw new Error(`Unimplemented type ${propertyType}`);
143
+ }
144
+ currentProperty.name = propertyName;
145
+ const readBytes = reader.getBufferPosition() - before - overhead;
146
+ if (readBytes !== binarySize) {
147
+ console.warn(`possibly corrupt. Read ${readBytes} for ${propertyType} ${propertyName}, but ${binarySize} were indicated.`);
148
+ throw new parser_error_1.ParserError('ParserError', `possibly corrupt. Read ${readBytes} bytes for ${propertyType} ${propertyName}, but ${binarySize} bytes were indicated.`);
149
+ }
150
+ return currentProperty;
151
+ };
152
+ PropertiesList.SerializeSingleProperty = (writer, property, propertyName, buildVersion) => {
153
+ writer.writeString(property.ueType);
154
+ const lenIndicator = writer.getBufferPosition();
155
+ writer.writeInt32(0);
156
+ writer.writeInt32(property.index ?? 0);
157
+ const start = writer.getBufferPosition();
158
+ let overhead = 0;
159
+ switch (property.ueType) {
160
+ case 'BoolProperty':
161
+ overhead = BoolProperty_1.BoolProperty.CalcOverhead(property);
162
+ BoolProperty_1.BoolProperty.Serialize(writer, property);
163
+ break;
164
+ case 'ByteProperty':
165
+ overhead = ByteProperty_1.ByteProperty.CalcOverhead(property);
166
+ ByteProperty_1.ByteProperty.Serialize(writer, property);
167
+ break;
168
+ case 'Int8Property':
169
+ overhead = Int8Property_1.Int8Property.CalcOverhead(property);
170
+ Int8Property_1.Int8Property.Serialize(writer, property);
171
+ break;
172
+ case 'UInt8Property':
173
+ overhead = Uint8Property_1.Uint8Property.CalcOverhead(property);
174
+ Uint8Property_1.Uint8Property.Serialize(writer, property);
175
+ break;
176
+ case 'IntProperty':
177
+ case 'Int32Property':
178
+ overhead = Int32Property_1.Int32Property.CalcOverhead(property);
179
+ Int32Property_1.Int32Property.Serialize(writer, property);
180
+ break;
181
+ case 'UInt32Property':
182
+ overhead = Uint32Property_1.Uint32Property.CalcOverhead(property);
183
+ Uint32Property_1.Uint32Property.Serialize(writer, property);
184
+ break;
185
+ case 'Int64Property':
186
+ overhead = Int64Property_1.Int64Property.CalcOverhead(property);
187
+ Int64Property_1.Int64Property.Serialize(writer, property);
188
+ break;
189
+ case 'UInt64PRoperty':
190
+ overhead = Uint64Property_1.Uint64Property.CalcOverhead(property);
191
+ Uint64Property_1.Uint64Property.Serialize(writer, property);
192
+ break;
193
+ case 'SingleProperty':
194
+ case 'FloatProperty':
195
+ overhead = FloatProperty_1.FloatProperty.CalcOverhead(property);
196
+ FloatProperty_1.FloatProperty.Serialize(writer, property);
197
+ break;
198
+ case 'DoubleProperty':
199
+ overhead = DoubleProperty_1.DoubleProperty.CalcOverhead(property);
200
+ DoubleProperty_1.DoubleProperty.Serialize(writer, property);
201
+ break;
202
+ case 'StrProperty':
203
+ case 'NameProperty':
204
+ overhead = StrProperty_1.StrProperty.CalcOverhead(property);
205
+ StrProperty_1.StrProperty.Serialize(writer, property);
206
+ break;
207
+ case 'ObjectProperty':
208
+ case 'InterfaceProperty':
209
+ overhead = ObjectProperty_1.ObjectProperty.CalcOverhead(property);
210
+ ObjectProperty_1.ObjectProperty.Serialize(writer, property);
211
+ break;
212
+ case 'SoftObjectProperty':
213
+ overhead = SoftObjectProperty_1.SoftObjectProperty.CalcOverhead(property);
214
+ SoftObjectProperty_1.SoftObjectProperty.Serialize(writer, property);
215
+ break;
216
+ case 'EnumProperty':
217
+ overhead = EnumProperty_1.EnumProperty.CalcOverhead(property);
218
+ EnumProperty_1.EnumProperty.Serialize(writer, property);
219
+ break;
220
+ case 'ByteProperty':
221
+ overhead = ByteProperty_1.ByteProperty.CalcOverhead(property);
222
+ ByteProperty_1.ByteProperty.Serialize(writer, property);
223
+ break;
224
+ case 'StructProperty':
225
+ overhead = StructProperty_1.StructProperty.CalcOverhead(property);
226
+ StructProperty_1.StructProperty.Serialize(writer, property);
227
+ break;
228
+ case 'ArrayProperty':
229
+ overhead = ArrayProperty_1.ArrayProperty.CalcOverhead(property);
230
+ ArrayProperty_1.ArrayProperty.Serialize(writer, property, propertyName);
231
+ break;
232
+ case 'MapProperty':
233
+ overhead = MapProperty_1.MapProperty.CalcOverhead(property);
234
+ MapProperty_1.MapProperty.Serialize(writer, property);
235
+ break;
236
+ case 'TextProperty':
237
+ overhead = TextProperty_1.TextProperty.CalcOverhead(property);
238
+ TextProperty_1.TextProperty.Serialize(writer, property);
239
+ break;
240
+ case 'SetProperty':
241
+ overhead = SetProperty_1.SetProperty.CalcOverhead(property);
242
+ SetProperty_1.SetProperty.Serialize(writer, property);
243
+ break;
244
+ default:
245
+ throw new Error(`Unimplemented type ${property.type}`);
246
+ }
247
+ writer.writeBinarySizeFromPosition(lenIndicator, start + overhead);
248
+ };
249
+ })(PropertiesList || (exports.PropertiesList = PropertiesList = {}));
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ArrayProperty = exports.isArrayProperty = void 0;
4
- const SoftObjectReference_1 = require("../../structs/SoftObjectReference");
5
4
  const BasicProperty_1 = require("./BasicProperty");
6
5
  const BoolProperty_1 = require("./BoolProperty");
7
6
  const ByteProperty_1 = require("./ByteProperty");
@@ -11,6 +10,7 @@ const FloatProperty_1 = require("./FloatProperty");
11
10
  const Int32Property_1 = require("./Int32Property");
12
11
  const Int64Property_1 = require("./Int64Property");
13
12
  const ObjectProperty_1 = require("./ObjectProperty");
13
+ const SoftObjectProperty_1 = require("./SoftObjectProperty");
14
14
  const StrProperty_1 = require("./StrProperty");
15
15
  const StructProperty_1 = require("./StructProperty");
16
16
  const TextProperty_1 = require("./TextProperty");
@@ -54,14 +54,14 @@ class ArrayProperty extends BasicProperty_1.BasicProperty {
54
54
  property = new ArrayProperty(subtype, new Array(elementCount).fill(0).map(() => EnumProperty_1.EnumProperty.ReadValue(reader)), ueType, index);
55
55
  break;
56
56
  case "TextProperty":
57
- property = new ArrayProperty(subtype, new Array(elementCount).fill(0).map(() => TextProperty_1.TextProperty.ParseValue(reader)), ueType, index);
57
+ property = new ArrayProperty(subtype, new Array(elementCount).fill(0).map(() => TextProperty_1.TextProperty.ReadValue(reader)), ueType, index);
58
58
  break;
59
59
  case "InterfaceProperty":
60
60
  case "ObjectProperty":
61
61
  property = new ArrayProperty(subtype, new Array(elementCount).fill(0).map(() => ObjectProperty_1.ObjectProperty.ReadValue(reader)), ueType, index);
62
62
  break;
63
63
  case "SoftObjectProperty":
64
- property = new ArrayProperty(subtype, new Array(elementCount).fill(0).map(() => SoftObjectReference_1.SoftObjectReference.read(reader)), ueType, index);
64
+ property = new ArrayProperty(subtype, new Array(elementCount).fill(0).map(() => SoftObjectProperty_1.SoftObjectProperty.ReadValue(reader)), ueType, index);
65
65
  break;
66
66
  case "StructProperty":
67
67
  const name = reader.readString();
@@ -145,7 +145,7 @@ class ArrayProperty extends BasicProperty_1.BasicProperty {
145
145
  property.values.forEach(v => ObjectProperty_1.ObjectProperty.SerializeValue(writer, v));
146
146
  break;
147
147
  case "SoftObjectProperty":
148
- property.values.forEach(v => SoftObjectReference_1.SoftObjectReference.write(writer, v));
148
+ property.values.forEach(v => SoftObjectProperty_1.SoftObjectProperty.SerializeValue(writer, v));
149
149
  break;
150
150
  case "StructProperty":
151
151
  writer.writeString(propertyName);
@@ -19,7 +19,7 @@ class BoolProperty extends BasicProperty_1.BasicProperty {
19
19
  return reader.readByte() > 0;
20
20
  }
21
21
  static CalcOverhead(property) {
22
- return 2;
22
+ return 1 + 1;
23
23
  }
24
24
  static Serialize(writer, property) {
25
25
  BoolProperty.SerializeValue(writer, property.value);
@@ -21,7 +21,7 @@ class EnumProperty extends BasicProperty_1.BasicProperty {
21
21
  return reader.readString();
22
22
  }
23
23
  static CalcOverhead(property) {
24
- return property.value.name.length + 6;
24
+ return property.value.name.length + 5 + 1;
25
25
  }
26
26
  static Serialize(writer, property) {
27
27
  writer.writeString(property.value.name);
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MapProperty = exports.isMapProperty = void 0;
4
+ const DynamicStructPropertyValue_1 = require("../../structs/DynamicStructPropertyValue");
4
5
  const BasicProperty_1 = require("./BasicProperty");
5
6
  const ByteProperty_1 = require("./ByteProperty");
6
7
  const EnumProperty_1 = require("./EnumProperty");
@@ -8,7 +9,6 @@ const Int32Property_1 = require("./Int32Property");
8
9
  const Int64Property_1 = require("./Int64Property");
9
10
  const ObjectProperty_1 = require("./ObjectProperty");
10
11
  const StrProperty_1 = require("./StrProperty");
11
- const StructProperty_1 = require("./StructProperty");
12
12
  const isMapProperty = (property) => property.type === 'MapProperty';
13
13
  exports.isMapProperty = isMapProperty;
14
14
  class MapProperty extends BasicProperty_1.BasicProperty {
@@ -36,7 +36,7 @@ class MapProperty extends BasicProperty_1.BasicProperty {
36
36
  key = Array.from(reader.readBytes(12));
37
37
  }
38
38
  else {
39
- key = (0, StructProperty_1.ParseDynamicStructData)(reader, 0, property.keyType);
39
+ key = DynamicStructPropertyValue_1.DynamicStructPropertyValue.read(reader, 0, property.keyType);
40
40
  }
41
41
  break;
42
42
  case 'ObjectProperty':
@@ -53,6 +53,9 @@ class MapProperty extends BasicProperty_1.BasicProperty {
53
53
  case 'Int32Property':
54
54
  key = Int32Property_1.Int32Property.ReadValue(reader);
55
55
  break;
56
+ case 'Int64Property':
57
+ key = Int64Property_1.Int64Property.ReadValue(reader);
58
+ break;
56
59
  case 'ByteProperty':
57
60
  key = ByteProperty_1.ByteProperty.ReadValue(reader);
58
61
  break;
@@ -61,7 +64,7 @@ class MapProperty extends BasicProperty_1.BasicProperty {
61
64
  }
62
65
  switch (property.valueType) {
63
66
  case 'StructProperty':
64
- value = (0, StructProperty_1.ParseDynamicStructData)(reader, 0, property.valueType);
67
+ value = DynamicStructPropertyValue_1.DynamicStructPropertyValue.read(reader, 0, property.valueType);
65
68
  break;
66
69
  case 'ObjectProperty':
67
70
  value = ObjectProperty_1.ObjectProperty.ReadValue(reader);
@@ -106,7 +109,7 @@ class MapProperty extends BasicProperty_1.BasicProperty {
106
109
  writer.writeBytesArray(entry[0]);
107
110
  }
108
111
  else {
109
- (0, StructProperty_1.SerializeDynamicStructData)(writer, 0, entry[0]);
112
+ DynamicStructPropertyValue_1.DynamicStructPropertyValue.write(writer, 0, entry[0]);
110
113
  }
111
114
  break;
112
115
  case 'ObjectProperty':
@@ -123,6 +126,9 @@ class MapProperty extends BasicProperty_1.BasicProperty {
123
126
  case 'Int32Property':
124
127
  Int32Property_1.Int32Property.SerializeValue(writer, entry[0]);
125
128
  break;
129
+ case 'Int64Property':
130
+ Int64Property_1.Int64Property.SerializeValue(writer, entry[0]);
131
+ break;
126
132
  case 'ByteProperty':
127
133
  ByteProperty_1.ByteProperty.SerializeValue(writer, entry[0]);
128
134
  break;
@@ -131,7 +137,7 @@ class MapProperty extends BasicProperty_1.BasicProperty {
131
137
  }
132
138
  switch (property.valueType) {
133
139
  case 'StructProperty':
134
- (0, StructProperty_1.SerializeDynamicStructData)(writer, 0, entry[1]);
140
+ DynamicStructPropertyValue_1.DynamicStructPropertyValue.write(writer, 0, entry[1]);
135
141
  break;
136
142
  case 'ObjectProperty':
137
143
  ObjectProperty_1.ObjectProperty.SerializeValue(writer, entry[1]);
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ObjectProperty = exports.isObjectProperty = void 0;
4
4
  const GUIDInfo_1 = require("../../structs/GUIDInfo");
5
+ const ObjectReference_1 = require("../../structs/ObjectReference");
5
6
  const BasicProperty_1 = require("./BasicProperty");
6
7
  const isObjectProperty = (property) => property.type === 'ObjectProperty';
7
8
  exports.isObjectProperty = isObjectProperty;
@@ -16,11 +17,7 @@ class ObjectProperty extends BasicProperty_1.BasicProperty {
16
17
  return new ObjectProperty(value, ueType, guidInfo, index);
17
18
  }
18
19
  static ReadValue(reader) {
19
- const x = {
20
- levelName: reader.readString(),
21
- pathName: reader.readString()
22
- };
23
- return x;
20
+ return ObjectReference_1.ObjectReference.read(reader);
24
21
  }
25
22
  static CalcOverhead(property) {
26
23
  return 1;
@@ -30,8 +27,7 @@ class ObjectProperty extends BasicProperty_1.BasicProperty {
30
27
  ObjectProperty.SerializeValue(writer, property.value);
31
28
  }
32
29
  static SerializeValue(writer, value) {
33
- writer.writeString(value.levelName);
34
- writer.writeString(value.pathName);
30
+ ObjectReference_1.ObjectReference.write(writer, value);
35
31
  }
36
32
  }
37
33
  exports.ObjectProperty = ObjectProperty;
@@ -18,8 +18,8 @@ class SetProperty extends BasicProperty_1.BasicProperty {
18
18
  }
19
19
  static Parse(reader, ueType, index, propertyName) {
20
20
  const subtype = reader.readString();
21
- const unk2 = reader.skipBytes(1);
22
- const unk3 = reader.skipBytes(4);
21
+ reader.skipBytes(1);
22
+ reader.skipBytes(4);
23
23
  const elementCount = reader.readInt32();
24
24
  let property;
25
25
  switch (subtype) {
@@ -8,6 +8,8 @@ export declare class SoftObjectProperty extends BasicProperty {
8
8
  value: SoftObjectReference;
9
9
  constructor(value: SoftObjectReference, ueType?: string, guidInfo?: GUIDInfo, index?: number);
10
10
  static Parse(reader: BinaryReadable, ueType: string, index?: number): SoftObjectProperty;
11
+ static ReadValue(reader: BinaryReadable): SoftObjectReference;
11
12
  static CalcOverhead(property: SoftObjectProperty): number;
12
13
  static Serialize(writer: ByteWriter, property: SoftObjectProperty): void;
14
+ static SerializeValue(writer: ByteWriter, value: SoftObjectReference): void;
13
15
  }
@@ -16,6 +16,9 @@ class SoftObjectProperty extends BasicProperty_1.BasicProperty {
16
16
  const value = SoftObjectReference_1.SoftObjectReference.read(reader);
17
17
  return new SoftObjectProperty(value, ueType, guidInfo, index);
18
18
  }
19
+ static ReadValue(reader) {
20
+ return SoftObjectReference_1.SoftObjectReference.read(reader);
21
+ }
19
22
  static CalcOverhead(property) {
20
23
  return 1;
21
24
  }
@@ -23,5 +26,8 @@ class SoftObjectProperty extends BasicProperty_1.BasicProperty {
23
26
  GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
24
27
  SoftObjectReference_1.SoftObjectReference.write(writer, property.value);
25
28
  }
29
+ static SerializeValue(writer, value) {
30
+ SoftObjectReference_1.SoftObjectReference.write(writer, value);
31
+ }
26
32
  }
27
33
  exports.SoftObjectProperty = SoftObjectProperty;