From ff639004d42afd4bd4ed968beb852d11341b441b Mon Sep 17 00:00:00 2001 From: yamamama Date: Wed, 4 Feb 2026 19:37:36 -0500 Subject: [PATCH] HUD rescaling for larger resolutions Lifted from Saturn: https://github.com/Indev450/SRB2Kart-Saturn/commit/2348e3b73e4382f4afb285cabb1dd572ea000d6ehttps://github.com/Indev450/SRB2Kart-Saturn/commit/2348e3b73e4382f4afb285cabb1dd572ea000d6e --- src/d_main.cpp | 1 + src/screen.c | 9 +++++++++ src/screen.h | 1 + src/v_video.c | 10 ++++++++++ 4 files changed, 21 insertions(+) diff --git a/src/d_main.cpp b/src/d_main.cpp index 0a2a5be89..0507aa8d7 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -1666,6 +1666,7 @@ void D_SRB2Main(void) M_Init(); if (!dedicated) { + CV_RegisterVar(&cv_highreshudscale); CV_RegisterVar(&cv_ticrate); CV_RegisterVar(&cv_accuratefps); CV_RegisterVar(&cv_constextsize); diff --git a/src/screen.c b/src/screen.c index 675c76e3e..523463139 100644 --- a/src/screen.c +++ b/src/screen.c @@ -68,6 +68,15 @@ consvar_t cv_shittyscreen = CVAR_INIT ("televisionsignal", "Okay", 0, shittyscre static CV_PossibleValue_t votescale_cons_t[] = {{0, "Vanilla"}, {1, "Adaptive"}, {2, "VerticalFill"}, {3, "HorizontalFill"}, {0, NULL}}; consvar_t cv_votebgscaling = CVAR_INIT ("votebgscaling", "Adaptive", CV_SAVE, votescale_cons_t, NULL); +static void Highreshudscale_OnChange(void); +static CV_PossibleValue_t highreshudscale_cons_t[] = {{4*FRACUNIT/5, "MIN"}, {6*FRACUNIT/5, "MAX"}, {0, NULL}}; +consvar_t cv_highreshudscale = CVAR_INIT ("highreshudscale", "1", CV_SAVE|CV_FLOAT|CV_CALL|CV_NOINIT|CV_NOSHOWHELP, highreshudscale_cons_t, Highreshudscale_OnChange); + +static void Highreshudscale_OnChange(void) +{ + SCR_Recalc(); +} + CV_PossibleValue_t cv_renderer_t[] = { {1, "Software"}, #ifdef HWRENDER diff --git a/src/screen.h b/src/screen.h index 539ede6d4..7a5ad7420 100644 --- a/src/screen.h +++ b/src/screen.h @@ -96,6 +96,7 @@ void SCR_ChangeRenderer(void); extern CV_PossibleValue_t cv_renderer_t[]; extern consvar_t cv_scr_width, cv_scr_height, cv_scr_depth, cv_renderview, cv_renderer, cv_renderhitbox, cv_fullscreen; +extern consvar_t cv_highreshudscale; extern consvar_t cv_vhseffect, cv_shittyscreen, cv_votebgscaling; extern consvar_t cv_parallelsoftware; extern consvar_t cv_accuratefps; diff --git a/src/v_video.c b/src/v_video.c index d9fed902d..8d15fe8b5 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -4128,6 +4128,16 @@ void V_Recalc(void) #endif vid.fdupx = vid.fdupy = (vid.fdupx < vid.fdupy ? vid.fdupx : vid.fdupy); + I_OutputMsg("width: %d, height: %d\n", vid.width, vid.height); + + if (loaded_config // this could use a better name, since it is more and indicator that early startup is done and its safe to do sketchy shit now :chaosleep: + && (vid.width > 720) && (vid.height > 1280)) // ehhhh well this thing has so many issues, so ill lock it to higher resolutions instead + { + + vid.dupx = vid.dupy = FixedDiv(vid.dupy, cv_highreshudscale.value); + vid.fdupx = vid.fdupy = FixedDiv(vid.fdupy, cv_highreshudscale.value); + } + vid.meddupx = (UINT8)(vid.dupx >> 1) + 1; vid.meddupy = (UINT8)(vid.dupy >> 1) + 1;