loot / libloot

A C++ library for accessing LOOT's metadata and sorting functionality.
GNU General Public License v3.0
32 stars 12 forks source link

Sort plugins closer to their masters #47

Open Qwinn1 opened 5 years ago

Qwinn1 commented 5 years ago

Proposal: Any mod that has a non-ESM master should be placed as close to it's master as possible.

Reasoning: There are several advantages to this. When it comes to patches, I have detailed why proper patch placement is immediately after the last of its masters here, with an example of how not placing them that way can cause errors: https://www.nexusmods.com/skyrimspecialedition/articles/625

I initially thought to request this only for conflict resolution patches, and identify those as mods with two or more non-vanilla masters, but it occurs to me that the principle holds even for non-patch mods that have only a single non-vanilla, non USSEP master. Take a mod like Enhanced Blood Textures. If you choose all the options in the installer, you'll get a host of sub-plugins (like "no screen blood"), all of which have a main EBT plugin as a master. Currently, LOOT will litter these sub-plugins all over the list, which is terrible from an organizational perspective, makes it impossible to synchronize installation and plugin order, and leads to possible conflicts with intervening mods that change the same record being overridden by a sub-plugin of EBT but not EBT itself. With my proposal, all the EBT plugins will be grouped together nice and neatly in the plugin list, which wouldn't just prevent conflicts, it would also just look better and be easier to review and adjust their position all together as a single unit, since they really should be considered and treated as such.

Or take ACE (Armor and Clothing Extension), which has one master, WACCF (Weapons, Armor, Clothing and Clutter Fixes). The author - any author really - would certainly design these with the assumption that ACE would immediately overwrite WACCF in every shared record. An intervening mod C between the two that shared a record with them would be only partially overwritten by ACE, while possibly also partially overwriting WACCF in some other regard. This can only cause havoc. With ACE naturally placed immediately after WACCF, the combination will be either wholly overwritten by Mod C, or Mod C will wholly ovewrite WACCF+ACE, but there should generally exist no good circumstance in which any mod (other than patches for WACCF) should come between WACCF and ACE, partially overwriting one and being partially overwritten by the other. This is also a good example of why a patch for WACCF and some other Mod X should come immediately after WACCF, as placing that patch below ACE will revert ACE's intentional changes back to WACCF's values in any shared record.

Note that in my methodology below, I'm going to treat this as if it should only apply to masters without the ESM flag checked, but it may be better to just exclude the vanilla ESMs and USSEP. I'm still trying to decide if there ARE any pros or cons in regards to whether it should just be vanilla ESMs and USSEP excluded, or all ESMs excluded. For now I'll just say all ESMs since it makes the below more readable. Please treat the words "ESP master" below to mean "non-ESM flagged" masters.

Methodology:

Pass 1: Go through all plugins and count the number of ESP masters each plugin has. Pass 2: Apply LOOT's sorting algorithm only to mods with zero ESP masters. Pass 3: Insert into the result of Pass 2 all mods with 1 ESP master, placing them immediately after its master or as close to it as strict metadata allows. Pass 4: Insert into the result of Pass 3 all mods with 2 ESP masters, placing them immediately after the last of its masters or as close to it as strict metadata allows. Pass X: Insert into the result of Pass X all mods with X-1 ESP masters, placing them immediately after the last of its masters or as close to it as strict metadata allows.

Steps 3-X are really all one step, the point being to order all base mods with no masters first, then insert mods with 1 master, then insert mods and patches with 2 masters, etc. till you're done.

By "strict metadata" I mean specific "Mod X must come after Mod Y" ordering, not just "Group B must come after Group A" ordering. If this turns out not to work for all mods that have only one master, I won't mind this proposal being reduced to only applying to actual conflict patches (2 or more masters), which should always be possible. I just decided to propose this for all mods with any masters until we can find a solid reason not to and because it might actually be easier to implement this way.

Possible complications and solutions:

Problem A) What if Mod A has a master B which itself has more masters than A does. This could be handled in two ways:

