Jump to content

Implicit Dependencies, TES4EDIT


Recommended Posts

Hello, I have started cleaning my mods in hopes of getting less CTDs, I read the entire guide of Mod cleaning in Elder Scrolls website and would like to clarify some things,

 

The guide made it clear that when I am cleaning a mod, it should be loaded LAST and before it - implicit and explicit dependencies (not necessary since they will automatically load anyway)

 

From what I understood, one needs to know what a mod does in order to find implicit dependencies, I would like to know if it is a good idea to highlight a mod in Mod Organizer and see what files it is overwriting from other mods loaded before it and judge the those as "implicit dependencies" of the mod in question?

 

Thanks a lot for the clarifications in advance ;)

Link to comment
Share on other sites

If you use a current version of TES4Edit to clean a casual mod, it should be as straighforward as loading up the program, unticking all mods, ticking the mod you want to clean and loading it. The program will load all masters listed in the plugin automatically.

 

Which guide did you read? I ran into some ancient one a while back, that still had the overly complex filter applying procedure and all (as in, complex if you just want to do some basic cleaning).

Link to comment
Share on other sites

If you use a current version of TES4Edit to clean a casual mod, it should be as straighforward as loading up the program, unticking all mods, ticking the mod you want to clean and loading it. The program will load all masters listed in the plugin automatically.

 

Which guide did you read? I ran into some ancient one a while back, that still had the overly complex filter applying procedure and all (as in, complex if you just want to do some basic cleaning).

I read this guide: http://cs.elderscrolls.com/index.php?title=TES4Edit_Cleaning_Guide

 

It made me go half the guide to explain what an implicit dependency would be and then ended up not even explaining that

Well, the guide made it clear that ticking just the mod I want is more than enough, but it also said that I have to manually choose implicit dependencies but how exactly do I find all of them without guesswork?

Link to comment
Share on other sites

Now this here is completely untested speculation (I have not tested it myself), but just an idea. If you have three mods, all with values for the same arbitrary thingy, for example the name of Baurus as it was in the cleaning guide:

  • Oblivion.esm - value "Baurus"
  • Plugin-A.esp - value "JohnnyBoy"
  • Plugin-B.esp - value "Baurus"

If Plugin-B.esp has only Oblivion.esm listed as a master, and you therefore only load Plugin-B.esp and Oblivion.esm (Oblivion.esm being explicit dependency, Plugin-A the implicit one that is not listed in the esp master list), this is what TES4Edit will see, and also show you:

  • Oblivion.esm - value "Baurus"
  • Plugin-B.esp - Value "Baurus"

And it does look an awful lot like an "identical to master" situation right? One plugin has the same value as its only master. So chances are TES4Edit will remove the record completely from Plugin-B.esp, leaving you with this in your load order:

  • Oblivion.esm - value "Baurus"
  • Plugin-A.esp - value "JohnnyBoy"
  • Plugin-B.esp -

And so there will be "JohnnyBoy" that appears in the Imperial Dungeon with the Emperor, when it was originally intended for "Baurus" to appear there (because Plugin-B is supposed to overwrite the name to "fix" it). If you load all three in TES4Edit, you should have this in there:

  • Oblivion.esm - value "Baurus"
  • Plugin-A.esp - value "JohnnyBoy"
  • Plugin-B.esp - value "Baurus"

In which case TES4Edit might not remove the record from Plugin-B.esp, leaving you with the intended value of "Baurus" in-game. That is how I would interpret the "JohnnyBoy" example in the cleaning guide:

 

Example #6: Another Illustration of the Importance of Loading Implicit Dependencies

 

DuggeDank provides the following example. Assume Mod A is a great mod but it regrettably makes a few silly changes. For instance, Mod A changes the name of the NPC Baurus to JohnnyBoy but does a lot of other really cool things. So Mod B is created in order to fix (patch) Mod A. Therefore, Mod B changes the name of the NPC Baurus back to Baurus in order to get all the changes from Mod A except the name change.

 

If you were to only load Mod B without also loading Mod A into TES4Edit, then TES4Edit would notice that Mod B's record of for Baurus is identical to its master Oblivion.esm. Hence, automated cleaning would remove the name change in Mod B because it appears to be unnecessary. This would be bad because now you’d have JohnnyBoy running around your game again.

 

This is why it is critically important that you load both Mod B and Mod A into TES4Edit in the proper order (Mod B loads after Mod A since it modifies Mod A).

Hopefully that helps a little.

 

Edit: Changed the examples to use the same "Baurus" thing as in the guide.

 

Edit 2: As to how you can find it all without the guesswork? Load all your plugins in TES4Edit and go through the records you need to check. If the same record is changed in two plugins, with one not requiring the other explicitly, and one of them having the same value as in its last master, you might have either an ITM record or an intentional change. That is all there is, no silver bullet exists, and that is why people do not recommend cleaning some of the "intentional ITM records" because they are supposed to be there and TES4Edit can remove them automatically if user fails to load the implicit dependencies also when cleaning.

Edited by Contrathetix
Link to comment
Share on other sites

Well, thanks for the example, it makes things clearer :)

But what do you mean by "go through the records you need to check"?

 

If I run loot and it tells me that I need to clean a mod, I just follow the instructions, how am I supposed to analyze the records I'm supposed to check?

Link to comment
Share on other sites

