aboutsummaryrefslogtreecommitdiff
path: root/engines/cryomni3d/detection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/cryomni3d/detection.cpp')
-rw-r--r--engines/cryomni3d/detection.cpp67
1 files changed, 31 insertions, 36 deletions
diff --git a/engines/cryomni3d/detection.cpp b/engines/cryomni3d/detection.cpp
index 00f84806e9..1de22f4b1f 100644
--- a/engines/cryomni3d/detection.cpp
+++ b/engines/cryomni3d/detection.cpp
@@ -109,10 +109,8 @@ public:
virtual bool hasFeature(MetaEngineFeature f) const;
virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const;
virtual SaveStateList listSaves(const char *target) const;
- SaveStateList listSavesForPrefix(const char *prefix, const char *extension) const;
virtual int getMaximumSaveSlot() const { return 999; }
virtual void removeSaveState(const char *target, int slot) const;
- virtual SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
};
bool CryOmni3DMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -120,50 +118,47 @@ bool CryOmni3DMetaEngine::hasFeature(MetaEngineFeature f) const {
(f == kSupportsListSaves)
|| (f == kSupportsLoadingDuringStartup)
|| (f == kSupportsDeleteSave)
- || (f == kSavesSupportMetaInfo)
- || (f == kSavesSupportThumbnail)
- || (f == kSavesSupportCreationDate)
- || (f == kSavesSupportPlayTime);
-}
-
-SaveStateList CryOmni3DMetaEngine::listSavesForPrefix(const char *prefix,
- const char *extension) const {
- Common::String pattern = Common::String::format("%s-###.%s", prefix, extension);
- Common::StringArray filenames = g_system->getSavefileManager()->listSavefiles(pattern);
- size_t prefixLen = strlen(prefix);
-
- SaveStateList saveList;
- for (Common::StringArray::const_iterator filename = filenames.begin(); filename != filenames.end();
- ++filename) {
- // Extract the slot number from the filename
- char slot[4];
- slot[0] = (*filename)[prefixLen + 1];
- slot[1] = (*filename)[prefixLen + 2];
- slot[2] = (*filename)[prefixLen + 3];
- slot[3] = '\0';
-
- int slotNum = atoi(slot);
-
- saveList.push_back(SaveStateDescriptor(slotNum, ""));
- }
-
- Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator());
-
- return saveList;
+ || (f == kSimpleSavesNames);
}
SaveStateList CryOmni3DMetaEngine::listSaves(const char *target) const {
+ // Replicate constant here to shorten lines
+ static const uint kSaveDescriptionLen = CryOmni3D::CryOmni3DEngine::kSaveDescriptionLen;
SaveStateList saveList;
+ Common::SaveFileManager *saveMan = g_system->getSavefileManager();
+
+ char saveName[kSaveDescriptionLen + 1];
+ saveName[kSaveDescriptionLen] = '\0';
+ Common::String pattern = Common::String::format("%s.????", target);
+ Common::StringArray filenames = saveMan->listSavefiles(pattern);
+ sort(filenames.begin(), filenames.end()); // Sort (hopefully ensuring we are sorted numerically..)
+
+ int slotNum;
+
+ for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end();
+ ++file) {
+ // Obtain the last 4 digits of the filename, since they correspond to the save slot
+ slotNum = atoi(file->c_str() + file->size() - 4);
+
+ if (slotNum >= 1 && slotNum <= 99) {
+ Common::InSaveFile *in = saveMan->openForLoading(*file);
+ if (in) {
+ if (in->read(saveName, kSaveDescriptionLen) == kSaveDescriptionLen) {
+ saveList.push_back(SaveStateDescriptor(slotNum - 1, saveName));
+ }
+ delete in;
+ }
+ }
+ }
+
return saveList;
}
void CryOmni3DMetaEngine::removeSaveState(const char *target, int slot) const {
+ Common::String filename = Common::String::format("%s.%04d", target, slot + 1);
-}
-
-SaveStateDescriptor CryOmni3DMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
- return SaveStateDescriptor();
+ g_system->getSavefileManager()->removeSavefile(filename);
}
bool CryOmni3DMetaEngine::createInstance(OSystem *syst, Engine **engine,