aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMax Horn2011-02-11 17:05:27 +0000
committerMax Horn2011-02-11 17:05:27 +0000
commita9b051beff3157e1aa88b8090852850f55440e9b (patch)
tree067082b67254461ce7e3a4eaaa09936efd8e630c /engines
parent0544977daaf278c041d61a3fbbe959c814e49d6f (diff)
downloadscummvm-rg350-a9b051beff3157e1aa88b8090852850f55440e9b.tar.gz
scummvm-rg350-a9b051beff3157e1aa88b8090852850f55440e9b.tar.bz2
scummvm-rg350-a9b051beff3157e1aa88b8090852850f55440e9b.zip
SCI: Simplify SegManager::saveLoadWithSerializer, cleanup
svn-id: r55883
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/savegame.cpp53
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);