Jump to content

Recommended Posts

Posted (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 by nopse0
Posted

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:

489830_20250628173104_1.png.d64f3716d12323a13e66884d1b98796e.png

Posted

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?

Posted
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?

Posted (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 by nopse0
Posted
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).

Posted
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.

 

Posted
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).

Posted (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 by PopkaPiska3000
Posted
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":

image.png.7ace3354302c8e6f875c7b6c44495737.png

 

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.

 

Posted
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!

Posted
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!

Posted

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 

Posted
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. 

 

Posted
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.  

 

Posted
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.

Posted
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.

 

 

 

Posted

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”!

Posted
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.

Posted

@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.

 

 

 

Posted
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?

Posted
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

Posted
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. 

Posted (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 by Nuascura
Posted
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.

 

 

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...