From a7e51b8276df7123c6471c1bf212729e181b4642 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Wed, 14 Oct 2009 21:45:16 +0000 Subject: SCI: kAnimate now delays a bit if needed (fixes typing in intro of lsl5, kq6 sierra logo and much more) svn-id: r45093 --- engines/sci/engine/kgraphics.cpp | 10 ++++++++++ engines/sci/engine/state.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 22492d1718..8d26eda207 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -933,6 +933,16 @@ reg_t kAnimate(EngineState *s, int argc, reg_t *argv) { process_sound_events(s); s->_gui->animate(castListReference, cycle, argc, argv); + + // Do some speed throttling to calm down games that rely on counting cycles + uint32 curTime = g_system->getMillis(); + uint32 duration = curTime - s->_lastAnimateTime; + + if (duration < 50) { + g_system->delayMillis(50-duration); + } + s->_lastAnimateTime = curTime; + return s->r_acc; } diff --git a/engines/sci/engine/state.h b/engines/sci/engine/state.h index bcf7c8309a..6b0aeb6028 100644 --- a/engines/sci/engine/state.h +++ b/engines/sci/engine/state.h @@ -218,6 +218,8 @@ 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 _lastAnimateTime; /**< last time kAnimate was invoked */ + /* Kernel File IO stuff */ Common::Array _fileHandles; /**< Array of file handles. Dynamically increased if required. */ -- cgit v1.2.3