aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk/riven.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mohawk/riven.cpp')
-rw-r--r--engines/mohawk/riven.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp
index 266706ae11..0bf4024057 100644
--- a/engines/mohawk/riven.cpp
+++ b/engines/mohawk/riven.cpp
@@ -238,6 +238,8 @@ void MohawkEngine_Riven::doFrame() {
runDialog(*_optionsDialog);
if (_optionsDialog->getLoadSlot() >= 0)
loadGameStateAndDisplayError(_optionsDialog->getLoadSlot());
+ if (_optionsDialog->getSaveSlot() >= 0)
+ saveGameStateAndDisplayError(_optionsDialog->getSaveSlot(), _optionsDialog->getSaveDescription());
_gfx->setTransitionMode((RivenTransitionMode) _vars["transitionmode"]);
_card->initializeZipMode();
break;
@@ -257,6 +259,20 @@ void MohawkEngine_Riven::doFrame() {
changeToCard(6);
}
break;
+ case Common::KEYCODE_o:
+ if (event.kbd.flags & Common::KBD_CTRL) {
+ if (canLoadGameStateCurrently()) {
+ runLoadDialog();
+ }
+ }
+ break;
+ case Common::KEYCODE_s:
+ if (event.kbd.flags & Common::KBD_CTRL) {
+ if (canSaveGameStateCurrently()) {
+ runSaveDialog();
+ }
+ }
+ break;
default:
if (event.kbdRepeat) {
continue;
@@ -525,6 +541,24 @@ void MohawkEngine_Riven::runLoadDialog() {
}
}
+void MohawkEngine_Riven::runSaveDialog() {
+ GUI::SaveLoadChooser slc(_("Save game:"), _("Save"), true);
+
+ pauseEngine(true);
+ int slot = slc.runModalWithCurrentTarget();
+ pauseEngine(false);
+
+ if (slot >= 0) {
+ Common::String result(slc.getResultString());
+ if (result.empty()) {
+ // If the user was lazy and entered no save name, come up with a default name.
+ result = slc.createDefaultSaveDescription(slot);
+ }
+
+ saveGameStateAndDisplayError(slot, result);
+ }
+}
+
Common::Error MohawkEngine_Riven::loadGameState(int slot) {
return _saveLoad->loadGame(slot);
}
@@ -544,6 +578,17 @@ Common::Error MohawkEngine_Riven::saveGameState(int slot, const Common::String &
return _saveLoad->saveGame(slot, desc);
}
+void MohawkEngine_Riven::saveGameStateAndDisplayError(int slot, const Common::String &desc) {
+ assert(slot >= 0 && !desc.empty());
+
+ Common::Error saveError = saveGameState(slot, desc);
+
+ if (saveError.getCode() != Common::kNoError) {
+ GUI::MessageDialog dialog(saveError.getDesc());
+ dialog.runModal();
+ }
+}
+
void MohawkEngine_Riven::addZipVisitedCard(uint16 cardId, uint16 cardNameId) {
Common::String cardName = getStack()->getName(kCardNames, cardNameId);
if (cardName.empty())