Skip to content

Commit

Permalink
FULLPIPE: Add support loading/saving from GMM
Browse files Browse the repository at this point in the history
  • Loading branch information
sev- committed Sep 27, 2016
1 parent b783f0b commit a687ae3
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 13 deletions.
7 changes: 7 additions & 0 deletions engines/fullpipe/detection.cpp
Expand Up @@ -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;
Expand Down
16 changes: 15 additions & 1 deletion engines/fullpipe/fullpipe.cpp
Expand Up @@ -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
Expand All @@ -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
Expand Down
8 changes: 6 additions & 2 deletions engines/fullpipe/fullpipe.h
Expand Up @@ -332,8 +332,12 @@ class FullpipeEngine : public ::Engine {

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;

};

Expand Down
4 changes: 2 additions & 2 deletions engines/fullpipe/gameloader.h
Expand Up @@ -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);

Expand Down
12 changes: 7 additions & 5 deletions engines/fullpipe/stateloader.cpp
Expand Up @@ -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();
Expand All @@ -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;

Expand Down Expand Up @@ -92,7 +92,7 @@ void GameLoader::readSavegame(const char *fname) {
if (!v) {
warning("No state to save");
delete archive;
return;
return false;
}
}

Expand Down Expand Up @@ -141,7 +141,7 @@ void GameLoader::readSavegame(const char *fname) {

if (_preloadCallback) {
if (!_preloadCallback(preloadItem, 0))
return;
return false;
}

clearGlobalMessageQueueList1();
Expand All @@ -165,6 +165,8 @@ void GameLoader::readSavegame(const char *fname) {

ex->postMessage();
}

return true;
}

void parseSavegameHeader(Fullpipe::FullpipeSavegameHeader &header, SaveStateDescriptor &desc) {
Expand Down
8 changes: 5 additions & 3 deletions engines/fullpipe/statesaver.cpp
Expand Up @@ -31,15 +31,15 @@

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) {
v = _gameVar->getSubVarByName("OBJSTATES")->addSubVarAsInt("SAVEGAME", 0);

if (!v) {
warning("No state to save");
return;
return false;
}
}

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -154,6 +154,8 @@ void GameLoader::writeSavegame(Scene *sc, const char *fname) {

delete saveFile;
delete archive;

return true;
}


Expand Down

0 comments on commit a687ae3

Please sign in to comment.