aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/resources.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sherlock/resources.cpp')
-rw-r--r--engines/sherlock/resources.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/engines/sherlock/resources.cpp b/engines/sherlock/resources.cpp
index 02030119c0..9acba0ba2f 100644
--- a/engines/sherlock/resources.cpp
+++ b/engines/sherlock/resources.cpp
@@ -428,10 +428,22 @@ Common::SeekableReadStream *Resources::decompress(Common::SeekableReadStream &so
/**
* Decompress an LZW compressed resource
*/
+Common::SeekableReadStream *Resources::decompress(Common::SeekableReadStream &source, uint32 outSize) {
+ int inSize = (_vm->getGameID() == GType_RoseTattoo) ? source.readUint32LE() : -1;
+ byte *outBuffer = (byte *)malloc(outSize);
+ Common::MemoryReadStream *outStream = new Common::MemoryReadStream(outBuffer, outSize, DisposeAfterUse::YES);
+
+ decompressLZ(source, outBuffer, outSize, inSize);
+
+ return outStream;
+}
+
+/**
+ * Decompress an LZW compressed resource
+ */
void Resources::decompress(Common::SeekableReadStream &source, byte *buffer, uint32 outSize) {
- assert(_vm->getGameID() == GType_RoseTattoo);
+ int inputSize = (_vm->getGameID() == GType_RoseTattoo) ? source.readUint32LE() : -1;
- uint32 inputSize = source.readUint32LE();
decompressLZ(source, buffer, outSize, inputSize);
}
@@ -442,7 +454,7 @@ Common::SeekableReadStream *Resources::decompressLZ(Common::SeekableReadStream &
byte *outBuffer = (byte *)malloc(outSize);
Common::MemoryReadStream *outStream = new Common::MemoryReadStream(outBuffer, outSize, DisposeAfterUse::YES);
- decompressLZ(source, outSize);
+ decompressLZ(source, outBuffer, outSize, -1);
return outStream;
}
@@ -451,7 +463,7 @@ void Resources::decompressLZ(Common::SeekableReadStream &source, byte *outBuffer
uint16 lzWindowPos;
uint16 cmd;
byte *outBufferEnd = outBuffer + outSize;
- uint32 endPos = source.pos() + inSize;
+ int32 endPos = source.pos() + inSize;
memset(lzWindow, 0xFF, 0xFEE);
lzWindowPos = 0xFEE;