mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-25 19:25:20 +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;
|
neededSleep = 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s->_throttleTrigger) {
|
s->speedThrottler(neededSleep);
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,6 +111,21 @@ void EngineState::reset(bool isRestoring) {
|
|||||||
scriptGCInterval = GC_INTERVAL;
|
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) {
|
void EngineState::wait(int16 ticks) {
|
||||||
uint32 time = g_system->getMillis();
|
uint32 time = g_system->getMillis();
|
||||||
r_acc = make_reg(0, ((long)time - (long)lastWaitTime) * 60 / 1000);
|
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 lastWaitTime; /**< The last time the game invoked Wait() */
|
||||||
uint32 _screenUpdateTime; /**< The last time the game updated the screen */
|
uint32 _screenUpdateTime; /**< The last time the game updated the screen */
|
||||||
|
|
||||||
|
void speedThrottler(uint32 neededSleep);
|
||||||
void wait(int16 ticks);
|
void wait(int16 ticks);
|
||||||
|
|
||||||
uint32 _throttleCounter; /**< total times kAnimate was invoked */
|
uint32 _throttleCounter; /**< total times kAnimate was invoked */
|
||||||
|
@ -857,8 +857,7 @@ static void callKernelFunc(EngineState *s, int kernelCallNr, int argc) {
|
|||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// Used for debugging
|
// Used for debugging
|
||||||
Common::String debugMsg = kernelFunc.origName +
|
Common::String debugMsg = Common::String::printf("%s [0x%x]", kernelCall.name, kernelCallNr) +
|
||||||
Common::String::printf("[0x%x]", kernelFuncNr) +
|
|
||||||
Common::String::printf(", %d params: ", argc) +
|
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);
|
memset(&_sysPalette.intensity[0] + fromColor, intensity, toColor - fromColor);
|
||||||
if (setPalette) {
|
if (setPalette) {
|
||||||
setOnScreen();
|
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