Migrate audio payloads onto asset VFS

This commit is contained in:
gamer147
2026-07-11 11:01:11 -04:00
parent e0ca7936e2
commit 233f791c10
9 changed files with 132 additions and 64 deletions

View File

@@ -167,6 +167,31 @@ public class Sys4AssetStoreTests
}
}
[Fact]
public void Sc0000BgmVoiceAndSfxPayloadsReadDirectlyFromArchives()
{
var catalog = Sys4AssetCatalog.Load(Paths.Sys4Ini);
var archiveOnly = new Sys4AssetStore(catalog, Paths.GameDir);
var resources = new ResourceMap(catalog, archiveOnly);
var bgm = resources.ResolveBgm(5);
Assert.Equal("BGM005.OGG", bgm?.Name);
AssertOgg(resources.ReadAudio(bgm!));
var voice = resources.Resolve("SC0000", 0x24);
Assert.Equal("MAN999.OGG", voice?.Name);
AssertOgg(resources.ReadAudio(voice!));
var sfx = resources.Resolve("SC0000", 0x28);
Assert.Equal("E0808.WAV", sfx?.Name);
var wav = resources.ReadAudio(sfx!);
Assert.Equal("E0808.WAV", wav.Name);
Assert.Equal("RIFF", Encoding.ASCII.GetString(wav.Bytes, 0, 4));
Assert.Equal("WAVE", Encoding.ASCII.GetString(wav.Bytes, 8, 4));
Assert.Throws<InvalidDataException>(() => resources.ReadAudio(catalog.ResolveName("SO001.AGF")!));
}
[Fact]
public void AllInstalledLooseScriptOverridesShadowArchiveCopies()
{
@@ -235,4 +260,10 @@ public class Sys4AssetStoreTests
stream.CopyTo(copy);
return copy.ToArray();
}
private static void AssertOgg(AudioPayload payload)
{
Assert.EndsWith(".OGG", payload.Name, StringComparison.OrdinalIgnoreCase);
Assert.Equal("OggS", Encoding.ASCII.GetString(payload.Bytes, 0, 4));
}
}