[Scummvm-git-logs] scummvm master -> a6d71c941d9ee2c63f7af6f447862c172544f843

sev- sev at scummvm.org
Sun Sep 18 09:37:44 CEST 2016


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
b413d01113 FULLPIPE: Implement map saving and save obfuscation
a6d71c941d FULLPIPE: Moved save-related functions to statesaver.cpp


Commit: b413d01113d39d74639cb8f068efb0f14110d646
    https://github.com/scummvm/scummvm/commit/b413d01113d39d74639cb8f068efb0f14110d646
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-18T09:37:37+02:00

Commit Message:
FULLPIPE: Implement map saving and save obfuscation

Changed paths:
    engines/fullpipe/gameloader.cpp
    engines/fullpipe/gameloader.h
    engines/fullpipe/stateloader.cpp



diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp
index 8524a8d..bbe99ab 100644
--- a/engines/fullpipe/gameloader.cpp
+++ b/engines/fullpipe/gameloader.cpp
@@ -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);
diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h
index a11c0aa..b0347ca 100644
--- a/engines/fullpipe/gameloader.h
+++ b/engines/fullpipe/gameloader.h
@@ -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;
diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index 1e1cf35..5142d2b 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -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;


Commit: a6d71c941d9ee2c63f7af6f447862c172544f843
    https://github.com/scummvm/scummvm/commit/a6d71c941d9ee2c63f7af6f447862c172544f843
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-18T09:37:37+02:00

Commit Message:
FULLPIPE: Moved save-related functions to statesaver.cpp

Changed paths:
    engines/fullpipe/gameloader.cpp
    engines/fullpipe/gameloader.h
    engines/fullpipe/stateloader.cpp
    engines/fullpipe/statesaver.cpp



diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp
index bbe99ab..55db7fb 100644
--- a/engines/fullpipe/gameloader.cpp
+++ b/engines/fullpipe/gameloader.cpp
@@ -21,7 +21,6 @@
  */
 
 #include "fullpipe/fullpipe.h"
-#include "common/memstream.h"
 #include "graphics/thumbnail.h"
 
 #include "fullpipe/gameloader.h"
@@ -599,105 +598,6 @@ void GameLoader::updateSystems(int counterdiff) {
 	}
 }
 
