diff --git a/src/d_player.h b/src/d_player.h index d9c716bc..6ea2798e 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -256,6 +256,7 @@ typedef enum k_driftangle, // Stores player turn angle for drifting k_driftcharge, // Charge your drift so you can release a burst of speed k_driftboost, // Boost you get from drifting + k_driftfix, // Used to fix your angle after releasing drift. k_boostcharge, // Charge-up for boosting at the start of the race, or when Lakitu drops you k_jmp, // In Mario Kart, letting go of the jump button stops the drift k_lakitu, // > 0 = Lakitu fishing, < 0 = Lakitu lap counter (was "player->airtime") // NOTE: Check for ->lakitu, replace with this diff --git a/src/k_kart.c b/src/k_kart.c index 2e321e5d..f73ab9a8 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1785,17 +1785,31 @@ fixed_t K_GetKartTurnValue(player_t *player, ticcmd_t *cmd) { fixed_t p_angle = cmd->angleturn; fixed_t p_maxspeed = K_GetKartSpeed(player, false); - - p_maxspeed = FixedMul(p_maxspeed, 2*FRACUNIT + FRACUNIT/4); - p_angle = FixedMul(p_angle, FixedDiv((p_maxspeed>>16) - (player->speed>>16), - (p_maxspeed>>16) + player->kartweight)); // Weight has a small effect on turning + p_maxspeed = FixedMul(p_maxspeed, 3*FRACUNIT); + + fixed_t adjustangle = FixedDiv((p_maxspeed>>16) - (player->speed>>16), (p_maxspeed>>16) + player->kartweight); + + p_angle = FixedMul(p_angle, adjustangle); // Weight has a small effect on turning if (player->kartstuff[k_startimer] || player->kartstuff[k_mushroomtimer] || player->kartstuff[k_growshrinktimer] > 0) p_angle = FixedMul(p_angle, FixedDiv(5*FRACUNIT, 4*FRACUNIT)); player->kartstuff[k_driftangle] = p_angle; + if (!player->kartstuff[k_drift] && player->kartstuff[k_driftfix] > 0) + { + if (P_IsObjectOnGround(player->mo)) + p_angle += FixedMul(800, adjustangle); + player->kartstuff[k_driftfix]--; + } + else if (!player->kartstuff[k_drift] && player->kartstuff[k_driftfix] < 0) + { + if (P_IsObjectOnGround(player->mo)) + p_angle -= FixedMul(800, adjustangle); + player->kartstuff[k_driftfix]++; + } + return p_angle; } @@ -1811,13 +1825,13 @@ fixed_t K_GetKartDriftValue(player_t *player, fixed_t turntype) switch (turntype) { case 1: - driftangle = (p_angle + 300 - driftweight*1)*FRACUNIT; // Drifting outward + driftangle = (p_angle + 200 + driftweight)*FRACUNIT; // Drifting outward break; case 2: - driftangle = (p_angle + 700 - driftweight*3)*FRACUNIT; // Drifting inward + driftangle = (p_angle + 700 - driftweight)*FRACUNIT; // Drifting inward break; case 3: - driftangle = ( 0 + 500 - driftweight*2)*FRACUNIT; // Drifting with no input + driftangle = (450) *FRACUNIT; // Drifting with no input break; } diff --git a/src/p_user.c b/src/p_user.c index 10bcfe46..eafd640d 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4585,9 +4585,15 @@ static void P_3dMovement(player_t *player) else { if (player->kartstuff[k_drift] >= 1) + { movepushangle = player->mo->angle+ANGLE_45; + player->kartstuff[k_driftfix] = 4; + } else if (player->kartstuff[k_drift] <= -1) + { movepushangle = player->mo->angle-ANGLE_45; + player->kartstuff[k_driftfix] = -4; + } else movepushangle = player->mo->angle; }