Miles: fix voice comm bus regression

Regression was caused in commit 3bb4ee625863c1dd503f07e0d480f4b3fd302c48. The new sound engine has breaking changes in its exports. Added shim layer to fix incompatibilities on the export 'MilesSampleSetSourceRaw'.
This commit is contained in:
Kawe Mazidjatari 2024-06-01 11:54:35 +02:00
parent 6f2d271ce1
commit dd9dd1be67
5 changed files with 47 additions and 0 deletions

View File

@ -11,6 +11,8 @@ add_sources( SOURCE_GROUP "Bink"
add_sources( SOURCE_GROUP "Miles" add_sources( SOURCE_GROUP "Miles"
"miles/miles_impl.cpp" "miles/miles_impl.cpp"
"miles/miles_impl.h" "miles/miles_impl.h"
"miles/miles_shim.cpp"
"miles/miles_shim.h"
"miles/miles_types.h" # TODO[ AMOS ]: move to public! "miles/miles_types.h" # TODO[ AMOS ]: move to public!
"miles/radshal_wasapi.h" "miles/radshal_wasapi.h"
) )

View File

@ -6,6 +6,7 @@ inline void(*v_AIL_LogFunc)(int64_t nLogLevel, const char* pszMessage);
inline bool(*v_Miles_Initialize)(); inline bool(*v_Miles_Initialize)();
inline void(*v_MilesQueueEventRun)(Miles::Queue*, const char*); inline void(*v_MilesQueueEventRun)(Miles::Queue*, const char*);
inline void(*v_MilesBankPatch)(Miles::Bank*, char*, char*); inline void(*v_MilesBankPatch)(Miles::Bank*, char*, char*);
inline unsigned int (*v_MilesSampleSetSourceRaw)(__int64 a1, __int64 a2, unsigned int a3, int a4, unsigned __int16 a5, bool a6);
inline void(*v_CSOM_AddEventToQueue)(const char* eventName); inline void(*v_CSOM_AddEventToQueue)(const char* eventName);
struct MilesBankList_t struct MilesBankList_t
@ -54,6 +55,7 @@ class MilesCore : public IDetour
LogFunAdr("Miles_Initialize", v_Miles_Initialize); LogFunAdr("Miles_Initialize", v_Miles_Initialize);
LogFunAdr("MilesQueueEventRun", v_MilesQueueEventRun); LogFunAdr("MilesQueueEventRun", v_MilesQueueEventRun);
LogFunAdr("MilesBankPatch", v_MilesBankPatch); LogFunAdr("MilesBankPatch", v_MilesBankPatch);
LogFunAdr("MilesSampleSetSourceRaw", v_MilesSampleSetSourceRaw);
LogFunAdr("CSOM_AddEventToQueue", v_CSOM_AddEventToQueue); LogFunAdr("CSOM_AddEventToQueue", v_CSOM_AddEventToQueue);
LogVarAdr("g_milesGlobals", g_milesGlobals); LogVarAdr("g_milesGlobals", g_milesGlobals);
} }
@ -69,6 +71,7 @@ class MilesCore : public IDetour
g_RadAudioSystemDll.GetExportedSymbol("MilesQueueEventRun").GetPtr(v_MilesQueueEventRun); g_RadAudioSystemDll.GetExportedSymbol("MilesQueueEventRun").GetPtr(v_MilesQueueEventRun);
g_RadAudioSystemDll.GetExportedSymbol("MilesBankPatch").GetPtr(v_MilesBankPatch); g_RadAudioSystemDll.GetExportedSymbol("MilesBankPatch").GetPtr(v_MilesBankPatch);
g_RadAudioSystemDll.GetExportedSymbol("MilesSampleSetSourceRaw").GetPtr(v_MilesSampleSetSourceRaw);
} }
virtual void GetVar(void) const { } virtual void GetVar(void) const { }
virtual void GetCon(void) const { } virtual void GetCon(void) const { }

View File

@ -0,0 +1,27 @@
//=============================================================================//
//
// Purpose: Miles Sound System interface shim
//
//-----------------------------------------------------------------------------
// The engine is compiled with version 10.0.42, this shim layer fixes any
// incompatibilities between upgrades. On more recent versions of the Miles
// Sound System, some exports have been renamed and/or thoroughly changed.
// If we upgrade to these versions, we need to convert this into an actual
// DLL shim layer instead of linking it statically with the SDK module.
//=============================================================================//
#include "miles_impl.h"
#include "miles_shim.h"
unsigned int MilesSampleSetSourceRaw(__int64 a1, __int64 a2, unsigned int a3, int a4, unsigned __int16 a5, bool a6)
{
// interface fix from 10.0.42 --> 10.0.47. As of version (10.0.43 ?) the
// export 'MilesSampleSetSourceRaw' has a newly added bool parameter. The
// purpose of this is unknown, but we need to set it to false as they
// otherwise would distort the voice comm bus.
return v_MilesSampleSetSourceRaw(a1, a2, a3, a4, a5, false);
}
void MilesShim::Detour(const bool bAttach) const
{
DetourSetup(&v_MilesSampleSetSourceRaw, &MilesSampleSetSourceRaw, bAttach);
}

View File

@ -0,0 +1,13 @@
#ifndef MILES_SHIM_H
#define MILES_SHIM_H
class MilesShim : public IDetour
{
virtual void GetAdr(void) const { }
virtual void GetFun(void) const { }
virtual void GetVar(void) const { }
virtual void GetCon(void) const { }
virtual void Detour(const bool bAttach) const;
};
#endif // MILES_SHIM_H

View File

@ -35,6 +35,7 @@
#ifndef DEDICATED #ifndef DEDICATED
#include "codecs/bink/bink_impl.h" #include "codecs/bink/bink_impl.h"
#include "codecs/miles/miles_impl.h" #include "codecs/miles/miles_impl.h"
#include "codecs/miles/miles_shim.h"
#include "codecs/miles/radshal_wasapi.h" #include "codecs/miles/radshal_wasapi.h"
#endif // !DEDICATED #endif // !DEDICATED
#include "vphysics/physics_collide.h" #include "vphysics/physics_collide.h"
@ -525,6 +526,7 @@ void DetourRegister() // Register detour classes to be searched and hooked.
// Codecs // Codecs
REGISTER(BinkCore); // REGISTER CLIENT ONLY! REGISTER(BinkCore); // REGISTER CLIENT ONLY!
REGISTER(MilesCore); // REGISTER CLIENT ONLY! REGISTER(MilesCore); // REGISTER CLIENT ONLY!
REGISTER(MilesShim);
REGISTER(VRadShal); REGISTER(VRadShal);
#endif // !DEDICATED #endif // !DEDICATED