From dc585c7f613066afc05b4340a8bfe00ffccdee09 Mon Sep 17 00:00:00 2001 From: Joshua Peisach Date: Thu, 3 Aug 2023 14:42:12 -0400 Subject: [PATCH] MxBackgroundAudioManager (#97) * Start MxBackgroundAudioManager * Match MxBackgroundAudioManager constructor. This took WAY too much time. * add size assert * improve readability of MxBackgroundAudioManager::Enable While the previous iteration wasn't incorrect, it definitely reads like pseudocode (i.e. it's very unlikely any actual developers would have written that). This is much more readable/likely to have been written and still results in the same asm. --------- Co-authored-by: itsmattkc <34096995+itsmattkc@users.noreply.github.com> --- LEGO1/mxbackgroundaudiomanager.cpp | 32 ++++++++++++++++++++++++++++-- LEGO1/mxbackgroundaudiomanager.h | 17 ++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/LEGO1/mxbackgroundaudiomanager.cpp b/LEGO1/mxbackgroundaudiomanager.cpp index 6f001303..a24286ad 100644 --- a/LEGO1/mxbackgroundaudiomanager.cpp +++ b/LEGO1/mxbackgroundaudiomanager.cpp @@ -1,13 +1,29 @@ #include "mxbackgroundaudiomanager.h" +DECOMP_SIZE_ASSERT(MxBackgroundAudioManager, 0x150) + // OFFSET: LEGO1 0x1007ea90 MxBackgroundAudioManager::MxBackgroundAudioManager() { - // TODO + NotificationManager()->Register(this); + m_unka0 = 0; + m_unk138 = 0; + m_unk13c = 0; + m_unk140 = 0; + m_unk144 = 0; + m_unk148 = 0; + m_musicEnabled = FALSE; } // OFFSET: LEGO1 0x1007ec20 MxBackgroundAudioManager::~MxBackgroundAudioManager() +{ + // TODO + NotificationManager()->Unregister(this); +} + +// OFFSET: LEGO1 0x1007f470 +void MxBackgroundAudioManager::Stop() { // TODO } @@ -15,5 +31,17 @@ MxBackgroundAudioManager::~MxBackgroundAudioManager() // OFFSET: LEGO1 0x1007f5f0 void MxBackgroundAudioManager::Enable(MxBool p) { - // TODO + if (this->m_musicEnabled != p) { + this->m_musicEnabled = p; + if (!p) { + Stop(); + } + } +} + +// OFFSET: LEGO1 0x1007f650 +void MxBackgroundAudioManager::Init() +{ + this->m_unka0 = 0; + this->m_unk13c = 0; } diff --git a/LEGO1/mxbackgroundaudiomanager.h b/LEGO1/mxbackgroundaudiomanager.h index 9a23a671..c6f2f1e7 100644 --- a/LEGO1/mxbackgroundaudiomanager.h +++ b/LEGO1/mxbackgroundaudiomanager.h @@ -2,6 +2,9 @@ #define MXBACKGROUNDAUDIOMANAGER_H #include "mxcore.h" +#include "mxdsaction.h" +#include "mxtypes.h" +#include "mxnotificationmanager.h" // VTABLE 0x100d9fe8 // SIZE 0x150 @@ -25,6 +28,20 @@ class MxBackgroundAudioManager : public MxCore } __declspec(dllexport) void Enable(unsigned char p); +private: + void Stop(); + void Init(); + + MxBool m_musicEnabled; // 0x8 + MxDSAction m_action1; // 0xc + MxS32 m_unka0; + MxDSAction m_action2; // 0xa4 + MxS32 m_unk138; + MxS32 m_unk13c; + MxS32 m_unk140; + MxS32 m_unk144; + MxS16 m_unk148; + MxAtomId m_unk14c; }; #endif // MXBACKGROUNDAUDIOMANAGER_H