From 71a25eef9279eae67cbe7d8d7978536bc0fc3485 Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Sat, 15 Jun 2019 21:58:58 +0200
Subject: [PATCH] Don't jump repeatedly when holding jump

---
 src/p_inter.c | 1 +
 src/p_user.c  | 8 ++++----
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/p_inter.c b/src/p_inter.c
index 956a13c2eb..5695673794 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -1718,6 +1718,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
 				mcart->friction = FRACUNIT;
 
 				P_ResetPlayer(player);
+				player->pflags |= PF_JUMPDOWN;
 				player->powers[pw_carry] = CR_MINECART;
 				toucher->player->pflags &= ~PF_APPLYAUTOBRAKE;
 				P_SetTarget(&toucher->tracer, mcart);
diff --git a/src/p_user.c b/src/p_user.c
index b44a6f1182..5e33d55a40 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -9990,9 +9990,7 @@ static void P_MinecartThink(player_t *player)
 	//P_ResetPlayer(player);
 
 	// Player holding jump?
-	if (player->cmd.buttons & BT_JUMP)
-		player->pflags |= PF_JUMPDOWN;
-	else
+	if (!(player->cmd.buttons & BT_JUMP))
 		player->pflags &= ~PF_JUMPDOWN;
 
 	// Handle segments.
@@ -10103,8 +10101,10 @@ static void P_MinecartThink(player_t *player)
 			//	currentSpeed -= FRACUNIT/8;
 
 			// Jumping
-			if (player->cmd.buttons & BT_JUMP)
+			if ((player->cmd.buttons & BT_JUMP) && !(player->pflags & PF_JUMPDOWN))
 			{
+				player->pflags |= PF_JUMPDOWN;
+
 				if (minecart->eflags & MFE_ONGROUND)
 					minecart->eflags &= ~MFE_ONGROUND;
 				minecart->z += P_MobjFlip(minecart);
-- 
GitLab