aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/gob/inter.cpp25
-rw-r--r--engines/gob/inter.h4
-rw-r--r--engines/gob/inter_v1.cpp28
-rw-r--r--engines/gob/inter_v2.cpp29
4 files changed, 59 insertions, 27 deletions
diff --git a/engines/gob/inter.cpp b/engines/gob/inter.cpp
index 425b3e6df0..2fa2f79645 100644
--- a/engines/gob/inter.cpp
+++ b/engines/gob/inter.cpp
@@ -189,31 +189,6 @@ void Inter::funcBlock(int16 retFlag) {
return;
}
-void Inter::storeKey(int16 key) {
- WRITE_VAR(12, _vm->_util->getTimeKey() - _vm->_game->_startTimeKey);
-
- storeMouse();
- WRITE_VAR(1, _vm->_snd->_playingSound);
-
- if (key == 0x4800)
- key = 0x0b;
- else if (key == 0x5000)
- key = 0x0a;
- else if (key == 0x4d00)
- key = 0x09;
- else if (key == 0x4b00)
- key = 0x08;
- else if (key == 0x011b)
- key = 0x1b;
- else if ((key & 0xff) != 0)
- key &= 0xff;
-
- WRITE_VAR(0, key);
-
- if (key != 0)
- _vm->_util->waitKey();
-}
-
void Inter::checkSwitchTable(char **ppExec) {
int16 i;
int16 len;
diff --git a/engines/gob/inter.h b/engines/gob/inter.h
index 7a49045ac5..18f501c262 100644
--- a/engines/gob/inter.h
+++ b/engines/gob/inter.h
@@ -58,13 +58,13 @@ public:
char evalExpr(int16 *pRes);
char evalBoolResult(void);
void funcBlock(int16 retFlag);
- void storeKey(int16 key);
void checkSwitchTable(char **ppExec);
void callSub(int16 retFlag);
void initControlVars(char full);
void renewTimeInVars(void);
void manipulateMap(int16 xPos, int16 yPos, int16 item);
virtual int16 loadSound(int16 slot) = 0;
+ virtual void storeKey(int16 key) = 0;
virtual void storeMouse(void) = 0;
virtual void animPalette(void) = 0;
@@ -89,6 +89,7 @@ public:
Inter_v1(GobEngine *vm);
virtual ~Inter_v1() {};
virtual int16 loadSound(int16 slot);
+ virtual void storeKey(int16 key);
virtual void storeMouse(void);
virtual void animPalette(void);
@@ -281,6 +282,7 @@ public:
Inter_v2(GobEngine *vm);
virtual ~Inter_v2() {};
virtual int16 loadSound(int16 search);
+ virtual void storeKey(int16 key);
virtual void storeMouse(void);
virtual void animPalette(void);
diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp
index 9ab3f2a97e..a58c526512 100644
--- a/engines/gob/inter_v1.cpp
+++ b/engines/gob/inter_v1.cpp
@@ -1339,8 +1339,9 @@ bool Inter_v1::o1_keyFunc(char &cmdCount, int16 &counter, int16 &retFlag) {
animPalette();
_vm->_draw->blitInvalidated();
+ _vm->_video->waitRetrace(_vm->_global->_videoMode);
// Gob2 busy-waits here, so add a delay
- _vm->_util->longDelay(1);
+ _vm->_util->delay(1);
if (flag != 0) {
@@ -2797,6 +2798,31 @@ void Inter_v1::loadMult(void) {
}
}
+void Inter_v1::storeKey(int16 key) {
+ WRITE_VAR(12, _vm->_util->getTimeKey() - _vm->_game->_startTimeKey);
+
+ storeMouse();
+ WRITE_VAR(1, _vm->_snd->_playingSound);
+
+ if (key == 0x4800)
+ key = 0x0B;
+ else if (key == 0x5000)
+ key = 0x0A;
+ else if (key == 0x4D00)
+ key = 0x09;
+ else if (key == 0x4B00)
+ key = 0x08;
+ else if (key == 0x011B)
+ key = 0x1B;
+ else if ((key & 0xFF) != 0)
+ key &= 0xFF;
+
+ WRITE_VAR(0, key);
+
+ if (key != 0)
+ _vm->_util->waitKey();
+}
+
void Inter_v1::storeMouse(void) {
WRITE_VAR(2, _vm->_global->_inter_mouseX);
WRITE_VAR(3, _vm->_global->_inter_mouseY);
diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp
index 5a03aa7586..b070570911 100644
--- a/engines/gob/inter_v2.cpp
+++ b/engines/gob/inter_v2.cpp
@@ -2312,6 +2312,35 @@ void Inter_v2::o2_switchTotSub(void) {
_vm->_game->switchTotSub(index, skipPlay);
}
+void Inter_v2::storeKey(int16 key) {
+ WRITE_VAR(12, _vm->_util->getTimeKey() - _vm->_game->_startTimeKey);
+
+ storeMouse();
+ WRITE_VAR(1, _vm->_snd->_playingSound);
+
+ if (key == 0x4800)
+ key = 0x0B;
+ else if (key == 0x5000)
+ key = 0x0A;
+ else if (key == 0x4D00)
+ key = 0x09;
+ else if (key == 0x4B00)
+ key = 0x08;
+ else if (key == 0x011B)
+ key = 0x1B;
+ else if (key == 0x0E08)
+ key = 0x19;
+ else if (key == 0x5300)
+ key = 0x1A;
+ else if ((key & 0xFF) != 0)
+ key &= 0xFF;
+
+ WRITE_VAR(0, key);
+
+ if (key != 0)
+ _vm->_util->waitKey();
+}
+
void Inter_v2::storeMouse(void) {
int16 x;
int16 y;