From 24604a0298fb0a6193bcc4961ed3758d770a7630 Mon Sep 17 00:00:00 2001 From: NepDisk Date: Wed, 18 Mar 2026 10:28:43 -0400 Subject: [PATCH] Add small and text only nametags I really hate HUD code.... --- src/d_netcmd.c | 3 - src/d_netcmd.h | 1 - src/k_hud.c | 150 ++++++++++++++++++++++++++++++++++++------------- src/k_hud.h | 4 ++ 4 files changed, 115 insertions(+), 43 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 2ba909895..2212afee5 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -327,8 +327,6 @@ consvar_t cv_startinglives = CVAR_INIT ("startinglives", "3", CV_NETVAR|CV_CHEAT static CV_PossibleValue_t respawntime_cons_t[] = {{1, "MIN"}, {30, "MAX"}, {0, "Off"}, {0, NULL}}; consvar_t cv_respawntime = CVAR_INIT ("respawndelay", "1", CV_NETVAR|CV_CHEAT, respawntime_cons_t, NULL); -consvar_t cv_seenames = CVAR_INIT ("seenames", "On", CV_SAVE, CV_OnOff, NULL); - // names consvar_t cv_playername[MAXSPLITSCREENPLAYERS] = { CVAR_INIT ("name", "Sonic", CV_SAVE|CV_CALL|CV_NOINIT, NULL, Name_OnChange), @@ -1326,7 +1324,6 @@ void D_RegisterClientCommands(void) // preferred number of players CV_RegisterVar(&cv_splitplayers); - CV_RegisterVar(&cv_seenames); CV_RegisterVar(&cv_rollingdemos); CV_RegisterVar(&cv_netstat); CV_RegisterVar(&cv_netticbuffer); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index b75b71cbc..649906854 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -37,7 +37,6 @@ extern consvar_t cv_dummyrestatrandom[MAXSPLITSCREENPLAYERS]; // preferred number of players extern consvar_t cv_splitplayers; -extern consvar_t cv_seenames; extern consvar_t cv_usemouse; extern consvar_t cv_laglesscam; extern consvar_t cv_usecontroller[MAXSPLITSCREENPLAYERS]; diff --git a/src/k_hud.c b/src/k_hud.c index 68410c90c..4708cd4d7 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -10,6 +10,7 @@ /// \brief HUD drawing functions exclusive to Kart #include "k_hud.h" +#include "command.h" #include "info.h" #include "k_kart.h" #include "k_battle.h" @@ -86,7 +87,9 @@ static CV_PossibleValue_t speedo_cons_t[]= { {0, "Default"}, {1, "Small"}, {2, "P-Meter"}, - {0, NULL}}; + {0, NULL} +}; + consvar_t cv_newspeedometer = CVAR_INIT ("newspeedometer", "Small", CV_SAVE, speedo_cons_t, NULL); static CV_PossibleValue_t inputdisplay_cons_t[] = {{0, "Off"}, {1, "Wheel"}, {2, "Stick"}, {3, "SRB2"}, {0, NULL}}; @@ -111,6 +114,26 @@ 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); +typedef enum +{ + NT_OFF = 0, + NT_DEFAULT, + NT_SMALL, + NT_TEXT, +} nametag_e; + +static CV_PossibleValue_t nametag_cons_t[]= { + {NT_OFF, "Off"}, + {NT_DEFAULT, "Default"}, + {NT_SMALL, "Small"}, + {NT_TEXT, "Text-Only"}, + {0, NULL} +}; + +consvar_t cv_seenames = CVAR_INIT ("seenames", "Default", CV_SAVE, nametag_cons_t, NULL); +consvar_t cv_seenamerestat = CVAR_INIT ("seenamerestat", "On", CV_SAVE, CV_OnOff, NULL); +consvar_t cv_seeownname = CVAR_INIT ("seeownname", "Off", CV_SAVE, CV_OnOff, NULL); + //{ Patch Definitions static patch_t *kp_nodraw; @@ -252,6 +275,9 @@ void K_RegisterKartHUDStuff(void) #undef REG_HUD_OFFSET_X #undef REG_HUD_OFFSET_Y + CV_RegisterVar(&cv_seenames); + CV_RegisterVar(&cv_seenamerestat); + CV_RegisterVar(&cv_seeownname); CV_RegisterVar(&cv_newspeedometer); CV_RegisterVar(&cv_showinput); CV_RegisterVar(&cv_colorizedhud); @@ -3640,7 +3666,7 @@ static void K_drawKartPlayerCheck(void) static boolean K_ShowPlayerNametag(player_t *p) { - if (cv_seenames.value == 0) + if (cv_seenames.value == NT_OFF) { return false; } @@ -3652,7 +3678,14 @@ static boolean K_ShowPlayerNametag(player_t *p) if (stplyr == p) { - return false; + if (cv_seeownname.value) + { + return true; + } + else + { + return false; + } } if (gametypes[gametype]->rules & GTR_CIRCUIT) @@ -3708,13 +3741,18 @@ static void K_DrawNameTagForPlayer(fixed_t x, fixed_t y, player_t *p, UINT8 flag INT32 barx = x + 6*FRACUNIT, bary = y - 16*FRACUNIT, barw = namelen*FRACUNIT; UINT8 backcolor = colormap ? colormap[31] : 31, frontcolor = colormap ? colormap[0] : 0; INT32 vflags = V_SPLITSCREEN|flags; + fixed_t textxoffset = 0; + fixed_t textyoffset = 0; + fixed_t barxoffset = 0; + fixed_t baryoffset = 0; // Lat: 10/06/2020: colormap can be NULL on the frame you join a game, just arbitrarily use palette indexes 31 and 0 instead of whatever the colormap would give us instead to avoid crashes. - // Draw the stem + // Calculate offsets and draw the stem { fixed_t stemx; fixed_t stemy; + SINT8 stemcount = 4; int j; boolean flipcam = (p->pflags & PF_FLIPCAM) && (p->mo->eflags & MFE_VERTICALFLIP); boolean flipped; @@ -3727,49 +3765,83 @@ static void K_DrawNameTagForPlayer(fixed_t x, fixed_t y, player_t *p, UINT8 flag stemx = x; stemy = y; - - if (flipped) + switch(cv_seenames.value) { - for (j = 0; j < 4; j++) - { - fixed_t last = j == 3 ? FRACUNIT : 0; - stemy += FRACUNIT*4; - V_DrawFixedFill(stemx, stemy, 3*FRACUNIT, 4*FRACUNIT, vflags|backcolor); - V_DrawFixedFill(stemx + FRACUNIT, stemy, FRACUNIT, 4*FRACUNIT - last, vflags|frontcolor); - stemx += FRACUNIT; - } - - bary += FRACUNIT*33; - - x += FRACUNIT; - y += FRACUNIT*33; - } - else - { - for (j = 0; j < 4; j++) - { - fixed_t last = j == 3 ? FRACUNIT : 0; - stemy -= FRACUNIT*4; - V_DrawFixedFill(stemx, stemy, 3*FRACUNIT, 4*FRACUNIT, vflags|backcolor); - V_DrawFixedFill(stemx + FRACUNIT, stemy + last, FRACUNIT, 4*FRACUNIT - last, vflags|frontcolor); - stemx += FRACUNIT; - } + case NT_DEFAULT: + break; + case NT_SMALL: + stemcount = 2; + textxoffset = -2*FRACUNIT; + textyoffset = flipped ? -2*FRACUNIT : 12*FRACUNIT; + barxoffset = -3*FRACUNIT; + baryoffset = flipped ? -7*FRACUNIT : 7*FRACUNIT; + break; + case NT_TEXT: + textxoffset = -9*FRACUNIT; + textyoffset = 21*FRACUNIT; + stemcount = 0; + break; } - V_DrawFixedFill(barx, bary, barw, 3*FRACUNIT, vflags|backcolor); - V_DrawFixedFill(barx - FRACUNIT, bary + FRACUNIT, barw, FRACUNIT, vflags|frontcolor); + if (stemcount > 0) + { + if (flipped) + { + for (j = 0; j < stemcount; j++) + { + fixed_t last = j == 3 ? FRACUNIT : 0; + stemy += FRACUNIT*4; + V_DrawFixedFill(stemx, stemy, 3*FRACUNIT, 4*FRACUNIT, vflags|backcolor); + V_DrawFixedFill(stemx + FRACUNIT, stemy, FRACUNIT, 4*FRACUNIT - last, vflags|frontcolor); + stemx += FRACUNIT; + } + + bary += FRACUNIT*33; + + x += FRACUNIT; + y += FRACUNIT*33; + } + else + { + for (j = 0; j < stemcount; j++) + { + fixed_t last = j == 3 ? FRACUNIT : 0; + stemy -= FRACUNIT*4; + V_DrawFixedFill(stemx, stemy, 3*FRACUNIT, 4*FRACUNIT, vflags|backcolor); + V_DrawFixedFill(stemx + FRACUNIT, stemy + last, FRACUNIT, 4*FRACUNIT - last, vflags|frontcolor); + stemx += FRACUNIT; + } + } + + + if (cv_seenames.value == NT_SMALL) + { + fixed_t flipoffset = flipped ? 2*FRACUNIT : 0; + V_DrawFixedFill(barx + barxoffset - 2*FRACUNIT, bary + baryoffset + flipoffset, 3*FRACUNIT, 1*FRACUNIT, vflags|backcolor); + } + + V_DrawFixedFill(barx + barxoffset, bary + baryoffset, barw, 3*FRACUNIT, vflags|backcolor); + V_DrawFixedFill(barx - FRACUNIT + barxoffset, bary + FRACUNIT + baryoffset, barw, FRACUNIT, vflags|frontcolor); + } + // END DRAWFILL DUMBNESS } - // END DRAWFILL DUMBNESS // Draw the name itself - V_DrawThinStringAtFixed(x + (5*FRACUNIT), y - (26*FRACUNIT), vflags|V_6WIDTHSPACE|V_ALLOWLOWERCASE|clr, player_names[p - players]); + if (cv_seenames.value == NT_DEFAULT) + { + V_DrawThinStringAtFixed(x + (5*FRACUNIT) + textxoffset, y - (26*FRACUNIT) + textyoffset, vflags|V_6WIDTHSPACE|V_ALLOWLOWERCASE|clr, player_names[p - players]); + } + else + { + V_DrawSmallStringAtFixed(x + (5*FRACUNIT) + textxoffset, y - (26*FRACUNIT) + textyoffset, vflags|V_6WIDTHSPACE|V_ALLOWLOWERCASE|clr, player_names[p - players]); + } // Also draw stats of restated players. - if (p->kartspeed != skins[p->skin].kartspeed - || p->kartweight != skins[p->skin].kartweight) + if (cv_seenamerestat.value && (p->kartspeed != skins[p->skin].kartspeed + || p->kartweight != skins[p->skin].kartweight)) { - V_DrawSmallStringAtFixed(x + (5*FRACUNIT), y - (31*FRACUNIT), vflags, va("\x84S%d ", p->kartspeed)); - V_DrawSmallStringAtFixed(x + (15*FRACUNIT), y - (31*FRACUNIT), vflags, va("\x87W%d ", p->kartweight)); + V_DrawSmallStringAtFixed(x + (5*FRACUNIT) + textxoffset, y - (31*FRACUNIT) + textyoffset, vflags, va("\x84S%d ", p->kartspeed)); + V_DrawSmallStringAtFixed(x + (15*FRACUNIT) + textxoffset, y - (31*FRACUNIT) + textyoffset, vflags, va("\x87W%d ", p->kartweight)); } } @@ -3793,7 +3865,7 @@ playertagtype_t K_WhichPlayerTag(player_t *p) return PLAYERTAG_CPU; }*/ } - else if (netgame || demo.playback) + else if (netgame || demo.playback || cv_seeownname.value) { if (K_ShowPlayerNametag(p) == true) { diff --git a/src/k_hud.h b/src/k_hud.h index bdb7242fc..ca508de73 100644 --- a/src/k_hud.h +++ b/src/k_hud.h @@ -56,6 +56,10 @@ IMPL_HUD_OFFSET(want); // Wanted #undef IMPL_HUD_OFFSET_X #undef IMPL_HUD_OFFSET_Y +extern consvar_t cv_seenames; +extern consvar_t cv_seenamerestat; +extern consvar_t cv_seeownname; + extern consvar_t cv_newspeedometer; extern consvar_t cv_showinput;