[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