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

npjg nathanael.gentrydb8 at gmail.com
Tue Jun 23 16:51:08 UTC 2020


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:
a3f649c10d GRAPHICS: MACGUI: Add colour decomposer
ba8762ca8f DIRECTOR: Clear drawing mask in the right place
3cac9487a2 DIRECTOR: Begin implementing the rest of the inks
4ff998b39a DIRECTOR: Remove shape transparency hack


Commit: a3f649c10da89d96286b51818d07ba94a2cad48f
    https://github.com/scummvm/scummvm/commit/a3f649c10da89d96286b51818d07ba94a2cad48f
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-06-23T12:50:58-04:00

Commit Message:
GRAPHICS: MACGUI: Add colour decomposer

Changed paths:
    graphics/macgui/macwindowmanager.cpp
    graphics/macgui/macwindowmanager.h


diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 168dd5c6e0..116b8d6581 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -738,6 +738,12 @@ uint MacWindowManager::findBestColor(byte cr, byte cg, byte cb) {
 	return bestColor;
 }
 
+void MacWindowManager::decomposeColor(byte color, byte &r, byte &g, byte &b) {
+	r = *(_palette + 3 * color + 0);
+	g = *(_palette + 3 * color + 1);
+	b = *(_palette + 3 * color + 2);
+}
+
 PauseToken MacWindowManager::pauseEngine() {
 	return _engineP->pauseEngine();
 }
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index c52bfc6d6a..73f42fa263 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -260,6 +260,7 @@ public:
 
 	void passPalette(const byte *palette, uint size);
 	uint findBestColor(byte cr, byte cg, byte cb);
+	void decomposeColor(byte color, byte &r, byte &g, byte &b);
 
 	void renderZoomBox(bool redraw = false);
 	void addZoomBox(ZoomBox *box);


Commit: ba8762ca8f3307a34e4be788d0750a17d3944c8f
    https://github.com/scummvm/scummvm/commit/ba8762ca8f3307a34e4be788d0750a17d3944c8f
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-06-23T12:50:58-04:00

Commit Message:
DIRECTOR: Clear drawing mask in the right place

Changed paths:
    engines/director/lingo/lingo-the.cpp
    engines/director/score.cpp
    engines/director/score.h


diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index e50612457e..d8ca5d7b8a 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -836,8 +836,11 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 		sprite->_blend = d.asInt();
 		break;
 	case kTheCastNum:
-		score->unrenderSprite(id);
-		sprite->setCast(d.asInt());
+		// Don't cause unnecessary flashing
+		if (d.asInt() != sprite->_castId) {
+			score->markDirtyRect(channel->getBbox());
+			sprite->setCast(d.asInt());
+		}
 		break;
 	case kTheConstraint:
 		if (d.type == CASTREF) {
@@ -858,7 +861,7 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 		break;
 	case kTheHeight:
 		if (sprite->_puppet && sprite->_stretch) {
-			score->unrenderSprite(id);
+			score->markDirtyRect(channel->getBbox());
 			sprite->_height = d.asInt();
 		}
 		break;
@@ -924,7 +927,7 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 		break;
 	case kTheWidth:
 		if (sprite->_puppet && sprite->_stretch) {
-			score->unrenderSprite(id);
+			score->markDirtyRect(channel->getBbox());
 			sprite->_width = d.asInt();
 		}
 		break;
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 506c080bb7..dcd4ec8854 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -410,6 +410,7 @@ void Score::startLoop() {
 
 	_lingo->processEvent(kEventStartMovie);
 
+	_maskSurface->clear(1);
 	while (!_stopPlay) {
 		if (_currentFrame >= _frames.size()) {
 			if (debugChannelSet(-1, kDebugNoLoop))
@@ -419,6 +420,7 @@ void Score::startLoop() {
 		}
 
 		update();
+		_maskSurface->clear(0);
 
 		if (_currentFrame < _frames.size())
 			_vm->processEvents();
@@ -558,7 +560,6 @@ void Score::update() {
 }
 
 void Score::renderFrame(uint16 frameId, bool forceUpdate, bool updateStageOnly) {
-	_maskSurface->clear(0);
 
 	Frame *currentFrame = _frames[frameId];
 
@@ -580,43 +581,37 @@ void Score::renderFrame(uint16 frameId, bool forceUpdate, bool updateStageOnly)
 		bool needsUpdate = currentSprite->isDirty() ||
 			currentSprite->_castId != nextSprite->_castId ||
 			channel->_delta != Common::Point(0, 0) ||
-			currentSprite->_startPoint != nextSprite->_startPoint ||
 			currentSprite->getDims() != nextSprite->getDims() ||
-			(channel->_currentPoint != nextSprite->_startPoint &&
-			 currentSprite != nextSprite);
+			channel->_currentPoint != nextSprite->_startPoint;
 
-		// WORKAROUND, HACK: Redraw reverse ink sprites each time to prevent flickering
-		needsUpdate = needsUpdate || (currentSprite->_ink == kInkTypeReverse);
-
-		if (needsUpdate || forceUpdate)
-			unrenderSprite(i);
+		if ((needsUpdate || forceUpdate) && !currentSprite->_trails)
+			markDirtyRect(channel->getBbox());
 
 		channel->_sprite = nextSprite;
+		channel->_sprite->updateCast();
 
-		if (currentSprite->_castId == 0 && nextSprite->_castId != 0)
-			channel->resetPosition();
+		// Sprites marked moveable are constrained to the same bounding box until
+		// the moveable is disabled
+		if (!nextSprite->_puppet && !nextSprite->_moveable)
+			channel->_currentPoint = nextSprite->_startPoint;
 
 		channel->updateLocation();
+
+		// TODO: Understand why conditioning this causes so many problems
+		markDirtyRect(channel->getBbox());
 	}
 
 	for (uint id = 0; id < _channels.size(); id++) {
 		Channel *channel = _channels[id];
 		Sprite *sprite = channel->_sprite;
 
-		if (!sprite || !sprite->_enabled || !sprite->_castType)
+		if (!sprite || !sprite->_enabled || !sprite->_castId)
 			continue;
 
-		sprite->updateCast();
-
-		// Sprites marked moveable are constrained to the same bounding box until
-		// the moveable is disabled
-		if (!sprite->_puppet && !sprite->_moveable)
-			channel->_currentPoint = sprite->_startPoint;
-
 		Common::Rect currentBbox = channel->getBbox();
-		_maskSurface->fillRect(currentBbox, 1);
 
 		debugC(1, kDebugImages, "Score::renderFrame(): channel: %d,  castType: %d,  castId: %d", id, sprite->_castType, sprite->_castId);
+
 		if (sprite->_castType == kCastShape) {
 			renderShape(id);
 		} else {
@@ -653,6 +648,11 @@ void Score::renderFrame(uint16 frameId, bool forceUpdate, bool updateStageOnly)
 
 }
 
+void Score::markDirtyRect(Common::Rect dirty) {
+	_maskSurface->fillRect(dirty, 1);
+	_surface->fillRect(dirty, _stageColor);
+}
+
 void Score::screenShot() {
 	Graphics::Surface rawSurface = _surface->rawSurface();
 	const Graphics::PixelFormat requiredFormat_4byte(4, 8, 8, 8, 8, 0, 8, 16, 24);
@@ -674,17 +674,6 @@ void Score::screenShot() {
 	newSurface->free();
 }
 
-void Score::unrenderSprite(int spriteId) {
-	Channel *channel = _channels[spriteId];
-	Sprite *currentSprite = channel->_sprite;
-
-	if (!currentSprite->_trails) {
-		Common::Rect currentBbox = channel->getBbox();
-		_maskSurface->fillRect(currentBbox, 1);
-		_surface->fillRect(currentBbox, _stageColor);
-	}
-}
-
 void Score::renderShape(uint16 spriteId) {
 	Sprite *sp = _channels[spriteId]->_sprite;
 
diff --git a/engines/director/score.h b/engines/director/score.h
index ddb6a2bc8b..3a4030d314 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -147,7 +147,7 @@ public:
 	Cast *getCastMember(int castId);
 	const Stxt *getStxt(int castId);
 	void renderFrame(uint16 frameId, bool forceUpdate = false, bool updateStageOnly = false);
-	void unrenderSprite(int spriteId);
+	void markDirtyRect(Common::Rect dirty);
 
 private:
 	void update();


Commit: 3cac9487a27571e35c51ace88b62399938462456
    https://github.com/scummvm/scummvm/commit/3cac9487a27571e35c51ace88b62399938462456
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-06-23T12:50:58-04:00

Commit Message:
DIRECTOR: Begin implementing the rest of the inks

Changed paths:
    engines/director/ink.cpp
    engines/director/score.h


diff --git a/engines/director/ink.cpp b/engines/director/ink.cpp
index 608e697263..8f8584d508 100644
--- a/engines/director/ink.cpp
+++ b/engines/director/ink.cpp
@@ -29,91 +29,130 @@ namespace Director {
 
 void Score::inkBasedBlit(Graphics::ManagedSurface *maskSurface, const Graphics::Surface &spriteSurface, InkType ink, Common::Rect drawRect, uint spriteId) {
 
-	// FIXME: If we try to use one of the draw* methods below for a sprite that
-	// has width and height changed, there is a butter overflow. But we don't want
-	// to clip `t`, so width and height can be changed and stretched automatically.
-	Common::Rect t;
-	if (ink == kInkTypeCopy || ink == kInkTypeTransparent) {
-		t = drawRect;
-	} else {
-		t = Common::Rect(spriteSurface.w, spriteSurface.h);
-		t.moveTo(drawRect.left, drawRect.top);
-	}
+	byte rSrc, gSrc, bSrc;
+	byte rDst, gDst, bDst;
+	int numColors = _vm->getPaletteColorCount();
+
+	Common::Rect t = Common::Rect(spriteSurface.w, spriteSurface.h);
+	t.moveTo(drawRect.left, drawRect.top);
 
 	Common::Point maskOrigin(MAX(0, -drawRect.left), MAX(0, -drawRect.top));
 	drawRect.clip(Common::Rect(_maskSurface->w, _maskSurface->h));
-	maskSurface->transBlitFrom(*_maskSurface, drawRect, maskOrigin, _stageColor);
-
-	switch (ink) {
-	case kInkTypeCopy:
-		_surface->transBlitFrom(spriteSurface, Common::Rect(spriteSurface.w, spriteSurface.h), t, 0, false, 0, 0xff, &maskSurface->rawSurface(), true);
-		break;
-	case kInkTypeTransparent:
-		// FIXME: is it always white (last entry in pallette)?
-		_surface->transBlitFrom(spriteSurface, Common::Rect(spriteSurface.w, spriteSurface.h), t, _vm->getPaletteColorCount() - 1);
-		break;
-	case kInkTypeBackgndTrans:
-		drawBackgndTransSprite(spriteSurface, t, spriteId);
-		break;
-	case kInkTypeMatte:
-		drawMatteSprite(spriteSurface, t);
-		break;
-	case kInkTypeGhost:
-		drawGhostSprite(spriteSurface, t);
-		break;
-	case kInkTypeReverse:
-		drawReverseSprite(spriteSurface, t, spriteId);
-		break;
-	default:
-		warning("Score::inkBasedBlit(): Unhandled ink type %d", ink);
-		_surface->blitFrom(spriteSurface, Common::Point(t.left, t.top));
-		break;
-	}
-
-}
-
-void Score::drawBackgndTransSprite(const Graphics::Surface &sprite, Common::Rect &drawRect, int spriteId) {
-	byte skipColor = _channels[spriteId]->_sprite->_backColor;
-	if (_channels[spriteId]->_sprite->_castType == kCastText && _channels[spriteId]->_sprite->_cast) {
-		skipColor = ((TextCast *)_channels[spriteId]->_sprite->_cast)->getBackColor();
-	}
-
-	Common::Rect srcRect(sprite.w, sprite.h);
-
-	if (!_surface->clip(srcRect, drawRect))
-		return; // Out of screen
 
+	// HACK: A custom blitter is needed for the logical AND necessary here;
+	// surface class doesn't provide it.
 	for (int ii = 0; ii < drawRect.height(); ii++) {
-		const byte *src = (const byte *)sprite.getBasePtr(srcRect.left, srcRect.top + ii);
-		byte *dst = (byte *)_surface->getBasePtr(drawRect.left, drawRect.top + ii);
+		const byte *src = (const byte *)maskSurface->getBasePtr(maskOrigin.x, ii + maskOrigin.y);
+		byte *dst = (byte *)_maskSurface->getBasePtr(t.left + maskOrigin.x, t.top + maskOrigin.y + ii);
 
 		for (int j = 0; j < drawRect.width(); j++) {
-			if (*src != skipColor)
-				*dst = *src;
+			*dst &= *src;
 
 			src++;
 			dst++;
 		}
 	}
-}
 
-void Score::drawGhostSprite(const Graphics::Surface &sprite, Common::Rect &drawRect) {
-	Common::Rect srcRect(sprite.w, sprite.h);
-
-	if (!_surface->clip(srcRect, drawRect))
-		return; // Out of screen
+	// TODO: Merge these two into the switch logic that is below
+	if (ink == kInkTypeMatte) {
+		Common::Rect spriteRect(spriteSurface.w, spriteSurface.h);
+		drawMatteSprite(spriteSurface, t);
+		return;
+	} else if (ink == kInkTypeReverse) {
+		drawReverseSprite(spriteSurface, t, spriteId);
+		return;
+	} else if (ink == kInkTypeMask) {
+		// TODO: Implement masked drawing
+		warning("Score::inkBasedBlit(): Masked drawing not yet implemented");
+	}
 
-	uint8 skipColor = _vm->getPaletteColorCount() - 1;
 	for (int ii = 0; ii < drawRect.height(); ii++) {
-		const byte *src = (const byte *)sprite.getBasePtr(srcRect.left, srcRect.top + ii);
-		byte *dst = (byte *)_surface->getBasePtr(drawRect.left, drawRect.top + ii);
+		const byte *msk = (const byte *)maskSurface->getBasePtr(maskOrigin.x, maskOrigin.y + ii);
+		const byte *src = (const byte *)spriteSurface.getBasePtr(0 + maskOrigin.x, ii + maskOrigin.y);
+		byte *dst = (byte *)_surface->getBasePtr(t.left + maskOrigin.x, t.top + maskOrigin.y + ii);
 
 		for (int j = 0; j < drawRect.width(); j++) {
-			if ((getSpriteIDFromPos(Common::Point(drawRect.left + j, drawRect.top + ii)) != 0) && (*src != skipColor))
-				*dst = (_vm->getPaletteColorCount() - 1) - *src; // Oposite color
+			if (*msk != 0) {
+				_vm->_wm->decomposeColor(*src, rSrc, gSrc, bSrc);
+				_vm->_wm->decomposeColor(*dst, rDst, gDst, bDst);
+
+				switch (ink) {
+				case kInkTypeBackgndTrans:
+					if (*src == _channels[spriteId]->_sprite->_backColor)
+						break;
+					// fall through
+				case kInkTypeCopy:
+					*dst = *src;
+					break;
+				case kInkTypeTransparent:
+					// FIXME: Is colour to ignore always white (last entry in pallette)?
+					if (*src != numColors - 1)
+						*dst &= *src;
+					break;
+				case kInkTypeReverse:
+					if (*src != numColors - 1)
+						*dst ^= *src;
+					break;
+				case kInkTypeGhost:
+					if ((getSpriteIDFromPos(Common::Point(drawRect.left + j, drawRect.top + ii)) != 0) && *src != numColors - 1)
+						*dst = *dst | ~(*src);
+					break;
+				case kInkTypeNotCopy:
+					if (*src != numColors - 1)
+						*dst = ~(*src);
+					break;
+				case kInkTypeNotTrans:
+					if (*src != numColors - 1)
+						*dst = *dst & ~(*src);
+					break;
+				case kInkTypeNotReverse:
+					if (*src != numColors - 1)
+						*dst = *dst ^ *src;
+					break;
+				case kInkTypeNotGhost:
+					if (*src != numColors - 1)
+						*dst = *dst | *src;
+					break;
+				case kInkTypeMatte:
+					break;
+				case kInkTypeMask:
+					*dst = *src;
+					break;
+					// Arithmetic ink types
+				case kInkTypeBlend:
+					if (*src != numColors - 1)
+						*dst = _vm->_wm->findBestColor((rSrc + rDst) / 2, (gSrc + gDst) / 2, (bSrc + bDst) / 2);
+					break;
+				case kInkTypeAddPin:
+					if (*src != numColors - 1)
+						*dst = _vm->_wm->findBestColor(MIN((rSrc + rDst), numColors - 1), MIN((gSrc + gDst), numColors - 1), MIN((bSrc + bDst), numColors - 1));
+					break;
+				case kInkTypeAdd:
+					if (*src != numColors - 1)
+						*dst = _vm->_wm->findBestColor(abs(rSrc + rDst) % numColors, abs(gSrc + gDst) % numColors, abs(bSrc + bDst) % numColors);
+					break;
+				case kInkTypeSubPin:
+					if (*src != numColors - 1)
+						*dst = _vm->_wm->findBestColor(MAX(rSrc - rDst, 0), MAX(gSrc - gDst, 0), MAX(bSrc - bDst, 0));
+					break;
+				case kInkTypeLight:
+					if (*src != numColors - 1)
+						*dst = _vm->_wm->findBestColor(MAX(rSrc, rDst), MAX(gSrc, gDst), MAX(bSrc, bDst));
+					break;
+				case kInkTypeSub:
+					if (*src != numColors - 1)
+						*dst = _vm->_wm->findBestColor(abs(rSrc - rDst) % numColors, abs(gSrc - gDst) % numColors, abs(bSrc - bDst) % numColors);
+					break;
+				case kInkTypeDark:
+					if (*src != numColors - 1)
+						*dst = _vm->_wm->findBestColor(MIN(rSrc, rDst), MIN(gSrc, gDst), MIN(bSrc, bDst));
+					break;
+				}
+			}
 
 			src++;
 			dst++;
+			msk++;
 		}
 	}
 }
@@ -126,41 +165,45 @@ void Score::drawReverseSprite(const Graphics::Surface &sprite, Common::Rect &dra
 
 	uint8 skipColor = _vm->getPaletteColorCount() - 1;
 	for (int ii = 0; ii < drawRect.height(); ii++) {
+		const byte *msk = (const byte *)_maskSurface->getBasePtr(drawRect.left, drawRect.top + ii);
 		const byte *src = (const byte *)sprite.getBasePtr(srcRect.left, srcRect.top + ii);
 		byte *dst = (byte *)_surface->getBasePtr(drawRect.left, drawRect.top + ii);
 		byte srcColor = *src;
 
 		for (int j = 0; j < drawRect.width(); j++) {
-			if (!_channels[spriteId]->_sprite->_cast || _channels[spriteId]->_sprite->_cast->_type == kCastShape)
-				srcColor = 0x0;
-			else
-				srcColor = *src;
-			uint16 targetSprite = getSpriteIDFromPos(Common::Point(drawRect.left + j, drawRect.top + ii));
-			if ((targetSprite != 0)) {
-				// TODO: This entire reverse colour attempt needs a lot more testing on
-				// a lot more colour depths.
-				if (srcColor != skipColor) {
-					if (!_channels[targetSprite]->_sprite->_cast || _channels[targetSprite]->_sprite->_cast->_type != kCastBitmap) {
-						if (*dst == 0 || *dst == 255) {
-							*dst = _vm->transformColor(*dst);
-						} else if (srcColor == 255 || srcColor == 0) {
-							*dst = _vm->transformColor(*dst - 40);
-						} else {
-							*dst = _vm->transformColor(*src - 40);
-						}
-					} else {
-						if (*dst == 0 && _vm->getVersion() == 3 &&
-								_channels[spriteId]->_sprite->_cast->_type == kCastBitmap &&
-								((BitmapCast*)_channels[spriteId]->_sprite->_cast)->_bitsPerPixel > 1) {
-							*dst = _vm->transformColor(*src - 40);
+			if (*msk != 0) {
+				if (!_channels[spriteId]->_sprite->_cast || _channels[spriteId]->_sprite->_cast->_type == kCastShape)
+					srcColor = 0x0;
+				else
+					srcColor = *src;
+				uint16 targetSprite = getSpriteIDFromPos(Common::Point(drawRect.left + j, drawRect.top + ii));
+				if ((targetSprite != 0)) {
+					// TODO: This entire reverse colour attempt needs a lot more testing on
+					// a lot more colour depths.
+					if (srcColor != skipColor) {
+						if (!_channels[targetSprite]->_sprite->_cast || _channels[targetSprite]->_sprite->_cast->_type != kCastBitmap) {
+							if (*dst == 0 || *dst == 255) {
+								*dst = _vm->transformColor(*dst);
+							} else if (srcColor == 255 || srcColor == 0) {
+								*dst = _vm->transformColor(*dst - 40);
+							} else {
+								*dst = _vm->transformColor(*src - 40);
+							}
 						} else {
-							*dst ^= _vm->transformColor(srcColor);
+							if (*dst == 0 && _vm->getVersion() == 3 &&
+									_channels[spriteId]->_sprite->_cast->_type == kCastBitmap &&
+									((BitmapCast*)_channels[spriteId]->_sprite->_cast)->_bitsPerPixel > 1) {
+								*dst = _vm->transformColor(*src - 40);
+							} else {
+								*dst ^= _vm->transformColor(srcColor);
+							}
 						}
 					}
+				} else if (srcColor != skipColor) {
+					*dst = _vm->transformColor(srcColor);
 				}
-			} else if (srcColor != skipColor) {
-				*dst = _vm->transformColor(srcColor);
 			}
+			msk++;
 			src++;
 			dst++;
 		}
@@ -196,11 +239,13 @@ void Score::drawMatteSprite(const Graphics::Surface &sprite, Common::Rect &drawR
 		debugC(1, kDebugImages, "Score::drawMatteSprite(): No white color for Matte image");
 
 		for (int yy = 0; yy < drawRect.height(); yy++) {
+			const byte *msk = (const byte *)_maskSurface->getBasePtr(drawRect.left, drawRect.top + yy);
 			const byte *src = (const byte *)tmp.getBasePtr(srcRect.left, srcRect.top + yy);
 			byte *dst = (byte *)_surface->getBasePtr(drawRect.left, drawRect.top + yy);
 
-			for (int xx = 0; xx < drawRect.width(); xx++, src++, dst++)
-				*dst = *src;
+			for (int xx = 0; xx < drawRect.width(); xx++, src++, dst++, msk++)
+				if (*msk != 0)
+					*dst = *src;
 		}
 	} else {
 		Graphics::FloodFill ff(&tmp, whiteColor, 0, true);
diff --git a/engines/director/score.h b/engines/director/score.h
index 3a4030d314..1e28560fd7 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -155,9 +155,7 @@ private:
 
 	// ink.cpp
 	void inkBasedBlit(Graphics::ManagedSurface *maskSurface, const Graphics::Surface &spriteSurface, InkType ink, Common::Rect drawRect, uint spriteId);
-	void drawBackgndTransSprite(const Graphics::Surface &sprite, Common::Rect &drawRect, int spriteId);
 	void drawMatteSprite(const Graphics::Surface &sprite, Common::Rect &drawRect);
-	void drawGhostSprite(const Graphics::Surface &sprite, Common::Rect &drawRect);
 	void drawReverseSprite(const Graphics::Surface &sprite, Common::Rect &drawRect, uint16 spriteId);
 
 	// transitions.cpp


Commit: 4ff998b39a5395b44568f4b3e33963c2f462a2fa
    https://github.com/scummvm/scummvm/commit/4ff998b39a5395b44568f4b3e33963c2f462a2fa
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-06-23T12:50:58-04:00

Commit Message:
DIRECTOR: Remove shape transparency hack

It is no longer needed since there is logical AND blitting introduced in the
previous commit. Now the mask on shapes is obeyed.

Changed paths:
    engines/director/score.cpp


diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index dcd4ec8854..82676a9b93 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -722,11 +722,6 @@ void Score::renderShape(uint16 spriteId) {
 		}
 	}
 
-	// shapes should be rendered with transparency by default
-	if (ink == kInkTypeCopy) {
-		ink = kInkTypeTransparent;
-	}
-
 	// for outlined shapes, line thickness of 1 means invisible.
 	lineSize -= 1;
 
@@ -773,7 +768,6 @@ void Score::renderShape(uint16 spriteId) {
 		// fall through
 	case kOutlinedRectangleSprite:	// this is actually a mouse-over shape? I don't think it's a real button.
 		Graphics::drawRect(strokeRect, foreColor, Graphics::macDrawPixel, &plotStroke);
-		//tmpSurface.fillRect(Common::Rect(shapeRect.width(), shapeRect.height()), (_vm->getCurrentScore()->_currentMouseDownSpriteId == spriteId ? 0 : 0xff));
 		break;
 	case kRoundedRectangleSprite:
 		// fall through




More information about the Scummvm-git-logs mailing list