Merge branch 'first-person-improvements' into 'master'

First person fixes and tweaks

Closes #180 and #179

See merge request KartKrew/RingRacers!71
This commit is contained in:
Eidolon 2025-02-14 04:13:44 +00:00
commit c192f13d5d
3 changed files with 40 additions and 19 deletions

View file

@ -5234,7 +5234,7 @@ static void K_drawKartFirstPerson(void)
fixed_t scale;
UINT8 *colmap = NULL;
if (stplyr->spectator || !stplyr->mo || (stplyr->mo->renderflags & RF_DONTDRAW))
if (stplyr->spectator || !stplyr->mo || (stplyr->mo->renderflags & RF_DONTDRAW || stplyr->mo->state == &states[S_KART_DEAD]))
return;
{

View file

@ -4092,6 +4092,9 @@ Quaketilt (player_t *player)
static void
DoABarrelRoll (player_t *player)
{
UINT8 viewnum = R_GetViewNumber();
camera_t *cam = &camera[viewnum];
angle_t slope;
angle_t delta;
@ -4120,9 +4123,17 @@ DoABarrelRoll (player_t *player)
slope = 0;
}
if (AbsAngle(slope) > ANGLE_45)
if (cam->chase)
{
slope = slope & ANGLE_180 ? InvAngle(ANGLE_45) : ANGLE_45;
if (AbsAngle(slope) > ANGLE_45)
{
slope = slope & ANGLE_180 ? InvAngle(ANGLE_45) : ANGLE_45;
}
} else {
if (AbsAngle(slope) > ANGLE_90)
{
slope = slope & ANGLE_180 ? InvAngle(ANGLE_90) : ANGLE_90;
}
}
slope -= Quaketilt(player);
@ -4130,7 +4141,7 @@ DoABarrelRoll (player_t *player)
delta = slope - player->tilt;
smoothing = FixedDiv(AbsAngle(slope), ANGLE_45);
delta = FixedDiv(delta, 33 *
delta = FixedDiv(delta, (cam->chase ? 33 : 11) *
FixedDiv(FRACUNIT, FRACUNIT + smoothing));
if (delta)

View file

@ -307,8 +307,18 @@ angle_t R_PointToAnglePlayer(player_t *player, fixed_t x, fixed_t y)
{
refx = cam->x;
refy = cam->y;
}
// Bandaid for two very specific bugs that arise with chasecam off.
// 1: Camera tilt from slopes wouldn't apply correctly in first person.
// 2: Trick pies would appear strangely in first person.
if (player->mo)
{
if ((!cam->chase) && player->mo->x == x && player->mo->y == y)
{
return player->mo->angle;
}
}
}
return R_PointToAngle2(refx, refy, x, y);
}