==============================================================================
*/
+/*
+=====================
+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
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 ();
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);
}
/*
}
// 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)
Host_Error ("Demo message > MAX_MSGLEN");
- r = fread (net_message.data, net_message.cursize, 1, cls.demofile);
- if (r != 1)
+ r = Qread (cls.demofile, net_message.data, net_message.cursize);
+ if (r != net_message.cursize)
{
- CL_StopPlayback ();
+ CL_Disconnect ();
return 0;
}
CL_WriteDemoMessage ();
// finish up
- fclose (cls.demofile);
+ Qclose (cls.demofile);
cls.demofile = NULL;
cls.demorecording = false;
Con_Printf ("Completed demo\n");
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");
}
cls.forcetrack = track;
- fprintf (cls.demofile, "%i\n", cls.forcetrack);
-
+ Qprintf (cls.demofile, "%i\n", cls.forcetrack);
+
cls.demorecording = true;
}
return;
}
-// SCR_BeginLoadingPlaque();
-
//
// disconnect from server
//
CL_Disconnect ();
-
+
//
// open the demo file
//
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");
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
cls.forcetrack = -cls.forcetrack;
// ZOID, fscanf is evil
// fscanf (cls.demofile, "%i\n", &cls.forcetrack);
+
}
/*
}
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;
+ 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