Stub some 3D sound functions.
Fixes a crash in Conker & Kingdom Under Fire (+ probably lots more)
This commit is contained in:
parent
d75d08fa57
commit
952e7870cd
|
@ -4104,16 +4104,39 @@ HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_SetDopplerFactor)
|
|||
HRESULT WINAPI XTL::EMUPATCH(IDirectSoundBuffer_GetVoiceProperties)
|
||||
(
|
||||
X_CDirectSoundBuffer* pThis,
|
||||
OUT void* pVoiceProps)
|
||||
OUT X_DSVOICEPROPS* pVoiceProps)
|
||||
{
|
||||
enterCriticalSection;
|
||||
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(pThis)
|
||||
LOG_FUNC_ARG_OUT(pVoiceProps)
|
||||
LOG_FUNC_END;
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
LOG_FUNC_END;
|
||||
|
||||
if (pVoiceProps == xbnullptr) {
|
||||
LOG_TEST_CASE("pVoiceProps == xbnullptr");
|
||||
RETURN(DS_OK);
|
||||
}
|
||||
|
||||
// HACK: Set values that are known to prevent crashes/hangs
|
||||
// TODO: Investigate and implement proper mixbin functionality
|
||||
pVoiceProps->dwMixBinCount = 2;
|
||||
pVoiceProps->l3DConeVolume = 0;
|
||||
pVoiceProps->l3DDistanceVolume = 0;
|
||||
pVoiceProps->l3DDopplerPitch = 0;
|
||||
pVoiceProps->lI3DL2DirectVolume = 0;
|
||||
pVoiceProps->lI3DL2RoomVolume = 0;
|
||||
pVoiceProps->lPitch = -4597;
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
if (i < pVoiceProps->dwMixBinCount) {
|
||||
pVoiceProps->MixBinVolumePairs[i].dwMixBin = i;
|
||||
pVoiceProps->MixBinVolumePairs[i].lVolume = 0;
|
||||
} else {
|
||||
pVoiceProps->MixBinVolumePairs[i].dwMixBin = 0xFFFFFFFF;
|
||||
pVoiceProps->MixBinVolumePairs[i].lVolume = -10000;
|
||||
}
|
||||
}
|
||||
|
||||
leaveCriticalSection;
|
||||
|
||||
|
@ -4126,16 +4149,40 @@ HRESULT WINAPI XTL::EMUPATCH(IDirectSoundBuffer_GetVoiceProperties)
|
|||
HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_GetVoiceProperties)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
OUT void* pVoiceProps)
|
||||
OUT X_DSVOICEPROPS* pVoiceProps
|
||||
)
|
||||
{
|
||||
enterCriticalSection;
|
||||
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(pThis)
|
||||
LOG_FUNC_ARG_OUT(pVoiceProps)
|
||||
LOG_FUNC_END;
|
||||
LOG_FUNC_END;
|
||||
|
||||
if (pVoiceProps == xbnullptr) {
|
||||
LOG_TEST_CASE("pVoiceProps == xbnullptr");
|
||||
RETURN(DS_OK);
|
||||
}
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
// HACK: Set values that are known to prevent crashes/hangs
|
||||
// TODO: Investigate and implement proper mixbin functionality
|
||||
pVoiceProps->dwMixBinCount = 2;
|
||||
pVoiceProps->l3DConeVolume = 0;
|
||||
pVoiceProps->l3DDistanceVolume = 0;
|
||||
pVoiceProps->l3DDopplerPitch = 0;
|
||||
pVoiceProps->lI3DL2DirectVolume = 0;
|
||||
pVoiceProps->lI3DL2RoomVolume = 0;
|
||||
pVoiceProps->lPitch = -4597;
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
if (i < pVoiceProps->dwMixBinCount) {
|
||||
pVoiceProps->MixBinVolumePairs[i].dwMixBin = i;
|
||||
pVoiceProps->MixBinVolumePairs[i].lVolume = 0;
|
||||
} else {
|
||||
pVoiceProps->MixBinVolumePairs[i].dwMixBin = 0xFFFFFFFF;
|
||||
pVoiceProps->MixBinVolumePairs[i].lVolume = -10000;
|
||||
}
|
||||
}
|
||||
|
||||
leaveCriticalSection;
|
||||
|
||||
|
@ -4148,7 +4195,8 @@ HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_GetVoiceProperties)
|
|||
HRESULT WINAPI XTL::EMUPATCH(IDirectSoundStream_SetVolume)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
LONG lVolume)
|
||||
LONG lVolume
|
||||
)
|
||||
{
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(pThis)
|
||||
|
@ -4269,3 +4317,100 @@ HRESULT WINAPI XTL::EMUPATCH(IDirectSoundStream_SetMixBins)
|
|||
|
||||
return XTL::EMUPATCH(CDirectSoundStream_SetMixBins)(pThis, pMixBins);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: CDirectSound3DCalculator_Calculate3D
|
||||
// ******************************************************************
|
||||
VOID WINAPI XTL::EMUPATCH(CDirectSound3DCalculator_Calculate3D)
|
||||
(
|
||||
DWORD a1,
|
||||
DWORD a2
|
||||
)
|
||||
{
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(a1)
|
||||
LOG_FUNC_ARG(a2)
|
||||
LOG_FUNC_END;
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: CDirectSound3DCalculator_GetVoiceData
|
||||
// ******************************************************************
|
||||
VOID WINAPI XTL::EMUPATCH(CDirectSound3DCalculator_GetVoiceData)
|
||||
(
|
||||
DWORD a1,
|
||||
DWORD a2,
|
||||
DWORD a3,
|
||||
DWORD a4,
|
||||
DWORD a5
|
||||
)
|
||||
{
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(a1)
|
||||
LOG_FUNC_ARG(a2)
|
||||
LOG_FUNC_ARG(a3)
|
||||
LOG_FUNC_ARG(a4)
|
||||
LOG_FUNC_ARG(a5)
|
||||
LOG_FUNC_END;
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: IDirectSoundBuffer_Set3DVoiceData
|
||||
// ******************************************************************
|
||||
HRESULT WINAPI XTL::EMUPATCH(IDirectSoundBuffer_Set3DVoiceData)
|
||||
(
|
||||
X_CDirectSoundBuffer* pThis,
|
||||
DWORD a2
|
||||
)
|
||||
{
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(pThis)
|
||||
LOG_FUNC_ARG(a2)
|
||||
LOG_FUNC_END;
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
|
||||
RETURN(STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: IDirectSoundStream_Set3DVoiceData
|
||||
// ******************************************************************
|
||||
HRESULT WINAPI XTL::EMUPATCH(IDirectSoundStream_Set3DVoiceData)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
DWORD a2
|
||||
)
|
||||
{
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(pThis)
|
||||
LOG_FUNC_ARG(a2)
|
||||
LOG_FUNC_END;
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
|
||||
RETURN(STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: IDirectSoundBuffer_Use3DVoiceData
|
||||
// ******************************************************************
|
||||
HRESULT WINAPI XTL::EMUPATCH(IDirectSoundStream_Use3DVoiceData)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
DWORD a2
|
||||
)
|
||||
{
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(pThis)
|
||||
LOG_FUNC_ARG(a2)
|
||||
LOG_FUNC_END;
|
||||
|
||||
LOG_UNIMPLEMENTED();
|
||||
|
||||
RETURN(STATUS_SUCCESS);
|
||||
}
|
||||
|
|
|
@ -1582,7 +1582,7 @@ HRESULT WINAPI EMUPATCH(CDirectSoundStream_SetDopplerFactor)
|
|||
HRESULT WINAPI EMUPATCH(IDirectSoundBuffer_GetVoiceProperties)
|
||||
(
|
||||
X_CDirectSoundBuffer* pThis,
|
||||
OUT void* pVoiceProps);
|
||||
OUT X_DSVOICEPROPS* pVoiceProps);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: CDirectSoundStream_GetVoiceProperties
|
||||
|
@ -1590,7 +1590,7 @@ HRESULT WINAPI EMUPATCH(IDirectSoundBuffer_GetVoiceProperties)
|
|||
HRESULT WINAPI EMUPATCH(CDirectSoundStream_GetVoiceProperties)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
OUT void* pVoiceProps);
|
||||
OUT X_DSVOICEPROPS* pVoiceProps);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: IDirectSoundStream_SetVolume
|
||||
|
@ -1654,6 +1654,51 @@ HRESULT WINAPI EMUPATCH(IDirectSoundStream_SetFrequency)
|
|||
HRESULT WINAPI EMUPATCH(IDirectSoundStream_SetMixBins)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
PVOID pMixBins);
|
||||
#endif
|
||||
PVOID pMixBins);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: CDirectSound3DCalculator_Calculate3D
|
||||
// ******************************************************************
|
||||
VOID WINAPI EMUPATCH(CDirectSound3DCalculator_Calculate3D)
|
||||
(
|
||||
DWORD a1,
|
||||
DWORD a2);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: CDirectSound3DCalculator_GetVoiceData
|
||||
// ******************************************************************
|
||||
VOID WINAPI EMUPATCH(CDirectSound3DCalculator_GetVoiceData)
|
||||
(
|
||||
DWORD a1,
|
||||
DWORD a2,
|
||||
DWORD a3,
|
||||
DWORD a4,
|
||||
DWORD a5);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: IDirectSoundBuffer_Set3DVoiceData
|
||||
// ******************************************************************
|
||||
HRESULT WINAPI EMUPATCH(IDirectSoundBuffer_Set3DVoiceData)
|
||||
(
|
||||
X_CDirectSoundBuffer* pThis,
|
||||
DWORD a2);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: IDirectSoundStream_Set3DVoiceData
|
||||
// ******************************************************************
|
||||
HRESULT WINAPI EMUPATCH(IDirectSoundStream_Set3DVoiceData)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
DWORD a2
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: IDirectSoundStrea,_Use3DVoiceData
|
||||
// ******************************************************************
|
||||
HRESULT WINAPI EMUPATCH(IDirectSoundStream_Use3DVoiceData)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
DWORD a2
|
||||
);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -346,4 +346,14 @@ struct X_DSI3DL2BUFFER {
|
|||
typedef struct IDirectSoundStream IDirectSoundStream;
|
||||
typedef IDirectSoundStream *LPDIRECTSOUNDSTREAM;
|
||||
|
||||
struct X_DSVOICEPROPS {
|
||||
DWORD dwMixBinCount;
|
||||
X_DSMIXBINSVOLUMEPAIR MixBinVolumePairs[8];
|
||||
LONG lPitch;
|
||||
LONG l3DDistanceVolume;
|
||||
LONG l3DConeVolume;
|
||||
LONG l3DDopplerPitch;
|
||||
LONG lI3DL2DirectVolume;
|
||||
LONG lI3DL2RoomVolume;
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -225,7 +225,9 @@ std::map<const std::string, const xbox_patch_t> g_PatchTable = {
|
|||
PATCH_ENTRY("Lock2DSurface", XTL::EMUPATCH(Lock2DSurface), PATCH_HLE_D3D),
|
||||
PATCH_ENTRY("Lock3DSurface", XTL::EMUPATCH(Lock3DSurface), PATCH_HLE_D3D),
|
||||
|
||||
// DSOUND
|
||||
// DSOUND
|
||||
PATCH_ENTRY("CDirectSound3DCalculator_Calculate3D", XTL::EMUPATCH(CDirectSound3DCalculator_Calculate3D), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("CDirectSound3DCalculator_GetVoiceData", XTL::EMUPATCH(CDirectSound3DCalculator_GetVoiceData), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("CDirectSoundStream_AddRef", XTL::EMUPATCH(CDirectSoundStream_AddRef), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("CDirectSoundStream_Discontinuity", XTL::EMUPATCH(CDirectSoundStream_Discontinuity), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("CDirectSoundStream_Flush", XTL::EMUPATCH(CDirectSoundStream_Flush), PATCH_HLE_DSOUND),
|
||||
|
@ -285,7 +287,8 @@ std::map<const std::string, const xbox_patch_t> g_PatchTable = {
|
|||
PATCH_ENTRY("IDirectSoundBuffer_PauseEx", XTL::EMUPATCH(IDirectSoundBuffer_PauseEx), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_Play", XTL::EMUPATCH(IDirectSoundBuffer_Play), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_PlayEx", XTL::EMUPATCH(IDirectSoundBuffer_PlayEx), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_Release", XTL::EMUPATCH(IDirectSoundBuffer_Release), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_Release", XTL::EMUPATCH(IDirectSoundBuffer_Release), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_Set3DVoiceData ", XTL::EMUPATCH(IDirectSoundBuffer_Set3DVoiceData), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_SetAllParameters", XTL::EMUPATCH(IDirectSoundBuffer_SetAllParameters), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_SetBufferData", XTL::EMUPATCH(IDirectSoundBuffer_SetBufferData), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_SetConeAngles", XTL::EMUPATCH(IDirectSoundBuffer_SetConeAngles), PATCH_HLE_DSOUND),
|
||||
|
@ -320,7 +323,8 @@ std::map<const std::string, const xbox_patch_t> g_PatchTable = {
|
|||
PATCH_ENTRY("IDirectSoundBuffer_Stop", XTL::EMUPATCH(IDirectSoundBuffer_Stop), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_StopEx", XTL::EMUPATCH(IDirectSoundBuffer_StopEx), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_Unlock", XTL::EMUPATCH(IDirectSoundBuffer_Unlock), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_Use3DVoiceData", XTL::EMUPATCH(IDirectSoundBuffer_Use3DVoiceData), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundBuffer_Use3DVoiceData", XTL::EMUPATCH(IDirectSoundBuffer_Use3DVoiceData), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundStream_Set3DVoiceData ", XTL::EMUPATCH(IDirectSoundStream_Set3DVoiceData), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundStream_SetEG", XTL::EMUPATCH(IDirectSoundStream_SetEG), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundStream_SetFilter", XTL::EMUPATCH(IDirectSoundStream_SetFilter), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundStream_SetFrequency", XTL::EMUPATCH(IDirectSoundStream_SetFrequency), PATCH_HLE_DSOUND),
|
||||
|
@ -328,7 +332,8 @@ std::map<const std::string, const xbox_patch_t> g_PatchTable = {
|
|||
PATCH_ENTRY("IDirectSoundStream_SetLFO", XTL::EMUPATCH(IDirectSoundStream_SetLFO), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundStream_SetMixBins", XTL::EMUPATCH(IDirectSoundStream_SetMixBins), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundStream_SetPitch", XTL::EMUPATCH(IDirectSoundStream_SetPitch), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundStream_SetVolume", XTL::EMUPATCH(IDirectSoundStream_SetVolume), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundStream_SetVolume", XTL::EMUPATCH(IDirectSoundStream_SetVolume), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSoundStream_Use3DVoiceData ", XTL::EMUPATCH(IDirectSoundStream_Use3DVoiceData), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSound_AddRef", XTL::EMUPATCH(IDirectSound_AddRef), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSound_CommitDeferredSettings", XTL::EMUPATCH(IDirectSound_CommitDeferredSettings), PATCH_HLE_DSOUND),
|
||||
PATCH_ENTRY("IDirectSound_CommitEffectData", XTL::EMUPATCH(IDirectSound_CommitEffectData), PATCH_HLE_DSOUND),
|
||||
|
|
Loading…
Reference in New Issue