Fix drifting

No longer does all the angle adjustments inside of the player thinker and instead does it with the controls
Should hopefully avoid any desynch from drifting
Also maybe fixed player 2's controls
This commit is contained in:
Sryder 2017-03-07 01:05:18 +00:00
parent bdd03bc830
commit 515054c599
6 changed files with 68 additions and 127 deletions

View File

@ -243,7 +243,6 @@ typedef enum
k_starpostwp, // Temporarily stores player waypoint for... some reason. Used when respawning and finishing. k_starpostwp, // Temporarily stores player waypoint for... some reason. Used when respawning and finishing.
k_throwdir, // Held dir of controls; 1 = forward, 0 = none, -1 = backward (was "player->heldDir") k_throwdir, // Held dir of controls; 1 = forward, 0 = none, -1 = backward (was "player->heldDir")
k_turndir, // Turn direction for drifting; -1 = Left, 1 = Right, 0 = none
k_camspin, // Used to 180 the camera while a button is held k_camspin, // Used to 180 the camera while a button is held
k_sounds, // Used this to stop and then force music restores as it hits zero k_sounds, // Used this to stop and then force music restores as it hits zero
@ -253,7 +252,6 @@ typedef enum
k_spinouttype, // Determines whether to thrust forward or not while spinning out; 0 = move forwards, 1 = stay still k_spinouttype, // Determines whether to thrust forward or not while spinning out; 0 = move forwards, 1 = stay still
k_drift, // Drifting Left or Right, plus a bigger counter = sharper turn k_drift, // Drifting Left or Right, plus a bigger counter = sharper turn
k_driftangle, // Stores player turn angle for drifting
k_driftcharge, // Charge your drift so you can release a burst of speed k_driftcharge, // Charge your drift so you can release a burst of speed
k_driftboost, // Boost you get from drifting k_driftboost, // Boost you get from drifting
k_boostcharge, // Charge-up for boosting at the start of the race, or when Lakitu drops you k_boostcharge, // Charge-up for boosting at the start of the race, or when Lakitu drops you

View File

@ -1249,12 +1249,12 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
//{ SRB2kart - Drift support //{ SRB2kart - Drift support
axis = JoyAxis(AXISTURN); axis = JoyAxis(AXISTURN);
if (turnleft || axis < 0) // Drifting to the left if (cmd->angleturn > 0) // Drifting to the left
cmd->buttons |= BT_DRIFTLEFT; cmd->buttons |= BT_DRIFTLEFT;
else else
cmd->buttons &= ~BT_DRIFTLEFT; cmd->buttons &= ~BT_DRIFTLEFT;
if (turnright || axis > 0) // Drifting to the right if (cmd->angleturn < 0) // Drifting to the right
cmd->buttons |= BT_DRIFTRIGHT; cmd->buttons |= BT_DRIFTRIGHT;
else else
cmd->buttons &= ~BT_DRIFTRIGHT; cmd->buttons &= ~BT_DRIFTRIGHT;
@ -1267,17 +1267,16 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
} }
else else
{ {
cmd->angleturn = K_GetKartTurnValue(player, cmd); cmd->angleturn = K_GetKartTurnValue(player, cmd->angleturn);
if (cmd->angleturn < 0)
//cmd->angleturn = FixedMul(cmd->angleturn, FixedDiv(80 - (players[consoleplayer].speed >> 16), 80)); cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, 1));
else if (cmd->angleturn > 0)
//if (players[consoleplayer].kartstuff[k_startimer] cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, -1));
// || players[consoleplayer].kartstuff[k_mushroomtimer] else
// || players[consoleplayer].kartstuff[k_growshrinktimer] > 0) cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, 0));
// cmd->angleturn = FixedMul(cmd->angleturn, FixedDiv(5*FRACUNIT, 4*FRACUNIT));
// SRB2kart - no additional angle if not moving // SRB2kart - no additional angle if not moving
if (!(player->mo && player->speed == 0)) if ((player->mo && player->speed > 0) || (leveltime > 140 && (cmd->buttons & BT_ACCELERATE) && (cmd->buttons & BT_BRAKE)))
localangle += (cmd->angleturn<<16); localangle += (cmd->angleturn<<16);
cmd->angleturn = (INT16)(localangle >> 16); cmd->angleturn = (INT16)(localangle >> 16);
@ -1581,21 +1580,15 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
//{ SRB2kart - Drift support //{ SRB2kart - Drift support
axis = Joy2Axis(AXISTURN); axis = Joy2Axis(AXISTURN);
if (turnleft || axis < 0) // Drifting to the left if (cmd->angleturn > 0) // Drifting to the left
cmd->buttons |= BT_DRIFTLEFT; cmd->buttons |= BT_DRIFTLEFT;
else else
cmd->buttons &= ~BT_DRIFTLEFT; cmd->buttons &= ~BT_DRIFTLEFT;
if (turnright || axis > 0) // Drifting to the right if (cmd->angleturn < 0) // Drifting to the right
cmd->buttons |= BT_DRIFTRIGHT; cmd->buttons |= BT_DRIFTRIGHT;
else else
cmd->buttons &= ~BT_DRIFTRIGHT; cmd->buttons &= ~BT_DRIFTRIGHT;
if (turnright && turnleft)
{
cmd->buttons &= ~BT_DRIFTLEFT;
cmd->buttons &= ~BT_DRIFTRIGHT;
}
//} //}
if (player->bot == 1) { if (player->bot == 1) {
@ -1618,6 +1611,13 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
} }
else else
{ {
cmd->angleturn = K_GetKartTurnValue(player, cmd->angleturn);
if (cmd->angleturn < 0)
cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, 1));
else if (cmd->angleturn > 0)
cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, -1));
else
cmd->angleturn = (INT16)(cmd->angleturn + K_GetKartDriftValue(player, 0));
localangle2 += (cmd->angleturn<<16); localangle2 += (cmd->angleturn<<16);
cmd->angleturn = (INT16)(localangle2 >> 16); cmd->angleturn = (INT16)(localangle2 >> 16);
} }

View File

