BETA matches for SoundManagers (#1646)

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
This commit is contained in:
jonschz 2025-07-21 23:42:42 +02:00 committed by GitHub
parent fd299137ff
commit 36f6d963dc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 201 additions and 92 deletions

View File

@ -240,7 +240,7 @@ function(add_lego_libraries NAME)
LEGO1/omni/src/common/mxutilities.cpp LEGO1/omni/src/common/mxutilities.cpp
LEGO1/omni/src/common/mxvariabletable.cpp LEGO1/omni/src/common/mxvariabletable.cpp
LEGO1/omni/src/stream/mxdssubscriber.cpp LEGO1/omni/src/stream/mxdssubscriber.cpp
LEGO1/omni/src/common/mxmediamanager.cpp LEGO1/omni/src/common/mxpresentationmanager.cpp
LEGO1/omni/src/system/mxticklethread.cpp LEGO1/omni/src/system/mxticklethread.cpp
LEGO1/omni/src/audio/mxaudiomanager.cpp LEGO1/omni/src/audio/mxaudiomanager.cpp
LEGO1/omni/src/system/mxautolock.cpp LEGO1/omni/src/system/mxautolock.cpp

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 @@ private:
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 @@ public:
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,10 +46,13 @@ 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) {
goto done;
}
if (MxSoundManager::Create(10, FALSE) == SUCCESS) {
ENTER(m_criticalSection); ENTER(m_criticalSection);
locked = TRUE; locked = TRUE;
@ -54,6 +61,10 @@ MxResult LegoSoundManager::Create(MxU32 p_frequencyMS, MxBool p_createThread)
goto done; goto done;
} }
#ifdef BETA10
m_listener->SetDistanceFactor(0.026315790f, 0);
m_listener->SetRolloffFactor(10, 0);
#else
MxOmni* omni = MxOmni::GetInstance(); MxOmni* omni = MxOmni::GetInstance();
LPDIRECTSOUND sound; LPDIRECTSOUND sound;
@ -67,12 +78,12 @@ MxResult LegoSoundManager::Create(MxU32 p_frequencyMS, MxBool p_createThread)
m_listener->SetRolloffFactor(10, 0); m_listener->SetRolloffFactor(10, 0);
} }
} }
#endif
} }
m_cacheSoundManager = new LegoCacheSoundManager; m_cacheSoundManager = new LegoCacheSoundManager;
assert(m_cacheSoundManager); assert(m_cacheSoundManager);
result = SUCCESS; result = SUCCESS;
}
done: done:
if (result != SUCCESS) { if (result != SUCCESS) {
@ -112,21 +123,17 @@ void LegoSoundManager::UpdateListener(
const float* p_velocity const float* p_velocity
) )
{ {
if (m_listener != NULL) { if (!m_listener) {
return;
}
if (p_position != NULL) { if (p_position != NULL) {
m_listener->SetPosition(p_position[0], p_position[1], p_position[2], DS3D_DEFERRED); m_listener->SetPosition(p_position[0], p_position[1], p_position[2], DS3D_DEFERRED);
} }
if (p_direction != NULL && p_up != NULL) { if (p_direction != NULL && p_up != NULL) {
m_listener->SetOrientation( m_listener
p_direction[0], ->SetOrientation(p_direction[0], p_direction[1], p_direction[2], p_up[0], p_up[1], p_up[2], DS3D_DEFERRED);
p_direction[1],
p_direction[2],
p_up[0],
p_up[1],
p_up[2],
DS3D_DEFERRED
);
} }
if (p_velocity != NULL) { if (p_velocity != NULL) {
@ -136,5 +143,4 @@ void LegoSoundManager::UpdateListener(
if (p_position != NULL || (p_direction != NULL && p_up != NULL) || p_velocity != NULL) { if (p_position != NULL || (p_direction != NULL && p_up != NULL) || p_velocity != NULL) {
m_listener->CommitDeferredSettings(); m_listener->CommitDeferredSettings();
} }
}
} }

View File

@ -2,11 +2,12 @@
#define MXAUDIOMANAGER_H #define MXAUDIOMANAGER_H
#include "decomp.h" #include "decomp.h"
#include "mxmediamanager.h" #include "mxpresentationmanager.h"
// VTABLE: LEGO1 0x100dc6e0 // VTABLE: LEGO1 0x100dc6e0
// VTABLE: BETA10 0x101c2348
// SIZE 0x30 // SIZE 0x30
class MxAudioManager : public MxMediaManager { class MxAudioManager : public MxPresentationManager {
public: public:
MxAudioManager(); MxAudioManager();
~MxAudioManager() override; ~MxAudioManager() override;
@ -15,11 +16,13 @@ public:
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

@ -2,11 +2,11 @@
#define MXEVENTMANAGER_H #define MXEVENTMANAGER_H
#include "decomp.h" #include "decomp.h"
#include "mxmediamanager.h" #include "mxpresentationmanager.h"
// VTABLE: LEGO1 0x100dc900 // VTABLE: LEGO1 0x100dc900
// SIZE 0x2c // SIZE 0x2c
class MxEventManager : public MxMediaManager { class MxEventManager : public MxPresentationManager {
public: public:
MxEventManager(); MxEventManager();
~MxEventManager() override; ~MxEventManager() override;

View File

@ -1,5 +1,5 @@
#ifndef MXMEDIAMANGER_H #ifndef MXPRESENTATIONMANAGER_H
#define MXMEDIAMANGER_H #define MXPRESENTATIONMANAGER_H
#include "mxcore.h" #include "mxcore.h"
#include "mxcriticalsection.h" #include "mxcriticalsection.h"
@ -9,11 +9,12 @@
class MxThread; class MxThread;
// VTABLE: LEGO1 0x100dc6b0 // VTABLE: LEGO1 0x100dc6b0
// VTABLE: BETA10 0x101c2318
// SIZE 0x2c // SIZE 0x2c
class MxMediaManager : public MxCore { class MxPresentationManager : public MxCore {
public: public:
MxMediaManager(); MxPresentationManager();
~MxMediaManager() override; ~MxPresentationManager() override;
MxResult Tickle() override; // vtable+08 MxResult Tickle() override; // vtable+08
virtual MxResult Create(); // vtable+14 virtual MxResult Create(); // vtable+14
@ -25,7 +26,8 @@ public:
MxResult Init(); MxResult Init();
// SYNTHETIC: LEGO1 0x100b8540 // SYNTHETIC: LEGO1 0x100b8540
// MxMediaManager::`scalar deleting destructor' // SYNTHETIC: BETA10 0x10144db0
// MxPresentationManager::`scalar deleting destructor'
protected: protected:
MxPresenterList* m_presenters; // 0x08 MxPresenterList* m_presenters; // 0x08
@ -33,4 +35,4 @@ protected:
MxCriticalSection m_criticalSection; // 0x10 MxCriticalSection m_criticalSection; // 0x10
}; };
#endif // MXMEDIAMANGER_H #endif // MXPRESENTATIONMANAGER_H

View File

@ -5,12 +5,15 @@
#include "mxpresenter.h" #include "mxpresenter.h"
// VTABLE: LEGO1 0x100d62f0 // VTABLE: LEGO1 0x100d62f0
// VTABLE: BETA10 0x101bf070
// class MxPtrList<MxPresenter> // class MxPtrList<MxPresenter>
// VTABLE: LEGO1 0x100d6308 // VTABLE: LEGO1 0x100d6308
// VTABLE: BETA10 0x101bf050
// SIZE 0x18 // SIZE 0x18
class MxPresenterList : public MxPtrList<MxPresenter> { class MxPresenterList : public MxPtrList<MxPresenter> {
public: public:
// FUNCTION: BETA10 0x100dc900
MxPresenterList(MxBool p_ownership = FALSE) : MxPtrList<MxPresenter>(p_ownership) {} MxPresenterList(MxBool p_ownership = FALSE) : MxPtrList<MxPresenter>(p_ownership) {}
// FUNCTION: LEGO1 0x1001cd00 // FUNCTION: LEGO1 0x1001cd00
@ -35,6 +38,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
@ -58,7 +68,11 @@ public:
// TEMPLATE: LEGO1 0x1001ce20 // TEMPLATE: LEGO1 0x1001ce20
// MxList<MxPresenter *>::~MxList<MxPresenter *> // MxList<MxPresenter *>::~MxList<MxPresenter *>
// TEMPLATE: BETA10 0x100dc9f0
// MxPtrList<MxPresenter>::MxPtrList<MxPresenter>
// TEMPLATE: LEGO1 0x1001cf20 // TEMPLATE: LEGO1 0x1001cf20
// TEMPLATE: BETA10 0x100dce70
// MxPtrList<MxPresenter>::~MxPtrList<MxPresenter> // MxPtrList<MxPresenter>::~MxPtrList<MxPresenter>
// SYNTHETIC: LEGO1 0x1001cf70 // SYNTHETIC: LEGO1 0x1001cf70
@ -73,10 +87,8 @@ public:
// 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 +98,9 @@ public:
// 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 +116,18 @@ public:
// 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 @@ public:
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 @@ protected:
undefined m_unk0x38[4]; undefined m_unk0x38[4];
}; };
// SYNTHETIC: LEGO1 0x100ae7b0
// MxSoundManager::`scalar deleting destructor'
#endif // MXSOUNDMANAGER_H #endif // MXSOUNDMANAGER_H

View File

@ -1,7 +1,7 @@
#ifndef MXVIDEOMANAGER_H #ifndef MXVIDEOMANAGER_H
#define MXVIDEOMANAGER_H #define MXVIDEOMANAGER_H
#include "mxmediamanager.h" #include "mxpresentationmanager.h"
#include "mxvideoparam.h" #include "mxvideoparam.h"
#include <d3d.h> #include <d3d.h>
@ -11,8 +11,9 @@ 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 MxPresentationManager {
public: public:
MxVideoManager(); MxVideoManager();
~MxVideoManager() override; ~MxVideoManager() override;
@ -48,6 +49,7 @@ public:
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:

View File

@ -3,27 +3,32 @@
DECOMP_SIZE_ASSERT(MxAudioManager, 0x30); DECOMP_SIZE_ASSERT(MxAudioManager, 0x30);
// GLOBAL: LEGO1 0x10102108 // GLOBAL: LEGO1 0x10102108
// GLOBAL: BETA10 0x10203a60
MxS32 MxAudioManager::g_count = 0; MxS32 MxAudioManager::g_count = 0;
// FUNCTION: LEGO1 0x100b8d00 // FUNCTION: LEGO1 0x100b8d00
// FUNCTION: BETA10 0x10144e90
MxAudioManager::MxAudioManager() MxAudioManager::MxAudioManager()
{ {
Init(); Init();
} }
// FUNCTION: LEGO1 0x100b8d90 // FUNCTION: LEGO1 0x100b8d90
// STUB: BETA10 0x10144f07
MxAudioManager::~MxAudioManager() MxAudioManager::~MxAudioManager()
{ {
Destroy(TRUE); Destroy(TRUE);
} }
// FUNCTION: LEGO1 0x100b8df0 // FUNCTION: LEGO1 0x100b8df0
// FUNCTION: BETA10 0x10144f79
void MxAudioManager::Init() void MxAudioManager::Init()
{ {
m_volume = 100; m_volume = 100;
} }
// FUNCTION: LEGO1 0x100b8e00 // FUNCTION: LEGO1 0x100b8e00
// FUNCTION: BETA10 0x10144f9c
void MxAudioManager::Destroy(MxBool p_fromDestructor) void MxAudioManager::Destroy(MxBool p_fromDestructor)
{ {
ENTER(m_criticalSection); ENTER(m_criticalSection);
@ -32,17 +37,49 @@ void MxAudioManager::Destroy(MxBool p_fromDestructor)
m_criticalSection.Leave(); m_criticalSection.Leave();
if (!p_fromDestructor) { if (!p_fromDestructor) {
MxMediaManager::Destroy(); MxPresentationManager::Destroy();
} }
} }
#ifdef BETA10
// FUNCTION: BETA10 0x10144ffe
MxResult MxAudioManager::Create()
{
MxResult result = FAILURE;
MxBool success = FALSE;
if (MxPresentationManager::Create() != SUCCESS) {
goto exit;
}
ENTER(m_criticalSection);
success = TRUE;
if (!g_count++) {
// This is correct. It was likely refactored later.
}
exit:
result = SUCCESS;
if (result) {
Destroy();
}
if (success) {
m_criticalSection.Leave();
}
return result;
}
#else
// FUNCTION: LEGO1 0x100b8e40 // FUNCTION: LEGO1 0x100b8e40
MxResult MxAudioManager::Create() MxResult MxAudioManager::Create()
{ {
MxResult result = FAILURE; MxResult result = FAILURE;
MxBool success = FALSE; MxBool success = FALSE;
if (MxMediaManager::Create() == SUCCESS) { if (MxPresentationManager::Create() == SUCCESS) {
ENTER(m_criticalSection); ENTER(m_criticalSection);
success = TRUE; success = TRUE;
result = SUCCESS; result = SUCCESS;
@ -59,14 +96,17 @@ MxResult MxAudioManager::Create()
return result; return result;
} }
#endif
// FUNCTION: LEGO1 0x100b8e90 // FUNCTION: LEGO1 0x100b8e90
// FUNCTION: BETA10 0x101450a7
void MxAudioManager::Destroy() void MxAudioManager::Destroy()
{ {
Destroy(FALSE); Destroy(FALSE);
} }
// FUNCTION: LEGO1 0x100b8ea0 // FUNCTION: LEGO1 0x100b8ea0
// FUNCTION: BETA10 0x101450c7
void MxAudioManager::SetVolume(MxS32 p_volume) void MxAudioManager::SetVolume(MxS32 p_volume)
{ {
ENTER(m_criticalSection); ENTER(m_criticalSection);

View File

@ -23,18 +23,21 @@ MxS32 g_volumeAttenuation[100] = {-6643, -5643, -5058, -4643, -4321, -4058, -383
-43, -29, -14, 0}; -43, -29, -14, 0};
// FUNCTION: LEGO1 0x100ae740 // FUNCTION: LEGO1 0x100ae740
// FUNCTION: BETA10 0x10132c70
MxSoundManager::MxSoundManager() MxSoundManager::MxSoundManager()
{ {
Init(); Init();
} }
// FUNCTION: LEGO1 0x100ae7d0 // FUNCTION: LEGO1 0x100ae7d0
// FUNCTION: BETA10 0x10132ce7
MxSoundManager::~MxSoundManager() MxSoundManager::~MxSoundManager()
{ {
Destroy(TRUE); Destroy(TRUE);
} }
// FUNCTION: LEGO1 0x100ae830 // FUNCTION: LEGO1 0x100ae830
// FUNCTION: BETA10 0x10132d59
void MxSoundManager::Init() void MxSoundManager::Init()
{ {
m_directSound = NULL; m_directSound = NULL;
@ -42,6 +45,7 @@ void MxSoundManager::Init()
} }
// FUNCTION: LEGO1 0x100ae840 // FUNCTION: LEGO1 0x100ae840
// FUNCTION: BETA10 0x10132d89
void MxSoundManager::Destroy(MxBool p_fromDestructor) void MxSoundManager::Destroy(MxBool p_fromDestructor)
{ {
if (m_thread) { if (m_thread) {
@ -156,12 +160,14 @@ done:
} }
// FUNCTION: LEGO1 0x100aeab0 // FUNCTION: LEGO1 0x100aeab0
// FUNCTION: BETA10 0x101331e3
void MxSoundManager::Destroy() void MxSoundManager::Destroy()
{ {
Destroy(FALSE); Destroy(FALSE);
} }
// FUNCTION: LEGO1 0x100aeac0 // FUNCTION: LEGO1 0x100aeac0
// FUNCTION: BETA10 0x10133203
void MxSoundManager::SetVolume(MxS32 p_volume) void MxSoundManager::SetVolume(MxS32 p_volume)
{ {
MxAudioManager::SetVolume(p_volume); MxAudioManager::SetVolume(p_volume);
@ -179,6 +185,7 @@ void MxSoundManager::SetVolume(MxS32 p_volume)
} }
// FUNCTION: LEGO1 0x100aebd0 // FUNCTION: LEGO1 0x100aebd0
// FUNCTION: BETA10 0x101332cf
MxPresenter* MxSoundManager::FindPresenter(const MxAtomId& p_atomId, MxU32 p_objectId) MxPresenter* MxSoundManager::FindPresenter(const MxAtomId& p_atomId, MxU32 p_objectId)
{ {
AUTOLOCK(m_criticalSection); AUTOLOCK(m_criticalSection);
@ -187,8 +194,7 @@ MxPresenter* MxSoundManager::FindPresenter(const MxAtomId& p_atomId, MxU32 p_obj
MxPresenterListCursor cursor(m_presenters); MxPresenterListCursor cursor(m_presenters);
while (cursor.Next(presenter)) { while (cursor.Next(presenter)) {
if (presenter->GetAction()->GetAtomId().GetInternal() == p_atomId.GetInternal() && if (presenter->GetAction()->GetAtomId() == p_atomId && presenter->GetAction()->GetObjectId() == p_objectId) {
presenter->GetAction()->GetObjectId() == p_objectId) {
return presenter; return presenter;
} }
} }

View File

@ -131,6 +131,7 @@ done:
} }
// FUNCTION: LEGO1 0x100b5bc0 // FUNCTION: LEGO1 0x100b5bc0
// STUB: BETA10 0x1013623c
void MxMediaPresenter::EndAction() void MxMediaPresenter::EndAction()
{ {
AUTOLOCK(m_criticalSection); AUTOLOCK(m_criticalSection);

View File

@ -1,4 +1,4 @@
#include "mxmediamanager.h" #include "mxpresentationmanager.h"
#include "decomp.h" #include "decomp.h"
#include "mxautolock.h" #include "mxautolock.h"
@ -6,24 +6,27 @@
#include "mxpresenter.h" #include "mxpresenter.h"
#include "mxticklemanager.h" #include "mxticklemanager.h"
DECOMP_SIZE_ASSERT(MxMediaManager, 0x2c); DECOMP_SIZE_ASSERT(MxPresentationManager, 0x2c);
DECOMP_SIZE_ASSERT(MxPresenterList, 0x18); DECOMP_SIZE_ASSERT(MxPresenterList, 0x18);
DECOMP_SIZE_ASSERT(MxPresenterListCursor, 0x10); DECOMP_SIZE_ASSERT(MxPresenterListCursor, 0x10);
// FUNCTION: LEGO1 0x100b84c0 // FUNCTION: LEGO1 0x100b84c0
MxMediaManager::MxMediaManager() // FUNCTION: BETA10 0x10144680
MxPresentationManager::MxPresentationManager()
{ {
Init(); Init();
} }
// FUNCTION: LEGO1 0x100b8560 // FUNCTION: LEGO1 0x100b8560
MxMediaManager::~MxMediaManager() // FUNCTION: BETA10 0x10144712
MxPresentationManager::~MxPresentationManager()
{ {
Destroy(); Destroy();
} }
// FUNCTION: LEGO1 0x100b85d0 // FUNCTION: LEGO1 0x100b85d0
MxResult MxMediaManager::Init() // FUNCTION: BETA10 0x1014479b
MxResult MxPresentationManager::Init()
{ {
this->m_presenters = NULL; this->m_presenters = NULL;
this->m_thread = NULL; this->m_thread = NULL;
@ -31,8 +34,10 @@ MxResult MxMediaManager::Init()
} }
// FUNCTION: LEGO1 0x100b85e0 // FUNCTION: LEGO1 0x100b85e0
MxResult MxMediaManager::Create() // FUNCTION: BETA10 0x101447c5
MxResult MxPresentationManager::Create()
{ {
// This validates the name of the source code file (and hence also the name of the class)
AUTOLOCK(m_criticalSection); AUTOLOCK(m_criticalSection);
this->m_presenters = new MxPresenterList; this->m_presenters = new MxPresenterList;
@ -46,7 +51,8 @@ MxResult MxMediaManager::Create()
} }
// FUNCTION: LEGO1 0x100b8710 // FUNCTION: LEGO1 0x100b8710
void MxMediaManager::Destroy() // FUNCTION: BETA10 0x101448e4
void MxPresentationManager::Destroy()
{ {
AUTOLOCK(m_criticalSection); AUTOLOCK(m_criticalSection);
@ -58,7 +64,8 @@ void MxMediaManager::Destroy()
} }
// FUNCTION: LEGO1 0x100b8790 // FUNCTION: LEGO1 0x100b8790
MxResult MxMediaManager::Tickle() // FUNCTION: BETA10 0x10144993
MxResult MxPresentationManager::Tickle()
{ {
AUTOLOCK(m_criticalSection); AUTOLOCK(m_criticalSection);
MxPresenter* presenter; MxPresenter* presenter;
@ -78,7 +85,8 @@ MxResult MxMediaManager::Tickle()
} }
// FUNCTION: LEGO1 0x100b88c0 // FUNCTION: LEGO1 0x100b88c0
void MxMediaManager::RegisterPresenter(MxPresenter& p_presenter) // FUNCTION: BETA10 0x10144a8b
void MxPresentationManager::RegisterPresenter(MxPresenter& p_presenter)
{ {
AUTOLOCK(m_criticalSection); AUTOLOCK(m_criticalSection);
@ -86,7 +94,8 @@ void MxMediaManager::RegisterPresenter(MxPresenter& p_presenter)
} }
// FUNCTION: LEGO1 0x100b8980 // FUNCTION: LEGO1 0x100b8980
void MxMediaManager::UnregisterPresenter(MxPresenter& p_presenter) // FUNCTION: BETA10 0x10144b0c
void MxPresentationManager::UnregisterPresenter(MxPresenter& p_presenter)
{ {
AUTOLOCK(m_criticalSection); AUTOLOCK(m_criticalSection);
MxPresenterListCursor cursor(this->m_presenters); MxPresenterListCursor cursor(this->m_presenters);
@ -97,7 +106,8 @@ void MxMediaManager::UnregisterPresenter(MxPresenter& p_presenter)
} }
// FUNCTION: LEGO1 0x100b8ac0 // FUNCTION: LEGO1 0x100b8ac0
void MxMediaManager::StopPresenters() // FUNCTION: BETA10 0x10144bc3
void MxPresentationManager::StopPresenters()
{ {
AUTOLOCK(m_criticalSection); AUTOLOCK(m_criticalSection);
MxPresenter* presenter; MxPresenter* presenter;

View File

@ -35,7 +35,7 @@ void MxEventManager::Destroy(MxBool p_fromDestructor)
} }
if (!p_fromDestructor) { if (!p_fromDestructor) {
MxMediaManager::Destroy(); MxPresentationManager::Destroy();
} }
} }
@ -45,7 +45,7 @@ MxResult MxEventManager::Create(MxU32 p_frequencyMS, MxBool p_createThread)
MxResult status = FAILURE; MxResult status = FAILURE;
MxBool locked = FALSE; MxBool locked = FALSE;
MxResult result = MxMediaManager::Create(); MxResult result = MxPresentationManager::Create();
if (result == SUCCESS) { if (result == SUCCESS) {
if (p_createThread) { if (p_createThread) {
ENTER(this->m_criticalSection); ENTER(this->m_criticalSection);

View File

@ -19,17 +19,20 @@ MxVideoManager::MxVideoManager()
} }
// FUNCTION: LEGO1 0x100be270 // FUNCTION: LEGO1 0x100be270
// FUNCTION: BETA10 0x1012dde0
void MxVideoManager::UpdateView(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height) void MxVideoManager::UpdateView(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height)
{ {
} }
// FUNCTION: LEGO1 0x100be2a0 // FUNCTION: LEGO1 0x100be2a0
// FUNCTION: BETA10 0x1012cad8
MxVideoManager::~MxVideoManager() MxVideoManager::~MxVideoManager()
{ {
Destroy(TRUE); Destroy(TRUE);
} }
// FUNCTION: LEGO1 0x100be320 // FUNCTION: LEGO1 0x100be320
// FUNCTION: BETA10 0x1012cb66
MxResult MxVideoManager::Init() MxResult MxVideoManager::Init()
{ {
m_pDirectDraw = NULL; m_pDirectDraw = NULL;
@ -42,6 +45,7 @@ MxResult MxVideoManager::Init()
} }
// FUNCTION: LEGO1 0x100be340 // FUNCTION: LEGO1 0x100be340
// FUNCTION: BETA10 0x1012cbca
void MxVideoManager::Destroy(MxBool p_fromDestructor) void MxVideoManager::Destroy(MxBool p_fromDestructor)
{ {
if (m_thread) { if (m_thread) {
@ -79,7 +83,7 @@ void MxVideoManager::Destroy(MxBool p_fromDestructor)
m_criticalSection.Leave(); m_criticalSection.Leave();
if (!p_fromDestructor) { if (!p_fromDestructor) {
MxMediaManager::Destroy(); MxPresentationManager::Destroy();
} }
} }
@ -132,6 +136,7 @@ void MxVideoManager::SortPresenterList()
} }
// FUNCTION: LEGO1 0x100be600 // FUNCTION: LEGO1 0x100be600
// STUB: BETA10 0x1012cfbc
MxResult MxVideoManager::VTable0x28( MxResult MxVideoManager::VTable0x28(
MxVideoParam& p_videoParam, MxVideoParam& p_videoParam,
LPDIRECTDRAW p_pDirectDraw, LPDIRECTDRAW p_pDirectDraw,
@ -148,7 +153,7 @@ MxResult MxVideoManager::VTable0x28(
m_unk0x60 = FALSE; m_unk0x60 = FALSE;
if (MxMediaManager::Create() != SUCCESS) { if (MxPresentationManager::Create() != SUCCESS) {
goto done; goto done;
} }
@ -214,6 +219,7 @@ done:
} }
// FUNCTION: LEGO1 0x100be820 // FUNCTION: LEGO1 0x100be820
// STUB: BETA10 0x1012d3f1
MxResult MxVideoManager::Create(MxVideoParam& p_videoParam, MxU32 p_frequencyMS, MxBool p_createThread) MxResult MxVideoManager::Create(MxVideoParam& p_videoParam, MxU32 p_frequencyMS, MxBool p_createThread)
{ {
MxBool locked = FALSE; MxBool locked = FALSE;
@ -221,7 +227,7 @@ MxResult MxVideoManager::Create(MxVideoParam& p_videoParam, MxU32 p_frequencyMS,
m_unk0x60 = TRUE; m_unk0x60 = TRUE;
if (MxMediaManager::Create() != SUCCESS) { if (MxPresentationManager::Create() != SUCCESS) {
goto done; goto done;
} }
@ -292,6 +298,7 @@ done:
} }
// FUNCTION: LEGO1 0x100bea50 // FUNCTION: LEGO1 0x100bea50
// FUNCTION: BETA10 0x1012d85f
void MxVideoManager::Destroy() void MxVideoManager::Destroy()
{ {
Destroy(FALSE); Destroy(FALSE);
@ -310,6 +317,7 @@ void MxVideoManager::InvalidateRect(MxRect32& p_rect)
} }
// FUNCTION: LEGO1 0x100bea90 // FUNCTION: LEGO1 0x100bea90
// FUNCTION: BETA10 0x1012d8e3
MxResult MxVideoManager::Tickle() MxResult MxVideoManager::Tickle()
{ {
AUTOLOCK(m_criticalSection); AUTOLOCK(m_criticalSection);