[Scummvm-git-logs] scummvm master -> 303ee2694f4e85d3d9796068e33d2d48ca100e8a

moralrecordings code at moral.net.au
Sat Jan 4 03:58:05 UTC 2020


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:
7e6c925a68 DIRECTOR: Fix kCastMemberSprite to fetch shape from cast
303ee2694f DIRECTOR: Inherit color, line size and pattern from shape cast


Commit: 7e6c925a683d185f81d1da8b9806270f56040ed2
    https://github.com/scummvm/scummvm/commit/7e6c925a683d185f81d1da8b9806270f56040ed2
Author: Scott Percival (code at moral.net.au)
Date: 2020-01-04T10:57:35+08:00

Commit Message:
DIRECTOR: Fix kCastMemberSprite to fetch shape from cast

Changed paths:
    engines/director/cast.cpp
    engines/director/frame.cpp
    engines/director/types.h


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 6e87c7a..dc1170b 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -282,6 +282,18 @@ ShapeCast::ShapeCast(Common::ReadStreamEndian &stream, uint16 version) {
 		_ink = static_cast<InkType>(_fillType & 0x3f);
 		_lineThickness = stream.readByte();
 		_lineDirection = stream.readByte();
+	} else if (version == 4) {
+		flags = 0;
+		unk1 = stream.readByte();
+		_shapeType = static_cast<ShapeType>(stream.readByte());
+		_initialRect = Score::readRect(stream);
+		_pattern = stream.readUint16BE();
+		_fgCol = (uint8)stream.readByte();
+		_bgCol = (uint8)stream.readByte();
+		_fillType = stream.readByte();
+		_ink = static_cast<InkType>(_fillType & 0x3f);
+		_lineThickness = stream.readByte();
+		_lineDirection = stream.readByte();
 	} else {
 		flags = stream.readByte();
 		unk1 = stream.readByte();
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 45c5f87..3de87f6 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -660,10 +660,34 @@ void Frame::addDrawRect(uint16 spriteId, Common::Rect &rect) {
 void Frame::renderShape(Graphics::ManagedSurface &surface, uint16 spriteId) {
 	Sprite *sp = _sprites[spriteId];
 
-	if (sp->_cast != NULL) {
-		sp->_foreColor = ((ShapeCast *)sp->_cast)->_fgCol;
-		sp->_backColor = ((ShapeCast *)sp->_cast)->_bgCol;
-		//sp->_ink = sp->_shapeCast->_ink;
+	byte spriteType = sp->_spriteType;
+	if (spriteType == kCastMemberSprite && sp->_cast != NULL) {
+		switch (sp->_cast->_type) {
+		case kCastShape:
+			{
+				ShapeCast *sc = (ShapeCast *)sp->_cast;
+				switch (sc->_shapeType) {
+				case kShapeRectangle:
+					spriteType = sc->_fillType ? kRectangleSprite : kOutlinedRectangleSprite;
+					break;
+				case kShapeRoundRect:
+					spriteType = sc->_fillType ? kRoundedRectangleSprite : kOutlinedRoundedRectangleSprite;
+					break;
+				case kShapeOval:
+					spriteType = sc->_fillType ? kOvalSprite : kOutlinedOvalSprite;
+					break;
+				case kShapeLine:
+					spriteType = sc->_lineDirection == 6 ? kLineTopBottomSprite : kLineBottomTopSprite;
+					break;
+				default:
+					break;
+				}
+			}
+			break;
+		default:
+			warning("Frame::renderShape(): Unhandled cast type: %d", sp->_cast->_type);
+			break;
+		}
 	}
 
 	Common::Rect shapeRect = Common::Rect(sp->_startPoint.x,
@@ -679,7 +703,7 @@ void Frame::renderShape(Graphics::ManagedSurface &surface, uint16 spriteId) {
 	Graphics::MacPlotData pd(&tmpSurface, &_vm->getPatterns(), sp->getPattern(), sp->_lineSize + 1, sp->_backColor);
 	Common::Rect fillRect(shapeRect.width(), shapeRect.height());
 
-	switch (sp->_spriteType) {
+	switch (spriteType) {
 	case kRectangleSprite:
 		Graphics::drawFilledRect(fillRect, sp->_foreColor, Graphics::macDrawPixel, &pd);
 		break;
@@ -706,7 +730,6 @@ void Frame::renderShape(Graphics::ManagedSurface &surface, uint16 spriteId) {
 		Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, sp->_foreColor, false, Graphics::macDrawPixel, &pd);
 		break;
 	case kCastMemberSprite: 		// Face kit D3
-		// FIXME. Check
 		Graphics::drawFilledRect(fillRect, sp->_foreColor, Graphics::macDrawPixel, &pd);
 		break;
 	default:
diff --git a/engines/director/types.h b/engines/director/types.h
index 0ed33550..d05cd3b 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -52,10 +52,10 @@ enum ScriptType {
 };
 
 enum ShapeType {
-	kShapeRectangle,
-	kShapeRoundRect,
-	kShapeOval,
-	kShapeLine
+	kShapeRectangle = 1,
+	kShapeRoundRect = 2,
+	kShapeOval = 3,
+	kShapeLine = 4
 };
 
 enum TextType {


Commit: 303ee2694f4e85d3d9796068e33d2d48ca100e8a
    https://github.com/scummvm/scummvm/commit/303ee2694f4e85d3d9796068e33d2d48ca100e8a
Author: Scott Percival (code at moral.net.au)
Date: 2020-01-04T11:57:05+08:00

Commit Message:
DIRECTOR: Inherit color, line size and pattern from shape cast

Changed paths:
    engines/director/frame.cpp
    engines/director/sprite.cpp


diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index 3de87f6..b73146a 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -661,6 +661,9 @@ void Frame::renderShape(Graphics::ManagedSurface &surface, uint16 spriteId) {
 	Sprite *sp = _sprites[spriteId];
 
 	byte spriteType = sp->_spriteType;
+	byte foreColor = sp->_foreColor;
+	byte backColor = sp->_backColor;
+	byte lineSize = sp->_lineSize + 1;
 	if (spriteType == kCastMemberSprite && sp->_cast != NULL) {
 		switch (sp->_cast->_type) {
 		case kCastShape:
@@ -677,11 +680,14 @@ void Frame::renderShape(Graphics::ManagedSurface &surface, uint16 spriteId) {
 					spriteType = sc->_fillType ? kOvalSprite : kOutlinedOvalSprite;
 					break;
 				case kShapeLine:
-					spriteType = sc->_lineDirection == 6 ? kLineTopBottomSprite : kLineBottomTopSprite;
+					spriteType = sc->_lineDirection == 6 ? kLineBottomTopSprite : kLineTopBottomSprite;
 					break;
 				default:
 					break;
 				}
+				foreColor = sc->_fgCol;
+				backColor = sc->_bgCol;
+				lineSize = sc->_lineThickness;
 			}
 			break;
 		default:
@@ -700,37 +706,37 @@ void Frame::renderShape(Graphics::ManagedSurface &surface, uint16 spriteId) {
 
 	// No minus one on the pattern here! MacPlotData will do that for us!
 	//Graphics::MacPlotData pd(&tmpSurface, &_vm->getPatterns(), 1, 1, sp->_backColor);
-	Graphics::MacPlotData pd(&tmpSurface, &_vm->getPatterns(), sp->getPattern(), sp->_lineSize + 1, sp->_backColor);
+	Graphics::MacPlotData pd(&tmpSurface, &_vm->getPatterns(), sp->getPattern(), lineSize, backColor);
 	Common::Rect fillRect(shapeRect.width(), shapeRect.height());
 
 	switch (spriteType) {
 	case kRectangleSprite:
-		Graphics::drawFilledRect(fillRect, sp->_foreColor, Graphics::macDrawPixel, &pd);
+		Graphics::drawFilledRect(fillRect, foreColor, Graphics::macDrawPixel, &pd);
 		break;
 	case kRoundedRectangleSprite:
-		Graphics::drawRoundRect(fillRect, 4, sp->_foreColor, true, Graphics::macDrawPixel, &pd);
+		Graphics::drawRoundRect(fillRect, 4, foreColor, true, Graphics::macDrawPixel, &pd);
 		break;
 	case kOvalSprite:
-		Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, sp->_foreColor, true, Graphics::macDrawPixel, &pd);
+		Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, foreColor, true, Graphics::macDrawPixel, &pd);
 		break;
 	case kLineTopBottomSprite:
-		Graphics::drawLine(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, sp->_foreColor, Graphics::macDrawPixel, &pd);
+		Graphics::drawLine(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, foreColor, Graphics::macDrawPixel, &pd);
 		break;
 	case kLineBottomTopSprite:
-		Graphics::drawLine(fillRect.left, fillRect.bottom, fillRect.right, fillRect.top, sp->_foreColor, Graphics::macDrawPixel, &pd);
+		Graphics::drawLine(fillRect.left, fillRect.bottom, fillRect.right, fillRect.top, foreColor, Graphics::macDrawPixel, &pd);
 		break;
 	case kOutlinedRectangleSprite:	// this is actually a mouse-over shape? I don't think it's a real button.
 		//Graphics::drawRect(fillRect, sp->_foreColor, Graphics::macDrawPixel, &pd);
 		tmpSurface.fillRect(Common::Rect(shapeRect.width(), shapeRect.height()), (_vm->getCurrentScore()->_currentMouseDownSpriteId == spriteId ? 0 : 0xff));
 		break;
 	case kOutlinedRoundedRectangleSprite:
-		Graphics::drawRoundRect(fillRect, 4, sp->_foreColor, false, Graphics::macDrawPixel, &pd);
+		Graphics::drawRoundRect(fillRect, 4, foreColor, false, Graphics::macDrawPixel, &pd);
 		break;
 	case kOutlinedOvalSprite:
-		Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, sp->_foreColor, false, Graphics::macDrawPixel, &pd);
+		Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, foreColor, false, Graphics::macDrawPixel, &pd);
 		break;
 	case kCastMemberSprite: 		// Face kit D3
-		Graphics::drawFilledRect(fillRect, sp->_foreColor, Graphics::macDrawPixel, &pd);
+		Graphics::drawFilledRect(fillRect, foreColor, Graphics::macDrawPixel, &pd);
 		break;
 	default:
 		warning("Frame::renderShape(): Unhandled sprite type: %d", sp->_spriteType);
diff --git a/engines/director/sprite.cpp b/engines/director/sprite.cpp
index 3fd5b6a..d9f8291 100644
--- a/engines/director/sprite.cpp
+++ b/engines/director/sprite.cpp
@@ -121,9 +121,14 @@ uint16 Sprite::getPattern() {
 		return _castId;
 
 	case kCastMemberSprite:
-		// TODO. Check type being shape, and return its pattern
-		warning("Sprite::getPattern(): kCastMemberSprite");
-		return 0;
+		switch (_cast->_type) {
+		case kCastShape:
+			return ((ShapeCast *)_cast)->_pattern;
+			break;
+		default:
+			warning("Sprite::getPattern(): Unhandled cast type: %d", _cast->_type);
+			break;
+		}
 
 	default:
 		return 0;




More information about the Scummvm-git-logs mailing list