diff --git a/src/k_follower.c b/src/k_follower.c index 0a8869077..f0a1d7748 100644 --- a/src/k_follower.c +++ b/src/k_follower.c @@ -315,7 +315,8 @@ void K_HandleFollower(player_t *player) // don't do anything if we can't have a follower to begin with. // (It gets removed under those conditions) - if (player->spectator || player->followerskin < 0) + if (player->spectator || player->followerskin < 0 + || player->mo == NULL || P_MobjWasRemoved(player->mo)) { if (player->follower) { @@ -377,12 +378,15 @@ void K_HandleFollower(player_t *player) // Set follower colour color = K_GetEffectiveFollowerColor(player->followercolor, player->skincolor); - if (player->follower == NULL) // follower doesn't exist / isn't valid + if (player->follower == NULL || P_MobjWasRemoved(player->follower)) // follower doesn't exist / isn't valid { //CONS_Printf("Spawning follower...\n"); // so let's spawn one! P_SetTarget(&player->follower, P_SpawnMobj(sx, sy, sz, MT_FOLLOWER)); + if (player->follower == NULL) + return; + K_UpdateFollowerState(player->follower, fl.idlestate, FOLLOWERSTATE_IDLE); P_SetTarget(&player->follower->target, player->mo); // we need that to know when we need to disappear @@ -402,11 +406,9 @@ void K_HandleFollower(player_t *player) } else // follower exists, woo! { - // Safety net (2) - - if (P_MobjWasRemoved(player->follower)) + if (player->follower->hitlag != 0) { - P_SetTarget(&player->follower, NULL); // Remove this and respawn one, don't crash the game if Lua decides to P_RemoveMobj this thing. + // Don't update frames in hitlag return; } @@ -625,4 +627,11 @@ void K_HandleFollower(player_t *player) K_UpdateFollowerState(player->follower, fl.idlestate, FOLLOWERSTATE_IDLE); } } + + if (player->mo->hitlag) + { + player->follower->hitlag = player->mo->hitlag; + player->follower->eflags |= (player->mo->eflags & MFE_DAMAGEHITLAG); + return; + } }