From 4623afe0be38c6269ee0d0bfc56d512eb501fd88 Mon Sep 17 00:00:00 2001 From: GenericHeroGuy Date: Fri, 17 Oct 2025 19:43:25 +0200 Subject: [PATCH] Flame shield rebalance: better offroad, lower top speed --- src/d_netcmd.c | 2 +- src/k_kart.c | 23 ++++++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 02067ef86..a058693e1 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -500,7 +500,7 @@ consvar_t cv_kartstacking_bubble_speedboost = CVAR_INIT ("vanillaboost_bubble_sp consvar_t cv_kartstacking_bubble_accelboost = CVAR_INIT ("vanillaboost_bubble_accelboost", "4.0", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL); consvar_t cv_kartstacking_bubble_stackable = CVAR_INIT ("vanillaboost_bubble_stackable", "Off", CV_NETVAR, CV_OnOff, NULL); -consvar_t cv_kartstacking_flame_speedval = CVAR_INIT ("vanillaboost_flame_speedval", "0.90", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL); +consvar_t cv_kartstacking_flame_speedval = CVAR_INIT ("vanillaboost_flame_speedval", "0.25", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL); consvar_t cv_kartstacking_flame_accelboost = CVAR_INIT ("vanillaboost_flame_accelboost", "6.0", CV_NETVAR|CV_CHEAT|CV_FLOAT, CV_Unsigned, NULL); consvar_t cv_kartstacking_flame_stackable = CVAR_INIT ("vanillaboost_flame_stackable", "Off", CV_NETVAR, CV_OnOff, NULL); diff --git a/src/k_kart.c b/src/k_kart.c index e71bc53b4..655194358 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -919,6 +919,14 @@ static void K_UpdateOffroad(player_t *player) offroad = offroadstrength / (TICRATE/2); + if (player->flamestore) + { + // flame shield doesn't resist offroad, but slows its effect + // it doesn't suffer the offroad speedboost cut; increase offroadstrength to compensate + offroad = 2*offroad/3; + offroadstrength *= 2; + } + player->offroad += offroad; } @@ -2319,8 +2327,8 @@ void K_SpawnWaterTrail(mobj_t *mobj) static fixed_t K_FlameShieldDashVar(INT32 val) { - // 1 second = 15% + ????% top speed - return (FRACUNIT/6) + (((val * (FRACUNIT)) / TICRATE) / 2); + // 1 second = base% + ~16.8% top speed + return FixedMul(val * 500, FixedDiv(FRACUNIT, FRACUNIT + val*FRACUNIT/60)); } static inline fixed_t K_GetProjectileSpeed(void) @@ -2652,14 +2660,7 @@ static void K_GetKartBoostPower(player_t *player) if (player->flamestore) // Flame Shield dash { fixed_t dash = K_FlameShieldDashVar(player->flamedash); - fixed_t intermediate = 0; - fixed_t boost = 0; - fixed_t val = FLAMESPEEDVAL; // Rim idea: diminish starts around 1.2x sneaker speed and plateaus around 1.4-1.5x - - intermediate = FixedDiv(FixedMul(val, FRACUNIT*-1/2) - FRACUNIT/4,-val+FRACUNIT/2); - boost = FixedMul(val,(FRACUNIT-FixedDiv(FRACUNIT,(dash+intermediate)))); - - K_DoBoost(player, boost, FLAMEACCELBOOST, FLAMESTACKABLE, FLAMESTACKABLE); + K_DoBoost(player, FLAMESPEEDVAL + dash, FLAMEACCELBOOST, FLAMESTACKABLE, FLAMESTACKABLE); } if (player->startboost) // Startup Boost @@ -2730,7 +2731,7 @@ static void K_GetKartBoostPower(player_t *player) // value smoothing if (K_StackingActive()) { - if (player->offroad && K_ApplyOffroad(player)) + if (player->offroad && K_ApplyOffroad(player) && !player->flamestore) { player->speedboost = max(finalspeedboost, player->speedboost)/2; player->accelboost = max(finalaccelboost, player->accelboost)/2;