File: paths.rst

package info (click to toggle)
openmw 0.49.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,992 kB
  • sloc: cpp: 372,479; xml: 2,149; sh: 1,403; python: 797; makefile: 26
file content (436 lines) | stat: -rw-r--r-- 25,949 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
Paths
#####

Default paths
=============

The following describes the default locations for the various OpenMW file paths for different types of files on different operating systems.
To see how to customise this, look at `Custom configuration directories`_.

.. note::
    Actual location depends on your computer's setup. Username, harddrive, and language may vary.

Configuration files and log files
---------------------------------

+--------------+-----------------------------------------------------------------------------------------------+
| OS           | Location                                                                                      |
+==============+===============================================================================================+
| Linux        | ``$XDG_CONFIG_HOME/openmw`` or ``$HOME/.config/openmw``                                       |
+--------------+-----------------------------------------------------------------------------------------------+
| Mac          | ``$HOME/Library/Preferences/openmw``                                                          |
+--------------+---------------+-------------------------------------------------------------------------------+
| Windows      | File Explorer | ``Documents\My Games\OpenMW``                                                 |
|              |               |                                                                               |
|              | PowerShell    | ``Join-Path ([environment]::GetFolderPath("mydocuments")) "My Games\OpenMW"`` |
|              |               |                                                                               |
|              | Example       | ``C:\Users\Username\Documents\My Games\OpenMW``                               |
+--------------+---------------+-------------------------------------------------------------------------------+

Savegames
---------

+--------------+-----------------------------------------------------------------------------------------------------+
| OS           | Location                                                                                            |
+==============+=====================================================================================================+
| Linux        | ``$XDG_DATA_HOME/openmw/saves`` or ``$HOME/.local/share/openmw/saves``                              |
+--------------+-----------------------------------------------------------------------------------------------------+
| Mac          | ``$HOME/Library/Application\ Support/openmw/saves``                                                 |
+--------------+---------------+-------------------------------------------------------------------------------------+
| Windows      | File Explorer | ``Documents\My Games\OpenMW\saves``                                                 |
|              |               |                                                                                     |
|              | PowerShell    | ``Join-Path ([environment]::GetFolderPath("mydocuments")) "My Games\OpenMW\saves"`` |
|              |               |                                                                                     |
|              | Example       | ``C:\Users\Username\Documents\My Games\OpenMW\saves``                               |
+--------------+---------------+-------------------------------------------------------------------------------------+

Screenshots
-----------

+--------------+-----------------------------------------------------------------------------------------------------------+
| OS           | Location                                                                                                  |
+==============+===========================================================================================================+
| Linux        | ``$XDG_DATA_HOME/openmw/screenshots`` or ``$HOME/.local/share/openmw/screenshots``                        |
+--------------+-----------------------------------------------------------------------------------------------------------+
| Mac          | ``$HOME/Library/Application\ Support/openmw/screenshots``                                                 |
+--------------+---------------+-------------------------------------------------------------------------------------------+
| Windows      | File Explorer | ``Documents\My Games\OpenMW\screenshots``                                                 |
|              |               |                                                                                           |
|              | PowerShell    | ``Join-Path ([environment]::GetFolderPath("mydocuments")) "My Games\OpenMW\screenshots"`` |
|              |               |                                                                                           |
|              | Example       | ``C:\Users\Username\Documents\My Games\OpenMW\screenshots``                               |
+--------------+---------------+-------------------------------------------------------------------------------------------+

Custom configuration directories
================================

OpenMW has a powerful system to control where configuration files and user data are stored.
This is useful for things like a `Portable install`_ or `Profiles`_\ , but can also be used if you just want your saved games to end up somewhere else.
The OpenMW engine has supported this since 0.48, but if you want to use OpenMW's launcher, that only works correctly from 0.49 onwards.

Concepts
--------
Configuration sources
^^^^^^^^^^^^^^^^^^^^^

Configuration for OpenMW is composed from several sources.
From lowest to highest priority, these are:

* The local or global ``openmw.cfg``.
* Any ``openmw.cfg`` files in any other directories specified with the ``config`` option.
* Options specified on the command line.

.. tip::
    Any option that can be specified as ``option=value`` in ``openmw.cfg`` can also be specified as ``--option=value`` or ``--option value`` on the command line for the engine (but not other OpenMW tools).

