New Drift Effect
Much less of an eyesore then final RR while still looking cool!
This commit is contained in:
parent
8a7c456a82
commit
be1308b0cf
5 changed files with 73 additions and 4 deletions
|
|
@ -3571,6 +3571,7 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
|
||||
// Sneaker boost effect
|
||||
"S_BOOSTFLAME",
|
||||
"S_DRIFTBOOSTFLAME",
|
||||
"S_BOOSTSMOKESPAWNER",
|
||||
"S_BOOSTSMOKE1",
|
||||
"S_BOOSTSMOKE2",
|
||||
|
|
|
|||
|
|
@ -527,6 +527,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"FAST", // Speed boost trail
|
||||
"DSHR", // Speed boost dust release
|
||||
"BOST", // Sneaker booster flame
|
||||
"DRPO", // Drift booster flame
|
||||
"BOSM", // Sneaker booster smoke
|
||||
"KFRE", // Sneaker fire trail
|
||||
"KINV", // Lighter invincibility sparkle trail
|
||||
|
|
@ -4125,6 +4126,7 @@ state_t states[NUMSTATES] =
|
|||
{SPR_DSHR, FF_PAPERSPRITE|6, 1, {NULL}, 0, 0, S_NULL}, // S_FASTDUST7
|
||||
|
||||
{SPR_BOST, FF_FULLBRIGHT|FF_ANIMATE, TICRATE, {NULL}, 6, 1, S_BOOSTSMOKESPAWNER}, // S_BOOSTFLAME
|
||||
{SPR_DRPO, FF_FULLBRIGHT|FF_ANIMATE|FF_ADD, TICRATE, {NULL}, 5, 2, S_NULL}, // S_DRIFTBOOSTFLAME
|
||||
{SPR_NULL, 0, TICRATE/2, {NULL}, 0, 0, S_NULL}, // S_BOOSTSMOKESPAWNER
|
||||
|
||||
{SPR_BOSM, FF_TRANS50, 3, {NULL}, 0, 0, S_BOOSTSMOKE2}, // S_BOOSTSMOKE1
|
||||
|
|
|
|||
|
|
@ -1080,6 +1080,7 @@ typedef enum sprite
|
|||
SPR_FAST, // Speed boost trail
|
||||
SPR_DSHR, // Speed boost dust release
|
||||
SPR_BOST, // Sneaker booster flame
|
||||
SPR_DRPO, // Drift booster flame
|
||||
SPR_BOSM, // Sneaker booster smoke
|
||||
SPR_KFRE, // Sneaker fire trail
|
||||
SPR_KINV, // Lighter invincibility sparkle trail
|
||||
|
|
@ -4534,6 +4535,7 @@ typedef enum state
|
|||
|
||||
// Sneaker boost effect
|
||||
S_BOOSTFLAME,
|
||||
S_DRIFTBOOSTFLAME,
|
||||
S_BOOSTSMOKESPAWNER,
|
||||
S_BOOSTSMOKE1,
|
||||
S_BOOSTSMOKE2,
|
||||
|
|
|
|||
32
src/k_kart.c
32
src/k_kart.c
|
|
@ -7978,6 +7978,31 @@ INT32 K_GetKartDriftSparkValueForStage(player_t *player, UINT8 stage)
|
|||
return (FixedMul(K_GetKartDriftSparkValue(player) * FRACUNIT, mul) / FRACUNIT);
|
||||
}
|
||||
|
||||
static void K_SpawnDriftEFX(player_t *player,SINT8 level)
|
||||
{
|
||||
mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BOOSTFLAME);
|
||||
P_SetTarget(&overlay->target, player->mo);
|
||||
P_SetScale(overlay, (overlay->destscale = player->mo->scale));
|
||||
K_FlipFromObject(overlay, player->mo);
|
||||
overlay->extravalue1 = 1;
|
||||
|
||||
if (level == 1)
|
||||
{
|
||||
overlay->color = SKINCOLOR_SAPPHIRE;
|
||||
overlay->tics = overlay->tics/2; // Less time for blue drift
|
||||
}
|
||||
else if (level == 2)
|
||||
{
|
||||
overlay->color = SKINCOLOR_KETCHUP;
|
||||
}
|
||||
else if (level == 3)
|
||||
{
|
||||
overlay->extravalue2 = 1;
|
||||
overlay->tics = 5*overlay->tics/2; // More time for rainbow drift
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void K_KartDrift(player_t *player, boolean onground)
|
||||
{
|
||||
fixed_t minspeed = (10 * player->mo->scale);
|
||||
|
|
@ -8009,6 +8034,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
if (player->driftboost < 20)
|
||||
player->driftboost = 20;
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
K_SpawnDriftEFX(player, 1);
|
||||
player->driftcharge = 0;
|
||||
}
|
||||
else if ((player->drift != -5 && player->drift != 5)
|
||||
|
|
@ -8018,6 +8044,8 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
if (player->driftboost < 50)
|
||||
player->driftboost = 50;
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
S_StartSound(player->mo, sfx_kc5b);
|
||||
K_SpawnDriftEFX(player, 2);
|
||||
player->driftcharge = 0;
|
||||
}
|
||||
else if ((player->drift != -5 && player->drift != 5)
|
||||
|
|
@ -8026,7 +8054,9 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
{
|
||||
if (player->driftboost < 125)
|
||||
player->driftboost = 125;
|
||||
S_StartSound(player->mo, sfx_s23c);
|
||||
S_StartSound(player->mo, sfx_kc5b);
|
||||
S_StartSound(player->mo, sfx_kc3c);
|
||||
K_SpawnDriftEFX(player, 3);
|
||||
player->driftcharge = 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
40
src/p_mobj.c
40
src/p_mobj.c
|
|
@ -7151,12 +7151,46 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
|
||||
if (p)
|
||||
{
|
||||
if (p->sneakertimer > mobj->movecount)
|
||||
P_SetMobjState(mobj, S_BOOSTFLAME);
|
||||
mobj->movecount = p->sneakertimer;
|
||||
if (mobj->extravalue1)
|
||||
{
|
||||
if (p->driftboost > mobj->movecount)
|
||||
P_SetMobjState(mobj, S_DRIFTBOOSTFLAME);
|
||||
mobj->movecount = p->driftboost;
|
||||
|
||||
if (p->driftboost == 0)
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (p->sneakertimer > mobj->movecount)
|
||||
P_SetMobjState(mobj, S_BOOSTFLAME);
|
||||
mobj->movecount = p->sneakertimer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mobj->extravalue1)
|
||||
{
|
||||
|
||||
if (leveltime % 2 == 1)
|
||||
{
|
||||
mobj->frame |= FF_TRANS60;
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj->frame &= ~FF_TRANS60;
|
||||
}
|
||||
|
||||
if (mobj->extravalue2)
|
||||
{
|
||||
mobj->color = K_RainbowColor(leveltime);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (mobj->state == &states[S_BOOSTSMOKESPAWNER])
|
||||
{
|
||||
mobj_t *smoke = P_SpawnMobj(mobj->x, mobj->y, mobj->z+(8<<FRACBITS), MT_BOOSTSMOKE);
|
||||
|
|
|
|||
Loading…
Reference in a new issue