ModOrganizer2 / modorganizer

Mod manager for various PC games. Discord Server: https://discord.gg/ewUVAqyrQX if you would like to be more involved
http://www.nexusmods.com/skyrimspecialedition/mods/6194
GNU General Public License v3.0
2.21k stars 163 forks source link

[Feature Request] Show conflict with files contained in BSA archive. #260

Open Project579 opened 6 years ago

Project579 commented 6 years ago

The problem

As of right now ModOrganizer 2 does not show conflicting files packed as BSAs like ModOrganizer 1 did.

Edit for people that came here via search engine

This feature is currently available under experimental flags.

Environment

Details

The old ModOrganizer was able to access files inside of BSAs thanks to the archive manager, but due to its removal (done by design to solve problems with Third Party application) an important feature that allowed users to see if the contents of archives where overwritten was lost. What i'm asking is NOT to re implement the old Archive Manager but simply allow MO 2 to see inside of BSAs (or BA2s) without the need for users to unpack the archive and check conflicting files against the other installed mods; obviously BSAs always lose conflicts with non-packed files but MO 2 should also be able to show which files will get overwritten.

Al12rs commented 6 years ago

Don't worry this is already being worked on, there are technical difficulties due to the fact BSAs now are loaded in the correct order, not the way Mo1 did which was just a new system only Mo used and that was in contrast with how the game actually loads things. We need to reimplement the order and make sure that parsing the BSA does not kill performance. But it is being worked on right now.

Project579 commented 6 years ago

OK, fantastic news! I'm really looking forward to the next updates!

Silarn commented 6 years ago

This has been on hold due to other important bugs, but there is a partially complete Dev build available. The latest builds include full archive extraction support for all games, including Morrowind.

Project579 commented 6 years ago

Also there is a possibility for MO2 to load BSAs without dummy plugins, example: https://staticdelivery.nexusmods.com/images/1704/8933251-1500486475.jpg

MO could look at the BSA/BA2 and automatically add it to the [Archive] section for it to be loaded by the game automatically, but there are problems because the BSA loaded from the game always loose conflicts from BSA loaded by plugins, this may add to the complexity of checking for conflict, but at the same time allows smaller load orders.

Al12rs commented 6 years ago

@Project579 problem with that is the 256 character limit on that string that basically makes it unusable. MO1 used the vfs to inject the full list of BSAs while the game was reading from that line but it required game specific code inside the VFS itself and doing that caused issues with the FNV script extender. All the new games might work differently regarding it as well, which is why Tannin decided it was simply not worth it as it only added more complexity

Project579 commented 6 years ago

Ok that makes sense I didn't know there was a limit.

Al12rs commented 6 years ago

There is now a test build on discord for 2.2.0

Known Issues:

Things to implement:

Improvements:

Project579 commented 6 years ago

Add Archive cache system to improve performance, I like this very much but it would be interesting if you could implement a similar thing for the mods in general.

Consider Archives loaded by the INI file as well: Forgot about those, also would the Plugin (PrivateProfileRedirector SE - Faster game start (INI file cacher)) be able to inject a skyrim BSA list by changing the values cached in memory at runtime?

Make sure user can't start something while conflicts are parsed: also block parts of the interface while MO2 is still loading (right after launch, when a mod just installed or when a program hooked was just closed) this would resolve some crashes.

LostDragonist commented 6 years ago

The content column in the mod list could reflect the contents of the archives as well as the archives themselves.

In the mod info conflict tab, right-clicking a file in an archive does nothing. Right-clicking a conflicting loose texture allows you to bring up the preview but this preview only includes the loose files.

Al12rs commented 6 years ago

@LostDragonist nice suggestions, added to the list. @Project579 for the mods cache better discus on discord but basically there is already.

The PPR plugin could do something there but I would see it pretty hard as it would need to have a list of BSAs given to him and all that. So I don't think this is happening.

