[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