diff --git a/engines/sherlock/resources.cpp b/engines/sherlock/resources.cpp index 864622e74b7..4e10ba97c97 100644 --- a/engines/sherlock/resources.cpp +++ b/engines/sherlock/resources.cpp @@ -91,9 +91,12 @@ Resources::Resources(SherlockEngine *vm) : _vm(vm), _cache(vm) { if (_vm->_interactiveFl) { addToCache("vgs.lib"); addToCache("talk.lib"); - addToCache("sequence.txt"); addToCache("journal.txt"); - addToCache("portrait.lib"); + + if (IS_SERRATED_SCALPEL) { + addToCache("sequence.txt"); + addToCache("portrait.lib"); + } } } @@ -310,7 +313,7 @@ void Resources::decompressLZ(Common::SeekableReadStream &source, byte *outBuffer lzWindowPos = (lzWindowPos + 1) & 0x0FFF; } } - } while ((outSize == -1 || outBuffer < outBufferEnd) || (inSize == -1 || source.pos() < endPos)); + } while ((outSize == -1 || outBuffer < outBufferEnd) && (inSize == -1 || source.pos() < endPos)); } /*----------------------------------------------------------------*/ diff --git a/engines/sherlock/scalpel/scalpel.cpp b/engines/sherlock/scalpel/scalpel.cpp index ccc9c8abca6..7209c342186 100644 --- a/engines/sherlock/scalpel/scalpel.cpp +++ b/engines/sherlock/scalpel/scalpel.cpp @@ -390,13 +390,6 @@ void ScalpelEngine::initialize() { _flags[3] = true; // Turn on Alley _flags[39] = true; // Turn on Baker Street - // Add some more files to the cache - _res->addToCache("portrait.lib"); - _res->addToCache("sequence.txt"); - _res->addToCache("EPILOGUE.SND"); - _res->addToCache("snd.snd"); - _res->addToCache("title.snd"); - if (!isDemo()) { // Load the map co-ordinates for each scene and sequence data _map->loadPoints(NUM_PLACES, &MAP_X[0], &MAP_Y[0], &MAP_TRANSLATE[0]); diff --git a/engines/sherlock/scene.cpp b/engines/sherlock/scene.cpp index 2c80bfbd39f..933e60d96d8 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); - - if (bgHeader._descSize) { - _descText.resize(bgHeader._descSize); - infoStream->read(&_descText[0], bgHeader._descSize); - } - - if (bgHeader._seqSize) { - _sequenceBuffer.resize(bgHeader._seqSize); - infoStream->read(&_sequenceBuffer[0], bgHeader._seqSize); - } + _bgShapes[idx].load(*infoStream, _vm->getGameID() == GType_RoseTattoo); if (_lzwMode) delete infoStream; + + // 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) + 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 diff --git a/engines/sherlock/sound.cpp b/engines/sherlock/sound.cpp index 06f6a0f264c..b8fe61dd29b 100644 --- a/engines/sherlock/sound.cpp +++ b/engines/sherlock/sound.cpp @@ -68,11 +68,16 @@ Sound::Sound(SherlockEngine *vm, Audio::Mixer *mixer) : _vm(vm), _mixer(mixer) { _vm->_res->addToCache("TITLE.SND"); else { _vm->_res->addToCache("MUSIC.LIB"); - _vm->_res->addToCache("SND.SND"); + + if (IS_ROSE_TATTOO) { + _vm->_res->addToCache("SOUND.LIB"); + } else { + _vm->_res->addToCache("SND.SND"); - if (!_vm->isDemo()) { - _vm->_res->addToCache("TITLE.SND"); - _vm->_res->addToCache("EPILOGUE.SND"); + if (!_vm->isDemo()) { + _vm->_res->addToCache("TITLE.SND"); + _vm->_res->addToCache("EPILOGUE.SND"); + } } } } diff --git a/engines/sherlock/tattoo/tattoo.cpp b/engines/sherlock/tattoo/tattoo.cpp index 3c684ff3ee9..9039e3f9d47 100644 --- a/engines/sherlock/tattoo/tattoo.cpp +++ b/engines/sherlock/tattoo/tattoo.cpp @@ -44,7 +44,6 @@ void TattooEngine::initialize() { // Add some more files to the cache _res->addToCache("walk.lib"); - _res->addToCache("sound.lib"); // Starting scene _scene->_goToScene = 91;