From ea10984eaf09364d9f6e08114caa4bcfcaa72d9e Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Thu, 23 Jun 2011 03:51:33 +0000 Subject: [PATCH] Rewrote key handling to decouple hardwired SDL way from current way. --- src/gui/mainwin.cpp | 257 ++++++++++++++++++++------------------------ src/gui/mainwin.h | 3 +- src/joystick.cpp | 87 +++++++++++---- src/joystick.h | 27 ++++- src/settings.h | 4 +- 5 files changed, 215 insertions(+), 163 deletions(-) diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 30c3b2a..1435d97 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -251,62 +251,43 @@ void MainWin::closeEvent(QCloseEvent * event) void MainWin::keyPressEvent(QKeyEvent * e) { - // NOTE: Keys are hardwired... -/* - vjs.p1KeyBindings[0] = settings.value("p1k_up", SDLK_UP).toInt(); - vjs.p1KeyBindings[1] = settings.value("p1k_down", SDLK_DOWN).toInt(); - vjs.p1KeyBindings[2] = settings.value("p1k_left", SDLK_LEFT).toInt(); - vjs.p1KeyBindings[3] = settings.value("p1k_right", SDLK_RIGHT).toInt(); - vjs.p1KeyBindings[4] = settings.value("p1k_c", SDLK_z).toInt(); - vjs.p1KeyBindings[5] = settings.value("p1k_b", SDLK_x).toInt(); - vjs.p1KeyBindings[6] = settings.value("p1k_a", SDLK_c).toInt(); - vjs.p1KeyBindings[7] = settings.value("p1k_option", SDLK_QUOTE).toInt(); - vjs.p1KeyBindings[8] = settings.value("p1k_pause", SDLK_RETURN).toInt(); - vjs.p1KeyBindings[9] = settings.value("p1k_0", SDLK_KP0).toInt(); - vjs.p1KeyBindings[10] = settings.value("p1k_1", SDLK_KP1).toInt(); - vjs.p1KeyBindings[11] = settings.value("p1k_2", SDLK_KP2).toInt(); - vjs.p1KeyBindings[12] = settings.value("p1k_3", SDLK_KP3).toInt(); - vjs.p1KeyBindings[13] = settings.value("p1k_4", SDLK_KP4).toInt(); - vjs.p1KeyBindings[14] = settings.value("p1k_5", SDLK_KP5).toInt(); - vjs.p1KeyBindings[15] = settings.value("p1k_6", SDLK_KP6).toInt(); - vjs.p1KeyBindings[16] = settings.value("p1k_7", SDLK_KP7).toInt(); - vjs.p1KeyBindings[17] = settings.value("p1k_8", SDLK_KP8).toInt(); - vjs.p1KeyBindings[18] = settings.value("p1k_9", SDLK_KP9).toInt(); - vjs.p1KeyBindings[19] = settings.value("p1k_pound", SDLK_KP_DIVIDE).toInt(); - vjs.p1KeyBindings[20] = settings.value("p1k_star", SDLK_KP_MULTIPLY).toInt(); -*/ - if (e->key() == Qt::Key_Up) - keyBuffer[0] = true; - else if (e->key() == Qt::Key_Down) - keyBuffer[1] = true; - else if (e->key() == Qt::Key_Left) - keyBuffer[2] = true; - else if (e->key() == Qt::Key_Right) - keyBuffer[3] = true; - else if (e->key() == Qt::Key_Z) - keyBuffer[4] = true; - else if (e->key() == Qt::Key_X) - keyBuffer[5] = true; - else if (e->key() == Qt::Key_C) - keyBuffer[6] = true; + HandleKeys(e, true); } void MainWin::keyReleaseEvent(QKeyEvent * e) { - if (e->key() == Qt::Key_Up) - keyBuffer[0] = false; - else if (e->key() == Qt::Key_Down) - keyBuffer[1] = false; - else if (e->key() == Qt::Key_Left) - keyBuffer[2] = false; - else if (e->key() == Qt::Key_Right) - keyBuffer[3] = false; - else if (e->key() == Qt::Key_Z) - keyBuffer[4] = false; - else if (e->key() == Qt::Key_X) - keyBuffer[5] = false; - else if (e->key() == Qt::Key_C) - keyBuffer[6] = false; + HandleKeys(e, false); +} + +void MainWin::HandleKeys(QKeyEvent * e, bool state) +{ + // We kill bad key combos here, before they can get to the emulator... + // This also kills the illegal instruction problem that cropped up in Rayman! + // May want to do this by killing the old one instead of ignoring the new one... + // Seems to work better that way... +#if 0 + if ((e->key() == vjs.p1KeyBindings[BUTTON_L] && joypad_0_buttons[BUTTON_R]) + || (e->key() == vjs.p1KeyBindings[BUTTON_R] && joypad_0_buttons[BUTTON_L]) + || (e->key() == vjs.p1KeyBindings[BUTTON_U] && joypad_0_buttons[BUTTON_D]) + || (e->key() == vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U])) + return; +#else + if (e->key() == vjs.p1KeyBindings[BUTTON_L] && joypad_0_buttons[BUTTON_R]) + joypad_0_buttons[BUTTON_R] = 0; + if (e->key() == vjs.p1KeyBindings[BUTTON_R] && joypad_0_buttons[BUTTON_L]) + joypad_0_buttons[BUTTON_L] = 0; + if (e->key() == vjs.p1KeyBindings[BUTTON_U] && joypad_0_buttons[BUTTON_D]) + joypad_0_buttons[BUTTON_D] = 0; + if (e->key() == vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U]) + joypad_0_buttons[BUTTON_U] = 0; +#endif + + // No bad combos exist, let's stuff the emulator key buffers...! + for(int i=BUTTON_FIRST; i<=BUTTON_LAST; i++) + { + if (e->key() == vjs.p1KeyBindings[i]) + joypad_0_buttons[i] = (uint8)state; + } } void MainWin::Open(void) @@ -625,49 +606,49 @@ WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath); WriteLog(" ROMPath = \"%s\"\n", vjs.ROMPath); // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, * - vjs.p1KeyBindings[0] = settings.value("p1k_up", SDLK_UP).toInt(); - vjs.p1KeyBindings[1] = settings.value("p1k_down", SDLK_DOWN).toInt(); - vjs.p1KeyBindings[2] = settings.value("p1k_left", SDLK_LEFT).toInt(); - vjs.p1KeyBindings[3] = settings.value("p1k_right", SDLK_RIGHT).toInt(); - vjs.p1KeyBindings[4] = settings.value("p1k_c", SDLK_z).toInt(); - vjs.p1KeyBindings[5] = settings.value("p1k_b", SDLK_x).toInt(); - vjs.p1KeyBindings[6] = settings.value("p1k_a", SDLK_c).toInt(); - vjs.p1KeyBindings[7] = settings.value("p1k_option", SDLK_QUOTE).toInt(); - vjs.p1KeyBindings[8] = settings.value("p1k_pause", SDLK_RETURN).toInt(); - vjs.p1KeyBindings[9] = settings.value("p1k_0", SDLK_KP0).toInt(); - vjs.p1KeyBindings[10] = settings.value("p1k_1", SDLK_KP1).toInt(); - vjs.p1KeyBindings[11] = settings.value("p1k_2", SDLK_KP2).toInt(); - vjs.p1KeyBindings[12] = settings.value("p1k_3", SDLK_KP3).toInt(); - vjs.p1KeyBindings[13] = settings.value("p1k_4", SDLK_KP4).toInt(); - vjs.p1KeyBindings[14] = settings.value("p1k_5", SDLK_KP5).toInt(); - vjs.p1KeyBindings[15] = settings.value("p1k_6", SDLK_KP6).toInt(); - vjs.p1KeyBindings[16] = settings.value("p1k_7", SDLK_KP7).toInt(); - vjs.p1KeyBindings[17] = settings.value("p1k_8", SDLK_KP8).toInt(); - vjs.p1KeyBindings[18] = settings.value("p1k_9", SDLK_KP9).toInt(); - vjs.p1KeyBindings[19] = settings.value("p1k_pound", SDLK_KP_DIVIDE).toInt(); - vjs.p1KeyBindings[20] = settings.value("p1k_star", SDLK_KP_MULTIPLY).toInt(); - - vjs.p2KeyBindings[0] = settings.value("p2k_up", SDLK_UP).toInt(); - vjs.p2KeyBindings[1] = settings.value("p2k_down", SDLK_DOWN).toInt(); - vjs.p2KeyBindings[2] = settings.value("p2k_left", SDLK_LEFT).toInt(); - vjs.p2KeyBindings[3] = settings.value("p2k_right", SDLK_RIGHT).toInt(); - vjs.p2KeyBindings[4] = settings.value("p2k_c", SDLK_z).toInt(); - vjs.p2KeyBindings[5] = settings.value("p2k_b", SDLK_x).toInt(); - vjs.p2KeyBindings[6] = settings.value("p2k_a", SDLK_c).toInt(); - vjs.p2KeyBindings[7] = settings.value("p2k_option", SDLK_QUOTE).toInt(); - vjs.p2KeyBindings[8] = settings.value("p2k_pause", SDLK_RETURN).toInt(); - vjs.p2KeyBindings[9] = settings.value("p2k_0", SDLK_KP0).toInt(); - vjs.p2KeyBindings[10] = settings.value("p2k_1", SDLK_KP1).toInt(); - vjs.p2KeyBindings[11] = settings.value("p2k_2", SDLK_KP2).toInt(); - vjs.p2KeyBindings[12] = settings.value("p2k_3", SDLK_KP3).toInt(); - vjs.p2KeyBindings[13] = settings.value("p2k_4", SDLK_KP4).toInt(); - vjs.p2KeyBindings[14] = settings.value("p2k_5", SDLK_KP5).toInt(); - vjs.p2KeyBindings[15] = settings.value("p2k_6", SDLK_KP6).toInt(); - vjs.p2KeyBindings[16] = settings.value("p2k_7", SDLK_KP7).toInt(); - vjs.p2KeyBindings[17] = settings.value("p2k_8", SDLK_KP8).toInt(); - vjs.p2KeyBindings[18] = settings.value("p2k_9", SDLK_KP9).toInt(); - vjs.p2KeyBindings[19] = settings.value("p2k_pound", SDLK_KP_DIVIDE).toInt(); - vjs.p2KeyBindings[20] = settings.value("p2k_star", SDLK_KP_MULTIPLY).toInt(); + vjs.p1KeyBindings[BUTTON_U] = settings.value("p1k_up", Qt::Key_Up).toInt(); + vjs.p1KeyBindings[BUTTON_D] = settings.value("p1k_down", Qt::Key_Down).toInt(); + vjs.p1KeyBindings[BUTTON_L] = settings.value("p1k_left", Qt::Key_Left).toInt(); + vjs.p1KeyBindings[BUTTON_R] = settings.value("p1k_right", Qt::Key_Right).toInt(); + vjs.p1KeyBindings[BUTTON_C] = settings.value("p1k_c", Qt::Key_Z).toInt(); + vjs.p1KeyBindings[BUTTON_B] = settings.value("p1k_b", Qt::Key_X).toInt(); + vjs.p1KeyBindings[BUTTON_A] = settings.value("p1k_a", Qt::Key_C).toInt(); + vjs.p1KeyBindings[BUTTON_OPTION] = settings.value("p1k_option", Qt::Key_Apostrophe).toInt(); + vjs.p1KeyBindings[BUTTON_PAUSE] = settings.value("p1k_pause", Qt::Key_Return).toInt(); + vjs.p1KeyBindings[BUTTON_0] = settings.value("p1k_0", Qt::Key_0).toInt(); + vjs.p1KeyBindings[BUTTON_1] = settings.value("p1k_1", Qt::Key_1).toInt(); + vjs.p1KeyBindings[BUTTON_2] = settings.value("p1k_2", Qt::Key_2).toInt(); + vjs.p1KeyBindings[BUTTON_3] = settings.value("p1k_3", Qt::Key_3).toInt(); + vjs.p1KeyBindings[BUTTON_4] = settings.value("p1k_4", Qt::Key_4).toInt(); + vjs.p1KeyBindings[BUTTON_5] = settings.value("p1k_5", Qt::Key_5).toInt(); + vjs.p1KeyBindings[BUTTON_6] = settings.value("p1k_6", Qt::Key_6).toInt(); + vjs.p1KeyBindings[BUTTON_7] = settings.value("p1k_7", Qt::Key_7).toInt(); + vjs.p1KeyBindings[BUTTON_8] = settings.value("p1k_8", Qt::Key_8).toInt(); + vjs.p1KeyBindings[BUTTON_9] = settings.value("p1k_9", Qt::Key_9).toInt(); + vjs.p1KeyBindings[BUTTON_d] = settings.value("p1k_pound", Qt::Key_Slash).toInt(); + vjs.p1KeyBindings[BUTTON_s] = settings.value("p1k_star", Qt::Key_Asterisk).toInt(); + + vjs.p2KeyBindings[BUTTON_U] = settings.value("p2k_up", Qt::Key_Up).toInt(); + vjs.p2KeyBindings[BUTTON_D] = settings.value("p2k_down", Qt::Key_Down).toInt(); + vjs.p2KeyBindings[BUTTON_L] = settings.value("p2k_left", Qt::Key_Left).toInt(); + vjs.p2KeyBindings[BUTTON_R] = settings.value("p2k_right", Qt::Key_Right).toInt(); + vjs.p2KeyBindings[BUTTON_C] = settings.value("p2k_c", Qt::Key_Z).toInt(); + vjs.p2KeyBindings[BUTTON_B] = settings.value("p2k_b", Qt::Key_X).toInt(); + vjs.p2KeyBindings[BUTTON_A] = settings.value("p2k_a", Qt::Key_C).toInt(); + vjs.p2KeyBindings[BUTTON_OPTION] = settings.value("p2k_option", Qt::Key_Apostrophe).toInt(); + vjs.p2KeyBindings[BUTTON_PAUSE] = settings.value("p2k_pause", Qt::Key_Return).toInt(); + vjs.p2KeyBindings[BUTTON_0] = settings.value("p2k_0", Qt::Key_0).toInt(); + vjs.p2KeyBindings[BUTTON_1] = settings.value("p2k_1", Qt::Key_1).toInt(); + vjs.p2KeyBindings[BUTTON_2] = settings.value("p2k_2", Qt::Key_2).toInt(); + vjs.p2KeyBindings[BUTTON_3] = settings.value("p2k_3", Qt::Key_3).toInt(); + vjs.p2KeyBindings[BUTTON_4] = settings.value("p2k_4", Qt::Key_4).toInt(); + vjs.p2KeyBindings[BUTTON_5] = settings.value("p2k_5", Qt::Key_5).toInt(); + vjs.p2KeyBindings[BUTTON_6] = settings.value("p2k_6", Qt::Key_6).toInt(); + vjs.p2KeyBindings[BUTTON_7] = settings.value("p2k_7", Qt::Key_7).toInt(); + vjs.p2KeyBindings[BUTTON_8] = settings.value("p2k_8", Qt::Key_8).toInt(); + vjs.p2KeyBindings[BUTTON_9] = settings.value("p2k_9", Qt::Key_9).toInt(); + vjs.p2KeyBindings[BUTTON_d] = settings.value("p2k_pound", Qt::Key_Slash).toInt(); + vjs.p2KeyBindings[BUTTON_s] = settings.value("p2k_star", Qt::Key_Asterisk).toInt(); } void MainWin::WriteSettings(void) @@ -694,49 +675,49 @@ void MainWin::WriteSettings(void) settings.setValue("EEPROMs", vjs.EEPROMPath); settings.setValue("ROMs", vjs.ROMPath); - settings.setValue("p1k_up", vjs.p1KeyBindings[0]); - settings.setValue("p1k_down", vjs.p1KeyBindings[1]); - settings.setValue("p1k_left", vjs.p1KeyBindings[2]); - settings.setValue("p1k_right", vjs.p1KeyBindings[3]); - settings.setValue("p1k_c", vjs.p1KeyBindings[4]); - settings.setValue("p1k_b", vjs.p1KeyBindings[5]); - settings.setValue("p1k_a", vjs.p1KeyBindings[6]); - settings.setValue("p1k_option", vjs.p1KeyBindings[7]); - settings.setValue("p1k_pause", vjs.p1KeyBindings[8]); - settings.setValue("p1k_0", vjs.p1KeyBindings[9]); - settings.setValue("p1k_1", vjs.p1KeyBindings[10]); - settings.setValue("p1k_2", vjs.p1KeyBindings[11]); - settings.setValue("p1k_3", vjs.p1KeyBindings[12]); - settings.setValue("p1k_4", vjs.p1KeyBindings[13]); - settings.setValue("p1k_5", vjs.p1KeyBindings[14]); - settings.setValue("p1k_6", vjs.p1KeyBindings[15]); - settings.setValue("p1k_7", vjs.p1KeyBindings[16]); - settings.setValue("p1k_8", vjs.p1KeyBindings[17]); - settings.setValue("p1k_9", vjs.p1KeyBindings[18]); - settings.setValue("p1k_pound", vjs.p1KeyBindings[19]); - settings.setValue("p1k_star", vjs.p1KeyBindings[20]); - - settings.setValue("p2k_up", vjs.p2KeyBindings[0]); - settings.setValue("p2k_down", vjs.p2KeyBindings[1]); - settings.setValue("p2k_left", vjs.p2KeyBindings[2]); - settings.setValue("p2k_right", vjs.p2KeyBindings[3]); - settings.setValue("p2k_c", vjs.p2KeyBindings[4]); - settings.setValue("p2k_b", vjs.p2KeyBindings[5]); - settings.setValue("p2k_a", vjs.p2KeyBindings[6]); - settings.setValue("p2k_option", vjs.p2KeyBindings[7]); - settings.setValue("p2k_pause", vjs.p2KeyBindings[8]); - settings.setValue("p2k_0", vjs.p2KeyBindings[9]); - settings.setValue("p2k_1", vjs.p2KeyBindings[10]); - settings.setValue("p2k_2", vjs.p2KeyBindings[11]); - settings.setValue("p2k_3", vjs.p2KeyBindings[12]); - settings.setValue("p2k_4", vjs.p2KeyBindings[13]); - settings.setValue("p2k_5", vjs.p2KeyBindings[14]); - settings.setValue("p2k_6", vjs.p2KeyBindings[15]); - settings.setValue("p2k_7", vjs.p2KeyBindings[16]); - settings.setValue("p2k_8", vjs.p2KeyBindings[17]); - settings.setValue("p2k_9", vjs.p2KeyBindings[18]); - settings.setValue("p2k_pound", vjs.p2KeyBindings[19]); - settings.setValue("p2k_star", vjs.p2KeyBindings[20]); + settings.setValue("p1k_up", vjs.p1KeyBindings[BUTTON_U]); + settings.setValue("p1k_down", vjs.p1KeyBindings[BUTTON_D]); + settings.setValue("p1k_left", vjs.p1KeyBindings[BUTTON_L]); + settings.setValue("p1k_right", vjs.p1KeyBindings[BUTTON_R]); + settings.setValue("p1k_c", vjs.p1KeyBindings[BUTTON_C]); + settings.setValue("p1k_b", vjs.p1KeyBindings[BUTTON_B]); + settings.setValue("p1k_a", vjs.p1KeyBindings[BUTTON_A]); + settings.setValue("p1k_option", vjs.p1KeyBindings[BUTTON_OPTION]); + settings.setValue("p1k_pause", vjs.p1KeyBindings[BUTTON_PAUSE]); + settings.setValue("p1k_0", vjs.p1KeyBindings[BUTTON_0]); + settings.setValue("p1k_1", vjs.p1KeyBindings[BUTTON_1]); + settings.setValue("p1k_2", vjs.p1KeyBindings[BUTTON_2]); + settings.setValue("p1k_3", vjs.p1KeyBindings[BUTTON_3]); + settings.setValue("p1k_4", vjs.p1KeyBindings[BUTTON_4]); + settings.setValue("p1k_5", vjs.p1KeyBindings[BUTTON_5]); + settings.setValue("p1k_6", vjs.p1KeyBindings[BUTTON_6]); + settings.setValue("p1k_7", vjs.p1KeyBindings[BUTTON_7]); + settings.setValue("p1k_8", vjs.p1KeyBindings[BUTTON_8]); + settings.setValue("p1k_9", vjs.p1KeyBindings[BUTTON_9]); + settings.setValue("p1k_pound", vjs.p1KeyBindings[BUTTON_d]); + settings.setValue("p1k_star", vjs.p1KeyBindings[BUTTON_s]); + + settings.setValue("p2k_up", vjs.p2KeyBindings[BUTTON_U]); + settings.setValue("p2k_down", vjs.p2KeyBindings[BUTTON_D]); + settings.setValue("p2k_left", vjs.p2KeyBindings[BUTTON_L]); + settings.setValue("p2k_right", vjs.p2KeyBindings[BUTTON_R]); + settings.setValue("p2k_c", vjs.p2KeyBindings[BUTTON_C]); + settings.setValue("p2k_b", vjs.p2KeyBindings[BUTTON_B]); + settings.setValue("p2k_a", vjs.p2KeyBindings[BUTTON_A]); + settings.setValue("p2k_option", vjs.p2KeyBindings[BUTTON_OPTION]); + settings.setValue("p2k_pause", vjs.p2KeyBindings[BUTTON_PAUSE]); + settings.setValue("p2k_0", vjs.p2KeyBindings[BUTTON_0]); + settings.setValue("p2k_1", vjs.p2KeyBindings[BUTTON_1]); + settings.setValue("p2k_2", vjs.p2KeyBindings[BUTTON_2]); + settings.setValue("p2k_3", vjs.p2KeyBindings[BUTTON_3]); + settings.setValue("p2k_4", vjs.p2KeyBindings[BUTTON_4]); + settings.setValue("p2k_5", vjs.p2KeyBindings[BUTTON_5]); + settings.setValue("p2k_6", vjs.p2KeyBindings[BUTTON_6]); + settings.setValue("p2k_7", vjs.p2KeyBindings[BUTTON_7]); + settings.setValue("p2k_8", vjs.p2KeyBindings[BUTTON_8]); + settings.setValue("p2k_9", vjs.p2KeyBindings[BUTTON_9]); + settings.setValue("p2k_pound", vjs.p2KeyBindings[BUTTON_d]); + settings.setValue("p2k_star", vjs.p2KeyBindings[BUTTON_s]); } // Here's how Byuu does it... diff --git a/src/gui/mainwin.h b/src/gui/mainwin.h index e6dfef1..2b332d3 100644 --- a/src/gui/mainwin.h +++ b/src/gui/mainwin.h @@ -42,11 +42,10 @@ class MainWin: public QMainWindow void ToggleBlur(void); void ShowAboutWin(void); void InsertCart(void); - -// public slots: void LoadSoftware(QString); private: + void HandleKeys(QKeyEvent *, bool); void ResizeMainWindow(void); void ReadSettings(void); void WriteSettings(void); diff --git a/src/joystick.cpp b/src/joystick.cpp index 2de43ce..0a391b0 100644 --- a/src/joystick.cpp +++ b/src/joystick.cpp @@ -24,6 +24,7 @@ #include "settings.h" #include "video.h" +#if 0 #define BUTTON_U 0 #define BUTTON_D 1 #define BUTTON_L 2 @@ -46,12 +47,13 @@ #define BUTTON_C 18 #define BUTTON_OPTION 19 #define BUTTON_PAUSE 20 +#endif // Global vars static uint8 joystick_ram[4]; -static uint8 joypad_0_buttons[21]; -static uint8 joypad_1_buttons[21]; +uint8 joypad_0_buttons[21]; +uint8 joypad_1_buttons[21]; bool keyBuffer[21]; @@ -82,16 +84,17 @@ void JoystickInit(void) void JoystickExec(void) { - uint8 * keystate = SDL_GetKeyState(NULL); +// uint8 * keystate = SDL_GetKeyState(NULL); - memset(joypad_0_buttons, 0, 21); - memset(joypad_1_buttons, 0, 21); +// memset(joypad_0_buttons, 0, 21); +// memset(joypad_1_buttons, 0, 21); gpu_start_log = 0; // Only log while key down! effect_start = 0; effect_start2 = effect_start3 = effect_start4 = effect_start5 = effect_start6 = 0; blit_start_log = 0; iLeft = iRight = false; +#if 0 if ((keystate[SDLK_LALT] || keystate[SDLK_RALT]) & keystate[SDLK_RETURN]) ToggleFullscreen(); @@ -114,6 +117,36 @@ void JoystickExec(void) joypad_0_buttons[BUTTON_B] = 0x01; if (keystate[vjs.p1KeyBindings[6]]) joypad_0_buttons[BUTTON_A] = 0x01; +//I may yet move these to O and P... + if (keystate[vjs.p1KeyBindings[7]]) + joypad_0_buttons[BUTTON_OPTION] = 0x01; + if (keystate[vjs.p1KeyBindings[8]]) + joypad_0_buttons[BUTTON_PAUSE] = 0x01; + + if (keystate[vjs.p1KeyBindings[9]]) + joypad_0_buttons[BUTTON_0] = 0x01; + if (keystate[vjs.p1KeyBindings[10]]) + joypad_0_buttons[BUTTON_1] = 0x01; + if (keystate[vjs.p1KeyBindings[11]]) + joypad_0_buttons[BUTTON_2] = 0x01; + if (keystate[vjs.p1KeyBindings[12]]) + joypad_0_buttons[BUTTON_3] = 0x01; + if (keystate[vjs.p1KeyBindings[13]]) + joypad_0_buttons[BUTTON_4] = 0x01; + if (keystate[vjs.p1KeyBindings[14]]) + joypad_0_buttons[BUTTON_5] = 0x01; + if (keystate[vjs.p1KeyBindings[15]]) + joypad_0_buttons[BUTTON_6] = 0x01; + if (keystate[vjs.p1KeyBindings[16]]) + joypad_0_buttons[BUTTON_7] = 0x01; + if (keystate[vjs.p1KeyBindings[17]]) + joypad_0_buttons[BUTTON_8] = 0x01; + if (keystate[vjs.p1KeyBindings[18]]) + joypad_0_buttons[BUTTON_9] = 0x01; + if (keystate[vjs.p1KeyBindings[19]]) + joypad_0_buttons[BUTTON_s] = 0x01; + if (keystate[vjs.p1KeyBindings[20]]) + joypad_0_buttons[BUTTON_d] = 0x01; #else if (keyBuffer[0]) joypad_0_buttons[BUTTON_U] = 0x01; @@ -130,37 +163,37 @@ void JoystickExec(void) joypad_0_buttons[BUTTON_B] = 0x01; if (keyBuffer[6]) joypad_0_buttons[BUTTON_A] = 0x01; -#endif //I may yet move these to O and P... - if (keystate[vjs.p1KeyBindings[7]]) + if (keyBuffer[7]) joypad_0_buttons[BUTTON_OPTION] = 0x01; - if (keystate[vjs.p1KeyBindings[8]]) + if (keyBuffer[8]) joypad_0_buttons[BUTTON_PAUSE] = 0x01; - if (keystate[vjs.p1KeyBindings[9]]) + if (keyBuffer[9]) joypad_0_buttons[BUTTON_0] = 0x01; - if (keystate[vjs.p1KeyBindings[10]]) + if (keyBuffer[10]) joypad_0_buttons[BUTTON_1] = 0x01; - if (keystate[vjs.p1KeyBindings[11]]) + if (keyBuffer[11]) joypad_0_buttons[BUTTON_2] = 0x01; - if (keystate[vjs.p1KeyBindings[12]]) + if (keyBuffer[12]) joypad_0_buttons[BUTTON_3] = 0x01; - if (keystate[vjs.p1KeyBindings[13]]) + if (keyBuffer[13]) joypad_0_buttons[BUTTON_4] = 0x01; - if (keystate[vjs.p1KeyBindings[14]]) + if (keyBuffer[14]) joypad_0_buttons[BUTTON_5] = 0x01; - if (keystate[vjs.p1KeyBindings[15]]) + if (keyBuffer[15]) joypad_0_buttons[BUTTON_6] = 0x01; - if (keystate[vjs.p1KeyBindings[16]]) + if (keyBuffer[16]) joypad_0_buttons[BUTTON_7] = 0x01; - if (keystate[vjs.p1KeyBindings[17]]) + if (keyBuffer[17]) joypad_0_buttons[BUTTON_8] = 0x01; - if (keystate[vjs.p1KeyBindings[18]]) + if (keyBuffer[18]) joypad_0_buttons[BUTTON_9] = 0x01; - if (keystate[vjs.p1KeyBindings[19]]) + if (keyBuffer[19]) joypad_0_buttons[BUTTON_s] = 0x01; - if (keystate[vjs.p1KeyBindings[20]]) + if (keyBuffer[20]) joypad_0_buttons[BUTTON_d] = 0x01; +#endif #warning "!!! FIX !!! (debounceRunKey)" // extern bool debounceRunKey; @@ -260,6 +293,20 @@ void JoystickExec(void) } else bssHeld = false; +#endif + // We need to ensure that illegal combinations are not possible. + // So, we do a simple minded way here... + // It would be better to check to see which one was pressed last + // and discard that one, but for now... +//This didn't work... Was still able to do bad combination. +//It's because the GUI is changing this *after* we fix it here. +#if 0 + if (joypad_0_buttons[BUTTON_R] && joypad_0_buttons[BUTTON_L]) + joypad_0_buttons[BUTTON_L] = 0; + + if (joypad_0_buttons[BUTTON_U] && joypad_0_buttons[BUTTON_D]) + joypad_0_buttons[BUTTON_D] = 0; +#endif // Joystick support [nwagenaar] diff --git a/src/joystick.h b/src/joystick.h index e98dcdb..98eb977 100644 --- a/src/joystick.h +++ b/src/joystick.h @@ -7,6 +7,30 @@ #include "types.h" +enum { BUTTON_FIRST = 0, BUTTON_U = 0, +BUTTON_D = 1, +BUTTON_L = 2, +BUTTON_R = 3, + +BUTTON_s = 4, +BUTTON_7 = 5, +BUTTON_4 = 6, +BUTTON_1 = 7, +BUTTON_0 = 8, +BUTTON_8 = 9, +BUTTON_5 = 10, +BUTTON_2 = 11, +BUTTON_d = 12, +BUTTON_9 = 13, +BUTTON_6 = 14, +BUTTON_3 = 15, + +BUTTON_A = 16, +BUTTON_B = 17, +BUTTON_C = 18, +BUTTON_OPTION = 19, +BUTTON_PAUSE = 20, BUTTON_LAST = 20 }; + void JoystickInit(void); void JoystickReset(void); void JoystickDone(void); @@ -17,5 +41,6 @@ uint16 JoystickReadWord(uint32); void JoystickExec(void); extern bool keyBuffer[]; - +extern uint8 joypad_0_buttons[]; +extern uint8 joypad_1_buttons[]; #endif diff --git a/src/settings.h b/src/settings.h index acc8c91..a7ca244 100644 --- a/src/settings.h +++ b/src/settings.h @@ -33,8 +33,8 @@ struct VJSettings // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, * - uint16 p1KeyBindings[21]; - uint16 p2KeyBindings[21]; + uint32 p1KeyBindings[21]; + uint32 p2KeyBindings[21]; // Paths -- 2.37.2