Jump to content

Skyrim Modding Diary - 18 March 2022


gregaaz

486 views

Happy Friday, everyone! I'm going to take a little change of pace today. I'd originally planned to continue with the Bells of Skyrim project, but after restarting my PC to install some Windows updates, SSE started crashing at the main menu :O I'm not getting Net Script Framework crash logs, which is frequently associated with corrupted nif files or with video related issues. I'm leaning towards the latter since SSE was running smoothly last night, and now it's crashing after a Windows Update run. 

 

image.png.be1083568b4b10f5549965a74cf26609.png

 

Fortunately, before I went nuclear and rolled back this cumulative update/totally reinstalled Skyrim, I did the common sense things and updated my GPU drivers to try and coax SSE back to health. That did the trick, and probably spared me from having an aneurism at the same time.

 

At the same time, while I was doing my initial troubleshooting, I noticed that I still have a lot of random crud at the start of my Papyrus log. A lot of it is either old compatibility stuff left over from many years ago in the LE environment, as well as crap left over from dirty modding by authors who either left behind deprecated scripts or tried to hook up incompatible scripts. Rather than installing more mods, I'm going to spend the next day or two working through these errors and trying to flush out the ones that are garbage and fix the ones that need to stay. I'll probably also do a little bit of conventional modding because I just can't resist, but for a bit I'm going to focus on Papyrus hygiene. 

 

Random Missing Scripts

Spoiler

One of the things I noticed right away was that my game was seemingly looking for scripts from some very old mods like Equipping Overhaul. I traced these items back to some of Chesko's stuff like Simply Knock and Campfire. The indicator for scripts like this are messages like the following, but no other messages relating to that script. In other words, there's some code that supports that script in some other script or some other record, but nothing is actually using the function (because the source mod is absent).

 

[03/18/2022 - 11:51:15AM] Cannot open store for class "xmaquestfingersmithscript", missing file?

 

This particular script was used in the development of Simply Knock and can be obtained from the Simply Knock GitHub but isn't packaged with the mod itself.

 

As I run into stuff like that, I'm trying to locate these orphaned scripts and put them in a holding file that I've put very high in my load order.

 

image.png.f964db9b281dfadbf84efedce6d1c58c.png

image.png.57b4df26c6a5abbbf2c6510f9c08fc1d.png

 

However, here's one thing we need to keep in mind (see below): this conflict resolution file, by its very nature, will overwrite files that are packed in BSAs. It's probably harmless, but we don't really want to take risks. And PEX files that we find winning conflicts that they shouldn't be we need to trim out. Same for PSC (source code) files. The reason for this is that we want the documents that Skyrim and my external script compiler uses to be the most up-to-date versions. 

 

image.png.4afc30faebff387e2a5c665137447413.png

 

The goal here is to suppress these 'false alarm' messages so I can focus on issues that might actually affect gameplay.

 

Creation Club Crud

Spoiler

Oh, Creation Club. I thought Bethesda promised us you'd be bug free? Well, apparently they meant "bug free by Bethesda standards" because there are a lot of script errors coming from the CC. Some of these things are obvious, even being so nice as to give me form IDs to look up, and we'll delve into those later. For now, we want to look at a more mysterious item. I'm pretty confident this call is indeed from a CC mod because its sandwiched between two different CC entries, but I don't know exactly which creation is providing it.

 

[03/18/2022 - 11:51:18AM] Cannot open store for class "DefaultDebugMagicEffect", missing file?

 

Sure looks like someone forgot to clean up a debugging function and QA didn't catch it before the creation went public. Fortunately, we can find this pretty easily. What we're going to do is highlight all the Creation Club files and run the script "Skyrim - Filter by Script". But wait! you say, surely that's too easy! And you're right. The script is broken as written, so before you run the script you need to make the changes listed below to its source code.

 

image.png.04ea0d5725d618ff25a41d79700693e5.png

 

Once that's done, we'll run this script and plug in our debug script's name. Then we're going to sit back and wait because this script takes a while to run on a large load order. The script reveals that the mod in question isn't just any creation... no, it's Saints and Seducers, Bethesda's flagship creation that they've made part of the core 1.6 release!!!! Amazing.

 

image.png.f20610b4252fecdcd918264f5a5afbc7.png

 

So here's the record in question. As you can see, it appears to be designed to make a debug message display the text "Scourge Cooldown." 

 

image.png.d0870bec3ce293f89f2bdb15d211d21f.png

 

I traced this one back and it does seem to tie into a legitimate game function, so before I trim this out, I am going to hop into the Creation Club and see if there's an update out there for this mod. But nope, the only one with an update is Ghost of the Tribunal, which I will go ahead and download. 

 

