Jump to content

Devious Devices Framework Development/Beta


Recommended Posts

Time for a new device that can hopefully be added to the framework in a future update. It's a new harness but without the parts that cover the groin/crotch area. Thanks to Outfit Studio I was able to take the current harness and remodel some parts to create a crotch-less harness. 

 

Some screenshots:

 

Spoiler

Harness01.png.ef5eede946e3e5fbbcf3a87a10e548a5.png

Harness02.png.d3d0f1c0044ee63ab91b79dd9e893187.png

Harness03.png.aafd897902cc6620cfbf45983fef3abc.png

 

 

I almost gave up at one point because of weighting issues. The straps that go under the groin from front to back gave me a lot of trouble, they had a lot of stretching issues. I managed to figure out the weight painting and I think it looks okay now. HDT also seems to work fine with the newly added straps.

 

I have simple mod ready for testing, includes CBBE and UUNP BodySlides plus new ground/inventory objects. For testing these new crotch-less harnesses replace the meshes used by the various "Slave Harnesses" found in the framework. Unlike the "chastity" harnesses the "slave" versions don't act as a chastity belt thus allowing sex, that's odd because the groin area is blocked. So I figured the new crotch-less versions could be used instead. Covers the Black, Red and White Leather and Ebonite versions of the slave harnesses.

 

Crotchless Harness Test.7z

 

Enjoy!

Link to comment
3 hours ago, UnEvenSteven said:

Time for a new device that can hopefully be added to the framework in a future update.

Nice work. Hopefully the boxbinder set also made it's way in the framework after the authors approval so we can enjoy some shiny new things :) 

Link to comment
12 hours ago, naaitsab said:

Nice work. Hopefully the boxbinder set also made it's way in the framework after the authors approval so we can enjoy some shiny new things :) 

 

I am working on this as we speak! :)

Link to comment

I've been having a bit of trouble with the DD animation filter, but I think I've found a solution that could be more broadly helpful.

 

The problem I'm having is that some mods' animation requests depend heavily on the "include" and "suppress" tags initially supplied, and if the filter has to overrule the animation, it loses that information. For example, let's say that a mod requests a rape animation on a female PC with two male NPCs. Let's say the mod requests animations using the following tags:

 

Include: Oral, Anal, Vaginal
Suppress: Lesbian, Gay, FFM, MFF, FFF, MMM
IncludeAll: False (at least one include tag required)

 

Now, let's say the female PC has an anal plug. Anecdotally, a lot of MMF threeway animations include the anal tag, but some do not. If the initially selected animation does include the anal tag, then DD wisely discards it, due to the anal plug. But then, the next requested animation by DD is as follows (with aggressive not required):

 

Include: (empty)
Suppress: Anal, Yoke, Armbinder
IncludeAll: True (all include tags required)

 

Frequently, for me, this results in unfortunate animations, such as MFF animations where one of the male rapists is now in a female role, being raped by one of the other attackers. Not a great result, though it doesn't happen every time, of course.

 

The solution I propose is to recover the tag information supplied by the initial animation request, and adjust it according to the restrictions DD correctly imposes. This would be easy if SexLab saved that information as a property to the thread controller, but unfortunately, it only saves the filtered list of animations, and presumably DD doesn't want to modify SexLab scripts. Fortunately, though, the tag information is still recoverable: it is saved in a text cache by sslAnimationSlots.

 

I implemented the code to recover and adjust the tags by modifying only the SelectValidAnimations() function in zadBQ00.psc (starting at line 1001), as follows:

Spoiler