1) During pass 1, build an expanded master list, where if Mod A has a master B, and master B itself has masters C and D, then C and D are also counted as masters of Mod A for the purpose of determining which pass it should be inserted in. 2) Probably easier, if the current pass is attempting to insert a plugin whose master hasn't itself been inserted yet, simply skip Mod A in that current pass. Eventually master B will be inserted, and any mod A that was skipped can then be inserted in a later pass.

Problem B) How do you order patches that would be inserted into the same position via this method?

Take mods A, B and C. There exist patches for A-B, for B-C, and for A-C. My method would result in this:

1: Mod A 2: Mod B 3: Patch A-B 4: Mod C ?: Patch A-C ?: Patch B-C

Those last two patches would be inserted in the same pass, and placed after C because that's the lower of their masters. How should they be ordered? Answer: They should be ordered by the position of their other master. Since Mod A should come before Mod B, then patch A-C should come before patch B-C.

Please throw me any questions or arguments you have against this, I've given a lot of thought to it for a year now and I plan to monitor this request. To be honest, that LOOT doesn't do this is the only reason I have not used LOOT for actual ordering until now... so far I just use it to advise me of required patches. If it did this, I would be very likely to adopt and recommend its ordering highly.

Qwinn1 commented 5 years ago

Additional note: IF it is decided that this idea would only generally be applied to mods with 2 or more masters - in other words, just compatibility patches - then I would suggest that the only masters that should be ignored when counting masters to determine if a plugin is a patch are the vanilla masters. Even USSEP should be counted to determine if a mod is a patch in that circumstance. It's possible that a mod might have dependency on USSEP and have another master and not be a patch, but I think those would be significantly rarer than actual patches for USSEP (I publish over a dozen myself). and I still wouldn't see the harm in applying this ordering logic to those few instances anyway.

MacSplody commented 5 years ago

For reference this is the sorting for a large load order with the current masterlist

