diff --git a/src/k_kart.c b/src/k_kart.c index 41369aa4..766e4afb 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1006,6 +1006,22 @@ static void K_PlayTauntSound(mobj_t *source) } } +void K_MomentumToFacing(player_t *player) +{ + angle_t dangle = player->mo->angle - R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy); + fixed_t speed = R_PointToDist2(0, 0, player->rmomx, player->rmomy); + + if (dangle > ANGLE_180) + dangle = InvAngle(dangle); + + // If you aren't on the ground or are moving in too different of a direction don't do this + if (!P_IsObjectOnGround(player->mo) || dangle > ANGLE_90) + return; + + P_Thrust(player->mo, player->mo->angle, speed - FixedMul(speed, player->mo->friction)); + player->mo->momx = FixedMul(player->mo->momx, player->mo->friction); + player->mo->momy = FixedMul(player->mo->momy, player->mo->friction); +} // if speed is true it gets the speed boost power, otherwise it gets the acceleration static fixed_t K_GetKartBoostPower(player_t *player, boolean speed) diff --git a/src/k_kart.h b/src/k_kart.h index 80c6ea9a..1456ec7c 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -23,6 +23,7 @@ void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 void K_SpawnDriftTrail(player_t *player); void K_DoMushroom(player_t *player, boolean doPFlag); INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue); +void K_MomentumToFacing(player_t *player); fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower); fixed_t K_3dKartMovement(player_t *player, boolean onground, boolean forwardmovement); void K_MoveKartPlayer(player_t *player, boolean onground); diff --git a/src/p_user.c b/src/p_user.c index 320a300d..517fcb4c 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4789,6 +4789,10 @@ static void P_3dMovement(player_t *player) P_Thrust(player->mo, movepushangle, movepushforward); #endif } + else if (!player->kartstuff[k_spinouttimer]) + { + K_MomentumToFacing(player); + } // Sideways movement if (player->climbing) {