-void GameLoader::readSavegame(const char *fname) {
-	warning("STUB: readSavegame(%s)", fname);
-}
-
-struct SaveHeader {
-	int32 saveSize;
-	char magic[32];
-	int32 updateCounter;
-	int32 unkField;
-	int32 encSize;
-};
-
-void 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;
-		}
-	}
-
-	SaveHeader header;
-
-	v->setSubVarAsInt("Scene", sc->_sceneId);
-
-	saveScenePicAniInfos(sc->_sceneId);
-	memset(&header, 0, sizeof(header));
-
-	header.saveSize = 48;
-	strcpy(header.magic, "FullPipe Savegame");
-	header.updateCounter = _updateCounter;
-	header.unkField = 1;
-
-	Common::MemoryWriteStreamDynamic stream;
-
-	MfcArchive *archive = new MfcArchive(&stream);
-
-	v = _gameVar->getSubVarByName("OBJSTATES");
-
-	GameVar *nxt = 0;
-	GameVar *prv = 0;
-	GameVar *par;
-	if (v) {
-		nxt = v->_nextVarObj;
-		prv = v->_prevVarObj;
-		par = v->_parentVarObj;
-		v->_parentVarObj = 0;
-		v->_nextVarObj = 0;
-		v->_prevVarObj = 0;
-	}
-
-	archive->writeObject(v);
-
-	if (v) {
-		v->_parentVarObj = par;
-		v->_nextVarObj = nxt;
-		v->_prevVarObj = prv;
-	}
-
-	getGameLoaderInventory()->savePartial(*archive);
-
-	archive->writeUint32LE(_sc2array.size());
-
-	for (uint i = 0; i < _sc2array.size(); i++) {
-		archive->writeUint32LE(_sc2array[i]._picAniInfosCount);
-
-		for (uint j = 0; j < _sc2array[i]._picAniInfosCount; j++) {
-			_sc2array[i]._picAniInfos[j]->save(*archive);
-		}
-	}
-
-	header.encSize = stream.size();
-
-	// 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);
-
-	saveFile->write(&header, sizeof(header));
-
-	saveFile->write(stream.getData(), stream.size());
-
-	saveFile->finalize();
-
-	delete saveFile;
-}
-
-void GameLoader::writeObject(Common::WriteStream *stream, GameVar *) {
-	warning("STUB: GameLoader::writeObject()");
-}
-
 Sc2::Sc2() {
 	_sceneId = 0;
 	_field_2 = 0;
diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h
index b0347ca..fc5db9c 100644
--- a/engines/fullpipe/gameloader.h
+++ b/engines/fullpipe/gameloader.h
@@ -80,6 +80,14 @@ struct FullpipeSavegameHeader {
 	Graphics::Surface *thumbnail;
 };
 
+struct SaveHeader {
+	int32 saveSize;
+	char magic[32];
+	int32 updateCounter;
+	int32 unkField;
+	int32 encSize;
+};
+
 class GameLoader : public CObject {
  public:
 	GameLoader();
@@ -101,8 +109,6 @@ class GameLoader : public CObject {
 	void readSavegame(const char *fname);
 	void writeSavegame(Scene *sc, const char *fname);
 
-	void writeObject(Common::WriteStream *stream, GameVar *);
-
 	void restoreDefPicAniInfos();
 
 	GameProject *_gameProject;
diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index 5142d2b..1323c23 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -37,6 +37,10 @@
 
 namespace Fullpipe {
 
+void GameLoader::readSavegame(const char *fname) {
+	warning("STUB: readSavegame(%s)", fname);
+}
+
 void gameLoaderSavegameCallback(MfcArchive *archive, bool mode) {
 	if (mode)
 		for (int i = 0; i < 200; i++)
diff --git a/engines/fullpipe/statesaver.cpp b/engines/fullpipe/statesaver.cpp
index 2839cff..8f40778 100644
--- a/engines/fullpipe/statesaver.cpp
+++ b/engines/fullpipe/statesaver.cpp
@@ -20,12 +20,99 @@
  *
  */
 
+#include "common/memstream.h"
+
 #include "fullpipe/fullpipe.h"
 
+#include "fullpipe/gameloader.h"
 #include "fullpipe/objects.h"
 
 namespace Fullpipe {
 
+void 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;
+		}
+	}
+
+	SaveHeader header;
+
+	v->setSubVarAsInt("Scene", sc->_sceneId);
+
+	saveScenePicAniInfos(sc->_sceneId);
+	memset(&header, 0, sizeof(header));
+
+	header.saveSize = 48;
+	strcpy(header.magic, "FullPipe Savegame");
+	header.updateCounter = _updateCounter;
+	header.unkField = 1;
+
+	Common::MemoryWriteStreamDynamic stream;
+
+	MfcArchive *archive = new MfcArchive(&stream);
+
+	v = _gameVar->getSubVarByName("OBJSTATES");
+
+	GameVar *nxt = 0;
+	GameVar *prv = 0;
+	GameVar *par;
+	if (v) {
+		nxt = v->_nextVarObj;
+		prv = v->_prevVarObj;
+		par = v->_parentVarObj;
+		v->_parentVarObj = 0;
+		v->_nextVarObj = 0;
+		v->_prevVarObj = 0;
+	}
+
+	archive->writeObject(v);
+
+	if (v) {
+		v->_parentVarObj = par;
+		v->_nextVarObj = nxt;
+		v->_prevVarObj = prv;
+	}
+
+	getGameLoaderInventory()->savePartial(*archive);
+
+	archive->writeUint32LE(_sc2array.size());
+
+	for (uint i = 0; i < _sc2array.size(); i++) {
+		archive->writeUint32LE(_sc2array[i]._picAniInfosCount);
+
+		for (uint j = 0; j < _sc2array[i]._picAniInfosCount; j++) {
+			_sc2array[i]._picAniInfos[j]->save(*archive);
+		}
+	}
+
+	header.encSize = stream.size();
+
+	// 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);
+
+	saveFile->write(&header, sizeof(header));
+
+	saveFile->write(stream.getData(), stream.size());
+
+	saveFile->finalize();
+
+	delete saveFile;
+}
+
+
 void PicAniInfo::save(MfcArchive &file) {
 	debugC(5, kDebugLoading, "PicAniInfo::save()");
 





More information about the Scummvm-git-logs mailing list