From 3a5cf8ed6b1e8d1efbc6cbf03eb76bb57163ccbf Mon Sep 17 00:00:00 2001 From: Nolan Nicholson Date: Sun, 6 Mar 2022 03:00:56 -0800 Subject: [PATCH] GunCon 3 + negative gun-cal values (#565) --- input.cpp | 36 +++++++++++++++++++++++++----------- input.h | 2 +- menu.cpp | 2 +- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/input.cpp b/input.cpp index c23288d..2a19e5d 100644 --- a/input.cpp +++ b/input.cpp @@ -1117,7 +1117,8 @@ enum QUIRK QUIRK_TOUCHGUN, QUIRK_VCS, QUIRK_JOYCON, - QUIRK_GUNCON2, + QUIRK_LIGHTGUN_CRT, + QUIRK_LIGHTGUN }; typedef struct @@ -1147,7 +1148,7 @@ typedef struct uint8_t has_kbdmap; uint8_t kbdmap[256]; - uint16_t guncal[4]; + int32_t guncal[4]; int accx, accy; int startx, starty; @@ -1461,19 +1462,19 @@ void finish_map_setting(int dismiss) } } -void input_lightgun_save(int idx, uint16_t *cal) +void input_lightgun_save(int idx, int32_t *cal) { static char name[128]; - sprintf(name, "%s_gun_cal_%04x_%04x.cfg", user_io_get_core_name(), input[idx].vid, input[idx].pid); - FileSaveConfig(name, cal, 4 * sizeof(uint16_t)); + sprintf(name, "%s_gun_cal_%04x_%04x_v2.cfg", user_io_get_core_name(), input[idx].vid, input[idx].pid); + FileSaveConfig(name, cal, 4 * sizeof(int32_t)); memcpy(input[idx].guncal, cal, sizeof(input[idx].guncal)); } static void input_lightgun_load(int idx) { static char name[128]; - sprintf(name, "%s_gun_cal_%04x_%04x.cfg", user_io_get_core_name(), input[idx].vid, input[idx].pid); - FileLoadConfig(name, input[idx].guncal, 4 * sizeof(uint16_t)); + sprintf(name, "%s_gun_cal_%04x_%04x_v2.cfg", user_io_get_core_name(), input[idx].vid, input[idx].pid); + FileLoadConfig(name, input[idx].guncal, 4 * sizeof(int32_t)); } int input_has_lightgun() @@ -1482,7 +1483,8 @@ int input_has_lightgun() { if (input[i].quirk == QUIRK_WIIMOTE) return 1; if (input[i].quirk == QUIRK_TOUCHGUN) return 1; - if (input[i].quirk == QUIRK_GUNCON2) return 1; + if (input[i].quirk == QUIRK_LIGHTGUN) return 1; + if (input[i].quirk == QUIRK_LIGHTGUN_CRT) return 1; } return 0; } @@ -4072,7 +4074,7 @@ int input_test(int getchar) //Namco GunCon 2 if (input[n].vid == 0x0b9a && input[n].pid == 0x016a) { - input[n].quirk = QUIRK_GUNCON2; + input[n].quirk = QUIRK_LIGHTGUN_CRT; input[n].lightgun = 1; input[n].guncal[0] = 25; input[n].guncal[1] = 245; @@ -4081,6 +4083,18 @@ int input_test(int getchar) input_lightgun_load(n); } + //Namco GunCon 3 + if (input[n].vid == 0x0b9a && input[n].pid == 0x0800) + { + input[n].quirk = QUIRK_LIGHTGUN; + input[n].lightgun = 1; + input[n].guncal[0] = -32768; + input[n].guncal[1] = 32767; + input[n].guncal[2] = -32768; + input[n].guncal[3] = 32767; + input_lightgun_load(n); + } + //Madcatz Arcade Stick 360 if (input[n].vid == 0x0738 && input[n].pid == 0x4758) input[n].quirk = QUIRK_MADCATZ360; @@ -4527,7 +4541,7 @@ int input_test(int getchar) } } - if (ev.type == EV_ABS && input[i].quirk == QUIRK_GUNCON2) + if (ev.type == EV_ABS && (input[i].quirk == QUIRK_LIGHTGUN_CRT || input[i].quirk == QUIRK_LIGHTGUN)) { menu_lightgun_cb(i, ev.type, ev.code, ev.value); @@ -4545,7 +4559,7 @@ int input_test(int getchar) if (ev.type == EV_KEY && user_io_osd_is_visible()) { - if (input[i].quirk == QUIRK_WIIMOTE || input[i].quirk == QUIRK_GUNCON2) + if (input[i].quirk == QUIRK_WIIMOTE || input[i].quirk == QUIRK_LIGHTGUN_CRT || input[i].quirk == QUIRK_LIGHTGUN) { if (menu_lightgun_cb(i, ev.type, ev.code, ev.value)) continue; } diff --git a/input.h b/input.h index 24144d8..b063712 100644 --- a/input.h +++ b/input.h @@ -99,7 +99,7 @@ uint32_t get_amiga_code(uint16_t key); uint32_t get_archie_code(uint16_t key); int input_has_lightgun(); -void input_lightgun_save(int idx, uint16_t *cal); +void input_lightgun_save(int idx, int32_t *cal); void input_switch(int grab); int input_state(); diff --git a/menu.cpp b/menu.cpp index b4b55ea..e17271b 100644 --- a/menu.cpp +++ b/menu.cpp @@ -957,7 +957,7 @@ static int gun_y = 0; static int gun_ok = 0; static int gun_side = 0; static int gun_idx = 0; -static uint16_t gun_pos[4] = {}; +static int32_t gun_pos[4] = {}; static int page = 0; void HandleUI(void)