Project579 commented 6 years ago

Well you can easily give the plugin the BSA list via MO2.

Al12rs commented 6 years ago

Well not really that easily, how do you get the list in the first place? where do you store the list? How do you pass it. How do you make sure the list is correct? How do you handle the fact that the plugin is external from Mo2 and does not support either older games or FO4? That and Kerber actually needs to implement it, which isn't really likely to happen. It's not as easy as checking if the call is the correct one and returning the list, there are matters such as the list being way to long for the 256 char max the game is limited to.

So basically we can forget about this until all the easier things are implemented and MO2 is bug free.

Project579 commented 6 years ago

make it Skyrim SE/LE instance specific and make it work like a mod use a simple INI and make Kerbers plugin read it when it first loads.

Al12rs commented 6 years ago

You do it ;) , I ain't got time for none of that. lol Ok, back to seriousness, I'm just being realistic, given the low amount of progress that we procede with, this is simply not going to happen, especially considering we have more important and easier problems to tackle that have been there for moths. Unless more people show up and help with their free time I don't see this happening.

Project579 commented 6 years ago

I was already looking at Kerbers code don't worry, but yes we can place it in the Far Future improvements list, it may be interesting to see if Kerber can do it in Kortex.

Al12rs commented 6 years ago

Added new improvements to the list and changed main objectives

Al12rs commented 6 years ago

This commit tries to fix the incorrect conflicts after opening and disabling mods: https://github.com/ModOrganizer2/modorganizer/commit/8a8cb55fce32e4024e4b091b89ed1a0cc77c6f76 There are in fact improvements and people even report FO4 to no longer show any issues but SSE still shows incorrect conflicts after messing with it. FO3 and FNV have been reported to crash on start for apparently no reason.

Al12rs commented 5 years ago

Apparently archives are being considered loaded even if the loading plugin is disabled, which is incorrect. This needs to be fixed before a possible release

Al12rs commented 4 years ago

It seems that the code is using the archives.txt to know which archives are enabled, but apparently that file isn't getting updated for some reason so it can just have missing entries making the entire archives conflict thing fall on it's head.

The completely wrong assumption here though is that archives.txt will actually have the correct active archive before the actual refresh. So we are doing a complete refresh from disk for everything except that we assume that the list of active archives is unchanged from previous refresh.

The way archives.txt is currently handled is completely different than plugins.txt or modlist.txt. Those are handled by the profile, while the archives.txt is handled by mainwindow of all things. Currently the only way to actually make Mo2 update the file to either change something in the tab (which is impossible since we disabled the tab) or change the order of the mods.

Al12rs commented 4 years ago

My idea for BSA conflicts would be to use archives.txt to store the correct order and state in which archives are loaded, let the game plugin define how this order is decided (support different ways in which archives order is defined).

So basically: 1) Do directory Refresh from disk of only concrete files (no archive contents yet), potentially find new mods, new plugins, new archives. 2) Refresh ESPlist. 3) Refresh archive list (plugin decides how). 4) Go back to directoryStructure and now go add the contents of the enabled archives to the Structure, following the order imposed by Archives.txt and potentially a policy dictated by the gamePlugin on how to interact with concrete files (MO1 allowed archive files to overwrite loose files from lower priority mods, this could only be implemented in Mo2 if we add usvfs file hiding). 5) Refresh is now complete. Archives.txt structure should be as standard as possible between games so that third party programs may use it to easily determine the order of archives as well.

DarthShader commented 2 years ago

Rest in peace, one of the best features of MO1 over MO2 left by the wayside.

qudix commented 2 years ago

Why rest in peace? It's been in MO2 behind an experimental flag for a long time now?

Silarn commented 1 year ago

I may try to look at this after 2.5.0. It was originally my code, after all.

RinMaru commented 2 months ago

I may try to look at this after 2.5.0. It was originally my code, after all.

Would. E super helpful since im starting to learn about conflicts