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

bluegr noreply at scummvm.org
Sun Jul 7 14:39:13 UTC 2024


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

Summary:
2ad5cf099e DGDS: Add more globals for HoC
eca3f1f6df DGDS: Implement option toggle buttons


Commit: 2ad5cf099e3ae27fc50521d38525cba88386931d
    https://github.com/scummvm/scummvm/commit/2ad5cf099e3ae27fc50521d38525cba88386931d
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2024-07-07T17:38:53+03:00

Commit Message:
DGDS: Add more globals for HoC

Changed paths:
    engines/dgds/globals.cpp
    engines/dgds/globals.h


diff --git a/engines/dgds/globals.cpp b/engines/dgds/globals.cpp
index 564e211dea6..eaeb2b737b3 100644
--- a/engines/dgds/globals.cpp
+++ b/engines/dgds/globals.cpp
@@ -205,12 +205,14 @@ Common::Error DragonGlobals::syncState(Common::Serializer &s) {
 }
 
 HocGlobals::HocGlobals(Clock &clock) : Globals(clock),
-	_unk39(0), _unk40(0), _unk45(0), _unk48(0), _unk51(0), _characterCount(0), _currentCharacter(0), _unk54(0) {
+	_unk39(0), _unk40(0), _unk45(0), _unk46(0), _unk48(0),
+	_unk51(0), _characterCount(0), _currentCharacter(0), _unk54(0) {
 	_globals.push_back(new RWI16Global(0x36, &_unk54));
 	_globals.push_back(new RWI16Global(0x35, &_currentCharacter));
 	_globals.push_back(new RWI16Global(0x34, &_characterCount));
 	_globals.push_back(new RWI16Global(0x33, &_unk51));
 	_globals.push_back(new RWI16Global(0x30, &_unk48));
+	_globals.push_back(new RWI16Global(0x2E, &_unk46));
 	_globals.push_back(new RWI16Global(0x2D, &_unk45));
 	_globals.push_back(new RWI16Global(0x28, &_unk40));
 	_globals.push_back(new RWI16Global(0x27, &_unk39));
@@ -221,6 +223,7 @@ Common::Error HocGlobals::syncState(Common::Serializer &s) {
 	s.syncAsSint16LE(_unk39);
 	s.syncAsSint16LE(_unk40);
 	s.syncAsSint16LE(_unk45);
+	s.syncAsSint16LE(_unk46);
 	s.syncAsSint16LE(_unk48);
 	s.syncAsSint16LE(_unk51);
 	s.syncAsSint16LE(_characterCount);
diff --git a/engines/dgds/globals.h b/engines/dgds/globals.h
index 520638a2bc2..c6e95f82dbe 100644
--- a/engines/dgds/globals.h
+++ b/engines/dgds/globals.h
@@ -154,6 +154,7 @@ private:
 	int16 _unk39;
 	int16 _unk40;
 	int16 _unk45;
+	int16 _unk46;
 	int16 _unk48;
 	int16 _unk51;
 	int16 _characterCount;


Commit: eca3f1f6df370782fd20168806d89b3bc21c9a08
    https://github.com/scummvm/scummvm/commit/eca3f1f6df370782fd20168806d89b3bc21c9a08
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2024-07-07T17:38:53+03:00

Commit Message:
DGDS: Implement option toggle buttons

Changed paths:
    engines/dgds/menu.cpp
    engines/dgds/menu.h
    engines/dgds/request.cpp
    engines/dgds/sound.h


diff --git a/engines/dgds/menu.cpp b/engines/dgds/menu.cpp
index 8fb8d80af1b..6302d80b0f9 100644
--- a/engines/dgds/menu.cpp
+++ b/engines/dgds/menu.cpp
@@ -21,6 +21,7 @@
 
 #include "common/system.h"
 
+#include "audio/mixer.h"
 #include "graphics/cursorman.h"
 #include "graphics/font.h"
 #include "graphics/fontman.h"
@@ -31,7 +32,9 @@
 #include "dgds/includes.h"
 #include "dgds/font.h"
 #include "dgds/menu.h"
+#include "dgds/music.h"
 #include "dgds/request.h"
+#include "dgds/sound.h"
 
 namespace Dgds {
 
@@ -53,9 +56,13 @@ enum MenuButtonIds {
 	kMenuSliderControlsDetailLevel = 131,
 
 	kMenuOptionsJoystickOnOff = 139,
+	kMenuOptionsJoystickOnOffHoC = 174,
 	kMenuOptionsMouseOnOff = 138,
+	kMenuOptionsMouseOnOffHoC = 173,
 	kMenuOptionsSoundsOnOff = 137,
 	kMenuOptionsMusicOnOff = 140,
+	kMenuOptionsSoundsOnOffHoC = 175,
+	kMenuOptionsMusicOnOffHoC = 171,
 	kMenuOptionsVCR = 135,
 	kMenuOptionsPlay = 136,
 
@@ -129,8 +136,35 @@ void Menu::setScreenBuffer() {
 	g_system->unlockScreen();
 }
 
-void Menu::configureGadget(MenuId menu, Gadget* gadget) {
+bool Menu::updateOptionsGadget(Gadget *gadget) {
 	DgdsEngine *engine = static_cast<DgdsEngine *>(g_engine);
+	Audio::Mixer *mixer = engine->_mixer;
+
+	switch (gadget->_gadgetNo) {
+	case kMenuOptionsJoystickOnOff:
+	case kMenuOptionsJoystickOnOffHoC:
+		gadget->_buttonName = "JOYSTICK ON";
+		return false;
+	case kMenuOptionsMouseOnOff:
+	case kMenuOptionsMouseOnOffHoC:
+		gadget->_buttonName = "MOUSE ON";
+		return false;
+	case kMenuOptionsSoundsOnOff: // same id as kMenuMaybeBetterSaveYes
+	case kMenuOptionsSoundsOnOffHoC:
+		gadget->_buttonName = (!mixer->isSoundTypeMuted(Audio::Mixer::kSFXSoundType)) ? "SOUNDS ON" : "SOUNDS OFF";
+		return true;
+	case kMenuOptionsMusicOnOff:
+	case kMenuOptionsMusicOnOffHoC:
+		gadget->_buttonName = (!mixer->isSoundTypeMuted(Audio::Mixer::kMusicSoundType)) ? "MUSIC ON" : "MUSIC OFF";
+		return true;
+	default:
+		return false;
+	}
+}
+
+void Menu::configureGadget(MenuId menu, Gadget *gadget) {
+	DgdsEngine *engine = static_cast<DgdsEngine *>(g_engine);
+
 	// a bit of a hack - set up the gadget with the correct value before we draw it.
 	if (menu == kMenuControls) {
 		SliderGadget *slider = dynamic_cast<SliderGadget *>(gadget);
@@ -154,6 +188,8 @@ void Menu::configureGadget(MenuId menu, Gadget* gadget) {
 			break;
 			// do nothing.
 		}
+	} else if (menu == kMenuOptions) {
+		updateOptionsGadget(gadget);
 	}
 }
 
@@ -272,13 +308,14 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
 	_dragGadget = nullptr;
 
 	Gadget *gadget = getClickedMenuItem(mouse);
+	bool isToggle = false;
 	if (!gadget)
 		return;
 
 	// Click animation
-	// TODO: Handle on/off buttons
 	if (dynamic_cast<ButtonGadget *>(gadget)) {
 		gadget->toggle(false);
+		isToggle = updateOptionsGadget(gadget);
 		drawMenu(_curMenu);
 		g_system->delayMillis(500);
 		gadget->toggle(true);
@@ -290,6 +327,9 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
 		handleClickSkipPlayIntroMenu(mouse);
 	else
 		handleClick(mouse);
+
+	if (isToggle)
+		drawMenu(_curMenu);
 }
 
 void Menu::handleClick(const Common::Point &mouse) {
@@ -419,18 +459,37 @@ void Menu::handleClick(const Common::Point &mouse) {
 }
 
 void Menu::handleClickOptionsMenu(const Common::Point &mouse) {
+	DgdsEngine *engine = static_cast<DgdsEngine *>(g_engine);
+	Audio::Mixer *mixer = engine->_mixer;
 	Gadget *gadget = getClickedMenuItem(mouse);
 	int16 clickedMenuItem = gadget->_gadgetNo;
+	Audio::Mixer::SoundType soundType = Audio::Mixer::kMusicSoundType;
+	DgdsMidiPlayer *midiPlayer = engine->_soundPlayer->getMidiPlayer();
 
 	switch (clickedMenuItem) {
 	case kMenuOptionsJoystickOnOff:
+	case kMenuOptionsJoystickOnOffHoC:
 	case kMenuOptionsMouseOnOff:  // same id as kMenuMaybeBetterSaveNo
+	case kMenuOptionsMouseOnOffHoC:
 		// Do nothing - we don't toggle joystick or mouse functionality
 		break;
 	case kMenuOptionsSoundsOnOff: // same id as kMenuMaybeBetterSaveYes
+	case kMenuOptionsSoundsOnOffHoC:
+		soundType = Audio::Mixer::kSFXSoundType;
+		// fall through
 	case kMenuOptionsMusicOnOff:
-		// TODO
-		debug("Clicked option with ID %d", clickedMenuItem);
+	case kMenuOptionsMusicOnOffHoC:
+		if (!mixer->isSoundTypeMuted(soundType)) {
+			mixer->muteSoundType(soundType, true);
+			midiPlayer->syncVolume();
+			midiPlayer->pause();
+		} else {
+			mixer->muteSoundType(soundType, false);
+			midiPlayer->syncVolume();
+			midiPlayer->resume();
+		}
+
+		updateOptionsGadget(gadget);
 		break;
 	default:
 		handleClick(mouse);
diff --git a/engines/dgds/menu.h b/engines/dgds/menu.h
index 3b5e5dda29d..7e5b1962075 100644
--- a/engines/dgds/menu.h
+++ b/engines/dgds/menu.h
@@ -94,6 +94,7 @@ private:
 	void drawMenuText(Graphics::ManagedSurface &dst);
 	void toggleGadget(int16 gadgetId, bool enable);
 	void configureGadget(MenuId menu, Gadget *gadget);
+	bool updateOptionsGadget(Gadget *gadget);
 	void handleClick(const Common::Point &mouse);
 	void handleClickOptionsMenu(const Common::Point &mouse);
 	void handleClickSkipPlayIntroMenu(const Common::Point &mouse);
diff --git a/engines/dgds/request.cpp b/engines/dgds/request.cpp
index e105db7bbd7..1011fdada56 100644
--- a/engines/dgds/request.cpp
+++ b/engines/dgds/request.cpp
@@ -359,13 +359,8 @@ void ButtonGadget::draw(Graphics::ManagedSurface *dst) const {
 
 	if (!_buttonName.empty()) {
 		const DgdsFont *font = RequestData::getMenuFont();
-
-		// TODO: Depending on some flags, the game toggles " ON " to " OFF" at the
-		// end of the string.
 		Common::String name = _buttonName;
-
 		int fontHeight = font->getFontHeight();
-
 		//bool twoline;
 		int yoffset;
 		uint32 linebreak = name.find('&');
diff --git a/engines/dgds/sound.h b/engines/dgds/sound.h
index 79166d10a93..a6aa2bf2b95 100644
--- a/engines/dgds/sound.h
+++ b/engines/dgds/sound.h
@@ -59,6 +59,8 @@ public:
 
 	bool playPCM(const byte *data, uint32 size);
 
+	DgdsMidiPlayer *getMidiPlayer() { return _midiMusicPlayer; }
+
 private:
 	void loadPCSound(const Common::String &filename, Common::Array<uint32> &sizeArray, Common::Array<byte *> &dataArray);
 	void playPCSound(uint num, const Common::Array<uint32> &sizeArray, const Common::Array<byte *> &dataArray, DgdsMidiPlayer *midiPlayer);




More information about the Scummvm-git-logs mailing list