diff --git a/src/p_inter.c b/src/p_inter.c index 956a13c2eb1912dd21e17e4ba1a33e090b1881e5..56956737941899b5da79577401050a4f34e5fb85 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 b44a6f11821839f8e70bb4209addd9b91a669e3f..5e33d55a40b789a5776f3bd03676af705a046924 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);