FULLPIPE: Implement map saving and save obfuscation

This commit is contained in:
Eugene Sandulenko 2016-09-18 09:32:58 +02:00
parent c42dfbc496
commit b413d01113
3 changed files with 18 additions and 6 deletions

View File

@ -673,11 +673,14 @@ void GameLoader::writeSavegame(Scene *sc, const char *fname) {
}
}
//header.encSize = GameLoader_encryptSavegame((GameLoader *)header.unkField, (int)&cmemfile);
//CFile::Write((int)&cfile, (int)&header, header.saveSize);
header.encSize = stream.size();
//if (_savegameCallback)
// _savegameCallback(saveFile, 1);
// Now obfuscate the data
for (uint i = 0; i < header.encSize; i++)
stream.getData()[i] += i & 0x7f;
if (_savegameCallback)
_savegameCallback(archive, true);
// Now dump it into save file
Common::OutSaveFile *saveFile = g_system->getSavefileManager()->openForSaving(fname);

View File

@ -112,7 +112,7 @@ class GameLoader : public CObject {
Sc2Array _sc2array;
void *_sceneSwitcher;
bool (*_preloadCallback)(PreloadItem &pre, int flag);
void *_savegameCallback;
void (*_savegameCallback)(MfcArchive *archive, bool mode);
int16 _field_F8;
int16 _field_FA;
PreloadItems _preloadItems;

View File

@ -37,6 +37,15 @@
namespace Fullpipe {
void gameLoaderSavegameCallback(MfcArchive *archive, bool mode) {
if (mode)
for (int i = 0; i < 200; i++)
archive->writeUint32LE(g_fp->_mapTable[i]);
else
for (int i = 0; i < 200; i++)
g_fp->_mapTable[i] = archive->readUint32LE();
}
bool FullpipeEngine::loadGam(const char *fname, int scene) {
_gameLoader = new GameLoader();
@ -60,7 +69,7 @@ bool FullpipeEngine::loadGam(const char *fname, int scene) {
// _sceneSwitcher = sceneSwitcher; // substituted with direct call
_gameLoader->_preloadCallback = preloadCallback;
// _savegameCallback = gameLoaderSavegameCallback; // TODO
_gameLoader->_savegameCallback = gameLoaderSavegameCallback;
_aniMan = accessScene(SC_COMMON)->getAniMan();
_scene2 = 0;