diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/scumm/detection.cpp | 8 | ||||
-rw-r--r-- | engines/scumm/saveload.cpp | 31 | ||||
-rw-r--r-- | engines/scumm/scumm.h | 8 |
3 files changed, 25 insertions, 22 deletions
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp index 1062e77114..af1838b27d 100644 --- a/engines/scumm/detection.cpp +++ b/engines/scumm/detection.cpp @@ -683,6 +683,7 @@ public: virtual SaveStateList listSaves(const char *target) const; virtual void removeSaveState(const char *target, int slot) const; + virtual Graphics::Surface *loadThumbnailFromSlot(const char *target, int slot) const; }; bool ScummMetaEngine::hasFeature(MetaEngineFeature f) const { @@ -690,7 +691,8 @@ bool ScummMetaEngine::hasFeature(MetaEngineFeature f) const { (f == kSupportsRTL) || (f == kSupportsListSaves) || (f == kSupportsDirectLoad) || - (f == kSupportsDeleteSave); + (f == kSupportsDeleteSave) || + (f == kSupportsThumbnails); } GameList ScummMetaEngine::getSupportedGames() const { @@ -986,6 +988,10 @@ void ScummMetaEngine::removeSaveState(const char *target, int slot) const { g_system->getSavefileManager()->removeSavefile(filename.c_str()); } +Graphics::Surface *ScummMetaEngine::loadThumbnailFromSlot(const char *target, int slot) const { + return ScummEngine::loadThumbnailFromSlot(target, slot); +} + #if PLUGIN_ENABLED_DYNAMIC(SCUMM) REGISTER_PLUGIN_DYNAMIC(SCUMM, PLUGIN_TYPE_ENGINE, ScummMetaEngine); #else diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp index eb7cf1ba56..a747bc2629 100644 --- a/engines/scumm/saveload.cpp +++ b/engines/scumm/saveload.cpp @@ -73,20 +73,6 @@ struct SaveInfoSection { #define INFOSECTION_VERSION 2 -Graphics::Surface *ScummEngine::loadThumbnail(Common::SeekableReadStream *file) { - if (!Graphics::checkThumbnailHeader(*file)) - return 0; - - Graphics::Surface *thumb = new Graphics::Surface(); - assert(thumb); - if (!Graphics::loadThumbnail(*file, *thumb)) { - delete thumb; - return 0; - } - - return thumb; -} - #pragma mark - void ScummEngine::requestSave(int slot, const char *name, bool temporary) { @@ -494,7 +480,7 @@ bool getSavegameName(Common::InSaveFile *in, Common::String &desc, int heversion return true; } -Graphics::Surface *ScummEngine::loadThumbnailFromSlot(int slot) { +Graphics::Surface *ScummEngine::loadThumbnailFromSlot(const char *target, int slot) { char filename[256]; Common::SeekableReadStream *in; SaveGameHeader hdr; @@ -502,8 +488,9 @@ Graphics::Surface *ScummEngine::loadThumbnailFromSlot(int slot) { if (slot < 0) return 0; - makeSavegameName(filename, slot, false); - if (!(in = _saveFileMan->openForLoading(filename))) { + // TODO: Remove code duplication (check: makeSavegameName) + snprintf(filename, sizeof(filename), "%s.s%02d", target, slot); + if (!(in = g_system->getSavefileManager()->openForLoading(filename))) { return 0; } @@ -519,7 +506,15 @@ Graphics::Surface *ScummEngine::loadThumbnailFromSlot(int slot) { return 0; } - Graphics::Surface *thumb = loadThumbnail(in); + Graphics::Surface *thumb = 0; + if (Graphics::checkThumbnailHeader(*in)) { + thumb = new Graphics::Surface(); + assert(thumb); + if (!Graphics::loadThumbnail(*in, *thumb)) { + delete thumb; + thumb = 0; + } + } delete in; return thumb; diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index 3667e5770d..7db40112d8 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -627,12 +627,14 @@ public: // thumbnail + info stuff public: - Graphics::Surface *loadThumbnailFromSlot(int slot); + Graphics::Surface *loadThumbnailFromSlot(int slot) { + return loadThumbnailFromSlot(_targetName.c_str(), slot); + } + static Graphics::Surface *loadThumbnailFromSlot(const char *target, int slot); + bool loadInfosFromSlot(int slot, InfoStuff *stuff); protected: - Graphics::Surface *loadThumbnail(Common::SeekableReadStream *file); - void saveInfos(Common::WriteStream* file); bool loadInfos(Common::SeekableReadStream *file, InfoStuff *stuff); |