Merge branch 'splits-tilt-fix' into 'master'

Fix tilting in splitscreen

See merge request KartKrew/Kart!439
This commit is contained in:
Sal 2021-06-12 03:17:05 -04:00
commit 41b0465efe
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)))