[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