diff --git a/src/k_kart.c b/src/k_kart.c index e8b424179..1865487f3 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2077,6 +2077,18 @@ void K_SpawnInvincibilitySpeedLines(mobj_t *mo) fast->destscale = 6*((mo->player->invincibilitytimer/TICRATE)*FRACUNIT)/8; } +void K_SpawnBumpEffect(mobj_t *mo) +{ + mobj_t *fx = P_SpawnMobj(mo->x, mo->y, mo->z, MT_BUMP); + if (mo->eflags & MFE_VERTICALFLIP) + fx->eflags |= MFE_VERTICALFLIP; + else + fx->eflags &= ~MFE_VERTICALFLIP; + fx->scale = mo->scale; + + S_StartSound(mo, sfx_s3k49); +} + static SINT8 K_GlanceAtPlayers(player_t *glancePlayer) { const fixed_t maxdistance = FixedMul(1280 * mapobjectscale, K_GetKartGameSpeedScalar(gamespeed)); diff --git a/src/k_kart.h b/src/k_kart.h index b8e74539b..98d948d7e 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -51,6 +51,7 @@ void K_SpawnDriftBoostClip(player_t *player); void K_SpawnDriftBoostClipSpark(mobj_t *clip); void K_SpawnNormalSpeedLines(player_t *player); void K_SpawnInvincibilitySpeedLines(mobj_t *mo); +void K_SpawnBumpEffect(mobj_t *mo); void K_KartMoveAnimation(player_t *player); void K_KartPlayerHUDUpdate(player_t *player); void K_KartPlayerThink(player_t *player, ticcmd_t *cmd); diff --git a/src/p_map.c b/src/p_map.c index 42fa89b73..de1337f2b 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -3695,14 +3695,7 @@ void P_BouncePlayerMove(mobj_t *mo) } else { - mobj_t *fx = P_SpawnMobj(mo->x, mo->y, mo->z, MT_BUMP); - if (mo->eflags & MFE_VERTICALFLIP) - fx->eflags |= MFE_VERTICALFLIP; - else - fx->eflags &= ~MFE_VERTICALFLIP; - fx->scale = mo->scale; - - S_StartSound(mo, sfx_s3k49); + K_SpawnBumpEffect(mo); } P_PlayerHitBounceLine(bestslideline); diff --git a/src/p_mobj.c b/src/p_mobj.c index 2b2cfc251..63179523d 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2775,6 +2775,15 @@ void P_PlayerZMovement(mobj_t *mo) P_CheckMarioBlocks(mo); mo->momz = 0; + P_CheckGravity(mo, true); + + if (abs(mo->momz) < 15 * mapobjectscale) + { + mo->momz = 15 * mapobjectscale + * -(P_MobjFlip(mo)); + } + + K_SpawnBumpEffect(mo); } } }