[Scummvm-git-logs] scummvm master -> 0cad726c62c5f28884178f4cf5ef8565a59fa1ec
NMIError
noreply at scummvm.org
Sat Jan 10 17:55:18 UTC 2026
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
0cad726c62 M4: Fix user sound volume settings
Commit: 0cad726c62c5f28884178f4cf5ef8565a59fa1ec
https://github.com/scummvm/scummvm/commit/0cad726c62c5f28884178f4cf5ef8565a59fa1ec
Author: Coen Rampen (crampen at gmail.com)
Date: 2026-01-10T18:55:10+01:00
Commit Message:
M4: Fix user sound volume settings
Changed paths:
engines/m4/adv_r/adv_game.h
engines/m4/burger/gui/game_menu.cpp
engines/m4/burger/gui/game_menu.h
engines/m4/detection_tables.h
engines/m4/m4.cpp
engines/m4/m4.h
engines/m4/platform/sound/digi.cpp
engines/m4/platform/sound/digi.h
engines/m4/riddle/gui/game_menu.cpp
diff --git a/engines/m4/adv_r/adv_game.h b/engines/m4/adv_r/adv_game.h
index ba5f991d8ac..80f2b1f1d79 100644
--- a/engines/m4/adv_r/adv_game.h
+++ b/engines/m4/adv_r/adv_game.h
@@ -37,7 +37,6 @@ struct GameControl {
int16 new_section = 0;
int16 previous_room = 0;
- int32 digi_overall_volume_percent = 100;
bool camera_pan_instant = false;
/**
diff --git a/engines/m4/burger/gui/game_menu.cpp b/engines/m4/burger/gui/game_menu.cpp
index 3c12dcb93bd..da36ab32a57 100644
--- a/engines/m4/burger/gui/game_menu.cpp
+++ b/engines/m4/burger/gui/game_menu.cpp
@@ -38,6 +38,8 @@
#include "m4/burger/vars.h"
#include "m4/m4.h"
+#include "common/config-manager.h"
+
namespace M4 {
namespace Burger {
namespace GUI {
@@ -254,7 +256,7 @@ enum option_menu_item_tags {
void OptionsMenu::cb_Options_Game_Cancel(void *, void *) {
// Reset values of items to what they were when options menu came up
- digi_set_overall_volume(_GM(remember_digi_volume));
+ setDigiVolume(_GM(remember_digi_volume));
_G(flags)[digestability] = _GM(remember_digestability);
// Destroy the options menu
@@ -276,7 +278,7 @@ void OptionsMenu::cb_Options_Game_Done(void *, void *) {
void OptionsMenu::cb_Options_Digi(menuItemHSlider *myItem, guiMenu *myMenu) {
// Set the digi volume
- digi_set_overall_volume(myItem->percent);
+ setDigiVolumePerc(myItem->percent);
term_message("digi volume: %d", myItem->percent);
// This scroller control has been moved, so make sure that the DONE button is not greyed out
@@ -325,14 +327,14 @@ void OptionsMenu::show(RGB8 *myPalette) {
menuItemButton::add(_GM(opMenu), OM_TAG_CANCEL, OM_CANCEL_X, OM_CANCEL_Y, OM_CANCEL_W, OM_CANCEL_H, cb_Options_Game_Cancel, menuItemButton::BTN_TYPE_OM_CANCEL);
menuItemButton::add(_GM(opMenu), OM_TAG_DONE, OM_DONE_X, OM_DONE_Y, OM_DONE_W, OM_DONE_H, cb_Options_Game_Done, menuItemButton::BTN_TYPE_OM_DONE, true);
- menuItemHSlider::add(_GM(opMenu), OM_TAG_DIGI, OM_DIGI_X, OM_DIGI_Y, OM_DIGI_W, OM_DIGI_H, digi_get_overall_volume(),
+ menuItemHSlider::add(_GM(opMenu), OM_TAG_DIGI, OM_DIGI_X, OM_DIGI_Y, OM_DIGI_W, OM_DIGI_H, getDigiVolumePerc(),
(CALLBACK)cb_Options_Digi, true);
menuItemHSlider::add(_GM(opMenu), OM_TAG_DIGESTABILITY, OM_DIGESTABILITY_X, OM_DIGESTABILITY_Y,
OM_DIGESTABILITY_W, OM_DIGESTABILITY_H, _G(flags)[digestability],
(CALLBACK)cb_Options_Digestability, true);
// Remember the values of the items in case the user cancels
- _GM(remember_digi_volume) = digi_get_overall_volume();
+ _GM(remember_digi_volume) = getDigiVolume();
_GM(remember_digestability) = _G(flags)[digestability];
// Configure the game so pressing <esc> will cause the menu to disappear and the gamemenu to reappear
@@ -342,6 +344,23 @@ void OptionsMenu::show(RGB8 *myPalette) {
LockMouseSprite(0);
}
+void OptionsMenu::setDigiVolume(uint16 volume) {
+ ConfMan.setInt("sfx_volume", volume);
+ g_engine->syncSoundSettings();
+}
+
+void OptionsMenu::setDigiVolumePerc(uint8 volumePerc) {
+ setDigiVolume(volumePerc * 256 / 100);
+}
+
+uint16 OptionsMenu::getDigiVolume() {
+ return ConfMan.getInt("sfx_volume");
+}
+
+uint8 OptionsMenu::getDigiVolumePerc() {
+ return getDigiVolume() * 100 / 256;
+}
+
//------------------------------------------------------------------------------------//
//-------------------------------- ERR MENU --------------------------------------//
//------------------------------------------------------------------------------------//
diff --git a/engines/m4/burger/gui/game_menu.h b/engines/m4/burger/gui/game_menu.h
index ef891669f7d..784a61c9d36 100644
--- a/engines/m4/burger/gui/game_menu.h
+++ b/engines/m4/burger/gui/game_menu.h
@@ -65,6 +65,10 @@ private:
static void cb_Options_Game_Done(void *, void *);
static void cb_Options_Digi(menuItemHSlider *myItem, guiMenu *myMenu);
static void cb_Options_Digestability(menuItemHSlider *myItem, guiMenu *myMenu);
+ static void setDigiVolume(uint16 volume);
+ static void setDigiVolumePerc(uint8 volumePerc);
+ static uint16 getDigiVolume();
+ static uint8 getDigiVolumePerc();
public:
static void show(RGB8 *myPalette);
diff --git a/engines/m4/detection_tables.h b/engines/m4/detection_tables.h
index 9da9f2e0ceb..e2820c89317 100644
--- a/engines/m4/detection_tables.h
+++ b/engines/m4/detection_tables.h
@@ -138,7 +138,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesCD
@@ -151,7 +151,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesCD
@@ -164,7 +164,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::DE_DEU,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesCD
@@ -177,7 +177,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::FR_FRA,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesCD
@@ -190,7 +190,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::ES_ESP,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesCD
@@ -203,7 +203,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::IT_ITA,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesCD
@@ -216,7 +216,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_DEMO | ADGF_UNSTABLE,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesDemo
@@ -229,7 +229,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_DEMO | ADGF_UNSTABLE,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesDemo
@@ -245,7 +245,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_DEMO | ADGF_UNSTABLE,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesDemo
@@ -258,7 +258,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_DEMO | ADGF_UNSTABLE,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesDemo
@@ -271,7 +271,7 @@ static const M4GameDescription gameDescriptions[] = {
Common::DE_DEU,
Common::kPlatformDOS,
ADGF_DEMO | ADGF_UNSTABLE,
- GUIO2(GUIO_NOASPECT, GUIO_NOMUSIC)
+ GUIO1(GUIO_NOASPECT)
},
GType_Riddle,
kFeaturesDemo
diff --git a/engines/m4/m4.cpp b/engines/m4/m4.cpp
index 1c52698974b..7ee734685f1 100644
--- a/engines/m4/m4.cpp
+++ b/engines/m4/m4.cpp
@@ -89,9 +89,10 @@ Common::Error M4Engine::run() {
// Instantiate globals and setup
Vars *vars = createVars();
- syncSoundSettings();
if (vars->init()) {
+ syncSoundSettings();
+
// Set the console
setupConsole();
@@ -141,12 +142,15 @@ void M4Engine::m4_inflight() {
void M4Engine::syncSoundSettings() {
Engine::syncSoundSettings();
- const int volume = ConfMan.getBool("sfx_mute") ? 0 : CLIP(ConfMan.getInt("sfx_volume"), 0, 255);
- _mixer->setVolumeForSoundType(Audio::Mixer::kPlainSoundType, volume);
-
_G(midi).syncSoundSettings();
}
+void M4Engine::pauseEngineIntern(bool pause) {
+ Engine::pauseEngineIntern(pause);
+
+ _G(midi).pause(pause);
+}
+
bool M4Engine::canLoadGameStateCurrently(Common::U32String *msg) {
return g_vars && INTERFACE_VISIBLE && player_commands_allowed();
}
@@ -267,10 +271,12 @@ Common::Error M4Engine::syncGame(Common::Serializer &s) {
} else {
s.syncAsByte(_G(kernel).restore_game);
- s.syncAsSint32LE(_G(game).digi_overall_volume_percent);
- int32 midi_volume_percent = ConfMan.getInt("music_volume") * 100 / 255;
+ int32 sfx_volume_percent = ConfMan.getInt("sfx_volume") * 100 / 256;
+ s.syncAsSint32LE(sfx_volume_percent);
+ ConfMan.setInt("sfx_volume", sfx_volume_percent * 256 / 100);
+ int32 midi_volume_percent = ConfMan.getInt("music_volume") * 100 / 256;
s.syncAsSint32LE(midi_volume_percent);
- ConfMan.setInt("music_volume", midi_volume_percent * 255 / 100);
+ ConfMan.setInt("music_volume", midi_volume_percent * 256 / 100);
s.syncAsByte(_G(kernel).camera_pan_instant);
}
@@ -295,7 +301,6 @@ Common::Error M4Engine::syncGame(Common::Serializer &s) {
_G(between_rooms) = true;
_G(game).previous_room = KERNEL_RESTORING_GAME;
- digi_set_overall_volume(_G(game).digi_overall_volume_percent);
syncSoundSettings();
interface_show();
}
diff --git a/engines/m4/m4.h b/engines/m4/m4.h
index cd0cd925489..5d5d24ba019 100644
--- a/engines/m4/m4.h
+++ b/engines/m4/m4.h
@@ -76,6 +76,8 @@ protected:
*/
virtual void setupConsole() = 0;
+ void pauseEngineIntern(bool pause) override;
+
public:
M4Engine(OSystem *syst, const M4GameDescription *gameDesc);
~M4Engine() override = default;
diff --git a/engines/m4/platform/sound/digi.cpp b/engines/m4/platform/sound/digi.cpp
index cabdbe899d3..0cf620a8c96 100644
--- a/engines/m4/platform/sound/digi.cpp
+++ b/engines/m4/platform/sound/digi.cpp
@@ -206,14 +206,6 @@ void Digi::change_volume(int channel, int vol) {
_mixer->setChannelVolume(_channels[channel]._soundHandle, vol);
}
-void Digi::set_overall_volume(int vol) {
- _mixer->setVolumeForSoundType(Audio::Mixer::kPlainSoundType, vol);
-}
-
-int Digi::get_overall_volume() {
- return _mixer->getVolumeForSoundType(Audio::Mixer::kPlainSoundType);
-}
-
int32 Digi::ticks_to_play(const char *name, int roomNum) {
// Get the file and retrieve it's size
Common::String filename = expand_name_2_RAW(name, roomNum);
@@ -269,14 +261,6 @@ void digi_change_volume(int channel, int vol) {
_G(digi).change_volume(channel, vol);
}
-void digi_set_overall_volume(int vol) {
- _G(digi).set_overall_volume(vol);
-}
-
-int digi_get_overall_volume() {
- return _G(digi).get_overall_volume();
-}
-
int32 digi_ticks_to_play(const char *name, int roomNum) {
return _G(digi).ticks_to_play(name, roomNum);
}
diff --git a/engines/m4/platform/sound/digi.h b/engines/m4/platform/sound/digi.h
index e046bc176b4..d6f38345eb7 100644
--- a/engines/m4/platform/sound/digi.h
+++ b/engines/m4/platform/sound/digi.h
@@ -102,8 +102,6 @@ public:
bool play_state(int channel) const;
void change_volume(int channel, int vol);
- void set_overall_volume(int vol);
- int get_overall_volume();
int32 ticks_to_play(const char *name, int roomNum = -1);
void change_panning(int val1, int val2);
};
@@ -120,8 +118,6 @@ void digi_read_another_chunk();
void digi_stop(int channel);
bool digi_play_state(int channel);
void digi_change_volume(int channel, int vol);
-void digi_set_overall_volume(int vol);
-int digi_get_overall_volume();
int32 digi_ticks_to_play(const char *name, int roomNum = -1);
void digi_change_panning(int val1, int val2);
diff --git a/engines/m4/riddle/gui/game_menu.cpp b/engines/m4/riddle/gui/game_menu.cpp
index f58722279e0..2722d9bdce7 100644
--- a/engines/m4/riddle/gui/game_menu.cpp
+++ b/engines/m4/riddle/gui/game_menu.cpp
@@ -243,8 +243,8 @@ void OptionsMenu::show() {
OPTIONS_MENU_X, OPTIONS_MENU_Y, MENU_DEPTH | SF_GET_ALL | SF_BLOCK_ALL | SF_IMMOVABLE);
assert(_GM(opMenu));
- const int digiPercent = digi_get_overall_volume();
- const int midiPercent = ConfMan.getInt("music_volume") * 100 / 255;
+ const int digiPercent = ConfMan.getInt("sfx_volume") * 100 / 256;
+ const int midiPercent = ConfMan.getInt("music_volume") * 100 / 256;
menuItemButton::add(_GM(opMenu), OM_TAG_GAMEMENU,
OM_GAMEMENU_X, OM_GAMEMENU_Y, OM_GAMEMENU_W, OM_GAMEMENU_H,
@@ -288,11 +288,13 @@ void OptionsMenu::cbScrolling(M4::GUI::menuItemButton *myItem, M4::GUI::guiMenu
}
void OptionsMenu::cbSetDigi(M4::GUI::menuItemHSlider *myItem, M4::GUI::guiMenu *) {
- digi_set_overall_volume(myItem->percent);
+ ConfMan.setInt("sfx_volume", myItem->percent * 256 / 100);
+ g_engine->syncSoundSettings();
}
void OptionsMenu::cbSetMidi(M4::GUI::menuItemHSlider *myItem, M4::GUI::guiMenu *) {
- ConfMan.setInt("music_volume", myItem->percent * 255 / 100);
+ ConfMan.setInt("music_volume", myItem->percent * 256 / 100);
+ g_engine->syncSoundSettings();
}
/*------------------- SAVE/LOAD METHODS ------------------*/
More information about the Scummvm-git-logs
mailing list