Merge branch 'master' into score

This commit is contained in:
Nathan M Gilbert 2023-10-22 11:05:55 -04:00 committed by GitHub
commit eb62e0c112
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 137 additions and 20 deletions

View File

@ -11,6 +11,9 @@
// 0x100f4588 // 0x100f4588
MxAtomId *g_nocdSourceName = NULL; MxAtomId *g_nocdSourceName = NULL;
// 0x100f456c
MxAtomId *g_jukeboxScript = NULL;
// 0x101020e8 // 0x101020e8
void (*g_omniUserMessage)(const char *,int); void (*g_omniUserMessage)(const char *,int);
@ -26,10 +29,11 @@ LegoOmni::~LegoOmni()
Destroy(); Destroy();
} }
// OFFSET: LEGO1 0x1005b560 STUB // OFFSET: LEGO1 0x1005b560
void LegoOmni::CreateBackgroundAudio() void LegoOmni::CreateBackgroundAudio()
{ {
// TODO if (m_bkgAudioManager)
m_bkgAudioManager->Create(*g_jukeboxScript, 100);
} }
// OFFSET: LEGO1 0x1005af10 STUB // OFFSET: LEGO1 0x1005af10 STUB
@ -308,9 +312,10 @@ MxResult LegoOmni::Start(MxDSAction* action)
return result; return result;
} }
void LegoOmni::DeleteObject(MxDSAction &ds) MxResult LegoOmni::DeleteObject(MxDSAction &ds)
{ {
// FIXME: Stub // FIXME: Stub
return FAILURE;
} }
MxBool LegoOmni::DoesEntityExist(MxDSAction &ds) MxBool LegoOmni::DoesEntityExist(MxDSAction &ds)

View File

@ -58,7 +58,7 @@ class LegoOmni : public MxOmni
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p) override; // vtable+18 virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p) override; // vtable+18
virtual void Destroy() override; // vtable+1c virtual void Destroy() override; // vtable+1c
virtual MxResult Start(MxDSAction* action) override; virtual MxResult Start(MxDSAction* action) override;
virtual void DeleteObject(MxDSAction &ds) override; virtual MxResult DeleteObject(MxDSAction &ds) override;
virtual MxBool DoesEntityExist(MxDSAction &ds) override; virtual MxBool DoesEntityExist(MxDSAction &ds) override;
virtual void vtable0x2c() override; virtual void vtable0x2c() override;
virtual int vtable0x30(char*, int, MxCore*) override; virtual int vtable0x30(char*, int, MxCore*) override;

View File

@ -1,20 +1,48 @@
#include "legosoundmanager.h" #include "legosoundmanager.h"
#include "mxautolocker.h"
// OFFSET: LEGO1 0x100298a0 STUB // OFFSET: LEGO1 0x100298a0
LegoSoundManager::LegoSoundManager() LegoSoundManager::LegoSoundManager()
{ {
// TODO Init();
} }
// OFFSET: LEGO1 0x10029940 STUB // OFFSET: LEGO1 0x10029940
LegoSoundManager::~LegoSoundManager() LegoSoundManager::~LegoSoundManager()
{ {
// TODO Destroy(TRUE);
}
// OFFSET: LEGO1 0x1002a390
void LegoSoundManager::Destroy()
{
Destroy(FALSE);
}
// OFFSET: LEGO1 0x100299b0 STUB
void LegoSoundManager::Destroy(MxBool p_fromDestructor)
{
}
// OFFSET: LEGO1 0x100299f0 STUB
MxResult LegoSoundManager::Create(MxU32 p_frequencyMS, MxBool p_createThread)
{
return FAILURE;
}
// OFFSET: LEGO1 0x100299a0
void LegoSoundManager::Init()
{
unk0x40 = 0;
unk0x3c = 0;
} }
// OFFSET: LEGO1 0x1002a3a0 STUB // OFFSET: LEGO1 0x1002a3a0 STUB
MxResult LegoSoundManager::Tickle() MxResult LegoSoundManager::Tickle()
{ {
// TODO MxMediaManager::Tickle();
return 0; MxAutoLocker lock(&this->m_criticalSection);
return 0; // TODO: call something in unk0x40
} }

View File

@ -10,11 +10,17 @@ class LegoSoundManager : public MxSoundManager
public: public:
LegoSoundManager(); LegoSoundManager();
virtual ~LegoSoundManager() override; virtual ~LegoSoundManager() override;
virtual MxResult Tickle() override; // vtable+08 virtual MxResult Tickle() override; // vtable+08
virtual void Destroy() override; // vtable+18
virtual MxResult Create(MxU32 p_frequencyMS, MxBool p_createThread) override; //vtable+0x30
private: private:
void Init(); void Init();
void Destroy(MxBool p_fromDestructor);
undefined4 unk0x3c;
undefined4 unk0x40;
}; };
#endif // LEGOSOUNDMANAGER_H #endif // LEGOSOUNDMANAGER_H

View File

@ -1,6 +1,8 @@
#include "mxbackgroundaudiomanager.h" #include "mxbackgroundaudiomanager.h"
#include "mxomni.h" #include "mxomni.h"
#include "mxstreamer.h"
#include "mxticklemanager.h"
DECOMP_SIZE_ASSERT(MxBackgroundAudioManager, 0x150) DECOMP_SIZE_ASSERT(MxBackgroundAudioManager, 0x150)
@ -20,14 +22,29 @@ MxBackgroundAudioManager::MxBackgroundAudioManager()
// OFFSET: LEGO1 0x1007ec20 // OFFSET: LEGO1 0x1007ec20
MxBackgroundAudioManager::~MxBackgroundAudioManager() MxBackgroundAudioManager::~MxBackgroundAudioManager()
{ {
// TODO TickleManager()->UnregisterClient(this);
NotificationManager()->Unregister(this); NotificationManager()->Unregister(this);
DestroyMusic();
} }
// OFFSET: LEGO1 0x1007f470 // OFFSET: LEGO1 0x1007f470
void MxBackgroundAudioManager::Stop() void MxBackgroundAudioManager::Stop()
{ {
// TODO if (m_action2.GetObjectId() != -1)
DeleteObject(m_action2);
m_unk138 = 0;
m_action2.SetAtomId(MxAtomId());
m_action2.SetObjectId(-1);
if (m_action1.GetObjectId() != -1)
DeleteObject(m_action1);
m_unka0 = 0;
m_action1.SetAtomId(MxAtomId());
m_unk148 = 0;
m_action1.SetObjectId(-1);
m_unk13c = 0;
} }
// OFFSET: LEGO1 0x1007f5f0 // OFFSET: LEGO1 0x1007f5f0
@ -47,3 +64,45 @@ void MxBackgroundAudioManager::Init()
this->m_unka0 = 0; this->m_unka0 = 0;
this->m_unk13c = 0; this->m_unk13c = 0;
} }
// OFFSET: LEGO1 0x1007ece0
MxResult MxBackgroundAudioManager::Create(MxAtomId &p_script, MxU32 p_frequencyMS)
{
MxResult result = OpenMusic(p_script);
if (result == SUCCESS) {
TickleManager()->RegisterClient(this, p_frequencyMS);
m_musicEnabled = TRUE;
}
return result;
}
// OFFSET: LEGO1 0x1007ed20
MxResult MxBackgroundAudioManager::OpenMusic(MxAtomId &p_script)
{
if (m_script.GetInternal())
DestroyMusic();
MxResult result = FAILURE;
if (Streamer()->Open(p_script.GetInternal(), 0)) {
m_script = p_script;
result = SUCCESS;
}
return result;
}
// OFFSET: LEGO1 0x1007ed70
void MxBackgroundAudioManager::DestroyMusic()
{
if (m_script.GetInternal()) {
MxDSAction ds;
ds.SetAtomId(m_script);
ds.SetUnknown24(-2);
DeleteObject(ds);
Streamer()->Close(m_script.GetInternal());
m_musicEnabled = FALSE;
}
}

View File

@ -28,10 +28,13 @@ class MxBackgroundAudioManager : public MxCore
} }
__declspec(dllexport) void Enable(unsigned char p); __declspec(dllexport) void Enable(unsigned char p);
virtual MxResult Create(MxAtomId &p_script, MxU32 p_frequencyMS);
void Stop(); void Stop();
private: private:
void Init(); void Init();
MxResult OpenMusic(MxAtomId &p_script);
void DestroyMusic();
MxBool m_musicEnabled; // 0x8 MxBool m_musicEnabled; // 0x8
MxDSAction m_action1; // 0xc MxDSAction m_action1; // 0xc
@ -42,7 +45,7 @@ class MxBackgroundAudioManager : public MxCore
MxS32 m_unk140; MxS32 m_unk140;
MxS32 m_unk144; MxS32 m_unk144;
MxS16 m_unk148; MxS16 m_unk148;
MxAtomId m_unk14c; MxAtomId m_script;
}; };
#endif // MXBACKGROUNDAUDIOMANAGER_H #endif // MXBACKGROUNDAUDIOMANAGER_H

View File

@ -68,9 +68,10 @@ MxResult MxOmni::Start(MxDSAction* p_dsAction)
} }
// OFFSET: LEGO1 0x100b00c0 STUB // OFFSET: LEGO1 0x100b00c0 STUB
void MxOmni::DeleteObject(MxDSAction &p_dsAction) MxResult MxOmni::DeleteObject(MxDSAction &p_dsAction)
{ {
// TODO // TODO
return FAILURE;
} }
// OFFSET: LEGO1 0x100b09a0 // OFFSET: LEGO1 0x100b09a0
@ -231,7 +232,7 @@ MxResult MxOmni::Create(MxOmniCreateParam &p)
} }
if (p.CreateFlags().CreateStreamer()) { if (p.CreateFlags().CreateStreamer()) {
if (!(m_streamer = new MxStreamer()) || m_streamer->Create() != SUCCESS) if (!(m_streamer = new MxStreamer()) || m_streamer->Create() != SUCCESS)
goto done; goto done;
} }
@ -404,9 +405,9 @@ MxEventManager* EventManager()
} }
// OFFSET: LEGO1 0x100acf70 // OFFSET: LEGO1 0x100acf70
void DeleteObject(MxDSAction &ds) MxResult DeleteObject(MxDSAction &p_dsAction)
{ {
MxOmni::GetInstance()->DeleteObject(ds); return MxOmni::GetInstance()->DeleteObject(p_dsAction);
} }
// Offset: LEGO1 0x100159e0 // Offset: LEGO1 0x100159e0

View File

@ -43,7 +43,7 @@ class MxOmni : public MxCore
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p); // vtable+18 virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p); // vtable+18
virtual void Destroy(); // vtable+1c virtual void Destroy(); // vtable+1c
virtual MxResult Start(MxDSAction* p_dsAction); // vtable+20 virtual MxResult Start(MxDSAction* p_dsAction); // vtable+20
virtual void DeleteObject(MxDSAction &p_dsAction); // vtable+24 virtual MxResult DeleteObject(MxDSAction &p_dsAction); // vtable+24
virtual MxBool DoesEntityExist(MxDSAction &p_dsAction); // vtable+28 virtual MxBool DoesEntityExist(MxDSAction &p_dsAction); // vtable+28
virtual void vtable0x2c(); // vtable+2c virtual void vtable0x2c(); // vtable+2c
virtual int vtable0x30(char*, int, MxCore*); // vtable+30 virtual int vtable0x30(char*, int, MxCore*); // vtable+30
@ -96,6 +96,7 @@ __declspec(dllexport) MxMusicManager * MusicManager();
__declspec(dllexport) MxEventManager * EventManager(); __declspec(dllexport) MxEventManager * EventManager();
__declspec(dllexport) MxNotificationManager * NotificationManager(); __declspec(dllexport) MxNotificationManager * NotificationManager();
MxResult DeleteObject(MxDSAction &p_dsAction);
MxVideoManager *MVideoManager(); MxVideoManager *MVideoManager();
MxAtomIdCounterSet *AtomIdCounterSet(); MxAtomIdCounterSet *AtomIdCounterSet();
MxObjectFactory *ObjectFactory(); MxObjectFactory *ObjectFactory();

View File

@ -58,11 +58,23 @@ MxResult MxSoundManager::Create(MxU32 p_frequencyMS, MxBool p_createThread)
// OFFSET: LEGO1 0x100aed10 STUB // OFFSET: LEGO1 0x100aed10 STUB
void MxSoundManager::vtable0x34() void MxSoundManager::vtable0x34()
{ {
// TODO STUB // TODO
} }
// OFFSET: LEGO1 0x100aee10 STUB // OFFSET: LEGO1 0x100aee10 STUB
void MxSoundManager::vtable0x38() void MxSoundManager::vtable0x38()
{ {
// TODO STUB // TODO
}
// OFFSET: LEGO1 0x100aeab0
void MxSoundManager::Destroy()
{
Destroy(FALSE);
}
// OFFSET: LEGO1 0x100aeac0 STUB
void MxSoundManager::SetVolume(MxS32 p_volume)
{
// TODO
} }

View File

@ -14,6 +14,8 @@ class MxSoundManager : public MxAudioManager
MxSoundManager(); MxSoundManager();
virtual ~MxSoundManager() override; // vtable+0x0 virtual ~MxSoundManager() override; // vtable+0x0
virtual void Destroy() override; // vtable+18
virtual void SetVolume(MxS32 p_volume) override; // vtable+2c
virtual MxResult Create(MxU32 p_frequencyMS, MxBool p_createThread); //vtable+0x30 virtual MxResult Create(MxU32 p_frequencyMS, MxBool p_createThread); //vtable+0x30
virtual void vtable0x34(); // vtable+0x34 virtual void vtable0x34(); // vtable+0x34
virtual void vtable0x38(); // vtable+0x38 virtual void vtable0x38(); // vtable+0x38