mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-25 22:10:59 +00:00
Hack in support for q2pro filelists.
r1q2 places the global filelist at /.filelist, q2pro at /gamedir/.filelist... Now I'm feeling even more dirty.
This commit is contained in:
parent
67b1a8fd95
commit
900d35ef27
3 changed files with 39 additions and 16 deletions
|
@ -42,6 +42,19 @@ extern byte *precache_model;
|
|||
// Forces all downloads to UDP.
|
||||
qboolean forceudp = false;
|
||||
|
||||
/* This - and some more code downn below - are the 'Crazy Fallback
|
||||
Magic'. First we're trying to download all files over HTTP with
|
||||
r1q2-style URLs. If we encountered errors we reset the complete
|
||||
precacher state and retry with HTTP and q2pro-style URLs. If we
|
||||
still got errors we're falling back to UDP. So:
|
||||
- 0: Virgin state, r1q2-style URLs.
|
||||
- 1: Second iteration, q2pro-style URL.
|
||||
- 3: Third iteration, UDP downloads. */
|
||||
static unsigned int precacherIteration;
|
||||
|
||||
// r1q2 searches the global filelist at /, q2pro at /gamedir...
|
||||
static qboolean gamedirForFilelist = false;
|
||||
|
||||
static const char *env_suf[6] = {"rt", "bk", "lf", "ft", "up", "dn"};
|
||||
|
||||
#define PLAYER_MULT 5
|
||||
|
@ -57,16 +70,6 @@ CL_RequestNextDownload(void)
|
|||
char fn[MAX_OSPATH];
|
||||
dmdl_t *pheader;
|
||||
|
||||
/* This - and some more code downn below - are the 'Crazy Fallback
|
||||
Magic'. First we're trying to download all files over HTTP with
|
||||
r1q2-style URLs. If we encountered errors we reset the complete
|
||||
precacher state and retry with HTTP and q2pro-style URLs. If we
|
||||
still got errors we're falling back to UDP. So:
|
||||
- 0: Virgin state, r1q2-style URLs.
|
||||
- 1: Second iteration, q2pro-style URL.
|
||||
- 3: Third iteration, UDP downloads. */
|
||||
static unsigned int precacherIteration;
|
||||
|
||||
if (precacherIteration == 0)
|
||||
{
|
||||
#if USE_CURL
|
||||
|
@ -86,6 +89,10 @@ CL_RequestNextDownload(void)
|
|||
{
|
||||
CL_HTTP_SetDownloadGamedir(cl.gamedir);
|
||||
}
|
||||
|
||||
// Force another try with the filelist.
|
||||
CL_HTTP_EnableGenericFilelist();
|
||||
gamedirForFilelist = true;
|
||||
#endif
|
||||
}
|
||||
else if (precacherIteration == 2)
|
||||
|
@ -496,6 +503,7 @@ CL_RequestNextDownload(void)
|
|||
/* This map is done, start over for next map. */
|
||||
forceudp = false;
|
||||
precacherIteration = 0;
|
||||
gamedirForFilelist = false;
|
||||
|
||||
CL_HTTP_EnableGenericFilelist();
|
||||
CL_RegisterSounds();
|
||||
|
@ -552,7 +560,7 @@ CL_CheckOrDownloadFile(char *filename)
|
|||
#ifdef USE_CURL
|
||||
if (!forceudp)
|
||||
{
|
||||
if (CL_QueueHTTPDownload(filename))
|
||||
if (CL_QueueHTTPDownload(filename, gamedirForFilelist))
|
||||
{
|
||||
/* We return true so that the precache check
|
||||
keeps feeding us more files. Since we have
|
||||
|
@ -573,6 +581,11 @@ CL_CheckOrDownloadFile(char *filename)
|
|||
downloads and CL_QueueHTTPDownload() returns
|
||||
false. */
|
||||
forceudp = false;
|
||||
|
||||
/* We might be connected to an r1q2-style HTTP server
|
||||
that missed just one file. So reset the precacher
|
||||
iteration counter to start over. */
|
||||
precacherIteration = 0;
|
||||
}
|
||||
#endif
|
||||
strcpy(cls.downloadname, filename);
|
||||
|
|
|
@ -422,7 +422,7 @@ static void CL_CheckAndQueueDownload(char *path)
|
|||
if (!exists)
|
||||
{
|
||||
// Queue the file for download.
|
||||
CL_QueueHTTPDownload(path);
|
||||
CL_QueueHTTPDownload(path, false);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -994,7 +994,7 @@ void CL_CancelHTTPDownloads(qboolean permKill)
|
|||
* for the requested files are possible. Queues the download
|
||||
* and returns true if yes, returns fales if not.
|
||||
*/
|
||||
qboolean CL_QueueHTTPDownload(const char *quakePath)
|
||||
qboolean CL_QueueHTTPDownload(const char *quakePath, qboolean gamedirForFilelist)
|
||||
{
|
||||
// Not HTTP servers were send by the server, HTTP is disabled
|
||||
// or the client is shutting down and we're wrapping up.
|
||||
|
@ -1037,7 +1037,17 @@ qboolean CL_QueueHTTPDownload(const char *quakePath)
|
|||
// Let's download the generic filelist if necessary.
|
||||
if (needList)
|
||||
{
|
||||
CL_QueueHTTPDownload("/.filelist");
|
||||
if (gamedirForFilelist)
|
||||
{
|
||||
char fileList[MAX_OSPATH];
|
||||
|
||||
Com_sprintf(fileList, sizeof(fileList), "/%s/%s", downloadGamedir, ".filelist");
|
||||
CL_QueueHTTPDownload(fileList, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
CL_QueueHTTPDownload("/.filelist", false);
|
||||
}
|
||||
}
|
||||
|
||||
// If we just queued a .bsp file ask for it's map
|
||||
|
@ -1065,7 +1075,7 @@ qboolean CL_QueueHTTPDownload(const char *quakePath)
|
|||
COM_StripExtension (filePath, listPath);
|
||||
Q_strlcat(listPath, ".filelist", sizeof(listPath));
|
||||
|
||||
CL_QueueHTTPDownload(listPath);
|
||||
CL_QueueHTTPDownload(listPath, false);
|
||||
}
|
||||
|
||||
// If we're here CL_FinishHTTPDownload() is guaranteed to be called.
|
||||
|
|
|
@ -67,7 +67,7 @@ extern cvar_t *cl_http_max_connections;
|
|||
|
||||
void CL_CancelHTTPDownloads(qboolean permKill);
|
||||
void CL_InitHTTPDownloads(void);
|
||||
qboolean CL_QueueHTTPDownload(const char *quakePath);
|
||||
qboolean CL_QueueHTTPDownload(const char *quakePath, qboolean gamedirForFilelist);
|
||||
void CL_RunHTTPDownloads(void);
|
||||
qboolean CL_PendingHTTPDownloads(void);
|
||||
void CL_SetHTTPServer(const char *URL);
|
||||
|
|
Loading…
Reference in a new issue