[Scummvm-git-logs] scummvm master -> b9e072275b68ab2aeeefb5c2213db0dd27e39e1d
sev-
sev at scummvm.org
Mon Mar 27 00:49:03 CEST 2017
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
b9e072275b DIRECTOR: Fixed processing of embedded RIFF archives
Commit: b9e072275b68ab2aeeefb5c2213db0dd27e39e1d
https://github.com/scummvm/scummvm/commit/b9e072275b68ab2aeeefb5c2213db0dd27e39e1d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-03-27T00:48:56+02:00
Commit Message:
DIRECTOR: Fixed processing of embedded RIFF archives
Changed paths:
engines/director/archive.cpp
engines/director/archive.h
diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp
index 340db3d..bcd064b 100644
--- a/engines/director/archive.cpp
+++ b/engines/director/archive.cpp
@@ -248,6 +248,8 @@ Common::SeekableSubReadStreamEndian *MacArchive::getResource(uint32 tag, uint16
bool RIFFArchive::openStream(Common::SeekableReadStream *stream, uint32 startOffset) {
close();
+ _startOffset = startOffset;
+
stream->seek(startOffset);
if (convertTagToUppercase(stream->readUint32BE()) != MKTAG('R', 'I', 'F', 'F'))
@@ -289,11 +291,11 @@ bool RIFFArchive::openStream(Common::SeekableReadStream *stream, uint32 startOff
stream->seek(startResPos);
- debug(3, "Found RIFF resource '%s' %d: %d @ 0x%08x", tag2str(tag), id, size, startOffset + offset);
+ debug(3, "Found RIFF resource '%s' %d: %d @ 0x%08x (0x%08x)", tag2str(tag), id, size, offset, startOffset + offset);
ResourceMap &resMap = _types[tag];
Resource &res = resMap[id];
- res.offset = offset + startOffset;
+ res.offset = offset;
res.size = size;
res.name = name;
}
@@ -317,7 +319,7 @@ Common::SeekableSubReadStreamEndian *RIFFArchive::getResource(uint32 tag, uint16
uint32 offset = res.offset + 12;
uint32 size = res.size - 4;
// Skip the Pascal string
- _stream->seek(offset);
+ _stream->seek(_startOffset + offset);
byte stringSize = _stream->readByte(); // 1 for this byte
offset += stringSize + 1;
@@ -329,7 +331,7 @@ Common::SeekableSubReadStreamEndian *RIFFArchive::getResource(uint32 tag, uint16
size--;
}
- return new Common::SeekableSubReadStreamEndian(_stream, offset, offset + size, true, DisposeAfterUse::NO);
+ return new Common::SeekableSubReadStreamEndian(_stream, _startOffset + offset, _startOffset + offset + size, true, DisposeAfterUse::NO);
}
// RIFX Archive code
diff --git a/engines/director/archive.h b/engines/director/archive.h
index 40b15d5..28be6cf 100644
--- a/engines/director/archive.h
+++ b/engines/director/archive.h
@@ -94,11 +94,13 @@ private:
class RIFFArchive : public Archive {
public:
- RIFFArchive() : Archive() {}
+ RIFFArchive() : Archive() { _startOffset = 0; }
~RIFFArchive() {}
bool openStream(Common::SeekableReadStream *stream, uint32 startOffset = 0);
Common::SeekableSubReadStreamEndian *getResource(uint32 tag, uint16 id);
+
+ uint32 _startOffset;
};
class RIFXArchive : public Archive {
More information about the Scummvm-git-logs
mailing list