The command line is always the highest-priority source, even if it specifies extra configuration directories with ``--config``.
This lets you quickly test with extra options even if you're not using your normal configuration directories.

If one ``openmw.cfg`` specifies multiple configuration directories, they're all higher-priority than the one that specified them, and lower priority than any they go on to specify themselves.
I.e. if ``dir1/openmw.cfg`` contains ``config=dir2`` then ``config=dir3``, and ``dir2/openmw.cfg`` contains ``config=dir4`` the priority order will be ``dir1``, ``dir2``, ``dir3``, ``dir4``.
This might be a surprise if you expect it to work like C's ``#include`` directive.

Most settings in ``openmw.cfg`` only allow a single value, so will take the one from the highest-priority config source that sets one.
Others take several values which are combined together into a list.
Values from low-priority sources are included earlier than ones from high-priority sources.
If you don't want this, and would prefer that only values from the current source (and ones of higher priority) are used, you can specify this for each option with the ``replace`` option.
E.g. passing ``--replace content --content Morrowind.esm`` on the command line will ignore any ``content=…`` lines in your ``openmw.cfg``\ (s) and run the game with only ``Morrowind.esm``.

Every configuration directory is allowed, but not required, to contain its own ``settings.cfg``.
Settings in ``settings.cfg`` only ever have one value, so it'll be taken from the highest priority ``settings.cfg`` that sets one.

Special ``openmw.cfg`` files
""""""""""""""""""""""""""""

A local ``openmw.cfg`` is one which is in the same directory as the OpenMW binary, e.g. ``openmw.exe`` on Windows.
It is always loaded if it exists.

A global ``openmw.cfg`` is one in a special system-specific location for system-wide application configuration, e.g. ``/etc/openmw`` on some Linux systems.
Not all systems have a directory like this – a global ``openmw.cfg`` only makes sense if there's a single system-wide OpenMW installation, e.g. from the operating system's package manager.
It is only loaded if there's no local ``openmw.cfg``.

If there's no local or global ``openmw.cfg``, OpenMW won't launch.

The user ``openmw.cfg`` is the highest priority ``openmw.cfg`` file that's active.
This is the one that the launcher will edit, so it must be somewhere the user has write access.
It *can* be the local ``openmw.cfg``, e.g. in a `Portable install`_, but we strongly recommend against installing OpenMW to a system protected directory (e.g. ``/usr/bin`` on Unix, ``C:\Program Files`` on Windows) if you decide to do this.
We also strongly recommend against using a global ``openmw.cfg`` as the user ``openmw.cfg``.

``openmw.cfg`` syntax
^^^^^^^^^^^^^^^^^^^^^

An ``openmw.cfg`` file is a sequence of lines.
Each line is either blank, contains an option, or contains a comment.

Blank lines are ignored.

Lines where the first non-whitespace character is an octothorpe (``#``), also known as the hash symbol or pound sign, are comments.
The line is ignored no matter what else it contains.
You can use comments to make notes for yourself or temporarily make OpenMW ignore specific lines.
Be aware that the launcher can only make a best effort to preserve comments when you use it to edit your user ``openmw.cfg``.
It has no way of knowing if you've written a comment to describe the lines above it versus below it (if a comment even goes with a particular line), so it has to guess.
This can't change until computers are able to read minds.

Lines with options have an option name, then an equals sign (``=``), then an option value.
Option names and values have leading and trailing whitespace trimmed, but whitespace within an option value is preserved - it's only removed if it's at the ends.
This means that these are all equivalent:
::

    data=some/dir
        data=some/dir
    data = some/dir

As mentioned above, some options allow more than one value, but some only allow one.
If only one is allowed, and you provide two in the same file, the later one is used.

Extra rules for paths
"""""""""""""""""""""

OpenMW accepts Unix-style paths (separated by forward slashes (``/``)) on Unix, and both Unix-style and Windows-style (separated by backward slashes (``\``)) on Windows, including mixed paths.
Backward slashes have no special meaning and are not an escape character, so paths can be copied and pasted straight from your file browser on any platform.

Paths can also use a quoted syntax.
This is mainly useful if you want to make an ``openmw.cfg`` file that also works with older versions, where quoting was mandatory.
It also lets you specify paths with whitespace at the beginning or end, which would otherwise be stripped.

