diff --git a/src/d_player.h b/src/d_player.h index 2e7aeae1b..f59a95356 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -746,6 +746,8 @@ struct player_t UINT8 instaShieldCooldown; UINT8 guardCooldown; + UINT16 incontrol; + uint8_t public_key[PUBKEYLENGTH]; #ifdef HWRENDER diff --git a/src/k_battle.c b/src/k_battle.c index d7997a809..7c6dd7d09 100644 --- a/src/k_battle.c +++ b/src/k_battle.c @@ -265,6 +265,9 @@ void K_DropEmeraldsFromPlayer(player_t *player, UINT32 emeraldType) UINT8 i; SINT8 flip = P_MobjFlip(player->mo); + if (player->incontrol < TICRATE) + return; + for (i = 0; i < 14; i++) { UINT32 emeraldFlag = (1 << i); diff --git a/src/k_kart.c b/src/k_kart.c index 6cd6a0d76..207cea726 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8031,6 +8031,11 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->tiregrease) player->tiregrease--; + if (player->spinouttimer || player->tumbleBounces) + player->incontrol = 0; + else + player->incontrol++; + if (player->tumbleBounces > 0) { K_HandleTumbleSound(player); diff --git a/src/p_saveg.c b/src/p_saveg.c index 013d81830..090951899 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -428,6 +428,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEUINT8(save->p, players[i].instaShieldCooldown); WRITEUINT8(save->p, players[i].guardCooldown); + WRITEUINT16(save->p, players[i].incontrol); // respawnvars_t WRITEUINT8(save->p, players[i].respawn.state); @@ -819,6 +820,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].instaShieldCooldown = READUINT8(save->p); players[i].guardCooldown = READUINT8(save->p); + players[i].incontrol = READUINT16(save->p); // respawnvars_t players[i].respawn.state = READUINT8(save->p);