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

sev- sev at scummvm.org
Mon Sep 19 19:17:21 CEST 2016


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

Summary:
3bf4f3fcbe FULLPIPE: Fix crash at load dialog initialization
26142799ad FULLPIPE: Correct slot number on loading
1e9351efaf FULLPIPE: Added debug info to saveload code
783d968e20 FULLPIPE: Fix saving object to savegames
a60558071d FULLPIPE: Fix game save/load


Commit: 3bf4f3fcbe342d5ddb805e66de1df29541541410
    https://github.com/scummvm/scummvm/commit/3bf4f3fcbe342d5ddb805e66de1df29541541410
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-19T18:13:31+02:00

Commit Message:
FULLPIPE: Fix crash at load dialog initialization

Changed paths:
    engines/fullpipe/gameloader.cpp
    engines/fullpipe/modal.cpp



diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp
index 55db7fb..d1f2781 100644
--- a/engines/fullpipe/gameloader.cpp
+++ b/engines/fullpipe/gameloader.cpp
@@ -712,7 +712,8 @@ bool readSavegameHeader(Common::InSaveFile *in, FullpipeSavegameHeader &header)
 	// Read in the string
 	header.saveName.clear();
 	char ch;
-	while ((ch = (char)in->readByte()) != '\0') header.saveName += ch;
+	while ((ch = (char)in->readByte()) != '\0')
+		header.saveName += ch;
 
 	// Get the thumbnail
 	header.thumbnail = Graphics::loadThumbnail(*in);
