[Scummvm-git-logs] scummvm master -> af8fa6a82e3792585fe659266e8d7824170a3f19

djsrv dservilla at gmail.com
Wed Aug 12 21:27:59 UTC 2020


This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
baacf3c1ab DIRECTOR: Replace SeekableSubReadStreamEndian
61a02b7606 DIRECTOR: Implement DCR getResource
9ae219aff1 DIRECTOR: More gracefully handle missing BITD
d846db8da6 DIRECTOR: Fix loading KEY* from Shockwave movies
af8fa6a82e DIRECTOR: Fix Shockwave chunk dumping


Commit: baacf3c1ab6f5d6bb7738f0d05bcca6a44eef328
    https://github.com/scummvm/scummvm/commit/baacf3c1ab6f5d6bb7738f0d05bcca6a44eef328
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-12T17:26:55-04:00

Commit Message:
DIRECTOR: Replace SeekableSubReadStreamEndian

Use the superclass SeekableReadStreamEndian.

Changed paths:
    engines/director/archive.cpp
    engines/director/archive.h
    engines/director/cast.cpp
    engines/director/cast.h
    engines/director/cursor.cpp
    engines/director/director.h
    engines/director/frame.cpp
    engines/director/frame.h
    engines/director/lingo/lingo-bytecode.cpp
    engines/director/lingo/lingo.h
    engines/director/movie.cpp
    engines/director/movie.h
    engines/director/resource.cpp
    engines/director/score.cpp
    engines/director/score.h
    engines/director/sound.cpp
    engines/director/sound.h
    engines/director/stxt.cpp
    engines/director/stxt.h


diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp
index 831663285f..e564ad40c1 100644
--- a/engines/director/archive.cpp
+++ b/engines/director/archive.cpp
@@ -103,11 +103,11 @@ bool Archive::hasResource(uint32 tag, const Common::String &resName) const {
 	return false;
 }
 
