kcat / dsoal

A DirectSound DLL replacer that enables surround sound, HRTF, and EAX support via OpenAL Soft
GNU Lesser General Public License v2.1
383 stars 51 forks source link

Midnight Club II crashes on startup #88

Open PlayNeth opened 1 year ago

PlayNeth commented 1 year ago

Game basically doesn't post at all with the dsoal files present, crashes every time after the intro. Here's the log files: alsoft_error.txt dsoal_error.txt

PlayNeth commented 1 year ago

Was doing some investigation, and seems like the game uses DirectMusic for the menu music and DSOAL doesn't like that very much, so it crashes whenever it tries to load it. Otherwise, over on Linux without enabling DirectMusic, everything works flawlessly but not the menu music. Hope this piece of info is useful somewhat

ThreeDeeJay commented 1 month ago

Unfortunately the c++-rewrite branch build hasn't fixed this, still crashes.

4218:fixme:dsound:DSound8OAL::QueryInterface Unhandled GUID: {2a8af120-e9de-4132-aaa5-4bdda5f325b8}

@kcat Is there a way to disable DirectMusic on Windows or ignore it like DirectSound's native FX API (SetFX) to prevent crash in https://github.com/kcat/dsoal/issues/39#issuecomment-2330314303?

kcat commented 1 month ago

Not as far as I know. Maybe some registry edit to disable DirectMusic, which would likely cause problems with stuff that relies on it. Or maybe some way to override the DLL for specific apps with something that won't work (and hope the app won't fail without dmusic being available).

ThreeDeeJay commented 1 month ago

I see. I wonder how NOLF2 manages to avoid the crash tho 🤔 https://github.com/kcat/dsoal/issues/61#issuecomment-1500971538

kcat commented 1 month ago

Different apps behave differently in response to DirectMusic not working. Depending on how DirectMusic itself behaves from not being able to get that interface, some apps may or may not be prepared to deal with that failure mode.

UserGit-2021 commented 1 month ago

Different apps behave differently in response to DirectMusic not working. Depending on how DirectMusic itself behaves from not being able to get that interface, some apps may or may not be prepared to deal with that failure mode.

Is it possible to replace dsoal with modified Alchemy? https://github.com/kcat/dsoal/issues/51#issuecomment-2378498509

ThreeDeeJay commented 1 month ago

@UserGit-2021 I managed to get it working and was gonna record a video, but reverb is behaving quite oddly, even without OpenAL Soft.

Like, the intro video and main menu start with audible reverb (made even more noticeable by using boost=12), but as soon as I'm in-game, it seems the reverb's completely gone, and stays gone after going back to the menu. Also, when cycling through audio providers, DirectSound3D options do have reverb, while EAX 1-3 usually don't. And cycling can sometimes break reverb completely, and even 3D panning during the siren loop sound test (all providers end up being just virtualized stereo, which is to be expected from Miles 2D, but DS3D/EAX usually do start with proper 360 panning/depth).

I hope this wasn't just an afterthought and they actually did make use of proper EAX, though apparently it wasn't optimized for it, since I only see mentions of Miles in the executable, and there are complaints of missing car sounds when using EAX[1][2], though I didn't notice it happening on my end. The manual doesn't even mention EAX, only a DirectX compatible sound card with surround sound requirement, and the ReadMe just refers to it indirectly:

Sound Provider: The first time you launch Midnight Club II, we auto-detect the best sound provider for your available Sound Card. You can also manually select alternatives in the game.

And the only relevant setting I could find was options.cfg where it was already set: AudioDriver: Creative Labs EAX 3 (TM)

I also tried updating the EAX 3 provider with one from a different game using the same Miles version but it just gave me an error on startup and refused to load it.

UserGit-2021 commented 1 month ago

@UserGit-2021 I managed to get it working and was gonna record a video, but reverb is behaving quite oddly, even without OpenAL Soft.

Like, the intro video and main menu start with audible reverb (made even more noticeable by using boost=12), but as soon as I'm in-game, it seems the reverb's completely gone, and stays gone after going back to the menu. Also, when cycling through audio providers, DirectSound3D options do have reverb, while EAX 1-3 usually don't. And cycling can sometimes break reverb completely, and even 3D panning during the siren loop sound test (all providers end up being just virtualized stereo, which is to be expected from Miles 2D, but DS3D/EAX usually do start with proper 360 panning/depth).

I hope this wasn't just an afterthought and they actually did make use of proper EAX, though apparently it wasn't optimized for it, since I only see mentions of Miles in the executable, and there are complaints of missing car sounds when using EAX[1][2], though I didn't notice it happening on my end. The manual doesn't even mention EAX, only a DirectX compatible sound card with surround sound requirement, and the ReadMe just refers to it indirectly:

Sound Provider: The first time you launch Midnight Club II, we auto-detect the best sound provider for your available Sound Card. You can also manually select alternatives in the game.

And the only relevant setting I could find was options.cfg where it was already set: AudioDriver: Creative Labs EAX 3 (TM)

I also tried updating the EAX 3 provider with one from a different game using the same Miles version but it just gave me an error on startup and refused to load it.

hmm... it turns out it's easier to develop the dsoal project from scratch than to implement it from Alchemy.