diff --git a/engine/client/r_2d.c b/engine/client/r_2d.c index d6c6f9752..1c4c49c05 100644 --- a/engine/client/r_2d.c +++ b/engine/client/r_2d.c @@ -58,7 +58,9 @@ extern cvar_t gl_conback; extern cvar_t gl_font, con_textfont; extern cvar_t r_font_postprocess_outline; extern cvar_t gl_screenangle; +extern cvar_t vid_minsize; extern cvar_t vid_conautoscale; +extern cvar_t vid_baseheight; extern cvar_t vid_conheight; extern cvar_t vid_conwidth; extern cvar_t con_textsize; @@ -169,6 +171,8 @@ void R2D_Shutdown(void) Cvar_Unhook(&gl_screenangle); Cvar_Unhook(&vid_conheight); Cvar_Unhook(&vid_conwidth); + Cvar_Unhook(&vid_baseheight); + Cvar_Unhook(&vid_minsize); Cvar_Unhook(&crosshair); Cvar_Unhook(&crosshairimage); @@ -444,6 +448,8 @@ void R2D_Init(void) Cvar_Hook(&gl_screenangle, R2D_ScreenAngle_Callback); Cvar_Hook(&vid_conheight, R2D_Conheight_Callback); Cvar_Hook(&vid_conwidth, R2D_Conwidth_Callback); + Cvar_Hook(&vid_baseheight, R2D_Conautoscale_Callback); + Cvar_Hook(&vid_minsize, R2D_Conautoscale_Callback); Cvar_Hook(&crosshair, R2D_Crosshair_Callback); Cvar_Hook(&crosshairimage, R2D_CrosshairImage_Callback); @@ -1318,10 +1324,26 @@ void R2D_Console_Resize(void) if (!cwidth && !cheight) { - if (vid.dpi_y) - cheight = (480 * 96) / vid.dpi_y; + int i = 0, nh; + int biggest = 0; + //find the biggest artwork size that won't get minified + for (i = 0; i < countof(vid_baseheight.vec4); i++) + if (biggest < vid_baseheight.vec4[i] && vid_baseheight.vec4[i] < vid.rotpixelheight && vid_baseheight.vec4[i] >= vid_minsize.vec4[1]) + biggest = vid_baseheight.vec4[i]; + if (biggest) + { + nh = vid.rotpixelheight; + while ((nh>>1) >= biggest) + nh >>= 1; + cheight = nh; + } else - cheight = 480; + { + if (vid.dpi_y) + cheight = (480 * 96) / vid.dpi_y; + else + cheight = 480; + } } if (cheight && !cwidth && vid.rotpixelheight) cwidth = (cheight*vid.rotpixelwidth)/vid.rotpixelheight; @@ -1336,6 +1358,12 @@ void R2D_Console_Resize(void) cwidth*=xratio; cheight*=yratio; + //never go lower than the mod's minimum, UI elements would end up off-screen. + if (cwidth < vid_minsize.vec4[0]) + cwidth = vid_minsize.vec4[0]; + if (cheight < vid_minsize.vec4[1]) + cheight = vid_minsize.vec4[1]; + //the engine has its own requirements too, sorry, though its unlikely for mods go lower. if (cwidth < 320) cwidth = 320; if (cheight < 200) diff --git a/engine/client/renderer.c b/engine/client/renderer.c index c07631509..034fc18d3 100644 --- a/engine/client/renderer.c +++ b/engine/client/renderer.c @@ -277,6 +277,9 @@ cvar_t vid_conautoscale = CVARAF ("vid_conautoscale", "2", cvar_t vid_conautoscale = CVARAFD ("vid_conautoscale", "0", "scr_conscale"/*qs*/ /*"vid_conscale"ez*/, CVAR_ARCHIVE | CVAR_RENDERERCALLBACK, "Changes the 2d scale, including hud, console, and fonts. To specify an explicit font size, divide the desired 'point' size by 8 to get the scale. High values will be clamped to maintain at least a 320*200 virtual size."); #endif +cvar_t vid_baseheight = CVARD ("vid_baseheight", "", "Specifies a mod's target height and used only when the 2d scale is not otherwise forced. Unlike vid_conheight the size is not fixed and will be padded to avoid inconsistent filtering."); +cvar_t vid_minsize = CVARFD ("vid_minsize", "320 200", + CVAR_NOTFROMSERVER, "Specifies a mod's minimum virtual size."); cvar_t vid_conheight = CVARF ("vid_conheight", "0", CVAR_ARCHIVE); cvar_t vid_conwidth = CVARF ("vid_conwidth", "0", @@ -791,9 +794,11 @@ void Renderer_Init(void) Cvar_Register (&vid_bpp, VIDCOMMANDGROUP); Cvar_Register (&vid_depthbits, VIDCOMMANDGROUP); + Cvar_Register (&vid_baseheight, VIDCOMMANDGROUP); Cvar_Register (&vid_conwidth, VIDCOMMANDGROUP); Cvar_Register (&vid_conheight, VIDCOMMANDGROUP); Cvar_Register (&vid_conautoscale, VIDCOMMANDGROUP); + Cvar_Register (&vid_minsize, VIDCOMMANDGROUP); Cvar_Register (&vid_triplebuffer, VIDCOMMANDGROUP); Cvar_Register (&vid_width, VIDCOMMANDGROUP); diff --git a/engine/common/common.c b/engine/common/common.c index ccad87dd3..e4e4f63ac 100644 --- a/engine/common/common.c +++ b/engine/common/common.c @@ -7606,11 +7606,11 @@ void InfoBuf_Print(infobuf_t *info, const char *lineprefix) val = info->keys[k].value; if (info->keys[k].size != strlen(info->keys[k].value)) - Con_Printf ("%s%-20s%s\n", lineprefix, key, partial, (unsigned int)info->keys[k].size); + Con_Printf ("%s"S_COLOR_GREEN"%-20s"S_COLOR_RED"%s\n", lineprefix, key, partial, (unsigned int)info->keys[k].size); else if (info->keys[k].size > 64 || strchr(val, '\n') || strchr(val, '\r') || strchr(val, '\t')) - Con_Printf ("%s%-20s%s<%u BYTES>\n", lineprefix, key, partial, (unsigned int)info->keys[k].size); + Con_Printf ("%s"S_COLOR_GREEN"%-20s"S_COLOR_RED"%s<%u BYTES>\n", lineprefix, key, partial, (unsigned int)info->keys[k].size); else - Con_Printf ("%s%-20s%s%s\n", lineprefix, key, partial, val); + Con_Printf ("%s"S_COLOR_GREEN"%-20s"S_COLOR_WHITE"%s%s\n", lineprefix, key, partial, val); } } void InfoBuf_Enumerate (infobuf_t *info, void *ctx, void(*cb)(void *ctx, const char *key, const char *value))