diff --git a/src/d_main.cpp b/src/d_main.cpp index efc2b9931..1805cfc3d 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -103,7 +103,7 @@ #define ASSET_HASH_TEXTURES_KART 0xb4211b2f32b6a291 #define ASSET_HASH_CHARS_KART 0x1e68a3e01aa5c68b #define ASSET_HASH_MAPS_KART 0x2be29dfb3a146dfa -#define ASSET_HASH_MAIN_PK3 0x4ea7e79e2d5d0d63 +#define ASSET_HASH_MAIN_PK3 0x2b05ed51a1fcbe18 #define ASSET_HASH_MAPPATCH_PK3 0x1745690024efbaf8 #define ASSET_HASH_BONUSCHARS_KART 0x60e6f13d822a7461 #ifdef USE_PATCH_FILE diff --git a/src/k_hud.c b/src/k_hud.c index dcad70f3a..49d55d595 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -115,6 +115,9 @@ consvar_t cv_draftindicator = CVAR_INIT ("draftindicator", "On", CV_SAVE, CV_OnO consvar_t cv_showstats = CVAR_INIT ("showstats", "On", CV_SAVE, CV_OnOff, NULL); +// make char potraits use their high-res version instead +consvar_t cv_highresportrait = CVAR_INIT ("highresportrait", "Off", CV_SAVE, CV_OnOff, NULL); + typedef enum { NT_OFF = 0, @@ -292,6 +295,7 @@ void K_RegisterKartHUDStuff(void) CV_RegisterVar(&cv_newtabranking); CV_RegisterVar(&cv_draftindicator); CV_RegisterVar(&cv_showstats); + CV_RegisterVar(&cv_highresportrait); // k_items.c CV_RegisterVar(&cv_fancyroulette); @@ -818,6 +822,16 @@ skincolornum_t K_GetHudColor(void) return ((stplyr && gamestate == GS_LEVEL) ? stplyr->skincolor : cv_playercolor[0].value); } +static boolean K_IsHighResolution(void) +{ + return (vid.width >= 640 && vid.height >= 400); +} + +boolean K_UseHighResPortraits(void) +{ + return (cv_highresportrait.value && K_IsHighResolution()); +} + static boolean K_BigLapSticker(void) { return ((cv_numlaps.value > 9) && (!stplyr->exiting)); @@ -2295,7 +2309,9 @@ static boolean K_drawKartPositionFaces(void) else colormap = R_GetTranslationColormap(players[rankplayer[i]].skin, players[rankplayer[i]].mo->color, GTC_CACHE); - patch_t *facerank = faceprefix[players[rankplayer[i]].skin][FACE_RANK]; + boolean hires = K_UseHighResPortraits(); + + patch_t *facerank = faceprefix[players[rankplayer[i]].skin][hires ? FACE_WANTED : FACE_RANK]; offsets.x = facerank->leftoffset; offsets.y = facerank->topoffset; @@ -2314,14 +2330,14 @@ static boolean K_drawKartPositionFaces(void) } #endif - V_DrawMappedPatch(FACE_X + offsets.x, Y + offsets.y, V_HUDTRANS|V_SNAPTOLEFT, facerank, colormap); + V_DrawFixedPatch((FACE_X + offsets.x)<leftoffset; + INT16 topoffset = facerank->topoffset; - V_DrawMappedPatch(x+facerank->leftoffset, y-4+facerank->topoffset, 0, facerank, colormap); + V_DrawFixedPatch((x+leftoffset)<rules & GTR_BUMPERS) && players[tab[i].num].bumper > 0) -- not enough space for this { @@ -3041,8 +3060,11 @@ static void K_drawKartStatsnLives(void) // We specify stplyr->skincolor since we want it to match the player and not the hud color. UINT8 *colormap = R_GetTranslationColormap(stplyr->skin, stplyr->skincolor, GTC_CACHE); - patch_t *facerank = faceprefix[stplyr->skin][FACE_RANK]; - V_DrawMappedPatch(fx+59+offsetx+facerank->leftoffset, fy-16+offsety+facerank->topoffset, V_HUDTRANS|splitflags, facerank, colormap); + boolean hires = K_UseHighResPortraits(); + patch_t *facerank = faceprefix[stplyr->skin][hires ? FACE_WANTED : FACE_RANK]; + INT16 topoffset = hires ? facerank->topoffset / 2 : facerank->topoffset; + INT16 leftoffset = hires ? facerank->leftoffset / 2 : facerank->leftoffset; + V_DrawFixedPatch((fx+59+offsetx+leftoffset)<lives >= 0 && uselives) V_DrawScaledPatch(fx+77+offsetx, fy-11+offsety, V_HUDTRANS|splitflags, kp_facenum[(stplyr->lives % 10)]); // make sure this doesn't overflow OR underflow @@ -3059,8 +3081,8 @@ static void K_drawKartStatsnLives(void) colormapstat2 = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_MUSTARD, GTC_CACHE); } - V_DrawFixedPatch((fx+56+offsetx+facerank->leftoffset)<< FRACBITS, (fy-19+offsety+facerank->topoffset)<< FRACBITS, FRACUNIT, V_HUDTRANS|splitflags, kp_facenum[(stplyr->kartspeed % 10)], colormapstat); - V_DrawFixedPatch((fx+69+offsetx+facerank->leftoffset)<< FRACBITS, (fy-4+offsety+facerank->topoffset)<< FRACBITS, FRACUNIT, V_HUDTRANS|splitflags, kp_facenum[(stplyr->kartweight % 10)], colormapstat2); + V_DrawFixedPatch((fx+56+offsetx+leftoffset)<< FRACBITS, (fy-19+offsety+topoffset)<< FRACBITS, FRACUNIT, V_HUDTRANS|splitflags, kp_facenum[(stplyr->kartspeed % 10)], colormapstat); + V_DrawFixedPatch((fx+69+offsetx+leftoffset)<< FRACBITS, (fy-4+offsety+topoffset)<< FRACBITS, FRACUNIT, V_HUDTRANS|splitflags, kp_facenum[(stplyr->kartweight % 10)], colormapstat2); } } } diff --git a/src/k_hud.h b/src/k_hud.h index ca508de73..ed130a614 100644 --- a/src/k_hud.h +++ b/src/k_hud.h @@ -73,6 +73,8 @@ extern consvar_t cv_newtabranking; extern consvar_t cv_kartdebughudtracker; +extern consvar_t cv_highresportrait; + extern patch_t *kp_facenum[MAXPLAYERS+1]; extern patch_t *kp_itemboxminimap; extern patch_t *kp_minimapdot; @@ -189,6 +191,8 @@ extern patch_t *kp_itemtarget_far[2][2]; extern patch_t *kp_itemtarget_far_text[2]; extern patch_t *kp_itemtarget_near[2][8]; +boolean K_UseHighResPortraits(void); + #ifdef __cplusplus } // extern "C" #endif diff --git a/src/k_vote.c b/src/k_vote.c index 2f13ea4bf..e808354cf 100644 --- a/src/k_vote.c +++ b/src/k_vote.c @@ -37,6 +37,7 @@ #include "console.h" // cons_menuhighlight #include "k_itemlist.hpp" #include "k_vote.h" +#include "k_hud.h" static INT32 votetimer; @@ -601,9 +602,11 @@ void Y_VoteDrawer(void) if (players[i].skincolor) { UINT8 *colormap = R_GetTranslationColormap(players[i].skin, players[i].skincolor, GTC_CACHE); - patch_t *facerank = faceprefix[players[i].skin][FACE_RANK]; + boolean hires = K_UseHighResPortraits(); + patch_t *facerank = faceprefix[players[i].skin][hires ? FACE_WANTED : FACE_RANK]; + fixed_t hiresscale = hires ? FRACUNIT/2 : FRACUNIT; - V_DrawMappedPatch(x+24+facerank->leftoffset, y+(highplayers ? smallfaceheight : bigfaceheight)+facerank->topoffset, V_SNAPTOLEFT, facerank, colormap); + V_DrawFixedPatch((x+24+facerank->leftoffset)<topoffset)<leftoffset / 2 : facerank->leftoffset; + INT16 topoffset = hires ? facerank->topoffset / 2 :facerank->topoffset; - scale = (displayitemrolls) ? FRACUNIT/2 : FRACUNIT; + scale = (hires || displayitemrolls) ? FRACUNIT/2 : FRACUNIT; xoffs = FixedMul(16, scale); yoffs = FixedMul(4, scale); @@ -569,8 +574,8 @@ void Y_IntermissionDrawer(void) if (displayitemrolls) { V_DrawFixedPatch( - ((x+11-xscroll_px)*FRACUNIT) + ((facerank->leftoffset) * scale), - ((y+1)*FRACUNIT) + ((facerank->topoffset) * scale), + ((x+11-xscroll_px)*FRACUNIT) + ((leftoffset) * scale), + ((y+1)*FRACUNIT) + ((topoffset) * scale), scale, 0, facerank, @@ -587,7 +592,7 @@ void Y_IntermissionDrawer(void) } else { - V_DrawFixedPatch((x+xoffs)<