[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