Fancy invincibility speed lines

This commit is contained in:
SteelT 2021-03-28 22:05:18 -04:00
parent 3b617337ee
commit 4f7aafe654
6 changed files with 75 additions and 9 deletions

View file

@ -8464,6 +8464,19 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_INVULNFLASH3",
"S_INVULNFLASH4",
"S_KARTINVLINES1",
"S_KARTINVLINES2",
"S_KARTINVLINES3",
"S_KARTINVLINES4",
"S_KARTINVLINES5",
"S_KARTINVLINES6",
"S_KARTINVLINES7",
"S_KARTINVLINES8",
"S_KARTINVLINES9",
"S_KARTINVLINES10",
"S_KARTINVLINES11",
"S_KARTINVLINES12",
// Wipeout dust trail
"S_WIPEOUTTRAIL1",
"S_WIPEOUTTRAIL2",

View file

@ -535,6 +535,7 @@ char sprnames[NUMSPRITES + 1][5] =
"KINV", // Fullbright invincibility sparkle trail
"KINB", // Invincibility sparkle trail
"KINF", // Invincibility flash
"INVI", // Invincibility speedlines
"WIPD", // Wipeout dust trail
"DRIF", // Drift Sparks
"BDRF", // Brake drift sparks
@ -4190,6 +4191,19 @@ state_t states[NUMSTATES] =
{SPR_KINF, FF_FULLBRIGHT|FF_TRANS90|1, 1, {NULL}, 0, 0, S_INVULNFLASH4}, // S_INVULNFLASH3
{SPR_NULL, FF_FULLBRIGHT|FF_TRANS90, 1, {NULL}, 0, 0, S_INVULNFLASH1}, // S_INVULNFLASH4
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE, 1, {NULL}, 0, 0, S_KARTINVLINES2}, // S_KARTINVLINES1
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE|1, 1, {NULL}, 0, 0, S_KARTINVLINES3}, // S_KARTINVLINES2
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE|2, 1, {NULL}, 0, 0, S_KARTINVLINES4}, // S_KARTINVLINES3
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE|3, 1, {NULL}, 0, 0, S_KARTINVLINES5}, // S_KARTINVLINES4
{SPR_INVI, FF_FULLBRIGHT|FF_ANIMATE|FF_PAPERSPRITE|4, 4, {NULL}, 2, 1, S_KARTINVLINES6}, // S_KARTINVLINES5
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE|5, 1, {NULL}, 0, 0, S_KARTINVLINES7}, // S_KARTINVLINES6
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE|6, 3, {NULL}, 0, 0, S_KARTINVLINES8}, // S_KARTINVLINES7
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE|7, 1, {NULL}, 0, 0, S_KARTINVLINES9}, // S_KARTINVLINES8
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE|8, 1, {NULL}, 0, 0, S_KARTINVLINES10}, // S_KARTINVLINES9
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE|9, 1, {NULL}, 0, 0, S_KARTINVLINES11}, // S_KARTINVLINES10
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE|10, 1, {NULL}, 0, 0, S_KARTINVLINES12}, // S_KARTINVLINES11
{SPR_INVI, FF_FULLBRIGHT|FF_PAPERSPRITE|11, 1, {NULL}, 0, 0, S_NULL}, // S_KARTINVLINES12
{SPR_WIPD, 0, 3, {NULL}, 0, 0, S_WIPEOUTTRAIL2}, // S_WIPEOUTTRAIL1
{SPR_WIPD, 1, 3, {NULL}, 0, 0, S_WIPEOUTTRAIL3}, // S_WIPEOUTTRAIL2
{SPR_WIPD, 2, 3, {NULL}, 0, 0, S_WIPEOUTTRAIL4}, // S_WIPEOUTTRAIL3

View file

@ -804,9 +804,10 @@ typedef enum sprite
SPR_BOST, // Sneaker booster flame
SPR_BOSM, // Sneaker booster smoke
SPR_KFRE, // Sneaker fire trail
SPR_KINV, // Fullbright invincibility sparkle trail
SPR_KINB, // Fullbright invincibility sparkle trail
SPR_KINV, // Lighter invincibility sparkle trail
SPR_KINB, // Darker invincibility sparkle trail
SPR_KINF, // Invincibility flash
SPR_INVI, // Invincibility speedlines
SPR_WIPD, // Wipeout dust trail
SPR_DRIF, // Drift Sparks
SPR_BDRF, // Brake drift sparks
@ -4320,6 +4321,19 @@ typedef enum state
S_INVULNFLASH3,
S_INVULNFLASH4,
S_KARTINVLINES1,
S_KARTINVLINES2,
S_KARTINVLINES3,
S_KARTINVLINES4,
S_KARTINVLINES5,
S_KARTINVLINES6,
S_KARTINVLINES7,
S_KARTINVLINES8,
S_KARTINVLINES9,
S_KARTINVLINES10,
S_KARTINVLINES11,
S_KARTINVLINES12,
// Wipeout dust trail
S_WIPEOUTTRAIL1,
S_WIPEOUTTRAIL2,

View file

@ -3766,24 +3766,23 @@ void K_SpawnSparkleTrail(mobj_t *mo)
{
const INT32 rad = (mo->radius*3)/FRACUNIT;
mobj_t *sparkle;
//angle_t newangle;
INT32 i;
//UINT8 frame;
UINT8 invanimnum;
INT32 invtime;
UINT8 index = 1;
fixed_t newx, newy, newz;
I_Assert(mo != NULL);
I_Assert(!P_MobjWasRemoved(mo));
invanimnum = mo->player->kartstuff[k_invincibilitytimer]/TICRATE+1;
if (leveltime & 2)
index = 2;
//CONS_Printf("%d\n", index);
//CONS_Printf("%d\n", invanimnum);
invtime = mo->player->kartstuff[k_invincibilitytimer]/TICRATE+1;
for (i = 0; i < 8; i++)
{
//newangle = (mo->angle + ANGLE_157h) + FixedAngle(((360 / 8) * i) << FRACBITS) + ANGLE_90;
@ -3808,13 +3807,34 @@ void K_SpawnSparkleTrail(mobj_t *mo)
P_SetScale(sparkle, mo->scale);
}
invanimnum = (invtime > 11) ? 11 : invtime;
P_SetMobjState(sparkle, K_SparkleTrailStartStates[invanimnum][index]);
sparkle->colorized = true;
sparkle->color = mo->color;
}
//CONS_Printf("%d\n", (mo->player->kartstuff[k_invincibilitytimer]/TICRATE));
void K_SpawnInvincibilitySpeedLines(mobj_t *mo)
{
INT32 i = 0;
INT32 nl = 2;
for (i = 0; i < nl ; i++)
{
mobj_t *fast = P_SpawnMobj(mo->x + (P_RandomRange(-24,64) * mo->scale),
mo->y + (P_RandomRange(-16,16) * mo->scale),
mo->z + (mo->height/2) + (P_RandomRange(-16,16) * mo->scale),
MT_FASTLINE);
//invanimnum = (mo->player->kartstuff[k_invincibilitytimer]/TICRATE > 11) ? 11 : mo->player->kartstuff[k_invincibilitytimer]/TICRATE;
fast->momx = 3*mo->momx/4;
fast->momy = 3*mo->momy/4;
fast->momz = 3*mo->momz/4;
P_SetTarget(&fast->target, mo);
fast->angle = K_MomentumAngle(mo);
fast->color = mo->color;
fast->colorized = true;
K_MatchGenericExtraFlags(fast, mo);
P_SetMobjState(fast, S_KARTINVLINES1);
}
}
void K_SpawnWipeoutTrail(mobj_t *mo, boolean translucent)

View file

@ -59,6 +59,7 @@ void K_RunFinishLineBeam(void);
UINT16 K_DriftSparkColor(player_t *player, INT32 charge);
void K_SpawnBoostTrail(player_t *player);
void K_SpawnSparkleTrail(mobj_t *mo);
void K_SpawnInvincibilitySpeedLines(mobj_t *mo);
void K_SpawnWipeoutTrail(mobj_t *mo, boolean translucent);
void K_SpawnDraftDust(mobj_t *mo);
void K_DriftDustHandling(mobj_t *spawner);

View file

@ -2374,8 +2374,12 @@ void P_MovePlayer(player_t *player)
&& onground && (leveltime & 1))
K_SpawnBoostTrail(player);
if (player->kartstuff[k_invincibilitytimer] > 0)
if (player->kartstuff[k_invincibilitytimer] > 0)
{
K_SpawnSparkleTrail(player->mo);
if (player->kartstuff[k_invincibilitytimer] > 10*TICRATE && player->speed > 10*player->mo->scale && (leveltime & 5))
K_SpawnInvincibilitySpeedLines(player->mo);
}
if (player->kartstuff[k_wipeoutslow] > 1 && (leveltime & 1))
K_SpawnWipeoutTrail(player->mo, false);