[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