Click to view picture --- ``` 0 0 Skyrim.esm 1 1 Update.esm 2 2 Dawnguard.esm 3 3 HearthFires.esm 4 4 Dragonborn.esm 254 FE 0 UHDAP - en0.esp 254 FE 1 UHDAP - en1.esp 254 FE 2 UHDAP - en2.esp 254 FE 3 UHDAP - en3.esp 254 FE 4 UHDAP - en4.esp 254 FE 5 UHDAP - MusicHQ.esp 5 5 Unofficial Skyrim Special Edition Patch.esp 6 6 BSAssets.esm 7 7 BSHeartland.esm 8 8 MajesticMountains_Landscape.esm 9 9 BS_DLC_patch.esp 10 a Campfire.esm 11 b FISS.esp 12 c Wyrmstooth.esp 254 FE 6 LSFX-SSE-Audiosettings.esp 13 d RelightingSkyrim_SSE.esp 14 e UnlimitedBookshelves.esp 15 f Audio Overhaul Skyrim.esp 16 10 Book Covers Skyrim.esp 17 11 Immersive Sounds - Compendium.esp 18 12 Landscape Fixes For Grass Mods.esp 19 13 Prometheus_No_snow_Under_the_roof.esp 20 14 Cutting Room Floor.esp 21 15 dD - Enhanced Blood Main.esp 22 16 Weapons Armor Clothing & Clutter Fixes.esp 23 17 MoonAndStar_MAS.esp 24 18 SMIM-SE-Merged-All.esp 25 19 EmbersHD.esp 26 1a Shadowmarks.esp 27 1b Gildergreen Regrown.esp 254 FE 7 SkyUI_SE.esp 254 FE 8 SRG Enhanced Trees Activator.esp 28 1c Veydosebrom - Grasses and Groundcover.esp 254 FE 9 UIExtensions.esp 29 1d AddItemMenuSE.esp 30 1e AHZmoreHUD.esp 31 1f AmazingFollowerTweaks.esp 254 FE a aMidianBorn Book of Silence.esp 32 20 Andromeda - Unique Standing Stones of Skyrim.esp 33 21 Animallica.esp 34 22 Relationship Dialogue Overhaul.esp 254 FE b Unique Region Names.esp 35 23 Castle Volkihar Rebuilt.esp 36 24 JKs Skyrim.esp 37 25 Undriel_QuaintRavenRock.esp 38 26 Ashbound.esp 39 27 Better Dynamic Snow.esp 40 28 TrueStormsSE.esp 41 29 Obsidian Weathers.esp 42 2a skyBirds_SSE.esp 43 2b BirdsOfSkyrim_SSE.esp 254 FE c Particle Patch for ENB SSE.esp 44 2c SLO_StoneWalls.esp 45 2d Thunderchild - Epic Shout Package.esp 46 2e moonpath.esp 47 2f JRMoonpathtoElsweyrPatch.esp 48 30 Point The Way.esp 49 31 Holidays.esp 50 32 Rorikstead.esp 51 33 JKs Skyrim_Rorikstead_Patch.esp 52 34 JKs Skyrim_Holidays_Patch.esp 254 FE d Particle Patch - RLS Patch.esp 53 35 BirdsAndFlocks_SSE.esp 54 36 MajesticMountains.esp 254 FE e Undriel_QuaintRavenRock Ashbound.esp 55 37 ZIA_Complete Pack_V4.esp 56 38 Wintersun - Faiths of Skyrim.esp 57 39 BetterDynamicSnow_PATCH.esp 58 3a SkyrimSewers.esp 59 3b Skyrim Better Roads and Bridges - All In One - Merged.esp 60 3c Run For Your Lives.esp 61 3d Tel Mithryn.esp 62 3e Keld-Nar.esp 63 3f Dolmen Ruins.esp 64 40 Darkwater Crossing.esp 65 41 Dawnstar.esp 66 42 Serana Dialogue Edit.esp 67 43 Inigo.esp 254 FE f Tel Mithryn Ashbound.esp 68 44 Skaal Village.esp 69 45 JKs Skyrim_Dawnstar_Patch.esp 70 46 Bring Out Your Dead.esp 254 FE 10 NSUTR_bugfixes.esp 254 FE 11 NSUTR_groundsnow_mesh_fixes.esp 71 47 JKs Skyrim_Dawnstar_BOYD_NSUTR_Patch.esp 72 48 Shor's Stone.esp 73 49 Atlas Legendary OCS.esp 254 FE 12 Better Dynamic Snow - NSUTR Patch.esp 254 FE 13 Landscape For Grass Mods JK'S Skyrim.esp 74 4a Ivarstead.esp 75 4b JKs Skyrim_BOYD_Patch.esp 76 4c FarmhouseChimneys.esp 77 4d JKs Skyrim_Ivarstead_Patch.esp 78 4e Provincial Courier Service.esp 79 4f frozenintime.esp 80 50 Helarchen Creek.esp 81 51 Kynesgrove.esp 82 52 Telengard.esp 83 53 Whistling Mine.esp 84 54 Soljund's Sinkhole.esp 85 55 Karthwasten.esp 86 56 JKs Skyrim_Skaal Village_Patch.esp 254 FE 14 Landscape Fixes For Grass mods - Cutting Room Floor Locations.esp 87 57 Dragon Bridge.esp 88 58 JKs Skyrim_Dragon Bridge_Patch.esp 89 59 ForgottenCity.esp 254 FE 15 Relighting Skyrim - JK's Skyrim Patch.esp 90 5a JKs Skyrim_Cutting Room Floor_Patch.esp 91 5b WheelsOfLull.esp 254 FE 16 No Snow Under The Roof - CRF Patch.esp 254 FE 17 Landscape For Grass Mods - Moon and Star PATCH.esp 92 5c Summermyst - Enchantments of Skyrim.esp 93 5d Lore Weapon Expansion.esp 94 5e Skyshards.esp 254 FE 18 BosmerArmorMATY743.esp 95 5f WarmongerArmory_DLC.esp 96 60 WarmongerArmory_Vanilla.esp 97 61 WarmongerArmory_LeveledList.esp 254 FE 19 WACCF Warmonger Armory Patch.esp 98 62 CommonClothes.esp 99 63 Guard Dialogue Overhaul.esp 100 64 Unique Uniques.esp 254 FE 1a WACCF Unique Uniques Patch.esp 254 FE 1b ZIA_WACCF_Patch.esp 254 FE 1c Qw_WACCF_AOS Patch.esp 254 FE 1d Qw_WACCF_CRF Patch.esp 254 FE 1e Audio Overhaul Skyrim - CRF Patch.esp 254 FE 1f Quaint Raven Rock - USSEP Patch.esp 101 65 Lucien.esp 254 FE 20 NSUTR_improvements.esp 102 66 The Paarthurnax Dilemma.esp 103 67 Darkend.esp 254 FE 21 Audio Overhaul Skyrim - Darkend Patch.esp 254 FE 22 Audio Overhaul Skyrim - Enhanced Blood Patch.esp 254 FE 23 Audio Overhaul Skyrim - GDO Patch.esp 254 FE 24 Audio Overhaul Skyrim - Immersive Sounds Patch.esp 254 FE 25 Improved Traps.esp 254 FE 26 Audio Overhaul Skyrim - Improved Traps Patch.esp 254 FE 27 Audio Overhaul Skyrim - Thunderchild Patch.esp 254 FE 28 Audio Overhaul Skyrim - Unique Uniques Patch.esp 254 FE 29 Audio Overhaul Skyrim - Unique Uniques & WACCF Patch.esp 254 FE 2a BDS - MM Patch.esp 254 FE 2b Unique Region Names - CRF Patch.esp 104 68 FarmhouseChimneysArthmoorVillagesMerged.esp 105 69 DeathIsHighlyOverrated.esp 254 FE 2c Landscape For Grass Mods - Arthmoor's Dragon Bridge PATCH.esp 254 FE 2d Landscape For Grass Mods -Provincial Courier PATCH.esp 254 FE 2e Landscape For Grass Mods Arthmoor's Shor's Stone PATCH.esp 254 FE 2f Helarchen Creek - No Snow Under the Roof.esp 106 6a Tel Mithryn Prison.esp 254 FE 30 Relighting Skyrim - Quaint Raven Rock Patch.esp 254 FE 31 NSUTR - USSEP Patch.esp 254 FE 32 Unique Region Names - Inigo Patch.esp 107 6b FarmhouseChimneysHelarchen+MaS.esp 254 FE 33 Landscape For Grass Mods - Arthmoor's Rorikstead PATCH.esp 254 FE 34 Unique Region Names - MAS Patch.esp 254 FE 35 Whistling Mine - No Snow Under the Roof.esp 254 FE 36 Forgotten City - USSEP Patch.esp 108 6c VioLens SE.esp 254 FE 37 Qw_BeyondSkyrimBruma_USSEP Hotfix Patch.esp 254 FE 38 Unique Region Names - Keld-Nar Patch.esp 254 FE 39 JKs Skyrim_skyBirds_Patch.esp 109 6d JKs Skyrim_Thunderchild_Patch.esp 254 FE 3a JKs Skyrim_Unique Region Names_Patch.esp 254 FE 3b Obsidian Weathers - RLS Patch.esp 254 FE 3c SkyBeRoads - USSEP Patch.esp 254 FE 3d Unique Region Names - BDS Patch.esp 254 FE 3e Unique Region Names - BS Bruma Patch.esp 254 FE 3f Unique Region Names - Helarchen Creek Patch.esp 254 FE 40 Unique Region Names - Dragon Bridge Patch.esp 254 FE 41 Inigo - USSEP Patch.esp 254 FE 42 JKs Skyrim_Birds Of Skyrim_Patch.esp 254 FE 43 JKs Skyrim_Farmhouse Chimneys_Patch.esp 254 FE 44 JKs Skyrim_Ivarstead_Holidays_Patch.esp 254 FE 45 JKs Skyrim_Obsidian Weathers_Patch.esp 254 FE 46 SLO Stone Walls - skyBirds Patch.esp 254 FE 47 Unique Region Names - BOYD Patch.esp 254 FE 48 Unique Region Names - Kynesgrove Patch.esp 254 FE 49 Unique Region Names - Provincial Courier Service Patch.esp 254 FE 4a Bent Pines.esp 254 FE 4b Better Dynamic Ash.esp 254 FE 4c Better Dynamic Snow - Correction Patch.esp 254 FE 4d Better Dynamic Snow - NSUTR & CRF Patch.esp 254 FE 4e BetterDynamicSnow_BEYOND_SKYRIM.esp 254 FE 4f BetterShapedWeaponsLW-XB.esp 254 FE 50 BlendedRoads.esp 254 FE 51 BlendedRoads - SMIM Patch.esp 110 6e Brigandage.esp 254 FE 52 BS Bruma - Majestic Mountains Patch.esp 111 6f BS Bruma - Undeath Patch.esp 254 FE 53 BS Bruma - VioLens Patch.esp 254 FE 54 Darkend - Hotfix.esp 254 FE 55 Darkwater Crossing - Inigo Patch.esp 254 FE 56 DivinePunishmentForArrowsToTheKnee.esp 254 FE 57 EBT - skyBirds Patch.esp 254 FE 58 EmbersHD - Campfire Patch.esp 254 FE 59 EmbersHD - Forges.esp 254 FE 5a EmbersHD - Lava Craters.esp 254 FE 5b Ultimate HD Fire Effects.esp 254 FE 5c EmbersHD - UHDFE Patch.esp 112 70 JRMoonpathBrumaPatch.esp 254 FE 5d ESO Skyshards - BSBruma.esp 254 FE 5e ESO Skyshards - Wyrmstooth.esp 254 FE 5f ETHEREAL CLOUDS.esp 113 71 Extended Encounters.esp 114 72 Extended UI.esp 254 FE 60 Fences of Skyrim.esp 115 73 Footprints.esp 254 FE 61 Frankly HD Stormcloaks and Guards.esp 116 74 FranklyHDImperialArmorsAndWeapons.esp 254 FE 62 frozenintime - Snow Textures.esp 254 FE 63 HD Road Signs.esp 117 75 PrvtI_HeavyArmory.esp 254 FE 64 Heavy Armory - USSEP Patch.esp 254 FE 65 High Poly Ferns.esp 254 FE 66 High Poly Project.esp 254 FE 67 Holidays - USSEP Patch.esp 254 FE 68 Holidays - USSEP & JKs Skyrim Patch.esp 254 FE 69 RDO - iAFT Patch.esp 254 FE 6a iAFT - USSEP Patch.esp 254 FE 6b RDO - CRF + USSEP Patch.esp 254 FE 6c iAFT - DLC Patch.esp 118 76 iHUD.esp 254 FE 6d Qw_ISC_USSEP Patch.esp 254 FE 6e Qw_WACCF_ISC Patch.esp 254 FE 6f Immersive Sounds - DLC Patch.esp 254 FE 70 Immersive Sounds - Enhanced Blood Patch.esp 254 FE 71 Immersive Sounds - Option - Classic RPG Healing.esp 254 FE 72 Immersive Sounds - Option - Demonic Draugr.esp 254 FE 73 Immersive Sounds - Option - Dungeon Ambiance.esp 254 FE 74 Immersive Sounds - Option - Firebolt Alternate.esp 254 FE 75 Immersive Sounds - Option - Sensible Storm Atronachs.esp 254 FE 76 Immersive Sounds - Option - Well-Mannered Wolves.esp 254 FE 77 Indistinguishable VANILLA Billboards.esp 254 FE 78 Inigo - CRF Patch.esp 254 FE 79 Inigo - RLS Patch.esp 254 FE 7a JRBrumaPatch.esp 254 FE 7b JRCRFPatch.esp 254 FE 7c JRDwarvenMudcrabPatch.esp 119 77 Lucien-MoonandStar-Patch.esp 120 78 Lucien-Moonpath-Patch.esp 121 79 LupineWerewolfPerkExpansion.esp 254 FE 7d MajesticMountains_LOD.esp 254 FE 7e MajesticMountains_SMIM.esp 254 FE 7f Mining Makes Noise.esp 122 7a mintylightningmod.esp 123 7b MoonAndStar_ImmersionPatch.esp 254 FE 80 Noble Skyrim.esp 254 FE 81 Noble Skyrim - SMIM Patch.esp 254 FE 82 Nordic Snow.esp 254 FE 83 Obsidian Weathers MCM.esp 254 FE 84 Obsidian_TS_Patch_Spectral.esp 254 FE 85 Obsidian_TS_AOS_Patch.esp 254 FE 86 Particle Patch - DIHO Patch.esp 254 FE 87 Particle Patch - Birds and Flocks Patch.esp 254 FE 88 Qw_RelightingSkyrim_CRF Patch.esp 254 FE 89 Particle Patch - Skyrim Sewers Patch.esp 254 FE 8a Particle Patch - Skyshards Patch.esp 254 FE 8b Particle Patch - Thunderchild Patch.esp 254 FE 8c Particle Patch - Wintersun Patch.esp 254 FE 8d PELTAPALOOZA.esp 254 FE 8e Perk Points at Skill Levels 50-75-100.esp 124 7c Potions.esp 254 FE 8f Potions Patch.esp 254 FE 90 Qw_AOS_USSEP Patch.esp 254 FE 91 Qw_BookCoversSkyrim_CRF Patch.esp 254 FE 92 RUSTIC SOULGEMS - Unsorted.esp 254 FE 93 Qw_RusticSoulgemsUnsorted_ISC Patch.esp 254 FE 94 Qw_WACCF_BSHeartland Patch.esp 254 FE 95 RaceMenu.esp 254 FE 96 RDO - Castle Volkihar Rebuilt Patch.esp 254 FE 97 RDO - iAFT & USSEP Patch.esp 254 FE 98 RDO - Serana Dialogue Edit Patch.esp 254 FE 99 Relighting Skyrim - Birds and Flocks Patch.esp 254 FE 9a Relighting Skyrim - Castle Volkihar Rebuilt Patch.esp 254 FE 9b Relighting Skyrim - Tel Mithryn Patch.esp 254 FE 9c RLS - Wintersun Patch.esp 254 FE 9d RUGNAROK.esp 254 FE 9e RUSTIC ARMOR AND WEAPONS.esp 254 FE 9f RUSTIC AZURA'S STAR.esp 254 FE a0 RUSTIC CLOTHING.esp 254 FE a1 RUSTIC DAEDRA.esp 254 FE a2 RUSTIC DEATH HOUND AND GARGOYLE.esp 254 FE a3 RUSTIC ELDERSCROLL.esp 254 FE a4 RUSTIC FROSTBITE SPIDER.esp 254 FE a5 RUSTIC SPRIGGAN.esp 254 FE a6 RUSTIC SPRIGGAN EFFECTS.esp 254 FE a7 RUSTIC WINDOWS.esp 254 FE a8 SkyHUD - iHUD Patch.esp 254 FE a9 Skyland.esp 254 FE aa Skyland - Blended Roads Patch.esp 254 FE ab Skyrim 3D Gildergreen.esp 254 FE ac Skyrim Realistic Overhaul - Part 1.esp 254 FE ad Skyrim Realistic Overhaul - Part 2.esp 254 FE ae Skyrim Realistic Overhaul - Part 3.esp 254 FE af Skyrim Realistic Overhaul - Update.esp 254 FE b0 SkyrimIsWindy.esp 254 FE b1 SkyrimIsWindy - EVT patch.esp 254 FE b2 SMIM-Bruma-Patch.esp 254 FE b3 Smooth Sky Mesh.esp 254 FE b4 Symphonies Of Skyrim.esp 254 FE b5 Symphonies of Skyrim - BS Bruma Patch.esp 254 FE b6 Symphonies of Skyrim - UHDAP Patch.esp 254 FE b7 Thief skills rebalance for Ordinator.esp 254 FE b8 Thunderchild - USSEP Patch.esp 254 FE b9 Thundering Shouts.esp 254 FE ba TravelRobes.esp 125 7d Tribunal Robes for SSE.esp 254 FE bb TrueStorms_MintyLightning_Patch.esp 254 FE bc Ultimate HD Candle Flames.esp 254 FE bd Unique Region Names - Darkwater Crossing Patch.esp 254 FE be Unique Region Names - Rorikstead Patch.esp 254 FE bf Unique Region Names - Tel Mithryn Prison Patch.esp 254 FE c0 Unique Region Names - Telengard Patch.esp 254 FE c1 Unlimited Bookshelves - AOS Patch.esp 254 FE c2 Unlimited Bookshelves - CRF Patch.esp 254 FE c3 Unlimited Bookshelves - iAFT Patch.esp 254 FE c4 Unlimited Bookshelves - ISC & WACCF Patch.esp 254 FE c5 Unlimited Bookshelves - ISC Patch.esp 254 FE c6 Unlimited Bookshelves - WACCF & AOS Patch.esp 254 FE c7 Unlimited Bookshelves - WACCF & Unique Uniques Patch.esp 254 FE c8 Unlimited Bookshelves - WACCF Patch.esp 254 FE c9 Unlimited Bookshelves - XxA_PxX Patch.esp 126 7e Visible Favorited Gear.esp 254 FE ca WACCF - Frankly HD Imperials Patch.esp 254 FE cb WACCF - iAFT Patch.esp 254 FE cc WACCF Heavy Armory Patch.esp 254 FE cd Warmonger Armory - CRF Patch.esp 254 FE ce Warmonger Armory - Tel Mithryn Prison Patch.esp 254 FE cf WGT.esp 254 FE d0 WheelsOfLull - Forgotten City - Bruma Patch.esp 254 FE d1 WheelsOfLull Patch - Assets.esp 254 FE d2 Wintersun - BCS Patch.esp 254 FE d3 Wintersun - USSEP Patch.esp 127 7f WondersofWeather.esp 254 FE d4 WyrmstoothThunderchildPatch.esp 254 FE d5 ZIA - CRF Patch.esp 254 FE d6 ZIA - ISC & WACCF Patch.esp 254 FE d7 ZIA - Unlimited Bookshelves & CRF Patch.esp 254 FE d8 ZIA - Unlimited Bookshelves & ISC & WACCF.esp 254 FE d9 ZIA - Unlimited Bookshelves & WACCF Patch.esp 254 FE da ZIA - Unlimited Bookshelves Patch.esp 254 FE db ZIA - WACCF & AOS Patch.esp 128 80 Imperious - Races of Skyrim.esp 129 81 Ordinator - Perks of Skyrim.esp 254 FE dc Unique Region Names - Ordinator Patch.esp 130 82 Apocalypse - Magic of Skyrim.esp 131 83 Apocalypse - Ordinator Compatibility Patch.esp 254 FE dd Ordinator - Beyond Skyrim Bruma Patch.esp 254 FE de Qw_Ordinator_AOS Patch.esp 132 84 Sacrosanct - Vampires of Skyrim.esp 133 85 Wildcat - Combat of Skyrim.esp 134 86 J42_ArmorRatingRedux.esp 135 87 Alternate Start - Live Another Life.esp 254 FE df Unique Region Names - Alternate Start Patch.esp 136 88 FarmhouseChimneysLAL+CRF.esp 254 FE e0 Landscape Fixes For Grass mods - Alternate start Locations.esp 254 FE e1 Particle Patch - Alternate Start Patch.esp 254 FE e2 RDO - Alternate Start Patch.esp 137 89 Open Cities Skyrim.esp 254 FE e3 Audio Overhaul Skyrim - Obsidian Weathers & OSC Patch.esp 254 FE e4 Audio Overhaul Skyrim - Open Cities Patch.esp 254 FE e5 Open Cities Skyrim - Holidays.esp 138 8a JKs Skyrim_Open Cities_Patch.esp 254 FE e6 OCS + Skyrim Sewers.esp 254 FE e7 JKs Skyrim_Open Cities_Holidays_Patch.esp 254 FE e8 Unique Region Names - OCS Patch.esp 254 FE e9 Unique Region Names - OCS & Skyrim Sewers Patch.esp 254 FE ea Unique Region Names - JK's Skyrim & OCS & Holidays.esp 254 FE eb JKs Skyrim_Open Cities_CRF_Patch.esp 254 FE ec Obsidian Weathers - OCS Patch.esp 254 FE ed Particle Patch - OCS Patch.esp 254 FE ee OCS + CRF.esp 254 FE ef OCS + MAS.esp 254 FE f0 Particle Patch - OCS & CRF Patch.esp 254 FE f1 Relighting Skyrim - OCS Patch.esp 254 FE f2 SMIM - Open Cities Patch.esp 139 8b RealisticWaterTwo.esp 254 FE f3 Unique Region Names - RWT Patch.esp 254 FE f4 RealisticWaterTwo - Waves.esp 254 FE f5 Unique Region Names - RWT Waves Patch.esp 254 FE f6 RealisticWaterTwo - Open Cities.esp 254 FE f7 JKs Skyrim_RWT_Patch.esp 254 FE f8 RealisticWaterTwo - Ashbound Patch.esp 254 FE f9 RealisticWaterTwo - Quaint Raven Rock Patch.esp 254 FE fa Unique Region Names - RWT & OCS Patch.esp 254 FE fb Unique Region Names - RWT & MAS Patch.esp 254 FE fc Final Patch.esp 254 FE fd Holidays - RWT Patch.esp 254 FE fe Particle Patch - RWT Patch.esp 254 FE ff RealisticWaterTwo - Beyond Skyrim Bruma.esp 254 FE 100 RealisticWaterTwo - Option - Extended Ambiance.esp 254 FE 101 RealisticWaterTwo - Telengard Patch.esp 254 FE 102 RealisticWaterTwo - Wyrmstooth.esp 254 FE 103 RealisticWaterTwo - Waves - Wyrmstooth.esp 254 FE 104 Unique Region Names - CRF & RWT Patch.esp 254 FE 105 Unique Region Names - RWT & Ashbound Patch.esp 254 FE 106 Sum_WACCF_Patch.esp 140 8c Bashed Patch, 0.esp 254 FE 107 Modern Brawl Bug Fix.esp ``` ---
Ortham commented 5 years ago

