[Scummvm-cvs-logs] SF.net SVN: scummvm:[42679] scummvm/trunk/engines/gob/save

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Thu Jul 23 21:50:13 CEST 2009


Revision: 42679
          http://scummvm.svn.sourceforge.net/scummvm/?rev=42679&view=rev
Author:   drmccoy
Date:     2009-07-23 19:50:13 +0000 (Thu, 23 Jul 2009)

Log Message:
-----------
Fixing a bug in the V4 save file handler, produced by a "neat" feature in Woodruff: The saves remember their position within the list and use that information to load the "correct" screen properties, making it impossible to load reordered saves correctly -.-

Modified Paths:
--------------
    scummvm/trunk/engines/gob/save/saveload.h
    scummvm/trunk/engines/gob/save/saveload_v4.cpp

Modified: scummvm/trunk/engines/gob/save/saveload.h
===================================================================
--- scummvm/trunk/engines/gob/save/saveload.h	2009-07-23 12:46:06 UTC (rev 42678)
+++ scummvm/trunk/engines/gob/save/saveload.h	2009-07-23 19:50:13 UTC (rev 42679)
@@ -289,6 +289,8 @@
 		GameHandler(GobEngine *vm, const char *target);
 		~GameHandler();
 
+		int getLastSlot() const;
+
 		int32 getSize();
 		bool load(int16 dataVar, int32 size, int32 offset);
 		bool save(int16 dataVar, int32 size, int32 offset);
@@ -317,6 +319,8 @@
 
 		File *_slotFile;
 
+		int _lastSlot;
+
 		SaveReader *_reader;
 		SaveWriter *_writer;
 

Modified: scummvm/trunk/engines/gob/save/saveload_v4.cpp
===================================================================
--- scummvm/trunk/engines/gob/save/saveload_v4.cpp	2009-07-23 12:46:06 UTC (rev 42678)
+++ scummvm/trunk/engines/gob/save/saveload_v4.cpp	2009-07-23 19:50:13 UTC (rev 42679)
@@ -84,6 +84,8 @@
 
 	_slotFile = new File(vm, target);
 
+	_lastSlot = -1;
+
 	_writer = 0;
 	_reader = 0;
 }
@@ -94,6 +96,10 @@
 	delete _writer;
 }
 
+int SaveLoad_v4::GameHandler::getLastSlot() const {
+	return _lastSlot;
+}
+
 int32 SaveLoad_v4::GameHandler::getSize() {
 	// Fake an empty save file for the very first query, to get clear properties
 	if (_firstSize) {
@@ -178,6 +184,7 @@
 		if (!vars.writeInto(0, 0, varSize))
 			return false;
 
+		_lastSlot = slot;
 	}
 
 	return true;
@@ -261,6 +268,7 @@
 		if (!_writer->writePart(1, &vars))
 			return false;
 
+		_lastSlot = slot;
 	}
 
 	return true;
@@ -465,7 +473,11 @@
 		return false;
 	}
 
-	return _gameHandler->loadScreenProps(_file->getSlot(offset), _curProps->_props);
+	int slot = _gameHandler->getLastSlot();
+	if (slot == -1)
+		slot = _file->getSlot(offset);
+
+	return _gameHandler->loadScreenProps(slot, _curProps->_props);
 }
 
 bool SaveLoad_v4::ScreenPropsHandler::save(int16 dataVar, int32 size, int32 offset) {
@@ -474,7 +486,11 @@
 		return false;
 	}
 
-	return _gameHandler->saveScreenProps(_file->getSlot(offset), _curProps->_props);
+	int slot = _gameHandler->getLastSlot();
+	if (slot == -1)
+		slot = _file->getSlot(offset);
+
+	return _gameHandler->saveScreenProps(slot, _curProps->_props);
 }
 
 


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