aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2011-05-03 20:13:53 +1000
committerPaul Gilbert2011-05-03 20:14:20 +1000
commit4f70162d94bf4a7a18e0b42e48bbdabf39cb84f8 (patch)
tree8bbf02ef1ee8f935faada506db2ecdcd826c6087
parentb737dcbad5ae0fde2780f44c351fd342aa91d88b (diff)
downloadscummvm-rg350-4f70162d94bf4a7a18e0b42e48bbdabf39cb84f8.tar.gz
scummvm-rg350-4f70162d94bf4a7a18e0b42e48bbdabf39cb84f8.tar.bz2
scummvm-rg350-4f70162d94bf4a7a18e0b42e48bbdabf39cb84f8.zip
TSAGE: Bugfixes to savegames when the scene is showing an alternate screen
-rw-r--r--engines/tsage/converse.cpp2
-rw-r--r--engines/tsage/core.cpp2
-rw-r--r--engines/tsage/scenes.cpp15
3 files changed, 13 insertions, 6 deletions
diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp
index c4358dc4b2..82420b2bd8 100644
--- a/engines/tsage/converse.cpp
+++ b/engines/tsage/converse.cpp
@@ -53,6 +53,8 @@ void SequenceManager::setup() {
}
void SequenceManager::synchronise(Serialiser &s) {
+ Action::synchronise(s);
+
s.syncAsSint32LE(_resNum);
s.syncAsSint32LE(_sequenceOffset);
s.syncAsByte(_keepActive);
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index f03f10ffd2..51f472a4f7 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -110,8 +110,6 @@ Action::Action() {
void Action::synchronise(Serialiser &s) {
EventHandler::synchronise(s);
- if (s.isLoading())
- remove();
SYNC_POINTER(_owner);
s.syncAsSint32LE(_actionIndex);
diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp
index 9a99049c19..a59c86c97d 100644
--- a/engines/tsage/scenes.cpp
+++ b/engines/tsage/scenes.cpp
@@ -62,9 +62,13 @@ void SceneManager::checkScene() {
}
void SceneManager::sceneChange() {
+ int activeScreenNumber = 0;
+
// Handle removing the scene
- if (_scene)
+ if (_scene) {
+ activeScreenNumber = _scene->_activeScreenNumber;
_scene->remove();
+ }
// Clear the scene objects
SynchronisedList<SceneObject *>::iterator io = _globals->_sceneObjects->begin();
@@ -122,7 +126,7 @@ void SceneManager::sceneChange() {
if (!_saver->getMacroRestoreFlag())
_scene->postInit();
else
- _scene->loadScene(_sceneNumber);
+ _scene->loadScene(activeScreenNumber);
}
Scene *SceneManager::getNewScene() {
@@ -225,15 +229,16 @@ void SceneManager::setBgOffset(const Common::Point &pt, int loadCount) {
void SceneManager::listenerSynchronise(Serialiser &s) {
s.validate("SceneManager");
- _altSceneObjects.synchronise(s);
+ _altSceneObjects.synchronise(s);
s.syncAsSint32LE(_sceneNumber);
+ s.syncAsUint16LE(_globals->_sceneManager._scene->_activeScreenNumber);
+
if (s.isLoading()) {
changeScene(_sceneNumber);
checkScene();
}
- s.syncAsUint16LE(_globals->_sceneManager._scene->_activeScreenNumber);
_globals->_sceneManager._scrollerRect.synchronise(s);
SYNC_POINTER(_globals->_scrollFollower);
s.syncAsSint16LE(_loadMode);
@@ -252,6 +257,8 @@ Scene::~Scene() {
}
void Scene::synchronise(Serialiser &s) {
+ StripCallback::synchronise(s);
+
s.syncAsSint32LE(_field12);
s.syncAsSint32LE(_screenNumber);
s.syncAsSint32LE(_activeScreenNumber);