@ -931,7 +931,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
K_UpdateOffroad(player); K_UpdateOffroad(player);
// This spawns the drift sparks when k_driftcharge hits 26 + player->kartspeed. Its own AI handles life/death and color // This spawns the drift sparks when k_driftcharge hits 26 + player->kartspeed. Its own AI handles life/death and color
if ((player->kartstuff[k_drift] >= 1 || player->kartstuff[k_drift] <= -1) if (player->kartstuff[k_drift] != 0
&& player->kartstuff[k_driftcharge] == (26 + player->kartspeed)) && player->kartstuff[k_driftcharge] == (26 + player->kartspeed))
P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFT)->target = player->mo; P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFT)->target = player->mo;
@ -1415,7 +1415,7 @@ void K_SpawnDriftTrail(player_t *player)
else else
ground = player->mo->floorz; ground = player->mo->floorz;
if (player->kartstuff[k_drift]) if (player->kartstuff[k_drift] != 0)
travelangle = player->mo->angle; travelangle = player->mo->angle;
else else
travelangle = R_PointToAngle2(0, 0, player->rmomx, player->rmomy); travelangle = R_PointToAngle2(0, 0, player->rmomx, player->rmomy);
@ -1435,7 +1435,7 @@ void K_SpawnDriftTrail(player_t *player)
ground -= FixedMul(mobjinfo[MT_MUSHROOMTRAIL].height, player->mo->scale); ground -= FixedMul(mobjinfo[MT_MUSHROOMTRAIL].height, player->mo->scale);
} }
#endif #endif
if ((player->kartstuff[k_drift] >= 1 || player->kartstuff[k_drift] <= -1) && player->kartstuff[k_mushroomtimer] == 0) if (player->kartstuff[k_drift] != 0 && player->kartstuff[k_mushroomtimer] == 0)
flame = P_SpawnMobj(newx, newy, ground, MT_DRIFTSMOKE); flame = P_SpawnMobj(newx, newy, ground, MT_DRIFTSMOKE);
else else
flame = P_SpawnMobj(newx, newy, ground, MT_MUSHROOMTRAIL); flame = P_SpawnMobj(newx, newy, ground, MT_MUSHROOMTRAIL);
@ -1767,60 +1767,62 @@ static void K_DoLightning(player_t *player, boolean bluelightning)
player->kartstuff[k_sounds] = 50; player->kartstuff[k_sounds] = 50;
} }
fixed_t K_GetKartTurnValue(player_t *player, ticcmd_t *cmd) INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
{ {
fixed_t p_angle = cmd->angleturn;
fixed_t p_maxspeed = FixedMul(K_GetKartSpeed(player, false), 3*FRACUNIT); fixed_t p_maxspeed = FixedMul(K_GetKartSpeed(player, false), 3*FRACUNIT);
fixed_t adjustangle = FixedDiv((p_maxspeed>>16) - (player->speed>>16), (p_maxspeed>>16) + player->kartweight); 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 turnvalue = FixedMul(turnvalue, adjustangle); // Weight has a small effect on turning
if (player->kartstuff[k_startimer] || player->kartstuff[k_mushroomtimer] || player->kartstuff[k_growshrinktimer] > 0) if (player->kartstuff[k_startimer] || player->kartstuff[k_mushroomtimer] || player->kartstuff[k_growshrinktimer] > 0)
p_angle = FixedMul(p_angle, FixedDiv(5*FRACUNIT, 4*FRACUNIT)); turnvalue = FixedMul(turnvalue, FixedDiv(5*FRACUNIT, 4*FRACUNIT));
player->kartstuff[k_driftangle] = p_angle; return turnvalue;
return p_angle;
} }
static fixed_t K_GetKartDriftValue(player_t *player, fixed_t turntype) // turndir is the direction the controls are telling us to turn, 1 if turning right and -1 if turning left
INT16 K_GetKartDriftValue(player_t *player, SINT8 turndir)
{ {
fixed_t driftangle = FRACUNIT; fixed_t driftangle = FRACUNIT;
fixed_t p_angle = player->kartstuff[k_driftangle];
fixed_t driftweight = player->kartweight*10; fixed_t driftweight = player->kartweight*10;
UINT8 turntype = 3;
if (player->kartstuff[k_drift] <= -1) // If they aren't drifting or on the ground this doesn't apply
p_angle *= -1; if (player->kartstuff[k_drift] == 0 || !P_IsObjectOnGround(player->mo))
return 0;
if ((player->kartstuff[k_drift] > 0 && turndir == 1) || (player->kartstuff[k_drift] < 0 && turndir == -1))
{
turntype = 2;
}
else if ((player->kartstuff[k_drift] > 0 && turndir == -1) || (player->kartstuff[k_drift] < 0 && turndir == 1))
{
turntype = 1;
}
switch (turntype) switch (turntype)
{ {
case 1: case 1:
driftangle = (p_angle + 200 + driftweight)*FRACUNIT; // Drifting outward driftangle = 200 + driftweight; // Drifting outward
break; break;
case 2: case 2:
driftangle = (p_angle + 700 - driftweight)*FRACUNIT; // Drifting inward driftangle = 700 - driftweight; // Drifting inward
break; break;
case 3: case 3:
driftangle = (450) *FRACUNIT; // Drifting with no input driftangle = 450; // Drifting with no input
break; break;
} }
return driftangle; return driftangle*(player->kartstuff[k_drift] / abs(player->kartstuff[k_drift]));
} }
static void K_KartDrift(player_t *player, ticcmd_t *cmd, boolean onground) static void K_KartDrift(player_t *player, boolean onground)
{ {
fixed_t dsone = 26 + player->kartspeed; fixed_t dsone = 26 + player->kartspeed;
fixed_t dstwo = 52 + player->kartspeed*2; fixed_t dstwo = 52 + player->kartspeed*2;
// Drifting is actually straffing + automatic turning. // Drifting is actually straffing + automatic turning.
// Holding the Jump button will enable drifting. // Holding the Jump button will enable drifting.
if (cmd->buttons & BT_DRIFTRIGHT)
player->kartstuff[k_turndir] = 1;
else if (cmd->buttons & BT_DRIFTLEFT)
player->kartstuff[k_turndir] = -1;
else
player->kartstuff[k_turndir] = 0;
// Drift Release (Moved here so you can't "chain" drifts) // Drift Release (Moved here so you can't "chain" drifts)
if ((player->kartstuff[k_drift] == 0) if ((player->kartstuff[k_drift] == 0)
@ -1853,10 +1855,10 @@ static void K_KartDrift(player_t *player, ticcmd_t *cmd, boolean onground)
} }
// Drifting: left or right? // Drifting: left or right?
if (player->kartstuff[k_turndir] == 1 && player->speed > (10<<16) && player->kartstuff[k_jmp] == 1 if ((player->cmd.buttons & BT_DRIFTLEFT) && player->speed > (10<<16) && player->kartstuff[k_jmp] == 1
&& player->kartstuff[k_drift] < 3 && player->kartstuff[k_drift] > -1) // && player->kartstuff[k_drift] != 1) && player->kartstuff[k_drift] < 3 && player->kartstuff[k_drift] > -1) // && player->kartstuff[k_drift] != 1)
player->kartstuff[k_drift] = 1; player->kartstuff[k_drift] = 1;
else if (player->kartstuff[k_turndir] == -1 && player->speed > (10<<16) && player->kartstuff[k_jmp] == 1 else if ((player->cmd.buttons & BT_DRIFTRIGHT) && player->speed > (10<<16) && player->kartstuff[k_jmp] == 1
&& player->kartstuff[k_drift] > -3 && player->kartstuff[k_drift] < 1) // && player->kartstuff[k_drift] != -1) && player->kartstuff[k_drift] > -3 && player->kartstuff[k_drift] < 1) // && player->kartstuff[k_drift] != -1)
player->kartstuff[k_drift] = -1; player->kartstuff[k_drift] = -1;
else if (player->kartstuff[k_jmp] == 0) // || player->kartstuff[k_turndir] == 0) else if (player->kartstuff[k_jmp] == 0) // || player->kartstuff[k_turndir] == 0)
@ -1868,64 +1870,17 @@ static void K_KartDrift(player_t *player, ticcmd_t *cmd, boolean onground)
{ {
player->kartstuff[k_driftcharge]++; player->kartstuff[k_driftcharge]++;
if (player->kartstuff[k_drift] >= 1) // Drifting to the Right if (player->kartstuff[k_drift] >= 1) // Drifting to the left
{ {
player->kartstuff[k_drift]++; player->kartstuff[k_drift]++;
if (player->kartstuff[k_drift] > 3) if (player->kartstuff[k_drift] > 3)
player->kartstuff[k_drift] = 3; player->kartstuff[k_drift] = 3;
// Left = +450 Right = -450
// Player 1
if (player == &players[consoleplayer])
{
if (player->kartstuff[k_turndir] == -1) // Turning Left while Drifting Right
localangle -= K_GetKartDriftValue(player, 1);
else if (player->kartstuff[k_turndir] == 1) // Turning Right while Drifting Right
localangle -= K_GetKartDriftValue(player, 2);
else // No Direction while Drifting Right
localangle -= K_GetKartDriftValue(player, 3);
}
// Player 2
if (splitscreen && player == &players[secondarydisplayplayer])
{
if (player->kartstuff[k_turndir] == -1) // Turning Left while Drifting Right
localangle2 -= K_GetKartDriftValue(player, 1);
else if (player->kartstuff[k_turndir] == 1) // Turning Right while Drifting Right
localangle2 -= K_GetKartDriftValue(player, 2);
else // No Direction while Drifting Right
localangle2 -= K_GetKartDriftValue(player, 3);
}
} }
else if (player->kartstuff[k_drift] <= -1) // Drifting to the Left else if (player->kartstuff[k_drift] <= -1) // Drifting to the right
{ {
player->kartstuff[k_drift]--; player->kartstuff[k_drift]--;
if (player->kartstuff[k_drift] < -3) if (player->kartstuff[k_drift] < -3)
player->kartstuff[k_drift] = -3; player->kartstuff[k_drift] = -3;
// Left = +450 Right = -450
// Player 1
if (player == &players[consoleplayer])
{
if (player->kartstuff[k_turndir] == 1) // Turning Right while Drifting Left
localangle += K_GetKartDriftValue(player, 1);
else if (player->kartstuff[k_turndir] == -1) // Turning Left while Drifting Left
localangle += K_GetKartDriftValue(player, 2);
else // No Direction while Drifting Left
localangle += K_GetKartDriftValue(player, 3);
}
// Player 2
// Player 2
if (splitscreen && player == &players[secondarydisplayplayer])
{
if (player->kartstuff[k_turndir] == 1) // Turning Right while Drifting Left
localangle2 += K_GetKartDriftValue(player, 1);
else if (player->kartstuff[k_turndir] == -1) // Turning Left while Drifting Left
localangle2 += K_GetKartDriftValue(player, 2);
else // No Direction while Drifting Left
localangle2 += K_GetKartDriftValue(player, 3);
}
} }
} }
@ -2051,8 +2006,9 @@ static boolean K_CheckForHoldItem(player_t *player)
// //
// K_MoveKartPlayer // K_MoveKartPlayer
// //
void K_MoveKartPlayer(player_t *player, ticcmd_t *cmd, boolean onground) void K_MoveKartPlayer(player_t *player, boolean onground)
{ {
ticcmd_t *cmd = &player->cmd;
boolean ATTACK_IS_DOWN = ((cmd->buttons & BT_ATTACK) && !(player->pflags & PF_ATTACKDOWN)); boolean ATTACK_IS_DOWN = ((cmd->buttons & BT_ATTACK) && !(player->pflags & PF_ATTACKDOWN));
boolean HOLDING_ITEM = K_CheckForHoldItem(player); boolean HOLDING_ITEM = K_CheckForHoldItem(player);
boolean NO_BOO = (player->kartstuff[k_boostolentimer] == 0 && player->kartstuff[k_bootaketimer] == 0); boolean NO_BOO = (player->kartstuff[k_boostolentimer] == 0 && player->kartstuff[k_bootaketimer] == 0);
@ -2545,29 +2501,16 @@ void K_MoveKartPlayer(player_t *player, ticcmd_t *cmd, boolean onground)
if (splitscreen && player == &players[secondarydisplayplayer]) if (splitscreen && player == &players[secondarydisplayplayer])
CV_SetValue(&cv_cam2_dist, 190); CV_SetValue(&cv_cam2_dist, 190);
K_KartDrift(player, cmd, onground); K_KartDrift(player, onground);
// Quick Turning // Quick Turning
// You can't turn your kart when you're not moving. // You can't turn your kart when you're not moving.
// So now it's time to burn some rubber! // So now it's time to burn some rubber!
if (player->speed < 2 && leveltime > 140 && cmd->buttons & BT_ACCELERATE && cmd->buttons & BT_BRAKE) if (player->speed < 2 && leveltime > 140 && cmd->buttons & BT_ACCELERATE && cmd->buttons & BT_BRAKE
&& ((cmd->buttons & BT_DRIFTLEFT) || (cmd->buttons & BT_DRIFTRIGHT)))
{ {
if (player->kartstuff[k_turndir]) if (leveltime % 20 == 0)
player->kartstuff[k_drift] = 1;
if (leveltime % 20 == 0 && player->kartstuff[k_drift])
S_StartSound(player->mo, sfx_mkslid); S_StartSound(player->mo, sfx_mkslid);
if (player == &players[consoleplayer] && player->kartstuff[k_turndir] == 1)
localangle -= 800*FRACUNIT;
if (player == &players[consoleplayer] && player->kartstuff[k_turndir] == -1)
localangle += 800*FRACUNIT;
if (splitscreen && player == &players[secondarydisplayplayer]
&& player->kartstuff[k_turndir] == 1)
localangle2 -= 800*FRACUNIT;
if (splitscreen && player == &players[secondarydisplayplayer]
&& player->kartstuff[k_turndir] == -1)
localangle2 += 800*FRACUNIT;
} }
// Squishing // Squishing

View File

@ -22,10 +22,11 @@ void K_ExplodePlayer(player_t *player, mobj_t *source);
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit); void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit);
void K_SpawnDriftTrail(player_t *player); void K_SpawnDriftTrail(player_t *player);
void K_DoMushroom(player_t *player, boolean doPFlag); void K_DoMushroom(player_t *player, boolean doPFlag);
fixed_t K_GetKartTurnValue(player_t *player, ticcmd_t *cmd); INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);
INT16 K_GetKartDriftValue(player_t *player, SINT8 turndir);
fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower); fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower);
fixed_t K_3dKartMovement(player_t *player, boolean onground, boolean forwardmovement); fixed_t K_3dKartMovement(player_t *player, boolean onground, boolean forwardmovement);
void K_MoveKartPlayer(player_t *player, ticcmd_t *cmd, boolean onground); void K_MoveKartPlayer(player_t *player, boolean onground);
void K_LoadKartHUDGraphics(void); void K_LoadKartHUDGraphics(void);
void K_drawKartHUD(void); void K_drawKartHUD(void);

View File

@ -2866,13 +2866,13 @@ static void P_PlayerZMovement(mobj_t *mo)
P_SetPlayerMobjState(mo, S_KART_STND); P_SetPlayerMobjState(mo, S_KART_STND);
} }
// Drifting Left - S_KART_DRIFT_L1 // Drifting Left - S_KART_DRIFT_L1
else if (mo->player->kartstuff[k_drift] < 0 && P_IsObjectOnGround(mo)) else if (mo->player->kartstuff[k_drift] > 0 && P_IsObjectOnGround(mo))
{ {
if (!(mo->state == &states[S_KART_DRIFT_L1] || mo->state == &states[S_KART_DRIFT_L2])) if (!(mo->state == &states[S_KART_DRIFT_L1] || mo->state == &states[S_KART_DRIFT_L2]))
P_SetPlayerMobjState(mo, S_KART_DRIFT_L1); P_SetPlayerMobjState(mo, S_KART_DRIFT_L1);
} }
// Drifting Right - S_KART_DRIFT_R1 // Drifting Right - S_KART_DRIFT_R1
else if (mo->player->kartstuff[k_drift] > 0 && P_IsObjectOnGround(mo)) else if (mo->player->kartstuff[k_drift] < 0 && P_IsObjectOnGround(mo))
{ {
if (!(mo->state == &states[S_KART_DRIFT_R1] || mo->state == &states[S_KART_DRIFT_R2])) if (!(mo->state == &states[S_KART_DRIFT_R1] || mo->state == &states[S_KART_DRIFT_R2]))
P_SetPlayerMobjState(mo, S_KART_DRIFT_R1); P_SetPlayerMobjState(mo, S_KART_DRIFT_R1);

View File

@ -4588,11 +4588,11 @@ static void P_3dMovement(player_t *player)
} }
else else
{ {
if (player->kartstuff[k_drift] >= 1) if (player->kartstuff[k_drift] < 0)
{ {
movepushangle = player->mo->angle+ANGLE_45; movepushangle = player->mo->angle+ANGLE_45;
} }
else if (player->kartstuff[k_drift] <= -1) else if (player->kartstuff[k_drift] > 0)
{ {
movepushangle = player->mo->angle-ANGLE_45; movepushangle = player->mo->angle-ANGLE_45;
} }
@ -6650,13 +6650,13 @@ static void P_MovePlayer(player_t *player)
P_SetPlayerMobjState(player->mo, S_KART_STND); P_SetPlayerMobjState(player->mo, S_KART_STND);
} }
// Drifting Left - S_KART_DRIFT_L1 // Drifting Left - S_KART_DRIFT_L1
else if (player->kartstuff[k_drift] < 0 && onground) else if (player->kartstuff[k_drift] > 0 && onground)
{ {
if (!(player->mo->state == &states[S_KART_DRIFT_L1] || player->mo->state == &states[S_KART_DRIFT_L2])) if (!(player->mo->state == &states[S_KART_DRIFT_L1] || player->mo->state == &states[S_KART_DRIFT_L2]))
P_SetPlayerMobjState(player->mo, S_KART_DRIFT_L1); P_SetPlayerMobjState(player->mo, S_KART_DRIFT_L1);
} }
// Drifting Right - S_KART_DRIFT_R1 // Drifting Right - S_KART_DRIFT_R1
else if (player->kartstuff[k_drift] > 0 && onground) else if (player->kartstuff[k_drift] < 0 && onground)
{ {
if (!(player->mo->state == &states[S_KART_DRIFT_R1] || player->mo->state == &states[S_KART_DRIFT_R2])) if (!(player->mo->state == &states[S_KART_DRIFT_R1] || player->mo->state == &states[S_KART_DRIFT_R2]))
P_SetPlayerMobjState(player->mo, S_KART_DRIFT_R1); P_SetPlayerMobjState(player->mo, S_KART_DRIFT_R1);
@ -6720,8 +6720,7 @@ static void P_MovePlayer(player_t *player)
{ {
// Start looping the sound now. // Start looping the sound now.
if (leveltime % 50 == 0 && onground if (leveltime % 50 == 0 && onground
&& ((player->kartstuff[k_drift] >= 1 && player->kartstuff[k_drift] <= 3) && player->kartstuff[k_drift] != 0)
|| (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_drift] >= -3)))
S_StartSound(player->mo, sfx_mkdrft); S_StartSound(player->mo, sfx_mkdrft);
// Leveltime being 50 might take a while at times. We'll start it up once, isntantly. // Leveltime being 50 might take a while at times. We'll start it up once, isntantly.
else if ((player->kartstuff[k_drift] >= 1 || player->kartstuff[k_drift] <= -1) && !S_SoundPlaying(player->mo, sfx_mkdrft) && onground) else if ((player->kartstuff[k_drift] >= 1 || player->kartstuff[k_drift] <= -1) && !S_SoundPlaying(player->mo, sfx_mkdrft) && onground)
@ -6733,7 +6732,7 @@ static void P_MovePlayer(player_t *player)
} }
} }
K_MoveKartPlayer(player, cmd, onground); K_MoveKartPlayer(player, onground);
//} //}
@ -6985,7 +6984,7 @@ static void P_MovePlayer(player_t *player)
//////////////////////////// ////////////////////////////
// SRB2kart - Drifting smoke and fire // SRB2kart - Drifting smoke and fire
if ((player->kartstuff[k_drift] || player->kartstuff[k_mushroomtimer] > 0) && onground && (leveltime & 1)) if ((player->kartstuff[k_drift] != 0 || player->kartstuff[k_mushroomtimer] > 0) && onground && (leveltime & 1))
K_SpawnDriftTrail(player); K_SpawnDriftTrail(player);
/* // SRB2kart - nadah /* // SRB2kart - nadah