[Scummvm-git-logs] scummvm master -> f4d464dd2bdc546f5bacff721891574e9b2f2eee

sev- sev at scummvm.org
Wed Apr 1 16:27:37 UTC 2020


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
fd7fd933cb DIRECTOR: Fix boxy transitions
7157def629 DIRECTOR: Remove redundant check and fix spelling mistake in transitions code
f4d464dd2b DIRECTOR: Implemented strips transitions


Commit: fd7fd933cb39a8de617475228c7426a5b2d8ec56
    https://github.com/scummvm/scummvm/commit/fd7fd933cb39a8de617475228c7426a5b2d8ec56
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-04-01T18:27:19+02:00

Commit Message:
DIRECTOR: Fix boxy transitions

Changed paths:
    engines/director/transitions.cpp


diff --git a/engines/director/transitions.cpp b/engines/director/transitions.cpp
index 81de2f9971..954cfde5d6 100644
--- a/engines/director/transitions.cpp
+++ b/engines/director/transitions.cpp
@@ -528,16 +528,11 @@ static void dissolveTrans(TransParams &t, Score *score, Common::Rect &clipRect)
 		break;
 
 	case kTransDissolveBoxySquares:
-		if (w < h) {
-			t.xStepSize = t.chunkSize;
-			t.yStepSize = w / t.chunkSize;
-		} else {
-			t.xStepSize = h / t.chunkSize;
-			t.yStepSize = t.chunkSize;
-		}
+		t.xStepSize = w * t.chunkSize / h;
+		t.yStepSize = h * t.chunkSize / w;
 
-		w = (w + t.chunkSize - 1) / t.chunkSize;
-		h = (h + t.chunkSize - 1) / t.chunkSize;
+		w = (w + t.xStepSize - 1) / t.xStepSize;
+		h = (h + t.yStepSize - 1) / t.yStepSize;
 		break;
 
 	default:
@@ -583,6 +578,9 @@ static void dissolveTrans(TransParams &t, Score *score, Common::Rect &clipRect)
 			uint32 y = rnd & hMask;
 			byte mask = 0;
 
