Some invincbility changes

This commit is contained in:
SteelT 2021-03-28 17:19:47 -04:00
parent 3ebedeaa08
commit c8124a6c94
6 changed files with 128 additions and 44 deletions

View file

@ -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",

View file

@ -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

View file

@ -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,

View file

@ -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)<<FRACBITS);
fixed_t newy = mo->y + mo->momy + (P_RandomRange(-rad, rad)<<FRACBITS);
fixed_t newz = mo->z + mo->momz + (P_RandomRange(0, mo->height>>FRACBITS)<<FRACBITS);
newangle = (mo->angle + ANGLE_157h) + FixedAngle(((360 / 8) * i) << FRACBITS) + ANGLE_90;
fixed_t newx = mo->x + (mo->momx*4)/5 + (P_RandomRange(-rad, rad)<<FRACBITS);
fixed_t newy = mo->y + mo->momy + (P_RandomRange(-rad, rad*2)<<FRACBITS);
fixed_t newz = mo->z + (mo->momz*4)/5 + (P_RandomRange(0, mo->height>>FRACBITS)<<FRACBITS);
sparkle = P_SpawnMobj(newx, newy, newz, MT_SPARKLETRAIL);
sparkle->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)

View file

@ -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);

View file

@ -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);