[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