diff --git a/engines/fullpipe/modal.cpp b/engines/fullpipe/modal.cpp
index 8836429..5f8afbc 100644
--- a/engines/fullpipe/modal.cpp
+++ b/engines/fullpipe/modal.cpp
@@ -1601,7 +1601,7 @@ void ModalSaveGame::setup(Scene *sc, int mode) {
 		} else {
 			w = 0;
 
-			for (int j = 0; j < 16; j++) {
+			for (uint j = 0; j < _arrayL.size(); j++) {
 				_arrayL[j]->getDimensions(&point);
 				w += point.x + 2;
 			}
@@ -1640,7 +1640,11 @@ bool ModalSaveGame::getFileInfo(int slot, FileInfo *fileinfo) {
 	SaveStateDescriptor desc(slot, header.saveName);
 	char res[17];
 
-	snprintf(res, 17, "%s  %s", desc.getSaveDate().c_str(), desc.getSaveTime().c_str());
+	// FIXME. HACK. TODO: Set proper dates
+	desc.setSaveDate(2016, 9, 18);
+	desc.setSaveTime(9, 56);
+
+	snprintf(res, 17, "%s %s", desc.getSaveDate().c_str(), desc.getSaveTime().c_str());
 
 	for (int i = 0; i < 16; i++) {
 		switch(res[i]) {


Commit: 26142799adf6ef4e07a3a91c413f40c7253aa3f8
    https://github.com/scummvm/scummvm/commit/26142799adf6ef4e07a3a91c413f40c7253aa3f8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-19T18:13:31+02:00

Commit Message:
FULLPIPE: Correct slot number on loading

Changed paths:
    engines/fullpipe/modal.cpp
    engines/fullpipe/stateloader.cpp



diff --git a/engines/fullpipe/modal.cpp b/engines/fullpipe/modal.cpp
index 5f8afbc..cceec4a 100644
--- a/engines/fullpipe/modal.cpp
+++ b/engines/fullpipe/modal.cpp
@@ -1622,7 +1622,7 @@ char *ModalSaveGame::getSaveName() {
 	if (_queryRes < 0)
 		return 0;
 
-	return _files[_queryRes]->filename;
+	return _files[_queryRes - 1]->filename;
 }
 
 bool ModalSaveGame::getFileInfo(int slot, FileInfo *fileinfo) {
diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index 3d74e93..588a366 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -42,6 +42,11 @@ void 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;
+	}
+
 	header.version = saveFile->readUint32LE();
 	saveFile->read(header.magic, 32);
 	header.updateCounter = saveFile->readUint32LE();


Commit: 1e9351efaf5c7c99c23f6155b4f9ac591f8c42d4
    https://github.com/scummvm/scummvm/commit/1e9351efaf5c7c99c23f6155b4f9ac591f8c42d4
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-19T18:13:31+02:00

Commit Message:
FULLPIPE: Added debug info to saveload code

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



diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index 588a366..12895fd 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -53,6 +53,9 @@ void GameLoader::readSavegame(const char *fname) {
 	header.unkField = saveFile->readUint32LE();
 	header.encSize = saveFile->readUint32LE();
 
+	debugC(3, kDebugLoading, "version: %d magic: %s updateCounter: %d unkField: %d encSize: %d, pos: %d",
+			header.version, header.magic, header.updateCounter, header.unkField, header.encSize, saveFile->pos());
+
 	if (header.version != 48)
 		return;
 
diff --git a/engines/fullpipe/statesaver.cpp b/engines/fullpipe/statesaver.cpp
index c63587a..eaf0352 100644
--- a/engines/fullpipe/statesaver.cpp
+++ b/engines/fullpipe/statesaver.cpp
@@ -109,6 +109,9 @@ void GameLoader::writeSavegame(Scene *sc, const char *fname) {
 	saveFile->writeUint32LE(header.unkField);
 	saveFile->writeUint32LE(header.encSize);
 
+	debugC(3, kDebugLoading, "version: %d magic: %s updateCounter: %d unkField: %d encSize: %d, pos: %d",
+			header.version, header.magic, header.updateCounter, header.unkField, header.encSize, saveFile->pos());
+
 	saveFile->write(stream.getData(), stream.size());
 
 	saveFile->finalize();


Commit: 783d968e20fb7a29d5c19ba6671d6c9ba363ec41
    https://github.com/scummvm/scummvm/commit/783d968e20fb7a29d5c19ba6671d6c9ba363ec41
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-19T18:58:39+02:00

Commit Message:
FULLPIPE: Fix saving object to savegames

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



diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index 12895fd..1f327b5 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -78,11 +78,11 @@ void GameLoader::readSavegame(const char *fname) {
 	for (uint i = 0; i < header.encSize; i++)
 		data[i] -= i & 0x7f;
 
-	MfcArchive *archive = new MfcArchive(new Common::MemoryReadStream(data, header.encSize));
+	//Common::hexdump(data, 48);
 
-	GameVar var;
+	MfcArchive *archive = new MfcArchive(new Common::MemoryReadStream(data, header.encSize));
 
-	var.load(*archive);
+	GameVar *var = (GameVar *)archive->readClass();
 
 	GameVar *v = _gameVar->getSubVarByName("OBJSTATES");
 
@@ -96,7 +96,7 @@ void GameLoader::readSavegame(const char *fname) {
 		}
 	}
 
-	addVar(&var, v);
+	addVar(var, v);
 
 	getGameLoaderInventory()->loadPartial(*archive);
 
@@ -313,6 +313,8 @@ GameVar::GameVar() {
 	_varType = 0;
 	_value.floatValue = 0;
 	_varName = 0;
+
+	_objtype = kObjTypeGameVar;
 }
 
 GameVar::~GameVar() {
diff --git a/engines/fullpipe/statesaver.cpp b/engines/fullpipe/statesaver.cpp
index eaf0352..406c87a 100644
--- a/engines/fullpipe/statesaver.cpp
+++ b/engines/fullpipe/statesaver.cpp
@@ -97,6 +97,8 @@ void GameLoader::writeSavegame(Scene *sc, const char *fname) {
 	for (uint i = 0; i < header.encSize; i++)
 		stream.getData()[i] += i & 0x7f;
 
+	//Common::hexdump(stream.getData(), 48);
+
 	if (_savegameCallback)
 		_savegameCallback(archive, true);
 
diff --git a/engines/fullpipe/utils.cpp b/engines/fullpipe/utils.cpp
index 5403ade..ba0e180 100644
--- a/engines/fullpipe/utils.cpp
+++ b/engines/fullpipe/utils.cpp
@@ -109,7 +109,7 @@ char *MfcArchive::readPascalString(bool twoByte) {
 	return tmp;
 }
 
-void MfcArchive::writePascalString(char *str, bool twoByte) {
+void MfcArchive::writePascalString(const char *str, bool twoByte) {
 	int len = strlen(str);
 
 	if (twoByte)
@@ -475,6 +475,14 @@ void MfcArchive::writeObject(CObject *obj) {
 		writeUint16LE(0xffff); // New class
 		_objectHash[obj] = _lastIndex++;
 
+		switch (obj->_objtype) {
+		case kObjTypeGameVar:
+			writePascalString(lookupObjectId(kGameVar));
+			break;
+		default:
+			error("Unhandled save for object type: %d", obj->_objtype);
+		}
+
 		obj->save(*this);
 	}
 }
diff --git a/engines/fullpipe/utils.h b/engines/fullpipe/utils.h
index 44bda68..41a54f4 100644
--- a/engines/fullpipe/utils.h
+++ b/engines/fullpipe/utils.h
@@ -68,7 +68,7 @@ public:
 	MfcArchive(Common::WriteStream *file);
 
 	char *readPascalString(bool twoByte = false);
-	void writePascalString(char *str, bool twoByte = false);
+	void writePascalString(const char *str, bool twoByte = false);
 	int readCount();
 	double readDouble();
 	CObject *parseClass(bool *isCopyReturned);
@@ -103,7 +103,8 @@ enum ObjType {
 	kObjTypeMctlCompound,
 	kObjTypeObjstateCommand,
 	kObjTypePictureObject,
-	kObjTypeStaticANIObject
+	kObjTypeStaticANIObject,
+	kObjTypeGameVar
 };
 
 class CObject {


Commit: a60558071d0c6ffec9d099571fd1daff9e735532
    https://github.com/scummvm/scummvm/commit/a60558071d0c6ffec9d099571fd1daff9e735532
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-19T19:17:02+02:00

Commit Message:
FULLPIPE: Fix game save/load

Changed paths:
    engines/fullpipe/stateloader.cpp
    engines/fullpipe/statesaver.cpp
    engines/fullpipe/utils.cpp



diff --git a/engines/fullpipe/stateloader.cpp b/engines/fullpipe/stateloader.cpp
index 1f327b5..d5d374f 100644
--- a/engines/fullpipe/stateloader.cpp
+++ b/engines/fullpipe/stateloader.cpp
@@ -78,8 +78,6 @@ void GameLoader::readSavegame(const char *fname) {
 	for (uint i = 0; i < header.encSize; i++)
 		data[i] -= i & 0x7f;
 
-	//Common::hexdump(data, 48);
-
 	MfcArchive *archive = new MfcArchive(new Common::MemoryReadStream(data, header.encSize));
 
 	GameVar *var = (GameVar *)archive->readClass();
diff --git a/engines/fullpipe/statesaver.cpp b/engines/fullpipe/statesaver.cpp
index 406c87a..eaf0352 100644
--- a/engines/fullpipe/statesaver.cpp
+++ b/engines/fullpipe/statesaver.cpp
@@ -97,8 +97,6 @@ void GameLoader::writeSavegame(Scene *sc, const char *fname) {
 	for (uint i = 0; i < header.encSize; i++)
 		stream.getData()[i] += i & 0x7f;
 
-	//Common::hexdump(stream.getData(), 48);
-
 	if (_savegameCallback)
 		_savegameCallback(archive, true);
 
diff --git a/engines/fullpipe/utils.cpp b/engines/fullpipe/utils.cpp
index ba0e180..9dfebf2 100644
--- a/engines/fullpipe/utils.cpp
+++ b/engines/fullpipe/utils.cpp
@@ -475,9 +475,11 @@ void MfcArchive::writeObject(CObject *obj) {
 		writeUint16LE(0xffff); // New class
 		_objectHash[obj] = _lastIndex++;
 
+		writeUint16LE(1); // schema
+
 		switch (obj->_objtype) {
 		case kObjTypeGameVar:
-			writePascalString(lookupObjectId(kGameVar));
+			writePascalString(lookupObjectId(kGameVar), true); // Two byte counter
 			break;
 		default:
 			error("Unhandled save for object type: %d", obj->_objtype);





More information about the Scummvm-git-logs mailing list