This commit is contained in:
Jan Racek
2026-03-27 21:29:24 +01:00
parent 45a552be5a
commit 13ed569eaf
85 changed files with 1953 additions and 2470 deletions

View File

@@ -7,7 +7,7 @@ using UnityEngine;
namespace SplashEdit.RuntimeCode
{
/// <summary>
/// Pure binary serializer for the splashpack v8 format.
/// Pure binary serializer for the splashpack v16 format.
/// All I/O extracted from PSXSceneExporter so the MonoBehaviour stays thin.
/// </summary>
public static class PSXSceneWriter
@@ -72,7 +72,7 @@ namespace SplashEdit.RuntimeCode
// ═══════════════════════════════════════════════════════════════
/// <summary>
/// Serialize the scene to a splashpack v8 binary file.
/// Serialize the scene to a splashpack v16 binary file.
/// </summary>
/// <param name="path">Absolute file path to write.</param>
/// <param name="scene">Pre-built scene data.</param>
@@ -148,13 +148,13 @@ namespace SplashEdit.RuntimeCode
writer.Write((ushort)clutCount);
writer.Write((ushort)colliderCount);
writer.Write((ushort)scene.interactables.Length);
writer.Write((ushort)PSXTrig.ConvertCoordinateToPSX(scene.playerPos.x, gte));
writer.Write((ushort)PSXTrig.ConvertCoordinateToPSX(-scene.playerPos.y, gte));
writer.Write((ushort)PSXTrig.ConvertCoordinateToPSX(scene.playerPos.z, gte));
writer.Write(PSXTrig.ConvertCoordinateToPSX(scene.playerPos.x, gte));
writer.Write(PSXTrig.ConvertCoordinateToPSX(-scene.playerPos.y, gte));
writer.Write(PSXTrig.ConvertCoordinateToPSX(scene.playerPos.z, gte));
writer.Write((ushort)PSXTrig.ConvertToFixed12(scene.playerRot.eulerAngles.x * Mathf.Deg2Rad));
writer.Write((ushort)PSXTrig.ConvertToFixed12(scene.playerRot.eulerAngles.y * Mathf.Deg2Rad));
writer.Write((ushort)PSXTrig.ConvertToFixed12(scene.playerRot.eulerAngles.z * Mathf.Deg2Rad));
writer.Write(PSXTrig.ConvertToFixed12(scene.playerRot.eulerAngles.x * Mathf.Deg2Rad));
writer.Write(PSXTrig.ConvertToFixed12(scene.playerRot.eulerAngles.y * Mathf.Deg2Rad));
writer.Write(PSXTrig.ConvertToFixed12(scene.playerRot.eulerAngles.z * Mathf.Deg2Rad));
writer.Write((ushort)PSXTrig.ConvertCoordinateToPSX(scene.playerHeight, gte));
@@ -475,6 +475,7 @@ namespace SplashEdit.RuntimeCode
writer.Write((ushort)0); // padding
// Sentinel tpage = 0xFFFF marks untextured
// haha funny word. Sentinel, sentinel, sentinel. I could keep saying it forever.
writer.Write((ushort)0xFFFF);
writer.Write((ushort)0);
writer.Write((ushort)0);
@@ -828,6 +829,9 @@ namespace SplashEdit.RuntimeCode
// ══════════════════════════════════════════════════════
// DEAD ZONE — pixel/audio bulk data (freed after VRAM/SPU upload)
// Everything written after this point is not needed at runtime.
// You may be asking why we don't just put pixel/audio data in separate files
// or why don't we put this data at the end of the file to begin with. The answer is
// Very simple and I'm going to tell it to you right now... OH GOD I FORGOT TO TURN OFF THE STOVE (runs away)
// ══════════════════════════════════════════════════════
AlignToFourBytes(writer);
long pixelDataStart = writer.BaseStream.Position;