220 Commits
Author SHA1 Message Date
Oliver Hamlet b23e33144e Update changelog and version for 0.22.3 release 2023-12-06 19:02:23 +00:00
Oliver Hamlet 8463e9ee7c Update changelog and version for 0.22.2 release 2023-11-25 17:05:41 +00:00
Oliver Hamlet 2614e02dbf Update version and changelog for v0.22.1 release 2023-10-06 14:49:16 +01:00
Oliver Hamlet 8a21b8321b Update version and changelogs for v0.22.0 release 2023-09-29 17:15:38 +01:00
Oliver Hamlet b549b00b28 Add support for Starfield
Starfield adds a new type of plugin that I'm calling an override plugin,
which does not use up a load order slot when active, and a plugin cannot
be light and override at the same time. It also increases the BA2
version number, though the differences are not relevant to libloot's
usage, and loads BA2s from plugins differently.

The latest libloadorder distinguishes between plugins that are
implicitly active (i.e. they're active despite not being listed in
plugins.txt) and those that are made to load in certain positions by the
game.
2023-09-28 23:01:15 +01:00
Oliver Hamlet 2408a7b3ba Remove SimpleMessage
It's no longer used by LOOT.
2023-09-12 19:56:53 +01:00
Oliver Hamlet 0a7efcb4d3 Update version and changelogs for v0.21 release 2023-08-30 19:57:06 +01:00
Oliver Hamlet 356eb0243f Don't add .ghost file extensions in plugin class
Instead assume that paths passed in are correct, and then trim the
.ghost extension if present before setting the plugin name.
2023-08-23 19:48:20 +01:00
Oliver Hamlet 46f28eef07 Add Get/SetAdditionalDataPaths to GameInterface 2023-08-23 19:48:20 +01:00
Oliver Hamlet 1a8eec19de Swap some std::string in API with std::filesystem::path
Specifically the functions that were changed in 0.19.4 to accept paths
without changing their type signatures to avoid breaking compatibility.
2023-08-23 19:48:19 +01:00
Oliver Hamlet 6c590381e5 Fix doc comment 2023-08-18 18:40:07 +01:00
Oliver Hamlet 0eee8066b7 Add const GetType and GetDatabase methods to GameInterface 2023-08-18 17:28:39 +01:00
Oliver Hamlet 74805a3bc6 Update version and changelog for v0.19.4 release 2023-05-06 21:19:54 +01:00
Oliver Hamlet d7f5a518e1 Add support for MS Store's Fallout 4 DLC
The Microsoft Store installs Fallout 4 DLC to separate directories
outside of the game's install path. The relative paths are fixed: users
cannot customise the install paths (aside from the folder within which
all games are installed on a drive), and renaming the DLC's path or its
Content directory causes an error when trying to launch the game.

The game scans these additional data paths similarly to how it scans
the main data path: it doesn't only load the DLC plugins from their
data paths, it will find non-DLC plugins in them, and DLC plugins can be
moved between them and still be detected. The same is true for BA2
files and other resources.

To support these separate directories:

- GameInterface::IsValidPlugin, GameInterface::LoadPlugins
  and GameInterface::SortPlugins() now take plugin paths instead of
  plugin filenames. Relative paths are interpreted as relative to the
  data path, so the change is backwards-compatible, and absolute paths
  are used as given.
- LoadPlugins now checks that all filenames in the given paths are
  unique, which was previously required but not enforced.
- When scanning for archives, LOOT now scans the DLC data paths before
  scanning the game data path.
- libloadorder and loot-condition-interpreter have been updated to
  support the MS Store Fallout 4 DLC paths. libloadorder has built-in
  support for the Fallout 4 DLCs specifically, so does not need to be
  initialised, while loot-condition-interpreter's support is not
  specific and so it's now passed a list of data paths that includes the
  Fallout 4 DLC paths when appropriate.

When listing the DLC paths together with the game's main data path, the
order they're listed in matches the order in which the game scans them
for plugins, with the game stopping at the first directory in which it
finds a file it's looking for.

This introduces detection of whether or not a game install comes from
the Microsoft Store: like LOOT and libloadorder, libloot detects this by
looking for an appxmanifest.xml file in the install path.

The new Game::SetAdditionalDataPaths() method may be added to
GameInterface in the future: that hasn't been done yet because adding it
will break the ABI.
2023-05-06 21:16:49 +01:00
Oliver Hamlet c5efd9e5c2 Update version and changelog for v0.19.3 release 2023-03-18 21:56:15 +00:00
Oliver Hamlet 3a070420c8 Update version and changelog for v0.19.2 release 2023-01-13 21:27:03 +00:00
Oliver Hamlet 6c1d7dc57f Update version and changelog for v0.19.1 release 2023-01-09 19:13:26 +00:00
Oliver Hamlet 938d5bce57 Update version and changelog for v0.19.0 release 2023-01-07 19:21:35 +00:00
Oliver Hamlet 614a8d306c Add missing doxygen doc comment 2023-01-07 19:21:34 +00:00
Oliver Hamlet 43ee1549d2 Distinguish between overlap edge types
By providing different edge types for record overlap and asset overlap.
2023-01-06 22:20:35 +00:00
Oliver Hamlet 92c71cd352 Distinguish group edges by data source
If a group edge exists due to the presence of some user metadata,
distinguish that from when the edge exists only due to masterlist
metadata.

The logic for detecting when a path between two groups involves user
metadata gives results that are stable but that do not consistently
paths that only consist of masterlist metadata. If there are multiple
paths between two groups and some involve user metadata, the same path
will be picked every time, but the path picked depends on the structure
of the groups graph.

In practice this shouldn't be much of a problem because the paths are
only exposed when there's a cycle, and in that case all paths between
the two groups need to be removed/broken anyway.
2023-01-06 22:20:35 +00:00
Oliver Hamlet 10a9ba60e2 Make UndefinedGroupError::GetGroupName() const
Also move the constructor and function definitions out of the header
where they're declared.
2023-01-06 22:20:34 +00:00
Oliver Hamlet 57b397aed6 Make CyclicInteractionError::GetCycle() const 2023-01-06 22:20:34 +00:00
Oliver Hamlet fbc503a363 Rename PluginInterface::DoFormIDsOverlap()
The use of FormIDs doesn't apply to Morrowind and it's really the
records that are significant - FormIDs are an implementation detail.
This also aligns with other use of records in names.
2023-01-06 22:20:34 +00:00
Oliver Hamlet 2c976f8848 Add GameInterface::GetActivePluginsFilePath()
This breaks ABI compatibility, but LOOT can use it to stop guessing
where the file is when it needs to display the path.
2023-01-06 22:20:34 +00:00