Miguelius Flamometer (and colorization of such)

This commit is contained in:
Anonimus 2025-10-23 18:25:22 -04:00
parent da7f35cb2a
commit c1d1a4be4b
4 changed files with 60 additions and 13 deletions

View file

@ -93,7 +93,7 @@
#define ASSET_HASH_TEXTURES_KART 0xb4211b2f32b6a291
#define ASSET_HASH_CHARS_KART 0x1e68a3e01aa5c68b
#define ASSET_HASH_MAPS_KART 0x38558ed00da41ce9
#define ASSET_HASH_MAIN_PK3 0x329e1e108ba0e570
#define ASSET_HASH_MAIN_PK3 0x7c7002e1ab604171
#define ASSET_HASH_MAPPATCH_PK3 0x7d1f6b96dd119296
#define ASSET_HASH_BONUSCHARS_KART 0x60e6f13d822a7461
#ifdef USE_PATCH_FILE

View file

@ -701,9 +701,10 @@ struct player_t
UINT8 bubblehealth; // Bubble Shield health
UINT16 bubbleboost; // Bubble shield boost timer
UINT16 flamedash; // Flame Shield dash power
INT32 flametimer; // Flame Shield dash meter left
UINT8 flamestore; // Flame Shield reserve boost
UINT16 flamedash; // Flame Shield dash power
INT32 flametimer; // Flame Shield dash meter left
UINT8 flamestore; // Flame Shield reserve boost
tic_t flameoverheat; // Time the Flame Shield spends overheating
UINT16 hyudorotimer; // Duration of the Hyudoro offroad effect itself
SINT8 stealingtimer; // you are stealing

View file

@ -155,8 +155,11 @@ static patch_t *kp_kartzspeedo_smol[25];
static patch_t *kp_driftgauge[14];
static patch_t *kp_driftgaugeparts[5];
static patch_t *kp_flamometer[4];
static patch_t *kp_flamefire[4];
static patch_t *kp_flamometer[6];
static patch_t *kp_flamefire[18];
// Frames of animation for the fire
#define MAXFLAMOFIRETICS 8
static patch_t *kp_rankbumper;
static patch_t *kp_tinybumper[2];
@ -440,14 +443,30 @@ void K_LoadKartHUDGraphics(void)
HU_UpdatePatch(&kp_flamometer[1], "THERMOFUEL");
HU_UpdatePatch(&kp_flamometer[2], "THERMOTEMP");
HU_UpdatePatch(&kp_flamometer[3], "THERMOMETRE");
HU_UpdatePatch(&kp_flamometer[4], "THERMCBACK");
HU_UpdatePatch(&kp_flamometer[5], "THERMCMETRE");
//Flamometer Fire
{
const char* patchNames[] = {
"THFIREX",
"THFIRE1",
"THFIRE2",
"THFIRE3",
"THFIRE4"
"THFIRE4",
"THFIRE5",
"THFIRE6",
"THFIRE7",
"THFIRE8",
"THFIRCX",
"THFIRC1",
"THFIRC2",
"THFIRC3",
"THFIRC4",
"THFIRC5",
"THFIRC6",
"THFIRC7",
"THFIRC8"
};
for (size_t m = 0; m < sizeof(patchNames) / sizeof(patchNames[0]); ++m)
@ -6447,7 +6466,8 @@ void K_DrawFlamometer(void)
INT32 basex, basey, barextraflags = 0;
INT32 flags = V_SPLITSCREEN|V_HUDTRANS;
INT32 fuelbarheight = 41;
INT32 tempbarheight = 48;
INT32 tempbarheight = 49;
UINT8 *colormap = NULL;
K_ObjectTracking(&res, &pos, false);
basex = res.x + (16<<FRACBITS);
@ -6456,7 +6476,21 @@ void K_DrawFlamometer(void)
// fire animation
if (stplyr->flamestore >= FLAMESTOREMAX-1)
{
V_DrawFixedPatch(basex, basey, FRACUNIT, flags|V_ADD, kp_flamefire[CLAMP((leveltime / 3) % 4, 0, 4)], NULL);
UINT8 flamofiretic = CLAMP((leveltime / 3) % MAXFLAMOFIRETICS, 0, MAXFLAMOFIRETICS) + 1;
if (stplyr->flameoverheat < 3)
{
// Fancy "explode" VFX
flamofiretic = 0;
}
if (K_UseColorHud())
{
flamofiretic += 9;
colormap = R_GetTranslationColormap(TC_DEFAULT, K_GetHudColor(), GTC_CACHE);
}
V_DrawFixedPatch(basex, basey, FRACUNIT, flags|V_ADD, kp_flamefire[flamofiretic], colormap);
if (leveltime % 3 != 0)
{
@ -6465,23 +6499,23 @@ void K_DrawFlamometer(void)
}
// back
V_DrawFixedPatch(basex, basey, FRACUNIT, flags, kp_flamometer[0], NULL);
V_DrawFixedPatch(basex, basey, FRACUNIT, flags, kp_flamometer[K_UseColorHud() ? 4 : 0], colormap);
// bars
// fuel
fuelbarheight *= FixedDiv(stplyr->flametimer, itemtime*3);
V_SetClipRect(basex + 2*FRACUNIT, basey + 49*FRACUNIT - fuelbarheight, 2*FRACUNIT, fuelbarheight, flags);
V_SetClipRect(basex + 7*FRACUNIT, basey + 58*FRACUNIT - fuelbarheight, 4*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_SetClipRect(basex + 10*FRACUNIT, basey + 62*FRACUNIT - tempbarheight, 32*FRACUNIT, tempbarheight, flags);
V_DrawFixedPatch(basex, basey, FRACUNIT, flags|barextraflags, kp_flamometer[2], NULL);
V_ClearClipRect();
// front
V_DrawFixedPatch(basex, basey, FRACUNIT, flags, kp_flamometer[3], NULL);
V_DrawFixedPatch(basex, basey, FRACUNIT, flags, kp_flamometer[K_UseColorHud() ? 5 : 3], colormap);
}

View file

@ -7386,6 +7386,16 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->flametimer > 0)
{
if (player->flamestore >= FLAMESTOREMAX-1)
{
// Overheating; mainly used for the Flamometer
player->flameoverheat++;
}
else
{
player->flameoverheat = 0;
}
if (player->stealingtimer == 0 && player->stolentimer == 0)
player->flametimer--;
@ -7394,6 +7404,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
}
else
{
player->flameoverheat = 0;
if (player->flamestore)
K_FlameDashLeftoverSmoke(player->mo);
}