mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-02-10 09:41:09 +00:00
changes/fixes to 'game' command, to replicate FitzQuake Mark V behavior:
* make 'game' command to strip all mission pack support * make 'game' command to accept an optional second mission pack argument, i.e. -hipnotic, -rogue or -quoth. * so the new behavior does: game id1 --> really returns to bare id1 game, doesn't accept any mission pack arguments game xxx -hipnotic --> strip down to id1 game, load hipnotic and load xxx on top of them game xxx --> strip down to id1 game and load xxx on top of it * additionally, some extravaganza: game xxx --> if the game is already xxx, but the engine was started with -hiptonic or -rogue or -quoth, strip down to id1 and reload xxx on top of bare id1 game xxx -hipnotic --> if the game is already xxx, but the engine was started without -hiptonic, strip down to id1, load hipnotic and reload xxx on top of them git-svn-id: svn://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm@1010 af15c1b1-3010-417e-b628-4374ebc0bcbd
This commit is contained in:
parent
788f07734f
commit
ae876c943b
1 changed files with 46 additions and 9 deletions
|
@ -1945,6 +1945,7 @@ static void COM_Game_f (void)
|
||||||
if (Cmd_Argc() > 1)
|
if (Cmd_Argc() > 1)
|
||||||
{
|
{
|
||||||
const char *p = Cmd_Argv(1);
|
const char *p = Cmd_Argv(1);
|
||||||
|
const char *p2 = Cmd_Argv(2);
|
||||||
searchpath_t *search;
|
searchpath_t *search;
|
||||||
|
|
||||||
if (!registered.value) //disable shareware quake
|
if (!registered.value) //disable shareware quake
|
||||||
|
@ -1959,11 +1960,32 @@ static void COM_Game_f (void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (*p2)
|
||||||
|
{
|
||||||
|
if (strcmp(p2,"-hipnotic") && strcmp(p2,"-rogue") && strcmp(p2,"-quoth")) {
|
||||||
|
Con_Printf ("invalid mission pack argument to \"game\"\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!q_strcasecmp(p, GAMENAME)) {
|
||||||
|
Con_Printf ("no mission pack arguments to %s game\n", GAMENAME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!q_strcasecmp(p, COM_SkipPath(com_gamedir))) //no change
|
if (!q_strcasecmp(p, COM_SkipPath(com_gamedir))) //no change
|
||||||
{
|
{
|
||||||
|
if (com_searchpaths->path_id > 1) { //current game not id1
|
||||||
|
if (*p2 && com_searchpaths->path_id == 2)
|
||||||
|
Con_Printf("reloading game \"%s\" with \"%s\" support\n", p, &p2[1]);
|
||||||
|
else if (!*p2 && com_searchpaths->path_id > 2)
|
||||||
|
Con_Printf("reloading game \"%s\" without mission pack support\n", p);
|
||||||
|
else goto _same;
|
||||||
|
}
|
||||||
|
else { _same:
|
||||||
Con_Printf("\"game\" is already \"%s\"\n", COM_SkipPath(com_gamedir));
|
Con_Printf("\"game\" is already \"%s\"\n", COM_SkipPath(com_gamedir));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
com_modified = true;
|
com_modified = true;
|
||||||
|
|
||||||
|
@ -1987,14 +2009,29 @@ static void COM_Game_f (void)
|
||||||
Z_Free (com_searchpaths);
|
Z_Free (com_searchpaths);
|
||||||
com_searchpaths = search;
|
com_searchpaths = search;
|
||||||
}
|
}
|
||||||
|
hipnotic = false;
|
||||||
|
rogue = false;
|
||||||
|
standard_quake = true;
|
||||||
|
|
||||||
if (q_strcasecmp(p, GAMENAME)) //game is not id1
|
if (q_strcasecmp(p, GAMENAME)) //game is not id1
|
||||||
|
{
|
||||||
|
if (*p2) {
|
||||||
|
COM_AddGameDirectory (com_basedir, &p2[1]);
|
||||||
|
standard_quake = false;
|
||||||
|
if (!strcmp(p2,"-hipnotic") || !strcmp(p2,"-quoth"))
|
||||||
|
hipnotic = true;
|
||||||
|
else if (!strcmp(p2,"-rogue"))
|
||||||
|
rogue = true;
|
||||||
|
}
|
||||||
COM_AddGameDirectory (com_basedir, p);
|
COM_AddGameDirectory (com_basedir, p);
|
||||||
|
}
|
||||||
else // just update com_gamedir
|
else // just update com_gamedir
|
||||||
|
{
|
||||||
q_snprintf (com_gamedir, sizeof(com_gamedir), "%s/%s",
|
q_snprintf (com_gamedir, sizeof(com_gamedir), "%s/%s",
|
||||||
(host_parms->userdir != host_parms->basedir)?
|
(host_parms->userdir != host_parms->basedir)?
|
||||||
host_parms->userdir : com_basedir,
|
host_parms->userdir : com_basedir,
|
||||||
GAMENAME);
|
GAMENAME);
|
||||||
|
}
|
||||||
|
|
||||||
//clear out and reload appropriate data
|
//clear out and reload appropriate data
|
||||||
Cache_Flush ();
|
Cache_Flush ();
|
||||||
|
@ -2044,6 +2081,13 @@ void COM_InitFilesystem (void) //johnfitz -- modified based on topaz's tutorial
|
||||||
// start up with GAMENAME by default (id1)
|
// start up with GAMENAME by default (id1)
|
||||||
COM_AddGameDirectory (com_basedir, GAMENAME);
|
COM_AddGameDirectory (com_basedir, GAMENAME);
|
||||||
|
|
||||||
|
/* this is the end of our base searchpath:
|
||||||
|
* any set gamedirs, such as those from -game command line
|
||||||
|
* arguments or by the 'game' console command will be freed
|
||||||
|
* up to here upon a new game command. */
|
||||||
|
com_base_searchpaths = com_searchpaths;
|
||||||
|
|
||||||
|
// add mission pack requests (only one should be specified)
|
||||||
if (COM_CheckParm ("-rogue"))
|
if (COM_CheckParm ("-rogue"))
|
||||||
COM_AddGameDirectory (com_basedir, "rogue");
|
COM_AddGameDirectory (com_basedir, "rogue");
|
||||||
if (COM_CheckParm ("-hipnotic"))
|
if (COM_CheckParm ("-hipnotic"))
|
||||||
|
@ -2051,13 +2095,6 @@ void COM_InitFilesystem (void) //johnfitz -- modified based on topaz's tutorial
|
||||||
if (COM_CheckParm ("-quoth"))
|
if (COM_CheckParm ("-quoth"))
|
||||||
COM_AddGameDirectory (com_basedir, "quoth");
|
COM_AddGameDirectory (com_basedir, "quoth");
|
||||||
|
|
||||||
/* this is the end of our base searchpath:
|
|
||||||
* any set gamedirs, such as those from -game command line
|
|
||||||
* arguments or by the 'game' console command will be freed
|
|
||||||
* up to here upon a new game command.
|
|
||||||
* Set here instead of just after 'id1', because we don't want
|
|
||||||
* to allow the 'game' command to strip away the mission packs */
|
|
||||||
com_base_searchpaths = com_searchpaths;
|
|
||||||
|
|
||||||
i = COM_CheckParm ("-game");
|
i = COM_CheckParm ("-game");
|
||||||
if (i && i < com_argc-1)
|
if (i && i < com_argc-1)
|
||||||
|
|
Loading…
Reference in a new issue