Try out boost stacking

This commit is contained in:
TehRealSalt 2019-03-11 12:00:39 -04:00
parent 5507a41d64
commit 0f4fd73533
6 changed files with 94 additions and 79 deletions

View file

@ -333,6 +333,7 @@ typedef enum
k_stolentimer, // You are being stolen from, this is your timer k_stolentimer, // You are being stolen from, this is your timer
k_superring, // Spawn rings on top of you every tic! k_superring, // Spawn rings on top of you every tic!
k_sneakertimer, // Duration of the Sneaker Boost itself k_sneakertimer, // Duration of the Sneaker Boost itself
k_levelbooster, // Duration of a level booster's boost (same as sneaker, but separated for )
k_growshrinktimer, // > 0 = Big, < 0 = small k_growshrinktimer, // > 0 = Big, < 0 = small
k_squishedtimer, // Squished frame timer k_squishedtimer, // Squished frame timer
k_rocketsneakertimer, // Rocket Sneaker duration timer k_rocketsneakertimer, // Rocket Sneaker duration timer
@ -365,6 +366,10 @@ typedef enum
NUMKARTSTUFF NUMKARTSTUFF
} kartstufftype_t; } kartstufftype_t;
// QUICKLY GET EITHER SNEAKER OR LEVEL BOOSTER SINCE THEY ARE FUNCTIONALLY IDENTICAL
#define EITHERSNEAKER(p) (p->kartstuff[k_sneakertimer] || p->kartstuff[k_levelbooster])
//} //}
#define WEP_AUTO 1 #define WEP_AUTO 1

View file

@ -1404,7 +1404,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
{ {
// forward with key or button // SRB2kart - we use an accel/brake instead of forward/backward. // forward with key or button // SRB2kart - we use an accel/brake instead of forward/backward.
axis = JoyAxis(AXISMOVE, ssplayer); axis = JoyAxis(AXISMOVE, ssplayer);
if (InputDown(gc_accelerate, ssplayer) || (gamepadjoystickmove && axis > 0) || player->kartstuff[k_sneakertimer]) if (InputDown(gc_accelerate, ssplayer) || (gamepadjoystickmove && axis > 0) || EITHERSNEAKER(player))
{ {
cmd->buttons |= BT_ACCELERATE; cmd->buttons |= BT_ACCELERATE;
forward = forwardmove[1]; // 50 forward = forwardmove[1]; // 50
@ -1557,7 +1557,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|| (leveltime > starttime && (cmd->buttons & BT_ACCELERATE && cmd->buttons & BT_BRAKE)) // Rubber-burn turn || (leveltime > starttime && (cmd->buttons & BT_ACCELERATE && cmd->buttons & BT_BRAKE)) // Rubber-burn turn
|| (player->kartstuff[k_respawn]) // Respawning || (player->kartstuff[k_respawn]) // Respawning
|| (player->spectator || objectplacing)) // Not a physical player || (player->spectator || objectplacing)) // Not a physical player
&& !(player->kartstuff[k_spinouttimer] && player->kartstuff[k_sneakertimer])) // Spinning and boosting cancels out turning && !(player->kartstuff[k_spinouttimer] && EITHERSNEAKER(player))) // Spinning and boosting cancels out turning
lang += (cmd->angleturn<<16); lang += (cmd->angleturn<<16);
cmd->angleturn = (INT16)(lang >> 16); cmd->angleturn = (INT16)(lang >> 16);
@ -4606,7 +4606,7 @@ void G_ReadDemoTiccmd(ticcmd_t *cmd, INT32 playernum)
|| (leveltime > starttime && (cmd->buttons & BT_ACCELERATE && cmd->buttons & BT_BRAKE)) // Rubber-burn turn || (leveltime > starttime && (cmd->buttons & BT_ACCELERATE && cmd->buttons & BT_BRAKE)) // Rubber-burn turn
|| (players[displayplayer].kartstuff[k_respawn]) // Respawning || (players[displayplayer].kartstuff[k_respawn]) // Respawning
|| (players[displayplayer].spectator || objectplacing)) // Not a physical player || (players[displayplayer].spectator || objectplacing)) // Not a physical player
&& !(players[displayplayer].kartstuff[k_spinouttimer] && players[displayplayer].kartstuff[k_sneakertimer])) // Spinning and boosting cancels out spinout && !(players[displayplayer].kartstuff[k_spinouttimer] && (players[displayplayer].kartstuff[k_sneakertimer] || players[displayplayer].kartstuff[k_levelbooster]))) // Spinning and boosting cancels out spinout
localangle += (cmd->angleturn<<16); localangle += (cmd->angleturn<<16);
if (!(demoflags & DF_GHOST) && *demo_p == DEMOMARKER) if (!(demoflags & DF_GHOST) && *demo_p == DEMOMARKER)

