Data directories: Difference between revisions
Line 36: | Line 36: | ||
7. If <code>USER_DIR</code> expands to a relative path and a <b>cmake <code>-DUSER_DIR_PREFIXES</code> option</b> (colon-seperated list) was given, search for <code>${USER_DIR}</code> in all entries in <code>${USER_DIR_PREFIXES}</code>. If none was found and a data directory was detected, create a <code>${USER_DIR}</code> subdirectory in the first entry of <code>${USER_DIR_PREFIXES}</code> and use that as the user directory. | 7. If <code>USER_DIR</code> expands to a relative path and a <b>cmake <code>-DUSER_DIR_PREFIXES</code> option</b> (colon-seperated list) was given, search for <code>${USER_DIR}</code> in all entries in <code>${USER_DIR_PREFIXES}</code>. If none was found and a data directory was detected, create a <code>${USER_DIR}</code> subdirectory in the first entry of <code>${USER_DIR_PREFIXES}</code> and use that as the user directory. | ||
* (linux-only) default value for <code>USER_DIR_PREFIXES</code> is '<code>$XDG_DATA_HOME</code>' | * (linux-only) default value for <code>USER_DIR_PREFIXES</code> is '<code>$XDG_DATA_HOME</code>' | ||
* (windows-only) default value for <code>USER_DIR_PREFIXES</code> is '<code>%USERPROFILE%/ | * (windows-only) default value for <code>USER_DIR_PREFIXES</code> is '<code>%USERPROFILE%/My Documents/Games</code>' | ||
8. If no data and user path has been found, set the user directory to the current directory and the data directory to empty (none). | 8. If no data and user path has been found, set the user directory to the current directory and the data directory to empty (none). |
Revision as of 07:21, 8 December 2011
This page describes the current proposal for how data / config / save files should be located (see also https://github.com/arx/ArxLibertatis/issues/88):
The game will recognize two different directories, a data directory and a user directory.
- The data directory holds read-only asset data and possibly a cfg_default.ini. The data directory can be empty to only load data from the user directory.
- The user directory holds save games, cfg.ini, screenshots, but can also hold asset data that takes priority over that from the data directory (like user-installed mods).
This should allow the game run either from all files in the current directory or from a system-wide installation with per-user config and save files.
Goals
- Starting from a local directory should be as simple as possibly and store saves/settings in that directory. This is for compatibility with the current way arx-libertatis is run and to allow easier testing.
- Windows installers should be able to specify the directories in the registry.
- By default, linux installations should look in the directories specified by the XDG Base Directory Specification
Directory detection procedure
1. If a --data-dir=...
command-line option is given, always use that data directory.
2. If a --user-dir=...
command-line option is given, always use that user directory.
3. (windows-only) If appropriate registry keys exist, use those for the data/user directory.
- HKEY_CURRENT_USER\Software\ArxLibertatis\UserDir
- HKEY_CURRENT_USER\Software\ArxLibertatis\DataDir
- Also check HKEY_LOCAL_MACHINE entries if a HKCU entry doesn't exist
4. If a cmake -DDATA_DIR
option was given and it (expanding environment variables) is an absolute path, use that.
- default value is 'arx'
5. If DATA_DIR
expands to a relative path and a cmake -DDATA_DIR_PREFIXES
option (colon-seperated list after expanding environment variables) was given, search for ${DATA_DIR} in all entries in ${DATA_DIR_PREFIXES}.
- (linux-only) default value for DATA_DIR_PREFIXES is '$XDG_DATA_DIRS'
6. If a cmake -DUSER_DIR
option was given and it (expanding environment variables) is an absolute path, use that.
- default value is 'arx'
7. If USER_DIR
expands to a relative path and a cmake -DUSER_DIR_PREFIXES
option (colon-seperated list) was given, search for ${USER_DIR}
in all entries in ${USER_DIR_PREFIXES}
. If none was found and a data directory was detected, create a ${USER_DIR}
subdirectory in the first entry of ${USER_DIR_PREFIXES}
and use that as the user directory.
- (linux-only) default value for
USER_DIR_PREFIXES
is '$XDG_DATA_HOME
' - (windows-only) default value for
USER_DIR_PREFIXES
is '%USERPROFILE%/My Documents/Games
'
8. If no data and user path has been found, set the user directory to the current directory and the data directory to empty (none).
- Maybe we should remove the automatic to-lowercase procedure and instead make that an explicit step users need to do? I would still recommend doing that step on all systems (both windows and linux) though, as
- some paths (the misc and graph directories) will be mapped to internal asset names, which are always case-sensitive.
- this will make it easier to move/share installations between linux and windows.