diff options
Diffstat (limited to 'engines/gob')
-rw-r--r-- | engines/gob/gob.cpp | 2 | ||||
-rw-r--r-- | engines/gob/module.mk | 1 | ||||
-rw-r--r-- | engines/gob/save/saveload.h | 32 | ||||
-rw-r--r-- | engines/gob/save/saveload_v7.cpp | 123 |
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 |