mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-21 15:32:34 +00:00
Use less speed assist when applying boosts
This commit is contained in:
parent
563f76638a
commit
be6d51247c
1 changed files with 41 additions and 8 deletions
47
src/k_kart.c
47
src/k_kart.c
|
|
@ -3954,19 +3954,19 @@ fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed)
|
||||||
static fixed_t K_GetKartSpeedAssist(const player_t *player)
|
static fixed_t K_GetKartSpeedAssist(const player_t *player)
|
||||||
{
|
{
|
||||||
if (modeattacking)
|
if (modeattacking)
|
||||||
return FRACUNIT;
|
return 0;
|
||||||
if (gametype && GTR_BUMPERS)
|
if (gametype && GTR_BUMPERS)
|
||||||
return FRACUNIT;
|
return 0;
|
||||||
if (specialstageinfo.valid)
|
if (specialstageinfo.valid)
|
||||||
return FRACUNIT;
|
return 0;
|
||||||
if (K_PlayerUsesBotMovement(player))
|
if (K_PlayerUsesBotMovement(player))
|
||||||
return FRACUNIT;
|
return 0;
|
||||||
if (player->loneliness < 0)
|
if (player->loneliness < 0)
|
||||||
return FRACUNIT;
|
return 0;
|
||||||
|
|
||||||
fixed_t MAX_SPEED_ASSIST = FRACUNIT/4;
|
fixed_t MAX_SPEED_ASSIST = FRACUNIT/4;
|
||||||
|
|
||||||
return FRACUNIT + FixedMul(player->loneliness, MAX_SPEED_ASSIST);
|
return FixedMul(player->loneliness, MAX_SPEED_ASSIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
fixed_t K_GetKartSpeed(const player_t *player, boolean doboostpower, boolean dorubberband)
|
fixed_t K_GetKartSpeed(const player_t *player, boolean doboostpower, boolean dorubberband)
|
||||||
|
|
@ -4035,7 +4035,39 @@ fixed_t K_GetKartSpeed(const player_t *player, boolean doboostpower, boolean dor
|
||||||
finalspeed += FixedMul(player->outrun, physicsScale);
|
finalspeed += FixedMul(player->outrun, physicsScale);
|
||||||
}
|
}
|
||||||
|
|
||||||
finalspeed = FixedMul(finalspeed, K_GetKartSpeedAssist(player));
|
// Speed Assist pt.3: How much of our potential assist do we apply?
|
||||||
|
if (doboostpower && K_GetKartSpeedAssist(player))
|
||||||
|
{
|
||||||
|
fixed_t assist = K_GetKartSpeedAssist(player);
|
||||||
|
|
||||||
|
// Don't use all of our speed assist if we're already under boost effect.
|
||||||
|
fixed_t START_ASSIST_ROLLOFF = 3*FRACUNIT/2; // Don't roll off at below this speed
|
||||||
|
fixed_t END_ASSIST_ROLLOFF = 5*FRACUNIT/2; // Use minimum assist power at above this speed
|
||||||
|
fixed_t MIN_ASSIST_POWER = 0; // % assist to apply while going fast (FRACUNIT=full, 0=none)
|
||||||
|
|
||||||
|
fixed_t speedgap = END_ASSIST_ROLLOFF - START_ASSIST_ROLLOFF;
|
||||||
|
|
||||||
|
fixed_t bonusspeed = FixedDiv(player->speed, K_GetKartSpeed(player, false, false));
|
||||||
|
|
||||||
|
if (doboostpower)
|
||||||
|
{
|
||||||
|
if (bonusspeed < START_ASSIST_ROLLOFF)
|
||||||
|
{
|
||||||
|
// :)
|
||||||
|
}
|
||||||
|
else if (bonusspeed > END_ASSIST_ROLLOFF)
|
||||||
|
{
|
||||||
|
assist = FixedMul(assist, MIN_ASSIST_POWER);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fixed_t normalizer = FixedDiv((bonusspeed - START_ASSIST_ROLLOFF), speedgap);
|
||||||
|
assist = Easing_Linear(normalizer, assist, FixedMul(assist, MIN_ASSIST_POWER));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
finalspeed = FixedMul(finalspeed, FRACUNIT + assist);
|
||||||
|
}
|
||||||
|
|
||||||
return finalspeed;
|
return finalspeed;
|
||||||
}
|
}
|
||||||
|
|
@ -9977,6 +10009,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Speed Assist pt.1
|
||||||
if (!K_PlayerUsesBotMovement(player))
|
if (!K_PlayerUsesBotMovement(player))
|
||||||
{
|
{
|
||||||
UINT32 toDefender = 0;
|
UINT32 toDefender = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue