From: notaz Date: Mon, 20 Nov 2023 21:06:31 +0000 (+0200) Subject: libretro: add a few options for the analog combo X-Git-Tag: r24l~57 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c6a636aef8b4d9927ade2468daa3f38413bcb0b;p=pcsx_rearmed.git libretro: add a few options for the analog combo like in the other core --- diff --git a/frontend/libretro.c b/frontend/libretro.c index 7f331574..80dc8a9d 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -146,8 +146,8 @@ int multitap1 = 0; int multitap2 = 0; int in_enable_vibration = 1; static int in_enable_crosshair[2] = { 0, 0 }; -static bool in_dualshock_toggle_enable = 0; -static bool in_dualshock_toggling = 0; +static int in_dualshock_analog_combo = 0; +static bool in_dualshock_toggling = false; // NegCon adjustment parameters // > The NegCon 'twist' action is somewhat awkward when mapped @@ -2014,11 +2014,27 @@ static void update_variables(bool in_flight) } var.value = NULL; - var.key = "pcsx_rearmed_analog_toggle"; + var.key = "pcsx_rearmed_analog_combo"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - in_dualshock_toggle_enable = (strcmp(var.value, "enabled") == 0); + if (strcmp(var.value, "l1+r1+select") == 0) + in_dualshock_analog_combo = (1 << RETRO_DEVICE_ID_JOYPAD_L) | + (1 << RETRO_DEVICE_ID_JOYPAD_R) | (1 << RETRO_DEVICE_ID_JOYPAD_SELECT); + else if (strcmp(var.value, "l1+r1+start") == 0) + in_dualshock_analog_combo = (1 << RETRO_DEVICE_ID_JOYPAD_L) | + (1 << RETRO_DEVICE_ID_JOYPAD_R) | (1 << RETRO_DEVICE_ID_JOYPAD_START); + else if (strcmp(var.value, "l1+r1+l3") == 0) + in_dualshock_analog_combo = (1 << RETRO_DEVICE_ID_JOYPAD_L) | + (1 << RETRO_DEVICE_ID_JOYPAD_R) | (1 << RETRO_DEVICE_ID_JOYPAD_L3); + else if (strcmp(var.value, "l1+r1+r3") == 0) + in_dualshock_analog_combo = (1 << RETRO_DEVICE_ID_JOYPAD_L) | + (1 << RETRO_DEVICE_ID_JOYPAD_R) | (1 << RETRO_DEVICE_ID_JOYPAD_R3); + else if (strcmp(var.value, "l3+r3") == 0) + in_dualshock_analog_combo = (1 << RETRO_DEVICE_ID_JOYPAD_L3) | + (1 << RETRO_DEVICE_ID_JOYPAD_R3); + else + in_dualshock_analog_combo = 0; } var.value = NULL; @@ -2873,17 +2889,13 @@ static void update_input_mouse(int port, int ret) static void update_input(void) { - int16_t analog_combo = - (1 << RETRO_DEVICE_ID_JOYPAD_L) | - (1 << RETRO_DEVICE_ID_JOYPAD_R) | - (1 << RETRO_DEVICE_ID_JOYPAD_SELECT); int i; int j; // reset all keystate, query libretro for keystate for (i = 0; i < PORTS_NUMBER; i++) { - int16_t ret = 0; + int32_t ret = 0; int type = in_type[i]; in_keystate[i] = 0; @@ -2892,7 +2904,11 @@ static void update_input(void) continue; if (libretro_supports_bitmasks) + { ret = input_state_cb(i, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_MASK); + // undo int16 sign extension (why input_state_cb returns int16 in the first place?) + ret &= (1 << (RETRO_DEVICE_ID_JOYPAD_R3 + 1)) - 1; + } else { for (j = 0; j < (RETRO_DEVICE_ID_JOYPAD_R3 + 1); j++) @@ -2918,8 +2934,8 @@ static void update_input(void) break; default: // dualshock ANALOG toggle? - if (type == PSE_PAD_TYPE_ANALOGPAD && in_dualshock_toggle_enable - && (ret & analog_combo) == analog_combo) + if (type == PSE_PAD_TYPE_ANALOGPAD && in_dualshock_analog_combo != 0 + && ret == in_dualshock_analog_combo) { if (!in_dualshock_toggling) { diff --git a/frontend/libretro_core_options.h b/frontend/libretro_core_options.h index 104b4b4a..114911e9 100644 --- a/frontend/libretro_core_options.h +++ b/frontend/libretro_core_options.h @@ -854,18 +854,22 @@ struct retro_core_option_v2_definition option_defs_us[] = { "enabled", }, { - "pcsx_rearmed_analog_toggle", - "DualShock Analog Mode Toggle", + "pcsx_rearmed_analog_combo", + "DualShock Analog Mode Toggle Key Combo", NULL, - "When the input device type is DualShock, this option allows the emulated DualShock to be toggled between DIGITAL and ANALOG mode like original hardware. The button combination is L1 + R1 + Select.", + "When the input device type is DualShock, this option allows the emulated DualShock to be toggled between DIGITAL and ANALOG mode like original hardware. You can select the button combination for this.", NULL, "input", { { "disabled", NULL }, - { "enabled", NULL }, + { "l1+r1+select", "L1 + R1 + Select" }, + { "l1+r1+start", "L1 + R1 + Start" }, + { "l1+r1+l3", "L1 + R1 + L3" }, + { "l1+r1+r3", "L1 + R1 + R3" }, + { "l3+r3", "L3 + R3" }, { NULL, NULL }, }, - "enabled", + "l1+r1+select" }, { "pcsx_rearmed_multitap", diff --git a/libpcsxcore/database.c b/libpcsxcore/database.c index 00e5db15..7279c3fa 100644 --- a/libpcsxcore/database.c +++ b/libpcsxcore/database.c @@ -58,7 +58,7 @@ static const char * const dualshock_init_analog_hack_db[] = /* Formula 1 Championship Edition */ "SLUS00546", /* Gran Turismo 2 */ - "SCUS94455", "SCUS94488", "SCPS10116", "SCPS10117", "SCES02380", "SCES-12380", + "SCUS94455", "SCUS94488", "SCPS10116", "SCPS10117", "SCES02380", "SCES12380", }; #define HACK_ENTRY(var, list) \