; filter version of the animation selector
sslBaseAnimation[] function SelectValidAnimations(sslThreadController Controller, int count, sslBaseAnimation previousAnim, bool usingArmbinder, bool usingYoke,  bool HasBoundActors,  bool forceaggressive, bool permitOral, bool permitVaginal, bool permitAnal, bool permitBoobs)
	bool aggr = false				
	string includetag = ""
	sslBaseAnimation[] Sanims
	If previousAnim != none && previousAnim.HasTag("foreplay") 		
		; ok, this is causing trouble, as we don't really have a lot of bound foreplay animations. We...just don't pass on the tag for now, which will result in regular anims.
		; includetag = "foreplay"
		; libs.Log("Using only foreplay animations.")					
	Elseif forceaggressive || (previousAnim != none && previousAnim.HasTag("Aggressive") && libs.config.PreserveAggro)
		libs.Log("Using only aggressive animations.")					
		aggr = true		
	Endif  
	Bool IsCreatureAnim = previousAnim.HasTag("Creature")
	If IsCreatureAnim && HasBoundActors
		; it's a creature anim and some participants are bound, we can abort here, as there are no bound animations for creatures.
		return None
	Endif
	; Bound Animations need to be processed separately, since they are not registered in SexLab.
	if count > 1 && HasBoundActors
		libs.Log("Actor(s) are bound. Trying to set up bound animation.")
		Sanims = New sslBaseAnimation[1]
		; we have bound anims only for two actors, so we pick an animation only if we have two actors, otherwise we let the filter split the scene later on.
		If count == 2
			Sanims[0] = GetBoundAnim(Controller.Positions[0], Controller.Positions[1], permitOral, permitVaginal, permitAnal, permitBoobs)						
		Endif
		If Sanims[0] == None
			libs.log("Error: SelectValidAnimations could find no valid bound animations.")
			return None
		Else
			return Sanims
		Endif
	Endif
	
	;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;;; begin modified code
	;;;;;;;;;;;;;;;;;;;;;;;;;;;
	; find the animation cache slot associated with the animation that was previously being played	
	float TimeToBeat = 0.0
	int index = -1
	int i = 0
	While i < 20
		; we must check if this cache slot is the slot that was used by our thread controller.
		; we cannot do this with certainty. we will start by comparing animation array lengths.
		If SexLab.AnimSlots.GetCacheSlot(i).Length == Controller.Animations.Length
			; if there are multiple cache slots with the same correct array length, we will use the most recently updated slot.
			string CacheText = SexLab.AnimSlots.CacheInfo(i)
			int TimeStartIndex = StringUtil.Find(CacheText, " -- Timestamp: ") + 15
			int TimeEndIndex = StringUtil.Find(CacheText, " -- Count: ")
			float CacheTime = StringUtil.Substring(CacheText, TimeStartIndex, TimeEndIndex - TimeStartIndex) as float

			If CacheTime > TimeToBeat
				TimeToBeat = CacheTime
				index = i
			EndIf
		EndIf
		
		; Debug.Trace("[Zad Trace]: AnimCache Length - " + SexLab.AnimSlots.GetCacheSlot(i).Length +", Controller Anim Length - " + Controller.Animations.Length + ", CacheText - " + SexLab.AnimSlots.CacheInfo(i) + ", TimeToBeat - " + TimeToBeat + ", index - " + index)
		i += 1
	EndWhile
	
	string suppresstag = ""
	bool RequireAll = True
	If Index >= 0
		; grab the filter used to search for the played animation, and parse the string
		string CorrectCacheText = SexLab.AnimSlots.CacheInfo(index)
		int FilterStartIndex = StringUtil.Find(CorrectCacheText, " -- Name: ") + 10
		int FilterEndIndex = StringUtil.Find(CorrectCacheText, " -- Timestamp: ")
		string FilterText = StringUtil.Substring(CorrectCacheText, FilterStartIndex, FilterEndIndex - FilterStartIndex)
		string[] FilterArray = PapyrusUtil.StringSplit(FilterText, ":")
		
		string OldInclude = FilterArray[1]
		suppresstag = FilterArray[2]
		RequireAll = (FilterArray[3] == "TRUE")

		; adjust the include string to remove DD conflicting tags
		If OldInclude
			string[] OldIncludeArray = PapyrusUtil.StringSplit(OldInclude)
			
			; don't handle aggression here
			OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Aggressive")
			
			If !permitVaginal
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Vaginal")
			EndIf
			If !permitAnal
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Anal")
			EndIf
			If !permitBoobs
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Boobjob")
			EndIf
			If !permitOral
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Oral")
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Blowjob")
			EndIf
			If usingYoke
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Pillory")
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Yoke")
			EndIf
			If usingArmbinder
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Pillory")
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Armbinder")
			EndIf
			
			string NewInclude = PapyrusUtil.StringJoin(OldIncludeArray)
			If NewInclude
				If includetag
					includetag = includetag + "," + NewInclude
				Else
					includetag = NewInclude
				EndIf
			EndIf
		EndIf
	EndIf
	;;;;;;;;;;;;;;;;;;
	;;; end modified code; except getSuppressString and SexLab.GetAnimationsByTags last parameters
	;;;;;;;;;;;;;;;;;;
	
	string tagString = getTagString(aggr, includetag)
	string suppressString = getSuppressString(aggr, usingArmbinder, usingYoke, permitOral, permitVaginal, permitAnal, permitBoobs, suppresstag)	
	; ok, we need to process private animations and masturbation as a special case as the tag system would otherwise be unable to call DDI or ZAP armbinder and yoke animations and also not exclude opposite gender masturbation/
	if count == 1 		
		libs.Log("Selecting masturbation animation.")
		If usingArmbinder ; she is wearing an armbinder
			Sanims = New sslBaseAnimation[1]
			Sanims[0] = SexLab.GetAnimationObject("DDArmbinderSolo")
			return Sanims
		Endif
		If usingYoke ; she is wearing a yoke
			Sanims = New sslBaseAnimation[1]
			Sanims[0] = SexLab.GetAnimationObject("DDYokeSolo")
			return Sanims
		Endif
		If !permitVaginal ;she is belted
			Sanims = New sslBaseAnimation[1]
			Sanims[0] = SexLab.GetAnimationObject("DDBeltedSolo")
			return Sanims
		Endif
		; if she is not wearing chastity, we need to filter the wrong gender
		tagString = "Solo," + tagString
		If Controller.Positions[0].GetLeveledActorBase().GetSex() == 1		
			suppressString = "M," + suppressString
		Elseif Controller.Positions[0].GetLeveledActorBase().GetSex() == 0
			suppressString = "F," + suppressString
		EndIf
	EndIf		
	If IsCreatureAnim
		; determine what creature it was and append its tag to the selection if it was a humanoid one, otherwise return an empty array.
		string crString = GetCreatureType(previousAnim)
		if crString != ""
			tagString += "," + crString
		Else
			libs.log("Creature animation with non-humanoid creatures in use. Cannot replace. Filtering aborted.")
			return None
		Endif
	Endif
	Sanims = SexLab.GetAnimationsByTags(count, tagString, suppressString, RequireAll)
	libs.log("Selecting SexLab animations with number of actors: " + count)
	libs.log("Selecting SexLab animations with tag string: " + tagString)
	libs.log("Selecting SexLab animations with suppress string: " + suppressString)			
	return Sanims
endfunction

 

 

Maybe there's an easier way to do this, but I couldn't find it. And the code above works fine and doesn't seem to have any performance problems. Using this, the tags requested by DD in the example above would be:

 

