mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-25 11:15:00 +00:00
SCI: calling speed throttler as well from kPalette(setIntensity) if needed - fixes kq6 intro
svn-id: r50794
This commit is contained in:
parent
5721b75205
commit
df6ead5f93
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
@ -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) +
|
||||
" (";
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user