Fix EXP crystal HUD

This commit is contained in:
Antonio Martinez 2025-08-31 23:52:07 -04:00
parent dfb34ad722
commit 52bb3a21f6
5 changed files with 23 additions and 13 deletions

View file

@ -3315,12 +3315,22 @@ static void K_drawKartEmeralds(void)
}
}
INT32 K_GetTransFlagFromFixed(fixed_t value)
INT32 K_GetTransFlagFromFixed(fixed_t value, boolean midrace)
{
value = std::clamp(value, FRACUNIT/2, FRACUNIT*3/2);
fixed_t base = midrace ? GRADINGFACTORSOFTCAP : FRACUNIT;
// Calculate distance from 1.0
fixed_t distance = abs(FRACUNIT - value);
value = std::clamp(value, base - FRACUNIT/2, base + FRACUNIT/2);
// Calculate distance from "base""
fixed_t distance = abs(base - value);
if (midrace)
{
if (value > base)
distance = FixedMul(distance, GRADINGFACTORCAPSTRENGTH);
}
distance = std::clamp(distance, 0, FRACUNIT/2);
// Map the distance to 0-10 range (10 = closest to 1.0, 0 = farthest from 1.0)
INT32 transLevel = 10 - ((distance * 10) / (FRACUNIT/2));
@ -4220,7 +4230,7 @@ static boolean K_drawKartLaps(void)
// WHAT IS THIS?
// WHAT ARE YOU FUCKING TALKING ABOUT?
V_DrawMappedPatch(fr, fy, V_HUDTRANS|V_SLIDEIN|splitflags, kp_exp[1], R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_MUSTARD, GTC_CACHE));
auto transflag = K_GetTransFlagFromFixed(K_EffectiveGradingFactor(stplyr));
auto transflag = K_GetTransFlagFromFixed(K_EffectiveGradingFactor(stplyr), true);
skincolornum_t overlaycolor = K_EffectiveGradingFactor(stplyr) < FRACUNIT ? SKINCOLOR_RUBY : SKINCOLOR_ULTRAMARINE ;
auto colormap = R_GetTranslationColormap(TC_RAINBOW, overlaycolor, GTC_CACHE);
V_DrawMappedPatch(fr, fy, transflag|V_SLIDEIN|splitflags, kp_exp[1], colormap);
@ -4243,7 +4253,7 @@ static boolean K_drawKartLaps(void)
V_DrawMappedPatch(LAPS_X+bump, LAPS_Y, V_HUDTRANS|V_SLIDEIN|splitflags, kp_exp[0], R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_MUSTARD, GTC_CACHE));
auto transflag = K_GetTransFlagFromFixed(K_EffectiveGradingFactor(stplyr));
auto transflag = K_GetTransFlagFromFixed(K_EffectiveGradingFactor(stplyr), true);
skincolornum_t overlaycolor = K_EffectiveGradingFactor(stplyr) < FRACUNIT ? SKINCOLOR_RUBY : SKINCOLOR_ULTRAMARINE ;
auto colormap = R_GetTranslationColormap(TC_RAINBOW, overlaycolor, GTC_CACHE);
V_DrawMappedPatch(LAPS_X+bump, LAPS_Y, transflag|V_SLIDEIN|splitflags, kp_exp[0], colormap);

View file

@ -67,7 +67,7 @@ void K_drawButton(fixed_t x, fixed_t y, INT32 flags, patch_t *button[2], boolean
void K_drawButtonAnim(INT32 x, INT32 y, INT32 flags, patch_t *button[2], tic_t animtic);
void K_DrawSticker(INT32 x, INT32 y, INT32 width, INT32 flags, boolean isSmall);
void K_DrawMarginSticker(INT32 x, INT32 y, INT32 width, INT32 flags, boolean isSmall, boolean leftedge);
INT32 K_GetTransFlagFromFixed(fixed_t value);
INT32 K_GetTransFlagFromFixed(fixed_t value, boolean midrace);
void K_DrawKartPositionNumXY(
UINT8 num,

View file

@ -153,11 +153,9 @@ fixed_t K_EffectiveGradingFactor(const player_t *player)
return min;
fixed_t gf = player->gradingfactor;
fixed_t SOFT_CAP = FRACUNIT;
fixed_t SOFT_CAP_FACTOR = 3*FRACUNIT;
if (gf > SOFT_CAP)
gf = SOFT_CAP + FixedDiv(gf - SOFT_CAP, SOFT_CAP_FACTOR);
if (gf > GRADINGFACTORSOFTCAP)
gf = GRADINGFACTORSOFTCAP + FixedDiv(gf - GRADINGFACTORSOFTCAP, GRADINGFACTORCAPSTRENGTH);
return max(min, gf);
}

View file

@ -135,6 +135,8 @@ player_t *K_DuelOpponent(player_t *player);
fixed_t K_EffectiveGradingFactor(const player_t *player);
#define MINGRADINGFACTOR (FRACUNIT/2)
#define MINFRANTICFACTOR (8*FRACUNIT/10)
#define GRADINGFACTORSOFTCAP (FRACUNIT)
#define GRADINGFACTORCAPSTRENGTH (3*FRACUNIT)
void K_TimerReset(void);
void K_TimerInit(void);

View file

@ -745,7 +745,7 @@ void podiumData_s::Draw(void)
factor = FRACUNIT - FixedDiv(factor, bluemaxoffset);
}
auto transflag = K_GetTransFlagFromFixed(factor);
auto transflag = K_GetTransFlagFromFixed(factor, false);
drawer_gametype
.xy(0, 1)
.colorize(static_cast<skincolornum_t>(overlaycolor))
@ -915,7 +915,7 @@ void podiumData_s::Draw(void)
factor = FRACUNIT - FixedDiv(factor, bluemaxoffset);
}
auto transflag = K_GetTransFlagFromFixed(factor);
auto transflag = K_GetTransFlagFromFixed(factor, false);
drawer_totals_right
.colorize(static_cast<skincolornum_t>(overlaycolor))
.flags(transflag)