View file

@ -1943,8 +1943,10 @@ void K_MomentumToFacing(player_t *player)
// sets k_boostpower, k_speedboost, and k_accelboost to whatever we need it to be // sets k_boostpower, k_speedboost, and k_accelboost to whatever we need it to be
static void K_GetKartBoostPower(player_t *player) static void K_GetKartBoostPower(player_t *player)
{ {
fixed_t sneaker = 0;
fixed_t boostpower = FRACUNIT; fixed_t boostpower = FRACUNIT;
fixed_t speedboost = 0, accelboost = 0; fixed_t speedboost = 0, accelboost = 0;
UINT8 boostfactor = 1;
if (player->kartstuff[k_spinouttimer] && player->kartstuff[k_wipeoutslow] == 1) // Slow down after you've been bumped if (player->kartstuff[k_spinouttimer] && player->kartstuff[k_wipeoutslow] == 1) // Slow down after you've been bumped
{ {
@ -1952,81 +1954,66 @@ static void K_GetKartBoostPower(player_t *player)
return; return;
} }
// LOVELY magic numbers...
switch (gamespeed)
{
case 0:
sneaker = 53740+768;
break;
case 2:
sneaker = 17294+768;
break;
default:
sneaker = 32768;
break;
}
// Offroad is separate, it's difficult to factor it in with a variable value anyway. // Offroad is separate, it's difficult to factor it in with a variable value anyway.
if (!(player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_hyudorotimer] || player->kartstuff[k_sneakertimer]) if (!(player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_hyudorotimer] || EITHERSNEAKER(player))
&& player->kartstuff[k_offroad] >= 0) && player->kartstuff[k_offroad] >= 0)
boostpower = FixedDiv(boostpower, player->kartstuff[k_offroad] + FRACUNIT); boostpower = FixedDiv(boostpower, player->kartstuff[k_offroad] + FRACUNIT);
if (player->kartstuff[k_bananadrag] > TICRATE) if (player->kartstuff[k_bananadrag] > TICRATE)
boostpower = (4*boostpower)/5; boostpower = (4*boostpower)/5;
// Banana drag/offroad dust #define ADDBOOST(s,a) { \
if (boostpower < FRACUNIT speedboost += (s) / boostfactor; \
&& player->mo && P_IsObjectOnGround(player->mo) accelboost += (a) / boostfactor; \
&& player->speed > 0 boostfactor++; \
&& !player->spectator) }
{
K_SpawnWipeoutTrail(player->mo, true); if (player->kartstuff[k_levelbooster]) // Level boosters
if (leveltime % 6 == 0) ADDBOOST(sneaker, 8*FRACUNIT); // + 800% acceleration, varying top speed
S_StartSound(player->mo, sfx_cdfm70);
}
if (player->kartstuff[k_sneakertimer]) // Sneaker if (player->kartstuff[k_sneakertimer]) // Sneaker
{ ADDBOOST(sneaker, 8*FRACUNIT); // + 800% acceleration, varying top speed
switch (gamespeed)
{
case 0:
speedboost = max(speedboost, 53740+768);
break;
case 2:
speedboost = max(speedboost, 17294+768);
break;
default:
speedboost = max(speedboost, 32768);
break;
}
accelboost = max(accelboost, 8*FRACUNIT); // + 800%
}
if (player->kartstuff[k_invincibilitytimer]) // Invincibility if (player->kartstuff[k_invincibilitytimer]) // Invincibility
{ ADDBOOST((3*FRACUNIT)/8, 3*FRACUNIT); // + 37.5% top speed, + 300% acceleration
speedboost = max(speedboost, (3*FRACUNIT)/8); // + 37.5%
accelboost = max(accelboost, 3*FRACUNIT); // + 300% if (player->kartstuff[k_startboost]) // Startup Boost
} ADDBOOST(FRACUNIT/4, 6*FRACUNIT); // + 25% top speed, + 600% acceleration
if (player->kartstuff[k_driftboost]) // Drift Boost
ADDBOOST(FRACUNIT/4, 4*FRACUNIT); // + 25% top speed, + 400% acceleration
if (player->kartstuff[k_ringboost]) // Ring Boost
ADDBOOST(FRACUNIT/4, 4*FRACUNIT); // + 20% top speed, + 200% acceleration
if (player->kartstuff[k_growshrinktimer] > 0) // Grow if (player->kartstuff[k_growshrinktimer] > 0) // Grow
{ {
speedboost = max(speedboost, FRACUNIT/5); // + 20% // Grow's design is weird with booster stacking.
// We'll see how to replace its design BEFORE v2 gets released.
speedboost += (FRACUNIT/5); // + 20%
} }
if (player->kartstuff[k_ringboost]) // Ring Boost
{
speedboost = max(speedboost, FRACUNIT/5); // + 20%
accelboost = max(accelboost, 2*FRACUNIT); // + 200%
}
if (player->kartstuff[k_driftboost]) // Drift Boost
{
speedboost = max(speedboost, FRACUNIT/4); // + 25%
accelboost = max(accelboost, 4*FRACUNIT); // + 400%
}
if (player->kartstuff[k_startboost]) // Startup Boost
{
speedboost = max(speedboost, FRACUNIT/4); // + 25%
accelboost = max(accelboost, 6*FRACUNIT); // + 300%
}
// don't average them anymore, this would make a small boost and a high boost less useful
// just take the highest we want instead
player->kartstuff[k_boostpower] = boostpower; player->kartstuff[k_boostpower] = boostpower;
// value smoothing // value smoothing
if (speedboost > player->kartstuff[k_speedboost]) if (speedboost > player->kartstuff[k_speedboost])
player->kartstuff[k_speedboost] = speedboost; player->kartstuff[k_speedboost] = speedboost;
else else
player->kartstuff[k_speedboost] += (speedboost - player->kartstuff[k_speedboost])/(TICRATE/2); player->kartstuff[k_speedboost] += (speedboost - player->kartstuff[k_speedboost]) / (TICRATE/2);
player->kartstuff[k_accelboost] = accelboost; player->kartstuff[k_accelboost] = accelboost;
} }
@ -2235,7 +2222,8 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, mobj_t *inflicto
if (source && source != player->mo && source->player) if (source && source != player->mo && source->player)
K_PlayHitEmSound(source); K_PlayHitEmSound(source);
//player->kartstuff[k_sneakertimer] = 0; player->kartstuff[k_sneakertimer] = 0;
//player->kartstuff[k_levelbooster] = 0;
player->kartstuff[k_driftboost] = 0; player->kartstuff[k_driftboost] = 0;
player->kartstuff[k_ringboost] = 0; player->kartstuff[k_ringboost] = 0;
@ -2378,6 +2366,7 @@ void K_SquishPlayer(player_t *player, mobj_t *source, mobj_t *inflictor)
#endif #endif
player->kartstuff[k_sneakertimer] = 0; player->kartstuff[k_sneakertimer] = 0;
player->kartstuff[k_levelbooster] = 0;
player->kartstuff[k_driftboost] = 0; player->kartstuff[k_driftboost] = 0;
player->kartstuff[k_ringboost] = 0; player->kartstuff[k_ringboost] = 0;
@ -2504,6 +2493,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source, mobj_t *inflictor) // A b
player->mo->momx = player->mo->momy = 0; player->mo->momx = player->mo->momy = 0;
player->kartstuff[k_sneakertimer] = 0; player->kartstuff[k_sneakertimer] = 0;
player->kartstuff[k_levelbooster] = 0;
player->kartstuff[k_driftboost] = 0; player->kartstuff[k_driftboost] = 0;
player->kartstuff[k_ringboost] = 0; player->kartstuff[k_ringboost] = 0;
@ -3673,7 +3663,7 @@ void K_DoSneaker(player_t *player, INT32 type)
player->kartstuff[k_destboostcam] = FixedMul(FRACUNIT, FixedDiv((intendedboost - player->kartstuff[k_speedboost]), intendedboost)); player->kartstuff[k_destboostcam] = FixedMul(FRACUNIT, FixedDiv((intendedboost - player->kartstuff[k_speedboost]), intendedboost));
} }
if (!player->kartstuff[k_sneakertimer]) if (!EITHERSNEAKER(player))
{ {
if (type == 2) if (type == 2)
{ {
@ -3701,14 +3691,15 @@ void K_DoSneaker(player_t *player, INT32 type)
} }
} }
player->kartstuff[k_sneakertimer] = sneakertime;
if (type != 0) if (type != 0)
{ {
player->pflags |= PF_ATTACKDOWN; player->pflags |= PF_ATTACKDOWN;
K_PlayBoostTaunt(player->mo); K_PlayBoostTaunt(player->mo);
player->powers[pw_flashing] = 0; // Stop flashing after boosting player->powers[pw_flashing] = 0; // Stop flashing after boosting
player->kartstuff[k_sneakertimer] = sneakertime;
} }
else
player->kartstuff[k_levelbooster] = sneakertime;
} }
static void K_DoShrink(player_t *user) static void K_DoShrink(player_t *user)
@ -3787,10 +3778,10 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, UINT8 sound)
thrust = 72<<FRACBITS; thrust = 72<<FRACBITS;
if (mo->player->kartstuff[k_pogospring] != 2) if (mo->player->kartstuff[k_pogospring] != 2)
{ {
if (mo->player->kartstuff[k_sneakertimer]) if (EITHERSNEAKER(mo->player))
thrust = FixedMul(thrust, 5*FRACUNIT/4); thrust = FixedMul(thrust, (5*FRACUNIT)/4);
else if (mo->player->kartstuff[k_invincibilitytimer]) else if (mo->player->kartstuff[k_invincibilitytimer])
thrust = FixedMul(thrust, 9*FRACUNIT/8); thrust = FixedMul(thrust, (9*FRACUNIT)/8);
} }
} }
else else
@ -4634,8 +4625,20 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
K_UpdateEngineSounds(player, cmd); // Thanks, VAda! K_UpdateEngineSounds(player, cmd); // Thanks, VAda!
K_GetKartBoostPower(player); K_GetKartBoostPower(player);
// Banana drag/offroad dust
if (player->mo && !player->spectator
&& P_IsObjectOnGround(player->mo) && player->speed > 0
&& player->kartstuff[k_boostpower] < FRACUNIT)
{
K_SpawnWipeoutTrail(player->mo, true);
if (leveltime % 6 == 0)
S_StartSound(player->mo, sfx_cdfm70);
}
// Speed lines // Speed lines
if ((player->kartstuff[k_sneakertimer] || player->kartstuff[k_ringboost] || player->kartstuff[k_driftboost] || player->kartstuff[k_startboost]) && player->speed > 0) if ((EITHERSNEAKER(player) || player->kartstuff[k_ringboost]
|| player->kartstuff[k_driftboost] || player->kartstuff[k_startboost])
&& player->speed > 0)
{ {
mobj_t *fast = P_SpawnMobj(player->mo->x + (P_RandomRange(-36,36) * player->mo->scale), mobj_t *fast = P_SpawnMobj(player->mo->x + (P_RandomRange(-36,36) * player->mo->scale),
player->mo->y + (P_RandomRange(-36,36) * player->mo->scale), player->mo->y + (P_RandomRange(-36,36) * player->mo->scale),
@ -4755,7 +4758,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
{ {
if ((P_IsObjectOnGround(player->mo) if ((P_IsObjectOnGround(player->mo)
|| (player->kartstuff[k_spinouttype] != 0)) || (player->kartstuff[k_spinouttype] != 0))
&& (player->kartstuff[k_sneakertimer] == 0)) && (!EITHERSNEAKER(player)))
{ {
player->kartstuff[k_spinouttimer]--; player->kartstuff[k_spinouttimer]--;
if (player->kartstuff[k_wipeoutslow] > 1) if (player->kartstuff[k_wipeoutslow] > 1)
@ -4797,11 +4800,13 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
player->kartstuff[k_ringboost]--; player->kartstuff[k_ringboost]--;
if (player->kartstuff[k_sneakertimer]) if (player->kartstuff[k_sneakertimer])
{
player->kartstuff[k_sneakertimer]--; player->kartstuff[k_sneakertimer]--;
if (player->kartstuff[k_wipeoutslow] > 0 && player->kartstuff[k_wipeoutslow] < wipeoutslowtime+1)
player->kartstuff[k_wipeoutslow] = wipeoutslowtime+1; if (player->kartstuff[k_levelbooster])
} player->kartstuff[k_levelbooster]--;
if (EITHERSNEAKER(player) && player->kartstuff[k_wipeoutslow] > 0 && player->kartstuff[k_wipeoutslow] < wipeoutslowtime+1)
player->kartstuff[k_wipeoutslow] = wipeoutslowtime+1;
if (player->kartstuff[k_floorboost]) if (player->kartstuff[k_floorboost])
player->kartstuff[k_floorboost]--; player->kartstuff[k_floorboost]--;
@ -5084,7 +5089,7 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
turnvalue = FixedMul(turnvalue, adjustangle); // Weight has a small effect on turning turnvalue = FixedMul(turnvalue, adjustangle); // Weight has a small effect on turning
if (player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_sneakertimer] || player->kartstuff[k_growshrinktimer] > 0) if (EITHERSNEAKER(player) || player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_growshrinktimer] > 0)
turnvalue = FixedMul(turnvalue, FixedDiv(5*FRACUNIT, 4*FRACUNIT)); turnvalue = FixedMul(turnvalue, FixedDiv(5*FRACUNIT, 4*FRACUNIT));
return turnvalue; return turnvalue;
@ -5212,7 +5217,11 @@ static void K_KartDrift(player_t *player, boolean onground)
} }
// Disable drift-sparks until you're going fast enough // Disable drift-sparks until you're going fast enough
if (player->kartstuff[k_getsparks] == 0 || (player->kartstuff[k_offroad] && !player->kartstuff[k_invincibilitytimer] && !player->kartstuff[k_hyudorotimer] && !player->kartstuff[k_sneakertimer])) if (player->kartstuff[k_getsparks] == 0
|| (player->kartstuff[k_offroad]
&& !player->kartstuff[k_invincibilitytimer]
&& !player->kartstuff[k_hyudorotimer]
&& !EITHERSNEAKER(player)))
driftadditive = 0; driftadditive = 0;
if (player->speed > minspeed*2) if (player->speed > minspeed*2)
player->kartstuff[k_getsparks] = 1; player->kartstuff[k_getsparks] = 1;
@ -5243,7 +5252,7 @@ static void K_KartDrift(player_t *player, boolean onground)
player->kartstuff[k_getsparks] = 0; player->kartstuff[k_getsparks] = 0;
} }
if ((!player->kartstuff[k_sneakertimer]) if ((!EITHERSNEAKER(player))
|| (!player->cmd.driftturn) || (!player->cmd.driftturn)
|| (player->cmd.driftturn > 0) != (player->kartstuff[k_aizdriftstrat] > 0)) || (player->cmd.driftturn > 0) != (player->kartstuff[k_aizdriftstrat] > 0))
{ {

View file

@ -8270,9 +8270,10 @@ void P_MobjThinker(mobj_t *mobj)
if (p) if (p)
{ {
if (p->kartstuff[k_sneakertimer] > mobj->movecount) if (p->kartstuff[k_sneakertimer] > mobj->movecount
|| p->kartstuff[k_levelbooster] > mobj->movecount)
P_SetMobjState(mobj, S_BOOSTFLAME); P_SetMobjState(mobj, S_BOOSTFLAME);
mobj->movecount = p->kartstuff[k_sneakertimer]; mobj->movecount = max(p->kartstuff[k_sneakertimer], p->kartstuff[k_levelbooster]);
} }
} }

View file

@ -7303,7 +7303,7 @@ void T_Friction(friction_t *f)
// (or at least MF_PUSHABLEs, which is all I care about anyway) // (or at least MF_PUSHABLEs, which is all I care about anyway)
if ((!(thing->flags & (MF_NOGRAVITY | MF_NOCLIP)) && thing->z == thing->floorz) && (thing->player if ((!(thing->flags & (MF_NOGRAVITY | MF_NOCLIP)) && thing->z == thing->floorz) && (thing->player
&& (thing->player->kartstuff[k_invincibilitytimer] == 0 && thing->player->kartstuff[k_hyudorotimer] == 0 && (thing->player->kartstuff[k_invincibilitytimer] == 0 && thing->player->kartstuff[k_hyudorotimer] == 0
&& thing->player->kartstuff[k_sneakertimer] == 0 && thing->player->kartstuff[k_growshrinktimer] <= 0))) && !EITHERSNEAKER(thing->player) && thing->player->kartstuff[k_growshrinktimer] <= 0)))
{ {
if (f->roverfriction) if (f->roverfriction)
{ {

View file

@ -4762,7 +4762,7 @@ static void P_3dMovement(player_t *player)
if ((player->exiting || mapreset) || player->pflags & PF_STASIS || player->kartstuff[k_spinouttimer]) // pw_introcam? if ((player->exiting || mapreset) || player->pflags & PF_STASIS || player->kartstuff[k_spinouttimer]) // pw_introcam?
{ {
cmd->forwardmove = cmd->sidemove = 0; cmd->forwardmove = cmd->sidemove = 0;
if (player->kartstuff[k_sneakertimer]) if (EITHERSNEAKER(player))
cmd->forwardmove = 50; cmd->forwardmove = 50;
} }
@ -6596,7 +6596,7 @@ static void P_MovePlayer(player_t *player)
|| (leveltime > starttime && (cmd->buttons & BT_ACCELERATE && cmd->buttons & BT_BRAKE)) // Rubber-burn turn || (leveltime > starttime && (cmd->buttons & BT_ACCELERATE && cmd->buttons & BT_BRAKE)) // Rubber-burn turn
|| (player->kartstuff[k_respawn]) // Respawning || (player->kartstuff[k_respawn]) // Respawning
|| (player->spectator || objectplacing)) // Not a physical player || (player->spectator || objectplacing)) // Not a physical player
&& !(player->kartstuff[k_spinouttimer] && player->kartstuff[k_sneakertimer])) // Spinning and boosting cancels out turning && !(player->kartstuff[k_spinouttimer] && EITHERSNEAKER(player))) // Spinning and boosting cancels out turning
{ {
player->lturn_max[leveltime%MAXPREDICTTICS] = K_GetKartTurnValue(player, KART_FULLTURN)+1; player->lturn_max[leveltime%MAXPREDICTTICS] = K_GetKartTurnValue(player, KART_FULLTURN)+1;
player->rturn_max[leveltime%MAXPREDICTTICS] = K_GetKartTurnValue(player, -KART_FULLTURN)-1; player->rturn_max[leveltime%MAXPREDICTTICS] = K_GetKartTurnValue(player, -KART_FULLTURN)-1;
@ -6993,7 +6993,7 @@ static void P_MovePlayer(player_t *player)
//////////////////////////// ////////////////////////////
// SRB2kart - Drifting smoke and fire // SRB2kart - Drifting smoke and fire
if (player->kartstuff[k_sneakertimer] > 0 && onground && (leveltime & 1)) if (EITHERSNEAKER(player) && onground && (leveltime & 1))
K_SpawnBoostTrail(player); K_SpawnBoostTrail(player);
if (player->kartstuff[k_invincibilitytimer] > 0) if (player->kartstuff[k_invincibilitytimer] > 0)
@ -9251,7 +9251,7 @@ void P_PlayerThink(player_t *player)
#if 1 #if 1
// "Blur" a bit when you have speed shoes and are going fast enough // "Blur" a bit when you have speed shoes and are going fast enough
if ((player->powers[pw_super] || player->powers[pw_sneakers] if ((player->powers[pw_super] || player->powers[pw_sneakers]
|| player->kartstuff[k_driftboost] || player->kartstuff[k_ringboost] || player->kartstuff[k_sneakertimer] || player->kartstuff[k_startboost]) || EITHERSNEAKER(player) || player->kartstuff[k_driftboost] || player->kartstuff[k_ringboost] || player->kartstuff[k_startboost])
&& !player->kartstuff[k_invincibilitytimer] // SRB2kart && !player->kartstuff[k_invincibilitytimer] // SRB2kart
&& (player->speed + abs(player->mo->momz)) > FixedMul(20*FRACUNIT,player->mo->scale)) && (player->speed + abs(player->mo->momz)) > FixedMul(20*FRACUNIT,player->mo->scale))
{ {