diff --git a/src/command.c b/src/command.c index c71fece57..0ac949bf9 100644 --- a/src/command.c +++ b/src/command.c @@ -2172,6 +2172,45 @@ static boolean CV_FilterJoyAxisVars(consvar_t *v, const char *valstr) return true; } +// Block the Xbox DInput default axes and reset to the current defaults +static boolean CV_FilterJoyAxisVars2(consvar_t *v, const char *valstr) +{ + if (!stricmp(v->name, "joyaxis_turn") && !stricmp(valstr, "X-Axis")) + return false; + if (!stricmp(v->name, "joyaxis2_turn") && !stricmp(valstr, "X-Axis")) + return false; + if (!stricmp(v->name, "joyaxis3_turn") && !stricmp(valstr, "X-Axis")) + return false; + if (!stricmp(v->name, "joyaxis4_turn") && !stricmp(valstr, "X-Axis")) + return false; + if (!stricmp(v->name, "joyaxis_aim") && !stricmp(valstr, "Y-Axis")) + return false; + if (!stricmp(v->name, "joyaxis2_aim") && !stricmp(valstr, "Y-Axis")) + return false; + if (!stricmp(v->name, "joyaxis3_aim") && !stricmp(valstr, "Y-Axis")) + return false; + if (!stricmp(v->name, "joyaxis4_aim") && !stricmp(valstr, "Y-Axis")) + return false; + if (!stricmp(v->name, "joyaxis_fire") && !stricmp(valstr, "None")) + return false; + if (!stricmp(v->name, "joyaxis2_fire") && !stricmp(valstr, "None")) + return false; + if (!stricmp(v->name, "joyaxis3_fire") && !stricmp(valstr, "None")) + return false; + if (!stricmp(v->name, "joyaxis4_fire") && !stricmp(valstr, "None")) + return false; + if (!stricmp(v->name, "joyaxis_drift") && !stricmp(valstr, "None")) + return false; + if (!stricmp(v->name, "joyaxis2_drift") && !stricmp(valstr, "None")) + return false; + if (!stricmp(v->name, "joyaxis3_drift") && !stricmp(valstr, "None")) + return false; + if (!stricmp(v->name, "joyaxis4_drift") && !stricmp(valstr, "None")) + return false; + + return true; +} + static boolean CV_FilterVarByVersion(consvar_t *v, const char *valstr) { // True means allow the CV change, False means block it @@ -2194,7 +2233,8 @@ static boolean CV_FilterVarByVersion(consvar_t *v, const char *valstr) // axis defaults were changed to be friendly to 360 controllers // if ALL axis settings are defaults, then change them to new values - if (!CV_FilterJoyAxisVars(v, valstr)) + // axis defaults changed again to SDL game controllers + if (!CV_FilterJoyAxisVars2(v, valstr)) return false; } diff --git a/src/d_netcmd.c b/src/d_netcmd.c index e84767c1f..3b8dfd509 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1025,6 +1025,7 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_lookaxis[i]); CV_RegisterVar(&cv_fireaxis[i]); CV_RegisterVar(&cv_driftaxis[i]); + CV_RegisterVar(&cv_lookbackaxis[i]); CV_RegisterVar(&cv_deadzone[i]); CV_RegisterVar(&cv_digitaldeadzone[i]); } diff --git a/src/g_game.c b/src/g_game.c index 51aee1efc..4ac5f53f2 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -345,12 +345,12 @@ INT16 prevmap, nextmap; static UINT8 *savebuffer; static CV_PossibleValue_t joyaxis_cons_t[] = {{0, "None"}, -{1, "X-Axis"}, {2, "Y-Axis"}, {-1, "X-Axis-"}, {-2, "Y-Axis-"}, +{1, "Left X"}, {2, "Left Y"}, {-1, "Left X-"}, {-2, "Left Y-"}, #if JOYAXISSET > 1 -{3, "Z-Axis"}, {4, "X-Rudder"}, {-3, "Z-Axis-"}, {-4, "X-Rudder-"}, +{3, "Right X"}, {4, "Right Y"}, {-3, "Right X-"}, {-4, "Right Y-"}, #endif #if JOYAXISSET > 2 -{5, "Y-Rudder"}, {6, "Z-Rudder"}, {-5, "Y-Rudder-"}, {-6, "Z-Rudder-"}, +{5, "L Trigger"}, {6, "R Trigger"}, {-5, "L Trigger-"}, {-6, "R Trigger-"}, #endif #if JOYAXISSET > 3 {7, "U-Axis"}, {8, "V-Axis"}, {-7, "U-Axis-"}, {-8, "V-Axis-"}, @@ -447,10 +447,10 @@ consvar_t cv_shrinkme[MAXSPLITSCREENPLAYERS] = { }; consvar_t cv_turnaxis[MAXSPLITSCREENPLAYERS] = { - CVAR_INIT ("joyaxis_turn", "X-Axis", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis2_turn", "X-Axis", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis3_turn", "X-Axis", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis4_turn", "X-Axis", CV_SAVE, joyaxis_cons_t, NULL) + CVAR_INIT ("joyaxis_turn", "Left X", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis2_turn", "Left X", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis3_turn", "Left X", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis4_turn", "Left X", CV_SAVE, joyaxis_cons_t, NULL) }; consvar_t cv_moveaxis[MAXSPLITSCREENPLAYERS] = { @@ -468,10 +468,10 @@ consvar_t cv_brakeaxis[MAXSPLITSCREENPLAYERS] = { }; consvar_t cv_aimaxis[MAXSPLITSCREENPLAYERS] = { - CVAR_INIT ("joyaxis_aim", "Y-Axis", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis2_aim", "Y-Axis", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis3_aim", "Y-Axis", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis4_aim", "Y-Axis", CV_SAVE, joyaxis_cons_t, NULL) + CVAR_INIT ("joyaxis_aim", "Left Y", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis2_aim", "Left Y", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis3_aim", "Left Y", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis4_aim", "Left Y", CV_SAVE, joyaxis_cons_t, NULL) }; consvar_t cv_lookaxis[MAXSPLITSCREENPLAYERS] = { @@ -482,17 +482,24 @@ consvar_t cv_lookaxis[MAXSPLITSCREENPLAYERS] = { }; consvar_t cv_fireaxis[MAXSPLITSCREENPLAYERS] = { - CVAR_INIT ("joyaxis_fire", "Z-Axis", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis_fire2", "Z-Axis", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis_fire3", "Z-Axis", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis_fire4", "Z-Axis", CV_SAVE, joyaxis_cons_t, NULL) + CVAR_INIT ("joyaxis_fire", "L Trigger", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis_fire2", "L Trigger", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis_fire3", "L Trigger", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis_fire4", "L Trigger", CV_SAVE, joyaxis_cons_t, NULL) }; consvar_t cv_driftaxis[MAXSPLITSCREENPLAYERS] = { - CVAR_INIT ("joyaxis_drift", "Z-Rudder", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis2_drift", "Z-Rudder", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis3_drift", "Z-Rudder", CV_SAVE, joyaxis_cons_t, NULL), - CVAR_INIT ("joyaxis4_drift", "Z-Rudder", CV_SAVE, joyaxis_cons_t, NULL) + CVAR_INIT ("joyaxis_drift", "R Trigger", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis2_drift", "R Trigger", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis3_drift", "R Trigger", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis4_drift", "R Trigger", CV_SAVE, joyaxis_cons_t, NULL) +}; + +consvar_t cv_lookbackaxis[MAXSPLITSCREENPLAYERS] = { + CVAR_INIT ("joyaxis_lookback", "None", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis2_lookback", "None", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis3_lookback", "None", CV_SAVE, joyaxis_cons_t, NULL), + CVAR_INIT ("joyaxis4_lookback", "None", CV_SAVE, joyaxis_cons_t, NULL) }; static CV_PossibleValue_t zerotoone_cons_t[] = {{0, "MIN"}, {FRACUNIT, "MAX"}, {0, NULL}}; @@ -787,6 +794,9 @@ INT32 PlayerJoyAxis(UINT8 player, axis_input_e axissel) case AXISDRIFT: axisval = cv_driftaxis[player-1].value; break; + case AXISLOOKBACK: + axisval = cv_lookbackaxis[player-1].value; + break; default: return 0; } diff --git a/src/g_game.h b/src/g_game.h index af2fe94b3..0e3226842 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -65,6 +65,7 @@ extern consvar_t cv_aimaxis[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_lookaxis[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_fireaxis[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_driftaxis[MAXSPLITSCREENPLAYERS]; +extern consvar_t cv_lookbackaxis[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_deadzone[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_digitaldeadzone[MAXSPLITSCREENPLAYERS]; diff --git a/src/g_input.c b/src/g_input.c index 746b4b569..c2c9992ca 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -876,32 +876,32 @@ void G_DefineDefaultControls(void) gamecontroldefault[0][i][gc_accelerate ][1] = KEY_JOY1+0; // A gamecontroldefault[0][i][gc_lookback ][1] = KEY_JOY1+2; // X gamecontroldefault[0][i][gc_brake ][1] = KEY_JOY1+1; // B - gamecontroldefault[0][i][gc_fire ][1] = KEY_JOY1+4; // LB - gamecontroldefault[0][i][gc_drift ][1] = KEY_JOY1+5; // RB + gamecontroldefault[0][i][gc_fire ][1] = KEY_JOY1+9; // LB + gamecontroldefault[0][i][gc_drift ][1] = KEY_JOY1+10; // RB gamecontroldefault[0][i][gc_viewpoint ][1] = KEY_JOY1+3; // Y - gamecontroldefault[0][i][gc_pause ][1] = KEY_JOY1+6; // Back - gamecontroldefault[0][i][gc_systemmenu ][0] = KEY_JOY1+7; // Start + gamecontroldefault[0][i][gc_pause ][1] = KEY_JOY1+4; // Back + gamecontroldefault[0][i][gc_systemmenu ][0] = KEY_JOY1+6; // Start gamecontroldefault[0][i][gc_talkkey ][1] = KEY_HAT1+1; // D-Pad Down gamecontroldefault[0][i][gc_scores ][1] = KEY_HAT1+0; // D-Pad Up gamecontroldefault[1][i][gc_accelerate ][0] = KEY_2JOY1+0; // A gamecontroldefault[1][i][gc_lookback ][0] = KEY_2JOY1+2; // X gamecontroldefault[1][i][gc_brake ][0] = KEY_2JOY1+1; // B - gamecontroldefault[1][i][gc_fire ][0] = KEY_2JOY1+4; // LB - gamecontroldefault[1][i][gc_drift ][0] = KEY_2JOY1+5; // RB + gamecontroldefault[1][i][gc_fire ][0] = KEY_2JOY1+9; // LB + gamecontroldefault[1][i][gc_drift ][0] = KEY_2JOY1+10; // RB gamecontroldefault[2][i][gc_accelerate ][0] = KEY_3JOY1+0; // A gamecontroldefault[2][i][gc_lookback ][0] = KEY_3JOY1+2; // X gamecontroldefault[2][i][gc_brake ][0] = KEY_3JOY1+1; // B - gamecontroldefault[2][i][gc_fire ][0] = KEY_3JOY1+4; // LB - gamecontroldefault[2][i][gc_drift ][0] = KEY_3JOY1+5; // RB + gamecontroldefault[2][i][gc_fire ][0] = KEY_3JOY1+9; // LB + gamecontroldefault[2][i][gc_drift ][0] = KEY_3JOY1+10; // RB gamecontroldefault[3][i][gc_accelerate ][0] = KEY_3JOY1+0; // A gamecontroldefault[3][i][gc_lookback ][0] = KEY_3JOY1+2; // X gamecontroldefault[3][i][gc_brake ][0] = KEY_3JOY1+1; // B - gamecontroldefault[3][i][gc_fire ][0] = KEY_3JOY1+4; // LB - gamecontroldefault[3][i][gc_drift ][0] = KEY_3JOY1+5; // RB + gamecontroldefault[3][i][gc_fire ][0] = KEY_3JOY1+9; // LB + gamecontroldefault[3][i][gc_drift ][0] = KEY_3JOY1+10; // RB } } diff --git a/src/m_menu.c b/src/m_menu.c index ccd1beeab..4ca0b0076 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1188,7 +1188,9 @@ static menuitem_t OP_Joystick1Menu[] = {IT_STRING | IT_CVAR, NULL, "Brake" , {.cvar = &cv_brakeaxis[0]} , 60}, {IT_STRING | IT_CVAR, NULL, "Drift" , {.cvar = &cv_driftaxis[0]} , 70}, {IT_STRING | IT_CVAR, NULL, "Use Item" , {.cvar = &cv_fireaxis[0]} , 80}, - {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , {.cvar = &cv_lookaxis[0]} , 90}, + {IT_STRING | IT_CVAR, NULL, "Look Backward" , {.cvar = &cv_lookbackaxis[0]} , 90}, + {IT_STRING | IT_CVAR, NULL, "Spec. Look Up/Down" , {.cvar = &cv_lookaxis[0]} , 100}, + {IT_STRING | IT_CVAR, NULL, "Deadzone" , {.cvar = &cv_deadzone[0]} , 110}, }; static menuitem_t OP_Joystick2Menu[] = @@ -1200,7 +1202,9 @@ static menuitem_t OP_Joystick2Menu[] = {IT_STRING | IT_CVAR, NULL, "Brake" , {.cvar = &cv_brakeaxis[1]} , 60}, {IT_STRING | IT_CVAR, NULL, "Drift" , {.cvar = &cv_driftaxis[1]} , 70}, {IT_STRING | IT_CVAR, NULL, "Use Item" , {.cvar = &cv_fireaxis[1]} , 80}, - {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , {.cvar = &cv_lookaxis[1]} , 90}, + {IT_STRING | IT_CVAR, NULL, "Look Backward" , {.cvar = &cv_lookbackaxis[0]} , 90}, + {IT_STRING | IT_CVAR, NULL, "Spec. Look Up/Down" , {.cvar = &cv_lookaxis[1]} , 100}, + {IT_STRING | IT_CVAR, NULL, "Deadzone" , {.cvar = &cv_deadzone[1]} , 110}, }; static menuitem_t OP_Joystick3Menu[] = @@ -1212,7 +1216,9 @@ static menuitem_t OP_Joystick3Menu[] = {IT_STRING | IT_CVAR, NULL, "Brake" , {.cvar = &cv_brakeaxis[2]} , 60}, {IT_STRING | IT_CVAR, NULL, "Drift" , {.cvar = &cv_driftaxis[2]} , 70}, {IT_STRING | IT_CVAR, NULL, "Use Item" , {.cvar = &cv_fireaxis[2]} , 80}, - {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , {.cvar = &cv_lookaxis[2]} , 90}, + {IT_STRING | IT_CVAR, NULL, "Look Backward" , {.cvar = &cv_lookbackaxis[0]} , 90}, + {IT_STRING | IT_CVAR, NULL, "Spec. Look Up/Down" , {.cvar = &cv_lookaxis[2]} , 100}, + {IT_STRING | IT_CVAR, NULL, "Deadzone" , {.cvar = &cv_deadzone[2]} , 110}, }; static menuitem_t OP_Joystick4Menu[] = @@ -1224,7 +1230,9 @@ static menuitem_t OP_Joystick4Menu[] = {IT_STRING | IT_CVAR, NULL, "Brake" , {.cvar = &cv_brakeaxis[3]} , 60}, {IT_STRING | IT_CVAR, NULL, "Drift" , {.cvar = &cv_driftaxis[3]} , 70}, {IT_STRING | IT_CVAR, NULL, "Use Item" , {.cvar = &cv_fireaxis[3]} , 80}, - {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , {.cvar = &cv_lookaxis[3]} , 90}, + {IT_STRING | IT_CVAR, NULL, "Look Backward" , {.cvar = &cv_lookbackaxis[0]} , 90}, + {IT_STRING | IT_CVAR, NULL, "Spec. Look Up/Down" , {.cvar = &cv_lookaxis[3]} , 100}, + {IT_STRING | IT_CVAR, NULL, "Deadzone" , {.cvar = &cv_deadzone[3]} , 110}, }; static menuitem_t OP_JoystickSetMenu[] = @@ -2576,7 +2584,8 @@ boolean M_Responder(event_t *ev) } else if (menuactive) { - if (ev->type == ev_joystick && ev->data1 == 0 && joywait < I_GetTime()) + tic_t thistime = I_GetTime(); + if (ev->type == ev_joystick) { const INT32 jdeadzone = ((JOYAXISRANGE-1) * cv_deadzone[0].value) >> FRACBITS; if (ev->data3 != INT32_MAX) @@ -2586,12 +2595,12 @@ boolean M_Responder(event_t *ev) if (ev->data3 < 0 && pjoyy >= 0) { ch = KEY_UPARROW; - joywait = I_GetTime() + NEWTICRATE/7; + joywait = thistime + NEWTICRATE/7; } else if (ev->data3 > 0 && pjoyy <= 0) { ch = KEY_DOWNARROW; - joywait = I_GetTime() + NEWTICRATE/7; + joywait = thistime + NEWTICRATE/7; } pjoyy = ev->data3; } @@ -2606,12 +2615,12 @@ boolean M_Responder(event_t *ev) if (ev->data2 < 0 && pjoyx >= 0) { ch = KEY_LEFTARROW; - joywait = I_GetTime() + NEWTICRATE/17; + joywait = thistime + NEWTICRATE/17; } else if (ev->data2 > 0 && pjoyx <= 0) { ch = KEY_RIGHTARROW; - joywait = I_GetTime() + NEWTICRATE/17; + joywait = thistime + NEWTICRATE/17; } pjoyx = ev->data2; } diff --git a/src/y_inter.c b/src/y_inter.c index 62f77fa04..8f37480a7 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -766,7 +766,9 @@ void Y_Ticker(void) if (demo.recording) { - if (demo.savemode == DSM_NOTSAVING && PlayerInputDown(1, gc_lookback)) + INT32 axis = PlayerJoyAxis(AXISLOOKBACK, 1); + + if (demo.savemode == DSM_NOTSAVING && (PlayerInputDown(gc_lookback, 1) || (cv_usejoystick->value && axis > 0))) demo.savemode = DSM_TITLEENTRY; if (demo.savemode == DSM_WILLSAVE || demo.savemode == DSM_WILLAUTOSAVE)