@etothepii/satisfactory-file-parser 0.1.11 → 0.1.13

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