nopse0 Posted May 14 Author Posted May 14 About your 'F6' problem, are you on Linux ? On Windows, virtual keycodes are used, which are the same for all keyboards, but on Unix the real keycodes from the hardware are used, which are different for each keyboard, you need the correct driver
XDbored Posted May 16 Posted May 16 for some reason this gives me CTD on startup which is shame because regular slavetats is pretty slow i am using address library "All in one (all game versions)-32444-11-1770897704" game version steam 1.6.1170.0 SKSE 0.2.2.6skse64.log slavetats 1.3.9 slavetatsNG 0.8.9 it loads in SKSE64.log, and then it crashes on "sending message type 8 to plugin 20" with plugin 20 being SlaveTatsNG.dll
nopse0 Posted May 16 Author Posted May 16 6 hours ago, XDbored said: for some reason this gives me CTD on startup which is shame because regular slavetats is pretty slow i am using address library "All in one (all game versions)-32444-11-1770897704" game version steam 1.6.1170.0 SKSE 0.2.2.6skse64.log slavetats 1.3.9 slavetatsNG 0.8.9 it loads in SKSE64.log, and then it crashes on "sending message type 8 to plugin 20" with plugin 20 being SlaveTatsNG.dll Hm, I think 8 is 'kDataLoaded', and there happens this: The JContainers and NiOverride (RaceMenu) interfaces get initialized. Do you have JContainers and RaceMenu installed ? If yes, what versions, latest from NexusMods ? Maybe redownloading and reinstalling helps, maybe a dll file is corrupt.
XDbored Posted May 16 Posted May 16 (edited) 1 hour ago, nopse0 said: Hm, I think 8 is 'kDataLoaded', and there happens this: The JContainers and NiOverride (RaceMenu) interfaces get initialized. Do you have JContainers and RaceMenu installed ? If yes, what versions, latest from NexusMods ? Maybe redownloading and reinstalling helps, maybe a dll file is corrupt. that is definitely it, i couldn't get my 4-2-9 SE version of jcontainers to load without CTD, so i was using the VR version of jcontainers 4-2-11 which caused CTD as soon as some other mod like slavetats NG tried to use it. somehow i had installed a 8.1.0? renamed to a 4.2.9, probably via misclick in the MO2 name dropdown, new download real jcontainers 4.2.9 fixed the problem. Edited May 16 by XDbored typo 1
nehrgumb Posted May 17 Posted May 17 Hey there, sorry to bother you but we just noticed that SlaveTatsNG takes iNumOverlays only from skee64.ini and ignores skee64_custom.ini see https://github.com/nopse0/SlaveTatsNG/blob/v0.8.1/src/nioverride_wrapper.cpp vs SKEE64GetConfigOption https://github.com/expired6978/SKSE64Plugins/blob/master/skee64/main.cpp#L258 workaround is obviously making sure the correct number is also set in skee64.ini. just letting you know and putting the info out here in case some people have weird overlay problems, like us using the skee64_custom.ini to increase the number of slots and wondering why it didnt work. Thank you for an awesome mod and all your hard work! 2
TrollAutokill Posted May 19 Posted May 19 (edited) Hi, I am using SlaveTats calls in my mod with: JMap.setInt(map, "color", colorTint) JMap.setFlt(map, "invertedAlpha", 1.0 - alpha) JMap.setInt(map, "glow", glow) JMap.setInt(map, "gloss", 1) Slavetats.add_tattoo(anActor, map, slot) Could you confirm that your SlaveTats NG is just a drop in in this case? Or do I need to do some adjustments? Cheers and thanks for the good work. TAK Edited May 19 by TrollAutokill
nopse0 Posted May 19 Author Posted May 19 9 hours ago, TrollAutokill said: Hi, I am using SlaveTats calls in my mod with: JMap.setInt(map, "color", colorTint) JMap.setFlt(map, "invertedAlpha", 1.0 - alpha) JMap.setInt(map, "glow", glow) JMap.setInt(map, "gloss", 1) Slavetats.add_tattoo(anActor, map, slot) Could you confirm that your SlaveTats NG is just a drop in in this case? Or do I need to do some adjustments? Cheers and thanks for the good work. TAK Yes, confirmed. SlaveTatsNG overwrites SlaveTats.pex, and 'SlaveTats.add_tattoo' calls the native SlaveTatsNG function. If this works with SlaveTats, it will also work with SlaveTatsNG (but I don't know how you initialize your 'map', it must also contain a valid 'texture', 'area' and 'section' from an installed SlaveTats tattoo) 1
TrollAutokill Posted May 20 Posted May 20 21 hours ago, nopse0 said: Yes, confirmed. SlaveTatsNG overwrites SlaveTats.pex, and 'SlaveTats.add_tattoo' calls the native SlaveTatsNG function. If this works with SlaveTats, it will also work with SlaveTatsNG (but I don't know how you initialize your 'map', it must also contain a valid 'texture', 'area' and 'section' from an installed SlaveTats tattoo) Thanks for the prompt reply. The map is initialized, with Int map = JMap.object() JValue.retain(map) JMap.setStr(map, key1, value1) ... And that is used by SlaveTats to get the correct file and settings from the JSON file. Said JSON file you can only update through the SlaveTats MCM.
ahsdg Posted June 12 Posted June 12 Hi, so I found this version of slavetats while going through a new install of Skyrim. I read this in the description. Disadvantages: No ModEvents are send So it seems this Slavetats NG is great because it has much better performance, but what does this 1 disadvantage mean in terms of the mods functionality? Am I correct in assuming certain mods will not work with this version then?
nopse0 Posted June 12 Author Posted June 12 (edited) 5 hours ago, ahsdg said: Hi, so I found this version of slavetats while going through a new install of Skyrim. I read this in the description. Disadvantages: No ModEvents are send So it seems this Slavetats NG is great because it has much better performance, but what does this 1 disadvantage mean in terms of the mods functionality? Am I correct in assuming certain mods will not work with this version then? This was asked often. I think there are no mods which use the SlaveTats mod events (or only very old LE ones). 1-2 years ago I was thinking about implementing this, and tested a bit, but imo the existing SlaveTats code creates far too many mod events, especially if you have a lot of overlay slots, each 'synchronize_tattoos' call causes lots of events Edited June 12 by nopse0
ahsdg Posted June 12 Posted June 12 10 hours ago, nopse0 said: This was asked often. I think there are no mods which use the SlaveTats mod events (or only very old LE ones). 1-2 years ago I was thinking about implementing this, and tested a bit, but imo the existing SlaveTats code creates far too many mod events, especially if you have a lot of overlay slots, each 'synchronize_tattoos' call causes lots of events To clarify for myself then, seems this is a good thing to use this mod. Few if any mods use the mod event code, and even then they bloat the game by spamming that function.
lk74 Posted June 18 Posted June 18 (edited) I was using SlaveTatsNG 0.8.1 with GUI 0.2.0, and got this weird problem... whenever a slavetat is updated on an npc (such as when applying DOM branding, or when applying tats directly via GUI), the NPC skin will turn purple (transparent slavetat over purple texture instead of over skin texture). disable-enable the affected NPC, or save-load will fix this. But its very annoying. ...so I reverted to 0.5.1 where this problem does not occur. Weird... Edited June 18 by lk74 add GUI error case
nopse0 Posted June 18 Author Posted June 18 (edited) 2 hours ago, lk74 said: I was using SlaveTatsNG 0.8.1 with GUI 0.2.0, and got this weird problem... whenever a slavetat is updated on an npc (such as when applying DOM branding, or when applying tats directly via GUI), the NPC skin will turn purple (transparent slavetat over purple texture instead of over skin texture). disable-enable the affected NPC, or save-load will fix this. But its very annoying. ...so I reverted to 0.5.1 where this problem does not occur. Weird... Good description, I understand. Yes, strange. The first thing, which comes into my mind, is, that 0.5.1 was before I was executing 'synchronize_tattoos' via an SKSE task (before, in 0.5.1, this was done directly in the Papyrus threads, but this sometimes gave CTD's), so the timing, when the overrides are applied, has changed since then (now they are applied later, at the next vsync). Do you have any mods installed, which are doing skin overrides ? Edited June 18 by nopse0
REALnomad Posted June 18 Posted June 18 (edited) Spoiler 1 hour ago, nopse0 said: Do you have any mods installed, which are doing skin overrides ? Can this also be bacause of for example Bathing in Skyrim and wetfunction redux (it actually works fine, I guess) How to fix already purple skin? Removing all tatoos and racemenu overlays HELPS but the mistake I noticed for example if I apply some overlay to slot_0 mods like Bathing in Skyrim puts overlay over it via racemenu and creates purple skin. Edit. My bad, it must be Bathing is Skyrim bug. Still, sometimes this bug was prior to installing bathing. Apologies Edited June 18 by REALnomad
lk74 Posted June 18 Posted June 18 15 hours ago, nopse0 said: Good description, I understand. Yes, strange. The first thing, which comes into my mind, is, that 0.5.1 was before I was executing 'synchronize_tattoos' via an SKSE task (before, in 0.5.1, this was done directly in the Papyrus threads, but this sometimes gave CTD's), so the timing, when the overrides are applied, has changed since then (now they are applied later, at the next vsync). Do you have any mods installed, which are doing skin overrides ? that would be difficult to pinpoint, my modlist is very long... though, if you could point me to a specific mod (or skse output log) I could dig a bit further, cuz I have no idea how textures or overlays work...
nopse0 Posted June 19 Author Posted June 19 10 hours ago, lk74 said: though, if you could point me to a specific mod (or skse output log) I could dig a bit further, cuz I have no idea how textures or overlays work... I am only guessing, too, don't really know how this all works. From what I read, I gather, an actor has a skin. That's a set of textures, which is applied to the naked parts of the body. Then there are armors. A special case is the armor worn in the body slot, slot 32. It contains the mesh of the armor itself plus a mesh of the naked body. The textures from the skin are then applied to the naked body mesh. But the naked body mesh/armor can have "Armor Addons", which are applied on top of the naked body armor. This is what SlaveTats is using to apply its tattoos. NiOverride (RaceMenu) has two kinds of functions, node override functions and skin override functions. The node override functions are what SlaveTats is using to add ArmorAddons to the naked body mesh/armor. But there are also mods, which are using the skin override functions to replace the skin with different textures (diffuse, normals, etc.). This is not the same as replacing the naked skin textures in the textures folder, because this is done dynamically at runtime and can be done on a per actor basis (I think). An example for a skin override mod is https://www.nexusmods.com/skyrimspecialedition/mods/177893 (has links to other skin override mods: Wet Function Redux, Racial Skin Variance, Pregnancy mods). I just had the idea, that maybe there are concurrency problems, when node and skin overrides are applied at the same moment in time, that's why I asked, if you have skin override mods.
IvaInn Posted June 19 Posted June 19 I had this problem too. I was using immersive hair growth, a tattoo to simulate body hair growth. The wet function was also enabled.
nopse0 Posted June 20 Author Posted June 20 20 hours ago, IvaInn said: I had this problem too. I was using immersive hair growth, a tattoo to simulate body hair growth. The wet function was also enabled. If I think about it, I know this, I also had this sometimes. After playing for a long time non-stop (a few hours, or so), and a lot of sex scenes, sometimes some actors get purple/white body parts (e.g. the hands). But when I inspected those actors in the Gui then, everything was allright, the NiOverride data and the SlaveTats tattoo data was ok, no scrambled texture names or other shader properties. And after restarting Skyrim, everything was ok again. So, I think, some texture cache of Skyrim or the graphics card gets corrupted (or full). But without a reliable, simple way to reproduce this, no way to find out what is causing this.
nopse0 Posted Wednesday at 07:58 AM Author Posted Wednesday at 07:58 AM I tried to get an understanding how NiOverride works and what it is doing, so I installed an LLM and talked with the AI about it: Answer: Now checking OverrideInterface implementation to compare its role with OverlayInterface. I’ve identified the two interfaces. Next I’ll verify the exact role of OverrideInterface::ApplyNodeOverrides and where OverlayInterface invokes it. Short answer Yes — that is basically correct. OverlayInterface is the code that builds and attaches overlay geometry to actor skeletons. OverrideInterface is the system that stores and applies per-node/armor property overrides, including shader/material changes. What OverlayInterface does In OverlayInterface.cpp: OverlayInterface::InstallOverlay loads a NIF overlay mesh, creates a new BSGeometry, copies skin/shader state from the source, and then does: destination->AttachChild(newShape, false) OverlayInterface::UninstallOverlay removes overlay nodes by name from the parent skeleton OverlayInterface::ResetOverlay re-applies textures/shader state onto an existing overlay geometry It also uses BGSTextureSet, BSGeometry, NiNode, NiAVObject, BSLightingShaderProperty, BSLightingShaderMaterial, and related scenegraph types So yes: OverlayInterface is primarily about attaching/removing/relinking overlay mesh nodes. What OverrideInterface does In OverrideInterface.cpp and OverrideInterface.h: stores override values in maps keyed by reference, armor, addon, node, etc. supports SetNodeProperty, SetArmorProperty, SetArmorOverride, SetNodeOverride applies overrides via: OverrideInterface::ApplyNodeOverrides OverrideInterface::ApplyArmorOverrides Impl_ApplyNodeOverrides traverses NiAVObject/geometry and applies OverrideVariant values these overrides are about modifying properties on existing nodes, including shader parameters So yes: OverrideInterface is the shader/material/node property override layer, not the mesh attachment layer. Important nuance OverlayInterface actually calls into OverrideInterface: g_overrideInterface.Impl_ApplyNodeOverrides(refr, newShape, true) That means overlay installation can still get shader/property overrides applied after the mesh is attached. So the relationship is: OverlayInterface = attach/remove/reset overlay mesh nodes OverrideInterface = manage/apply extra property overrides on those nodes (and on armor/weapon/skin nodes too)
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now