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
}
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;
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;
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++)
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)
{
"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",