SCI: kAnimate now delays the first few calls less, otherwise sq3 will remove details graphicwise. Walter please check, if this creates a regression with lsl3.

svn-id: r45173
This commit is contained in:
Martin Kiewitz 2009-10-16 18:46:18 +00:00
parent 620fa7c641
commit 2ada85b6cc
3 changed files with 12 additions and 2 deletions

View File

@ -941,9 +941,17 @@ reg_t kAnimate(EngineState *s, int argc, reg_t *argv) {
// Do some speed throttling to calm down games that rely on counting cycles
uint32 curTime = g_system->getMillis();
uint32 duration = curTime - s->_lastAnimateTime;
uint32 neededSleep = 40;
if (duration < 40) {
gfxop_sleep(s->gfx_state, 40-duration);
// We are doing this, so that games like sq3 dont think we are running too slow and will remove details (like
// animated sierra logo at the beginning). Hopefully this wont cause regressions with pullups in lsl3 (FIXME?)
if (s->_lastAnimateCounter < 10) {
s->_lastAnimateCounter++;
neededSleep = 8;
}
if (duration < neededSleep) {
gfxop_sleep(s->gfx_state, neededSleep - duration);
s->_lastAnimateTime = g_system->getMillis();
} else {
s->_lastAnimateTime = curTime;

View File

@ -106,6 +106,7 @@ EngineState::EngineState(ResourceManager *res, Kernel *kernel, Vocabulary *voc,
successor = 0;
_lastAnimateCounter = 0;
_lastAnimateTime = 0;
_setCursorType = SCI_VERSION_AUTODETECT;

View File

@ -178,6 +178,7 @@ public:
uint32 game_start_time; /**< The time at which the interpreter was started */
uint32 last_wait_time; /**< The last time the game invoked Wait() */
uint32 _lastAnimateCounter; /**< total times kAnimate was invoked */
uint32 _lastAnimateTime; /**< last time kAnimate was invoked */
/* Kernel File IO stuff */