+			r.setWidth(MAX(1, t.xStepSize));
+			r.setHeight(t.yStepSize);
+
 			if (x < w && y < h) {
 				if (t.xStepSize >= 1) {
 					x = x * t.xStepSize;


Commit: 7157def62941cf5ea3f9b4f370cc502a6ee4308d
    https://github.com/scummvm/scummvm/commit/7157def62941cf5ea3f9b4f370cc502a6ee4308d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-04-01T18:27:19+02:00

Commit Message:
DIRECTOR: Remove redundant check and fix spelling mistake in transitions code

Changed paths:
    engines/director/transitions.cpp
    engines/director/types.h


diff --git a/engines/director/transitions.cpp b/engines/director/transitions.cpp
index 954cfde5d6..53a486d61b 100644
--- a/engines/director/transitions.cpp
+++ b/engines/director/transitions.cpp
@@ -99,7 +99,7 @@ struct {
 	TRANS(kTransCoverUp,				kTransAlgoCover,	kTransDirVertical),
 	TRANS(kTransCoverUpLeft,			kTransAlgoCover,	kTransDirBoth),			// 35
 	TRANS(kTransCoverUpRight,			kTransAlgoCover,	kTransDirBoth),
-	TRANS(kTransTypeVenitianBlind,		kTransAlgoBlinds,	kTransDirHorizontal),
+	TRANS(kTransTypeVenetianBlind,		kTransAlgoBlinds,	kTransDirHorizontal),
 	TRANS(kTransTypeCheckerboard,		kTransAlgoCheckerBoard, kTransDirBoth),
 	TRANS(kTransTypeStripsBottomBuildLeft, kTransAlgoBuildStrips, kTransDirBoth),
 	TRANS(kTransTypeStripsBottomBuildRight, kTransAlgoBuildStrips, kTransDirBoth),	// 40
@@ -591,7 +591,7 @@ static void dissolveTrans(TransParams &t, Score *score, Common::Rect &clipRect)
 						r.clip(clipRect);
 						score->_backSurface->copyRectToSurface(*score->_surface, x, y, r);
 					}
-				} else if (t.xStepSize < 1) {
+				} else {
 					mask = pixmask[x % -t.xStepSize];
 					x = x / -t.xStepSize;
 
diff --git a/engines/director/types.h b/engines/director/types.h
index 25e5cefd04..1a296bfa60 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -213,7 +213,7 @@ enum TransitionType {
 	kTransCoverUp,
 	kTransCoverUpLeft,			// 35
 	kTransCoverUpRight,
-	kTransTypeVenitianBlind,
+	kTransTypeVenetianBlind,
 	kTransTypeCheckerboard,
 	kTransTypeStripsBottomBuildLeft,
 	kTransTypeStripsBottomBuildRight,	// 40


Commit: f4d464dd2bdc546f5bacff721891574e9b2f2eee
    https://github.com/scummvm/scummvm/commit/f4d464dd2bdc546f5bacff721891574e9b2f2eee
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-04-01T18:27:19+02:00

Commit Message:
DIRECTOR: Implemented strips transitions

Changed paths:
    engines/director/transitions.cpp


diff --git a/engines/director/transitions.cpp b/engines/director/transitions.cpp
index 53a486d61b..d7154d15c1 100644
--- a/engines/director/transitions.cpp
+++ b/engines/director/transitions.cpp
@@ -51,7 +51,13 @@ enum TransitionDirection {
 	kTransDirNone,
 	kTransDirHorizontal,
 	kTransDirVertical,
-	kTransDirBoth
+	kTransDirBoth,
+	kTransDirStepsH,
+	kTransDirStepsV
+};
+
+enum {
+	kNumStrips = 16
 };
 
 #define TRANS(t,a,d) {t,#t,a,d}
@@ -101,14 +107,14 @@ struct {
 	TRANS(kTransCoverUpRight,			kTransAlgoCover,	kTransDirBoth),
 	TRANS(kTransTypeVenetianBlind,		kTransAlgoBlinds,	kTransDirHorizontal),
 	TRANS(kTransTypeCheckerboard,		kTransAlgoCheckerBoard, kTransDirBoth),
-	TRANS(kTransTypeStripsBottomBuildLeft, kTransAlgoBuildStrips, kTransDirBoth),
-	TRANS(kTransTypeStripsBottomBuildRight, kTransAlgoBuildStrips, kTransDirBoth),	// 40
-	TRANS(kTransTypeStripsLeftBuildDown, kTransAlgoBuildStrips, kTransDirBoth),
-	TRANS(kTransTypeStripsLeftBuildUp, kTransAlgoBuildStrips, kTransDirBoth),
-	TRANS(kTransTypeStripsRightBuildDown, kTransAlgoBuildStrips, kTransDirBoth),
-	TRANS(kTransTypeStripsRightBuildUp, kTransAlgoBuildStrips, kTransDirBoth),
-	TRANS(kTransTypeStripsTopBuildLeft,	kTransAlgoBuildStrips, kTransDirBoth),		// 45
-	TRANS(kTransTypeStripsTopBuildRight, kTransAlgoBuildStrips, kTransDirBoth),
+	TRANS(kTransTypeStripsBottomBuildLeft, kTransAlgoBuildStrips, kTransDirStepsV),
+	TRANS(kTransTypeStripsBottomBuildRight, kTransAlgoBuildStrips, kTransDirStepsV),// 40
+	TRANS(kTransTypeStripsLeftBuildDown, kTransAlgoBuildStrips, kTransDirStepsH),
+	TRANS(kTransTypeStripsLeftBuildUp, kTransAlgoBuildStrips, kTransDirStepsH),
+	TRANS(kTransTypeStripsRightBuildDown, kTransAlgoBuildStrips, kTransDirStepsH),
+	TRANS(kTransTypeStripsRightBuildUp, kTransAlgoBuildStrips, kTransDirStepsH),
+	TRANS(kTransTypeStripsTopBuildLeft,	kTransAlgoBuildStrips, kTransDirStepsV),	// 45
+	TRANS(kTransTypeStripsTopBuildRight, kTransAlgoBuildStrips, kTransDirStepsV),
 	TRANS(kTransZoomOpen,				kTransAlgoZoom,		kTransDirBoth),
 	TRANS(kTransZoomClose,				kTransAlgoZoom,		kTransDirBoth),
 	TRANS(kTransVerticalBinds,			kTransAlgoBlinds,	kTransDirBoth),
@@ -130,12 +136,15 @@ struct TransParams {
 
 	int xpos, ypos;
 
+	int stripSize;
+
 	TransParams() {
 		type = kTransNone;
 		duration = 250;
 		chunkSize = 1;
 		steps = 0;
 		stepDuration = 0;
+		stripSize = 0;
 
 		xStepSize = yStepSize = 0;
 		xpos = ypos = 0;
@@ -145,6 +154,7 @@ struct TransParams {
 static void initTransParams(TransParams &t, Score *score, Common::Rect &clipRect);
 static void dissolveTrans(TransParams &t, Score *score, Common::Rect &clipRect);
 static void dissolvePatternsTrans(TransParams &t, Score *score, Common::Rect &clipRect);
+static void transMultiPass(TransParams &t, Score *score, Common::Rect &clipRect);
 
 void Frame::playTransition(Score *score) {
 	TransParams t;
@@ -176,6 +186,10 @@ void Frame::playTransition(Score *score) {
 			dissolveTrans(t, score, clipRect);
 		return;
 
+	case kTransAlgoBuildStrips:
+		transMultiPass(t, score, clipRect);
+		return;
+
 	case kTransAlgoCenterOut:
 	case kTransAlgoCover:
 	case kTransAlgoWipe:
@@ -348,25 +362,10 @@ void Frame::playTransition(Score *score) {
 			break;
 
 		case kTransDissolvePixelsFast:						// 23
-			// Dissolve
-			break;
-
 		case kTransDissolveBoxyRects:						// 24
-			// Dissolve
-			break;
-
 		case kTransDissolveBoxySquares:						// 25
-			// Dissolve
-			break;
-
 		case kTransDissolvePatterns:						// 26
-			// Dissolve
-			break;
-
 		case kTransRandomRows:								// 27
-			// Dissolve
-			break;
-
 		case kTransRandomColumns:							// 28
 			// Dissolve
 			break;
@@ -404,20 +403,25 @@ void Frame::playTransition(Score *score) {
 			rto.moveTo(-w + t.xStepSize * i, h - t.yStepSize * i);
 			break;
 
-		case kTransDissolveBitsFast:						// 50
-			// Dissolve
+		case kTransTypeStripsBottomBuildLeft:				// 39
+		case kTransTypeStripsBottomBuildRight:				// 40
+		case kTransTypeStripsLeftBuildDown:					// 41
+		case kTransTypeStripsLeftBuildUp:					// 42
+		case kTransTypeStripsRightBuildDown:				// 43
+		case kTransTypeStripsRightBuildUp:					// 44
+		case kTransTypeStripsTopBuildLeft:					// 45
+		case kTransTypeStripsTopBuildRight:					// 46
+			// Multipass
 			break;
 
+		case kTransDissolveBitsFast:						// 50
 		case kTransDissolvePixels:							// 51
-			// Dissolve
-			break;
-
 		case kTransDissolveBits:							// 52
 			// Dissolve
 			break;
 
 		default:
-			warning("Frame::playTransition(): Unhandled transition type %s %d %d", transProps[t.type].name, t.duration, _transChunkSize);
+			warning("Frame::playTransition(): Unhandled transition type %s %d %d", transProps[t.type].name, t.duration, t.chunkSize);
 			stop = true;
 			break;
 		}
@@ -729,6 +733,147 @@ static void dissolvePatternsTrans(TransParams &t, Score *score, Common::Rect &cl
 	}
 }
 
+static void transMultiPass(TransParams &t, Score *score, Common::Rect &clipRect) {
+	Common::Rect rfrom, rto;
+	uint w = clipRect.width();
+	uint h = clipRect.height();
+
+	rfrom = clipRect;
+	rto = clipRect;
+
+	Common::Array<Common::Rect> rects;
+
+	for (uint16 i = 1; i < t.steps; i++) {
+		bool stop = false;
+		rto = clipRect;
+		rfrom = clipRect;
+
+		switch (t.type) {
+		case kTransTypeStripsBottomBuildLeft:				// 39
+			for (int r = 0; r < kNumStrips; r++) {
+				int len = t.yStepSize * i - (kNumStrips - r - 1) * t.stripSize;
+				if (len > 0) {
+					rto.setHeight(len);
+					rto.setWidth(t.xStepSize);
+					rto.moveTo(t.xStepSize * r, h - len);
+					rects.push_back(rto);
+				}
+			}
+			break;
+
+		case kTransTypeStripsBottomBuildRight:				// 40
+			for (int r = 0; r < kNumStrips; r++) {
+				int len = t.yStepSize * i - r * t.stripSize;
+				if (len > 0) {
+					rto.setHeight(len);
+					rto.setWidth(t.xStepSize);
+					rto.moveTo(t.xStepSize * r, h - len);
+					rects.push_back(rto);
+				}
+			}
+			break;
+
+		case kTransTypeStripsLeftBuildDown:					// 41
+			for (int r = 0; r < kNumStrips; r++) {
+				int len = t.xStepSize * i - r * t.stripSize;
+				if (len > 0) {
+					rto.setWidth(len);
+					rto.setHeight(t.yStepSize);
+					rto.moveTo(0, t.yStepSize * r);
+					rects.push_back(rto);
+				}
+			}
+			break;
+
+		case kTransTypeStripsLeftBuildUp:					// 42
+			for (int r = 0; r < kNumStrips; r++) {
+				int len = t.xStepSize * i - (kNumStrips - r - 1) * t.stripSize;
+				if (len > 0) {
+					rto.setWidth(len);
+					rto.setHeight(t.yStepSize);
+					rto.moveTo(0, t.yStepSize * r);
+					rects.push_back(rto);
+				}
+			}
+			break;
+
+		case kTransTypeStripsRightBuildDown:				// 43
+			for (int r = 0; r < kNumStrips; r++) {
+				int len = t.xStepSize * i - r * t.stripSize;
+				if (len > 0) {
+					rto.setWidth(len);
+					rto.setHeight(t.yStepSize);
+					rto.moveTo(w - len, t.yStepSize * r);
+					rects.push_back(rto);
+				}
+			}
+			break;
+
+		case kTransTypeStripsRightBuildUp:					// 44
+			for (int r = 0; r < kNumStrips; r++) {
+				int len = t.xStepSize * i - (kNumStrips - r - 1) * t.stripSize;
+				if (len > 0) {
+					rto.setWidth(len);
+					rto.setHeight(t.yStepSize);
+					rto.moveTo(w - len, t.yStepSize * r);
+					rects.push_back(rto);
+				}
+			}
+			break;
+
+		case kTransTypeStripsTopBuildLeft:					// 45
+			for (int r = 0; r < kNumStrips; r++) {
+				int len = t.yStepSize * i - (kNumStrips - r - 1) * t.stripSize;
+				if (len > 0) {
+					rto.setHeight(len);
+					rto.setWidth(t.xStepSize);
+					rto.moveTo(t.xStepSize * r, 0);
+					rects.push_back(rto);
+				}
+			}
+			break;
+
+		case kTransTypeStripsTopBuildRight:					// 46
+			for (int r = 0; r < kNumStrips; r++) {
+				int len = t.yStepSize * i - r * t.stripSize;
+				if (len > 0) {
+					rto.setHeight(len);
+					rto.setWidth(t.xStepSize);
+					rto.moveTo(t.xStepSize * r, 0);
+					rects.push_back(rto);
+				}
+			}
+			break;
+
+		default:
+			warning("Frame::playTransition(): Unhandled transition type %s %d %d", transProps[t.type].name, t.duration, t.chunkSize);
+			stop = true;
+			break;
+		}
+
+		if (stop)
+			break;
+
+		for (int r = 0; r < rects.size(); r++) {
+			rto = rects[r];
+			rto.clip(clipRect);
+
+			if (rto.height() > 0 && rto.width() > 0) {
+				score->_backSurface->blitFrom(*score->_surface, rto, Common::Point(rto.left, rto.top));
+				g_system->copyRectToScreen(score->_backSurface->getBasePtr(rto.left, rto.top), score->_backSurface->pitch, rto.left, rto.top, rto.width(), rto.height());
+			}
+		}
+		rects.clear();
+
+		g_system->updateScreen();
+
+		g_system->delayMillis(t.stepDuration);
+		if (processQuitEvent(true))
+			break;
+
+	}
+}
+
 static void initTransParams(TransParams &t, Score *score, Common::Rect &clipRect) {
 	int w = clipRect.width();
 	int h = clipRect.height();
@@ -762,6 +907,20 @@ static void initTransParams(TransParams &t, Score *score, Common::Rect &clipRect
 		t.ypos = h % t.steps;
 		break;
 
+	case kTransDirStepsH:
+		t.xStepSize = t.chunkSize;
+		t.yStepSize = (h + kNumStrips - 1) / kNumStrips;
+		t.stripSize = (w + kNumStrips - 1) / kNumStrips;
+		t.steps = ((w + t.xStepSize - 1) / t.xStepSize) * 2;
+		break;
+
+	case kTransDirStepsV:
+		t.xStepSize = (w + kNumStrips - 1) / kNumStrips;
+		t.yStepSize = t.chunkSize;
+		t.stripSize = (h + kNumStrips - 1) / kNumStrips;
+		t.steps = ((h + t.yStepSize - 1) / t.yStepSize) * 2;
+		break;
+
 	default:
 		t.steps = 1;
 	}




More information about the Scummvm-git-logs mailing list