-Common::SeekableSubReadStreamEndian *Archive::getFirstResource(uint32 tag) {
+Common::SeekableReadStreamEndian *Archive::getFirstResource(uint32 tag) {
 	return getResource(tag, getResourceIDList(tag)[0]);
 }
 
-Common::SeekableSubReadStreamEndian *Archive::getResource(uint32 tag, uint16 id) {
+Common::SeekableReadStreamEndian *Archive::getResource(uint32 tag, uint16 id) {
 	if (!_types.contains(tag))
 		error("Archive::getResource(): Archive does not contain '%s' %d", tag2str(tag), id);
 
@@ -279,7 +279,7 @@ void MacArchive::readTags() {
 	}
 }
 
-Common::SeekableSubReadStreamEndian *MacArchive::getResource(uint32 tag, uint16 id) {
+Common::SeekableReadStreamEndian *MacArchive::getResource(uint32 tag, uint16 id) {
 	assert(_resFork);
 	Common::SeekableReadStream *stream = _resFork->getResource(tag, id);
 
@@ -359,7 +359,7 @@ bool RIFFArchive::openStream(Common::SeekableReadStream *stream, uint32 startOff
 	return true;
 }
 
-Common::SeekableSubReadStreamEndian *RIFFArchive::getResource(uint32 tag, uint16 id) {
+Common::SeekableReadStreamEndian *RIFFArchive::getResource(uint32 tag, uint16 id) {
 	if (!_types.contains(tag))
 		error("RIFFArchive::getResource(): Archive does not contain '%s' %d", tag2str(tag), id);
 
@@ -527,7 +527,7 @@ bool RIFXArchive::openStream(Common::SeekableReadStream *stream, uint32 startOff
 
 	// Parse the CAS*, if present
 	if (hasResource(MKTAG('C', 'A', 'S', '*'), -1)) {
-		Common::SeekableSubReadStreamEndian *casStream = getFirstResource(MKTAG('C', 'A', 'S', '*'));
+		Common::SeekableReadStreamEndian *casStream = getFirstResource(MKTAG('C', 'A', 'S', '*'));
 		readCast(*casStream);
 		delete casStream;
 	}
@@ -538,14 +538,14 @@ bool RIFXArchive::openStream(Common::SeekableReadStream *stream, uint32 startOff
 		return false;
 	}
 	// Parse the KEY*
-	Common::SeekableSubReadStreamEndian *keyStream = getFirstResource(MKTAG('K', 'E', 'Y', '*'), true);
+	Common::SeekableReadStreamEndian *keyStream = getFirstResource(MKTAG('K', 'E', 'Y', '*'), true);
 	readKeyTable(*keyStream);
 	delete keyStream;
 
 	return true;
 }
 
-bool RIFXArchive::readMemoryMap(Common::SeekableSubReadStreamEndian &stream, uint32 moreOffset) {
+bool RIFXArchive::readMemoryMap(Common::SeekableReadStreamEndian &stream, uint32 moreOffset) {
 	if (stream.readUint32() != MKTAG('i', 'm', 'a', 'p'))
 		return false;
 
@@ -606,7 +606,7 @@ bool RIFXArchive::readMemoryMap(Common::SeekableSubReadStreamEndian &stream, uin
 	return true;
 }
 
-bool RIFXArchive::readAfterburnerMap(Common::SeekableSubReadStreamEndian &stream, uint32 moreOffset) {
+bool RIFXArchive::readAfterburnerMap(Common::SeekableReadStreamEndian &stream, uint32 moreOffset) {
 	uint32 start, end;
 
 	// File version
@@ -752,7 +752,7 @@ bool RIFXArchive::readAfterburnerMap(Common::SeekableSubReadStreamEndian &stream
 	return true;
 }
 
-void RIFXArchive::readCast(Common::SeekableSubReadStreamEndian &casStream) {
+void RIFXArchive::readCast(Common::SeekableReadStreamEndian &casStream) {
 	uint castTag = MKTAG('C', 'A', 'S', 't');
 
 	uint casSize = casStream.size() / 4;
@@ -772,7 +772,7 @@ void RIFXArchive::readCast(Common::SeekableSubReadStreamEndian &casStream) {
 	debugC(2, kDebugLoading, "]");
 }
 
-void RIFXArchive::readKeyTable(Common::SeekableSubReadStreamEndian &keyStream) {
+void RIFXArchive::readKeyTable(Common::SeekableReadStreamEndian &keyStream) {
 	uint16 entrySize = keyStream.readUint16(); // Should always be 12 (3 uint32's)
 	uint16 entrySize2 = keyStream.readUint16();
 	uint32 entryCount = keyStream.readUint32(); // There are more entries than actually used
@@ -791,19 +791,19 @@ void RIFXArchive::readKeyTable(Common::SeekableSubReadStreamEndian &keyStream) {
 	}
 }
 
-Common::SeekableSubReadStreamEndian *RIFXArchive::getFirstResource(uint32 tag) {
+Common::SeekableReadStreamEndian *RIFXArchive::getFirstResource(uint32 tag) {
 	return getResource(tag, getResourceIDList(tag)[0], false);
 }
 
-Common::SeekableSubReadStreamEndian *RIFXArchive::getFirstResource(uint32 tag, bool fileEndianness) {
+Common::SeekableReadStreamEndian *RIFXArchive::getFirstResource(uint32 tag, bool fileEndianness) {
 	return getResource(tag, getResourceIDList(tag)[0], fileEndianness);
 }
 
-Common::SeekableSubReadStreamEndian *RIFXArchive::getResource(uint32 tag, uint16 id) {
+Common::SeekableReadStreamEndian *RIFXArchive::getResource(uint32 tag, uint16 id) {
 	return getResource(tag, id, false);
 }
 
-Common::SeekableSubReadStreamEndian *RIFXArchive::getResource(uint32 tag, uint16 id, bool fileEndianness) {
+Common::SeekableReadStreamEndian *RIFXArchive::getResource(uint32 tag, uint16 id, bool fileEndianness) {
 	if (!_types.contains(tag))
 		error("RIFXArchive::getResource(): Archive does not contain '%s' %d", tag2str(tag), id);
 
diff --git a/engines/director/archive.h b/engines/director/archive.h
index 61bf52efcc..64032ae23e 100644
--- a/engines/director/archive.h
+++ b/engines/director/archive.h
@@ -25,7 +25,7 @@
 
 namespace Common {
 class MacResManager;
-class SeekableSubReadStreamEndian;
+class SeekableReadStreamEndian;
 class SeekableReadStream;
 }
 
@@ -63,8 +63,8 @@ public:
 
 	bool hasResource(uint32 tag, int id) const;
 	bool hasResource(uint32 tag, const Common::String &resName) const;
-	virtual Common::SeekableSubReadStreamEndian *getResource(uint32 tag, uint16 id);
-	virtual Common::SeekableSubReadStreamEndian *getFirstResource(uint32 tag);
+	virtual Common::SeekableReadStreamEndian *getResource(uint32 tag, uint16 id);
+	virtual Common::SeekableReadStreamEndian *getFirstResource(uint32 tag);
 	virtual Resource getResourceDetail(uint32 tag, uint16 id);
 	uint32 getOffset(uint32 tag, uint16 id) const;
 	uint16 findResourceID(uint32 tag, const Common::String &resName) const;
@@ -92,7 +92,7 @@ public:
 	void close() override;
 	bool openFile(const Common::String &fileName) override;
 	bool openStream(Common::SeekableReadStream *stream, uint32 startOffset = 0) override;
-	Common::SeekableSubReadStreamEndian *getResource(uint32 tag, uint16 id) override;
+	Common::SeekableReadStreamEndian *getResource(uint32 tag, uint16 id) override;
 
 private:
 	Common::MacResManager *_resFork;
@@ -106,7 +106,7 @@ public:
 	~RIFFArchive() override {}
 
 	bool openStream(Common::SeekableReadStream *stream, uint32 startOffset = 0) override;
-	Common::SeekableSubReadStreamEndian *getResource(uint32 tag, uint16 id) override;
+	Common::SeekableReadStreamEndian *getResource(uint32 tag, uint16 id) override;
 
 	uint32 _startOffset;
 };
@@ -117,17 +117,17 @@ public:
 	~RIFXArchive() override;
 
 	bool openStream(Common::SeekableReadStream *stream, uint32 startOffset = 0) override;
-	Common::SeekableSubReadStreamEndian *getFirstResource(uint32 tag) override;
-	virtual Common::SeekableSubReadStreamEndian *getFirstResource(uint32 tag, bool fileEndianness);
-	Common::SeekableSubReadStreamEndian *getResource(uint32 tag, uint16 id) override;
-	virtual Common::SeekableSubReadStreamEndian *getResource(uint32 tag, uint16 id, bool fileEndianness);
+	Common::SeekableReadStreamEndian *getFirstResource(uint32 tag) override;
+	virtual Common::SeekableReadStreamEndian *getFirstResource(uint32 tag, bool fileEndianness);
+	Common::SeekableReadStreamEndian *getResource(uint32 tag, uint16 id) override;
+	virtual Common::SeekableReadStreamEndian *getResource(uint32 tag, uint16 id, bool fileEndianness);
 	Resource getResourceDetail(uint32 tag, uint16 id) override;
 
 private:
-	bool readMemoryMap(Common::SeekableSubReadStreamEndian &stream, uint32 moreOffset);
-	bool readAfterburnerMap(Common::SeekableSubReadStreamEndian &stream, uint32 moreOffset);
-	void readCast(Common::SeekableSubReadStreamEndian &casStream);
-	void readKeyTable(Common::SeekableSubReadStreamEndian &keyStream);
+	bool readMemoryMap(Common::SeekableReadStreamEndian &stream, uint32 moreOffset);
+	bool readAfterburnerMap(Common::SeekableReadStreamEndian &stream, uint32 moreOffset);
+	void readCast(Common::SeekableReadStreamEndian &casStream);
+	void readKeyTable(Common::SeekableReadStreamEndian &keyStream);
 
 protected:
 	uint32 _rifxType;
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 78efb80a37..8e673193f2 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -208,7 +208,7 @@ bool Cast::loadArchive() {
 		debugC(2, kDebugLoading, "CLUT resource not found, using default Mac palette");
 	} else {
 		for (uint i = 0; i < clutList.size(); i++) {
-			Common::SeekableSubReadStreamEndian *pal = _castArchive->getResource(MKTAG('C', 'L', 'U', 'T'), clutList[i]);
+			Common::SeekableReadStreamEndian *pal = _castArchive->getResource(MKTAG('C', 'L', 'U', 'T'), clutList[i]);
 
 			debugC(2, kDebugLoading, "****** Loading Palette CLUT, #%d", clutList[i]);
 			PaletteV4 p = loadPalette(*pal);
@@ -218,7 +218,7 @@ bool Cast::loadArchive() {
 	}
 
 	// Configuration Information
-	Common::SeekableSubReadStreamEndian *r = nullptr;
+	Common::SeekableReadStreamEndian *r = nullptr;
 	if (_castArchive->hasResource(MKTAG('V', 'W', 'C', 'F'), -1)) {
 		loadConfig(*(r = _castArchive->getFirstResource(MKTAG('V', 'W', 'C', 'F'))));
 		delete r;
@@ -284,7 +284,7 @@ bool Cast::loadArchive() {
 		debugC(2, kDebugLoading, "****** Loading %d CASt resources", cast.size());
 
 		for (Common::Array<uint16>::iterator iterator = cast.begin(); iterator != cast.end(); ++iterator) {
-			Common::SeekableSubReadStreamEndian *stream = _castArchive->getResource(MKTAG('C', 'A', 'S', 't'), *iterator);
+			Common::SeekableReadStreamEndian *stream = _castArchive->getResource(MKTAG('C', 'A', 'S', 't'), *iterator);
 			Resource res = _castArchive->getResourceDetail(MKTAG('C', 'A', 'S', 't'), *iterator);
 			loadCastData(*stream, res.castId, &res);
 			delete stream;
@@ -378,7 +378,7 @@ uint16 humanVersion(uint16 ver) {
 	return 200;
 }
 
-void Cast::loadConfig(Common::SeekableSubReadStreamEndian &stream) {
+void Cast::loadConfig(Common::SeekableReadStreamEndian &stream) {
 	debugC(1, kDebugLoading, "****** Loading Config VWCF");
 
 	if (debugChannelSet(5, kDebugLoading))
@@ -607,7 +607,7 @@ void Cast::loadSoundCasts() {
 			tag = soundCast->_children[0].tag;
 		}
 
-		Common::SeekableSubReadStreamEndian *sndData = NULL;
+		Common::SeekableReadStreamEndian *sndData = NULL;
 
 		switch (tag) {
 		case MKTAG('S', 'N', 'D', ' '):
@@ -659,7 +659,7 @@ void Cast::loadDigitalVideoCasts() {
 			tag = digitalVideoCast->_children[0].tag;
 		}
 
-		Common::SeekableSubReadStreamEndian *videoData = NULL;
+		Common::SeekableReadStreamEndian *videoData = NULL;
 
 		switch (tag) {
 		case MKTAG('M', 'o', 'o', 'V'):
@@ -690,7 +690,7 @@ void Cast::loadDigitalVideoCasts() {
 
 }
 
-PaletteV4 Cast::loadPalette(Common::SeekableSubReadStreamEndian &stream) {
+PaletteV4 Cast::loadPalette(Common::SeekableReadStreamEndian &stream) {
 	uint16 steps = stream.size() / 6;
 	uint16 index = (steps * 3) - 1;
 	byte *_palette = new byte[index + 1];
@@ -717,7 +717,7 @@ PaletteV4 Cast::loadPalette(Common::SeekableSubReadStreamEndian &stream) {
 	return PaletteV4(0, _palette, steps);
 }
 
-void Cast::loadCastDataVWCR(Common::SeekableSubReadStreamEndian &stream) {
+void Cast::loadCastDataVWCR(Common::SeekableReadStreamEndian &stream) {
 	debugC(1, kDebugLoading, "****** Loading CastMember rects VWCR. start: %d, end: %d", _castArrayStart, _castArrayEnd);
 
 	_loadedCast = new Common::HashMap<int, CastMember *>();
@@ -798,7 +798,7 @@ static void readEditInfo(EditInfo *info, Common::ReadStreamEndian *stream) {
 	}
 }
 
-void Cast::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id, Resource *res) {
+void Cast::loadCastData(Common::SeekableReadStreamEndian &stream, uint16 id, Resource *res) {
 	// IDs are stored as relative to the start of the cast array.
 	id += _castArrayStart;
 
@@ -963,7 +963,7 @@ struct LingoContextEntry {
 LingoContextEntry::LingoContextEntry(int32 i, int16 n)
 	: index(i), nextUnused(n), unused(false) {}
 
-void Cast::loadLingoContext(Common::SeekableSubReadStreamEndian &stream) {
+void Cast::loadLingoContext(Common::SeekableReadStreamEndian &stream) {
 	if (_vm->getVersion() >= 400) {
 		debugC(1, kDebugCompile, "Add V4 script context");
 
@@ -988,7 +988,7 @@ void Cast::loadLingoContext(Common::SeekableSubReadStreamEndian &stream) {
 		/* uint16 flags = */ stream.readUint16();
 		int16 firstUnused = stream.readSint16();
 
-		Common::SeekableSubReadStreamEndian *r;
+		Common::SeekableReadStreamEndian *r;
 		debugC(2, kDebugLoading, "****** Loading Lnam resource (%d)", nameTableId);
 		_lingoArchive->addNamesV4(*(r = _castArchive->getResource(MKTAG('L','n','a','m'), nameTableId)));
 		delete r;
@@ -1050,7 +1050,7 @@ void Cast::loadLingoContext(Common::SeekableSubReadStreamEndian &stream) {
 	}
 }
 
-void Cast::loadScriptText(Common::SeekableSubReadStreamEndian &stream) {
+void Cast::loadScriptText(Common::SeekableReadStreamEndian &stream) {
 	/*uint32 unk1 = */ stream.readUint32();
 	uint32 strLen = stream.readUint32();
 	/*uin32 dataLen = */ stream.readUint32();
@@ -1097,7 +1097,7 @@ void Cast::dumpScript(const char *script, ScriptType type, uint16 id) {
 	out.close();
 }
 
-void Cast::loadCastInfo(Common::SeekableSubReadStreamEndian &stream, uint16 id) {
+void Cast::loadCastInfo(Common::SeekableReadStreamEndian &stream, uint16 id) {
 	if (!_loadedCast->contains(id))
 		return;
 
@@ -1193,7 +1193,7 @@ void Cast::loadCastInfo(Common::SeekableSubReadStreamEndian &stream, uint16 id)
 	_castsInfo[id] = ci;
 }
 
-void Cast::loadFontMap(Common::SeekableSubReadStreamEndian &stream) {
+void Cast::loadFontMap(Common::SeekableReadStreamEndian &stream) {
 	if (stream.size() == 0)
 		return;
 
diff --git a/engines/director/cast.h b/engines/director/cast.h
index 0a932fcf6d..15fa8bf562 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -28,7 +28,7 @@
 namespace Common {
 	class ReadStreamEndian;
 	struct Rect;
-	class SeekableSubReadStreamEndian;
+	class SeekableReadStreamEndian;
 }
 
 namespace Director {
@@ -56,11 +56,11 @@ public:
 	Archive *getArchive() const { return _castArchive; };
 	Common::String getMacName() const { return _macName; }
 
-	void loadConfig(Common::SeekableSubReadStreamEndian &stream);
-	void loadCastDataVWCR(Common::SeekableSubReadStreamEndian &stream);
-	void loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id, Resource *res);
-	void loadCastInfo(Common::SeekableSubReadStreamEndian &stream, uint16 id);
-	void loadLingoContext(Common::SeekableSubReadStreamEndian &stream);
+	void loadConfig(Common::SeekableReadStreamEndian &stream);
+	void loadCastDataVWCR(Common::SeekableReadStreamEndian &stream);
+	void loadCastData(Common::SeekableReadStreamEndian &stream, uint16 id, Resource *res);
+	void loadCastInfo(Common::SeekableReadStreamEndian &stream, uint16 id);
+	void loadLingoContext(Common::SeekableReadStreamEndian &stream);
 
 	void loadCastChildren();
 	void loadSoundCasts();
@@ -78,9 +78,9 @@ public:
 	void dumpScript(const char *script, ScriptType type, uint16 id);
 
 private:
-	PaletteV4 loadPalette(Common::SeekableSubReadStreamEndian &stream);
-	void loadScriptText(Common::SeekableSubReadStreamEndian &stream);
-	void loadFontMap(Common::SeekableSubReadStreamEndian &stream);
+	PaletteV4 loadPalette(Common::SeekableReadStreamEndian &stream);
+	void loadScriptText(Common::SeekableReadStreamEndian &stream);
+	void loadFontMap(Common::SeekableReadStreamEndian &stream);
 	Common::String getString(Common::String str);
 
 public:
diff --git a/engines/director/cursor.cpp b/engines/director/cursor.cpp
index ed90be9d70..fc087d6ab2 100644
--- a/engines/director/cursor.cpp
+++ b/engines/director/cursor.cpp
@@ -132,7 +132,7 @@ void Cursor::readFromResource(int resourceId) {
 		_keyColor = 0xff;
 
 		for (Common::HashMap<Common::String, Archive *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = g_director->_openResFiles.begin(); it != g_director->_openResFiles.end(); ++it) {
-			Common::SeekableSubReadStreamEndian *cursorStream;
+			Common::SeekableReadStreamEndian *cursorStream;
 
 			cursorStream = ((MacArchive *)it->_value)->getResource(MKTAG('C', 'U', 'R', 'S'), resourceId);
 			if (!cursorStream)
diff --git a/engines/director/director.h b/engines/director/director.h
index 57fc52c288..2916f52da8 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -39,7 +39,7 @@
 namespace Common {
 class MacResManager;
 class SeekableReadStream;
-class SeekableSubReadStreamEndian;
+class SeekableReadStreamEndian;
 }
 
 namespace Graphics {
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 5b4e116f7c..cb65819590 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -105,7 +105,7 @@ Frame::~Frame() {
 		delete _sprites[i];
 }
 
-void Frame::readChannel(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size) {
+void Frame::readChannel(Common::SeekableReadStreamEndian &stream, uint16 offset, uint16 size) {
 	if (offset >= 32) {
 		if (size <= 16)
 			readSprite(stream, offset, size);
@@ -381,7 +381,7 @@ void Frame::readChannels(Common::ReadStreamEndian *stream) {
 	}
 }
 
-void Frame::readMainChannels(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size) {
+void Frame::readMainChannels(Common::SeekableReadStreamEndian &stream, uint16 offset, uint16 size) {
 	uint16 finishPosition = offset + size;
 
 	while (offset < finishPosition) {
@@ -452,7 +452,7 @@ void Frame::readMainChannels(Common::SeekableSubReadStreamEndian &stream, uint16
 	debugC(1, kDebugLoading, "Frame::readChannels(): %d %d %d %d %d %d %d %d %d %d %d", _actionId, _soundType1, _transDuration, _transChunkSize, _tempo, _transType, _sound1, _skipFrameFlag, _blend, _sound2, _soundType2);
 }
 
-void Frame::readPaletteInfo(Common::SeekableSubReadStreamEndian &stream) {
+void Frame::readPaletteInfo(Common::SeekableReadStreamEndian &stream) {
 	_palette.firstColor = stream.readByte();
 	_palette.lastColor = stream.readByte();
 	_palette.flags = stream.readByte();
@@ -461,7 +461,7 @@ void Frame::readPaletteInfo(Common::SeekableSubReadStreamEndian &stream) {
 	stream.skip(8); // unknown
 }
 
-void Frame::readSprite(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size) {
+void Frame::readSprite(Common::SeekableReadStreamEndian &stream, uint16 offset, uint16 size) {
 	uint16 spritePosition = (offset - 32) / 16;
 	uint16 spriteStart = spritePosition * 16 + 32;
 
diff --git a/engines/director/frame.h b/engines/director/frame.h
index ddc3e9862f..0fc999f08e 100644
--- a/engines/director/frame.h
+++ b/engines/director/frame.h
@@ -85,17 +85,17 @@ public:
 	Score *getScore() const { return _score; }
 
 	void readChannels(Common::ReadStreamEndian *stream);
-	void readChannel(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size);
+	void readChannel(Common::SeekableReadStreamEndian &stream, uint16 offset, uint16 size);
 
 	void executeImmediateScripts();
 
 private:
 
-	void readPaletteInfo(Common::SeekableSubReadStreamEndian &stream);
-	void readSprite(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size);
-	void readMainChannels(Common::SeekableSubReadStreamEndian &stream, uint16 offset, uint16 size);
+	void readPaletteInfo(Common::SeekableReadStreamEndian &stream);
+	void readSprite(Common::SeekableReadStreamEndian &stream, uint16 offset, uint16 size);
+	void readMainChannels(Common::SeekableReadStreamEndian &stream, uint16 offset, uint16 size);
 	Image::ImageDecoder *getImageFrom(uint16 spriteId);
-	Common::String readTextStream(Common::SeekableSubReadStreamEndian *textStream, TextCastMember *textCast);
+	Common::String readTextStream(Common::SeekableReadStreamEndian *textStream, TextCastMember *textCast);
 
 
 public:
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 6e6503b3ee..8995423f12 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -836,7 +836,7 @@ void LC::cb_zeropush() {
 	g_lingo->push(d);
 }
 
-ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream, LingoArchive *archive, const Common::String &archName) {
+ScriptContext *Lingo::compileLingoV4(Common::SeekableReadStreamEndian &stream, LingoArchive *archive, const Common::String &archName) {
 	if (stream.size() < 0x5c) {
 		warning("Lscr header too small");
 		return nullptr;
@@ -1480,7 +1480,7 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream
 	return sc;
 }
 
-void LingoArchive::addCodeV4(Common::SeekableSubReadStreamEndian &stream, uint16 lctxIndex, const Common::String &archName) {
+void LingoArchive::addCodeV4(Common::SeekableReadStreamEndian &stream, uint16 lctxIndex, const Common::String &archName) {
 	ScriptContext *ctx = g_lingo->compileLingoV4(stream, this, archName);
 	if (ctx) {
 		lctxContexts[lctxIndex] = ctx;
@@ -1488,7 +1488,7 @@ void LingoArchive::addCodeV4(Common::SeekableSubReadStreamEndian &stream, uint16
 	}
 }
 
-void LingoArchive::addNamesV4(Common::SeekableSubReadStreamEndian &stream) {
+void LingoArchive::addNamesV4(Common::SeekableReadStreamEndian &stream) {
 	debugC(1, kDebugCompile, "Add V4 script name index");
 
 	if (stream.size() < 0x14) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 7081073f65..321bb49a0e 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -32,7 +32,7 @@ namespace Audio {
 class AudioStream;
 }
 namespace Common {
-class SeekableSubReadStreamEndian;
+class SeekableReadStreamEndian;
 }
 
 namespace Director {
@@ -218,8 +218,8 @@ struct LingoArchive {
 	Common::String getName(uint16 id);
 
 	void addCode(const char *code, ScriptType type, uint16 id, const char *scriptName = nullptr);
-	void addCodeV4(Common::SeekableSubReadStreamEndian &stream, uint16 lctxIndex, const Common::String &archName);
-	void addNamesV4(Common::SeekableSubReadStreamEndian &stream);
+	void addCodeV4(Common::SeekableReadStreamEndian &stream, uint16 lctxIndex, const Common::String &archName);
+	void addNamesV4(Common::SeekableReadStreamEndian &stream);
 };
 
 struct RepeatBlock {
@@ -237,7 +237,7 @@ public:
 
 	ScriptContext *compileAnonymous(const char *code);
 	ScriptContext *compileLingo(const char *code, LingoArchive *archive, ScriptType type, uint16 id, const Common::String &scriptName, bool anonyomous = false);
-	ScriptContext *compileLingoV4(Common::SeekableSubReadStreamEndian &stream, LingoArchive *archive, const Common::String &archName);
+	ScriptContext *compileLingoV4(Common::SeekableReadStreamEndian &stream, LingoArchive *archive, const Common::String &archName);
 	void executeHandler(const Common::String &name);
 	void executeScript(ScriptType type, uint16 id);
 	void printStack(const char *s, uint pc);
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index d812ecf741..ac66eb10fd 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -90,14 +90,14 @@ void Movie::setArchive(Archive *archive) {
 
 	// Frame Labels
 	if (archive->hasResource(MKTAG('V', 'W', 'L', 'B'), -1)) {
-		Common::SeekableSubReadStreamEndian *r;
+		Common::SeekableReadStreamEndian *r;
 		_score->loadLabels(*(r = archive->getFirstResource(MKTAG('V', 'W', 'L', 'B'))));
 		delete r;
 	}
 }
 
 bool Movie::loadArchive() {
-	Common::SeekableSubReadStreamEndian *r = nullptr;
+	Common::SeekableReadStreamEndian *r = nullptr;
 
 	// File Info
 	if (_movieArchive->hasResource(MKTAG('V', 'W', 'F', 'I'), -1)) {
@@ -160,7 +160,7 @@ Common::Rect Movie::readRect(Common::ReadStreamEndian &stream) {
 	return rect;
 }
 
-InfoEntries Movie::loadInfoEntries(Common::SeekableSubReadStreamEndian &stream) {
+InfoEntries Movie::loadInfoEntries(Common::SeekableReadStreamEndian &stream) {
 	uint32 offset = stream.pos();
 	offset += stream.readUint32();
 
@@ -200,7 +200,7 @@ InfoEntries Movie::loadInfoEntries(Common::SeekableSubReadStreamEndian &stream)
 	return res;
 }
 
-void Movie::loadFileInfo(Common::SeekableSubReadStreamEndian &stream) {
+void Movie::loadFileInfo(Common::SeekableReadStreamEndian &stream) {
 	debugC(2, kDebugLoading, "****** Loading FileInfo VWFI");
 
 	InfoEntries fileInfo = Movie::loadInfoEntries(stream);
diff --git a/engines/director/movie.h b/engines/director/movie.h
index cca70445f4..8164b547c8 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -26,7 +26,7 @@
 namespace Common {
 struct Event;
 class ReadStreamEndian;
-class SeekableSubReadStreamEndian;
+class SeekableReadStreamEndian;
 }
 
 namespace Director {
@@ -87,7 +87,7 @@ public:
 	~Movie();
 
 	static Common::Rect readRect(Common::ReadStreamEndian &stream);
-	static InfoEntries loadInfoEntries(Common::SeekableSubReadStreamEndian &stream);
+	static InfoEntries loadInfoEntries(Common::SeekableReadStreamEndian &stream);
 
 	bool loadArchive();
 	void setArchive(Archive *archive);
@@ -123,7 +123,7 @@ public:
 	void registerEvent(LEvent event, int targetId = 0);
 
 private:
-	void loadFileInfo(Common::SeekableSubReadStreamEndian &stream);
+	void loadFileInfo(Common::SeekableReadStreamEndian &stream);
 
 	void queueSpriteEvent(LEvent event, int eventId, int spriteId);
 	void queueFrameEvent(LEvent event, int eventId);
diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index d7040fd416..a8f912de17 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -97,7 +97,7 @@ void Window::probeProjector(const Common::String &movie) {
 		if (archive->hasResource(MKTAG('v', 'e', 'r', 's'), -1)) {
 			Common::Array<uint16> vers = archive->getResourceIDList(MKTAG('v', 'e', 'r', 's'));
 			for (Common::Array<uint16>::iterator iterator = vers.begin(); iterator != vers.end(); ++iterator) {
-				Common::SeekableSubReadStreamEndian *vvers = archive->getResource(MKTAG('v', 'e', 'r', 's'), *iterator);
+				Common::SeekableReadStreamEndian *vvers = archive->getResource(MKTAG('v', 'e', 'r', 's'), *iterator);
 				Common::MacResManager::MacVers *v = Common::MacResManager::parseVers(vvers);
 
 				debug(0, "Detected vers %d.%d %s.%d region %d '%s' '%s'", v->majorVer, v->minorVer, v->devStr.c_str(),
@@ -120,7 +120,7 @@ void Window::probeProjector(const Common::String &movie) {
 			if (_currentMovie)
 				_currentMovie->setArchive(archive);
 
-			Common::SeekableSubReadStreamEndian *name = archive->getResource(MKTAG('S', 'T', 'R', '#'), 0);
+			Common::SeekableReadStreamEndian *name = archive->getResource(MKTAG('S', 'T', 'R', '#'), 0);
 			int num = name->readUint16();
 			if (num != 1) {
 				warning("Incorrect number of strings in Projector file");
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index ef260ff6a4..c8d6328218 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -624,7 +624,7 @@ void Score::playSoundChannel(uint16 frameId) {
 	sound->playCastMember(frame->_sound2, 2, false);
 }
 
-void Score::loadFrames(Common::SeekableSubReadStreamEndian &stream) {
+void Score::loadFrames(Common::SeekableReadStreamEndian &stream) {
 	debugC(1, kDebugLoading, "****** Loading frames VWSC");
 
 	//stream.hexdump(stream.size());
@@ -758,7 +758,7 @@ void Score::setSpriteCasts() {
 	}
 }
 
-void Score::loadLabels(Common::SeekableSubReadStreamEndian &stream) {
+void Score::loadLabels(Common::SeekableReadStreamEndian &stream) {
 	if (debugChannelSet(5, kDebugLoading)) {
 		debug("Score::loadLabels()");
 		stream.hexdump(stream.size());
@@ -802,7 +802,7 @@ int Score::compareLabels(const void *a, const void *b) {
 	return ((const Label *)a)->number - ((const Label *)b)->number;
 }
 
-void Score::loadActions(Common::SeekableSubReadStreamEndian &stream) {
+void Score::loadActions(Common::SeekableReadStreamEndian &stream) {
 	debugC(2, kDebugLoading, "****** Loading Actions VWAC");
 
 	uint16 count = stream.readUint16() + 1;
diff --git a/engines/director/score.h b/engines/director/score.h
index b1c6239c74..3c3a64e004 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -35,7 +35,7 @@ namespace Graphics {
 
 namespace Common {
 	class ReadStreamEndian;
-	class SeekableSubReadStreamEndian;
+	class SeekableReadStreamEndian;
 }
 
 namespace Director {
@@ -67,9 +67,9 @@ public:
 
 	Movie *getMovie() const { return _movie; }
 
-	void loadFrames(Common::SeekableSubReadStreamEndian &stream);
-	void loadLabels(Common::SeekableSubReadStreamEndian &stream);
-	void loadActions(Common::SeekableSubReadStreamEndian &stream);
+	void loadFrames(Common::SeekableReadStreamEndian &stream);
+	void loadLabels(Common::SeekableReadStreamEndian &stream);
+	void loadActions(Common::SeekableReadStreamEndian &stream);
 
 	static int compareLabels(const void *a, const void *b);
 	uint16 getLabel(Common::String &label);
diff --git a/engines/director/sound.cpp b/engines/director/sound.cpp
index 637cfcdaae..818e9df5dc 100644
--- a/engines/director/sound.cpp
+++ b/engines/director/sound.cpp
@@ -249,7 +249,7 @@ SNDDecoder::~SNDDecoder() {
 	}
 }
 
-bool SNDDecoder::loadStream(Common::SeekableSubReadStreamEndian &stream) {
+bool SNDDecoder::loadStream(Common::SeekableReadStreamEndian &stream) {
 	if (_data) {
 		free(_data);
 		_data = nullptr;
@@ -289,7 +289,7 @@ bool SNDDecoder::loadStream(Common::SeekableSubReadStreamEndian &stream) {
 	return true;
 }
 
-bool SNDDecoder::processCommands(Common::SeekableSubReadStreamEndian &stream) {
+bool SNDDecoder::processCommands(Common::SeekableReadStreamEndian &stream) {
 	uint16 cmdCount = stream.readUint16();
 	for (uint16 i = 0; i < cmdCount; i++) {
 		uint16 cmd = stream.readUint16();
@@ -305,7 +305,7 @@ bool SNDDecoder::processCommands(Common::SeekableSubReadStreamEndian &stream) {
 	return true;
 }
 
-bool SNDDecoder::processBufferCommand(Common::SeekableSubReadStreamEndian &stream) {
+bool SNDDecoder::processBufferCommand(Common::SeekableReadStreamEndian &stream) {
 	if (_data) {
 		warning("SNDDecoder: Already read data");
 		return false;
diff --git a/engines/director/sound.h b/engines/director/sound.h
index 3d3aa542ef..6d7e3a03c6 100644
--- a/engines/director/sound.h
+++ b/engines/director/sound.h
@@ -102,9 +102,9 @@ public:
 	SNDDecoder();
 	~SNDDecoder();
 
-	bool loadStream(Common::SeekableSubReadStreamEndian &stream);
-	bool processCommands(Common::SeekableSubReadStreamEndian &stream);
-	bool processBufferCommand(Common::SeekableSubReadStreamEndian &stream);
+	bool loadStream(Common::SeekableReadStreamEndian &stream);
+	bool processCommands(Common::SeekableReadStreamEndian &stream);
+	bool processBufferCommand(Common::SeekableReadStreamEndian &stream);
 	Audio::RewindableAudioStream *getAudioStream(DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES);
 
 private:
diff --git a/engines/director/stxt.cpp b/engines/director/stxt.cpp
index 319cb381ba..dbec705993 100644
--- a/engines/director/stxt.cpp
+++ b/engines/director/stxt.cpp
@@ -27,7 +27,7 @@
 
 namespace Director {
 
-Stxt::Stxt(Cast *cast, Common::SeekableSubReadStreamEndian &textStream) : _cast(cast) {
+Stxt::Stxt(Cast *cast, Common::SeekableReadStreamEndian &textStream) : _cast(cast) {
 	// TODO: Side effects on textStream make this a little hard to understand in context?
 
 	_textType = kTextTypeFixed;
diff --git a/engines/director/stxt.h b/engines/director/stxt.h
index d2f19f08b6..94e82298cb 100644
--- a/engines/director/stxt.h
+++ b/engines/director/stxt.h
@@ -47,7 +47,7 @@ struct FontStyle {
 
 class Stxt {
 public:
-	Stxt(Cast *cast, Common::SeekableSubReadStreamEndian &textStream);
+	Stxt(Cast *cast, Common::SeekableReadStreamEndian &textStream);
 
 public:
 	Cast *_cast;


Commit: 61a02b7606a7a56e1cb90aa8bdc9e658cfe84786
    https://github.com/scummvm/scummvm/commit/61a02b7606a7a56e1cb90aa8bdc9e658cfe84786
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-12T17:26:55-04:00

Commit Message:
DIRECTOR: Implement DCR getResource

Changed paths:
    engines/director/archive.cpp


diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp
index e564ad40c1..3597099497 100644
--- a/engines/director/archive.cpp
+++ b/engines/director/archive.cpp
@@ -24,6 +24,7 @@
 #include "common/file.h"
 #include "common/substream.h"
 #include "common/macresman.h"
+#include "common/memstream.h"
 
 #include "director/director.h"
 #include "director/archive.h"
@@ -813,10 +814,29 @@ Common::SeekableReadStreamEndian *RIFXArchive::getResource(uint32 tag, uint16 id
 		error("RIFXArchive::getResource(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const Resource &res = resMap[id];
+	bool bigEndian = fileEndianness ? _isBigEndian : true;
+
+	if (_rifxType == MKTAG('F', 'G', 'D', 'M') || _rifxType == MKTAG('F', 'G', 'D', 'C')) {
+		if (res.offset == -1) {
+			return new Common::MemoryReadStreamEndian(_ilsData[id], res.uncompSize, bigEndian, DisposeAfterUse::NO);
+		} else {
+			_stream->seek(res.offset + 5);
+			unsigned long actualUncompLength = res.uncompSize;
+			Common::SeekableReadStreamEndian *stream = readZlibData(*_stream, res.size, &actualUncompLength, _isBigEndian);
+			if (!stream) {
+				warning("RIFXArchive::getResource(): Could not uncompress '%s' %d", tag2str(tag), id);
+				return nullptr;
+			}
+			if (res.uncompSize != actualUncompLength) {
+				warning("RIFXArchive::getResource(): For '%s' %d expected uncompressed length %d but got length %lu",
+					tag2str(tag), id, res.uncompSize, actualUncompLength);
+			}
+			return stream;
+		}
+	}
 
 	uint32 offset = res.offset + 8;
 	uint32 size = res.size;
-	bool bigEndian = fileEndianness ? _isBigEndian : true;
 
 	return new Common::SeekableSubReadStreamEndian(_stream, offset, offset + size, bigEndian, DisposeAfterUse::NO);
 }


Commit: 9ae219aff190eec95cce231403ecfb9b18fa0e52
    https://github.com/scummvm/scummvm/commit/9ae219aff190eec95cce231403ecfb9b18fa0e52
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-12T17:26:55-04:00

Commit Message:
DIRECTOR: More gracefully handle missing BITD

Changed paths:
    engines/director/cast.cpp


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 8e673193f2..34bf4bca7d 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -519,14 +519,16 @@ void Cast::loadCastChildren() {
 		Image::ImageDecoder *img = NULL;
 		Common::SeekableReadStream *pic = NULL;
 
-		if (_vm->getVersion() >= 400 && bitmapCast->_children.size() > 0) {
-			imgId = bitmapCast->_children[0].index;
-			tag = bitmapCast->_children[0].tag;
-
-			if (_castArchive->hasResource(tag, imgId))
-				pic = _castArchive->getResource(tag, imgId);
-			else if (sharedCast && sharedCast->getArchive()->hasResource(tag, imgId))
-				pic = sharedCast->getArchive()->getResource(tag, imgId);
+		if (_vm->getVersion() >= 400) {
+			if (bitmapCast->_children.size() > 0) {
+				imgId = bitmapCast->_children[0].index;
+				tag = bitmapCast->_children[0].tag;
+
+				if (_castArchive->hasResource(tag, imgId))
+					pic = _castArchive->getResource(tag, imgId);
+				else if (sharedCast && sharedCast->getArchive()->hasResource(tag, imgId))
+					pic = sharedCast->getArchive()->getResource(tag, imgId);
+			}
 		} else {
 			if (_loadedCast->contains(imgId)) {
 				bitmapCast->_tag = tag = ((BitmapCastMember *)_loadedCast->getVal(imgId))->_tag;


Commit: d846db8da6b34cc53c8b92ab4a1f5d6c598f644a
    https://github.com/scummvm/scummvm/commit/d846db8da6b34cc53c8b92ab4a1f5d6c598f644a
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-12T17:26:55-04:00

Commit Message:
DIRECTOR: Fix loading KEY* from Shockwave movies

Changed paths:
    engines/director/archive.cpp


diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp
index 3597099497..f11a7ceffe 100644
--- a/engines/director/archive.cpp
+++ b/engines/director/archive.cpp
@@ -781,14 +781,19 @@ void RIFXArchive::readKeyTable(Common::SeekableReadStreamEndian &keyStream) {
 
 	debugC(2, kDebugLoading, "KEY*: entrySize: %d entrySize2: %d entryCount: %d usedCount: %d", entrySize, entrySize2, entryCount, usedCount);
 
+	ResourceMap &castResMap = _types[MKTAG('C', 'A', 'S', 't')];
+
 	for (uint16 i = 0; i < usedCount; i++) {
 		uint32 childIndex = keyStream.readUint32();
 		uint32 parentIndex = keyStream.readUint32();
 		uint32 childTag = keyStream.readUint32();
 
 		debugC(2, kDebugLoading, "KEY*: childIndex: %d parentIndex: %d childTag: %s", childIndex, parentIndex, tag2str(childTag));
-		if (childIndex < _resources.size() && parentIndex < _resources.size())
-			_resources[parentIndex]->children.push_back(*_resources[childIndex]);
+		if (castResMap.contains(parentIndex)) {
+			castResMap[parentIndex].children.push_back(_types[childTag][childIndex]);
+		} else if (castResMap.contains(childIndex)) { // sometimes parent and child index are reversed...
+			castResMap[childIndex].children.push_back(_types[childTag][parentIndex]);
+		}
 	}
 }
 


Commit: af8fa6a82e3792585fe659266e8d7824170a3f19
    https://github.com/scummvm/scummvm/commit/af8fa6a82e3792585fe659266e8d7824170a3f19
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-12T17:26:55-04:00

Commit Message:
DIRECTOR: Fix Shockwave chunk dumping

Changed paths:
    engines/director/archive.cpp


diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp
index f11a7ceffe..84c73b0404 100644
--- a/engines/director/archive.cpp
+++ b/engines/director/archive.cpp
@@ -496,14 +496,19 @@ bool RIFXArchive::openStream(Common::SeekableReadStream *stream, uint32 startOff
 		Common::DumpFile out;
 
 		for (uint i = 0; i < _resources.size(); i++) {
-			stream->seek(_resources[i]->offset);
+			if ((_rifxType == MKTAG('F', 'G', 'D', 'M') || _rifxType == MKTAG('F', 'G', 'D', 'C')) && _resources[i]->index < 3) {
+				// This is in the initial load segment and can't be read like a normal chunk.
+				continue;
+			}
+
+			Common::SeekableReadStreamEndian *resStream = getResource(_resources[i]->tag, _resources[i]->index);
 
 			uint32 len = _resources[i]->size;
 
 			if (dataSize < _resources[i]->size) {
 				free(data);
-				data = (byte *)malloc(_resources[i]->size);
-				dataSize = _resources[i]->size;
+				data = (byte *)malloc(resStream->size());
+				dataSize = resStream->size();
 			}
 			Common::String prepend;
 			if (_pathName.size() != 0)
@@ -511,8 +516,8 @@ bool RIFXArchive::openStream(Common::SeekableReadStream *stream, uint32 startOff
 			else
 				prepend = "stream";
 
-			Common::String filename = Common::String::format("./dumps/%s-%s-%d", prepend.c_str(), tag2str(_resources[i]->tag), i);
-			stream->read(data, len);
+			Common::String filename = Common::String::format("./dumps/%s-%s-%d", prepend.c_str(), tag2str(_resources[i]->tag), _resources[i]->index);
+			resStream->read(data, len);
 
 			if (!out.open(filename, true)) {
 				warning("RIFXArchive::openStream(): Can not open dump file %s", filename.c_str());
@@ -523,6 +528,7 @@ bool RIFXArchive::openStream(Common::SeekableReadStream *stream, uint32 startOff
 
 			out.flush();
 			out.close();
+			delete resStream;
 		}
 	}
 




More information about the Scummvm-git-logs mailing list