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

djsrv dservilla at gmail.com
Fri Jun 4 21:54:37 UTC 2021


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:
9db8f29708 DIRECTOR: Add CastMember::getInfo()
9cf248bdec DIRECTOR: Check for cast script in isActive
a58cb03c1c DIRECTOR: Improve autohilite behavior
b6d111a678 DIRECTOR: Lower VM version if it is wrong


Commit: 9db8f2970826ca99f9115eae7ec813425c3285f6
    https://github.com/scummvm/scummvm/commit/9db8f2970826ca99f9115eae7ec813425c3285f6
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-04T17:51:25-04:00

Commit Message:
DIRECTOR: Add CastMember::getInfo()

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


diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index a241ac41d2..d0dd71d855 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -25,6 +25,7 @@
 #include "video/qt_decoder.h"
 
 #include "director/director.h"
+#include "director/cast.h"
 #include "director/castmember.h"
 #include "director/cursor.h"
 #include "director/channel.h"
@@ -50,6 +51,10 @@ CastMember::CastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndi
 	_objType = kCastMemberObj;
 }
 
+CastMemberInfo *CastMember::getInfo() {
+	return _cast->getCastMemberInfo(_castId);
+}
+
 
 /////////////////////////////////////
 // Bitmap
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index 55d2a6a0e9..8dc8620899 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -55,6 +55,7 @@ class VideoDecoder;
 namespace Director {
 
 class AudioDecoder;
+struct CastMemberInfo;
 class Channel;
 struct Resource;
 class Stxt;
@@ -66,6 +67,7 @@ public:
 
 	Cast *getCast() { return _cast; }
 	uint16 getID() { return _castId; }
+	CastMemberInfo *getInfo();
 
 	virtual bool isEditable() { return false; }
 	virtual void setEditable(bool editable) {}


Commit: 9cf248bdec96dc4982d9fb680909d02e49ff06e3
    https://github.com/scummvm/scummvm/commit/9cf248bdec96dc4982d9fb680909d02e49ff06e3
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-04T17:51:25-04:00

Commit Message:
DIRECTOR: Check for cast script in isActive

Either a score script or a cast script can make a sprite respond to
clicks.

Changed paths:
    engines/director/sprite.cpp


diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 537cf98748..cde30b7714 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -114,7 +114,8 @@ bool Sprite::respondsToMouse() {
 }
 
 bool Sprite::isActive() {
-	return _movie->getScriptContext(kScoreScript, _scriptId) != nullptr;
+	return _movie->getScriptContext(kScoreScript, _scriptId) != nullptr
+			|| _movie->getScriptContext(kCastScript, _castId) != nullptr;
 }
 
 bool Sprite::shouldHilite() {


Commit: a58cb03c1c830942471c88569db334d0f8f9fac5
    https://github.com/scummvm/scummvm/commit/a58cb03c1c830942471c88569db334d0f8f9fac5
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-04T17:51:25-04:00

Commit Message:
DIRECTOR: Improve autohilite behavior

In D3 or higher, there's an autohilite flag in the cast info.
In D2, sprites seem to autohilite only if they have matte ink.

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


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 86dac2bd1f..66d5df8d77 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -1198,6 +1198,9 @@ void Cast::loadCastInfo(Common::SeekableReadStreamEndian &stream, uint16 id) {
 		((SoundCastMember *)member)->_looping = castInfo.flags & 16 ? 0 : 1;
 	}
 
+	if (_vm->getVersion() >= 300) {
+		ci->autoHilite = castInfo.flags & 2;
+	}
 	ci->scriptId = castInfo.scriptId;
 	if (ci->scriptId != 0)
 		_castsScriptIds[ci->scriptId] = id;
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index d0dd71d855..bfa6c02c06 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -41,7 +41,6 @@ CastMember::CastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndi
 	_cast = cast;
 	_castId = castId;
 	_hilite = false;
-	_autoHilite = false;
 	_purgePriority = 3;
 	_size = stream.size();
 	_flags1 = 0;
@@ -75,8 +74,6 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 
 	if (version < 400) {
 		_flags1 = flags1;	// region: 0 - auto, 1 - matte, 2 - disabled, 8 - no auto
-		if (_flags1 >> 4 == 0x0)
-			_autoHilite = true;
 
 		_bytes = stream.readUint16();
 		_initialRect = Movie::readRect(stream);
@@ -128,8 +125,6 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 		if (_bitsPerPixel == 1)
 			_pitch *= 8;
 
-		_autoHilite = (_flags2 % 4 != 0);
-
 		int tail = 0;
 		byte buf[256];
 
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index 8dc8620899..9c860d6b57 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -95,7 +95,6 @@ public:
 
 	bool _modified;
 	bool _hilite;
-	bool _autoHilite;
 	int _purgePriority;
 	uint32 _size;
 	uint8 _flags1;
@@ -283,6 +282,7 @@ struct EditInfo {
 };
 
 struct CastMemberInfo {
+	bool autoHilite;
 	uint32 scriptId;
 	Common::String script;
 	Common::String name;
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index cde30b7714..1b2d555a22 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -119,11 +119,20 @@ bool Sprite::isActive() {
 }
 
 bool Sprite::shouldHilite() {
-	if ((_cast && _cast->_autoHilite) || (isQDShape() && _ink == kInkTypeMatte))
-		if (g_director->getVersion() < 400 && !_moveable)
-			if (_movie->getScriptContext(kScoreScript, _scriptId) ||
-					_movie->getScriptContext(kCastScript, _castId))
-				return true;
+	if (!isActive())
+		return false;
+
+	if (g_director->getVersion() < 400 && _moveable)
+		return false;
+
+	if (g_director->getVersion() < 300)
+		return _ink == kInkTypeMatte;
+
+	if (_cast) {
+		CastMemberInfo *castInfo = _cast->getInfo();
+		if (castInfo)
+			return castInfo->autoHilite;
+	}
 
 	return false;
 }


Commit: b6d111a67896849b4811db06968e34bfd0eff5eb
    https://github.com/scummvm/scummvm/commit/b6d111a67896849b4811db06968e34bfd0eff5eb
Author: djsrv (dservilla at gmail.com)
Date: 2021-06-04T17:51:25-04:00

Commit Message:
DIRECTOR: Lower VM version if it is wrong

Changed paths:
    engines/director/cast.cpp


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 66d5df8d77..c4b7e5356c 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -459,14 +459,16 @@ void Cast::loadConfig(Common::SeekableReadStreamEndian &stream) {
 		}
 	}
 
+	// FIXME: We should avoid screwing with the global VM version since
+	// there can be movies in other windows or external casts from different versions.
+	// Each movie/cast should probably have its own version field.
 	if (humanDirectorVersion > _vm->getVersion()) {
 		if (_vm->getVersion() > 0)
 			warning("Movie is from later version v%d", humanDirectorVersion);
 		_vm->setVersion(humanDirectorVersion);
 	} else if (humanDirectorVersion < _vm->getVersion()) {
 		warning("Movie is from earlier version v%d", humanDirectorVersion);
-		// Don't change version in case there are other movies, factories,
-		// etc., which need features from the later version
+		_vm->setVersion(humanDirectorVersion);
 	}
 
 	debugC(1, kDebugLoading, "Cast::loadConfig(): len: %d, ver: %d, framerate: %d, light: %d, unk: %d, font: %d, size: %d"




More information about the Scummvm-git-logs mailing list