X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=cl_demo.c;h=ea10bff641738fdbcc909187d2d6e5a828c5a58b;hb=ffa2dfcb8f656bce0555cb4c2e08a4bc9315c4e9;hp=27959bf6a10836ced927f5cb4bfa9d462d6af59c;hpb=a1072a5ac30e4d2827b79c4a3469992e45ad389f;p=xonotic%2Fdarkplaces.git diff --git a/cl_demo.c b/cl_demo.c index 27959bf6..ea10bff6 100644 --- a/cl_demo.c +++ b/cl_demo.c @@ -127,7 +127,7 @@ Dumps the current demo to a buffer, and resets the demo to its starting point. Used to insert csprogs.dat files as a download to the beginning of a demo file. ==================== */ -void CL_CutDemo (void **buf, fs_offset_t *filesize) +void CL_CutDemo (unsigned char **buf, fs_offset_t *filesize) { *buf = NULL; *filesize = 0; @@ -136,7 +136,7 @@ void CL_CutDemo (void **buf, fs_offset_t *filesize) *buf = FS_LoadFile(cls.demoname, tempmempool, false, filesize); // restart the demo recording - cls.demofile = FS_Open(cls.demoname, "wb", false, false); + cls.demofile = FS_OpenRealFile(cls.demoname, "wb", false); if(!cls.demofile) Host_Error("failed to reopen the demo file"); FS_Printf(cls.demofile, "%i\n", cls.forcetrack); @@ -150,7 +150,7 @@ Adds the cut stuff back to the demo. Also frees the buffer. Used to insert csprogs.dat files as a download to the beginning of a demo file. ==================== */ -void CL_PasteDemo (void **buf, fs_offset_t *filesize) +void CL_PasteDemo (unsigned char **buf, fs_offset_t *filesize) { fs_offset_t startoffset = 0; @@ -179,7 +179,7 @@ Handles playback of demos */ void CL_ReadDemoMessage(void) { - int r, i; + int i; float f; if (!cls.demoplayback) @@ -251,7 +251,7 @@ void CL_ReadDemoMessage(void) VectorCopy(cl.mviewangles[0], cl.mviewangles[1]); for (i = 0;i < 3;i++) { - r = (int)FS_Read(cls.demofile, &f, 4); + FS_Read(cls.demofile, &f, 4); cl.mviewangles[0][i] = LittleFloat(f); } @@ -306,10 +306,16 @@ void CL_Stop_f (void) CL_WriteDemoMessage(&buf); // finish up + if(cl_autodemo.integer && (cl_autodemo_delete.integer & 1)) + { + FS_RemoveOnClose(cls.demofile); + Con_Print("Completed and deleted demo\n"); + } + else + Con_Print("Completed demo\n"); FS_Close (cls.demofile); cls.demofile = NULL; cls.demorecording = false; - Con_Print("Completed demo\n"); } /* @@ -365,7 +371,7 @@ void CL_Record_f (void) // open the demo file Con_Printf("recording to %s.\n", name); - cls.demofile = FS_Open (name, "wb", false, false); + cls.demofile = FS_OpenRealFile(name, "wb", false); if (!cls.demofile) { Con_Print("ERROR: couldn't open.\n"); @@ -377,6 +383,8 @@ void CL_Record_f (void) FS_Printf(cls.demofile, "%i\n", cls.forcetrack); cls.demorecording = true; + cls.demo_lastcsprogssize = -1; + cls.demo_lastcsprogscrc = -1; } @@ -412,7 +420,7 @@ void CL_PlayDemo_f (void) cls.protocol = PROTOCOL_QUAKE; Con_Printf("Playing demo %s.\n", name); - cls.demofile = FS_Open (name, "rb", false, false); + cls.demofile = FS_OpenVirtualFile(name, false); if (!cls.demofile) { Con_Print("ERROR: couldn't open.\n"); @@ -444,8 +452,10 @@ CL_FinishTimeDemo void CL_FinishTimeDemo (void) { int frames; + int i; double time, totalfpsavg; double fpsmin, fpsavg, fpsmax; // report min/avg/max fps + static int benchmark_runs = 0; cls.timedemo = false; @@ -457,9 +467,25 @@ void CL_FinishTimeDemo (void) fpsmax = cls.td_onesecondmaxfps; // LordHavoc: timedemo now prints out 7 digits of fraction, and min/avg/max Con_Printf("%i frames %5.7f seconds %5.7f fps, one-second fps min/avg/max: %.0f %.0f %.0f (%i seconds)\n", frames, time, totalfpsavg, fpsmin, fpsavg, fpsmax, cls.td_onesecondavgcount); - Log_Printf("benchmark.log", "date %s | enginedate %s | demo %s | commandline %s | result %i frames %5.7f seconds %5.7f fps, one-second fps min/avg/max: %.0f %.0f %.0f (%i seconds)\n", Sys_TimeString("%Y-%m-%d %H:%M:%S"), buildstring, cls.demoname, cmdline.string, frames, time, totalfpsavg, fpsmin, fpsavg, fpsmax, cls.td_onesecondavgcount); + Log_Printf("benchmark.log", "date %s | enginedate %s | demo %s | commandline %s | run %d | result %i frames %5.7f seconds %5.7f fps, one-second fps min/avg/max: %.0f %.0f %.0f (%i seconds)\n", Sys_TimeString("%Y-%m-%d %H:%M:%S"), buildstring, cls.demoname, cmdline.string, benchmark_runs + 1, frames, time, totalfpsavg, fpsmin, fpsavg, fpsmax, cls.td_onesecondavgcount); if (COM_CheckParm("-benchmark")) - Host_Quit_f(); + { + ++benchmark_runs; + i = COM_CheckParm("-benchmarkruns"); + if(i && i + 1 < com_argc) + { + if(atoi(com_argv[i + 1]) > benchmark_runs) + { + // restart the benchmark + Cbuf_AddText(va("timedemo %s\n", cls.demoname)); + // cannot execute here + } + else + Host_Quit_f(); + } + else + Host_Quit_f(); + } } /*