Add a cancel system to Alt Invincibility
Can be cancelled now, similarly to Grow
This commit is contained in:
parent
b81fcaf7c7
commit
207e5011dc
4 changed files with 39 additions and 2 deletions
|
|
@ -710,10 +710,13 @@ struct player_t
|
|||
INT16 growshrinktimer; // > 0 = Big, < 0 = small
|
||||
INT16 growcancel; // Duration of grow canceling
|
||||
INT16 squishedtimer; // Duration of being squished
|
||||
|
||||
UINT16 rocketsneakertimer; // Rocket Sneaker duration timer
|
||||
|
||||
UINT16 invincibilitytimer; // Invincibility timer
|
||||
UINT16 maxinvincibilitytime; // Initial time for Invincibility, used for the item bar.
|
||||
UINT16 maxinvincibilitytime; // (Alternate) Initial time for Invincibility, used for the item bar.
|
||||
UINT16 invincibilitybottleneck; // (Alternate) Prevents breakaways by gradienting towards a heavier decrement.
|
||||
INT16 invincibilitycancel; // (Alternate) Duration of Invincibility canceling.
|
||||
|
||||
UINT8 eggmanexplode; // Fake item recieved, explode in a few seconds
|
||||
SINT8 eggmanblame; // (-1 to 15) - Fake item recieved, who set this fake
|
||||
|
|
|
|||
|
|
@ -1254,6 +1254,12 @@ static void K_drawKartItem(void)
|
|||
itembar = stplyr->invincibilitytimer;
|
||||
maxl = max(1, stplyr->maxinvincibilitytime);
|
||||
|
||||
if (stplyr->invincibilitycancel > 0)
|
||||
{
|
||||
flamebar = stplyr->invincibilitycancel;
|
||||
flamemaxl = 26;
|
||||
}
|
||||
|
||||
if (leveltime & 1)
|
||||
localpatch = localinv;
|
||||
else
|
||||
|
|
|
|||
26
src/k_kart.c
26
src/k_kart.c
|
|
@ -7862,6 +7862,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
{
|
||||
player->invincibilitybottleneck = 0; // No need for bottlenecking.
|
||||
player->maxinvincibilitytime = 0;
|
||||
player->invincibilitycancel = -1;
|
||||
}
|
||||
|
||||
if (player->checkskip)
|
||||
|
|
@ -10381,6 +10382,8 @@ void K_StripOther(player_t *player)
|
|||
player->roulettetype = KROULETTETYPE_NORMAL;
|
||||
|
||||
player->invincibilitytimer = 0;
|
||||
player->invincibilitycancel = -1;
|
||||
|
||||
if (player->growshrinktimer)
|
||||
{
|
||||
K_RemoveGrowShrink(player);
|
||||
|
|
@ -10786,7 +10789,28 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
// Invincibility
|
||||
else if (K_InvincibilitySlotHogging(player))
|
||||
{
|
||||
// Does nothing, for now.
|
||||
// (Alternate) Cancel Invincibility
|
||||
if (player->invincibilitycancel >= 0)
|
||||
{
|
||||
if (buttons & BT_ATTACK)
|
||||
{
|
||||
player->invincibilitycancel++;
|
||||
if (player->invincibilitycancel > 25)
|
||||
{
|
||||
// Don't fully cancel due to how the music handling works.
|
||||
player->invincibilitytimer = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
player->invincibilitycancel = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((buttons & BT_ATTACK) || (player->oldcmd.buttons & BT_ATTACK))
|
||||
player->invincibilitycancel = -1;
|
||||
else
|
||||
player->invincibilitycancel = 0;
|
||||
}
|
||||
}
|
||||
else if (player->itemamount == 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -343,11 +343,13 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
|
||||
WRITEINT16(save->p, players[i].growshrinktimer);
|
||||
WRITEINT16(save->p, players[i].growcancel);
|
||||
|
||||
WRITEUINT16(save->p, players[i].rocketsneakertimer);
|
||||
|
||||
WRITEUINT16(save->p, players[i].invincibilitytimer);
|
||||
WRITEUINT16(save->p, players[i].maxinvincibilitytime);
|
||||
WRITEUINT16(save->p, players[i].invincibilitybottleneck);
|
||||
WRITEINT16(save->p, players[i].invincibilitycancel);
|
||||
|
||||
WRITEUINT8(save->p, players[i].eggmanexplode);
|
||||
WRITESINT8(save->p, players[i].eggmanblame);
|
||||
|
|
@ -687,11 +689,13 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
|
||||
players[i].growshrinktimer = READINT16(save->p);
|
||||
players[i].growcancel = READINT16(save->p);
|
||||
|
||||
players[i].rocketsneakertimer = READUINT16(save->p);
|
||||
|
||||
players[i].invincibilitytimer = READUINT16(save->p);
|
||||
players[i].maxinvincibilitytime = READUINT16(save->p);
|
||||
players[i].invincibilitybottleneck = READUINT16(save->p);
|
||||
players[i].invincibilitycancel = READINT16(save->p);
|
||||
|
||||
players[i].eggmanexplode = READUINT8(save->p);
|
||||
players[i].eggmanblame = READSINT8(save->p);
|
||||
|
|
|
|||
Loading…
Reference in a new issue