Common::SeekableReadStream *Resources::decompress(Common::SeekableReadStream &source, uint32 outSize) { int inSize = (_vm->getGameID() == GType_RoseTattoo) ? source.readSint32LE() : -1; byte *outBuffer = (byte *)malloc(outSize); Common::MemoryReadStream *outStream = new Common::MemoryReadStream(outBuffer, outSize, DisposeAfterUse::YES); decompressLZ(source, outBuffer, outSize, inSize); return outStream; }
Common::SeekableReadStream *Resources::decompress(Common::SeekableReadStream &source, uint32 outSize) { int inSize = IS_ROSE_TATTOO ? source.readSint32LE() : -1; byte *outBuffer = (byte *)malloc(outSize); Common::MemoryReadStream *outStream = new Common::MemoryReadStream(outBuffer, outSize, DisposeAfterUse::YES); decompressLZ(source, outBuffer, outSize, inSize); return outStream; }
Common::SeekableReadStream *Resources::decompress(Common::SeekableReadStream &source) { // This variation can't be used by Rose Tattoo, since compressed resources include the input size, // not the output size. Which means their decompression has to be done via passed buffers assert(_vm->getGameID() == GType_SerratedScalpel); uint32 id = source.readUint32BE(); assert(id == MKTAG('L', 'Z', 'V', 0x1A)); uint32 outputSize = source.readUint32LE(); return decompressLZ(source, outputSize); }
void Resources::decompressIfNecessary(Common::SeekableReadStream *&stream) { bool isCompressed = stream->readUint32BE() == MKTAG('L', 'Z', 'V', 26); if (isCompressed) { int outSize = stream->readUint32LE(); Common::SeekableReadStream *newStream = decompressLZ(*stream, outSize); delete stream; stream = newStream; } else { stream->seek(-4, SEEK_CUR); } }
Common::SeekableReadStream *Resources::decompressLZ(Common::SeekableReadStream &source, uint32 outSize) { byte *dataOut = (byte *)malloc(outSize); decompressLZ(source, dataOut, outSize, -1); return new Common::MemoryReadStream(dataOut, outSize, DisposeAfterUse::YES); }
void Resources::decompress(Common::SeekableReadStream &source, byte *buffer, uint32 outSize) { int inputSize = (_vm->getGameID() == GType_RoseTattoo) ? source.readSint32LE() : -1; decompressLZ(source, buffer, outSize, inputSize); }
void Resources::decompress(Common::SeekableReadStream &source, byte *buffer, uint32 outSize) { int inputSize = IS_ROSE_TATTOO ? source.readSint32LE() : -1; decompressLZ(source, buffer, outSize, inputSize); }