diff --git a/src/p_local.h b/src/p_local.h index a04f1f197..7c71c7ebf 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -523,6 +523,7 @@ void P_Thrust(mobj_t *mo, angle_t angle, fixed_t move); void P_ExplodeMissile(mobj_t *mo); void P_CheckGravity(mobj_t *mo, boolean affect); void P_SetPitchRollFromSlope(mobj_t *mo, pslope_t *slope); +void P_SetPitchRoll(mobj_t *mo, angle_t pitch, angle_t yaw); fixed_t P_ScaleFromMap(fixed_t n, fixed_t scale); fixed_t P_GetMobjHead(const mobj_t *); fixed_t P_GetMobjFeet(const mobj_t *); diff --git a/src/p_mobj.c b/src/p_mobj.c index fff2a78f1..d912d61cf 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1250,6 +1250,17 @@ void P_SetPitchRollFromSlope(mobj_t *mo, pslope_t *slope) } } +// +// P_SetPitchRoll +// +void P_SetPitchRoll(mobj_t *mo, angle_t pitch, angle_t yaw) +{ + pitch = InvAngle(pitch); + yaw >>= ANGLETOFINESHIFT; + mo->roll = FixedMul(pitch, FINESINE (yaw)); + mo->pitch = FixedMul(pitch, FINECOSINE (yaw)); +} + #define STOPSPEED (FRACUNIT) // @@ -1662,6 +1673,8 @@ void P_XYMovement(mobj_t *mo) { mo->momz = transfermomz; mo->standingslope = NULL; + P_SetPitchRoll(mo, ANGLE_90, + transferslope->xydirection); if (player) { player->powers[pw_justlaunched] = 2;