Include: Oral, Vaginal
Suppress: Lesbian, Gay, FFM, MFF, FFF, MMM, Anal, Yoke, Armbinder
IncludeAll: False

 

This results in a much better choice of new animation, at least in my testing (DD 5.1, Skyrim SE). There could of course be a good reason not to recover the tags, such as animation scarcity. I haven't found that to be a problem, and I don't have a huge number of animations installed, but I haven't tested this too extensively so far. But maybe there's another reason? I'm not sure.

 

Thanks for all your work on Devious Devices! Hopefully this is helpful. If not, or if posting code suggestions here is against the rules, let me know and I'll remove it ASAP.

Link to comment

I suggest making key crafting harder, even though you might have plan to redesign that whole thing later. It is however really quick to alter to make it somewhat balanced for the now. Currently all of them cost 1 iron ingot each.

 

This is a quick overrider ESP to change crafting recipes to:

Restraints key: 2 iron ingots, 2 steel ingots

Chastity key: 3 gold ingots, 3 moonstone ingots

Piercing removal kit: 2 iron ingots, 2 quicksilver ingots

 

This is nothing more than initial untested version which i feel will be better. If you want to change them yourself, feel free, or suggest better recipes for everyone. It should help having them highlighted for editing in TES5Edit:

DD-HarderKeys.zip

 

I noticed there are 3 different difficulties of recipes for keys but i don't know how the harder ones get used, if at all currently.

 

Edit: I don't think those are quite good yet, last i checked blacksmith today there was 0 moonstone, gold or quicksilver... I made this too difficult instead.

Edited by Zaflis
Link to comment
8 hours ago, anyway ayway said:

Frequently, for me, this results in unfortunate animations, such as MFF animations where one of the male rapists is now in a female role, being raped by one of the other attackers.

 

I have the same problem. I hope that @Kimy considers your solution to this problem.

Link to comment
10 hours ago, anyway ayway said:

I've been having a bit of trouble with the DD animation filter, but I think I've found a solution that could be more broadly helpful.

 

The problem I'm having is that some mods' animation requests depend heavily on the "include" and "suppress" tags initially supplied, and if the filter has to overrule the animation, it loses that information. For example, let's say that a mod requests a rape animation on a female PC with two male NPCs. Let's say the mod requests animations using the following tags:

 

Include: Oral, Anal, Vaginal
Suppress: Lesbian, Gay, FFM, MFF, FFF, MMM
IncludeAll: False (at least one include tag required)

 

Now, let's say the female PC has an anal plug. Anecdotally, a lot of MMF threeway animations include the anal tag, but some do not. If the initially selected animation does include the anal tag, then DD wisely discards it, due to the anal plug. But then, the next requested animation by DD is as follows (with aggressive not required):

 

Include: (empty)
Suppress: Anal, Yoke, Armbinder
IncludeAll: True (all include tags required)

 

Frequently, for me, this results in unfortunate animations, such as MFF animations where one of the male rapists is now in a female role, being raped by one of the other attackers. Not a great result, though it doesn't happen every time, of course.

 

The solution I propose is to recover the tag information supplied by the initial animation request, and adjust it according to the restrictions DD correctly imposes. This would be easy if SexLab saved that information as a property to the thread controller, but unfortunately, it only saves the filtered list of animations, and presumably DD doesn't want to modify SexLab scripts. Fortunately, though, the tag information is still recoverable: it is saved in a text cache by sslAnimationSlots.

 

I implemented the code to recover and adjust the tags by modifying only the SelectValidAnimations() function in zadBQ00.psc (starting at line 1001), as follows:

  Hide contents


