mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-02-02 22:11:22 +00:00
moved Host_Game_f to common.c, made it to use COM_AddGameDirectory(). moved in-memory pak structures, searchpatch structure and searchpath global declarations to common.h. adjusted affected extra patches.
git-svn-id: svn://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm@1003 af15c1b1-3010-417e-b628-4374ebc0bcbd
This commit is contained in:
parent
dc4799f48a
commit
717b452da0
5 changed files with 121 additions and 249 deletions
|
@ -4,9 +4,9 @@ might not be compatible with the homedir patch yet -- O.S.
|
|||
|
||||
Index: Quake/common.c
|
||||
===================================================================
|
||||
--- Quake/common.c (revision 998)
|
||||
--- Quake/common.c (revision 1003)
|
||||
+++ Quake/common.c (working copy)
|
||||
@@ -1926,13 +1926,6 @@ static void COM_AddGameDirectory (const
|
||||
@@ -1898,13 +1898,6 @@ static void COM_AddGameDirectory (const
|
||||
path_id = com_searchpaths->path_id << 1;
|
||||
else path_id = 1U;
|
||||
|
||||
|
@ -20,7 +20,7 @@ Index: Quake/common.c
|
|||
// add any pak files in the format pak0.pak pak1.pak, ...
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
@@ -1962,6 +1955,13 @@ static void COM_AddGameDirectory (const
|
||||
@@ -1934,6 +1927,13 @@ static void COM_AddGameDirectory (const
|
||||
}
|
||||
if (!pak) break;
|
||||
}
|
||||
|
@ -33,35 +33,4 @@ Index: Quake/common.c
|
|||
+ com_searchpaths = search;
|
||||
}
|
||||
|
||||
/*
|
||||
Index: Quake/host_cmd.c
|
||||
===================================================================
|
||||
--- Quake/host_cmd.c (revision 998)
|
||||
+++ Quake/host_cmd.c (working copy)
|
||||
@@ -153,11 +153,6 @@ void Host_Game_f (void)
|
||||
if (com_searchpaths)
|
||||
path_id = com_searchpaths->path_id << 1;
|
||||
else path_id = 1U;
|
||||
- search = (searchpath_t *) Z_Malloc(sizeof(searchpath_t));
|
||||
- search->path_id = path_id;
|
||||
- q_strlcpy (search->filename, com_gamedir, sizeof(search->filename));
|
||||
- search->next = com_searchpaths;
|
||||
- com_searchpaths = search;
|
||||
|
||||
//Load the paks if any are found:
|
||||
for (i = 0; ; i++)
|
||||
@@ -172,6 +167,13 @@ void Host_Game_f (void)
|
||||
search->next = com_searchpaths;
|
||||
com_searchpaths = search;
|
||||
}
|
||||
+
|
||||
+ // moved here from before the pakX.pak loop -- svdijk
|
||||
+ search = (searchpath_t *) Z_Malloc(sizeof(searchpath_t));
|
||||
+ search->path_id = path_id;
|
||||
+ q_strlcpy (search->filename, com_gamedir, sizeof(search->filename));
|
||||
+ search->next = com_searchpaths;
|
||||
+ com_searchpaths = search;
|
||||
}
|
||||
|
||||
//clear out and reload appropriate data
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
@ -4,7 +4,7 @@ initial support for user directories, based on uhexen2 and tyrquake.
|
|||
|
||||
Index: Quake/sys_sdl_unix.c
|
||||
===================================================================
|
||||
--- Quake/sys_sdl_unix.c (revision 998)
|
||||
--- Quake/sys_sdl_unix.c (revision 1003)
|
||||
+++ Quake/sys_sdl_unix.c (working copy)
|
||||
@@ -20,6 +20,8 @@
|
||||
|
||||
|
@ -72,9 +72,9 @@ Index: Quake/sys_sdl_unix.c
|
|||
void Sys_mkdir (const char *path)
|
||||
Index: Quake/common.c
|
||||
===================================================================
|
||||
--- Quake/common.c (revision 998)
|
||||
--- Quake/common.c (revision 1003)
|
||||
+++ Quake/common.c (working copy)
|
||||
@@ -1918,6 +1918,7 @@ static void COM_AddGameDirectory (const
|
||||
@@ -1890,6 +1890,7 @@ static void COM_AddGameDirectory (const
|
||||
searchpath_t *search;
|
||||
pack_t *pak, *qspak;
|
||||
char pakfile[MAX_OSPATH];
|
||||
|
@ -82,7 +82,7 @@ Index: Quake/common.c
|
|||
|
||||
q_strlcpy (com_gamedir, va("%s/%s", base, dir), sizeof(com_gamedir));
|
||||
|
||||
@@ -1926,6 +1927,7 @@ static void COM_AddGameDirectory (const
|
||||
@@ -1898,6 +1899,7 @@ static void COM_AddGameDirectory (const
|
||||
path_id = com_searchpaths->path_id << 1;
|
||||
else path_id = 1U;
|
||||
|
||||
|
@ -90,7 +90,7 @@ Index: Quake/common.c
|
|||
// add the directory to the search path
|
||||
search = (searchpath_t *) Z_Malloc(sizeof(searchpath_t));
|
||||
search->path_id = path_id;
|
||||
@@ -1942,6 +1944,7 @@ static void COM_AddGameDirectory (const
|
||||
@@ -1914,6 +1916,7 @@ static void COM_AddGameDirectory (const
|
||||
qspak = NULL;
|
||||
else {
|
||||
qboolean old = com_modified;
|
||||
|
@ -98,7 +98,7 @@ Index: Quake/common.c
|
|||
q_snprintf (pakfile, sizeof(pakfile), "%s/quakespasm.pak", base);
|
||||
qspak = COM_LoadPackFile (pakfile);
|
||||
com_modified = old;
|
||||
@@ -1962,6 +1965,14 @@ static void COM_AddGameDirectory (const
|
||||
@@ -1934,6 +1937,14 @@ static void COM_AddGameDirectory (const
|
||||
}
|
||||
if (!pak) break;
|
||||
}
|
||||
|
@ -112,36 +112,5 @@ Index: Quake/common.c
|
|||
+ }
|
||||
}
|
||||
|
||||
/*
|
||||
Index: Quake/host_cmd.c
|
||||
===================================================================
|
||||
--- Quake/host_cmd.c (revision 998)
|
||||
+++ Quake/host_cmd.c (working copy)
|
||||
@@ -149,10 +149,12 @@ void Host_Game_f (void)
|
||||
//==============================================================================
|
||||
|
||||
if (q_strcasecmp(p, GAMENAME)) //game is not id1
|
||||
{
|
||||
+ qboolean been_here = false;
|
||||
// assign a path_id to this game directory
|
||||
if (com_searchpaths)
|
||||
path_id = com_searchpaths->path_id << 1;
|
||||
else path_id = 1U;
|
||||
+ _add_path:
|
||||
search = (searchpath_t *) Z_Malloc(sizeof(searchpath_t));
|
||||
search->path_id = path_id;
|
||||
q_strlcpy (search->filename, com_gamedir, sizeof(search->filename));
|
||||
@@ -172,6 +174,14 @@ void Host_Game_f (void)
|
||||
search->next = com_searchpaths;
|
||||
com_searchpaths = search;
|
||||
}
|
||||
+
|
||||
+ if (!been_here && host_parms->userdir != host_parms->basedir)
|
||||
+ {
|
||||
+ been_here = true;
|
||||
+ q_strlcpy(com_gamedir, va("%s/%s", host_parms->userdir, p), sizeof(com_gamedir));
|
||||
+ Sys_mkdir(com_gamedir);
|
||||
+ goto _add_path;
|
||||
+ }
|
||||
}
|
||||
|
||||
//clear out and reload appropriate data
|
||||
|
|
113
Quake/common.c
113
Quake/common.c
|
@ -32,7 +32,7 @@ int safemode;
|
|||
cvar_t registered = {"registered","1",CVAR_ROM}; /* set to correct value in COM_CheckRegistered() */
|
||||
cvar_t cmdline = {"cmdline","",CVAR_ROM/*|CVAR_SERVERINFO*/}; /* sending cmdline upon CCREQ_RULE_INFO is evil */
|
||||
|
||||
qboolean com_modified; // set true if using non-id files
|
||||
static qboolean com_modified; // set true if using non-id files
|
||||
|
||||
qboolean fitzmode;
|
||||
|
||||
|
@ -1414,25 +1414,7 @@ int com_filesize;
|
|||
|
||||
|
||||
//
|
||||
// in memory
|
||||
//
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[MAX_QPATH];
|
||||
int filepos, filelen;
|
||||
} packfile_t;
|
||||
|
||||
typedef struct pack_s
|
||||
{
|
||||
char filename[MAX_OSPATH];
|
||||
int handle;
|
||||
int numfiles;
|
||||
packfile_t *files;
|
||||
} pack_t;
|
||||
|
||||
//
|
||||
// on disk
|
||||
// on-disk pakfile
|
||||
//
|
||||
typedef struct
|
||||
{
|
||||
|
@ -1453,16 +1435,6 @@ char com_gamedir[MAX_OSPATH];
|
|||
char com_basedir[MAX_OSPATH];
|
||||
int file_from_pak; // ZOID: global indicating that file came from a pak
|
||||
|
||||
typedef struct searchpath_s
|
||||
{
|
||||
unsigned int path_id; // identifier assigned to the game directory
|
||||
// Note that <install_dir>/game1 and
|
||||
// <userdir>/game1 have the same id.
|
||||
char filename[MAX_OSPATH];
|
||||
pack_t *pack; // only one of filename / pack will be used
|
||||
struct searchpath_s *next;
|
||||
} searchpath_t;
|
||||
|
||||
searchpath_t *com_searchpaths;
|
||||
searchpath_t *com_base_searchpaths;
|
||||
|
||||
|
@ -1842,7 +1814,7 @@ Loads the header and directory, adding the files at the beginning
|
|||
of the list so they override previous pack files.
|
||||
=================
|
||||
*/
|
||||
pack_t *COM_LoadPackFile (const char *packfile)
|
||||
static pack_t *COM_LoadPackFile (const char *packfile)
|
||||
{
|
||||
dpackheader_t header;
|
||||
int i;
|
||||
|
@ -1964,6 +1936,79 @@ static void COM_AddGameDirectory (const char *base, const char *dir)
|
|||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
//johnfitz -- dynamic gamedir stuff -- modified by QuakeSpasm team.
|
||||
//==============================================================================
|
||||
void ExtraMaps_NewGame (void);
|
||||
static void COM_Game_f (void)
|
||||
{
|
||||
if (Cmd_Argc() > 1)
|
||||
{
|
||||
const char *p = Cmd_Argv(1);
|
||||
searchpath_t *search;
|
||||
|
||||
if (!registered.value) //disable shareware quake
|
||||
{
|
||||
Con_Printf("You must have the registered version to use modified games\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!strcmp(p, ".") || strstr(p, "..") || strstr(p, "/") || strstr(p, "\\") || strstr(p, ":"))
|
||||
{
|
||||
Con_Printf ("gamedir should be a single directory name, not a path\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!q_strcasecmp(p, COM_SkipPath(com_gamedir))) //no change
|
||||
{
|
||||
Con_Printf("\"game\" is already \"%s\"\n", COM_SkipPath(com_gamedir));
|
||||
return;
|
||||
}
|
||||
|
||||
com_modified = true;
|
||||
|
||||
//Kill the server
|
||||
CL_Disconnect ();
|
||||
Host_ShutdownServer(true);
|
||||
|
||||
//Write config file
|
||||
Host_WriteConfiguration ();
|
||||
|
||||
//Kill the extra game if it is loaded
|
||||
while (com_searchpaths != com_base_searchpaths)
|
||||
{
|
||||
if (com_searchpaths->pack)
|
||||
{
|
||||
Sys_FileClose (com_searchpaths->pack->handle);
|
||||
Z_Free (com_searchpaths->pack->files);
|
||||
Z_Free (com_searchpaths->pack);
|
||||
}
|
||||
search = com_searchpaths->next;
|
||||
Z_Free (com_searchpaths);
|
||||
com_searchpaths = search;
|
||||
}
|
||||
|
||||
if (q_strcasecmp(p, GAMENAME)) //game is not id1
|
||||
COM_AddGameDirectory (com_basedir, p);
|
||||
|
||||
//clear out and reload appropriate data
|
||||
Cache_Flush ();
|
||||
Mod_ResetAll();
|
||||
if (!isDedicated)
|
||||
{
|
||||
TexMgr_NewGame ();
|
||||
Draw_NewGame ();
|
||||
R_NewGame ();
|
||||
}
|
||||
ExtraMaps_NewGame ();
|
||||
//Cbuf_InsertText ("exec quake.rc\n");
|
||||
|
||||
Con_Printf("\"game\" changed to \"%s\"\n", COM_SkipPath(com_gamedir));
|
||||
}
|
||||
else //Diplay the current gamedir
|
||||
Con_Printf("\"game\" is \"%s\"\n", COM_SkipPath(com_gamedir));
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
COM_InitFilesystem
|
||||
|
@ -1976,6 +2021,7 @@ void COM_InitFilesystem (void) //johnfitz -- modified based on topaz's tutorial
|
|||
Cvar_RegisterVariable (®istered);
|
||||
Cvar_RegisterVariable (&cmdline);
|
||||
Cmd_AddCommand ("path", COM_Path_f);
|
||||
Cmd_AddCommand ("game", COM_Game_f); //johnfitz
|
||||
|
||||
i = COM_CheckParm ("-basedir");
|
||||
if (i && i < com_argc-1)
|
||||
|
@ -2011,8 +2057,11 @@ void COM_InitFilesystem (void) //johnfitz -- modified based on topaz's tutorial
|
|||
i = COM_CheckParm ("-game");
|
||||
if (i && i < com_argc-1)
|
||||
{
|
||||
const char *p = com_argv[i + 1];
|
||||
if (!strcmp(p, ".") || strstr(p, "..") || strstr(p, "/") || strstr(p, "\\") || strstr(p, ":"))
|
||||
Sys_Error ("gamedir should be a single directory name, not a path\n");
|
||||
com_modified = true;
|
||||
COM_AddGameDirectory (com_basedir, com_argv[i + 1]);
|
||||
COM_AddGameDirectory (com_basedir, p);
|
||||
}
|
||||
|
||||
COM_CheckRegistered ();
|
||||
|
|
|
@ -190,6 +190,34 @@ char *va (const char *format, ...) __attribute__((__format__(__printf__,1,2)));
|
|||
|
||||
//============================================================================
|
||||
|
||||
// QUAKEFS
|
||||
typedef struct
|
||||
{
|
||||
char name[MAX_QPATH];
|
||||
int filepos, filelen;
|
||||
} packfile_t;
|
||||
|
||||
typedef struct pack_s
|
||||
{
|
||||
char filename[MAX_OSPATH];
|
||||
int handle;
|
||||
int numfiles;
|
||||
packfile_t *files;
|
||||
} pack_t;
|
||||
|
||||
typedef struct searchpath_s
|
||||
{
|
||||
unsigned int path_id; // identifier assigned to the game directory
|
||||
// Note that <install_dir>/game1 and
|
||||
// <userdir>/game1 have the same id.
|
||||
char filename[MAX_OSPATH];
|
||||
pack_t *pack; // only one of filename / pack will be used
|
||||
struct searchpath_s *next;
|
||||
} searchpath_t;
|
||||
|
||||
extern searchpath_t *com_searchpaths;
|
||||
extern searchpath_t *com_base_searchpaths;
|
||||
|
||||
extern int com_filesize;
|
||||
struct cache_user_s;
|
||||
|
||||
|
|
143
Quake/host_cmd.c
143
Quake/host_cmd.c
|
@ -50,148 +50,6 @@ void Host_Quit_f (void)
|
|||
Sys_Quit ();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
//johnfitz -- dynamic gamedir stuff
|
||||
//==============================================================================
|
||||
|
||||
// Declarations shared with common.c:
|
||||
// FIXME: **** CLEAN THIS MESS!!! ***
|
||||
typedef struct
|
||||
{
|
||||
char name[MAX_QPATH];
|
||||
int filepos, filelen;
|
||||
} packfile_t;
|
||||
|
||||
typedef struct pack_s
|
||||
{
|
||||
char filename[MAX_OSPATH];
|
||||
int handle;
|
||||
int numfiles;
|
||||
packfile_t *files;
|
||||
} pack_t;
|
||||
|
||||
typedef struct searchpath_s
|
||||
{
|
||||
unsigned int path_id; // identifier assigned to the game directory
|
||||
// Note that <install_dir>/game1 and
|
||||
// <userdir>/game1 have the same id.
|
||||
char filename[MAX_OSPATH];
|
||||
pack_t *pack; // only one of filename / pack will be used
|
||||
struct searchpath_s *next;
|
||||
} searchpath_t;
|
||||
|
||||
extern qboolean com_modified;
|
||||
extern searchpath_t *com_searchpaths;
|
||||
extern searchpath_t *com_base_searchpaths;
|
||||
pack_t *COM_LoadPackFile (const char *packfile);
|
||||
|
||||
void ExtraMaps_NewGame (void);
|
||||
|
||||
/*
|
||||
==================
|
||||
Host_Game_f
|
||||
==================
|
||||
*/
|
||||
void Host_Game_f (void)
|
||||
{
|
||||
int i;
|
||||
unsigned int path_id;
|
||||
searchpath_t *search;
|
||||
pack_t *pak;
|
||||
char pakfile[MAX_OSPATH];
|
||||
|
||||
if (Cmd_Argc() > 1)
|
||||
{
|
||||
const char *p = Cmd_Argv(1);
|
||||
|
||||
if (!registered.value) //disable command for shareware quake
|
||||
{
|
||||
Con_Printf("You must have the registered version to use modified games\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!strcmp(p, ".") || strstr(p, "..") || strstr(p, "/") || strstr(p, "\\") || strstr(p, ":"))
|
||||
{
|
||||
Con_Printf ("gamedir should be a single directory name, not a path\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!q_strcasecmp(p, COM_SkipPath(com_gamedir))) //no change
|
||||
{
|
||||
Con_Printf("\"game\" is already \"%s\"\n", COM_SkipPath(com_gamedir));
|
||||
return;
|
||||
}
|
||||
|
||||
com_modified = true;
|
||||
|
||||
//Kill the server
|
||||
CL_Disconnect ();
|
||||
Host_ShutdownServer(true);
|
||||
|
||||
//Write config file
|
||||
Host_WriteConfiguration ();
|
||||
|
||||
//Kill the extra game if it is loaded
|
||||
while (com_searchpaths != com_base_searchpaths)
|
||||
{
|
||||
if (com_searchpaths->pack)
|
||||
{
|
||||
Sys_FileClose (com_searchpaths->pack->handle);
|
||||
Z_Free (com_searchpaths->pack->files);
|
||||
Z_Free (com_searchpaths->pack);
|
||||
}
|
||||
search = com_searchpaths->next;
|
||||
Z_Free (com_searchpaths);
|
||||
com_searchpaths = search;
|
||||
}
|
||||
|
||||
q_strlcpy (com_gamedir, va("%s/%s", com_basedir, p), sizeof(com_gamedir));
|
||||
|
||||
if (q_strcasecmp(p, GAMENAME)) //game is not id1
|
||||
{
|
||||
// assign a path_id to this game directory
|
||||
if (com_searchpaths)
|
||||
path_id = com_searchpaths->path_id << 1;
|
||||
else path_id = 1U;
|
||||
search = (searchpath_t *) Z_Malloc(sizeof(searchpath_t));
|
||||
search->path_id = path_id;
|
||||
q_strlcpy (search->filename, com_gamedir, sizeof(search->filename));
|
||||
search->next = com_searchpaths;
|
||||
com_searchpaths = search;
|
||||
|
||||
//Load the paks if any are found:
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
q_snprintf (pakfile, sizeof(pakfile), "%s/pak%i.pak", com_gamedir, i);
|
||||
pak = COM_LoadPackFile (pakfile);
|
||||
if (!pak)
|
||||
break;
|
||||
search = (searchpath_t *) Z_Malloc(sizeof(searchpath_t));
|
||||
search->path_id = path_id;
|
||||
search->pack = pak;
|
||||
search->next = com_searchpaths;
|
||||
com_searchpaths = search;
|
||||
}
|
||||
}
|
||||
|
||||
//clear out and reload appropriate data
|
||||
Cache_Flush ();
|
||||
Mod_ResetAll();
|
||||
if (!isDedicated)
|
||||
{
|
||||
TexMgr_NewGame ();
|
||||
Draw_NewGame ();
|
||||
R_NewGame ();
|
||||
}
|
||||
ExtraMaps_NewGame ();
|
||||
//Cbuf_InsertText ("exec quake.rc\n");
|
||||
|
||||
Con_Printf("\"game\" changed to \"%s\"\n", COM_SkipPath(com_gamedir));
|
||||
}
|
||||
else //Diplay the current gamedir
|
||||
Con_Printf("\"game\" is \"%s\"\n", COM_SkipPath(com_gamedir));
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
//johnfitz -- extramaps management
|
||||
//==============================================================================
|
||||
|
@ -2278,7 +2136,6 @@ Host_InitCommands
|
|||
void Host_InitCommands (void)
|
||||
{
|
||||
Cmd_AddCommand ("maps", Host_Maps_f); //johnfitz
|
||||
Cmd_AddCommand ("game", Host_Game_f); //johnfitz
|
||||
Cmd_AddCommand ("mods", Host_Mods_f); //johnfitz
|
||||
Cmd_AddCommand ("games", Host_Mods_f); // as an alias to "mods" -- S.A. / QuakeSpasm
|
||||
Cmd_AddCommand ("mapname", Host_Mapname_f); //johnfitz
|
||||
|
|
Loading…
Reference in a new issue