Purple sparks

This commit is contained in:
Sally Coolatta 2021-04-16 23:00:58 -04:00
parent 2cbd0d0dcc
commit 0e2b36e484
4 changed files with 110 additions and 28 deletions

View file

@ -3545,7 +3545,11 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
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;
if (charge < 0)
@ -3553,10 +3557,10 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
// Stage 0: Yellow
color = SKINCOLOR_GOLD;
}
else if (charge >= ds*4)
else if (charge >= dsfour)
{
// Stage 3: Rainbow
if (charge <= (ds*4)+(32*3))
// Stage 4: Rainbow
if (charge <= dsfour+(32*3))
{
// transition
color = SKINCOLOR_SILVER;
@ -3566,10 +3570,23 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
color = K_RainbowColor(leveltime);
}
}
else if (charge >= ds*2)
else if (charge >= dsthree)
{
// Stage 3: Purple
if (charge <= dsthree+(32*3))
{
// transition
color = SKINCOLOR_ULTRAMARINE;
}
else
{
color = SKINCOLOR_THISTLE;
}
}
else if (charge >= dstwo)
{
// Stage 2: Blue
if (charge <= (ds*2)+(32*3))
if (charge <= dstwo+(32*3))
{
// transition
color = SKINCOLOR_PURPLE;
@ -3579,10 +3596,10 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
color = SKINCOLOR_SAPPHIRE;
}
}
else if (charge >= ds)
else if (charge >= dsone)
{
// Stage 1: Red
if (charge <= (ds)+(32*3))
if (charge <= dsone+(32*3))
{
// transition
color = SKINCOLOR_TANGERINE;
@ -3598,7 +3615,11 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
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 newy;
mobj_t *spark;
@ -3613,7 +3634,7 @@ static void K_SpawnDriftSparks(player_t *player)
return;
if (!player->kartstuff[k_drift]
|| (player->kartstuff[k_driftcharge] < ds && !(player->kartstuff[k_driftcharge] < 0)))
|| (player->kartstuff[k_driftcharge] < dsone && !(player->kartstuff[k_driftcharge] < 0)))
return;
travelangle = player->mo->angle-(ANGLE_45/5)*player->kartstuff[k_drift];
@ -3643,13 +3664,13 @@ static void K_SpawnDriftSparks(player_t *player)
// Stage 0: Yellow
size = 0;
}
else if (player->kartstuff[k_driftcharge] >= ds*4)
else if (player->kartstuff[k_driftcharge] >= dsfour)
{
// Stage 3: Rainbow
// Stage 4: Rainbow
size = 2;
trail = 2;
if (player->kartstuff[k_driftcharge] <= (ds*4)+(32*3))
if (player->kartstuff[k_driftcharge] <= dsfour+(32*3))
{
// transition
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
@ -3660,13 +3681,25 @@ static void K_SpawnDriftSparks(player_t *player)
spark->colorized = true;
}
}
else if (player->kartstuff[k_driftcharge] >= ds*2)
else if (player->kartstuff[k_driftcharge] >= dsthree)
{
// Stage 3: Purple
size = 2;
trail = 1;
if (player->kartstuff[k_driftcharge] <= dsthree+(32*3))
{
// transition
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
}
}
else if (player->kartstuff[k_driftcharge] >= dstwo)
{
// Stage 2: Blue
size = 2;
trail = 1;
if (player->kartstuff[k_driftcharge] <= (ds*2)+(32*3))
if (player->kartstuff[k_driftcharge] <= dstwo+(32*3))
{
// transition
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
@ -3677,7 +3710,7 @@ static void K_SpawnDriftSparks(player_t *player)
// Stage 1: Red
size = 1;
if (player->kartstuff[k_driftcharge] <= (ds)+(32*3))
if (player->kartstuff[k_driftcharge] <= dsone+(32*3))
{
// transition
P_SetScale(spark, (spark->destscale = spark->scale*2));
@ -7214,10 +7247,31 @@ INT32 K_GetKartDriftSparkValue(player_t *player)
return (26*4 + player->kartspeed*2 + (9 - player->kartweight))*8;
}
INT32 K_GetKartDriftSparkValueForStage(player_t *player, UINT8 stage)
{
fixed_t mul = FRACUNIT;
switch (stage)
{
case 2:
mul = 2*FRACUNIT; // x2
break;
case 3:
mul = (13*FRACUNIT)/4; // x3.25
break;
case 4:
mul = (19*FRACUNIT)/4; // x4.75
break;
}
return (FixedMul(K_GetKartDriftSparkValue(player) * FRACUNIT, mul) / FRACUNIT);
}
/*
Stage 1: red 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
*/
void K_SpawnDriftBoostExplosion(player_t *player, int stage)
@ -7243,6 +7297,13 @@ void K_SpawnDriftBoostExplosion(player_t *player, int stage)
break;
case 3:
overlay->color = SKINCOLOR_THISTLE;
overlay->fuse = 48;
S_StartSound(player->mo, sfx_kc5b);
break;
case 4:
overlay->color = SKINCOLOR_SILVER;
overlay->fuse = 120;
@ -7263,9 +7324,10 @@ static void K_KartDrift(player_t *player, boolean onground)
{
const fixed_t minspeed = (10 * player->mo->scale);
const INT32 dsone = K_GetKartDriftSparkValue(player);
const INT32 dstwo = dsone*2;
const INT32 dsthree = dstwo*2;
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);
const UINT16 buttons = K_GetKartButtons(player);
@ -7314,16 +7376,27 @@ static void K_KartDrift(player_t *player, boolean onground)
K_SpawnDriftBoostExplosion(player, 2);
}
else if (player->kartstuff[k_driftcharge] >= dsthree)
else if (player->kartstuff[k_driftcharge] < dsfour)
{
// Stage 3: Rainbow sparks
// Stage 3: Purple sparks
if (!onground)
P_Thrust(player->mo, pushdir, ( 5 * player->speed ) / 12);
if (player->kartstuff[k_driftboost] < 90)
player->kartstuff[k_driftboost] = 90;
K_SpawnDriftBoostExplosion(player, 3);
}
else if (player->kartstuff[k_driftcharge] >= dsfour)
{
// Stage 4: Rainbow sparks
if (!onground)
P_Thrust(player->mo, pushdir, player->speed / 2);
if (player->kartstuff[k_driftboost] < 125)
player->kartstuff[k_driftboost] = 125;
if (player->kartstuff[k_driftboost] < 160)
player->kartstuff[k_driftboost] = 160;
K_SpawnDriftBoostExplosion(player, 3);
K_SpawnDriftBoostExplosion(player, 4);
}
}