; filter version of the animation selector
sslBaseAnimation[] function SelectValidAnimations(sslThreadController Controller, int count, sslBaseAnimation previousAnim, bool usingArmbinder, bool usingYoke,  bool HasBoundActors,  bool forceaggressive, bool permitOral, bool permitVaginal, bool permitAnal, bool permitBoobs)
	bool aggr = false				
	string includetag = ""
	sslBaseAnimation[] Sanims
	If previousAnim != none && previousAnim.HasTag("foreplay") 		
		; ok, this is causing trouble, as we don't really have a lot of bound foreplay animations. We...just don't pass on the tag for now, which will result in regular anims.
		; includetag = "foreplay"
		; libs.Log("Using only foreplay animations.")					
	Elseif forceaggressive || (previousAnim != none && previousAnim.HasTag("Aggressive") && libs.config.PreserveAggro)
		libs.Log("Using only aggressive animations.")					
		aggr = true		
	Endif  
	Bool IsCreatureAnim = previousAnim.HasTag("Creature")
	If IsCreatureAnim && HasBoundActors
		; it's a creature anim and some participants are bound, we can abort here, as there are no bound animations for creatures.
		return None
	Endif
	; Bound Animations need to be processed separately, since they are not registered in SexLab.
	if count > 1 && HasBoundActors
		libs.Log("Actor(s) are bound. Trying to set up bound animation.")
		Sanims = New sslBaseAnimation[1]
		; we have bound anims only for two actors, so we pick an animation only if we have two actors, otherwise we let the filter split the scene later on.
		If count == 2
			Sanims[0] = GetBoundAnim(Controller.Positions[0], Controller.Positions[1], permitOral, permitVaginal, permitAnal, permitBoobs)						
		Endif
		If Sanims[0] == None
			libs.log("Error: SelectValidAnimations could find no valid bound animations.")
			return None
		Else
			return Sanims
		Endif
	Endif
	
	;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;;; begin modified code
	;;;;;;;;;;;;;;;;;;;;;;;;;;;
	; find the animation cache slot associated with the animation that was previously being played	
	float TimeToBeat = 0.0
	int index = -1
	int i = 0
	While i < 20
		; we must check if this cache slot is the slot that was used by our thread controller.
		; we cannot do this with certainty. we will start by comparing animation array lengths.
		If SexLab.AnimSlots.GetCacheSlot(i).Length == Controller.Animations.Length
			; if there are multiple cache slots with the same correct array length, we will use the most recently updated slot.
			string CacheText = SexLab.AnimSlots.CacheInfo(i)
			int TimeStartIndex = StringUtil.Find(CacheText, " -- Timestamp: ") + 15
			int TimeEndIndex = StringUtil.Find(CacheText, " -- Count: ")
			float CacheTime = StringUtil.Substring(CacheText, TimeStartIndex, TimeEndIndex - TimeStartIndex) as float

			If CacheTime > TimeToBeat
				TimeToBeat = CacheTime
				index = i
			EndIf
		EndIf
		
		; Debug.Trace("[Zad Trace]: AnimCache Length - " + SexLab.AnimSlots.GetCacheSlot(i).Length +", Controller Anim Length - " + Controller.Animations.Length + ", CacheText - " + SexLab.AnimSlots.CacheInfo(i) + ", TimeToBeat - " + TimeToBeat + ", index - " + index)
		i += 1
	EndWhile
	
	string suppresstag = ""
	bool RequireAll = True
	If Index >= 0
		; grab the filter used to search for the played animation, and parse the string
		string CorrectCacheText = SexLab.AnimSlots.CacheInfo(index)
		int FilterStartIndex = StringUtil.Find(CorrectCacheText, " -- Name: ") + 10
		int FilterEndIndex = StringUtil.Find(CorrectCacheText, " -- Timestamp: ")
		string FilterText = StringUtil.Substring(CorrectCacheText, FilterStartIndex, FilterEndIndex - FilterStartIndex)
		string[] FilterArray = PapyrusUtil.StringSplit(FilterText, ":")
		
		string OldInclude = FilterArray[1]
		suppresstag = FilterArray[2]
		RequireAll = (FilterArray[3] == "TRUE")

		; adjust the include string to remove DD conflicting tags
		If OldInclude
			string[] OldIncludeArray = PapyrusUtil.StringSplit(OldInclude)
			
			; don't handle aggression here
			OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Aggressive")
			
			If !permitVaginal
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Vaginal")
			EndIf
			If !permitAnal
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Anal")
			EndIf
			If !permitBoobs
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Boobjob")
			EndIf
			If !permitOral
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Oral")
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Blowjob")
			EndIf
			If usingYoke
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Pillory")
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Yoke")
			EndIf
			If usingArmbinder
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Pillory")
				OldIncludeArray = PapyrusUtil.RemoveString(OldIncludeArray, "Armbinder")
			EndIf
			
			string NewInclude = PapyrusUtil.StringJoin(OldIncludeArray)
			If NewInclude
				If includetag
					includetag = includetag + "," + NewInclude
				Else
					includetag = NewInclude
				EndIf
			EndIf
		EndIf
	EndIf
	;;;;;;;;;;;;;;;;;;
	;;; end modified code; except getSuppressString and SexLab.GetAnimationsByTags last parameters
	;;;;;;;;;;;;;;;;;;
	
	string tagString = getTagString(aggr, includetag)
	string suppressString = getSuppressString(aggr, usingArmbinder, usingYoke, permitOral, permitVaginal, permitAnal, permitBoobs, suppresstag)	
	; ok, we need to process private animations and masturbation as a special case as the tag system would otherwise be unable to call DDI or ZAP armbinder and yoke animations and also not exclude opposite gender masturbation/
	if count == 1 		
		libs.Log("Selecting masturbation animation.")
		If usingArmbinder ; she is wearing an armbinder
			Sanims = New sslBaseAnimation[1]
			Sanims[0] = SexLab.GetAnimationObject("DDArmbinderSolo")
			return Sanims
		Endif
		If usingYoke ; she is wearing a yoke
			Sanims = New sslBaseAnimation[1]
			Sanims[0] = SexLab.GetAnimationObject("DDYokeSolo")
			return Sanims
		Endif
		If !permitVaginal ;she is belted
			Sanims = New sslBaseAnimation[1]
			Sanims[0] = SexLab.GetAnimationObject("DDBeltedSolo")
			return Sanims
		Endif
		; if she is not wearing chastity, we need to filter the wrong gender
		tagString = "Solo," + tagString
		If Controller.Positions[0].GetLeveledActorBase().GetSex() == 1		
			suppressString = "M," + suppressString
		Elseif Controller.Positions[0].GetLeveledActorBase().GetSex() == 0
			suppressString = "F," + suppressString
		EndIf
	EndIf		
	If IsCreatureAnim
		; determine what creature it was and append its tag to the selection if it was a humanoid one, otherwise return an empty array.
		string crString = GetCreatureType(previousAnim)
		if crString != ""
			tagString += "," + crString
		Else
			libs.log("Creature animation with non-humanoid creatures in use. Cannot replace. Filtering aborted.")
			return None
		Endif
	Endif
	Sanims = SexLab.GetAnimationsByTags(count, tagString, suppressString, RequireAll)
	libs.log("Selecting SexLab animations with number of actors: " + count)
	libs.log("Selecting SexLab animations with tag string: " + tagString)
	libs.log("Selecting SexLab animations with suppress string: " + suppressString)			
	return Sanims
