From a2abbdefde53127c95980fc8d0e300cf778a0446 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 23 Dec 2023 13:38:15 -0800 Subject: [PATCH] Master volume: alter both music/sound volume without changing balance --- src/s_sound.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/s_sound.c b/src/s_sound.c index f765669d2..c201f4cc5 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -2524,9 +2524,24 @@ void GameDigiMusic_OnChange(void) void MasterVolume_OnChange(void); void MasterVolume_OnChange(void) { - INT32 vol = cv_mastervolume.value; - CV_SetValue(&cv_digmusicvolume, vol); - CV_SetValue(&cv_soundvolume, vol); + INT32 adj = cv_mastervolume.value - max(cv_digmusicvolume.value, cv_soundvolume.value); + + if (adj < 0) + { + INT32 under = min(cv_digmusicvolume.value, cv_soundvolume.value) + adj; + + if (under < 0) + { + // Ensure balance between music/sound volume does + // not change at lower bound. (This is already + // guaranteed at upper bound.) + adj -= under; + CV_StealthSetValue(&cv_mastervolume, cv_mastervolume.value - under); + } + } + + CV_SetValue(&cv_digmusicvolume, cv_digmusicvolume.value + adj); + CV_SetValue(&cv_soundvolume, cv_soundvolume.value + adj); } void DigMusicVolume_OnChange(void);