From 7886c6efb4c31961c57283772a3570c9be6de20f Mon Sep 17 00:00:00 2001 From: NepDisk <16447892+NepDisk@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:40:46 -0400 Subject: [PATCH] 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. --- src/k_kart.c | 2 +- src/lua_hook.h | 4 ---- src/p_user.c | 11 ----------- src/r_fps.c | 19 ++++++++++++++++++- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index e80ef4c4f..df500c6ac 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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. { diff --git a/src/lua_hook.h b/src/lua_hook.h index 131aa0fe5..531af6ad5 100644 --- a/src/lua_hook.h +++ b/src/lua_hook.h @@ -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 */\ diff --git a/src/p_user.c b/src/p_user.c index 05b068604..7f014f3bb 100644 --- a/src/p_user.c +++ b/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; diff --git a/src/r_fps.c b/src/r_fps.c index 2c01cc571..193e499d7 100644 --- a/src/r_fps.c +++ b/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 {