From b49280c1bb0197db0d9c3c374e5dcbd7b17958cc Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Tue, 12 Aug 2025 16:54:31 -0700 Subject: [PATCH 1/2] Fixes --- .../src/audio/mxbackgroundaudiomanager.cpp | 6 ++++++ extensions/src/siloader.cpp | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp b/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp index 2822e95a..a09ea779 100644 --- a/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp +++ b/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp @@ -120,6 +120,11 @@ void MxBackgroundAudioManager::FadeInPendingPresenter() if (m_activePresenter == NULL) { if (m_pendingPresenter) { + if (!m_pendingPresenter->IsEnabled()) { + m_pendingPresenter->Enable(TRUE); + m_pendingPresenter->SetTickleState(MxPresenter::e_streaming); + } + if (m_volumeSuppressionAmount != 0) { compare = 30; } @@ -221,6 +226,7 @@ void MxBackgroundAudioManager::StartAction(MxParam& p_param) m_action2.SetObjectId(m_pendingPresenter->GetAction()->GetObjectId()); m_targetVolume = ((MxDSSound*) (m_pendingPresenter->GetAction()))->GetVolume(); m_pendingPresenter->SetVolume(0); + m_pendingPresenter->GetAction()->SetFlags(m_pendingPresenter->GetAction()->GetFlags() & ~MxDSAction::c_enabled); } // FUNCTION: LEGO1 0x1007f200 diff --git a/extensions/src/siloader.cpp b/extensions/src/siloader.cpp index d175c6ae..f7c18130 100644 --- a/extensions/src/siloader.cpp +++ b/extensions/src/siloader.cpp @@ -57,6 +57,8 @@ std::optional SiLoader::HandleStart(MxDSAction& p_action) action.SetAtomId(key.second.first); action.SetObjectId(key.second.second); action.SetUnknown24(p_action.GetUnknown24()); + action.SetNotificationObject(p_action.GetNotificationObject()); + action.SetOrigin(p_action.GetOrigin()); Start(&action); } } @@ -67,6 +69,8 @@ std::optional SiLoader::HandleStart(MxDSAction& p_action) action.SetAtomId(key.second.first); action.SetObjectId(key.second.second); action.SetUnknown24(p_action.GetUnknown24()); + action.SetNotificationObject(p_action.GetNotificationObject()); + action.SetOrigin(p_action.GetOrigin()); return Start(&action); } } @@ -101,6 +105,8 @@ std::optional SiLoader::HandleDelete(MxDSAction& p_action) action.SetAtomId(key.second.first); action.SetObjectId(key.second.second); action.SetUnknown24(p_action.GetUnknown24()); + action.SetNotificationObject(p_action.GetNotificationObject()); + action.SetOrigin(p_action.GetOrigin()); DeleteObject(action); } } @@ -111,6 +117,8 @@ std::optional SiLoader::HandleDelete(MxDSAction& p_action) action.SetAtomId(key.second.first); action.SetObjectId(key.second.second); action.SetUnknown24(p_action.GetUnknown24()); + action.SetNotificationObject(p_action.GetNotificationObject()); + action.SetOrigin(p_action.GetOrigin()); DeleteObject(action); return TRUE; } @@ -147,6 +155,8 @@ bool SiLoader::LoadFile(const char* p_file) void SiLoader::ParseDirectives(const MxAtomId& p_atom, si::Core* p_core, MxAtomId p_parentReplacedAtom) { for (si::Core* child : p_core->GetChildren()) { + MxAtomId replacedAtom = p_parentReplacedAtom; + if (si::Object* object = dynamic_cast(child)) { if (object->type() != si::MxOb::Null) { std::string extra(object->extra_.data(), object->extra_.size()); @@ -185,13 +195,13 @@ void SiLoader::ParseDirectives(const MxAtomId& p_atom, si::Core* p_core, MxAtomI StreamObject{MxAtomId{atom, e_lowerCase2}, id}, StreamObject{p_atom, object->id_} ); - p_parentReplacedAtom = replace.back().first.first; + replacedAtom = replace.back().first.first; } } } } } - ParseDirectives(p_atom, child, p_parentReplacedAtom); + ParseDirectives(p_atom, child, replacedAtom); } } From 323497f915e3fb69cdd02b7b08fc714335929110 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Tue, 12 Aug 2025 20:10:38 -0700 Subject: [PATCH 2/2] Fixes --- LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp | 7 ++++++- extensions/src/siloader.cpp | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp b/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp index a09ea779..af7b904b 100644 --- a/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp +++ b/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp @@ -120,6 +120,10 @@ void MxBackgroundAudioManager::FadeInPendingPresenter() if (m_activePresenter == NULL) { if (m_pendingPresenter) { + if (m_pendingPresenter->GetCurrentTickleState() <= MxPresenter::e_starting) { + return; + } + if (!m_pendingPresenter->IsEnabled()) { m_pendingPresenter->Enable(TRUE); m_pendingPresenter->SetTickleState(MxPresenter::e_streaming); @@ -260,7 +264,8 @@ MxResult MxBackgroundAudioManager::PlayMusic( return SUCCESS; } - if (m_action2.GetObjectId() == -1 && m_action1.GetObjectId() != p_action.GetObjectId()) { + if (m_action2.GetObjectId() == -1 && + (m_action1.GetObjectId() != p_action.GetObjectId() || m_action1.GetAtomId() != p_action.GetAtomId())) { MxDSAction action; action.SetAtomId(GetCurrentAction().GetAtomId()); action.SetObjectId(GetCurrentAction().GetObjectId()); diff --git a/extensions/src/siloader.cpp b/extensions/src/siloader.cpp index f7c18130..f4be4a9d 100644 --- a/extensions/src/siloader.cpp +++ b/extensions/src/siloader.cpp @@ -71,7 +71,10 @@ std::optional SiLoader::HandleStart(MxDSAction& p_action) action.SetUnknown24(p_action.GetUnknown24()); action.SetNotificationObject(p_action.GetNotificationObject()); action.SetOrigin(p_action.GetOrigin()); - return Start(&action); + + MxResult result = Start(&action); + p_action.SetUnknown24(action.GetUnknown24()); + return result; } } @@ -119,7 +122,9 @@ std::optional SiLoader::HandleDelete(MxDSAction& p_action) action.SetUnknown24(p_action.GetUnknown24()); action.SetNotificationObject(p_action.GetNotificationObject()); action.SetOrigin(p_action.GetOrigin()); + DeleteObject(action); + p_action.SetUnknown24(action.GetUnknown24()); return TRUE; } }