Switch red & blue sparks, add yellow sparks, add big spark sprites

This commit is contained in:
Sally Cochenour 2020-03-14 01:43:54 -04:00
parent b3a1bb6064
commit c6f3ac651e
5 changed files with 144 additions and 60 deletions

View file

@ -6347,6 +6347,8 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_DRIFTSPARK_B1", "S_DRIFTSPARK_B1",
"S_DRIFTSPARK_C1", "S_DRIFTSPARK_C1",
"S_DRIFTSPARK_C2", "S_DRIFTSPARK_C2",
"S_DRIFTSPARK_D1",
"S_DRIFTSPARK_D2",
// Brake drift sparks // Brake drift sparks
"S_BRAKEDRIFT", "S_BRAKEDRIFT",

View file

@ -2587,6 +2587,9 @@ state_t states[NUMSTATES] =
{SPR_DRIF, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DRIFTSPARK_C2}, // S_DRIFTSPARK_C1 {SPR_DRIF, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DRIFTSPARK_C2}, // S_DRIFTSPARK_C1
{SPR_DRIF, FF_FULLBRIGHT|FF_TRANS20, 1, {NULL}, 0, 0, S_DRIFTSPARK_A3}, // S_DRIFTSPARK_C2 (Loop back to A3) {SPR_DRIF, FF_FULLBRIGHT|FF_TRANS20, 1, {NULL}, 0, 0, S_DRIFTSPARK_A3}, // S_DRIFTSPARK_C2 (Loop back to A3)
{SPR_DRIF, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_DRIFTSPARK_D2}, // S_DRIFTSPARK_D1
{SPR_DRIF, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_DRIFTSPARK_A2}, // S_DRIFTSPARK_D2 (Loop back to A2)
{SPR_BDRF, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 5, 2, S_BRAKEDRIFT}, // S_BRAKEDRIFT {SPR_BDRF, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 5, 2, S_BRAKEDRIFT}, // S_BRAKEDRIFT
{SPR_DUST, 0, 3, {NULL}, 0, 0, S_DRIFTDUST2}, // S_DRIFTDUST1 {SPR_DUST, 0, 3, {NULL}, 0, 0, S_DRIFTDUST2}, // S_DRIFTDUST1

View file

@ -3236,6 +3236,8 @@ typedef enum state
S_DRIFTSPARK_B1, S_DRIFTSPARK_B1,
S_DRIFTSPARK_C1, S_DRIFTSPARK_C1,
S_DRIFTSPARK_C2, S_DRIFTSPARK_C2,
S_DRIFTSPARK_D1,
S_DRIFTSPARK_D2,
// Brake drift sparks // Brake drift sparks
S_BRAKEDRIFT, S_BRAKEDRIFT,

View file

