From a28113a26fc559ebce01e360697fd4c6c8ccafc9 Mon Sep 17 00:00:00 2001
From: Christian Semmler <mail@csemmler.com>
Date: Fri, 2 Feb 2024 15:00:44 -0500
Subject: [PATCH] Fix/match MxBackgroundAudioManager::FUN_1007ef40 (#518)

* Fix

* Match
---
 .../include/mxbackgroundaudiomanager.h        | 20 +++++------
 .../src/audio/mxbackgroundaudiomanager.cpp    | 35 +++++++++++--------
 2 files changed, 30 insertions(+), 25 deletions(-)

diff --git a/LEGO1/lego/legoomni/include/mxbackgroundaudiomanager.h b/LEGO1/lego/legoomni/include/mxbackgroundaudiomanager.h
index 31fa01e5..3e7793f6 100644
--- a/LEGO1/lego/legoomni/include/mxbackgroundaudiomanager.h
+++ b/LEGO1/lego/legoomni/include/mxbackgroundaudiomanager.h
@@ -56,16 +56,16 @@ private:
 	MxResult OpenMusic(MxAtomId& p_script);
 	void DestroyMusic();
 
-	MxBool m_musicEnabled; // 0x08
-	MxDSAction m_action1;  // 0x0c
-	MxAudioPresenter* m_unk0xa0;
-	MxDSAction m_action2; // 0xa4
-	MxAudioPresenter* m_unk0x138;
-	MxS32 m_unk0x13c;
-	MxS32 m_unk0x140;
-	MxS32 m_targetVolume;
-	MxS16 m_unk0x148;
-	MxAtomId m_script;
+	MxBool m_musicEnabled;        // 0x08
+	MxDSAction m_action1;         // 0x0c
+	MxAudioPresenter* m_unk0xa0;  // 0xa0
+	MxDSAction m_action2;         // 0xa4
+	MxAudioPresenter* m_unk0x138; // 0x138
+	MxS32 m_unk0x13c;             // 0x13c
+	MxS32 m_unk0x140;             // 0x140
+	MxS32 m_targetVolume;         // 0x144
+	MxS16 m_unk0x148;             // 0x148
+	MxAtomId m_script;            // 0x14c
 };
 
 #endif // MXBACKGROUNDAUDIOMANAGER_H
diff --git a/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp b/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
index e51e2519..581d97c5 100644
--- a/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
+++ b/LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
@@ -80,16 +80,15 @@ MxResult MxBackgroundAudioManager::Tickle()
 	switch (m_unk0x13c) {
 	case MxPresenter::e_starting:
 		FadeInOrFadeOut();
-		return SUCCESS;
+		break;
 	case MxPresenter::e_streaming:
 		FUN_1007ee70();
-		return SUCCESS;
+		break;
 	case MxPresenter::e_repeating:
 		FUN_1007ef40();
-		return SUCCESS;
-	default:
-		return SUCCESS;
 	}
+
+	return SUCCESS;
 }
 
 // FUNCTION: LEGO1 0x1007ee70
@@ -112,19 +111,23 @@ void MxBackgroundAudioManager::FUN_1007ee70()
 // FUNCTION: LEGO1 0x1007ef40
 void MxBackgroundAudioManager::FUN_1007ef40()
 {
-	MxU32 compare;
-	MxU32 volume;
+	MxS32 compare, volume;
+
 	if (m_unk0xa0 == NULL) {
 		if (m_unk0x138) {
-			compare = 30;
-			if (m_unk0x148 == 0) {
-				compare = m_unk0x148;
+			if (m_unk0x148 != 0) {
+				compare = 30;
 			}
+			else {
+				compare = m_targetVolume;
+			}
+
 			volume = m_unk0x138->GetVolume();
 			if (volume < compare) {
 				if (m_unk0x140 + m_unk0x138->GetVolume() <= compare) {
-					compare = m_unk0x140 + compare;
+					compare = m_unk0x140 + m_unk0x138->GetVolume();
 				}
+
 				m_unk0x138->SetVolume(compare);
 			}
 			else {
@@ -143,12 +146,14 @@ void MxBackgroundAudioManager::FUN_1007ef40()
 			DeleteObject(*m_unk0xa0->GetAction());
 		}
 		else {
-			compare = m_unk0xa0->GetVolume();
-			volume = 0;
-			if (compare != m_unk0x140 && -1 < compare - m_unk0x140) {
+			if (m_unk0xa0->GetVolume() - m_unk0x140 > 0) {
 				volume = m_unk0xa0->GetVolume() - m_unk0x140;
 			}
-			m_unk0x138->SetVolume(volume);
+			else {
+				volume = 0;
+			}
+
+			m_unk0xa0->SetVolume(volume);
 		}
 	}
 }