diff --git a/src/k_kart.c b/src/k_kart.c index 6bb59a6d8..839a96498 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1653,7 +1653,7 @@ static void K_UpdateDraft(player_t *player) { fixed_t topspd = K_GetKartSpeed(player, false); fixed_t draftdistance; - UINT8 leniency = (3*TICRATE)/4; + UINT8 leniency; UINT8 i; // Distance you have to be to draft. If you're still accelerating, then this distance is lessened. @@ -1665,7 +1665,8 @@ static void K_UpdateDraft(player_t *player) draftdistance = FixedMul(draftdistance, K_GetKartGameSpeedScalar(gamespeed)); // On the contrary, the leniency period biases toward high weight. - leniency += (player->kartweight-1) * (TICRATE/4); + // (See also: the leniency variable in K_SpawnDraftDust) + leniency = (3*TICRATE)/4 + ((player->kartweight-1) * (TICRATE/4)); // Not enough speed to draft. if (player->speed >= 20*player->mo->scale) @@ -1727,7 +1728,7 @@ static void K_UpdateDraft(player_t *player) olddraft = player->kartstuff[k_draftpower]; - player->kartstuff[k_draftleeway] = max(TICRATE/4, (player->kartstuff[k_draftpower] * leniency) / FRACUNIT); + player->kartstuff[k_draftleeway] = leniency; player->kartstuff[k_lastdraft] = i; // Draft power is used later in K_GetKartBoostPower, ranging from 0 for normal speed and FRACUNIT for max draft speed. @@ -3408,6 +3409,8 @@ void K_SpawnDraftDust(mobj_t *mo) if (mo->player) { + UINT8 leniency = (3*TICRATE)/4 + ((mo->player->kartweight-1) * (TICRATE/4)); + ang = mo->player->frameangle; if (mo->player->kartstuff[k_drift] != 0) @@ -3420,7 +3423,7 @@ void K_SpawnDraftDust(mobj_t *mo) sign = -1; } - foff = ((2*TICRATE) - mo->player->kartstuff[k_draftleeway]) / 8; + foff = 5 - ((mo->player->kartstuff[k_draftleeway] * 5) / leniency); // this shouldn't happen if (foff > 4)