From 2d3780ca2b5775a856fc2466d156edfe68482087 Mon Sep 17 00:00:00 2001 From: Mario Okrogelnik Date: Tue, 28 Oct 2025 21:49:48 +0100 Subject: [PATCH 1/8] Fix build Seems to be there is a declaration missing to build the project successfully. --- libs/s25main/notifications/NotificationManager.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/s25main/notifications/NotificationManager.h b/libs/s25main/notifications/NotificationManager.h index 3097dd42b2..ef85ba2a1a 100644 --- a/libs/s25main/notifications/NotificationManager.h +++ b/libs/s25main/notifications/NotificationManager.h @@ -7,6 +7,7 @@ #include "notifications/Subscription.h" #include #include +#include #include class NotificationManager From 8f04384a14a2277c3601623f1d36928eb6561bf4 Mon Sep 17 00:00:00 2001 From: Mario Okrogelnik Date: Mon, 3 Nov 2025 18:49:54 +0100 Subject: [PATCH 2/8] Add option to enable/disable bird sounds --- libs/s25main/SoundManager.cpp | 2 +- .../s25main/ingameWindows/iwOptionsWindow.cpp | 32 ++++++++++++++----- libs/s25main/ingameWindows/iwOptionsWindow.h | 1 + 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/libs/s25main/SoundManager.cpp b/libs/s25main/SoundManager.cpp index 011a79624f..c9262591c3 100644 --- a/libs/s25main/SoundManager.cpp +++ b/libs/s25main/SoundManager.cpp @@ -96,7 +96,7 @@ void SoundManager::playAnimalSound(unsigned soundLstId) void SoundManager::playBirdSounds(const unsigned treeCount) { - if(!SETTINGS.sound.effectsEnabled) + if(!SETTINGS.sound.effectsEnabled || !SETTINGS.sound.birdsEnabled) return; using namespace std::chrono; diff --git a/libs/s25main/ingameWindows/iwOptionsWindow.cpp b/libs/s25main/ingameWindows/iwOptionsWindow.cpp index a5bf028dd4..83ced66569 100644 --- a/libs/s25main/ingameWindows/iwOptionsWindow.cpp +++ b/libs/s25main/ingameWindows/iwOptionsWindow.cpp @@ -41,12 +41,13 @@ enum ID_btMusicPlayer, ID_btAdvanced, ID_btSurrender, - ID_btEndGame + ID_btEndGame, + ID_cpBirdSounds }; } iwOptionsWindow::iwOptionsWindow(SoundManager& soundManager) - : IngameWindow(CGI_OPTIONSWINDOW, IngameWindow::posLastOrCenter, Extent(300, 515), _("Game menu"), + : IngameWindow(CGI_OPTIONSWINDOW, IngameWindow::posLastOrCenter, Extent(300, 545), _("Game menu"), LOADER.GetImageN("resource", 41)), soundManager(soundManager) { @@ -84,22 +85,25 @@ iwOptionsWindow::iwOptionsWindow(SoundManager& soundManager) LOADER.GetImageN("io", 114 + !SETTINGS.sound.effectsEnabled)); //-V807 // Musik an/aus - AddImageButton(ID_btMusic, DrawPoint(35, 340), Extent(35, 35), TextureColor::Green2, + AddImageButton(ID_btMusic, DrawPoint(35, 371), Extent(35, 35), TextureColor::Green2, LOADER.GetImageN("io", 116 + !SETTINGS.sound.musicEnabled)); // Geräuschlautstärke AddProgress(ID_pgEffectVol, DrawPoint(100, 306), Extent(160, 22), TextureColor::Green2, 139, 138, 100) ->SetPosition((SETTINGS.sound.effectsVolume * 100) / 255); + // Vogelgeräusche an/aus + AddCheckBox(ID_cpBirdSounds, DrawPoint(100, 342), Extent(160, 22), TextureColor::Green2, _("Bird sounds"), NormalFont, false); + // Musiklautstärke - AddProgress(ID_pgMusicVol, DrawPoint(100, 346), Extent(160, 22), TextureColor::Green2, 139, 138, 100) + AddProgress(ID_pgMusicVol, DrawPoint(100, 377), Extent(160, 22), TextureColor::Green2, 139, 138, 100) ->SetPosition((SETTINGS.sound.musicVolume * 100) / 255); - AddTextButton(ID_btMusicPlayer, DrawPoint(100, 380), Extent(160, 22), TextureColor::Green2, _("Music player"), + AddTextButton(ID_btMusicPlayer, DrawPoint(100, 413), Extent(160, 22), TextureColor::Green2, _("Music player"), NormalFont); - AddTextButton(ID_btAdvanced, DrawPoint(67, 412), Extent(168, 24), TextureColor::Green2, _("Advanced"), NormalFont); - AddTextButton(ID_btSurrender, DrawPoint(67, 443), Extent(168, 24), TextureColor::Red1, _("Surrender"), NormalFont); - AddTextButton(ID_btEndGame, DrawPoint(67, 474), Extent(168, 24), TextureColor::Red1, _("End game"), NormalFont); + AddTextButton(ID_btAdvanced, DrawPoint(67, 442), Extent(168, 24), TextureColor::Green2, _("Advanced"), NormalFont); + AddTextButton(ID_btSurrender, DrawPoint(67, 473), Extent(168, 24), TextureColor::Red1, _("Surrender"), NormalFont); + AddTextButton(ID_btEndGame, DrawPoint(67, 504), Extent(168, 24), TextureColor::Red1, _("End game"), NormalFont); } void iwOptionsWindow::Msg_ButtonClick(const unsigned ctrl_id) @@ -160,3 +164,15 @@ void iwOptionsWindow::Msg_ProgressChange(const unsigned ctrl_id, const unsigned break; } } + +void iwOptionsWindow::Msg_CheckboxChange(const unsigned ctrl_id, const bool checked) +{ + switch(ctrl_id) + { + case ID_cpBirdSounds: + { + SETTINGS.sound.birdsEnabled = checked; + break; + } + } +} diff --git a/libs/s25main/ingameWindows/iwOptionsWindow.h b/libs/s25main/ingameWindows/iwOptionsWindow.h index 50f9a87369..f0c4b7f0f2 100644 --- a/libs/s25main/ingameWindows/iwOptionsWindow.h +++ b/libs/s25main/ingameWindows/iwOptionsWindow.h @@ -18,4 +18,5 @@ class iwOptionsWindow : public IngameWindow private: void Msg_ButtonClick(unsigned ctrl_id) override; void Msg_ProgressChange(unsigned ctrl_id, unsigned short position) override; + void Msg_CheckboxChange(unsigned ctrl_id, bool checked) override; }; From 736bca36bc77839271efe6b6e9d88b4db2416c8c Mon Sep 17 00:00:00 2001 From: Mario Okrogelnik Date: Thu, 30 Oct 2025 22:14:11 +0100 Subject: [PATCH 3/8] Add the bird switch to the main settings menu Additionally switch the effects and music option to groups the elements together. --- libs/s25main/desktops/dskOptions.cpp | 34 ++++++++++++++++++---------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/libs/s25main/desktops/dskOptions.cpp b/libs/s25main/desktops/dskOptions.cpp index aafc3417b4..f3b9a2279a 100644 --- a/libs/s25main/desktops/dskOptions.cpp +++ b/libs/s25main/desktops/dskOptions.cpp @@ -99,6 +99,8 @@ enum ID_txtCommonPortrait, ID_btCommonPortrait, ID_cbCommonPortrait, + ID_txtBirdSounds, + ID_grpBirdSounds, }; // Use these as IDs in dedicated groups constexpr auto ID_btOn = 1; @@ -359,16 +361,6 @@ dskOptions::dskOptions() : Desktop(LOADER.GetImageN("setup013", 0)) constexpr Offset volOffset(400, -5); constexpr Extent ctrlSizeSmall(90, ctrlSize.y); - groupSound->AddText(ID_txtMusic, curPos, _("Music"), COLOR_YELLOW, FontStyle{}, NormalFont); - mainGroup = groupSound->AddOptionGroup(ID_grpMusic, GroupSelectType::Check); - mainGroup->AddTextButton(ID_btOn, curPos + bt1Offset, ctrlSizeSmall, TextureColor::Grey, _("On"), NormalFont); - mainGroup->AddTextButton(ID_btOff, curPos + bt2Offset, ctrlSizeSmall, TextureColor::Grey, _("Off"), NormalFont); - - ctrlProgress* Mvolume = - groupSound->AddProgress(ID_pgMusicVol, curPos + volOffset, ctrlSize, TextureColor::Grey, 139, 138, 100); - Mvolume->SetPosition((SETTINGS.sound.musicVolume * 100) / 255); //-V807 - curPos.y += rowHeight + sectionSpacing; - groupSound->AddText(ID_txtEffects, curPos, _("Effects"), COLOR_YELLOW, FontStyle{}, NormalFont); mainGroup = groupSound->AddOptionGroup(ID_grpEffects, GroupSelectType::Check); mainGroup->AddTextButton(ID_btOn, curPos + bt1Offset, ctrlSizeSmall, TextureColor::Grey, _("On"), NormalFont); @@ -379,6 +371,22 @@ dskOptions::dskOptions() : Desktop(LOADER.GetImageN("setup013", 0)) FXvolume->SetPosition((SETTINGS.sound.effectsVolume * 100) / 255); curPos.y += rowHeight + sectionSpacing; + groupSound->AddText(ID_txtBirdSounds, curPos, _("Bird sounds"), COLOR_YELLOW, FontStyle{}, NormalFont); + mainGroup = groupSound->AddOptionGroup(ID_grpBirdSounds, GroupSelectType::Check); + mainGroup->AddTextButton(ID_btOn, curPos + bt1Offset, ctrlSizeSmall, TextureColor::Grey, _("On"), NormalFont); + mainGroup->AddTextButton(ID_btOff, curPos + bt2Offset, ctrlSizeSmall, TextureColor::Grey, _("Off"), NormalFont); + curPos.y += rowHeight + sectionSpacing; + + groupSound->AddText(ID_txtMusic, curPos, _("Music"), COLOR_YELLOW, FontStyle{}, NormalFont); + mainGroup = groupSound->AddOptionGroup(ID_grpMusic, GroupSelectType::Check); + mainGroup->AddTextButton(ID_btOn, curPos + bt1Offset, ctrlSizeSmall, TextureColor::Grey, _("On"), NormalFont); + mainGroup->AddTextButton(ID_btOff, curPos + bt2Offset, ctrlSizeSmall, TextureColor::Grey, _("Off"), NormalFont); + + ctrlProgress* Mvolume = + groupSound->AddProgress(ID_pgMusicVol, curPos + volOffset, ctrlSize, TextureColor::Grey, 139, 138, 100); + Mvolume->SetPosition((SETTINGS.sound.musicVolume * 100) / 255); //-V807 + curPos.y += rowHeight + sectionSpacing; + groupSound->AddTextButton(ID_btMusicPlayer, curPos + ctrlOffset, ctrlSize, TextureColor::Grey, _("Music player"), NormalFont); curPos.y += rowHeight + sectionSpacing; @@ -452,8 +460,9 @@ dskOptions::dskOptions() : Desktop(LOADER.GetImageN("setup013", 0)) // Sound // { - groupSound->GetCtrl(ID_grpMusic)->SetSelection(SETTINGS.sound.musicEnabled); groupSound->GetCtrl(ID_grpEffects)->SetSelection(SETTINGS.sound.effectsEnabled); + groupSound->GetCtrl(ID_grpBirdSounds)->SetSelection(SETTINGS.sound.birdsEnabled); + groupSound->GetCtrl(ID_grpMusic)->SetSelection(SETTINGS.sound.musicEnabled); // } @@ -560,6 +569,8 @@ void dskOptions::Msg_Group_OptionGroupChange(const unsigned /*group_id*/, const case ID_grpFullscreen: SETTINGS.video.fullscreen = enabled; break; case ID_grpVBO: SETTINGS.video.vbo = enabled; break; case ID_grpOptTextures: SETTINGS.video.shared_textures = enabled; break; + case ID_grpEffects: SETTINGS.sound.effectsEnabled = enabled; break; + case ID_grpBirdSounds: SETTINGS.sound.birdsEnabled = enabled; break; case ID_grpMusic: SETTINGS.sound.musicEnabled = enabled; if(enabled) @@ -567,7 +578,6 @@ void dskOptions::Msg_Group_OptionGroupChange(const unsigned /*group_id*/, const else MUSICPLAYER.Stop(); break; - case ID_grpEffects: SETTINGS.sound.effectsEnabled = enabled; break; case ID_grpDebugData: // Special case: Uses e.g. ID_btSubmitDebugOn directly SETTINGS.global.submit_debug_data = selection; From 82ee3db197cf61cae9c9a5a263cc56840534741d Mon Sep 17 00:00:00 2001 From: Mario Okrogelnik Date: Wed, 29 Oct 2025 21:54:15 +0100 Subject: [PATCH 4/8] Add new bird parameter into config file --- libs/s25main/Settings.cpp | 3 +++ libs/s25main/Settings.h | 1 + 2 files changed, 4 insertions(+) diff --git a/libs/s25main/Settings.cpp b/libs/s25main/Settings.cpp index bbf93f0b99..b4c99d5234 100644 --- a/libs/s25main/Settings.cpp +++ b/libs/s25main/Settings.cpp @@ -116,6 +116,7 @@ void Settings::LoadDefaults() sound.musicVolume = 30; sound.effectsEnabled = true; sound.effectsVolume = 75; + sound.birdsEnabled = true; sound.playlist = s25::files::defaultPlaylist; // } @@ -258,6 +259,7 @@ void Settings::Load() sound.musicVolume = iniSound->getIntValue("musik_volume"); sound.effectsEnabled = iniSound->getBoolValue("effekte"); sound.effectsVolume = iniSound->getIntValue("effekte_volume"); + sound.birdsEnabled = iniSound->getBoolValue("bird_sounds"); sound.playlist = iniSound->getValue("playlist"); // } @@ -444,6 +446,7 @@ void Settings::Save() iniSound->setValue("musik_volume", sound.musicVolume); iniSound->setValue("effekte", sound.effectsEnabled); iniSound->setValue("effekte_volume", sound.effectsVolume); + iniSound->setValue("bird_sounds", sound.birdsEnabled); iniSound->setValue("playlist", sound.playlist); // } diff --git a/libs/s25main/Settings.h b/libs/s25main/Settings.h index b9a8645459..9a05672274 100644 --- a/libs/s25main/Settings.h +++ b/libs/s25main/Settings.h @@ -83,6 +83,7 @@ class Settings : public Singleton uint8_t musicVolume; bool effectsEnabled; uint8_t effectsVolume; + bool birdsEnabled; std::string playlist; /// musicplayer playlist name } sound; From a147ee567f20e85fce63813a564b254b87a4b8d8 Mon Sep 17 00:00:00 2001 From: Mario Okrogelnik Date: Tue, 4 Nov 2025 21:34:25 +0100 Subject: [PATCH 5/8] Improve code readability - Translate german comments to english on touched files - Re-align off placed UI element code --- libs/s25main/Settings.cpp | 16 ++++++------ libs/s25main/desktops/dskOptions.cpp | 20 +++++++-------- .../s25main/ingameWindows/iwOptionsWindow.cpp | 25 +++++++++---------- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/libs/s25main/Settings.cpp b/libs/s25main/Settings.cpp index b4c99d5234..b7227a5fe6 100644 --- a/libs/s25main/Settings.cpp +++ b/libs/s25main/Settings.cpp @@ -174,7 +174,7 @@ void Settings::LoadIngameDefaults() } /////////////////////////////////////////////////////////////////////////////// -// Routine zum Laden der Konfiguration +// Routine for loading the configuration void Settings::Load() { libsiedler2::Archiv settings; @@ -201,13 +201,13 @@ void Settings::Load() const libsiedler2::ArchivItem_Ini* iniAddons = static_cast(settings.find("addons")); - // ist eine der Kategorien nicht vorhanden? + // Is one of the categories missing? if(!iniGlobal || !iniVideo || !iniLanguage || !iniDriver || !iniSound || !iniLobby || !iniServer || !iniProxy || !iniInterface || !iniAddons) { throw std::runtime_error("Missing section"); } - // stimmt die Settingsversion? + // Is the settings version correct? if(iniGlobal->getValue("version", 0) != VERSION) throw std::runtime_error("Wrong version"); @@ -295,14 +295,14 @@ void Settings::Load() proxy.type = ProxyType(iniProxy->getIntValue("typ")); // } - // leere proxyadresse deaktiviert proxy komplett - // deaktivierter proxy entfernt proxyadresse + // Empty proxy address completely disables proxy. + // Disabled proxy removes proxy address. if(proxy.hostname.empty() || (proxy.type != ProxyType::Socks4 && proxy.type != ProxyType::Socks5)) { proxy.type = ProxyType::None; proxy.hostname.clear(); } - // aktivierter Socks v4 deaktiviert ipv6 + // Enabled Socks v4 disables IPv6 else if(proxy.type == ProxyType::Socks4 && server.ipv6) server.ipv6 = false; @@ -382,7 +382,7 @@ void Settings::LoadIngame() } /////////////////////////////////////////////////////////////////////////////// -// Routine zum Speichern der Konfiguration +// Routine for saving the configuration void Settings::Save() { libsiedler2::Archiv settings; @@ -401,7 +401,7 @@ void Settings::Save() libsiedler2::ArchivItem_Ini* iniInterface = static_cast(settings.find("interface")); libsiedler2::ArchivItem_Ini* iniAddons = static_cast(settings.find("addons")); - // ist eine der Kategorien nicht vorhanden? + // Is one of the categories missing? RTTR_Assert(iniGlobal && iniVideo && iniLanguage && iniDriver && iniSound && iniLobby && iniServer && iniProxy && iniInterface && iniAddons); diff --git a/libs/s25main/desktops/dskOptions.cpp b/libs/s25main/desktops/dskOptions.cpp index f3b9a2279a..cc78645b64 100644 --- a/libs/s25main/desktops/dskOptions.cpp +++ b/libs/s25main/desktops/dskOptions.cpp @@ -233,11 +233,11 @@ dskOptions::dskOptions() : Desktop(LOADER.GetImageN("setup013", 0)) ipv6->AddTextButton(ID_btOn, curPos + ctrlOffset, ctrlSize, TextureColor::Grey, _("IPv6"), NormalFont); ipv6->AddTextButton(ID_btOff, curPos + ctrlOffset2, ctrlSize, TextureColor::Grey, _("IPv4"), NormalFont); ipv6->SetSelection(SETTINGS.server.ipv6); - // ipv6-feld ggf (de-)aktivieren + // Enable/disable the IPv6 field if necessary ipv6->GetCtrl(1)->SetEnabled(SETTINGS.proxy.type != ProxyType::Socks5); //-V807 curPos.y += rowHeight + sectionSpacingCommon; - // Proxyserver + // Proxy server groupCommon->AddText(ID_txtProxy, curPos, _("Proxyserver:"), COLOR_YELLOW, FontStyle{}, NormalFont); ctrlEdit* proxy = groupCommon->AddEdit(ID_edtProxy, curPos + ctrlOffset, ctrlSize, TextureColor::Grey, NormalFont); proxy->SetText(SETTINGS.proxy.hostname); @@ -254,7 +254,7 @@ dskOptions::dskOptions() : Desktop(LOADER.GetImageN("setup013", 0)) upnp->SetSelection(SETTINGS.global.use_upnp); curPos.y += rowHeight; - // Proxytyp + // Proxy type groupCommon->AddText(ID_txtProxyType, curPos, _("Proxytyp:"), COLOR_YELLOW, FontStyle{}, NormalFont); combo = groupCommon->AddComboBox(ID_cbProxyType, curPos + ctrlOffset, ctrlSizeLarge, TextureColor::Grey, NormalFont, 100); @@ -404,7 +404,7 @@ dskOptions::dskOptions() : Desktop(LOADER.GetImageN("setup013", 0)) combo->SetSelection(combo->GetNumItems() - 1); } - // "Allgemein" auswählen + // Select "General" mainGroup = GetCtrl(ID_grpOptions); mainGroup->SetSelection(ID_btCommon, true); @@ -413,7 +413,7 @@ dskOptions::dskOptions() : Desktop(LOADER.GetImageN("setup013", 0)) loadVideoModes(); - // Und zu der Combobox hinzufügen + // and add to the combo box ctrlComboBox& cbVideoModes = *groupGraphics->GetCtrl(ID_cbResolution); for(const auto& videoMode : video_modes) { @@ -428,15 +428,15 @@ dskOptions::dskOptions() : Desktop(LOADER.GetImageN("setup013", 0)) cbVideoModes.AddString(str.str()); - // Ist das die aktuelle Auflösung? Dann selektieren + // Select, if this is the current resolution if(videoMode == SETTINGS.video.fullscreenSize) //-V807 cbVideoModes.SetSelection(cbVideoModes.GetNumItems() - 1); } - // "Vollbild" setzen + // Set "Fullscreen" groupGraphics->GetCtrl(ID_grpFullscreen)->SetSelection(SETTINGS.video.fullscreen); //-V807 - // "Limit Framerate" füllen + // Fill "Limit Framerate" auto* cbFrameRate = groupGraphics->GetCtrl(ID_cbFramerate); if(VIDEODRIVER.HasVSync()) cbFrameRate->AddString(_("Dynamic (Limits to display refresh rate, works with most drivers)")); @@ -520,7 +520,7 @@ void dskOptions::Msg_Group_ComboSelectItem(const unsigned group_id, const unsign case 2: SETTINGS.proxy.type = ProxyType::Socks5; break; } - // ipv6 gleich sichtbar deaktivieren + // Disable IPv6 visually if(SETTINGS.proxy.type == ProxyType::Socks4 && SETTINGS.server.ipv6) { GetCtrl(ID_grpCommon)->GetCtrl(ID_grpIpv6)->SetSelection(0); @@ -625,7 +625,7 @@ void dskOptions::Msg_ButtonClick(const unsigned ctrl_id) { auto* groupCommon = GetCtrl(ID_grpCommon); - // Name abspeichern + // Save the name SETTINGS.lobby.name = groupCommon->GetCtrl(ID_edtName)->GetText(); if(!validatePort(groupCommon->GetCtrl(ID_edtPort)->GetText(), SETTINGS.server.localPort)) return; diff --git a/libs/s25main/ingameWindows/iwOptionsWindow.cpp b/libs/s25main/ingameWindows/iwOptionsWindow.cpp index 83ced66569..f643ce30fb 100644 --- a/libs/s25main/ingameWindows/iwOptionsWindow.cpp +++ b/libs/s25main/ingameWindows/iwOptionsWindow.cpp @@ -51,7 +51,7 @@ iwOptionsWindow::iwOptionsWindow(SoundManager& soundManager) LOADER.GetImageN("resource", 41)), soundManager(soundManager) { - // Der Soldat oben + // The soldier on top AddImage(ID_imgSoldier, DrawPoint(150, 36), LOADER.GetImageN("io", 30)); AddText(ID_txtRttr, DrawPoint(150, 60), "Return To The Roots", COLOR_YELLOW, FontStyle::CENTER, NormalFont); @@ -70,37 +70,36 @@ iwOptionsWindow::iwOptionsWindow(SoundManager& soundManager) AddImageButton(ID_btReadme, DrawPoint(35, 160), Extent(35, 35), TextureColor::Green2, LOADER.GetImageN("io", 79)); AddText(ID_txtReadme, DrawPoint(85, 180), _("Load 'ReadMe' file"), COLOR_YELLOW, FontStyle::BOTTOM, NormalFont); - // "Spiel laden!" + // "Load game!" // TODO: Implement // AddImageButton( 8, DrawPoint(35, 210), Extent(35, 35), TextureColor::Green2, LOADER.GetImageN("io", 48)); // AddText(9, DrawPoint(85, 230), _("Load game!"), COLOR_YELLOW, 0 | FontStyle::BOTTOM, NormalFont); - // "Spiel speichern!" + // "Save game!" // TODO: Move back down to y=250 (Button) 270 (Text) after Load button is implemented AddImageButton(ID_btSave, DrawPoint(35, 230), Extent(35, 35), TextureColor::Green2, LOADER.GetImageN("io", 47)); AddText(ID_txtSave, DrawPoint(85, 255), _("Save game!"), COLOR_YELLOW, FontStyle::BOTTOM, NormalFont); - // Geräusche an/aus + // Sound on/off AddImageButton(ID_btSoundEffects, DrawPoint(35, 300), Extent(35, 35), TextureColor::Green2, LOADER.GetImageN("io", 114 + !SETTINGS.sound.effectsEnabled)); //-V807 - // Musik an/aus - AddImageButton(ID_btMusic, DrawPoint(35, 371), Extent(35, 35), TextureColor::Green2, - LOADER.GetImageN("io", 116 + !SETTINGS.sound.musicEnabled)); - - // Geräuschlautstärke + // Sound volume AddProgress(ID_pgEffectVol, DrawPoint(100, 306), Extent(160, 22), TextureColor::Green2, 139, 138, 100) ->SetPosition((SETTINGS.sound.effectsVolume * 100) / 255); - // Vogelgeräusche an/aus + // Bird sounds on/off AddCheckBox(ID_cpBirdSounds, DrawPoint(100, 342), Extent(160, 22), TextureColor::Green2, _("Bird sounds"), NormalFont, false); - // Musiklautstärke + // Music on/off + AddImageButton(ID_btMusic, DrawPoint(35, 371), Extent(35, 35), TextureColor::Green2, + LOADER.GetImageN("io", 116 + !SETTINGS.sound.musicEnabled)); + + // Music volume AddProgress(ID_pgMusicVol, DrawPoint(100, 377), Extent(160, 22), TextureColor::Green2, 139, 138, 100) ->SetPosition((SETTINGS.sound.musicVolume * 100) / 255); - AddTextButton(ID_btMusicPlayer, DrawPoint(100, 413), Extent(160, 22), TextureColor::Green2, _("Music player"), - NormalFont); + AddTextButton(ID_btMusicPlayer, DrawPoint(100, 413), Extent(160, 22), TextureColor::Green2, _("Music player"), NormalFont); AddTextButton(ID_btAdvanced, DrawPoint(67, 442), Extent(168, 24), TextureColor::Green2, _("Advanced"), NormalFont); AddTextButton(ID_btSurrender, DrawPoint(67, 473), Extent(168, 24), TextureColor::Red1, _("Surrender"), NormalFont); AddTextButton(ID_btEndGame, DrawPoint(67, 504), Extent(168, 24), TextureColor::Red1, _("End game"), NormalFont); From d20bb1968d4af799a4b6f703e60331c6fcdfeb0d Mon Sep 17 00:00:00 2001 From: Mario Okrogelnik Date: Tue, 4 Nov 2025 21:43:20 +0100 Subject: [PATCH 6/8] Fix bird sound checkbox and config - Make the "bird_sounds" setting optional, that avoids resetting the whole config file - Set the initial state of the "bird sounds" checkbox in the in-game settings menu correctly --- libs/s25main/Settings.cpp | 2 +- libs/s25main/ingameWindows/iwOptionsWindow.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/libs/s25main/Settings.cpp b/libs/s25main/Settings.cpp index b7227a5fe6..d2e534f956 100644 --- a/libs/s25main/Settings.cpp +++ b/libs/s25main/Settings.cpp @@ -259,7 +259,7 @@ void Settings::Load() sound.musicVolume = iniSound->getIntValue("musik_volume"); sound.effectsEnabled = iniSound->getBoolValue("effekte"); sound.effectsVolume = iniSound->getIntValue("effekte_volume"); - sound.birdsEnabled = iniSound->getBoolValue("bird_sounds"); + sound.birdsEnabled = iniSound->getValue("bird_sounds", true); sound.playlist = iniSound->getValue("playlist"); // } diff --git a/libs/s25main/ingameWindows/iwOptionsWindow.cpp b/libs/s25main/ingameWindows/iwOptionsWindow.cpp index f643ce30fb..706d9f55e3 100644 --- a/libs/s25main/ingameWindows/iwOptionsWindow.cpp +++ b/libs/s25main/ingameWindows/iwOptionsWindow.cpp @@ -20,6 +20,7 @@ #include "iwTextfile.h" #include "ogl/FontStyle.h" #include "gameData/const_gui_ids.h" +#include "controls/ctrlCheck.h" namespace { enum @@ -89,7 +90,8 @@ iwOptionsWindow::iwOptionsWindow(SoundManager& soundManager) ->SetPosition((SETTINGS.sound.effectsVolume * 100) / 255); // Bird sounds on/off - AddCheckBox(ID_cpBirdSounds, DrawPoint(100, 342), Extent(160, 22), TextureColor::Green2, _("Bird sounds"), NormalFont, false); + AddCheckBox(ID_cpBirdSounds, DrawPoint(100, 342), Extent(160, 22), TextureColor::Green2, _("Bird sounds"), NormalFont, false) + ->setChecked(SETTINGS.sound.birdsEnabled); // Music on/off AddImageButton(ID_btMusic, DrawPoint(35, 371), Extent(35, 35), TextureColor::Green2, From 2b93eb6c76d358998490d1af46f409f8e8e9cad3 Mon Sep 17 00:00:00 2001 From: Mario Okrogelnik Date: Thu, 6 Nov 2025 19:46:29 +0100 Subject: [PATCH 7/8] Update copyright year to 2025 --- libs/s25main/Settings.cpp | 2 +- libs/s25main/Settings.h | 2 +- libs/s25main/SoundManager.cpp | 2 +- libs/s25main/desktops/dskOptions.cpp | 2 +- libs/s25main/ingameWindows/iwOptionsWindow.cpp | 2 +- libs/s25main/ingameWindows/iwOptionsWindow.h | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libs/s25main/Settings.cpp b/libs/s25main/Settings.cpp index d2e534f956..9a2a3a9517 100644 --- a/libs/s25main/Settings.cpp +++ b/libs/s25main/Settings.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2005 - 2021 Settlers Freaks (sf-team at siedler25.org) +// Copyright (C) 2005 - 2025 Settlers Freaks (sf-team at siedler25.org) // // SPDX-License-Identifier: GPL-2.0-or-later diff --git a/libs/s25main/Settings.h b/libs/s25main/Settings.h index 9a05672274..05985335ef 100644 --- a/libs/s25main/Settings.h +++ b/libs/s25main/Settings.h @@ -1,4 +1,4 @@ -// Copyright (C) 2005 - 2021 Settlers Freaks (sf-team at siedler25.org) +// Copyright (C) 2005 - 2025 Settlers Freaks (sf-team at siedler25.org) // // SPDX-License-Identifier: GPL-2.0-or-later diff --git a/libs/s25main/SoundManager.cpp b/libs/s25main/SoundManager.cpp index c9262591c3..81e1ea1e2c 100644 --- a/libs/s25main/SoundManager.cpp +++ b/libs/s25main/SoundManager.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2005 - 2021 Settlers Freaks (sf-team at siedler25.org) +// Copyright (C) 2005 - 2025 Settlers Freaks (sf-team at siedler25.org) // // SPDX-License-Identifier: GPL-2.0-or-later diff --git a/libs/s25main/desktops/dskOptions.cpp b/libs/s25main/desktops/dskOptions.cpp index cc78645b64..92bc6f6955 100644 --- a/libs/s25main/desktops/dskOptions.cpp +++ b/libs/s25main/desktops/dskOptions.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2005 - 2021 Settlers Freaks (sf-team at siedler25.org) +// Copyright (C) 2005 - 2025 Settlers Freaks (sf-team at siedler25.org) // // SPDX-License-Identifier: GPL-2.0-or-later diff --git a/libs/s25main/ingameWindows/iwOptionsWindow.cpp b/libs/s25main/ingameWindows/iwOptionsWindow.cpp index 706d9f55e3..8896866258 100644 --- a/libs/s25main/ingameWindows/iwOptionsWindow.cpp +++ b/libs/s25main/ingameWindows/iwOptionsWindow.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2005 - 2021 Settlers Freaks (sf-team at siedler25.org) +// Copyright (C) 2005 - 2025 Settlers Freaks (sf-team at siedler25.org) // // SPDX-License-Identifier: GPL-2.0-or-later diff --git a/libs/s25main/ingameWindows/iwOptionsWindow.h b/libs/s25main/ingameWindows/iwOptionsWindow.h index f0c4b7f0f2..6671da7e79 100644 --- a/libs/s25main/ingameWindows/iwOptionsWindow.h +++ b/libs/s25main/ingameWindows/iwOptionsWindow.h @@ -1,4 +1,4 @@ -// Copyright (C) 2005 - 2021 Settlers Freaks (sf-team at siedler25.org) +// Copyright (C) 2005 - 2025 Settlers Freaks (sf-team at siedler25.org) // // SPDX-License-Identifier: GPL-2.0-or-later From 0a33748ace45b1772103ccc894b86ff112b101d2 Mon Sep 17 00:00:00 2001 From: Mario Okrogelnik Date: Thu, 6 Nov 2025 23:09:06 +0100 Subject: [PATCH 8/8] Cleanup - sort includes - remove obsolete comments --- libs/s25main/ingameWindows/iwOptionsWindow.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libs/s25main/ingameWindows/iwOptionsWindow.cpp b/libs/s25main/ingameWindows/iwOptionsWindow.cpp index 8896866258..0436ce310c 100644 --- a/libs/s25main/ingameWindows/iwOptionsWindow.cpp +++ b/libs/s25main/ingameWindows/iwOptionsWindow.cpp @@ -9,6 +9,7 @@ #include "Settings.h" #include "SoundManager.h" #include "WindowManager.h" +#include "controls/ctrlCheck.h" #include "controls/ctrlImageButton.h" #include "controls/ctrlProgress.h" #include "drivers/AudioDriverWrapper.h" @@ -20,7 +21,6 @@ #include "iwTextfile.h" #include "ogl/FontStyle.h" #include "gameData/const_gui_ids.h" -#include "controls/ctrlCheck.h" namespace { enum @@ -71,12 +71,10 @@ iwOptionsWindow::iwOptionsWindow(SoundManager& soundManager) AddImageButton(ID_btReadme, DrawPoint(35, 160), Extent(35, 35), TextureColor::Green2, LOADER.GetImageN("io", 79)); AddText(ID_txtReadme, DrawPoint(85, 180), _("Load 'ReadMe' file"), COLOR_YELLOW, FontStyle::BOTTOM, NormalFont); - // "Load game!" // TODO: Implement // AddImageButton( 8, DrawPoint(35, 210), Extent(35, 35), TextureColor::Green2, LOADER.GetImageN("io", 48)); // AddText(9, DrawPoint(85, 230), _("Load game!"), COLOR_YELLOW, 0 | FontStyle::BOTTOM, NormalFont); - // "Save game!" // TODO: Move back down to y=250 (Button) 270 (Text) after Load button is implemented AddImageButton(ID_btSave, DrawPoint(35, 230), Extent(35, 35), TextureColor::Green2, LOADER.GetImageN("io", 47)); AddText(ID_txtSave, DrawPoint(85, 255), _("Save game!"), COLOR_YELLOW, FontStyle::BOTTOM, NormalFont);