-
Notifications
You must be signed in to change notification settings - Fork 7
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
WNAN from Custom Record Template missing on patched custom NPCs #80
Comments
I’ll double check tonight when I can be at my computer but this sounds like the intended behavior. The patcher only uses record templates to fill in records or objects that the NPCs don’t already have. So if an NPC already has a worn armor, the patcher will make a copy of it rather than providing one from the record template. If I recall correctly, the record template for Dibellan has an extra Alternate Texture in the Worn Armor (or torso armature, I can’t remember) which is supposed to point to an _etc texture. As long as that’s getting copied into the patched WNAM, and its texture is getting assigned, everything is working correctly. If not, I’ll try to look tonight to see what I broke since it was released. |
Ah yes, I've now found those records on SSEEdit. I can confirm that NPCs being patched with FemaleBodyDefaultDibellan do get the extra 3bbb_etc texture record, but about those patched with _patched0001, some do and most do not (!)... for example: This follower (ESL) (https://www.nexusmods.com/skyrimspecialedition/mods/25112) was patched but did not get the extra texture entry on its torso armature This one (https://www.nexusmods.com/skyrimspecialedition/mods/55712?tab=files&file_id=228952&nmm=1) had its torso armature patched correctly with the extra texture, but hands/feet textures were not patched These two (https://www.nexusmods.com/skyrimspecialedition/mods/29852) were patched correctly, with extra texture. Now, I wonder what kind of incompatibility we may run into... for example, what would happen if the patcher tries to assign Alternate Texture records to a custom NPC that already has one or two. This one (https://www.nexusmods.com/skyrimspecialedition/mods/77812?tab=files) for instance, have 3 Alternate Textures on its FemaleWorldModel entry. |
Finally had some time to take a look.. Ahlalia: Originally was not getting patched at all for me due to my rule set in the BodyN category. Fanny: Was not getting patched for me because the whole-config rules for dibellan prohibit Age40/50 NPCs. Vorgha: Same as Ahlalia. So, I edited the Dibellan config to remove these rule sets: Ahlalia: You are correct - the new Alt texture set is not getting created in the ARMA record. I will investigate this. Fanny: Everything seems to be getting patched correctly on my end. Got torso (with alt texture), hands, and feet all patched. Can you verify that this repeatable on your end? Vorgha: same as Ahlalia. So I've verified your observation that the extra texture set isn't being applied - will try to figure out if this is a bug with SynthEBD or this specific config file. I suspect it may have to do with how I defined the destination: This means:
If at any point the patcher can't get x from the NPC, it should shift over to getting it from the record template. For most NPCs this should occur where I wrote ** (because they have no alternate torso arma textures). For some NPCs that do, it'll occur at *** (they won't have one named "3BBB_etc"). I'm not sure where this process is failing with Ahlalia and Vorgha, will be interesting to check it out. One thing to note is that I actually expected Vorgha to get an "extra" alternate texture in addition to her three - in reality the already has the same texture that Dibellan is trying to apply (the second one) but because it's not named "3BBB_etc" in the list, the config file doesn't realize it's the same. One thing I could do is edit the config file a bit - intead of looking for the alternate texture named "3BBB_etc", I could have it look for the alternate texture whose NewTexture.Diffuse.RawPath is set to |
Ok... lot's of things to talk about then... About the PatchableRaces, I was under the impression that for Custom Races to work, it was only needed to have a Race Alias set (alias set to actual patchable races). That's how I've set up all my custom races... does the PatchableRaces/MatchRace functions consider Race Alias? About these alt textures from Female World Model, do you know which identifier is actually used to match the texture to the .nif? Is it the "3D Name" record or the "3D Index" record? This is mere speculation on my end since I'm not familiar with the engineering behind skyrim's meshes/textures, but if the popular body mods out there generate .nifs that actually follow a pattern (as in 3D Name or 3D index always correlating to the same body parts), I think we can consider some approaches:
For the 2nd approach for example, maybe something like these test files: I've basically modified your Dibellan .esp to match the alt texture names I could find with nifskope (BSTriShape property), from a basic CBBE 3BA .nif generated with bodyslide. Regarding Fanny NPC, my previous patch run did create a separate _Patched record for torso only, but for hands/feet the patcher created these same records as a record overwrite over the original ones (without the _Patched name) keeping the original npc texture paths. However, maybe that's probably because I ran the patcher on a zmerged esp which included said NPC (who knows what zmege messed up), or because I had only two body textures as enforced via specific npc assignments... |
PatchableRaces does consider Race Alias (as of a recent update) but it's a deprecated call anyway - I just forgot to update it in this config file. MatchRace works better, and doesn't check the Patchable Race list at all - it just checks to make sure the race matches between the NPC and its amature. For example, in that same config file, for the primary body textures, the destination looks like
If the Destination only had the In this case it would still patch the correct one because it comes first in the list, but there's no guarantee that would be the case for all NPCs. That's why the Destination includes the race check. Just FYI, bit of a tangent. Regarding the alt textures:
I think in the meantime the best solution would to just have the destination path accept "femalebody_etc_1.dds" OR "femalebody_etc_v2_1.dds". I'm unclear myself on what the difference is or why an NPC would use one over the other, but as long as it's what the patcher is looking for it shouldn't matter. |
Thanks for the primer on those functions... I tried testing now with MatchRace instead of PatchableRaces, and things did improve a bit. Ahlalia has now been correctly patched with alt textures. Vorgha was patched, but patcher kept original alt textures records. However, I used that custom .esp I've created now, but behaviour should probably be the same with Dibellan's Record Template too. And yeah, all things considered, your approach of checking both .dds files should probably be the best compromise for now indeed 👍 |
Check out the new Dibellan config I just uploaded - as discussed before it can't be perfect, but in my testing it actually worked nicely for an array of custom followers. |
Yeah I'm testing Dibellan config with that new Destination path and its working, can't find any non-patched NPC now 👍 However, I think that approach only works when patching old CBBE bodies that only need one alttexture entry (which so far I haven't found any, I haven't been modding for long). For 3BBB/3BA to work correctly, I tried making a new record template copying the dibellan one, but with two default alt textures instead of just one. Then on synthebd, tried these: Creating two asset paths for etc.dds, both with this destination:
The result was a patcher crash right at the end with:
Looks like patcher gets confused while trying to assign same texture file to two different entries haha Then I've tried creating two asset paths for etc.dds, each with different destination paths, one for each alt texture entry (sorting by Index instead of record name or .dds name, which IMO feels like better compatibility):
This time the patcher ran fine, both alt texture got the same .dds, and all npcs got patched, even those with custom alt textures already assigned (like Vorgha NPC). I also did try simplifying it a bit with one asset path only and a one-liner like "Index == 2 || Index == 1", but patcher gets confused again and crashes 🤣 |
Interesting! I didn’t realize 3BA needs two textures - I guess I never looked closely enough to check ;). Thank you for investigating, and finding a solution. I’ll look in and see why the first condition causes a crash - it kind of looks similar to the crash that I fixed with the “array can have non-record objects” fix from 0.9.0. I wonder if I’m still missing an edge case. Fortunately, SynthEBD config installers can link assets and record templates, so I can make one config file that uses the original record template .esp modeled on CBBE, and another modeled on 3BA, depending on what the user chooses during installation. |
Hi Piranha, here's another one...
I'm testing your FA Dibellan asset pack that comes with a custom Record Template. So far so good.
However, while checking logs I noticed that almost all custom NPCs aren't being patched with the FemaleBodyDefaultDibellan WNAN record. The ones that do get patched like that are those who don't have a WNAN record by default, while those who already do have the record (majority of them) are patched in another way (they get the _patched0001 WNAN).
Maybe a bug? Or is it a compatibility workaround?
The text was updated successfully, but these errors were encountered: