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

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Fri Jan 21 14:28:37 CET 2011


Revision: 55374
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55374&view=rev
Author:   drmccoy
Date:     2011-01-21 13:28:35 +0000 (Fri, 21 Jan 2011)

Log Message:
-----------
GOB: Make the Cemetary/Lab screen work correctly

Saving there still won't work though

Modified Paths:
--------------
    scummvm/trunk/engines/gob/inter_v5.cpp
    scummvm/trunk/engines/gob/save/savehandler.cpp
    scummvm/trunk/engines/gob/save/savehandler.h
    scummvm/trunk/engines/gob/save/saveload.cpp
    scummvm/trunk/engines/gob/save/saveload.h
    scummvm/trunk/engines/gob/save/saveload_v6.cpp

Modified: scummvm/trunk/engines/gob/inter_v5.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter_v5.cpp	2011-01-21 12:24:18 UTC (rev 55373)
+++ scummvm/trunk/engines/gob/inter_v5.cpp	2011-01-21 13:28:35 UTC (rev 55374)
@@ -26,12 +26,15 @@
 #include "common/endian.h"
 #include "common/file.h"
 
+#include "gui/message.h"
+
 #include "gob/gob.h"
 #include "gob/inter.h"
 #include "gob/global.h"
 #include "gob/game.h"
 #include "gob/script.h"
 #include "gob/draw.h"
+#include "gob/save/saveload.h"
 
 namespace Gob {
 
@@ -95,8 +98,20 @@
 
 void Inter_v5::o5_deleteFile() {
 	_vm->_game->_script->evalExpr(0);
+	char *file = _vm->_game->_script->getResultStr();
 
-	warning("deleteFile: \"%s\"", _vm->_game->_script->getResultStr());
+	debugC(2, kDebugFileIO, "Delete file \"%s\"", file);
+
+	SaveLoad::SaveMode mode = _vm->_saveLoad->getSaveMode(file);
+	if (mode == SaveLoad::kSaveModeSave) {
+
+		if (!_vm->_saveLoad->deleteFile(file)) {
+			GUI::MessageDialog dialog("Failed to save game state to file.");
+			dialog.runModal();
+		}
+
+	} else if (mode == SaveLoad::kSaveModeNone)
+		warning("Attempted to delete file \"%s\"", file);
 }
 
 void Inter_v5::o5_initScreen() {

Modified: scummvm/trunk/engines/gob/save/savehandler.cpp
===================================================================
--- scummvm/trunk/engines/gob/save/savehandler.cpp	2011-01-21 12:24:18 UTC (rev 55373)
+++ scummvm/trunk/engines/gob/save/savehandler.cpp	2011-01-21 13:28:35 UTC (rev 55374)
@@ -212,7 +212,11 @@
 	return vm->_inter->_variables->getSize();
 }
 
+bool SaveHandler::deleteFile() {
+	return true;
+}
 
+
 TempSpriteHandler::TempSpriteHandler(GobEngine *vm) : SaveHandler(vm) {
 	_sprite = 0;
 }

Modified: scummvm/trunk/engines/gob/save/savehandler.h
===================================================================
--- scummvm/trunk/engines/gob/save/savehandler.h	2011-01-21 12:24:18 UTC (rev 55373)
+++ scummvm/trunk/engines/gob/save/savehandler.h	2011-01-21 13:28:35 UTC (rev 55374)
@@ -121,6 +121,9 @@
 	/** Saves (parts of) the file. */
 	virtual bool save(int16 dataVar, int32 size, int32 offset) = 0;
 
+	/** Deletes the file. */
+	virtual bool deleteFile();
+
 	static uint32 getVarSize(GobEngine *vm);
 
 protected:

Modified: scummvm/trunk/engines/gob/save/saveload.cpp
===================================================================
--- scummvm/trunk/engines/gob/save/saveload.cpp	2011-01-21 12:24:18 UTC (rev 55373)
+++ scummvm/trunk/engines/gob/save/saveload.cpp	2011-01-21 13:28:35 UTC (rev 55374)
@@ -117,6 +117,30 @@
 	return true;
 }
 
+bool SaveLoad::deleteFile(const char *fileName) {
+	debugC(3, kDebugSaveLoad, "Requested deletion save file \"%s\"", fileName);
+
+	SaveHandler *handler = getHandler(fileName);
+
+	if (!handler) {
+		warning("No save handler for \"%s\"", fileName);
+		return false;
+	}
+
+	if (!handler->deleteFile()) {
+		const char *desc = getDescription(fileName);
+
+		if (!desc)
+			desc = "Unknown";
+
+		warning("Could not delete %s (\"%s\")", desc, fileName);
+		return false;
+	}
+
+	debugC(3, kDebugSaveLoad, "Successfully deleted file");
+	return true;
+}
+
 SaveLoad::SaveMode SaveLoad::getSaveMode(const char *fileName) const {
 	return kSaveModeNone;
 }

Modified: scummvm/trunk/engines/gob/save/saveload.h
===================================================================
--- scummvm/trunk/engines/gob/save/saveload.h	2011-01-21 12:24:18 UTC (rev 55373)
+++ scummvm/trunk/engines/gob/save/saveload.h	2011-01-21 13:28:35 UTC (rev 55374)
@@ -64,6 +64,9 @@
 	/** Saves size bytes from the variables starting with data dataVar at offset. */
 	bool save(const char *fileName, int16 dataVar, int32 size, int32 offset);
 
+	/** Deletes the file. */
+	bool deleteFile(const char *fileName);
+
 protected:
 	GobEngine *_vm;
 
@@ -653,10 +656,29 @@
 		File _file;
 	};
 
+	/** Handles the temporary saves. */
+	class TempHandler : public SaveHandler {
+	public:
+		TempHandler(GobEngine *vm);
+		~TempHandler();
+
+		int32 getSize();
+		bool load(int16 dataVar, int32 size, int32 offset);
+		bool save(int16 dataVar, int32 size, int32 offset);
+		bool deleteFile();
+
+	private:
+		bool _empty;
+
+		uint32 _size;
+		byte *_data;
+	};
+
 	static SaveFile _saveFiles[];
 
 	GameHandler *_gameHandler;
 	AutoHandler *_autoHandler;
+	TempHandler *_tmpHandler[2];
 
 	SaveHandler *getHandler(const char *fileName) const;
 	const char *getDescription(const char *fileName) const;

Modified: scummvm/trunk/engines/gob/save/saveload_v6.cpp
===================================================================
--- scummvm/trunk/engines/gob/save/saveload_v6.cpp	2011-01-21 12:24:18 UTC (rev 55373)
+++ scummvm/trunk/engines/gob/save/saveload_v6.cpp	2011-01-21 13:28:35 UTC (rev 55374)
@@ -37,7 +37,9 @@
 	{  "no_cd.txt", kSaveModeExists, 0, 0},
 	{   "vide.inf", kSaveModeIgnore, 0, 0},
 	{"fenetre.txt", kSaveModeIgnore, 0, 0},
-	{  "music.txt", kSaveModeIgnore, 0, 0}
+	{  "music.txt", kSaveModeIgnore, 0, 0},
+	{  "cata2.inf", kSaveModeSave,   0, "temp save"},
+	{  "cata3.inf", kSaveModeSave,   0, "temp save"}
 };
 
 
@@ -374,17 +376,83 @@
 }
 
 
+SaveLoad_v6::TempHandler::TempHandler(GobEngine *vm) : SaveHandler(vm),
+	_empty(true), _size(0), _data(0) {
+}
+
+SaveLoad_v6::TempHandler::~TempHandler() {
+	delete[] _data;
+}
+
+int32 SaveLoad_v6::TempHandler::getSize() {
+	if (_empty)
+		return -1;
+
+	return _size + 2900;
+}
+
+bool SaveLoad_v6::TempHandler::load(int16 dataVar, int32 size, int32 offset) {
+	if (_empty || (_size == 0) || !_data)
+		return false;
+
+	if ((size != 0) || (offset != 2900)) {
+		warning("Invalid temp loading procedure (%d, %d, %d)", dataVar, size, offset);
+		return false;
+	}
+
+	_vm->_inter->_variables->copyFrom(0, _data, _size);
+
+	return true;
+}
+
+bool SaveLoad_v6::TempHandler::save(int16 dataVar, int32 size, int32 offset) {
+	if ((size != 0) || (offset != 2900)) {
+		warning("Invalid temp saving procedure (%d, %d, %d)", dataVar, size, offset);
+		return false;
+	}
+
+	delete[] _data;
+
+	_size = SaveHandler::getVarSize(_vm);
+	_data = new byte[_size];
+
+	_vm->_inter->_variables->copyTo(0, _data, _size);
+
+	_empty = false;
+
+	return true;
+}
+
+bool SaveLoad_v6::TempHandler::deleteFile() {
+	delete[] _data;
+
+	_empty = true;
+	_size  = 0;
+	_data  = 0;
+
+	return true;
+}
+
+
 SaveLoad_v6::SaveLoad_v6(GobEngine *vm, const char *targetName) :
 		SaveLoad(vm) {
 
 	_gameHandler = new GameHandler(vm, targetName);
 	_autoHandler = new AutoHandler(vm, targetName);
 
+	_tmpHandler[0] = new TempHandler(vm);
+	_tmpHandler[1] = new TempHandler(vm);
+
 	_saveFiles[0].handler = _gameHandler;
 	_saveFiles[1].handler = _autoHandler;
+
+	_saveFiles[7].handler = _tmpHandler[0];
+	_saveFiles[8].handler = _tmpHandler[1];
 }
 
 SaveLoad_v6::~SaveLoad_v6() {
+	delete _tmpHandler[0];
+	delete _tmpHandler[1];
 	delete _autoHandler;
 	delete _gameHandler;
 }


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