Smoothly adjust underwater turn nerf

The actual issue was that turning was nerfed by a flat x0.5 when strafing was enabled, but the strafe amount was speed based. This meant that you got way less turning at low speed, and no strafe to make up for it.
This commit is contained in:
Sally Coolatta 2022-09-27 18:14:44 -04:00
parent afc2a0dcdc
commit e34ec94721

View file

@ -8974,6 +8974,16 @@ INT16 K_UpdateSteeringValue(INT16 inputSteering, INT16 destSteering)
return outputSteering;
}
static fixed_t K_GetUnderwaterStrafeMul(player_t *player)
{
const fixed_t minSpeed = 11 * player->mo->scale;
fixed_t baseline = INT32_MAX;
baseline = 2 * K_GetKartSpeed(player, false, true) / 3;
return max(0, FixedDiv(player->speed - minSpeed, baseline - minSpeed));
}
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
{
fixed_t turnfixed = turnvalue * FRACUNIT;
@ -9051,10 +9061,10 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
turnfixed = FixedMul(turnfixed, FRACUNIT + player->handleboost);
}
if ((player->mo->eflags & MFE_UNDERWATER) &&
player->speed > 11 * player->mo->scale)
if (player->mo->eflags & MFE_UNDERWATER)
{
turnfixed /= 2;
fixed_t div = min(FRACUNIT + K_GetUnderwaterStrafeMul(player), 2*FRACUNIT);
turnfixed = FixedDiv(turnfixed, div);
}
// Weight has a small effect on turning
@ -9065,18 +9075,15 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
INT32 K_GetUnderwaterTurnAdjust(player_t *player)
{
if ((player->mo->eflags & MFE_UNDERWATER) &&
player->speed > 11 * player->mo->scale)
if (player->mo->eflags & MFE_UNDERWATER)
{
INT32 steer = (K_GetKartTurnValue(player,
player->steering) << TICCMD_REDUCE);
fixed_t minimum = INT32_MAX;
if (!player->drift)
steer = 9 * steer / 5;
minimum = 2 * K_GetKartSpeed(player, false, true) / 3;
return FixedMul(steer, 8 * FixedDiv(max(player->speed, minimum), minimum));
return FixedMul(steer, 8 * K_GetUnderwaterStrafeMul(player));
}
else
return 0;