Implement controller stuff

This commit is contained in:
NepDisk 2024-08-07 15:27:48 -04:00
parent fd31992b72
commit 699e607ec7
7 changed files with 103 additions and 40 deletions

View file

@ -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;
}

View file

@ -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]);
}

View file

@ -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;
}

View file

@ -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];

View file

@ -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
}
}

View file

@ -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;
}

View file

@ -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)