Make drift and sliptide angle turn renderer based, to recreate v1 kart drift
v1 had its art assets show a different angle on drift while v2 does not. This recreates that effect without touching drawangle/frameangle and the art assets This makes sure that scripts that set drawangle/frameangle to match player angle won't eat the drift frames.
This commit is contained in:
parent
4f9f23f75c
commit
7886c6efb4
4 changed files with 19 additions and 17 deletions
|
|
@ -8265,7 +8265,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
player->pflags &= ~PF_USERINGS;
|
||||
}
|
||||
|
||||
if (player && player->mo && player->mo->health > 0 && !player->spectator && !P_PlayerInPain(player) && !mapreset && leveltime > introtime)
|
||||
if (player && player->mo && player->mo->health > 0 && !player->spectator && !P_PlayerInPain(player) && !(player->exiting || mapreset) && leveltime > introtime)
|
||||
{
|
||||
// First, the really specific, finicky items that function without the item being directly in your item slot.
|
||||
{
|
||||
|
|
|
|||
|
|
@ -51,10 +51,6 @@ automatically.
|
|||
X (PreThinkFrame)/* frame (before mobj and player thinkers) */,\
|
||||
X (ThinkFrame),/* frame (after mobj and player thinkers) */\
|
||||
X (PostThinkFrame),/* frame (at end of tick, ie after overlays, precipitation, specials) */\
|
||||
X (JumpSpecial),/* P_DoJumpStuff (Any-jumping) */\
|
||||
X (AbilitySpecial),/* P_DoJumpStuff (Double-jumping) */\
|
||||
X (SpinSpecial),/* P_DoSpinAbility (Spin button effect) */\
|
||||
X (JumpSpinSpecial),/* P_DoJumpStuff (Spin button effect (mid-air)) */\
|
||||
X (BotTiccmd),/* B_BuildTiccmd */\
|
||||
X (PlayerMsg),/* chat messages */\
|
||||
X (HurtMsg),/* imhurttin */\
|
||||
|
|
|
|||
11
src/p_user.c
11
src/p_user.c
|
|
@ -2202,17 +2202,6 @@ void P_MovePlayer(player_t *player)
|
|||
else
|
||||
{
|
||||
player->drawangle = player->mo->angle;
|
||||
|
||||
if (player->aizdriftturn)
|
||||
{
|
||||
player->drawangle += player->aizdriftturn;
|
||||
}
|
||||
else if (player->drift != 0)
|
||||
{
|
||||
INT32 a = (ANGLE_45 / 5) * player->drift;
|
||||
|
||||
player->drawangle += a;
|
||||
}
|
||||
}
|
||||
|
||||
player->mo->rollangle = 0;
|
||||
|
|
|
|||
19
src/r_fps.c
19
src/r_fps.c
|
|
@ -270,6 +270,22 @@ angle_t R_InterpolateAngle(angle_t from, angle_t to)
|
|||
|
||||
void R_InterpolateMobjState(mobj_t *mobj, fixed_t frac, interpmobjstate_t *out)
|
||||
{
|
||||
// Yucky hack to make sure these values don't affect drawangle value. Blame lua compat concerns.
|
||||
// v1 had its art assets show a different angle on drift while v2 does not. This recreates that effect without touching drawangle or the art assets
|
||||
// This makes sure that scripts that set drawangle/frameangle to match player angle won't eat the drift frames.
|
||||
angle_t addangle = 0;
|
||||
if (mobj->player)
|
||||
{
|
||||
if (mobj->player->aizdriftturn)
|
||||
{
|
||||
addangle += mobj->player->aizdriftturn;
|
||||
}
|
||||
else if (mobj->player->drift != 0)
|
||||
{
|
||||
addangle += (ANGLE_45 / 5) * mobj->player->drift;
|
||||
}
|
||||
}
|
||||
|
||||
if (frac == FRACUNIT)
|
||||
{
|
||||
out->x = mobj->x;
|
||||
|
|
@ -277,7 +293,7 @@ void R_InterpolateMobjState(mobj_t *mobj, fixed_t frac, interpmobjstate_t *out)
|
|||
out->z = mobj->z;
|
||||
out->scale = mobj->scale;
|
||||
out->subsector = mobj->subsector;
|
||||
out->angle = mobj->player ? mobj->player->drawangle : mobj->angle;
|
||||
out->angle = mobj->player ? mobj->player->drawangle + addangle : mobj->angle;
|
||||
out->spritexscale = mobj->spritexscale;
|
||||
out->spriteyscale = mobj->spriteyscale;
|
||||
out->spritexoffset = mobj->spritexoffset;
|
||||
|
|
@ -302,6 +318,7 @@ void R_InterpolateMobjState(mobj_t *mobj, fixed_t frac, interpmobjstate_t *out)
|
|||
if (mobj->player)
|
||||
{
|
||||
out->angle = mobj->resetinterp ? mobj->player->drawangle : R_LerpAngle(mobj->player->old_drawangle, mobj->player->drawangle, frac);
|
||||
out->angle += addangle;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue