aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorSven Hesse2007-04-13 19:55:09 +0000
committerSven Hesse2007-04-13 19:55:09 +0000
commite5de883ccf1b39ba431fbd73fa6308e15146837b (patch)
tree1be676c9b3ec962177694160ee1fd0f0282c0f94 /engines
parent6895085dff9dbcaf9593cb4ca931781920fcd9b3 (diff)
downloadscummvm-rg350-e5de883ccf1b39ba431fbd73fa6308e15146837b.tar.gz
scummvm-rg350-e5de883ccf1b39ba431fbd73fa6308e15146837b.tar.bz2
scummvm-rg350-e5de883ccf1b39ba431fbd73fa6308e15146837b.zip
Implemented fast modes: CTRL-f for double and CTRL-g for triple speed
Though I think it shouldn't break anything, use it at your own risk svn-id: r26461
Diffstat (limited to 'engines')
-rw-r--r--engines/gob/global.cpp2
-rw-r--r--engines/gob/global.h3
-rw-r--r--engines/gob/util.cpp20
-rw-r--r--engines/gob/util.h2
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();