endfunction

 

 

Maybe there's an easier way to do this, but I couldn't find it. And the code above works fine and doesn't seem to have any performance problems. Using this, the tags requested by DD in the example above would be:

 

Include: Oral, Vaginal
Suppress: Lesbian, Gay, FFM, MFF, FFF, MMM, Anal, Yoke, Armbinder
IncludeAll: False

 

This results in a much better choice of new animation, at least in my testing (DD 5.1, Skyrim SE). There could of course be a good reason not to recover the tags, such as animation scarcity. I haven't found that to be a problem, and I don't have a huge number of animations installed, but I haven't tested this too extensively so far. But maybe there's another reason? I'm not sure.

 

Thanks for all your work on Devious Devices! Hopefully this is helpful. If not, or if posting code suggestions here is against the rules, let me know and I'll remove it ASAP.

 

Looking good! I am going to merge this in the upcoming version, so we can test it more broadly! :)

Link to comment
10 hours ago, anyway ayway said:

Thanks for all your work on Devious Devices! Hopefully this is helpful. If not, or if posting code suggestions here is against the rules, let me know and I'll remove it ASAP.

I'm sure all modders on here like to receive decent bugposts with fixes and even code pieces if they fix a bug or improve on a feature. So don't be shy to post things like that, that's the goal of this thread in essence :) 

As long as you respect the hard limits of a mod, like the no-children ethos in Cursed Loot it should be fine.

Link to comment
11 hours ago, Zaflis said:

I suggest making key crafting harder, even though you might have plan to redesign that whole thing later. It is however really quick to alter to make it somewhat balanced for the now. Currently all of them cost 1 iron ingot each.

 

This is a quick overrider ESP to change crafting recipes to:

Restraints key: 2 iron ingots, 2 steel ingots

Chastity key: 3 gold ingots, 3 moonstone ingots

Piercing removal kit: 2 iron ingots, 2 quicksilver ingots

 

This is nothing more than initial untested version which i feel will be better. If you want to change them yourself, feel free, or suggest better recipes for everyone. It should help having them highlighted for editing in TES5Edit:

DD-HarderKeys.zip 477 B · 0 downloads

 

I noticed there are 3 different difficulties of recipes for keys but i don't know how the harder ones get used, if at all currently.

 

@Kimy

 

If you do anything like this, and I can understand that for some people it may well be quite appealing, please, please, please, make is some sort of slider/optional thing

 

Some of us use DD/DCL when playing the main game, to add a bit of difficulty and risk management, not just to be prancing about in a bunch of restrictive pretty clothes and hardware

 

This would make main game playing either just about impossible, or merely a continuous grind to collect the next set of key 'ingredients'.   Just think about the impact when you're playing with a party of 2, 3, 4 or more followers down some of the deeper dungeons.  It can be challenging enough as is, without adding anything that would be almost unplayable

Link to comment
34 minutes ago, donkeywho said:

Some of us use DD/DCL when playing the main game, to add a bit of difficulty and risk management, not just to be prancing about in a bunch of restrictive pretty clothes and hardware

 

This would make main game playing either just about impossible, or merely a continuous grind to collect the next set of key 'ingredients'.   Just think about the impact when you're playing with a party of 2, 3, 4 or more followers down some of the deeper dungeons.  It can be challenging enough as is, without adding anything that would be almost unplayable

I don't think your solution is key crafting for most of the time, afterall you don't have forges in dungeons usually. Turn down DD difficulty settings so you can struggle/cut/lockpick out of them without trying it for dozens of times per device. I like the way you can tweak key drop chances in DCL's MCM, i don't have those chances at defaults but much higher.

Link to comment
21 minutes ago, Zaflis said:

I don't think your solution is key crafting for most of the time, afterall you don't have forges in dungeons usually. Turn down DD difficulty settings so you can struggle/cut/lockpick out of them without trying it for dozens of times per device. I like the way you can tweak key drop chances in DCL's MCM, i don't have those chances at defaults but much higher.

 

I know that I don't have forges in dungeons. 

 

I plan my gameplay.  The PC and NPC has a standard set equipped from whatever has been forged or collected, before setting off on a quest, 5 Restraint Keys, 2 Piercing Removal Tools and 1 Chastity Key.  You then pick up whatever else you can find on your travels, without making the key drop stupidly easy

 

In gameplay, I use Devious Device Helpers to allow the Followers to 'help' the PC, but it requires judicious management to ensure that what your party has lasts the distance, given how early you might get restraints applied on container access etc, or be impacted by combat application and key stealing (I use Defeat Banev3 incl the Devious Captures mechanisms for that), and then assessing what risk you have to take by leaving player or NPCs with some worn devices to stop running out of keys/using up your last ones

 

And if you get it wrong, if like me you don't cheat, you sometimes have to retreat out of a dungeon, see a blacksmith etc, clean things up, restock and start again

 

Sure, settings changes are good, depending on how hard or easy you want to play, and I do make marginal changes to the settings.

 

But making crafting as difficult as be worthless/unplayable is daft, as is then fixing that by just fiddling all the sliders to decrease adverse event impacts, or increase key drops to ridiculous levels, so as to make it all too easy.  And, anyway, too easy is just for wimps ...

 

?

Edited by donkeywho
Link to comment
10 hours ago, donkeywho said:

But making crafting as difficult as be worthless/unplayable is daft

Right, the intent is just to make the crafting slightly harder, instead of "stupidly trivial". With just about 10 gold you can buy an ingot from blacksmith next to you to make a key and they usually have tens of ingots in stock. It's like walking to a "free keys" hand-in. My recipes are nowhere as hard as DD's own internal medium and hard crafting recipes that need even soulgems, but i admit i still made them just slightly too complex. At least steel ingots would be very accessible to you anywhere, and i don't like chastity being easy to remove. That defeats the devices purpose.

 

Oh, i just figured it would also be very nice if heavy bondage had its own key dedicated to them. They're the ones hindering vanilla gameplay, the others not so much.

Edited by Zaflis
Link to comment
3 hours ago, Zaflis said:

Right, the intent is just to make the crafting slightly harder, instead of "stupidly trivial". With just about 10 gold you can buy an ingot from blacksmith next to you to make a key and they usually have tens of ingots in stock. It's like walking to a "free keys" hand-in. My recipes are nowhere as hard as DD's own internal medium and hard crafting recipes that need even soulgems, but i admit i still made them just slightly too complex. At least steel ingots would be very accessible to you anywhere, and i don't like chastity being easy to remove. That defeats the devices purpose.

 

Oh, i just figured it would also be very nice if heavy bondage had its own key dedicated to them. They're the ones hindering vanilla gameplay, the others not so much.

 

I'd be more than happy to settle for some more options that allow people to balance the game to a style they are happy with.  I maybe need to revisit a couple of the other mods I use to see if they affect materials availability in my game , as not all blacksmiths have everything eg Alvor never has any money or stock, and some have only intermittent availability of even common items

 

I certainly don't want to mess up what other people are happy to play.  But I tend to jump in quickly when I see the potential for individuals' preference, however innocuously or inadvertently, messing up mine and very probably that of others

 

And if @Kimy sees fit to add some additional variety and spice to what we have now, fine

 

Link to comment

A slight update to a previous post of mine in regards to removing the encumbered effect from hobble dresses. As before I made some changes to the script and removed the carry weight penalty from the hobble dress effect. This allows sprinting in extreme hobble dresses again and also allows for fast travel.

 

This time around I added a small speed increase while sprinting as being able to sprint/bunny-hop was a miniscule change in speed. The additional speed increase isn't terribly fast though, it's still a restrictive dress after all. At least you can sprint/bunny-hop in bursts now. The reason for bursts is the stamina drain penalty, hopping around in a tight dress would be exhausting I imagine. 

 

I'm not sure if the "Hobble Skirt De-Buff Strength" MCM setting can be used anymore. Removing the carry weight de-buff threw all the speed calculations out of whack. Moving the slider excessively will now make massive changes to speed. With the numbers I'm using in the script the default speed is now slightly faster than the original default speed with the current carry-weight-debuff method. It's also not as fast as the current lowest setting of 25. It's a nice in-between and still looks okay as far as the animation speed goes.

 

Since sprinting and fast travel would be allowed again and with these changes while wearing extreme hobble dresses, perhaps the MCM setting is no longer needed.

 

I did have to create a new Object Effect specifically for Pet Suits. They use the same effect as hobble dresses and with these changes you could sprint in a pet suit, imagine how silly that looked. The new effect for Pet Suits keeps the carry weight penalty so no sprinting and no fast travel.

 

Bunny-Hop Test.7z

Link to comment
9 hours ago, UnEvenSteven said:

A slight update to a previous post of mine in regards to removing the encumbered effect from hobble dresses. As before I made some changes to the script and removed the carry weight penalty from the hobble dress effect. This allows sprinting in extreme hobble dresses again and also allows for fast travel.

 

This time around I added a small speed increase while sprinting as being able to sprint/bunny-hop was a miniscule change in speed. The additional speed increase isn't terribly fast though, it's still a restrictive dress after all. At least you can sprint/bunny-hop in bursts now. The reason for bursts is the stamina drain penalty, hopping around in a tight dress would be exhausting I imagine. 

 

I'm not sure if the "Hobble Skirt De-Buff Strength" MCM setting can be used anymore. Removing the carry weight de-buff threw all the speed calculations out of whack. Moving the slider excessively will now make massive changes to speed. With the numbers I'm using in the script the default speed is now slightly faster than the original default speed with the current carry-weight-debuff method. It's also not as fast as the current lowest setting of 25. It's a nice in-between and still looks okay as far as the animation speed goes.

 

Since sprinting and fast travel would be allowed again and with these changes while wearing extreme hobble dresses, perhaps the MCM setting is no longer needed.

 

I did have to create a new Object Effect specifically for Pet Suits. They use the same effect as hobble dresses and with these changes you could sprint in a pet suit, imagine how silly that looked. The new effect for Pet Suits keeps the carry weight penalty so no sprinting and no fast travel.

 

Bunny-Hop Test.7z 5.11 kB · 5 downloads

Would it be possible to do the normal 'slide walk' as the regular walking animation and use the bunnyhop as "sprint"? That would make it most realistic I think.

Link to comment
5 hours ago, naaitsab said:

Would it be possible to do the normal 'slide walk' as the regular walking animation and use the bunnyhop as "sprint"? That would make it most realistic I think.

 

Well that's not good. It appears "02 Feuertin Alt" is the only option that's going to look good. That option has the "slide-walk/shuffle" animation for regular walking and the bunny-hop for sprinting.

 

By default all animations have the bunny-hop for walking and the other options appear to do so as well. I've been using the "Feuertin Alt" option ever since it was available and I'll admit I didn't check the other options for testing. I didn't think the other options would've had all bunny-hop animations, only the one labeled as such.

