From 938d5bce576fec349dfbf4cacfacfded62468431 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Sat, 7 Jan 2023 18:53:39 +0000 Subject: [PATCH] Update version and changelog for v0.19.0 release --- docs/api/changelog.rst | 55 +++++++++++++++++++++++++++++++++++++ docs/api/sorting.rst | 3 +- include/loot/loot_version.h | 4 +-- src/api/resource.rc | 8 +++--- 4 files changed, 63 insertions(+), 7 deletions(-) diff --git a/docs/api/changelog.rst b/docs/api/changelog.rst index 1d4726b8..320da5cb 100644 --- a/docs/api/changelog.rst +++ b/docs/api/changelog.rst @@ -2,6 +2,61 @@ Version History *************** +0.19.0 - 2023-01-07 +=================== + +Added +----- + +- Sorting now takes into account overlapping assets in BSAs/BA2s that are loaded + by plugins. If two plugins don't make changes to the same record but load BSAs + (or BA2s for Fallout 4) that contain data for the same asset path, the plugin + that loads more assets will load first (unless that's contradicted by + higher-priority data and metadata). +- :cpp:any:`loot::GameInterface::GetActivePluginsFilePath()`, which returns the + path of the file libloot reads to determine which plugins are active. +- :cpp:any:`loot::EdgeType::masterlistGroup`, + :cpp:any:`loot::EdgeType::userGroup`, + :cpp:any:`loot::EdgeType::recordOverlap` and + :cpp:any:`loot::EdgeType::assetOverlap`. + +Fixed +----- + +- Building libloot using CMake versions older than 3.24. +- A few potential null pointer dereferences. + +Changed +------- + +- Sorting has been heavily optimised, leading to sorting being about 58 times + faster than libloot 0.18.3 with large load orders: + + - The plugin graph used during sorting has been split in two. As a result, + any plugin data or metadata that would previously caused a cyclic + interaction error due to contradicting a plugin's master flag being set is + now silently ignored instead. + - The tie-breaking stage has been completely overhauled. As a result, some + ties may now be broken differently to how they were broken in previous + versions of libloot. + - :cpp:any:`loot::GameInterface::LoadPlugins()` now checks plugin validity in + parallel. + +- Cyclic interaction errors now distinguish between group edges that involve + user metadata and those that don't. +- ``PluginInterface::DoFormIDsOverlap()`` has been renamed to + :cpp:any:`loot::PluginInterface::DoRecordsOverlap()`. +- :cpp:any:`loot::CyclicInteractionError::GetCycle()` is now ``const``. +- :cpp:any:`loot::UndefinedGroupError::GetGroupName()` is now ``const``. +- Linux builds are now built using GCC 10 and now link against the ``tbb`` + library. + +Removed +------- + +- ``EdgeType::group`` +- ``EdgeType::overlap`` + 0.18.3 - 2022-12-13 =================== diff --git a/docs/api/sorting.rst b/docs/api/sorting.rst index 870663aa..e59aa1e2 100644 --- a/docs/api/sorting.rst +++ b/docs/api/sorting.rst @@ -37,7 +37,8 @@ After that, two graphs are created, and the plugins are added to them as vertices in their sorted order. Plugins that have their master flag set go in one graph, and plugins that do not have the flag set go in the other. -Two graphs are used because master-flagged plugins must always load before non-master-flagged plugins, and it's much more efficient to sort them separately +Two graphs are used because master-flagged plugins must always load before +non-master-flagged plugins, and it's much more efficient to sort them separately and then combine their load orders than to enforce those relationships within a single graph. diff --git a/include/loot/loot_version.h b/include/loot/loot_version.h index 384ac812..3a8e87cd 100644 --- a/include/loot/loot_version.h +++ b/include/loot/loot_version.h @@ -34,10 +34,10 @@ namespace loot { inline constexpr unsigned int LIBLOOT_VERSION_MAJOR = 0; /** @brief libloot's minor version number. */ -inline constexpr unsigned int LIBLOOT_VERSION_MINOR = 18; +inline constexpr unsigned int LIBLOOT_VERSION_MINOR = 19; /** @brief libloot's patch version number. */ -inline constexpr unsigned int LIBLOOT_VERSION_PATCH = 3; +inline constexpr unsigned int LIBLOOT_VERSION_PATCH = 0; /** * @brief Get the library version. diff --git a/src/api/resource.rc b/src/api/resource.rc index 499f5ea5..1dad28be 100644 --- a/src/api/resource.rc +++ b/src/api/resource.rc @@ -2,8 +2,8 @@ #include 1 VERSIONINFO -FILEVERSION 0, 18, 3, 0 -PRODUCTVERSION 0, 18, 3, 0 +FILEVERSION 0, 19, 0, 0 +PRODUCTVERSION 0, 19, 0, 0 FILEOS VOS__WINDOWS32 FILETYPE VFT_DLL BEGIN @@ -13,12 +13,12 @@ BLOCK "040904b0" BEGIN VALUE "CompanyName", "LOOT" VALUE "FileDescription", "Library providing LOOT's core functionality" -VALUE "FileVersion", "0.18.3" +VALUE "FileVersion", "0.19.0" VALUE "InternalName", "loot" VALUE "LegalCopyright", "Copyright (C) 2013-2022 Oliver Hamlet" VALUE "OriginalFilename", "loot.dll" VALUE "ProductName", "LOOT" -VALUE "ProductVersion", "0.18.3" +VALUE "ProductVersion", "0.19.0" END END BLOCK "VarFileInfo"