isle-portable/extensions
Christian Semmler b566ddaea8
Decouple SI extraction from Animation::Loader into reusable SIReader
Extract generic SI file reading and audio extraction from
Multiplayer::Animation::Loader into a new Multiplayer::SIReader class.
This eliminates the coupling where NetworkManager reached into the
Animation namespace to extract horn WAV data, and removes the wasteful
intermediate horn cache (LegoCacheSound::Create copies PCM data, so the
cache served no purpose after template creation).

- New Multiplayer::SIReader owns SI file handle, header-only reading,
  lazy object loading, and audio track extraction
- New Multiplayer::AudioTrack struct (moved from SceneAnimData::AudioTrack)
- Animation::Loader delegates SI access via SetSIReader() pointer
- NetworkManager owns SIReader, passes it to Loader, uses it directly
  for horn sound extraction via ExtractFirstAudio()
- Consolidate duplicate horn vehicle arrays into single g_hornVehicles[]
- Move HornMsg next to EmoteMsg in protocol (both one-shot broadcasts)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 14:19:24 -07:00
..
docs/multiplayer Fix camera flip bugs, refactor camera (#11) 2026-03-10 01:15:22 +01:00
include/extensions Decouple SI extraction from Animation::Loader into reusable SIReader 2026-03-28 14:19:24 -07:00
src Decouple SI extraction from Animation::Loader into reusable SIReader 2026-03-28 14:19:24 -07:00