more fixes

This commit is contained in:
Jan Racek
2026-03-28 01:32:36 +01:00
parent 13ed569eaf
commit a251eeaed5
13 changed files with 83 additions and 53 deletions

View File

@@ -22,7 +22,6 @@ namespace SplashEdit.RuntimeCode
public TextureAtlas[] atlases;
public PSXInteractable[] interactables;
public AudioClipExport[] audioClips;
public PSXCollisionExporter collisionExporter;
public PSXNavRegionBuilder navRegionBuilder;
public PSXRoomBuilder roomBuilder;
public BVH bvh;
@@ -169,8 +168,8 @@ namespace SplashEdit.RuntimeCode
writer.Write((ushort)scene.sceneType);
writer.Write((ushort)triggerBoxCount); // was pad0
writer.Write((ushort)scene.collisionExporter.MeshCount);
writer.Write((ushort)scene.collisionExporter.TriangleCount);
writer.Write((ushort)0); // collisionMeshCount (removed, kept for binary compat)
writer.Write((ushort)0); // collisionTriCount (removed, kept for binary compat)
writer.Write((ushort)scene.navRegionBuilder.RegionCount);
writer.Write((ushort)scene.navRegionBuilder.PortalCount);
@@ -342,7 +341,7 @@ namespace SplashEdit.RuntimeCode
scene.bvh.WriteToBinary(writer, gte);
// ──────────────────────────────────────────────────────
// Interactable components (24 bytes each)
// Interactable components (28 bytes each)
// ──────────────────────────────────────────────────────
AlignToFourBytes(writer);
foreach (PSXInteractable interactable in scene.interactables)
@@ -353,11 +352,6 @@ namespace SplashEdit.RuntimeCode
float radiusSq = interactable.InteractionRadius * interactable.InteractionRadius;
writer.Write(PSXTrig.ConvertWorldToFixed12(radiusSq / (gte * gte)));
Vector3 offset = interactable.InteractionOffset;
writer.Write(PSXTrig.ConvertWorldToFixed12(offset.x / gte));
writer.Write(PSXTrig.ConvertWorldToFixed12(-offset.y / gte));
writer.Write(PSXTrig.ConvertWorldToFixed12(offset.z / gte));
writer.Write((byte)interactable.InteractButton);
byte flags = 0;
if (interactable.IsRepeatable) flags |= 0x01;
@@ -368,15 +362,14 @@ namespace SplashEdit.RuntimeCode
writer.Write((ushort)0); // currentCooldown (runtime)
writer.Write((ushort)goIndex);
}
// ──────────────────────────────────────────────────────
// World collision soup (version 7+)
// ──────────────────────────────────────────────────────
if (scene.collisionExporter.MeshCount > 0)
{
AlignToFourBytes(writer);
scene.collisionExporter.WriteToBinary(writer, gte);
// Prompt canvas name (16 bytes, null-terminated, zero-padded)
string canvasName = interactable.PromptCanvasName ?? "";
byte[] nameBytes = new byte[16];
int len = System.Math.Min(canvasName.Length, 15);
for (int ci = 0; ci < len; ci++)
nameBytes[ci] = (byte)canvasName[ci];
writer.Write(nameBytes);
}
// ──────────────────────────────────────────────────────