From 963ea32b0357051f0197ebfecc2a65fc4a173dba Mon Sep 17 00:00:00 2001 From: expiteRz Date: Sat, 1 Apr 2023 22:59:36 +0900 Subject: [PATCH 1/2] Attempt to support Extended Presence Flag --- src/util/kmpData.js | 9 ++++++--- src/viewer/viewerObjects.js | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/util/kmpData.js b/src/util/kmpData.js index 27f5c79..956658e 100644 --- a/src/util/kmpData.js +++ b/src/util/kmpData.js @@ -191,7 +191,7 @@ class KmpData for (let i = 0; i < entryNum; i++) { let id = parser.readUInt16() - parser.readUInt16() + let padding = parser.readUInt16() let pos = parser.readVec3() let rotation = parser.readVec3() let scale = parser.readVec3() @@ -199,7 +199,7 @@ class KmpData let settings = parser.readUInt16s(8) let presence = parser.readUInt16() - objects.push({ id, pos, rotation, scale, routeIndex, settings, presence }) + objects.push({ id, padding, pos, rotation, scale, routeIndex, settings, presence }) } break } @@ -504,6 +504,7 @@ class KmpData let kmpObj = loadedKmp.objects[i] let node = data.objects.addNode() + node.padding = kmpObj.padding node.pos = new Vec3(kmpObj.pos.x, -kmpObj.pos.z, -kmpObj.pos.y) node.rotation = new Vec3(kmpObj.rotation.x, kmpObj.rotation.y, kmpObj.rotation.z) node.scale = new Vec3(kmpObj.scale.x, kmpObj.scale.z, kmpObj.scale.y) @@ -962,7 +963,7 @@ class KmpData let obj = this.objects.nodes[i] w.writeUInt16(obj.id) - w.writeUInt16(0) + w.writeUInt16(obj.padding) w.writeFloat32(obj.pos.x) w.writeFloat32(-obj.pos.z) w.writeFloat32(-obj.pos.y) @@ -1263,6 +1264,7 @@ class KmpData this.objects.maxNodes = 0xffff this.objects.onAddNode = (node) => { + node.padding = 0 node.pos = new Vec3(0, 0, 0) node.rotation = new Vec3(0, 0, 0) node.scale = new Vec3(1, 1, 1) @@ -1274,6 +1276,7 @@ class KmpData } this.objects.onCloneNode = (newNode, oldNode) => { + newNode.padding = oldNode.padding newNode.pos = oldNode.pos.clone() newNode.rotation = oldNode.rotation.clone() newNode.scale = oldNode.scale.clone() diff --git a/src/viewer/viewerObjects.js b/src/viewer/viewerObjects.js index 0a92b11..2b5a463 100644 --- a/src/viewer/viewerObjects.js +++ b/src/viewer/viewerObjects.js @@ -365,13 +365,13 @@ class ViewerObjects extends PointViewer panel.addText(selectionGroup, "GOBJ Index: " + i.toString() + " (0x" + i.toString(16) + ")") } - let objName = panel.addText(selectionGroup, "Name: " + (selectedPoints.length > 0 ? objectNames[selectedPoints[0].id] : "")) + let objName = panel.addText(selectionGroup, "Name: " + (selectedPoints.length > 0 ? objectNames[selectedPoints[0].id&0xfff] : "")) panel.addSelectionNumericInput(selectionGroup, "ID", 0, 0xffff, selectedPoints.map(p => p.id), 1.0, 1.0, enabled, multiedit, (x, i) => { this.window.setNotSaved() selectedPoints[i].id = x - objName.innerHTML = "Name: " + objectNames[x] + objName.innerHTML = "Name: " + objectNames[(x&0xfff)] }) - + panel.addSelectionNumericInput(selectionGroup, "Padding", 0, 0xffff, selectedPoints.map(p => p.padding), 1.0, 1.0, enabled, multiedit, (x, i) => { this.window.setNotSaved(); selectedPoints[i].padding = x }) panel.addSelectionNumericInput(selectionGroup, "X", -1000000, 1000000, selectedPoints.map(p => p.pos.x), null, 100.0, enabled, multiedit, (x, i) => { this.window.setNotSaved(); selectedPoints[i].pos.x = x }) panel.addSelectionNumericInput(selectionGroup, "Y", -1000000, 1000000, selectedPoints.map(p => -p.pos.z), null, 100.0, enabled, multiedit, (x, i) => { this.window.setNotSaved(); selectedPoints[i].pos.z = -x }) panel.addSelectionNumericInput(selectionGroup, "Z", -1000000, 1000000, selectedPoints.map(p => -p.pos.y), null, 100.0, enabled, multiedit, (x, i) => { this.window.setNotSaved(); selectedPoints[i].pos.y = -x }) From 3aaa4d9c631312d25cafa8aecb75aa26caf67b0a Mon Sep 17 00:00:00 2001 From: expiteRz Date: Sat, 1 Apr 2023 23:32:16 +0900 Subject: [PATCH 2/2] Fix Object ID scanning - As per documentation for XPF, ID must be masked out the bits 0-9 to find the object name correctly. --- src/viewer/viewerObjects.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/viewer/viewerObjects.js b/src/viewer/viewerObjects.js index 2b5a463..1ad5a64 100644 --- a/src/viewer/viewerObjects.js +++ b/src/viewer/viewerObjects.js @@ -365,11 +365,11 @@ class ViewerObjects extends PointViewer panel.addText(selectionGroup, "GOBJ Index: " + i.toString() + " (0x" + i.toString(16) + ")") } - let objName = panel.addText(selectionGroup, "Name: " + (selectedPoints.length > 0 ? objectNames[selectedPoints[0].id&0xfff] : "")) + let objName = panel.addText(selectionGroup, "Name: " + (selectedPoints.length > 0 ? objectNames[selectedPoints[0].id&0x3ff] : "")) panel.addSelectionNumericInput(selectionGroup, "ID", 0, 0xffff, selectedPoints.map(p => p.id), 1.0, 1.0, enabled, multiedit, (x, i) => { this.window.setNotSaved() selectedPoints[i].id = x - objName.innerHTML = "Name: " + objectNames[(x&0xfff)] + objName.innerHTML = "Name: " + objectNames[(x&0x3ff)] }) panel.addSelectionNumericInput(selectionGroup, "Padding", 0, 0xffff, selectedPoints.map(p => p.padding), 1.0, 1.0, enabled, multiedit, (x, i) => { this.window.setNotSaved(); selectedPoints[i].padding = x }) panel.addSelectionNumericInput(selectionGroup, "X", -1000000, 1000000, selectedPoints.map(p => p.pos.x), null, 100.0, enabled, multiedit, (x, i) => { this.window.setNotSaved(); selectedPoints[i].pos.x = x })