Some initial thoughts on this:

Trying to load plugins as close as possible to their masters seems like a generally good idea, it's a more specific expression of the "load plugins as early as possible" idea. There are plenty of exceptions, e.g. map mods, but LOOT already handles such cases through groups and load after metadata.

I'm not sure why this idea would need to exclude ESMs or a subset of them. Could you elaborate? I'd prefer a solution that doesn't require special-casing.

I don't think it's useful to try to distinguish patches from other plugins based on the number of masters they have: I've come across plenty of patches with only one non-official master (even a few with none) and plenty of non-patches with more than one non-official master. I can see some utility in treating patches differently, but I doubt the identification heuristic would be accurate enough to be worth it.

As for methodology: how do you see the close-to-masters constraint fitting in with the existing constraints, i.e. which should it take priority over, which should override it, which does it sit equally with? See https://loot-api.readthedocs.io/en/latest/api/sorting.html for an overview of the current process, if that helps.

That's all for now, because I have bugs to fix.

Qwinn1 commented 5 years ago

Well, I don't see any point in counting the official masters, given that all mods can have all of them or just Skyrim.esm, and how many they have doesn't seem relevant to where they should be loaded.

USSEP is also a mod that lots and lots of other mods can have as a dependency that doesn't seem relevant to positioning. Let's say RW2 had it as a dependency just because it used some fixed asset in it... would that mean it should load higher? I don't think so. I see USSEP as pretty much an extension of the vanilla masters for these purposes... just as I would see YUP as an extension of the official FNV masters.

The idea of excluding all ESMs was in fact just a way to see if the above could be accomplished without special-casing.

If there's general agreement that this should work for all other masters and there's no reason to treat patches differently, which I agree with, I don't see a point in arguing for the idea of using number of masters to identify them.

As for the constraints, specific mod A must come after some other mod B rules should definitely take precedence... and late loading group is pretty important... but beyond that I can't see any other group constraint that seems more important.

Qwinn1 commented 5 years ago

Actually, it just occurred to me - I may have WAY overthought the methodology. Presuming LOOT is already smart enough to not place a plugin above its master, and I believe it already is.... can't we get the entire desired behavior by just treating any plugin with a non-vanilla (and maybe non-fixpack) master as an Early Loader?