Link to comment
3 hours ago, UnEvenSteven said:

 

Well that's not good. It appears "02 Feuertin Alt" is the only option that's going to look good. That option has the "slide-walk/shuffle" animation for regular walking and the bunny-hop for sprinting.

 

By default all animations have the bunny-hop for walking and the other options appear to do so as well. I've been using the "Feuertin Alt" option ever since it was available and I'll admit I didn't check the other options for testing. I didn't think the other options would've had all bunny-hop animations, only the one labeled as such.

 

I thought the bunny hop was an alternate set, not the default. oO

Link to comment
1 hour ago, Kimy said:

 

I thought the bunny hop was an alternate set, not the default. oO

 

Appears to be the case.

 

I cleaned out the folder containing the animations and added them back from the "00 Core" folder, all the movement animations were bunny-hops.

 

"Feuertin Alt" appear to be the only one with the walk-shuffle animations for non-sprinting movement while wearing a hobble dress. It doesn't overwrite the bunny-hop sprint animation from the Core folder.

Link to comment
27 minutes ago, UnEvenSteven said:

 

Appears to be the case.

 

I cleaned out the folder containing the animations and added them back from the "00 Core" folder, all the movement animations were bunny-hops.

 

"Feuertin Alt" appear to be the only one with the walk-shuffle animations for non-sprinting movement while wearing a hobble dress. It doesn't overwrite the bunny-hop sprint animation from the Core folder.

 

I will need to fix this, then. The bunny hop is NOT meant to be the default hobbled walk.

Link to comment

So controversial opinion time but devious shouldn't be META devious. as in lock menu when tied should default to off if its not tutorialised. 

 

there's a steep enough learning curve with modding as it is; so for newer players non-tutorialised unexpected or unintuitive options must be absolutely atrocious. Although they fit the flavour of the mod from a software development standpoint they suck. same goes for systems that fail locked, if I break something with a mod conflict etc the device/furniture/quest should fail "safe" to give the player a chance to rectify things themselves.

 

Anyway just thought I'd throw it out there, to see if I'm on my own here about ethos... fully expecting "you know helpless is the point of the mod right?" but I just don't feel like tricking players into being helpless is healthy or fun. Honestly I'm almost tempted to say all features should default to off until player enabled, that way you know at least everyone's read the tooltip.

Link to comment
9 hours ago, UnEvenSteven said:

A little nervous to release this but I've done some modifications to the various catsuit devices. Despite the devices able to be locked there were no visible locks on any of them, I aimed to change that. I also changed some shader and texture settings in the .nifs so the catsuit items will have a similar look and shine to other ebonite devices. Finally I also altered the red and white textures to closely match the coloring of existing red and white ebonite devices.

 

