Some drift adjustments

This commit is contained in:
ZTsukei 2017-02-24 20:01:03 -05:00
parent d9944e9c41
commit e7280fc53a
3 changed files with 28 additions and 7 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}