]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
Clarify documentation of gamedirs, add to README.md
authorbones_was_here <bones_was_here@xonotic.au>
Mon, 1 Apr 2024 12:40:00 +0000 (22:40 +1000)
committerbones_was_here <bones_was_here@xonotic.au>
Mon, 1 Apr 2024 12:42:32 +0000 (22:42 +1000)
Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
README.md
fs.c

index 41a7b7e63a945ad1fa72031552ff9fd024727a72..2a59e2f0ce2c3cd6ab8221bfd889d7e0bf2ae96b 100644 (file)
--- a/README.md
+++ b/README.md
@@ -22,7 +22,26 @@ Linux x86_64 builds are available in [GitHub CI](https://github.com/DarkPlacesEn
 More complete builds are available in [xonotic.org](https://beta.xonotic.org/autobuild/) engine zips.  
 These support Windows, Linux and macOS, and include the current libraries needed for all features.
 
-DarkPlaces supports many Quake-based games and you can select which it will run by renaming the executable so it's prefixed with the game's name, for example `rogue-sdl.exe`, or by passing a cmdline argument such as `-rogue`.  The supported list and related details are defined in [com_game.c](https://github.com/DarkPlacesEngine/darkplaces/blob/master/com_game.c).
+DarkPlaces supports many Quake-based games and you can select which it will run by renaming the executable so it's prefixed with the game's name, for example `rogue-sdl.exe`, or by passing a cmdline argument such as `-rogue`.  This changes various engine behaviours and cvar defaults to suit the game.  The supported list and related details are defined in [com_game.c](https://github.com/DarkPlacesEngine/darkplaces/blob/master/com_game.c).
+
+Mods which aren't listed there can be run with (for example) `-game quake15` in which case DP will use the same behaviours and cvar defaults as for id1 Quake.
+
+## Quake Virtual File System
+
+All of Quake's data access is through a hierarchical file system, the contents
+of the file system can be transparently merged from several sources.
+
+The "base directory" is the path to the directory holding the quake.exe and
+all game directories.  The sys_* files pass this to host_init in
+quakeparms_t->basedir.  This can be overridden with the "-basedir" command
+line parm to allow code debugging in a different directory.  The base
+directory is only used during filesystem initialization.
+
+The "game directory" is the first tree on the search path and directory that
+all generated files (savegames, screenshots, demos, config files) will be
+saved to.  This can be overridden with the "-game" command line parameter.
+If multiple "-game <gamedir>" args are passed the last one is the "primary"
+and files will be saved there, the rest are read-only.
 
 ## Build instructions (WIP)
 
diff --git a/fs.c b/fs.c
index 445df3684b959947afb583820d95595803d45ffb..8e95b43c40b8538b76babfe8611efdafacf61208 100644 (file)
--- a/fs.c
+++ b/fs.c
@@ -171,7 +171,7 @@ static fs_offset_t WriteAll(const filedesc_t fd, const void *const buf, const si
 
 /** \page fs File System
 
-All of Quake's data access is through a hierchal file system, but the contents
+All of Quake's data access is through a hierarchical file system, the contents
 of the file system can be transparently merged from several sources.
 
 The "base directory" is the path to the directory holding the quake.exe and
@@ -183,9 +183,8 @@ directory is only used during filesystem initialization.
 The "game directory" is the first tree on the search path and directory that
 all generated files (savegames, screenshots, demos, config files) will be
 saved to.  This can be overridden with the "-game" command line parameter.
-The game directory can never be changed while quake is executing.  This is a
-precaution against having a malicious server instruct clients to write files
-over areas they shouldn't.
+If multiple "-game <gamedir>" args are passed the last one is the "primary"
+and files will be saved there, the rest are read-only.
 
 */
 
@@ -2100,7 +2099,7 @@ void FS_Init_Commands(void)
        Cvar_RegisterVariable (&fs_unload_dlcache);
        Cvar_RegisterVariable (&cvar_fs_gamedir);
 
-       Cmd_AddCommand(CF_SHARED, "gamedir", FS_GameDir_f, "changes active gamedir list (can take multiple arguments), not including base directory (example usage: gamedir ctf)");
+       Cmd_AddCommand(CF_SHARED, "gamedir", FS_GameDir_f, "changes active gamedir list, can take multiple arguments which shouldn't include the base directory, the last gamedir is the \"primary\" and files will be saved there (example usage: gamedir ctf id1)");
        Cmd_AddCommand(CF_SHARED, "fs_rescan", FS_Rescan_f, "rescans filesystem for new pack archives and any other changes");
        Cmd_AddCommand(CF_SHARED, "path", FS_Path_f, "print searchpath (game directories and archives)");
        Cmd_AddCommand(CF_SHARED, "dir", FS_Dir_f, "list files in searchpath matching an * filename pattern, one per line");