From bad7611b93f508f34622a063077235c138fbd735 Mon Sep 17 00:00:00 2001 From: Anonimus Date: Sun, 2 Nov 2025 09:02:37 -0500 Subject: [PATCH] Prevent flipped over players from tumbling endlessly I'm not sure why this wasn't a thing in the first place --- src/k_kart.c | 6 ++++-- src/k_kart.h | 11 ++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index ee0b19c70..802d74d0e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7127,8 +7127,10 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->spinouttimer = 0; player->wipeoutslow = 0; - if (P_IsObjectOnGround(player->mo) && - ((INT32)(player->flipovertimer - 1) > 2)) + if ((P_IsObjectOnGround(player->mo) && + ((INT32)(player->flipovertimer - 1) > 2)) || // Hit the ground... + (player->flipovertimer > + FLIPOVERLIMIT)) // ...or we've been tumbling around for too long. { player->flipovertimer = 0; player->mo->rollangle = 0; diff --git a/src/k_kart.h b/src/k_kart.h index 057cdffcb..b3a35e884 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -48,11 +48,16 @@ Make sure this matches the actual number of states #define FLIPOVERDIST (336<>1) -#define FLIPOVER_90DEGTIME ((FLIPOVERTICS>>2)+1) // 0.1666 * FRACUNIT +#define FLIPOVER_90DEGTIME ((FLIPOVERTICS>>2)+1) // TICRATE * 0.1666 +#define FLIPOVER_360DEGTIME (FLIPOVER_90DEGTIME * 4) + +// Force-stops a flipover if the timer exceeds this limit. +// Initially enough to last 2 rotations. +#define FLIPOVERLIMIT (FLIPOVER_360DEGTIME * 2) // Angle movement for a flipover // ANGLE_90 / FLIPOVER_90DEGTIME