Save progress on sure cases

This commit is contained in:
jonschz 2025-07-20 15:34:27 +02:00
parent b1dcc26d79
commit 187f9308d4
9 changed files with 95 additions and 58 deletions

View File

@ -46,10 +46,13 @@ typedef set<LegoCacheSoundEntry, Set100d6b4cComparator> Set100d6b4c;
typedef list<LegoCacheSoundEntry> List100d6b4c; typedef list<LegoCacheSoundEntry> List100d6b4c;
// VTABLE: LEGO1 0x100d6b4c // VTABLE: LEGO1 0x100d6b4c
// VTABLE: BETA10 0x101becac
// SIZE 0x20 // SIZE 0x20
class LegoCacheSoundManager { class LegoCacheSoundManager {
public: public:
// FUNCTION: BETA10 0x100d0a60
LegoCacheSoundManager() {} LegoCacheSoundManager() {}
~LegoCacheSoundManager(); ~LegoCacheSoundManager();
virtual MxResult Tickle(); // vtable+0x00 virtual MxResult Tickle(); // vtable+0x00
@ -66,6 +69,9 @@ class LegoCacheSoundManager {
List100d6b4c m_list; // 0x14 List100d6b4c m_list; // 0x14
}; };
// SYNTHETIC: BETA10 0x100d06b0
// LegoCacheSoundManager::`scalar deleting destructor'
// TODO: Function names subject to change. // TODO: Function names subject to change.
// clang-format off // clang-format off

View File

@ -17,15 +17,15 @@ class LegoSoundManager : public MxSoundManager {
void Destroy() override; // vtable+0x18 void Destroy() override; // vtable+0x18
MxResult Create(MxU32 p_frequencyMS, MxBool p_createThread) override; // vtable+0x30 MxResult Create(MxU32 p_frequencyMS, MxBool p_createThread) override; // vtable+0x30
// SYNTHETIC: LEGO1 0x10029920
// SYNTHETIC: BETA10 0x100d0660
// LegoSoundManager::`scalar deleting destructor'
void UpdateListener(const float* p_position, const float* p_direction, const float* p_up, const float* p_velocity); void UpdateListener(const float* p_position, const float* p_direction, const float* p_up, const float* p_velocity);
// FUNCTION: BETA10 0x1000f350 // FUNCTION: BETA10 0x1000f350
LegoCacheSoundManager* GetCacheSoundManager() { return m_cacheSoundManager; } LegoCacheSoundManager* GetCacheSoundManager() { return m_cacheSoundManager; }
// SYNTHETIC: LEGO1 0x10029920
// SYNTHETIC: BETA10 0x100d0660
// LegoSoundManager::`scalar deleting destructor'
private: private:
void Init(); void Init();
void Destroy(MxBool p_fromDestructor); void Destroy(MxBool p_fromDestructor);

View File

@ -7,6 +7,7 @@ DECOMP_SIZE_ASSERT(LegoCacheSoundEntry, 0x08)
DECOMP_SIZE_ASSERT(LegoCacheSoundManager, 0x20) DECOMP_SIZE_ASSERT(LegoCacheSoundManager, 0x20)
// FUNCTION: LEGO1 0x1003cf20 // FUNCTION: LEGO1 0x1003cf20
// STUB: BETA10 0x100d0700
LegoCacheSoundManager::~LegoCacheSoundManager() LegoCacheSoundManager::~LegoCacheSoundManager()
{ {
LegoCacheSound* sound; LegoCacheSound* sound;
@ -28,6 +29,7 @@ LegoCacheSoundManager::~LegoCacheSoundManager()
} }
// FUNCTION: LEGO1 0x1003d050 // FUNCTION: LEGO1 0x1003d050
// STUB: BETA10 0x100652f0
MxResult LegoCacheSoundManager::Tickle() MxResult LegoCacheSoundManager::Tickle()
{ {
#ifdef COMPAT_MODE #ifdef COMPAT_MODE

View File

@ -9,18 +9,21 @@
DECOMP_SIZE_ASSERT(LegoSoundManager, 0x44) DECOMP_SIZE_ASSERT(LegoSoundManager, 0x44)
// FUNCTION: LEGO1 0x100298a0 // FUNCTION: LEGO1 0x100298a0
// FUNCTION: BETA10 0x100cffb0
LegoSoundManager::LegoSoundManager() LegoSoundManager::LegoSoundManager()
{ {
Init(); Init();
} }
// FUNCTION: LEGO1 0x10029940 // FUNCTION: LEGO1 0x10029940
// FUNCTION: BETA10 0x100d0027
LegoSoundManager::~LegoSoundManager() LegoSoundManager::~LegoSoundManager()
{ {
Destroy(TRUE); Destroy(TRUE);
} }
// FUNCTION: LEGO1 0x100299a0 // FUNCTION: LEGO1 0x100299a0
// FUNCTION: BETA10 0x100d0099
void LegoSoundManager::Init() void LegoSoundManager::Init()
{ {
m_cacheSoundManager = NULL; m_cacheSoundManager = NULL;
@ -28,6 +31,7 @@ void LegoSoundManager::Init()
} }
// FUNCTION: LEGO1 0x100299b0 // FUNCTION: LEGO1 0x100299b0
// FUNCTION: BETA10 0x100d00c9
void LegoSoundManager::Destroy(MxBool p_fromDestructor) void LegoSoundManager::Destroy(MxBool p_fromDestructor)
{ {
delete m_cacheSoundManager; delete m_cacheSoundManager;
@ -42,38 +46,45 @@ void LegoSoundManager::Destroy(MxBool p_fromDestructor)
// FUNCTION: BETA10 0x100d0129 // FUNCTION: BETA10 0x100d0129
MxResult LegoSoundManager::Create(MxU32 p_frequencyMS, MxBool p_createThread) MxResult LegoSoundManager::Create(MxU32 p_frequencyMS, MxBool p_createThread)
{ {
MxBool locked = FALSE;
MxResult result = FAILURE; MxResult result = FAILURE;
MxBool locked = FALSE;
if (MxSoundManager::Create(10, FALSE) == SUCCESS) { if (MxSoundManager::Create(10, FALSE) != SUCCESS) {
ENTER(m_criticalSection); goto done;
locked = TRUE; }
if (MxOmni::IsSound3D()) { ENTER(m_criticalSection);
if (m_dsBuffer->QueryInterface(IID_IDirectSound3DListener, (LPVOID*) &m_listener) != DS_OK) { locked = TRUE;
goto done;
}
MxOmni* omni = MxOmni::GetInstance(); if (MxOmni::IsSound3D()) {
LPDIRECTSOUND sound; if (m_dsBuffer->QueryInterface(IID_IDirectSound3DListener, (LPVOID*) &m_listener) != DS_OK) {
goto done;
if (omni && omni->GetSoundManager() && (sound = omni->GetSoundManager()->GetDirectSound())) {
DSCAPS caps;
memset(&caps, 0, sizeof(DSCAPS));
caps.dwSize = sizeof(DSCAPS);
if (sound->GetCaps(&caps) == S_OK && caps.dwMaxHw3DAllBuffers == 0) {
m_listener->SetDistanceFactor(0.026315790f, 0);
m_listener->SetRolloffFactor(10, 0);
}
}
} }
m_cacheSoundManager = new LegoCacheSoundManager; #ifdef BETA10
assert(m_cacheSoundManager); m_listener->SetDistanceFactor(0.026315790f, 0);
result = SUCCESS; m_listener->SetRolloffFactor(10, 0);
#else
MxOmni* omni = MxOmni::GetInstance();
LPDIRECTSOUND sound;
if (omni && omni->GetSoundManager() && (sound = omni->GetSoundManager()->GetDirectSound())) {
DSCAPS caps;
memset(&caps, 0, sizeof(DSCAPS));
caps.dwSize = sizeof(DSCAPS);
if (sound->GetCaps(&caps) == S_OK && caps.dwMaxHw3DAllBuffers == 0) {
m_listener->SetDistanceFactor(0.026315790f, 0);
m_listener->SetRolloffFactor(10, 0);
}
}
#endif
} }
m_cacheSoundManager = new LegoCacheSoundManager;
assert(m_cacheSoundManager);
result = SUCCESS;
done: done:
if (result != SUCCESS) { if (result != SUCCESS) {
Destroy(); Destroy();
@ -112,29 +123,24 @@ void LegoSoundManager::UpdateListener(
const float* p_velocity const float* p_velocity
) )
{ {
if (m_listener != NULL) { if (!m_listener) {
if (p_position != NULL) { return;
m_listener->SetPosition(p_position[0], p_position[1], p_position[2], DS3D_DEFERRED); }
}
if (p_direction != NULL && p_up != NULL) { if (p_position != NULL) {
m_listener->SetOrientation( m_listener->SetPosition(p_position[0], p_position[1], p_position[2], DS3D_DEFERRED);
p_direction[0], }
p_direction[1],
p_direction[2],
p_up[0],
p_up[1],
p_up[2],
DS3D_DEFERRED
);
}
if (p_velocity != NULL) { if (p_direction != NULL && p_up != NULL) {
m_listener->SetVelocity(p_velocity[0], p_velocity[1], p_velocity[2], DS3D_DEFERRED); m_listener
} ->SetOrientation(p_direction[0], p_direction[1], p_direction[2], p_up[0], p_up[1], p_up[2], DS3D_DEFERRED);
}
if (p_position != NULL || (p_direction != NULL && p_up != NULL) || p_velocity != NULL) { if (p_velocity != NULL) {
m_listener->CommitDeferredSettings(); m_listener->SetVelocity(p_velocity[0], p_velocity[1], p_velocity[2], DS3D_DEFERRED);
} }
if (p_position != NULL || (p_direction != NULL && p_up != NULL) || p_velocity != NULL) {
m_listener->CommitDeferredSettings();
} }
} }

View File

@ -5,6 +5,7 @@
#include "mxmediamanager.h" #include "mxmediamanager.h"
// VTABLE: LEGO1 0x100dc6e0 // VTABLE: LEGO1 0x100dc6e0
// VTABLE: BETA10 0x101c2348
// SIZE 0x30 // SIZE 0x30
class MxAudioManager : public MxMediaManager { class MxAudioManager : public MxMediaManager {
public: public:
@ -15,11 +16,13 @@ class MxAudioManager : public MxMediaManager {
void Destroy() override; // vtable+18 void Destroy() override; // vtable+18
// FUNCTION: LEGO1 0x10029910 // FUNCTION: LEGO1 0x10029910
// FUNCTION: BETA10 0x100d0630
virtual MxS32 GetVolume() { return m_volume; } // vtable+28 virtual MxS32 GetVolume() { return m_volume; } // vtable+28
virtual void SetVolume(MxS32 p_volume); // vtable+2c virtual void SetVolume(MxS32 p_volume); // vtable+2c
// SYNTHETIC: LEGO1 0x100b8d70 // SYNTHETIC: LEGO1 0x100b8d70
// SYNTHETIC: BETA10 0x10145110
// MxAudioManager::`scalar deleting destructor' // MxAudioManager::`scalar deleting destructor'
private: private:

View File

@ -9,6 +9,7 @@
class MxThread; class MxThread;
// VTABLE: LEGO1 0x100dc6b0 // VTABLE: LEGO1 0x100dc6b0
// VTABLE: BETA10 0x101c2318
// SIZE 0x2c // SIZE 0x2c
class MxMediaManager : public MxCore { class MxMediaManager : public MxCore {
public: public:
@ -25,6 +26,7 @@ class MxMediaManager : public MxCore {
MxResult Init(); MxResult Init();
// SYNTHETIC: LEGO1 0x100b8540 // SYNTHETIC: LEGO1 0x100b8540
// SYNTHETIC: BETA10 0x10144db0
// MxMediaManager::`scalar deleting destructor' // MxMediaManager::`scalar deleting destructor'
protected: protected:

View File

@ -35,6 +35,13 @@ class MxPresenterListCursor : public MxPtrListCursor<MxPresenter> {
public: public:
// FUNCTION: BETA10 0x1007d130 // FUNCTION: BETA10 0x1007d130
MxPresenterListCursor(MxPresenterList* p_list) : MxPtrListCursor<MxPresenter>(p_list) {} MxPresenterListCursor(MxPresenterList* p_list) : MxPtrListCursor<MxPresenter>(p_list) {}
// SYNTHETIC: LEGO1 0x1001eed0
// MxPresenterListCursor::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1001f0c0
// SYNTHETIC: BETA10 0x1007d510
// MxPresenterListCursor::~MxPresenterListCursor
}; };
// VTABLE: LEGO1 0x100d6350 // VTABLE: LEGO1 0x100d6350
@ -73,10 +80,8 @@ class MxPresenterListCursor : public MxPtrListCursor<MxPresenter> {
// SYNTHETIC: LEGO1 0x1001d100 // SYNTHETIC: LEGO1 0x1001d100
// MxPresenterList::~MxPresenterList // MxPresenterList::~MxPresenterList
// SYNTHETIC: LEGO1 0x1001eed0
// MxPresenterListCursor::`scalar deleting destructor'
// TEMPLATE: LEGO1 0x1001ef40 // TEMPLATE: LEGO1 0x1001ef40
// TEMPLATE: BETA10 0x1007d370
// MxPtrListCursor<MxPresenter>::~MxPtrListCursor<MxPresenter> // MxPtrListCursor<MxPresenter>::~MxPtrListCursor<MxPresenter>
// SYNTHETIC: LEGO1 0x1001ef90 // SYNTHETIC: LEGO1 0x1001ef90
@ -86,11 +91,9 @@ class MxPresenterListCursor : public MxPtrListCursor<MxPresenter> {
// MxPtrListCursor<MxPresenter>::`scalar deleting destructor' // MxPtrListCursor<MxPresenter>::`scalar deleting destructor'
// TEMPLATE: LEGO1 0x1001f070 // TEMPLATE: LEGO1 0x1001f070
// TEMPLATE: BETA10 0x1007d490
// MxListCursor<MxPresenter *>::~MxListCursor<MxPresenter *> // MxListCursor<MxPresenter *>::~MxListCursor<MxPresenter *>
// FUNCTION: LEGO1 0x1001f0c0
// MxPresenterListCursor::~MxPresenterListCursor
// TEMPLATE: LEGO1 0x10020760 // TEMPLATE: LEGO1 0x10020760
// MxListCursor<MxPresenter *>::MxListCursor<MxPresenter *> // MxListCursor<MxPresenter *>::MxListCursor<MxPresenter *>
@ -106,6 +109,18 @@ class MxPresenterListCursor : public MxPtrListCursor<MxPresenter> {
// TEMPLATE: BETA10 0x1007d270 // TEMPLATE: BETA10 0x1007d270
// MxListCursor<MxPresenter *>::MxListCursor<MxPresenter *> // MxListCursor<MxPresenter *>::MxListCursor<MxPresenter *>
// TEMPLATE: BETA10 0x1007dc60
// MxListCursor<MxPresenter *>::Next
// TEMPLATE: BETA10 0x100d8f20
// MxListCursor<MxPresenter *>::Reset
// TEMPLATE: BETA10 0x1007e070
// MxListEntry<MxPresenter *>::GetNext
// TEMPLATE: BETA10 0x1007e0a0
// MxListEntry<MxPresenter *>::GetValue
// TEMPLATE: BETA10 0x100d9420 // TEMPLATE: BETA10 0x100d9420
// ?Prev@?$MxListCursor@PAVMxPresenter@@@@QAEEAAPAVMxPresenter@@@Z // ?Prev@?$MxListCursor@PAVMxPresenter@@@@QAEEAAPAVMxPresenter@@@Z

View File

@ -27,6 +27,10 @@ class MxSoundManager : public MxAudioManager {
MxPresenter* FindPresenter(const MxAtomId& p_atomId, MxU32 p_objectId); MxPresenter* FindPresenter(const MxAtomId& p_atomId, MxU32 p_objectId);
// SYNTHETIC: LEGO1 0x100ae7b0
// SYNTHETIC: BETA10 0x10133460
// MxSoundManager::`scalar deleting destructor'
protected: protected:
void Init(); void Init();
void Destroy(MxBool p_fromDestructor); void Destroy(MxBool p_fromDestructor);
@ -36,7 +40,4 @@ class MxSoundManager : public MxAudioManager {
undefined m_unk0x38[4]; undefined m_unk0x38[4];
}; };
// SYNTHETIC: LEGO1 0x100ae7b0
// MxSoundManager::`scalar deleting destructor'
#endif // MXSOUNDMANAGER_H #endif // MXSOUNDMANAGER_H

View File

@ -11,6 +11,7 @@ class MxRect32;
class MxRegion; class MxRegion;
// VTABLE: LEGO1 0x100dc810 // VTABLE: LEGO1 0x100dc810
// VTABLE: BETA10 0x101c1bf8
// SIZE 0x64 // SIZE 0x64
class MxVideoManager : public MxMediaManager { class MxVideoManager : public MxMediaManager {
public: public:
@ -48,6 +49,7 @@ class MxVideoManager : public MxMediaManager {
MxRegion* GetRegion() { return this->m_region; } MxRegion* GetRegion() { return this->m_region; }
// SYNTHETIC: LEGO1 0x100be280 // SYNTHETIC: LEGO1 0x100be280
// SYNTHETIC: BETA10 0x1012de00
// MxVideoManager::`scalar deleting destructor' // MxVideoManager::`scalar deleting destructor'
protected: protected: