diff --git a/docs/BOSS Metadata Syntax.html b/docs/BOSS Metadata Syntax.html
index f321c83a..a82b1cd3 100644
--- a/docs/BOSS Metadata Syntax.html
+++ b/docs/BOSS Metadata Syntax.html
@@ -297,7 +297,7 @@ nav: 0
name | string | ✓ | Can be an exact plugin filename or a regular expression plugin filename. If the period that precedes the file extension has been escaped (eg. \.esp, \.esm), the string is treated as a regular expression, otherwise it is treated as an exact filename.
|
enabled | boolean | ✗ | Enables or disables use of the plugin object. Used for user rules, but no reason to use it in the masterlist. If unspecified, defaults to true.
- |
priority | integer | ✗ | Modifies plugin position relative to others that change one or more of the same records, but which are otherwise unrelated (ie. neither plugin lists the other as a master, requirement, or in its after list). A plugin with a higher priority value will load after a plugin with a lower priority value. Value can be anything in the range -2000000000 to 2000000000, and if unspecified defaults to 0.
+ |
priority | integer | ✗ | Modifies plugin position relative to others that change one or more of the same records, but which are otherwise unrelated (ie. neither plugin lists the other as a master, requirement, or in its after list). An exception is made for plugins that contain only a header record: these plugins have their priorities compared against all unrelated plugins. A plugin with a higher priority value will load after a plugin with a lower priority value. Value can be anything in the range -2000000000 to 2000000000, and if unspecified defaults to 0.
|
after | file list | ✗ | An unordered list of plugins that this plugin must load after, but which are not dependencies. Used for resolving specific compatibility issues and by user rules for specifying custom plugin positions.
|
req | file list | ✗ | An unordered list of files that this plugin requires to be present. This plugin will load after any plugins listed. If any of these files are missing, an error message will be displayed. Intended for use specifying implicit dependencies, as BOSS will detect a plugin's explicit masters itself.
|
inc | file list | ✗ | An unordered list of files that this plugin is incompatible with. If any of these files are present, an error message will be displayed.
diff --git a/docs/BOSS Readme.html b/docs/BOSS Readme.html
index 2200484e..4d668105 100644
--- a/docs/BOSS Readme.html
+++ b/docs/BOSS Readme.html
@@ -210,7 +210,7 @@ Clicking on a plugin in the list will display the editing panel, where its load
|
| Field | Description
|
| Enable User Changes | If this is checked, BOSS will use the metadata you supplied when sorting the current plugin. Otherwise, your metadata will be ignored.
- |
| Priority | This is a very rough control for determining how far up or down the load order a plugin should go. Plugins with equal priority will be compared as normal by the sorting algorithm, but plugins with a larger priority value will load later in the load order than plugins with a smaller priority value, unless the former depends on the latter or the latter is explicity told to load after the former. Plugins have a default priority of 0.
+ |
| Priority | This is a rough control for how far up or down the load order a plugin should go. Plugins with equal priority will be compared as normal by the sorting algorithm, but plugins with a larger priority value will load later in the load order than plugins with a smaller priority value. Priority comparisons are only used for plugins that are not masters, requirements or otherwise told to load after one another, and only between plugins that conflict, except if a plugin is empty, in which case conflict status doesn't matter. Plugins have a default priority of 0.
|
| Requirements | This is a list of files that are required by the current plugin for it to function correctly. BOSS will display an error message if any of the listed files are missing.
Any file, not just plugins, can be listed here, and each file has three sub-fields:
diff --git a/src/backend/graph.cpp b/src/backend/graph.cpp
index 64a690f5..3a2ac0b3 100644
--- a/src/backend/graph.cpp
+++ b/src/backend/graph.cpp
@@ -179,15 +179,20 @@ namespace boss {
for (boost::tie(vit, vitend) = boost::vertices(graph); vit != vitend; ++vit) {
BOOST_LOG_TRIVIAL(trace) << "Adding priority difference edges to vertex for \"" << graph[*vit].Name() << "\".";
- boss::vertex_it vit2 = vit;
- ++vit2;
- while (vit2 != vitend) {
- BOOST_LOG_TRIVIAL(trace) << "Checking for priority difference between \"" << graph[*vit].Name() << "\" and \"" << graph[*vit2].Name() << "\".";
- if (graph[*vit].Priority() == graph[*vit2].Priority()) {
- ++vit2;
+ //Priority differences should only be taken account between plugins that conflict.
+ //However, an exception is made for plugins that contain only a header record,
+ //as they are for loading BSAs, and in Skyrim that means the resources they load can
+ //be affected by load order.
+
+ boss::vertex_it vit2, vitend2;
+ for (boost::tie(vit2, vitend2) = boost::vertices(graph); vit2 != vitend2; ++vit2) {
+
+ if (graph[*vit].Priority() == graph[*vit2].Priority() || (!graph[*vit].FormIDs().empty() && !graph[*vit2].FormIDs().empty() && !graph[*vit].DoFormIDsOverlap(graph[*vit2]))) {
continue;
}
+ BOOST_LOG_TRIVIAL(trace) << "Checking priority difference between \"" << graph[*vit].Name() << "\" and \"" << graph[*vit2].Name() << "\".";
+
vertex_t vertex, parentVertex;
if (graph[*vit].Priority() < graph[*vit2].Priority()) {
parentVertex = *vit;
@@ -204,7 +209,6 @@ namespace boss {
boost::add_edge(parentVertex, vertex, graph);
}
- ++vit2;
}
}
}
|