diff --git a/src/d_player.h b/src/d_player.h index a6aa69675..9a3c54495 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -108,6 +108,7 @@ typedef enum PF_SHRINKACTIVE = 1<<29, // "Shrink me" cheat is in effect. (Can't be disabled mid-race) PF_VOID = 1<<30, // Removed from reality! When leaving hitlag, reenable visibility+collision and kill speed. + PF_NOFASTFALL = 1<<31, // Has already done ebrake/fastfall behavior for this input. Fastfalling needs a new input to prevent unwanted bounces on unexpected airtime. // up to 1<<31 is free } pflags_t; diff --git a/src/k_kart.c b/src/k_kart.c index 6339b9e02..539b8e3f2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10095,6 +10095,7 @@ static void K_KartSpindash(player_t *player) if (K_PlayerEBrake(player) == false) { player->spindash = 0; + player->pflags &= ~PF_NOFASTFALL; return; } @@ -10106,6 +10107,8 @@ static void K_KartSpindash(player_t *player) } else if (onGround == false) { + if (player->pflags & PF_NOFASTFALL) + return; // Update fastfall. player->fastfall = player->mo->momz; player->spindash = 0; @@ -10124,6 +10127,8 @@ static void K_KartSpindash(player_t *player) return; } + player->pflags |= PF_NOFASTFALL; + if (player->speed == 0 && player->steering != 0 && leveltime % 8 == 0) { // Rubber burn turn sfx