Jump to content

Grimy Combat Patcher: Critical bug?


NNS10

Recommended Posts

This is about the Grimy Combat Patcher mod.

 

I had been using it for a while and found it to be pretty awesome. However, I noticed it didn't seem to work on my custom followers. On closer inspection, I found it was ignoring most NPCs outside of Skyrim.esm, which seems like a critical bug since it would defeat the purpose of using a patcher.

 

I posted this in the nexus thread and messaged Grimy almost a month ago but never received a response--looks like he's focusing on FO4 only now(?). Anyway, I'm posting this here to see if anyone else can confirm the bug.

Below are details of the issue (excerpts from my message to Grimy):
 

 

I noticed a pretty critical bug with the patcher, and I think someone else experienced the same issue.

 

The patcher seems to be missing most NPCs outside of Skyrim.esm. I tested this a couple times, including a test with only Skyrim.esm, update.esm, all DLCs, and USLEEP loaded in TES5Edit and had the same issue.

 

For example, DLC2Neloth was untouched, despite having Magicka Offset = 100 and HealthOffset = 200.

Dawngard was kind of spotty. It hit some DLC1 NPCs (e.g. DLC1EncVampire07HighElfF), but not others (e.g. DLC1EncChaurusHunterFledgling, Base ID = xx0029A1).

 

And on my full load order, I think all non-vanilla/DLC NPCs were missed. This included NPCs from custom followers as well as NPCs from the Populated series.

 

Update 1: Correction about the Populated series. It's hit and miss as well there. It missed all my custom followers though.

 

Update 2: It's hit and miss in Skyrim.esm as well. For example, it missed Astrid (0001BDB4). I even tested this with only Skyrim.esm loaded. I also tested using the mtefunction from 8/25/2015 as well as the latest one from 11/12/2015. Same result.

 

 

I'm using TES5Edit 3.1.2 and tested on multiple versions of mtefunction.

 

Can anyone else confirm this bug? I'd like to think I'm simply doing something wrong since I want this to work (and it doesn't look like Grimy is paying attention to the mod anymore), but I've checked and tested this so many times it seems unlikely...

 

 

Link to comment

Wild guess, but maybe you're right-clicking Skyrim.esm to access 'Apply Scripts'? If you want the script to run on all ESMs/ESPs, they need to be selected, either with shift-clicking or Control+A.

 

I generally right click on a mod somewhere in the middle of the list, so not Skyrim.esm. Also, Grimy's instructions say you can click on any:

 

5. Right click any mod in your load order, click Run Scripts.

 

Regardless, I tried what you suggested (selecting all) and it did not behave any differently (still skipping esp files).

 

 

I don't understand everything Grimy's script does, but it does loop through all the files and adds them (which is why it shouldn't matter where you click, as Grimy states).

  // loop through files before actually editing records to get their masters
  for i := 0 to Pred(FileCount) do begin
    f := FileByIndex(i);
    if IsDatFile(f) then continue; // skip hardcoded dat files
    AddMastersToList(f, slMasters);
  end;

I think what's happening is when it gets to the other esp files, some condition is fulfilled that causes a "continue" to run and skip past further processing. It'd be nice if there was a way to trace and step through the code to find where this is happening...

Link to comment

So I added messages to every continue point in the script and found out it was skipping valid NPC records at this line of code:

if not Assigned(ElementByPath(e, 'TPLT')) then continue;

 

 

Processing NPC records for index: 7/9
Skip b/c not Assigned(ElementByPath(e)): element 0 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 1 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 2 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 3 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 4 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 5 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 6 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 7 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 8 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 9 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 10 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 11 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 12 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 13 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 14 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 15 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 16 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 17 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 18 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 19 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 20 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 21 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 22 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 23 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 24 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 25 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 26 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 27 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 28 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 29 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 30 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 31 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 32 of index 7/9
Skip b/c offsets already = 0): element 33 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 34 of index 7/9
Skip b/c not Assigned(ElementByPath(e)): element 35 of index 7/9
Skipping b/c running on itself on index: 8/9
[Apply Script done]  Processed Records: 0, Elapsed Time: 00:24

 

 

 

 

However, I'm not familiar with those functions (Assigned and ElementByPath) so I can't progress further on debugging. Can anyone help?

 

 

Edit 1: I looked up ElementByPath and though I don't understand what it returns very well (what is a path to an element?) I do understand the elements in TES5Edit, and that code is looking for a TPLT (NPC Template) element. Wouldn't this mean it would skip any NPC w/o a template? This seems to be the cause of the bug I'm describing... but why would that line of code be there?

 

Edit 2: On a related note, I tried running the script with that line of code commented out and it ran into an issue when it hit a deleted record. I fixed this by adding a check for GetIsDeleted()

Link to comment

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

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