From 60e65133e69b4dec5c3a82136c7e7d4a01ede788 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sun, 28 Sep 2025 20:53:57 -0400 Subject: [PATCH 1/3] Race Tripwire 200% -> 250%, check larger scam window in larger games --- src/k_kart.c | 31 +++++++++++++++++-------------- src/k_kart.h | 4 ++-- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index e1931c2da..f7647928c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -507,7 +507,7 @@ boolean K_IsPlayerLosing(player_t *player) } // Some behavior should change if the player approaches the frontrunner unusually fast. -fixed_t K_PlayerScamPercentage(const player_t *player, UINT8 mult) +fixed_t K_PlayerScamPercentage(const player_t *player, fixed_t mult) { if (!M_NotFreePlay()) return 0; @@ -522,7 +522,7 @@ fixed_t K_PlayerScamPercentage(const player_t *player, UINT8 mult) // "Why 2000?" Vibes UINT32 distance = K_GetItemRouletteDistance(player, 8); - UINT32 scamdistance = mult * SCAMDIST; + UINT32 scamdistance = FixedMul(mult, SCAMDIST*FRACUNIT)/FRACUNIT; if (distance >= scamdistance) return 0; @@ -3171,17 +3171,17 @@ boolean K_SlopeResistance(const player_t *player) fixed_t K_PlayerTripwireSpeedThreshold(const player_t *player) { - - fixed_t required_speed = 2 * K_GetKartSpeed(player, false, false); // 200% + fixed_t base_speed = K_GetKartSpeed(player, false, false); + fixed_t required_speed = 5 * base_speed / 2; // 250% if (K_LegacyRingboost(player)) - return required_speed; + return 2 * base_speed; if (specialstageinfo.valid) - required_speed = 3 * K_GetKartSpeed(player, false, false) / 2; // 150% + required_speed = 3 * base_speed / 2; // 150% if (modeattacking && !(gametyperules & GTR_CATCHER)) - required_speed = 4 * K_GetKartSpeed(player, false, false); + required_speed = 4 * base_speed; if ((gametyperules & GTR_CIRCUIT) && !K_Cooperative() && M_NotFreePlay() && !modeattacking) { @@ -3190,7 +3190,7 @@ fixed_t K_PlayerTripwireSpeedThreshold(const player_t *player) */ #define REVERSED_SONICBOOM_PRORATION (30000) - #define MAX_SONICBOOM_REDUCTION (7*FRACUNIT/8) + #define MAX_SONICBOOM_REDUCTION (7*FRACUNIT/10) UINT32 dist = K_GetItemRouletteDistance(player, D_NumPlayersInRace()); @@ -3208,20 +3208,23 @@ fixed_t K_PlayerTripwireSpeedThreshold(const player_t *player) And then all of this will be for making it harder when you're in scam range, actual proration */ - required_speed += FixedMul(required_speed, K_PlayerScamPercentage(player, 3/2)); + fixed_t scamcheck_in_2p = 3*FRACUNIT/2; // Lower values = need to be closer to be scamming + fixed_t scamcheck_in_16p = 3*FRACUNIT; // Higher values = tripwire threshold goes up when further away + fixed_t scamscaler = FixedRescale(D_NumPlayersInRace(), 2, 16, Easing_Linear, scamcheck_in_2p, scamcheck_in_16p); + required_speed += FixedMul(required_speed, K_PlayerScamPercentage(player, scamscaler)); - if(player->position == 1) + if (player->position == 1) { required_speed = 9 * K_GetKartSpeed(player, false, false); // Seek employment } - /* + #if 0 if (!K_PlayerUsesBotMovement(player)) // Sonic Boom debug { //CONS_Printf("Sonic Boom threshold: %d percent, IN FRACUNIT: %d \n", ((required_speed *100) / K_GetKartSpeed(player, false, false)), required_speed); - CONS_Printf("D=%d DF=%d SBA=%d RS=%d RRS=%d\n", dist, distfactor, sonicboom_aid, required_speed, required_speed * 100 / K_GetKartSpeed(player, false, false)); + CONS_Printf("D=%d DF=%d SBA=%d SCAM=%d RRS=%d\n", dist, distfactor, sonicboom_aid, K_PlayerScamPercentage(player, scamscaler), required_speed * 100 / base_speed); } - */ + #endif #undef REVERSED_SONICBOOM_PRORATION #undef MAX_SONICBOOM_REDUCTION @@ -9827,7 +9830,7 @@ boolean K_PressingEBrake(const player_t *player) void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) { const boolean onground = P_IsObjectOnGround(player->mo); - const fixed_t scamming = K_PlayerScamPercentage(player, 1); + const fixed_t scamming = K_PlayerScamPercentage(player, FRACUNIT); /* reset sprite offsets :) */ player->mo->sprxoff = 0; diff --git a/src/k_kart.h b/src/k_kart.h index e45792a3a..056516c1b 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -105,7 +105,7 @@ Make sure this matches the actual number of states #define MAXTOPACCEL (12*FRACUNIT) #define TOPACCELREGEN (FRACUNIT/16) -#define BUBBLESCAM (4) +#define BUBBLESCAM (4*FRACUNIT) // Handling boosts and sliptide conditions got weird. // You must be under a handling boost of at least SLIPTIDEHANDLING to sliptide. @@ -144,7 +144,7 @@ UINT32 K_GetPlayerDontDrawFlag(player_t *player); void K_ReduceVFXForEveryone(mobj_t *mo); boolean K_IsPlayerLosing(player_t *player); -fixed_t K_PlayerScamPercentage(const player_t *player, UINT8 mult); +fixed_t K_PlayerScamPercentage(const player_t *player, fixed_t mult); fixed_t K_GetKartGameSpeedScalar(SINT8 value); INT32 K_GetShieldFromItem(INT32 item); From d3ac1a6c5ec4b30ab4e47d9b2f5531d690d8fc02 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Mon, 29 Sep 2025 01:19:56 -0400 Subject: [PATCH 2/3] 200% tripwire in Tutorial / Easy --- src/k_kart.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index f7647928c..fa33219f2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3174,15 +3174,19 @@ fixed_t K_PlayerTripwireSpeedThreshold(const player_t *player) fixed_t base_speed = K_GetKartSpeed(player, false, false); fixed_t required_speed = 5 * base_speed / 2; // 250% - if (K_LegacyRingboost(player)) - return 2 * base_speed; + // 200% in Easy / Tutorial + if (gamespeed == KARTSPEED_EASY) + required_speed = 2 * base_speed; + // 150% in special if (specialstageinfo.valid) - required_speed = 3 * base_speed / 2; // 150% + required_speed = 3 * base_speed / 2; + // 400% in Time Attack if (modeattacking && !(gametyperules & GTR_CATCHER)) required_speed = 4 * base_speed; + // Race if ((gametyperules & GTR_CIRCUIT) && !K_Cooperative() && M_NotFreePlay() && !modeattacking) { /* From 59c4cfb2be75a3aedfbf6dca90def54f3211d5e6 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Mon, 29 Sep 2025 01:54:30 -0400 Subject: [PATCH 3/3] Class R tripwire oopsie --- src/k_kart.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index fa33219f2..673e30a41 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3178,6 +3178,9 @@ fixed_t K_PlayerTripwireSpeedThreshold(const player_t *player) if (gamespeed == KARTSPEED_EASY) required_speed = 2 * base_speed; + if (K_LegacyRingboost(player)) + return 2 * base_speed; + // 150% in special if (specialstageinfo.valid) required_speed = 3 * base_speed / 2;