diff options
author | Sven Hesse | 2011-01-18 11:53:21 +0000 |
---|---|---|
committer | Sven Hesse | 2011-01-18 11:53:21 +0000 |
commit | b38b5d24849524ba10d1c44e39cdb1b694c33b17 (patch) | |
tree | 61661fc8aaa841ceba40e950a8d883ba23c4a6a7 /engines/gob/save | |
parent | b4e12e6a896fd0c2be34d08978129b247dd12793 (diff) | |
download | scummvm-rg350-b38b5d24849524ba10d1c44e39cdb1b694c33b17.tar.gz scummvm-rg350-b38b5d24849524ba10d1c44e39cdb1b694c33b17.tar.bz2 scummvm-rg350-b38b5d24849524ba10d1c44e39cdb1b694c33b17.zip |
GOB: Give Inca2 its own SaveLoad class
Add an quick hack to fudge reading of the "voice.inf" file,
so that the voice match the selected text language.
svn-id: r55298
Diffstat (limited to 'engines/gob/save')
-rw-r--r-- | engines/gob/save/saveload.h | 38 | ||||
-rw-r--r-- | engines/gob/save/saveload_inca2.cpp | 121 |
2 files changed, 159 insertions, 0 deletions
diff --git a/engines/gob/save/saveload.h b/engines/gob/save/saveload.h index a88dfee0d9..7242cb1253 100644 --- a/engines/gob/save/saveload.h +++ b/engines/gob/save/saveload.h @@ -334,6 +334,44 @@ protected: SaveFile *getSaveFile(const char *fileName); }; +/** Save/Load class for Inca 2. */ +class SaveLoad_Inca2 : public SaveLoad { +public: + SaveLoad_Inca2(GobEngine *vm, const char *targetName); + virtual ~SaveLoad_Inca2(); + + SaveMode getSaveMode(const char *fileName) const; + +protected: + struct SaveFile { + const char *sourceName; + SaveMode mode; + SaveHandler *handler; + const char *description; + }; + + /** Handles the voice language info file. */ + class VoiceHandler : public SaveHandler { + public: + VoiceHandler(GobEngine *vm); + ~VoiceHandler(); + + int32 getSize(); + bool load(int16 dataVar, int32 size, int32 offset); + bool save(int16 dataVar, int32 size, int32 offset); + }; + + static SaveFile _saveFiles[]; + + VoiceHandler *_voiceHandler; + + 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 Woodruff. */ class SaveLoad_v4 : public SaveLoad { public: diff --git a/engines/gob/save/saveload_inca2.cpp b/engines/gob/save/saveload_inca2.cpp new file mode 100644 index 0000000000..43a37c8cb6 --- /dev/null +++ b/engines/gob/save/saveload_inca2.cpp @@ -0,0 +1,121 @@ +/* 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/global.h" +#include "gob/inter.h" + +namespace Gob { + +SaveLoad_Inca2::SaveFile SaveLoad_Inca2::_saveFiles[] = { + {"speak.inf", kSaveModeExists, 0, 0}, // Exists = speech enabled + {"voice.inf", kSaveModeSave , 0, 0} // Contains the language of the voices +}; + + +SaveLoad_Inca2::VoiceHandler::VoiceHandler(GobEngine *vm) : SaveHandler(vm) { +} + +SaveLoad_Inca2::VoiceHandler::~VoiceHandler() { +} + +int32 SaveLoad_Inca2::VoiceHandler::getSize() { + return 1; +} + +bool SaveLoad_Inca2::VoiceHandler::load(int16 dataVar, int32 size, int32 offset) { + if ((size != 1) || (offset != 0)) { + warning("Invalid voice language loading?!? (%d, %d, %d)", dataVar, size, offset); + return false; + } + + WRITE_VARO_UINT8(dataVar, _vm->_global->_language); + return true; +} + +bool SaveLoad_Inca2::VoiceHandler::save(int16 dataVar, int32 size, int32 offset) { + return false; +} + + +SaveLoad_Inca2::SaveLoad_Inca2(GobEngine *vm, const char *targetName) : SaveLoad(vm) { + _voiceHandler = new VoiceHandler(vm); + + _saveFiles[1].handler = _voiceHandler; +} + +SaveLoad_Inca2::~SaveLoad_Inca2() { + delete _voiceHandler; +} + +const SaveLoad_Inca2::SaveFile *SaveLoad_Inca2::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_Inca2::SaveFile *SaveLoad_Inca2::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_Inca2::getHandler(const char *fileName) const { + const SaveFile *saveFile = getSaveFile(fileName); + + if (saveFile) + return saveFile->handler; + + return 0; +} + +const char *SaveLoad_Inca2::getDescription(const char *fileName) const { + const SaveFile *saveFile = getSaveFile(fileName); + + if (saveFile) + return saveFile->description; + + return 0; +} + +SaveLoad::SaveMode SaveLoad_Inca2::getSaveMode(const char *fileName) const { + const SaveFile *saveFile = getSaveFile(fileName); + + if (saveFile) + return saveFile->mode; + + return kSaveModeNone; +} + +} // End of namespace Gob |