X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=cl_demo.c;h=b1f2e685716f0c1ff4b2a1bf4659c8194342899d;hb=777e442595347a668d06d54d9f9c784e83bf6a21;hp=f8fbe5b5b3ff65862093762106da16ddda50763f;hpb=775c0f6d056c37d2e23f9a96ec827023fe5e3404;p=xonotic%2Fdarkplaces.git diff --git a/cl_demo.c b/cl_demo.c index f8fbe5b5..b1f2e685 100644 --- a/cl_demo.c +++ b/cl_demo.c @@ -24,7 +24,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. extern cvar_t cl_capturevideo; extern cvar_t cl_capturevideo_demo_stop; #endif -int old_vsync = 0; static void CL_FinishTimeDemo (void); @@ -256,9 +255,8 @@ void CL_ReadDemoMessage(void) } if (cl_message.cursize > cl_message.maxsize) { - Con_Printf("Demo message (%i) > cl_message.maxsize (%i)", cl_message.cursize, cl_message.maxsize); + CL_DisconnectEx(false, "Demo message (%i) > cl_message.maxsize (%i)", cl_message.cursize, cl_message.maxsize); cl_message.cursize = 0; - CL_Disconnect(); return; } VectorCopy(cl.mviewangles[0], cl.mviewangles[1]); @@ -401,29 +399,15 @@ void CL_Record_f(cmd_state_t *cmd) cls.demo_lastcsprogscrc = -1; } - -/* -==================== -CL_PlayDemo_f - -playdemo [demoname] -==================== -*/ -void CL_PlayDemo_f(cmd_state_t *cmd) +void CL_PlayDemo(const char *demo) { - char name[MAX_QPATH]; + char name[MAX_QPATH]; int c; qbool neg = false; qfile_t *f; - if (Cmd_Argc(cmd) != 2) - { - Con_Print("playdemo : plays a demo\n"); - return; - } - // open the demo file - strlcpy (name, Cmd_Argv(cmd, 1), sizeof (name)); + strlcpy (name, demo, sizeof (name)); FS_DefaultExtension (name, ".dem", sizeof (name)); f = FS_OpenVirtualFile(name, false); if (!f) @@ -436,10 +420,7 @@ void CL_PlayDemo_f(cmd_state_t *cmd) cls.demostarting = true; // disconnect from server - if(cls.state == ca_connected) - CL_Disconnect(); - if(sv.active) - SV_Shutdown(); + CL_Disconnect(); // update networking ports (this is mainly just needed at startup) NetConn_UpdateSockets(); @@ -466,6 +447,24 @@ void CL_PlayDemo_f(cmd_state_t *cmd) cls.demostarting = false; } +/* +==================== +CL_PlayDemo_f + +playdemo [demoname] +==================== +*/ +void CL_PlayDemo_f(cmd_state_t *cmd) +{ + if (Cmd_Argc(cmd) != 2) + { + Con_Print("playdemo : plays a demo\n"); + return; + } + + CL_PlayDemo(Cmd_Argv(cmd, 1)); +} + typedef struct { int frames; @@ -586,6 +585,9 @@ static void CL_FinishTimeDemo (void) else host.state = host_shutdown; } + + // Might need to re-enable vsync + Cvar_Callback(&vid_vsync); } /* @@ -605,7 +607,7 @@ void CL_TimeDemo_f(cmd_state_t *cmd) srand(0); // predictable random sequence for benchmarking - CL_PlayDemo_f (cmd); + CL_PlayDemo(Cmd_Argv(cmd, 1)); // cls.td_starttime will be grabbed at the second frame of the demo, so // all the loading time doesn't get counted @@ -618,6 +620,9 @@ void CL_TimeDemo_f(cmd_state_t *cmd) cls.timedemo = host.restless = true; cls.td_frames = -2; // skip the first frame cls.demonum = -1; // stop demo loop + + // Might need to disable vsync + Cvar_Callback(&vid_vsync); } /* @@ -679,8 +684,8 @@ static void CL_Demos_f(cmd_state_t *cmd) return; if (cls.demonum == -1) cls.demonum = 1; - CL_Disconnect_f (cmd); - CL_NextDemo (); + CL_Disconnect(); + CL_NextDemo(); } /*