View file

@ -85,6 +85,7 @@ boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y);
void K_UpdateSteeringValue(player_t *player, INT16 destSteering);
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);
INT32 K_GetKartDriftSparkValue(player_t *player);
INT32 K_GetKartDriftSparkValueForStage(player_t *player, UINT8 stage);
void K_SpawnDriftBoostExplosion(player_t *player, int stage);
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);

View file

@ -6747,7 +6747,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
}
else if (mobj->fuse <= 32)
mobj->color = SKINCOLOR_SAPPHIRE;
else if (mobj->fuse > 32)
else if (mobj->fuse <= 48)
mobj->color = SKINCOLOR_THISTLE;
else if (mobj->fuse > 48)
mobj->color = K_RainbowColor(
(SKINCOLOR_PURPLE - SKINCOLOR_PINK) // Smoothly transition into the other state
+ ((mobj->fuse - 32) * 2) // Make the color flashing slow down while it runs out
@ -6755,7 +6757,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
switch (mobj->extravalue1)
{
case 3:/* rainbow boost */
case 4:/* rainbow boost */
/* every 20 tics, bang! */
if (( 120 - mobj->fuse ) % 10 == 0)
{
@ -6764,6 +6766,12 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
}
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 */
if (mobj->fuse == 16)/* to red*/
K_SpawnDriftBoostClip(mobj->target->player);

View file

@ -1896,7 +1896,7 @@ static void K_HandleLapIncrement(player_t *player)
{
S_StartSound(player->mo, sfx_s23c);
player->kartstuff[k_startboost] = 125;
K_SpawnDriftBoostExplosion(player, 3);
K_SpawnDriftBoostExplosion(player, 4);
rainbowstartavailable = false;
}