aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMartin Kiewitz2009-12-04 14:32:32 +0000
committerMartin Kiewitz2009-12-04 14:32:32 +0000
commit055c8b087b383eeb556e9f0db03f9da8a7ad2a91 (patch)
treedcae87b409564ba714b48f7c4191fbf1f6eb5c3c /engines
parentabbf2bf16214eddf1394e62ae052d8505cba4d3b (diff)
downloadscummvm-rg350-055c8b087b383eeb556e9f0db03f9da8a7ad2a91.tar.gz
scummvm-rg350-055c8b087b383eeb556e9f0db03f9da8a7ad2a91.tar.bz2
scummvm-rg350-055c8b087b383eeb556e9f0db03f9da8a7ad2a91.zip
SCI: Alt translation. Currently handles Ctrl-X as Ctrl-Alt-X so that bypassing questions in lsl1vga is possible. ScummVM currently doesn't give us event for Ctrl-Alt-X
svn-id: r46251
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/kevent.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/engines/sci/engine/kevent.cpp b/engines/sci/engine/kevent.cpp
index 8af8bea54c..133e6dc3e5 100644
--- a/engines/sci/engine/kevent.cpp
+++ b/engines/sci/engine/kevent.cpp
@@ -86,8 +86,42 @@ reg_t kGetEvent(EngineState *s, int argc, reg_t *argv) {
PUT_SEL32V(segMan, obj, type, SCI_EVT_KEYBOARD); // Keyboard event
s->r_acc = make_reg(0, 1);
- if (e.buckybits == SCI_EVM_CTRL) {
- // If Control is pressed, we need to convert the actual key to a DOS scancode
+ // TODO: Remove this as soon as ScummVM handles Ctrl-Alt-X to us
+ if ((e.buckybits == SCI_EVM_CTRL) && (e.character = 'x'))
+ e.buckybits |= SCI_EVM_ALT;
+
+ if (e.buckybits & SCI_EVM_ALT) {
+ // If Alt is pressed, we need to convert the actual key to a DOS scancode
+ switch (e.character) {
+ case 'a': e.character = 30 << 8; break;
+ case 'b': e.character = 48 << 8; break;
+ case 'c': e.character = 46 << 8; break;
+ case 'd': e.character = 32 << 8; break;
+ case 'e': e.character = 18 << 8; break;
+ case 'f': e.character = 33 << 8; break;
+ case 'g': e.character = 34 << 8; break;
+ case 'h': e.character = 35 << 8; break;
+ case 'i': e.character = 33 << 8; break;
+ case 'j': e.character = 23 << 8; break;
+ case 'k': e.character = 37 << 8; break;
+ case 'l': e.character = 38 << 8; break;
+ case 'm': e.character = 50 << 8; break;
+ case 'n': e.character = 49 << 8; break;
+ case 'o': e.character = 24 << 8; break;
+ case 'p': e.character = 25 << 8; break;
+ case 'q': e.character = 16 << 8; break;
+ case 'r': e.character = 19 << 8; break;
+ case 's': e.character = 31 << 8; break;
+ case 't': e.character = 20 << 8; break;
+ case 'u': e.character = 22 << 8; break;
+ case 'v': e.character = 47 << 8; break;
+ case 'w': e.character = 17 << 8; break;
+ case 'x': e.character = 45 << 8; break;
+ case 'y': e.character = 21 << 8; break;
+ case 'z': e.character = 44 << 8; break;
+ }
+ } else if (e.buckybits & SCI_EVM_CTRL) {
+ // Control is pressed...
if ((e.character >= 97) && (e.character <= 121)) {
e.character -= 96; // 'a' -> 0x01, etc.
}