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

sev- sev at scummvm.org
Sun Sep 18 01:00:20 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:
f0d786184b FULLPIPE: Properly save object backreferences
ffe2c802c4 FULLPIPE: Save header, remove debug leftovers


Commit: f0d786184bb9b3cfefc16fb2be87d6c6d1017160
    https://github.com/scummvm/scummvm/commit/f0d786184bb9b3cfefc16fb2be87d6c6d1017160
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-18T00:59:17+02:00

Commit Message:
FULLPIPE: Properly save object backreferences

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



diff --git a/engines/fullpipe/utils.cpp b/engines/fullpipe/utils.cpp
index fff2dad..5403ade 100644
--- a/engines/fullpipe/utils.cpp
+++ b/engines/fullpipe/utils.cpp
@@ -460,10 +460,23 @@ CObject *MfcArchive::parseClass(bool *isCopyReturned) {
 }
 
 void MfcArchive::writeObject(CObject *obj) {
-	if (obj == NULL)
+	if (obj == NULL) {
 		writeUint16LE(0);
-	else
+	} else if (_objectHash.contains(obj)) {
+		int32 idx = _objectHash[obj];
+
+		if (idx < 0x7fff) {
+			writeUint16LE(idx);
+		} else {
+			writeUint16LE(0x7fff);
+			writeUint32LE(idx);
+		}
+	} else {
+		writeUint16LE(0xffff); // New class
+		_objectHash[obj] = _lastIndex++;
+
 		obj->save(*this);
+	}
 }
 
 char *genFileName(int superId, int sceneId, const char *ext) {
diff --git a/engines/fullpipe/utils.h b/engines/fullpipe/utils.h
index 5de919d..44bda68 100644
--- a/engines/fullpipe/utils.h
+++ b/engines/fullpipe/utils.h
@@ -32,12 +32,30 @@ namespace Fullpipe {
 class CObject;
 class NGIArchive;
 
+struct Pointer_EqualTo {
+	bool operator()(const void *x, const void *y) const { return x == y; }
+};
+
+struct Pointer_Hash {
+	uint operator()(const void *x) const {
+#ifdef SCUMM_64BITS
+		uint64 v = (uint64)x;
+		return (v >> 32) ^ (v & 0xffffffff);
+#else
+		return (uint)x;
+#endif
+	}
+};
+
+typedef Common::HashMap<void *, int, Pointer_Hash, Pointer_EqualTo> ObjHash;
+
 typedef Common::HashMap<Common::String, int, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> ClassMap;
 
 class MfcArchive : public Common::SeekableReadStream, public Common::WriteStream {
 	ClassMap _classMap;
 	Common::Array<CObject *> _objectMap;
 	Common::Array<int> _objectIdMap;
+	ObjHash _objectHash;
 
 	int _lastIndex;
 	int _level;


Commit: ffe2c802c471826913e79333a979d41c94a9cc67
    https://github.com/scummvm/scummvm/commit/ffe2c802c471826913e79333a979d41c94a9cc67
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-18T00:59:40+02:00

Commit Message:
FULLPIPE: Save header, remove debug leftovers

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



diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp
index 5d204bf..8524a8d 100644
--- a/engines/fullpipe/gameloader.cpp
+++ b/engines/fullpipe/gameloader.cpp
@@ -651,7 +651,6 @@ void GameLoader::writeSavegame(Scene *sc, const char *fname) {
 		v->_parentVarObj = 0;
 		v->_nextVarObj = 0;
 		v->_prevVarObj = 0;
-		warning("NULLIFIED");
 	}
 
 	archive->writeObject(v);
@@ -683,6 +682,8 @@ void GameLoader::writeSavegame(Scene *sc, const char *fname) {
 	// 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();
diff --git a/engines/fullpipe/statesaver.cpp b/engines/fullpipe/statesaver.cpp
index a889707..2839cff 100644
--- a/engines/fullpipe/statesaver.cpp
+++ b/engines/fullpipe/statesaver.cpp
@@ -47,7 +47,6 @@ void PicAniInfo::save(MfcArchive &file) {
 }
 
 void GameVar::save(MfcArchive &file) {
-	warning("Saving: %s", transCyrillic((byte *)_varName));
 	file.writePascalString(_varName);
 	file.writeUint32LE(_varType);
 
@@ -65,15 +64,10 @@ void GameVar::save(MfcArchive &file) {
 		error("Unknown var type: %d (0x%x)", _varType, _varType);
 	}
 
-	warning("Saving: %s, _parent", transCyrillic((byte *)_varName));
 	file.writeObject(_parentVarObj);
-	warning("Saving: %s, _prev", transCyrillic((byte *)_varName));
 	file.writeObject(_prevVarObj);
-	warning("Saving: %s, _next", transCyrillic((byte *)_varName));
 	file.writeObject(_nextVarObj);
-	warning("Saving: %s, _field", transCyrillic((byte *)_varName));
 	file.writeObject(_field_14);
-	warning("Saving: %s, _subs", transCyrillic((byte *)_varName));
 	file.writeObject(_subVars);
 }
 





More information about the Scummvm-git-logs mailing list