[Scummvm-git-logs] scummvm master -> 4766fd025bdc3c7e81426925e575be9731eaa58c

ysj1173886760 42030331+ysj1173886760 at users.noreply.github.com
Sat Aug 14 13:43: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:
9061450e73 DIRECTOR: clean code.
73fb26bbe9 DIRECTOR: reverse the green channel and blue channel in BITDDecoder in D4
267d8b8e44 DIRECTOR: set mac system palette if lastPalette is 0 after disabling puppetPalette.
4766fd025b DIRECTOR: set fallback cursor when custom cursor is not read correctly.


Commit: 9061450e73bb937aab2bc4ade46d0ef659d8604a
    https://github.com/scummvm/scummvm/commit/9061450e73bb937aab2bc4ade46d0ef659d8604a
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-14T21:42:53+08:00

Commit Message:
DIRECTOR: clean code.

Changed paths:
    engines/director/images.cpp


diff --git a/engines/director/images.cpp b/engines/director/images.cpp
index 771d1568ed..3e5b43a604 100644
--- a/engines/director/images.cpp
+++ b/engines/director/images.cpp
@@ -144,44 +144,18 @@ void BITDDecoder::loadPalette(Common::SeekableReadStream &stream) {
 }
 
 void BITDDecoder::convertPixelIntoSurface(void* surfacePointer, uint fromBpp, uint toBpp, int red, int green, int blue) {
-	// Initial implementation of 32-bit images to palettised sprites.
-	switch (fromBpp) {
-	case 4:
-		switch (toBpp) {
-		case 1:
-			*((byte*)surfacePointer) = g_director->_wm->findBestColor(red, blue, green);
-			break;
-
-		case 4:
-			*((uint32 *)surfacePointer) = g_director->_wm->findBestColor(red, blue, green);
-			break;
-
-		default:
-			warning("BITDDecoder::convertPixelIntoSurface(): conversion from %d to %d not implemented",
-				fromBpp, toBpp);
-		}
+	switch (toBpp) {
+	case 1:
+		*((byte*)surfacePointer) = g_director->_wm->findBestColor(red, blue, green);
 		break;
 
-	case 2:
-		switch (toBpp) {
-		case 1:
-			*((byte*)surfacePointer) = g_director->_wm->findBestColor(red, blue, green);
-			break;
-
-		case 4:
-			*((uint32 *)surfacePointer) = g_director->_wm->findBestColor(red, blue, green);
-			break;
-
-		default:
-			warning("BITDDecoder::convertPixelIntoSurface(): conversion from %d to %d not implemented",
-					fromBpp, toBpp);
-		}
+	case 4:
+		*((uint32 *)surfacePointer) = g_director->_wm->findBestColor(red, blue, green);
 		break;
 
 	default:
-		warning("BITDDecoder::convertPixelIntoSurface(): could not convert from %d to %d",
+		warning("BITDDecoder::convertPixelIntoSurface(): conversion from %d to %d not implemented",
 			fromBpp, toBpp);
-		break;
 	}
 }
 


Commit: 73fb26bbe9111114f4c6d90aefb65324e26ad4d4
    https://github.com/scummvm/scummvm/commit/73fb26bbe9111114f4c6d90aefb65324e26ad4d4
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-14T21:42:53+08:00

Commit Message:
DIRECTOR: reverse the green channel and blue channel in BITDDecoder in D4

Changed paths:
    engines/director/images.cpp


diff --git a/engines/director/images.cpp b/engines/director/images.cpp
index 3e5b43a604..897acc4675 100644
--- a/engines/director/images.cpp
+++ b/engines/director/images.cpp
@@ -144,19 +144,31 @@ void BITDDecoder::loadPalette(Common::SeekableReadStream &stream) {
 }
 
 void BITDDecoder::convertPixelIntoSurface(void* surfacePointer, uint fromBpp, uint toBpp, int red, int green, int blue) {
-	switch (toBpp) {
-	case 1:
-		*((byte*)surfacePointer) = g_director->_wm->findBestColor(red, blue, green);
-		break;
-
-	case 4:
-		*((uint32 *)surfacePointer) = g_director->_wm->findBestColor(red, blue, green);
-		break;
-
-	default:
-		warning("BITDDecoder::convertPixelIntoSurface(): conversion from %d to %d not implemented",
-			fromBpp, toBpp);
+	if (_version < kFileVer400) {
+		switch (toBpp) {
+		case 1:
+			*((byte*)surfacePointer) = g_director->_wm->findBestColor(red, blue, green);
+			return;
+
+		case 4:
+			*((uint32 *)surfacePointer) = g_director->_wm->findBestColor(red, blue, green);
+			return;
+
+		}
+	} else {
+		// it looks like the blue channel and green channel are reversed in D4
+		switch (toBpp) {
+		case 1:
+			*((byte*)surfacePointer) = g_director->_wm->findBestColor(red, green, blue);
+			return;
+
+		case 4:
+			*((uint32 *)surfacePointer) = g_director->_wm->findBestColor(red, green, blue);
+			return;
+
+		}
 	}
+	warning("BITDDecoder::convertPixelIntoSurface(): conversion from %d to %d not implemented", fromBpp, toBpp);
 }
 
 bool BITDDecoder::loadStream(Common::SeekableReadStream &stream) {


Commit: 267d8b8e44bd70081c3fb2caa4e35e0c4ddf2a73
    https://github.com/scummvm/scummvm/commit/267d8b8e44bd70081c3fb2caa4e35e0c4ddf2a73
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-14T21:42:53+08:00

Commit Message:
DIRECTOR: set mac system palette if lastPalette is 0 after disabling puppetPalette.

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 05e0137629..932878fe8d 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1970,8 +1970,15 @@ void LB::b_puppetPalette(int nargs) {
 		g_director->getCurrentMovie()->getScore()->_puppetPalette = true;
 	} else {
 		// Setting puppetPalette to 0 disables it (Lingo Dictionary, 226)
-		g_director->setPalette(g_director->getCurrentMovie()->getScore()->_lastPalette);
+		Score *sc = g_director->getCurrentMovie()->getScore();
 		g_director->getCurrentMovie()->getScore()->_puppetPalette = false;
+
+		// FIXME: set system palette decided by platform, should be fixed after windows palette is working.
+		// try to set mac system palette if lastPalette is 0.
+		if (sc->_lastPalette == 0)
+			g_director->setPalette(-1);
+		else
+			g_director->setPalette(sc->resolvePaletteId(sc->_lastPalette));
 	}
 
 	// TODO: Implement advanced features that use these.
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index b6ffa527fe..519bcca0e1 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -498,7 +498,7 @@ void Score::renderFrame(uint16 frameId, RenderMode mode) {
 		renderSprites(frameId, mode);
 
 	int currentPalette = _frames[frameId]->_palette.paletteId;
-	if (!_puppetPalette && currentPalette != _lastPalette) {
+	if (!_puppetPalette && currentPalette != _lastPalette && currentPalette) {
 		_lastPalette = currentPalette;
 		g_director->setPalette(resolvePaletteId(currentPalette));
 	}


Commit: 4766fd025bdc3c7e81426925e575be9731eaa58c
    https://github.com/scummvm/scummvm/commit/4766fd025bdc3c7e81426925e575be9731eaa58c
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-14T21:42:53+08:00

Commit Message:
DIRECTOR: set fallback cursor when custom cursor is not read correctly.

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


diff --git a/engines/director/cursor.cpp b/engines/director/cursor.cpp
index 42348f13c1..ea852e2234 100644
--- a/engines/director/cursor.cpp
+++ b/engines/director/cursor.cpp
@@ -120,7 +120,7 @@ void Cursor::readFromCast(CastMemberID cursorId, CastMemberID maskId) {
 	_hotspotY = bc->_regY - bc->_initialRect.top;
 }
 
-void Cursor::readFromResource(int resourceId) {
+void Cursor::readBuiltinType(int resourceId) {
 	if (resourceId == _cursorResId)
 		return;
 
@@ -145,8 +145,27 @@ void Cursor::readFromResource(int resourceId) {
 		resetCursor(Graphics::kMacCursorOff, true, resourceId);
 		break;
 	default:
-		_usePalette = true;
-		_keyColor = 0xff;
+		warning("Cursor::readBuiltinType failed to read cursor %d", resourceId);
+		break;
+	}
+}
+
+void Cursor::readFromResource(int resourceId) {
+	if (resourceId == _cursorResId)
+		return;
+
+	switch(resourceId) {
+	case -1:
+	case 0:
+	case 1:
+	case 2:
+	case 3:
+	case 4:
+	case 200:
+		readBuiltinType(resourceId);
+		break;
+	default:
+		bool readSuccessful = false;
 
 		for (Common::HashMap<Common::String, Archive *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = g_director->_openResFiles.begin(); it != g_director->_openResFiles.end(); ++it) {
 			Common::SeekableReadStreamEndian *cursorStream;
@@ -156,10 +175,18 @@ void Cursor::readFromResource(int resourceId) {
 				cursorStream = ((MacArchive *)it->_value)->getResource(MKTAG('C', 'R', 'S', 'R'), resourceId);
 
 			if (cursorStream && readFromStream(*((Common::SeekableReadStream *)cursorStream), false, 0)) {
+				_usePalette = true;
+				_keyColor = 0xff;
+				readSuccessful = true;
+
 				resetCursor(Graphics::kMacCursorCustom, false, resourceId);
 				break;
 			}
 		}
+
+		// fallback method. try to use builtin cursor by regarding resourceId as a single byte.
+		if (!readSuccessful)
+			readBuiltinType(resourceId & 0x7f);
 	}
 }
 
diff --git a/engines/director/cursor.h b/engines/director/cursor.h
index fe9e777767..2faeed923b 100644
--- a/engines/director/cursor.h
+++ b/engines/director/cursor.h
@@ -43,6 +43,7 @@ class Cursor : public Graphics::MacCursor {
 
 	void readFromCast(CastMemberID cursorId, CastMemberID maskId);
 	void readFromResource(int resourceId);
+	void readBuiltinType(int resourceId);
 
 	bool isEmpty() { return _cursorResId == 0 && _cursorCastId.member == 0; }
 	bool operator==(const Cursor &c);




More information about the Scummvm-git-logs mailing list