X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=cl_demo.c;h=831973dc58cfde3c32486e7890cbd61c9e0f2aed;hb=9ee2ac5e28d3f9dbfa67df6bf3e46354bad72995;hp=aaca270442332edf6bc04cfaecbada62f42e039c;hpb=8dcce44300385b12c46d494c06aadcfa35a8bc14;p=xonotic%2Fdarkplaces.git diff --git a/cl_demo.c b/cl_demo.c index aaca2704..831973dc 100644 --- a/cl_demo.c +++ b/cl_demo.c @@ -35,6 +35,36 @@ read from the demo file. ============================================================================== */ +/* +===================== +CL_NextDemo + +Called to play the next demo in the demo loop +===================== +*/ +void CL_NextDemo (void) +{ + char str[1024]; + + if (cls.demonum == -1) + return; // don't play demos + + if (!cls.demos[cls.demonum][0] || cls.demonum == MAX_DEMOS) + { + cls.demonum = 0; + if (!cls.demos[cls.demonum][0]) + { + Con_Printf ("No demos listed with startdemos\n"); + cls.demonum = -1; + return; + } + } + + sprintf (str,"playdemo %s\n", cls.demos[cls.demonum]); + Cbuf_InsertText (str); + cls.demonum++; +} + /* ============== CL_StopPlayback @@ -42,15 +72,15 @@ CL_StopPlayback Called when a demo file runs out, or the user starts a game ============== */ +// LordHavoc: now called only by CL_Disconnect void CL_StopPlayback (void) { if (!cls.demoplayback) return; - fclose (cls.demofile); + Qclose (cls.demofile); cls.demoplayback = false; cls.demofile = NULL; - cls.state = ca_disconnected; if (cls.timedemo) CL_FinishTimeDemo (); @@ -73,14 +103,14 @@ void CL_WriteDemoMessage (void) return; len = LittleLong (net_message.cursize); - fwrite (&len, 4, 1, cls.demofile); + Qwrite (cls.demofile, &len, 4); for (i=0 ; i<3 ; i++) { f = LittleFloat (cl.viewangles[i]); - fwrite (&f, 4, 1, cls.demofile); + Qwrite (cls.demofile, &f, 4); } - fwrite (net_message.data, net_message.cursize, 1, cls.demofile); - fflush (cls.demofile); + Qwrite (cls.demofile, net_message.data, net_message.cursize); + Qflush (cls.demofile); } /* @@ -101,40 +131,40 @@ int CL_GetMessage (void) return 0; // decide if it is time to grab the next message - if (cls.signon == SIGNONS) // allways grab until fully connected + if (cls.signon == SIGNONS) // always grab until fully connected { if (cls.timedemo) { if (host_framecount == cls.td_lastframe) - return 0; // allready read this frame's message + return 0; // already read this frame's message cls.td_lastframe = host_framecount; // if this is the second frame, grab the real td_starttime // so the bogus time on the first frame doesn't count if (host_framecount == cls.td_startframe + 1) cls.td_starttime = realtime; } - else if ( /* cl.time > 0 && */ cl.time <= cl.mtime[0]) + else if (cl.time <= cl.mtime[0]) { return 0; // don't need another message yet } } // get the next message - fread (&net_message.cursize, 4, 1, cls.demofile); + Qread (cls.demofile, &net_message.cursize, 4); VectorCopy (cl.mviewangles[0], cl.mviewangles[1]); for (i=0 ; i<3 ; i++) { - r = fread (&f, 4, 1, cls.demofile); + r = Qread (cls.demofile, &f, 4); cl.mviewangles[0][i] = LittleFloat (f); } net_message.cursize = LittleLong (net_message.cursize); - if (net_message.cursize > MAX_MSGLEN) - Sys_Error ("Demo message > MAX_MSGLEN"); - r = fread (net_message.data, net_message.cursize, 1, cls.demofile); - if (r != 1) + if (net_message.cursize > MAX_DATAGRAM) + Host_Error ("Demo message > MAX_DATAGRAM"); + r = Qread (cls.demofile, net_message.data, net_message.cursize); + if (r != net_message.cursize) { - CL_StopPlayback (); + CL_Disconnect (); return 0; } @@ -186,7 +216,7 @@ void CL_Stop_f (void) CL_WriteDemoMessage (); // finish up - fclose (cls.demofile); + Qclose (cls.demofile); cls.demofile = NULL; cls.demorecording = false; Con_Printf ("Completed demo\n"); @@ -250,7 +280,7 @@ void CL_Record_f (void) COM_DefaultExtension (name, ".dem"); Con_Printf ("recording to %s.\n", name); - cls.demofile = fopen (name, "wb"); + cls.demofile = Qopen (name, "wb"); if (!cls.demofile) { Con_Printf ("ERROR: couldn't open.\n"); @@ -258,8 +288,8 @@ void CL_Record_f (void) } cls.forcetrack = track; - fprintf (cls.demofile, "%i\n", cls.forcetrack); - + Qprintf (cls.demofile, "%i\n", cls.forcetrack); + cls.demorecording = true; } @@ -290,7 +320,7 @@ void CL_PlayDemo_f (void) // disconnect from server // CL_Disconnect (); - + // // open the demo file // @@ -298,7 +328,7 @@ void CL_PlayDemo_f (void) COM_DefaultExtension (name, ".dem"); Con_Printf ("Playing demo from %s.\n", name); - COM_FOpenFile (name, &cls.demofile, false); + COM_FOpenFile (name, &cls.demofile, false, true); if (!cls.demofile) { Con_Printf ("ERROR: couldn't open.\n"); @@ -306,11 +336,13 @@ void CL_PlayDemo_f (void) return; } + SCR_BeginLoadingPlaque (); + cls.demoplayback = true; cls.state = ca_connected; cls.forcetrack = 0; - while ((c = getc(cls.demofile)) != '\n') + while ((c = Qgetc(cls.demofile)) != '\n') if (c == '-') neg = true; else @@ -318,8 +350,6 @@ void CL_PlayDemo_f (void) if (neg) cls.forcetrack = -cls.forcetrack; -// ZOID, fscanf is evil -// fscanf (cls.demofile, "%i\n", &cls.forcetrack); } /* @@ -363,10 +393,16 @@ void CL_TimeDemo_f (void) } CL_PlayDemo_f (); - + // cls.td_starttime will be grabbed at the second frame of the demo, so // all the loading time doesn't get counted - + + // instantly hide console and deactivate it + key_dest = key_game; + key_consoleactive = 0; + scr_conlines = 0; + scr_con_current = 0; + cls.timedemo = true; cls.td_startframe = host_framecount; cls.td_lastframe = -1; // get a new message this frame