Properly fixing the Lost in Time temp sprite issue

svn-id: r43654
This commit is contained in:
Sven Hesse 2009-08-22 15:46:43 +00:00
parent bed3980ab1
commit c70a874506
4 changed files with 20 additions and 2 deletions

View file

@ -229,6 +229,9 @@ int32 TempSpriteHandler::getSize() {
} }
bool TempSpriteHandler::load(int16 dataVar, int32 size, int32 offset) { bool TempSpriteHandler::load(int16 dataVar, int32 size, int32 offset) {
if (isDummy(size))
return true;
// Sprite available? // Sprite available?
if (!_sprite) if (!_sprite)
return false; return false;
@ -274,6 +277,9 @@ bool TempSpriteHandler::load(int16 dataVar, int32 size, int32 offset) {
bool TempSpriteHandler::save(int16 dataVar, int32 size, int32 offset) { bool TempSpriteHandler::save(int16 dataVar, int32 size, int32 offset) {
SurfaceDescPtr sprite; SurfaceDescPtr sprite;
if (isDummy(size))
return true;
if (!createSprite(dataVar, size, offset, &sprite)) if (!createSprite(dataVar, size, offset, &sprite))
return false; return false;
@ -320,6 +326,12 @@ bool TempSpriteHandler::createSprite(int16 dataVar, int32 size,
return true; 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 // A negative size is the flag for using a sprite
bool TempSpriteHandler::isSprite(int32 size) { bool TempSpriteHandler::isSprite(int32 size) {
return (size < 0); return (size < 0);

View file

@ -144,6 +144,8 @@ public:
protected: protected:
SavePartSprite *_sprite; SavePartSprite *_sprite;
/** Determine whether it's a dummy sprite save/load. */
static bool isDummy(int32 size);
/** Determine whether using a sprite was requested. */ /** Determine whether using a sprite was requested. */
static bool isSprite(int32 size); static bool isSprite(int32 size);
/** Determine which sprite is meant. */ /** Determine which sprite is meant. */

View file

@ -256,6 +256,7 @@ protected:
GameHandler *_gameHandler; GameHandler *_gameHandler;
NotesHandler *_notesHandler; NotesHandler *_notesHandler;
TempSpriteHandler *_tempSpriteHandler;
ScreenshotHandler *_screenshotHandler; ScreenshotHandler *_screenshotHandler;
SaveHandler *getHandler(const char *fileName) const; SaveHandler *getHandler(const char *fileName) const;

View file

@ -33,8 +33,8 @@ namespace Gob {
SaveLoad_v3::SaveFile SaveLoad_v3::_saveFiles[] = { SaveLoad_v3::SaveFile SaveLoad_v3::_saveFiles[] = {
{ "cat.inf", kSaveModeSave , 0, "savegame"}, { "cat.inf", kSaveModeSave , 0, "savegame"},
{ "ima.inf", kSaveModeSave , 0, "screenshot"}, { "ima.inf", kSaveModeSave , 0, "screenshot"},
{ "intro.$$$", kSaveModeSave , 0, "temporary sprite"},
{ "bloc.inf", kSaveModeSave , 0, "notes"}, { "bloc.inf", kSaveModeSave , 0, "notes"},
{ "intro.$$$", kSaveModeIgnore, 0, "temporary sprite"},
{ "prot", kSaveModeIgnore, 0, 0}, { "prot", kSaveModeIgnore, 0, 0},
{ "config", 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); _screenshotHandler = new ScreenshotHandler(vm, _gameHandler, sShotType);
} }
_tempSpriteHandler = new TempSpriteHandler(vm);
_notesHandler = new NotesHandler(2560, vm, targetName); _notesHandler = new NotesHandler(2560, vm, targetName);
_saveFiles[0].handler = _gameHandler; _saveFiles[0].handler = _gameHandler;
_saveFiles[1].handler = _screenshotHandler; _saveFiles[1].handler = _screenshotHandler;
_saveFiles[2].handler = _notesHandler; _saveFiles[2].handler = _tempSpriteHandler;
_saveFiles[3].handler = _notesHandler;
} }
SaveLoad_v3::~SaveLoad_v3() { SaveLoad_v3::~SaveLoad_v3() {
delete _screenshotHandler; delete _screenshotHandler;
delete _gameHandler; delete _gameHandler;
delete _notesHandler; delete _notesHandler;
delete _tempSpriteHandler;
} }
const SaveLoad_v3::SaveFile *SaveLoad_v3::getSaveFile(const char *fileName) const { const SaveLoad_v3::SaveFile *SaveLoad_v3::getSaveFile(const char *fileName) const {