Implement support for OpenMW

Most of the complexity is handled by libloadorder, but it's worth noting that:

- The game path is OpenMW's install path, not Morrowind's
- OpenMW doesn't force master-flagged plugins to load before others
- OpenMW doesn't provide a way to record the load order of inactive plugins
- .omwgame and .omwaddon plugins are equivalent to .esm and .esp respectively, while .omwscripts plugins have a completely different format with none of the metadata that libloot uses.
- OpenMW effectively relies on additional data paths to load Morrowind's (and mods') files, and the last directory listed that contains a given filename is used to load a file with that filename, with the main data path effectively being the first listed.
- I've disabled support for ghosted plugins for OpenMW because it makes the multi-path stuff more confusing and may not provide any benefit.
This commit is contained in:
Oliver Hamlet
2025-02-01 21:36:03 +00:00
parent 2d3192683f
commit 84c0cca534
24 changed files with 698 additions and 173 deletions
+6 -6
View File
@@ -33,9 +33,9 @@ every time, so that it gives consistent results.
After that, three graphs are created, and the plugins are added to them as
vertices in their sorted order:
- One graph contains plugins that are not masters (e.g. they don't have their
master flag set - for some games they must also not have the ``.esm`` file
extension).
- One graph contains plugins that are not masters (meaning master plugins in
their own right, not that they are listed as a master within another plugin's
header).
- One graph contains plugins that are blueprint masters: blueprint masters are
a type of plugin specific to Starfield, so for all other games this graph will
be empty.
@@ -49,7 +49,7 @@ than to enforce those relationships within a single graph.
A consequence of using three separate graphs is that any plugin data or metadata
that involves a pair of plugins that go in different graphs will be silently
ignored. For example: if plugin A is master-flagged and plugin B is not, and
ignored. For example: if plugin A is a master and plugin B is not, and
plugin A has metadata saying it must load after plugin B, then that metadata
will be ignored because the two plugins are sorted independently, as if the
other plugin is not installed.
@@ -224,8 +224,8 @@ Combine the load orders
Finally, the sorted load orders are combined in this order:
1. master-flagged plugins
2. non-master-flagged plugins
1. master plugins
2. non-master plugins
3. blueprint master plugins
That gives the complete sorted load order.