It depends. The cleaning guide example was a great one: if the ITM is there to revert (by overwriting) some random nutty change by another mod, you should leave it. It the change is there just because it is a normal ITM with no real function to it, you could remove it. Every record needs to be judged by what the mod in which it is located is supposed to do and what the contents of the record are.

 

Generally, though, ITMs will not crash your game. Deleted references should always be undeleted and disabled, no excuses there, but an ITM is not that dangerous, it just has the potential to overwrite a value back to something else. It can, in theory, cause issues with some mods, though. The usual worst case scenario is you removing an intentional ITM landscape record, causing massive land tear somewhere. Maybe.

 

So you need to see what the record is (landscape, AI package, NPC, script, weapon, ref, etc.), which mod it comes from (is it a patch by someone like Arthmoor or is it someone's first plugin with a huge chance for errors) and how the values differ in each loaded plugin. That is all there is to say on a general level. Each mod is different. :confused:

Link to comment
Share on other sites

Well, I used to get some random crashes, but what is more annoying is that wherever I ask I always get meaningless responses like "Oh make sure your load order is fine", etc.

 

I had a little problem with a mod that changed how soul trapping works, basically every time I tried soul trapping, the second a creature dies I get CTD. Googling the exact error yields results about GPU, Sound card codecs, etc...

But the actual error was about changing a single number: from 1 to 0.

 

When I get an error where it tells me the application module and some other bunches of numbers. How do I diagnose that error specifically? I was sure that most of those weren't related to dirty edits or anything like that ;)

Link to comment
Share on other sites

There is a ton of reasons for crashes, really. It really can be

  • hardware issues (usually not, never happened to me)
  • audio codecs (never happened to me, but people have said it can cause lags and issues)
  • deleted reference (probably causes some sort of null pointer or something in the game and crashes)
  • script getting stuck in a loop (this will crash for sure)
  • using two specific commands in the same frame or too many times consecutively (forli knows more about these)
  • too many mods on the game (the engine has its limits, it cannot use all hardware power)
  • missing Visual C++ Redistributables or such that a mod requires
  • video card driver issues (maybe? it is possible...)
  • other programs on your PC interfering
  • anything else

So it is not possible to nail it down to "this is it, do this to get rid of it". Many of those can give you the "C:00...00005" or something like that error, without any additional info on what caused it. And the info cannot be dug out anywhere, usually. That is why the responses are not too specific. You need to know what has the potential to cause a program to crash in general, and then what can cause Oblivion to crash in general. Then try closing out the options one by one. Perfectly stable modded Oblivion is difficult to achieve.

 

So... well... I cannot really give you a single solution to anything. Mods are so versatile, so the issues are, as well. :)

Link to comment
Share on other sites

There is a ton of reasons for crashes, really. It really can be

  • hardware issues (usually not, never happened to me)
  • audio codecs (never happened to me, but people have said it can cause lags and issues)
  • deleted reference (probably causes some sort of null pointer or something in the game and crashes)
  • script getting stuck in a loop (this will crash for sure)
  • using two specific commands in the same frame or too many times consecutively (forli knows more about these)
  • too many mods on the game (the engine has its limits, it cannot use all hardware power)
  • missing Visual C++ Redistributables or such that a mod requires
  • video card driver issues (maybe? it is possible...)
  • other programs on your PC interfering
  • anything else

So it is not possible to nail it down to "this is it, do this to get rid of it". Many of those can give you the "C:00...00005" or something like that error, without any additional info on what caused it. And the info cannot be dug out anywhere, usually. That is why the responses are not too specific. You need to know what has the potential to cause a program to crash in general, and then what can cause Oblivion to crash in general. Then try closing out the options one by one. Perfectly stable modded Oblivion is difficult to achieve.

 

So... well... I cannot really give you a single solution to anything. Mods are so versatile, so the issues are, as well. :smile:

So... basically the error codes given out are absolutely useless to anyone?

When an error happens it is because something went wrong, there is no way to display what script, mod, process caused it?

 

I was hoping that for example, if a certain mod that changes soul trapping gave me a CTD, there should have been some sort of error log that when this certain faulty mod tried to run this process it resulted in a CTD...

As far as I knew everything in computers was diagnosable, if I cannot copy a file to a new storage medium it will at least tell me that i.e. Not enough space or something else.

Link to comment
Share on other sites

Maybe some of the info provided could have some meaning for people with the right tools to debug the thing. Perhaps tracing the issue might be possible with some professional decompiler and debugging tools, but I have no idea. Just trying to debug a self-written C-program when it crashes is already tedious, and debugging something with no access to source code of any sort is probably just insane. :tongue:

 

Maybe something like this could help somehow with some issues: http://www.nexusmods.com/oblivion/mods/45870/

 

Getting the exact cause is probably not trivial, it might be possible somehow, but that sort of things just usually do not get printed in a file. If they were, no one would be asking for the cause on the forums when they could read it off their screen. Maybe. When programming, the ideal situation is to account for all potential sources of crash, but in reality, it is not possible. When an error that is unaccounted for happens, it is unaccounted for, and whatever system is used to catch errors might not register it, so it is not possible to get the info before the program goes down. But that is just my opinion. Copying files from A to B is so trivial there is really not much room for error (though there actually is some room for error, there is always room for error everywhere, always). Executing tens of thousands, maybe millions of lines of code is nowhere near trivial. Especially when the content the program processes is something as versatile and easily modified as that in Oblivion.

 

Edit: That is just my opinion, and I am not an expert. If someone knows of a way to get the exact cause of a crash, I would love to hear it.

Edited by Contrathetix
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...