aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2013-10-10 22:49:14 -0400
committerPaul Gilbert2013-10-10 22:49:14 -0400
commit22af86340e8462ab8cca73f502684852a9166cfb (patch)
treeccb770d4f1af948b4d6c6359f202d4722f134dbf /engines
parente7df8b60e15b4106a54eaff138316b6568d56517 (diff)
downloadscummvm-rg350-22af86340e8462ab8cca73f502684852a9166cfb.tar.gz
scummvm-rg350-22af86340e8462ab8cca73f502684852a9166cfb.tar.bz2
scummvm-rg350-22af86340e8462ab8cca73f502684852a9166cfb.zip
TSAGE: Cleaner implementation of saving disable code
Diffstat (limited to 'engines')
-rw-r--r--engines/tsage/core.cpp3
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.cpp9
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.h1
3 files changed, 8 insertions, 5 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 5261081caa..bd7610c9f9 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -2817,9 +2817,8 @@ void BackgroundSceneObject::copySceneToBackground() {
// WORKAROUND: Since savegames don't store the active screen data, once we copy the
// foreground objects to the background, we have to prevent the scene being saved.
- // I do this the easiest way, by using the existing animationCtr global
if (g_vm->getGameID() == GType_Ringworld2)
- ++R2_GLOBALS._animationCtr;
+ ((Ringworld2::SceneExt *)GLOBALS._sceneManager._scene)->_preventSaving = true;
}
/*--------------------------------------------------------------------------*/
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index fc06b204cd..bd908504ad 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -321,9 +321,11 @@ bool Ringworld2Game::canLoadGameStateCurrently() {
* Returns true if it is currently okay to save the game
*/
bool Ringworld2Game::canSaveGameStateCurrently() {
- // Don't allow a game to be saved if a dialog is active or if an animation
- // is playing
- return g_globals->_gfxManagers.size() == 1 && R2_GLOBALS._animationCtr == 0;
+ // Don't allow a game to be saved if a dialog is active, or if an animation
+ // is playing, or if an active scene prevents it
+ return g_globals->_gfxManagers.size() == 1 && R2_GLOBALS._animationCtr == 0 &&
+ (!R2_GLOBALS._sceneManager._scene ||
+ !((SceneExt *)R2_GLOBALS._sceneManager._scene)->_preventSaving);
}
/*--------------------------------------------------------------------------*/
@@ -338,6 +340,7 @@ SceneExt::SceneExt(): Scene() {
_savedPlayerEnabled = false;
_savedUiEnabled = false;
_savedCanWalk = false;
+ _preventSaving = false;
// WORKAROUND: In the original, playing animations don't reset the global _animationCtr
// counter as scene changes unless the playing animation explicitly finishes. For now,
diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h
index aeac2fdd6a..5c8af8d884 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.h
+++ b/engines/tsage/ringworld2/ringworld2_logic.h
@@ -85,6 +85,7 @@ public:
bool _savedPlayerEnabled;
bool _savedUiEnabled;
bool _savedCanWalk;
+ bool _preventSaving;
Visage _cursorVisage;
SynchronizedList<EventHandler *> _sceneAreas;