aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Kiewitz2010-07-10 22:27:28 +0000
committerMartin Kiewitz2010-07-10 22:27:28 +0000
commitdf6ead5f93758aa9871594fc3872930eaf9c9d60 (patch)
tree1726168090f06594fd81eb43c5bfc0755f404cc2
parent5721b75205acd15053430f24e92b8f170478ced0 (diff)
downloadscummvm-rg350-df6ead5f93758aa9871594fc3872930eaf9c9d60.tar.gz
scummvm-rg350-df6ead5f93758aa9871594fc3872930eaf9c9d60.tar.bz2
scummvm-rg350-df6ead5f93758aa9871594fc3872930eaf9c9d60.zip
SCI: calling speed throttler as well from kPalette(setIntensity) if needed - fixes kq6 intro
svn-id: r50794
-rw-r--r--engines/sci/engine/kmisc.cpp23
-rw-r--r--engines/sci/engine/state.cpp15
-rw-r--r--engines/sci/engine/state.h1
-rw-r--r--engines/sci/engine/vm.cpp3
-rw-r--r--engines/sci/graphics/palette.cpp6
5 files changed, 23 insertions, 25 deletions
diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp
index 3d206d0358..1ed12c092e 100644
--- a/engines/sci/engine/kmisc.cpp
+++ b/engines/sci/engine/kmisc.cpp
@@ -67,28 +67,7 @@ reg_t kGameIsRestarting(EngineState *s, int argc, reg_t *argv) {
neededSleep = 60;
}
- if (s->_throttleTrigger) {
- // Some games seem to get the duration of main loop initially and then
- // switch of animations for the whole game based on that (qfg2, iceman).
- // We are now running full speed initially to avoid that.
- // It seems like we dont need to do that anymore
- //if (s->_throttleCounter < 50) {
- // s->_throttleCounter++;
- // return s->r_acc;
- //}
-
- uint32 curTime = g_system->getMillis();
- uint32 duration = curTime - s->_throttleLastTime;
-
- if (duration < neededSleep) {
- g_sci->sleep(neededSleep - duration);
- s->_throttleLastTime = g_system->getMillis();
- } else {
- s->_throttleLastTime = curTime;
- }
- s->_throttleTrigger = false;
- }
-
+ s->speedThrottler(neededSleep);
return s->r_acc;
}
diff --git a/engines/sci/engine/state.cpp b/engines/sci/engine/state.cpp
index 6f54a3c199..245a021605 100644
--- a/engines/sci/engine/state.cpp
+++ b/engines/sci/engine/state.cpp
@@ -111,6 +111,21 @@ void EngineState::reset(bool isRestoring) {
scriptGCInterval = GC_INTERVAL;
}
+void EngineState::speedThrottler(uint32 neededSleep) {
+ if (_throttleTrigger) {
+ uint32 curTime = g_system->getMillis();
+ uint32 duration = curTime - _throttleLastTime;
+
+ if (duration < neededSleep) {
+ g_sci->sleep(neededSleep - duration);
+ _throttleLastTime = g_system->getMillis();
+ } else {
+ _throttleLastTime = curTime;
+ }
+ _throttleTrigger = false;
+ }
+}
+
void EngineState::wait(int16 ticks) {
uint32 time = g_system->getMillis();
r_acc = make_reg(0, ((long)time - (long)lastWaitTime) * 60 / 1000);
diff --git a/engines/sci/engine/state.h b/engines/sci/engine/state.h
index 885c8a871c..e304c6d889 100644
--- a/engines/sci/engine/state.h
+++ b/engines/sci/engine/state.h
@@ -106,6 +106,7 @@ public:
uint32 lastWaitTime; /**< The last time the game invoked Wait() */
uint32 _screenUpdateTime; /**< The last time the game updated the screen */
+ void speedThrottler(uint32 neededSleep);
void wait(int16 ticks);
uint32 _throttleCounter; /**< total times kAnimate was invoked */
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index b265170cad..0dd82621fe 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -857,8 +857,7 @@ static void callKernelFunc(EngineState *s, int kernelCallNr, int argc) {
#if 0
// Used for debugging
- Common::String debugMsg = kernelFunc.origName +
- Common::String::printf("[0x%x]", kernelFuncNr) +
+ Common::String debugMsg = Common::String::printf("%s [0x%x]", kernelCall.name, kernelCallNr) +
Common::String::printf(", %d params: ", argc) +
" (";
diff --git a/engines/sci/graphics/palette.cpp b/engines/sci/graphics/palette.cpp
index b85281e9c4..7e9dc0ed31 100644
--- a/engines/sci/graphics/palette.cpp
+++ b/engines/sci/graphics/palette.cpp
@@ -411,7 +411,11 @@ void GfxPalette::kernelSetIntensity(uint16 fromColor, uint16 toColor, uint16 int
memset(&_sysPalette.intensity[0] + fromColor, intensity, toColor - fromColor);
if (setPalette) {
setOnScreen();
- g_sci->getEngineState()->_throttleTrigger = true;
+ EngineState *state = g_sci->getEngineState();
+ // Call speed throttler from here as well just in case we need it
+ // At least in kq6 intro the scripts call us in a tight loop for fadein/fadeout
+ state->speedThrottler(30);
+ state->_throttleTrigger = true;
}
}