From f0df4990aed763070c6ddd85522fcd8be9b4b61d Mon Sep 17 00:00:00 2001 From: VelocitOni Date: Wed, 1 Oct 2025 15:10:03 -0400 Subject: [PATCH 1/5] Waterskii fixes Check for if you're at half sonic boom later (order of operations), make sure sonic boom is always assumed to be 200% max to just make the game continue to work --- src/k_kart.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 8f2b295e6..2d42bcd3a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3326,6 +3326,7 @@ boolean K_WaterRun(mobj_t *mobj) case MT_PLAYER: { fixed_t minspeed = 0; + fixed_t flatspeed = 2 * K_GetKartSpeed(mobj->player, false, false); if (mobj->player == NULL) { @@ -3339,10 +3340,8 @@ boolean K_WaterRun(mobj_t *mobj) minspeed = K_PlayerTripwireSpeedThreshold(mobj->player); - if (mobj->player->speed < minspeed / 5) // 40% - { - return false; - } + if (minspeed >= flatspeed) + minspeed = flatspeed; if (mobj->player->invincibilitytimer || mobj->player->sneakertimer @@ -3355,6 +3354,11 @@ boolean K_WaterRun(mobj_t *mobj) return true; } + if (mobj->player->speed < minspeed / 5) // Or if you're at half tripwire speed + { + return false; + } + return false; } From c7c8ee3c7aa2b907be252cf9515ed75d284b0439 Mon Sep 17 00:00:00 2001 From: VelocitOni Date: Wed, 1 Oct 2025 15:36:13 -0400 Subject: [PATCH 2/5] Demo compatability for waterskiing Updated DEMOVERSION --- src/g_demo.cpp | 3 ++- src/k_kart.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/g_demo.cpp b/src/g_demo.cpp index 2f9c64626..f0df146b6 100644 --- a/src/g_demo.cpp +++ b/src/g_demo.cpp @@ -182,9 +182,10 @@ demoghost *ghosts = NULL; // - 0x000F -- RR 2.4 indev (staff ghosts part 2 - dynslopes thinker fix) // - 0x0010 -- RR 2.4 rc1 (staff ghosts part 3 - skinlimit raise. don't say we never did anythin for 'ya) // - 0x0011 -- RR 2.4 rc2 (K_FlipFromObject oversight) +// - 0x0012 -- RR 2.4 rc6 (Waterskii regression from 2.3) #define MINDEMOVERSION 0x000E -#define DEMOVERSION 0x0011 +#define DEMOVERSION 0x0012 boolean G_CompatLevel(UINT16 level) { diff --git a/src/k_kart.c b/src/k_kart.c index 2d42bcd3a..79bdb8110 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3323,7 +3323,7 @@ boolean K_WaterRun(mobj_t *mobj) return false; } - case MT_PLAYER: + case MT_PLAYER: // Waterskii { fixed_t minspeed = 0; fixed_t flatspeed = 2 * K_GetKartSpeed(mobj->player, false, false); @@ -3340,7 +3340,7 @@ boolean K_WaterRun(mobj_t *mobj) minspeed = K_PlayerTripwireSpeedThreshold(mobj->player); - if (minspeed >= flatspeed) + if (minspeed >= flatspeed && !G_CompatLevel(0x0011)) minspeed = flatspeed; if (mobj->player->invincibilitytimer From 2551fd3751f03c9102a22935c58ef545915c1ed4 Mon Sep 17 00:00:00 2001 From: Ashnal Date: Sun, 5 Oct 2025 22:42:42 -0400 Subject: [PATCH 3/5] use base speed instead of triupwire speed for pre-boost waterskii cutoff --- src/k_kart.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 79bdb8110..5950b34dd 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3325,9 +3325,6 @@ boolean K_WaterRun(mobj_t *mobj) case MT_PLAYER: // Waterskii { - fixed_t minspeed = 0; - fixed_t flatspeed = 2 * K_GetKartSpeed(mobj->player, false, false); - if (mobj->player == NULL) { return false; @@ -3338,10 +3335,23 @@ boolean K_WaterRun(mobj_t *mobj) return K_IsHoldingDownTop(mobj->player) == false; } - minspeed = K_PlayerTripwireSpeedThreshold(mobj->player); + fixed_t basefullspeed = K_GetKartSpeed(mobj->player, false, false); + fixed_t minspeed = K_PlayerTripwireSpeedThreshold(mobj->player); - if (minspeed >= flatspeed && !G_CompatLevel(0x0011)) - minspeed = flatspeed; + if (G_CompatLevel(0x0011)) + { + if (mobj->player->speed < minspeed / 5) // 40% + { + return false; + } + } + else // Don't factor tripwire speed for pre-boost cutoff + { + if (mobj->player->speed < basefullspeed * 2/3) // 66% + { + return false; + } + } if (mobj->player->invincibilitytimer || mobj->player->sneakertimer @@ -3354,11 +3364,6 @@ boolean K_WaterRun(mobj_t *mobj) return true; } - if (mobj->player->speed < minspeed / 5) // Or if you're at half tripwire speed - { - return false; - } - return false; } From b2d668f0159659fe80ef7a222e4cf1320f23eb17 Mon Sep 17 00:00:00 2001 From: Ashnal Date: Sun, 5 Oct 2025 23:14:55 -0400 Subject: [PATCH 4/5] Add half sec tiregrease to zippers to facilitate waterski at high tripwire speed thresholds --- src/k_terrain.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/k_terrain.c b/src/k_terrain.c index a065827aa..6562b9a32 100644 --- a/src/k_terrain.c +++ b/src/k_terrain.c @@ -603,6 +603,15 @@ void K_ProcessTerrainEffect(mobj_t *mo) player->dashpadcooldown = TICRATE/3; player->trickpanel = TRICKSTATE_NONE; player->floorboost = 2; + + if (G_CompatLevel(0x0011)) + { + + } + else + { + player->tiregrease = TICRATE/2; + } S_StartSound(player->mo, sfx_cdfm62); } From 43b5117416fb03f45c92b515fa3aa3400ba6b046 Mon Sep 17 00:00:00 2001 From: Ashnal Date: Sun, 5 Oct 2025 23:16:27 -0400 Subject: [PATCH 5/5] add comment --- src/k_terrain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_terrain.c b/src/k_terrain.c index 6562b9a32..be8cce4f8 100644 --- a/src/k_terrain.c +++ b/src/k_terrain.c @@ -606,7 +606,7 @@ void K_ProcessTerrainEffect(mobj_t *mo) if (G_CompatLevel(0x0011)) { - + // Old behavior, no grease } else {