mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
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:
parent
82fa875502
commit
4eee8ab1d7
4 changed files with 13 additions and 11 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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__
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue