diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 5a4f35a7a..428656bf2 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -71,8 +71,9 @@ patch_t *lt_font[LT_FONTSIZE]; patch_t *cred_font[CRED_FONTSIZE]; patch_t *ttlnum[20]; // act numbers (0-19) -// Character name font -patch_t *chrn_font[CHRN_FONTSIZE]; +// Name tag fonts +patch_t *ntb_font[NT_FONTSIZE]; +patch_t *nto_font[NT_FONTSIZE]; static player_t *plr; boolean chat_on; // entering a chat message? @@ -249,17 +250,30 @@ void HU_LoadGraphics(void) ttlnum[i] = (patch_t *)W_CachePatchName(buffer, PU_HUDGFX); } - // cache the character name font for entire game execution - j = CHRN_FONTSTART; - for (i = 0; i < CHRN_FONTSIZE; i++) + // cache the base name tag font for entire game execution + j = NT_FONTSTART; + for (i = 0; i < NT_FONTSIZE; i++) { - sprintf(buffer, "CHFNT%.3d", j); + sprintf(buffer, "NTFNT%.3d", j); j++; if (W_CheckNumForName(buffer) == LUMPERROR) - chrn_font[i] = NULL; + ntb_font[i] = NULL; else - chrn_font[i] = (patch_t *)W_CachePatchName(buffer, PU_HUDGFX); + ntb_font[i] = (patch_t *)W_CachePatchName(buffer, PU_HUDGFX); + } + + // cache the outline name tag font for entire game execution + j = NT_FONTSTART; + for (i = 0; i < NT_FONTSIZE; i++) + { + sprintf(buffer, "NTFNO%.3d", j); + j++; + + if (W_CheckNumForName(buffer) == LUMPERROR) + nto_font[i] = NULL; + else + nto_font[i] = (patch_t *)W_CachePatchName(buffer, PU_HUDGFX); } // cache the crosshairs, don't bother to know which one is being used, diff --git a/src/hu_stuff.h b/src/hu_stuff.h index ed56bad05..55b61d4b7 100644 --- a/src/hu_stuff.h +++ b/src/hu_stuff.h @@ -35,10 +35,11 @@ #define CRED_FONTEND 'Z' // the last font character #define CRED_FONTSIZE (CRED_FONTEND - CRED_FONTSTART + 1) -// Character name font -#define CHRN_FONTSTART '!' // the first font character -#define CHRN_FONTEND 'Z' // the last font character -#define CHRN_FONTSIZE (CHRN_FONTEND - CHRN_FONTSTART + 1) +// Name tag font +// Used by base and outline font set +#define NT_FONTSTART '!' // the first font character +#define NT_FONTEND 'Z' // the last font character +#define NT_FONTSIZE (NT_FONTEND - NT_FONTSTART + 1) #define HU_CROSSHAIRS 3 // maximum of 9 - see HU_Init(); @@ -82,7 +83,8 @@ extern patch_t *tallnum[10]; extern patch_t *nightsnum[10]; extern patch_t *lt_font[LT_FONTSIZE]; extern patch_t *cred_font[CRED_FONTSIZE]; -extern patch_t *chrn_font[CHRN_FONTSIZE]; +extern patch_t *ntb_font[NT_FONTSIZE]; +extern patch_t *nto_font[NT_FONTSIZE]; extern patch_t *ttlnum[20]; extern patch_t *emeraldpics[3][8]; extern patch_t *rflagico; diff --git a/src/m_menu.c b/src/m_menu.c index 2113882ea..7cd998330 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -7980,8 +7980,7 @@ static void M_SetupChoosePlayer(INT32 choice) return; } - if (Playing() == false) - M_ChangeMenuMusic("_chsel", true); + M_ChangeMenuMusic("_chsel", true); SP_PlayerDef.prevMenu = currentMenu; M_SetupNextMenu(&SP_PlayerDef); @@ -8215,10 +8214,8 @@ static void M_DrawSetupChoosePlayerMenu(void) //if (curpatch) // V_DrawScaledPatch(x, y, 0, curpatch); - col = Color_Opposite[charskin->prefcolor - 1][0]; - // Dummy string to be removed when finalized - V_DrawCharacterName(x, y, col, "Sonic\n&Tails"); + V_DrawNameTag(x, y, 0, R_GetTranslationColormap(skinnum, SKINCOLOR_BLUE, 0), R_GetTranslationColormap(skinnum, SKINCOLOR_YELLOW, 0), "Sonic\n&Tails."); } // Alternative menu header diff --git a/src/v_video.c b/src/v_video.c index 358a65e4d..a6e8398bb 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -2627,24 +2627,21 @@ void V_DrawCreditString(fixed_t x, fixed_t y, INT32 option, const char *string) } } -// Draw a string using the chrn_font -void V_DrawCharacterName(INT32 x, INT32 y, UINT8 color, const char *string) +// Draw a string using the nt_font +// Note that the outline is a seperate font set +void V_DrawNameTag(INT32 x, INT32 y, INT32 option, UINT8 *basecolormap, UINT8 *outlinecolormap, const char *string) { - INT32 w, c, cx = x, cy = y, dupx, dupy, scrwidth, left = 0; + INT32 w, w2, c, cx = x, cy = y, dupx, dupy, scrwidth, left = 0; const char *ch = string; INT32 spacewidth = 4; - const UINT8 *colormap = NULL; + INT32 lowercase = (option & V_ALLOWLOWERCASE); + option &= ~V_FLIP; // which is also shared with V_ALLOWLOWERCASE... dupx = dupy = 1; scrwidth = vid.width/vid.dupx; left = (scrwidth - BASEVIDWIDTH)/2; scrwidth -= left; - if (!color) - colormap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_GREEN, 0); - else - colormap = R_GetTranslationColormap(TC_DEFAULT, color, 0); - for (;;ch++) { if (!*ch) @@ -2658,17 +2655,34 @@ void V_DrawCharacterName(INT32 x, INT32 y, UINT8 color, const char *string) } c = *ch; - c = toupper(c); - c -= CHRN_FONTSTART; + if (!lowercase) + c = toupper(c); + c -= NT_FONTSTART; // character does not exist or is a space - if (c < 0 || c >= CHRN_FONTSIZE || !chrn_font[c]) + if (c < 0 || c >= NT_FONTSIZE || !ntb_font[c] || !nto_font[c]) { cx += spacewidth * dupx; continue; } - w = SHORT(chrn_font[c]->width) * dupx; + // Outline + w2 = SHORT(nto_font[c]->width) * dupx; + + if (cx > scrwidth) + continue; + if (cx+left + w2 < 0) //left boundary check + { + cx += w2; + continue; + } + + V_DrawFixedPatch((cx)<width) * dupx; if (cx > scrwidth) continue; @@ -2678,7 +2692,7 @@ void V_DrawCharacterName(INT32 x, INT32 y, UINT8 color, const char *string) continue; } - V_DrawFixedPatch((cx)<