diff --git a/engine/client/cl_main.c b/engine/client/cl_main.c index e8c6fb84..52cc8619 100644 --- a/engine/client/cl_main.c +++ b/engine/client/cl_main.c @@ -3139,6 +3139,9 @@ static qboolean CL_ShouldRescanFilesystem( void ) } } + if( FBitSet( fs_mount_lv.flags|fs_mount_hd.flags|fs_mount_addon.flags|fs_mount_l10n.flags|ui_language.flags, FCVAR_CHANGED )) + retval = true; + return retval; } diff --git a/engine/common/common.h b/engine/common/common.h index 754bb79c..84ef04e7 100644 --- a/engine/common/common.h +++ b/engine/common/common.h @@ -167,6 +167,11 @@ extern convar_t cl_filterstuffcmd; extern convar_t rcon_password; extern convar_t hpk_custom_file; extern convar_t con_gamemaps; +extern convar_t fs_mount_lv; +extern convar_t fs_mount_hd; +extern convar_t fs_mount_addon; +extern convar_t fs_mount_l10n; +extern convar_t ui_language; // historically used for UI, but now controls mounted localization directory #define Mod_AllowMaterials() ( host_allow_materials.value != 0.0f && !FBitSet( host.features, ENGINE_DISABLE_HDTEXTURES )) @@ -411,6 +416,7 @@ byte *FS_LoadFile( const char *path, fs_offset_t *filesizeptr, qboolean gamediro byte *FS_LoadDirectFile( const char *path, fs_offset_t *filesizeptr ) MALLOC_LIKE( _Mem_Free, 1 ) WARN_UNUSED_RESULT; void FS_Rescan_f( void ); +void FS_CheckConfig( void ); // // cmd.c diff --git a/engine/common/filesystem_engine.c b/engine/common/filesystem_engine.c index 128f1ab9..f10744c2 100644 --- a/engine/common/filesystem_engine.c +++ b/engine/common/filesystem_engine.c @@ -1,4 +1,4 @@ - /* +/* filesystem.c - game filesystem based on DP fs Copyright (C) 2003-2006 Mathieu Olivier Copyright (C) 2000-2007 DarkPlaces contributors @@ -21,6 +21,12 @@ GNU General Public License for more details. #include "library.h" #include "platform/platform.h" +CVAR_DEFINE_AUTO( fs_mount_hd, "0", FCVAR_ARCHIVE|FCVAR_PRIVILEGED|FCVAR_LATCH, "mount high definition content folder" ); +CVAR_DEFINE_AUTO( fs_mount_lv, "0", FCVAR_ARCHIVE|FCVAR_PRIVILEGED|FCVAR_LATCH, "mount low violence models content folder" ); +CVAR_DEFINE_AUTO( fs_mount_addon, "0", FCVAR_ARCHIVE|FCVAR_PRIVILEGED|FCVAR_LATCH, "mount addon content folder" ); +CVAR_DEFINE_AUTO( fs_mount_l10n, "0", FCVAR_ARCHIVE|FCVAR_PRIVILEGED|FCVAR_LATCH, "mount localization content folder" ); +CVAR_DEFINE_AUTO( ui_language, "english", FCVAR_ARCHIVE|FCVAR_PRIVILEGED|FCVAR_LATCH, "selected game language" ); + fs_api_t g_fsapi; fs_globals_t *FI; @@ -71,7 +77,21 @@ void *FS_GetNativeObject( const char *obj ) void FS_Rescan_f( void ) { - FS_Rescan( 0, NULL ); + uint32_t flags = 0; + + // FIXME: VFS shouldn't care about this, allow engine to mount gamedirs + if( fs_mount_lv.value ) SetBits( flags, FS_MOUNT_LV ); + if( fs_mount_hd.value ) SetBits( flags, FS_MOUNT_HD ); + if( fs_mount_addon.value ) SetBits( flags, FS_MOUNT_ADDON ); + if( fs_mount_l10n.value ) SetBits( flags, FS_MOUNT_L10N ); + + g_fsapi.Rescan( flags, ui_language.string ); + + ClearBits( fs_mount_lv.flags, FCVAR_CHANGED ); + ClearBits( fs_mount_hd.flags, FCVAR_CHANGED ); + ClearBits( fs_mount_addon.flags, FCVAR_CHANGED ); + ClearBits( fs_mount_l10n.flags, FCVAR_CHANGED ); + ClearBits( ui_language.flags, FCVAR_CHANGED ); } static void FS_ClearPaths_f( void ) @@ -236,6 +256,12 @@ static qboolean FS_DetermineReadOnlyRootDirectory( char *out, size_t size ) return false; } +void FS_CheckConfig( void ) +{ + if( fs_mount_lv.value || fs_mount_hd.value || fs_mount_addon.value || fs_mount_l10n.value ) + FS_Rescan_f(); +} + /* ================ FS_Init @@ -288,6 +314,11 @@ void FS_Init( const char *basedir ) Cmd_AddRestrictedCommand( "fs_clearpaths", FS_ClearPaths_f, "clear filesystem search pathes" ); Cmd_AddRestrictedCommand( "fs_make_gameinfo", FS_MakeGameInfo_f, "create gameinfo.txt for current running game" ); + Cvar_RegisterVariable( &fs_mount_hd ); + Cvar_RegisterVariable( &fs_mount_lv ); + Cvar_RegisterVariable( &fs_mount_addon ); + Cvar_RegisterVariable( &fs_mount_l10n ); + if( !Sys_GetParmFromCmdLine( "-dll", host.gamedll )) host.gamedll[0] = 0; diff --git a/engine/common/host.c b/engine/common/host.c index 231ee278..3a3aeb98 100644 --- a/engine/common/host.c +++ b/engine/common/host.c @@ -1310,6 +1310,7 @@ int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGa Cmd_RemoveCommand( "setgl" ); Cbuf_ExecStuffCmds(); // execute stuffcmds (commandline) SCR_CheckStartupVids(); // must be last + FS_CheckConfig(); if( Sys_GetParmFromCmdLine( "-timedemo", demoname )) Cbuf_AddTextf( "timedemo %s\n", demoname );