[Scummvm-cvs-logs] SF.net SVN: scummvm:[53638] scummvm/trunk/engines/sword25

dreammaster at users.sourceforge.net dreammaster at users.sourceforge.net
Wed Oct 20 13:11:11 CEST 2010


Revision: 53638
          http://scummvm.svn.sourceforge.net/scummvm/?rev=53638&view=rev
Author:   dreammaster
Date:     2010-10-20 11:11:09 +0000 (Wed, 20 Oct 2010)

Log Message:
-----------
SWORD25: Added description field to savegames

This stores the date and time of when the game was saved, since ScummVM doesn't support getting a file's age like the original engine did.

Modified Paths:
--------------
    scummvm/trunk/engines/sword25/gfx/image/b25sloader.cpp
    scummvm/trunk/engines/sword25/kernel/filesystemutil.cpp
    scummvm/trunk/engines/sword25/kernel/filesystemutil.h
    scummvm/trunk/engines/sword25/kernel/persistenceservice.cpp

Modified: scummvm/trunk/engines/sword25/gfx/image/b25sloader.cpp
===================================================================
--- scummvm/trunk/engines/sword25/gfx/image/b25sloader.cpp	2010-10-20 10:53:50 UTC (rev 53637)
+++ scummvm/trunk/engines/sword25/gfx/image/b25sloader.cpp	2010-10-20 11:11:09 UTC (rev 53638)
@@ -45,7 +45,7 @@
 
 	while (!in.eos() && (result.size() < maxSize)) {
 		char ch = (char)in.readByte();
-		if ((ch == '\0') || (ch == ' '))
+		if (ch == '\0')
 			break;
 
 		result += ch;
@@ -65,8 +65,9 @@
 
 	// Headerinformationen der Spielstandes einlesen.
 	uint compressedGamedataSize;
-	loadString(stream);
-	loadString(stream);
+	loadString(stream);		// Marker
+	loadString(stream);		// Version
+	loadString(stream);		// Description
 	Common::String gameSize = loadString(stream);
 	compressedGamedataSize = atoi(gameSize.c_str());
 	loadString(stream);

Modified: scummvm/trunk/engines/sword25/kernel/filesystemutil.cpp
===================================================================
--- scummvm/trunk/engines/sword25/kernel/filesystemutil.cpp	2010-10-20 10:53:50 UTC (rev 53637)
+++ scummvm/trunk/engines/sword25/kernel/filesystemutil.cpp	2010-10-20 11:11:09 UTC (rev 53638)
@@ -91,15 +91,6 @@
 		return size;
 	}
 
-	virtual TimeDate getFileTime(const Common::String &filename) {
-		// TODO: There isn't any way in ScummVM to get a file's modified date/time. We will need to check
-		// what code makes use of it. If it's only the save game code, for example, we may be able to
-		// encode the date/time inside the savegame files themselves.
-		TimeDate result;
-		g_system->getTimeAndDate(result);
-		return result;
-	}
-
 	virtual bool fileExists(const Common::String &filename) {
 		Common::File f;
 		if (f.exists(filename))

Modified: scummvm/trunk/engines/sword25/kernel/filesystemutil.h
===================================================================
--- scummvm/trunk/engines/sword25/kernel/filesystemutil.h	2010-10-20 10:53:50 UTC (rev 53637)
+++ scummvm/trunk/engines/sword25/kernel/filesystemutil.h	2010-10-20 11:11:09 UTC (rev 53638)
@@ -83,11 +83,6 @@
 	virtual int32 getFileSize(const Common::String &filename) = 0;
 	/**
 	 * @param Filename      The path to a file.
-	 * @return              Returns the timestamp of the specified file.
-	 */
-	virtual TimeDate getFileTime(const Common::String &filename) = 0;
-	/**
-	 * @param Filename      The path to a file.
 	 * @return              Returns true if the file exists.
 	 */
 	virtual bool fileExists(const Common::String &filename) = 0;

Modified: scummvm/trunk/engines/sword25/kernel/persistenceservice.cpp
===================================================================
--- scummvm/trunk/engines/sword25/kernel/persistenceservice.cpp	2010-10-20 10:53:50 UTC (rev 53637)
+++ scummvm/trunk/engines/sword25/kernel/persistenceservice.cpp	2010-10-20 11:11:09 UTC (rev 53638)
@@ -87,7 +87,7 @@
 	Common::String result;
 
 	char ch = (char)in->readByte();
-	while ((ch != '\0') && (ch != ' ')) {
+	while (ch != '\0') {
 		result += ch;
 		if (result.size() >= maxSize)
 			break;
@@ -155,6 +155,7 @@
 			// Read in the header
 			Common::String storedMarker = loadString(file);
 			Common::String storedVersionID = loadString(file);
+			Common::String gameDescription = loadString(file);
 			Common::String gameDataLength = loadString(file);
 			curSavegameInfo.gamedataLength = atoi(gameDataLength.c_str());
 			Common::String gamedataUncompressedLength = loadString(file);
@@ -169,7 +170,7 @@
 				// Dateinamen des Spielstandes speichern.
 				curSavegameInfo.filename = generateSavegameFilename(slotID);
 				// Die Beschreibung des Spielstandes besteht aus einer textuellen Darstellung des \xC4nderungsdatums der Spielstanddatei.
-				curSavegameInfo.description = formatTimestamp(FileSystemUtil::getInstance().getFileTime(filename));
+				curSavegameInfo.description = gameDescription;
 				// Den Offset zu den gespeicherten Spieldaten innerhalb der Datei speichern.
 				// Dieses entspricht der aktuellen Position, da nach der letzten Headerinformation noch ein Leerzeichen als trenner folgt.
 				curSavegameInfo.gamedataOffset = static_cast<uint>(file->pos());
@@ -267,10 +268,15 @@
 	Common::OutSaveFile *file = sfm->openForSaving(filename);
 
 	file->writeString(FILE_MARKER);
-	file->writeByte(' ');
+	file->writeByte(0);
 	file->writeString(VERSIONID);
-	file->writeByte(' ');
+	file->writeByte(0);
 
+	TimeDate dt;
+	g_system->getTimeAndDate(dt);
+	file->writeString(formatTimestamp(dt));
+	file->writeByte(0);
+
 	if (file->err()) {
 		error("Unable to write header data to savegame file \"%s\".", filename.c_str());
 	}
@@ -299,10 +305,10 @@
 	char sBuffer[10];
 	snprintf(sBuffer, 10, "%ld", compressedLength);
 	file->writeString(sBuffer);
-	file->writeByte(' ');
+	file->writeByte(0);
 	snprintf(sBuffer, 10, "%u", writer.getDataSize());
 	file->writeString(sBuffer);
-	file->writeByte(' ');
+	file->writeByte(0);
 
 	// Komprimierte Daten in die Datei schreiben.
 	file->write(reinterpret_cast<char *>(&compressionBuffer[0]), compressedLength);
@@ -325,13 +331,13 @@
 		BS_LOG_WARNINGLN("The screenshot file \"%s\" does not exist. Savegame is written without a screenshot.", filename.c_str());
 	}
 
-	// Savegameinformationen f\xFCr diesen Slot aktualisieren.
-	_impl->readSlotSavegameInformation(slotID);
-
 	file->finalize();
 	delete file;
 	delete[] compressionBuffer;
 
+	// Savegameinformationen f\xFCr diesen Slot aktualisieren.
+	_impl->readSlotSavegameInformation(slotID);
+
 	// Erfolg signalisieren.
 	return true;
 }


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