[Scummvm-git-logs] scummvm master -> fe5b5423167f784116b8cd98c4018d12d01abe35

dreammaster noreply at scummvm.org
Sat Feb 15 03:41:40 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
fe5b542316 M4: RIDDLE: Implement options menu horiontal sliders


Commit: fe5b5423167f784116b8cd98c4018d12d01abe35
    https://github.com/scummvm/scummvm/commit/fe5b5423167f784116b8cd98c4018d12d01abe35
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2025-02-14T19:41:32-08:00

Commit Message:
M4: RIDDLE: Implement options menu horiontal sliders

Changed paths:
    engines/m4/burger/gui/game_menu.cpp
    engines/m4/burger/gui/game_menu.h
    engines/m4/gui/gui_menu_items.cpp
    engines/m4/gui/gui_menu_items.h
    engines/m4/platform/sound/midi.cpp
    engines/m4/platform/sound/midi.h
    engines/m4/riddle/gui/game_menu.cpp
    engines/m4/riddle/gui/game_menu.h
    engines/m4/vars.cpp


diff --git a/engines/m4/burger/gui/game_menu.cpp b/engines/m4/burger/gui/game_menu.cpp
index 095175035a7..d1b02b017e2 100644
--- a/engines/m4/burger/gui/game_menu.cpp
+++ b/engines/m4/burger/gui/game_menu.cpp
@@ -409,6 +409,34 @@ void CreateGameMenuMain(RGB8 *myPalette) {
 #define OPTIONS_MENU_W		298
 #define OPTIONS_MENU_H		218
 
+
+enum option_menu_item_tags {
+	OM_TAG_DONE = 1,
+	OM_TAG_CANCEL,
+	OM_TAG_DIGI,
+	OM_TAG_DIGESTABILITY,
+};
+
+#define OM_DONE_X 168
+#define OM_DONE_Y 141
+#define OM_DONE_W  74
+#define OM_DONE_H  43
+
+#define OM_CANCEL_X  93
+#define OM_CANCEL_Y 141
+#define OM_CANCEL_W  74
+#define OM_CANCEL_H  43
+
+#define OM_DIGI_X	  47
+#define OM_DIGI_Y	  64
+#define OM_DIGI_W	 212
+#define OM_DIGI_H	  24
+
+#define OM_DIGESTABILITY_X	  47
+#define OM_DIGESTABILITY_Y	 104
+#define OM_DIGESTABILITY_W	 212
+#define OM_DIGESTABILITY_H	  24
+
 void DestroyOptionsMenu();
 
 
diff --git a/engines/m4/burger/gui/game_menu.h b/engines/m4/burger/gui/game_menu.h
index 0ac19b19479..b228eee5835 100644
--- a/engines/m4/burger/gui/game_menu.h
+++ b/engines/m4/burger/gui/game_menu.h
@@ -128,37 +128,6 @@ enum game_menu_button_tags {
 #define SL_THUMBNAIL_X			 66
 #define SL_THUMBNAIL_Y			 28
 
-/**
- * Options menu defines
- */
-
-enum option_menu_item_tags {
-	OM_TAG_DONE = 1,
-	OM_TAG_CANCEL,
-	OM_TAG_DIGI,
-	OM_TAG_DIGESTABILITY,
-};
-
-#define OM_DONE_X 168
-#define OM_DONE_Y 141
-#define OM_DONE_W  74
-#define OM_DONE_H  43
-
-#define OM_CANCEL_X  93
-#define OM_CANCEL_Y 141
-#define OM_CANCEL_W  74
-#define OM_CANCEL_H  43
-
-#define OM_DIGI_X	  47
-#define OM_DIGI_Y	  64
-#define OM_DIGI_W	 212
-#define OM_DIGI_H	  24
-
-#define OM_DIGESTABILITY_X	  47
-#define OM_DIGESTABILITY_Y	 104
-#define OM_DIGESTABILITY_W	 212
-#define OM_DIGESTABILITY_H	  24
-
 /**
  * Error menu enums and defines
  */
diff --git a/engines/m4/gui/gui_menu_items.cpp b/engines/m4/gui/gui_menu_items.cpp
index f69f02928b6..49c0afe744c 100644
--- a/engines/m4/gui/gui_menu_items.cpp
+++ b/engines/m4/gui/gui_menu_items.cpp
@@ -1431,21 +1431,31 @@ void menuItemHSlider::drawHSlider(menuItemHSlider *myItem, guiMenu *myMenu, int3
 	// Get the slider info and select the thumb sprite
 	switch (myItem->itemFlags) {
 	case H_THUMB_OVER:
-		mySprite = _GM(menuSprites)[Burger::GUI::OM_SLIDER_BTN_OVER];
+		mySprite = _GM(menuSprites)[IS_RIDDLE ? Riddle::GUI::OM_SLIDER_BTN_OVER :
+			Burger::GUI::OM_SLIDER_BTN_OVER];
 		break;
 	case H_THUMB_PRESS:
-		mySprite = _GM(menuSprites)[Burger::GUI::OM_SLIDER_BTN_PRESS];
+		mySprite = _GM(menuSprites)[IS_RIDDLE ? Riddle::GUI::OM_SLIDER_BTN_PRESS :
+			Burger::GUI::OM_SLIDER_BTN_PRESS];
 		break;
 	default:
 	case H_THUMB_NORM:
-		mySprite = _GM(menuSprites)[Burger::GUI::OM_SLIDER_BTN_NORM];
+		mySprite = _GM(menuSprites)[IS_RIDDLE ? Riddle::GUI::OM_SLIDER_BTN_NORM :
+			Burger::GUI::OM_SLIDER_BTN_NORM];
 		break;
 	}
 
 	// Fill in everything left of the thumb with a hilite color
 	if (myItem->thumbX > 2) {
-		gr_color_set(menuItem::SLIDER_BAR_COLOR);
-		gr_buffer_rect_fill(myBuff, myItem->x1 + 3, myItem->y1 + 9, myItem->thumbX, myItem->thumbH - 18);
+		if (IS_RIDDLE) {
+			gr_color_set(120);
+			gr_buffer_rect_fill(myBuff, myItem->x1 + 2, myItem->y1 + 3,
+				myItem->thumbX - 2, myItem->thumbH - 6);
+		} else {
+			gr_color_set(129);
+			gr_buffer_rect_fill(myBuff, myItem->x1 + 3, myItem->y1 + 9,
+				myItem->thumbX, myItem->thumbH - 18);
+		}
 	}
 
 	// Draw in the thumb
@@ -1629,9 +1639,11 @@ menuItemHSlider *menuItemHSlider::add(guiMenu *myMenu, int32 tag, int32 x, int32
 
 	// Intialize the new slider
 	newItem->itemFlags = H_THUMB_NORM;
-	newItem->thumbW = _GM(menuSprites)[Burger::GUI::OM_SLIDER_BTN_NORM]->w;
-	newItem->thumbH = _GM(menuSprites)[Burger::GUI::OM_SLIDER_BTN_NORM]->h;
-	newItem->maxThumbX = w - _GM(menuSprites)[Burger::GUI::OM_SLIDER_BTN_NORM]->w;
+	auto *thumb = _GM(menuSprites)[IS_RIDDLE ? Riddle::GUI::OM_SLIDER_BTN_NORM :
+		Burger::GUI::OM_SLIDER_BTN_NORM];
+	newItem->thumbW = thumb->w;
+	newItem->thumbH = thumb->h;
+	newItem->maxThumbX = w - thumb->w;
 
 	if (initPercent < 0) {
 		initPercent = 0;
diff --git a/engines/m4/gui/gui_menu_items.h b/engines/m4/gui/gui_menu_items.h
index 52a1b345511..1c7fc33bed4 100644
--- a/engines/m4/gui/gui_menu_items.h
+++ b/engines/m4/gui/gui_menu_items.h
@@ -120,6 +120,10 @@ namespace GUI {
 enum options_menu_sprites {
 	OM_DIALOG_BOX,
 
+	OM_SLIDER_BTN_NORM = 5,
+	OM_SLIDER_BTN_OVER = 6,
+	OM_SLIDER_BTN_PRESS = 7,
+
 	OM_SCROLLING_ON_BTN_NORM = 8,
 	OM_SCROLLING_ON_BTN_OVER = 9,
 	OM_SCROLLING_ON_BTN_PRESS = 13,
@@ -195,8 +199,6 @@ struct menuItem {
 		TEXT_COLOR_PRESS_HILITE		= 3,
 		TEXT_COLOR_PRESS_FOREGROUND = 2,
 		TEXT_COLOR_PRESS_SHADOW		= 1,
-
-		SLIDER_BAR_COLOR			= 129
 	};
 
 	menuItem *next = nullptr;
diff --git a/engines/m4/platform/sound/midi.cpp b/engines/m4/platform/sound/midi.cpp
index 1402a57541c..ff7f7dd533e 100644
--- a/engines/m4/platform/sound/midi.cpp
+++ b/engines/m4/platform/sound/midi.cpp
@@ -29,7 +29,7 @@ namespace Sound {
 
 int Midi::_midiEndTrigger;
 
-Midi::Midi() {
+Midi::Midi(Audio::Mixer *mixer) : _mixer(mixer) {
 	Midi::createDriver();
 
 	int ret = _driver->open();
@@ -91,7 +91,11 @@ void Midi::loop() {
 }
 
 void Midi::set_overall_volume(int vol) {
-	// No implementation
+	_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, vol);
+}
+
+int Midi::get_overall_volume() const {
+	return _mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType);
 }
 
 } // namespace Sound
@@ -112,6 +116,10 @@ void midi_set_overall_volume(int vol) {
 	_G(midi).set_overall_volume(vol);
 }
 
+int midi_get_overall_volume() {
+	return _G(midi).get_overall_volume();
+}
+
 void midi_fade_volume(int val1, int val2) {
 	warning("TODO: midi_fade_volume");
 }
diff --git a/engines/m4/platform/sound/midi.h b/engines/m4/platform/sound/midi.h
index 0c6ef46b791..413972ad10d 100644
--- a/engines/m4/platform/sound/midi.h
+++ b/engines/m4/platform/sound/midi.h
@@ -32,13 +32,15 @@ namespace Sound {
 class Midi : public Audio::MidiPlayer {
 private:
 	static int _midiEndTrigger;
+	Audio::Mixer *_mixer;
 public:
-	Midi();
+	Midi(Audio::Mixer *mixer);
 
 	void midi_play(const char *name, int volume, int loop, int trigger, int roomNum);
 	void task();
 	void loop();
 	void set_overall_volume(int vol);
+	int get_overall_volume() const;
 };
 
 } // namespace Sound
@@ -47,6 +49,7 @@ void midi_play(const char *name, int volume, int loop, int trigger, int roomNum)
 void midi_loop();
 void midi_stop();
 void midi_set_overall_volume(int vol);
+int midi_get_overall_volume();
 void midi_fade_volume(int val1, int val2);
 
 } // namespace M4
diff --git a/engines/m4/riddle/gui/game_menu.cpp b/engines/m4/riddle/gui/game_menu.cpp
index 339e8629b81..54519378947 100644
--- a/engines/m4/riddle/gui/game_menu.cpp
+++ b/engines/m4/riddle/gui/game_menu.cpp
@@ -215,6 +215,18 @@ void GameMenu::cbLoad(void *, void *) {
 #define OM_GAMEMENU_W		26
 #define OM_GAMEMENU_H		26
 
+#define OM_TAG_DIGI			2
+#define OM_DIGI_X			70
+#define OM_DIGI_Y			29
+#define OM_DIGI_W			108
+#define OM_DIGI_H			14
+
+#define OM_TAG_MIDI			3
+#define OM_MIDI_X			70
+#define OM_MIDI_Y			72
+#define OM_MIDI_W			108
+#define OM_MIDI_H			14
+
 #define OM_TAG_SCROLLING	4
 #define OM_SCROLLING_X		131
 #define OM_SCROLLING_Y		113
@@ -228,16 +240,21 @@ void OptionsMenu::show() {
 
 	_GM(opMenu) = guiMenu::create(_GM(menuSprites)[OM_DIALOG_BOX],
 		OPTIONS_MENU_X, OPTIONS_MENU_Y, MENU_DEPTH | SF_GET_ALL | SF_BLOCK_ALL | SF_IMMOVABLE);
-	if (!_GM(opMenu)) {
-		return;
-	}
+	assert(_GM(opMenu));
+
+	int digiPercent = digi_get_overall_volume();
+	int midiPercent = midi_get_overall_volume();
 
 	menuItemButton::add(_GM(opMenu), OM_TAG_GAMEMENU,
 		OM_GAMEMENU_X, OM_GAMEMENU_Y, OM_GAMEMENU_W, OM_GAMEMENU_H,
 		cbGameMenu, menuItemButton::BTN_TYPE_GM_GENERIC);
-
-
-	menuItemButton::add(_GM(opMenu), OM_TAG_GAMEMENU,
+	menuItemHSlider::add(_GM(opMenu), OM_TAG_DIGI,
+		OM_DIGI_X, OM_DIGI_Y, OM_DIGI_W, OM_DIGI_H,
+		digiPercent, (CALLBACK)cbSetDigi, true);
+	menuItemHSlider::add(_GM(opMenu), OM_TAG_MIDI,
+		OM_MIDI_X, OM_MIDI_Y, OM_MIDI_W, OM_MIDI_H,
+		midiPercent, (CALLBACK)cbSetMidi, true);
+	menuItemButton::add(_GM(opMenu), OM_TAG_SCROLLING,
 		OM_SCROLLING_X, OM_SCROLLING_Y, OM_SCROLLING_W, OM_SCROLLING_H, (CALLBACK)cbScrolling,
 		_G(kernel).cameraPans() ? menuItemButton::BTN_TYPE_OM_SCROLLING_ON :
 			menuItemButton::BTN_TYPE_OM_SCROLLING_OFF);
@@ -269,6 +286,14 @@ void OptionsMenu::cbScrolling(M4::GUI::menuItemButton *myItem, M4::GUI::guiMenu
 		menuItemButton::BTN_TYPE_OM_SCROLLING_ON;
 }
 
+void OptionsMenu::cbSetDigi(M4::GUI::menuItemHSlider *myItem, M4::GUI::guiMenu *) {
+	digi_set_overall_volume(myItem->percent);
+}
+
+void OptionsMenu::cbSetMidi(M4::GUI::menuItemHSlider *myItem, M4::GUI::guiMenu *) {
+	midi_set_overall_volume(myItem->percent);
+}
+
 /*-------------------- ACCESS METHODS --------------------*/
 
 void CreateGameMenu(RGB8 *myPalette) {
diff --git a/engines/m4/riddle/gui/game_menu.h b/engines/m4/riddle/gui/game_menu.h
index 83ec58c9a7e..64d1af006d9 100644
--- a/engines/m4/riddle/gui/game_menu.h
+++ b/engines/m4/riddle/gui/game_menu.h
@@ -48,6 +48,8 @@ private:
 	static void destroyOptionsMenu();
 	static void cbGameMenu(void *, void *);
 	static void cbScrolling(M4::GUI::menuItemButton *myItem, M4::GUI::guiMenu *);
+	static void cbSetDigi(M4::GUI::menuItemHSlider *myItem, M4::GUI::guiMenu *);
+	static void cbSetMidi(M4::GUI::menuItemHSlider *myItem, M4::GUI::guiMenu *);
 
 public:
 	static void show();
diff --git a/engines/m4/vars.cpp b/engines/m4/vars.cpp
index 038e93e64fb..ffe71cf1f13 100644
--- a/engines/m4/vars.cpp
+++ b/engines/m4/vars.cpp
@@ -40,7 +40,7 @@ namespace M4 {
 
 Vars *g_vars;
 
-Vars::Vars() : _digi(g_engine->_mixer) {
+Vars::Vars() : _digi(g_engine->_mixer), _midi(g_engine->_mixer) {
 	g_vars = this;
 
 	Common::fill(_sizeMem, _sizeMem + _MEMTYPE_LIMIT, 0);




More information about the Scummvm-git-logs mailing list