From 680fdf1416ba9b2a9b7632a2941558ab805a3389 Mon Sep 17 00:00:00 2001 From: Sryder Date: Tue, 7 Mar 2017 03:27:44 +0000 Subject: [PATCH] Re-implement the small turn-back after a drift ends --- src/d_player.h | 1 + src/k_kart.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/d_player.h b/src/d_player.h index 4d660970..e21806fb 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -252,6 +252,7 @@ typedef enum k_spinouttype, // Determines whether to thrust forward or not while spinning out; 0 = move forwards, 1 = stay still k_drift, // Drifting Left or Right, plus a bigger counter = sharper turn + k_driftend, // Drift has ended, used to adjust character angle after drift k_driftcharge, // Charge your drift so you can release a burst of speed k_driftboost, // Boost you get from drifting k_boostcharge, // Charge-up for boosting at the start of the race, or when Lakitu drops you diff --git a/src/k_kart.c b/src/k_kart.c index 668e8b5f..ff4329c2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1749,6 +1749,10 @@ INT16 K_GetKartDriftValue(player_t *player, SINT8 turndir) { turntype = 1; } + else if (player->kartstuff[k_driftend] != 0) + { + turntype = 4; + } switch (turntype) { @@ -1761,6 +1765,13 @@ INT16 K_GetKartDriftValue(player_t *player, SINT8 turndir) case 3: driftangle = 450; // Drifting with no input break; + case 4: + { + fixed_t p_maxspeed = FixedMul(K_GetKartSpeed(player, false), 3*FRACUNIT); + fixed_t adjustangle = FixedDiv((p_maxspeed>>16) - (player->speed>>16), (p_maxspeed>>16) + player->kartweight); + driftangle = FixedMul(-800, adjustangle);// Drift has ended and we are tweaking their angle back a bit + } + break; } return driftangle*(player->kartstuff[k_drift] / abs(player->kartstuff[k_drift])); @@ -1814,9 +1825,17 @@ static void K_KartDrift(player_t *player, boolean onground) else if (player->kartstuff[k_jmp] == 0) // || player->kartstuff[k_turndir] == 0) { if (player->kartstuff[k_drift] > 0) + { player->kartstuff[k_drift]--; + player->kartstuff[k_driftend] = 1; + } else if (player->kartstuff[k_drift] < 0) + { player->kartstuff[k_drift]++; + player->kartstuff[k_driftend] = 1; + } + else + player->kartstuff[k_driftend] = 0; } // Incease/decrease the drift value to continue drifting in that direction