[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