diff options
author | Martin Kiewitz | 2010-07-10 22:27:28 +0000 |
---|---|---|
committer | Martin Kiewitz | 2010-07-10 22:27:28 +0000 |
commit | df6ead5f93758aa9871594fc3872930eaf9c9d60 (patch) | |
tree | 1726168090f06594fd81eb43c5bfc0755f404cc2 | |
parent | 5721b75205acd15053430f24e92b8f170478ced0 (diff) | |
download | scummvm-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.cpp | 23 | ||||
-rw-r--r-- | engines/sci/engine/state.cpp | 15 | ||||
-rw-r--r-- | engines/sci/engine/state.h | 1 | ||||
-rw-r--r-- | engines/sci/engine/vm.cpp | 3 | ||||
-rw-r--r-- | engines/sci/graphics/palette.cpp | 6 |
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; } } |