{ "pcsx_rearmed_frameskip", "Frameskip; 0|1|2|3" },
{ "pcsx_rearmed_region", "Region; auto|NTSC|PAL" },
{ "pcsx_rearmed_memcard2", "Enable second memory card; disabled|enabled" },
- { "pcsx_rearmed_pad1type", "Pad 1 Type; default|none|standard|analog|negcon" },
- { "pcsx_rearmed_pad2type", "Pad 2 Type; default|none|standard|analog|negcon" },
- { "pcsx_rearmed_pad3type", "Pad 3 Type; default|none|standard|analog|negcon" },
- { "pcsx_rearmed_pad4type", "Pad 4 Type; default|none|standard|analog|negcon" },
- { "pcsx_rearmed_pad5type", "Pad 5 Type; default|none|standard|analog|negcon" },
- { "pcsx_rearmed_pad6type", "Pad 6 Type; default|none|standard|analog|negcon" },
- { "pcsx_rearmed_pad7type", "Pad 7 Type; default|none|standard|analog|negcon" },
- { "pcsx_rearmed_pad8type", "Pad 8 Type; default|none|standard|analog|negcon" },
+ { "pcsx_rearmed_pad1type", "Pad 1 Type; default|none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad2type", "Pad 2 Type; default|none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad3type", "Pad 3 Type; default|none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad4type", "Pad 4 Type; default|none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad5type", "Pad 5 Type; default|none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad6type", "Pad 6 Type; default|none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad7type", "Pad 7 Type; default|none|standard|analog|dualshock|negcon" },
+ { "pcsx_rearmed_pad8type", "Pad 8 Type; default|none|standard|analog|dualshock|negcon" },
{ "pcsx_rearmed_multitap1", "Multitap 1; auto|disabled|enabled" },
{ "pcsx_rearmed_multitap2", "Multitap 2; auto|disabled|enabled" },
{ "pcsx_rearmed_negcon_deadzone", "NegCon Twist Deadzone (percent); 0|5|10|15|20|25|30" },
if (strcmp(var.value, "standard") == 0)
in_type[port] = PSE_PAD_TYPE_STANDARD;
else if (strcmp(var.value, "analog") == 0)
+ in_type[port] = PSE_PAD_TYPE_ANALOGJOY;
+ else if (strcmp(var.value, "dualshock") == 0)
in_type[port] = PSE_PAD_TYPE_ANALOGPAD;
else if (strcmp(var.value, "negcon") == 0)
in_type[port] = PSE_PAD_TYPE_NEGCON;
// reset all keystate, query libretro for keystate
int j;
int lsx;
+ int rsy;
float negcon_twist_amplitude;
+ int negcon_i_rs;
+ int negcon_ii_rs;
for(i = 0; i < PORTS_NUMBER; i++) {
in_keystate[i] = 0;
}
// >> Convert to final 'in_analog' integer value [0,255]
in_analog_right[i][0] = MAX(MIN((int)(negcon_twist_amplitude * 128.0f) + 128, 255), 0);
- // > NeGcon I
+ // > NeGcon I + II
+ // >> Handle right analog stick vertical axis mapping...
+ // - Up (-Y) == accelerate == neGcon I
+ // - Down (+Y) == brake == neGcon II
+ negcon_i_rs = 0;
+ negcon_ii_rs = 0;
+ rsy = input_state_cb(i, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y);
+ if (rsy >= 0){
+ // Account for deadzone
+ // (Note: have never encountered a gamepad with significant differences
+ // in deadzone between left/right analog sticks, so use the regular 'twist'
+ // deadzone here)
+ if (rsy > negcon_deadzone){
+ rsy = rsy - negcon_deadzone;
+ } else {
+ rsy = 0;
+ }
+ // Convert to 'in_analog' integer value [0,255]
+ negcon_ii_rs = MIN((int)(((float)rsy / (float)(NEGCON_RANGE - negcon_deadzone)) * 255.0f), 255);
+ } else {
+ if (rsy < -negcon_deadzone){
+ rsy = -1 * (rsy + negcon_deadzone);
+ } else {
+ rsy = 0;
+ }
+ negcon_i_rs = MIN((int)(((float)rsy / (float)(NEGCON_RANGE - negcon_deadzone)) * 255.0f), 255);
+ }
+ // >> NeGcon I
in_analog_right[i][1] = MAX(
- get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_R2),
- get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_B)
+ MAX(
+ get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_R2),
+ get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_B)
+ ),
+ negcon_i_rs
);
- // > NeGcon II
+ // >> NeGcon II
in_analog_left[i][0] = MAX(
- get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_L2),
- get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_Y)
+ MAX(
+ get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_L2),
+ get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_Y)
+ ),
+ negcon_ii_rs
);
// > NeGcon L
in_analog_left[i][1] = get_analog_button(input_state_cb, i, RETRO_DEVICE_ID_JOYPAD_L);
}
}
// Query analog inputs
- if (in_type[i] == PSE_PAD_TYPE_ANALOGPAD)
+ if (in_type[i] == PSE_PAD_TYPE_ANALOGJOY || in_type[i] == PSE_PAD_TYPE_ANALOGPAD)
{
in_analog_left[i][0] = MIN((input_state_cb(i, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X) / 255) + 128, 255);
in_analog_left[i][1] = MIN((input_state_cb(i, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y) / 255) + 128, 255);