aboutsummaryrefslogtreecommitdiff
path: root/engines/gob
diff options
context:
space:
mode:
authorSven Hesse2012-06-16 15:23:31 +0200
committerSven Hesse2012-06-16 15:23:31 +0200
commit026ef70b87f4b85476cb6a3d74ffb9170a170718 (patch)
tree698e6e6b5e77ae5e58b2b2852478352e276697f5 /engines/gob
parent6d01b517550d161b45cbebba077bb9f7bbbc99f2 (diff)
downloadscummvm-rg350-026ef70b87f4b85476cb6a3d74ffb9170a170718.tar.gz
scummvm-rg350-026ef70b87f4b85476cb6a3d74ffb9170a170718.tar.bz2
scummvm-rg350-026ef70b87f4b85476cb6a3d74ffb9170a170718.zip
GOB: Add a SaveLoad class for AJ's World
Only contains a temp sprite handler ("menu.inf") for now. This fixes the graphical glitch after clicking on the cloud.
Diffstat (limited to 'engines/gob')
-rw-r--r--engines/gob/gob.cpp1
-rw-r--r--engines/gob/module.mk1
-rw-r--r--engines/gob/save/saveload.h27
-rw-r--r--engines/gob/save/saveload_ajworld.cpp94
4 files changed, 123 insertions, 0 deletions
diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp
index 3d3c43d91c..3d8a18ed38 100644
--- a/engines/gob/gob.cpp
+++ b/engines/gob/gob.cpp
@@ -492,6 +492,7 @@ bool GobEngine::initGameParts() {
_map = new Map_v2(this);
_goblin = new Goblin_v2(this);
_scenery = new Scenery_v2(this);
+ _saveLoad = new SaveLoad_AJWorld(this, _targetName.c_str());
break;
case kGameTypeGob3:
diff --git a/engines/gob/module.mk b/engines/gob/module.mk
index 20214ea940..2249f44852 100644
--- a/engines/gob/module.mk
+++ b/engines/gob/module.mk
@@ -94,6 +94,7 @@ MODULE_OBJS := \
save/saveload_v7.o \
save/saveload_geisha.o \
save/saveload_fascin.o \
+ save/saveload_ajworld.o \
save/saveload_inca2.o \
save/saveload_playtoons.o \
save/saveconverter.o \
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 66b3482bac..834484757b 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -257,6 +257,33 @@ protected:
SaveFile *getSaveFile(const char *fileName);
};
+/** Save/Load class for A.J.'s World of Discovery. */
+class SaveLoad_AJWorld : public SaveLoad {
+public:
+ SaveLoad_AJWorld(GobEngine *vm, const char *targetName);
+ virtual ~SaveLoad_AJWorld();
+
+ SaveMode getSaveMode(const char *fileName) const;
+
+protected:
+ struct SaveFile {
+ const char *sourceName;
+ SaveMode mode;
+ SaveHandler *handler;
+ const char *description;
+ };
+
+ static SaveFile _saveFiles[];
+
+ TempSpriteHandler *_tempSpriteHandler;
+
+ SaveHandler *getHandler(const char *fileName) const;
+ const char *getDescription(const char *fileName) const;
+
+ const SaveFile *getSaveFile(const char *fileName) const;
+ SaveFile *getSaveFile(const char *fileName);
+};
+
/** Save/Load class for Goblins 3 and Lost in Time. */
class SaveLoad_v3 : public SaveLoad {
public:
diff --git a/engines/gob/save/saveload_ajworld.cpp b/engines/gob/save/saveload_ajworld.cpp
new file mode 100644
index 0000000000..727d071b3e
--- /dev/null
+++ b/engines/gob/save/saveload_ajworld.cpp
@@ -0,0 +1,94 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "gob/save/saveload.h"
+#include "gob/save/saveconverter.h"
+#include "gob/inter.h"
+#include "gob/variables.h"
+
+namespace Gob {
+
+SaveLoad_AJWorld::SaveFile SaveLoad_AJWorld::_saveFiles[] = {
+ { "menu.inf", kSaveModeSave, 0, "temporary sprite"}
+};
+
+
+SaveLoad_AJWorld::SaveLoad_AJWorld(GobEngine *vm, const char *targetName) :
+ SaveLoad(vm) {
+
+ _tempSpriteHandler = new TempSpriteHandler(vm);
+
+ _saveFiles[0].handler = _tempSpriteHandler;
+}
+
+SaveLoad_AJWorld::~SaveLoad_AJWorld() {
+ delete _tempSpriteHandler;
+}
+
+const SaveLoad_AJWorld::SaveFile *SaveLoad_AJWorld::getSaveFile(const char *fileName) const {
+ fileName = stripPath(fileName);
+
+ for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
+ if (!scumm_stricmp(fileName, _saveFiles[i].sourceName))
+ return &_saveFiles[i];
+
+ return 0;
+}
+
+SaveLoad_AJWorld::SaveFile *SaveLoad_AJWorld::getSaveFile(const char *fileName) {
+ fileName = stripPath(fileName);
+
+ for (int i = 0; i < ARRAYSIZE(_saveFiles); i++)
+ if (!scumm_stricmp(fileName, _saveFiles[i].sourceName))
+ return &_saveFiles[i];
+
+ return 0;
+}
+
+SaveHandler *SaveLoad_AJWorld::getHandler(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->handler;
+
+ return 0;
+}
+
+const char *SaveLoad_AJWorld::getDescription(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->description;
+
+ return 0;
+}
+
+SaveLoad::SaveMode SaveLoad_AJWorld::getSaveMode(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->mode;
+
+ return kSaveModeNone;
+}
+
+} // End of namespace Gob