diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 9c2e424ac..31c10f58a 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -374,6 +374,7 @@ consvar_t cv_sleep = CVAR_INIT ("cpusleep", "1", CV_SAVE, sleeping_cons_t, NULL) static CV_PossibleValue_t perfstats_cons_t[] = { {0, "Off"}, {1, "Rendering"}, {2, "Logic"}, {3, "ThinkFrame"}, {0, NULL}}; consvar_t cv_perfstats = CVAR_INIT ("perfstats", "Off", 0, perfstats_cons_t, NULL); +consvar_t cv_freedemocamera = CVAR_INIT("freedemocamera", "Off", CV_SAVE, CV_OnOff, NULL); char timedemo_name[256]; boolean timedemo_csv; @@ -876,6 +877,8 @@ void D_RegisterClientCommands(void) // CV_RegisterVar(&cv_grid); // CV_RegisterVar(&cv_snapto); + CV_RegisterVar(&cv_freedemocamera); + // add cheat commands COM_AddCommand("noclip", Command_CheatNoClip_f); COM_AddCommand("god", Command_CheatGod_f); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 82b82680d..98d8f1425 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -118,6 +118,8 @@ extern boolean timedemo_csv; extern char timedemo_csv_id[256]; extern boolean timedemo_quit; +extern consvar_t cv_freedemocamera; + typedef enum { XD_NAMEANDCOLOR = 1, diff --git a/src/p_tick.c b/src/p_tick.c index 451e5e626..da2a980c4 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -643,7 +643,15 @@ void P_Ticker(boolean run) if (demorecording) G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0); if (demoplayback) - G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0); + { + player_t* p = &players[consoleplayer]; + G_ReadDemoTiccmd(&p->cmd, 0); + if (!cv_freedemocamera.value) + { + P_ForceLocalAngle(p, p->cmd.angleturn << 16); + localaiming = p->aiming; + } + } ps_lua_mobjhooks = 0; ps_checkposition_calls = 0;