@etothepii/satisfactory-file-parser 0.4.12 → 0.4.14
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/CHANGELOG.md +12 -0
- package/README.md +43 -22
- package/build/parser/byte/binary-readable.interface.d.ts +0 -3
- package/build/parser/byte/binary-writable.interface.d.ts +20 -0
- package/build/parser/byte/binary-writable.interface.js +2 -0
- package/build/parser/byte/byte-reader.class.d.ts +0 -3
- package/build/parser/byte/byte-reader.class.js +0 -8
- package/build/parser/byte/byte-writer.class.d.ts +6 -3
- package/build/parser/byte/byte-writer.class.js +3 -1
- package/build/parser/satisfactory/blueprint/blueprint-reader.js +10 -10
- package/build/parser/satisfactory/edit/edit-constants.d.ts +157 -3
- package/build/parser/satisfactory/edit/edit-constants.js +237 -161
- package/build/parser/satisfactory/objects/DataFields.js +9 -9
- package/build/parser/satisfactory/objects/SaveObject.d.ts +1 -1
- package/build/parser/satisfactory/objects/SaveObject.js +1 -1
- package/build/parser/satisfactory/objects/property/generic/FloatProperty.js +1 -1
- package/build/parser/satisfactory/objects/property/generic/SetProperty.js +5 -2
- package/build/parser/satisfactory/objects/property/generic/StructProperty.js +13 -5
- package/build/parser/satisfactory/save/level.class.d.ts +1 -2
- package/build/parser/satisfactory/save/level.class.js +10 -15
- package/build/parser/satisfactory/save/save-reader.js +8 -4
- package/build/parser/satisfactory/save/save.types.d.ts +0 -25
- package/build/parser/satisfactory/structs/util.types.js +8 -8
- package/build/parser/stream/reworked/readable-stream-parser.d.ts +1 -0
- package/build/parser/stream/reworked/readable-stream-parser.js +28 -3
- package/package.json +1 -1
- package/build/parser/satisfactory/objects/ObjectReference.d.ts +0 -10
- package/build/parser/satisfactory/objects/ObjectReference.js +0 -17
- package/build/parser/satisfactory/objects/Property.d.ts +0 -272
- package/build/parser/satisfactory/objects/Property.js +0 -1177
- package/build/parser/satisfactory/objects/ue/FMD5Hash.d.ts +0 -7
- package/build/parser/satisfactory/objects/ue/FMD5Hash.js +0 -19
- package/build/parser/satisfactory/objects/ue/GUID.d.ts +0 -6
- package/build/parser/satisfactory/objects/ue/GUID.js +0 -21
- package/build/parser/satisfactory/save/asynchronous-level.class.d.ts +0 -9
- package/build/parser/satisfactory/save/asynchronous-level.class.js +0 -66
- package/build/parser/stream/byte-stream-reader.class.d.ts +0 -57
- package/build/parser/stream/byte-stream-reader.class.js +0 -241
- package/build/parser/stream/json-stream-state-writer.d.ts +0 -12
- package/build/parser/stream/json-stream-state-writer.js +0 -18
- package/build/parser/stream/json-stream-writable.d.ts +0 -20
- package/build/parser/stream/json-stream-writable.js +0 -83
- package/build/parser/stream/json-stream-writer.d.ts +0 -22
- package/build/parser/stream/json-stream-writer.js +0 -127
- package/build/parser/stream/reworked/stream-parser.d.ts +0 -6
- package/build/parser/stream/reworked/stream-parser.js +0 -31
- package/build/parser/stream/save-stream-json-stringifier.d.ts +0 -6
- package/build/parser/stream/save-stream-json-stringifier.js +0 -35
- package/build/parser/stream/save-stream-reader.class.d.ts +0 -15
- package/build/parser/stream/save-stream-reader.class.js +0 -121
- package/build/parser/stream/save-stream-writer.class.d.ts +0 -25
- package/build/parser/stream/save-stream-writer.class.js +0 -119
- package/build/parser/stream/stream-level.class.d.ts +0 -12
- package/build/parser/stream/stream-level.class.js +0 -103
- package/build/parser/stream/stream-parser.d.ts +0 -40
- package/build/parser/stream/stream-parser.js +0 -225
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.4.14] (2024-10-02)
|
|
4
|
+
### updated README
|
|
5
|
+
* updated the code examples with more context
|
|
6
|
+
|
|
7
|
+
### Internal renamings (won't affect you if you stick to the code examples)
|
|
8
|
+
* improved the interface for abstract parser classes
|
|
9
|
+
* extended some error log messages
|
|
10
|
+
* added an additional check when parsing struct property InventoryItem, since ported saves often have a few more bytes.
|
|
11
|
+
* changed function name `writeFloat()` to `writeFloat32()` of the save writer.
|
|
12
|
+
* changed variable name `saveOrBlueprintIndicator` to `objectVersion` for objects, since the meaning of that number became now more clear.
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ This parser can read, modify and write:
|
|
|
9
9
|
- Blueprint Files `.sbp`, `.sbpcfg`
|
|
10
10
|
|
|
11
11
|
## Supported Versions
|
|
12
|
-
The version support of the packages is indicated below.
|
|
12
|
+
The version support of the packages is indicated below. Some bugs might still be present, see Bug Reporting further down.
|
|
13
13
|
|
|
14
14
|
Game Version Files of U5 and below are NOT supported.
|
|
15
15
|
|
|
@@ -18,31 +18,42 @@ 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.
|
|
21
|
+
| U1.0 | ✅ >= 0.4.14 |
|
|
22
22
|
|
|
23
|
+
## Changelog
|
|
24
|
+
The Changelog is alongside the readme [here](./CHANGELOG.md)
|
|
23
25
|
|
|
24
26
|
## Installation via npm
|
|
25
27
|
`npm install @etothepii/satisfactory-file-parser`
|
|
26
28
|
|
|
27
29
|
## Usage of Save Parsing
|
|
28
30
|
|
|
29
|
-
I recommend parsing via stream, to save RAM. The binary data of the whole save will still be in memory, but the converted JSON
|
|
30
|
-
The returned `stream` is a readable WHATWG stream of type string.
|
|
31
|
+
I recommend parsing via stream, to save RAM. The binary data of the whole save will still be in memory, but the converted JSON can be streamed. (You can of course keep reading the stream in memory).
|
|
32
|
+
The returned `stream` is a readable WHATWG stream of type string and represents a `SatisfactorySave` object. this object can be serialized again.
|
|
31
33
|
WHATWG is used by default by browsers. Node js can use them using `Writable.toWeb()` and `Writable.fromWeb()` for example.
|
|
32
34
|
|
|
33
35
|
```js
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
import * as fs from 'fs';
|
|
37
|
+
import * as path from 'path';
|
|
38
|
+
import { Writable } from 'stream';
|
|
39
|
+
import { WritableStream } from 'stream/web';
|
|
40
|
+
import { ReadableStreamParser } from '@etothepii/satisfactory-file-parser';
|
|
41
|
+
|
|
42
|
+
const filepath = path.join(__dirname, 'MySave.sav');
|
|
43
|
+
const file = fs.readFileSync(filepath);
|
|
44
|
+
const outJsonPath = path.join(__dirname, 'MySave.json');
|
|
45
|
+
const jsonFileStream = fs.createWriteStream(outJsonPath, { highWaterMark: 1024 * 1024 * 200 }); // your outgoing JSON stream. In this case directly to file.
|
|
46
|
+
const whatwgWriteStream = Writable.toWeb(jsonFileStream) as WritableStream<string>; // convert the file stream to WHATWG-compliant stream
|
|
47
|
+
|
|
48
|
+
const { stream, startStreaming } = ReadableStreamParser.CreateReadableStreamFromSaveToJson('MySave', file, decompressedBody => {
|
|
38
49
|
console.log('on binary body data.');
|
|
39
50
|
}, (progress: number, msg: string | undefined) => {
|
|
40
51
|
// a callback for reporting progress as number [0,1]. Sometimes has a message.
|
|
41
|
-
console.log(
|
|
52
|
+
console.log(`progress`, progress, msg);
|
|
42
53
|
});
|
|
43
54
|
|
|
44
55
|
stream.pipeTo(whatwgWriteStream);
|
|
45
|
-
|
|
56
|
+
jsonFileStream.on('close', () => {
|
|
46
57
|
// write stream finished
|
|
47
58
|
});
|
|
48
59
|
|
|
@@ -55,44 +66,49 @@ For example, when writing the header or when writing a chunk of the save body.
|
|
|
55
66
|
The splitting in individual chunks enables you to more easily stream the binary data to somewhere else.
|
|
56
67
|
```js
|
|
57
68
|
import * as fs from 'fs';
|
|
69
|
+
import * as path from 'path';
|
|
58
70
|
import { Parser } from "@etothepii/satisfactory-file-parser";
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
|
|
72
|
+
// save is your SatisfactorySave object to serialize. In this example i read it back in from a json file.
|
|
73
|
+
const save = JSON.parse(fs.readFileSync(path.join(__dirname, 'MySave.json'), {encoding: 'utf-8'}));
|
|
74
|
+
|
|
75
|
+
let fileHeader: Uint8Array;
|
|
76
|
+
const bodyChunks: Uint8Array[] = [];
|
|
77
|
+
Parser.WriteSave(save, binaryBeforeCompressed => {
|
|
62
78
|
console.log('on binary data before being compressed.');
|
|
63
79
|
}, header => {
|
|
64
80
|
console.log('on save header.');
|
|
65
|
-
|
|
81
|
+
fileHeader = header;
|
|
66
82
|
}, chunk => {
|
|
67
83
|
console.log('on save body chunk.');
|
|
68
84
|
bodyChunks.push(chunk);
|
|
69
85
|
});
|
|
70
86
|
|
|
71
87
|
// write complete sav file back to disk
|
|
72
|
-
fs.writeFileSync('./MyModifiedSave.sav', Buffer.concat([
|
|
88
|
+
fs.writeFileSync('./MyModifiedSave.sav', Buffer.concat([fileHeader!, ...bodyChunks]));
|
|
73
89
|
```
|
|
74
90
|
|
|
75
91
|
|
|
76
|
-
### Old
|
|
92
|
+
### Old Save Parsing. Deprecated.
|
|
77
93
|
For reading a save file (`.sav`) and parse In-Memory, just pass a Buffer to the parser with the file content.
|
|
78
94
|
```js
|
|
79
95
|
import * as fs from 'fs';
|
|
80
96
|
import { Parser } from "@etothepii/satisfactory-file-parser";
|
|
81
97
|
|
|
82
98
|
const file = fs.readFileSync('./MySave.sav') as Buffer;
|
|
83
|
-
const parsedSave = Parser.ParseSaveFile(file);
|
|
99
|
+
const parsedSave = Parser.ParseSaveFile('MySave', file);
|
|
84
100
|
```
|
|
85
101
|
|
|
86
102
|
|
|
87
103
|
## Usage of Blueprint Parsing
|
|
88
|
-
|
|
104
|
+
Note, that blueprints consist of 2 files. The `.sbp` main file and the config file `.sbpcfg`.
|
|
89
105
|
|
|
90
106
|
```js
|
|
91
107
|
import * as fs from 'fs';
|
|
92
108
|
import { Parser } from "@etothepii/satisfactory-file-parser";
|
|
93
109
|
|
|
94
|
-
const mainFile = fs.readFileSync('./MyBlueprint.sbp')
|
|
95
|
-
const configFile = fs.readFileSync('./MyBlueprint.sbpcfg')
|
|
110
|
+
const mainFile = fs.readFileSync('./MyBlueprint.sbp');
|
|
111
|
+
const configFile = fs.readFileSync('./MyBlueprint.sbpcfg');
|
|
96
112
|
const parsedBlueprint = Parser.ParseBlueprintFiles('MyBlueprint', mainFile, configFile);
|
|
97
113
|
```
|
|
98
114
|
|
|
@@ -101,7 +117,8 @@ Consequently, writing a blueprint into binary data works the same way with getti
|
|
|
101
117
|
import * as fs from 'fs';
|
|
102
118
|
import { Parser } from "@etothepii/satisfactory-file-parser";
|
|
103
119
|
|
|
104
|
-
let mainFileHeader: Uint8Array
|
|
120
|
+
let mainFileHeader: Uint8Array;
|
|
121
|
+
const mainFileBodyChunks: Uint8Array[] = [];
|
|
105
122
|
const summary = Parser.WriteBlueprintFiles(blueprint, mainFileBinaryBeforeCompressed => {
|
|
106
123
|
console.log('on main file binary data before being compressed.');
|
|
107
124
|
}, header => {
|
|
@@ -116,13 +133,17 @@ const summary = Parser.WriteBlueprintFiles(blueprint, mainFileBinaryBeforeCompre
|
|
|
116
133
|
fs.writeFileSync('./MyModifiedBlueprint.sbp', Buffer.concat([mainFileHeader!, ...mainFileBodyChunks]));
|
|
117
134
|
|
|
118
135
|
// write .sbpcfg file back to disk, we get that data from the result of WriteBlueprintFiles
|
|
119
|
-
fs.writeFileSync('./
|
|
136
|
+
fs.writeFileSync('./MyModifiedBlueprint.sbpcfg', Buffer.from(summary.configFileBinary));
|
|
120
137
|
```
|
|
121
138
|
|
|
139
|
+
### Bug Reports or Feedback
|
|
140
|
+
So far this was just a private hobby project. But i figure some people actually use it.
|
|
141
|
+
If you find a bug or have feedback about the parser, you can just hit me up on the satisfactory discord `etothepii`.
|
|
142
|
+
|
|
122
143
|
## License
|
|
123
144
|
MIT License
|
|
124
145
|
|
|
125
|
-
Copyright (c)
|
|
146
|
+
Copyright (c) 2024 etothepii
|
|
126
147
|
|
|
127
148
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
128
149
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { BinaryOperable } from "./binary-operable.interface";
|
|
2
2
|
export interface BinaryReadable extends BinaryOperable {
|
|
3
|
-
debug: boolean;
|
|
4
3
|
skipBytes: (count?: number) => void;
|
|
5
4
|
readBytes: (count: number) => Uint8Array;
|
|
6
5
|
readByte: () => number;
|
|
@@ -17,6 +16,4 @@ export interface BinaryReadable extends BinaryOperable {
|
|
|
17
16
|
readDouble: () => number;
|
|
18
17
|
readString: () => string;
|
|
19
18
|
getBufferProgress: () => number;
|
|
20
|
-
allocate: (count: number) => PromiseLike<void>;
|
|
21
|
-
getAmountAllocatedLeft: () => number;
|
|
22
19
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BinaryOperable } from "./binary-operable.interface";
|
|
2
|
+
export interface BinaryWritable extends BinaryOperable {
|
|
3
|
+
skipBytes: (count?: number) => void;
|
|
4
|
+
jumpTo(position: number): void;
|
|
5
|
+
writeByte: (value: number) => void;
|
|
6
|
+
writeBytes: (bytes: Uint8Array) => void;
|
|
7
|
+
writeBytesArray: (bytes: number[]) => void;
|
|
8
|
+
writeInt8: (value: number) => void;
|
|
9
|
+
writeUint8: (value: number) => void;
|
|
10
|
+
writeInt16: (value: number) => void;
|
|
11
|
+
writeUint16: (value: number) => void;
|
|
12
|
+
writeInt32: (value: number) => void;
|
|
13
|
+
writeUint32: (value: number) => void;
|
|
14
|
+
writeInt64: (value: bigint) => void;
|
|
15
|
+
writeUint64: (value: bigint) => void;
|
|
16
|
+
writeFloat32: (value: number) => void;
|
|
17
|
+
writeDouble: (value: number) => void;
|
|
18
|
+
writeString: (value: string) => void;
|
|
19
|
+
getBufferProgress: () => number;
|
|
20
|
+
}
|
|
@@ -4,7 +4,6 @@ export declare abstract class ByteReader implements BinaryReadable {
|
|
|
4
4
|
protected bufferView: DataView;
|
|
5
5
|
protected fileBuffer: ArrayBuffer;
|
|
6
6
|
alignment: Alignment;
|
|
7
|
-
debug: boolean;
|
|
8
7
|
protected currentByte: number;
|
|
9
8
|
protected handledByte: number;
|
|
10
9
|
protected maxByte: number;
|
|
@@ -27,8 +26,6 @@ export declare abstract class ByteReader implements BinaryReadable {
|
|
|
27
26
|
readFloat32(): number;
|
|
28
27
|
readDouble(): number;
|
|
29
28
|
readString(): string;
|
|
30
|
-
allocate(count: number): Promise<void>;
|
|
31
|
-
getAmountAllocatedLeft: () => number;
|
|
32
29
|
getBufferPosition: () => number;
|
|
33
30
|
getBufferSlice: (begin: number, end: number | undefined) => ArrayBuffer;
|
|
34
31
|
getBufferProgress: () => number;
|
|
@@ -4,11 +4,9 @@ exports.ByteReader = void 0;
|
|
|
4
4
|
const alignment_enum_1 = require("./alignment.enum");
|
|
5
5
|
class ByteReader {
|
|
6
6
|
constructor(fileBuffer, alignment) {
|
|
7
|
-
this.debug = false;
|
|
8
7
|
this.currentByte = 0;
|
|
9
8
|
this.handledByte = 0;
|
|
10
9
|
this.maxByte = 0;
|
|
11
|
-
this.getAmountAllocatedLeft = () => this.bufferView.byteLength - this.currentByte;
|
|
12
10
|
this.getBufferPosition = () => this.currentByte;
|
|
13
11
|
this.getBufferSlice = (begin, end) => this.bufferView.buffer.slice(begin, end);
|
|
14
12
|
this.getBufferProgress = () => this.currentByte / this.bufferView.buffer.byteLength;
|
|
@@ -117,11 +115,5 @@ class ByteReader {
|
|
|
117
115
|
throw error;
|
|
118
116
|
}
|
|
119
117
|
}
|
|
120
|
-
allocate(count) {
|
|
121
|
-
if (this.currentByte + count < this.bufferView.byteLength) {
|
|
122
|
-
console.warn('tried to allocate but there is not enough data left.');
|
|
123
|
-
}
|
|
124
|
-
return Promise.resolve();
|
|
125
|
-
}
|
|
126
118
|
}
|
|
127
119
|
exports.ByteReader = ByteReader;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Alignment } from "./alignment.enum";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { BinaryWritable } from './binary-writable.interface';
|
|
3
|
+
export declare abstract class ByteWriter implements BinaryWritable {
|
|
4
|
+
alignment: Alignment;
|
|
4
5
|
protected bufferArray: ArrayBuffer;
|
|
5
6
|
protected bufferView: DataView;
|
|
6
7
|
protected currentByte: number;
|
|
@@ -18,12 +19,14 @@ export declare abstract class ByteWriter {
|
|
|
18
19
|
writeUint32(value: number): void;
|
|
19
20
|
writeInt64(value: bigint): void;
|
|
20
21
|
writeUint64(value: bigint): void;
|
|
21
|
-
|
|
22
|
+
writeFloat32(value: number): void;
|
|
22
23
|
writeDouble(value: number): void;
|
|
23
24
|
writeString(value: string): void;
|
|
24
25
|
static IsASCIICompatible: (value: string) => boolean;
|
|
25
26
|
getBufferPosition: () => number;
|
|
26
27
|
getBufferSlice: (start: number, end?: number) => ArrayBuffer;
|
|
28
|
+
getBufferLength: () => number;
|
|
29
|
+
getBufferProgress: () => number;
|
|
27
30
|
writeBinarySizeFromPosition(lenIndicatorPos: number, start: number): void;
|
|
28
31
|
protected extendBufferIfNeeded(countNeededBytes: number, factor?: number): void;
|
|
29
32
|
protected truncateBuffer(): void;
|
|
@@ -6,6 +6,8 @@ class ByteWriter {
|
|
|
6
6
|
constructor(alignment, bufferSize = 500) {
|
|
7
7
|
this.getBufferPosition = () => this.currentByte;
|
|
8
8
|
this.getBufferSlice = (start, end) => this.bufferArray.slice(start, end);
|
|
9
|
+
this.getBufferLength = () => this.bufferArray.byteLength;
|
|
10
|
+
this.getBufferProgress = () => this.currentByte / this.bufferArray.byteLength;
|
|
9
11
|
this.alignment = alignment;
|
|
10
12
|
this.bufferArray = new ArrayBuffer(bufferSize);
|
|
11
13
|
this.bufferView = new DataView(this.bufferArray);
|
|
@@ -69,7 +71,7 @@ class ByteWriter {
|
|
|
69
71
|
this.bufferView.setBigUint64(this.currentByte, value, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
70
72
|
this.currentByte += 8;
|
|
71
73
|
}
|
|
72
|
-
|
|
74
|
+
writeFloat32(value) {
|
|
73
75
|
this.extendBufferIfNeeded(4);
|
|
74
76
|
this.bufferView.setFloat32(this.currentByte, value, this.alignment === alignment_enum_1.Alignment.LITTLE_ENDIAN);
|
|
75
77
|
this.currentByte += 4;
|
|
@@ -23,13 +23,13 @@ class BlueprintReader extends byte_reader_class_1.ByteReader {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
static ReadHeader(reader) {
|
|
26
|
-
const
|
|
27
|
-
const
|
|
26
|
+
const alwaysTwo = reader.readBytes(4);
|
|
27
|
+
const objectVersion = reader.readBytes(2 * 4);
|
|
28
28
|
const dimensions = util_types_1.vec3.ParseInt(reader);
|
|
29
29
|
let itemTypeCount = reader.readInt32();
|
|
30
30
|
const itemCosts = new Array(itemTypeCount).fill(['', 0]);
|
|
31
31
|
for (let i = 0; i < itemTypeCount; i++) {
|
|
32
|
-
|
|
32
|
+
reader.readInt32();
|
|
33
33
|
let itemPathName = reader.readString();
|
|
34
34
|
let itemCount = reader.readInt32();
|
|
35
35
|
itemCosts[i] = [itemPathName, itemCount];
|
|
@@ -37,7 +37,7 @@ class BlueprintReader extends byte_reader_class_1.ByteReader {
|
|
|
37
37
|
let recipeCount = reader.readInt32();
|
|
38
38
|
const recipeRefs = new Array(recipeCount).fill('');
|
|
39
39
|
for (let i = 0; i < recipeCount; i++) {
|
|
40
|
-
|
|
40
|
+
reader.readInt32();
|
|
41
41
|
const recipeName = reader.readString();
|
|
42
42
|
recipeRefs[i] = recipeName;
|
|
43
43
|
}
|
|
@@ -105,7 +105,7 @@ class BlueprintReader extends byte_reader_class_1.ByteReader {
|
|
|
105
105
|
level_class_1.Level.ReadObjectHeaders(reader, objects, () => { });
|
|
106
106
|
const someChecksumThing = reader.readInt32();
|
|
107
107
|
BlueprintReader.ReadBlueprintObjectContents(reader, objects, 0);
|
|
108
|
-
|
|
108
|
+
reader.getBufferPosition();
|
|
109
109
|
return objects;
|
|
110
110
|
}
|
|
111
111
|
static ReadBlueprintObjectContents(reader, objectsList, buildVersion) {
|
|
@@ -133,14 +133,14 @@ class BlueprintConfigReader extends byte_reader_class_1.ByteReader {
|
|
|
133
133
|
this.parse = () => BlueprintConfigReader.ParseConfig(this);
|
|
134
134
|
}
|
|
135
135
|
static ParseConfig(reader) {
|
|
136
|
-
const
|
|
136
|
+
const alwaysTwo = reader.readInt32();
|
|
137
137
|
const description = reader.readString();
|
|
138
|
-
const
|
|
139
|
-
const
|
|
138
|
+
const iconID = reader.readInt32();
|
|
139
|
+
const color = util_types_1.col4.ParseRGBA(reader);
|
|
140
140
|
return {
|
|
141
141
|
description,
|
|
142
|
-
color
|
|
143
|
-
iconID
|
|
142
|
+
color,
|
|
143
|
+
iconID,
|
|
144
144
|
};
|
|
145
145
|
}
|
|
146
146
|
}
|
|
@@ -870,6 +870,68 @@ export declare const EDIT: {
|
|
|
870
870
|
readonly CLASS_NAME: "Build_Ramp_Frame_Inverted_01_C";
|
|
871
871
|
};
|
|
872
872
|
};
|
|
873
|
+
readonly STAIRS: {
|
|
874
|
+
readonly NORMAL_8x1: {
|
|
875
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/FicsitSet/Build_Stair_FicsitSet_8x1_01.Build_Stair_FicsitSet_8x1_01_C";
|
|
876
|
+
readonly CLASS_NAME: "Build_Stair_FicsitSet_8x1_01_C";
|
|
877
|
+
};
|
|
878
|
+
readonly NORMAL_8x2: {
|
|
879
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/FicsitSet/Build_Stair_FicsitSet_8x2_01.Build_Stair_FicsitSet_8x2_01_C";
|
|
880
|
+
readonly CLASS_NAME: "Build_Stair_FicsitSet_8x2_01_C";
|
|
881
|
+
};
|
|
882
|
+
readonly NORMAL_8x4: {
|
|
883
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/FicsitSet/Build_Stair_FicsitSet_8x4_01.Build_Stair_FicsitSet_8x4_01_C";
|
|
884
|
+
readonly CLASS_NAME: "Build_Stair_FicsitSet_8x4_01_C";
|
|
885
|
+
};
|
|
886
|
+
readonly CONCRETE_8x1: {
|
|
887
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/ConcreteSet/Build_Stair_Concrete_8x1.Build_Stair_Concrete_8x1_C";
|
|
888
|
+
readonly CLASS_NAME: "Build_Stair_Concrete_8x1_C";
|
|
889
|
+
};
|
|
890
|
+
readonly CONCRETE_8x2: {
|
|
891
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/ConcreteSet/Build_Stair_Concrete_8x2.Build_Stair_Concrete_8x2_C";
|
|
892
|
+
readonly CLASS_NAME: "Build_Stair_Concrete_8x2_C";
|
|
893
|
+
};
|
|
894
|
+
readonly CONCRETE_8x4: {
|
|
895
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/ConcreteSet/Build_Stair_Concrete_8x4.Build_Stair_Concrete_8x4_C";
|
|
896
|
+
readonly CLASS_NAME: "Build_Stair_Concrete_8x4_C";
|
|
897
|
+
};
|
|
898
|
+
readonly CONCRETE_POLISHED_8x1: {
|
|
899
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/PolishedConcreteSet/Build_Stair_PolishedConcrete_8x1.Build_Stair_PolishedConcrete_8x1_C";
|
|
900
|
+
readonly CLASS_NAME: "Build_Stair_PolishedConcrete_8x1_C";
|
|
901
|
+
};
|
|
902
|
+
readonly CONCRETE_POLISHED_8x2: {
|
|
903
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/PolishedConcreteSet/Build_Stair_PolishedConcrete_8x2.Build_Stair_PolishedConcrete_8x2_C";
|
|
904
|
+
readonly CLASS_NAME: "Build_Stair_PolishedConcrete_8x2_C";
|
|
905
|
+
};
|
|
906
|
+
readonly CONCRETE_POLISHED_8x4: {
|
|
907
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/PolishedConcreteSet/Build_Stair_PolishedConcrete_8x4.Build_Stair_PolishedConcrete_8x4_C";
|
|
908
|
+
readonly CLASS_NAME: "Build_Stair_PolishedConcrete_8x4_C";
|
|
909
|
+
};
|
|
910
|
+
readonly ASPHALT_8x1: {
|
|
911
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/AsphaltSet/Build_Stair_Asphalt_8x1.Build_Stair_Asphalt_8x1_C";
|
|
912
|
+
readonly CLASS_NAME: "Build_Stair_Asphalt_8x1_C";
|
|
913
|
+
};
|
|
914
|
+
readonly ASPHALT_8x2: {
|
|
915
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/AsphaltSet/Build_Stair_Asphalt_8x2.Build_Stair_Asphalt_8x2_C";
|
|
916
|
+
readonly CLASS_NAME: "Build_Stair_Asphalt_8x2_C";
|
|
917
|
+
};
|
|
918
|
+
readonly ASPHALT_8x4: {
|
|
919
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/AsphaltSet/Build_Stair_Asphalt_8x4.Build_Stair_Asphalt_8x4_C";
|
|
920
|
+
readonly CLASS_NAME: "Build_Stair_Asphalt_8x4_C";
|
|
921
|
+
};
|
|
922
|
+
readonly METAL_8x1: {
|
|
923
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/GripMetal/Build_Stair_GripMetal_8x1.Build_Stair_GripMetal_8x1_C";
|
|
924
|
+
readonly CLASS_NAME: "Build_Stair_GripMetal_8x1_C";
|
|
925
|
+
};
|
|
926
|
+
readonly METAL_8x2: {
|
|
927
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/GripMetal/Build_Stair_GripMetal_8x2.Build_Stair_GripMetal_8x2_C";
|
|
928
|
+
readonly CLASS_NAME: "Build_Stair_GripMetal_8x2_C";
|
|
929
|
+
};
|
|
930
|
+
readonly METAL_8x4: {
|
|
931
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Foundation/GripMetal/Build_Stair_GripMetal_8x4.Build_Stair_GripMetal_8x4_C";
|
|
932
|
+
readonly CLASS_NAME: "Build_Stair_GripMetal_8x4_C";
|
|
933
|
+
};
|
|
934
|
+
};
|
|
873
935
|
};
|
|
874
936
|
readonly WALL: {
|
|
875
937
|
readonly SOLID: {
|
|
@@ -1065,6 +1127,18 @@ export declare const EDIT: {
|
|
|
1065
1127
|
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Wall/Build_Wall_Window_8x4_04.Build_Wall_Window_8x4_04_C";
|
|
1066
1128
|
readonly CLASS_NAME: "Build_Wall_Window_8x4_04_C";
|
|
1067
1129
|
};
|
|
1130
|
+
readonly NORMAL_8x4_05: {
|
|
1131
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Wall/Build_Wall_Window_8x4_05.Build_Wall_Window_8x4_05_C";
|
|
1132
|
+
readonly CLASS_NAME: "Build_Wall_Window_8x4_05_C";
|
|
1133
|
+
};
|
|
1134
|
+
readonly NORMAL_8x4_06: {
|
|
1135
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Wall/Build_Wall_Window_8x4_06.Build_Wall_Window_8x4_06_C";
|
|
1136
|
+
readonly CLASS_NAME: "Build_Wall_Window_8x4_06_C";
|
|
1137
|
+
};
|
|
1138
|
+
readonly NORMAL_8x4_07: {
|
|
1139
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Wall/Build_Wall_Window_8x4_07.Build_Wall_Window_8x4_07_C";
|
|
1140
|
+
readonly CLASS_NAME: "Build_Wall_Window_8x4_07_C";
|
|
1141
|
+
};
|
|
1068
1142
|
readonly CONCRETE_8x4_01: {
|
|
1069
1143
|
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Wall/ConcreteWallSet/Build_Wall_Concrete_8x4_Window_01.Build_Wall_Concrete_8x4_Window_01_C";
|
|
1070
1144
|
readonly CLASS_NAME: "Build_Wall_Concrete_8x4_Window_01_C";
|
|
@@ -1458,6 +1532,22 @@ export declare const EDIT: {
|
|
|
1458
1532
|
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Fence/Build_Concrete_Barrier_01.Build_Concrete_Barrier_01_C";
|
|
1459
1533
|
readonly CLASS_NAME: "Build_Concrete_Barrier_01_C";
|
|
1460
1534
|
};
|
|
1535
|
+
readonly BARRIER_LOW: {
|
|
1536
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Barrier/Build_Barrier_Low_01.Build_Barrier_Low_01_C";
|
|
1537
|
+
readonly CLASS_NAME: "Build_Barrier_Low_01_C";
|
|
1538
|
+
};
|
|
1539
|
+
readonly BARRIER_TALL: {
|
|
1540
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/Barrier/Build_Barrier_Tall_01.Build_Barrier_Tall_01_C";
|
|
1541
|
+
readonly CLASS_NAME: "Build_Barrier_Tall_01_C";
|
|
1542
|
+
};
|
|
1543
|
+
readonly TARPFENCE: {
|
|
1544
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/TarpFence/Build_TarpFence.Build_TarpFence_C";
|
|
1545
|
+
readonly CLASS_NAME: "Build_TarpFence_C";
|
|
1546
|
+
};
|
|
1547
|
+
readonly CHAIN_LINK_FENCE: {
|
|
1548
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Building/TarpFence/Build_ChainLinkFence.Build_ChainLinkFence_C";
|
|
1549
|
+
readonly CLASS_NAME: "Build_ChainLinkFence_C";
|
|
1550
|
+
};
|
|
1461
1551
|
};
|
|
1462
1552
|
readonly WORKSHOP: {
|
|
1463
1553
|
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/Workshop/Build_Workshop.Build_Workshop_C";
|
|
@@ -1540,9 +1630,11 @@ export declare const EDIT: {
|
|
|
1540
1630
|
};
|
|
1541
1631
|
readonly POWER_POLE_WALL_MK1: {
|
|
1542
1632
|
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/PowerPoleWall/Build_PowerPoleWall.Build_PowerPoleWall_C";
|
|
1633
|
+
readonly CLASS_NAME: "Build_PowerPoleWall_C";
|
|
1543
1634
|
};
|
|
1544
1635
|
readonly POWER_POLE_WALL_MK2: {
|
|
1545
1636
|
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/PowerPoleWall/Build_PowerPoleWall_Mk2.Build_PowerPoleWall_Mk2_C";
|
|
1637
|
+
readonly CLASS_NAME: "Build_PowerPoleWall_Mk2_C";
|
|
1546
1638
|
};
|
|
1547
1639
|
};
|
|
1548
1640
|
readonly POWER_LINE: {
|
|
@@ -1777,9 +1869,35 @@ export declare const EDIT: {
|
|
|
1777
1869
|
readonly CLASS_NAME: "Build_QuantumEncoder_C";
|
|
1778
1870
|
};
|
|
1779
1871
|
};
|
|
1780
|
-
readonly
|
|
1781
|
-
readonly
|
|
1782
|
-
|
|
1872
|
+
readonly POWER_GENERATORS: {
|
|
1873
|
+
readonly COAL: {
|
|
1874
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/GeneratorCoal/Build_GeneratorCoal.Build_GeneratorCoal_C";
|
|
1875
|
+
readonly CLASS_NAME: "Build_GeneratorCoal_C";
|
|
1876
|
+
};
|
|
1877
|
+
readonly FUEL: {
|
|
1878
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/GeneratorFuel/Build_GeneratorFuel.Build_GeneratorFuel_C";
|
|
1879
|
+
readonly CLASS_NAME: "Build_GeneratorFuel_C";
|
|
1880
|
+
};
|
|
1881
|
+
readonly BIOMASS_AUTOMATED: {
|
|
1882
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/GeneratorBiomass/Build_GeneratorBiomass_Automated.Build_GeneratorBiomass_Automated_C";
|
|
1883
|
+
readonly CLASS_NAME: "Build_GeneratorBiomass_Automated_C";
|
|
1884
|
+
};
|
|
1885
|
+
readonly BIOMASS_INTEGRATED: {
|
|
1886
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/GeneratorBiomass/Build_GeneratorIntegratedBiomass.Build_GeneratorIntegratedBiomass_C";
|
|
1887
|
+
readonly CLASS_NAME: "Build_GeneratorIntegratedBiomass_C";
|
|
1888
|
+
};
|
|
1889
|
+
readonly POWER_STORAGE: {
|
|
1890
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/PowerStorage/Build_PowerStorageMk1.Build_PowerStorageMk1_C";
|
|
1891
|
+
readonly CLASS_NAME: "Build_PowerStorageMk1_C";
|
|
1892
|
+
};
|
|
1893
|
+
readonly NUCLEAR: {
|
|
1894
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/GeneratorNuclear/Build_GeneratorNuclear.Build_GeneratorNuclear_C";
|
|
1895
|
+
readonly CLASS_NAME: "Build_GeneratorNuclear_C";
|
|
1896
|
+
};
|
|
1897
|
+
readonly ALIEN_POWER_BUILDING: {
|
|
1898
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/AlienPower/Build_AlienPowerBuilding.Build_AlienPowerBuilding_C";
|
|
1899
|
+
readonly CLASS_NAME: "Build_AlienPowerBuilding_C";
|
|
1900
|
+
};
|
|
1783
1901
|
};
|
|
1784
1902
|
readonly STORAGE: {
|
|
1785
1903
|
readonly CONTAINER_MK_1: {
|
|
@@ -1831,6 +1949,14 @@ export declare const EDIT: {
|
|
|
1831
1949
|
readonly CLASS_NAME: "BUILD_Potty_mk1_C";
|
|
1832
1950
|
};
|
|
1833
1951
|
readonly SIGN: {
|
|
1952
|
+
readonly LARGE: {
|
|
1953
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/SignDigital/Build_StandaloneWidgetSign_Large.Build_StandaloneWidgetSign_Large_C";
|
|
1954
|
+
readonly CLASS_NAME: "Build_StandaloneWidgetSign_Large_C";
|
|
1955
|
+
};
|
|
1956
|
+
readonly HUGE: {
|
|
1957
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/SignDigital/Build_StandaloneWidgetSign_Huge.Build_StandaloneWidgetSign_Huge_C";
|
|
1958
|
+
readonly CLASS_NAME: "Build_StandaloneWidgetSign_Huge_C";
|
|
1959
|
+
};
|
|
1834
1960
|
readonly SMALL: {
|
|
1835
1961
|
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/SignDigital/Build_StandaloneWidgetSign_Small.Build_StandaloneWidgetSign_Small_C";
|
|
1836
1962
|
readonly CLASS_NAME: "Build_StandaloneWidgetSign_Small_C";
|
|
@@ -1843,6 +1969,26 @@ export declare const EDIT: {
|
|
|
1843
1969
|
readonly RECIPE: "/Game/FactoryGame/Recipes/Buildings/Recipe_StandaloneWidgetSign_SmallWide.Recipe_StandaloneWidgetSign_SmallWide_C";
|
|
1844
1970
|
readonly PREFAB_LAYOUT: "/Game/FactoryGame/Interface/UI/InGame/Signs/SignLayouts/BPW_Sign4x1_1.BPW_Sign4x1_1_C";
|
|
1845
1971
|
};
|
|
1972
|
+
readonly SMALL_VERY_WIDE: {
|
|
1973
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/SignDigital/Build_StandaloneWidgetSign_SmallVeryWide.Build_StandaloneWidgetSign_SmallVeryWide_C";
|
|
1974
|
+
readonly CLASS_NAME: "Build_StandaloneWidgetSign_SmallVeryWide_C";
|
|
1975
|
+
};
|
|
1976
|
+
readonly SQUARE_TINY: {
|
|
1977
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/SignDigital/Build_StandaloneWidgetSign_Square_Tiny.Build_StandaloneWidgetSign_Square_Tiny_C";
|
|
1978
|
+
readonly CLASS_NAME: "Build_StandaloneWidgetSign_Square_Tiny_C";
|
|
1979
|
+
};
|
|
1980
|
+
readonly SQUARE_SMALL: {
|
|
1981
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/SignDigital/Build_StandaloneWidgetSign_Square_Small.Build_StandaloneWidgetSign_Square_Small_C";
|
|
1982
|
+
readonly CLASS_NAME: "Build_StandaloneWidgetSign_Square_Small_C";
|
|
1983
|
+
};
|
|
1984
|
+
readonly SQUARE: {
|
|
1985
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/SignDigital/Build_StandaloneWidgetSign_Square.Build_StandaloneWidgetSign_Square_C";
|
|
1986
|
+
readonly CLASS_NAME: "Build_StandaloneWidgetSign_Square_C";
|
|
1987
|
+
};
|
|
1988
|
+
readonly MEDIUM: {
|
|
1989
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/SignDigital/Build_StandaloneWidgetSign_Medium.Build_StandaloneWidgetSign_Medium_C";
|
|
1990
|
+
readonly CLASS_NAME: "Build_StandaloneWidgetSign_Medium_C";
|
|
1991
|
+
};
|
|
1846
1992
|
readonly PORTRAIT: {
|
|
1847
1993
|
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/SignDigital/Build_StandaloneWidgetSign_Portrait.Build_StandaloneWidgetSign_Portrait_C";
|
|
1848
1994
|
readonly CLASS_NAME: "Build_StandaloneWidgetSign_Portrait_C";
|
|
@@ -1857,6 +2003,14 @@ export declare const EDIT: {
|
|
|
1857
2003
|
readonly PLAYER_STATE: {
|
|
1858
2004
|
readonly TYPE_PATH: "/Game/FactoryGame/Character/Player/BP_PlayerState.BP_PlayerState_C";
|
|
1859
2005
|
};
|
|
2006
|
+
readonly PORTAL: {
|
|
2007
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/Portal/Build_Portal.Build_Portal_C";
|
|
2008
|
+
readonly CLASS_NAME: "Build_Portal_C";
|
|
2009
|
+
};
|
|
2010
|
+
readonly PORTAL_SATELLITE: {
|
|
2011
|
+
readonly TYPE_PATH: "/Game/FactoryGame/Buildable/Factory/Portal/Build_PortalSatellite.Build_PortalSatellite_C";
|
|
2012
|
+
readonly CLASS_NAME: "Build_PortalSatellite_C";
|
|
2013
|
+
};
|
|
1860
2014
|
readonly CREATURE: {
|
|
1861
2015
|
readonly ELITE_STINGER: {
|
|
1862
2016
|
readonly TYPE_PATH: "/Game/FactoryGame/Character/Creature/Enemy/Stinger/BigStinger/Char_EliteStinger.Char_EliteStinger_C";
|