aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/engine/script_patches.cpp2
-rw-r--r--engines/sci/graphics/transitions32.cpp20
-rw-r--r--engines/sci/graphics/transitions32.h19
3 files changed, 20 insertions, 21 deletions
diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp
index dbc351d8f2..dcefa219f7 100644
--- a/engines/sci/engine/script_patches.cpp
+++ b/engines/sci/engine/script_patches.cpp
@@ -4601,7 +4601,7 @@ static const uint16 sq6SlowTransitionSignature1[] = {
};
static const uint16 sq6SlowTransitionPatch1[] = {
- 0x38, SIG_UINT16(180), // pushi 180
+ 0x38, SIG_UINT16(500), // pushi 500
PATCH_END
};
diff --git a/engines/sci/graphics/transitions32.cpp b/engines/sci/graphics/transitions32.cpp
index bad0185179..a1ae352b6c 100644
--- a/engines/sci/graphics/transitions32.cpp
+++ b/engines/sci/graphics/transitions32.cpp
@@ -41,8 +41,7 @@ static int16 divisionsDefaults[2][16] = {
};
GfxTransitions32::GfxTransitions32(SegManager *segMan) :
- _segMan(segMan),
- _throttleState(0) {
+ _segMan(segMan) {
for (int i = 0; i < 236; i += 2) {
_styleRanges[i] = 0;
_styleRanges[i + 1] = -1;
@@ -67,17 +66,8 @@ GfxTransitions32::~GfxTransitions32() {
_scrolls.clear();
}
-void GfxTransitions32::throttle() {
- uint8 throttleTime;
- if (_throttleState == 2) {
- throttleTime = 34;
- _throttleState = 0;
- } else {
- throttleTime = 33;
- ++_throttleState;
- }
-
- g_sci->getEngineState()->speedThrottler(throttleTime);
+void GfxTransitions32::throttle(const uint32 ms) {
+ g_sci->getEngineState()->speedThrottler(ms);
g_sci->getEngineState()->_throttleTrigger = true;
}
@@ -936,7 +926,7 @@ void GfxTransitions32::processScrolls() {
}
}
- throttle();
+ throttle(33);
}
void GfxTransitions32::kernelSetScroll(const reg_t planeId, const int16 deltaX, const int16 deltaY, const GuiResourceId pictureId, const bool animate, const bool mirrorX) {
@@ -1005,7 +995,7 @@ void GfxTransitions32::kernelSetScroll(const reg_t planeId, const int16 deltaX,
while (!finished && !g_engine->shouldQuit()) {
finished = processScroll(*scroll);
g_sci->_gfxFrameout->frameOut(true);
- throttle();
+ throttle(33);
}
}
diff --git a/engines/sci/graphics/transitions32.h b/engines/sci/graphics/transitions32.h
index 12e0d64ec7..0c828a20f7 100644
--- a/engines/sci/graphics/transitions32.h
+++ b/engines/sci/graphics/transitions32.h
@@ -239,11 +239,20 @@ private:
SegManager *_segMan;
/**
- * Throttles transition playback to prevent transitions from being instant
- * on fast computers.
- */
- void throttle();
- int8 _throttleState;
+ * Throttles transition playback to prevent transitions from being
+ * instantaneous on modern computers.
+ *
+ * kSetShowStyle transitions are throttled at 10ms intervals, under the
+ * assumption that the default fade transition of 101 divisions was designed
+ * to finish in one second. Empirically, this seems to roughly match the
+ * speed of DOSBox, and feels reasonable.
+ *
+ * Transitions using kSetScroll (used in the LSL6hires intro) need to be
+ * slower, so they get throttled at 33ms instead of 10ms. This value was
+ * chosen by gut feel, as these scrolling transitions are instantaneous in
+ * DOSBox.
+ */
+ void throttle(const uint32 ms = 10);
void clearShowRects();
void addShowRect(const Common::Rect &rect);