[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