Jump to content

Devious Devices Framework Development/Beta


Kimy

Recommended Posts

Posted (edited)
41 minutes ago, naaitsab said:

If we keep in on a NG DLL platform, it should not break when the exe is updated right?

 

Not quite, SKSE, Address Library and Clib-NG would all need to be updated for that new version and then the plugin would need to be recompiled with the latest Clib. But I don't see this as a huge risk since the same is true of DD's dependencies like SL (which needs SKSE and AL) and we have things like readonly exes and downgrade patchers. The other caveat is needing a C++ dev to maintain the DLL. I think these are acceptable tradeoffs for performance/usability improvements but that's up to Kimy.

 

I'll try making those hooks in the meantime.

Edited by ponzipyramid
Posted
1 hour ago, naaitsab said:

If we keep in on a NG DLL platform, it should not break when the exe is updated right?

It will, but the SKSE will break with it, and that kinda stops the train at the station - DD breaking won't be the only user problem in case that happens, and probably won't be the first thing he notices. ?

 

4 hours ago, naaitsab said:

I tried to get some anim skills in Blender up and running but it's not really my thing

I did one animation for said Elbow Tie when I was doing the conversion, the h2h_locomotion pose, but due to my complete lack of skills in anything, I did it with hkxposer and manually adjusted stuff for a good hour and a half, so this isn't something that I can do with the more complicated ones.

 

We do have an animator out and about in iivanvv, so while I'm not suggesting we tie him to the chair to ask him nicely to make more animations for DD, considering the dire situation with animators, we shouldn't completely dismiss this possibility...? (jk)

 

2 hours ago, johntrine said:

wait... something like that happened???

City Bondage's author claimed his work was plagiarized and is looking into legal stuff since apparently his work wasn't credited or even acknowledged, which seems to break some copyright he has / thinks he has. link

 

However, if you, for example, would google words like Devious and, maybe, followed by Guards, I'm fairly certain it won't take you long to find a certain reddit page, and i can't neither confirm nor deny that this might help you...

Posted

I've a question for zadlibs.

 

Event called StopBoundEffects has this:

Spoiler

Event StopBoundEffects(Actor akTarget)
    Log("OnEffectFinish(): Bound Effects")        
    Debug.SendAnimationEvent(akTarget, "IdleForceDefaultState")    
    if aktarget == PlayerRef
        UnregisterForUpdate()
        UpdateControls()            
    EndIf    
    BoundCombat.EvaluateAA(akTarget)    
EndEvent

 

