Skip to content

Conversation

@elliotttate
Copy link

Summary

  • Adds support for playing the remastered OGV (Ogg Theora) video cutscenes from the Dark Forces Remaster, with the original iMUSE MIDI music synchronized to match
  • Pre-scans the original FILM cutscene chain to extract CUST actor cue points and their timestamps, then scales them to OGV duration so MIDI transitions fire at the correct visual moments for all cutscenes
  • Includes SRT subtitle support with the existing accessibility/caption system, OGV audio mixing alongside MIDI, and a user-facing toggle in the settings UI
  • Builds are gated behind ENABLE_OGV_CUTSCENES (CMake) / preprocessor define so it has zero impact when disabled

Details

  • New files: ogvPlayer.cpp/h (Theora/Vorbis decoding + OpenGL YUV rendering), remasterCutscenes.cpp/h (OGV path resolution from remaster install), srtParser.cpp/h (subtitle loading)
  • Modified: cutscene.cpp (OGV playback path + FILM-driven cue scheduling), audioSystem (PCM mixing for OGV audio), renderBackend (fullscreen quad for video frames), settings (remaster cutscene toggle), frontEndUi (settings checkbox)
  • CMakeLists.txt adds optional theoradec, ogg, vorbis dependencies behind the option flag
  • vcxproj updated for Windows builds with bundled ogg/theora/vorbis libs

Test plan

  • Play intro cutscene (scene 10) — music should start and transition at the same moments as the original LFD cutscene
  • Skip cutscene with ESC/Space/Enter — music should stop, no leftover state
  • Play with remaster cutscenes disabled in settings — original LFD path should be unaffected
  • Build without ENABLE_OGV_CUTSCENES — should compile cleanly with no OGV code included
  • Build on Linux with CMake + the theora/ogg/vorbis packages installed

Play Nightdive remaster's Ogg Theora video cutscenes when available,
falling back to original LFD/FILM cutscenes otherwise. Uses libtheora
for video decoding, libvorbis for audio, and a YUV->RGB GPU shader for
rendering. Includes SRT subtitle support, auto-detection of remaster
install paths, and a settings toggle.

Gated behind ENABLE_OGV_CUTSCENES compile flag.
Replace the hardcoded cue timer with a pre-scan approach that extracts
music cue points from the original FILM cutscene chain. Each FILM's CUST
actor is loaded and ticked to capture its cue value and timestamp, then
all times are scaled to match the OGV video duration. This ensures MIDI
music transitions fire at the correct visual moments for all cutscenes,
not just the intro.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant