diff --git a/src/d_clisrv.c b/src/d_clisrv.c index be6390341c84db646c455ad4d5e89d4091cca329..75956d65f9b4d35b2b4d120e2a40652fe505f8f3 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -2076,7 +2076,8 @@ static boolean CL_ServerConnectionTicker(boolean viams, const char *tmpsave, tic I_OsPolling(); key = I_GetKey(); - if (key == KEY_ESCAPE || key == KEY_JOY1+1) + // For some reason, gamekeydown[gamecontrol[gc_brake][0]] is always true here, so we're just going to check the second to fourth buttons. + if (key == KEY_ESCAPE || key == KEY_JOY1+1 || key == KEY_JOY1+2 || key == KEY_JOY1+3) { CONS_Printf(M_GetText("Network game synchronization aborted.\n")); // M_StartMessage(M_GetText("Network game synchronization aborted.\n\nPress ESC\n"), NULL, MM_NOTHING); diff --git a/src/g_game.c b/src/g_game.c index 23f41564c8b29bc4d53ce14960bce83af27a9220..32e252fbd581e85cd7da4360bbcf5dd6f3e34cc8 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1177,6 +1177,26 @@ boolean InputDown(INT32 gc, UINT8 p) } } +// Returns true if the hat is pressed for the specified player +// 0 is up, 1 is down, 2 is left, 3 is right +// Basically a hack needed to allow the d-pad on the vote screen. +boolean HatDown(UINT8 dir, UINT8 p) +{ + if (p == 1 && gamekeydown[KEY_HAT1 + dir]) + return true; + + if (p == 2 && gamekeydown[KEY_2HAT1 + dir]) + return true; + + if (p == 3 && gamekeydown[KEY_3HAT1 + dir]) + return true; + + if (p == 4 && gamekeydown[KEY_4HAT1 + dir]) + return true; + + return false; +} + INT32 JoyAxis(axis_input_e axissel, UINT8 p) { switch (p) diff --git a/src/g_game.h b/src/g_game.h index 720d561fb3f8b6911ed9ac8be8ed38e339f09409..52f7f60dbb4b6e384e628496cfe001dc9b1ba450 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -99,6 +99,7 @@ INT16 G_ClipAimingPitch(INT32 *aiming); INT16 G_SoftwareClipAimingPitch(INT32 *aiming); boolean InputDown(INT32 gc, UINT8 p); +boolean HatDown(UINT8 dir, UINT8 p); INT32 JoyAxis(axis_input_e axissel, UINT8 p); extern angle_t localangle, localangle2, localangle3, localangle4; diff --git a/src/y_inter.c b/src/y_inter.c index 379d5cd392f55405239e6e205aa557c8b0567cf8..6073f93ecfd6e99df2886dd2983cf6d03e97917b 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -1318,13 +1318,13 @@ void Y_VoteTicker(void) && !voteclient.playerinfo[i].delay && pickedvote == -1 && votes[p] == -1) { - if (InputDown(gc_aimforward, i+1) || JoyAxis(AXISAIM, i+1) < 0) + if (InputDown(gc_aimforward, i+1) || JoyAxis(AXISAIM, i+1) < 0 || HatDown(0, i+1)) { voteclient.playerinfo[i].selection--; pressed = true; } - if ((InputDown(gc_aimbackward, i+1) || JoyAxis(AXISAIM, i+1) > 0) && !pressed) + if ((InputDown(gc_aimbackward, i+1) || JoyAxis(AXISAIM, i+1) > 0 || HatDown(1, i+1)) && !pressed) { voteclient.playerinfo[i].selection++; pressed = true;