diff --git a/Minecraft.Client/Common/Audio/SoundEngine.cpp b/Minecraft.Client/Common/Audio/SoundEngine.cpp index cf140c78..24c8d39f 100644 --- a/Minecraft.Client/Common/Audio/SoundEngine.cpp +++ b/Minecraft.Client/Common/Audio/SoundEngine.cpp @@ -115,19 +115,21 @@ const char *SoundEngine::m_szStreamFileA[eStream_Max]= "nuance1", "nuance2", -#ifndef _XBOX + // Creative "creative1", "creative2", "creative3", "creative4", "creative5", "creative6", + + // Menu "menu1", "menu2", "menu3", "menu4", -#endif + // Piano "piano1", "piano2", "piano3", @@ -141,7 +143,13 @@ const char *SoundEngine::m_szStreamFileA[eStream_Max]= // The End "the_end_dragon_alive", "the_end_end", - + + // Battle + "BattleMode1", + "BattleMode2", + "BattleMode3", + "BattleMode4", + // CDs "11", "13", @@ -191,23 +199,30 @@ void SoundEngine::init(Options* pOptions) return; } -void SoundEngine::SetStreamingSounds(int iOverworldMin, int iOverWorldMax, int iNetherMin, int iNetherMax, int iEndMin, int iEndMax, int iCD1) +void SoundEngine::SetStreamingSounds(int iOverworldMin, int iOverWorldMax, int iNetherMin, int iNetherMax, int iEndMin, int iEndMax, int iCreativeMin, int iCreativeMax, int iMenuMin, int iMenuMax, int iBattleMin, int iBattleMax, int iCD1) { - m_iStream_Overworld_Min=iOverworldMin; - m_iStream_Overworld_Max=iOverWorldMax; - m_iStream_Nether_Min=iNetherMin; - m_iStream_Nether_Max=iNetherMax; - m_iStream_End_Min=iEndMin; - m_iStream_End_Max=iEndMax; - m_iStream_CD_1=iCD1; + m_iStream_Overworld_Min = iOverworldMin; + m_iStream_Overworld_Max = iOverWorldMax; + m_iStream_Nether_Min = iNetherMin; + m_iStream_Nether_Max = iNetherMax; + m_iStream_End_Min = iEndMin; + m_iStream_End_Max = iEndMax; + m_iStream_Creative_Min = iCreativeMin; + m_iStream_Creative_Max = iCreativeMax; + m_iStream_Menu_Min = iMenuMin; + m_iStream_Menu_Max = iMenuMax; + m_iStream_Battle_Min = iBattleMin; + m_iStream_Battle_Max = iBattleMax; + m_iStream_CD_1 = iCD1; // array to monitor recently played tracks if(m_bHeardTrackA) { delete [] m_bHeardTrackA; } + m_bHeardTrackA = new bool[iEndMax+1]; - memset(m_bHeardTrackA,0,sizeof(bool)*iEndMax+1); + memset(m_bHeardTrackA, 0, sizeof(bool) * (iEndMax + 1)); } void SoundEngine::updateMiniAudio() @@ -243,14 +258,16 @@ void SoundEngine::updateMiniAudio() } else { + // splitscreen: listener at origin, sounds repositioned by distance down the z axis ma_engine_listener_set_position(&m_engine, 0, 0.0f, 0.0f, 0.0f); ma_engine_listener_set_direction(&m_engine, 0, 0.0f, 0.0f, 1.0f); ma_engine_listener_set_world_up(&m_engine, 0, 0.0f, 1.0f, 0.0f); } + // iterate over active sounds and clean up completed ones for (auto it = m_activeSounds.begin(); it != m_activeSounds.end(); ) { - MiniAudioSound* s = *it; + MiniAudioSound *s = *it; if (!ma_sound_is_playing(&s->sound)) { @@ -313,6 +330,22 @@ void SoundEngine::updateMiniAudio() } } +///////////////////////////////////////////// +// +// pickGameModeMusicID +// +///////////////////////////////////////////// +inline void SoundEngine::pickGameModeMusic(Minecraft* pMinecraft, unsigned int i) +{ + if (pMinecraft->localplayers[i] != NULL && pMinecraft->localplayers[i]->abilities.instabuild && pMinecraft->localplayers[i]->abilities.mayfly) + m_musicID = getMusicID(eMusicDomain_Creative); + // TODO(3UR): this is a part of minigames also in the future other minigame ids will need to be handled for now TU30 only checks for BATTLE + //else if (pMinecraft->GetCustomGameMode() && CustomGameModeInst::GetId() == EMiniGameId::BATTLE) // @3UR: thanks https://github.com/GRAnimated/MinecraftLCE/blob/6947670d152582457bfe02bd909ee30a7ab7eb55/src/Minecraft.World/net/minecraft/world/level/gamemode/minigames/EMiniGameId.h#L3 + // m_musicID = getMusicID(eMusicDomain_Battle); + else + m_musicID = getMusicID(eMusicDomain_Overworld); +} + ///////////////////////////////////////////// // // tick @@ -396,30 +429,33 @@ SoundEngine::SoundEngine() random = new Random(); memset(&m_engine, 0, sizeof(ma_engine)); memset(&m_engineConfig, 0, sizeof(ma_engine_config)); - m_musicStreamActive = false; - m_StreamState=eMusicStreamState_Idle; - m_iMusicDelay=0; - m_validListenerCount=0; + m_musicStreamActive = false; + m_StreamState = eMusicStreamState_Idle; + m_iMusicDelay = 0; + m_validListenerCount = 0; - m_bHeardTrackA=nullptr; + m_bHeardTrackA = nullptr; // Start the streaming music playing some music from the overworld - SetStreamingSounds(eStream_Overworld_Calm1,eStream_Overworld_piano3, - eStream_Nether1,eStream_Nether4, - eStream_end_dragon,eStream_end_end, + SetStreamingSounds(eStream_Overworld_Calm1, eStream_Overworld_piano3, + eStream_Nether1, eStream_Nether4, + eStream_end_dragon, eStream_end_end, + eStream_Overworld_Creative1, eStream_Overworld_Creative6, + eStream_Overworld_Menu1, eStream_Overworld_Menu4, + eStream_BattleMode1, eStream_BattleMode4, eStream_CD_1); - m_musicID=getMusicID(LevelData::DIMENSION_OVERWORLD); + m_musicID = getMusicID(eMusicDomain_Menu); - m_StreamingAudioInfo.bIs3D=false; - m_StreamingAudioInfo.x=0; - m_StreamingAudioInfo.y=0; - m_StreamingAudioInfo.z=0; - m_StreamingAudioInfo.volume=1; - m_StreamingAudioInfo.pitch=1; + m_StreamingAudioInfo.bIs3D = false; + m_StreamingAudioInfo.x = 0; + m_StreamingAudioInfo.y = 0; + m_StreamingAudioInfo.z = 0; + m_StreamingAudioInfo.volume = 1; + m_StreamingAudioInfo.pitch = 1; - memset(CurrentSoundsPlaying,0,sizeof(int)*(eSoundType_MAX+eSFX_MAX)); - memset(m_ListenerA,0,sizeof(AUDIO_LISTENER)*XUSER_MAX_COUNT); + memset(CurrentSoundsPlaying, 0, sizeof(int) * (eSoundType_MAX + eSFX_MAX)); + memset(m_ListenerA, 0, sizeof(AUDIO_LISTENER) * XUSER_MAX_COUNT); #ifdef __ORBIS__ m_hBGMAudio=GetAudioBGMHandle(); @@ -669,71 +705,72 @@ void SoundEngine::playStreaming(const wstring& name, float x, float y , float z, // Level audio will be played when a play with an empty name comes in // CD audio will be played when a named stream comes in - m_StreamingAudioInfo.x=x; - m_StreamingAudioInfo.y=y; - m_StreamingAudioInfo.z=z; - m_StreamingAudioInfo.volume=volume; - m_StreamingAudioInfo.pitch=pitch; + m_StreamingAudioInfo.x = x; + m_StreamingAudioInfo.y = y; + m_StreamingAudioInfo.z = z; + m_StreamingAudioInfo.volume = volume; + m_StreamingAudioInfo.pitch = pitch; - if(m_StreamState==eMusicStreamState_Playing) + if(m_StreamState == eMusicStreamState_Playing) { - m_StreamState=eMusicStreamState_Stop; + m_StreamState = eMusicStreamState_Stop; } - else if(m_StreamState==eMusicStreamState_Opening) + else if(m_StreamState == eMusicStreamState_Opening) { - m_StreamState=eMusicStreamState_OpeningCancel; + m_StreamState = eMusicStreamState_OpeningCancel; } if(name.empty()) { // music, or stop CD - m_StreamingAudioInfo.bIs3D=false; + m_StreamingAudioInfo.bIs3D = false; // we need a music id // random delay of up to 3 minutes for music m_iMusicDelay = random->nextInt(20 * 60 * 3);//random->nextInt(20 * 60 * 10) + 20 * 60 * 10; #ifdef _DEBUG - m_iMusicDelay=0; + m_iMusicDelay = 0; #endif - Minecraft *pMinecraft=Minecraft::GetInstance(); + Minecraft *pMinecraft = Minecraft::GetInstance(); - bool playerInEnd=false; - bool playerInNether=false; + bool playerInEnd = false; + bool playerInNether = false; - for(unsigned int i=0;ilocalplayers[i]!=nullptr) + if(pMinecraft->localplayers[i] != nullptr) { if(pMinecraft->localplayers[i]->dimension==LevelData::DIMENSION_END) { - playerInEnd=true; + playerInEnd = true; } else if(pMinecraft->localplayers[i]->dimension==LevelData::DIMENSION_NETHER) { - playerInNether=true; + playerInNether = true; } } } if(playerInEnd) { - m_musicID = getMusicID(LevelData::DIMENSION_END); + m_musicID = getMusicID(eMusicDomain_End); } else if(playerInNether) { - m_musicID = getMusicID(LevelData::DIMENSION_NETHER); + m_musicID = getMusicID(eMusicDomain_Nether); } else { - m_musicID = getMusicID(LevelData::DIMENSION_OVERWORLD); + pickGameModeMusic(pMinecraft, i); } } else { // jukebox - m_StreamingAudioInfo.bIs3D=true; - m_musicID=getMusicID(name); - m_iMusicDelay=0; + m_StreamingAudioInfo.bIs3D = true; + m_musicID = getMusicID(name); + m_iMusicDelay = 0; } } @@ -1282,91 +1319,92 @@ void SoundEngine::playMusicUpdate() } if(GetIsPlayingStreamingGameMusic()) { - //if(m_MusicInfo.pCue!=nullptr) + bool playerInEnd = false; + bool playerInNether = false; + Minecraft *pMinecraft = Minecraft::GetInstance(); + + unsigned int i = 0; + for(i = 0; i < MAX_LOCAL_PLAYERS; ++i) { - bool playerInEnd = false; - bool playerInNether=false; - Minecraft *pMinecraft = Minecraft::GetInstance(); - for(unsigned int i = 0; i < MAX_LOCAL_PLAYERS; ++i) + if(pMinecraft->localplayers[i]!=nullptr) { - if(pMinecraft->localplayers[i]!=nullptr) + if(pMinecraft->localplayers[i]->dimension==LevelData::DIMENSION_END) { - if(pMinecraft->localplayers[i]->dimension==LevelData::DIMENSION_END) - { - playerInEnd=true; - } - else if(pMinecraft->localplayers[i]->dimension==LevelData::DIMENSION_NETHER) - { - playerInNether=true; - } + playerInEnd=true; + } + else if(pMinecraft->localplayers[i]->dimension==LevelData::DIMENSION_NETHER) + { + playerInNether=true; } } + } - if(playerInEnd && !GetIsPlayingEndMusic()) + if(playerInEnd && !GetIsPlayingEndMusic()) + { + m_StreamState=eMusicStreamState_Stop; + + // Set the end track + m_musicID = getMusicID(eMusicDomain_End); + SetIsPlayingEndMusic(true); + SetIsPlayingNetherMusic(false); + } + else if(!playerInEnd && GetIsPlayingEndMusic()) + { + if(playerInNether) { m_StreamState=eMusicStreamState_Stop; // Set the end track - m_musicID = getMusicID(LevelData::DIMENSION_END); - SetIsPlayingEndMusic(true); + m_musicID = getMusicID(eMusicDomain_Nether); + SetIsPlayingEndMusic(false); + SetIsPlayingNetherMusic(true); + } + else + { + m_StreamState=eMusicStreamState_Stop; // + + // Set the end track + m_musicID = getMusicID(eMusicDomain_Overworld); + SetIsPlayingEndMusic(false); SetIsPlayingNetherMusic(false); } - else if(!playerInEnd && GetIsPlayingEndMusic()) - { - if(playerInNether) - { - m_StreamState=eMusicStreamState_Stop; - - // Set the end track - m_musicID = getMusicID(LevelData::DIMENSION_NETHER); - SetIsPlayingEndMusic(false); - SetIsPlayingNetherMusic(true); - } - else - { - m_StreamState=eMusicStreamState_Stop; - - // Set the end track - m_musicID = getMusicID(LevelData::DIMENSION_OVERWORLD); - SetIsPlayingEndMusic(false); - SetIsPlayingNetherMusic(false); - } - } - else if (playerInNether && !GetIsPlayingNetherMusic()) + } + else if (playerInNether && !GetIsPlayingNetherMusic()) + { + m_StreamState=eMusicStreamState_Stop; + // set the Nether track + m_musicID = getMusicID(eMusicDomain_Nether); + SetIsPlayingNetherMusic(true); + SetIsPlayingEndMusic(false); + } + else if(!playerInNether && GetIsPlayingNetherMusic()) + { + if(playerInEnd) { m_StreamState=eMusicStreamState_Stop; // set the Nether track - m_musicID = getMusicID(LevelData::DIMENSION_NETHER); - SetIsPlayingNetherMusic(true); + m_musicID = getMusicID(eMusicDomain_End); + SetIsPlayingNetherMusic(false); + SetIsPlayingEndMusic(true); + } + else + { + m_StreamState=eMusicStreamState_Stop; // + // set the Nether track + m_musicID = getMusicID(eMusicDomain_Overworld); + SetIsPlayingNetherMusic(false); SetIsPlayingEndMusic(false); } - else if(!playerInNether && GetIsPlayingNetherMusic()) - { - if(playerInEnd) - { - m_StreamState=eMusicStreamState_Stop; - // set the Nether track - m_musicID = getMusicID(LevelData::DIMENSION_END); - SetIsPlayingNetherMusic(false); - SetIsPlayingEndMusic(true); - } - else - { - m_StreamState=eMusicStreamState_Stop; - // set the Nether track - m_musicID = getMusicID(LevelData::DIMENSION_OVERWORLD); - SetIsPlayingNetherMusic(false); - SetIsPlayingEndMusic(false); - } - } + } + else if(!playerInEnd && !playerInNether) + pickGameModeMusic(pMinecraft, i); - // volume change required? - if (m_musicStreamActive) - { - float finalVolume = m_StreamingAudioInfo.volume * fMusicVol; + // volume change required? + if (m_musicStreamActive) + { + float finalVolume = m_StreamingAudioInfo.volume * fMusicVol; - ma_sound_set_volume(&m_musicStream, finalVolume); - } + ma_sound_set_volume(&m_musicStream, finalVolume); } } else @@ -1434,19 +1472,20 @@ void SoundEngine::playMusicUpdate() } if(playerInEnd) { - m_musicID = getMusicID(LevelData::DIMENSION_END); + m_musicID = getMusicID(eMusicDomain_End); SetIsPlayingEndMusic(true); SetIsPlayingNetherMusic(false); } else if(playerInNether) { - m_musicID = getMusicID(LevelData::DIMENSION_NETHER); + m_musicID = getMusicID(eMusicDomain_Nether); SetIsPlayingNetherMusic(true); SetIsPlayingEndMusic(false); } else { - m_musicID = getMusicID(LevelData::DIMENSION_OVERWORLD); + pickGameModeMusic(pMinecraft, i); + SetIsPlayingNetherMusic(false); SetIsPlayingEndMusic(false); } diff --git a/Minecraft.Client/Common/Audio/SoundEngine.h b/Minecraft.Client/Common/Audio/SoundEngine.h index 38d70d41..8c0304f7 100644 --- a/Minecraft.Client/Common/Audio/SoundEngine.h +++ b/Minecraft.Client/Common/Audio/SoundEngine.h @@ -23,19 +23,19 @@ enum eMUSICFILES eStream_Overworld_hal4, eStream_Overworld_nuance1, eStream_Overworld_nuance2, -#ifndef _XBOX - // Add the new music tracks + // Creative eStream_Overworld_Creative1, eStream_Overworld_Creative2, eStream_Overworld_Creative3, eStream_Overworld_Creative4, eStream_Overworld_Creative5, eStream_Overworld_Creative6, + // Menu eStream_Overworld_Menu1, eStream_Overworld_Menu2, eStream_Overworld_Menu3, eStream_Overworld_Menu4, -#endif + // Piano eStream_Overworld_piano1, eStream_Overworld_piano2, eStream_Overworld_piano3, // <-- make piano3 the last overworld one @@ -47,6 +47,11 @@ enum eMUSICFILES // The End eStream_end_dragon, eStream_end_end, + // Battle + eStream_BattleMode1, + eStream_BattleMode2, + eStream_BattleMode3, + eStream_BattleMode4, eStream_CD_1, eStream_CD_2, eStream_CD_3, @@ -69,6 +74,21 @@ enum eMUSICTYPE eMusicType_CD, }; +// @3UR: this may not even be a enum this is indeed guess work and i dont give a fuck +// why? because previously it used LevelData::DIMENSION_XXX enum which clearly they would NOT of added all this other crap to +// and it just doesnt match up in IDA as LevelData::DIMENSION_END is 1 but now we see getMusicId(v5, 4); not 1 +// which means they probably made a entirely new enum +// +// also for what ever reason there was never a case for 3 so we skip over that maybe that is a hint that they added onto a existing enum idfk +enum eMUSICDOMAIN +{ + eMusicDomain_Nether = 0, + eMusicDomain_Overworld = 1, + eMusicDomain_Menu = 2, + eMusicDomain_End = 4, + eMusicDomain_Creative = 5, + eMusicDomain_Battle = 6, +}; enum MUSIC_STREAMSTATE { @@ -134,7 +154,7 @@ public: bool isStreamingWavebankReady(); // 4J Added int getMusicID(int iDomain); int getMusicID(const wstring& name); - void SetStreamingSounds(int iOverworldMin, int iOverWorldMax, int iNetherMin, int iNetherMax, int iEndMin, int iEndMax, int iCD1); + void SetStreamingSounds(int iOverworldMin, int iOverWorldMax, int iNetherMin, int iNetherMax, int iEndMin, int iEndMax, int iCreativeMin, int iCreativeMax, int iMenuMin, int iMenuMax, int iBattleMin, int iBattleMax, int iCD1); void updateMiniAudio(); void playMusicUpdate(); @@ -150,6 +170,8 @@ private: int GetRandomishTrack(int iStart,int iEnd); + inline void pickGameModeMusic(Minecraft* pMinecraft, unsigned int i); + ma_engine m_engine; ma_engine_config m_engineConfig; ma_sound m_musicStream; @@ -180,10 +202,13 @@ private: char m_szStreamName[255]; int CurrentSoundsPlaying[eSoundType_MAX+eSFX_MAX]; - // streaming music files - will be different for mash-up packs + // streaming music range tracking int m_iStream_Overworld_Min,m_iStream_Overworld_Max; int m_iStream_Nether_Min,m_iStream_Nether_Max; int m_iStream_End_Min,m_iStream_End_Max; + int m_iStream_Creative_Min,m_iStream_Creative_Max; + int m_iStream_Menu_Min,m_iStream_Menu_Max; + int m_iStream_Battle_Min,m_iStream_Battle_Max; int m_iStream_CD_1; bool *m_bHeardTrackA; diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index 0a2fd159..62ed019a 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -3778,6 +3778,9 @@ void CMinecraftApp::HandleXuiActions(void) pMinecraft->soundEngine->SetStreamingSounds(eStream_Overworld_Calm1,eStream_Overworld_piano3, eStream_Nether1,eStream_Nether4, eStream_end_dragon,eStream_end_end, + eStream_Overworld_Creative1,eStream_Overworld_Creative6, + eStream_Overworld_Menu1,eStream_Overworld_Menu4, + eStream_BattleMode1,eStream_BattleMode4, eStream_CD_1); #endif pMinecraft->soundEngine->playStreaming(L"", 0, 0, 0, 1, 1); diff --git a/Minecraft.Client/Common/DLC/DLCAudioFile.cpp b/Minecraft.Client/Common/DLC/DLCAudioFile.cpp index ee0cb7a7..a61aba28 100644 --- a/Minecraft.Client/Common/DLC/DLCAudioFile.cpp +++ b/Minecraft.Client/Common/DLC/DLCAudioFile.cpp @@ -26,10 +26,12 @@ PBYTE DLCAudioFile::getData(DWORD &dwBytes) return m_pbData; } +// @3UR: thanks https://github.com/LCERD/PCK-Studio/blob/500fc74395ce99fe20cbd7598999bfab3b606745/PckStudio.Core/IO/PckAudio/PckAudioFileWriter.cs#L15 const WCHAR *DLCAudioFile::wchTypeNamesA[]= { L"CUENAME", L"CREDIT", + L"CREDITID", }; DLCAudioFile::EAudioParameterType DLCAudioFile::getParameterType(const wstring ¶mName) @@ -76,7 +78,7 @@ void DLCAudioFile::addParameter(EAudioType type, EAudioParameterType ptype, cons case XC_LANGUAGE_JAPANESE: case XC_LANGUAGE_TCHINESE: case XC_LANGUAGE_KOREAN: - maximumChars = 35; + maximumChars = 55; // @3UR: this is 55 in TU30 break; } wstring creditValue = value; @@ -88,24 +90,6 @@ void DLCAudioFile::addParameter(EAudioType type, EAudioParameterType ptype, cons i++; } size_t iLast=creditValue.find_last_of(L" ", i); - switch(XGetLanguage()) - { - case XC_LANGUAGE_JAPANESE: - case XC_LANGUAGE_TCHINESE: - case XC_LANGUAGE_KOREAN: - iLast = maximumChars; - break; - default: - iLast=creditValue.find_last_of(L" ", i); - break; - } - - // if a space was found, include the space on this line - if(iLast!=i) - { - iLast++; - } - app.AddCreditText((creditValue.substr(0, iLast)).c_str()); creditValue = creditValue.substr(iLast); } @@ -117,6 +101,9 @@ void DLCAudioFile::addParameter(EAudioType type, EAudioParameterType ptype, cons m_parameters[type].push_back(value); //m_parameters[(int)type] = value; break; + // @3UR: in IDA for TU30 this is literally just empty... + case e_AudioParamType_CreditId: + break; } } diff --git a/Minecraft.Client/Common/DLC/DLCAudioFile.h b/Minecraft.Client/Common/DLC/DLCAudioFile.h index 50131785..c8cb6cd5 100644 --- a/Minecraft.Client/Common/DLC/DLCAudioFile.h +++ b/Minecraft.Client/Common/DLC/DLCAudioFile.h @@ -16,6 +16,14 @@ public: e_AudioType_Nether, e_AudioType_End, + // @3UR: thanks https://github.com/LCERD/PCK-Studio/blob/500fc74395ce99fe20cbd7598999bfab3b606745/PckStudio.Core/FileFormats/PckAudioFile.cs#L25 + e_AudioType_Creative, + e_AudioType_Menu, + e_AudioType_Battle, + e_AudioType_Tumble, + e_AudioType_Glide, + e_AudioType_BuildOff, + e_AudioType_Max, }; enum EAudioParameterType @@ -24,6 +32,7 @@ public: e_AudioParamType_Cuename = 0, e_AudioParamType_Credit, + e_AudioParamType_CreditId, e_AudioParamType_Max, diff --git a/Minecraft.Client/Common/UI/UIController.cpp b/Minecraft.Client/Common/UI/UIController.cpp index b12ea5e7..c1f1bac5 100644 --- a/Minecraft.Client/Common/UI/UIController.cpp +++ b/Minecraft.Client/Common/UI/UIController.cpp @@ -2067,6 +2067,9 @@ void UIController::NavigateToHomeMenu() pMinecraft->soundEngine->SetStreamingSounds(eStream_Overworld_Calm1,eStream_Overworld_piano3, eStream_Nether1,eStream_Nether4, eStream_end_dragon,eStream_end_end, + eStream_Overworld_Creative1,eStream_Overworld_Creative6, + eStream_Overworld_Menu1,eStream_Overworld_Menu4, + eStream_BattleMode1,eStream_BattleMode4, eStream_CD_1); pMinecraft->soundEngine->playStreaming(L"", 0, 0, 0, 1, 1); diff --git a/Minecraft.Client/DLCTexturePack.cpp b/Minecraft.Client/DLCTexturePack.cpp index f1304a9e..c6457511 100644 --- a/Minecraft.Client/DLCTexturePack.cpp +++ b/Minecraft.Client/DLCTexturePack.cpp @@ -473,18 +473,63 @@ int DLCTexturePack::packMounted(LPVOID pParam,int iPad,DWORD dwErr,DWORD dwLicen DLCAudioFile *dlcFile = static_cast(pack->getFile(DLCManager::e_DLCType_Audio, 0)); texturePack->setHasAudio(true); // init the streaming sound ids for this texture pack - int iOverworldStart, iNetherStart, iEndStart; - int iOverworldC, iNetherC, iEndC; + int iOverworldC=dlcFile->GetCountofType(DLCAudioFile::e_AudioType_Overworld); + int iNetherC=dlcFile->GetCountofType(DLCAudioFile::e_AudioType_Nether); + int iEndStart=iOverworldC+iNetherC; + int iEndC=dlcFile->GetCountofType(DLCAudioFile::e_AudioType_End); + int iAfterEnd=iOverworldC+iNetherC+iEndC; + int iCreativeC=dlcFile->GetCountofType(DLCAudioFile::e_AudioType_Creative); - iOverworldStart=0; - iOverworldC=dlcFile->GetCountofType(DLCAudioFile::e_AudioType_Overworld); - iNetherStart=iOverworldC; - iNetherC=dlcFile->GetCountofType(DLCAudioFile::e_AudioType_Nether); - iEndStart=iOverworldC+iNetherC; - iEndC=dlcFile->GetCountofType(DLCAudioFile::e_AudioType_End); + int iCreativeStart, iCreativeRange; + if(iCreativeC) + { + iCreativeStart=iAfterEnd; + iCreativeRange=iCreativeC; + iAfterEnd+=iCreativeC; + } + else + { + iCreativeStart=0; + iCreativeRange=iOverworldC; + } - Minecraft::GetInstance()->soundEngine->SetStreamingSounds(iOverworldStart,iOverworldStart+iOverworldC-1, - iNetherStart,iNetherStart+iNetherC-1,iEndStart,iEndStart+iEndC-1,iEndStart+iEndC); // push the CD start to after + int iMenuC=dlcFile->GetCountofType(DLCAudioFile::e_AudioType_Menu); + int iMenuStart, iMenuRange; + if(iMenuC) + { + iMenuStart=iAfterEnd; + iMenuRange=iMenuC; + iAfterEnd+=iMenuC; + } + else + { + iMenuStart=0; + iMenuRange=iOverworldC; + } + + int iBattleC=dlcFile->GetCountofType(DLCAudioFile::e_AudioType_Battle); + if(iBattleC) + { + Minecraft::GetInstance()->soundEngine->SetStreamingSounds( + 0,iOverworldC-1, + iOverworldC,iOverworldC+iNetherC-1, + iEndStart,iEndStart+iEndC-1, + iCreativeStart,iCreativeStart+iCreativeRange-1, + iMenuStart,iMenuStart+iMenuRange-1, + iAfterEnd,iAfterEnd+iBattleC-1, + iAfterEnd+iBattleC); + } + else + { + Minecraft::GetInstance()->soundEngine->SetStreamingSounds( + 0,iOverworldC-1, + iOverworldC,iOverworldC+iNetherC-1, + iEndStart,iEndStart+iEndC-1, + iCreativeStart,iCreativeStart+iCreativeRange-1, + iMenuStart,iMenuStart+iMenuRange-1, + 0,iOverworldC-1, + iAfterEnd); + } } #endif }