diff --git a/src/m_menu.c b/src/m_menu.c index c491396dc..6a1d6b4a6 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -225,6 +225,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); @@ -480,6 +481,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}, @@ -499,7 +502,8 @@ static menuitem_t MPauseMenu[] = typedef enum { - mpause_scramble = 0, + mpause_pause = 0, + mpause_scramble, mpause_switchmap, mpause_continue, @@ -2098,6 +2102,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) { @@ -2212,6 +2221,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) { @@ -2599,6 +2613,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; @@ -2611,8 +2626,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) @@ -6272,6 +6294,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;