[Scummvm-git-logs] scummvm master -> 9dfce6ec117d13d45c3a1aadf98aa58f21c5c314

djsrv dservilla at gmail.com
Sat Jul 17 03:22:38 UTC 2021


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

Summary:
307bf94beb DIRECTOR: Improve Sprite::setCast behavior
9dfce6ec11 DIRECTOR: Add FIXME comments to Sprite::setCast


Commit: 307bf94beb944fe8b6831c3d64fbf975d9c73732
    https://github.com/scummvm/scummvm/commit/307bf94beb944fe8b6831c3d64fbf975d9c73732
Author: djsrv (dservilla at gmail.com)
Date: 2021-07-16T23:19:05-04:00

Commit Message:
DIRECTOR: Improve Sprite::setCast behavior

Changed paths:
    engines/director/sprite.cpp


diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index ec76a5e92f..ab9f5e01c1 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -188,14 +188,39 @@ void Sprite::setPattern(uint16 pattern) {
 }
 
 void Sprite::setCast(CastMemberID memberID) {
-	CastMember *member = _movie->getCastMember(memberID);
-	_castId = memberID;
+	/**
+	 * There are two things we need to take into account here:
+	 *   1. The cast member's type
+	 *   2. The sprite's type
+	 * If the two types do not align, the sprite should not render.
+	 * 
+	 * Before D4, you needed to manually set a sprite's type along
+	 * with its castNum.
+	 * 
+	 * Starting in D4, setting a sprite's castNum also set its type
+	 * to an appropriate default.
+	 */
 
-	if (memberID.member == 0)
-		return;
+	_castId = memberID;
+	_cast = _movie->getCastMember(_castId);
+	if (g_director->getVersion() >= 400)
+		_spriteType = kCastMemberSprite;
 
-	if (member) {
-		_cast = member;
+	if (_cast) {
+		if (g_director->getVersion() >= 400) {
+			// Set the sprite type to be more specific ONLY for bitmap or text.
+			// Others just use the generic kCastMemberSprite in D4.
+			switch (_cast->_type) {
+			case kCastBitmap:
+				_spriteType = kBitmapSprite;
+				break;
+			case kCastText:
+				_spriteType = kTextSprite;
+				break;
+			default:
+				break;
+			}
+		}
 
 		if (_cast->_type == kCastText &&
 			(_spriteType == kButtonSprite ||
@@ -233,7 +258,8 @@ void Sprite::setCast(CastMemberID memberID) {
 		}
 
 	} else {
-		warning("Sprite::setCast(): %s has null member", memberID.asString().c_str());
+		if (_castId.member != 0)
+			warning("Sprite::setCast(): %s is null", memberID.asString().c_str());
 	}
 }
 


Commit: 9dfce6ec117d13d45c3a1aadf98aa58f21c5c314
    https://github.com/scummvm/scummvm/commit/9dfce6ec117d13d45c3a1aadf98aa58f21c5c314
Author: djsrv (dservilla at gmail.com)
Date: 2021-07-16T23:19:05-04:00

Commit Message:
DIRECTOR: Add FIXME comments to Sprite::setCast

Changed paths:
    engines/director/sprite.cpp


diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index ab9f5e01c1..0df655aaf1 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -229,7 +229,8 @@ void Sprite::setCast(CastMemberID memberID) {
 			// WORKAROUND: In D2/D3 there can be text casts that have button
 			// information set in the sprite.
 			warning("Sprite::setCast(): Working around D2/3 button glitch");
-
+			// FIXME: We should not override the cast member's type here.
+			// We should only change how the sprite renders.
 			_cast->_type = kCastButton;
 			((TextCastMember *)_cast)->_buttonType = (ButtonType)(_spriteType - 8);
 		}
@@ -253,6 +254,8 @@ void Sprite::setCast(CastMemberID memberID) {
 		// this happens in warlock-mac data/stambul/c up
 		if (_spriteType == kBitmapSprite && _cast->_type != kCastBitmap) {
 			warning("Sprite::setCast(): sprite type doesn't match cast type, setting cast member to null");
+			// FIXME: We should still set the cast number but not render
+			// the sprite if the types conflict.
 			_cast = nullptr;
 			_castId = CastMemberID();
 		}




More information about the Scummvm-git-logs mailing list