satisfactory-json
Advanced tools
Comparing version 0.0.4 to 0.0.5
@@ -29,3 +29,3 @@ import { Entity } from './types'; | ||
writeActor(obj: any): void; | ||
writeObject(obj: any): void; | ||
writeComponent(obj: any): void; | ||
writeEntity(entity: any, withNames: boolean, className: string): void; | ||
@@ -32,0 +32,0 @@ writeNone(): void; |
@@ -107,4 +107,3 @@ "use strict"; | ||
this.buffer.writeInt(saveJson.objects.length); | ||
for (let i = 0; i < saveJson.objects.length; i++) { | ||
const obj = saveJson.objects[i]; | ||
for (const obj of saveJson.objects) { | ||
this.buffer.writeInt(obj.type); | ||
@@ -115,3 +114,3 @@ if (obj.type === 1) { | ||
else if (obj.type === 0) { | ||
this.writeObject(obj); | ||
this.writeComponent(obj); | ||
} | ||
@@ -123,4 +122,3 @@ else { | ||
this.buffer.writeInt(saveJson.objects.length); | ||
for (let i = 0; i < saveJson.objects.length; i++) { | ||
const obj = saveJson.objects[i]; | ||
for (const obj of saveJson.objects) { | ||
if (obj.type === 1) { | ||
@@ -134,4 +132,3 @@ this.writeEntity(obj.entity, true, obj.className); | ||
this.buffer.writeInt(saveJson.collected.length); | ||
for (let i = 0; i < saveJson.collected.length; i++) { | ||
const obj = saveJson.collected[i]; | ||
for (const obj of saveJson.collected) { | ||
this.buffer.writeLengthPrefixedString(obj.levelName); | ||
@@ -171,3 +168,3 @@ this.buffer.writeLengthPrefixedString(obj.pathName); | ||
} | ||
writeObject(obj) { | ||
writeComponent(obj) { | ||
this.buffer.writeLengthPrefixedString(obj.className); | ||
@@ -184,9 +181,9 @@ this.buffer.writeLengthPrefixedString(obj.levelName); | ||
this.buffer.writeInt(entity.children.length); | ||
for (let i = 0; i < entity.children.length; i++) { | ||
this.buffer.writeLengthPrefixedString(entity.children[i].levelName); | ||
this.buffer.writeLengthPrefixedString(entity.children[i].pathName); | ||
for (const child of entity.children) { | ||
this.buffer.writeLengthPrefixedString(child.levelName); | ||
this.buffer.writeLengthPrefixedString(child.pathName); | ||
} | ||
} | ||
for (let i = 0; i < entity.properties.length; i++) { | ||
this.writeProperty(entity.properties[i]); | ||
for (const property of entity.properties) { | ||
this.writeProperty(property); | ||
} | ||
@@ -290,4 +287,4 @@ this.writeNone(); | ||
case 'Transform': | ||
for (let i = 0; i < property.value.properties.length; i++) { | ||
this.writeProperty(property.value.properties[i]); | ||
for (const prop of property.value.properties) { | ||
this.writeProperty(prop); | ||
} | ||
@@ -304,4 +301,4 @@ this.writeNone(); | ||
case 'InventoryStack': | ||
for (let i = 0; i < property.value.properties.length; i++) { | ||
this.writeProperty(property.value.properties[i]); | ||
for (const prop of property.value.properties) { | ||
this.writeProperty(prop); | ||
} | ||
@@ -318,3 +315,4 @@ this.writeNone(); | ||
this.writeProperty(property.value.properties[0]); | ||
// Dirty hack to make in this one case the inner property only take up 4 bytes | ||
// Dirty hack to make in this one case the inner property | ||
// only take up 4 bytes | ||
this.buffer.buffers[this.buffer.buffers.length - 1].length = | ||
@@ -341,14 +339,14 @@ oldval + 4; | ||
case 'IntProperty': | ||
for (let i = 0; i < property.value.values.length; i++) { | ||
this.buffer.writeInt(property.value.values[i]); | ||
for (const prop of property.value.values) { | ||
this.buffer.writeInt(prop); | ||
} | ||
break; | ||
case 'ByteProperty': | ||
for (let i = 0; i < property.value.values.length; i++) { | ||
this.buffer.writeByte(property.value.values[i]); | ||
for (const prop of property.value.values) { | ||
this.buffer.writeByte(prop); | ||
} | ||
break; | ||
case 'ObjectProperty': | ||
for (let i = 0; i < property.value.values.length; i++) { | ||
const obj = property.value.values[i]; | ||
for (const prop of property.value.values) { | ||
const obj = prop; | ||
this.buffer.writeLengthPrefixedString(obj.levelName); | ||
@@ -365,6 +363,6 @@ this.buffer.writeLengthPrefixedString(obj.pathName); | ||
this.buffer.writeHex(property.structUnknown, false); | ||
for (let i = 0; i < property.value.values.length; i++) { | ||
const obj = property.value.values[i]; | ||
for (let j = 0; j < obj.properties.length; j++) { | ||
this.writeProperty(obj.properties[j]); | ||
for (const prop of property.value.values) { | ||
const obj = prop; | ||
for (const innerProp of obj.properties) { | ||
this.writeProperty(innerProp); | ||
} | ||
@@ -387,9 +385,8 @@ this.writeNone(); | ||
this.buffer.writeInt(keys.length); | ||
for (let i = 0; i < keys.length; i++) { | ||
for (const key of keys) { | ||
// (let [key, value] of property.value.values) { | ||
const key = keys[i]; | ||
const value = property.value.values[key]; | ||
this.buffer.writeInt(+key); // parse key to int | ||
for (let j = 0; j < value.length; j++) { | ||
this.writeProperty(value[j]); | ||
for (const element of value) { | ||
this.writeProperty(element); | ||
} | ||
@@ -396,0 +393,0 @@ this.writeNone(); |
/// <reference types="node" /> | ||
import { Actor, Entity, Object, Property, SaveGame } from './types'; | ||
import { Actor, Entity, Component, Property, SaveGame } from './types'; | ||
declare class DataBuffer { | ||
@@ -24,3 +24,3 @@ buffer: Buffer; | ||
readActor(buffer: DataBuffer): Actor; | ||
readObject(buffer: DataBuffer): Object; | ||
readComponent(buffer: DataBuffer): Component; | ||
readEntity(buffer: DataBuffer, withNames: boolean, className: string): Entity; | ||
@@ -27,0 +27,0 @@ readProperty(buffer: DataBuffer, properties: Property[]): boolean; |
@@ -64,6 +64,3 @@ "use strict"; | ||
if (this.cursor + length > this.buffer.length) { | ||
// throw new Error('TOO LONG: ' +length + ' | ' + this.readHex(32) + ': ' + this.cursor + ' / ' + this.buffer.length ); | ||
// console.error(this.readHex(this.buffer.length - this.cursor -1)); | ||
console.log(this.readHex(32)); | ||
// return ''; | ||
console.trace('buffer < ' + length); | ||
@@ -141,3 +138,3 @@ throw new Error('cannot read string of length: ' + length); | ||
else if (type === 0) { | ||
saveJson['objects'].push(this.readObject(buffer)); | ||
saveJson['objects'].push(this.readComponent(buffer)); | ||
} | ||
@@ -150,3 +147,4 @@ else { | ||
const elementCount = buffer.readInt(); | ||
// # So far these counts have always been the same and the entities seem to belong 1 to 1 to the actors/objects read above | ||
// So far these counts have always been the same and the entities seem to belong 1 to 1 to | ||
// the actors/objects read above | ||
if (elementCount !== entryCount) { | ||
@@ -203,3 +201,3 @@ this.error('elementCount (' + elementCount + ') != entryCount(' + entryCount + ')'); | ||
} | ||
readObject(buffer) { | ||
readComponent(buffer) { | ||
return { | ||
@@ -310,3 +308,3 @@ type: 0, | ||
break; | ||
case 'ByteProperty': | ||
case 'ByteProperty': { | ||
const unk1 = buffer.readLengthPrefixedString(); | ||
@@ -337,2 +335,3 @@ buffer.assertNullByte(); | ||
break; | ||
} | ||
case 'EnumProperty': | ||
@@ -368,3 +367,3 @@ const enumName = buffer.readLengthPrefixedString(); | ||
case 'Vector': | ||
case 'Rotator': | ||
case 'Rotator': { | ||
properties.push({ | ||
@@ -383,3 +382,4 @@ name, | ||
break; | ||
case 'Box': | ||
} | ||
case 'Box': { | ||
properties.push({ | ||
@@ -406,3 +406,4 @@ name, | ||
break; | ||
case 'Color': | ||
} | ||
case 'Color': { | ||
properties.push({ | ||
@@ -422,3 +423,4 @@ name, | ||
break; | ||
case 'LinearColor': | ||
} | ||
case 'LinearColor': { | ||
properties.push({ | ||
@@ -438,3 +440,4 @@ name, | ||
break; | ||
case 'Transform': | ||
} | ||
case 'Transform': { | ||
const props = []; | ||
@@ -453,3 +456,4 @@ while (this.readProperty(buffer, props)) { } | ||
break; | ||
case 'Quat': | ||
} | ||
case 'Quat': { | ||
properties.push({ | ||
@@ -469,2 +473,3 @@ name, | ||
break; | ||
} | ||
case 'RemovedInstanceArray': | ||
@@ -492,3 +497,4 @@ case 'InventoryStack': { | ||
const props = []; | ||
this.readProperty(buffer, props); // can't consume null here because it is needed by the entaingling struct | ||
this.readProperty(buffer, props); | ||
// can't consume null here because it is needed by the entaingling struct | ||
properties.push({ | ||
@@ -510,3 +516,3 @@ name, | ||
} | ||
case 'RailroadTrackPosition': | ||
case 'RailroadTrackPosition': { | ||
properties.push({ | ||
@@ -526,3 +532,4 @@ name, | ||
break; | ||
case 'TimerHandle': | ||
} | ||
case 'TimerHandle': { | ||
properties.push({ | ||
@@ -539,2 +546,3 @@ name, | ||
break; | ||
} | ||
default: | ||
@@ -546,3 +554,3 @@ console.log(buffer.readHex(32)); | ||
break; | ||
case 'ArrayProperty': | ||
case 'ArrayProperty': { | ||
const itemType = buffer.readLengthPrefixedString(); | ||
@@ -582,10 +590,4 @@ buffer.assertNullByte(); | ||
} | ||
const type = buffer.readLengthPrefixedString(); | ||
const unknown = buffer.readHex(17); // TODO | ||
/*property['structName'] = structName | ||
property['structType'] = structType | ||
property['structInnerType'] = type | ||
property['structUnknown'] = readHex(17) # TODO what are those? | ||
property['_structLength'] = structSize*/ | ||
const structInnerType = buffer.readLengthPrefixedString(); | ||
const structUnknown = buffer.readHex(17); // TODO | ||
for (let j = 0; j < count; j++) { | ||
@@ -602,6 +604,5 @@ const props = []; | ||
index, | ||
structUnknown: unknown, | ||
structName, | ||
structType, | ||
structInnerType: type, | ||
structInnerType, | ||
value: { | ||
@@ -628,2 +629,3 @@ type: itemType, | ||
break; | ||
} | ||
case 'MapProperty': { | ||
@@ -630,0 +632,0 @@ const mapName = buffer.readLengthPrefixedString(); |
@@ -11,3 +11,3 @@ export interface SaveGame { | ||
sessionVisibility: number; | ||
objects: ActorOrObject[]; | ||
objects: ActorOrComponent[]; | ||
collected: ObjectReference[]; | ||
@@ -30,3 +30,3 @@ missing: string; | ||
} | ||
export interface Object { | ||
export interface Component { | ||
type: number; | ||
@@ -39,3 +39,3 @@ className: string; | ||
} | ||
export declare type ActorOrObject = Actor | Object; | ||
export declare type ActorOrComponent = Actor | Component; | ||
export interface Entity { | ||
@@ -89,4 +89,6 @@ levelName?: string; | ||
export interface ObjectProperty extends BaseProperty { | ||
levelName: string; | ||
pathName: string; | ||
value: { | ||
levelName: string; | ||
pathName: string; | ||
}; | ||
} | ||
@@ -101,2 +103,3 @@ export interface StructProperty extends BaseProperty { | ||
structInnerType?: string; | ||
value: any; | ||
} | ||
@@ -103,0 +106,0 @@ export interface MapProperty extends BaseProperty { |
{ | ||
"name": "satisfactory-json", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"description": "Convert Satisfactory save files to JSON and back", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
1271
50598