diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index bc675e88..ded3a09b 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -4222,6 +4222,16 @@ void Game::deserializesettings(tinyxml2::XMLElement* dataNode, ScreenSettings* s graphics.showmousecursor = help.Int(pText); } + if (SDL_strcmp(pKey, "musicvolume") == 0) + { + music.user_music_volume = help.Int(pText); + } + + if (SDL_strcmp(pKey, "soundvolume") == 0) + { + music.user_sound_volume = help.Int(pText); + } + if (SDL_strcmp(pKey, "flipButton") == 0) { SDL_GameControllerButton newButton; @@ -4453,6 +4463,10 @@ void Game::serializesettings(tinyxml2::XMLElement* dataNode, const ScreenSetting xml::update_tag(dataNode, "vsync", (int) screen_settings->useVsync); + xml::update_tag(dataNode, "musicvolume", music.user_music_volume); + + xml::update_tag(dataNode, "soundvolume", music.user_sound_volume); + // Delete all controller buttons we had previously. // dataNode->FirstChildElement() shouldn't be NULL at this point... // we've already added a bunch of elements diff --git a/desktop_version/src/Music.cpp b/desktop_version/src/Music.cpp index e7e24ffd..fb116638 100644 --- a/desktop_version/src/Music.cpp +++ b/desktop_version/src/Music.cpp @@ -17,6 +17,9 @@ musicclass::musicclass(void) musicVolume = 0; FadeVolAmountPerFrame = 0; + user_music_volume = USER_VOLUME_MAX; + user_sound_volume = USER_VOLUME_MAX; + currentsong = 0; nicechange = -1; nicefade = false; diff --git a/desktop_version/src/Music.h b/desktop_version/src/Music.h index a03bcce1..7ba45ff2 100644 --- a/desktop_version/src/Music.h +++ b/desktop_version/src/Music.h @@ -8,6 +8,9 @@ #define musicroom(rx, ry) ((rx) + ((ry) * 20)) +/* The amount of "space" for the scale of the user-set volume. */ +#define USER_VOLUME_MAX 256 + class musicclass { public: @@ -52,6 +55,10 @@ public: int FadeVolAmountPerFrame; int musicVolume; + /* 0..USER_VOLUME_MAX */ + int user_music_volume; + int user_sound_volume; + bool quick_fade; // MMMMMM mod settings diff --git a/desktop_version/src/main.cpp b/desktop_version/src/main.cpp index 0c1e4e7a..f1048c5f 100644 --- a/desktop_version/src/main.cpp +++ b/desktop_version/src/main.cpp @@ -771,7 +771,7 @@ static enum LoopCode loop_end(void) } else { - Mix_Volume(-1,MIX_MAX_VOLUME); + Mix_Volume(-1,MIX_MAX_VOLUME * music.user_sound_volume / USER_VOLUME_MAX); if (game.musicmuted) { @@ -779,7 +779,7 @@ static enum LoopCode loop_end(void) } else { - Mix_VolumeMusic(music.musicVolume); + Mix_VolumeMusic(music.musicVolume * music.user_music_volume / USER_VOLUME_MAX); } }