From 881dadd6a5caa72cff7a30513b036ffceb45a307 Mon Sep 17 00:00:00 2001 From: minenice55 Date: Mon, 13 Oct 2025 21:29:14 -0400 Subject: [PATCH 1/2] 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" From 3e694b6ca2162d14b76b0f99c39efabb756b529f Mon Sep 17 00:00:00 2001 From: minenice55 Date: Tue, 14 Oct 2025 12:18:34 -0400 Subject: [PATCH 2/2] make flameometer fire not crash --- src/k_hud.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/k_hud.c b/src/k_hud.c index 967e7ec3f..5ec05bfc7 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -153,7 +153,7 @@ 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_flamefire[4]; static patch_t *kp_rankbumper; static patch_t *kp_tinybumper[2]; @@ -432,12 +432,21 @@ void K_LoadKartHUDGraphics(void) 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"); + //Flamometer Fire + { + const char* patchNames[] = { + "THFIRE1", + "THFIRE2", + "THFIRE3", + "THFIRE4" + }; + + for (size_t m = 0; m < sizeof(patchNames) / sizeof(patchNames[0]); ++m) + { + kp_flamefire[m] = W_CachePatchName(patchNames[m], PU_HUDGFX); + } + } // Speedometer labels HU_UpdatePatch(&kp_speedometerlabel[0], "SP_MKMH"); @@ -6336,7 +6345,7 @@ void K_DrawFlamometer(void) R_InterpolateFixed(mo->old_z, mo->z) + mo->sprzoff + (mo->eflags & MFE_VERTICALFLIP ? mo->height : 0), }; trackingResult_t res; - INT32 basex, basey = 0; + INT32 basex, basey, barextraflags = 0; INT32 flags = V_SPLITSCREEN|V_HUDTRANS; INT32 fuelbarheight = 41; INT32 tempbarheight = 48; @@ -6348,7 +6357,12 @@ void K_DrawFlamometer(void) // fire animation if (stplyr->flamestore >= FLAMESTOREMAX-1) { - V_DrawFixedPatch(basex, basey, FRACUNIT, flags, kp_flamometerfire[leveltime % 4], NULL); + V_DrawFixedPatch(basex, basey, FRACUNIT, flags|V_ADD, kp_flamefire[CLAMP((leveltime / 3) % 4, 0, 4)], NULL); + + if (leveltime % 3 != 0) + { + barextraflags = V_ADD; + } } // back @@ -6365,7 +6379,7 @@ void K_DrawFlamometer(void) // 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_DrawFixedPatch(basex, basey, FRACUNIT, flags|barextraflags, kp_flamometer[2], NULL); V_ClearClipRect();