Jump to content
  • entries
    12
  • comments
    636
  • views
    10,840

Furry NPC Patcher


Bad Dog

8,894 views

This patcher makes a patch for NPCs that reflects your entire load order:

  • NPCs added by mods will be furrified
  • Vanilla NCPs altered by other mods will have their changes carried forward. So, for example, if you're running with an AI Overhaul mod it makes changes to the NPCs; then YA changes them again, and you lose all the AI changes. This patch consolidates the appearance changes from YA with the other changes from earlier in your load order.
  • Any changes to races are merged with YA's changes, so mods like Imperious will work.

 

Tools required

  • xEdit. This is straightforward. Just make sure you can run it from within MO, if you use MO. the STEP project has good instructions on the setup.
  • Creation Kit or Face Discoloration Fix.
    • Face Discoloration Fix makes it unnecessary to create facegen files at the cost of some runtime overhead. You may get lags or glitches if there are a lot of NPCs about. 
    • Creation Kit facegen creates heads for every NPC in your load order so the game doesn't have to do it at runtime. 
      • You can use the Steam version but be warned facegen is very slow. It can easily take a day to run all the vanilla NPCs. (You won't be doing all vanilla NPCs, but mods like the Populated mods introduce a lot of NPCs.)
      • I recommend you downgrade the Steam version and install CK Fixes. That's super-fast but does crash occasionally.
      • If not using SSE Creation Kit Fixes, you'll need to tweak the CK ini file--get the ini file from here as a simple starter kit.
    • Even if you run facegen, adding Face Discoloration Fix will clean up any NPCs that got missed.

 

How To Use

  • Put the BD_Furry_Patch_Builder.pas script in your xEdit "Edit Scripts" folder.
  • Load xEdit with the entire load order you want to patch enabled up through YiffyAgeConsolidated.esp. (To make a patch for a specific mod, just load that mod and YA.)
  • Run the patcher. (In xEdit's left pane, right click, and choose Apply Script -> BD_Furry_Patch_Builder). Generally, you'll want to put the patch in a new file, but you can put the armor and NPC fixes in the same file.
  • Let the patcher run.
  • Exit and save
  • Enable the new plugin
  • IF USING MO, collect face gen files. See the note below.
  • Start Creation Kit 
  • Select your patch file and load it. (Folder icon at left of toolbar, or File -> Data.)
  • Choose Actors -> Actor
  • Select all NPCs overridden in the patch file (marked with *). Or sort by form ID (expand the hidden second column) and select everything after the DLCs down to the end. Or just select everything, it won't hurt. 
  • CTRL-F4 to create facegen files.
    • If not using CK Fixes, this is slow. Wait.
    • If using CK fixes, it may crash along the way. Note at the bottom of the screen the name of the last NPC processed. Start the CK up again, scroll down the Actor list to that NPC and select everything from that NPC forward. CTRL-F4 again. You may need to do this 3-4 times before you get through all the NPCs. It's frustrating but still faster than doing it without CK Fixes.
  • Exit. Don't save.
  • IF USING MO, move your plugin and "meshes" and "textures" folders from "Overwrite" to a new mod. 

 

MO Specifics

 

Only if you are running with MO and with furry and non-furry profiles:

  • By default, new files are created in your Overwrite directory, but when files are modified they stay wherever they are. CK sometimes creates the facegen files as new files, sometimes if they exist already modifies the existing file. So your new furry facegen heads might get saved in the mod they came from. This isn't a problem if you always run furry, but if you have multiple profiles, some furry, some not, your mods are mucked up. 
  • So, before running CK, collect all the facegen files in your load order and copy them to your overwrite folder, maintaining the folder structure. Find them in the MO "Data" tab. Navigate to meshes\actors\character\facegendata\facegeom for the nif files and Textures\Actors\Character\FaceGenData\FaceTint for the DDS files. This way CK will find and update the files in the Overwrite folder, not the original mod folder.

 

Edited by Bad Dog
Added Face Discoloration Fix option

39 Comments


Recommended Comments



Hey, I'm trying to run the NPC patcher, I get an error that says; Exception in unit BDScriptTools line 37: Found a NULL reference, expected HDPT. You wouldn't happen to know the fix would you?

 

I was able to solve it by disabling Skyfurry and all patches first. Afterwards I had to disable a few mods that threw errors.

 

I am now dealing with BDAssetLoader Line 776: array index out of bounds. <- Lux mods were doing this. disabled and could run just fine.

Edited by DaedricDrow
Link to comment

It's possible the script fails if it can't find an appropriate head part. 

 

SkyFurry makes a bunch of changes and may cause problems. I wouldn't be surprised if it would be better to run the patcher without it.

Link to comment

I keep getting this error saying
"error during applying script "BD_Furry_Patch_Builder": Load order FileID [1F] can not be mapped to file FileID for File "(filename)"

Any ideas?

Link to comment

Yeah, there seems to be a bug in adding masters to the new plugin (but only under certain conditions). See if you can figure out what master it's trying to add and add it by hand.

Link to comment

Getting an Access Violation error in SSEedit and it says there is an exception with BDAssetLoader

Not sure what to do because I've tried manually disabling every single mod on the list and it still gives me an error.

Link to comment

That's exciting. I've literally never seen a CTD in xEdit.

 

Can you get the message pane when it crashes? Maybe a screen image, if xEdit is dead at that point?

Link to comment
2 hours ago, Bad Dog said:

That's exciting. I've literally never seen a CTD in xEdit.

 

Can you get the message pane when it crashes? Maybe a screen image, if xEdit is dead at that point?

Yes, here you go.

Screenshot (163).png

Link to comment

Also, it does not CTD, more of it gives the Error as shown above and then upon closing the Error message, nothing happens. It is as if the patch just wasn't applied.

Link to comment

This occurs once I hit Apply Patch for the BD_Furry_Patch_Builder.pas script and I make a new file or try to put the newly created patch into the YA Armor Fix patch I've Created or any other file. BD_Furry_Armor_Fixup.pas script worked perfectly fine.

Edited by collinfool100
Link to comment

Ugh, okay. Trying to duplicate that load order's gonna be a pain.

 

Could you do me a favor--Run the patcher with "Apply Script" but then when it gives you the dialog, find the line near the top where it says "PROCESSLOGLEVEL = 0;" and change that "0" to a "5". Then run the script like normal.

 

This will turn on debugging messages (so there will be a lot). When you get that error, copy the entire message panel and post it. This will let me pin down what part of the script is misbehaving.

Link to comment

NPC Furrifier 6: Makes NPCs furry.
---------------------------------------------------------------
Override NPCs will be stored in the file: YA Npc Fix.esp
[00:34] Exception in unit  line -1: Error in unit 'BDAssetLoader' on line 605 : Missing operator or semicolon
[00:34] Error during Applying script "BD_Furry_Patch_Builder": Error in unit 'BDAssetLoader' on line 605 : Missing operator or semicolon

 

This is all that comes up after I enable debug messaging and turn on additional scripts in subdirectories. Without Additional scripts, it just tells me access violation.

Edited by collinfool100
Link to comment

        Err(1, 'FindRaceSkinPresetByTIRS did not find ' + IntToStr(theTIRS));
        result := ElementByIndex(raceBasePresets, 
        Hash(theNPCHashSeed, 21, ElementCount(raceBasePresets)));  <-------
        Log(5, '>FindRaceSkinPresetByTIRS');

 

From what it says, Line 605 is this group right here for Furry Patcher

 

And here for BDAssetLoader

 

if facialType < 0 then 
        Err('Unknown facial type: ' GetElementEditValues(hp, 'PNAM'))   <---------
    else begin

Edited by collinfool100
Link to comment

Okay, here's that file with the bug fixed.

 

BUT you still have a problem... the reason why no one else tripped over that line is that it's an error check saying that you have some sort of face part in your race record that the furrifier doesn't recognize. If we're lucky, when the check works correctly everything else will work correctly (just ignoring that part). So give it a try and let's see.

 

You should be getting a lot more messages than this, though. You changed the PROCESSLOGLEVEL value in the furrifier? 

BDAssetLoader.pas

Link to comment

Yes i did

I changed it from 0 to 5 like you said.

 

Also it gave me an Access Violation once again. I'm not understanding the problem right now, and I'm wondering if its my program instead because it is the same address every single time. 

 

Access violation at address 00000000016ED2C2 in module 'SSEEdit64.exe'. Read of address FFFFFFFFA75B5330

 

The second address will change but the first will always remain the same.

Screenshot (164).png

Screenshot (165).png

Edited by collinfool100
Link to comment

I changed both log levels to 5 and now im getting this 

 

---------------------------------------------------------------
NPC Furrifier 6: Makes NPCs furry.
---------------------------------------------------------------
Override NPCs will be stored in the file: test.esp
<InitializeStringLists
|   <InitializeStringLists
|   |   <CollectRaces
|   |   |   <LoadTintLayers BretonRaceChildVampire "Breton" [RACE:00108272]
[00:04] Exception in unit BDAssetLoader line 423: Access violation at address 00000000016ED2C2 in module 'SSEEdit64.exe'. Read of address FFFFFFFF97423240
[00:04] Error during Applying script "BD_Furry_Patch_Builder": Access violation at address 00000000016ED2C2 in module 'SSEEdit64.exe'. Read of address FFFFFFFF97423240
 

Link to comment

Gonna save you some time reading all of that but I disabled every single Face, Hair, Overlay mod I had for Npc's and the Pc and now I am getting this

 

 

 

 

NPC Furrifier 6: Makes NPCs furry.
---------------------------------------------------------------
Override NPCs will be stored in the file: test.esp
<InitializeStringLists
|   <InitializeStringLists
|   |   <CollectRaces
|   |   |   <LoadTintLayers BretonRaceChildVampire "Breton" [RACE:00108272]
|   |   |   |   <LoadTintsForSex BretonRaceChildVampire "Breton" [RACE:00108272] M
|   |   |   |   |   Found tint layer Skin Tone
|   |   |   |   |   |   Loading tint layer Skin Tone race=0 sex=0 tint=25
|   |   |   |   |   |   Found tint mask Skin Tone TINI=2
|   |   |   |   |   |   Found 0 presets starting at 0
|   |   |   |   |   Found tint layer Dirt
|   |   |   |   |   |   Loading tint layer Mask race=0 sex=0 tint=10
|   |   |   |   |   |   Found tint mask Mask TINI=1245
|   |   |   |   |   |   Found 0 presets starting at 0
|   |   |   |   |   Found tint layer Dirt
|   |   |   |   |   |   Loading tint layer Mask race=0 sex=0 tint=11
|   |   |   |   |   |   Found tint mask Mask TINI=6
|   |   |   |   |   |   Found 0 presets starting at 0
|   |   |   |   |   Found tint layer Dirt
|   |   |   |   |   |   Loading tint layer Mask race=0 sex=0 tint=12
|   |   |   |   |   |   Found tint mask Mask TINI=7
|   |   |   |   |   |   Found 0 presets starting at 0
|   |   |   |   |   Found tint layer EyeSocket Lower
|   |   |   |   |   |   Loading tint layer EyeSocket Lower race=0 sex=0 tint=5
|   |   |   |   |   |   Found tint mask EyeSocket Lower TINI=4
|   |   |   |   |   |   Found 0 presets starting at 0
|   |   |   |   |   |   Loading tint layer Muzzle race=0 sex=0 tint=14
|   |   |   |   |   |   Found tint mask Muzzle TINI=4
|   |   |   |   |   |   Found 0 presets starting at 0
|   |   |   |   |   Found tint layer Laugh Lines

 

..........

 

|   |   |   |   |   Found tint layer Dirt
|   |   |   |   >LoadTintsForSex
|   |   |   >LoadTintLayers 
|   |   >CollectRaces
|   |   <CollectRaceHeadparts
|   |   |   <LoadHeadPart HairFemaleImperial1 [ 0010F79E ] Hair
|   |   |   |   Found reference to form list HeadPartsHumansandVampires
[00:09] Exception in unit  line -1: Error in unit 'BDAssetLoader' on line 606 : Statement expected but 'else' found
[00:09] Error during Applying script "BD_Furry_Patch_Builder": Error in unit 'BDAssetLoader' on line 606 : Statement expected but 'else' found
 

Dots are there to prevent this page from being tens of thousands of pages long.

 

{  Override NPCs will be stored in the file: test.esp
<InitializeStringLists
|   <InitializeStringLists
|   |   <CollectRaces
|   |   |   <LoadTintLayers BretonRaceChildVampire "Breton" [RACE:00108272]
[00:04] Exception in unit BDAssetLoader line 423: Access violation at address 00000000016ED2C2 in module 'SSEEdit64.exe'. Read of address FFFFFFFF97423240
[00:04] Error during Applying script "BD_Furry_Patch_Builder": Access violation at address 00000000016ED2C2 in module 'SSEEdit64.exe'. Read of address FFFFFFFF97423240  }

 

This is still an error I get however, even with all the mods disabled so im not quite sure what is causing it.

Edited by collinfool100
Link to comment

So I have noticed that upon checking YiffyAgeConsolidated.esp for errors, it gives 18 errors.

 

[00:00] Checking for Errors in [C4] YiffyAgeConsolidated.esp
[00:02] Braith "Braith" [NPC_:00013BA9]
[00:02]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 2 not found in RedguardRaceChild "Redguard Child" [RACE:0002C65A]>
[00:02] Nocturnal "Nocturnal" [NPC_:0001A2CF]
[00:02]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 23 not found in DarkElfRace "Dark Elf" [RACE:00013742]>
[00:03] Embry "Embry" [NPC_:0003550B]
[00:03]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 17 not found in NordRace "Nord" [RACE:00013746]>
[00:04] WindhelmPitFan1 "Pit Fan" [NPC_:000558ED]
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 24 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 26 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 27 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 28 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 29 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 30 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 31 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 32 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 33 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 34 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 35 not found in NordRace "Nord" [RACE:00013746]>
[00:04] WindhelmPitFan4 "Pit Fan" [NPC_:000558F3]
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 3 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 5 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 10 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 11 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 12 not found in NordRace "Nord" [RACE:00013746]>
[00:04] WindhelmPitFan5 "Pit Fan" [NPC_:000558F5]
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 3 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 5 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 10 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 11 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 12 not found in NordRace "Nord" [RACE:00013746]>
[00:04] WindhelmPitFan6 "Pit Fan" [NPC_:000558F7]
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 3 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 5 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 10 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 11 not found in NordRace "Nord" [RACE:00013746]>
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 12 not found in NordRace "Nord" [RACE:00013746]>
[00:04] DA13EncAfflicted02MagicCondF [NPC_:00064A7B]
[00:04]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 29 not found in DA13AfflictedRace "Afflicted" [RACE:00097A3D]>
[00:05] DLC1Prelate00 "Prelate Sidanyis" [NPC_:02002B44]
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 4 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 5 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05] DLC1AlthadanVyrthur "Arch-Curate Vyrthur" [NPC_:02003788]
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 5 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05] TestMasterPackageKid "TestKid" [NPC_:02003FF7]
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 2 not found in RedguardRaceChild "Redguard Child" [RACE:0002C65A]>
[00:05] DLC1Gelebor "Knight-Paladin Gelebor" [NPC_:0200A877]
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 4 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 50 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05] DLC1Prelate01 "Prelate Athring" [NPC_:0200A8AC]
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 4 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 5 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05] DLC1Prelate02 "Prelate Celegriath" [NPC_:0200A8AD]
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 4 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 5 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 6 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05] DLC1Prelate03 "Prelate Nirilor" [NPC_:0200A8AE]
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 4 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 5 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05] DLC1Prelate04 "Prelate Edhelbor" [NPC_:0200A8B0]
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 4 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 5 not found in SnowElfRace "Snow Elf" [RACE:0200377D]>
[00:05] BYOHUrchin_Blaise "Blaise" [NPC_:03003F56]
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 1 not found in BretonRaceChild "Breton" [RACE:0002C65C]>
[00:05] BYOHUrchin_Lucia "Lucia" [NPC_:03003F5F]
[00:05]     NPC_ \ Tint Layers \ Layer \ TINI - Tint Index -> <Tint layer index 2 not found in ImperialRaceChild "Imperial" [RACE:0002C659]>
[00:06] Done: Checking for Errors, Processed Records: 5402, Errors found: 18, Elapsed Time: 00:06
 

Link to comment

The tint layer index errors can be ignored. They happen when the tint indices on the NPC don't match the race, but they don't cause problems.

 

Link to comment
  1. Any face texture mods should be irrelevant, once everything is furrified. So ya, disable them.
  2. I'm an idiot. That fix I gave you created the error.
  3. I think you must have something in your load order that overrides BretonRaceChildVampire. Can you figure out what it is?
  4. Here are fixed scripts. With these, I don't get any errors. Let me know how it works for you.

 

 

BDAssetLoader.pas BD_Furry_Patch_Builder.pas

Link to comment

So as a heads up, for anyone who has an issue with a race but you have no race mods installed, it could be a questline mod. For me it was Maids II Deception.

Why, I couldnt tell you but hey whatever, its now fixed.

Edited by collinfool100
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