diff --git a/src/k_kart.c b/src/k_kart.c index 5d4c7eb5d..c58ee1d72 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10099,7 +10099,7 @@ void K_UnsetItemOut(player_t *player) void K_MoveKartPlayer(player_t *player, boolean onground) { ticcmd_t *cmd = &player->cmd; - boolean ATTACK_IS_DOWN = ((cmd->buttons & BT_ATTACK) && !(player->oldcmd.buttons & BT_ATTACK)); + boolean ATTACK_IS_DOWN = ((cmd->buttons & BT_ATTACK) && !(player->oldcmd.buttons & BT_ATTACK) && (player->respawn.state == RESPAWNST_NONE)); boolean HOLDING_ITEM = (player->pflags & (PF_ITEMOUT|PF_EGGMANOUT)); boolean NO_HYUDORO = (player->stealingtimer == 0); diff --git a/src/k_respawn.c b/src/k_respawn.c index 0997c2b40..cb08408a2 100644 --- a/src/k_respawn.c +++ b/src/k_respawn.c @@ -344,7 +344,10 @@ static void K_MovePlayerToRespawnPoint(player_t *player) player->mo->momx = player->mo->momy = player->mo->momz = 0; - player->flashing = 2; + // 3 because this timer counts down afterward, in + // P_PlayerThink. flashing must be > 1 after it has + // counted down in order to flicker the player sprite. + player->flashing = 3; //player->nocontrol = max(2, player->nocontrol); if (leveltime % 8 == 0 && !mapreset) @@ -813,6 +816,7 @@ void K_RespawnChecker(player_t *player) return; case RESPAWNST_DROP: player->mo->momx = player->mo->momy = 0; + player->flashing = 3; if (player->respawn.timer > 0) { player->mo->momz = 0; diff --git a/src/p_inter.c b/src/p_inter.c index 6e053a405..09f6349d6 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -1911,6 +1911,12 @@ static boolean P_KillPlayer(player_t *player, mobj_t *inflictor, mobj_t *source, { (void)source; + if (player->respawn.state != RESPAWNST_NONE) + { + K_DoInstashield(player); + return false; + } + if (!player->exiting && specialstageinfo.valid == true) { player->pflags |= PF_NOCONTEST;