nopse0 Posted June 28, 2025 Author Posted June 28, 2025 (edited) 10 hours ago, PopkaPiska3000 said: I have Bathing in Skyrim - Renewed and installed this patch. It's not working, even if i choose Bathing in Skyrim in SlaveTats. Darn, I thought it was, that I didn't set ".SlaveTats.updated=1" after changing the alpha value in the "UpdateAlpha" function, maybe there's something else. Btw., did you copy the dirt textures from BISR to the SlaveTats folder and a new game in your test ? Edited June 28, 2025 by nopse0
nopse0 Posted June 28, 2025 Author Posted June 28, 2025 Added a function to get the time elapsed since the game was last saved. This can be used with "Simple Clock on-screen" https://www.nexusmods.com/skyrimspecialedition/mods/89360 to make a "Save game reminder" (always annoying if the game crashes after not having saved for an hour, or so). Simply replace Int[] time = PO3_SKSEFunctions.GetSystemTime() with Int[] time = SlaveTatsNG.get_last_save_time() In the screenshot you see at the top the time elapsed since my last save:
LinksSword Posted June 28, 2025 Posted June 28, 2025 so would this help prevent script lag for mods like rape tattoos if i had a mod like random sex going on and multiple npcs having tattoos applied to them?
PopkaPiska3000 Posted June 28, 2025 Posted June 28, 2025 12 hours ago, nopse0 said: Darn, I thought it was, that I didn't set ".SlaveTats.updated=1" after changing the alpha value in the "UpdateAlpha" function, maybe there's something else. Btw., did you copy the dirt textures from BISR to the SlaveTats folder and a new game in your test ? I use Nexus. So I have Bathing in Skyrim - Renewed and have textures of dirt (https://www.nexusmods.com/skyrimspecialedition/mods/130075), then i downloaded your SlaveTatsNG and BISR-SlaveTats-Patch-1.7z. I tested with new game. Dirt does not appear at all. If I open SlaveTats and choose for example Body Tattoos, i can choose in Section 1 "BATHING IN SKYRIM" but in Pattern 1 i see 2 variants but i can't choose anything. If i close MCM and go back to SlaveTats, in Section 1 everything will reset and will be "NO TATTOO". Maybe it's because of the texture mod?
nopse0 Posted June 28, 2025 Author Posted June 28, 2025 (edited) 58 minutes ago, PopkaPiska3000 said: I use Nexus. So I have Bathing in Skyrim - Renewed and have textures of dirt (https://www.nexusmods.com/skyrimspecialedition/mods/130075), then i downloaded your SlaveTatsNG and BISR-SlaveTats-Patch-1.7z. I tested with new game. Dirt does not appear at all. If I open SlaveTats and choose for example Body Tattoos, i can choose in Section 1 "BATHING IN SKYRIM" but in Pattern 1 i see 2 variants but i can't choose anything. If i close MCM and go back to SlaveTats, in Section 1 everything will reset and will be "NO TATTOO". Maybe it's because of the texture mod? I cannot guarantee that it works, because I don't have BISR installed atm. (though I think it should, don't know why it shouldn't). That you cannot choose anything is because, I think, that you didn't copy the BISR textures to the DATA/textures/actors/character/slavetats/mzin_bathe_set1_f DATA/textures/actors/character/slavetats/mzin_bathe_set1_m folders (the "_f" is for female characters, and the "_m" folder for male characters). My mod contains these two folders, but they are empty. You still have to copy the textures, you installed BISR with (you can choose between different texture sets, when you install BISR) to these folders. I have the impression, nobody, except me, understands this, maybe I should simply copy some textures from BISR into my patch - on the other hand, I guess I have no copyright for that. This has nothing to do with BISR, if you copied the textures to the two folder, you will be able to apply them with the SlaveTats MCM. Edited June 28, 2025 by nopse0
elliesec Posted June 28, 2025 Posted June 28, 2025 1 hour ago, LinksSword said: so would this help prevent script lag for mods like rape tattoos if i had a mod like random sex going on and multiple npcs having tattoos applied to them? Very much so, yes. The SlaveTats calls are the slowest parts of Rape Tattoos by a large margin if using the original SlaveTats. Rape Tattoos Continued irons out a handful of inefficiencies over the original Rape Tats at the Papyrus level, but the main bottleneck in tattoo application was always SlaveTats. SlaveTats NG speeds up tattoo aplication considerably, to the point that lag isn't really an issue any more (IMO).
manafalls Posted June 29, 2025 Posted June 29, 2025 15 hours ago, nopse0 said: I cannot guarantee that it works, because I don't have BISR installed atm. (though I think it should, don't know why it shouldn't). That you cannot choose anything is because, I think, that you didn't copy the BISR textures to the DATA/textures/actors/character/slavetats/mzin_bathe_set1_f DATA/textures/actors/character/slavetats/mzin_bathe_set1_m folders (the "_f" is for female characters, and the "_m" folder for male characters). My mod contains these two folders, but they are empty. You still have to copy the textures, you installed BISR with (you can choose between different texture sets, when you install BISR) to these folders. I have the impression, nobody, except me, understands this, maybe I should simply copy some textures from BISR into my patch - on the other hand, I guess I have no copyright for that. This has nothing to do with BISR, if you copied the textures to the two folder, you will be able to apply them with the SlaveTats MCM. I thought the new BISR used racemenu overlays not slavetats for showing dirt.
nopse0 Posted June 29, 2025 Author Posted June 29, 2025 20 minutes ago, manafalls said: I thought the new BISR used racemenu overlays not slavetats for showing dirt. Yes, but the patch changes BISR to use SlaveTats. If it works (would be nice if someone could confirm this, I don't have BISR installed), this would increase imo. robustness (one source of concurrent NiOverride calls less, and also because SlaveTats stores it's data in JContainers, so the dirt would persist, even if the RaceMenu overlays get lost because of whatever reason). 1
PopkaPiska3000 Posted June 29, 2025 Posted June 29, 2025 (edited) 21 hours ago, nopse0 said: I cannot guarantee that it works, because I don't have BISR installed atm. (though I think it should, don't know why it shouldn't). That you cannot choose anything is because, I think, that you didn't copy the BISR textures to the DATA/textures/actors/character/slavetats/mzin_bathe_set1_f DATA/textures/actors/character/slavetats/mzin_bathe_set1_m folders (the "_f" is for female characters, and the "_m" folder for male characters). My mod contains these two folders, but they are empty. You still have to copy the textures, you installed BISR with (you can choose between different texture sets, when you install BISR) to these folders. I have the impression, nobody, except me, understands this, maybe I should simply copy some textures from BISR into my patch - on the other hand, I guess I have no copyright for that. This has nothing to do with BISR, if you copied the textures to the two folder, you will be able to apply them with the SlaveTats MCM. I don't have folders with this name. I only have mzin_bathe_set1_f.json and mzin_bathe_set1_m.json, but it's not folders. I found this folders in Data\textures\mzin\Bathe\Set1, i see folder F and M. I copy dirt textures in this foldes, and nothing works. Edited June 29, 2025 by PopkaPiska3000
nopse0 Posted June 29, 2025 Author Posted June 29, 2025 1 hour ago, PopkaPiska3000 said: I don't have folders with this name. I only have mzin_bathe_set1_f.json and mzin_bathe_set1_m.json, but it's not folders. I found this folders in Data\textures\mzin\Bathe\Set1, i see folder F and M. I copy dirt textures in this foldes, and nothing works. The folders definitely are in the ".7z": Ok, I copied some textures from the BISR mod (from Oozaki), and uploaded a patch witch textures. Try it out, at least applying the textures with the SlaveTats MCM should work then. 1
verydarknut Posted June 29, 2025 Posted June 29, 2025 1 hour ago, nopse0 said: Ok, I copied some textures from the BISR mod (from Oozaki), and uploaded a patch witch textures. Try it out, at least applying the textures with the SlaveTats MCM should work then. Tested on my save that had BISR installed. After loading all my followers and myself are still dirty and got the layer applied as slavetat. The old patch did not work, now it works. Awesome!
nopse0 Posted June 29, 2025 Author Posted June 29, 2025 51 minutes ago, verydarknut said: Tested on my save that had BISR installed. After loading all my followers and myself are still dirty and got the layer applied as slavetat. The old patch did not work, now it works. Awesome! Super!
vulcan13 Posted June 29, 2025 Posted June 29, 2025 Slave Tats is crashing me upon trying to load it's MCM, I'm also trying to use this with Devious Curses and I assume when a Curse Tat event tries to happen it crashes upon interacting with a dead body/container here is the Crash Log for the MCM part I assume they're related. crash-2025-06-29-22-46-36.log
verydarknut Posted June 29, 2025 Posted June 29, 2025 2 hours ago, verydarknut said: Tested on my save that had BISR installed. After loading all my followers and myself are still dirty and got the layer applied as slavetat. The old patch did not work, now it works. Awesome! Sorry, I celebrated too soon. Bathing in Skyrim Renewed loses all control over the layers it seems. After bathing the new slavetat layers are gone, yes, but the racemenu layers remain. I removed the racemenu layers with the EFF cosmetic menu, but slavetats doesnt update with BISR. Even at 100% dirt no layers added back, neither racemenu nor slavetats Tested both on an established save and new game. On a new game (saved and loaded once) the slavetat layers never show up, even at 100% dirt. Although I didnt try save/reloading after that to see if it syncs on reloading.
nopse0 Posted June 30, 2025 Author Posted June 30, 2025 1 hour ago, vulcan13 said: Slave Tats is crashing me upon trying to load it's MCM, I'm also trying to use this with Devious Curses and I assume when a Curse Tat event tries to happen it crashes upon interacting with a dead body/container here is the Crash Log for the MCM part I assume they're related. crash-2025-06-29-22-46-36.log I see in the log, you are using "Skyrim SSE v1.6.353". This version is not supported (no addresses for the skee64.dll). And it seems you are using UBE (I see stuff like "UBE_AllRace.esp", etc.). This is another problem, UBE comes with a custom skee64.dll, which has different addresses than the normal skee64.dll.
vulcan13 Posted June 30, 2025 Posted June 30, 2025 4 minutes ago, nopse0 said: I see in the log, you are using "Skyrim SSE v1.6.353". This version is not supported (no addresses for the skee64.dll). And it seems you are using UBE (I see stuff like "UBE_AllRace.esp", etc.). This is another problem, UBE comes with a custom skee64.dll, which has different addresses than the normal skee64.dll. Upgrading versions is unfortunately non-negotiable for me as my Load Order is too large for me to attempt to upgrade. 254 Normal and 568 Light Plugins, I've been using this version since before 640 came out holding off updating due to Combat mods not being updated at the time and just never updating at all in the end. UBE how ever I'm not even using any of those races for my player character, and only got it for a Serana mod if I remember right which I think never effected or changed her at all... So that I could probably get rid of.
nopse0 Posted June 30, 2025 Author Posted June 30, 2025 1 hour ago, verydarknut said: After bathing the new slavetat layers are gone, yes, but the racemenu layers remain. Yes, that the old racemenu layers remain is normal, they aren't used anymore with the patch. You said after bathing the "SlaveTats layers are gone". Are they completely removed (not shown anymore in the SlaveTats MCM), or just their alpha set to 0 (completely transparent, invisible) ? For the player they should not be removed, because BISR adds them only once. I added an exception for the player in the "ClearDirtGameLoad" function. Maybe I also have to do this in the "ClearDirt" function, I didn't think this was neccessary (because it's quite useless to call "ClearDirt(player)", if ClearDirt does nothing for the player). For NPCs though, I really remove the tattoos in the "ClearDirtGameLoad" and "ClearDirt" functions. Will add an exception for the player in "ClearDirt", too, and upload a new version.
N.Gamma Posted June 30, 2025 Posted June 30, 2025 Just to be sure, I first need to install Slave Tats SE and then overwrite the files with those from Slave Tats NG, correct? I'm asking because the requirements only mention “for the MCM”!
Seeker999 Posted June 30, 2025 Posted June 30, 2025 5 hours ago, N.Gamma said: Just to be sure, I first need to install Slave Tats SE and then overwrite the files with those from Slave Tats NG, correct? Correct.
nopse0 Posted June 30, 2025 Author Posted June 30, 2025 @verydarknut I had a look at the ClearDirt function from BISR: Function ClearDirt(Actor akTarget) ; Clears the first dirt overlay it finds from each overlay area - faster mzinUtil.LogTrace("Clearing dirt from " + akTarget.GetBaseObject().GetName()) ;StorageUtil.UnSetStringValue(akTarget, "mzin_DirtTexturePrefix") Bool Gender = akTarget.GetLeveledActorBase().GetSex() as Bool String TexPath String Node String MatchString String TexPrefix = StorageUtil.GetStringValue(akTarget, "mzin_DirtTexturePrefix", "") Bool Result = false Int i = 0 While i < Areas.Length Int j = GetNumSlots(Areas[i]) MatchString = (TexPrefix + "DirtFX" + AreasTexNames[i] + ".dds") While j > 0 && !Result j -= 1 Node = Areas[i] + " [ovl" + j + "]" TexPath = NiOverride.GetNodeOverrideString(akTarget, Gender, Node, 9, 0) ;mzinUtil.LogTrace("ClearDirt(): Target: " + akTarget.GetBaseObject().GetName() + ". Node: " + Node + ". TexPath: " + TexPath + ". MatchString: " + MatchString) If TexPath == MatchString RemoveOverlay(akTarget, Gender, Node) Result = true mzinUtil.LogTrace("_mzin_: Removing overlay from slot " + j + " of area: " + Areas[i] + " on " + akTarget.GetBaseObject().GetName()) EndIf EndWhile Result = false i += 1 EndWhile If akTarget != PlayerRef NiOverride.ApplyNodeOverrides(akTarget) NiOverride.RemoveOverlays(akTarget) EndIf StorageUtil.UnSetStringValue(akTarget, "mzin_DirtTexturePrefix") EndFunction Because it's possible in BISR to have multiple dirt texture sets, there is per actor an "mzin_DirtTexturePrefix" prefix, which determines which dirt set is used for that actor (e.g. "Set1", "Set2", etc.). The ClearDirt function (as I read it) now does the following: * If the actor has an overlay with that dirt texture prefix, it removes the node override * If the actor is not the player, this change is applied ("ApplyNodeOverrides"), but for the player the change is not applied (!!!) * Afterwards, player or not player, the "mzin_DirtTexturePrefix" for this actor is cleared. Quite difficult to understand what effect this has. I think, because the node override changes haven't been applied, they have no effect on UpdateAlpha, it still works on the player after ClearDirt. But "mzin_DirtTexturePrefix" has been cleared for the player, so when the dirt texture set is changed for the player, a new overlay is added to the player and applied, and the application also deletes the old overlay, which hadn't been applied yet. I think that's the whole purpose of this strange code. Impossible to do this in SlaveTats. If I remove the tattoo, it's gone and it's alpha value cannot be changed anymore. And if I don't remove the tattoo, the player would get a second tattoo, when the dirt set of the player is changed. So, the idea BISR patch was nice, but, alas, impossible. Will remove the files. 1
N.Gamma Posted July 1, 2025 Posted July 1, 2025 18 hours ago, Seeker999 said: Correct. Thanks for the reply. Is there actually a mod that makes NPCs react to the messages written on the PC's body? I mean specific comments or actions related to the type of text written on the PC's body?
Kruggar Posted July 4, 2025 Posted July 4, 2025 On 7/1/2025 at 8:53 AM, N.Gamma said: Thanks for the reply. Is there actually a mod that makes NPCs react to the messages written on the PC's body? I mean specific comments or actions related to the type of text written on the PC's body? I think what comes close to this is SLSF Fame Comments. It only makes NPCs react to the category of tattoos, instead of specific tattoos
Seeker999 Posted July 4, 2025 Posted July 4, 2025 On 6/30/2025 at 11:23 PM, N.Gamma said: I mean specific comments or actions related to the type of text written on the PC's body? 59 minutes ago, Kruggar said: I think what comes close to this is SLSF Fame Comments. It only makes NPCs react to the category of tattoos, instead of specific tattoos Yes, that mod has all sorts of comments and I've been using it for some time now. It requires 'Sex Lab Sexual Fame' to gather the fame information and it's this mod that actually has the ability to add fame based on a category of tattoos within a given tattoo pack (ie, tattoo pack A has 6 groups of tattoos, and each group can be set up to garner specific fame). However, if you want to use 'SLSF-Reloaded', you still need 'Sex Lab Sexual Fame', but in Reloaded's MCM you will overwrite the original SLSF. In Reloaded you can set up 20 tattoo slots to garner specific types of fame.
Nuascura Posted July 4, 2025 Posted July 4, 2025 (edited) On 7/1/2025 at 1:29 AM, nopse0 said: If the actor is not the player, this change is applied ("ApplyNodeOverrides"), but for the player the change is not applied (!!!) This is curious. It seems we inherited this condition from BiS Tweaked 3.4. I wonder what the intention was. Wouldn't it make more sense to just check if is3DLoaded? Mostly talking to myself unless you have any additional insight. Edit: Nvm I've got it. I looked into the nioverride script. The RemoveOverlays() function only works on NPCs. That means, if anything, ApplyNodeOverrides() should be moved outside and below the IF clause. In all, this looks to be a safety function given that the BISR works a-okay so far with this IF clause in place. Edited July 4, 2025 by Nuascura
nopse0 Posted July 4, 2025 Author Posted July 4, 2025 On 6/30/2025 at 3:10 AM, vulcan13 said: Upgrading versions is unfortunately non-negotiable for me as my Load Order is too large for me to attempt to upgrade. 254 Normal and 568 Light Plugins, I've been using this version since before 640 came out holding off updating due to Combat mods not being updated at the time and just never updating at all in the end. UBE how ever I'm not even using any of those races for my player character, and only got it for a Serana mod if I remember right which I think never effected or changed her at all... So that I could probably get rid of. Hi! I am reading the RaceMenu function addresses now from a Json file, they are no longer hardcoded. So, now, it's quite easy to add support for RaceMenu dll versions which aren't supported yet (like the one for Skyrim 1.6.353, or the custom skee dlls from UBE). The Json file looks like this: Spoiler { "6df8589175031c701b7fc5d2befa9f4a": { "comment": "Skyrim 1.5.97, RaceMenu v0-4-16", "offset_GetNodeOverrideInt": 778592, "offset_GetNodeOverrideFloat": 778384, "offset_GetNodeOverrideString": 778992, "offset_AddNodeOverrideInt": 776672, "offset_AddNodeOverrideFloat": 776064, "offset_AddNodeOverrideString": 777264, "offset_HasNodeOverride": 630144, "offset_RemoveNodeOverride": 631248, "offset_ApplyNodeOverrides": 630064, "offset_AddOverlays": 628576, "offset_HasOverlays": 628608, "offset_RemoveOverlays": 628640 }, "f5bd9e8f9f7a7367c95c2d005302fd03": { "comment": "Skyrim 1.4.15 (VR), RaceMenu VR v0-4-14", "offset_GetNodeOverrideInt": 762032, "offset_GetNodeOverrideFloat": 761808, "offset_GetNodeOverrideString": 762464, "offset_AddNodeOverrideInt": 760080, "offset_AddNodeOverrideFloat": 759472, "offset_AddNodeOverrideString": 760672, "offset_HasNodeOverride": 616816, "offset_RemoveNodeOverride": 617952, "offset_ApplyNodeOverrides": 616736, "offset_AddOverlays": 615248, "offset_HasOverlays": 615280, "offset_RemoveOverlays": 615312 }, "2edbd15187134395a0898d13c8372026": { "comment": "Skyrim 1.6.659 (GOG), RaceMenu v0-4-19-14 GOG", "offset_GetNodeOverrideInt": 828304, "offset_GetNodeOverrideFloat": 828096, "offset_GetNodeOverrideString": 828704, "offset_AddNodeOverrideInt": 826416, "offset_AddNodeOverrideFloat": 825792, "offset_AddNodeOverrideString": 827008, "offset_HasNodeOverride": 678560, "offset_RemoveNodeOverride": 679424, "offset_ApplyNodeOverrides": 678544, "offset_AddOverlays": 677040, "offset_HasOverlays": 677168, "offset_RemoveOverlays": 677200 }, "d28195ed035cd19604d2f0c97bad6c44": { "comment": "Skyrim 1.6.640, RaceMenu v0-4-19-14", "offset_GetNodeOverrideInt": 827952, "offset_GetNodeOverrideFloat": 827744, "offset_GetNodeOverrideString": 828352, "offset_AddNodeOverrideInt": 826064, "offset_AddNodeOverrideFloat": 825440, "offset_AddNodeOverrideString": 826656, "offset_HasNodeOverride": 678208, "offset_RemoveNodeOverride": 679072, "offset_ApplyNodeOverrides": 678192, "offset_AddOverlays": 676688, "offset_HasOverlays": 676816, "offset_RemoveOverlays": 676848 } } The first string is the MD5 hash from the skee dll (you can get this on Windows with "certutil -hashfile skee64.dll MD5"), then a comment, and then the address offsets (how to get them is described in this forum here, look for mails containing "VR"). If your skee has not a standard name (not "skee64.dll" or "skeevr.dll"), you can define it in SlaveTatsNG.ini.
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