From 27874e1dc6862e87018fc32b8da28eef5b50f3cc Mon Sep 17 00:00:00 2001 From: Misa Date: Sun, 11 Apr 2021 17:41:46 -0700 Subject: [PATCH] Add music and sound volume config options This adds and tags to unlock.vvv and settings.vvv, so users' volume preferences will be persistent across game sessions. This does not add the user interface to change them from in-game; the next commit will do that. --- desktop_version/src/Game.cpp | 14 ++++++++++++++ desktop_version/src/Music.cpp | 3 +++ desktop_version/src/Music.h | 7 +++++++ desktop_version/src/main.cpp | 4 ++-- 4 files changed, 26 insertions(+), 2 deletions(-) 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); } }