diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index e982400e330c4d7e6667d5ab6ae652ef01577c3d..d185efd8fcc16037eb8a805499dd28073e96e5e3 100755
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -5368,15 +5368,15 @@ static void RunSimulations()
 	for (int i = 0; i < numToSimulate; i++)
 	{
 		// // control other players (just use their previous control for now)
-		// here you can do all sorts of player predictions. we don't do any because, hey, we just use what we know already
+		// here you can do all sorts of player predictions.
 		// 
-		// for (int j = 0; j < MAXPLAYERS; j++)
-		// {
-		// 	if (playeringame[j] && j != consoleplayer)
-		// 		//simtic+1 это для херни со smoothedTic
-		// 		//use Memcpy or G_CopyTiccmd for that
-		// 		netcmds[gametic % BACKUPTICS][j] = gameTicBuffer[(min(simtic + 1, gametic) + MAXSIMULATIONS) % MAXSIMULATIONS][j];
-		// }
+		for (int j = 0; j < MAXPLAYERS; j++)
+		{
+			if (playeringame[j] && j != consoleplayer)
+				//simtic+1 это для херни со smoothedTic
+				//use Memcpy or G_CopyTiccmd for that
+				netcmds[gametic % BACKUPTICS][j] = gameTicBuffer[(min(simtic + 1, gametic) + MAXSIMULATIONS) % MAXSIMULATIONS][j];
+		}
 
 		// control the local player
 		if (simtic + i < gametic) // game is smoothed, take tics from the _actual_ received state
diff --git a/src/p_spec.c b/src/p_spec.c
index 0bb12cf585069b70d2a955eabdc5dcdbfc42477c..b583c9d169da21752c812f8d6ae149b734140cd7 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -7223,21 +7223,30 @@ void T_Scroll(scroll_t *s)
 		TAG_ITER_DECLARECOUNTER(0);
 
 		case sc_side: // scroll wall texture
-			side = sides + s->affectee;
-			side->textureoffset += dx;
-			side->rowoffset += dy;
+			if (!issimulation)
+			{
+				side = sides + s->affectee;
+				side->textureoffset += dx;
+				side->rowoffset += dy;
+			}
 			break;
 
 		case sc_floor: // scroll floor texture
-			sec = sectors + s->affectee;
-			sec->floor_xoffs += dx;
-			sec->floor_yoffs += dy;
+			if (!issimulation)
+			{
+				sec = sectors + s->affectee;
+				sec->floor_xoffs += dx;
+				sec->floor_yoffs += dy;
+			}
 			break;
 
 		case sc_ceiling: // scroll ceiling texture
-			sec = sectors + s->affectee;
-			sec->ceiling_xoffs += dx;
-			sec->ceiling_yoffs += dy;
+			if (!issimulation)
+			{
+				sec = sectors + s->affectee;
+				sec->ceiling_xoffs += dx;
+				sec->ceiling_yoffs += dy;
+			}
 			break;
 
 		case sc_carry:
diff --git a/src/p_user.c b/src/p_user.c
index 36ca5ee05b91a4ad8f120e63652ebdf28cfded66..1787422a065eddd354419c97df195ce07a6304d0 100755
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -3588,17 +3588,17 @@ static void P_DoClimbing(player_t *player)
 	}
 
 #define CLIMBCONEMAX FixedAngle(90*FRACUNIT)
-	if (!demoplayback || P_ControlStyle(player) == CS_LMAOGALOG)
-	{
-		if (canSimulate && (finaltargetsimtic == simtic) || !canSimulate)
-		{
-			angle_t angdiff = P_GetLocalAngle(player) - player->mo->angle;
-			if (angdiff < ANGLE_180 && angdiff > CLIMBCONEMAX)
-				P_SetLocalAngle(player, player->mo->angle + CLIMBCONEMAX);
-			else if (angdiff > ANGLE_180 && angdiff < InvAngle(CLIMBCONEMAX))
-				P_SetLocalAngle(player, player->mo->angle - CLIMBCONEMAX);
-		}
-	}
+	// if (!demoplayback || P_ControlStyle(player) == CS_LMAOGALOG)
+	// {
+	// 	if (canSimulate && (finaltargetsimtic == simtic) || !canSimulate)
+	// 	{
+	// 		angle_t angdiff = P_GetLocalAngle(player) - player->mo->angle;
+	// 		if (angdiff < ANGLE_180 && angdiff > CLIMBCONEMAX)
+	// 			P_SetLocalAngle(player, player->mo->angle + CLIMBCONEMAX);
+	// 		else if (angdiff > ANGLE_180 && angdiff < InvAngle(CLIMBCONEMAX))
+	// 			P_SetLocalAngle(player, player->mo->angle - CLIMBCONEMAX);
+	// 	}
+	// }
 
 	if (player->climbing == 0)
 		P_SetPlayerMobjState(player->mo, S_PLAY_JUMP);
@@ -12930,14 +12930,17 @@ void P_SetPlayerAngle(player_t *player, angle_t angle)
 
 void P_SetLocalAngle(player_t *player, angle_t angle)
 {
-	INT16 delta = (INT16)((angle - P_GetLocalAngle(player)) >> 16);
+	if (!issimulation)
+	{
+		INT16 delta = (INT16)((angle - P_GetLocalAngle(player)) >> 16);
 
-	P_ForceLocalAngle(player, P_GetLocalAngle(player) + (angle_t)(delta << 16));
+		P_ForceLocalAngle(player, P_GetLocalAngle(player) + (angle_t)(delta << 16));
 
-	if (player == &players[consoleplayer])
-		ticcmd_oldangleturn[0] += delta;
-	else if (player == &players[secondarydisplayplayer])
-		ticcmd_oldangleturn[1] += delta;
+		if (player == &players[consoleplayer])
+			ticcmd_oldangleturn[0] += delta;
+		else if (player == &players[secondarydisplayplayer])
+			ticcmd_oldangleturn[1] += delta;
+	}
 }
 
 angle_t P_GetLocalAngle(player_t *player)
@@ -12952,7 +12955,7 @@ angle_t P_GetLocalAngle(player_t *player)
 
 void P_ForceLocalAngle(player_t *player, angle_t angle)
 {
-	if (canSimulate && (finaltargetsimtic == simtic) || !canSimulate)
+	if (!issimulation)
 	{
 		angle = angle & ~UINT16_MAX;