From c70a8745068095227cac1db6054d55db0a0405ad Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Sat, 22 Aug 2009 15:46:43 +0000 Subject: [PATCH] Properly fixing the Lost in Time temp sprite issue svn-id: r43654 --- engines/gob/save/savehandler.cpp | 12 ++++++++++++ engines/gob/save/savehandler.h | 2 ++ engines/gob/save/saveload.h | 1 + engines/gob/save/saveload_v3.cpp | 7 +++++-- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/engines/gob/save/savehandler.cpp b/engines/gob/save/savehandler.cpp index 4e2c09bdcae..5f24115a6c5 100644 --- a/engines/gob/save/savehandler.cpp +++ b/engines/gob/save/savehandler.cpp @@ -229,6 +229,9 @@ int32 TempSpriteHandler::getSize() { } bool TempSpriteHandler::load(int16 dataVar, int32 size, int32 offset) { + if (isDummy(size)) + return true; + // Sprite available? if (!_sprite) return false; @@ -274,6 +277,9 @@ bool TempSpriteHandler::load(int16 dataVar, int32 size, int32 offset) { bool TempSpriteHandler::save(int16 dataVar, int32 size, int32 offset) { SurfaceDescPtr sprite; + if (isDummy(size)) + return true; + if (!createSprite(dataVar, size, offset, &sprite)) return false; @@ -320,6 +326,12 @@ bool TempSpriteHandler::createSprite(int16 dataVar, int32 size, return true; } +// A size of 0 means no proper sprite should be saved/loaded, +// but no error should be thrown either. +bool TempSpriteHandler::isDummy(int32 size) { + return (size == 0); +} + // A negative size is the flag for using a sprite bool TempSpriteHandler::isSprite(int32 size) { return (size < 0); diff --git a/engines/gob/save/savehandler.h b/engines/gob/save/savehandler.h index 55505d1b9aa..6a7e563a8f0 100644 --- a/engines/gob/save/savehandler.h +++ b/engines/gob/save/savehandler.h @@ -144,6 +144,8 @@ public: protected: SavePartSprite *_sprite; + /** Determine whether it's a dummy sprite save/load. */ + static bool isDummy(int32 size); /** Determine whether using a sprite was requested. */ static bool isSprite(int32 size); /** Determine which sprite is meant. */ diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h index 8a7d493aed3..8e1240daf1f 100644 --- a/engines/gob/save/saveload.h +++ b/engines/gob/save/saveload.h @@ -256,6 +256,7 @@ protected: GameHandler *_gameHandler; NotesHandler *_notesHandler; + TempSpriteHandler *_tempSpriteHandler; ScreenshotHandler *_screenshotHandler; SaveHandler *getHandler(const char *fileName) const; diff --git a/engines/gob/save/saveload_v3.cpp b/engines/gob/save/saveload_v3.cpp index 064d4723230..bb60f947253 100644 --- a/engines/gob/save/saveload_v3.cpp +++ b/engines/gob/save/saveload_v3.cpp @@ -33,8 +33,8 @@ namespace Gob { SaveLoad_v3::SaveFile SaveLoad_v3::_saveFiles[] = { { "cat.inf", kSaveModeSave , 0, "savegame"}, { "ima.inf", kSaveModeSave , 0, "screenshot"}, + { "intro.$$$", kSaveModeSave , 0, "temporary sprite"}, { "bloc.inf", kSaveModeSave , 0, "notes"}, - { "intro.$$$", kSaveModeIgnore, 0, "temporary sprite"}, { "prot", kSaveModeIgnore, 0, 0}, { "config", kSaveModeIgnore, 0, 0} }; @@ -496,17 +496,20 @@ SaveLoad_v3::SaveLoad_v3(GobEngine *vm, const char *targetName, ScreenshotType s _screenshotHandler = new ScreenshotHandler(vm, _gameHandler, sShotType); } + _tempSpriteHandler = new TempSpriteHandler(vm); _notesHandler = new NotesHandler(2560, vm, targetName); _saveFiles[0].handler = _gameHandler; _saveFiles[1].handler = _screenshotHandler; - _saveFiles[2].handler = _notesHandler; + _saveFiles[2].handler = _tempSpriteHandler; + _saveFiles[3].handler = _notesHandler; } SaveLoad_v3::~SaveLoad_v3() { delete _screenshotHandler; delete _gameHandler; delete _notesHandler; + delete _tempSpriteHandler; } const SaveLoad_v3::SaveFile *SaveLoad_v3::getSaveFile(const char *fileName) const {