From 4cc587b5b28887349a02fb1856a7cc6afd7aeff6 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 29 Mar 2022 21:08:36 +0100 Subject: [PATCH] * Make the scrolling text on the menu interpolate. * Replace the shitty vidwait option with Sal's shiny new fpscap option. * Update the item toggles menu for all the new items (and re-enable shitsfree for the new empty spots). --- src/k_hud.c | 2 ++ src/k_menu.h | 1 + src/k_menudef.c | 72 +++++++++++++++++++++++++++------------------- src/k_menudraw.c | 75 ++++++++++++++++++++++++++++++++---------------- src/k_menufunc.c | 19 ++++++++---- src/p_user.c | 2 +- 6 files changed, 112 insertions(+), 59 deletions(-) diff --git a/src/k_hud.c b/src/k_hud.c index 206da4e04..1b67abc75 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -662,6 +662,8 @@ const char *K_GetItemPatch(UINT8 item, boolean tiny) return (tiny ? "K_ISMINE" : "K_ITMINE"); case KITEM_LANDMINE: return (tiny ? "K_ISLNDM" : "K_ITLNDM"); + case KITEM_DROPTARGET: + return (tiny ? "K_ISDTRG" : "K_ITDTRG"); case KITEM_BALLHOG: return (tiny ? "K_ISBHOG" : "K_ITBHOG"); case KITEM_SPB: diff --git a/src/k_menu.h b/src/k_menu.h index 8717946dc..4d35962e5 100644 --- a/src/k_menu.h +++ b/src/k_menu.h @@ -861,6 +861,7 @@ void M_DrawEditProfile(void); void M_DrawProfileControls(void); void M_DrawVideoModes(void); void M_DrawItemToggles(void); +extern tic_t shitsfree; // Extras menu: void M_DrawExtrasMovingButton(void); diff --git a/src/k_menudef.c b/src/k_menudef.c index d9084ed58..694a9ade9 100644 --- a/src/k_menudef.c +++ b/src/k_menudef.c @@ -11,6 +11,7 @@ #include "console.h" // console cvars #include "filesrch.h" // addons cvars #include "m_misc.h" // screenshot cvars +#include "r_fps.h" // fps cvars #include "discord.h" // discord rpc cvars // ========================================================================== @@ -578,8 +579,8 @@ menuitem_t OPTIONS_Video[] = {IT_STRING | IT_CVAR | IT_CV_SLIDER, "Gamma", "Adjusts the overall brightness of the game.", NULL, {.cvar = &cv_globalgamma}, 0, 0}, - {IT_STRING | IT_CVAR, "Vertical Sync", "Locks the framerate to your monitor's refresh rate.", - NULL, {.cvar = &cv_vidwait}, 0, 0}, + {IT_STRING | IT_CVAR, "FPS Cap", "Handles the refresh rate of the game (does not affect gamelogic).", + NULL, {.cvar = &cv_fpscap}, 0, 0}, {IT_STRING | IT_CVAR, "Enable Skyboxes", "Turning this off will improve performance at the detriment of visuals for many maps.", NULL, {.cvar = &cv_skybox}, 0, 0}, @@ -926,32 +927,45 @@ menu_t OPTIONS_GameplayDef = { menuitem_t OPTIONS_GameplayItems[] = { // Mostly handled by the drawing function. - {IT_KEYHANDLER | IT_NOTHING, "Sneakers", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_SNEAKER, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Sneakers x3", NULL, NULL, {.routine = M_HandleItemToggles}, KRITEM_TRIPLESNEAKER, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Toggle All", NULL, NULL, {.routine = M_HandleItemToggles}, 0, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Rocket Sneakers", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_ROCKETSNEAKER, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Bananas", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_BANANA, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Bananas x3", NULL, NULL, {.routine = M_HandleItemToggles}, KRITEM_TRIPLEBANANA, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Bananas x10", NULL, NULL, {.routine = M_HandleItemToggles}, KRITEM_TENFOLDBANANA, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Eggman Monitors", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_EGGMAN, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Orbinauts", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_ORBINAUT, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Orbinauts x3", NULL, NULL, {.routine = M_HandleItemToggles}, KRITEM_TRIPLEORBINAUT, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Orbinauts x4", NULL, NULL, {.routine = M_HandleItemToggles}, KRITEM_QUADORBINAUT, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Mines", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_MINE, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Jawz", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_JAWZ, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Jawz x2", NULL, NULL, {.routine = M_HandleItemToggles}, KRITEM_DUALJAWZ, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Ballhogs", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_BALLHOG, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Self-Propelled Bombs", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_SPB, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Invinciblity", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_INVINCIBILITY, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Grow", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_GROW, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Shrink", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_SHRINK, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Thunder Shields", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_THUNDERSHIELD, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Bubble Shields", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_BUBBLESHIELD, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Flame Shields", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_FLAMESHIELD, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Hyudoros", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_HYUDORO, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Pogo Springs", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_POGOSPRING, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Super Rings", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_SUPERRING, 0}, - {IT_KEYHANDLER | IT_NOTHING, "Kitchen Sinks", NULL, NULL, {.routine = M_HandleItemToggles}, KITEM_KITCHENSINK, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Super Rings", NULL, {.routine = M_HandleItemToggles}, KITEM_SUPERRING, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Self-Propelled Bombs", NULL, {.routine = M_HandleItemToggles}, KITEM_SPB, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Eggman Marks", NULL, {.routine = M_HandleItemToggles}, KITEM_EGGMAN, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Toggle All", NULL, {.routine = M_HandleItemToggles}, 0, 0}, + + {IT_KEYHANDLER | IT_NOTHING, NULL, "Sneakers", NULL, {.routine = M_HandleItemToggles}, KITEM_SNEAKER, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Sneakers x2", NULL, {.routine = M_HandleItemToggles}, KRITEM_DUALSNEAKER, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Sneakers x3", NULL, {.routine = M_HandleItemToggles}, KRITEM_TRIPLESNEAKER, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Rocket Sneakers", NULL, {.routine = M_HandleItemToggles}, KITEM_ROCKETSNEAKER, 0}, + + {IT_KEYHANDLER | IT_NOTHING, NULL, "Bananas", NULL, {.routine = M_HandleItemToggles}, KITEM_BANANA, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Bananas x3", NULL, {.routine = M_HandleItemToggles}, KRITEM_TRIPLEBANANA, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Bananas x10", NULL, {.routine = M_HandleItemToggles}, KRITEM_TENFOLDBANANA, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Mines", NULL, {.routine = M_HandleItemToggles}, KITEM_MINE, 0}, + + {IT_KEYHANDLER | IT_NOTHING, NULL, "Orbinauts", NULL, {.routine = M_HandleItemToggles}, KITEM_ORBINAUT, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Orbinauts x3", NULL, {.routine = M_HandleItemToggles}, KRITEM_TRIPLEORBINAUT, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Orbinauts x4", NULL, {.routine = M_HandleItemToggles}, KRITEM_QUADORBINAUT, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Drop Targets", NULL, {.routine = M_HandleItemToggles}, KITEM_DROPTARGET, sfx_s258}, + + {IT_KEYHANDLER | IT_NOTHING, NULL, "Jawz", NULL, {.routine = M_HandleItemToggles}, KITEM_JAWZ, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Jawz x2", NULL, {.routine = M_HandleItemToggles}, KRITEM_DUALJAWZ, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Ballhogs", NULL, {.routine = M_HandleItemToggles}, KITEM_BALLHOG, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Land Mines", NULL, {.routine = M_HandleItemToggles}, KITEM_LANDMINE, 0}, + + {IT_KEYHANDLER | IT_NOTHING, NULL, "Thunder Shields", NULL, {.routine = M_HandleItemToggles}, KITEM_THUNDERSHIELD, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Bubble Shields", NULL, {.routine = M_HandleItemToggles}, KITEM_BUBBLESHIELD, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Flame Shields", NULL, {.routine = M_HandleItemToggles}, KITEM_FLAMESHIELD, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Hyudoros", NULL, {.routine = M_HandleItemToggles}, KITEM_HYUDORO, 0}, + + {IT_KEYHANDLER | IT_NOTHING, NULL, "Invinciblity", NULL, {.routine = M_HandleItemToggles}, KITEM_INVINCIBILITY, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Grow", NULL, {.routine = M_HandleItemToggles}, KITEM_GROW, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Shrink", NULL, {.routine = M_HandleItemToggles}, KITEM_SHRINK, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, NULL, NULL, {.routine = M_HandleItemToggles}, 255, 0}, + + {IT_KEYHANDLER | IT_NOTHING, NULL, "Pogo Springs", NULL, {.routine = M_HandleItemToggles}, KITEM_POGOSPRING, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Kitchen Sinks", NULL, {.routine = M_HandleItemToggles}, KITEM_KITCHENSINK, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, NULL, NULL, {.routine = M_HandleItemToggles}, 255, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, NULL, NULL, {.routine = M_HandleItemToggles}, 255, 0} }; menu_t OPTIONS_GameplayItemsDef = { @@ -959,7 +973,7 @@ menu_t OPTIONS_GameplayItemsDef = { &OPTIONS_GameplayDef, 0, OPTIONS_GameplayItems, - 0, 75, + 14, 40, SKINCOLOR_SCARLET, 0, 2, 10, M_DrawItemToggles, diff --git a/src/k_menudraw.c b/src/k_menudraw.c index afa3f9f2a..375113bd4 100644 --- a/src/k_menudraw.c +++ b/src/k_menudraw.c @@ -150,8 +150,9 @@ static void M_DrawSlider(INT32 x, INT32 y, const consvar_t *cv, boolean ontop) static patch_t *addonsp[NUM_EXT+5]; -static UINT32 bgTextScroll = 0; -static UINT32 bgImageScroll = 0; +static fixed_t bgText1Scroll = 0; +static fixed_t bgText2Scroll = 0; +static fixed_t bgImageScroll = 0; static char bgImageName[9]; #define MENUBG_TEXTSCROLL 6 @@ -174,7 +175,7 @@ void M_UpdateMenuBGImage(boolean forceReset) if (forceReset == false && strcmp(bgImageName, oldName)) { - bgImageScroll = (BASEVIDWIDTH / 2) / MENUBG_IMAGESCROLL; + bgImageScroll = (BASEVIDWIDTH / 2)*FRACUNIT; } } @@ -183,34 +184,41 @@ void M_DrawMenuBackground(void) patch_t *text1 = W_CachePatchName("MENUBGT1", PU_CACHE); patch_t *text2 = W_CachePatchName("MENUBGT2", PU_CACHE); - INT32 text1loop = SHORT(text1->height); - INT32 text2loop = SHORT(text2->width); - - fixed_t text1scroll = -((bgTextScroll * MENUBG_TEXTSCROLL) % text1loop) * FRACUNIT; - fixed_t text2scroll = -((bgTextScroll * MENUBG_TEXTSCROLL) % text2loop) * FRACUNIT; + fixed_t text1loop = SHORT(text1->height)*FRACUNIT; + fixed_t text2loop = SHORT(text2->width)*FRACUNIT; V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUBG4", PU_CACHE), NULL); - V_DrawFixedPatch(-(bgImageScroll * MENUBG_IMAGESCROLL) * FRACUNIT, 0, FRACUNIT, 0, W_CachePatchName("MENUBG1", PU_CACHE), NULL); - V_DrawFixedPatch(-(bgImageScroll * MENUBG_IMAGESCROLL) * FRACUNIT, 0, FRACUNIT, 0, W_CachePatchName(bgImageName, PU_CACHE), NULL); + V_DrawFixedPatch(-bgImageScroll, 0, FRACUNIT, 0, W_CachePatchName("MENUBG1", PU_CACHE), NULL); + V_DrawFixedPatch(-bgImageScroll, 0, FRACUNIT, 0, W_CachePatchName(bgImageName, PU_CACHE), NULL); V_DrawFixedPatch(0, (BASEVIDHEIGHT + 16) * FRACUNIT, FRACUNIT, V_TRANSLUCENT, W_CachePatchName("MENUBG2", PU_CACHE), NULL); - V_DrawFixedPatch(text2scroll, (BASEVIDHEIGHT-8) * FRACUNIT, + V_DrawFixedPatch(-bgText2Scroll, (BASEVIDHEIGHT-8) * FRACUNIT, FRACUNIT, V_TRANSLUCENT, text2, NULL); - V_DrawFixedPatch(text2scroll + (text2loop * FRACUNIT), (BASEVIDHEIGHT-8) * FRACUNIT, + V_DrawFixedPatch(-bgText2Scroll + text2loop, (BASEVIDHEIGHT-8) * FRACUNIT, FRACUNIT, V_TRANSLUCENT, text2, NULL); - V_DrawFixedPatch(8 * FRACUNIT, text1scroll, + V_DrawFixedPatch(8 * FRACUNIT, -bgText1Scroll, FRACUNIT, V_TRANSLUCENT, text1, NULL); - V_DrawFixedPatch(8 * FRACUNIT, text1scroll + (text1loop * FRACUNIT), + V_DrawFixedPatch(8 * FRACUNIT, -bgText1Scroll + text1loop, FRACUNIT, V_TRANSLUCENT, text1, NULL); - bgTextScroll++; + bgText1Scroll += (MENUBG_TEXTSCROLL*rendertimefrac); + while (bgText1Scroll > text1loop) + bgText1Scroll -= text1loop; + + bgText2Scroll += (MENUBG_TEXTSCROLL*rendertimefrac); + while (bgText2Scroll > text2loop) + bgText2Scroll -= text2loop; if (bgImageScroll > 0) { - bgImageScroll--; + bgImageScroll -= (MENUBG_IMAGESCROLL*rendertimefrac); + if (bgImageScroll < 0) + { + bgImageScroll = 0; + } } } @@ -2608,17 +2616,17 @@ void M_DrawVideoModes(void) } // Gameplay Item Tggles: -static tic_t shitsfree = 0; +tic_t shitsfree = 0; void M_DrawItemToggles(void) { - const INT32 edges = 9; - const INT32 height = 3; + const INT32 edges = 8; + const INT32 height = 4; const INT32 spacing = 35; const INT32 column = itemOn/height; //const INT32 row = itemOn%height; INT32 leftdraw, rightdraw, totaldraw; - INT32 x = currentMenu->x + menutransition.tics*64, y = currentMenu->y+(spacing/4); + INT32 x = currentMenu->x + menutransition.tics*64, y = currentMenu->y; INT32 onx = 0, ony = 0; consvar_t *cv; INT32 i, translucent, drawnum; @@ -2653,7 +2661,7 @@ void M_DrawItemToggles(void) const INT32 thisitem = (i*height)+j; if (thisitem >= currentMenu->numitems) - continue; + break; if (thisitem == itemOn) { @@ -2667,6 +2675,14 @@ void M_DrawItemToggles(void) { V_DrawScaledPatch(x, y, 0, W_CachePatchName("K_ISBG", PU_CACHE)); V_DrawScaledPatch(x, y, 0, W_CachePatchName("K_ISTOGL", PU_CACHE)); + y += spacing; + continue; + } + + if (currentMenu->menuitems[thisitem].mvar1 == 255) + { + V_DrawScaledPatch(x, y, 0, W_CachePatchName("K_ISBGD", PU_CACHE)); + y += spacing; continue; } @@ -2713,7 +2729,7 @@ void M_DrawItemToggles(void) } x += spacing; - y = currentMenu->y+(spacing/4); + y = currentMenu->y; } { @@ -2722,6 +2738,19 @@ void M_DrawItemToggles(void) V_DrawScaledPatch(onx-1, ony-2, 0, W_CachePatchName("K_ITBG", PU_CACHE)); V_DrawScaledPatch(onx-1, ony-2, 0, W_CachePatchName("K_ITTOGL", PU_CACHE)); } + else if (currentMenu->menuitems[itemOn].mvar1 == 255) + { + V_DrawScaledPatch(onx-1, ony-2, 0, W_CachePatchName("K_ITBGD", PU_CACHE)); + if (shitsfree) + { + INT32 trans = V_TRANSLUCENT; + if (shitsfree-1 > TICRATE-5) + trans = ((10-TICRATE)+shitsfree-1)<menuitems[itemOn].mvar1-1]; @@ -2764,8 +2793,6 @@ void M_DrawItemToggles(void) if (shitsfree) shitsfree--; - - V_DrawCenteredString(BASEVIDWIDTH/2 + menutransition.tics*48, currentMenu->y, highlightflags, va("* %s *", currentMenu->menuitems[itemOn].text)); } diff --git a/src/k_menufunc.c b/src/k_menufunc.c index 361e9e766..b2521ba21 100644 --- a/src/k_menufunc.c +++ b/src/k_menufunc.c @@ -3553,6 +3553,11 @@ void M_OptionsTick(void) optionsmenu.toptx = 420; optionsmenu.topty = 70+1; } + else if (currentMenu == &OPTIONS_GameplayItemsDef) + { + optionsmenu.toptx = -160; // off the side of the screen + optionsmenu.topty = 50; + } else { optionsmenu.toptx = 160; @@ -4118,7 +4123,7 @@ void M_MapProfileControl(event_t *ev) void M_HandleItemToggles(INT32 choice) { - const INT32 width = 9, height = 3; + const INT32 width = 8, height = 4; INT32 column = itemOn/height, row = itemOn%height; INT16 next; UINT8 i; @@ -4127,7 +4132,6 @@ void M_HandleItemToggles(INT32 choice) (void) choice; - if (menucmd[pid].dpad_lr > 0) { S_StartSound(NULL, sfx_menu1); @@ -4187,7 +4191,6 @@ void M_HandleItemToggles(INT32 choice) else if (M_MenuButtonPressed(pid, MBT_A) || M_MenuButtonPressed(pid, MBT_X)) { M_SetMenuDelay(pid); -#ifdef ITEMTOGGLEBOTTOMRIGHT if (currentMenu->menuitems[itemOn].mvar1 == 255) { //S_StartSound(NULL, sfx_s26d); @@ -4198,7 +4201,6 @@ void M_HandleItemToggles(INT32 choice) } } else -#endif if (currentMenu->menuitems[itemOn].mvar1 == 0) { INT32 v = cv_sneaker.value; @@ -4211,7 +4213,14 @@ void M_HandleItemToggles(INT32 choice) } else { - S_StartSound(NULL, sfx_s1ba); + if (currentMenu->menuitems[itemOn].mvar2) + { + S_StartSound(NULL, currentMenu->menuitems[itemOn].mvar2); + } + else + { + S_StartSound(NULL, sfx_s1ba); + } CV_AddValue(KartItemCVars[currentMenu->menuitems[itemOn].mvar1-1], 1); } } diff --git a/src/p_user.c b/src/p_user.c index eb1ef31fd..2f3c13c4c 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -181,7 +181,7 @@ fixed_t P_ReturnThrustY(mobj_t *mo, angle_t angle, fixed_t move) boolean P_AutoPause(void) { // Don't pause even on menu-up or focus-lost in netgames or record attack - if (netgame || modeattacking || gamestate == GS_TITLESCREEN) + if (netgame || modeattacking || gamestate == GS_TITLESCREEN || gamestate == GS_MENU || con_startup) return false; return ((menuactive && !demo.playback) || ( window_notinfocus && cv_pauseifunfocused.value ));