diff --git a/src/k_kart.c b/src/k_kart.c index b3bb1d8d9..af9511b8f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3387,7 +3387,7 @@ void K_DoBoost(player_t *player, fixed_t speedboost, fixed_t accelboost, boolean player->boostinfo.nonstackspeedboost = max(player->boostinfo.nonstackspeedboost, speedboost); - if (cv_kartstacking_accelstack.value) + if (cv_kartstacking_accelstack.value && stackingactive) { player->boostinfo.accelboost += accelboost; } diff --git a/src/p_mobj.c b/src/p_mobj.c index 4e8933e12..020022cda 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1733,10 +1733,6 @@ void P_XYMovement(mobj_t *mo) mo->momz = transfermomz; mo->standingslope = NULL; mo->terrain = NULL; - P_SetPitchRoll(mo, ANGLE_90, - transferslope->xydirection - + (transferslope->zangle - & ANGLE_180)); } } } diff --git a/src/p_user.c b/src/p_user.c index bca1c84f5..89d278171 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3668,15 +3668,26 @@ Quaketilt (player_t *player) static angle_t P_GetCameraPitchRollAngle(mobj_t *mobj, player_t *viewPlayer) { - angle_t viewingAngle = R_PointToAnglePlayer(viewPlayer, mobj->x, mobj->y); - - fixed_t pitchMul = -FINESINE(viewingAngle >> ANGLETOFINESHIFT); - fixed_t rollMul = FINECOSINE(viewingAngle >> ANGLETOFINESHIFT); - + angle_t viewingAngle, rollOrPitch; angle_t sloperolll = mobj->slopepitch; angle_t slopepitch = mobj->sloperoll; + fixed_t pitchMul, rollMul; - angle_t rollOrPitch = FixedMul(mobj->pitch + sloperolll, pitchMul) + FixedMul(mobj->roll + slopepitch, rollMul); + if (mobj->player && cv_sloperoll.value) + { + // We are the player, use camera for air tilting. + viewingAngle = R_PointToAnglePlayer(viewPlayer, mobj->x, mobj->y); + } + else + { + // Regular Mobjs don't air tilt. + viewingAngle = mobj->angle; + } + + pitchMul = -FINESINE(viewingAngle >> ANGLETOFINESHIFT); + rollMul = FINECOSINE(viewingAngle >> ANGLETOFINESHIFT); + + rollOrPitch = FixedMul(mobj->pitch + sloperolll, pitchMul) + FixedMul(mobj->roll + slopepitch, rollMul); return rollOrPitch; } diff --git a/src/r_patchrotation.c b/src/r_patchrotation.c index 5802b56d9..2bb1c1a58 100644 --- a/src/r_patchrotation.c +++ b/src/r_patchrotation.c @@ -23,13 +23,24 @@ fixed_t rollsinang[ROTANGLES]; angle_t R_GetPitchRollAngle(mobj_t *mobj, player_t *viewPlayer) { - angle_t viewingAngle = R_PointToAnglePlayer(viewPlayer, mobj->x, mobj->y); - - fixed_t pitchMul = -FINESINE(viewingAngle >> ANGLETOFINESHIFT); - fixed_t rollMul = FINECOSINE(viewingAngle >> ANGLETOFINESHIFT); - + angle_t viewingAngle, rollOrPitch; angle_t sloperolll = mobj->slopepitch; angle_t slopepitch = mobj->sloperoll; + fixed_t pitchMul, rollMul; + + if (mobj->player) + { + // We are the player, use camera for air tilting. + viewingAngle = R_PointToAnglePlayer(viewPlayer, mobj->x, mobj->y); + } + else + { + // Regular Mobjs don't air tilt. + viewingAngle = mobj->angle; + } + + pitchMul = -FINESINE(viewingAngle >> ANGLETOFINESHIFT); + rollMul = FINECOSINE(viewingAngle >> ANGLETOFINESHIFT); if (!cv_sloperoll.value || (mobj->player && (mobj->player->pogospring > 0))) { @@ -37,7 +48,7 @@ angle_t R_GetPitchRollAngle(mobj_t *mobj, player_t *viewPlayer) slopepitch = 0; } - angle_t rollOrPitch = FixedMul(mobj->pitch + sloperolll, pitchMul) + FixedMul(mobj->roll + slopepitch, rollMul); + rollOrPitch = FixedMul(mobj->pitch + sloperolll, pitchMul) + FixedMul(mobj->roll + slopepitch, rollMul); return rollOrPitch; } @@ -65,7 +76,6 @@ static angle_t R_PlayerSpriteRotation(player_t *player, player_t *viewPlayer) rollAngle = 0; } - return rollAngle; }