From 881dadd6a5caa72cff7a30513b036ffceb45a307 Mon Sep 17 00:00:00 2001 From: minenice55 Date: Mon, 13 Oct 2025 21:29:14 -0400 Subject: [PATCH] start flamometer --- src/doomdef.h | 2 +- src/k_hud.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/k_hud.h | 1 + 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/src/doomdef.h b/src/doomdef.h index 7d85d7b85..02a2bfd1e 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -103,7 +103,7 @@ extern "C" { // Special Hashing. //#define NOFILEHASH -//#define NOVERIFYIWADS +#define NOVERIFYIWADS // Uncheck this to compile debugging code //#define RANGECHECK diff --git a/src/k_hud.c b/src/k_hud.c index b1c6056bb..967e7ec3f 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -152,6 +152,9 @@ static patch_t *kp_kartzspeedo_smol[25]; static patch_t *kp_driftgauge[13]; static patch_t *kp_driftgaugeparts[5]; +static patch_t *kp_flamometer[4]; +static patch_t *kp_flamometerfire[4]; + static patch_t *kp_rankbumper; static patch_t *kp_tinybumper[2]; static patch_t *kp_ranknobumpers; @@ -423,6 +426,17 @@ void K_LoadKartHUDGraphics(void) HU_UpdatePatch(&kp_driftgaugeparts[2], "K_WDGM3"); HU_UpdatePatch(&kp_driftgaugeparts[3], "K_WDGM4"); HU_UpdatePatch(&kp_driftgaugeparts[4], "K_DGAU3M"); + + // Flamometer UI Elements + HU_UpdatePatch(&kp_flamometer[0], "THERMOBACK"); + HU_UpdatePatch(&kp_flamometer[1], "THERMOFUEL"); + HU_UpdatePatch(&kp_flamometer[2], "THERMOTEMP"); + HU_UpdatePatch(&kp_flamometer[3], "THERMOMETRE"); + //Flamometer Fire + HU_UpdatePatch(&kp_flamometerfire[0], "THERMOFIRE1"); + HU_UpdatePatch(&kp_flamometerfire[1], "THERMOFIRE2"); + HU_UpdatePatch(&kp_flamometerfire[2], "THERMOFIRE3"); + HU_UpdatePatch(&kp_flamometerfire[3], "THERMOFIRE4"); // Speedometer labels @@ -5771,6 +5785,8 @@ void K_drawKartHUD(void) // Drift gauge should ideally be drawn behind other hud stuff, right? // right? K_DrawDriftGauge(); + // new flame shield bars (player-space) + K_DrawFlamometer(); if (battlefullscreen && !freecam) { @@ -6296,3 +6312,63 @@ doafterimage:; va("%03d", charge) );*/ } + +void K_DrawFlamometer(void) +{ + // Make sure we actually have one, lmao + if (stplyr->mo == NULL || P_MobjWasRemoved(stplyr->mo)) + return; + // Check for chasecam + // TODO: Check for this better ffs + if (!cv_chasecam[R_GetViewNumber()].value) + return; + // I WANT TO LIVE + if (stplyr->playerstate != PST_LIVE) + return; + + if (stplyr->flametimer <= 0) + return; + + mobj_t *mo = stplyr->mo; + vector3_t pos = { + R_InterpolateFixed(mo->old_x, mo->x) + mo->sprxoff, + R_InterpolateFixed(mo->old_y, mo->y) + mo->spryoff, + R_InterpolateFixed(mo->old_z, mo->z) + mo->sprzoff + (mo->eflags & MFE_VERTICALFLIP ? mo->height : 0), + }; + trackingResult_t res; + INT32 basex, basey = 0; + INT32 flags = V_SPLITSCREEN|V_HUDTRANS; + INT32 fuelbarheight = 41; + INT32 tempbarheight = 48; + + K_ObjectTracking(&res, &pos, false); + basex = res.x + (16<flamestore >= FLAMESTOREMAX-1) + { + V_DrawFixedPatch(basex, basey, FRACUNIT, flags, kp_flamometerfire[leveltime % 4], NULL); + } + + // back + V_DrawFixedPatch(basex, basey, FRACUNIT, flags, kp_flamometer[0], NULL); + + // bars + // fuel + fuelbarheight *= FixedDiv(stplyr->flametimer, itemtime*3); + V_SetClipRect(basex + 2*FRACUNIT, basey + 49*FRACUNIT - fuelbarheight, 2*FRACUNIT, fuelbarheight, flags); + V_DrawFixedPatch(basex, basey, FRACUNIT, flags, kp_flamometer[1], NULL); + + V_ClearClipRect(); + + // temperature + tempbarheight *= FixedDiv(stplyr->flamestore, FLAMESTOREMAX); + V_SetClipRect(basex + 5*FRACUNIT, basey + 53*FRACUNIT - tempbarheight, 5*FRACUNIT, tempbarheight, flags); + V_DrawFixedPatch(basex, basey, FRACUNIT, flags, kp_flamometer[2], NULL); + + V_ClearClipRect(); + + // front + V_DrawFixedPatch(basex, basey, FRACUNIT, flags, kp_flamometer[3], NULL); +} \ No newline at end of file diff --git a/src/k_hud.h b/src/k_hud.h index ece25745d..0d93673ef 100644 --- a/src/k_hud.h +++ b/src/k_hud.h @@ -132,6 +132,7 @@ void K_SetScoreboardModStatus(const char *name, SINT8 active); void K_DrawServerDescrption(INT32 x, INT32 y); void K_DrawDriftGauge(void); +void K_DrawFlamometer(void); void K_ResetAfterImageValues(void); #ifdef __cplusplus } // extern "C"