diff --git a/src/d_net.cpp b/src/d_net.cpp index 3ee20b8b6..0af22bf7b 100644 --- a/src/d_net.cpp +++ b/src/d_net.cpp @@ -2353,9 +2353,10 @@ void Net_DoCommand (int type, BYTE **stream, int player) case DEM_CROUCH: if (gamestate == GS_LEVEL && players[player].mo != NULL && - players[player].health > 0 && !(players[player].oldbuttons & BT_JUMP)) + players[player].health > 0 && !(players[player].oldbuttons & BT_JUMP) && + !P_IsPlayerTotallyFrozen(&players[player])) { - players[player].crouching = players[player].crouchdir<0? 1 : -1; + players[player].crouching = players[player].crouchdir < 0 ? 1 : -1; } break; diff --git a/src/d_player.h b/src/d_player.h index abd463590..2b9c7b2f2 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -426,6 +426,8 @@ void P_CheckPlayerSprites(); #define CROUCHSPEED (FRACUNIT/12) +bool P_IsPlayerTotallyFrozen(const player_t *player); + // [GRB] Custom player classes enum { diff --git a/src/p_user.cpp b/src/p_user.cpp index 49495c19f..28250f9dd 100644 --- a/src/p_user.cpp +++ b/src/p_user.cpp @@ -2126,9 +2126,7 @@ void P_PlayerThink (player_t *player) player->mo->flags &= ~MF_JUSTATTACKED; } - bool totallyfrozen = (player->cheats & CF_TOTALLYFROZEN || gamestate == GS_TITLELEVEL || - (( level.flags2 & LEVEL2_FROZEN ) && ( player == NULL || !( player->cheats & CF_TIMEFREEZE ))) - ); + bool totallyfrozen = P_IsPlayerTotallyFrozen(player); // [RH] Being totally frozen zeros out most input parameters. if (totallyfrozen) @@ -2723,3 +2721,10 @@ void P_EnumPlayerColorSets(FName classname, TArray *out) } } +bool P_IsPlayerTotallyFrozen(const player_t *player) +{ + return + gamestate == GS_TITLELEVEL || + player->cheats & CF_TOTALLYFROZEN || + ((level.flags2 & LEVEL2_FROZEN) && !(player->cheats & CF_TIMEFREEZE)); +}