Next thing to check is the unofficial CC patches. This in turn requires me to update the USSEP, which isn't a bad thing. Even though I'm on 1.5.97, I run it with the 1.6 masters, so the newer USSEPs work fine on my system. As it turns out, this has the added advantage of reducing my plugin count substantially - down to 1485 - because the unofficial CC patch is now available in a merged format rather than individual patches.

 

That debug script is not present in the unofficial CC patch's BSA file, but let's check the record in-game and see if it's been patched - it's not. So at this point no one seems to have addressed this missing script and the game seems to be working in its absence. I'm just going to patch out this script and leave it at that.

 

image.png.43d75cd486582605279505304cf17f6b.png

 

With that done, I'll quickly go through and clean the unofficial patches; then I'll proceed with my script cleanup.

 

Unofficial Patch Patching

Spoiler

Before we can continue fixing the papyrus log, we want to quickly go through the two unofficial patches just to make sure they aren't going to break anything. Right off we do see some errors on the error report:

 

[00:00] Checking for Errors in [0F] Unofficial Skyrim Special Edition Patch.esp
[00:02] Dagny "Dagny" [NPC_:0001434B]
[00:02]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 2 not found in NordRaceChild "Nord Child" [RACE:0002C65B]>
[00:03] BYOHUrchin_Sofie "Sofie" [NPC_:0300403B]
[00:03]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 2 not found in NordRaceChild "Nord Child" [RACE:0002C65B]>
[00:05] [REFR:0002BCE6] (places WinterholdTrapdoor01 "Trapdoor" [DOOR:0010DE06] in GRUP Cell Persistent Children of WinterholdCollegeHallofCountenance "Hall of Countenance" [CELL:0001380F])
[00:05]     REFR \ XNDP - Navigation Door Link \ Teleport Marker Triangle -> <Warning: Navmesh triangle not found in "[NAVM:000871AE] (in GRUP Cell Temporary Children of WinterholdCollegeHallofCountenance "Hall of Countenance" [CELL:0001380F])">
[00:12] [REFR:0001A700] (places WRDragonDoor01 "Door" [DOOR:000252C7] in GRUP Cell Persistent Children of [CELL:0001A270] (in WhiterunWorld "Whiterun" [WRLD:0001A26F]) at 5,-1)
[00:12]     REFR \ XNDP - Navigation Door Link \ Teleport Marker Triangle -> <Warning: Navmesh triangle not found in "[NAVM:00041B96] (in GRUP Cell Temporary Children of WhiterunWindDistrict02 [CELL:0001A27B] (in WhiterunWorld "Whiterun" [WRLD:0001A26F] at 5,-1))">
[00:12] [REFR:0007C086] (places DweDoorLarge01Load "Door" [DOOR:0006597B] in GRUP Cell Persistent Children of [CELL:0002D4E0] (in Blackreach "Blackreach" [WRLD:0001EE62]) at 0,3)
[00:12]     REFR \ XNDP - Navigation Door Link \ Teleport Marker Triangle -> <Warning: Navmesh triangle not found in "[NAVM:0010F10B] (in GRUP Cell Temporary Children of [CELL:000237DC] (in Blackreach "Blackreach" [WRLD:0001EE62] at 0,3))">
[00:18] MS01GuardAmbushQuest [QUST:000210CD]
[00:18]     QUST \ VMAD - Virtual Machine Adapter \ Scripts \ Script \ Properties \ Property \ Value \ Object Union \ Object v2 \ Alias -> <Warning: Quest Alias not found in "MS01GuardAmbushQuest [QUST:000210CD]">
[00:28] still checking for Errors in [0F] Unofficial Skyrim Special Edition Patch.esp
[00:37] Checking for Errors in [FE 064] Unofficial Skyrim Creation Club Content Patch.esl
[00:38] [REFR:07000FBA] (places defaultEnableEncLinkedRef [ACTI:000F4A31] in GRUP Cell Temporary Children of ccTWBSSE001DwarvenPuzzleDungeon01 "Runoff Caverns" [CELL:07000A98])
[00:38]     REFR \ VMAD - Virtual Machine Adapter \ Scripts \ Script \ Properties \ Property \ Value \ Object Union \ Object v2 \ FormID -> [FE064901] < Error: Could not be resolved >
[00:38] [REFR:07001143] (places defaultEnableEncLinkedRef [ACTI:000F4A31] in GRUP Cell Temporary Children of ccTWBSSE001DwarvenPuzzleDungeon01 "Runoff Caverns" [CELL:07000A98])
[00:38]     REFR \ VMAD - Virtual Machine Adapter \ Scripts \ Script \ Properties \ Property \ Value \ Object Union \ Object v2 \ FormID -> [FE064901] < Error: Could not be resolved >
[00:38] ccEEJSSE002MageTowerSecond "Myrwatch Gallery" [CELL:FE01392C]
[00:38]     CELL \ Record Header \ Record Flags -> <Unknown: 14>

 

