From aea840bda2b014e6f7d8ca9cc19aababc8d8977e Mon Sep 17 00:00:00 2001 From: PeachyPeachSM64 <72323920+PeachyPeachSM64@users.noreply.github.com> Date: Sat, 30 May 2026 02:11:52 +0200 Subject: [PATCH] Fix nametags using alpha --- src/pc/djui/djui_text.c | 36 ++++++++++++++++++++++++++++++++++++ src/pc/djui/djui_text.h | 1 + src/pc/nametags.c | 1 + 3 files changed, 38 insertions(+) diff --git a/src/pc/djui/djui_text.c b/src/pc/djui/djui_text.c index eb5643ac8..a67f1d4fd 100644 --- a/src/pc/djui/djui_text.c +++ b/src/pc/djui/djui_text.c @@ -132,6 +132,42 @@ void djui_text_remove_colors(char *str) { } } +void djui_text_remove_alpha(char *str) { + if (!str) { return; } + char *colorStart = str; + const char *strEnd = str + strlen(str); + while ((colorStart = strstr(colorStart, "\\#"))) { + char *colorEnd; + struct DjuiColor parsedColor; + if (djui_text_parse_color(colorStart, strEnd, false, NULL, &colorEnd, &parsedColor) && colorEnd > colorStart) { + u8 length = (u8) (colorEnd - colorStart) - 3; + switch (length) { + + // #rgba -> #rgb + case 4: { + snprintf(colorStart, strEnd - colorStart, "\\#%01x%01x%01x\\", parsedColor.r >> 4, parsedColor.g >> 4, parsedColor.b >> 4); + colorStart = colorEnd - 1; + memmove(colorStart, colorStart + 1, strlen(colorStart + 1) + 1); + } break; + + // #rrggbbaa -> #rrggbb + case 8: { + snprintf(colorStart, strEnd - colorStart, "\\#%02x%02x%02x\\", parsedColor.r, parsedColor.g, parsedColor.b); + colorStart = colorEnd - 2; + memmove(colorStart, colorStart + 2, strlen(colorStart + 2) + 1); + } break; + + // Nothing to change + default: { + colorStart = colorEnd; + } break; + } + } else { + colorStart++; + } + } +} + char *djui_text_get_uncolored_string(char *dest, size_t length, const char *str) { if (!dest) { dest = malloc(length * sizeof(char)); diff --git a/src/pc/djui/djui_text.h b/src/pc/djui/djui_text.h index 89e6da0cb..e54b5806b 100644 --- a/src/pc/djui/djui_text.h +++ b/src/pc/djui/djui_text.h @@ -13,6 +13,7 @@ struct DjuiText { bool djui_text_parse_color(char *begin, const char *end, bool ignoreAlpha, const struct DjuiColor *baseColor, char **nextChar, struct DjuiColor *parsedColor); void djui_text_remove_colors(char *str); +void djui_text_remove_alpha(char *str); char *djui_text_get_uncolored_string(char *dest, size_t length, const char *str); void djui_text_set_text(struct DjuiText* text, const char* message); diff --git a/src/pc/nametags.c b/src/pc/nametags.c index 5d6380508..cf547dc1f 100644 --- a/src/pc/nametags.c +++ b/src/pc/nametags.c @@ -121,6 +121,7 @@ void nametags_render(void) { vec3f_copy(nametag->pos, out); nametag->scale = scale; memcpy(nametag->name, name, sizeof(name)); + djui_text_remove_alpha(nametag->name); numNametags++; }