Maybe the SendAnimationEvent can be hidden behind the if !IsAnimating or !IsInSexLabAnimatingFaction check? If you have an mod (I remember Deviously Vanilla doing that, but I'm sure there might be more) which has an unlock event firing right before the sexlab scene starts, this part sometimes gets run right after the beginning of such scene, and this breaks your characters pose.

 

Plus, I've actually implemented this in the EvaluateAA function, so this makes it a bit redundant having it in zadlibs?

Spoiler

Function EvaluateAA(actor akActor)
    libs.log("EvaluateAA(" + akActor + ")")
    if !libs.IsAnimating(akActor)
        Debug.SendAnimationEvent(akActor, "IdleForceDefaultState")
    EndIf
    
    libs.UpdateControls()
    
    If !HasCompatibleDevice(akActor)
        libs.log("EvaluateAA: Reverting to unbound AA")        
        ClearAA(akActor)
        RemoveBCPerks(akActor)
    Else
        ApplyBCPerks(akActor)    
    endif
EndFunction

 

Thoughts?

Posted
6 hours ago, naaitsab said:

If anything, I would support the author that is the victim of this ridicule (Devious Guards), to get that mod back online instead.

If i recall correctly, Devious Guards was that mod with the guards talking about the "Maiden service" something?

 

I can help - I've been slowly trying to modernize Deviously Vanilla to use the new speedier lock/unlock functions, and replaced some of the custom devices with generic ones with some reasonably successful results, so I have some limited experience on that front. I'll take a look at DG - think I still have it laying around somewhere - to see how it performs with DD5...

Posted (edited)
2 hours ago, krzp said:

I've a question for zadlibs.

 

Event called StopBoundEffects has this:

  Reveal hidden contents

Event StopBoundEffects(Actor akTarget)
    Log("OnEffectFinish(): Bound Effects")        
    Debug.SendAnimationEvent(akTarget, "IdleForceDefaultState")    
    if aktarget == PlayerRef
        UnregisterForUpdate()
        UpdateControls()            
    EndIf    
    BoundCombat.EvaluateAA(akTarget)    
EndEvent

 

Maybe the SendAnimationEvent can be hidden behind the if !IsAnimating or !IsInSexLabAnimatingFaction check? If you have an mod (I remember Deviously Vanilla doing that, but I'm sure there might be more) which has an unlock event firing right before the sexlab scene starts, this part sometimes gets run right after the beginning of such scene, and this breaks your characters pose.

 

Plus, I've actually implemented this in the EvaluateAA function, so this makes it a bit redundant having it in zadlibs?

  Reveal hidden contents

Function EvaluateAA(actor akActor)
    libs.log("EvaluateAA(" + akActor + ")")
    if !libs.IsAnimating(akActor)
        Debug.SendAnimationEvent(akActor, "IdleForceDefaultState")
    EndIf
    
    libs.UpdateControls()
    
    If !HasCompatibleDevice(akActor)
        libs.log("EvaluateAA: Reverting to unbound AA")        
        ClearAA(akActor)
        RemoveBCPerks(akActor)
    Else
        ApplyBCPerks(akActor)    
    endif
EndFunction

 

Thoughts?

There where a few instances of a check being a bit to over all-encompassing if triggered manually (no events). Mainly it's check on the actor being in a scene. One of the proposed fixes was to add a override in the form of a variable that can be passed when calling the function. I would suggest having these 'manual overrides' in place as much as possible. Mainly as most if not all DD story mods have scenes involving the player and those break if the mod author calls specific functions whilst the PC is in said scene.

 

16 minutes ago, krzp said:

If i recall correctly, Devious Guards was that mod with the guards talking about the "Maiden service" something?

 

I can help - I've been slowly trying to modernize Deviously Vanilla to use the new speedier lock/unlock functions, and replaced some of the custom devices with generic ones with some reasonably successful results, so I have some limited experience on that front. I'll take a look at DG - think I still have it laying around somewhere - to see how it performs with DD5...

That could also be from Cursed Loot, think it's a maiden belt or something? If you want to update and reupload Devious Guards you should ask PB about it. On the one hand it would be a clear stance that we should not allow this kind of shitty behavior to take place here but on the other hand laying it all to rest and don't give the instigator any attention might be the best option. 

 

There are a few mods that do similar things, if they are implemented "realistically" like SL Survival it's kinda nice. But if you get DD'ed just because you enter a city it feels a bit weird :P

Edited by naaitsab
Posted
On 7/13/2023 at 12:38 AM, krzp said:

These files were hosted in the troubleshooting post for the SE version for some time, but to increase their visibility so more people could test this awesome tech (and so I could link to this post more easily, and don't trouble zarantha if I need to update them again, ahaha), here they are:

DD to DAR/OAR for Skyrim SE

 

Installation instructions:
 

  Reveal hidden contents

If you didn't have DAR/OAR before, grab them from Nexus. If you did have it installed, check what animations you've got and their priorities, DD's pack has to have the highest priority (largest number) - it's fairly high now (100 000), but I know some animators tend to set theirs priorities in the millions range, so this is worth a check (I use DAR Explorer but a manual check could also work, and if you are on OAR, you can do this straight from it's MCM).

 

Install the file I've attached, making sure it overwrites regular DD - so all the files in it are winning against what you've had before (in MO2 that means installing them lower in them mod panel).

 

Backup your FNIS output prior. Re-run FNIS, so it stops looking for the movement animations to let DAR handle them (you'll also get about a 1000 more free FNIS animations spots, which is nice)

 

Activate both DAR/OAR and DD to DAR thing and play the game normally.

 

To uninstall this, delete both DAR/OAR and DD to DAR, and restore your fnis output (or just re-run it again without them, so it picks everything back up).

 

Be sure to grab the awesome swimming add-on made by @iivanvv.

And if you're up to it - help me test the newest version of the edited movement script, from my experience it runs better than the one I've included with the conversion. ?

 

Have fun.

 

P.S. Send the love to @Roggvir for coming up with the idea, I'm mostly standing on the shoulders of giants here ✌️

DD to OAR_the big conversion_FOMOD.7z 10.27 MB · 57 downloads DD to DAR_the big conversion_FOMOD.7z 12.34 MB · 50 downloads

I use these my only issue is MCO. I know people have said how to fix/convert them but when I do it just breaks all animations and I have to revert the changes. Not really sure how to fix the issue, otherwise these work but the idleanimation stays MCO. 

Posted
3 minutes ago, Raine_Hyd said:

but the idleanimation stays MCO

I don't use MCO personally, and I don't know your setup, but there's a couple of thing to check which should fix most problems, as the replacer system is kind of simple and straight forward -  check whatever has been overwriting your mt_idle animation. You can utilize the OAR's "Animation log" feature, and see what is firing when you have something from DD gear on. It could, for example, show you that you are using mt_walkforward from the correct 100 006 folder, and yet mt_idle from 1 000 250. Then you can go and adjust the priority on that animation set to be lower than DD, or set a condition for it (something like NOT IsHasKeyword = zad_lockable).

 

If the name isn't displaying there, in the "Animation log" settings in OAR, turn on "Display all animations" instead of the default setting of "Show only replaced animations", and find the name for that culprit idle animation. Then, inside of DD_OAR's folders, just create a copy of mt_idle with the name of your overwriting animation, this might help. ?

Posted (edited)
8 hours ago, naaitsab said:

Mainly as most if not all DD story mods have scenes involving the player and those break if the mod author calls specific functions whilst the PC is in said scene.

My example went like this:

Dialogue: "I can remove your [dd item] if I can have my way with you"

"Ok"

[sends unequipping event, script slowly starts working]

[SL scene starts, SLP+ is really quick, characters start humping]

[DD finishes unequipping]

IDLEFORCESTATE!!1

... why is my character suddenly standing up in the middle of a scene?

 

So, the mod was correct in the way the sequence fired, the scripts just couldn't keep up with the flow, I assume?

 

Plus, if the OAR/DAR conversion gets adopted, there's going to be 2 IdleForceDefaultState sent out on unequipping, one from zadlibs, and the other from evaluateAA (and I need one in EvaluateAA, because there isn't one for StartBoundEffects), which leads to unnecessary jerking of the animations.

Edited by krzp
Posted (edited)
6 hours ago, krzp said:

My example went like this:

Dialogue: "I can remove your [dd item] if I can have my way with you"

"Ok"

[sends unequipping event, script slowly starts working]

[SL scene starts, SLP+ is really quick, characters start humping]

[DD finishes unequipping]

IDLEFORCESTATE!!1

... why is my character suddenly standing up in the middle of a scene?

 

So, the mod was correct in the way the sequence fired, the scripts just couldn't keep up with the flow, I assume?

 

Plus, if the OAR/DAR conversion gets adopted, there's going to be 2 IdleForceDefaultState sent out on unequipping, one from zadlibs, and the other from evaluateAA (and I need one in EvaluateAA, because there isn't one for StartBoundEffects), which leads to unnecessary jerking of the animations.

Well to cover that you would need to make the unequip function blocking. Which I don't think you can force in papyrus? Or have it in a loop that checks until your unequip event is done, which is by far the worst solution to a multi-thread issue of course. It could also be the DD animation filter. That is quite a large function and is known to take some time to process. Scrab posted some code for SLP+ to use with DD so not sure if that does something to help it?

Edited by naaitsab
Posted
On 7/22/2023 at 6:37 PM, ponzipyramid said:

Here's a new patch thanks to @ihatemykite that merges the expressions fixes with the NG DLL. Merged source can be found here.

 

In terms of continuing this work:

  • Can modified scripts be included in the linked repo for version control?
  • As a proof of concept, are there particular API functions or event handlers that might be worth making native?

DeviousDevices.dll.Exp.Merge.zip 185.95 kB · 27 downloads

thanks for the amazing work

how install it ?

thanks for any help and advice

Posted
4 hours ago, mikesolo1975 said:

thanks for the amazing work

how install it ?

thanks for any help and advice

 

You can just install it over regular Devious Devices as a patch, ensure it overwrites.

 

22 hours ago, ponzipyramid said:

I'll try making those hooks in the meantime.

 

Good news, I was able to make a hook for UnequipItem that can prevent DD removal at the engine level. Right now its just a trivial filter by form id but at least conceptually, this approach seems to work.

Posted

 

19 minutes ago, ponzipyramid said:

 

You can just install it over regular Devious Devices as a patch, ensure it overwrites.

 

 

Good news, I was able to make a hook for UnequipItem that can prevent DD removal at the engine level. Right now its just a trivial filter by form id but at least conceptually, this approach seems to work.

thanks for the quick reply and amazing work and thanks too the modders  krzp , naaitsab, , ponzipyramid , zarantha ,ihatemykite , Kimy for the amazing work and making all this possible .

thanks for everything

Posted
2 hours ago, wareware said:

What is the property "Quest Property deviceQuest Auto" in ZadEquipScript used for?

The value is zadQuest, but the property itself doesn't look like it's used for anything at this time.

Posted (edited)
On 7/23/2023 at 9:17 PM, krzp said:

I don't use MCO personally, and I don't know your setup, but there's a couple of thing to check which should fix most problems, as the replacer system is kind of simple and straight forward -  check whatever has been overwriting your mt_idle animation. You can utilize the OAR's "Animation log" feature, and see what is firing when you have something from DD gear on. It could, for example, show you that you are using mt_walkforward from the correct 100 006 folder, and yet mt_idle from 1 000 250. Then you can go and adjust the priority on that animation set to be lower than DD, or set a condition for it (something like NOT IsHasKeyword = zad_lockable).

 

If the name isn't displaying there, in the "Animation log" settings in OAR, turn on "Display all animations" instead of the default setting of "Show only replaced animations", and find the name for that culprit idle animation. Then, inside of DD_OAR's folders, just create a copy of mt_idle with the name of your overwriting animation, this might help. ?

I'll get back to you when I check this but from what I remember the actual idle animation when in combat says the DD one is firing off and DD is set higher than all MCO stuff. 

Looking at it now it seems legacy movement is set to 8000000 and I never touched it. So that seems to be the culprit. Had to disable it in usermode in OARs settings. 

Edited by Raine_Hyd
Posted (edited)
On 7/22/2023 at 9:23 PM, krzp said:

I'm in the process of editing some of those animations to work for when the char is in the hobbled dress, so I'll try to post that when I'll finish all of them as a separate file.

K, I've finished editing them.

 

Those are new-ish (well, new in the sense that I've edited the regular ft_out_of_breath_*.hkx to work with dresses, please don't confuse me with someone who can actually animate or anything). So, using the same naming logic, this can be called ft_out_of_breath_*_hobbled.hkx and perhaps they could also be used for expansion of DD's "out of breath" event? The conditions are the same: player's stamina is < 50%, and/or health < 30%. Whenever those conditions meet, and you're wearing a corresponding device + dress/full restraint, your char will huff and puff 'till their stamina/health regenerates.

 

Users of something like Unforgiving Devices or Devious Lore might see those a lot more often, because those mods drain stamina as part of their struggle mini-games, I don't remember if regular DD does that on it's own? ?

 

Still, I think this adds a lot to immersion even for the base game, and would enhance the experience.

 

P.S. This archive has only the hobbled ones, the regular ones are on the previous page. SE / OAR. If you'd like to convert those to DAR for whatever reason, I've posted an idea how one can do it in the previous post.

 

 

DD_out_of_stamina_hobbled_OAR.7z

Edited by krzp
Posted (edited)

Anyone interested in testing this?

 

For Inventory Interface Information Injector.

 

Yes, i am still looking for a good Yoke icon.

 

 

 

Old Files:

 

Download:

Moved to: Link

 

 

Only contains Jsons for Devious Devices - Expansion and Devious Devices - Integration and an image archive.

 

Changelog:

v4: fixed an error in the swf file that caused the menu to crash when opened.

v3: Added missing $ in Jsons

v2: Fixed errors in json files

Edited by dieer
Posted
1 hour ago, dieer said:

I hope it works as it should (Havn't had time to test it yet).

That's a very cool idea, but I CTD'd 3 times as soon as the main menu loaded...

Posted
8 minutes ago, krzp said:

That's a very cool idea, but I CTD'd 3 times as soon as the main menu loaded...

Damn, I will look into that.

Posted (edited)
52 minutes ago, dieer said:

Damn, I will look into that.

Spoiler

Error: Parse error on line 90: ...bel": "metal_cuffs" //WiP Arm Cuffs
Expecting 'EOF', '}', ':', ',', ']', got 'undefined'

 

I think this is a problem with the json's, the validator has thrown a few errors at me.

 

edit: so, I've adjusted till the validator showed me that both of them are valid, and got the game to load, however now my SkyUI hangs up ?

The I4 SE was working normally for me, though, so it's probably has something to do with the DD patch.

Edited by krzp
Posted (edited)
12 hours ago, krzp said:

 

I think this is a problem with the json's, the validator has thrown a few errors at me.

 

edit: so, I've adjusted till the validator showed me that both of them are valid, and got the game to load, however now my SkyUI hangs up ?

The I4 SE was working normally for me, though, so it's probably has something to do with the DD patch.

 

I fixed the json errors, bit i still havn't been able to test it ingame.

 

New file has been added in the original one.

Edited by dieer
Posted
On 5/20/2023 at 8:08 PM, Taki17 said:

Since DD5.2 was released, I have collected several more things to fix, and there being some major issues with devices among them, I bring you another edition of Small DD Fixes, to be merged into the main repository.

 

In this contribution is contained:

  • All collarless slave harnesses had the wrong interaction message assigned to them, thus making them unable to be removed with keys. This has been corrected by assigning the proper message to all of them.
  • Included a missing ground model mesh for the transparent long gloves
  • Added some missing beds to the bed formlist. Now the player cannot be soft locked in places like the Whiterun jail if they are jailed while wearing hand restraints, cannot pick the lock and were prevented from serving the sentence due to interaction with the prison bed being disabled.
  • Leveled list maintenance: added missing leveled lists for bondage mittens and pet suits, subdivided the corsets leveled list into regular corsets and chastity corsets (and open- and closed variants of the latter)
  • Consolidated the names of straitjackets, as the same item types were sometimes being tagged as "Open" and sometimes as "Topless"
  • Rephrased active effect descriptions of several DD magic effects to sound consistent with base game magic effect descriptions
  • Expanded the zadPlugScript a bit, by preventing plugs from being equipped or removed with bound hands, and a messagebox informing you of this. This is now consistent with how no other device is being able to be equipped/unequipped with bound hands, all the while making plugs just a touch more devious.

small_DD_fixes_for_5-2.7z 57.53 kB · 98 downloads

thanks for the patch

how install it  ?

works with SE /AE  version ?

sorry for a lot of questions

Posted

LE users, I am once again asking for your support. ? Trying to convert the new animations for your version, and I can certainly say that I've spent more time and brain power trying to make LE versions of them, than on the actual animations. As an upside, though, I now posses the knowledge on how to edit the existing animations in Blender ?

 

Can you load this animation in your LE?

Load it with DAR, or just temporarily replace your female/mt_idle with it and tell me if it loads - this should be the armbinder out of breath hobbled anim.

If it works - i'll post an LE DAR version of that out-of-stamina pack soon-ish.

 

My hkxposer loads this, but apparently that thing can eat both SE and LE ones without telling me which game this is for, so I've no idea if it actually worked or not...

 

 

mt_idle.hkx

Posted
On 7/25/2023 at 7:10 PM, dieer said:

Anyone interested in testing this?

 

For Inventory Interface Information Injector.

 

Yes, i am still looking for a good Yoke icon.

 

I hope it works as it should (Havn't had time to test it yet).

 

 

I tried your V2, and the game didn't crash on load (like it did with the first version), and I was also able to load up a save.  However, when trying to open my Inventory the game freezed completely and I had to force close it.   I am on AE (1.6.640).  In addition to I4, I also have Aura's inventory Tweaks and its other required mods installed; so not sure if the problem is a conflict with them.

I did compare the json of your V2 with the jsons in AIT and those from I4 and I did notice a difference in how your assignments are structured.

 

When the assignments included subTypeDisplay in the DD-I4 jsons, the order was iconSource, then iconLabel, and then subTypeDisplay.

 

However, when the AIT and I4 jsons included those three components in the assignment, the order was always subTypeDisplay first, and then iconSource followed by iconLabel.

 

That may or may not be the root cause.

 

The only other difference I noticed is that in the AIT and I4 jsons, the values for subTypeDisplay always had the "$" character in front.  Ex:  $Map, $Backpack, etc.   Your DD-I4 jsons did not include that character in the subTypeDisplay values. Ex:  Hood, Catsuit, etc.

That difference might be more significant than the order; but I am not sure.

Posted (edited)
22 hours ago, DonTheDime said:

 

I tried your V2, and the game didn't crash on load (like it did with the first version), and I was also able to load up a save.  However, when trying to open my Inventory the game freezed completely and I had to force close it.   I am on AE (1.6.640).  In addition to I4, I also have Aura's inventory Tweaks and its other required mods installed; so not sure if the problem is a conflict with them.

I did compare the json of your V2 with the jsons in AIT and those from I4 and I did notice a difference in how your assignments are structured.

 

When the assignments included subTypeDisplay in the DD-I4 jsons, the order was iconSource, then iconLabel, and then subTypeDisplay.

 

However, when the AIT and I4 jsons included those three components in the assignment, the order was always subTypeDisplay first, and then iconSource followed by iconLabel.

 

That may or may not be the root cause.

 

The only other difference I noticed is that in the AIT and I4 jsons, the values for subTypeDisplay always had the "$" character in front.  Ex:  $Map, $Backpack, etc.   Your DD-I4 jsons did not include that character in the subTypeDisplay values. Ex:  Hood, Catsuit, etc.

That difference might be more significant than the order; but I am not sure.

 

 Thanks for the testing, and you are right $ is neccessary in the json files.

I've added them, and is going to test everything now that i can.

 

Damn it, it still crashes when opening the menu.

 

Found the error, gonna update the files soon.

 

New file is up.

 

Edited by dieer

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