From 69009916ef920d19859543ed8bb62aee9205ad5e Mon Sep 17 00:00:00 2001 From: Fireblade <3+fireblade@noreply.neolegacy.dev> Date: Sun, 2 Aug 2026 19:08:14 -0400 Subject: [PATCH] fix: dlc world music fading out to main menu --- BUMP | 2 +- Minecraft.Client/Common/Audio/SoundEngine.cpp | 41 +++++++++++++++++-- Minecraft.Client/Common/Audio/SoundEngine.h | 2 + Minecraft.Client/Minecraft.cpp | 5 ++- .../Windows64Media/loc/stringsGeneric.xml | 3 ++ 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/BUMP b/BUMP index 910abdcc..3e153f5b 100644 --- a/BUMP +++ b/BUMP @@ -1 +1 @@ -1.1.0b +1.1.1b diff --git a/Minecraft.Client/Common/Audio/SoundEngine.cpp b/Minecraft.Client/Common/Audio/SoundEngine.cpp index 694c78bd..031d3906 100644 --- a/Minecraft.Client/Common/Audio/SoundEngine.cpp +++ b/Minecraft.Client/Common/Audio/SoundEngine.cpp @@ -472,6 +472,8 @@ SoundEngine::SoundEngine() m_musicFadeLastUpdateTime = std::chrono::steady_clock::now(); m_bCurrentStreamIsCustom = false; m_bCurrentStreamIsMenuMusic = true; + m_bPendingCustomMusicFade = false; + m_bPendingMenuMusicStart = false; memset(CurrentSoundsPlaying,0,sizeof(int)*(eSoundType_MAX+eSFX_MAX)); memset(m_ListenerA,0,sizeof(AUDIO_LISTENER)*XUSER_MAX_COUNT); @@ -854,10 +856,35 @@ void SoundEngine::playStreaming(const wstring& name, float x, float y, float z, return; } - bool bNextCustom = isCustomMusicRequest(name); - bool bCurrentCustom = m_musicStreamActive && m_bCurrentStreamIsCustom; + if (name.empty() && m_bPendingMenuMusicStart && + (m_StreamState == eMusicStreamState_Playing || m_StreamState == eMusicStreamState_Fading)) + { + return; + } - if(m_StreamState == eMusicStreamState_Playing) + const bool bNextCustom = isCustomMusicRequest(name); + const bool bCurrentCustom = m_musicStreamActive && m_bCurrentStreamIsCustom; + const bool bTransitioningFromCustomMusic = name.empty() && m_musicStreamActive && bCurrentCustom && !m_bCurrentStreamIsMenuMusic; + const bool bTransitioningFromNonMenuMusic = name.empty() && m_musicStreamActive && !m_bCurrentStreamIsMenuMusic; + + if (bTransitioningFromNonMenuMusic && (m_StreamState == eMusicStreamState_Playing || m_StreamState == eMusicStreamState_Fading)) + { + m_bPendingMenuMusicStart = true; + m_bCurrentStreamIsMenuMusic = false; + if (bTransitioningFromCustomMusic) + { + m_bPendingCustomMusicFade = true; + } + if (m_StreamState == eMusicStreamState_Playing) + { + m_StreamState = eMusicStreamState_Fading; + m_musicFadeSecondsRemaining = MUSIC_FADE_DURATION_SECONDS; + m_musicFadeLastUpdateTime = std::chrono::steady_clock::now(); + } + return; + } + + if (m_StreamState == eMusicStreamState_Playing) { if (bCurrentCustom != bNextCustom) { @@ -1534,7 +1561,15 @@ void SoundEngine::playMusicUpdate() SetIsPlayingStreamingCDMusic(false); SetIsPlayingStreamingGameMusic(false); + if (m_bPendingMenuMusicStart) + { + m_musicID = getMusicID(eMusicType_Menu); + m_bCurrentStreamIsMenuMusic = true; + m_iMusicDelay = 0; + m_bPendingMenuMusicStart = false; + } m_StreamState = eMusicStreamState_Idle; + m_bPendingCustomMusicFade = false; break; case eMusicStreamState_Stopping: break; diff --git a/Minecraft.Client/Common/Audio/SoundEngine.h b/Minecraft.Client/Common/Audio/SoundEngine.h index 3d5be955..10bf745a 100644 --- a/Minecraft.Client/Common/Audio/SoundEngine.h +++ b/Minecraft.Client/Common/Audio/SoundEngine.h @@ -175,6 +175,8 @@ private: std::chrono::steady_clock::time_point m_musicFadeLastUpdateTime; bool m_bCurrentStreamIsCustom; bool m_bCurrentStreamIsMenuMusic; + bool m_bPendingCustomMusicFade; + bool m_bPendingMenuMusicStart; ma_engine m_engine; ma_engine_config m_engineConfig; diff --git a/Minecraft.Client/Minecraft.cpp b/Minecraft.Client/Minecraft.cpp index 11cb68d9..cf5d7010 100644 --- a/Minecraft.Client/Minecraft.cpp +++ b/Minecraft.Client/Minecraft.cpp @@ -4571,7 +4571,10 @@ void Minecraft::setLevel(MultiPlayerLevel *level, int message /*=-1*/, shared_pt if (hasCustomMusic || !isMenuMusic) { - soundEngine->stopStreamingNow(); + if (level != nullptr) + { + soundEngine->stopStreamingNow(); + } soundEngine->playStreaming(L"", 0, 0, 0, 1, 1); } } diff --git a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml index 5a06756e..aa3b928f 100644 --- a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml +++ b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml @@ -9538,6 +9538,9 @@ All Ender Chests in a world are linked. Items placed into an Ender Chest are acc Plant on Farmland. Restores 3{*ICON_SHANK_01*}. + Awarded all achievements + All achievements have been awarded. + Taking Inventory Open your inventory.