[Scummvm-git-logs] scummvm master -> 236bba9e35d51fa491d24baf6546b2cb6f285bd3

yuv422 noreply at scummvm.org
Sun Nov 24 00:29:04 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:
424f3718fa DARKSEED: Use custom event handler to support time advance on controllers
236bba9e35 DARKSEED: Don't allow saving during menu or cutscenes


Commit: 424f3718fa2ec3a9c7dc899707d37d06129b0da9
    https://github.com/scummvm/scummvm/commit/424f3718fa2ec3a9c7dc899707d37d06129b0da9
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2024-11-24T11:27:21+11:00

Commit Message:
DARKSEED: Use custom event handler to support time advance on controllers

Changed paths:
    engines/darkseed/darkseed.cpp
    engines/darkseed/darkseed.h
    engines/darkseed/metaengine.cpp
    engines/darkseed/metaengine.h


diff --git a/engines/darkseed/darkseed.cpp b/engines/darkseed/darkseed.cpp
index 1309e9effde..aadc49336b3 100644
--- a/engines/darkseed/darkseed.cpp
+++ b/engines/darkseed/darkseed.cpp
@@ -355,19 +355,19 @@ void DarkseedEngine::updateEvents() {
 		case Common::EVENT_MOUSEMOVE:
 			_cursor.updatePosition(event.mouse.x, event.mouse.y);
 			break;
-		case Common::EVENT_RBUTTONDOWN:
-			_isRightMouseClicked = true;
-			break;
-//		case Common::EVENT_RBUTTONUP: _isRightMouseClicked = false; break;
-		case Common::EVENT_LBUTTONDOWN:
-			_isLeftMouseClicked = true;
-			break;
-//		case Common::EVENT_LBUTTONUP: _isLeftMouseClicked = false; break;
 		case Common::EVENT_KEYDOWN:
-			if (event.kbd.keycode == Common::KEYCODE_t) {
+			_lastKeyPressed = event.kbd.keycode;
+			break;
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+			if (event.customType == kDarkseedActionSelect) {
+				_isLeftMouseClicked = true;
+			} else if (event.customType == kDarkseedActionChangeCommand) {
+				_isRightMouseClicked = true;
+			} else if (event.customType == kDarkseedActionTimeAdvance) {
 				_timeAdvanceEventSelected = true;
+			} else if (event.customType == kDarkseedActionQuit) {
+				quitGame();
 			}
-			_lastKeyPressed = event.kbd.keycode;
 			break;
 		default:
 			break;
diff --git a/engines/darkseed/darkseed.h b/engines/darkseed/darkseed.h
index dbc1614d6e7..ae8707659b6 100644
--- a/engines/darkseed/darkseed.h
+++ b/engines/darkseed/darkseed.h
@@ -52,6 +52,14 @@ namespace Darkseed {
 
 struct DarkseedGameDescription;
 
+enum DarkseedAction {
+	kDarkseedActionNone,
+	kDarkseedActionSelect,
+	kDarkseedActionChangeCommand,
+	kDarkseedActionTimeAdvance,
+	kDarkseedActionQuit
+};
+
 enum ActionMode : uint8 {
 	kPointerAction = 0,
 	kHandAction = 2,
diff --git a/engines/darkseed/metaengine.cpp b/engines/darkseed/metaengine.cpp
index ca46271b2a8..0a1b2cf0566 100644
--- a/engines/darkseed/metaengine.cpp
+++ b/engines/darkseed/metaengine.cpp
@@ -20,6 +20,8 @@
  */
 
 #include "common/translation.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/standard-actions.h"
 
 #include "darkseed/metaengine.h"
 #include "darkseed/detection.h"
@@ -52,6 +54,39 @@ const ADExtraGuiOptionsMap *DarkseedMetaEngine::getAdvancedExtraGuiOptions() con
 	return Darkseed::optionsList;
 }
 
+Common::KeymapArray DarkseedMetaEngine::initKeymaps(const char *target) const {
+	using namespace Common;
+
+	Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "darkseed", "Darkseed");
+
+	Action *act;
+
+	act = new Action(kStandardActionLeftClick, _("Action"));
+	act->setCustomEngineActionEvent(Darkseed::kDarkseedActionSelect);
+	act->addDefaultInputMapping("MOUSE_LEFT");
+	act->addDefaultInputMapping("JOY_A");
+	engineKeyMap->addAction(act);
+
+	act = new Action("CHANGECOMMAND", _("Change Command"));
+	act->setCustomEngineActionEvent(Darkseed::kDarkseedActionChangeCommand);
+	act->addDefaultInputMapping("MOUSE_RIGHT");
+	act->addDefaultInputMapping("JOY_B");
+	engineKeyMap->addAction(act);
+
+	act = new Action("TIMEADVANCE", _("Time Advance"));
+	act->setCustomEngineActionEvent(Darkseed::kDarkseedActionTimeAdvance);
+	act->addDefaultInputMapping("t");
+	act->addDefaultInputMapping("JOY_Y");
+	engineKeyMap->addAction(act);
+
+	act = new Action("QUIT", _("Quit Game"));
+	act->setCustomEngineActionEvent(Darkseed::kDarkseedActionQuit);
+	act->addDefaultInputMapping("C+q");
+	engineKeyMap->addAction(act);
+
+	return Keymap::arrayOf(engineKeyMap);
+}
+
 Common::Error DarkseedMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
 	*engine = new Darkseed::DarkseedEngine(syst, desc);
 	return Common::kNoError;
diff --git a/engines/darkseed/metaengine.h b/engines/darkseed/metaengine.h
index 7cbea9d8fc2..ac26094a168 100644
--- a/engines/darkseed/metaengine.h
+++ b/engines/darkseed/metaengine.h
@@ -22,6 +22,7 @@
 #ifndef DARKSEED_METAENGINE_H
 #define DARKSEED_METAENGINE_H
 
+#include "backends/keymapper/keymap.h"
 #include "engines/advancedDetector.h"
 
 class DarkseedMetaEngine : public AdvancedMetaEngine<ADGameDescription> {
@@ -38,6 +39,7 @@ public:
 	bool hasFeature(MetaEngineFeature f) const override;
 
 	const ADExtraGuiOptionsMap *getAdvancedExtraGuiOptions() const override;
+	Common::KeymapArray initKeymaps(const char *target) const override;
 };
 
 #endif // DARKSEED_METAENGINE_H


Commit: 236bba9e35d51fa491d24baf6546b2cb6f285bd3
    https://github.com/scummvm/scummvm/commit/236bba9e35d51fa491d24baf6546b2cb6f285bd3
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2024-11-24T11:27:21+11:00

Commit Message:
DARKSEED: Don't allow saving during menu or cutscenes

Changed paths:
    engines/darkseed/darkseed.h
    engines/darkseed/inventory.cpp
    engines/darkseed/menu.cpp
    engines/darkseed/menu.h


diff --git a/engines/darkseed/darkseed.h b/engines/darkseed/darkseed.h
index ae8707659b6..fd0d2c82e9f 100644
--- a/engines/darkseed/darkseed.h
+++ b/engines/darkseed/darkseed.h
@@ -22,14 +22,14 @@
 #ifndef DARKSEED_H
 #define DARKSEED_H
 
-#include "common/scummsys.h"
-#include "common/system.h"
 #include "common/error.h"
 #include "common/fs.h"
+#include "common/keyboard.h"
 #include "common/random.h"
+#include "common/scummsys.h"
 #include "common/serializer.h"
+#include "common/system.h"
 #include "common/util.h"
-#include "common/keyboard.h"
 #include "engines/engine.h"
 #include "graphics/screen.h"
 
@@ -39,6 +39,7 @@
 #include "darkseed/cutscene.h"
 #include "darkseed/detection.h"
 #include "darkseed/inventory.h"
+#include "darkseed/menu.h"
 #include "darkseed/nsp.h"
 #include "darkseed/objects.h"
 #include "darkseed/player.h"
@@ -116,6 +117,7 @@ public:
 	UseCode *_useCode = nullptr;
 	Cutscene _cutscene;
 	Animation *_animation = nullptr;
+	Menu _menu;
 
 	uint8 _currentDay = 1;
 	int _currentTimeInSeconds = 0x7e8e;
@@ -202,11 +204,11 @@ public:
 	};
 
 	bool canLoadGameStateCurrently(Common::U32String *msg) override {
-		return !_animation->_isPlayingAnimation_maybe && !_player->_isAutoWalkingToBed && !_player->_heroWaiting;
+		return !_animation->_isPlayingAnimation_maybe && !_player->_isAutoWalkingToBed && !_player->_heroWaiting && !_cutscene.isPlaying();
 	}
 
 	bool canSaveGameStateCurrently(Common::U32String *msg) override {
-		return !_animation->_isPlayingAnimation_maybe && !_player->_isAutoWalkingToBed && !_player->_heroWaiting;
+		return !_animation->_isPlayingAnimation_maybe && !_player->_isAutoWalkingToBed && !_player->_heroWaiting && !_cutscene.isPlaying() && !_menu.isOpen();
 	}
 
 	/**
diff --git a/engines/darkseed/inventory.cpp b/engines/darkseed/inventory.cpp
index 61e5fb931f1..331bf15ea99 100644
--- a/engines/darkseed/inventory.cpp
+++ b/engines/darkseed/inventory.cpp
@@ -141,7 +141,7 @@ void Inventory::handleClick() {
 	} else if (icon == 43) {
 		rightArrowClicked();
 	} else if (icon == 4) {
-		loadMenu();
+		g_engine->_menu.loadMenu();
 	} else if (icon == 21) {
 		g_engine->_console->printTosText(935);
 		g_engine->_objectVar[21] = 1;
diff --git a/engines/darkseed/menu.cpp b/engines/darkseed/menu.cpp
index e022575cf25..7380eac57e1 100644
--- a/engines/darkseed/menu.cpp
+++ b/engines/darkseed/menu.cpp
@@ -35,7 +35,8 @@ void drawSoundMenuItem() {
 	}
 }
 
-void loadMenu() {
+void Menu::loadMenu() {
+	_open = true;
 	Graphics::Surface screenCopy;
 	screenCopy.copyFrom(*g_engine->_screen);
 
@@ -95,6 +96,7 @@ void loadMenu() {
 			// restore game screen back for the save game thumbnail
 			g_engine->_screen->copyRectToSurface(screenCopy, 0, 0, {screenCopy.w, screenCopy.h});
 			g_engine->_screen->update();
+			_open = false; // mark menu as closed to allow saving.
 			g_engine->saveGameDialog();
 			break;
 		}
@@ -117,7 +119,9 @@ void loadMenu() {
 					g_engine->quitGame();
 					break;
 				}
-				if (g_engine->_lastKeyPressed == Common::KeyCode::KEYCODE_n || g_engine->_lastKeyPressed == Common::KeyCode::KEYCODE_ESCAPE) {
+				if (g_engine->_lastKeyPressed == Common::KeyCode::KEYCODE_n ||
+					g_engine->_lastKeyPressed == Common::KeyCode::KEYCODE_ESCAPE ||
+					g_engine->_isRightMouseClicked) {
 					g_engine->_console->printTosText(17);
 					g_engine->_console->draw();
 					g_engine->_screen->update();
@@ -133,6 +137,7 @@ void loadMenu() {
 	}
 
 	g_engine->removeFullscreenPic();
+	_open = false;
 }
 
 } // End of namespace Darkseed
diff --git a/engines/darkseed/menu.h b/engines/darkseed/menu.h
index c19c2610e5f..eb70d92a398 100644
--- a/engines/darkseed/menu.h
+++ b/engines/darkseed/menu.h
@@ -24,7 +24,14 @@
 
 namespace Darkseed {
 
-void loadMenu();
+class Menu {
+private:
+	bool _open = false;
+public:
+	bool isOpen() const { return _open; }
+
+	void loadMenu();
+};
 
 } // namespace Darkseed
 




More information about the Scummvm-git-logs mailing list