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

sev- sev at scummvm.org
Mon Feb 24 22:36:23 UTC 2020


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

Summary:
54512228f5 DIRECTOR: Added sanity chech to MacArchive::getResource()
3d7b95da0c DIRECTOR: Fix shared cast processing
ee71f5b163 DIRECTOR: Improved debug output
d5fb4f6c31 DIRECTOR: Fixed tags for bitmap casts


Commit: 54512228f5397fe92009e31688fa9b3e6f1e5ce1
    https://github.com/scummvm/scummvm/commit/54512228f5397fe92009e31688fa9b3e6f1e5ce1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-02-24T23:07:55+01:00

Commit Message:
DIRECTOR: Added sanity chech to MacArchive::getResource()

Changed paths:
    engines/director/archive.cpp


diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp
index 659d7438f6..16a8f0de34 100644
--- a/engines/director/archive.cpp
+++ b/engines/director/archive.cpp
@@ -248,6 +248,10 @@ bool MacArchive::openStream(Common::SeekableReadStream *stream, uint32 startOffs
 Common::SeekableSubReadStreamEndian *MacArchive::getResource(uint32 tag, uint16 id) {
 	assert(_resFork);
 	Common::SeekableReadStream *stream = _resFork->getResource(tag, id);
+
+	if (stream == nullptr)
+		error("MacArchive::getResource('%s', %d): Resource doesn't exit", tag2str(tag), id);
+
 	return new Common::SeekableSubReadStreamEndian(stream, 0, stream->size(), true, DisposeAfterUse::NO);
 }
 


Commit: 3d7b95da0cc4ef2f3b1ca12d26bd10853795086d
    https://github.com/scummvm/scummvm/commit/3d7b95da0cc4ef2f3b1ca12d26bd10853795086d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-02-24T23:08:17+01:00

Commit Message:
DIRECTOR: Fix shared cast processing

Changed paths:
    engines/director/resource.cpp
    engines/director/score.cpp


diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index 04944a7a34..c21c69ef6f 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -362,48 +362,7 @@ void DirectorEngine::loadSharedCastsFrom(Common::String filename) {
 	}
 
 	_sharedScore->setSpriteCasts();
-
-	Common::SeekableSubReadStreamEndian *res;
-
-	Common::Array<uint16> dib = sharedCast->getResourceIDList(MKTAG('D','I','B',' '));
-	if (dib.size() != 0) {
-		debugC(3, kDebugLoading, "****** Loading %d DIBs", dib.size());
-
-		for (Common::Array<uint16>::iterator iterator = dib.begin(); iterator != dib.end(); ++iterator) {
-			debugC(3, kDebugLoading, "loadSharedCastsFrom(): Shared DIB %d", *iterator);
-			res = sharedCast->getResource(MKTAG('D','I','B',' '), *iterator);
-			_sharedScore->_loadedCast->setVal(*iterator, new BitmapCast(*res, MKTAG('D','I','B',' '), getVersion()));
-		}
-	}
-
-	Common::Array<uint16> stxt = sharedCast->getResourceIDList(MKTAG('S','T','X','T'));
-	if (stxt.size() != 0) {
-		debugC(3, kDebugLoading, "****** Loading %d STXTs", stxt.size());
-
-		for (Common::Array<uint16>::iterator iterator = stxt.begin(); iterator != stxt.end(); ++iterator) {
-			debugC(3, kDebugLoading, "loadSharedCastsFrom(): Shared STXT %d", *iterator);
-			res = sharedCast->getResource(MKTAG('S','T','X','T'), *iterator);
-			_sharedScore->_loadedCast->setVal(*iterator, new TextCast(*res, getVersion()));
-		}
-	}
-
-	Common::Array<uint16> bmp = sharedCast->getResourceIDList(MKTAG('B','I','T','D'));
-	if (bmp.size() != 0) {
-		debugC(3, kDebugLoading, "****** Loading %d BITDs", bmp.size());
-		for (Common::Array<uint16>::iterator iterator = bmp.begin(); iterator != bmp.end(); ++iterator) {
-			debugC(3, kDebugLoading, "loadSharedCastsFrom(): Shared BITD %d (%s)", *iterator, numToCastNum(*iterator - 1024));
-			res = sharedCast->getResource(MKTAG('B','I','T','D'), *iterator);
-			_sharedScore->_loadedCast->setVal(*iterator, new BitmapCast(*res, MKTAG('B','I','T','D'), getVersion()));
-		}
-	}
-
-	Common::Array<uint16> sound = sharedCast->getResourceIDList(MKTAG('S','N','D',' '));
-	if (sound.size() != 0) {
-		debugC(3, kDebugLoading, "****** Loading %d SNDs", sound.size());
-		for (Common::Array<uint16>::iterator iterator = sound.begin(); iterator != sound.end(); ++iterator) {
-			debugC(3, kDebugLoading, "loadSharedCastsFrom(): Shared SND %d, SKIPPING!", *iterator);
-		}
-	}
+	_sharedScore->loadSpriteImages(true);
 
 	_lingo->_archiveIndex = 0;
 }
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 572c299aef..62e6f0cc37 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -307,7 +307,7 @@ void Score::loadSpriteImages(bool isSharedCast) {
 
 		BitmapCast *bitmapCast = (BitmapCast *)c->_value;
 		uint32 tag = bitmapCast->_tag;
-		uint16 imgId = (uint16)(c->_key + _castIDoffset);
+		uint16 imgId = c->_key;
 
 		if (_vm->getVersion() >= 4 && bitmapCast->_children.size() > 0) {
 			imgId = bitmapCast->_children[0].index;
@@ -318,10 +318,12 @@ void Score::loadSpriteImages(bool isSharedCast) {
 		Common::SeekableReadStream *pic = NULL;
 
 		if (_loadedCast->contains(imgId)) {
-			pic = sharedScore->getArchive()->getResource(tag, imgId);
-		} else if (sharedScore && sharedScore->_loadedCast && sharedScore->_loadedCast->contains(imgId)) {
-			bitmapCast->_tag = tag = ((BitmapCast *)sharedScore->_loadedCast->getVal(imgId))->_tag;
-			pic = sharedScore->getArchive()->getResource(tag, imgId);
+			pic = _movieArchive->getResource(tag, imgId + _castIDoffset);
+		} else if (sharedScore) {
+			if (sharedScore->_loadedCast && sharedScore->_loadedCast->contains(imgId)) {
+				bitmapCast->_tag = tag = ((BitmapCast *)sharedScore->_loadedCast->getVal(imgId))->_tag;
+				pic = sharedScore->getArchive()->getResource(tag, imgId + sharedScore->_castIDoffset);
+			}
 		}
 
 		if (pic == NULL) {


Commit: ee71f5b1634e49c7228dc92a677bdc631e7d57ec
    https://github.com/scummvm/scummvm/commit/ee71f5b1634e49c7228dc92a677bdc631e7d57ec
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-02-24T23:14:39+01:00

Commit Message:
DIRECTOR: Improved debug output

Changed paths:
    engines/director/archive.cpp


diff --git a/engines/director/archive.cpp b/engines/director/archive.cpp
index 16a8f0de34..03f8cd6830 100644
--- a/engines/director/archive.cpp
+++ b/engines/director/archive.cpp
@@ -97,12 +97,12 @@ Common::SeekableSubReadStreamEndian *Archive::getFirstResource(uint32 tag) {
 
 Common::SeekableSubReadStreamEndian *Archive::getResource(uint32 tag, uint16 id) {
 	if (!_types.contains(tag))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("Archive::getResource(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const ResourceMap &resMap = _types[tag];
 
 	if (!resMap.contains(id))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("Archive::getResource(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const Resource &res = resMap[id];
 
@@ -111,24 +111,24 @@ Common::SeekableSubReadStreamEndian *Archive::getResource(uint32 tag, uint16 id)
 
 Resource Archive::getResourceDetail(uint32 tag, uint16 id) {
 	if (!_types.contains(tag))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("Archive::getResourceDetail(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const ResourceMap &resMap = _types[tag];
 
 	if (!resMap.contains(id))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("Archive::getResourceDetail(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	return resMap[id];
 }
 
 uint32 Archive::getOffset(uint32 tag, uint16 id) const {
 	if (!_types.contains(tag))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("Archive::getOffset(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const ResourceMap &resMap = _types[tag];
 
 	if (!resMap.contains(id))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("Archive::getOffset(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	return resMap[id].offset;
 }
@@ -148,12 +148,12 @@ uint16 Archive::findResourceID(uint32 tag, const Common::String &resName) const
 
 Common::String Archive::getName(uint32 tag, uint16 id) const {
 	if (!_types.contains(tag))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("Archive::getName(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const ResourceMap &resMap = _types[tag];
 
 	if (!resMap.contains(id))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("Archive::getName(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	return resMap[id].name;
 }
@@ -319,12 +319,12 @@ bool RIFFArchive::openStream(Common::SeekableReadStream *stream, uint32 startOff
 
 Common::SeekableSubReadStreamEndian *RIFFArchive::getResource(uint32 tag, uint16 id) {
 	if (!_types.contains(tag))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("RIFFArchive::getResource(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const ResourceMap &resMap = _types[tag];
 
 	if (!resMap.contains(id))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("RIFFArchive::getResource(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const Resource &res = resMap[id];
 
@@ -574,12 +574,12 @@ bool RIFXArchive::openStream(Common::SeekableReadStream *stream, uint32 startOff
 
 Common::SeekableSubReadStreamEndian *RIFXArchive::getResource(uint32 tag, uint16 id) {
 	if (!_types.contains(tag))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("RIFXArchive::getResource(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const ResourceMap &resMap = _types[tag];
 
 	if (!resMap.contains(id))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("RIFXArchive::getResource(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const Resource &res = resMap[id];
 
@@ -591,12 +591,12 @@ Common::SeekableSubReadStreamEndian *RIFXArchive::getResource(uint32 tag, uint16
 
 Resource RIFXArchive::getResourceDetail(uint32 tag, uint16 id) {
 	if (!_types.contains(tag))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("RIFXArchive::getResourceDetail(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	const ResourceMap &resMap = _types[tag];
 
 	if (!resMap.contains(id))
-		error("Archive does not contain '%s' %04x", tag2str(tag), id);
+		error("RIFXArchive::getResourceDetail(): Archive does not contain '%s' %d", tag2str(tag), id);
 
 	return resMap[id];
 }


Commit: d5fb4f6c3112d1e85e21c146bfe3792a9876a144
    https://github.com/scummvm/scummvm/commit/d5fb4f6c3112d1e85e21c146bfe3792a9876a144
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-02-24T23:35:56+01:00

Commit Message:
DIRECTOR: Fixed tags for bitmap casts

Changed paths:
    engines/director/score.cpp


diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 62e6f0cc37..235edd7928 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -318,6 +318,7 @@ void Score::loadSpriteImages(bool isSharedCast) {
 		Common::SeekableReadStream *pic = NULL;
 
 		if (_loadedCast->contains(imgId)) {
+			bitmapCast->_tag = tag = ((BitmapCast *)_loadedCast->getVal(imgId))->_tag;
 			pic = _movieArchive->getResource(tag, imgId + _castIDoffset);
 		} else if (sharedScore) {
 			if (sharedScore->_loadedCast && sharedScore->_loadedCast->contains(imgId)) {
@@ -606,6 +607,7 @@ void Score::loadCastDataVWCR(Common::SeekableSubReadStreamEndian &stream) {
 
 	for (uint16 id = _castArrayStart; id <= _castArrayEnd; id++) {
 		byte size = stream.readByte();
+		uint32 tag;
 		if (size == 0)
 			continue;
 
@@ -617,8 +619,14 @@ void Score::loadCastDataVWCR(Common::SeekableSubReadStreamEndian &stream) {
 		switch (castType) {
 		case kCastBitmap:
 			debugC(3, kDebugLoading, "Score::loadCastDataVWCR(): CastTypes id: %d(%s) BitmapCast", id, numToCastNum(id));
-			// TODO: Work out the proper tag!
-			_loadedCast->setVal(id, new BitmapCast(stream, MKTAG('B', 'I', 'T', 'D'), _vm->getVersion()));
+			if (_movieArchive->hasResource(MKTAG('B', 'I', 'T', 'D'), id + _castIDoffset))
+				tag = MKTAG('B', 'I', 'T', 'D');
+			else if (_movieArchive->hasResource(MKTAG('D', 'I', 'B', ' '), id + _castIDoffset))
+				tag = MKTAG('D', 'I', 'B', ' ');
+			else
+				error("Score::loadCastDataVWCR(): non-existent reference to BitmapCast");
+
+			_loadedCast->setVal(id, new BitmapCast(stream, tag, _vm->getVersion()));
 			break;
 		case kCastText:
 			debugC(3, kDebugLoading, "Score::loadCastDataVWCR(): CastTypes id: %d(%s) TextCast", id, numToCastNum(id));




More information about the Scummvm-git-logs mailing list