diff options
author | Max Horn | 2011-02-11 17:05:27 +0000 |
---|---|---|
committer | Max Horn | 2011-02-11 17:05:27 +0000 |
commit | a9b051beff3157e1aa88b8090852850f55440e9b (patch) | |
tree | 067082b67254461ce7e3a4eaaa09936efd8e630c | |
parent | 0544977daaf278c041d61a3fbbe959c814e49d6f (diff) | |
download | scummvm-rg350-a9b051beff3157e1aa88b8090852850f55440e9b.tar.gz scummvm-rg350-a9b051beff3157e1aa88b8090852850f55440e9b.tar.bz2 scummvm-rg350-a9b051beff3157e1aa88b8090852850f55440e9b.zip |
SCI: Simplify SegManager::saveLoadWithSerializer, cleanup
svn-id: r55883
-rw-r--r-- | engines/sci/engine/savegame.cpp | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index fbf0456af9..a59d4c000b 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -125,16 +125,14 @@ void syncWithSerializer(Common::Serializer &s, synonym_t &obj) { } void SegManager::saveLoadWithSerializer(Common::Serializer &s) { - if (s.isLoading()) + if (s.isLoading()) { resetSegMan(); - s.skip(4, VER(14), VER(18)); // OBSOLETE: Used to be _exportsAreWide - - if (s.isLoading()) { // Reset _scriptSegMap, to be restored below _scriptSegMap.clear(); } + s.skip(4, VER(14), VER(18)); // OBSOLETE: Used to be _exportsAreWide uint sync_heap_size = _heap.size(); s.syncAsUint32LE(sync_heap_size); @@ -180,25 +178,25 @@ void SegManager::saveLoadWithSerializer(Common::Serializer &s) { // Let the object sync custom data mobj->saveLoadWithSerializer(s); - // If we are saving a script, save its string heap space too - if (s.isSaving() && type == SEG_TYPE_SCRIPT) - ((Script *)mobj)->syncStringHeap(s); - - // If we are loading a script, perform some extra steps - if (s.isLoading() && type == SEG_TYPE_SCRIPT) { + + if (type == SEG_TYPE_SCRIPT && s.getVersion() >= 28) { Script *scr = (Script *)mobj; - // Hook the script up in the script->segment map - _scriptSegMap[scr->getScriptNumber()] = i; - // Now, load the script itself - scr->load(g_sci->getResMan()); + // If we are loading a script, perform some extra steps + if (s.isLoading()) { + // Hook the script up in the script->segment map + _scriptSegMap[scr->getScriptNumber()] = i; + + // Now, load the script itself + scr->load(g_sci->getResMan()); - for (ObjMap::iterator it = scr->_objects.begin(); it != scr->_objects.end(); ++it) - it->_value.syncBaseObject(scr->getBuf(it->_value.getPos().offset)); + for (ObjMap::iterator it = scr->_objects.begin(); it != scr->_objects.end(); ++it) + it->_value.syncBaseObject(scr->getBuf(it->_value.getPos().offset)); + + } - // Load the script's string heap - if (s.getVersion() >= 28) - scr->syncStringHeap(s); + // Sync the script's string heap + scr->syncStringHeap(s); } } @@ -344,15 +342,14 @@ void syncWithSerializer(Common::Serializer &s, Table<SciArray<reg_t> >::Entry &o byte type = 0; uint32 size = 0; - + if (s.isSaving()) { type = (byte)obj.getType(); size = obj.getSize(); - s.syncAsByte(type); - s.syncAsUint32LE(size); - } else { - s.syncAsByte(type); - s.syncAsUint32LE(size); + } + s.syncAsByte(type); + s.syncAsUint32LE(size); + if (s.isLoading()) { obj.setType((int8)type); // HACK: Skip arrays that have a negative type @@ -364,7 +361,7 @@ void syncWithSerializer(Common::Serializer &s, Table<SciArray<reg_t> >::Entry &o for (uint32 i = 0; i < size; i++) { reg_t value; - + if (s.isSaving()) value = obj.getValue(i); @@ -380,7 +377,7 @@ void syncWithSerializer(Common::Serializer &s, Table<SciString>::Entry &obj) { s.syncAsSint32LE(obj.next_free); uint32 size = 0; - + if (s.isSaving()) { size = obj.getSize(); s.syncAsUint32LE(size); @@ -391,7 +388,7 @@ void syncWithSerializer(Common::Serializer &s, Table<SciString>::Entry &obj) { for (uint32 i = 0; i < size; i++) { char value = 0; - + if (s.isSaving()) value = obj.getValue(i); |