[Scummvm-git-logs] scummvm master -> 4f551a66e250484dd6507b5c232466731a6592cc

sev- noreply at scummvm.org
Fri Mar 7 23:23:37 UTC 2025


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

Summary:
4f551a66e2 DIRECTOR: Initial code on merging FilmLoop and Movie cast members


Commit: 4f551a66e250484dd6507b5c232466731a6592cc
    https://github.com/scummvm/scummvm/commit/4f551a66e250484dd6507b5c232466731a6592cc
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-03-08T00:23:24+01:00

Commit Message:
DIRECTOR: Initial code on merging FilmLoop and Movie cast members

They are basically the same thing except that Movie would react to
events and run Lingo

Changed paths:
    engines/director/castmember/movie.cpp
    engines/director/castmember/movie.h
    engines/director/channel.cpp
    engines/director/score.cpp


diff --git a/engines/director/castmember/movie.cpp b/engines/director/castmember/movie.cpp
index 44a7068c4e8..cef9c0ba47e 100644
--- a/engines/director/castmember/movie.cpp
+++ b/engines/director/castmember/movie.cpp
@@ -21,23 +21,19 @@
 
 #include "director/director.h"
 #include "director/movie.h"
+#include "director/sprite.h"
+
 #include "director/castmember/movie.h"
+
 #include "director/lingo/lingo-the.h"
 
 namespace Director {
 
 MovieCastMember::MovieCastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndian &stream, uint16 version)
-		: CastMember(cast, castId, stream) {
+		: FilmLoopCastMember(cast, castId, stream, version) {
 	_type = kCastMovie;
 
-	_initialRect = Movie::readRect(stream);
-	_flags = stream.readUint32BE();
-
-	_looping = !(_flags & 0x20);
 	_enableScripts = _flags & 0x10;
-	_enableSound = _flags & 0x08;
-	_crop = !(_flags & 0x02);
-	_center = _flags & 0x01;
 
 	if (debugChannelSet(2, kDebugLoading))
 		_initialRect.debugPrint(2, "MovieCastMember(): rect:");
@@ -48,20 +44,10 @@ MovieCastMember::MovieCastMember(Cast *cast, uint16 castId, Common::SeekableRead
 }
 
 MovieCastMember::MovieCastMember(Cast *cast, uint16 castId, MovieCastMember &source)
-	: CastMember(cast, castId) {
+	: FilmLoopCastMember(cast, castId, source) {
 	_type = kCastMovie;
-	_loaded = source._loaded;
-
-	_initialRect = source._initialRect;
-	_boundingRect = source._boundingRect;
-	_children = source._children;
 
-	_flags = source._flags;
-	_looping = source._looping;
 	_enableScripts = source._enableScripts;
-	_enableSound = source._enableSound;
-	_crop = source._crop;
-	_center = source._center;
 }
 
 bool MovieCastMember::hasField(int field) {
diff --git a/engines/director/castmember/movie.h b/engines/director/castmember/movie.h
index 5e84bb402ca..e2669a337c8 100644
--- a/engines/director/castmember/movie.h
+++ b/engines/director/castmember/movie.h
@@ -22,11 +22,11 @@
 #ifndef DIRECTOR_CASTMEMBER_MOVIE_H
 #define DIRECTOR_CASTMEMBER_MOVIE_H
 
-#include "director/castmember/castmember.h"
+#include "director/castmember/filmloop.h"
 
 namespace Director {
 
-class MovieCastMember : public CastMember {
+class MovieCastMember : public FilmLoopCastMember {
 public:
 	MovieCastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndian &stream, uint16 version);
 	MovieCastMember(Cast *cast, uint16 castId, MovieCastMember &source);
@@ -38,11 +38,7 @@ public:
 	Common::String formatInfo() override;
 
 	uint32 _flags;
-	bool _looping;
 	bool _enableScripts;
-	bool _enableSound;
-	bool _crop;
-	bool _center;
 };
 
 } // End of namespace Director
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 15211e16b80..562c2381a37 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -423,7 +423,7 @@ void Channel::setClean(Sprite *nextSprite, bool partial) {
 					((DigitalVideoCastMember *)nextSprite->_cast)->setChannel(this);
 					((DigitalVideoCastMember *)nextSprite->_cast)->startVideo();
 				}
-			} else if (nextSprite->_cast->_type == kCastFilmLoop) {
+			} else if (nextSprite->_cast->_type == kCastFilmLoop || nextSprite->_cast->_type == kCastMovie) {
 				// brand new film loop, reset the frame counter.
 				_filmLoopFrame = 1;
 			}
@@ -722,14 +722,14 @@ int Channel::getMouseLine(int x, int y) {
 }
 
 bool Channel::hasSubChannels() {
-	if ((_sprite->_cast) && (_sprite->_cast->_type == kCastFilmLoop)) {
+	if ((_sprite->_cast) && (_sprite->_cast->_type == kCastFilmLoop || _sprite->_cast->_type == kCastMovie)) {
 		return true;
 	}
 	return false;
 }
 
 Common::Array<Channel> *Channel::getSubChannels() {
-	if ((!_sprite->_cast) || (_sprite->_cast->_type != kCastFilmLoop)) {
+	if ((!_sprite->_cast) || (_sprite->_cast->_type != kCastFilmLoop && _sprite->_cast->_type != kCastMovie)) {
 		warning("Channel doesn't have any sub-channels");
 		return nullptr;
 	}
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 1b8891e54bd..c1ec96122a1 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -770,7 +770,7 @@ bool Score::renderTransition(uint16 frameId, RenderMode mode) {
 
 void Score::incrementFilmLoops() {
 	for (auto &it : _channels) {
-		if (it->_sprite->_cast && it->_sprite->_cast->_type == kCastFilmLoop) {
+		if (it->_sprite->_cast && (it->_sprite->_cast->_type == kCastFilmLoop || it->_sprite->_cast->_type == kCastMovie)) {
 			FilmLoopCastMember *fl = ((FilmLoopCastMember *)it->_sprite->_cast);
 			if (!fl->_frames.empty()) {
 				// increment the film loop counter




More information about the Scummvm-git-logs mailing list