Added a lock to the zipper tab on the catsuit (may be removed if people don't like it):

  Reveal hidden contents

ScreenShot01.png.a80efb1d5e3243932f80693c7a39d82f.png

 

New gloves with cuffs. These are cut-down versions of long gloves since the existing pair of gloves were terrible. And no there are not longer gaps in the forearm when wearing them without catsuit:

  Reveal hidden contents

ScreenShot02.png.052aa018a098a00474f7102f4839b8bc.png

 

Ballet boots with cuffs, these don't conflict with ankle chains or other leg cuffs:

  Reveal hidden contents

ScreenShot03.png.9d18fdd2739419d3ba8c36ab25c3853a.png

 

Long Gloves with two cuffs, for extra security:

  Reveal hidden contents

ScreenShot04.png.019d24c3c976cb6e568cfd8bcd6bf82c.png

 

"Socks" with cuffs, might seem odd but these are lockable devices:

  Hide contents

ScreenShot05.png.0d17a98364a43b55fa93be20f3a59dc7.png

 

Updated the collar to have a padlock:

  Hide contents

ScreenShot06.png.1cdccdaac8bb85dfda4d1825cfadc85e.png

 

 

As I've stated and you may have noticed, the red and white textures are no longer nuclear-bright. They match far better with existing red and white ebonite devices:

  Hide contents

ScreenShot07.png.62fd09117b0a0cb1633b0fbdd721840c.pngScreenShot08.png.0f003b526b125636947de078bde65211.png

 

The file includes CBBE and UUNP BodySlide options and updates the first-person meshes to use the various new shader and texture settings. The included .esp contains the necessary changes to TextureSets and ArmorAddon entries that are used for the red and white versions so everything appears correctly. Yes all the cuffs just use the collar mesh, I did this for consistency and it wouldn't require re-textures.

 

Earlier versions I worked on were using the cuffs from restrictive gloves. They looked great for the black, red and white versions but would have required multiple re-textures for all the other colors catsuit devices have. I'm no texture artist and even re-coloring is difficult and I didn't want to rely on anyone else to complete this overhaul.

 

There's also something else I did, I have added some cuffs to the pony boots. As with the catsuit devices these are lockable but didn't have any visible locks:

  Hide contents

ScreenShot09.png.b52fab81328f934f0e97b9254d03dc9c.pngScreenShot10.png.eb4df7e43bb043e69480d2b4e29ec303.pngScreenShot11.png.1d46f4caee30f8b888fd74dc41b4cd09.png

 

These changes cover the leather and ebonite versions, CBBE and UUNP sliders included. The .esp has the required changes to the ArmorAddon entries so the red and white cuffs appear correctly.

 

There is one issue, however. You'll notice some bad clipping during certain poses and by extension, certain sex scenes.

  Hide contents

ScreenShot12.png.35e25aa5bf6daa88f8b971d08c20691a.pngScreenShot13.png.3be32a426f03452b111a668de5457b39.png

 

If everyone can live with that then maybe Kimy would be willing to add these. 

 

Lastly I've created a working wooden yoke, it's the one from Contraptions but wasn't usable as a stand-alone device. I've done the necessary work to make it usable as a new yoke device. Includes a ground/inventory object as well.

 

As I've said I'm kind of nervous about this as there are quite a few changes so I hope everything works well.

 

Here's the files:

Catsuit Overhaul.7z 29.19 MB · 1 download   Pony Boots Overhaul.7z 2.12 MB · 0 downloads   Wooden Yoke.7z 96.1 kB · 1 download

These are nice! If you dont mind me asking. But do you have that Boxbinder straitjacket?, I'd like to test that out 

Link to comment
On 6/17/2021 at 5:06 PM, UnEvenSteven said:

A little nervous to release this but I've done some modifications to the various catsuit devices. Despite the devices able to be locked there were no visible locks on any of them, I aimed to change that. I also changed some shader and texture settings in the .nifs so the catsuit items will have a similar look and shine to other ebonite devices. Finally I also altered the red and white textures to closely match the coloring of existing red and white ebonite devices.

 

Don't be nervous ;) It's a beta thread and if it doesn't crash the game everything can be tried out. 

 

I think it looks awesome, bit 50/50 on the default gloves and socks with the buckles. It's "realistic" but it does away with the clean esthetics. Perhaps both can be added and these could be added as a 'high security' variant.

Link to comment
On 6/17/2021 at 5:06 PM, UnEvenSteven said:

A little nervous to release this but I've done some modifications to the various catsuit devices. Despite the devices able to be locked there were no visible locks on any of them, I aimed to change that. I also changed some shader and texture settings in the .nifs so the catsuit items will have a similar look and shine to other ebonite devices. Finally I also altered the red and white textures to closely match the coloring of existing red and white ebonite devices.

 

Added a lock to the zipper tab on the catsuit (may be removed if people don't like it):

  Hide contents

ScreenShot01.png.a80efb1d5e3243932f80693c7a39d82f.png

 

New gloves with cuffs. These are cut-down versions of long gloves since the existing pair of gloves were terrible. And no there are not longer gaps in the forearm when wearing them without catsuit:

  Hide contents

ScreenShot02.png.052aa018a098a00474f7102f4839b8bc.png

 

Ballet boots with cuffs, these don't conflict with ankle chains or other leg cuffs:

  Hide contents

ScreenShot03.png.9d18fdd2739419d3ba8c36ab25c3853a.png

 

Long Gloves with two cuffs, for extra security:

  Hide contents

ScreenShot04.png.019d24c3c976cb6e568cfd8bcd6bf82c.png

 

"Socks" with cuffs, might seem odd but these are lockable devices:

  Hide contents

ScreenShot05.png.0d17a98364a43b55fa93be20f3a59dc7.png

 

Updated the collar to have a padlock:

  Hide contents

ScreenShot06.png.1cdccdaac8bb85dfda4d1825cfadc85e.png

 

 

As I've stated and you may have noticed, the red and white textures are no longer nuclear-bright. They match far better with existing red and white ebonite devices:

  Hide contents

ScreenShot07.png.62fd09117b0a0cb1633b0fbdd721840c.pngScreenShot08.png.0f003b526b125636947de078bde65211.png

 

The file includes CBBE and UUNP BodySlide options and updates the first-person meshes to use the various new shader and texture settings. The included .esp contains the necessary changes to TextureSets and ArmorAddon entries that are used for the red and white versions so everything appears correctly. Yes all the cuffs just use the collar mesh, I did this for consistency and it wouldn't require re-textures.

 

Earlier versions I worked on were using the cuffs from restrictive gloves. They looked great for the black, red and white versions but would have required multiple re-textures for all the other colors catsuit devices have. I'm no texture artist and even re-coloring is difficult and I didn't want to rely on anyone else to complete this overhaul.

 

There's also something else I did, I have added some cuffs to the pony boots. As with the catsuit devices these are lockable but didn't have any visible locks:

  Hide contents

ScreenShot09.png.b52fab81328f934f0e97b9254d03dc9c.pngScreenShot10.png.eb4df7e43bb043e69480d2b4e29ec303.pngScreenShot11.png.1d46f4caee30f8b888fd74dc41b4cd09.png

 

These changes cover the leather and ebonite versions, CBBE and UUNP sliders included. The .esp has the required changes to the ArmorAddon entries so the red and white cuffs appear correctly.

 

There is one issue, however. You'll notice some bad clipping during certain poses and by extension, certain sex scenes.

  Hide contents

ScreenShot12.png.35e25aa5bf6daa88f8b971d08c20691a.pngScreenShot13.png.3be32a426f03452b111a668de5457b39.png

 

If everyone can live with that then maybe Kimy would be willing to add these. 

 

Lastly I've created a working wooden yoke, it's the one from Contraptions but wasn't usable as a stand-alone device. I've done the necessary work to make it usable as a new yoke device. Includes a ground/inventory object as well.

 

As I've said I'm kind of nervous about this as there are quite a few changes so I hope everything works well.

 

Here's the files:

Catsuit Overhaul.7z 29.19 MB · 12 downloads   Pony Boots Overhaul.7z 2.12 MB · 6 downloads   Wooden Yoke.7z 96.1 kB · 7 downloads

These are wonderful. I could kiss you for the gloves alone. Thank you so much.

Link to comment

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

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