Menu-FN: If the engine somehow doesn't report the game we're currently
playing as a valid dir, append it at the end manually.
This commit is contained in:
parent
64749cddda
commit
95707a005b
1 changed files with 25 additions and 1 deletions
|
@ -244,6 +244,7 @@ customgame_liblist_parse(int id, string strKey, string strValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check if a manifest for the gamedir contains gameinfo, parse it if present */
|
||||||
int
|
int
|
||||||
games_check_manifest(int id, string gamedirname)
|
games_check_manifest(int id, string gamedirname)
|
||||||
{
|
{
|
||||||
|
@ -252,6 +253,7 @@ games_check_manifest(int id, string gamedirname)
|
||||||
|
|
||||||
string gamedescription = getgamedirinfo(id, 2);
|
string gamedescription = getgamedirinfo(id, 2);
|
||||||
|
|
||||||
|
/* no manifest, or no cvar strings inside */
|
||||||
if (gamedescription == "") {
|
if (gamedescription == "") {
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -263,6 +265,9 @@ games_check_manifest(int id, string gamedirname)
|
||||||
string first = substring(full, 0, 9);
|
string first = substring(full, 0, 9);
|
||||||
string second = substring(full, 9, -1);
|
string second = substring(full, 9, -1);
|
||||||
|
|
||||||
|
/* we may have a game manifest, but if it doesn't
|
||||||
|
* contains any gameinfo entries a different file
|
||||||
|
* should probably be parsed later */
|
||||||
if (first == "gameinfo_") {
|
if (first == "gameinfo_") {
|
||||||
customgame_liblist_parse(id, second, argv(i+1));
|
customgame_liblist_parse(id, second, argv(i+1));
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
@ -272,6 +277,7 @@ games_check_manifest(int id, string gamedirname)
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check if a liblist, parse it if present */
|
||||||
int
|
int
|
||||||
games_check_liblist(int id, string gamedirname)
|
games_check_liblist(int id, string gamedirname)
|
||||||
{
|
{
|
||||||
|
@ -375,10 +381,20 @@ void
|
||||||
games_init(void)
|
games_init(void)
|
||||||
{
|
{
|
||||||
int id;
|
int id;
|
||||||
|
int foundself;
|
||||||
string gamedirname;
|
string gamedirname;
|
||||||
gameinfo_count = 0;
|
gameinfo_count = 0;
|
||||||
|
|
||||||
for (id = 0; (gamedirname = getgamedirinfo(id, 0)); id++) {
|
for (id = 0; (gamedirname = getgamedirinfo(id, 0)); id++) {
|
||||||
|
/* in case FTE does not report the current game we're playing, sigh */
|
||||||
|
if (gamedirname == cvar_string("game"))
|
||||||
|
foundself = 1;
|
||||||
|
|
||||||
|
gameinfo_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* append current game to the very end */
|
||||||
|
if (!foundself) {
|
||||||
gameinfo_count++;
|
gameinfo_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -396,7 +412,15 @@ games_init(void)
|
||||||
error(sprintf("Attempting to allocate mod data for %i entries failed\n", gameinfo_count));
|
error(sprintf("Attempting to allocate mod data for %i entries failed\n", gameinfo_count));
|
||||||
|
|
||||||
/* now loop through all the mods we found and load in the metadata */
|
/* now loop through all the mods we found and load in the metadata */
|
||||||
for (id = 0; (gamedirname = getgamedirinfo(id, 0)); id++) {
|
for (id = 0; id < gameinfo_count; id++) {
|
||||||
|
/* handle the case if we didn't get reported our own game */
|
||||||
|
if (!foundself)
|
||||||
|
if (id == (gameinfo_count-1)) {
|
||||||
|
gamedirname = cvar_string("game");
|
||||||
|
} else {
|
||||||
|
gamedirname = getgamedirinfo(id, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/* Fill in the defaults */
|
/* Fill in the defaults */
|
||||||
games[id].game = gamedirname;
|
games[id].game = gamedirname;
|
||||||
games[id].gamedir = gamedirname;
|
games[id].gamedir = gamedirname;
|
||||||
|
|
Loading…
Reference in a new issue