aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLittleboy2012-08-01 02:58:55 -0400
committerLittleboy2012-08-01 02:58:55 -0400
commit7f05e1413c8b7b3913f64ddb29622dcdf40b2c65 (patch)
tree78d3c5997a58d8eb126ea1a612eb82fc8b1a3919
parenteb6c60cec034a7758b8d25e29f501b10fc06c1a4 (diff)
downloadscummvm-rg350-7f05e1413c8b7b3913f64ddb29622dcdf40b2c65.tar.gz
scummvm-rg350-7f05e1413c8b7b3913f64ddb29622dcdf40b2c65.tar.bz2
scummvm-rg350-7f05e1413c8b7b3913f64ddb29622dcdf40b2c65.zip
LASTEXPRESS: Remove use of skip from savegame functions when loading
We cannot accurately skip over compressed data as it is not know before decoding how much data will be used
-rw-r--r--engines/lastexpress/entities/entity.cpp8
-rw-r--r--engines/lastexpress/game/savepoint.cpp10
-rw-r--r--engines/lastexpress/sound/queue.cpp10
3 files changed, 25 insertions, 3 deletions
diff --git a/engines/lastexpress/entities/entity.cpp b/engines/lastexpress/entities/entity.cpp
index 4b1fda9c12..2deca291f6 100644
--- a/engines/lastexpress/entities/entity.cpp
+++ b/engines/lastexpress/entities/entity.cpp
@@ -88,7 +88,13 @@ void EntityData::EntityCallData::saveLoadWithSerializer(Common::Serializer &s) {
syncString(s, sequenceNameCopy, 13);
// Skip pointers to frame & sequences
- s.skip(5 * 4);
+ // (we are using a compressed stream, so we cannot seek on load)
+ if (s.isLoading()) {
+ byte empty[5 * 4];
+ s.syncBytes(empty, 5 * 4);
+ } else {
+ s.skip(5 * 4);
+ }
}
//////////////////////////////////////////////////////////////////////////
diff --git a/engines/lastexpress/game/savepoint.cpp b/engines/lastexpress/game/savepoint.cpp
index 557468e222..6b2dfc5930 100644
--- a/engines/lastexpress/game/savepoint.cpp
+++ b/engines/lastexpress/game/savepoint.cpp
@@ -242,7 +242,15 @@ void SavePoints::saveLoadWithSerializer(Common::Serializer &s) {
}
// Skip uninitialized data if any
- s.skip((_savePointsMaxSize - dataSize) * 16);
+ // (we are using a compressed stream, so we cannot seek on load)
+ uint32 unusedDataSize = (_savePointsMaxSize - dataSize) * 16;
+ if (s.isLoading()) {
+ byte *empty = (byte *)malloc(unusedDataSize);
+ s.syncBytes(empty, unusedDataSize);
+ free(empty);
+ } else {
+ s.skip(unusedDataSize);
+ }
// Number of savepoints
uint32 numSavepoints = _savepoints.size();
diff --git a/engines/lastexpress/sound/queue.cpp b/engines/lastexpress/sound/queue.cpp
index 7b3dbcf2d9..d72acfd8a0 100644
--- a/engines/lastexpress/sound/queue.cpp
+++ b/engines/lastexpress/sound/queue.cpp
@@ -372,7 +372,15 @@ void SoundQueue::saveLoadWithSerializer(Common::Serializer &s) {
(*i)->saveLoadWithSerializer(s);
} else {
warning("[Sound::saveLoadWithSerializer] Loading not implemented");
- s.skip(numEntries * 64);
+
+ uint32 unusedDataSize = numEntries * 64;
+ if (s.isLoading()) {
+ byte *empty = (byte *)malloc(unusedDataSize);
+ s.syncBytes(empty, unusedDataSize);
+ free(empty);
+ } else {
+ s.skip(unusedDataSize);
+ }
}
}