[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