diff --git a/Data/Sys/GameFiles/GALE01/GameSetup.dat b/Data/Sys/GameFiles/GALE01/GameSetup.dat index 2f6672becd..e693e82538 100644 Binary files a/Data/Sys/GameFiles/GALE01/GameSetup.dat and b/Data/Sys/GameFiles/GALE01/GameSetup.dat differ diff --git a/Data/Sys/GameSettings/GALE01r2.ini b/Data/Sys/GameSettings/GALE01r2.ini index 582eefce17..d377db37bc 100644 --- a/Data/Sys/GameSettings/GALE01r2.ini +++ b/Data/Sys/GameSettings/GALE01r2.ini @@ -1021,6 +1021,11 @@ C208D698 00000005 #Recording/GetLCancelStatus/GetLCancelStatus.asm C206C324 00000002 #Recording/GetLCancelStatus/ResetLCancelStatus.asm 38600000 987E25FF 807E00B0 00000000 +C21A4CB4 00000004 #Common/AllocBuffer.asm +38600080 3D808037 +618CF1E4 7D8903A6 +4E800421 906DAFC4 +38000000 00000000 C20055F8 0000000F #Common/GetIsFollower.asm 7C0802A6 90010004 9421FF20 BE8100B0 @@ -2040,11 +2045,6 @@ BA8100B0 800100E4 800100E4 382100E0 7C0803A6 2C1E0000 60000000 00000000 -C21A4CB4 00000004 #Online/Core/EXIFileLoad/AllocBuffer.asm -38600080 3D808037 -618CF1E4 7D8903A6 -4E800421 906DAFC4 -38000000 00000000 C20163FC 0000001B #Online/Core/EXIFileLoad/GetFileSize.asm 7C7E1B78 7C0802A6 90010004 9421FF20 @@ -2194,6 +2194,63 @@ C2019608 0000000F #Online/Core/Hacks/PreventPadAlarmDuringRollback.asm 618C9618 7D8903A6 4E800420 38600000 60000000 00000000 +C238E910 0000001A #Online/Core/Music/StartSong.asm +7C0802A6 90010004 +9421FF54 BE81007C +7C7E1B78 3D808034 +618C7364 7D8903A6 +4E800421 7C7D1B78 +7FC3F378 38810008 +3D808033 618C7C60 +7D8903A6 4E800421 +2C030000 41820044 +3BE10048 3BFF001F +57FF0034 386000D6 +987F0000 80610038 +907F0001 8061003C +907F0005 7FE3FB78 +38800009 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +38610008 3D808033 +618C7CD4 7D8903A6 +4E800421 7FA3EB78 +3D808034 618C738C +7D8903A6 4E800421 +7FC3F378 BA81007C +800100B0 382100AC +7C0803A6 800DA998 +60000000 00000000 +C20236EC 0000000B #Online/Core/Music/Stop.asm +7C0802A6 90010004 +9421FF9C BE810034 +3BE10008 3BFF001F +57FF0034 386000D7 +987F0000 7FE3FB78 +38800001 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +38000000 00000000 +C20249F0 00000011 #Online/Core/Music/VolumeChange.asm +4800000C 4E800021 +00000000 900D81E8 +7C0802A6 90010004 +9421FF9C BE810034 +4BFFFFE5 7FC802A6 +808D81E8 807E0000 +7C032000 4182003C +909E0000 3BE10008 +3BFF001F 57FF0034 +386000D8 987F0000 +989F0001 7FE3FB78 +38800002 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +60000000 00000000 C21D4578 00000003 #Online/Core/PreventFileAlarms/FreezeStadium.asm FFE00890 3D80801D 618C4FD8 7D8903A6 diff --git a/Data/Sys/GameSettings/GALJ01r2.ini b/Data/Sys/GameSettings/GALJ01r2.ini index d42febc601..7cfef3f365 100644 --- a/Data/Sys/GameSettings/GALJ01r2.ini +++ b/Data/Sys/GameSettings/GALJ01r2.ini @@ -1020,6 +1020,11 @@ C208D698 00000005 #Recording/GetLCancelStatus/GetLCancelStatus.asm C206C324 00000002 #Recording/GetLCancelStatus/ResetLCancelStatus.asm 38600000 987E25FF 807E00B0 00000000 +C21A4CB4 00000004 #Common/AllocBuffer.asm +38600080 3D808037 +618CF1E4 7D8903A6 +4E800421 906DAFC4 +38000000 00000000 C20055F8 0000000F #Common/GetIsFollower.asm 7C0802A6 90010004 9421FF20 BE8100B0 @@ -2039,11 +2044,6 @@ BA8100B0 800100E4 800100E4 382100E0 7C0803A6 2C1E0000 60000000 00000000 -C21A4CB4 00000004 #Online/Core/EXIFileLoad/AllocBuffer.asm -38600080 3D808037 -618CF1E4 7D8903A6 -4E800421 906DAFC4 -38000000 00000000 C20163FC 0000001B #Online/Core/EXIFileLoad/GetFileSize.asm 7C7E1B78 7C0802A6 90010004 9421FF20 @@ -2193,6 +2193,63 @@ C2019608 0000000F #Online/Core/Hacks/PreventPadAlarmDuringRollback.asm 618C9618 7D8903A6 4E800420 38600000 60000000 00000000 +C238E910 0000001A #Online/Core/Music/StartSong.asm +7C0802A6 90010004 +9421FF54 BE81007C +7C7E1B78 3D808034 +618C7364 7D8903A6 +4E800421 7C7D1B78 +7FC3F378 38810008 +3D808033 618C7C60 +7D8903A6 4E800421 +2C030000 41820044 +3BE10048 3BFF001F +57FF0034 386000D6 +987F0000 80610038 +907F0001 8061003C +907F0005 7FE3FB78 +38800009 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +38610008 3D808033 +618C7CD4 7D8903A6 +4E800421 7FA3EB78 +3D808034 618C738C +7D8903A6 4E800421 +7FC3F378 BA81007C +800100B0 382100AC +7C0803A6 800DA998 +60000000 00000000 +C20236EC 0000000B #Online/Core/Music/Stop.asm +7C0802A6 90010004 +9421FF9C BE810034 +3BE10008 3BFF001F +57FF0034 386000D7 +987F0000 7FE3FB78 +38800001 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +38000000 00000000 +C20249F0 00000011 #Online/Core/Music/VolumeChange.asm +4800000C 4E800021 +00000000 900D81E8 +7C0802A6 90010004 +9421FF9C BE810034 +4BFFFFE5 7FC802A6 +808D81E8 807E0000 +7C032000 4182003C +909E0000 3BE10008 +3BFF001F 57FF0034 +386000D8 987F0000 +989F0001 7FE3FB78 +38800002 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +60000000 00000000 C21D4578 00000003 #Online/Core/PreventFileAlarms/FreezeStadium.asm FFE00890 3D80801D 618C4FD8 7D8903A6 diff --git a/Data/Sys/GameSettings/Netplay/GALE01r2.ini b/Data/Sys/GameSettings/Netplay/GALE01r2.ini index 582eefce17..d377db37bc 100644 --- a/Data/Sys/GameSettings/Netplay/GALE01r2.ini +++ b/Data/Sys/GameSettings/Netplay/GALE01r2.ini @@ -1021,6 +1021,11 @@ C208D698 00000005 #Recording/GetLCancelStatus/GetLCancelStatus.asm C206C324 00000002 #Recording/GetLCancelStatus/ResetLCancelStatus.asm 38600000 987E25FF 807E00B0 00000000 +C21A4CB4 00000004 #Common/AllocBuffer.asm +38600080 3D808037 +618CF1E4 7D8903A6 +4E800421 906DAFC4 +38000000 00000000 C20055F8 0000000F #Common/GetIsFollower.asm 7C0802A6 90010004 9421FF20 BE8100B0 @@ -2040,11 +2045,6 @@ BA8100B0 800100E4 800100E4 382100E0 7C0803A6 2C1E0000 60000000 00000000 -C21A4CB4 00000004 #Online/Core/EXIFileLoad/AllocBuffer.asm -38600080 3D808037 -618CF1E4 7D8903A6 -4E800421 906DAFC4 -38000000 00000000 C20163FC 0000001B #Online/Core/EXIFileLoad/GetFileSize.asm 7C7E1B78 7C0802A6 90010004 9421FF20 @@ -2194,6 +2194,63 @@ C2019608 0000000F #Online/Core/Hacks/PreventPadAlarmDuringRollback.asm 618C9618 7D8903A6 4E800420 38600000 60000000 00000000 +C238E910 0000001A #Online/Core/Music/StartSong.asm +7C0802A6 90010004 +9421FF54 BE81007C +7C7E1B78 3D808034 +618C7364 7D8903A6 +4E800421 7C7D1B78 +7FC3F378 38810008 +3D808033 618C7C60 +7D8903A6 4E800421 +2C030000 41820044 +3BE10048 3BFF001F +57FF0034 386000D6 +987F0000 80610038 +907F0001 8061003C +907F0005 7FE3FB78 +38800009 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +38610008 3D808033 +618C7CD4 7D8903A6 +4E800421 7FA3EB78 +3D808034 618C738C +7D8903A6 4E800421 +7FC3F378 BA81007C +800100B0 382100AC +7C0803A6 800DA998 +60000000 00000000 +C20236EC 0000000B #Online/Core/Music/Stop.asm +7C0802A6 90010004 +9421FF9C BE810034 +3BE10008 3BFF001F +57FF0034 386000D7 +987F0000 7FE3FB78 +38800001 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +38000000 00000000 +C20249F0 00000011 #Online/Core/Music/VolumeChange.asm +4800000C 4E800021 +00000000 900D81E8 +7C0802A6 90010004 +9421FF9C BE810034 +4BFFFFE5 7FC802A6 +808D81E8 807E0000 +7C032000 4182003C +909E0000 3BE10008 +3BFF001F 57FF0034 +386000D8 987F0000 +989F0001 7FE3FB78 +38800002 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +60000000 00000000 C21D4578 00000003 #Online/Core/PreventFileAlarms/FreezeStadium.asm FFE00890 3D80801D 618C4FD8 7D8903A6 diff --git a/Data/Sys/GameSettings/Netplay/GALJ01r2.ini b/Data/Sys/GameSettings/Netplay/GALJ01r2.ini index d42febc601..7cfef3f365 100644 --- a/Data/Sys/GameSettings/Netplay/GALJ01r2.ini +++ b/Data/Sys/GameSettings/Netplay/GALJ01r2.ini @@ -1020,6 +1020,11 @@ C208D698 00000005 #Recording/GetLCancelStatus/GetLCancelStatus.asm C206C324 00000002 #Recording/GetLCancelStatus/ResetLCancelStatus.asm 38600000 987E25FF 807E00B0 00000000 +C21A4CB4 00000004 #Common/AllocBuffer.asm +38600080 3D808037 +618CF1E4 7D8903A6 +4E800421 906DAFC4 +38000000 00000000 C20055F8 0000000F #Common/GetIsFollower.asm 7C0802A6 90010004 9421FF20 BE8100B0 @@ -2039,11 +2044,6 @@ BA8100B0 800100E4 800100E4 382100E0 7C0803A6 2C1E0000 60000000 00000000 -C21A4CB4 00000004 #Online/Core/EXIFileLoad/AllocBuffer.asm -38600080 3D808037 -618CF1E4 7D8903A6 -4E800421 906DAFC4 -38000000 00000000 C20163FC 0000001B #Online/Core/EXIFileLoad/GetFileSize.asm 7C7E1B78 7C0802A6 90010004 9421FF20 @@ -2193,6 +2193,63 @@ C2019608 0000000F #Online/Core/Hacks/PreventPadAlarmDuringRollback.asm 618C9618 7D8903A6 4E800420 38600000 60000000 00000000 +C238E910 0000001A #Online/Core/Music/StartSong.asm +7C0802A6 90010004 +9421FF54 BE81007C +7C7E1B78 3D808034 +618C7364 7D8903A6 +4E800421 7C7D1B78 +7FC3F378 38810008 +3D808033 618C7C60 +7D8903A6 4E800421 +2C030000 41820044 +3BE10048 3BFF001F +57FF0034 386000D6 +987F0000 80610038 +907F0001 8061003C +907F0005 7FE3FB78 +38800009 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +38610008 3D808033 +618C7CD4 7D8903A6 +4E800421 7FA3EB78 +3D808034 618C738C +7D8903A6 4E800421 +7FC3F378 BA81007C +800100B0 382100AC +7C0803A6 800DA998 +60000000 00000000 +C20236EC 0000000B #Online/Core/Music/Stop.asm +7C0802A6 90010004 +9421FF9C BE810034 +3BE10008 3BFF001F +57FF0034 386000D7 +987F0000 7FE3FB78 +38800001 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +38000000 00000000 +C20249F0 00000011 #Online/Core/Music/VolumeChange.asm +4800000C 4E800021 +00000000 900D81E8 +7C0802A6 90010004 +9421FF9C BE810034 +4BFFFFE5 7FC802A6 +808D81E8 807E0000 +7C032000 4182003C +909E0000 3BE10008 +3BFF001F 57FF0034 +386000D8 987F0000 +989F0001 7FE3FB78 +38800002 38A00001 +3D808000 618C55F0 +7D8903A6 4E800421 +BA810034 80010068 +38210064 7C0803A6 +60000000 00000000 C21D4578 00000003 #Online/Core/PreventFileAlarms/FreezeStadium.asm FFE00890 3D80801D 618C4FD8 7D8903A6 diff --git a/Externals/SlippiRustExtensions b/Externals/SlippiRustExtensions index 76b7c3a540..e100ac1fa8 160000 --- a/Externals/SlippiRustExtensions +++ b/Externals/SlippiRustExtensions @@ -1 +1 @@ -Subproject commit 76b7c3a54020593dc5393cfdb35baf42c55bffab +Subproject commit e100ac1fa833c5cb2ff2b770ed301fb5cb298be0 diff --git a/Source/Core/AudioCommon/AudioCommon.cpp b/Source/Core/AudioCommon/AudioCommon.cpp index 40fb114aa1..ba317d2828 100644 --- a/Source/Core/AudioCommon/AudioCommon.cpp +++ b/Source/Core/AudioCommon/AudioCommon.cpp @@ -21,12 +21,6 @@ #include "Core/ConfigManager.h" #include "Core/System.h" -// SlippiChange: Added as a hook for the Jukebox to call. -int AudioCommonGetCurrentVolume() -{ - return Config::Get(Config::MAIN_AUDIO_MUTED) ? 0 : Config::Get(Config::MAIN_AUDIO_VOLUME); -} - namespace AudioCommon { constexpr int AUDIO_VOLUME_MIN = 0; diff --git a/Source/Core/AudioCommon/AudioCommon.h b/Source/Core/AudioCommon/AudioCommon.h index 876bf43e22..f883f32f85 100644 --- a/Source/Core/AudioCommon/AudioCommon.h +++ b/Source/Core/AudioCommon/AudioCommon.h @@ -18,17 +18,6 @@ namespace Core class System; } - -// SlippiChange: Added as a hook for the Jukebox to call. -// -// I've intentionally kept this outside of the C++ namespace as I am unsure of the risks -// of having this inside there with regards to how Rust receives it. -// -// If someone can prove that it's safe, then feel free to move it back into the namespace -// proper. For now, I've just prefixed the method name with the namespace name -// for grep-ability. -int AudioCommonGetCurrentVolume(); - namespace AudioCommon { void InitSoundStream(Core::System& system); diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp b/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp index 1a0dc61f7c..54c9005d2a 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp +++ b/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp @@ -41,6 +41,7 @@ #include "VideoCommon/OnScreenDisplay.h" // The Rust library that houses a "shadow" EXI Device that we can call into. +#include "EXI_DeviceSlippi.h" #include "SlippiRustExtensions.h" #define FRAME_INTERVAL 900 @@ -135,12 +136,6 @@ void OSDMessageHandler(const char* message, u32 color, u32 duration_ms) OSD::AddMessage(msg, duration_ms, color); } -// This function gets passed to Jukebox for handling music volume changes -int GetJukeboxVolume() -{ - return Config::Get(Config::SLIPPI_JUKEBOX_VOLUME); -} - CEXISlippi::CEXISlippi(Core::System& system, const std::string current_file_name) : IEXIDevice(system) { @@ -3240,6 +3235,21 @@ void CEXISlippi::DMAWrite(u32 _uAddr, u32 _uSize) case CMD_GET_PLAYER_SETTINGS: handleGetPlayerSettings(); break; + case CMD_PLAY_MUSIC: + { + auto args = SlippiExiTypes::Convert(&memPtr[bufLoc]); + slprs_jukebox_start_song(slprs_exi_device_ptr, args.offset, args.size); + break; + } + case CMD_STOP_MUSIC: + slprs_jukebox_stop_music(slprs_exi_device_ptr); + break; + case CMD_CHANGE_MUSIC_VOLUME: + { + auto args = SlippiExiTypes::Convert(&memPtr[bufLoc]); + slprs_jukebox_set_melee_music_volume(slprs_exi_device_ptr, args.volume); + break; + } default: writeToFileAsync(&memPtr[bufLoc], payloadLen + 1, ""); SlippiSpectateServer::getInstance().write(&memPtr[bufLoc], payloadLen + 1); @@ -3291,14 +3301,27 @@ void CEXISlippi::ConfigureJukebox() } #endif - auto& system = Core::System::GetInstance(); + int dolphin_system_volume = + Config::Get(Config::MAIN_AUDIO_MUTED) ? 0 : Config::Get(Config::MAIN_AUDIO_VOLUME); - slprs_exi_device_configure_jukebox( - slprs_exi_device_ptr, Config::Get(Config::SLIPPI_ENABLE_JUKEBOX), system.GetMemory().GetRAM(), - AudioCommonGetCurrentVolume, GetJukeboxVolume); + int dolphin_music_volume = Config::Get(Config::SLIPPI_JUKEBOX_VOLUME); + + slprs_exi_device_configure_jukebox(slprs_exi_device_ptr, + Config::Get(Config::SLIPPI_ENABLE_JUKEBOX), + dolphin_system_volume, dolphin_music_volume); #endif } +void CEXISlippi::UpdateJukeboxDolphinSystemVolume(int volume) +{ + slprs_jukebox_set_dolphin_system_volume(slprs_exi_device_ptr, volume); +} + +void CEXISlippi::UpdateJukeboxDolphinMusicVolume(int volume) +{ + slprs_jukebox_set_dolphin_music_volume(slprs_exi_device_ptr, volume); +} + bool CEXISlippi::IsPresent() const { return true; diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.h b/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.h index 2083eacd39..5d0a0cb96e 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.h +++ b/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.h @@ -38,6 +38,8 @@ public: void DMARead(u32 addr, u32 size) override; void ConfigureJukebox(); + void UpdateJukeboxDolphinSystemVolume(int volume); + void UpdateJukeboxDolphinMusicVolume(int volume); bool IsPresent() const override; @@ -91,6 +93,9 @@ private: CMD_GCT_LENGTH = 0xD3, CMD_GCT_LOAD = 0xD4, CMD_GET_DELAY = 0xD5, + CMD_PLAY_MUSIC = 0xD6, + CMD_STOP_MUSIC = 0xD7, + CMD_CHANGE_MUSIC_VOLUME = 0xD8, CMD_PREMADE_TEXT_LENGTH = 0xE1, CMD_PREMADE_TEXT_LOAD = 0xE2, }; @@ -149,6 +154,10 @@ private: {CMD_GCT_LENGTH, 0x0}, {CMD_GCT_LOAD, 0x4}, {CMD_GET_DELAY, 0x0}, + {CMD_PLAY_MUSIC, static_cast(sizeof(SlippiExiTypes::PlayMusicQuery) - 1)}, + {CMD_STOP_MUSIC, 0x0}, + {CMD_CHANGE_MUSIC_VOLUME, + static_cast(sizeof(SlippiExiTypes::ChangeMusicVolumeQuery) - 1)}, {CMD_PREMADE_TEXT_LENGTH, 0x2}, {CMD_PREMADE_TEXT_LOAD, 0x2}, }; diff --git a/Source/Core/Core/Slippi/SlippiExiTypes.h b/Source/Core/Core/Slippi/SlippiExiTypes.h index bcae0e6f13..beaaab2a7c 100644 --- a/Source/Core/Core/Slippi/SlippiExiTypes.h +++ b/Source/Core/Core/Slippi/SlippiExiTypes.h @@ -89,6 +89,19 @@ struct GetPlayerSettingsResponse PlayerSettings settings[4]; }; +struct PlayMusicQuery +{ + u8 command; + u32 offset; + u32 size; +}; + +struct ChangeMusicVolumeQuery +{ + u8 command; + u8 volume; +}; + // Not sure if resetting is strictly needed, might be contained to the file #pragma pack() @@ -125,4 +138,13 @@ inline OverwriteSelectionsQuery Convert(u8* payload) q.stage_id = Common::FromBigEndian(q.stage_id); return q; } + +template <> +inline PlayMusicQuery Convert(u8* payload) +{ + auto q = *reinterpret_cast(payload); + q.offset = Common::FromBigEndian(q.offset); + q.size = Common::FromBigEndian(q.size); + return q; +} }; // namespace SlippiExiTypes diff --git a/Source/Core/DolphinQt/Settings/AudioPane.cpp b/Source/Core/DolphinQt/Settings/AudioPane.cpp index 8855c50d40..c49a64deea 100644 --- a/Source/Core/DolphinQt/Settings/AudioPane.cpp +++ b/Source/Core/DolphinQt/Settings/AudioPane.cpp @@ -28,6 +28,11 @@ #include "DolphinQt/Config/SettingsWindow.h" #include "DolphinQt/Settings.h" +#ifndef IS_PLAYBACK +#include "Core/HW/EXI/EXI.h" +#include "Core/HW/EXI/EXI_DeviceSlippi.h" +#endif + AudioPane::AudioPane() { CheckNeedForLatencyControl(); @@ -406,6 +411,19 @@ void AudioPane::OnVolumeChanged(int volume) { m_volume_slider->setValue(volume); m_volume_indicator->setText(tr("%1%").arg(volume)); + +#ifndef IS_PLAYBACK + if (Core::GetState() == Core::State::Running) + { + auto& system = Core::System::GetInstance(); + auto& exi_manager = system.GetExpansionInterface(); + ExpansionInterface::CEXISlippi* slippi_exi = static_cast( + exi_manager.GetDevice(ExpansionInterface::Slot::B)); + + if (slippi_exi != nullptr) + slippi_exi->UpdateJukeboxDolphinSystemVolume(volume); + } +#endif } void AudioPane::CheckNeedForLatencyControl() diff --git a/Source/Core/DolphinQt/Settings/GameCubePane.cpp b/Source/Core/DolphinQt/Settings/GameCubePane.cpp index 34ee3697c5..b0301320f4 100644 --- a/Source/Core/DolphinQt/Settings/GameCubePane.cpp +++ b/Source/Core/DolphinQt/Settings/GameCubePane.cpp @@ -102,6 +102,8 @@ void GameCubePane::CreateWidgets() m_slot_buttons[slot]->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); } + m_slot_combos[ExpansionInterface::Slot::B]->setDisabled(true); + for (ExpansionInterface::Slot slot : ExpansionInterface::MEMCARD_SLOTS) { m_memcard_path_layouts[slot] = new QHBoxLayout(); diff --git a/Source/Core/DolphinQt/Settings/SlippiPane.cpp b/Source/Core/DolphinQt/Settings/SlippiPane.cpp index 357d4e03cc..470d5cc215 100644 --- a/Source/Core/DolphinQt/Settings/SlippiPane.cpp +++ b/Source/Core/DolphinQt/Settings/SlippiPane.cpp @@ -9,12 +9,12 @@ #include "Core/Config/MainSettings.h" #include "Core/ConfigManager.h" #include "Core/Core.h" -#include "Core/HW/EXI/EXI.h" #include "Core/System.h" #include "DolphinQt/QtUtils/NonDefaultQPushButton.h" #ifndef IS_PLAYBACK +#include "Core/HW/EXI/EXI.h" #include "Core/HW/EXI/EXI_DeviceSlippi.h" #include "SlippiPane.h" #endif @@ -161,7 +161,7 @@ void SlippiPane::CreateLayout() m_music_volume_percent->setFixedWidth(40); sfx_music_slider_layout->addWidget(music_volume_label, 1, 0); - sfx_music_slider_layout->addWidget(m_music_volume_slider, 1, 1); + sfx_music_slider_layout->addWidget(m_music_volume_slider, 1, 1, Qt::AlignVCenter); sfx_music_slider_layout->addWidget(m_music_volume_percent, 1, 2); jukebox_settings_layout->addLayout(sfx_music_slider_layout); @@ -190,6 +190,7 @@ void SlippiPane::CreateLayout() void SlippiPane::LoadConfig() { +#ifndef IS_PLAYBACK // Replay Settings auto save_replays = Config::Get(Config::SLIPPI_SAVE_REPLAYS); m_save_replays->setChecked(save_replays); @@ -219,10 +220,14 @@ void SlippiPane::LoadConfig() m_music_volume_percent->setText(tr(" %1%").arg(jukebox_volume)); m_music_volume_slider->setDisabled(!enable_jukebox); +#else + // HOOKUP PLAYBACK STUFF +#endif } void SlippiPane::ConnectLayout() { +#ifndef IS_PLAYBACK // Replay Settings connect(m_save_replays, &QCheckBox::toggled, this, &SlippiPane::SetSaveReplays); connect(m_monthly_replay_folders, &QCheckBox::toggled, this, @@ -244,6 +249,9 @@ void SlippiPane::ConnectLayout() connect(m_enable_jukebox, &QCheckBox::toggled, this, &SlippiPane::ToggleJukebox); connect(m_music_volume_slider, qOverload(&QSlider::valueChanged), this, &SlippiPane::OnMusicVolumeUpdate); +#else + // HOOKUP PLAYBACK STUFF +#endif } void SlippiPane::SetSaveReplays(bool checked) @@ -293,6 +301,16 @@ void SlippiPane::OnMusicVolumeUpdate(int volume) { Config::SetBase(Config::SLIPPI_JUKEBOX_VOLUME, volume); m_music_volume_percent->setText(tr(" %1%").arg(volume)); + if (Core::GetState() == Core::State::Running) + { + auto& system = Core::System::GetInstance(); + auto& exi_manager = system.GetExpansionInterface(); + ExpansionInterface::CEXISlippi* slippi_exi = static_cast( + exi_manager.GetDevice(ExpansionInterface::Slot::B)); + + if (slippi_exi != nullptr) + slippi_exi->UpdateJukeboxDolphinMusicVolume(volume); + } } void SlippiPane::OnSaveConfig()