Fix tilting in splitscreen

R_GetPitchRollAngle used R_PointToAngle. This was fine because it was meant for rendering code. However tilting does its code mostly in player thinker, and it also uses this function, so it was not fine -- it would have some remainder tilt settings from the last player's screen.
This commit is contained in:
Sally Coolatta 2021-06-12 02:15:00 -04:00
parent 82fa875502
commit 4eee8ab1d7
4 changed files with 13 additions and 11 deletions

View file

@ -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)
{

View file

@ -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__

View file

@ -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;

View file

@ -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)))