diff --git a/src/p_user.c b/src/p_user.c index fc04f5af8..d577faab2 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4103,7 +4103,7 @@ DoABarrelRoll (player_t *player) return; } - slope = InvAngle(R_GetPitchRollAngle(player->mo)); + slope = InvAngle(R_GetPitchRollAngle(player->mo, player)); if (AbsAngle(slope) < ANGLE_11hh) { diff --git a/src/r_patch.h b/src/r_patch.h index c6d222617..601144a1d 100644 --- a/src/r_patch.h +++ b/src/r_patch.h @@ -15,6 +15,7 @@ #include "r_defs.h" #include "r_picformats.h" #include "doomdef.h" +#include "d_player.h" // Patch functions patch_t *Patch_Create(softwarepatch_t *source, size_t srcsize, void *dest); @@ -38,9 +39,10 @@ patch_t *Patch_GetRotatedSprite( size_t frame, size_t spriteangle, boolean flip, boolean adjustfeet, void *info, INT32 rotationangle); + INT32 R_GetRollAngle(angle_t rollangle); -angle_t R_GetPitchRollAngle(mobj_t *mobj); -angle_t R_SpriteRotationAngle(mobj_t *mobj); +angle_t R_GetPitchRollAngle(mobj_t *mobj, player_t *viewPlayer); +angle_t R_SpriteRotationAngle(mobj_t *mobj, player_t *viewPlayer); #endif #endif // __R_PATCH__ diff --git a/src/r_patchrotation.c b/src/r_patchrotation.c index 096b678ea..3744dfce2 100644 --- a/src/r_patchrotation.c +++ b/src/r_patchrotation.c @@ -21,9 +21,9 @@ fixed_t rollcosang[ROTANGLES]; fixed_t rollsinang[ROTANGLES]; -angle_t R_GetPitchRollAngle(mobj_t *mobj) +angle_t R_GetPitchRollAngle(mobj_t *mobj, player_t *viewPlayer) { - angle_t viewingAngle = R_PointToAngle(mobj->x, mobj->y); + angle_t viewingAngle = R_PointToAnglePlayer(viewPlayer, mobj->x, mobj->y); fixed_t pitchMul = -FINESINE(viewingAngle >> ANGLETOFINESHIFT); fixed_t rollMul = FINECOSINE(viewingAngle >> ANGLETOFINESHIFT); @@ -33,9 +33,9 @@ angle_t R_GetPitchRollAngle(mobj_t *mobj) return rollOrPitch; } -static angle_t R_PlayerSpriteRotation(player_t *player) +static angle_t R_PlayerSpriteRotation(player_t *player, player_t *viewPlayer) { - angle_t viewingAngle = R_PointToAngle(player->mo->x, player->mo->y); + angle_t viewingAngle = R_PointToAnglePlayer(viewPlayer, player->mo->x, player->mo->y); angle_t angleDelta = (viewingAngle - player->mo->angle); angle_t sliptideLift = player->aizdrifttilt; @@ -60,14 +60,14 @@ static angle_t R_PlayerSpriteRotation(player_t *player) return rollAngle; } -angle_t R_SpriteRotationAngle(mobj_t *mobj) +angle_t R_SpriteRotationAngle(mobj_t *mobj, player_t *viewPlayer) { - angle_t rollOrPitch = R_GetPitchRollAngle(mobj); + angle_t rollOrPitch = R_GetPitchRollAngle(mobj, viewPlayer); angle_t rollAngle = (rollOrPitch + mobj->rollangle); if (mobj->player) { - rollAngle += R_PlayerSpriteRotation(mobj->player); + rollAngle += R_PlayerSpriteRotation(mobj->player, viewPlayer); } return rollAngle; diff --git a/src/r_things.c b/src/r_things.c index ce62b0ad6..21e0228a3 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1574,7 +1574,7 @@ static void R_ProjectSprite(mobj_t *thing) patch = W_CachePatchNum(sprframe->lumppat[rot], PU_SPRITE); #ifdef ROTSPRITE - spriterotangle = R_SpriteRotationAngle(thing); + spriterotangle = R_SpriteRotationAngle(thing, NULL); if (spriterotangle && !(splat && !(thing->renderflags & RF_NOSPLATROLLANGLE)))