diff --git a/src/dehacked.c b/src/dehacked.c index fb3608849..e0b4d10e0 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -8433,17 +8433,30 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_KARTAIZDRIFTSTRAT", // Invincibility Sparks - "S_KARTINVULN_SMALL1", - "S_KARTINVULN_SMALL2", - "S_KARTINVULN_SMALL3", - "S_KARTINVULN_SMALL4", - "S_KARTINVULN_SMALL5", - - "S_KARTINVULN_LARGE1", - "S_KARTINVULN_LARGE2", - "S_KARTINVULN_LARGE3", - "S_KARTINVULN_LARGE4", - "S_KARTINVULN_LARGE5", + "S_KARTINVULN1", + "S_KARTINVULN2", + "S_KARTINVULN3", + "S_KARTINVULN4", + "S_KARTINVULN5", + "S_KARTINVULN6", + "S_KARTINVULN7", + "S_KARTINVULN8", + "S_KARTINVULN9", + "S_KARTINVULN10", + "S_KARTINVULN11", + "S_KARTINVULN12", + "S_KARTINVULNB1", + "S_KARTINVULNB2", + "S_KARTINVULNB3", + "S_KARTINVULNB4", + "S_KARTINVULNB5", + "S_KARTINVULNB6", + "S_KARTINVULNB7", + "S_KARTINVULNB8", + "S_KARTINVULNB9", + "S_KARTINVULNB10", + "S_KARTINVULNB11", + "S_KARTINVULNB12", // Invincibility flash overlay "S_INVULNFLASH1", diff --git a/src/info.c b/src/info.c index 32bb5fb17..3a33634c9 100644 --- a/src/info.c +++ b/src/info.c @@ -532,7 +532,8 @@ char sprnames[NUMSPRITES + 1][5] = "BOST", // Sneaker booster flame "BOSM", // Sneaker booster smoke "KFRE", // Sneaker fire trail - "KINV", // Invincibility sparkle trail + "KINV", // Fullbright invincibility sparkle trail + "KINB", // Invincibility sparkle trail "KINF", // Invincibility flash "WIPD", // Wipeout dust trail "DRIF", // Drift Sparks @@ -4158,17 +4159,31 @@ state_t states[NUMSTATES] = {SPR_AIDU, FF_ANIMATE|FF_PAPERSPRITE, 5*2, {NULL}, 5, 2, S_NULL}, // S_KARTAIZDRIFTSTRAT - {SPR_KINV, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL2}, // S_KARTINVULN_SMALL1 - {SPR_KINV, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL3}, // S_KARTINVULN_SMALL2 - {SPR_KINV, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL4}, // S_KARTINVULN_SMALL3 - {SPR_KINV, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL5}, // S_KARTINVULN_SMALL4 - {SPR_KINV, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_NULL}, // S_KARTINVULN_SMALL5 + {SPR_KINV, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KARTINVULN2}, // S_KARTINVULN1 + {SPR_KINV, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_KARTINVULN3}, // S_KARTINVULN2 + {SPR_KINV, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_KARTINVULN4}, // S_KARTINVULN3 + {SPR_KINV, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_KARTINVULN5}, // S_KARTINVULN4 + {SPR_KINV, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_KARTINVULN6}, // S_KARTINVULN5 + {SPR_KINV, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_KARTINVULN7}, // S_KARTINVULN6 + {SPR_KINV, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_KARTINVULN8}, // S_KARTINVULN7 + {SPR_KINV, FF_FULLBRIGHT|7, 1, {NULL}, 0, 0, S_KARTINVULN9}, // S_KARTINVULN8 + {SPR_KINV, FF_FULLBRIGHT|8, 1, {NULL}, 0, 0, S_KARTINVULN10}, // S_KARTINVULN9 + {SPR_KINV, FF_FULLBRIGHT|9, 1, {NULL}, 0, 0, S_KARTINVULN11}, // S_KARTINVULN10 + {SPR_KINV, FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_KARTINVULN12}, // S_KARTINVULN11 + {SPR_KINV, FF_FULLBRIGHT|11, 1, {NULL}, 0, 0, S_NULL}, // S_KARTINVULN12 - {SPR_KINV, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE2}, // S_KARTINVULN_LARGE1 - {SPR_KINV, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE3}, // S_KARTINVULN_LARGE2 - {SPR_KINV, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE4}, // S_KARTINVULN_LARGE3 - {SPR_KINV, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE5}, // S_KARTINVULN_LARGE4 - {SPR_KINV, FF_FULLBRIGHT|7, 1, {NULL}, 0, 0, S_NULL}, // S_KARTINVULN_LARGE5 + {SPR_KINB, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KARTINVULNB2}, // S_KARTINVULNB1 + {SPR_KINB, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_KARTINVULNB3}, // S_KARTINVULNB2 + {SPR_KINB, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_KARTINVULNB4}, // S_KARTINVULNB3 + {SPR_KINB, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_KARTINVULNB5}, // S_KARTINVULNB4 + {SPR_KINB, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_KARTINVULNB6}, // S_KARTINVULNB5 + {SPR_KINB, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_KARTINVULNB7}, // S_KARTINVULNB6 + {SPR_KINB, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_KARTINVULNB8}, // S_KARTINVULNB7 + {SPR_KINB, FF_FULLBRIGHT|7, 1, {NULL}, 0, 0, S_KARTINVULNB9}, // S_KARTINVULNB8 + {SPR_KINB, FF_FULLBRIGHT|8, 1, {NULL}, 0, 0, S_KARTINVULNB10}, // S_KARTINVULNB9 + {SPR_KINB, FF_FULLBRIGHT|9, 1, {NULL}, 0, 0, S_KARTINVULNB11}, // S_KARTINVULNB10 + {SPR_KINB, FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_KARTINVULNB12}, // S_KARTINVULNB11 + {SPR_KINB, FF_FULLBRIGHT|11, 1, {NULL}, 0, 0, S_NULL}, // S_KARTINVULNB12 {SPR_KINF, FF_FULLBRIGHT|FF_TRANS90, 1, {NULL}, 0, 0, S_INVULNFLASH2}, // S_INVULNFLASH1 {SPR_NULL, FF_FULLBRIGHT|FF_TRANS90, 1, {NULL}, 0, 0, S_INVULNFLASH3}, // S_INVULNFLASH2 @@ -4206,7 +4221,7 @@ state_t states[NUMSTATES] = {SPR_ORBN, 0, 1, {NULL}, 0, 0, S_ORBINAUT2}, // S_ORBINAUT1 {SPR_ORBN, 1, 1, {NULL}, 0, 0, S_ORBINAUT3}, // S_ORBINAUT2 {SPR_ORBN, 2, 1, {NULL}, 0, 0, S_ORBINAUT4}, // S_ORBINAUT3 - {SPR_ORBN, 3, 1, {NULL}, 0, 0, S_ORBINAUT5}, // S_ORBINAUT4 + {SPR_ORBN, 3, 1, {NULL}, 0, 0, S_ORBINAUT5}, // S_ORBINAUT4S_ORBINAUT4 {SPR_ORBN, 4, 1, {NULL}, 0, 0, S_ORBINAUT6}, // S_ORBINAUT5 {SPR_ORBN, 5, 1, {NULL}, 0, 0, S_ORBINAUT1}, // S_ORBINAUT6 {SPR_ORBN, 0, 175, {NULL}, 0, 0, S_NULL}, // S_ORBINAUT_DEAD @@ -23276,7 +23291,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_SPARKLETRAIL -1, // doomednum - S_KARTINVULN_SMALL1, // spawnstate + S_INVISIBLE, // spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound diff --git a/src/info.h b/src/info.h index 3fc3e718b..7903af0c6 100644 --- a/src/info.h +++ b/src/info.h @@ -803,7 +803,8 @@ typedef enum sprite SPR_BOST, // Sneaker booster flame SPR_BOSM, // Sneaker booster smoke SPR_KFRE, // Sneaker fire trail - SPR_KINV, // Invincibility sparkle trail + SPR_KINV, // Fullbright invincibility sparkle trail + SPR_KINB, // Fullbright invincibility sparkle trail SPR_KINF, // Invincibility flash SPR_WIPD, // Wipeout dust trail SPR_DRIF, // Drift Sparks @@ -4287,17 +4288,30 @@ typedef enum state S_KARTAIZDRIFTSTRAT, // Invincibility Sparks - S_KARTINVULN_SMALL1, - S_KARTINVULN_SMALL2, - S_KARTINVULN_SMALL3, - S_KARTINVULN_SMALL4, - S_KARTINVULN_SMALL5, - - S_KARTINVULN_LARGE1, - S_KARTINVULN_LARGE2, - S_KARTINVULN_LARGE3, - S_KARTINVULN_LARGE4, - S_KARTINVULN_LARGE5, + S_KARTINVULN1, + S_KARTINVULN2, + S_KARTINVULN3, + S_KARTINVULN4, + S_KARTINVULN5, + S_KARTINVULN6, + S_KARTINVULN7, + S_KARTINVULN8, + S_KARTINVULN9, + S_KARTINVULN10, + S_KARTINVULN11, + S_KARTINVULN12, + S_KARTINVULNB1, + S_KARTINVULNB2, + S_KARTINVULNB3, + S_KARTINVULNB4, + S_KARTINVULNB5, + S_KARTINVULNB6, + S_KARTINVULNB7, + S_KARTINVULNB8, + S_KARTINVULNB9, + S_KARTINVULNB10, + S_KARTINVULNB11, + S_KARTINVULNB12, // Invincibility flash S_INVULNFLASH1, diff --git a/src/k_kart.c b/src/k_kart.c index 91335cdcb..76001c4d2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -401,6 +401,21 @@ static INT32 K_KartItemOddsBattle[NUMKARTRESULTS][2] = #define DISTVAR (2048) // Magic number distance for use with item roulette tiers +static INT32 K_SparkleTrailStartStates[NUMKARTSPARKLESTATES][2] = { + {S_KARTINVULN12, S_KARTINVULNB12}, + {S_KARTINVULN11, S_KARTINVULNB11}, + {S_KARTINVULN10, S_KARTINVULNB10}, + {S_KARTINVULN9, S_KARTINVULNB9}, + {S_KARTINVULN8, S_KARTINVULNB8}, + {S_KARTINVULN7, S_KARTINVULNB7}, + {S_KARTINVULN6, S_KARTINVULNB6}, + {S_KARTINVULN5, S_KARTINVULNB5}, + {S_KARTINVULN4, S_KARTINVULNB4}, + {S_KARTINVULN3, S_KARTINVULNB3}, + {S_KARTINVULN2, S_KARTINVULNB2}, + {S_KARTINVULN1, S_KARTINVULNB1} +}; + INT32 K_GetShieldFromItem(INT32 item) { switch (item) @@ -3749,20 +3764,34 @@ void K_SpawnBoostTrail(player_t *player) void K_SpawnSparkleTrail(mobj_t *mo) { - const INT32 rad = (mo->radius*2)>>FRACBITS; + const INT32 rad = (mo->radius*3)>>FRACBITS; mobj_t *sparkle; + angle_t newangle; INT32 i; + UINT8 frame; + UINT8 invanimnum; + UINT8 index = 1; I_Assert(mo != NULL); I_Assert(!P_MobjWasRemoved(mo)); - for (i = 0; i < 3; i++) + invanimnum = mo->player->kartstuff[k_invincibilitytimer]/TICRATE+1; + + if (leveltime & 2) + index = 2; + + CONS_Printf("%d\n", index); + CONS_Printf("%d\n", invanimnum); + + for (i = 0; i < 8; i++) { - fixed_t newx = mo->x + mo->momx + (P_RandomRange(-rad, rad)<y + mo->momy + (P_RandomRange(-rad, rad)<z + mo->momz + (P_RandomRange(0, mo->height>>FRACBITS)<angle + ANGLE_157h) + FixedAngle(((360 / 8) * i) << FRACBITS) + ANGLE_90; + fixed_t newx = mo->x + (mo->momx*4)/5 + (P_RandomRange(-rad, rad)<y + mo->momy + (P_RandomRange(-rad, rad*2)<z + (mo->momz*4)/5 + (P_RandomRange(0, mo->height>>FRACBITS)<angle = newangle; K_FlipFromObject(sparkle, mo); //if (i == 0) @@ -3771,11 +3800,15 @@ void K_SpawnSparkleTrail(mobj_t *mo) P_SetTarget(&sparkle->target, mo); sparkle->destscale = mo->destscale; P_SetScale(sparkle, mo->scale); - sparkle->color = mo->color; - //sparkle->colorized = mo->colorized; } - P_SetMobjState(sparkle, S_KARTINVULN_LARGE1); + P_SetMobjState(sparkle, K_SparkleTrailStartStates[invanimnum][index]); + sparkle->colorized = true; + sparkle->color = mo->color; + + //CONS_Printf("%d\n", (mo->player->kartstuff[k_invincibilitytimer]/TICRATE)); + + //invanimnum = (mo->player->kartstuff[k_invincibilitytimer]/TICRATE > 11) ? 11 : mo->player->kartstuff[k_invincibilitytimer]/TICRATE; } void K_SpawnWipeoutTrail(mobj_t *mo, boolean translucent) diff --git a/src/k_kart.h b/src/k_kart.h index bde845a22..18b354efc 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -11,6 +11,7 @@ #include "command.h" // Need for player_t #define KART_FULLTURN 800 +#define NUMKARTSPARKLESTATES 12 player_t *K_GetItemBoxPlayer(mobj_t *mobj); angle_t K_ReflectAngle(angle_t angle, angle_t against, fixed_t maxspeed, fixed_t yourspeed); diff --git a/src/p_inter.c b/src/p_inter.c index 541d1a890..1c07a5a90 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -1826,6 +1826,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da boolean force = false; INT32 laglength = 10; + INT32 kinvextend = 0; if (objectplacing) return false; @@ -1981,6 +1982,13 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da if (source && source != player->mo && source->player) { + if (source->player->kartstuff[k_invincibilitytimer]) + { + kinvextend = (source->player->kartstuff[k_invincibilitytimer])+2*TICRATE; + CONS_Printf("extend k_invincibilitytimer for %s - old value %d new value %d\n", player_names[source->player - players], source->player->kartstuff[k_invincibilitytimer]/TICRATE, kinvextend/TICRATE); + source->player->kartstuff[k_invincibilitytimer] = kinvextend; + } + K_PlayHitEmSound(source); K_BattleAwardHit(source->player, player, inflictor, takeBumpers);