To quote a path, put a double quote mark (``"``) at the beginning and end.
Everything after the closing quote mark will be ignored.
If a path has quote marks within it, they can be escaped by putting an ampersand (``&``) first, and ampersands can be escaped by putting another ampersand first.
E.g. ``data=a/path/with a " symbol & an ampersand`` can also be written as ``data="a/path/with a &" symbol && an ampersand"``.
If you don't need your configuration to work with older versions, then it's usually easier not to bother quoting paths.

Paths can be absolute, relative, or start with a token.

Absolute paths start with a slash (``/`` or ``\``), or, on Windows, a drive identifier (e.g. ``C:\``).

Relative paths are **relative to the** ``openmw.cfg`` **file they're in**, or the current working directory if they're passed via the command line.

Tokens are used to access platform-dependent paths where OpenMW can store specific kinds of data.
The available tokens are ``?local?``, ``?userconfig?``, ``?userdata?`` and ``?global?``.
Tokens are used in the `Default paths`_.

:``?local?``: The directory where the OpenMW binary is installed, except on MacOS, where it's the ``Resources`` directory inside the bundle.

:``?userconfig?``: Platform-dependent:

    +--------------+-----------------------------------------------------------+
    | OS           | Location                                                  |
    +==============+===========================================================+
    | Linux        | ``$XDG_CONFIG_HOME/openmw/`` or ``$HOME/.config/openmw/`` |
    +--------------+-----------------------------------------------------------+
    | Mac          | ``$HOME/Library/Preferences/openmw/``                     |
    +--------------+-----------------------------------------------------------+
    | Windows      | ``Documents\My Games\OpenMW\``                            |
    +--------------+-----------------------------------------------------------+

:``?userdata?``: Platform-dependent:

    +--------------+--------------------------------------------------------------+
    | OS           | Location                                                     |
    +==============+==============================================================+
    | Linux        | ``$XDG_DATA_HOME/openmw/`` or ``$HOME/.local/share/openmw/`` |
    +--------------+--------------------------------------------------------------+
    | Mac          | ``$HOME/Library/Application Support/openmw/``                |
    +--------------+--------------------------------------------------------------+
    | Windows      | ``Documents\My Games\OpenMW\``                               |
    +--------------+--------------------------------------------------------------+

:``?global?``: Platform-dependent:

    +--------------+-------------------------------------------------------------------+
    | OS           | Location                                                          |
    +==============+===================================================================+
    | Linux        | Chosen by the downstream packager, typically ``/usr/share/games`` |
    +--------------+-------------------------------------------------------------------+
    | Mac          | ``/Library/Application Support/``                                 |
    +--------------+-------------------------------------------------------------------+
    | Windows      | Not applicable                                                    |
    +--------------+-------------------------------------------------------------------+

Examples
--------

Portable install
^^^^^^^^^^^^^^^^

If you want to put OpenMW onto removable storage so you can play on multiple machines, or you want an entirely self-contained setup, you'll want to set up a portable install.

Single ``openmw.cfg`` file
""""""""""""""""""""""""""

Some users find it easiest if there's a single ``openmw.cfg`` file with all their configuration, even if it means it's mixed in with the engine's default configuration.

To set up this kind of install, first install a fresh copy of OpenMW to a directory where you have write access.
Navigate to the OpenMW installation directory, and open the ``openmw.cfg`` file it contains.

By default, this contains a warning at the top telling you that this is the local ``openmw.cfg`` and not to modify it.
However, for this kind of install, it's okay to do so, so you can remove this warning.

Change the start of the file from::

    # This is the local openmw.cfg file. Do not modify!
    # Modifications should be done on the user openmw.cfg file instead
    # (see: https://openmw.readthedocs.io/en/master/reference/modding/paths.html)

    data-local="?userdata?data"
    user-data="?userdata?"
    config="?userconfig?"
    resources=./resources
    data=./resources/vfs-mw

    # lighting
    fallback=LightAttenuation_UseConstant,0
    fallback=LightAttenuation_ConstantValue,0.0
    fallback=LightAttenuation_UseLinear,1

to::

    data-local=userdata/data
    user-data=userdata
    resources=./resources
    data=./resources/vfs-mw

    # lighting
    fallback=LightAttenuation_UseConstant,0
    fallback=LightAttenuation_ConstantValue,0.0
    fallback=LightAttenuation_UseLinear,1

You can now run OpenMW's launcher to do first-time setup.
This will import the basic data to play *Morrowind* into the ``openmw.cfg`` you just modified, and create a ``settings.cfg`` next to it.
You can make any further changes you want to these files, or make changes in the launcher, which will modify them for you.

You'll need to make sure that any ``data=…`` lines in your ``openmw.cfg`` use relative paths so that they're not dependent on the drive letter/mount point when moved to another computer.
If you add data directories via the launcher, you'll need to change them manually afterwards.

Separate user ``openmw.cfg`` file
"""""""""""""""""""""""""""""""""

For most users, this is the type of portable OpenMW install we would recommend as it's the most similar to a regular install.
You'll have a separate local ``openmw.cfg`` with the engine's basic configuration and a user ``openmw.cfg`` with your personal configuration.

To set up this kind of install, first install a fresh copy of OpenMW to a directory where you have write access.
Navigate to the OpenMW installation directory, and open the ``openmw.cfg`` file it contains.

By default, this contains a warning at the top telling you that this is the local ``openmw.cfg`` and not to modify it.
However, you'll need to make a small change to create this kind of install.

Change the start of the file from::

    # This is the local openmw.cfg file. Do not modify!
    # Modifications should be done on the user openmw.cfg file instead
    # (see: https://openmw.readthedocs.io/en/master/reference/modding/paths.html)

    data-local="?userdata?data"
    user-data="?userdata?"
    config="?userconfig?"
    resources=./resources
    data=./resources/vfs-mw

    # lighting
    fallback=LightAttenuation_UseConstant,0
    fallback=LightAttenuation_ConstantValue,0.0
    fallback=LightAttenuation_UseLinear,1

to::

    # This is the local openmw.cfg file. Do not modify!
    # Modifications should be done on the user openmw.cfg file instead
    # (see: https://openmw.readthedocs.io/en/master/reference/modding/paths.html)

    data-local="userdata/data"
    user-data="userdata"
    config="config"
    resources=./resources
    data=./resources/vfs-mw

    # lighting
    fallback=LightAttenuation_UseConstant,0
    fallback=LightAttenuation_ConstantValue,0.0
    fallback=LightAttenuation_UseLinear,1

You can now run OpenMW's launcher to do first-time setup.
This will import the basic data to play Morrowind into a new ``openmw.cfg`` in the ``config`` directory, and create a ``settings.cfg`` next to it.
You can make any further changes you want to these files, or make changes in the launcher, which will modify them for you.

You'll need to make sure that any ``data=…`` lines in your ``openmw.cfg`` use relative paths so that they're not dependent on the drive letter/mount point when moved to another computer.
Remember that paths are relative to the ``openmw.cfg`` file they're in, not the OpenMW installation root.
If you add data directories via the launcher, you'll need to change them manually afterwards.

Profiles
^^^^^^^^

OpenMW can potentially be used to play several different games, and you may want to try several different mod lists for each.
You can use the custom configuration directory system to create a profile for each different setup with its own configuration directory.

For the example, we'll create a subdirectory in the default configuration directory for each game, and then create a subdirectory in the relevant game's directory for each mod list.

From scratch
""""""""""""

Start by installing OpenMW in the usual way.
Don't bother with first-time setup (i.e. telling it the location of an existing *Morrowind* installation).

In the default configuration directory (see `Configuration files and log files`_), create a file called ``openmw.cfg`` containing just::

    # select the game profile
    config=Morrowind

Now it's time to run the launcher to do first-time setup.
This will put the basic setup required to play *Morrowind* into a new ``Morrowind`` directory of the default configuration directory, e.g. ``Documents\My Games\OpenMW\Morrowind\openmw.cfg`` on Windows.

Next, come up with a name for the subprofile you'll create for your mod list.
If you're following a modding guide, they've probably already given it a name, e.g. *Total Overhaul*, so that's the example we'll use.
Add a line to the ``Morrowind/openmw.cfg`` with the profile name, e.g.::

    # select the mod list profile
    config=Total Overhaul

Run the launcher again.

You'll now have three separate levels of ``openmw.cfg`` and ``settings.cfg``.

The ones in the base default configuration directory are used for all profiles, so they're best for machine-wide settings, like your monitor's resolution.

The ones in the ``Morrowind`` directory are used for all profiles for *Morrowind*, so they're best for game-specific settings, like the values imported from ``Morrowind.ini``.

The ones in the ``Morrowind/Total Overhaul`` directory are only used for the *Total Overhaul* profile, so you can set up that mod list and any settings it requires here, and they won't affect any other profiles you set up later.
Making changes within the launcher will affect these files and leave all the others alone.

If you want the *Total Overhaul* profile to keep its saved games etc. in a dedicated location instead of mixing them in with ones from another profile, you can add a ``user-data=…`` line to your ``Morrowind/Total Overhaul/openmw.cfg``, e.g.::

    # put saved games in a saves directory next to this file
    user-data=.

When you want to set up another game or mod list, you can set up a new one just like the first – create another directory for it and change the ``config=…`` line in the ``openmw.cfg`` next to the directory to use that directory's name.
To switch back, just change the line back.

Migrating an existing setup
"""""""""""""""""""""""""""

Lots of people will have an existing OpenMW setup, and decide they want to try a new mod list or game.
That existing configuration can be moved out of the way and turned into a profile.

Start by creating a subdirectory in the default configuration directory (see `Configuration files and log files`_) to be the profile.
Give it a meaningful name so you know what it is – this example will call it *Original*.
You'll now have an empty directory e.g. at ``Documents\My Games\OpenMW\Original`` on Windows.

Next, move all the files that were already in the default configuration directory to the profile directory you just made.
Afterwards, the default configuration directory should only contain the profile directory you made.

Create a new ``openmw.cfg`` file in the default configuration directory containing::

    # select the profile
    config=Original

In the ``openmw.cfg`` in the profile directory, add these lines::

    data-local=data
    user-data=.

Now, if you run OpenMW or any of its tools, they'll work just like before, even though you've moved the files.

You can now make other directories for other profiles as described in the `From scratch`_ example, and switch between them and your original setup by changing the ``config=…`` line.

Launcher scripts and shortcuts
""""""""""""""""""""""""""""""

Once profiles have been set up, it might be a hassle to switch between them by editing ``config=…`` lines in ``openmw.cfg`` files.
Passing arguments on the command line lets you avoid this.

.. note::
    This feature only works with the OpenMW engine, not tools like the launcher.

The basic idea is that you need to pass ``--replace config`` to ignore the configuration directories that the engine would have loaded because they were specified in ``openmw.cfg`` files, and pass each one you want to use instead with ``--config <directory path here>``.

E.g. if you've got a profile called *Morrowind* in your default configuration directory, and it's got a *Total Overhaul* subprofile, you could load it by running::

    openmw --replace config --config ?userconfig?/Morrowind --config "?userconfig?/Morrowind/Total Overhaul"

You can put this command into a script or shortcut and use it to easily launch OpenMW with that profile.

The command exactly as it appears above will work in most common shells (e.g. Bash, Windows Command Prompt and PowerShell) if OpenMW is on the system path.
Otherwise, the path to OpenMW must be specified instead of just the ``openmw`` command.

On Windows, you can create a desktop shortcut to run this command with these steps:

* Navigate to the OpenMW install directory.
* Right-click ``openmw.exe`` and choose *Send to* > *Desktop (create shortcut)*.
* Navigate to the Desktop, or minimise all windows.
* Find the newly-created shortcut and give it a sensible name, e.g. *OpenMW - Total Overhaul*.
* Right-click the shortcut and choose *Properties*.
* In the *Shortcut* tab of the *Properties* pane, find the *Target* field.
* At the end of that field, add the arguments for the profile you want, e.g. ``--replace config --config ?userconfig?/Morrowind --config "?userconfig?/Morrowind/Total Overhaul"``.
* Press *Apply* or *OK* to save the changes, and test the shortcut by double-clicking it.

On most Linux distros, you can create a ``.desktop`` file like this::

    [Desktop Entry]
    Type=Application
    Name=OpenMW - Total Overhaul
    GenericName=Role Playing Game
    Comment=OpenMW with the Total Overhaul profile
    Keywords=Morrowind;Reimplementation Mods;esm;bsa;
    TryExec=openmw
    Exec=openmw --replace config --config ?userconfig?/Morrowind --config "?userconfig?/Morrowind/Total Overhaul" 
    Icon=openmw
    Categories=Game;RolePlaying;