Most of these are probably false alarms; the one that concerns me is the null pointers at the end. It turns out this is because of a defect in the unofficial CC patch; fortunately a fix is available in the bug reports section on the Nexus.

 

image.png.e0989c4529bb77bc5ee81478659c1c5b.png 

 

Like I said, the other items are likely false alarms - just side effects of downstream patches overriding the data in this file. If they're genuine problems, it'll come out when we do conflict resolution.

 

Lots of edge link conflict, unsurprisingly. There were no deletions and only a tiny handful of ITMs. The Unofficial CC patch gave me a little scare when xEdit reported it had deleted SolstheimWorld as an ITM - causing flashbacks to the old "delete Solstheim" bug that Elminster fixed a few years ago - but this message was legit. The patch contains an orphaned top-level cell record for Solstheim's persistent worldspace cell but no actual object references or ACHRs.

 

Conflicts on Ghosts of the Tribunal were very limited and expected - just some updated Navmesh with no downstream conflicts and some lighting records that Lux's patch for this creation updates. The unofficial patches of course had a lot more conflicts that I had to look through. I patched the conflicts with Ghosts of the Tribunal and the Unofficial CC patch, but I only skimmed the USSEP - I'll address conflicts with that one as they come up in the context of other mods.

 

With that done, now we can get back to the scripts.

 

Null Pointers Are Bad

Spoiler

The next issue we're hitting are a number of Form IDs that have the wrong base type for the script. In some cases this is actually from a missing file (so any base type would fail) while others seem to be a case where the item in question won't play nice with the script. Here's some examples of what we're seeing. Red are missing files, Blue are base type only. 

 

[03/18/2022 - 01:35:30PM] Cannot open store for class "KRT_PF_ccKRTSSE001_WhiterunTe_0500081C", missing file?
[03/18/2022 - 01:35:30PM] error: Unable to bind script KRT_PF_ccKRTSSE001_WhiterunTe_0500081C to  (FE03E81C) because their base types do not match
[03/18/2022 - 01:35:30PM] Cannot open store for class "ccKRTSSE001_zQuestScen_05000F40", missing file?
[03/18/2022 - 01:35:30PM] error: Unable to bind script ccKRTSSE001_zQuestScen_05000F40 to  (FE03EF40) because their base types do not match
[03/18/2022 - 01:35:31PM] Cannot open store for class "QF_00WEMS01_03068700", missing file?
[03/18/2022 - 01:35:31PM] error: Unable to bind script QF_00WEMS01_03068700 to 00WEMS01 (1F068700) because their base types do not match
[03/18/2022 - 01:35:32PM] error: Unable to bind script CH_ColdhavenAttachToMainQuest to CH_ColdhavenMainQuest (254C4832) because their base types do not match
[03/18/2022 - 01:35:32PM] Cannot open store for class "QF_CH_Gwyndris_Dialogue_054AB2A0", missing file?
[03/18/2022 - 01:35:32PM] error: Unable to bind script QF_CH_Gwyndris_Dialogue_054AB2A0 to CH_Gwyndris_Dialogue (254AB2A0) because their base types do not match
[03/18/2022 - 01:35:34PM] Cannot open store for class "TIF__0202E69E", missing file?
[03/18/2022 - 01:35:34PM] error: Unable to bind script TIF__0202E69E to topic info 2D02E69E on <nullptr quest> because their base types do not match
[03/18/2022 - 01:35:34PM] Cannot open store for class "PF_FlorinBeatteBasketPatrol7_0304BBC9", missing file?
[03/18/2022 - 01:35:34PM] error: Unable to bind script PF_FlorinBeatteBasketPatrol7_0304BBC9 to  (2D04BBC9) because their base types do not match
[03/18/2022 - 01:35:34PM] error: Unable to bind script ZZDaedraFormQuestScript to ZZDaedraFormQuest (362A5251) because their base types do not match
[03/18/2022 - 01:35:34PM] error: Unable to bind script SKI_PlayerLoadGameAlias to CASMQuest (FE05C800) because their base types do not match
[03/18/2022 - 01:35:35PM] Cannot open store for class "PRKF_Aur_LordStone_Perk_2_Ab_03000A08", missing file?
[03/18/2022 - 01:35:35PM] error: Unable to bind script PRKF_Aur_LordStone_Perk_2_Ab_03000A08 to  (FE092A08) because their base types do not match
[03/18/2022 - 01:35:38PM] Cannot open store for class "ForceGreetQuest1", missing file?
[03/18/2022 - 01:35:38PM] error: Unable to bind script ForceGreetQuest1 to 001GhostMonologueOrcMale (60005E6C) because their base types do not match
[03/18/2022 - 01:35:38PM] error: Unable to bind script ForceGreetQuest1 to 001GhostMonologueBretonMale (60001306) because their base types do not match

 

