aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/gob/gob.cpp2
-rw-r--r--engines/gob/module.mk1
-rw-r--r--engines/gob/save/saveload.h32
-rw-r--r--engines/gob/save/saveload_v7.cpp123
4 files changed, 157 insertions, 1 deletions
diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp
index bda85aaab6..674eab3d47 100644
--- a/engines/gob/gob.cpp
+++ b/engines/gob/gob.cpp
@@ -552,7 +552,7 @@ bool GobEngine::initGameParts() {
_map = new Map_v2(this);
_goblin = new Goblin_v4(this);
_scenery = new Scenery_v2(this);
- _saveLoad = new SaveLoad_Playtoons(this, _targetName.c_str());
+ _saveLoad = new SaveLoad_v7(this, _targetName.c_str());
break;
case kGameTypeAdibou1:
diff --git a/engines/gob/module.mk b/engines/gob/module.mk
index 6ff685d9bb..94fa712632 100644
--- a/engines/gob/module.mk
+++ b/engines/gob/module.mk
@@ -70,6 +70,7 @@ MODULE_OBJS := \
save/saveload_v3.o \
save/saveload_v4.o \
save/saveload_v6.o \
+ save/saveload_v7.o \
save/saveload_fascin.o \
save/saveload_inca2.o \
save/saveload_playtoons.o \
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h
index 569ca831f9..c245958541 100644
--- a/engines/gob/save/saveload.h
+++ b/engines/gob/save/saveload.h
@@ -815,6 +815,38 @@ protected:
SaveFile *getSaveFile(const char *fileName);
};
+/** Save/Load class for Playtoons. */
+class SaveLoad_v7: public SaveLoad {
+public:
+ static const uint32 kChildrenCount = 16;
+
+ SaveLoad_v7(GobEngine *vm, const char *targetName);
+ virtual ~SaveLoad_v7();
+
+ SaveMode getSaveMode(const char *fileName) const;
+
+protected:
+ struct SaveFile {
+ const char *sourceName;
+ SaveMode mode;
+ SaveHandler *handler;
+ const char *description;
+ };
+
+ static SaveFile _saveFiles[];
+
+ TempSpriteHandler *_faceHandler[kChildrenCount];
+ FakeFileHandler *_childrenHandler;
+ FakeFileHandler *_debilHandler;
+ FakeFileHandler *_configHandler;
+
+ 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);
+};
+
} // End of namespace Gob
#endif // GOB_SAVE_SAVELOAD_H
diff --git a/engines/gob/save/saveload_v7.cpp b/engines/gob/save/saveload_v7.cpp
new file mode 100644
index 0000000000..e66f7a4e53
--- /dev/null
+++ b/engines/gob/save/saveload_v7.cpp
@@ -0,0 +1,123 @@
+/* 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.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "gob/save/saveload.h"
+#include "gob/save/saveconverter.h"
+#include "gob/inter.h"
+#include "gob/variables.h"
+
+namespace Gob {
+
+SaveLoad_v7::SaveFile SaveLoad_v7::_saveFiles[] = {
+ {"visage01.inf", kSaveModeSave, 0, "face" }, // Child 01
+ {"visage02.inf", kSaveModeSave, 0, "face" }, // Child 02
+ {"visage03.inf", kSaveModeSave, 0, "face" }, // Child 03
+ {"visage04.inf", kSaveModeSave, 0, "face" }, // Child 04
+ {"visage05.inf", kSaveModeSave, 0, "face" }, // Child 05
+ {"visage06.inf", kSaveModeSave, 0, "face" }, // Child 06
+ {"visage07.inf", kSaveModeSave, 0, "face" }, // Child 07
+ {"visage08.inf", kSaveModeSave, 0, "face" }, // Child 08
+ {"visage09.inf", kSaveModeSave, 0, "face" }, // Child 09
+ {"visage10.inf", kSaveModeSave, 0, "face" }, // Child 10
+ {"visage11.inf", kSaveModeSave, 0, "face" }, // Child 11
+ {"visage12.inf", kSaveModeSave, 0, "face" }, // Child 12
+ {"visage13.inf", kSaveModeSave, 0, "face" }, // Child 13
+ {"visage14.inf", kSaveModeSave, 0, "face" }, // Child 14
+ {"visage15.inf", kSaveModeSave, 0, "face" }, // Child 15
+ {"visage16.inf", kSaveModeSave, 0, "face" }, // Child 16
+ { "enfant.inf", kSaveModeSave, 0, "children" },
+ { "debil.tmp", kSaveModeSave, 0, 0 },
+ { "config.inf", kSaveModeSave, 0, "configuration"}
+};
+
+
+SaveLoad_v7::SaveLoad_v7(GobEngine *vm, const char *targetName) :
+ SaveLoad(vm) {
+
+ for (uint32 i = 0; i < kChildrenCount; i++)
+ _saveFiles[i].handler = _faceHandler[i] = new TempSpriteHandler(_vm);
+
+ _saveFiles[16].handler = _childrenHandler = new FakeFileHandler(_vm);
+ _saveFiles[17].handler = _debilHandler = new FakeFileHandler(_vm);
+ _saveFiles[18].handler = _configHandler = new FakeFileHandler(_vm);
+}
+
+SaveLoad_v7::~SaveLoad_v7() {
+ delete _configHandler;
+ delete _debilHandler;
+ delete _childrenHandler;
+
+ for (uint32 i = 0; i < kChildrenCount; i++)
+ delete _faceHandler[i];
+}
+
+const SaveLoad_v7::SaveFile *SaveLoad_v7::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_v7::SaveFile *SaveLoad_v7::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_v7::getHandler(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->handler;
+
+ return 0;
+}
+
+const char *SaveLoad_v7::getDescription(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->description;
+
+ return 0;
+}
+
+SaveLoad::SaveMode SaveLoad_v7::getSaveMode(const char *fileName) const {
+ const SaveFile *saveFile = getSaveFile(fileName);
+
+ if (saveFile)
+ return saveFile->mode;
+
+ return kSaveModeNone;
+}
+
+} // End of namespace Gob