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

moralrecordings noreply at scummvm.org
Sat Jun 22 09:31:09 UTC 2024


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:
a25c0e2cdd DIRECTOR: Fix rendering of videos in 32-bit mode
4b675ff446 DIRECTOR: Clean up logic in b_move


Commit: a25c0e2cdd2af88bc56c135ebd5ece7d0da72897
    https://github.com/scummvm/scummvm/commit/a25c0e2cdd2af88bc56c135ebd5ece7d0da72897
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T17:27:02+08:00

Commit Message:
DIRECTOR: Fix rendering of videos in 32-bit mode

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


diff --git a/engines/director/castmember/digitalvideo.cpp b/engines/director/castmember/digitalvideo.cpp
index 8f1de79bb76..5b50764de94 100644
--- a/engines/director/castmember/digitalvideo.cpp
+++ b/engines/director/castmember/digitalvideo.cpp
@@ -287,7 +287,13 @@ Graphics::MacWidget *DigitalVideoCastMember::createWidget(Common::Rect &bbox, Ch
 		}
 
 		if (frame->getPixels()) {
-			_lastFrame = frame->convertTo(g_director->_pixelformat, g_director->getPalette());
+			if (g_director->_pixelformat.bytesPerPixel == 1) {
+				// Video should have the dithering palette set, decode using whatever palette we have now
+				_lastFrame = frame->convertTo(g_director->_pixelformat, g_director->getPalette());
+			} else {
+				// 32-bit mode, use the palette bundled with the movie
+				_lastFrame = frame->convertTo(g_director->_pixelformat, _video->getPalette());
+			}
 		} else {
 			warning("DigitalVideoCastMember::createWidget(): frame has no pixel data");
 		}


Commit: 4b675ff44695adb34bcc1ac2d051a666a13cc3db
    https://github.com/scummvm/scummvm/commit/4b675ff44695adb34bcc1ac2d051a666a13cc3db
Author: Scott Percival (code at moral.net.au)
Date: 2024-06-22T17:27:02+08:00

Commit Message:
DIRECTOR: Clean up logic in b_move

Changed paths:
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index ce25efed225..725a55341d5 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2461,36 +2461,31 @@ void LB::b_move(int nargs) {
 
 	if (nargs == 1) {
 		int id = (int) g_director->getCurrentMovie()->getCast()->_castArrayStart;
-		CastMemberID *castId = new CastMemberID(id, DEFAULT_CAST_LIB);
-		Datum d = Datum(*castId);
-		delete castId;
+		CastMemberID castId(id, DEFAULT_CAST_LIB);
+		Datum d = Datum(castId);
 		g_lingo->push(d);
 		b_findEmpty(1);
-		dest = g_lingo->pop();
-		src = g_lingo->pop();
 	} else if (nargs == 2) {
-		dest = g_lingo->pop();
-		src = g_lingo->pop();
+		// pass
+	} else {
+		ARGNUMCHECK(2);
+		g_lingo->dropStack(nargs);
+		return;
 	}
+	dest = g_lingo->pop();
+	src = g_lingo->pop();
 
-	//Convert dest datum to type CASTREF if it is INT
-	//As CastMemberID constructor changes all the values, datum_int is used to preserve int
+	// Convert dest datum to type CASTREF if it is INT.
+	// Confirmed to always move to DEFAULT_CAST_LIB in D5
 	if (dest.type == INT) {
-		dest.type = CASTREF;
-		int datum_int = dest.u.i;
-		dest.u.cast = new CastMemberID();
-		dest.u.cast->member = datum_int;
+		dest = Datum(CastMemberID(dest.asInt(), DEFAULT_CAST_LIB));
 	}
 
-	//No need to move if src and dest are same
-	if (src.u.cast->member == dest.u.cast->member) {
+	// No need to move if src and dest are same
+	if (src == dest) {
 		return;
 	}
 
-	if (src.u.cast->castLib != DEFAULT_CAST_LIB) {
-		warning("b_move: wrong castLib '%d' in src CastMemberID", src.u.cast->castLib);
-	}
-
 	Movie *movie = g_director->getCurrentMovie();
 	CastMember *toMove = movie->getCastMember(src.asMemberID());
 
@@ -2500,19 +2495,16 @@ void LB::b_move(int nargs) {
 	}
 
 	g_lingo->push(dest);
-	// Room for improvement, b_erase already marks the sprites as dirty
-	b_erase(1);
 	Score *score = movie->getScore();
 	uint16 frame = score->getCurrentFrameNum();
 
 	score->renderFrame(frame, kRenderForceUpdate);
 
-	movie->eraseCastMember(dest.asMemberID());
-	CastMember *toReplace = new CastMember(toMove->getCast(), src.asMemberID().member);
-	movie->createOrReplaceCastMember(dest.asMemberID(), toReplace);
+	movie->duplicateCastMember(src.asMemberID(), dest.asMemberID());
 	movie->eraseCastMember(src.asMemberID());
 
 	score->refreshPointersForCastMemberID(dest.asMemberID());
+	score->refreshPointersForCastMemberID(src.asMemberID());
 
 	score->renderFrame(frame, kRenderForceUpdate);
 }




More information about the Scummvm-git-logs mailing list