diff options
-rw-r--r-- | engines/gob/global.cpp | 2 | ||||
-rw-r--r-- | engines/gob/global.h | 3 | ||||
-rw-r--r-- | engines/gob/util.cpp | 20 | ||||
-rw-r--r-- | engines/gob/util.h | 2 |
4 files changed, 22 insertions, 5 deletions
diff --git a/engines/gob/global.cpp b/engines/gob/global.cpp index 73e08112e8..82903ee5f8 100644 --- a/engines/gob/global.cpp +++ b/engines/gob/global.cpp @@ -125,6 +125,8 @@ Global::Global(GobEngine *vm) : _vm(vm) { _inter_mouseX = 0; _inter_mouseY = 0; + + _speedFactor = 1; } Global::~Global() { diff --git a/engines/gob/global.h b/engines/gob/global.h index 68defd41e8..089fcbadac 100644 --- a/engines/gob/global.h +++ b/engines/gob/global.h @@ -125,6 +125,9 @@ public: int16 _inter_mouseX; int16 _inter_mouseY; + // Can be 1, 2 or 3 for normal, double and triple speed, respectively + uint8 _speedFactor; + void clearVars(uint32 count) { uint32 size = count * 4; diff --git a/engines/gob/util.cpp b/engines/gob/util.cpp index 550d5e9a21..e2ef60d5e2 100644 --- a/engines/gob/util.cpp +++ b/engines/gob/util.cpp @@ -42,10 +42,11 @@ Util::Util(GobEngine *vm) : _vm(vm) { _keyBuffer[i] = 0; _keyBufferHead = 0; _keyBufferTail = 0; + _fastMode = 0; } uint32 Util::getTimeKey(void) { - return g_system->getMillis(); + return g_system->getMillis() * _vm->_global->_speedFactor; } int16 Util::getRandom(int16 max) { @@ -60,16 +61,17 @@ void Util::beep(int16 freq) { } void Util::delay(uint16 msecs) { - g_system->delayMillis(msecs); + g_system->delayMillis(msecs / _vm->_global->_speedFactor); } void Util::longDelay(uint16 msecs) { - uint32 time = g_system->getMillis() + msecs; + uint32 time = g_system->getMillis() * _vm->_global->_speedFactor + msecs; do { _vm->_video->waitRetrace(); processInput(); delay(15); - } while (!_vm->_quitRequested && (g_system->getMillis() < time)); + } while (!_vm->_quitRequested && + ((g_system->getMillis() * _vm->_global->_speedFactor) < time)); } void Util::initInput(void) { @@ -103,6 +105,13 @@ void Util::processInput(bool scroll) { _mouseButtons &= ~2; break; case Common::EVENT_KEYDOWN: + if (event.kbd.flags == Common::KBD_CTRL) { + if (event.kbd.keycode == 'f') + _fastMode ^= 1; + else if (event.kbd.keycode == 'g') + _fastMode ^= 2; + break; + } addKeyToBuffer(event.kbd.keycode); break; case Common::EVENT_KEYUP: @@ -115,6 +124,7 @@ void Util::processInput(bool scroll) { } } + _vm->_global->_speedFactor = MIN(_fastMode + 1, 3); if (scroll && hasMove) _vm->_game->evaluateScroll(x, y); } @@ -190,7 +200,7 @@ int16 Util::getKey(void) { processInput(); if (keyBufferEmpty()) - g_system->delayMillis(10); + g_system->delayMillis(10 / _vm->_global->_speedFactor); } return translateKey(key); } diff --git a/engines/gob/util.h b/engines/gob/util.h index d476afd69c..ca9042598c 100644 --- a/engines/gob/util.h +++ b/engines/gob/util.h @@ -91,6 +91,8 @@ protected: int16 _keyBufferHead; int16 _keyBufferTail; + uint8 _fastMode; + GobEngine *_vm; bool keyBufferEmpty(); |