mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'handling-fix' into 'master'
Handling code clean-up See merge request KartKrew/Kart!249
This commit is contained in:
commit
aa948b1de3
1 changed files with 30 additions and 19 deletions
49
src/k_kart.c
49
src/k_kart.c
|
|
@ -6722,54 +6722,65 @@ boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y)
|
||||||
// turndir is the direction the controls are telling us to turn, -1 if turning right and 1 if turning left
|
// turndir is the direction the controls are telling us to turn, -1 if turning right and 1 if turning left
|
||||||
static INT16 K_GetKartDriftValue(player_t *player, fixed_t countersteer)
|
static INT16 K_GetKartDriftValue(player_t *player, fixed_t countersteer)
|
||||||
{
|
{
|
||||||
INT16 basedrift, driftangle;
|
INT16 basedrift, driftadjust;
|
||||||
fixed_t driftweight = player->kartweight*14; // 12
|
fixed_t driftweight = player->kartweight*14; // 12
|
||||||
|
|
||||||
// If they aren't drifting or on the ground this doesn't apply
|
|
||||||
if (player->kartstuff[k_drift] == 0 || !P_IsObjectOnGround(player->mo))
|
if (player->kartstuff[k_drift] == 0 || !P_IsObjectOnGround(player->mo))
|
||||||
|
{
|
||||||
|
// If they aren't drifting or on the ground, this doesn't apply
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (player->kartstuff[k_driftend] != 0)
|
if (player->kartstuff[k_driftend] != 0)
|
||||||
return -266*player->kartstuff[k_drift]; // Drift has ended and we are tweaking their angle back a bit
|
{
|
||||||
|
// Drift has ended and we are tweaking their angle back a bit
|
||||||
|
return -266*player->kartstuff[k_drift];
|
||||||
|
}
|
||||||
|
|
||||||
//basedrift = 90*player->kartstuff[k_drift]; // 450
|
basedrift = (83 * player->kartstuff[k_drift]) - (((driftweight - 14) * player->kartstuff[k_drift]) / 5); // 415 - 303
|
||||||
//basedrift = 93*player->kartstuff[k_drift] - driftweight*3*player->kartstuff[k_drift]/10; // 447 - 303
|
driftadjust = abs((252 - driftweight) * player->kartstuff[k_drift] / 5);
|
||||||
basedrift = 83*player->kartstuff[k_drift] - (driftweight - 14)*player->kartstuff[k_drift]/5; // 415 - 303
|
|
||||||
driftangle = abs((252 - driftweight)*player->kartstuff[k_drift]/5);
|
|
||||||
|
|
||||||
if (player->kartstuff[k_tiregrease] > 0) // Buff drift-steering while in greasemode
|
if (player->kartstuff[k_tiregrease] > 0) // Buff drift-steering while in greasemode
|
||||||
|
{
|
||||||
basedrift += (basedrift / greasetics) * player->kartstuff[k_tiregrease];
|
basedrift += (basedrift / greasetics) * player->kartstuff[k_tiregrease];
|
||||||
|
}
|
||||||
|
|
||||||
return basedrift + FixedMul(driftangle, countersteer);
|
return basedrift + (FixedMul(driftadjust * FRACUNIT, countersteer) / FRACUNIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
|
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
|
||||||
{
|
{
|
||||||
fixed_t p_maxspeed = FixedMul(K_GetKartSpeed(player, false), 3*FRACUNIT);
|
fixed_t p_maxspeed = K_GetKartSpeed(player, false);
|
||||||
fixed_t adjustangle = FixedDiv((p_maxspeed>>16) - (player->speed>>16), (p_maxspeed>>16) + player->kartweight);
|
fixed_t p_speed = min(player->speed, (p_maxspeed * 2));
|
||||||
|
fixed_t weightadjust = FixedDiv((p_maxspeed * 3) - p_speed, (p_maxspeed * 3) + (player->kartweight * FRACUNIT));
|
||||||
|
|
||||||
if (player->spectator)
|
if (player->spectator)
|
||||||
|
{
|
||||||
return turnvalue;
|
return turnvalue;
|
||||||
|
}
|
||||||
|
|
||||||
if (player->kartstuff[k_drift] != 0 && P_IsObjectOnGround(player->mo))
|
if (player->kartstuff[k_drift] != 0 && P_IsObjectOnGround(player->mo))
|
||||||
{
|
{
|
||||||
|
fixed_t countersteer = FixedDiv(turnvalue*FRACUNIT, KART_FULLTURN*FRACUNIT);
|
||||||
|
|
||||||
// If we're drifting we have a completely different turning value
|
// If we're drifting we have a completely different turning value
|
||||||
if (player->kartstuff[k_driftend] == 0)
|
|
||||||
|
if (player->kartstuff[k_driftend] != 0)
|
||||||
{
|
{
|
||||||
// 800 is the max set in g_game.c with angleturn
|
countersteer = FRACUNIT;
|
||||||
fixed_t countersteer = FixedDiv(turnvalue*FRACUNIT, 800*FRACUNIT);
|
|
||||||
turnvalue = K_GetKartDriftValue(player, countersteer);
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
turnvalue = (INT16)(turnvalue + K_GetKartDriftValue(player, FRACUNIT));
|
turnvalue = K_GetKartDriftValue(player, countersteer);
|
||||||
|
|
||||||
return turnvalue;
|
return turnvalue;
|
||||||
}
|
}
|
||||||
|
|
||||||
turnvalue = FixedMul(turnvalue, adjustangle); // Weight has a small effect on turning
|
|
||||||
|
|
||||||
if (EITHERSNEAKER(player) || player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_growshrinktimer] > 0)
|
if (EITHERSNEAKER(player) || player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_growshrinktimer] > 0)
|
||||||
turnvalue = FixedMul(turnvalue, (5*FRACUNIT)/4);
|
{
|
||||||
|
turnvalue = 5*turnvalue/4;
|
||||||
|
}
|
||||||
|
|
||||||
|
turnvalue = FixedMul(turnvalue * FRACUNIT, weightadjust) / FRACUNIT; // Weight has a small effect on turning
|
||||||
|
|
||||||
return turnvalue;
|
return turnvalue;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue