summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/cl_main.c4
-rw-r--r--src/qcommon/files.c21
2 files changed, 20 insertions, 5 deletions
diff --git a/src/client/cl_main.c b/src/client/cl_main.c
index cfd41c53..c66285dc 100644
--- a/src/client/cl_main.c
+++ b/src/client/cl_main.c
@@ -1363,8 +1363,8 @@ static void CL_OldGame(void)
{
// change back to previous fs_game
cls.oldGameSet = qfalse;
- Cvar_Set("fs_game", cls.oldGame);
- Com_GameRestart(0, qtrue);
+ Cvar_Set2("fs_game", cls.oldGame, qtrue);
+ FS_ConditionalRestart(clc.checksumFeed, qfalse);
}
}
diff --git a/src/qcommon/files.c b/src/qcommon/files.c
index f18b96a3..10e00f11 100644
--- a/src/qcommon/files.c
+++ b/src/qcommon/files.c
@@ -3591,12 +3591,27 @@ restart if necessary
*/
qboolean FS_ConditionalRestart(int checksumFeed, qboolean disconnect)
{
+ int retval;
+
if(fs_gamedirvar->modified)
{
- Com_GameRestart(checksumFeed, disconnect);
- return qtrue;
+ if(FS_FilenameCompare(lastValidGame, fs_gamedirvar->string) &&
+ (*lastValidGame || FS_FilenameCompare(fs_gamedirvar->string, com_basegame->string)) &&
+ (*fs_gamedirvar->string || FS_FilenameCompare(lastValidGame, com_basegame->string)))
+ {
+ Com_GameRestart(checksumFeed, disconnect);
+ return qtrue;
+ }
+ else
+ {
+ fs_gamedirvar->modified = qfalse;
+ retval = qtrue;
+ }
}
- else if(checksumFeed != fs_checksumFeed)
+ else
+ retval = qfalse;
+
+ if(checksumFeed != fs_checksumFeed)
FS_Restart(checksumFeed);
else if(fs_numServerPaks && !fs_reordered)
FS_ReorderPurePaks();