Data directories

From Arx Libertatis Wiki
Jump to navigation Jump to search

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%/TODO'

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.