aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/saga/interface.cpp10
-rw-r--r--engines/saga/scene.cpp13
-rw-r--r--engines/saga/sfuncs.cpp5
3 files changed, 15 insertions, 13 deletions
diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp
index c7054436d9..941262e10e 100644
--- a/engines/saga/interface.cpp
+++ b/engines/saga/interface.cpp
@@ -369,18 +369,18 @@ int Interface::deactivate() {
}
void Interface::rememberMode() {
- assert (_savedMode == -1);
+ debug(1, "rememberMode(%d)", _savedMode);
_savedMode = _panelMode;
-
- debug(1, "rememberMode(%d)", _savedMode);
}
void Interface::restoreMode(bool draw_) {
- assert (_savedMode != -1);
-
debug(1, "restoreMode(%d)", _savedMode);
+ // If _savedMode is -1 by a race condition, set it to kPanelMain
+ if (_savedMode == -1)
+ _savedMode = kPanelMain;
+
_panelMode = _savedMode;
_savedMode = -1;
diff --git a/engines/saga/scene.cpp b/engines/saga/scene.cpp
index 6e51296bad..3c98421361 100644
--- a/engines/saga/scene.cpp
+++ b/engines/saga/scene.cpp
@@ -1361,12 +1361,13 @@ void Scene::clearPlacard() {
}
void Scene::clearPsychicProfile() {
- _vm->_scene->clearPlacard();
- _vm->_actor->showActors(false);
- _vm->_gfx->restorePalette();
- _vm->_scene->restoreScene();
- _vm->_interface->setMode(kPanelMain);
- _vm->_interface->activate();
+ if (_vm->_interface->getMode() == kPanelPlacard) {
+ _vm->_scene->clearPlacard();
+ _vm->_actor->showActors(false);
+ _vm->_gfx->restorePalette();
+ _vm->_scene->restoreScene();
+ _vm->_interface->activate();
+ }
}
void Scene::showIHNMDemoSpecialScreen() {
diff --git a/engines/saga/sfuncs.cpp b/engines/saga/sfuncs.cpp
index 61d8caaaf0..ef1ecd587f 100644
--- a/engines/saga/sfuncs.cpp
+++ b/engines/saga/sfuncs.cpp
@@ -1519,8 +1519,9 @@ void Script::sfPsychicProfile(SCRIPTFUNC_PARAMS) {
void Script::sfPsychicProfileOff(SCRIPTFUNC_PARAMS) {
thread->wait(kWaitTypePlacard);
- // This is not used
- //_vm->_scene->clearPsychicProfile();
+ // This is called a while after the psychic profile is
+ // opened, to close it automatically
+ _vm->_scene->clearPsychicProfile();
}
// Script function #50 (0x32)