aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/savegame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/savegame.cpp')
-rw-r--r--engines/sci/engine/savegame.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp
index 720f6783ee..5184874064 100644
--- a/engines/sci/engine/savegame.cpp
+++ b/engines/sci/engine/savegame.cpp
@@ -764,17 +764,33 @@ void GfxPalette::saveLoadWithSerializer(Common::Serializer &s) {
palVaryRemoveTimer();
s.syncAsSint32LE(_palVaryResourceId);
- if (_palVaryResourceId != -1) {
- palVarySaveLoadPalette(s, &_palVaryOriginPalette);
- palVarySaveLoadPalette(s, &_palVaryTargetPalette);
+ if (_palVaryResourceId != -1 || s.getVersion() >= 40) {
+ if (_palVaryResourceId != -1) {
+ palVarySaveLoadPalette(s, &_palVaryOriginPalette);
+ palVarySaveLoadPalette(s, &_palVaryTargetPalette);
+ }
s.syncAsSint16LE(_palVaryStep);
s.syncAsSint16LE(_palVaryStepStop);
s.syncAsSint16LE(_palVaryDirection);
s.syncAsUint16LE(_palVaryTicks);
s.syncAsSint32LE(_palVaryPaused);
+ if (s.getVersion() >= 40)
+ s.syncAsSint32LE(_palVarySignal);
}
- _palVarySignal = 0;
+ if (s.isLoading() && s.getVersion() < 40) {
+ // Reset _palVaryPaused to 0 when loading an old savegame.
+ // Before version 40, we didn't restore or reset _palVaryPaused.
+ // In QfG3 this could get it stuck at positive values (bug #9674).
+ //
+ // Other SCI11 games don't appear to use palVaryPaused at all.
+ // (Looked at eq2, freddy, kq6, lb2, mgoose11, pq1, qg1, sq4, sq5)
+ _palVaryPaused = 0;
+
+ // Clear any pending updates, since _palVarySignal also wasn't saved
+ // before version 40.
+ _palVarySignal = 0;
+ }
if (s.isLoading() && _palVaryResourceId != -1) {
palVaryInstallTimer();