From 99542a5b00cf3c1cbdc89507e7087014e3ab6d74 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Thu, 16 Oct 2025 16:32:36 -0500 Subject: [PATCH 1/3] Disable invinc sprite flicker, MT_INVULNFLASH in reducevfx --- src/k_kart.c | 4 ++-- src/p_mobj.c | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index e300bd5f2..fcb315775 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -11828,10 +11828,10 @@ void K_KartResetPlayerColor(player_t *player) } else { - flicker += ((defaultTime - player->invincibilitytimer) / TICRATE / 2) * (cv_reducevfx.value ? 4 : 1); + flicker += (defaultTime - player->invincibilitytimer) / TICRATE / 2; } - if (leveltime % flicker == 0) + if (leveltime % flicker == 0 && !cv_reducevfx.value) { player->mo->color = SKINCOLOR_INVINCFLASH; player->mo->colorized = true; diff --git a/src/p_mobj.c b/src/p_mobj.c index 5197bcc5e..f9b5dae5d 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8327,6 +8327,17 @@ static boolean P_MobjRegularThink(mobj_t *mobj) P_RemoveMobj(mobj); return false; } + + // This invinc mobj flickers intensely, so don't draw it in reducevfx + if (cv_reducevfx.value && (mobj->renderflags & RF_DONTDRAW) == 0) + { + mobj->renderflags |= RF_DONTDRAW; + } + if (!cv_reducevfx.value && (mobj->renderflags & RF_DONTDRAW) != 0) + { + mobj->renderflags ^= RF_DONTDRAW; + } + P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->z); break; case MT_BRAKEDRIFT: From eaf2e34efb0990d3c34703c3cb95da4fdeef4cc8 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Thu, 16 Oct 2025 17:12:09 -0500 Subject: [PATCH 2/3] Make <150% sonic boom flash transparent instead in reducevfx --- src/p_mobj.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index f9b5dae5d..9da6b8b80 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8208,13 +8208,26 @@ static boolean P_MobjRegularThink(mobj_t *mobj) invinc_rotation_delay = 8; } - if ((trans >= NUMTRANSMAPS) // not a valid visibility - || (myspeed < (tripspeed - basespeed/2) && (leveltime & 1)) // < 150% flickering - || (mobj->target->player->tripwirePass < TRIPWIRE_BOOST) // Not strong enough to make an aura - || mobj->target->player->flamedash) // Flameshield dash + if ((trans >= NUMTRANSMAPS) || mobj->target->player->flamedash || mobj->target->player->tripwirePass < TRIPWIRE_BOOST) { + // never show for flameshield dash, below tripwire minimum or transparency invalid + mobj->renderflags &= ~RF_TRANSMASK; mobj->renderflags |= RF_DONTDRAW; } + else if (myspeed < (tripspeed - basespeed/2)) + { + mobj->renderflags &= ~(RF_TRANSMASK|RF_DONTDRAW); + if (cv_reducevfx.value) + { + // < 150% make more transparent for reducevfx + mobj->renderflags |= RF_TRANS40; + } + else if (leveltime & 1) + { + // < 150% flickering normally + mobj->renderflags |= RF_DONTDRAW; + } + } else { boolean blastermode = (myspeed >= tripspeed) && (mobj->target->player->tripwirePass >= TRIPWIRE_BLASTER); From 3e185efa440bb91a7be3d8247fecdafdd31fb62a Mon Sep 17 00:00:00 2001 From: Eidolon Date: Thu, 16 Oct 2025 20:53:37 -0500 Subject: [PATCH 3/3] Don't flicker drift electricity with reducevfx --- src/k_kart.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index fcb315775..63a0f0ef8 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6797,6 +6797,14 @@ static void K_SpawnDriftSparks(player_t *player) I_Assert(player->mo != NULL); I_Assert(!P_MobjWasRemoved(player->mo)); + if (player->driftcharge >= dsthree) + { + if (cv_reducevfx.value || leveltime % 2 == 0) + { + K_SpawnDriftElectricity(player); + } + } + if (leveltime % 2 == 1) return; @@ -6927,11 +6935,6 @@ static void K_SpawnDriftSparks(player_t *player) P_SetTarget(&spark->owner, player->mo); spark->renderflags |= RF_REDUCEVFX; } - - if (player->driftcharge >= dsthree) - { - K_SpawnDriftElectricity(player); - } } static void K_SpawnAIZDust(player_t *player)