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

sev- noreply at scummvm.org
Mon Aug 25 20:21:04 UTC 2025


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

Summary:
1ec8371bda DIRECTOR: Improve debug output on movie config loading
02f127457e DIRECTOR: Implement VWCF/DRCF loading for later Director versions
4da1cbf271 DIRECTOR: Fixes to D6 movie config loading
5f91b1bbd2 DIRECTOR: Beginnings of cast loading for D6+
d16bade61b DIRECTOR: Cleanup
ca92c6d938 DIRECTOR: Reading D6+ cast members: script, shape, transition.


Commit: 1ec8371bdacadc38f87ab7cf6a23fdf1f397805d
    https://github.com/scummvm/scummvm/commit/1ec8371bdacadc38f87ab7cf6a23fdf1f397805d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-25T22:20:48+02:00

Commit Message:
DIRECTOR: Improve debug output on movie config loading

Changed paths:
    engines/director/cast.cpp


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 35ca5e513a2..94c09d64f62 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -321,15 +321,18 @@ bool Cast::loadConfig() {
 		return false;
 	}
 	Common::SeekableReadStreamEndian *stream = nullptr;
+	const char *chunkTag = "VWCF";
 	stream = _castArchive->getMovieResourceIfPresent(MKTAG('V', 'W', 'C', 'F'));
-	if (!stream)
+	if (!stream) {
 		stream = _castArchive->getMovieResourceIfPresent(MKTAG('D', 'R', 'C', 'F'));
+		chunkTag = "DRCF";
+	}
 	if (!stream) {
 		warning("Cast::loadConfig(): Wrong format. VWCF resource missing");
 		return false;
 	}
 
-	debugC(1, kDebugLoading, "****** Loading Config VWCF for cast libID %d (%s)", _castLibID, _castName.c_str());
+	debugC(1, kDebugLoading, "****** Loading Config %s for cast libID %d (%s)", chunkTag, _castLibID, _castName.c_str());
 
 	if (debugChannelSet(5, kDebugLoading))
 		stream->hexdump(stream->size());
