Lift the wheels of your jart a little when sliptiding

This commit is contained in:
James R 2021-04-06 03:57:53 -07:00
parent c74e02d9dc
commit 696e405038
5 changed files with 30 additions and 6 deletions

View file

@ -7539,6 +7539,12 @@ boolean K_PlayerEBrake(player_t *player)
&& player->powers[pw_nocontrol] == 0;
}
SINT8 K_Sliptiding(player_t *player)
{
const INT32 *p = player->kartstuff;
return p[k_drift] ? 0 : p[k_aizdriftstrat];
}
static void K_KartSpindashDust(mobj_t *parent)
{
fixed_t rad = FixedDiv(FixedHypot(parent->radius, parent->radius), parent->scale);

View file

@ -96,6 +96,7 @@ UINT16 K_GetKartButtons(player_t *player);
SINT8 K_GetForwardMove(player_t *player);
fixed_t K_3dKartMovement(player_t *player);
boolean K_PlayerEBrake(player_t *player);
SINT8 K_Sliptiding(player_t *player);
void K_AdjustPlayerFriction(player_t *player);
void K_MoveKartPlayer(player_t *player, boolean onground);
void K_CheckSpectateStatus(void);

View file

@ -4252,10 +4252,6 @@ Quaketilt (player_t *player)
fixed_t speed;
boolean sliptiding = K_Sliptiding(player);
(
player->kartstuff[k_aizdriftstrat] != 0 &&
player->kartstuff[k_drift] == 0
);
if (delta == (INT32)ANGLE_180)/* FUCK YOU HAVE A HACK */
{

View file

@ -14,6 +14,7 @@
#include "z_zone.h"
#include "w_wad.h"
#include "r_main.h" // R_PointToAngle
#include "k_kart.h" // K_Sliptiding
#ifdef ROTSPRITE
fixed_t rollcosang[ROTANGLES];
@ -22,13 +23,27 @@ fixed_t rollsinang[ROTANGLES];
angle_t R_SpriteRotationAngle(mobj_t *mobj)
{
angle_t viewingAngle = R_PointToAngle(mobj->x, mobj->y);
angle_t angleDelta = (viewingAngle - mobj->angle);
fixed_t pitchMul = -FINESINE(viewingAngle >> ANGLETOFINESHIFT);
fixed_t rollMul = FINECOSINE(viewingAngle >> ANGLETOFINESHIFT);
angle_t rollOrPitch = FixedMul(mobj->pitch, pitchMul) + FixedMul(mobj->roll, rollMul);
angle_t sliptideLift = mobj->player
? K_Sliptiding(mobj->player) * ANGLE_11hh : 0;
return (rollOrPitch + mobj->rollangle);
angle_t rollOrPitch = FixedMul(mobj->pitch, pitchMul) + FixedMul(mobj->roll, rollMul);
angle_t rollAngle = (rollOrPitch + mobj->rollangle);
if (sliptideLift)
{
/* (from side) tilt downward if turning
toward camera, upward if away. */
rollAngle +=
FixedMul(sliptideLift, FINESINE(AbsAngle(angleDelta) >> ANGLETOFINESHIFT)) +
FixedMul(sliptideLift, FINECOSINE(angleDelta >> ANGLETOFINESHIFT));
}
return rollAngle;
}
INT32 R_GetRollAngle(angle_t rollangle)

View file

@ -93,6 +93,12 @@ FUNCMATH FUNCINLINE static ATTRINLINE angle_t InvAngle(angle_t a)
{
return (ANGLE_MAX-a)+1;
}
// 315 = 45
FUNCMATH FUNCINLINE static ATTRINLINE angle_t AbsAngle(angle_t a)
{
return a & ANGLE_180 ? InvAngle(a) : a;
}
// angle_t to fixed_t f(ANGLE_45) = 45*FRACUNIT
FUNCMATH fixed_t AngleFixed(angle_t af);
// fixed_t to angle_t f(45*FRACUNIT) = ANGLE_45