Disable combos, restore old invin visuals, fix constant line beeping

This commit is contained in:
NepDisk 2024-07-31 18:02:47 -04:00
parent ac72e705a6
commit 9742e1775a
7 changed files with 87 additions and 165 deletions

View file

@ -3364,31 +3364,17 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
"S_KARTAIZDRIFTSTRAT",
// Invincibility Sparks
"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_KARTINVULN_SMALL1",
"S_KARTINVULN_SMALL2",
"S_KARTINVULN_SMALL3",
"S_KARTINVULN_SMALL4",
"S_KARTINVULN_SMALL5",
"S_KARTINVULNB1",
"S_KARTINVULNB2",
"S_KARTINVULNB3",
"S_KARTINVULNB4",
"S_KARTINVULNB5",
"S_KARTINVULNB6",
"S_KARTINVULNB7",
"S_KARTINVULNB8",
"S_KARTINVULNB9",
"S_KARTINVULNB10",
"S_KARTINVULNB11",
"S_KARTINVULNB12",
"S_KARTINVULN_LARGE1",
"S_KARTINVULN_LARGE2",
"S_KARTINVULN_LARGE3",
"S_KARTINVULN_LARGE4",
"S_KARTINVULN_LARGE5",
// Invincibility flash overlay
"S_INVULNFLASH1",

View file

@ -3924,31 +3924,17 @@ state_t states[NUMSTATES] =
{SPR_AIDU, FF_ANIMATE|FF_PAPERSPRITE, 5*2, {NULL}, 5, 2, S_NULL}, // S_KARTAIZDRIFTSTRAT
{SPR_KINV, FF_FULLBRIGHT, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN2}, // S_KARTINVULN1
{SPR_KINV, FF_FULLBRIGHT|1, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN3}, // S_KARTINVULN2
{SPR_KINV, FF_FULLBRIGHT|2, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN4}, // S_KARTINVULN3
{SPR_KINV, FF_FULLBRIGHT|3, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN5}, // S_KARTINVULN4
{SPR_KINV, FF_FULLBRIGHT|4, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN6}, // S_KARTINVULN5
{SPR_KINV, FF_FULLBRIGHT|5, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN7}, // S_KARTINVULN6
{SPR_KINV, FF_FULLBRIGHT|6, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN8}, // S_KARTINVULN7
{SPR_KINV, FF_FULLBRIGHT|7, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN9}, // S_KARTINVULN8
{SPR_KINV, FF_FULLBRIGHT|8, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN10}, // S_KARTINVULN9
{SPR_KINV, FF_FULLBRIGHT|9, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN11}, // S_KARTINVULN10
{SPR_KINV, FF_FULLBRIGHT|10, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN12}, // S_KARTINVULN11
{SPR_KINV, FF_FULLBRIGHT|11, 1, {A_InvincSparkleRotate}, 0, 0, S_NULL}, // S_KARTINVULN12
{SPR_KINV, FF_FULLBRIGHT, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN_SMALL2}, // S_KARTINVULN_SMALL1
{SPR_KINV, FF_FULLBRIGHT|1, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN_SMALL3}, // S_KARTINVULN_SMALL2
{SPR_KINV, FF_FULLBRIGHT|2, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN_SMALL4}, // S_KARTINVULN_SMALL3
{SPR_KINV, FF_FULLBRIGHT|3, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULN_SMALL5}, // S_KARTINVULN_SMALL4
{SPR_KINV, FF_FULLBRIGHT|4, 1, {A_InvincSparkleRotate}, 0, 0, S_NULL}, // S_KARTINVULN_SMALL5
{SPR_KINB, FF_FULLBRIGHT, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB2}, // S_KARTINVULNB1
{SPR_KINB, FF_FULLBRIGHT|1, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB3}, // S_KARTINVULNB2
{SPR_KINB, FF_FULLBRIGHT|2, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB4}, // S_KARTINVULNB3
{SPR_KINB, FF_FULLBRIGHT|3, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB5}, // S_KARTINVULNB4
{SPR_KINB, FF_FULLBRIGHT|4, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB6}, // S_KARTINVULNB5
{SPR_KINB, FF_FULLBRIGHT|5, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB7}, // S_KARTINVULNB6
{SPR_KINB, FF_FULLBRIGHT|6, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB8}, // S_KARTINVULNB7
{SPR_KINB, FF_FULLBRIGHT|7, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB9}, // S_KARTINVULNB8
{SPR_KINB, FF_FULLBRIGHT|8, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB10}, // S_KARTINVULNB9
{SPR_KINB, FF_FULLBRIGHT|9, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB11}, // S_KARTINVULNB10
{SPR_KINB, FF_FULLBRIGHT|10, 1, {A_InvincSparkleRotate}, 0, 0, S_KARTINVULNB12}, // S_KARTINVULNB11
{SPR_KINB, FF_FULLBRIGHT|11, 1, {A_InvincSparkleRotate}, 0, 0, S_NULL}, // S_KARTINVULNB12
{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_KINF, FF_FULLBRIGHT|FF_TRANS80|FF_ADD, 1, {NULL}, 0, 0, S_INVULNFLASH2}, // S_INVULNFLASH1
{SPR_NULL, FF_FULLBRIGHT|FF_TRANS80|FF_ADD, 1, {NULL}, 0, 0, S_INVULNFLASH3}, // S_INVULNFLASH2

View file

@ -4335,31 +4335,17 @@ typedef enum state
S_KARTAIZDRIFTSTRAT,
// Invincibility Sparks
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_KARTINVULN_SMALL1,
S_KARTINVULN_SMALL2,
S_KARTINVULN_SMALL3,
S_KARTINVULN_SMALL4,
S_KARTINVULN_SMALL5,
S_KARTINVULNB1,
S_KARTINVULNB2,
S_KARTINVULNB3,
S_KARTINVULNB4,
S_KARTINVULNB5,
S_KARTINVULNB6,
S_KARTINVULNB7,
S_KARTINVULNB8,
S_KARTINVULNB9,
S_KARTINVULNB10,
S_KARTINVULNB11,
S_KARTINVULNB12,
S_KARTINVULN_LARGE1,
S_KARTINVULN_LARGE2,
S_KARTINVULN_LARGE3,
S_KARTINVULN_LARGE4,
S_KARTINVULN_LARGE5,
// Invincibility flash
S_INVULNFLASH1,

View file

@ -406,22 +406,6 @@ static INT32 K_KartItemOddsBattle[NUMKARTRESULTS][2] =
#define SPBFORCEDIST (15*DISTVAR) // Distance when SPB is forced onto 2nd place
#define ENDDIST (12*DISTVAR) // Distance when the game stops giving you bananas
// Array of states to pick the starting point of the animation, based on the actual time left for invincibility.
static INT32 K_SparkleTrailStartStates[KART_NUMINVSPARKLESANIM][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)
@ -4025,54 +4009,29 @@ void K_SpawnBoostTrail(player_t *player)
void K_SpawnSparkleTrail(mobj_t *mo)
{
const INT32 rad = (mo->radius*3)/FRACUNIT;
const INT32 rad = (mo->radius*2)>>FRACBITS;
mobj_t *sparkle;
UINT8 invanimnum; // Current sparkle animation number
INT32 invtime;// Invincibility time left, in seconds
UINT8 index = 0;
fixed_t newx, newy, newz;
INT32 i;
I_Assert(mo != NULL);
I_Assert(!P_MobjWasRemoved(mo));
if (leveltime & 2)
index = 1;
invtime = mo->player->invincibilitytimer/TICRATE+1;
//CONS_Printf("%d\n", index);
newx = mo->x + (P_RandomRange(-rad, rad)*FRACUNIT);
newy = mo->y + (P_RandomRange(-rad, rad)*FRACUNIT);
newz = mo->z + (P_RandomRange(0, mo->height>>FRACBITS)*FRACUNIT);
sparkle = P_SpawnMobj(newx, newy, newz, MT_SPARKLETRAIL);
P_InitAngle(sparkle, R_PointToAngle2(mo->x, mo->y, sparkle->x, sparkle->y));
sparkle->movefactor = R_PointToDist2(mo->x, mo->y, sparkle->x, sparkle->y); // Save the distance we spawned away from the player.
//CONS_Printf("movefactor: %d\n", sparkle->movefactor/FRACUNIT);
sparkle->extravalue1 = (sparkle->z - mo->z); // Keep track of our Z position relative to the player's, I suppose.
sparkle->extravalue2 = P_RandomRange(0, 1) ? 1 : -1; // Rotation direction?
sparkle->cvmem = P_RandomRange(-25, 25)*mo->scale; // Vertical "angle"
K_FlipFromObject(sparkle, mo);
P_SetTarget(&sparkle->target, mo);
sparkle->destscale = mo->destscale;
P_SetScale(sparkle, mo->scale);
invanimnum = (invtime >= 11) ? 11 : invtime;
//CONS_Printf("%d\n", invanimnum);
P_SetMobjState(sparkle, K_SparkleTrailStartStates[invanimnum][index]);
if (mo->player->invincibilitytimer > itemtime+(2*TICRATE))
for (i = 0; i < 3; 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);
sparkle = P_SpawnMobj(newx, newy, newz, MT_SPARKLETRAIL);
K_FlipFromObject(sparkle, mo);
P_SetTarget(&sparkle->target, mo);
sparkle->destscale = mo->destscale;
P_SetScale(sparkle, mo->scale);
sparkle->color = mo->color;
sparkle->colorized = true;
}
P_SetMobjState(sparkle, S_KARTINVULN_LARGE1);
}
void K_SpawnWipeoutTrail(mobj_t *mo, boolean translucent)
@ -6114,17 +6073,18 @@ static void K_UpdateInvincibilitySounds(player_t *player)
{
if (cv_kartinvinsfx.value)
{
if (player->invincibilitytimer > 0) // Prioritize invincibility
sfxnum = sfx_alarmi;
else if (player->growshrinktimer > 0)
if (player->growshrinktimer > 0) // Prioritize Grow
sfxnum = sfx_alarmg;
else if (player->invincibilitytimer > 0)
sfxnum = sfx_alarmi;
}
else
{
if (player->invincibilitytimer > 0)
sfxnum = sfx_kinvnc;
else if (player->growshrinktimer > 0)
if (player->growshrinktimer > 0)
sfxnum = sfx_kgrow;
else if (player->invincibilitytimer > 0)
sfxnum = sfx_kinvnc;
}
}
@ -6730,6 +6690,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
if (player->invincibilitytimer)
player->invincibilitytimer--;
if (player->checkskip)
player->checkskip--;
if ((player->respawn.state == RESPAWNST_NONE) && player->growshrinktimer != 0)
{
@ -6974,23 +6937,9 @@ void K_KartResetPlayerColor(player_t *player)
fullbright = true;
if (player->invincibilitytimer > defaultTime)
{
player->mo->color = K_RainbowColor(leveltime / 2);
player->mo->colorized = true;
skip = true;
}
else
{
flicker += (defaultTime - player->invincibilitytimer) / TICRATE / 2;
}
if (leveltime % flicker == 0)
{
player->mo->color = SKINCOLOR_INVINCFLASH;
player->mo->colorized = true;
skip = true;
}
player->mo->color = K_RainbowColor(leveltime / 2);
player->mo->colorized = true;
skip = true;
if (skip)
{

View file

@ -1954,6 +1954,23 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
}
{
if (((type == DMG_NORMAL) || (type == DMG_WIPEOUT)) || (type == DMG_STING) || (type == DMG_WOMBO)) // No combos pls thx
{
if (player->spinouttimer > 0)
{
K_DoInstashield(player);
//CONS_Printf("is this shit even working....\n");
return false;
}
}
if (player->squishedtimer > 0)
{
K_DoInstashield(player);
return false;
}
// Check if we should allow wombo combos (hard hits by default, inverted by the presence of DMG_WOMBO).
boolean allowcombo = (hardhit == !(damagetype & DMG_WOMBO));
@ -1991,19 +2008,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
if (source && source != player->mo && source->player)
{
// Extend the invincibility if the hit was a direct hit.
if (inflictor == source && source->player->invincibilitytimer)
{
tic_t kinvextend;
if (gametype == GT_BATTLE)
kinvextend = 2*TICRATE;
else
kinvextend = 5*TICRATE;
source->player->invincibilitytimer += kinvextend;
}
K_TryHurtSoundExchange(target, source);
K_BattleAwardHit(source->player, player, inflictor, takeBumpers);

View file

@ -7118,6 +7118,15 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
P_Thrust(smoke, mobj->angle+FixedAngle(P_RandomRange(135, 225)<<FRACBITS), P_RandomRange(0, 8) * mobj->target->scale);
}
break;
case MT_SPARKLETRAIL:
if (!mobj->target)
{
P_RemoveMobj(mobj);
return false;
}
mobj->color = mobj->target->color;
mobj->colorized = mobj->target->colorized;
break;
case MT_INVULNFLASH:
if (!mobj->target || !mobj->target->health || (mobj->target->player && !mobj->target->player->invincibilitytimer))
{

View file

@ -2010,7 +2010,9 @@ static void K_HandleLapIncrement(player_t *player)
}
else if (player->starpostnum)
{
S_StartSound(player->mo, sfx_s26d);
if (!player->checkskip)
S_StartSound(player->mo, sfx_lose);
player->checkskip = 3;
}
}
}