diff options
author | Littleboy | 2012-08-01 02:58:55 -0400 |
---|---|---|
committer | Littleboy | 2012-08-01 02:58:55 -0400 |
commit | 7f05e1413c8b7b3913f64ddb29622dcdf40b2c65 (patch) | |
tree | 78d3c5997a58d8eb126ea1a612eb82fc8b1a3919 /engines | |
parent | eb6c60cec034a7758b8d25e29f501b10fc06c1a4 (diff) | |
download | scummvm-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
Diffstat (limited to 'engines')
-rw-r--r-- | engines/lastexpress/entities/entity.cpp | 8 | ||||
-rw-r--r-- | engines/lastexpress/game/savepoint.cpp | 10 | ||||
-rw-r--r-- | engines/lastexpress/sound/queue.cpp | 10 |
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); + } } } |