Cutscene sytstem
This commit is contained in:
@@ -29,6 +29,10 @@ namespace SplashEdit.RuntimeCode
|
||||
public LuaFile sceneLuaFile;
|
||||
public float gteScaling;
|
||||
|
||||
// Cutscene data (v12)
|
||||
public PSXCutsceneClip[] cutscenes;
|
||||
public PSXAudioSource[] audioSources;
|
||||
|
||||
// Player
|
||||
public Vector3 playerPos;
|
||||
public Quaternion playerRot;
|
||||
@@ -115,7 +119,7 @@ namespace SplashEdit.RuntimeCode
|
||||
// ──────────────────────────────────────────────────────
|
||||
writer.Write('S');
|
||||
writer.Write('P');
|
||||
writer.Write((ushort)11); // version
|
||||
writer.Write((ushort)12); // version
|
||||
writer.Write((ushort)luaFiles.Count);
|
||||
writer.Write((ushort)scene.exporters.Length);
|
||||
writer.Write((ushort)0); // navmeshCount (legacy)
|
||||
@@ -208,6 +212,13 @@ namespace SplashEdit.RuntimeCode
|
||||
writer.Write((ushort)roomTriRefCount);
|
||||
}
|
||||
|
||||
// Cutscene header (version 12, 8 bytes)
|
||||
int cutsceneCount = scene.cutscenes?.Length ?? 0;
|
||||
writer.Write((ushort)cutsceneCount);
|
||||
writer.Write((ushort)0); // reserved_cs
|
||||
long cutsceneTableOffsetPos = writer.BaseStream.Position;
|
||||
writer.Write((uint)0); // cutsceneTableOffset placeholder
|
||||
|
||||
// ──────────────────────────────────────────────────────
|
||||
// Lua file metadata
|
||||
// ──────────────────────────────────────────────────────
|
||||
@@ -582,6 +593,30 @@ namespace SplashEdit.RuntimeCode
|
||||
log?.Invoke($"{audioClipCount} audio clips ({totalAudioBytes / 1024}KB ADPCM) written.", LogType.Log);
|
||||
}
|
||||
|
||||
// ──────────────────────────────────────────────────────
|
||||
// Cutscene data (version 12)
|
||||
// ──────────────────────────────────────────────────────
|
||||
if (cutsceneCount > 0)
|
||||
{
|
||||
PSXCutsceneExporter.ExportCutscenes(
|
||||
writer,
|
||||
scene.cutscenes,
|
||||
scene.exporters,
|
||||
scene.audioSources,
|
||||
scene.gteScaling,
|
||||
out long cutsceneTableActual,
|
||||
log);
|
||||
|
||||
// Backfill cutscene table offset in header
|
||||
if (cutsceneTableActual != 0)
|
||||
{
|
||||
long curPos = writer.BaseStream.Position;
|
||||
writer.Seek((int)cutsceneTableOffsetPos, SeekOrigin.Begin);
|
||||
writer.Write((uint)cutsceneTableActual);
|
||||
writer.Seek((int)curPos, SeekOrigin.Begin);
|
||||
}
|
||||
}
|
||||
|
||||
// Backfill offsets
|
||||
BackfillOffsets(writer, luaOffset, "lua", log);
|
||||
BackfillOffsets(writer, meshOffset, "mesh", log);
|
||||
|
||||
Reference in New Issue
Block a user