aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk
diff options
context:
space:
mode:
authorBastien Bouclet2019-10-30 05:51:22 +0100
committerBastien Bouclet2019-10-30 19:54:12 +0100
commit8a02d0efad8a93be2525c3e439eb0b52f64d647a (patch)
tree5d717cca2acc6c85904f2bc5c13ec1aebd61cd68 /engines/mohawk
parent08191db22a79f09a367e732fd30bc024882cc17b (diff)
downloadscummvm-rg350-8a02d0efad8a93be2525c3e439eb0b52f64d647a.tar.gz
scummvm-rg350-8a02d0efad8a93be2525c3e439eb0b52f64d647a.tar.bz2
scummvm-rg350-8a02d0efad8a93be2525c3e439eb0b52f64d647a.zip
MOHAWK: MYST: Save the options to ConfMan when the game is not started
Diffstat (limited to 'engines/mohawk')
-rw-r--r--engines/mohawk/dialogs.cpp26
-rw-r--r--engines/mohawk/dialogs.h8
-rw-r--r--engines/mohawk/myst.cpp25
-rw-r--r--engines/mohawk/myst.h1
-rw-r--r--engines/mohawk/myst_state.cpp4
-rw-r--r--engines/mohawk/riven.cpp4
6 files changed, 55 insertions, 13 deletions
diff --git a/engines/mohawk/dialogs.cpp b/engines/mohawk/dialogs.cpp
index 154b1b10e6..667cb34f5e 100644
--- a/engines/mohawk/dialogs.cpp
+++ b/engines/mohawk/dialogs.cpp
@@ -186,9 +186,6 @@ void MystOptionsDialog::open() {
if (_vm->getFeatures() & GF_DEMO)
_zipModeCheckbox->setEnabled(false);
- _zipModeCheckbox->setState(_vm->_gameState->_globals.zipMode);
- _transitionsCheckbox->setState(_vm->_gameState->_globals.transitions);
-
if (_vm->getFeatures() & GF_25TH) {
// The 25th anniversary version has a main menu, no need to show these buttons here
_loadButton->setVisible(false);
@@ -247,15 +244,12 @@ void MystOptionsDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, ui
setResult(kActionGoToMenu);
close();
break;
- case kQuitCmd: {
+ case kQuitCmd:
setResult(kActionShowCredits);
close();
- }
break;
case GUI::kOKCmd:
- _vm->_gameState->_globals.zipMode = _zipModeCheckbox->getState();
- _vm->_gameState->_globals.transitions = _transitionsCheckbox->getState();
- setResult(kActionNone);
+ setResult(kActionSaveSettings);
close();
break;
default:
@@ -275,6 +269,22 @@ void MystOptionsDialog::setCanReturnToMenu(bool canReturnToMenu) {
_canReturnToMenu = canReturnToMenu;
}
+bool MystOptionsDialog::getZipMode() const {
+ return _zipModeCheckbox->getState();
+}
+
+void MystOptionsDialog::setZipMode(bool enabled) {
+ _zipModeCheckbox->setState(enabled);
+}
+
+bool MystOptionsDialog::getTransitions() const {
+ return _transitionsCheckbox->getState();
+}
+
+void MystOptionsDialog::setTransitions(bool enabled) {
+ _transitionsCheckbox->setState(enabled);
+}
+
#endif
#ifdef ENABLE_RIVEN
diff --git a/engines/mohawk/dialogs.h b/engines/mohawk/dialogs.h
index a23d251878..514e5e0524 100644
--- a/engines/mohawk/dialogs.h
+++ b/engines/mohawk/dialogs.h
@@ -80,7 +80,6 @@ public:
~MohawkOptionsDialog() override;
void reflowLayout() override;
- int getResult() const { return GUI::Dialog::getResult(); }
void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
};
@@ -96,7 +95,7 @@ public:
~MystOptionsDialog() override;
enum ResultAction {
- kActionNone = 1,
+ kActionSaveSettings = 1,
kActionDropPage,
kActionShowMap,
kActionGoToMenu,
@@ -107,6 +106,11 @@ public:
void setCanShowMap(bool canShowMap);
void setCanReturnToMenu(bool canReturnToMenu);
+ bool getZipMode() const;
+ void setZipMode(bool enabled);
+ bool getTransitions() const;
+ void setTransitions(bool enabled);
+
void open() override;
void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index ed3d40d2b2..b2d04e1dd5 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -366,6 +366,9 @@ Common::Error MohawkEngine_Myst::run() {
return Common::kAudioDeviceInitFailed;
}
+ ConfMan.registerDefault("zip_mode", false);
+ ConfMan.registerDefault("transition_mode", false);
+
_gfx = new MystGraphics(this);
_video = new VideoManager(this);
_sound = new MystSound(this);
@@ -578,6 +581,14 @@ void MohawkEngine_Myst::runOptionsDialog() {
stack = _stack;
}
+ if (isGameStarted()) {
+ _optionsDialog->setZipMode(_gameState->_globals.zipMode);
+ _optionsDialog->setTransitions(_gameState->_globals.transitions);
+ } else {
+ _optionsDialog->setZipMode(ConfMan.getBool("zip_mode"));
+ _optionsDialog->setTransitions(ConfMan.getBool("transition_mode"));
+ }
+
_optionsDialog->setCanDropPage(actionsAllowed && _gameState->_globals.heldPage != kNoPage);
_optionsDialog->setCanShowMap(actionsAllowed && stack->getMap());
_optionsDialog->setCanReturnToMenu(actionsAllowed && stack->getStackId() != kDemoStack);
@@ -615,6 +626,16 @@ void MohawkEngine_Myst::runOptionsDialog() {
quitGame();
}
break;
+ case MystOptionsDialog::kActionSaveSettings:
+ if (isGameStarted()) {
+ _gameState->_globals.zipMode = _optionsDialog->getZipMode();
+ _gameState->_globals.transitions = _optionsDialog->getTransitions();
+ } else {
+ ConfMan.setBool("zip_mode", _optionsDialog->getZipMode());
+ ConfMan.setBool("transition_mode", _optionsDialog->getTransitions());
+ ConfMan.flushToDisk();
+ }
+ break;
default:
if (_optionsDialog->getLoadSlot() >= 0)
loadGameState(_optionsDialog->getLoadSlot());
@@ -1108,6 +1129,10 @@ void MohawkEngine_Myst::goToMainMenu() {
_gfx->copyBackBufferToScreen(Common::Rect(544, 333));
}
+bool MohawkEngine_Myst::isGameStarted() const {
+ return _prevStack || (_stack->getStackId() != kMenuStack);
+}
+
void MohawkEngine_Myst::resumeFromMainMenu() {
_card->leave();
_card.reset();
diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h
index b850bbd613..27fa3005ad 100644
--- a/engines/mohawk/myst.h
+++ b/engines/mohawk/myst.h
@@ -214,6 +214,7 @@ private:
void pauseEngineIntern(bool pause) override;
void goToMainMenu();
+ bool isGameStarted() const;
void dropPage();
diff --git a/engines/mohawk/myst_state.cpp b/engines/mohawk/myst_state.cpp
index 85e81da607..782d83eaf3 100644
--- a/engines/mohawk/myst_state.cpp
+++ b/engines/mohawk/myst_state.cpp
@@ -24,6 +24,7 @@
#include "mohawk/myst.h"
#include "mohawk/myst_state.h"
+#include "common/config-manager.h"
#include "common/debug.h"
#include "common/serializer.h"
#include "common/system.h"
@@ -94,6 +95,9 @@ void MystGameState::reset() {
_globals.u1 = 1;
_globals.ending = kDniNotVisited;
+ _globals.zipMode = ConfMan.getBool("zip_mode");
+ _globals.transitions = ConfMan.getBool("transition_mode");
+
// Library Bookcase Door - Default to Up
_myst.libraryBookcaseDoor = 1;
// Dock Imager Numeric Selection - Default to 67
diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp
index 1843de95ae..01977e994b 100644
--- a/engines/mohawk/riven.cpp
+++ b/engines/mohawk/riven.cpp
@@ -849,9 +849,7 @@ void MohawkEngine_Riven::runOptionsDialog() {
_optionsDialog->setTransitions(sanitizeTransitionMode(transitions));
}
- runDialog(*_optionsDialog);
-
- if (_optionsDialog->getResult() > 0) {
+ if (runDialog(*_optionsDialog) > 0) {
if (isGameStarted()) {
_vars["azip"] = _optionsDialog->getZipMode() ? 1 : 0;
_vars["waterenabled"] = _optionsDialog->getWaterEffect() ? 1 : 0;