@@ -413,8 +416,8 @@ bool Cast::loadConfig() {
 	// uint16 stageColorG = stream.readUint16();
 	// uint16 stageColorB = stream.readUint16();
 
-	debugC(1, kDebugLoading, "Cast::loadConfig(): len: %d, fileVersion: %d, light: %d, unk: %d, font: %d, size: %d"
-			", style: %d", _len, _fileVersion, _lightswitch, _unk1, _commentFont, _commentSize, _commentStyle);
+	debugC(1, kDebugLoading, "Cast::loadConfig(): len: %d, fileVersion: %d (v%d), light: %d, unk: %d, font: %d, size: %d"
+			", style: %d", _len, _fileVersion, humanVersion(_fileVersion), _lightswitch, _unk1, _commentFont, _commentSize, _commentStyle);
 	debugC(1, kDebugLoading, "Cast::loadConfig(): stagecolor: %d, depth: %d",
 			_stageColor, _bitdepth);
 	if (debugChannelSet(1, kDebugLoading))


Commit: 02f127457ec4a91b35a73e1751d5e8cba2e92e7f
    https://github.com/scummvm/scummvm/commit/02f127457ec4a91b35a73e1751d5e8cba2e92e7f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-25T22:20:48+02:00

Commit Message:
DIRECTOR: Implement VWCF/DRCF loading for later Director versions

Changed paths:
    engines/director/cast.cpp
    engines/director/cast.h


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 94c09d64f62..1749e49c64e 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -315,6 +315,28 @@ void Cast::loadArchive() {
 	loadCast();
 }
 
+void configLenSanityCheck(uint16 len, uint16 fileVersion) {
+	int tlen = -1;
+
+	if (fileVersion < kFileVer300) {
+		tlen = 30;							// D2
+	} else if (fileVersion < kFileVer400) {
+		tlen = 48;							// D3
+	} else if (fileVersion < kFileVer600) {
+		tlen = 80;							// D4, D5
+	} else if (fileVersion < kFileVer1000) {
+		tlen = 84;							// D6, D7, D8, D9
+	} else if (fileVersion < kFileVer1100) {
+		tlen = 100;							// D10
+	}
+
+	if (tlen == -1) {
+		warning("BUILDBOT: Cast::loadConfig(): Unmapped config length for file version v%d (%d): %d", humanVersion(fileVersion), fileVersion, len);
+	} else if (len != tlen) {
+		warning("BUILDBOT: Cast::loadConfig(): Unexpected config length for file version v%d (%d): %d, expected %d", humanVersion(fileVersion), fileVersion, len, tlen);
+	}
+}
+
 bool Cast::loadConfig() {
 	if (!_castArchive) {
 		warning("Cast::loadConfig(): No archive specified");
@@ -332,7 +354,7 @@ bool Cast::loadConfig() {
 		return false;
 	}
 
-	debugC(1, kDebugLoading, "****** Loading Config %s for cast libID %d (%s)", chunkTag, _castLibID, _castName.c_str());
+	debugC(1, kDebugLoading, "****** Loading Config %s (%d bytes) for cast libID %d (%s)", chunkTag, (uint)stream->size(), _castLibID, _castName.c_str());
 
 	if (debugChannelSet(5, kDebugLoading))
 		stream->hexdump(stream->size());
@@ -351,6 +373,8 @@ bool Cast::loadConfig() {
 	if (stream->size() <= 36)
 		_version = _fileVersion;				// Checking if we have already read the version
 
+	configLenSanityCheck(_len, _version);
+
 	uint humanVer = humanVersion(_version);
 
 	_checkRect = Movie::readRect(*stream);
@@ -422,6 +446,7 @@ bool Cast::loadConfig() {
 			_stageColor, _bitdepth);
 	if (debugChannelSet(1, kDebugLoading))
 		_movieRect.debugPrint(1, "Cast::loadConfig(): Movie rect: ");
+	debugC(1, kDebugLoading, "Cast::loadConfig(): directorVersion: %d", humanVer);
 
 	// Fields required for checksum calculation
 	// D3 fields - Macromedia did not increment the fileVersion from D2 to D3
@@ -438,9 +463,10 @@ bool Cast::loadConfig() {
 		_field21 = stream->readSint16();
 		_field22 = stream->readSint32();
 		_field23 = stream->readSint32();
-	}
 
-	debugC(1, kDebugLoading, "Cast::loadConfig(): directorVersion: %d", humanVer);
+		debugC(1, kDebugLoading, "Cast::loadConfig(): field17: %d, field18: %d, field19: %d, field21: %d, field22: %d field23: %d",
+			_field17, _field18, _field19, _field21, _field22, _field23);
+	}
 
 	if (_version >= kFileVer400) {
 		_field24 = stream->readSint32();
@@ -456,6 +482,11 @@ bool Cast::loadConfig() {
 		_field29 = stream->readSint32();
 		_checksum = stream->readUint32();
 
+		debugC(1, kDebugLoading, "Cast::loadConfig(): field24: %d, field25: %d, field26: %d, frameRate: %d, platformID: %d",
+				_field24, _field25, _field26, _frameRate, _platformID);
+		debugC(1, kDebugLoading, "Cast::loadConfig(): protection: %d, field29: %d, checksum: %d",
+			_protection, _field29, _checksum);
+
 		//Calculation and verification of checksum
 		uint32 check = computeChecksum();
 
@@ -477,16 +508,47 @@ bool Cast::loadConfig() {
 			for (int i = 0; i < 0x08; i++) {
 				stream->readByte();
 			}
+
+			debugC(1, kDebugLoading, "Cast::loadConfig(): field30: %d, defaultPalette: %s", _field30, _defaultPalette.asString().c_str());
 		} else if (_version >= kFileVer500 && _version < kFileVer600) {
-			for (int i = 0; i < 0x08; i++) {
-				stream->readByte();
-			}
+			_field30 = stream->readSint16();
+			_defPaletteNum = stream->readSint16();
+			_chunkBaseNum = stream->readSint32();
 			_defaultPalette.castLib = stream->readSint16();
 			_defaultPalette.member = stream->readSint16();
 			if (_defaultPalette.member <= 0)
 				_defaultPalette.member -= 1;
 
-		} else {
+			debugC(1, kDebugLoading, "Cast::loadConfig(): field30: %d, defPaletteNum: %d, chunkBaseNum: %d, defaultPalette: %s",
+				_field30, _defPaletteNum, _chunkBaseNum, _defaultPalette.asString().c_str());
+		}
+
+		// 80 bytes
+
+		if (_version >= kFileVer600 && _version < kFileVer1000) {
+			_netUnk1 = stream->readSByte();
+			_netUnk2 = stream->readSByte();
+			_netPreloadNumFrames = stream->readSint16();
+			debugC(1, kDebugLoading, "Cast::loadConfig(): netUnk1: %d, netUnk2: %d, netPreloadNumFrames: %d",
+				_netUnk1, _netUnk2, _netPreloadNumFrames);
+		}
+
+		// 84 bytes
+
+		if (_version >= kFileVer1000 && _version < kFileVer1100) {
+			_windowFlags = stream->readUint32();
+			_windowIconId.castLib = stream->readSint16();
+			_windowIconId.member = stream->readSint16();
+			_windowMaskId.castLib = stream->readSint16();
+			_windowMaskId.member = stream->readSint16();
+			_windowDragRegionMaskId.castLib = stream->readSint16();
+			_windowDragRegionMaskId.member = stream->readSint16();
+
+			debugC(1, kDebugLoading, "Cast::loadConfig(): windowFlags: %d, windowIconId: %s, windowMaskId: %s, windowDragRegionMaskId: %s",
+				_windowFlags, _windowIconId.asString().c_str(), _windowMaskId.asString().c_str(), _windowDragRegionMaskId.asString().c_str());
+
+			// 100 bytes
+		} else if (_version >= kFileVer1100) {
 			warning("STUB: Cast::loadConfig(): Extended config not yet supported for version v%d (%d)", humanVersion(_version), _version);
 		}
 		debugC(1, kDebugLoading, "Cast::loadConfig(): platform: %s, defaultPalette: %s, frameRate: %d", getPlatformAbbrev(_platform), _defaultPalette.asString().c_str(), _frameRate);
@@ -575,6 +637,22 @@ void Cast::saveConfig(Common::SeekableWriteStream *writeStream, uint32 offset) {
 		writeStream->writeSint16BE(_defaultPalette.member);     // 78
 	}
 
+	if (_version >= kFileVer600 && _version < kFileVer1000) {
+		writeStream->writeByte(_netUnk1);
+		writeStream->writeByte(_netUnk2);
+		writeStream->writeSint16BE(_netPreloadNumFrames);
+	}
+
+	if (_version >= kFileVer1000 && _version < kFileVer1100) {
+		writeStream->writeUint32BE(_windowFlags);
+		writeStream->writeSint16BE(_windowIconId.castLib);
+		writeStream->writeSint16BE(_windowIconId.member);
+		writeStream->writeSint16BE(_windowMaskId.castLib);
+		writeStream->writeSint16BE(_windowMaskId.member);
+		writeStream->writeSint16BE(_windowDragRegionMaskId.castLib);
+		writeStream->writeSint16BE(_windowDragRegionMaskId.member);
+	}
+
 	if (debugChannelSet(7, kDebugSaving)) {
 		// Adding +8 because the stream doesn't include the header and the entry for the size itself
 		byte *dumpData = (byte *)calloc(configSize + 8, sizeof(byte));
diff --git a/engines/director/cast.h b/engines/director/cast.h
index a38bafdfe02..19153ec48e6 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -178,7 +178,6 @@ public:
 	uint16 _castIDoffset;
 
 	Common::Rect _movieRect;
-	CastMemberID _defaultPalette;
 	TilePatternEntry _tiles[kNumBuiltinTiles];
 
 	LingoArchive *_lingoArchive;
@@ -231,6 +230,22 @@ public:
 	/* 60 */ int32 _field29;
 	/* 64 */ uint32 _checksum;
 	/* 68 */ uint16 _field30;	// Marked as remnants in ProjectorRays
+	/* 70 */ uint16 _defPaletteNum = 0; // _defaultPalette before D5, unused later
+	/* 72 */ uint32 _chunkBaseNum = 0;
+	/* 76 */ CastMemberID _defaultPalette;
+
+	/****** D6.0-D8.5 *******/
+	/* 80 */ int8 _netUnk1 = 0;
+	/* 81 */ int8 _netUnk2 = 0;
+	/* 82 */ int16 _netPreloadNumFrames = 0;
+
+	/****** post D9-D10 *******/
+	/* 84 */ uint32 _windowFlags = 0;
+	/* 88 */ CastMemberID _windowIconId;
+	/* 92 */ CastMemberID _windowMaskId;
+	/* 96 */ CastMemberID _windowDragRegionMaskId;
+
+	/* 100 */ // End of config
 
 private:
 	DirectorEngine *_vm;


Commit: 4da1cbf27163449bd880ff0bf9b8264c21e85c89
    https://github.com/scummvm/scummvm/commit/4da1cbf27163449bd880ff0bf9b8264c21e85c89
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-25T22:20:49+02:00

Commit Message:
DIRECTOR: Fixes to D6 movie config loading

Changed paths:
    engines/director/cast.cpp


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 1749e49c64e..158c98b36a8 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -484,7 +484,7 @@ bool Cast::loadConfig() {
 
 		debugC(1, kDebugLoading, "Cast::loadConfig(): field24: %d, field25: %d, field26: %d, frameRate: %d, platformID: %d",
 				_field24, _field25, _field26, _frameRate, _platformID);
-		debugC(1, kDebugLoading, "Cast::loadConfig(): protection: %d, field29: %d, checksum: %d",
+		debugC(1, kDebugLoading, "Cast::loadConfig(): protection: %d, field29: %d, checksum: 0x%08x",
 			_protection, _field29, _checksum);
 
 		//Calculation and verification of checksum
@@ -510,7 +510,7 @@ bool Cast::loadConfig() {
 			}
 
 			debugC(1, kDebugLoading, "Cast::loadConfig(): field30: %d, defaultPalette: %s", _field30, _defaultPalette.asString().c_str());
-		} else if (_version >= kFileVer500 && _version < kFileVer600) {
+		} else if (_version >= kFileVer500) {
 			_field30 = stream->readSint16();
 			_defPaletteNum = stream->readSint16();
 			_chunkBaseNum = stream->readSint32();


Commit: 5f91b1bbd2123c7dd3fa11c8153fa617e4c1fea0
    https://github.com/scummvm/scummvm/commit/5f91b1bbd2123c7dd3fa11c8153fa617e4c1fea0
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-25T22:20:49+02:00

Commit Message:
DIRECTOR: Beginnings of cast loading for D6+

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


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 158c98b36a8..b117ae45484 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -1461,7 +1461,7 @@ void Cast::loadCastData(Common::SeekableReadStreamEndian &stream, uint16 id, Res
 		}
 		castDataOffset = stream.pos();
 		castInfoOffset = stream.pos() + castDataSizeToRead;
-	} else if (_version >= kFileVer500 && _version < kFileVer600) {
+	} else if (_version >= kFileVer500 && _version < kFileVer1100) { // After D5 there are no changes, TODO: Check D11, D12
 		castType = stream.readUint32();
 		castInfoSize = stream.readUint32();
 		castDataSize = stream.readUint32();
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index c67a8bab3dc..5f9716598ff 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1759,7 +1759,7 @@ void Score::loadFrames(Common::SeekableReadStreamEndian &stream, uint16 version)
 		_numChannels = _framesStream->readUint16();
 
 		if (_framesVersion > 13) {
-			_numChannelsDisplayed = _framesStream->readUint16();
+			_numChannelsDisplayed = _framesStream->readUint16(); // Up to 500
 		} else {
 			if (_framesVersion <= 7)    // Director5
 				_numChannelsDisplayed = 48;


Commit: d16bade61bdae94ab80f12c61226a1562d20abb2
    https://github.com/scummvm/scummvm/commit/d16bade61bdae94ab80f12c61226a1562d20abb2
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-25T22:20:49+02:00

Commit Message:
DIRECTOR: Cleanup

Changed paths:
    engines/director/cast.cpp


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index b117ae45484..2fcc3186bec 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -1432,21 +1432,8 @@ void Cast::loadCastData(Common::SeekableReadStreamEndian &stream, uint16 id, Res
 
 	uint32 castDataSize, castInfoSize,  castType, castDataSizeToRead, castDataOffset, castInfoOffset;
 	uint8 flags1 = 0xFF;
-	byte unk1 = 0, unk2 = 0, unk3 = 0;
 
 	// D2-3 cast members should be loaded in loadCastDataVWCR
-#if 0
-	if (_version < kFileVer400) {
-		size1 = stream.readUint16();
-		sizeToRead = size1 +16; // 16 is for bounding rects
-		size2 = stream.readUint32();
-		castType = stream.readByte();
-		unk1 = stream.readByte();
-		unk2 = stream.readByte();
-		unk3 = stream.readByte();
-	}
-#endif
-
 	if (_version >= kFileVer400 && _version < kFileVer500) {
 		castDataSize = stream.readUint16();
 		castDataSizeToRead = castDataSize;
@@ -1472,8 +1459,8 @@ void Cast::loadCastData(Common::SeekableReadStreamEndian &stream, uint16 id, Res
 		error("Cast::loadCastData: unsupported Director version v%d (%d)", humanVersion(_version), _version);
 	}
 
-	debugC(3, kDebugLoading, "Cast::loadCastData(): CASt: id: %d type: %x castDataSize: %d castInfoSize: %d (%x) unk1: %d unk2: %d unk3: %d",
-		id, castType, castDataSize, castInfoSize, castInfoSize, unk1, unk2, unk3);
+	debugC(3, kDebugLoading, "Cast::loadCastData(): CASt: id: %d type: %s (%x) castDataSize: %d castInfoSize: %d (%x)",
+		id, castType2str((CastType)castType), castType, castDataSize, castInfoSize, castInfoSize);
 
 	// read the cast member itself
 	byte *data = (byte *)calloc(castDataSizeToRead, 1);


Commit: ca92c6d938d0cd8a3d2f26a2949590c02c78fe35
    https://github.com/scummvm/scummvm/commit/ca92c6d938d0cd8a3d2f26a2949590c02c78fe35
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-25T22:20:49+02:00

Commit Message:
DIRECTOR: Reading D6+ cast members: script, shape, transition.

bitmap is not yet fully figured out

Changed paths:
    engines/director/castmember/bitmap.cpp
    engines/director/castmember/script.cpp
    engines/director/castmember/shape.cpp
    engines/director/castmember/transition.cpp
    engines/director/types.h


diff --git a/engines/director/castmember/bitmap.cpp b/engines/director/castmember/bitmap.cpp
index 30c860c8a08..90230af31e7 100644
--- a/engines/director/castmember/bitmap.cpp
+++ b/engines/director/castmember/bitmap.cpp
@@ -100,7 +100,7 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 		_pitch *= _bitsPerPixel;
 		_pitch >>= 3;
 
-	} else if (version >= kFileVer400 && version < kFileVer600) {
+	} else if (version >= kFileVer400 && version < kFileVer700) {
 		_flags1 = flags1;
 		_pitch = stream.readUint16();
 		_pitch &= 0x0fff;
@@ -161,6 +161,8 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 		warning("STUB: BitmapCastMember::BitmapCastMember(): Bitmaps not yet supported for version v%d (%d)", humanVersion(version), version);
 	}
 
+	debugC(3, kDebugLoading, "  BitmapCastMember: %s", formatInfo().c_str());
+
 	_tag = castTag;
 }
 
diff --git a/engines/director/castmember/script.cpp b/engines/director/castmember/script.cpp
index d5dc83d77c9..b7b6b271251 100644
--- a/engines/director/castmember/script.cpp
+++ b/engines/director/castmember/script.cpp
@@ -39,9 +39,8 @@ ScriptCastMember::ScriptCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 
 	if (version < kFileVer400) {
 		error("Unhandled Script cast");
-	} else if (version >= kFileVer400 && version < kFileVer600) {
-		byte unk1 = stream.readByte();
-		byte type = stream.readByte();
+	} else if (version >= kFileVer400 && version < kFileVer1100) {
+		uint16 type = stream.readUint16BE();
 
 		switch (type) {
 		case 1:
@@ -58,7 +57,7 @@ ScriptCastMember::ScriptCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 			error("ScriptCastMember: Unprocessed script type: %d", type);
 		}
 
-		debugC(3, kDebugLoading, "CASt: Script type: %s (%d), unk1: %d", scriptType2str(_scriptType), type, unk1);
+		debugC(3, kDebugLoading, "  CASt: Script type: %s (%d)", scriptType2str(_scriptType), type);
 
 		assert(stream.pos() == stream.size()); // There should be no more data
 	} else {
diff --git a/engines/director/castmember/shape.cpp b/engines/director/castmember/shape.cpp
index 116e175c136..03816c10c3d 100644
--- a/engines/director/castmember/shape.cpp
+++ b/engines/director/castmember/shape.cpp
@@ -32,8 +32,6 @@ ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId, Common::SeekableRead
 		: CastMember(cast, castId, stream) {
 	_type = kCastShape;
 
-	byte unk1;
-
 	_ink = kInkTypeCopy;
 
 	if (debugChannelSet(5, kDebugLoading)) {
@@ -42,8 +40,7 @@ ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId, Common::SeekableRead
 	}
 
 	if (version < kFileVer400) {
-		unk1 = stream.readByte();
-		_shapeType = static_cast<ShapeType>(stream.readByte());
+		_shapeType = static_cast<ShapeType>(stream.readUint16BE());
 		_initialRect = Movie::readRect(stream);
 		_pattern = stream.readUint16BE();
 		// Normalize D2 and D3 colors from -128 ... 127 to 0 ... 255.
@@ -53,9 +50,8 @@ ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId, Common::SeekableRead
 		_ink = static_cast<InkType>(_fillType & 0x3f);
 		_lineThickness = stream.readByte();
 		_lineDirection = stream.readByte();
-	} else if (version >= kFileVer400 && version < kFileVer600) {
-		unk1 = stream.readByte();
-		_shapeType = static_cast<ShapeType>(stream.readByte());
+	} else if (version >= kFileVer400 && version < kFileVer1100) {
+		_shapeType = static_cast<ShapeType>(stream.readUint16BE());
 		_initialRect = Movie::readRect(stream);
 		_pattern = stream.readUint16BE();
 		_fgCol = g_director->transformColor((uint8)stream.readByte());
@@ -65,8 +61,7 @@ ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId, Common::SeekableRead
 		_lineThickness = stream.readByte();
 		_lineDirection = stream.readByte();
 	} else {
-		warning("STUB: ShapeCastMember::ShapeCastMember(): not yet implemented");
-		unk1 = 0;
+		warning("STUB: ShapeCastMember::ShapeCastMember(): Shapes not yet supported for version v%d (%d)", humanVersion(_cast->_version), _cast->_version);
 		_shapeType = kShapeRectangle;
 		_pattern = 0;
 		_fgCol = _bgCol = 0;
@@ -76,8 +71,8 @@ ShapeCastMember::ShapeCastMember(Cast *cast, uint16 castId, Common::SeekableRead
 	}
 	_modified = false;
 
-	debugC(3, kDebugLoading, "ShapeCastMember: unk1: %x type: %d pat: %d fg: %d bg: %d fill: %d thick: %d dir: %d",
-		unk1, _shapeType, _pattern, _fgCol, _bgCol, _fillType, _lineThickness, _lineDirection);
+	debugC(3, kDebugLoading, "ShapeCastMember: type: %d pat: %d fg: %d bg: %d fill: %d thick: %d dir: %d",
+		_shapeType, _pattern, _fgCol, _bgCol, _fillType, _lineThickness, _lineDirection);
 
 	if (debugChannelSet(3, kDebugLoading))
 		_initialRect.debugPrint(0, "ShapeCastMember: rect:");
diff --git a/engines/director/castmember/transition.cpp b/engines/director/castmember/transition.cpp
index 5d2f3a59e9c..d4647d7e152 100644
--- a/engines/director/castmember/transition.cpp
+++ b/engines/director/castmember/transition.cpp
@@ -39,14 +39,14 @@ TransitionCastMember::TransitionCastMember(Cast *cast, uint16 castId, Common::Se
 	if (debugChannelSet(5, kDebugLoading)) {
 		stream.hexdump(stream.size());
 	}
-	if (_cast->_version < kFileVer600) {
+	if (_cast->_version < kFileVer1100) {
 		stream.readByte();
 		_chunkSize = stream.readByte();
 		_transType = static_cast<TransitionType>(stream.readByte());
 		_flags = stream.readByte();
 		_area = !(_flags & 1);
 		_durationMillis = stream.readUint16BE();
-		debugC(5, kDebugLoading, "TransitionCastMember::TransitionCastMember(): transType: %d, durationMillis: %d, flags: %d, chunkSize: %d, area: %d", _transType, _durationMillis, _flags, _chunkSize, _area);
+		debugC(3, kDebugLoading, "  TransitionCastMember: transType: %d, durationMillis: %d, flags: %d, chunkSize: %d, area: %d", _transType, _durationMillis, _flags, _chunkSize, _area);
 	} else {
 		warning("STUB: TransitionCastMember::TransitionCastMember(): Transitions not yet supported for version v%d (%d)", humanVersion(_cast->_version), _cast->_version);
 	}
diff --git a/engines/director/types.h b/engines/director/types.h
index 62399b58e1b..66fc029c7f3 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -58,7 +58,8 @@ enum CastType {
 	kCastDigitalVideo = 10,
 	kCastLingoScript = 11,
 	kCastRichText = 12,
-	kCastTransition = 14,
+	kCastTransition = 14,		// D5
+	kCastXtra = 15,
 };
 
 enum ScriptType {




More information about the Scummvm-git-logs mailing list