I actually want to attack the blues first, but before we do that we need to immediately investigate 2D02E69E since there's a null pointer getting reported. This is a potential crash trigger. In fact, further digging reveals a couple more of these.

 

[03/18/2022 - 01:35:43PM] error: Unable to bind script DsR__TIF__020253E5 to topic info 8F0253E5 on <nullptr quest> because their base types do not match
[03/18/2022 - 01:35:43PM] Cannot open store for class "DsR__TIF__02025960", missing file?
[03/18/2022 - 01:35:43PM] error: Unable to bind script DsR__TIF__02025960 to topic info 8F025960 on <nullptr quest> because their base types do not match
[03/18/2022 - 01:35:43PM] Cannot open store for class "daymoyl_QuestTemplate", missing file?

[03/18/2022 - 01:35:51PM] Cannot open store for class "TIF__0900182D", missing file?
[03/18/2022 - 01:35:51PM] error: Unable to bind script TIF__0900182D to topic info C300182D on <nullptr quest> because their base types do not match

 

Let's investigate these form IDs and figure out what's going on. The missing scripts are probably part of the problem here, though they also might be a sign that these are orphaned dialogue records. We'll find out one way or the other once we get into xEdit. 

 

So here's the first such conflict. Do you see the defect?

 

image.png.8769849d13fe8b12f25998f96e9bd0ae.png

 

It appears that the author added a prefix to their form ID indexed script fragments to avoid conflicts with other mods. This is a good thing. However, rather than replacing the original script with the new one, they left the old ScriptName record, like a failed kidney, in the guts of the file. You can see in the script source that the original TI___xxxxx version of the script no longer exists. 

 

image.png.f9136db55a41b6351e4a42e74a8de24e.png

 

We'll patch out that orphaned entry.

 

image.png.b076ef90445c3fb8d3332650c96dd766.png

 

The next two issues are related to Winterhold College Days. This mod has a patch that promises to fix most of its issues. Let's download that patch and see how it changes things. Disappointingly, the missing script is still present.

 

image.png.66ea7f79a3e2f3b27da51b963b8957f3.png

 

Since these seem to have survived the patching process intact and extensive searching doesn't reveal the original script source, we'll patch these out. Now what about the last one? Let's take a look.

 

image.png.e81f925cb47269afd3b64bf1fc2ef9fc.png

 

I strongly suspect this is the same deal as the first one we looked at, but first let's see if this mod has any updates that might fix this on their own. There is indeed a meaningful update (from 1.0.3 to 1.1.2) so we'll install that first. There's also an updated voice pack.

 

image.png.590e3022801403434522005ba451c842.png

image.png.fbca058152b0b10b75c128c4f193a370.png

 

While that big voice pack downloads, let's check out the dialogue that threw this error - incidentally, I'm pretty sure that the null pointer quest flag is an indicator that the script is attached to dialogue, so not as much of an emergency as I previously suspected.

 

image.png.7e65545502065fc7c5dc69a92655f7e6.png

 

Nope, it's still there. BUT!!! Look at this - the missing script is now present in my file stack. 

 

image.png.2cb8fa47da56b6c232f0edb8e002ff6c.png

 

So it looks like the 1.1.2 upgrade did indeed fix the problem. Great news!

 

Off screen I'll continue working on this a bit, but I think we've covered all the ones were we're breaking new ground. Hopefully everyone learned a thing or two about the papyrus error messages. I'll be back tomorrow to kill - or restore - more of these scripts!

 

 

2 Comments


Recommended Comments

@gregaaz

 

Good article, I like it for you?
I have a question here:
When we modify the script of a mod as needed, since it will involve some additional mods (they are soft requirements), then I would like to know, in the case that we do not have or need these additional mods, we need to How can I strip them off to be able to successfully compile the script?

Link to comment
14 hours ago, tznvlw said:

@gregaaz

 

Good article, I like it for you?
I have a question here:
When we modify the script of a mod as needed, since it will involve some additional mods (they are soft requirements), then I would like to know, in the case that we do not have or need these additional mods, we need to How can I strip them off to be able to successfully compile the script?

 

So there's two approaches you can take.

 

The cleanest way is to not actually strip them out, but to load the source code for the additional mods in your script source folder when you go in to make the edit. Some mods also have an SDK that provides fake source files you can load up when you compile.

 

If you can't get the other scripts you need, then the other approach would be to comment out the functions that call on those scripts. The only thing you have to remember when you're doing this is that those functions won't compile, so this only works for dependencies on scripts that you don't use.

Link to comment

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use