@ -3151,13 +3151,17 @@ static void K_SpawnDriftSparks(player_t *player)
if (!P_IsObjectOnGround(player->mo)) if (!P_IsObjectOnGround(player->mo))
return; return;
if (!player->kartstuff[k_drift] || player->kartstuff[k_driftcharge] < K_GetKartDriftSparkValue(player)) if (!player->kartstuff[k_drift]
|| (player->kartstuff[k_driftcharge] < K_GetKartDriftSparkValue(player) && !(player->kartstuff[k_driftcharge] < 0)))
return; return;
travelangle = player->mo->angle-(ANGLE_45/5)*player->kartstuff[k_drift]; travelangle = player->mo->angle-(ANGLE_45/5)*player->kartstuff[k_drift];
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
SINT8 size = 1;
UINT8 trail = 0;
newx = player->mo->x + P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale)); newx = player->mo->x + P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale));
newy = player->mo->y + P_ReturnThrustY(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale)); newy = player->mo->y + P_ReturnThrustY(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale));
spark = P_SpawnMobj(newx, newy, player->mo->z, MT_DRIFTSPARK); spark = P_SpawnMobj(newx, newy, player->mo->z, MT_DRIFTSPARK);
@ -3171,20 +3175,62 @@ static void K_SpawnDriftSparks(player_t *player)
spark->momy = player->mo->momy/2; spark->momy = player->mo->momy/2;
//spark->momz = player->mo->momz/2; //spark->momz = player->mo->momz/2;
if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*4) if (player->kartstuff[k_driftcharge] < 0)
{ {
spark->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); // Stage 0: Yellow
spark->color = SKINCOLOR_GOLD;
size = 0;
}
else if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*4)
{
// Stage 3: Rainbow
size = 2;
if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*4)+(32*3))
{
// transition
spark->color = SKINCOLOR_SILVER;
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
trail = 1;
}
else
{
spark->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1)));
spark->colorized = true;
trail = 2;
}
} }
else if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*2) else if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*2)
{ {
if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*2)+(24*3)) // Stage 2: Blue
spark->color = SKINCOLOR_RASPBERRY; // transition size = 2;
if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*2)+(32*3))
{
// transition
spark->color = SKINCOLOR_PURPLE;
P_SetScale(spark, (spark->destscale = spark->scale*3/2));
}
else else
spark->color = SKINCOLOR_KETCHUP; {
spark->color = SKINCOLOR_SAPPHIRE;
}
} }
else else
{ {
spark->color = SKINCOLOR_SAPPHIRE; // Stage 1: Red
size = 1;
if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player))+(32*3))
{
// transition
spark->color = SKINCOLOR_RASPBERRY;
P_SetScale(spark, (spark->destscale = spark->scale*2));
}
else
{
spark->color = SKINCOLOR_KETCHUP;
}
} }
if ((player->kartstuff[k_drift] > 0 && player->cmd.driftturn > 0) // Inward drifts if ((player->kartstuff[k_drift] > 0 && player->cmd.driftturn > 0) // Inward drifts
@ -3192,22 +3238,40 @@ static void K_SpawnDriftSparks(player_t *player)
{ {
if ((player->kartstuff[k_drift] < 0 && (i & 1)) if ((player->kartstuff[k_drift] < 0 && (i & 1))
|| (player->kartstuff[k_drift] > 0 && !(i & 1))) || (player->kartstuff[k_drift] > 0 && !(i & 1)))
P_SetMobjState(spark, S_DRIFTSPARK_A1); {
size++;
}
else if ((player->kartstuff[k_drift] < 0 && !(i & 1)) else if ((player->kartstuff[k_drift] < 0 && !(i & 1))
|| (player->kartstuff[k_drift] > 0 && (i & 1))) || (player->kartstuff[k_drift] > 0 && (i & 1)))
P_SetMobjState(spark, S_DRIFTSPARK_C1); {
size--;
}
} }
else if ((player->kartstuff[k_drift] > 0 && player->cmd.driftturn < 0) // Outward drifts else if ((player->kartstuff[k_drift] > 0 && player->cmd.driftturn < 0) // Outward drifts
|| (player->kartstuff[k_drift] < 0 && player->cmd.driftturn > 0)) || (player->kartstuff[k_drift] < 0 && player->cmd.driftturn > 0))
{ {
if ((player->kartstuff[k_drift] < 0 && (i & 1)) if ((player->kartstuff[k_drift] < 0 && (i & 1))
|| (player->kartstuff[k_drift] > 0 && !(i & 1))) || (player->kartstuff[k_drift] > 0 && !(i & 1)))
P_SetMobjState(spark, S_DRIFTSPARK_C1); {
size--;
}
else if ((player->kartstuff[k_drift] < 0 && !(i & 1)) else if ((player->kartstuff[k_drift] < 0 && !(i & 1))
|| (player->kartstuff[k_drift] > 0 && (i & 1))) || (player->kartstuff[k_drift] > 0 && (i & 1)))
P_SetMobjState(spark, S_DRIFTSPARK_A1); {
size++;
}
} }
if (size == 2)
P_SetMobjState(spark, S_DRIFTSPARK_A1);
else if (size < 1)
P_SetMobjState(spark, S_DRIFTSPARK_C1);
else if (size > 2)
P_SetMobjState(spark, S_DRIFTSPARK_D1);
if (trail > 0)
spark->tics += trail;
K_MatchGenericExtraFlags(spark, player->mo); K_MatchGenericExtraFlags(spark, player->mo);
} }
} }
@ -5721,42 +5785,40 @@ static void K_KartDrift(player_t *player, boolean onground)
// 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] != -5 && player->kartstuff[k_drift] != 5) if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5)
// || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1)) // || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1))
&& player->kartstuff[k_driftcharge] < dsone
&& onground) && onground)
{ {
player->kartstuff[k_driftcharge] = 0; if (player->kartstuff[k_driftcharge] < 0 || player->kartstuff[k_driftcharge] >= dsone)
} {
else if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5) S_StartSound(player->mo, sfx_s23c);
// || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1)) //K_SpawnDashDustRelease(player);
&& (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo)
&& onground) if (player->kartstuff[k_driftcharge] < 0)
{ {
if (player->kartstuff[k_driftboost] < 20) // Stage 0: Yellow sparks
player->kartstuff[k_driftboost] = 20; if (player->kartstuff[k_driftboost] < 15)
S_StartSound(player->mo, sfx_s23c); player->kartstuff[k_driftboost] = 15;
//K_SpawnDashDustRelease(player); }
player->kartstuff[k_driftcharge] = 0; else if (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo)
} {
else if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5) // Stage 1: Red sparks
// || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1)) if (player->kartstuff[k_driftboost] < 20)
&& player->kartstuff[k_driftcharge] < dsthree player->kartstuff[k_driftboost] = 20;
&& onground) }
{ else if (player->kartstuff[k_driftcharge] < dsthree)
if (player->kartstuff[k_driftboost] < 50) {
player->kartstuff[k_driftboost] = 50; // Stage 2: Blue sparks
S_StartSound(player->mo, sfx_s23c); if (player->kartstuff[k_driftboost] < 50)
//K_SpawnDashDustRelease(player); player->kartstuff[k_driftboost] = 50;
player->kartstuff[k_driftcharge] = 0; }
} else if (player->kartstuff[k_driftcharge] >= dsthree)
else if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5) {
// || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1)) // Stage 3: Rainbow sparks
&& player->kartstuff[k_driftcharge] >= dsthree if (player->kartstuff[k_driftboost] < 125)
&& onground) player->kartstuff[k_driftboost] = 125;
{ }
if (player->kartstuff[k_driftboost] < 125) }
player->kartstuff[k_driftboost] = 125;
S_StartSound(player->mo, sfx_s23c); // Remove charge
//K_SpawnDashDustRelease(player);
player->kartstuff[k_driftcharge] = 0; player->kartstuff[k_driftcharge] = 0;
} }
@ -5792,10 +5854,16 @@ static void K_KartDrift(player_t *player, boolean onground)
player->kartstuff[k_driftend] = 0; player->kartstuff[k_driftend] = 0;
} }
if (player->kartstuff[k_spinouttimer] > 0)
// Incease/decrease the drift value to continue drifting in that direction
if (player->kartstuff[k_spinouttimer] == 0 && player->kartstuff[k_jmp] == 1 && onground && player->kartstuff[k_drift] != 0)
{ {
// Stop drifting
player->kartstuff[k_drift] = player->kartstuff[k_driftcharge] = 0;
player->kartstuff[k_aizdriftstrat] = player->kartstuff[k_brakedrift] = 0;
player->kartstuff[k_getsparks] = 0;
}
else if (player->kartstuff[k_jmp] == 1 && onground && player->kartstuff[k_drift] != 0)
{
// Incease/decrease the drift value to continue drifting in that direction
fixed_t driftadditive = 24; fixed_t driftadditive = 24;
if (player->kartstuff[k_drift] >= 1) // Drifting to the left if (player->kartstuff[k_drift] >= 1) // Drifting to the left
@ -5828,11 +5896,26 @@ static void K_KartDrift(player_t *player, boolean onground)
&& !player->kartstuff[k_hyudorotimer] && !player->kartstuff[k_hyudorotimer]
&& !EITHERSNEAKER(player))) && !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;
if (player->kartstuff[k_driftcharge] <= -1)
player->kartstuff[k_driftcharge] = dsone;
}
else
{
player->kartstuff[k_getsparks] = 0;
driftadditive = 0;
if (player->kartstuff[k_driftcharge] >= dsone)
player->kartstuff[k_driftcharge] = -1;
}
// This spawns the drift sparks // This spawns the drift sparks
if (player->kartstuff[k_driftcharge] + driftadditive >= dsone) if ((player->kartstuff[k_driftcharge] + driftadditive >= dsone)
|| (player->kartstuff[k_driftcharge] < 0))
K_SpawnDriftSparks(player); K_SpawnDriftSparks(player);
// Sound whenever you get a different tier of sparks // Sound whenever you get a different tier of sparks
@ -5849,14 +5932,6 @@ static void K_KartDrift(player_t *player, boolean onground)
player->kartstuff[k_driftend] = 0; player->kartstuff[k_driftend] = 0;
} }
// Stop drifting
if (player->kartstuff[k_spinouttimer] > 0 || player->speed < minspeed)
{
player->kartstuff[k_drift] = player->kartstuff[k_driftcharge] = 0;
player->kartstuff[k_aizdriftstrat] = player->kartstuff[k_brakedrift] = 0;
player->kartstuff[k_getsparks] = 0;
}
if ((!EITHERSNEAKER(player)) if ((!EITHERSNEAKER(player))
|| (!player->cmd.driftturn) || (!player->cmd.driftturn)
|| (!player->kartstuff[k_aizdriftstrat]) || (!player->kartstuff[k_aizdriftstrat])

View file

@ -8378,9 +8378,11 @@ void P_MobjThinker(mobj_t *mobj)
if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)*4) if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)*4)
mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1)));
else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)*2) else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)*2)
mobj->color = SKINCOLOR_KETCHUP;
else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player))
mobj->color = SKINCOLOR_SAPPHIRE; mobj->color = SKINCOLOR_SAPPHIRE;
else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player))
mobj->color = SKINCOLOR_KETCHUP;
else if (mobj->target->player->kartstuff[k_driftcharge] < 0)
mobj->color = SKINCOLOR_GOLD;
else else
mobj->color = SKINCOLOR_SILVER; mobj->color = SKINCOLOR_SILVER;