diff options
author | Eugene Sandulenko | 2016-09-27 19:10:07 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-09-27 19:10:07 +0200 |
commit | a687ae3daf3210c9fb66a1981288caa387ff995a (patch) | |
tree | 33728db25cabac681b49785f8598bea5c4b831f7 | |
parent | b783f0b528b3ea3127c19a561d2e5b9f66788f79 (diff) | |
download | scummvm-rg350-a687ae3daf3210c9fb66a1981288caa387ff995a.tar.gz scummvm-rg350-a687ae3daf3210c9fb66a1981288caa387ff995a.tar.bz2 scummvm-rg350-a687ae3daf3210c9fb66a1981288caa387ff995a.zip |
FULLPIPE: Add support loading/saving from GMM
-rw-r--r-- | engines/fullpipe/detection.cpp | 7 | ||||
-rw-r--r-- | engines/fullpipe/fullpipe.cpp | 16 | ||||
-rw-r--r-- | engines/fullpipe/fullpipe.h | 8 | ||||
-rw-r--r-- | engines/fullpipe/gameloader.h | 4 | ||||
-rw-r--r-- | engines/fullpipe/stateloader.cpp | 12 | ||||
-rw-r--r-- | engines/fullpipe/statesaver.cpp | 8 |
6 files changed, 42 insertions, 13 deletions
diff --git a/engines/fullpipe/detection.cpp b/engines/fullpipe/detection.cpp index 31645dd38a..af2b0cab3a 100644 --- a/engines/fullpipe/detection.cpp +++ b/engines/fullpipe/detection.cpp @@ -106,6 +106,13 @@ bool FullpipeMetaEngine::hasFeature(MetaEngineFeature f) const { (f == kSimpleSavesNames); } +bool Fullpipe::FullpipeEngine::hasFeature(EngineFeature f) const { + return + (f == kSupportsRTL) || + (f == kSupportsLoadingDuringRuntime) || + (f == kSupportsSavingDuringRuntime); +} + SaveStateList FullpipeMetaEngine::listSaves(const char *target) const { Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); Common::StringArray filenames; diff --git a/engines/fullpipe/fullpipe.cpp b/engines/fullpipe/fullpipe.cpp index 37c7699ce7..2c6fded770 100644 --- a/engines/fullpipe/fullpipe.cpp +++ b/engines/fullpipe/fullpipe.cpp @@ -256,6 +256,20 @@ void FullpipeEngine::restartGame() { } } +Common::Error FullpipeEngine::loadGameState(int slot) { + if (_gameLoader->readSavegame(getSavegameFile(slot))) + return Common::kNoError; + else + return Common::kUnknownError; +} +Common::Error FullpipeEngine::saveGameState(int slot, const Common::String &description) { + if (_gameLoader->writeSavegame(_currentScene, getSavegameFile(slot))) + return Common::kNoError; + else + return Common::kUnknownError; +} + + Common::Error FullpipeEngine::run() { const Graphics::PixelFormat format(4, 8, 8, 8, 8, 24, 16, 8, 0); // Initialize backend @@ -282,7 +296,7 @@ Common::Error FullpipeEngine::run() { return Common::kNoGameDataFoundError; if (ConfMan.hasKey("save_slot")) { - _gameLoader->readSavegame(getSavegameFile(ConfMan.getInt("save_slot"))); + loadGameState(ConfMan.getInt("save_slot")); } #if 0 diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h index 09c9559199..1b6e222d22 100644 --- a/engines/fullpipe/fullpipe.h +++ b/engines/fullpipe/fullpipe.h @@ -332,8 +332,12 @@ public: bool _isSaveAllowed; - bool canLoadGameStateCurrently() { return _isSaveAllowed; } - bool canSaveGameStateCurrently() { return _isSaveAllowed; } + Common::Error loadGameState(int slot); + Common::Error saveGameState(int slot, const Common::String &description); + + virtual bool canLoadGameStateCurrently() { return true; } + virtual bool canSaveGameStateCurrently() { return _isSaveAllowed; } + virtual bool hasFeature(EngineFeature f) const; }; diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h index 9f99cb16f3..6c41e1bd07 100644 --- a/engines/fullpipe/gameloader.h +++ b/engines/fullpipe/gameloader.h @@ -112,8 +112,8 @@ class GameLoader : public CObject { void saveScenePicAniInfos(int sceneId); PicAniInfo **savePicAniInfos(Scene *sc, int flag1, int flag2, int *picAniInfoCount); - void readSavegame(const char *fname); - void writeSavegame(Scene *sc, const char *fname); + bool readSavegame(const char *fname); + bool writeSavegame(Scene *sc, const char *fname); void addVar(GameVar *var, GameVar *subvar); diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp index 78674d1fe9..f48d636ecd 100644 --- a/engines/fullpipe/stateloader.cpp +++ b/engines/fullpipe/stateloader.cpp @@ -40,13 +40,13 @@ namespace Fullpipe { -void GameLoader::readSavegame(const char *fname) { +bool GameLoader::readSavegame(const char *fname) { SaveHeader header; Common::InSaveFile *saveFile = g_system->getSavefileManager()->openForLoading(fname); if (!saveFile) { warning("Cannot open save %s for loading", fname); - return; + return false; } header.version = saveFile->readUint32LE(); @@ -59,7 +59,7 @@ void GameLoader::readSavegame(const char *fname) { header.version, header.magic, header.updateCounter, header.unkField, header.encSize, saveFile->pos()); if (header.version != 48) - return; + return false; _updateCounter = header.updateCounter; @@ -92,7 +92,7 @@ void GameLoader::readSavegame(const char *fname) { if (!v) { warning("No state to save"); delete archive; - return; + return false; } } @@ -141,7 +141,7 @@ void GameLoader::readSavegame(const char *fname) { if (_preloadCallback) { if (!_preloadCallback(preloadItem, 0)) - return; + return false; } clearGlobalMessageQueueList1(); @@ -165,6 +165,8 @@ void GameLoader::readSavegame(const char *fname) { ex->postMessage(); } + + return true; } void parseSavegameHeader(Fullpipe::FullpipeSavegameHeader &header, SaveStateDescriptor &desc) { diff --git a/engines/fullpipe/statesaver.cpp b/engines/fullpipe/statesaver.cpp index fb9163de93..130ab6214d 100644 --- a/engines/fullpipe/statesaver.cpp +++ b/engines/fullpipe/statesaver.cpp @@ -31,7 +31,7 @@ namespace Fullpipe { -void GameLoader::writeSavegame(Scene *sc, const char *fname) { +bool GameLoader::writeSavegame(Scene *sc, const char *fname) { GameVar *v = _gameVar->getSubVarByName("OBJSTATES")->getSubVarByName("SAVEGAME"); if (!v) { @@ -39,7 +39,7 @@ void GameLoader::writeSavegame(Scene *sc, const char *fname) { if (!v) { warning("No state to save"); - return; + return false; } } @@ -112,7 +112,7 @@ void GameLoader::writeSavegame(Scene *sc, const char *fname) { if (!saveFile) { warning("Cannot open file for writing: %s", fname); - return; + return false; } saveFile->writeUint32LE(header.version); @@ -154,6 +154,8 @@ void GameLoader::writeSavegame(Scene *sc, const char *fname) { delete saveFile; delete archive; + + return true; } |