[Scummvm-git-logs] scummvm master -> edcf052896112c2f30c85532906ef373678451af
bluegr
noreply at scummvm.org
Sat Jul 6 19:00:02 UTC 2024
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
998a1af483 DGDS: Add another global for HoC
6615b64451 DGDS: Enable the HoC start intro opcode
edcf052896 DGDS: More work on menus (intro and options) for HoC and Beamish
Commit: 998a1af483bda1a612809ac39fd355bc8eda7147
https://github.com/scummvm/scummvm/commit/998a1af483bda1a612809ac39fd355bc8eda7147
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2024-07-06T21:52:32+03:00
Commit Message:
DGDS: Add another global 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 7a71ddcbe42..0e08c183fb5 100644
--- a/engines/dgds/globals.cpp
+++ b/engines/dgds/globals.cpp
@@ -60,7 +60,7 @@ Globals::Globals(Clock &clock) :
_lastOpcode1SceneChageNum(0), _sceneOp12SceneNum(0), _currentSelectedItem(0),
_gameMinsToAddOnLClick(0), _gameMinsToAddOnStartDrag(0), _gameMinsToAddOnRClick(0), _gameMinsToAddOnDragFinished(0),
_gameMinsToAddOnObjInteraction(0), _gameIsInteractiveGlobal(0), _sceneOpcode15FromScene(0),
-_sceneOpcode15ToScene(0), _unk2(0), _unk5(0), _unk39(0), _unk40(0), _unk51(0), _unk52(0), _unk54(0), _unk81(0) {
+_sceneOpcode15ToScene(0), _unk2(0), _unk5(0), _unk39(0), _unk40(0), _unk45(0), _unk51(0), _unk52(0), _unk54(0), _unk81(0) {
DgdsEngine *engine = static_cast<DgdsEngine *>(g_engine);
DgdsGameId gameId = engine->getGameId();
@@ -88,6 +88,7 @@ _sceneOpcode15ToScene(0), _unk2(0), _unk5(0), _unk39(0), _unk40(0), _unk51(0), _
_globals.push_back(new RWI16Global(0x34, &_unk52));
_globals.push_back(new RWI16Global(0x33, &_unk51));
_globals.push_back(new RWI16Global(0x28, &_unk40));
+ _globals.push_back(new RWI16Global(0x2D, &_unk45));
_globals.push_back(new RWI16Global(0x27, &_unk39));
}
diff --git a/engines/dgds/globals.h b/engines/dgds/globals.h
index 89c6219a1a3..883d5db6ddd 100644
--- a/engines/dgds/globals.h
+++ b/engines/dgds/globals.h
@@ -113,6 +113,7 @@ protected:
// HoC
int16 _unk39;
int16 _unk40;
+ int16 _unk45;
int16 _unk51;
int16 _unk52;
int16 _unk54;
Commit: 6615b644512267ea27ae2c992198369313de0670
https://github.com/scummvm/scummvm/commit/6615b644512267ea27ae2c992198369313de0670
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2024-07-06T21:58:27+03:00
Commit Message:
DGDS: Enable the HoC start intro opcode
It still doesn't work, but it can aid in debugging
Changed paths:
engines/dgds/scene.cpp
diff --git a/engines/dgds/scene.cpp b/engines/dgds/scene.cpp
index a1f94de559f..47df31e89ec 100644
--- a/engines/dgds/scene.cpp
+++ b/engines/dgds/scene.cpp
@@ -702,10 +702,10 @@ bool Scene::runChinaOp(const SceneOp &op) {
break;
case kSceneOpOpenChinaStartIntro:
// TODO: This is the intro scene but it doesn't work directly.. what's different?
- //engine->changeScene(98);
- //return false;
+ // The game first jumps to scene 100, and then to 98
warning("TODO: Implement start intro opcode");
- break;
+ engine->changeScene(98);
+ return false;
default:
warning("TODO: Implement china-specific scene opcode %d", op._opCode);
break;
Commit: edcf052896112c2f30c85532906ef373678451af
https://github.com/scummvm/scummvm/commit/edcf052896112c2f30c85532906ef373678451af
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2024-07-06T21:59:53+03:00
Commit Message:
DGDS: More work on menus (intro and options) for HoC and Beamish
Changed paths:
engines/dgds/menu.cpp
engines/dgds/menu.h
diff --git a/engines/dgds/menu.cpp b/engines/dgds/menu.cpp
index 641ec6c4460..730ff6aa4f9 100644
--- a/engines/dgds/menu.cpp
+++ b/engines/dgds/menu.cpp
@@ -92,9 +92,15 @@ enum MenuButtonIds {
kMenuMaybeBetterSaveYes = 137,
kMenuMaybeBetterSaveNo = 138,
+ // Intro menu in Rise of the Dragon
kMenuIntroSkip = 143,
kMenuIntroPlay = 144,
+ // Intro menu in Heart of China / Willy Beamish
+ kMenuIntroJumpToIntroduction = 156,
+ kMenuIntroJumpToGame = 157,
+ kMenuIntroRestore = 150,
+
kMenuRestartYes = 163,
kMenuRestartNo = 164,
@@ -269,8 +275,6 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
if (!gadget)
return;
- int16 clickedMenuItem = gadget->_gadgetNo;
-
// Click animation
// TODO: Handle on/off buttons
if (dynamic_cast<ButtonGadget *>(gadget)) {
@@ -280,6 +284,19 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
gadget->toggle(true);
}
+ if (_curMenu == kMenuOptions)
+ handleClickOptionsMenu(mouse);
+ else if (_curMenu == kMenuSkipPlayIntro)
+ handleClickSkipPlayIntroMenu(mouse);
+ else
+ handleClick(mouse);
+}
+
+void Menu::handleClick(const Common::Point &mouse) {
+ DgdsEngine *engine = static_cast<DgdsEngine *>(g_engine);
+ Gadget *gadget = getClickedMenuItem(mouse);
+ int16 clickedMenuItem = gadget->_gadgetNo;
+
switch (clickedMenuItem) {
case kMenuMainPlay:
case kMenuControlsPlay:
@@ -310,12 +327,8 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
case kMenuMainQuit:
drawMenu(kMenuReallyQuit);
break;
- case kMenuCalibrateVCR: // NOTE: same ID as kMenuIntroPlay
- if (_curMenu == kMenuSkipPlayIntro) {
- hideMenu();
- } else {
- drawMenu(kMenuMain);
- }
+ case kMenuCalibrateVCR: // NOTE: same ID as kMenuIntroPlay
+ drawMenu(kMenuMain);
break;
case kMenuControlsVCR:
case kMenuOptionsVCR:
@@ -325,13 +338,6 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
case kMenuRestartNo:
drawMenu(kMenuMain);
break;
- case kMenuOptionsJoystickOnOff:
- //case kMenuOptionsMouseOnOff: // same id as kMenuMaybeBetterSaveNo
- //case kMenuOptionsSoundsOnOff: // same id as kMenuMaybeBetterSaveYes
- case kMenuOptionsMusicOnOff:
- // TODO
- debug("Clicked option with ID %d", clickedMenuItem);
- break;
case kMenuCalibrateJoystickBtn:
drawMenu(kMenuCalibrateJoystick);
break;
@@ -343,6 +349,7 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
break;
case kMenuFilesRestore:
case kMenuGameOverRestore:
+ case kMenuIntroRestore:
if (g_engine->loadGameDialog())
hideMenu();
else
@@ -351,7 +358,7 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
case kMenuFilesRestart:
drawMenu(kMenuRestart);
break;
- case kMenuFilesSave: // TODO: Add an option to support original save/load dialogs?
+ case kMenuFilesSave: // TODO: Add an option to support original save/load dialogs?
case kMenuSavePrevious:
case kMenuSaveNext:
case kMenuSaveSave:
@@ -368,11 +375,6 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
// TODO
debug("Clicked change directory - %d", clickedMenuItem);
break;
- case kMenuIntroSkip:
- hideMenu();
- engine->setShowClock(true);
- engine->changeScene(5);
- break;
case kMenuQuitYes:
g_engine->quitGame();
break;
@@ -398,7 +400,7 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
drawMenu(_curMenu);
break;
}
- case kMenuSliderControlsDetailLevel: {
+ case kMenuSliderControlsDetailLevel: {
int16 setting = dynamic_cast<SliderGadget *>(gadget)->onClick(mouse);
engine->setDetailLevel(static_cast<DgdsDetailLevel>(setting));
drawMenu(_curMenu);
@@ -410,6 +412,56 @@ void Menu::onMouseLUp(const Common::Point &mouse) {
}
}
+void Menu::handleClickOptionsMenu(const Common::Point &mouse) {
+ DgdsEngine *engine = static_cast<DgdsEngine *>(g_engine);
+ Gadget *gadget = getClickedMenuItem(mouse);
+ int16 clickedMenuItem = gadget->_gadgetNo;
+
+ switch (clickedMenuItem) {
+ case kMenuOptionsJoystickOnOff:
+ case kMenuOptionsMouseOnOff: // same id as kMenuMaybeBetterSaveNo
+ case kMenuOptionsSoundsOnOff: // same id as kMenuMaybeBetterSaveYes
+ case kMenuOptionsMusicOnOff:
+ // TODO
+ debug("Clicked option with ID %d", clickedMenuItem);
+ break;
+ default:
+ handleClick(mouse);
+ break;
+ }
+}
+
+void Menu::handleClickSkipPlayIntroMenu(const Common::Point &mouse) {
+ DgdsEngine *engine = static_cast<DgdsEngine *>(g_engine);
+ Gadget *gadget = getClickedMenuItem(mouse);
+ int16 clickedMenuItem = gadget->_gadgetNo;
+
+ switch (clickedMenuItem) {
+ case kMenuIntroPlay:
+ hideMenu();
+ break;
+ case kMenuIntroSkip:
+ hideMenu();
+ engine->setShowClock(true);
+ engine->changeScene(5);
+ break;
+ case kMenuIntroJumpToIntroduction:
+ hideMenu();
+ if (engine->getGameId() == GID_CHINA)
+ engine->changeScene(98);
+ else if (engine->getGameId() == GID_BEAMISH)
+ engine->changeScene(24);
+ break;
+ case kMenuIntroJumpToGame:
+ // TODO
+ debug("Clicked option with ID %d", clickedMenuItem);
+ break;
+ default:
+ handleClick(mouse);
+ break;
+ }
+}
+
void Menu::toggleGadget(int16 gadgetId, bool enable) {
Common::Array<Common::SharedPtr<Gadget> > gadgets = _menuRequests[_curMenu]._gadgets;
diff --git a/engines/dgds/menu.h b/engines/dgds/menu.h
index f4fe5ed7167..3b5e5dda29d 100644
--- a/engines/dgds/menu.h
+++ b/engines/dgds/menu.h
@@ -94,6 +94,9 @@ private:
void drawMenuText(Graphics::ManagedSurface &dst);
void toggleGadget(int16 gadgetId, bool enable);
void configureGadget(MenuId menu, Gadget *gadget);
+ void handleClick(const Common::Point &mouse);
+ void handleClickOptionsMenu(const Common::Point &mouse);
+ void handleClickSkipPlayIntroMenu(const Common::Point &mouse);
Common::HashMap<int, RequestData> _menuRequests;
More information about the Scummvm-git-logs
mailing list