From ab4ba9fc4f73fca3ff865bab9e5b5020bbebbe7f Mon Sep 17 00:00:00 2001 From: Christian Semmler <mail@csemmler.com> Date: Thu, 30 May 2024 10:27:18 -0400 Subject: [PATCH] Implement/match Lego3DWavePresenter::StartingTickle (#972) * Implement/match Lego3DWavePresenter::StartingTickle * Fix annotation * Add StreamingTickle * Rename --- CMakeLists.txt | 2 +- .../{legounknown100d5778.h => lego3dsound.h} | 20 ++++++------- .../legoomni/include/lego3dwavepresenter.h | 6 ++-- LEGO1/lego/legoomni/include/legocachsound.h | 4 +-- ...egounknown100d5778.cpp => lego3dsound.cpp} | 28 ++++++++++--------- .../src/audio/lego3dwavepresenter.cpp | 26 ++++++++++++++--- LEGO1/omni/include/mxaudiopresenter.h | 2 +- 7 files changed, 54 insertions(+), 34 deletions(-) rename LEGO1/lego/legoomni/include/{legounknown100d5778.h => lego3dsound.h} (59%) rename LEGO1/lego/legoomni/src/audio/{legounknown100d5778.cpp => lego3dsound.cpp} (58%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 259ec560..58d2b662 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -306,12 +306,12 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/actors/radio.cpp LEGO1/lego/legoomni/src/actors/skateboard.cpp LEGO1/lego/legoomni/src/actors/towtrack.cpp + LEGO1/lego/legoomni/src/audio/lego3dsound.cpp LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp LEGO1/lego/legoomni/src/audio/legocachsound.cpp LEGO1/lego/legoomni/src/audio/legocachesoundmanager.cpp LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp - LEGO1/lego/legoomni/src/audio/legounknown100d5778.cpp LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp LEGO1/lego/legoomni/src/build/buildingentity.cpp LEGO1/lego/legoomni/src/build/helicopterstate.cpp diff --git a/LEGO1/lego/legoomni/include/legounknown100d5778.h b/LEGO1/lego/legoomni/include/lego3dsound.h similarity index 59% rename from LEGO1/lego/legoomni/include/legounknown100d5778.h rename to LEGO1/lego/legoomni/include/lego3dsound.h index 5ae43070..a6f4bb02 100644 --- a/LEGO1/lego/legoomni/include/legounknown100d5778.h +++ b/LEGO1/lego/legoomni/include/lego3dsound.h @@ -1,5 +1,5 @@ -#ifndef LEGOUNKNOWN100D5778_H -#define LEGOUNKNOWN100D5778_H +#ifndef LEGO3DSOUND_H +#define LEGO3DSOUND_H #include "decomp.h" #include "mxtypes.h" @@ -10,20 +10,20 @@ class LegoROI; // VTABLE: LEGO1 0x100d5778 // SIZE 0x30 -class LegoUnknown100d5778 { +class Lego3DSound { public: - LegoUnknown100d5778(); - virtual ~LegoUnknown100d5778(); + Lego3DSound(); + virtual ~Lego3DSound(); void Init(); - MxResult FUN_100116a0(LPDIRECTSOUND p_dsound, undefined4, undefined4 p_unk0x2c); + MxResult Create(LPDIRECTSOUNDBUFFER p_directSoundBuffer, const char*, MxS32 p_volume); void Destroy(); - undefined4 FUN_100118e0(LPDIRECTSOUNDBUFFER p_dsBuffer); + undefined4 FUN_100118e0(LPDIRECTSOUNDBUFFER p_directSoundBuffer); void FUN_10011ca0(); MxS32 FUN_10011cf0(undefined4, undefined4); // SYNTHETIC: LEGO1 0x10011650 - // LegoUnknown100d5778::`scalar deleting destructor' + // Lego3DSound::`scalar deleting destructor' private: undefined m_unk0x04[4]; // 0x04 @@ -34,7 +34,7 @@ private: MxBool m_unk0x15; // 0x15 undefined4 m_unk0x18; // 0x18 undefined m_unk0x1c[0x10]; // 0x1c - undefined4 m_unk0x2c; // 0x2c + MxS32 m_volume; // 0x2c }; -#endif // LEGOUNKNOWN100D5778_H +#endif // LEGO3DSOUND_H diff --git a/LEGO1/lego/legoomni/include/lego3dwavepresenter.h b/LEGO1/lego/legoomni/include/lego3dwavepresenter.h index 79be1834..775f6a09 100644 --- a/LEGO1/lego/legoomni/include/lego3dwavepresenter.h +++ b/LEGO1/lego/legoomni/include/lego3dwavepresenter.h @@ -2,7 +2,7 @@ #define LEGO3DWAVEPRESENTER_H #include "decomp.h" -#include "legounknown100d5778.h" +#include "lego3dsound.h" #include "mxwavepresenter.h" // VTABLE: LEGO1 0x100d52b0 @@ -31,8 +31,8 @@ public: // Lego3DWavePresenter::`scalar deleting destructor' private: - undefined m_unk0x6c[4]; // 0x6c - LegoUnknown100d5778 m_unk0x70; // 0x70 + undefined m_unk0x6c[4]; // 0x6c + Lego3DSound m_sound; // 0x70 }; #endif // LEGO3DWAVEPRESENTER_H diff --git a/LEGO1/lego/legoomni/include/legocachsound.h b/LEGO1/lego/legoomni/include/legocachsound.h index 178430ff..f424a465 100644 --- a/LEGO1/lego/legoomni/include/legocachsound.h +++ b/LEGO1/lego/legoomni/include/legocachsound.h @@ -2,7 +2,7 @@ #define LEGOCACHSOUND_H #include "decomp.h" -#include "legounknown100d5778.h" +#include "lego3dsound.h" #include "mxcore.h" #include "mxstring.h" @@ -47,7 +47,7 @@ private: LPDIRECTSOUNDBUFFER m_dsBuffer; // 0x08 undefined m_unk0xc[4]; // 0x0c - LegoUnknown100d5778 m_unk0x10; // 0x10 + Lego3DSound m_unk0x10; // 0x10 undefined* m_unk0x40; // 0x40 undefined4 m_unk0x44; // 0x44 MxString m_string0x48; // 0x48 diff --git a/LEGO1/lego/legoomni/src/audio/legounknown100d5778.cpp b/LEGO1/lego/legoomni/src/audio/lego3dsound.cpp similarity index 58% rename from LEGO1/lego/legoomni/src/audio/legounknown100d5778.cpp rename to LEGO1/lego/legoomni/src/audio/lego3dsound.cpp index 3ff57585..23b7a8c5 100644 --- a/LEGO1/lego/legoomni/src/audio/legounknown100d5778.cpp +++ b/LEGO1/lego/legoomni/src/audio/lego3dsound.cpp @@ -1,25 +1,25 @@ -#include "legounknown100d5778.h" +#include "lego3dsound.h" #include "legocharactermanager.h" #include "misc.h" #include "mxomni.h" -DECOMP_SIZE_ASSERT(LegoUnknown100d5778, 0x30) +DECOMP_SIZE_ASSERT(Lego3DSound, 0x30) // FUNCTION: LEGO1 0x10011630 -LegoUnknown100d5778::LegoUnknown100d5778() +Lego3DSound::Lego3DSound() { Init(); } // FUNCTION: LEGO1 0x10011670 -LegoUnknown100d5778::~LegoUnknown100d5778() +Lego3DSound::~Lego3DSound() { Destroy(); } // FUNCTION: LEGO1 0x10011680 -void LegoUnknown100d5778::Init() +void Lego3DSound::Init() { m_dsBuffer = NULL; m_unk0x0c = NULL; @@ -27,16 +27,17 @@ void LegoUnknown100d5778::Init() m_unk0x18 = 0; m_unk0x14 = FALSE; m_unk0x15 = FALSE; - m_unk0x2c = 79; + m_volume = 79; } // STUB: LEGO1 0x100116a0 -MxResult LegoUnknown100d5778::FUN_100116a0(LPDIRECTSOUND p_dsound, undefined4, undefined4 p_unk0x2c) +// FUNCTION: BETA10 0x10039647 +MxResult Lego3DSound::Create(LPDIRECTSOUNDBUFFER p_directSoundBuffer, const char*, MxS32 p_volume) { - m_unk0x2c = p_unk0x2c; + m_volume = p_volume; if (MxOmni::IsSound3D()) { - p_dsound->QueryInterface(IID_IDirectSoundBuffer, (LPVOID*) &m_dsBuffer); + p_directSoundBuffer->QueryInterface(IID_IDirectSoundBuffer, (LPVOID*) &m_dsBuffer); if (m_dsBuffer == NULL) { return FAILURE; } @@ -50,7 +51,7 @@ MxResult LegoUnknown100d5778::FUN_100116a0(LPDIRECTSOUND p_dsound, undefined4, u } // FUNCTION: LEGO1 0x10011880 -void LegoUnknown100d5778::Destroy() +void Lego3DSound::Destroy() { if (m_dsBuffer) { m_dsBuffer->Release(); @@ -70,20 +71,21 @@ void LegoUnknown100d5778::Destroy() } // STUB: LEGO1 0x100118e0 -undefined4 LegoUnknown100d5778::FUN_100118e0(LPDIRECTSOUNDBUFFER p_dsBuffer) +// FUNCTION: BETA10 0x10039a2a +undefined4 Lego3DSound::FUN_100118e0(LPDIRECTSOUNDBUFFER p_directSoundBuffer) { // TODO return 0; } // STUB: LEGO1 0x10011ca0 -void LegoUnknown100d5778::FUN_10011ca0() +void Lego3DSound::FUN_10011ca0() { // TODO } // STUB: LEGO1 0x10011cf0 -MxS32 LegoUnknown100d5778::FUN_10011cf0(undefined4, undefined4) +MxS32 Lego3DSound::FUN_10011cf0(undefined4, undefined4) { // TODO return 0; diff --git a/LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp b/LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp index b60f3ded..10b79146 100644 --- a/LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp +++ b/LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp @@ -1,5 +1,7 @@ #include "lego3dwavepresenter.h" +#include "mxcompositepresenter.h" +#include "mxdsaction.h" #include "mxomni.h" DECOMP_SIZE_ASSERT(Lego3DWavePresenter, 0xa0) @@ -28,7 +30,8 @@ void Lego3DWavePresenter::Destroy() } } -// STUB: LEGO1 0x1004a810 +// FUNCTION: LEGO1 0x1004a810 +// FUNCTION: BETA10 0x1003a3b0 void Lego3DWavePresenter::StartingTickle() { if (MxOmni::IsSound3D()) { @@ -37,12 +40,27 @@ void Lego3DWavePresenter::StartingTickle() MxWavePresenter::StartingTickle(); - // TODO + if (m_dsBuffer != NULL) { + MxU16 extraLength; + char* buff; + m_action->GetExtra(extraLength, buff); + + if (!strcmp(buff, "FROM_PARENT") && m_compositePresenter != NULL) { + m_compositePresenter->GetAction()->GetExtra(extraLength, buff); + } + + if (m_sound.Create(m_dsBuffer, buff, m_volume) != SUCCESS) { + m_dsBuffer->Release(); + m_dsBuffer = NULL; + EndAction(); + } + } } -// STUB: LEGO1 0x1004a8b0 +// FUNCTION: LEGO1 0x1004a8b0 +// FUNCTION: BETA10 0x1003a4cc void Lego3DWavePresenter::StreamingTickle() { MxWavePresenter::StreamingTickle(); - // TODO + m_sound.FUN_100118e0(m_dsBuffer); } diff --git a/LEGO1/omni/include/mxaudiopresenter.h b/LEGO1/omni/include/mxaudiopresenter.h index 873871ec..dd4369ea 100644 --- a/LEGO1/omni/include/mxaudiopresenter.h +++ b/LEGO1/omni/include/mxaudiopresenter.h @@ -30,7 +30,7 @@ public: virtual void SetVolume(MxS32 p_volume) { m_volume = p_volume; } // vtable+0x60 protected: - MxS32 m_volume; + MxS32 m_volume; // 0x50 }; // SYNTHETIC: LEGO1 0x1000d370