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
Support for "The Elder Scrolls III: Morrowind" #1101
Comments
Off the top of my head, the code changes necessary to support Morrowind would be:
I think everything else should be sufficiently generic, and libloadorder already supports Morrowind. Questions:
|
You may be interested in mlox, which has custom rules for what should be loaded before/after other mods, and other assorted warnings. This data could be scraped and incorporated into LOOT rules (though they haven't been updated in the past year or two). Morrowind tool developers (like Hrnchamd, G7, and myself) tend to hang out in the Morrowind Modding Community Discord. If you have any questions specific to Morrowind's loading mechanisms shoot us a message. |
Morrowind does make use of BSAs. They are fetched from Morrowind.ini in the install directory, under [Archives]
Archive 0=Tribunal.bsa
Archive 1=Bloodmoon.bsa
Nothing terribly consistent. Usually applications have to be installed in the Morrowind directory itself. The game is portable and doesn't require a defined directory in the registry.
Same as later games, late loaders win out (with exceptions like cells). However there are no FormIDs, everything is identified by a unique string, up to 32 bytes long. |
OK, I've worked out most of the parsing of record IDs (the FormID-equivalent data). I've come across a few more questions:
I've also realised that esplugin's |
As a reference point, here are some popular Morrowind mods: Accurate Attack The above mods have the following plugins:
There is also this guide that is apparently being worked on actively: |
@jhaakma @Greatness7 @Hrnchamd - You three have been named to be very knowledgeable regarding Morrowind. Would anyone of you be able to answer Ortham's questions? |
There's not really a lot of namespacing. You should never have two objects of different types with the same ID. Internally the game uses a hashmap of all objects by their ID, and there can be collisions there that can be unexpected. That said, the following are split out in different places in memory: races, class, birthsigns, scripts, cells, factions, sounds, globals, regions, then everything else is clumped together in the main object map.
LAND records do not have IDs. They are loaded on demand for cells and stored off of that in memory. There's no master list of land objects. Instead you get the CELL for a grid x/y then get the LAND off of it. The vtable for LAND records will return an empty string if you try to get their object ID. Since interiors can't have LAND records associated with them, you can fake your own ID using grid coordinates if necessary.
The Morrowind Graphics Guide is also popular and currently maintained. |
As noted on Discord, I've started work on the code changes necessary for Morrowind support in the
There might also be bugs in how I'm reading/calculating IDs to uniquely identify records, but again, these won't be visible because they're only used to add overlap edges. I've also created an empty masterlist for Morrowind. Like our newer masterlists, it's licensed under CC0. If anyone is going to convert metadata from mlox, bear in mind that's MIT-licensed, so it might be better to relicense under MIT and just include the mlox copyright notice in the license. Otherwise we'd need to include the mlox license in the masterlist repo, which might be a bit confusing. |
From this point onwards it is important to get feedback from the community. Before going to the step of potentially converting mlox's masterlist for our purposes, I think it would be best to actually see LOOT in action by it's own, on fully modded Morrowind games. That should be the best way to see what LOOT can do in regards to load order, or, not yet can - and if there are any bigger issues to begin with. @CptMcSplody has already implemented the official DLCs into the masterlist and opened an issue for adding Bethesda's official mods to it. Anyone who wants to help us by testing LOOT with Morrowind, please follow these steps:
Please do not forget, at this point support for MW is a first (adapted sorting algorithm, newly created masterlist), so issues are to be expected. We would like to get as much feedback as possibe, so that we can improve overall using those information. |
I can't seem to get LOOT to detect my Morrowind installation. I'd be happy to provide more information if I had it. Let me know if there's anything I can do. |
The debug log includes that info, so it doesn't need to be provided separately.
What version of Morrowind are you running (e.g. Steam, GOG, disk)? I've got the GOG version and set LOOT to use the registry entry that's added by its launcher. |
notes: I don't think it is a good idea/it makes sense to process mods not currently loaded, as morrowind mod makers/advanced users are going to have plenty of test/unused/kept as reference mods in the same Data Files folder and a loading order is traditionally meant to only include LOADED mods (the ones listed under [Game Files] section in Morrowind.ini and , as it is, the Loot generated loading order is not easy to compare to loading order generated from standard Morrowind tools (Mash/MLOX) as it has also all unused/not loaded mods listed. e.g. for Morrowind it would be better to have a way to copy a list with:
[EDIT]ok, so I managed to strip redundant information from LOOT loading order and to compare it with my original loading order from Mash, nothing was changed in the effective relative plugin ordering (that's good, did not mess with my loading order!), but the file timestamps have all been changed. I think ideally this should not happen if no changes to effective loading order are needed, as user may have plugin dates sorted by personal criteria (e.g. quest mods grouped in 2007 year) so better not mess with them if not needed for reordering |
There's a copy load order option in the top right menu.
|
Note that you can usually upload the log files directly into comments here, though maybe that log file is too big. Most of what I got from that was that LOOT is doing a lot of checking if plugins are active and getting the load order! They're both pretty fast operations, but I should cut down on them or maybe not log them... Good to see that loading plugins was fast (~2s for 459). Sorting is as slow as I'd expect for that number of plugins (~19s), as it scales terribly.
The situation doesn't seem to be any different from the other games that LOOT supports, and I don't recall any complaints about LOOT sorting / showing inactive plugins. It's a feature, because the load order of inactive plugins has implications when building Bashed / merged patches. I don't know if this is different for Morrowind.
LOOT detects if the sorted load order is unchanged and doesn't offer to apply it if so. That hasn't happened, I guess it reordered some inactive plugins that you stripped them out for your comparison. More generally, if you're auto-sorting with LOOT, I think it's reasonable to consider that as waiving your ability to maintain your own choice of timestamps. Though libloadorder does reuse existing timestamp values when setting the load order, if you want stuff like "quest mods grouped in 2007" , just don't use LOOT. |
we don't have bashed patches in Mash, only merged leveled lists so for Morrowind it is definitely annoyance, not feature
probably, and that's another thing that does not make sense for Morrowind, they may be there in 2020 as easily grouped "only for reference"
right, I think I will happily keep using MLOX and TESPCD then [EDIT]quoting |
Is this for me? I know thanks, that's what I used |
Yeah I realized that after, misread your post the first time. |
I managed to get it to work, don't ask me how I'm apparently crazy. Here's the debug log |
Seems to work to me, though I can't immediately comment on load-order correctness. Here's the log: |
What do you mean by "work", that it does not crash/is finding files? Wow, call me impressed. Anyway, it does NOTHING except maybe a BAD thing if it's moving multipatch.esp on top From what I see, it needs a rules database like MLOX and even more than MLOX. People are just a lazy bunch jumping on the latest and greatest tool (hey, it's new, must be better) hoping to magically solve problems clicking a button, but it's not always like this. |
Jesus, ABOT, what is your deal? Why are you being so hostile? Why do you constantly make assumptions without knowing what you're talking about? Why do you hate absolutely anything new? Why are you like this in every channel I find you on? The masterlist for LOOT is currently completely empty - IE it doesn't have any rules yet. Because the project just started. The point was that they wanted to make sure it was detecting the plugins and was able to run fine without any issues. That's it. Also it didn't place multipatch on top. :/ If you want to see what the rules look like for LOOT, you can see Skyrim SE's one here: https://github.com/loot/skyrimse/blob/v0.14/masterlist.yaml That might clear it up a bit.
Of course, because re-writing portions of LOOT to work with Morrowind and making a masterlist from scratch is "lazy". It was suggested because Mlox's current masterlist is seriously out-of-date, and the MLOX project seems pretty dead. It was a great tool and I respect the work that was put into it, but it just isn't enough anymore. The hope was that with enough advertisement and a new project, we could garner some support and make it something great. Plus LOOT offers functionality that Mlox doesn't, like groups. If you end up wanting to contribute, Morrowind's masterlist is here: https://github.com/loot/morrowind/blob/v0.14/masterlist.yaml |
There is no need for such strong emotions @abitoftaste. We are at the beginning of supporting Morrowind through LOOT, with an adepted sorting algorithm and a mostly empty masterlist. As we said, problems at this point in time are to be expected and we set out to get feedback from testing our build with MW support. If certain plugins are placed incorrectly, okay, tell us and we will see what we can do. You do need to understand though, that LOOT is not MLOX. On a technical as well as a design point, LOOT handles things different than MLOX (or BOSS), so it is important for us to first see what LOOT can do on it's own. What does it get right? What does it get wrong? Once we have more experience on this subject, we could reevaluate the situation with MLOX and it's own masterlist, but it wouldn't be in our best interest to outright start with converting MLOX's masterlist. So please, let us stay calm and friendly, I'd prefer it this way. |
I am obviously not referring to LOOT developers, I'm referring to the average Morrowind noob player unable to install a mod without 1 click nexus manager seeing e.g. your enthusiasm about current LOOT for Morrowind compared to current MLOX
I know what I am talking about, I'm making mods an modding Morrowind since 2004
I don't hate all new things, I hate new things trying to shit on old working things without being yet nearly as useful as old things
Ok. That's it. It works. It finds files. Nothing more. No internal magic logic solving conflicts without a rules base. needs a little more work to start being interesting
this is good, that's why I did not assume anything but asked if it being placed on top of log lines was some kind of temporary thing I did not understand what use for in the log. Still lots of noise in that log, maybe useful for LOOT delopers, certainly not for MLOX experienced morrowind users/modders trying to contribute (that's the reason why I suggested a simpler log/log part showing just before/after loading ordering)
I was no more feeling like updating MLOX rules which I know enough, go figure if I'm investing time learning something I think has currently no future...
the problem is not the tool IMO, it's having enough morrowind experts maintaining the rules (at least until most of them can be replaced by program embedded logic, which I was hoping LOOT could do at least for some part but it does not seem so yet)
I think proper support for compiling rules may come only from very experienced modders/players using plenty of Morrowind mods/morrowind tools from plenty of years, able to solve conflicts etc, and they must be willing to do a lot of boring work or be a lot of people... there have not been many for MLOX (Dragon32 alone in practice), I doubt there will be many for LOOT. What LOOT team should try to learn IMO is what tools are historically used by Morrowind experts to find and solve loading conflicts, manage things like merging objects properties, merging leveled list and so on, and try to interface with these tools (or even replace their functionality if possible, that would surely be a plus e.g. the one existing object merging tool crashes with big loading lists and existing workarounds are far from perfect) I understand that adapting a general-game purpose tool like loot for the specifics of Morrowind game may not be easy, but I don't think there is really another way to replace old tools / interest seasoned modders |
A few months have passed, and two things should be mentioned. First, rules for the official mods by Bethesda have been added (see here), and @Ortham tweaked the sorting algorithm. To quote him:
Any feedback we can get would be appreciated. |
As I commented on Discord, it's possible for LOOT to work out how many override records a Morrowind plugin contains, but doing so would rely on all plugins' masters being present, and sorting would fail if that wasn't the case. I wouldn't generally expect this to be a problem, unless filter patches are a thing in Morrowind? If that terminology isn't used in the Morrowind community, a filter patch is a patch plugin that is left deactivated and has many masters, and Wrye Bash (or Mash in this case) is used to merge in the changes to records from masters that are installed. It's an alternative to having a patch plugin per master. |
Completely arbitrary assumption IMO. There are mods just meant to add new records, and mods just changing mostly tons of cells data... the one correct approach to estimate number of record conflicts for automatic ordering IMO would be
If you need detailed examples of what to search/compare I think TES3merge is the recent one with available source and Nullcascade can answer about it. |
Not completely, but I know it's unlikely to hold true in too many cases, and that's why I've been working on implementing the same overlap detection for Morrowind that is used for all the other games LOOT supports. It's not quite done yet though, hopefully I'll have a build out tonight.
A lot more work than the simplistic "is this record present in both plugins" logic that LOOT currently uses for other games, and LOOT's current approach is good enough the vast majority of cases AFAIK, so that's why I'm aiming to bring Morrowind support in line with that. After all, if two plugins touch the same record, LOOT will say that the one that contains more non-new (i.e. override) records should load before the other, so that each plugin's 'impact' on your game is maximised. If the plugins don't actually make incompatible changes, then the order they're loaded in doesn't matter, but LOOT still needs to pick an order for stable sorting. It could fall back to the tie-breaking logic, which would preserve the existing load order, but the distinction generally has a minor impact if any, so it's not really worth going to all the extra effort of proper conflict detection. |
Right, here's a libloot build that counts override records correctly, as I mentioned above: Just drop it into the same morrowind-support LOOT build as before, replacing the existing loot.dll. |
I've also updated LOOT's |
Another day, another libloot update: I've gone for a hybrid approach, so LOOT will use the proper override record count for a plugin that has all its masters installed, and fall back to using the total record count instead for a plugin with missing masters. My logic is that a plugin with missing masters can't be loaded by the game, so if it gets sorted incorrectly it's less (or not at all?) significant, and it's better to be able to sort a load order with missing masters and get a slightly wonky result than to error out completely given that. AFAIK this means that LOOT's Morrowind support is now pretty much on par with the other games (not counting the masterlist, just code), so I've released libloot v0.14.10 with the changes, updated LOOT's morrowind-support branch to use it, and rebased the branch on top of master. You can now grab the latest build here. |
I've merged the morrowind-support branch into master, so I'm closing this issue. If anyone testing Morrowind support comes across something that looks wrong, please file a new issue for it. |
Support for Morrowind has been requested a number of times, so let's discuss it here.
Since Morrowind does handle load order different than Oblivion, Skyrim, et cetera, support would entail to adapt LOOT's sorting algorithm for Morrowind.
We also need to build up a masterlist for Morrowind, that also get's maintained in the long run.
Help for this task would be greatly appreciated.
It has been suggested to take the masterlist of mlox as a starting point.
https://github.com/mlox/mlox/blob/master/License.txt
Is the above feasible and sensible in our case?
How accurate and up to date is the mlox masterlist?
We also would need some people testing the newly added support for Morrowind, once it is done.
The text was updated successfully, but these errors were encountered: