diff --git a/src/d_player.h b/src/d_player.h index eec20695c..b75a6f51f 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -529,6 +529,8 @@ typedef struct player_s tic_t airtime; // Keep track of how long you've been in the air boolean driftInput; // Whenever or not try drifting. boolean airFailsafe; // Whenever or not try the air boost + INT32 aizDriftTilt; + INT32 aizDriftTurn; UINT8 trickpanel; // Trick panel state boolean trickdelay; // Prevent tricks until control stick is neutral diff --git a/src/k_kart.c b/src/k_kart.c index 237970120..38d2eb162 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1920,6 +1920,15 @@ void K_KartMoveAnimation(player_t *player) turndir = 1; } + // Use drift frames when sliptiding + if (player->aizDriftTurn) + { + drift = (player->kartstuff[k_aizdriftstrat]); + + if (drift) + turndir = 0; + } + if (lookback == true && drift == 0) { // Prioritize looking back frames over turning @@ -7351,8 +7360,35 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_aizdriftstrat] = ((player->kartstuff[k_drift] > 0) ? 1 : -1); } else if (player->kartstuff[k_aizdriftstrat] && !player->kartstuff[k_drift]) + { K_SpawnAIZDust(player); + if (abs(player->aizDriftTilt) < ANGLE_22h) + { + player->aizDriftTilt = + (abs(player->aizDriftTilt) + ANGLE_11hh / 4) * + player->kartstuff[k_aizdriftstrat]; + } + + if (abs(player->aizDriftTurn) < ANGLE_135) + { + player->aizDriftTurn = + (abs(player->aizDriftTurn) + ANGLE_11hh) * + player->kartstuff[k_aizdriftstrat]; + } + } + + if (!player->kartstuff[k_aizdriftstrat]) + { + player->aizDriftTilt -= player->aizDriftTilt / 4; + player->aizDriftTurn -= player->aizDriftTurn / 4; + + if (abs(player->aizDriftTilt) < ANGLE_11hh / 4) + player->aizDriftTilt = 0; + if (abs(player->aizDriftTurn) < ANGLE_11hh) + player->aizDriftTurn = 0; + } + if (player->kartstuff[k_drift] && ((buttons & BT_BRAKE) || !(buttons & BT_ACCELERATE)) diff --git a/src/p_user.c b/src/p_user.c index b3a85e6fc..e6b754201 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2223,7 +2223,11 @@ void P_MovePlayer(player_t *player) { player->drawangle = player->mo->angle; - if (player->kartstuff[k_drift] != 0) + if (player->aizDriftTurn) + { + player->drawangle += player->aizDriftTurn; + } + else if (player->kartstuff[k_drift] != 0) { INT32 a = (ANGLE_45 / 5) * player->kartstuff[k_drift]; player->drawangle += a; diff --git a/src/r_patchrotation.c b/src/r_patchrotation.c index 9f8c9b415..6149bab24 100644 --- a/src/r_patchrotation.c +++ b/src/r_patchrotation.c @@ -38,7 +38,7 @@ angle_t R_SpriteRotationAngle(mobj_t *mobj) angle_t angleDelta = (viewingAngle - mobj->angle); angle_t sliptideLift = mobj->player - ? K_Sliptiding(mobj->player) * ANGLE_11hh : 0; + ? mobj->player->aizDriftTilt : 0; angle_t rollOrPitch = R_GetPitchRollAngle(mobj); angle_t rollAngle = (rollOrPitch + mobj->rollangle);