From e1905d85cfd6ad61f9925c42e10bee16e7913603 Mon Sep 17 00:00:00 2001 From: NepDisk Date: Thu, 26 Jun 2025 15:54:06 -0400 Subject: [PATCH] Port Saturn menu additions --- src/m_menu.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 7 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 73e87e3ff..cc09de247 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -332,6 +332,9 @@ CV_PossibleValue_t gametype_cons_t[NUMGAMETYPES+1]; consvar_t cv_newgametype = CVAR_INIT ("newgametype", "Race", CV_HIDEN|CV_CALL, gametype_cons_t, Newgametype_OnChange); +consvar_t cv_showallmaps = CVAR_INIT ("showallmaps", "No", CV_SAVE, CV_YesNo, NULL); +consvar_t cv_showtrackaddon = CVAR_INIT ("showtrackaddon", "Yes", CV_SAVE, CV_YesNo, NULL); + static CV_PossibleValue_t serversort_cons_t[] = { {0,"Ping"}, {1,"Modified State"}, @@ -1630,6 +1633,19 @@ boolean M_Responder(event_t *ev) return true; + case KEY_SPACE: + noFurtherInput = true; + if (!item || !item->cvar) + return true; + + if (item->cvar == &cv_nextmap) + { + S_StartSound(NULL, sfx_menu1); + COM_ImmedExecute("add kartencore 1"); + return true; + } + return true; + case KEY_BACKSPACE: if (!item || !item->cvar || item->cvar == &cv_chooseskin @@ -2002,6 +2018,9 @@ void M_Init(void) COM_AddCommand("manual", Command_Manual_f); + CV_RegisterVar(&cv_showallmaps); + CV_RegisterVar(&cv_showtrackaddon); + // Menu hacks CV_RegisterVar(&cv_dummymenuplayer); CV_RegisterVar(&cv_dummyteam); @@ -2831,17 +2850,17 @@ boolean M_CanShowLevelInList(INT32 mapnum, INT32 gt) switch (levellistmode) { case LLM_CREATESERVER: - // Should the map be hidden? - if (mapheaderinfo[mapnum]->menuflags & LF2_HIDEINMENU && mapnum+1 != gamemap) - return false; - - if (M_MapLocked(mapnum+1)) - return false; // not unlocked - // Check for TOL if (gt >= 0 && !(mapheaderinfo[mapnum]->typeoflevel & G_TOLFlag(gt))) return false; + // Should the map be hidden? + if (mapheaderinfo[mapnum]->menuflags & LF2_HIDEINMENU && mapnum+1 != gamemap) + return cv_showallmaps.value; + + if (M_MapLocked(mapnum+1)) + return cv_showallmaps.value; // not unlocked + return true; /*case LLM_LEVELSELECT: @@ -6401,12 +6420,28 @@ static void M_DrawLevelSelectOnly(INT16 y, boolean selected, boolean leftfade, b patch_t *PictureOfLevel; INT32 x, w, i, oldval, trans, dupadjust = ((vid.width/vid.dupx) - BASEVIDWIDTH)>>1; fixed_t scale = M_GetMapThumbnail(cv_nextmap.value-1, &PictureOfLevel)/4; + menuitem_t *item = currentMenu->numitems ? ¤tMenu->menuitems[itemOn] : NULL; + w = FixedMul(SHORT(PictureOfLevel->width), scale); i = FixedMul(SHORT(PictureOfLevel->height), scale); x = BASEVIDWIDTH/2 - w/2; y = y + 60 - i; + if ((levellistmode != LLM_TIMEATTACK) && (item->cvar == &cv_nextmap)) // so it doesent show in record attack menu + { + char encoretoggle[40] = {0}; + const char *item1 = gamecontrol[0][gc_fire][0] != 0 ? G_KeynumToString(gamecontrol[0][gc_fire][0]) : NULL; + const char *item2 = gamecontrol[0][gc_fire][1] != 0 ? G_KeynumToString(gamecontrol[0][gc_fire][1]) : NULL; + + if (item1 != NULL && item2 != NULL) + snprintf(encoretoggle, 40, "%s/%s - Toggle Encore: %s", item1, item2, cv_kartencore.string); + else + snprintf(encoretoggle, 40, "%s - Toggle Encore: %s", item1 != NULL ? item1 : item2 != NULL ? item2 : "Item", cv_kartencore.string); + + V_DrawThinString(1, BASEVIDHEIGHT-8-1, V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_TRANSLUCENT|V_ALLOWLOWERCASE, encoretoggle); + } + if (selected && skullAnimCounter < 4) trans = 0; else @@ -6414,6 +6449,21 @@ static void M_DrawLevelSelectOnly(INT16 y, boolean selected, boolean leftfade, b V_DrawFill(x-1, y-1, w+2, i+2, trans); // variable reuse... + if (cv_nextmap.value && cv_showtrackaddon.value) + { + char *addonname = wadfiles[WADFILENUM(mapheaderinfo[cv_nextmap.value-1]->lumpnum)]->filename; + INT32 len; + INT32 charlimit = 21 + (dupadjust/5); + nameonly(addonname); + len = strlen(addonname); +#define charsonside 14 + if (len > charlimit) + V_DrawThinString(x+w+5, y+i-8, V_TRANSLUCENT|MENUCAPS, va("%.*s...%s", charsonside, addonname, addonname+((len-charlimit) + charsonside))); // variable reuse... +#undef charsonside + else + V_DrawThinString(x+w+5, y+i-8, V_TRANSLUCENT|MENUCAPS, addonname); // variable reuse... + } + if ((cv_kartencore.value != 1) || gamestate == GS_TIMEATTACK || cv_newgametype.value != GT_RACE) V_DrawFixedPatch(x<