From 4f7aafe654367c40cf36f57a627e93f2beb11a77 Mon Sep 17 00:00:00 2001 From: SteelT Date: Sun, 28 Mar 2021 22:05:18 -0400 Subject: [PATCH] Fancy invincibility speed lines --- src/dehacked.c | 13 +++++++++++++ src/info.c | 14 ++++++++++++++ src/info.h | 18 ++++++++++++++++-- src/k_kart.c | 32 ++++++++++++++++++++++++++------ src/k_kart.h | 1 + src/p_user.c | 6 +++++- 6 files changed, 75 insertions(+), 9 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index e0b4d10e0..a7f1b00c3 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -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", diff --git a/src/info.c b/src/info.c index 01d949383..937658ac9 100644 --- a/src/info.c +++ b/src/info.c @@ -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 diff --git a/src/info.h b/src/info.h index 73c4da345..f91925f84 100644 --- a/src/info.h +++ b/src/info.h @@ -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, diff --git a/src/k_kart.c b/src/k_kart.c index 5070de4ff..623955413 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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) diff --git a/src/k_kart.h b/src/k_kart.h index 18b354efc..95896f348 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -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); diff --git a/src/p_user.c b/src/p_user.c index 10cb61335..eba9a1fcd 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -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);