[Scummvm-cvs-logs] SF.net SVN: scummvm:[35026] scummvm/trunk/engines/sky/detection.cpp
thebluegr at users.sourceforge.net
thebluegr at users.sourceforge.net
Wed Nov 12 22:08:51 CET 2008
Revision: 35026
http://scummvm.svn.sourceforge.net/scummvm/?rev=35026&view=rev
Author: thebluegr
Date: 2008-11-12 21:08:50 +0000 (Wed, 12 Nov 2008)
Log Message:
-----------
Deleting save states via the launcher and the GMM is now supported in the sky engine
Modified Paths:
--------------
scummvm/trunk/engines/sky/detection.cpp
Modified: scummvm/trunk/engines/sky/detection.cpp
===================================================================
--- scummvm/trunk/engines/sky/detection.cpp 2008-11-12 20:54:06 UTC (rev 35025)
+++ scummvm/trunk/engines/sky/detection.cpp 2008-11-12 21:08:50 UTC (rev 35026)
@@ -75,6 +75,7 @@
virtual SaveStateList listSaves(const char *target) const;
virtual int getMaximumSaveSlot() const;
+ virtual void removeSaveState(const char *target, int slot) const;
};
const char *SkyMetaEngine::getName() const {
@@ -88,7 +89,8 @@
bool SkyMetaEngine::hasFeature(MetaEngineFeature f) const {
return
(f == kSupportsListSaves) ||
- (f == kSupportsLoadingDuringStartup);
+ (f == kSupportsLoadingDuringStartup) ||
+ (f == kSupportsDeleteSave);
}
bool Sky::SkyEngine::hasFeature(EngineFeature f) const {
@@ -220,6 +222,53 @@
int SkyMetaEngine::getMaximumSaveSlot() const { return MAX_SAVE_GAMES; }
+void SkyMetaEngine::removeSaveState(const char *target, int slot) const {
+ if (slot == 0) // do not delete the auto save
+ return;
+
+ Common::SaveFileManager *saveFileMan = g_system->getSavefileManager();
+ char fName[20];
+ sprintf(fName,"SKY-VM.%03d", slot - 1);
+ g_system->getSavefileManager()->removeSavefile(fName);
+
+ // Load current save game descriptions
+ Common::StringList savenames;
+ savenames.resize(MAX_SAVE_GAMES+1);
+ Common::InSaveFile *inf;
+ inf = saveFileMan->openForLoading("SKY-VM.SAV");
+ if (inf != NULL) {
+ char *tmpBuf = new char[MAX_SAVE_GAMES * MAX_TEXT_LEN];
+ char *tmpPtr = tmpBuf;
+ inf->read(tmpBuf, MAX_SAVE_GAMES * MAX_TEXT_LEN);
+ for (int i = 0; i < MAX_SAVE_GAMES; ++i) {
+ savenames[i] = tmpPtr;
+ tmpPtr += savenames[i].size() + 1;
+ }
+ delete inf;
+ delete[] tmpBuf;
+ }
+
+ // Update the save game description at the given slot
+ savenames[slot - 1] = "";
+
+ // Save the updated descriptions
+ Common::OutSaveFile *outf;
+
+ outf = saveFileMan->openForSaving("SKY-VM.SAV");
+ bool ioFailed = true;
+ if (outf) {
+ for (uint16 cnt = 0; cnt < MAX_SAVE_GAMES; cnt++) {
+ outf->write(savenames[cnt].c_str(), savenames[cnt].size() + 1);
+ }
+ outf->finalize();
+ if (!outf->ioFailed())
+ ioFailed = false;
+ delete outf;
+ }
+ if (ioFailed)
+ warning("Unable to store Savegame names to file SKY-VM.SAV. (%s)", saveFileMan->popErrorDesc().c_str());
+}
+
#if PLUGIN_ENABLED_DYNAMIC(SKY)
REGISTER_PLUGIN_DYNAMIC(SKY, PLUGIN_TYPE_ENGINE, SkyMetaEngine);
#else
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list