@etothepii/satisfactory-file-parser 0.4.3 → 0.4.5

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
@@ -18,7 +18,7 @@ Game Version Files of U5 and below are NOT supported.
18
18
  | <= U5 | ❌ |
19
19
  | U6 + U7 | ✅ 0.0.1 - 0.0.34 |
20
20
  | U8 | ✅ 0.1.20 - 0.3.7 |
21
- | U1.0 | ✅ >= 0.4.2 (Work in Progress)|
21
+ | U1.0 | ✅ >= 0.4.5 |
22
22
 
23
23
 
24
24
  ## Installation via npm
@@ -1885,6 +1885,15 @@ export declare const EDIT: {
1885
1885
  };
1886
1886
  };
1887
1887
  readonly SUBSYSTEMS_AND_MANAGERS: {
1888
+ readonly WORLD_SETTINGS: {
1889
+ readonly TYPE_PATH: "/Script/FactoryGame.FGWorldSettings";
1890
+ };
1891
+ readonly LIGHTWEIGHT_BUILDABLE_SUBSYSTEM: {
1892
+ readonly TYPE_PATH: "/Script/FactoryGame.FGLightweightBuildableSubsystem";
1893
+ };
1894
+ readonly BUILDABLE_SUBSYSTEM: {
1895
+ readonly TYPE_PATH: "/Game/FactoryGame/-Shared/Blueprint/BP_BuildableSubsystem.BP_BuildableSubsystem_C";
1896
+ };
1888
1897
  readonly FOLIAGE_REMOVAL_SUBSYSTEM: {
1889
1898
  readonly TYPE_PATH: "/Script/FactoryGame.FGFoliageRemovalSubsystem";
1890
1899
  };
@@ -1969,6 +1969,15 @@ exports.EDIT = {
1969
1969
  }
1970
1970
  },
1971
1971
  SUBSYSTEMS_AND_MANAGERS: {
1972
+ WORLD_SETTINGS: {
1973
+ TYPE_PATH: '/Script/FactoryGame.FGWorldSettings',
1974
+ },
1975
+ LIGHTWEIGHT_BUILDABLE_SUBSYSTEM: {
1976
+ TYPE_PATH: '/Script/FactoryGame.FGLightweightBuildableSubsystem'
1977
+ },
1978
+ BUILDABLE_SUBSYSTEM: {
1979
+ TYPE_PATH: '/Game/FactoryGame/-Shared/Blueprint/BP_BuildableSubsystem.BP_BuildableSubsystem_C'
1980
+ },
1972
1981
  FOLIAGE_REMOVAL_SUBSYSTEM: {
1973
1982
  TYPE_PATH: '/Script/FactoryGame.FGFoliageRemovalSubsystem'
1974
1983
  },
@@ -1,11 +1,11 @@
1
1
  import { BinaryReadable } from "../../byte/binary-readable.interface";
2
2
  import { ByteWriter } from '../../byte/byte-writer.class';
3
3
  import { SaveWriter } from "../save/save-writer";
4
- import { vec3 } from "../structs/util.types";
4
+ import { Transform, vec3, vec4 } from '../structs/util.types';
5
5
  import { AbstractBaseProperty } from "./Property";
6
6
  import { SaveObject } from "./SaveObject";
7
7
  import { ObjectReference } from "./values/ObjectReference";
8
- export type SpecialAnyProperty = {} | PowerLineSpecialProperty | PlayerSpecialProperty;
8
+ export type SpecialAnyProperty = {} | PowerLineSpecialProperty | PlayerSpecialProperty | ConveyorSpecialProperty | BuildableSubsystemSpecialProperty;
9
9
  export type PowerLineSpecialProperty = {
10
10
  num: number;
11
11
  source: ObjectReference;
@@ -27,6 +27,18 @@ 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
+ unknownUseNumbers: [vec4, vec3];
36
+ swatchSlotTypePath: string;
37
+ paintFinishPath: string;
38
+ recipeTypePath: string;
39
+ }[];
40
+ }[];
41
+ };
30
42
  export declare class DataFields {
31
43
  constructor();
32
44
  static ParseProperties(obj: SaveObject, length: number, reader: BinaryReadable, buildVersion: number, typePath: string): void;
@@ -81,6 +81,43 @@ 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
+ const zeroes = util_types_1.vec4.Parse(reader);
98
+ const oneZeroOne = util_types_1.vec3.Parse(reader);
99
+ const unknownUseNumbers = [zeroes, oneZeroOne];
100
+ reader.readInt32();
101
+ const paintFinishPath = reader.readString();
102
+ reader.readInt32();
103
+ reader.readBytes(1);
104
+ const recipeTypePath = reader.readString();
105
+ reader.readInt64();
106
+ instances.push({
107
+ transform,
108
+ unknownUseNumbers,
109
+ swatchSlotTypePath,
110
+ paintFinishPath,
111
+ recipeTypePath,
112
+ });
113
+ }
114
+ property.buildables.push({
115
+ typePath,
116
+ instances
117
+ });
118
+ }
119
+ }
120
+ break;
84
121
  default:
85
122
  property = {};
86
123
  break;
@@ -219,6 +256,29 @@ class DataFields {
219
256
  break;
220
257
  }
221
258
  break;
259
+ case '/Script/FactoryGame.FGLightweightBuildableSubsystem':
260
+ writer.writeInt32(property.buildables.length);
261
+ if (property.buildables.length > 0) {
262
+ for (const buildable of property.buildables) {
263
+ writer.writeInt32(0);
264
+ writer.writeString(buildable.typePath);
265
+ writer.writeInt32(buildable.instances.length);
266
+ for (const instance of buildable.instances) {
267
+ util_types_1.Transform.Serialize(writer, instance.transform);
268
+ writer.writeInt32(0);
269
+ writer.writeString(instance.swatchSlotTypePath);
270
+ util_types_1.vec4.Serialize(writer, instance.unknownUseNumbers[0]);
271
+ util_types_1.vec3.Serialize(writer, instance.unknownUseNumbers[1]);
272
+ writer.writeInt32(0);
273
+ writer.writeString(instance.paintFinishPath);
274
+ writer.writeInt32(0);
275
+ writer.writeByte(0);
276
+ writer.writeString(instance.recipeTypePath);
277
+ writer.writeInt64(0n);
278
+ }
279
+ }
280
+ }
281
+ break;
222
282
  }
223
283
  }
224
284
  static SerializeProperty(writer, property, propertyName, buildVersion) {
@@ -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);
@@ -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 = util_types_1.Transform.Parse(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
- util_types_1.Transform.Serialize(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) {
@@ -53,6 +53,8 @@ export type Transform = {
53
53
  scale3d: vec3;
54
54
  };
55
55
  export declare namespace Transform {
56
+ const ParseF: (reader: BinaryReadable) => Transform;
56
57
  const Parse: (reader: BinaryReadable) => Transform;
57
58
  const Serialize: (writer: ByteWriter, transform: Transform) => void;
59
+ const SerializeF: (writer: ByteWriter, transform: Transform) => void;
58
60
  }
@@ -120,14 +120,26 @@ var vec2;
120
120
  })(vec2 || (exports.vec2 = vec2 = {}));
121
121
  var Transform;
122
122
  (function (Transform) {
123
- Transform.Parse = (reader) => {
123
+ Transform.ParseF = (reader) => {
124
124
  return {
125
125
  rotation: vec4.ParseF(reader),
126
126
  translation: vec3.ParseF(reader),
127
127
  scale3d: vec3.ParseF(reader),
128
128
  };
129
129
  };
130
+ Transform.Parse = (reader) => {
131
+ return {
132
+ rotation: vec4.Parse(reader),
133
+ translation: vec3.Parse(reader),
134
+ scale3d: vec3.Parse(reader),
135
+ };
136
+ };
130
137
  Transform.Serialize = (writer, transform) => {
138
+ vec4.Serialize(writer, transform.rotation);
139
+ vec3.Serialize(writer, transform.translation);
140
+ vec3.Serialize(writer, transform.scale3d);
141
+ };
142
+ Transform.SerializeF = (writer, transform) => {
131
143
  vec4.SerializeF(writer, transform.rotation);
132
144
  vec3.SerializeF(writer, transform.translation);
133
145
  vec3.SerializeF(writer, transform.scale3d);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@etothepii/satisfactory-file-parser",
3
3
  "author": "etothepii",
4
- "version": "0.4.3",
4
+ "version": "0.4.5",
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",