Shilra284 Posted April 19, 2019 Posted April 19, 2019 Does anyone have an alt download link? The standard one doesn't work at all for me.
worik Posted April 19, 2019 Posted April 19, 2019 35 minutes ago, Shilra284 said: Does anyone have an alt download link? The standard one doesn't work at all for me. Can you download anything from LL at all? ? The small 76MB DDI package is usually not a problem at all. Or are you lost in the DD universe and are asking about the (much) bigger packages for DDx (Expansion) or DDa (Assets) ?
Zaflis Posted April 19, 2019 Posted April 19, 2019 I came up with a suggestion, the device difficulty modifier should affect also unlocking success chance. I set difficulty to hardest and consume keys off, but the unlock for a red ball gag works on first try about 90% of the times. It would be fun to have this different kind of gameplay where even if you have the keys, it would take a bit of struggling to get free. Or maybe you'd give up, play a while and try later as it might trigger a cooldown. On second thought this might need a different setting for "Unlock difficulty".
kupa11 Posted April 20, 2019 Posted April 20, 2019 I use zzjay's warderobe and everytime i equip pants they just get invisible. It look's like i got them equipped in inventory but they are invisible. Any ideas how 2 fix it?
darktej Posted April 20, 2019 Posted April 20, 2019 2 hours ago, kupa11 said: I use zzjay's warderobe and everytime i equip pants they just get invisible. It look's like i got them equipped in inventory but they are invisible. Any ideas how 2 fix it? this is due to some of the armor using the same armor slot as DD. go to your MCM -> Devious Devices -> Devices Underneath(1) -> find Body-Full(32) try and find which slot the corresponding armor uses by selecting from the drop down menu "None (Disabled)"
Nimkal Posted April 21, 2019 Posted April 21, 2019 Hi, seems like DDi is the only mod causing my game to crash during save load (not startup). I have the usual 250~ plugins and they are all working stably. Masters were checked, DDa v3 is in fact working no problem. I have sexlab plus other animations working no problem. It's just DDi (v4.2). Animations are not maxed I'm at ~1500. So my first question is, what are some mods that can be incompatible with DDi? And 2nd question is: Since DDi is an esm, load order does not matter correct? I can't think of anything else Any help would be appreciated.
kupa11 Posted April 21, 2019 Posted April 21, 2019 17 hours ago, darktej said: this is due to some of the armor using the same armor slot as DD. go to your MCM -> Devious Devices -> Devices Underneath(1) -> find Body-Full(32) try and find which slot the corresponding armor uses by selecting from the drop down menu "None (Disabled)" Thank you! It helped out! If anyone has same issue then it's slot 49 1
chochodulu Posted April 23, 2019 Posted April 23, 2019 Ok… so I’ve decided to make it my life’s mission to create items that allow me to filter sexlab animations. i.e. if an actor is wearing the “pillory ring” item, only pillory animations will be chosen when a sexlab animation is triggered. I’m trying to reverse engineer how this is done using the DDi framework, and this is what I’ve got so far… In zadSLBoundAnims I’ve added this to create the animations themselves... Inside function LoadAnimations: Spoiler SexLab.GetSetAnimationObject("BFA_FB_PilloryDoggy", "CreateBFA_FB_PilloryDoggy", filterQuest) SexLab.GetSetAnimationObject("BFA_FB_PilloryDoggyRedone", "CreateBFA_FB_PilloryDoggyRedone", filterQuest) SexLab.GetSetAnimationObject("BFA_FB_PilloryHardDoggy", "CreateBFA_FB_PilloryHardDoggy", filterQuest) SexLab.GetSetAnimationObject("BFA_FB_PilloryMissionary", "CreateBFA_FB_PilloryMissionary", filterQuest) And at the end of the file: Spoiler Function CreateBFA_FB_PilloryDoggy(int id) ; Define animation prefixes for each actor (must correspond to names in FNIS), add more if necessary String asAnim1 = "FB_PilloryDoggy" String asAnim2 = "FB_PilloryDoggy" libs.Log("Creating BFA_FB_PilloryDoggy") sslBaseAnimation Anim = SexLab.GetAnimationObject("BFA_FB_PilloryDoggy") if Anim != none && Anim.Name != "BFA_FB_PilloryDoggy" Anim.Name = "BFA_FB_PilloryDoggy" Anim.SetContent(Sexual) Anim.SoundFX = Squishing Int a1 = Anim.AddPosition(Female, addCum = Vaginal) Anim.AddPositionStage(a1, asAnim1 + "_A1_S1") Anim.AddPositionStage(a1, asAnim1 + "_A1_S2") Anim.AddPositionStage(a1, asAnim1 + "_A1_S3") Anim.AddPositionStage(a1, asAnim1 + "_A1_S4") Anim.AddPositionStage(a1, asAnim1 + "_A1_S5") Int a2 = Anim.AddPosition(Male) Anim.AddPositionStage(a2, asAnim2 + "_A2_S1", sos = 3, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S2", sos = 3, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S3", sos = 3, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S4", sos = 3, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S5", sos = 3, strapon = True) Anim.SetStageSoundFX(1, None) Anim.AddTag("FunnyBizness") Anim.AddTag("Sex") Anim.AddTag("Dirty") Anim.AddTag("Furniture") Anim.AddTag("FM") Anim.AddTag("Pillory") Anim.AddTag("AnimObject") Anim.AddTag("Vaginal") Anim.AddTag("Doggy") Anim.AddTag("Doggystyle") Anim.AddTag("DeviousDevice") Anim.Save(-1) EndIf endFunction Function CreateBFA_FB_PilloryDoggyRedone(int id) ; Define animation prefixes for each actor (must correspond to names in FNIS), add more if necessary String asAnim1 = "FB_PilloryDoggyRedone" String asAnim2 = "FB_PilloryDoggyRedone" libs.Log("Creating BFA_FB_PilloryDoggyRedone") sslBaseAnimation Anim = SexLab.GetAnimationObject("BFA_FB_PilloryDoggyRedone") if Anim != none && Anim.Name != "BFA_FB_PilloryDoggyRedone" Anim.Name = "BFA_FB_PilloryDoggyRedone" Anim.SetContent(Sexual) Anim.SoundFX = Squishing Int a1 = Anim.AddPosition(Female, addCum = Vaginal) Anim.AddPositionStage(a1, asAnim1 + "_A1_S1") Anim.AddPositionStage(a1, asAnim1 + "_A1_S2") Anim.AddPositionStage(a1, asAnim1 + "_A1_S3") Anim.AddPositionStage(a1, asAnim1 + "_A1_S4") Anim.AddPositionStage(a1, asAnim1 + "_A1_S5") Int a2 = Anim.AddPosition(Male) Anim.AddPositionStage(a2, asAnim2 + "_A2_S1", sos = 2, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S2", sos = 2, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S3", sos = 2, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S4", sos = 2, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S5", sos = 2, strapon = True) Anim.SetStageSoundFX(1, None) Anim.AddTag("FunnyBizness") Anim.AddTag("Sex") Anim.AddTag("Dirty") Anim.AddTag("Furniture") Anim.AddTag("FM") Anim.AddTag("Pillory") Anim.AddTag("AnimObject") Anim.AddTag("Vaginal") Anim.AddTag("Doggy") Anim.AddTag("Doggystyle") Anim.AddTag("DeviousDevice") Anim.Save(-1) EndIf endFunction Function CreateBFA_FB_PilloryHardDoggy(int id) ; Define animation prefixes for each actor (must correspond to names in FNIS), add more if necessary String asAnim1 = "FB_PilloryHardDoggy" String asAnim2 = "FB_PilloryHardDoggy" libs.Log("Creating BFA_FB_PilloryHardDoggy") sslBaseAnimation Anim = SexLab.GetAnimationObject("BFA_FB_PilloryHardDoggy") if Anim != none && Anim.Name != "BFA_FB_PilloryHardDoggy" Anim.Name = "BFA_FB_PilloryHardDoggy" Anim.SetContent(Sexual) Anim.SoundFX = Squishing Int a1 = Anim.AddPosition(Female, addCum = Vaginal) Anim.AddPositionStage(a1, asAnim1 + "_A1_S1") Anim.AddPositionStage(a1, asAnim1 + "_A1_S2") Anim.AddPositionStage(a1, asAnim1 + "_A1_S3") Anim.AddPositionStage(a1, asAnim1 + "_A1_S4") Anim.AddPositionStage(a1, asAnim1 + "_A1_S5") Int a2 = Anim.AddPosition(Male) Anim.AddPositionStage(a2, asAnim2 + "_A2_S1", sos = 2, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S2", sos = 2, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S3", sos = 2, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S4", sos = 2, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S5", sos = 2, strapon = True) Anim.SetStageSoundFX(1, None) Anim.AddTag("FunnyBizness") Anim.AddTag("Sex") Anim.AddTag("Dirty") Anim.AddTag("Furniture") Anim.AddTag("FM") Anim.AddTag("Pillory") Anim.AddTag("AnimObject") Anim.AddTag("Vaginal") Anim.AddTag("Doggy") Anim.AddTag("Doggystyle") Anim.AddTag("DeviousDevice") Anim.Save(-1) EndIf endFunction Function CreateBFA_FB_PilloryMissionary(int id) ; Define animation prefixes for each actor (must correspond to names in FNIS), add more if necessary String asAnim1 = "FB_PilloryMissionary" String asAnim2 = "FB_PilloryMissionary" libs.Log("Creating BFA_FB_PilloryMissionary") sslBaseAnimation Anim = SexLab.GetAnimationObject("BFA_FB_PilloryMissionary") if Anim != none && Anim.Name != "BFA_FB_PilloryMissionary" Anim.Name = "BFA_FB_PilloryMissionary" Anim.SetContent(Sexual) Anim.SoundFX = Squishing Int a1 = Anim.AddPosition(Female, addCum = Vaginal) Anim.AddPositionStage(a1, asAnim1 + "_A1_S1") Anim.AddPositionStage(a1, asAnim1 + "_A1_S2") Anim.AddPositionStage(a1, asAnim1 + "_A1_S3") Anim.AddPositionStage(a1, asAnim1 + "_A1_S4") Anim.AddPositionStage(a1, asAnim1 + "_A1_S5") Int a2 = Anim.AddPosition(Male) Anim.AddPositionStage(a2, asAnim2 + "_A2_S1", sos = 3, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S2", sos = 3, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S3", sos = 3, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S4", sos = 3, strapon = True) Anim.AddPositionStage(a2, asAnim2 + "_A2_S5", sos = 3, strapon = True) Anim.SetStageSoundFX(1, None) Anim.AddTag("FunnyBizness") Anim.AddTag("Sex") Anim.AddTag("Dirty") Anim.AddTag("Furniture") Anim.AddTag("FM") Anim.AddTag("Pillory") Anim.AddTag("AnimObject") Anim.AddTag("Vaginal") Anim.AddTag("DeviousDevice") Anim.Save(-1) EndIf endFunction To zadBQ00 I added this code to call on the animations created... In the end of sslBaseAnimation function GetBoundAnim(actor a, actor b): Spoiler If HasPillory(a) if !b.WornHasKeyword(libs.zad_DeviousHeavyBondage) ;check if partner is a male If b.GetLeveledActorBase().GetSex() == 0 i = Utility.RandomInt(0,3) If i == 0 return SexLab.GetAnimationObject("BFA_FB_PilloryDoggy") ElseIf i == 1 return SexLab.GetAnimationObject("BFA_FB_PilloryDoggyRedone") ElseIf i == 2 return SexLab.GetAnimationObject("BFA_FB_PilloryHardDoggy") ElseIf i == 3 return SexLab.GetAnimationObject("BFA_FB_PilloryMissionary") EndIf EndIf EndIf EndIf On line 1100: Spoiler Bool Function HasPillory(Actor akActor) Return (akActor != None) && (akActor.WornHasKeyword(libs.bfa_pillory)) EndFunction In zadlibs I added this (which I don’t know if it’s even necessary… than again, I don’t really know if anything I'm doing here is even in the right direction, so that’s no surprise :) Spoiler Armor Property pillory Auto Armor Property pilloryRendered Auto And I made this change: Spoiler bool Function IsBound(actor akActor) return akActor.WornHasKeyword(zad_DeviousHeavyBondage) || (akActor.WornHasKeyword(zad_DeviousArmbinder) || akActor.WornHasKeyword(zad_DeviousArmBinderElbow) || akActor.WornHasKeyword(zad_DeviousYoke) || akActor.WornHasKeyword(bfa_pillory) || akActor.WornHasKeyword(zad_DeviousYokeBB) || akActor.WornHasKeyword(zad_DeviousStraitJacket)) EndFunction And added this (which again... do I know what I'm doing?): Spoiler RegisterGenericDevice(pillory, "DDi,ring,metal") And that’s where I get stuck pretty much. I try creating the item in CK, but that’s not working. After playing around with the CK for quite a while and trying to duplicate the yoke, and change the keywords in the Editor ID to bfa_pillory (among other things) I get that’s not how it’s done. When I duplicate zad_yoke_scriptInstance, it appears in my inventory in game etc. I now get that adding the item itself is done using papyrus, and the equipdevice function. But I don’t really know how to do that, and also, I don’t even know if I’m in the right direction. I would really appreciate any help that at least directs me in the right way. Examples would be awesome. I don’t know how to code much… (can you tell?) but I do know how to reverse engineer referring me to any existing mod that does this (i.e. adding a new custom devious device) would also be greatly appreciated. And any info on how I connect a keyword to the device would be great. I really want to get this done and I've sunk hours into this. I know I’m going to need to stumble my way to success. But I’d at least like to know I’m stumbling in the right direction.
Guest Posted April 23, 2019 Posted April 23, 2019 Hi, I wanted to leave some suggestions: - the inflatable plugs don't seem to have physics on the pumps (whereas chains and such do nowadays, would be awesome if you could include those to!) - For the "tail" plugs, it would be nice to see some different colors, maybe make one additional one that copies the characters hair color? - Not sure if possible, but it would be cool if the standard devices have a minigame when you try to use "pick lock" (standard lockpick game / or maybe a custom one)? With the vanilla minigame it would make sense to make it more difficult depending on the characters arousal and ofc only 1 try per / time interval. - It would be nice if devices could have some more color options (pink / blue), I noticed there are dyes, but they are rather limited right now. Would it be possible to allow players to create a custom dye with their own color (kinda like how racemenu allows you to make your own colors)? And one sorta oddity I encountered: It seems the rubber catsuit stuff (from mxm or something) don't seem to have everything bodyslide-able (if that's even a word), I tripple checked to make sure everything was working fine, but those are the only items which don't get fitted properly (on CBBE, I don't know if the same problems are there with UUNP). Most noticable are the rubber gloves, they are completely off and it's collar is a bit to much forward. And one question, I noticed that the items from the zaz animation pack don't have "devious" properties, but it does have some nice stuff in there. How could I make some items "devious"? (I have never modded before). Anyways, great stuff!
LazyBoot Posted April 23, 2019 Posted April 23, 2019 6 minutes ago, jujoco said: - For the "tail" plugs, it would be nice to see some different colors, maybe make one additional one that copies the characters hair color? I believe most of the tail plugs should copy the player characters hair color when worn.
Guest Posted April 23, 2019 Posted April 23, 2019 2 hours ago, LazyBoot said: I believe most of the tail plugs should copy the player characters hair color when worn. ? oh that's really cool! I never noticed
TheArchlich Posted April 23, 2019 Posted April 23, 2019 Hey I have a gamebraking problem with this mod. It's about the animation filter - It just doesn't work. Is there any fix for that? I also get thing like: Game says playing blowjob and he fucks her in a pussy. May be related to this: Edit: I fixed it. It's a bug in DDi script. It's the use bound animation option - it has a higher priority than the animation filter.
TheArchlich Posted April 26, 2019 Posted April 26, 2019 This mod is broken! First of all it adds new sex animations and there is nothing about that in the mod description. It took me 2 days to find where those animations are coming from. Those animations do not show up in SexLab neither can be successfully unregistered with SexLab Tools. Animations added by DDi are incompatible with Devious devices - they ignore the animation filter. Here is my stream, where this mod is preventing me from playing normally: Problems start about 23:30 and persist till the end of the video. https://www.pornhub.com/view_video.php?viewkey=ph5cc2838505b3f
LazyBoot Posted April 26, 2019 Posted April 26, 2019 2 hours ago, TheArchlich said: First of all it adds new sex animations and there is nothing about that in the mod description. It took me 2 days to find where those animations are coming from. Those animations do not show up in SexLab neither can be successfully unregistered with SexLab Tools. Animations added by DDi are incompatible with Devious devices - they ignore the animation filter. Unless another mod has registered them in sexlab, any animations from DDi should not show up in normal scenes, only when wearing devices... And they are specifically designed to be compatible with devices.
TheArchlich Posted April 26, 2019 Posted April 26, 2019 2 hours ago, LazyBoot said: Unless another mod has registered them in sexlab, any animations from DDi should not show up in normal scenes, only when wearing devices... And they are specifically designed to be compatible with devices. They are not specifically designed to be compatible with the devices, and if they are they fucked it up, cause it's clearly not working. I'm getting pussy-fucked through a chastity belt using a DDi animation.
Zaflis Posted April 27, 2019 Posted April 27, 2019 36 minutes ago, TheArchlich said: They are not specifically designed to be compatible with the devices, and if they are they fucked it up, cause it's clearly not working. I'm getting pussy-fucked through a chastity belt using a DDi animation. Did you check Cursed Loot that attackers can strip chastity belts, and that chastity prevents rape? It also seemed that you may have some other mod starting sex too but i didn't look too carefully. Not many mods talk about "your master". There are 2 main filters that matter for bound animations, one from DDi and other from ZAP.
TheArchlich Posted April 27, 2019 Posted April 27, 2019 34 minutes ago, Zaflis said: Did you check Cursed Loot that attackers can strip chastity belts, and that chastity prevents rape? It also seemed that you may have some other mod starting sex too but i didn't look too carefully. Not many mods talk about "your master". There are 2 main filters that matter for bound animations, one from DDi and other from ZAP. As I said, I didn't do anything wrong, that's a DDi only issue. Edit: That is not even a DCL rape so why would it matter?
Inte Posted April 27, 2019 Posted April 27, 2019 @Kimy, After trying DDi 4.2, I have some suggestions. 1. I have noticed you are no longer using ‘zadRestraintArmBinderScript’ on armbinders or any other extending script, is there a reason for this? It is a good practice to create a script for each device that will extend the ‘zadEquipScript’ and attaching that to the corresponding device instead of attaching ‘zadEquipScript’ directly to every device. This will allow for more customization of each device type. When used on armbinders for example, it will allow you to do this. Spoiler ScriptName iDDeResArmBinderScr Extends zadEquipScript STRING[] Property sDefStruggleIdles STRING[] Function Get() STRING[] sIdles = NEW STRING[5] sIdles[0] = "DDRegArmbStruggle01" sIdles[1] = "DDRegArmbStruggle02" sIdles[2] = "DDRegArmbStruggle03" sIdles[3] = "DDRegArmbStruggle04" sIdles[4] = "DDRegArmbStruggle05" RETURN sIdles EndFunction EndProperty STRING[] Property sDefStruggleIdlesHob STRING[] Function Get() STRING[] sIdles = NEW STRING[2] sIdles[0] = "DDHobArmbStruggle01" sIdles[1] = "DDHobArmbStruggle02" RETURN sIdles EndFunction EndProperty Keyword[] Property DefEquipConflictingDevices Keyword[] Function Get() Keyword[] kws = NEW Keyword[3] kws[0] = libs.zad_DeviousArmbinderElbow kws[1] = libs.zad_DeviousYoke kws[2] = libs.zad_DeviousPetSuit RETURN kws EndFunction EndProperty Event OnInit() SetDefaults() EndEvent Function SetDefaults() If (struggleIdles.Length < 1) ;only overwrite them if they are not already manually set in CK struggleIdles = sDefStruggleIdles EndIf If (struggleIdlesHob.Length < 1) struggleIdlesHob = sDefStruggleIdlesHob EndIf If (EquipConflictingDevices.Length < 1) EquipConflictingDevices = DefEquipConflictingDevices EndIf EndFunction which will make it way easier to add or remove default idles for armbinders, and help tremendously with the existing armbinders’ backward compatibility as modders would not have to add all those idles manually. Also, notice the similar implementation of device conflict keywords which does not seem implemented atm. Since this method is dependent on the ‘OnInit’ event, should you decide to add that event to the ‘zadEquipScript’ don’t forget to add an empty function like ‘SetDefaults()’ so other scripts can also use the ‘OnInit’ event, and let me know so I can remove my ‘OnInit’ event as only the last one in the chain will execute. This can also be done for other devices types as well, by creating their own scripts of course. Spoiler ScriptName iDDeResElbowBinderScr Extends zadEquipScript STRING[] Property sStruggleIdlesDef STRING[] Function Get() STRING[] sIdles = NEW STRING[5] sIdles[0] = "DDRegElbStruggle01" sIdles[1] = "DDRegElbStruggle02" sIdles[2] = "DDRegElbStruggle03" sIdles[3] = "DDRegElbStruggle04" sIdles[4] = "DDRegElbStruggle05" RETURN sIdles EndFunction EndProperty STRING[] Property sStruggleIdlesHobDef STRING[] Function Get() STRING[] sIdles = NEW STRING[2] sIdles[0] = "DDHobElbStruggle01" sIdles[1] = "DDHobElbStruggle02" RETURN sIdles EndFunction EndProperty Keyword[] Property EquipConflictingDevicesDef Keyword[] Function Get() Keyword[] kws = NEW Keyword[3] kws[0] = libs.zad_DeviousArmbinder kws[1] = libs.zad_DeviousYoke kws[2] = libs.zad_DeviousPetSuit RETURN kws EndFunction EndProperty Event OnInit() SetDefaults() EndEvent Function SetDefaults() If (struggleIdles.Length < 1) ;only overwrite them if they are not already manually set in CK struggleIdles = sStruggleIdlesDef EndIf If (struggleIdlesHob.Length < 1) struggleIdlesHob = sStruggleIdlesHobDef EndIf If (EquipConflictingDevices.Length < 1) EquipConflictingDevices = EquipConflictingDevicesDef EndIf EndFunction You should add a dedicated script for each device type even if empty because it will afford you more flexibility in the future. The armbinders for instance, can very easily be done in TESV Edit as you would only need to change the script name (from zadEquipScript to zadRestraintArmBinderScript), and all the properties already assigned will remain because ‘zadRestraintArmBinderScript’ extends ‘zadEquipScript’ already. Also, just by applying a filter in TESV edit you can simplify and expedite the process by quite a bit. Spoiler Then rename the script, just make sure it is compiled before opening it in CK. Spoiler 2. You might want to expand this function Spoiler string Function LookupDeviceType(keyword kwd) ... ElseIf kwd == zad_DeviousHobbleSkirtRelaxed return "HobbleSkirt" ElseIf (kwd) RETURN (kwd AS STRING) ;or RETURN kwd.GetName() ; Not sure if this works for keywords, tho. EndIf ... [/code] in ‘zadLibs’ to accommodate for new custom keywords added by other mods (e.g. Mech Suit from DDe). 3. You’ve emphatically shut me down on this before, but I will suggest a change to the DDi versioning one last time. Keeping 2 different version numbers for a mod is just a bad practice because it creates a lot of confusion, as least for modders, which is more prevalent when it comes to frameworks such as DDi. If I need to see which version of DDi is installed I have to go into DDi’s code and see whether the script version 10.0 corresponds to DDi 4.2 or 4.00 or whatever. How about this simpler implementation? It seems that since most scripts are already using 'zadLibs' as a property, it cannot be called for global functions as well. So, you'll have to create a separate script extending a quest, you do not need to attach it to a quest, tho. But, this will afford you the opportunity to provide users with even more functionality such as an API function. Something like this, Spoiler ScriptName zadUtil Extends Quest Import Game ;Version FLOAT Function GetVersion() GLOBAL RETURN 4.20 EndFunction STRING Function GetVersionStr() GLOBAL RETURN StringUtil.Substring(GetVersion(), 0, 4) EndFunction ;API zadLibs Function GetAPI() GLOBAL If (GetModByName("Devious Devices - Integration.esm") < 255) RETURN GetFormFromFile(0x0000F624, "Devious Devices - Integration.esm") AS zadLibs EndIf RETURN None EndFunction Then, in the zadLibs script for continuity, Spoiler FLOAT Function GetVersion() RETURN zadUtil.GetVersion() EndFunction STRING Function GetVersionStr() RETURN zadUtil.GetVersionStr() EndFunction Finally, in the MCM config script Spoiler Int Function GetVersion() RETURN ((zadUtil.GetVersion() * 100) AS INT) EndFunction With this, any mod looking just to check the DDi version would only need one line of code. zadUtil.GetVersion() works from any script with no dependency checks, no properties, no guesswork (i.e. wether the returned version of 10.0 = DDi 4.2 or some other DDi version; the official version is the script version), just simple and efficient. Also with every update you need only change one number in one place. 4. Struggling out of an armbinder is utter nonsense IMHO (especially the elbowbinders), and having a NPC release you should be the only way out. Therefore, you should add back the armbinder/heavybondage dialogue release option (you can make it toggleable in the MCM), so all the small mods out there (DDe, DC, etc.) do not have to create their own dialogue system just to release the player from the armbinder, and end up with 50 different dialogs from 50 different mods. You could just move the DCL one to DDi. 5. I have noticed that plugs (the rendered part of the device) are still being dropped (as they were in DDi 3) when wearing bondage mittens and equipped in script. This results in a broken device. You might want to add the zad_DeviousPlug keyword to the ‘IsDeviousDevice()’ function check in the bondage mittens effect script. 6. When the elbowbinder is equipped there is a 3 time animation cycling between normal and bound pose. Is this a known issue, or is it just on my end? BTW, love the elbowbinder. Ouch! ❤️ Have I known it was in there I would have ‘converted’ earlier. 7. Your usage of ‘zad_DeviousHeavyBondage’ keyword for all the devices that bind the arms is super convenient, however it seems to break the ‘ManipulateGenericDeviceByKeyword()’ function. In my tests it failed to add back the items removed (armbinder, elbowbinder) about 50% of the time where it worked perfectly in DDi 3. 8. What is the point of the extra keyword (token) on ‘quest’ devices? 9. I still get belt message boxes after sleep and wait even tho I've unchecked that option in the MCM. Ninja edited, for better readability and more content. 3
Kimy Posted April 29, 2019 Posted April 29, 2019 On 4/26/2019 at 11:14 PM, Inte said: @Kimy, After trying DDi 4.2, I have some suggestions. 1. I have noticed you are no longer using ‘zadRestraintArmBinderScript’ on armbinders or any other extending script, is there a reason for this? The old implementation was very, as in VERY complicated. Wrist restraints required several scripts and effects to set up, and it made making custom devices living hell. The new one? Just slap the standard script (zadEquipScript) on, put the generic enchantment on the rendered device, and you're done! No messing with multiple scripts! On 4/26/2019 at 11:14 PM, Inte said: It is a good practice to create a script for each device that will extend the ‘zadEquipScript’ and attaching that to the corresponding device instead of attaching ‘zadEquipScript’ directly to every device. This will allow for more customization of each device type. You CAN inherit that script for custom devices, but 99% of time you won't have to, and in fact, shouldn't. zadEquipScript is meant to be used unchanged for almost all devices. Pretty much all item behavior can be defined via script properties (see documentation in the code!). No custom code needed! Even the idles can be set individually via properties and without changing any code whatsoever. I know it's a bit of a paradigm change compared to 3.x, but I am absolutely convinced you will love the new implementation once you get used to it! Some device types with non-standard behavior still use inherited device scripts (e.g. plugs and belts). If we ever introduce new device types that need non-standard code, they will get their own device script, of course. Right now, I can't imagine what that should be, though. There is almost no type of restraint left in the world we don't already cover. On 4/26/2019 at 11:14 PM, Inte said: in ‘zadLibs’ to accommodate for new custom keywords added by other mods (e.g. Mech Suit from DDe). A mech suit's device keyword (as far as the framework is concerned) would still be zad_DeviousSuit (assuming it occupies slot 32). You can put as many custom keywords on a device as you wish, mind you, but if you need text replacement, you'd have to do that in your content mod. On 4/26/2019 at 11:14 PM, Inte said: 3. You’ve emphatically shut me down on this before, but I will suggest a change to the DDi versioning one last time. Keeping 2 different version numbers for a mod is just a bad practice because it creates a lot of confusion, as least for modders, which is more prevalent when it comes to frameworks such as DDi. If I need to see which version of DDi is installed I have to go into DDi’s code and see whether the script version 10.0 corresponds to DDi 4.2 or 4.00 or whatever. I know you disagree with me on that VERY much so, but I really think it's good practice to differ between an internal build number and the official version number. It's not that it's a not widespread practice in software development, you know? On 4/26/2019 at 11:14 PM, Inte said: 4. Struggling out of an armbinder is utter nonsense IMHO (especially the elbowbinders), and having a NPC release you should be the only way out. Therefore, you should add back the armbinder/heavybondage dialogue release option (you can make it toggleable in the MCM), so all the small mods out there (DDe, DC, etc.) do not have to create their own dialogue system just to release the player from the armbinder, and end up with 50 different dialogs from 50 different mods. You could just move the DCL one to DDi. I totally agree! Struggling out of a properly applied armbinder is utterly impossible. At least I am not aware of anyone who ever managed to accomplish such a feat. However, struggling has been in the framework since DD 1.0 (I suppose because there were otherwise no mechanics available to escape these things and Min wanted to avoid people getting stuck). If I change that device's behavior so drastically, I have no idea how much stuff I would break in people's mods. I consider the standard armbinders to be "practice restraints", and don't normally use them in my quest content etc. Good that DD4 made making custom devices so easy, so all I have to do is cloning an armbinder and set the struggle chance property to zero! Try that with DD3, haha! The device dialogue I actually DID remove to prevent having 50 different dialogues from 50 different mods. There are so many good "help me out of my bonds" mods around, that there is simply no good reason for the framework to provide that feature. This way users can pick the mod they want to have. Personally, I am using Devious Followers. On 4/26/2019 at 11:14 PM, Inte said: 5. I have noticed that plugs (the rendered part of the device) are still being dropped (as they were in DDi 3) when wearing bondage mittens and equipped in script. This results in a broken device. You might want to add the zad_DeviousPlug keyword to the ‘IsDeviousDevice()’ function check in the bondage mittens effect script. Will look into this! I think the mitten code needs some TLC in general. On 4/26/2019 at 11:14 PM, Inte said: 6. When the elbowbinder is equipped there is a 3 time animation cycling between normal and bound pose. Is this a known issue, or is it just on my end? Not quite sure what you mean? On 4/26/2019 at 11:14 PM, Inte said: BTW, love the elbowbinder. Ouch! ❤️ Have I known it was in there I would have ‘converted’ earlier. There are literally hundreds of new devices in DD4. Have fun exploring them! On 4/26/2019 at 11:14 PM, Inte said: 7. Your usage of ‘zad_DeviousHeavyBondage’ keyword for all the devices that bind the arms is super convenient, however it seems to break the ‘ManipulateGenericDeviceByKeyword()’ function. In my tests it failed to add back the items removed (armbinder, elbowbinder) about 50% of the time where it worked perfectly in DDi 3. I will have to test that. I never use that function for anything but removing devices, so no clue, really! On 4/26/2019 at 11:14 PM, Inte said: 8. What is the point of the extra keyword (token) on ‘quest’ devices? It prevents mods from accidentally removing somebody's quest devices, so quest device removal can be done only REALLY on purpose. On 4/26/2019 at 11:14 PM, Inte said: 9. I still get belt message boxes after sleep and wait even tho I've unchecked that option in the MCM. There is a MCM option for that? Haha! 2
Nimkal Posted April 30, 2019 Posted April 30, 2019 On 4/21/2019 at 5:01 AM, Nimkal said: Hi, seems like DDi is the only mod causing my game to crash during save load (not startup). I have the usual 250~ plugins and they are all working stably. Masters were checked, DDa v3 is in fact working no problem. I have sexlab plus other animations working no problem. It's just DDi (v4.2). Animations are not maxed I'm at ~1500. So my first question is, what are some mods that can be incompatible with DDi? And 2nd question is: Since DDi is an esm, load order does not matter correct? I can't think of anything else Any help would be appreciated. Can someone please help me with the issue above? There is literally nothing that I can think of that would make DDi crash my game on loading screen. I just can't load game with this mod active. What is happening. I've checked everything. The only other explanation is if there is a mod incompatibility.
Inte Posted April 30, 2019 Posted April 30, 2019 11 hours ago, Kimy said: Quote It is a good practice to create a script for each device that will extend the ‘zadEquipScript’ and attaching that to the corresponding device instead of attaching ‘zadEquipScript’ directly to every device. This will allow for more customization of each device type. You CAN inherit that script for custom devices, but 99% of time you won't have to, and in fact, shouldn't. Although I agree that you do not have to extend the ‘zadEquipScript’ to make the device work, like I mentioned before you should extend it regardless (even if empty) for future expansion, always. Why? Because there is absolutely no downside in doing so. In fact doing it will make for a more robust modding. However, if not done and later on you find that someone has made some new cool idles that would work perfectly with your 500 devices you’ve already made, or the ‘zadEquipScript’ was changed so much that it cannot be used with your devices anymore, you are screwed. Your only choices then would be to, 1. Not use those new cool idles or the updated ‘zadEquipScript’. 2. Change about 30 properties for each one of your 500 devices for an estimated total of 15,000 properties. 3. Abandon your now broken mod. For instance, ‘luckily’ for me I did extend ‘zadEquipScript’ on every single one of the DDe devices and by just adding the code I mentioned previously and changing a couple of properties for each device I was able to save DDe. 11 hours ago, Kimy said: Quote in ‘zadLibs’ to accommodate for new custom keywords added by other mods (e.g. Mech Suit from DDe). A mech suit's device keyword (as far as the framework is concerned) would still be zad_DeviousSuit (assuming it occupies slot 32). You can put as many custom keywords on a device as you wish, mind you, but if you need text replacement, you'd have to do that in your content mod. I was considering that, but the mech suit occupies all slots except for the gag and belt. Although the ‘zad_DeviousSuit’ keyword is already on it, I thought to use a custom keyword for removal. Or maybe ‘zad_DeviousStraightJacket now available in 4.2, IDK? Also, that function is not used for text replacement but to temporary store devices in StorageUtil for quicker removal. Therefore, every time the mech suit is equipped players get the error box at the end of that function, which can get annoying after a while. 11 hours ago, Kimy said: Quote 3. You’ve emphatically shut me down on this before, but I will suggest a change to the DDi versioning one last time. Keeping 2 different version numbers for a mod is just a bad practice because it creates a lot of confusion, as least for modders, which is more prevalent when it comes to frameworks such as DDi. If I need to see which version of DDi is installed I have to go into DDi’s code and see whether the script version 10.0 corresponds to DDi 4.2 or 4.00 or whatever. I know you disagree with me on that VERY much so, but I really think it's good practice to differ between an internal build number and the official version number. It's not that it's a not widespread practice in software development, you know? So let me see here, if modders want to check for the DDi 4.20 version it would be better to: 1. Just grab the version and compare it to 4.20 and... that’s it. Or... 2. Go digging through 100 scripts to find out that version 4.20 is actually version 10, then grab that version and check against that. They would have to do this with every new DDi release because they wouln’t know whether the new release is 11 or 10.5 or whatever? Give me one example where it is a good practice to have two different version numbers for the same mod build keeping in mind that, we are not talking Windows here, where you have 100 different departments working on the same build. 11 hours ago, Kimy said: If I change that device's behavior so drastically, I have no idea how much stuff I would break in people's mods. I consider the standard armbinders to be "practice restraints", and don't normally use them in my quest content etc. That is just it. You are not changing that device’s behavior at all. You are adding back the dialogue that allows a NPC to free a player in heavy bondage, that’s all. 11 hours ago, Kimy said: Good that DD4 made making custom devices so easy, so all I have to do is cloning an armbinder and set the struggle chance property to zero! Try that with DD3, haha! Actually in DDi 3 it was much simpler than that. All you had to do to is to call these functions after equipping the armbinder, DisableStruggling() - It will... well disable struggle escapes, DisableDialogue() - It will remove the dialog where any NPC can let you out of the armbinder, and the best part, it worked with any armbinder, new or old. 11 hours ago, Kimy said: The device dialogue I actually DID remove to prevent having 50 different dialogues from 50 different mods. There are so many good "help me out of my bonds" mods around, that there is simply no good reason for the framework to provide that feature. This way users can pick the mod they want to have. Personally, I am using Devious Followers. So, having a centralized dialog option that all mods would have access to use and instead forcing each of them to create their own dialog option would prevent having 50 different dialogs from 50 different mods, how? Show me a mod that provides just that one dialog feature* nothing more, and I will gladly use it and shut up about this, and that is to say nothing about the extra LO slot for a feature that we already had. Personally, I thought you’d be using DCL, no? * - the feature DDi 3 has where a NPC would have the dialog to release the player from heavy bondage (for a price of course). Also it would allow the mod that equipped said heavy bondage to disable the dialog, and/or the struggle-out option. 11 hours ago, Kimy said: Quote 6. When the elbowbinder is equipped there is a 3 time animation cycling between normal and bound pose. Is this a known issue, or is it just on my end? Not quite sure what you mean? Sorry, English is my 3rd language and the other 2 don’t like it when I use it. After the elbowbinder is equipped the arms go in, then they pop out (no hands) then they go back in. This repeats about 3 times and in the end they stay in as they should. 11 hours ago, Kimy said: Quote 8. What is the point of the extra keyword (token) on ‘quest’ devices? It prevents mods from accidentally removing somebody's quest devices, so quest device removal can be done only REALLY on purpose. IDK, I think the previous system (DDi 3) worked fine for that. 11 hours ago, Kimy said: Quote 9. I still get belt message boxes after sleep and wait even tho I've unchecked that option in the MCM. There is a MCM option for that? Haha! Why yes there is and it’s not working for those message boxes which gets really annoying after you click off the same message box 50 times.
Lupine00 Posted April 30, 2019 Posted April 30, 2019 Some kind of debug menu feature to remove devices from NPCs would be handy. e.g. I accidentally traded Maiden's Shield to Chloe. I wanted to remove it from her, as I didn't intend to put her in it. I couldn't seem to remove it via the console. I removed the device and the render device, but the render device would reappear after every cell change.
Kimy Posted April 30, 2019 Posted April 30, 2019 14 hours ago, Inte said: Although I agree that you do not have to extend the ‘zadEquipScript’ to make the device work, like I mentioned before you should extend it regardless (even if empty) for future expansion, always. Why? Because there is absolutely no downside in doing so. In fact doing it will make for a more robust modding. However, if not done and later on you find that someone has made some new cool idles that would work perfectly with your 500 devices you’ve already made, or the ‘zadEquipScript’ was changed so much that it cannot be used with your devices anymore, you are screwed. Your only choices then would be to, 1. Not use those new cool idles or the updated ‘zadEquipScript’. 2. Change about 30 properties for each one of your 500 devices for an estimated total of 15,000 properties. 3. Abandon your now broken mod. For instance, ‘luckily’ for me I did extend ‘zadEquipScript’ on every single one of the DDe devices and by just adding the code I mentioned previously and changing a couple of properties for each device I was able to save DDe. Sure, if you want to code it that way in your mod, go ahead and do it! As you said, there is no obvious downside. I won't change the framework, because right now there is no reason to, and it would be just be work for me. If ever needed I can still set TES5Edit loose on it. Mind you that DD4 has been out for 1.5 years now, and never there has been a need for forking that script in places where it wasn't already. 14 hours ago, Inte said: I was considering that, but the mech suit occupies all slots except for the gag and belt. Although the ‘zad_DeviousSuit’ keyword is already on it, I thought to use a custom keyword for removal. Or maybe ‘zad_DeviousStraightJacket now available in 4.2, IDK? Also, that function is not used for text replacement but to temporary store devices in StorageUtil for quicker removal. Therefore, every time the mech suit is equipped players get the error box at the end of that function, which can get annoying after a while. Ah right! I get it! Be careful not to confuse "occupied slots" with "used slots". The main device keyword should always be the "main device type" (e.g. the one your NIF is using), regardless of what other DD slots the item occupies. You can block any number of DD slots you want by putting on the additional keywords, but the one in the script should be the "main type", if that makes sense. E.g. If you make a belt with built-in plugs, pick zad_DeviousBelt as the device keyword and add the two plug keywords on the rendered device, in addition to the belt one. There are numerous devices in DD implemented that way. 14 hours ago, Inte said: Actually in DDi 3 it was much simpler than that. All you had to do to is to call these functions after equipping the armbinder, DisableStruggling() - It will... well disable struggle escapes, DisableDialogue() - It will remove the dialog where any NPC can let you out of the armbinder, and the best part, it worked with any armbinder, new or old. Yeah, but IIRC, to get that done, you'd have to clone the entire armbinder AND all its scripts, because that function was called from the effect script. That's not exactly simple! 14 hours ago, Inte said: So, having a centralized dialog option that all mods would have access to use and instead forcing each of them to create their own dialog option would prevent having 50 different dialogs from 50 different mods, how? Show me a mod that provides just that one dialog feature* nothing more, and I will gladly use it and shut up about this, and that is to say nothing about the extra LO slot for a feature that we already had. Devious Helpers is pretty much what you want, then. 14 hours ago, Inte said: Personally, I thought you’d be using DCL, no? Yes, I do! I use Devious Followers too, because its help dialogue is totally different from DCL's and adds another kind of fun risk. 14 hours ago, Inte said: After the elbowbinder is equipped the arms go in, then they pop out (no hands) then they go back in. This repeats about 3 times and in the end they stay in as they should. Oh right. I have seen that effect. I am not exactly sure what's causing it, tbh. I haven't really investigated it all that much, because it's purely cosmetic. I will have another look. 14 hours ago, Inte said: IDK, I think the previous system (DDi 3) worked fine for that. There was at least one mod that brute-forced quest devices off the player, so I felt the need to implement quest devices a bit more robust.... ? I will have a look at the belt messages, too.
Kimy Posted April 30, 2019 Posted April 30, 2019 10 hours ago, Lupine00 said: Some kind of debug menu feature to remove devices from NPCs would be handy. e.g. I accidentally traded Maiden's Shield to Chloe. I wanted to remove it from her, as I didn't intend to put her in it. I couldn't seem to remove it via the console. I removed the device and the render device, but the render device would reappear after every cell change. I will consider it! 1
OsmelMC Posted May 1, 2019 Posted May 1, 2019 I notes a issue whit Creature Animations in DDi 4.2 so i made changes in the code and works fine for my this is the file if some on like to use. DDi v4.2 Creature Animation PATCH (2019_04_25).7z
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now