aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/scene.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2015-05-23 10:39:47 -0400
committerPaul Gilbert2015-05-23 10:39:47 -0400
commitc8cfca749a5da09aead4ca0c499def9afab5317c (patch)
treed6b2d455ad31258e0113a1dfe7185f588935d5ef /engines/sherlock/scene.cpp
parentb4b6bf63dbfd3f952f4ca207467315396b53bd23 (diff)
downloadscummvm-rg350-c8cfca749a5da09aead4ca0c499def9afab5317c.tar.gz
scummvm-rg350-c8cfca749a5da09aead4ca0c499def9afab5317c.tar.bz2
scummvm-rg350-c8cfca749a5da09aead4ca0c499def9afab5317c.zip
SHERLOCK: Fix Rose Tattoo scene loading problems from merge
Diffstat (limited to 'engines/sherlock/scene.cpp')
-rw-r--r--engines/sherlock/scene.cpp32
1 files changed, 19 insertions, 13 deletions
diff --git a/engines/sherlock/scene.cpp b/engines/sherlock/scene.cpp
index 2c80bfbd39..933e60d96d 100644
--- a/engines/sherlock/scene.cpp
+++ b/engines/sherlock/scene.cpp
@@ -311,27 +311,32 @@ bool Scene::loadScene(const Common::String &filename) {
bgInfo[idx].load(*rrmStream);
// Read information
- if (IS_SERRATED_SCALPEL) {
- Common::SeekableReadStream *infoStream = !_lzwMode ? rrmStream :
- res.decompress(*rrmStream, bgHeader._numStructs * 569 + bgHeader._descSize + bgHeader._seqSize);
+ if (IS_ROSE_TATTOO) {
+ // Load shapes
+ Common::SeekableReadStream *infoStream = !_lzwMode ? rrmStream : res.decompress(*rrmStream, bgHeader._numStructs * 625);
_bgShapes.resize(bgHeader._numStructs);
for (int idx = 0; idx < bgHeader._numStructs; ++idx)
- _bgShapes[idx].load(*infoStream, false);
+ _bgShapes[idx].load(*infoStream, _vm->getGameID() == GType_RoseTattoo);
- if (bgHeader._descSize) {
- _descText.resize(bgHeader._descSize);
- infoStream->read(&_descText[0], bgHeader._descSize);
- }
+ if (_lzwMode)
+ delete infoStream;
- if (bgHeader._seqSize) {
- _sequenceBuffer.resize(bgHeader._seqSize);
- infoStream->read(&_sequenceBuffer[0], bgHeader._seqSize);
- }
+ // Load description text
+ _descText.resize(bgHeader._descSize);
+ if (_lzwMode)
+ res.decompress(*rrmStream, (byte *)&_descText[0], bgHeader._descSize);
+ else
+ rrmStream->read(&_descText[0], bgHeader._descSize);
+ // Load sequences
+ _sequenceBuffer.resize(bgHeader._seqSize);
if (_lzwMode)
- delete infoStream;
+ res.decompress(*rrmStream, &_sequenceBuffer[0], bgHeader._seqSize);
+ else
+ rrmStream->read(&_sequenceBuffer[0], bgHeader._seqSize);
} else if (!_lzwMode) {
+ // Serrated Scalpel uncompressed info
_bgShapes.resize(bgHeader._numStructs);
for (int idx = 0; idx < bgHeader._numStructs; ++idx)
_bgShapes[idx].load(*rrmStream, false);
@@ -346,6 +351,7 @@ bool Scene::loadScene(const Common::String &filename) {
rrmStream->read(&_sequenceBuffer[0], bgHeader._seqSize);
}
} else {
+ // Serrated Scalpel compressed info
Common::SeekableReadStream *infoStream;
// Read shapes