aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/detection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/kyra/detection.cpp')
-rw-r--r--engines/kyra/detection.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp
index 834f9f70c6..06d96d57bb 100644
--- a/engines/kyra/detection.cpp
+++ b/engines/kyra/detection.cpp
@@ -1068,6 +1068,7 @@ public:
bool createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const;
SaveStateList listSaves(const char *target) const;
void removeSaveState(const char *target, int slot) const;
+ Graphics::Surface *loadThumbnailFromSlot(const char *target, int slot) const;
};
bool KyraMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -1075,7 +1076,8 @@ bool KyraMetaEngine::hasFeature(MetaEngineFeature f) const {
(f == kSupportsRTL) ||
(f == kSupportsListSaves) ||
(f == kSupportsDirectLoad) ||
- (f == kSupportsDeleteSave);
+ (f == kSupportsDeleteSave) ||
+ (f == kSupportsThumbnails);
}
bool KyraMetaEngine::createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const {
@@ -1201,6 +1203,22 @@ void KyraMetaEngine::removeSaveState(const char *target, int slot) const {
}
+Graphics::Surface *KyraMetaEngine::loadThumbnailFromSlot(const char *target, int slot) const {
+ char extension[6];
+ snprintf(extension, sizeof(extension), ".%03d", slot);
+
+ Common::String filename = target;
+ filename += extension;
+
+ Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(filename.c_str());
+ Kyra::KyraEngine_v1::SaveHeader header;
+
+ if (in && Kyra::KyraEngine_v1::readSaveHeader(in, true, header) == Kyra::KyraEngine_v1::kRSHENoError)
+ return header.thumbnail;
+
+ return 0;
+}
+
#if PLUGIN_ENABLED_DYNAMIC(KYRA)
REGISTER_PLUGIN_DYNAMIC(KYRA, PLUGIN_TYPE_ENGINE, KyraMetaEngine);
#else