[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