From 5ef24e1a3ce445136131139c8757818532e60298 Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 1 Mar 2023 07:23:56 -0800 Subject: [PATCH 1/4] Fix flashing tics flickering animation for light snake --- src/k_respawn.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/k_respawn.c b/src/k_respawn.c index 0997c2b40..4d3675490 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) From 6e5a5bf92d66dde3eeb7462e180934e63a3de00c Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 1 Mar 2023 07:25:14 -0800 Subject: [PATCH 2/4] Apply flashing tics to RESPAWNST_DROP Applies flashing tics to the entire respawn state so you don't become vulnerable once you reach the waypoint. --- src/k_respawn.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/k_respawn.c b/src/k_respawn.c index 4d3675490..cb08408a2 100644 --- a/src/k_respawn.c +++ b/src/k_respawn.c @@ -816,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; From 0cd260eed177c0943ed5145d2204173fc969d76a Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 1 Mar 2023 07:25:54 -0800 Subject: [PATCH 3/4] Don't let death type damage kill respawning player This includes death pits and instakill sectors. Does not affect direct P_KillMobj calls. --- src/p_inter.c | 6 ++++++ 1 file changed, 6 insertions(+) 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; From 393cf6e7f3a8a59b5171211ae332ec6c0d83b22c Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 1 Mar 2023 07:43:23 -0800 Subject: [PATCH 4/4] Don't let the player use the item button until completely finished respawning --- src/k_kart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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);