diff --git a/src/input/keyboard.c b/src/input/keyboard.c index cfca287..a26d60f 100644 --- a/src/input/keyboard.c +++ b/src/input/keyboard.c @@ -188,13 +188,12 @@ bool keyboard_handle_set1_scancode(uint8_t scancode, keyboard_event_t *ev) { ev->pressed = pressed; ev->mods = keyboard_get_modifiers(); - keymap_result_t r = keymap_translate_keycode(keycode, ev->mods); - ev->codepoint = r.codepoint; - if (!pressed) { return true; } + keymap_result_t r = keymap_translate_keycode(keycode, ev->mods); + if (r.is_dead) { g_kb.dead_key = r.codepoint; return true; diff --git a/src/input/keymap.c b/src/input/keymap.c index 66a0b29..505c946 100644 --- a/src/input/keymap.c +++ b/src/input/keymap.c @@ -434,18 +434,16 @@ int keymap_legacy_key(uint16_t keycode, uint32_t codepoint) { case KEY_ENTER: case KEY_KP_ENTER: return '\n'; - case KEY_SPACE: return ' '; - case KEY_ARROW_UP: return 17; case KEY_ARROW_DOWN: return 18; case KEY_ARROW_LEFT: return 19; case KEY_ARROW_RIGHT: return 20; case KEY_LEFT_CTRL: - case KEY_RIGHT_CTRL: return 161; + case KEY_RIGHT_CTRL: return 21; case KEY_LEFT_SHIFT: - case KEY_RIGHT_SHIFT: return 162; - case KEY_LEFT_ALT: return 163; + case KEY_RIGHT_SHIFT: return 24; + case KEY_LEFT_ALT: return 25; case KEY_RIGHT_ALT: return 22; // for compat w/ doom case KEY_CAPS_LOCK: return 23; // same here case KEY_DELETE: return 127; diff --git a/src/userland/games/doom/doomgeneric_boredos.c b/src/userland/games/doom/doomgeneric_boredos.c index 8d201f7..4bec455 100644 --- a/src/userland/games/doom/doomgeneric_boredos.c +++ b/src/userland/games/doom/doomgeneric_boredos.c @@ -89,15 +89,16 @@ int DG_GetKey(int* pressed, unsigned char* key) { } else if (ev.type == GUI_EVENT_KEY || ev.type == GUI_EVENT_KEYUP) { unsigned char k = (unsigned char)ev.arg1; unsigned char dk = k; - if (k == 17) dk = KEY_UPARROW; + if (ev.arg2 == 57) dk = 32; + else if (k == 17) dk = KEY_UPARROW; else if (k == 18) dk = KEY_DOWNARROW; else if (k == 19) dk = KEY_LEFTARROW; else if (k == 20) dk = KEY_RIGHTARROW; - else if (k == 161) dk = KEY_FIRE; + else if (k == 21) dk = KEY_FIRE; else if (k == 22) dk = KEY_RALT; else if (k == 23) dk = KEY_CAPSLOCK; - else if (k == 162) dk = KEY_RSHIFT; - else if (k == 163) dk = KEY_LALT; + else if (k == 24) dk = KEY_RSHIFT; + else if (k == 25) dk = KEY_LALT; else if (k == 27) dk = KEY_ESCAPE; else if (k == '\b') dk = KEY_BACKSPACE; else if (k == '\t') dk = KEY_TAB; @@ -105,7 +106,6 @@ int DG_GetKey(int* pressed, unsigned char* key) { else if (k >= 141 && k <= 150) dk = KEY_F1 + (k - 141); else if (k == 151) dk = KEY_F11; else if (k == 152) dk = KEY_F12; - else if (k == ' ') dk = KEY_USE; else if (k == '\n' || k == '\r') dk = KEY_ENTER; else if (k >= 'A' && k <= 'Z') dk = k + 32; diff --git a/src/userland/games/doom/doomkeys.h b/src/userland/games/doom/doomkeys.h index fea9d5c..135d82a 100644 --- a/src/userland/games/doom/doomkeys.h +++ b/src/userland/games/doom/doomkeys.h @@ -30,7 +30,7 @@ #define KEY_DOWNARROW 0xaf #define KEY_STRAFE_L 0xa0 #define KEY_STRAFE_R 0xa1 -#define KEY_USE 0xa2 +#define KEY_USE 32 #define KEY_FIRE 0xa3 #define KEY_ESCAPE 27 #define KEY_ENTER 13