Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sort plugins closer to their masters #47

Open
Qwinn1 opened this issue Jan 19, 2019 · 5 comments
Open

Sort plugins closer to their masters #47

Qwinn1 opened this issue Jan 19, 2019 · 5 comments

Comments

@Qwinn1
Copy link

Qwinn1 commented Jan 19, 2019

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
Copy link
Author

Qwinn1 commented Jan 19, 2019

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
Copy link
Member

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
Copy link
Member

Ortham commented Jan 19, 2019

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
Copy link
Author

Qwinn1 commented Jan 21, 2019

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
Copy link
Author

Qwinn1 commented Jan 30, 2019

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?

@sibir-ine sibir-ine changed the title Using Masters To Inform Plugin Ordering Sort plugins closer to their masters Apr 27, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

3 participants