}
}
+ /* At signon 1 the cl_begindownloads command starts the world and, if applicable,
+ * boots up CSQC which may be required to parse the next message.
+ * That will be delayed if curl must first (down)load the map.
+ */
+ if (cls.signon == 1 && cl.loadcsqc) // waiting for CL_VM_Init() to be called
+ return;
+
// get the next message
FS_Read(cls.demofile, &cl_message.cursize, 4);
cl_message.cursize = LittleLong(cl_message.cursize);
// (so that the server can see the player name while downloading)
CL_SendPlayerInfo();
- // execute cl_begindownloads next frame
- // (after any commands added by svc_stufftext have been executed)
- // when done with downloads the "prespawn" will be sent
- Cbuf_AddText(cmd_local, "\ncl_begindownloads\n");
-
//MSG_WriteByte (&cls.netcon->message, clc_stringcmd);
//MSG_WriteString (&cls.netcon->message, "prespawn");
}
- else // playing a demo... make sure loading occurs as soon as possible
- CL_BeginDownloads(false);
+ // execute cl_begindownloads next frame
+ // (after any commands added by svc_stufftext have been executed)
+ // when done with downloads the "prespawn" will be sent
+ Cbuf_AddText(cmd_local, "\ncl_begindownloads\n");
break;
case 2:
return;
}
- if(cls.demoplayback)
- if(!strncmp(msg, "curl --clear_autodownload\ncurl --pak --forthismap --as ", 55))
- {
- // special handling for map download commands
- // run these commands IMMEDIATELY, instead of waiting for a client frame
- // that way, there is no black screen when playing back demos
- // I know this is a really ugly hack, but I can't think of any better way
- // FIXME find the actual CAUSE of this, and make demo playback WAIT
- // until all maps are loaded, then remove this hack
-
- char buf[MAX_INPUTLINE];
- const char *p, *q;
- size_t l;
-
- p = msg;
-
- for(;;)
- {
- q = strchr(p, '\n');
- if(q)
- l = q - p;
- else
- l = strlen(p);
- if(l > sizeof(buf) - 1)
- l = sizeof(buf) - 1;
- strlcpy(buf, p, l + 1); // strlcpy needs a + 1 as it includes the newline!
-
- Cmd_ExecuteString(cmd_local, buf, src_local, true);
-
- p += l;
- if(*p == '\n')
- ++p; // skip the newline and continue
- else
- break; // end of string or overflow
- }
- Cmd_ExecuteString(cmd_local, "curl --clear_autodownload", src_local, true); // don't inhibit CSQC loading
- return;
- }
-
if(!cl.csqc_loaded)
{
Cbuf_AddText(cmd_local, msg);