From 9de31cf2e7ac38d5245419c7618a39c8cff0bc7e Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 3 Dec 2018 06:59:31 -0500 Subject: [PATCH] Make pause key bring up the menu if it's a joy button * Add "Pause" entry to multiplayer control panel to give joy users a way to pause in netgames --- src/m_menu.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/m_menu.c b/src/m_menu.c index 838823278..7a06053f2 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -223,6 +223,7 @@ static void M_SelectableClearMenus(INT32 choice); static void M_Retry(INT32 choice); static void M_EndGame(INT32 choice); static void M_MapChange(INT32 choice); +static void M_Pause(INT32 choice); static void M_ChangeLevel(INT32 choice); static void M_ConfirmSpectate(INT32 choice); static void M_ConfirmEnterGame(INT32 choice); @@ -478,6 +479,8 @@ typedef enum // --------------------- static menuitem_t MPauseMenu[] = { + {IT_STRING | IT_CALL, NULL, "Pause", M_Pause, 0}, + {IT_STRING | IT_SUBMENU, NULL, "Scramble Teams...", &MISC_ScrambleTeamDef, 16}, {IT_STRING | IT_CALL, NULL, "Switch Map..." , M_MapChange, 24}, @@ -497,7 +500,8 @@ static menuitem_t MPauseMenu[] = typedef enum { - mpause_scramble = 0, + mpause_pause = 0, + mpause_scramble, mpause_switchmap, mpause_continue, @@ -2095,6 +2099,11 @@ boolean M_Responder(event_t *ev) { ch = ev->data1; + // Pause by joystick means you bring up the menu + if (ch >= KEY_JOY1 && ch < KEY_JOY1 + JOYBUTTONS + JOYHATS*4 && + (ch == gamecontrol[gc_pause][0] || ch == gamecontrol[gc_pause][1])) + ch = KEY_ESCAPE; + // added 5-2-98 remap virtual keys (mouse & joystick buttons) switch (ch) { @@ -2190,6 +2199,11 @@ boolean M_Responder(event_t *ev) // F-Keys if (!menuactive) { + // Pause by joystick means you bring up the menu + if (ch >= KEY_JOY1 && ch < KEY_JOY1 + JOYBUTTONS + JOYHATS*4 && + (ch == gamecontrol[gc_pause][0] || ch == gamecontrol[gc_pause][1])) + ch = KEY_ESCAPE; + noFurtherInput = true; switch (ch) { @@ -2577,6 +2591,7 @@ void M_StartControlPanel(void) } else // multiplayer { + MPauseMenu[mpause_pause].status = IT_DISABLED; MPauseMenu[mpause_switchmap].status = IT_DISABLED; MPauseMenu[mpause_scramble].status = IT_DISABLED; MPauseMenu[mpause_psetupsplit].status = IT_DISABLED; @@ -2589,8 +2604,15 @@ void M_StartControlPanel(void) if ((server || adminplayer == consoleplayer)) { MPauseMenu[mpause_switchmap].status = IT_STRING | IT_CALL; + if (!splitscreen) + MPauseMenu[mpause_pause].status = IT_STRING | IT_CALL; // server admin only if (G_GametypeHasTeams()) + { MPauseMenu[mpause_scramble].status = IT_STRING | IT_SUBMENU; + MPauseMenu[mpause_pause].alphaKey = MPauseMenu[mpause_scramble].alphaKey - 16; // adjust y + } + else + MPauseMenu[mpause_pause].alphaKey = MPauseMenu[mpause_switchmap].alphaKey - 16; // adjust y } if (splitscreen) @@ -6250,6 +6272,13 @@ static void M_MapChange(INT32 choice) M_SetupNextMenu(&MISC_ChangeLevelDef); } +static void M_Pause(INT32 choice) +{ + (void)choice; + + COM_ImmedExecute("pause"); +} + static void M_StartSplitServerMenu(INT32 choice) { (void)choice;