aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/mohawk/riven.cpp29
-rw-r--r--engines/mohawk/riven.h2
2 files changed, 31 insertions, 0 deletions
diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp
index 648496b35e..1a2e0c3b60 100644
--- a/engines/mohawk/riven.cpp
+++ b/engines/mohawk/riven.cpp
@@ -73,6 +73,9 @@ MohawkEngine_Riven::MohawkEngine_Riven(OSystem *syst, const MohawkGameDescriptio
_inventory = nullptr;
_lastSaveTime = 0;
+ _prevCard = -1;
+ _prevStack = -1;
+
DebugMan.addDebugChannel(kRivenDebugScript, "Script", "Track Script Execution");
DebugMan.addDebugChannel(kRivenDebugPatches, "Patches", "Track Script Patching");
@@ -284,6 +287,32 @@ void MohawkEngine_Riven::doFrame() {
}
}
break;
+ case Common::KEYCODE_ESCAPE:
+ if (!_scriptMan->hasQueuedScripts()) {
+ // Check if we haven't jumped to menu
+ if (_prevStack == -1) {
+ _prevStack = _stack->getId();
+ _prevCard = _card->getId();
+
+ // If we are already in menu, do not call again
+ if (_prevStack == kStackAspit && _prevCard == 1) {
+ _prevStack = -1;
+ _prevCard = -1;
+ break;
+ }
+
+ changeToStack(kStackAspit);
+ changeToCard(1);
+ } else {
+ changeToStack(_prevStack);
+ changeToCard(_prevCard);
+ _prevStack = -1;
+ _prevCard = -1;
+ }
+ } else {
+ _stack->onKeyPressed(event.kbd);
+ }
+ break;
default:
if (event.kbdRepeat) {
continue;
diff --git a/engines/mohawk/riven.h b/engines/mohawk/riven.h
index 3dc19c7ee4..1cddd323d0 100644
--- a/engines/mohawk/riven.h
+++ b/engines/mohawk/riven.h
@@ -120,6 +120,8 @@ private:
RivenCard *_card;
RivenStack *_stack;
+ int _prevCard, _prevStack;
+
bool _gameEnded;
uint32 _lastSaveTime;