Skip to content

Commit

Permalink
Adjustments to base dir detection (skullernet#39)
Browse files Browse the repository at this point in the history
* Don't override user-specified basedir or libdir
* Don't set empty basedir or libdir
  • Loading branch information
res2k authored Aug 18, 2024
1 parent 119467d commit 30c5448
Showing 1 changed file with 39 additions and 29 deletions.
68 changes: 39 additions & 29 deletions src/common/files.c
Original file line number Diff line number Diff line change
Expand Up @@ -3782,50 +3782,60 @@ static void FS_FindBaseDir(void)
// is empty by default which we should fix.
//static const char *defgame = "baseq2";

// find Steam installation dir first
char client_dir[MAX_OSPATH];

if (Sys_GetInstalledGamePath(GAME_PATH_STEAM, client_dir, sizeof(client_dir))) {
// Don't try to detect the base directory if it was already explicitly specified
bool detect_base_dir = !Cvar_Exists("basedir", false) && !Cvar_Exists("libdir", false);

if (detect_base_dir) {
// find Steam installation dir first
char client_dir[MAX_OSPATH];

if (Sys_GetInstalledGamePath(GAME_PATH_STEAM, client_dir, sizeof(client_dir))) {

// found Steam dir - see if the mode we want is available
listfiles_t list = {
.flags = FS_SEARCH_DIRSONLY,
.baselen = strlen(client_dir) + 1,
};
// found Steam dir - see if the mode we want is available
listfiles_t list = {
.flags = FS_SEARCH_DIRSONLY,
.baselen = strlen(client_dir) + 1,
};

Sys_ListFiles_r(&list, client_dir, 0);
Sys_ListFiles_r(&list, client_dir, 0);

bool has_rerelease = false;
bool has_rerelease = false;

for (int i = 0; i < list.count; i++) {
char *s = list.files[i];
for (int i = 0; i < list.count; i++) {
char *s = list.files[i];

if (!Q_stricmp(s, "rerelease")) {
has_rerelease = true;
}

if (!Q_stricmp(s, "rerelease")) {
has_rerelease = true;
Z_Free(s);
}

Z_Free(s);
}
Z_Free(list.files);

Z_Free(list.files);
if (com_rerelease->integer == RERELEASE_MODE_YES && has_rerelease) {
Q_strlcat(client_dir, PATH_SEP_STRING "rerelease", sizeof(client_dir));
}
} else if (com_rerelease->integer == RERELEASE_MODE_YES && Sys_GetInstalledGamePath(GAME_PATH_GOG_RERELEASE, client_dir, sizeof(client_dir))) {
//
} else if (com_rerelease->integer == RERELEASE_MODE_NO && Sys_GetInstalledGamePath(GAME_PATH_GOG_CLASSIC, client_dir, sizeof(client_dir))) {
//
}

if (com_rerelease->integer == RERELEASE_MODE_YES && has_rerelease) {
Q_strlcat(client_dir, PATH_SEP_STRING "rerelease", sizeof(client_dir));
// Don't set an "empty" base dir, use defaults instead
if (*client_dir)
{
Cvar_Set("basedir", client_dir);
Cvar_Set("libdir", client_dir);
}
} else if (com_rerelease->integer == RERELEASE_MODE_YES && Sys_GetInstalledGamePath(GAME_PATH_GOG_RERELEASE, client_dir, sizeof(client_dir))) {
//
} else if (com_rerelease->integer == RERELEASE_MODE_NO && Sys_GetInstalledGamePath(GAME_PATH_GOG_CLASSIC, client_dir, sizeof(client_dir))) {
//
}

Cvar_Set("basedir", client_dir);
Cvar_Set("libdir", client_dir);

// TODO: find a better home (lol) for me
#ifdef _WIN32
if (com_rerelease->integer == RERELEASE_MODE_YES) {
if (ExpandEnvironmentStringsA("%userprofile%\\Saved Games\\NightDive Studios\\Quake II", client_dir, sizeof(client_dir) - 2)) {
Cvar_Set("homedir", client_dir);
char homedir[MAX_OSPATH];
if (ExpandEnvironmentStringsA("%userprofile%\\Saved Games\\NightDive Studios\\Quake II", homedir, sizeof(homedir) - 2)) {
Cvar_Set("homedir", homedir);
}
}
#endif
Expand Down

0 comments on commit 30c5448

Please sign in to comment.