kcat / dsoal

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

Splinter Cell and Splinter Cell: Chaos Theory query for unsupported propset #102

Open Hiradur opened 3 months ago

Hiradur commented 3 months ago

Both Splinter Cell and Splinter Cell: Chaos Theory query for a propset that DSOAL reports as unsupported:

0024:debug:dsound:BufferProp::QuerySupport (087c3a28)->({a94047c0-1cef-11d3-bdb8-00c0f02ddf87}, 0x0, 0032d0d8)
0024:fixme:dsound:BufferProp::QuerySupport Unhandled propset: {a94047c0-1cef-11d3-bdb8-00c0f02ddf87} (propid: 0)

Quote from @kcat after mentioning this on IRC:

[13:28:45] <KittyCat> hmm, I wonder what that guid is. it seems similar to DSPROPSETID_EAX30_ListenerProperties/DSPROPSETID_EAX30_BufferProperties, but not quite the same
[13:30:03] <KittyCat> neither the wine or eax headers seem to have it, a search isn't showing anything promising
[13:31:03] <Hiradur> Could it come from DS3D or be specific to Creative's driver?
[14:03:28] <KittyCat> maybe Creative's driver, or some unknown/under-documented eax interface
mirh commented 3 months ago

Interestingly these, fc2, ac and BGE are all first party ubisoft games.. Ok nvm max payne 2 and hitman 2 should also have it. Could it be a query for EAX1 properties?

Hiradur commented 3 months ago

It might be provided by an EAX implementation from one of Creative's competitors. IIRC, Realtek and Aureal provided their own EAX implementations and possibly others as well.

mirh commented 1 month ago

That's very meaningless because every single vendor had to have its own implementation, yes.. but rolling out your own GUID with blackjack and hookers then that's doing something else entirely and would break compatibility with the standard itself.

Anyhow FWIW eax.dll version 2.6 (2.06?) from 1999 doesn't have it, while version 3.0.6 (3.06?) from 2001 has it. V4 doesn't though. The file is probably why all these random games have it even with no supposed "special attentions given to audio". After some outside of the box thinking in ghidra, I found eax.dll uses it in some strange super long repeated conditional, which I really could make no sense of.. BUT that sits within two other similar ifs checks that *do have* known CLSIDs. Simply put:

DSPROPSETID_EAX20_ListenerProperties
????????????????????????????????????
DSPROPSETID_EAX30_ListenerProperties

Now, that shouldn't be automatically interpreted as some sort of ordered relation (even though it may).. But, considering we *do* know what DSPROPSETID_EAX10_ListenerProperties is (and it's not that) I'm kinda afraid that however improbable what remains could be the worst.

Could it be a reference to whatever the hell "EAX2.5" is or was supposed to be? @kxproject do you know if EMU10K1 had some sort of "can't physically do more than EAX2, but I'm still better than peasants" mode? Or maybe that's just some old ass beta they had internally.

mirh commented 1 month ago

Holy shit, I nailed it. https://archive.org/details/sb-audigy-driver The first(?) Audigy drivers had debug symbols left in! And yes, I can confidently confirm that in e10kx2k.sys the mysterious string is _DSPROPSETID_EAX25_Listener. (of very much interesting note that this is also included inside of the 0.9.4.1 openal32.dll that ships together)

Again, it is unclear what exactly this was used for but as a matter of fact I could also find it inside 2000's sblfx.dll, aka "SB Live! DS3D & Effects" (presumably they it's in a dll and not a normal kernel driver, because they didn't want to replicate the code between VxD, WDM and old NT).