mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'purple-spark' into 'master'
Purple sparks See merge request KartKrew/Kart!424
This commit is contained in:
commit
55bcfe48f4
12 changed files with 332 additions and 46 deletions
|
|
@ -376,6 +376,7 @@ typedef struct player_s
|
||||||
SINT8 drift; // (-5 to 5) - Drifting Left or Right, plus a bigger counter = sharper turn
|
SINT8 drift; // (-5 to 5) - Drifting Left or Right, plus a bigger counter = sharper turn
|
||||||
fixed_t driftcharge; // Charge your drift so you can release a burst of speed
|
fixed_t driftcharge; // Charge your drift so you can release a burst of speed
|
||||||
UINT8 driftboost; // (0 to 125) - Boost you get from drifting
|
UINT8 driftboost; // (0 to 125) - Boost you get from drifting
|
||||||
|
UINT8 strongdriftboost; // (0 to 125) - While active, boost from drifting gives a stronger speed increase
|
||||||
|
|
||||||
SINT8 aizdriftstrat; // (-1 to 1) - Let go of your drift while boosting? Helper for the SICK STRATZ (sliptiding!) you have just unlocked
|
SINT8 aizdriftstrat; // (-1 to 1) - Let go of your drift while boosting? Helper for the SICK STRATZ (sliptiding!) you have just unlocked
|
||||||
INT32 aizdrifttilt;
|
INT32 aizdrifttilt;
|
||||||
|
|
|
||||||
|
|
@ -3522,6 +3522,10 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_DRIFTWARNSPARK3",
|
"S_DRIFTWARNSPARK3",
|
||||||
"S_DRIFTWARNSPARK4",
|
"S_DRIFTWARNSPARK4",
|
||||||
|
|
||||||
|
// Drift electricity
|
||||||
|
"S_DRIFTELECTRICITY",
|
||||||
|
"S_DRIFTELECTRICSPARK",
|
||||||
|
|
||||||
// Fast lines
|
// Fast lines
|
||||||
"S_FASTLINE1",
|
"S_FASTLINE1",
|
||||||
"S_FASTLINE2",
|
"S_FASTLINE2",
|
||||||
|
|
@ -5446,6 +5450,8 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
||||||
"MT_DRIFTSPARK",
|
"MT_DRIFTSPARK",
|
||||||
"MT_BRAKEDRIFT",
|
"MT_BRAKEDRIFT",
|
||||||
"MT_DRIFTDUST",
|
"MT_DRIFTDUST",
|
||||||
|
"MT_DRIFTELECTRICITY",
|
||||||
|
"MT_DRIFTELECTRICSPARK",
|
||||||
|
|
||||||
"MT_ROCKETSNEAKER", // Rocket sneakers
|
"MT_ROCKETSNEAKER", // Rocket sneakers
|
||||||
|
|
||||||
|
|
|
||||||
59
src/info.c
59
src/info.c
|
|
@ -541,6 +541,8 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"DRIF", // Drift Sparks
|
"DRIF", // Drift Sparks
|
||||||
"BDRF", // Brake drift sparks
|
"BDRF", // Brake drift sparks
|
||||||
"DRWS", // Drift dust sparks
|
"DRWS", // Drift dust sparks
|
||||||
|
"DREL", // Drift electricity
|
||||||
|
"DRES", // Drift electric sparks
|
||||||
|
|
||||||
// Kart Items
|
// Kart Items
|
||||||
"RSHE", // Rocket sneaker
|
"RSHE", // Rocket sneaker
|
||||||
|
|
@ -4096,6 +4098,9 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_DRWS, FF_FULLBRIGHT|FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTWARNSPARK4}, // S_DRIFTWARNSPARK3
|
{SPR_DRWS, FF_FULLBRIGHT|FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTWARNSPARK4}, // S_DRIFTWARNSPARK3
|
||||||
{SPR_DRWS, FF_FULLBRIGHT|FF_TRANS20|3, 3, {NULL}, 0, 0, S_NULL}, // S_DRIFTWARNSPARK4
|
{SPR_DRWS, FF_FULLBRIGHT|FF_TRANS20|3, 3, {NULL}, 0, 0, S_NULL}, // S_DRIFTWARNSPARK4
|
||||||
|
|
||||||
|
{SPR_DREL, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE|FF_GLOBALANIM, 2, {NULL}, 5, 2, S_NULL}, // S_DRIFTELECTRICITY
|
||||||
|
{SPR_DRES, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 20, {NULL}, 1, 10, S_NULL}, // S_DRIFTELECTRICSPARK
|
||||||
|
|
||||||
{SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_FASTLINE2}, // S_FASTLINE1
|
{SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_FASTLINE2}, // S_FASTLINE1
|
||||||
{SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_FASTLINE3}, // S_FASTLINE2
|
{SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_FASTLINE3}, // S_FASTLINE2
|
||||||
{SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_FASTLINE4}, // S_FASTLINE3
|
{SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_FASTLINE4}, // S_FASTLINE3
|
||||||
|
|
@ -23473,6 +23478,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_DRIFTELECTRICITY
|
||||||
|
-1, // doomednum
|
||||||
|
S_DRIFTELECTRICITY, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
0, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
16*FRACUNIT, // radius
|
||||||
|
32*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
0, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // MT_DRIFTELECTRICSPARK
|
||||||
|
-1, // doomednum
|
||||||
|
S_DRIFTELECTRICSPARK, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
0, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
4*FRACUNIT, // speed
|
||||||
|
9*FRACUNIT, // radius
|
||||||
|
37*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
0, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_ROCKETSNEAKER
|
{ // MT_ROCKETSNEAKER
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_ROCKETSNEAKER_L, // spawnstate
|
S_ROCKETSNEAKER_L, // spawnstate
|
||||||
|
|
|
||||||
|
|
@ -1083,6 +1083,8 @@ typedef enum sprite
|
||||||
SPR_DRIF, // Drift Sparks
|
SPR_DRIF, // Drift Sparks
|
||||||
SPR_BDRF, // Brake drift sparks
|
SPR_BDRF, // Brake drift sparks
|
||||||
SPR_DRWS, // Drift dust sparks
|
SPR_DRWS, // Drift dust sparks
|
||||||
|
SPR_DREL, // Drift electricity
|
||||||
|
SPR_DRES, // Drift electric sparks
|
||||||
|
|
||||||
// Kart Items
|
// Kart Items
|
||||||
SPR_RSHE, // Rocket sneaker
|
SPR_RSHE, // Rocket sneaker
|
||||||
|
|
@ -4490,6 +4492,10 @@ typedef enum state
|
||||||
S_DRIFTWARNSPARK3,
|
S_DRIFTWARNSPARK3,
|
||||||
S_DRIFTWARNSPARK4,
|
S_DRIFTWARNSPARK4,
|
||||||
|
|
||||||
|
// Drift electricity
|
||||||
|
S_DRIFTELECTRICITY,
|
||||||
|
S_DRIFTELECTRICSPARK,
|
||||||
|
|
||||||
// Fast lines
|
// Fast lines
|
||||||
S_FASTLINE1,
|
S_FASTLINE1,
|
||||||
S_FASTLINE2,
|
S_FASTLINE2,
|
||||||
|
|
@ -6452,6 +6458,8 @@ typedef enum mobj_type
|
||||||
MT_DRIFTSPARK,
|
MT_DRIFTSPARK,
|
||||||
MT_BRAKEDRIFT,
|
MT_BRAKEDRIFT,
|
||||||
MT_DRIFTDUST,
|
MT_DRIFTDUST,
|
||||||
|
MT_DRIFTELECTRICITY,
|
||||||
|
MT_DRIFTELECTRICSPARK,
|
||||||
|
|
||||||
MT_ROCKETSNEAKER,
|
MT_ROCKETSNEAKER,
|
||||||
|
|
||||||
|
|
|
||||||
272
src/k_kart.c
272
src/k_kart.c
|
|
@ -1971,6 +1971,7 @@ void K_KartMoveAnimation(player_t *player)
|
||||||
SINT8 destGlanceDir = 0;
|
SINT8 destGlanceDir = 0;
|
||||||
SINT8 drift = player->drift;
|
SINT8 drift = player->drift;
|
||||||
|
|
||||||
|
// Uses turning over steering -- it's important to show player feedback immediately.
|
||||||
if (player->cmd.turning < -minturn)
|
if (player->cmd.turning < -minturn)
|
||||||
{
|
{
|
||||||
turndir = -1;
|
turndir = -1;
|
||||||
|
|
@ -2534,9 +2535,16 @@ static void K_GetKartBoostPower(player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->driftboost) // Drift Boost
|
if (player->driftboost) // Drift Boost
|
||||||
|
{
|
||||||
|
if (player->strongdriftboost) // Purple/Rainbow drift boost
|
||||||
|
{
|
||||||
|
ADDBOOST(FRACUNIT/3, 4*FRACUNIT, 0); // + 33% top speed, + 400% acceleration, +0% handling
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
ADDBOOST(FRACUNIT/4, 4*FRACUNIT, 0); // + 25% top speed, + 400% acceleration, +0% handling
|
ADDBOOST(FRACUNIT/4, 4*FRACUNIT, 0); // + 25% top speed, + 400% acceleration, +0% handling
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (player->ringboost) // Ring Boost
|
if (player->ringboost) // Ring Boost
|
||||||
{
|
{
|
||||||
|
|
@ -3536,7 +3544,11 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
|
||||||
|
|
||||||
UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
|
UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
|
||||||
{
|
{
|
||||||
INT32 ds = K_GetKartDriftSparkValue(player);
|
const INT32 dsone = K_GetKartDriftSparkValueForStage(player, 1);
|
||||||
|
const INT32 dstwo = K_GetKartDriftSparkValueForStage(player, 2);
|
||||||
|
const INT32 dsthree = K_GetKartDriftSparkValueForStage(player, 3);
|
||||||
|
const INT32 dsfour = K_GetKartDriftSparkValueForStage(player, 4);
|
||||||
|
|
||||||
UINT16 color = SKINCOLOR_NONE;
|
UINT16 color = SKINCOLOR_NONE;
|
||||||
|
|
||||||
if (charge < 0)
|
if (charge < 0)
|
||||||
|
|
@ -3544,10 +3556,10 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
|
||||||
// Stage 0: Yellow
|
// Stage 0: Yellow
|
||||||
color = SKINCOLOR_GOLD;
|
color = SKINCOLOR_GOLD;
|
||||||
}
|
}
|
||||||
else if (charge >= ds*4)
|
else if (charge >= dsfour)
|
||||||
{
|
{
|
||||||
// Stage 3: Rainbow
|
// Stage 4: Rainbow
|
||||||
if (charge <= (ds*4)+(32*3))
|
if (charge <= dsfour+(32*3))
|
||||||
{
|
{
|
||||||
// transition
|
// transition
|
||||||
color = SKINCOLOR_SILVER;
|
color = SKINCOLOR_SILVER;
|
||||||
|
|
@ -3557,23 +3569,41 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
|
||||||
color = K_RainbowColor(leveltime);
|
color = K_RainbowColor(leveltime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (charge >= ds*2)
|
else if (charge >= dsthree)
|
||||||
|
{
|
||||||
|
// Stage 3: Purple
|
||||||
|
if (charge <= dsthree+(16*3))
|
||||||
|
{
|
||||||
|
// transition 1
|
||||||
|
color = SKINCOLOR_TAFFY;
|
||||||
|
}
|
||||||
|
else if (charge <= dsthree+(32*3))
|
||||||
|
{
|
||||||
|
// transition 2
|
||||||
|
color = SKINCOLOR_MOONSET;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
color = SKINCOLOR_PURPLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (charge >= dstwo)
|
||||||
{
|
{
|
||||||
// Stage 2: Blue
|
// Stage 2: Blue
|
||||||
if (charge <= (ds*2)+(32*3))
|
if (charge <= dstwo+(32*3))
|
||||||
{
|
{
|
||||||
// transition
|
// transition
|
||||||
color = SKINCOLOR_PURPLE;
|
color = SKINCOLOR_NOVA;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
color = SKINCOLOR_SAPPHIRE;
|
color = SKINCOLOR_SAPPHIRE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (charge >= ds)
|
else if (charge >= dsone)
|
||||||
{
|
{
|
||||||
// Stage 1: Red
|
// Stage 1: Red
|
||||||
if (charge <= (ds)+(32*3))
|
if (charge <= dsone+(32*3))
|
||||||
{
|
{
|
||||||
// transition
|
// transition
|
||||||
color = SKINCOLOR_TANGERINE;
|
color = SKINCOLOR_TANGERINE;
|
||||||
|
|
@ -3587,9 +3617,102 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void K_SpawnDriftElectricity(player_t *player)
|
||||||
|
{
|
||||||
|
UINT8 i;
|
||||||
|
UINT16 color = K_DriftSparkColor(player, player->driftcharge);
|
||||||
|
mobj_t *mo = player->mo;
|
||||||
|
fixed_t vr = FixedDiv(mo->radius/3, mo->scale); // P_SpawnMobjFromMobj will rescale
|
||||||
|
fixed_t horizontalradius = FixedDiv(5*mo->radius/3, mo->scale);
|
||||||
|
angle_t verticalangle = K_MomentumAngle(mo) + ANGLE_180; // points away from the momentum angle
|
||||||
|
|
||||||
|
for (i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
// i == 0 is right, i == 1 is left
|
||||||
|
mobj_t *spark;
|
||||||
|
angle_t horizonatalangle = verticalangle + (i ? ANGLE_90 : ANGLE_270);
|
||||||
|
angle_t sparkangle = verticalangle + ANGLE_180;
|
||||||
|
fixed_t verticalradius = vr; // local version of the above so we can modify it
|
||||||
|
fixed_t scalefactor = 0; // positive values enlarge sparks, negative values shrink them
|
||||||
|
fixed_t x, y;
|
||||||
|
|
||||||
|
if (player->drift == 0)
|
||||||
|
; // idk what you're doing spawning drift sparks when you're not drifting but you do you
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scalefactor = -(2*i - 1) * min(max(player->steering, -1), 1) * FRACUNIT;
|
||||||
|
if ((player->drift > 0) == !(i)) // inwards spark should be closer to the player
|
||||||
|
verticalradius = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
x = P_ReturnThrustX(mo, verticalangle, verticalradius)
|
||||||
|
+ P_ReturnThrustX(mo, horizonatalangle, horizontalradius);
|
||||||
|
y = P_ReturnThrustY(mo, verticalangle, verticalradius)
|
||||||
|
+ P_ReturnThrustY(mo, horizonatalangle, horizontalradius);
|
||||||
|
spark = P_SpawnMobjFromMobj(mo, x, y, 0, MT_DRIFTELECTRICITY);
|
||||||
|
spark->angle = sparkangle;
|
||||||
|
spark->color = color;
|
||||||
|
K_GenericExtraFlagsNoZAdjust(spark, mo);
|
||||||
|
|
||||||
|
spark->spritexscale += scalefactor/3;
|
||||||
|
spark->spriteyscale += scalefactor/8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void K_SpawnDriftElectricSparks(player_t *player)
|
||||||
|
{
|
||||||
|
SINT8 hdir, vdir, i;
|
||||||
|
|
||||||
|
mobj_t *mo = player->mo;
|
||||||
|
angle_t momangle = K_MomentumAngle(mo) + ANGLE_180;
|
||||||
|
fixed_t radius = 2 * FixedDiv(mo->radius, mo->scale); // P_SpawnMobjFromMobj will rescale
|
||||||
|
fixed_t x = P_ReturnThrustX(mo, momangle, radius);
|
||||||
|
fixed_t y = P_ReturnThrustY(mo, momangle, radius);
|
||||||
|
fixed_t z = FixedDiv(mo->height, 2 * mo->scale); // P_SpawnMobjFromMobj will rescale
|
||||||
|
|
||||||
|
fixed_t sparkspeed = mobjinfo[MT_DRIFTELECTRICSPARK].speed;
|
||||||
|
fixed_t sparkradius = 2 * mobjinfo[MT_DRIFTELECTRICSPARK].radius;
|
||||||
|
UINT16 color = K_DriftSparkColor(player, player->driftcharge);
|
||||||
|
|
||||||
|
// if the sparks are spawned from first blood rather than drift boost, color will be SKINCOLOR_NONE. ew!
|
||||||
|
if (color == SKINCOLOR_NONE)
|
||||||
|
color = SKINCOLOR_SILVER;
|
||||||
|
|
||||||
|
for (hdir = -1; hdir <= 1; hdir += 2)
|
||||||
|
{
|
||||||
|
for (vdir = -1; vdir <= 1; vdir += 2)
|
||||||
|
{
|
||||||
|
fixed_t hspeed = FixedMul(hdir * sparkspeed, mo->scale); // P_InstaThrust treats speed as absolute
|
||||||
|
fixed_t vspeed = vdir * sparkspeed; // P_SetObjectMomZ scales speed with object scale
|
||||||
|
angle_t sparkangle = mo->angle + ANGLE_45;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
fixed_t xoff = P_ReturnThrustX(mo, sparkangle, sparkradius);
|
||||||
|
fixed_t yoff = P_ReturnThrustY(mo, sparkangle, sparkradius);
|
||||||
|
mobj_t *spark = P_SpawnMobjFromMobj(mo, x + xoff, y + yoff, z, MT_DRIFTELECTRICSPARK);
|
||||||
|
|
||||||
|
spark->angle = sparkangle;
|
||||||
|
spark->color = color;
|
||||||
|
P_InstaThrust(spark, mo->angle + ANGLE_90, hspeed);
|
||||||
|
P_SetObjectMomZ(spark, vspeed, false);
|
||||||
|
spark->momx += mo->momx; // copy player speed
|
||||||
|
spark->momy += mo->momy;
|
||||||
|
|
||||||
|
sparkangle += ANGLE_90;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
S_StartSound(mo, sfx_s3k45);
|
||||||
|
}
|
||||||
|
|
||||||
static void K_SpawnDriftSparks(player_t *player)
|
static void K_SpawnDriftSparks(player_t *player)
|
||||||
{
|
{
|
||||||
INT32 ds = K_GetKartDriftSparkValue(player);
|
const INT32 dsone = K_GetKartDriftSparkValueForStage(player, 1);
|
||||||
|
const INT32 dstwo = K_GetKartDriftSparkValueForStage(player, 2);
|
||||||
|
const INT32 dsthree = K_GetKartDriftSparkValueForStage(player, 3);
|
||||||
|
const INT32 dsfour = K_GetKartDriftSparkValueForStage(player, 4);
|
||||||
|
|
||||||
fixed_t newx;
|
fixed_t newx;
|
||||||
fixed_t newy;
|
fixed_t newy;
|
||||||
mobj_t *spark;
|
mobj_t *spark;
|
||||||
|
|
@ -3604,7 +3727,7 @@ static void K_SpawnDriftSparks(player_t *player)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!player->drift
|
if (!player->drift
|
||||||
|| (player->driftcharge < ds && !(player->driftcharge < 0)))
|
|| (player->driftcharge < dsone && !(player->driftcharge < 0)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
travelangle = player->mo->angle-(ANGLE_45/5)*player->drift;
|
travelangle = player->mo->angle-(ANGLE_45/5)*player->drift;
|
||||||
|
|
@ -3634,13 +3757,13 @@ static void K_SpawnDriftSparks(player_t *player)
|
||||||
// Stage 0: Yellow
|
// Stage 0: Yellow
|
||||||
size = 0;
|
size = 0;
|
||||||
}
|
}
|
||||||
else if (player->driftcharge >= ds*4)
|
else if (player->driftcharge >= dsfour)
|
||||||
{
|
{
|
||||||
// Stage 3: Rainbow
|
// Stage 4: Rainbow
|
||||||
size = 2;
|
size = 2;
|
||||||
trail = 2;
|
trail = 2;
|
||||||
|
|
||||||
if (player->driftcharge <= (ds*4)+(32*3))
|
if (player->driftcharge <= (dsfour)+(32*3))
|
||||||
{
|
{
|
||||||
// transition
|
// transition
|
||||||
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
|
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
|
||||||
|
|
@ -3651,13 +3774,25 @@ static void K_SpawnDriftSparks(player_t *player)
|
||||||
spark->colorized = true;
|
spark->colorized = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (player->driftcharge >= ds*2)
|
else if (player->driftcharge >= dsthree)
|
||||||
|
{
|
||||||
|
// Stage 3: Purple
|
||||||
|
size = 2;
|
||||||
|
trail = 1;
|
||||||
|
|
||||||
|
if (player->driftcharge <= dsthree+(32*3))
|
||||||
|
{
|
||||||
|
// transition
|
||||||
|
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (player->driftcharge >= dstwo)
|
||||||
{
|
{
|
||||||
// Stage 2: Blue
|
// Stage 2: Blue
|
||||||
size = 2;
|
size = 2;
|
||||||
trail = 1;
|
trail = 1;
|
||||||
|
|
||||||
if (player->driftcharge <= (ds*2)+(32*3))
|
if (player->driftcharge <= dstwo+(32*3))
|
||||||
{
|
{
|
||||||
// transition
|
// transition
|
||||||
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
|
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
|
||||||
|
|
@ -3668,15 +3803,15 @@ static void K_SpawnDriftSparks(player_t *player)
|
||||||
// Stage 1: Red
|
// Stage 1: Red
|
||||||
size = 1;
|
size = 1;
|
||||||
|
|
||||||
if (player->driftcharge <= (ds)+(32*3))
|
if (player->driftcharge <= dsone+(32*3))
|
||||||
{
|
{
|
||||||
// transition
|
// transition
|
||||||
P_SetScale(spark, (spark->destscale = spark->scale*2));
|
P_SetScale(spark, (spark->destscale = spark->scale*2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((player->drift > 0 && player->cmd.turning > 0) // Inward drifts
|
if ((player->drift > 0 && player->steering > 0) // Inward drifts
|
||||||
|| (player->drift < 0 && player->cmd.turning < 0))
|
|| (player->drift < 0 && player->steering < 0))
|
||||||
{
|
{
|
||||||
if ((player->drift < 0 && (i & 1))
|
if ((player->drift < 0 && (i & 1))
|
||||||
|| (player->drift > 0 && !(i & 1)))
|
|| (player->drift > 0 && !(i & 1)))
|
||||||
|
|
@ -3689,8 +3824,8 @@ static void K_SpawnDriftSparks(player_t *player)
|
||||||
size--;
|
size--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((player->drift > 0 && player->cmd.turning < 0) // Outward drifts
|
else if ((player->drift > 0 && player->steering < 0) // Outward drifts
|
||||||
|| (player->drift < 0 && player->cmd.turning > 0))
|
|| (player->drift < 0 && player->steering > 0))
|
||||||
{
|
{
|
||||||
if ((player->drift < 0 && (i & 1))
|
if ((player->drift < 0 && (i & 1))
|
||||||
|| (player->drift > 0 && !(i & 1)))
|
|| (player->drift > 0 && !(i & 1)))
|
||||||
|
|
@ -3716,6 +3851,11 @@ static void K_SpawnDriftSparks(player_t *player)
|
||||||
|
|
||||||
K_MatchGenericExtraFlags(spark, player->mo);
|
K_MatchGenericExtraFlags(spark, player->mo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (player->driftcharge >= dsthree)
|
||||||
|
{
|
||||||
|
K_SpawnDriftElectricity(player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void K_SpawnAIZDust(player_t *player)
|
static void K_SpawnAIZDust(player_t *player)
|
||||||
|
|
@ -6397,6 +6537,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
if (player->driftboost)
|
if (player->driftboost)
|
||||||
player->driftboost--;
|
player->driftboost--;
|
||||||
|
|
||||||
|
if (player->strongdriftboost)
|
||||||
|
player->strongdriftboost--;
|
||||||
|
|
||||||
if (player->startboost)
|
if (player->startboost)
|
||||||
player->startboost--;
|
player->startboost--;
|
||||||
|
|
||||||
|
|
@ -7186,10 +7329,32 @@ INT32 K_GetKartDriftSparkValue(player_t *player)
|
||||||
return (26*4 + player->kartspeed*2 + (9 - player->kartweight))*8;
|
return (26*4 + player->kartspeed*2 + (9 - player->kartweight))*8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INT32 K_GetKartDriftSparkValueForStage(player_t *player, UINT8 stage)
|
||||||
|
{
|
||||||
|
fixed_t mul = FRACUNIT;
|
||||||
|
|
||||||
|
// This code is function is pretty much useless now that the timing changes are linear but bleh.
|
||||||
|
switch (stage)
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
mul = 2*FRACUNIT; // x2
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
mul = 3*FRACUNIT; // x3
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
mul = 4*FRACUNIT; // x4
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (FixedMul(K_GetKartDriftSparkValue(player) * FRACUNIT, mul) / FRACUNIT);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Stage 1: red sparks
|
Stage 1: red sparks
|
||||||
Stage 2: blue sparks
|
Stage 2: blue sparks
|
||||||
Stage 3: big large rainbow sparks
|
Stage 3: purple sparks
|
||||||
|
Stage 4: big large rainbow sparks
|
||||||
Stage 0: air failsafe
|
Stage 0: air failsafe
|
||||||
*/
|
*/
|
||||||
void K_SpawnDriftBoostExplosion(player_t *player, int stage)
|
void K_SpawnDriftBoostExplosion(player_t *player, int stage)
|
||||||
|
|
@ -7215,6 +7380,13 @@ void K_SpawnDriftBoostExplosion(player_t *player, int stage)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
overlay->color = SKINCOLOR_PURPLE;
|
||||||
|
overlay->fuse = 48;
|
||||||
|
|
||||||
|
S_StartSound(player->mo, sfx_kc5b);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
overlay->color = SKINCOLOR_SILVER;
|
overlay->color = SKINCOLOR_SILVER;
|
||||||
overlay->fuse = 120;
|
overlay->fuse = 120;
|
||||||
|
|
||||||
|
|
@ -7235,9 +7407,10 @@ static void K_KartDrift(player_t *player, boolean onground)
|
||||||
{
|
{
|
||||||
const fixed_t minspeed = (10 * player->mo->scale);
|
const fixed_t minspeed = (10 * player->mo->scale);
|
||||||
|
|
||||||
const INT32 dsone = K_GetKartDriftSparkValue(player);
|
const INT32 dsone = K_GetKartDriftSparkValueForStage(player, 1);
|
||||||
const INT32 dstwo = dsone*2;
|
const INT32 dstwo = K_GetKartDriftSparkValueForStage(player, 2);
|
||||||
const INT32 dsthree = dstwo*2;
|
const INT32 dsthree = K_GetKartDriftSparkValueForStage(player, 3);
|
||||||
|
const INT32 dsfour = K_GetKartDriftSparkValueForStage(player, 4);
|
||||||
|
|
||||||
const UINT16 buttons = K_GetKartButtons(player);
|
const UINT16 buttons = K_GetKartButtons(player);
|
||||||
|
|
||||||
|
|
@ -7286,16 +7459,33 @@ static void K_KartDrift(player_t *player, boolean onground)
|
||||||
|
|
||||||
K_SpawnDriftBoostExplosion(player, 2);
|
K_SpawnDriftBoostExplosion(player, 2);
|
||||||
}
|
}
|
||||||
else if (player->driftcharge >= dsthree)
|
else if (player->driftcharge < dsfour)
|
||||||
{
|
{
|
||||||
// Stage 3: Rainbow sparks
|
// Stage 3: Purple sparks
|
||||||
|
if (!onground)
|
||||||
|
P_Thrust(player->mo, pushdir, ( 5 * player->speed ) / 12);
|
||||||
|
|
||||||
|
if (player->driftboost < 85)
|
||||||
|
player->driftboost = 85;
|
||||||
|
if (player->strongdriftboost < 85)
|
||||||
|
player->strongdriftboost = 85;
|
||||||
|
|
||||||
|
K_SpawnDriftBoostExplosion(player, 3);
|
||||||
|
K_SpawnDriftElectricSparks(player);
|
||||||
|
}
|
||||||
|
else if (player->driftcharge >= dsfour)
|
||||||
|
{
|
||||||
|
// Stage 4: Rainbow sparks
|
||||||
if (!onground)
|
if (!onground)
|
||||||
P_Thrust(player->mo, pushdir, player->speed / 2);
|
P_Thrust(player->mo, pushdir, player->speed / 2);
|
||||||
|
|
||||||
if (player->driftboost < 125)
|
if (player->driftboost < 125)
|
||||||
player->driftboost = 125;
|
player->driftboost = 125;
|
||||||
|
if (player->strongdriftboost < 125)
|
||||||
|
player->strongdriftboost = 125;
|
||||||
|
|
||||||
K_SpawnDriftBoostExplosion(player, 3);
|
K_SpawnDriftBoostExplosion(player, 4);
|
||||||
|
K_SpawnDriftElectricSparks(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -7323,6 +7513,8 @@ static void K_KartDrift(player_t *player, boolean onground)
|
||||||
else if (player->speed > minspeed
|
else if (player->speed > minspeed
|
||||||
&& (player->drift == 0 || (player->pflags & PF_DRIFTEND)))
|
&& (player->drift == 0 || (player->pflags & PF_DRIFTEND)))
|
||||||
{
|
{
|
||||||
|
// Uses turning over steering, since this is very binary.
|
||||||
|
// Using steering would cause a lot more "wrong drifts".
|
||||||
if (player->cmd.turning > 0)
|
if (player->cmd.turning > 0)
|
||||||
{
|
{
|
||||||
// Starting left drift
|
// Starting left drift
|
||||||
|
|
@ -7359,10 +7551,10 @@ static void K_KartDrift(player_t *player, boolean onground)
|
||||||
if (player->drift > 5)
|
if (player->drift > 5)
|
||||||
player->drift = 5;
|
player->drift = 5;
|
||||||
|
|
||||||
if (player->cmd.turning > 0) // Inward
|
if (player->steering > 0) // Inward
|
||||||
driftadditive += abs(player->cmd.turning)/100;
|
driftadditive += abs(player->steering)/100;
|
||||||
if (player->cmd.turning < 0) // Outward
|
if (player->steering < 0) // Outward
|
||||||
driftadditive -= abs(player->cmd.turning)/75;
|
driftadditive -= abs(player->steering)/75;
|
||||||
}
|
}
|
||||||
else if (player->drift <= -1) // Drifting to the right
|
else if (player->drift <= -1) // Drifting to the right
|
||||||
{
|
{
|
||||||
|
|
@ -7370,10 +7562,10 @@ static void K_KartDrift(player_t *player, boolean onground)
|
||||||
if (player->drift < -5)
|
if (player->drift < -5)
|
||||||
player->drift = -5;
|
player->drift = -5;
|
||||||
|
|
||||||
if (player->cmd.turning < 0) // Inward
|
if (player->steering < 0) // Inward
|
||||||
driftadditive += abs(player->cmd.turning)/100;
|
driftadditive += abs(player->steering)/100;
|
||||||
if (player->cmd.turning > 0) // Outward
|
if (player->steering > 0) // Outward
|
||||||
driftadditive -= abs(player->cmd.turning)/75;
|
driftadditive -= abs(player->steering)/75;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disable drift-sparks until you're going fast enough
|
// Disable drift-sparks until you're going fast enough
|
||||||
|
|
@ -7437,9 +7629,9 @@ static void K_KartDrift(player_t *player, boolean onground)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((player->handleboost == 0)
|
if ((player->handleboost == 0)
|
||||||
|| (!player->cmd.turning)
|
|| (!player->steering)
|
||||||
|| (!player->aizdriftstrat)
|
|| (!player->aizdriftstrat)
|
||||||
|| (player->cmd.turning > 0) != (player->aizdriftstrat > 0))
|
|| (player->steering > 0) != (player->aizdriftstrat > 0))
|
||||||
{
|
{
|
||||||
if (!player->drift)
|
if (!player->drift)
|
||||||
player->aizdriftstrat = 0;
|
player->aizdriftstrat = 0;
|
||||||
|
|
@ -7772,7 +7964,7 @@ static void K_KartSpindash(player_t *player)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->speed == 0 && cmd->turning != 0 && leveltime % 8 == 0)
|
if (player->speed == 0 && player->steering != 0 && leveltime % 8 == 0)
|
||||||
{
|
{
|
||||||
// Rubber burn turn sfx
|
// Rubber burn turn sfx
|
||||||
S_StartSound(player->mo, sfx_ruburn);
|
S_StartSound(player->mo, sfx_ruburn);
|
||||||
|
|
@ -8609,7 +8801,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
|
|
||||||
else if (!(player->pflags & PF_TRICKDELAY)) // don't allow tricking at the same frame you tumble obv
|
else if (!(player->pflags & PF_TRICKDELAY)) // don't allow tricking at the same frame you tumble obv
|
||||||
{
|
{
|
||||||
|
// Uses cmd->turning over steering intentionally.
|
||||||
if (cmd->turning > 0)
|
if (cmd->turning > 0)
|
||||||
{
|
{
|
||||||
P_InstaThrust(player->mo, player->mo->angle + lr, max(basespeed, speed*5/2));
|
P_InstaThrust(player->mo, player->mo->angle + lr, max(basespeed, speed*5/2));
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,9 @@ boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y);
|
||||||
void K_UpdateSteeringValue(player_t *player, INT16 destSteering);
|
void K_UpdateSteeringValue(player_t *player, INT16 destSteering);
|
||||||
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);
|
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);
|
||||||
INT32 K_GetKartDriftSparkValue(player_t *player);
|
INT32 K_GetKartDriftSparkValue(player_t *player);
|
||||||
|
INT32 K_GetKartDriftSparkValueForStage(player_t *player, UINT8 stage);
|
||||||
void K_SpawnDriftBoostExplosion(player_t *player, int stage);
|
void K_SpawnDriftBoostExplosion(player_t *player, int stage);
|
||||||
|
void K_SpawnDriftElectricSparks(player_t *player);
|
||||||
void K_KartUpdatePosition(player_t *player);
|
void K_KartUpdatePosition(player_t *player);
|
||||||
mobj_t *K_CreatePaperItem(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 flip, UINT8 type, UINT8 amount);
|
mobj_t *K_CreatePaperItem(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 flip, UINT8 type, UINT8 amount);
|
||||||
void K_DropItems(player_t *player);
|
void K_DropItems(player_t *player);
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,7 @@ void K_DoIngameRespawn(player_t *player)
|
||||||
K_DoFault(player);
|
K_DoFault(player);
|
||||||
|
|
||||||
player->ringboost = 0;
|
player->ringboost = 0;
|
||||||
player->driftboost = 0;
|
player->driftboost = player->strongdriftboost = 0;
|
||||||
|
|
||||||
// If player was tumbling, set variables so that they don't tumble like crazy after they're done respawning
|
// If player was tumbling, set variables so that they don't tumble like crazy after they're done respawning
|
||||||
if (player->tumbleBounces > 0)
|
if (player->tumbleBounces > 0)
|
||||||
|
|
|
||||||
|
|
@ -244,6 +244,8 @@ static int player_get(lua_State *L)
|
||||||
lua_pushinteger(L, plr->driftcharge);
|
lua_pushinteger(L, plr->driftcharge);
|
||||||
else if (fastcmp(field,"driftboost"))
|
else if (fastcmp(field,"driftboost"))
|
||||||
lua_pushinteger(L, plr->driftboost);
|
lua_pushinteger(L, plr->driftboost);
|
||||||
|
else if (fastcmp(field,"strongdriftboost"))
|
||||||
|
lua_pushinteger(L, plr->strongdriftboost);
|
||||||
else if (fastcmp(field,"aizdriftstraft"))
|
else if (fastcmp(field,"aizdriftstraft"))
|
||||||
lua_pushinteger(L, plr->aizdriftstrat);
|
lua_pushinteger(L, plr->aizdriftstrat);
|
||||||
else if (fastcmp(field,"aizdrifttilt"))
|
else if (fastcmp(field,"aizdrifttilt"))
|
||||||
|
|
|
||||||
|
|
@ -1865,7 +1865,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
}
|
}
|
||||||
|
|
||||||
player->sneakertimer = player->numsneakers = 0;
|
player->sneakertimer = player->numsneakers = 0;
|
||||||
player->driftboost = 0;
|
player->driftboost = player->strongdriftboost = 0;
|
||||||
player->ringboost = 0;
|
player->ringboost = 0;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
|
|
|
||||||
15
src/p_mobj.c
15
src/p_mobj.c
|
|
@ -5602,6 +5602,7 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
||||||
mobj->renderflags ^= RF_DONTDRAW;
|
mobj->renderflags ^= RF_DONTDRAW;
|
||||||
break;
|
break;
|
||||||
case MT_SPINDASHWIND:
|
case MT_SPINDASHWIND:
|
||||||
|
case MT_DRIFTELECTRICSPARK:
|
||||||
mobj->renderflags ^= RF_DONTDRAW;
|
mobj->renderflags ^= RF_DONTDRAW;
|
||||||
break;
|
break;
|
||||||
case MT_VWREF:
|
case MT_VWREF:
|
||||||
|
|
@ -6473,7 +6474,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
else if (mobj->fuse <= 32)
|
else if (mobj->fuse <= 32)
|
||||||
mobj->color = SKINCOLOR_SAPPHIRE;
|
mobj->color = SKINCOLOR_SAPPHIRE;
|
||||||
else if (mobj->fuse > 32)
|
else if (mobj->fuse <= 48)
|
||||||
|
mobj->color = SKINCOLOR_PURPLE;
|
||||||
|
else if (mobj->fuse > 48)
|
||||||
mobj->color = K_RainbowColor(
|
mobj->color = K_RainbowColor(
|
||||||
(SKINCOLOR_PURPLE - SKINCOLOR_PINK) // Smoothly transition into the other state
|
(SKINCOLOR_PURPLE - SKINCOLOR_PINK) // Smoothly transition into the other state
|
||||||
+ ((mobj->fuse - 32) * 2) // Make the color flashing slow down while it runs out
|
+ ((mobj->fuse - 32) * 2) // Make the color flashing slow down while it runs out
|
||||||
|
|
@ -6481,7 +6484,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
|
|
||||||
switch (mobj->extravalue1)
|
switch (mobj->extravalue1)
|
||||||
{
|
{
|
||||||
case 3:/* rainbow boost */
|
case 4:/* rainbow boost */
|
||||||
/* every 20 tics, bang! */
|
/* every 20 tics, bang! */
|
||||||
if (( 120 - mobj->fuse ) % 10 == 0)
|
if (( 120 - mobj->fuse ) % 10 == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -6490,6 +6493,12 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 3:/* purple boost */
|
||||||
|
if ((mobj->fuse == 32)/* to blue*/
|
||||||
|
|| (mobj->fuse == 16))/* to red*/
|
||||||
|
K_SpawnDriftBoostClip(mobj->target->player);
|
||||||
|
break;
|
||||||
|
|
||||||
case 2:/* blue boost */
|
case 2:/* blue boost */
|
||||||
if (mobj->fuse == 16)/* to red*/
|
if (mobj->fuse == 16)/* to red*/
|
||||||
K_SpawnDriftBoostClip(mobj->target->player);
|
K_SpawnDriftBoostClip(mobj->target->player);
|
||||||
|
|
@ -7675,6 +7684,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Uses cmd.turning over steering intentionally.
|
||||||
if (abs(player->cmd.turning) > 100)
|
if (abs(player->cmd.turning) > 100)
|
||||||
{
|
{
|
||||||
INT32 lastsign = 0;
|
INT32 lastsign = 0;
|
||||||
|
|
@ -7831,6 +7841,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Uses cmd.turning over steering intentionally.
|
||||||
if (abs(player->cmd.turning) > 100)
|
if (abs(player->cmd.turning) > 100)
|
||||||
{
|
{
|
||||||
INT32 lastsign = 0;
|
INT32 lastsign = 0;
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,7 @@ static void P_NetArchivePlayers(void)
|
||||||
WRITESINT8(save_p, players[i].drift);
|
WRITESINT8(save_p, players[i].drift);
|
||||||
WRITEFIXED(save_p, players[i].driftcharge);
|
WRITEFIXED(save_p, players[i].driftcharge);
|
||||||
WRITEUINT8(save_p, players[i].driftboost);
|
WRITEUINT8(save_p, players[i].driftboost);
|
||||||
|
WRITEUINT8(save_p, players[i].strongdriftboost);
|
||||||
|
|
||||||
WRITESINT8(save_p, players[i].aizdriftstrat);
|
WRITESINT8(save_p, players[i].aizdriftstrat);
|
||||||
WRITEINT32(save_p, players[i].aizdrifttilt);
|
WRITEINT32(save_p, players[i].aizdrifttilt);
|
||||||
|
|
@ -484,6 +485,7 @@ static void P_NetUnArchivePlayers(void)
|
||||||
players[i].drift = READSINT8(save_p);
|
players[i].drift = READSINT8(save_p);
|
||||||
players[i].driftcharge = READFIXED(save_p);
|
players[i].driftcharge = READFIXED(save_p);
|
||||||
players[i].driftboost = READUINT8(save_p);
|
players[i].driftboost = READUINT8(save_p);
|
||||||
|
players[i].strongdriftboost = READUINT8(save_p);
|
||||||
|
|
||||||
players[i].aizdriftstrat = READSINT8(save_p);
|
players[i].aizdriftstrat = READSINT8(save_p);
|
||||||
players[i].aizdrifttilt = READINT32(save_p);
|
players[i].aizdrifttilt = READINT32(save_p);
|
||||||
|
|
|
||||||
|
|
@ -1896,7 +1896,10 @@ static void K_HandleLapIncrement(player_t *player)
|
||||||
{
|
{
|
||||||
S_StartSound(player->mo, sfx_s23c);
|
S_StartSound(player->mo, sfx_s23c);
|
||||||
player->startboost = 125;
|
player->startboost = 125;
|
||||||
K_SpawnDriftBoostExplosion(player, 3);
|
|
||||||
|
K_SpawnDriftBoostExplosion(player, 4);
|
||||||
|
K_SpawnDriftElectricSparks(player);
|
||||||
|
|
||||||
rainbowstartavailable = false;
|
rainbowstartavailable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue