Jump to content

[IDEA] Devious Arms and Deviously Armed (and a request for help!)


Recommended Posts

I've been a big fan of Devious Devices for a while now, and just as much a fan of Deviously Cursed Loot. Despite my love for the mod, though, I've felt that there's been a disconnect. I either enjoy the kinky bondage, or I enjoy the game and combat. Sure there are plenty of great quest mods that I love, including Laura's Bondage Shop and Deviously Vanilla, but that's not the gameplay itself.

 

So, I and a friend of mine are working on a way to integrate kinky bondage into the gameplay experience by making 'Devious Arms' which allow the player to equip bondage onto enemies, or allow enemies to equip bondage onto the player.

 

Here's the scheme we're trying to get at:

    1. Player or NPC strikes with Power Attack with a Devious Arms melee weapon (no NPC at NPC. Only Player at NPC and NPC at Player, or I figure it'd create undue lag)

    2. Check if successful strike and valid target (who doesn't already have the appropriate devious device) -- if not, stop there and do nothing.

    3. Check to see if the target's wearing something in the appropriate slot and if so, remove it. (eg, attacking with a 'stick with a ball gag picture on it' would remove the ball gag slot's current piece)

    4. Apply the appropriate bondage gear (eg, attacking with that same stick would apply a non-randomized ball gag)

    5. Remove (one copy of) the weapon from the player or NPC inventory--that device has just been used.

 

     Then, I'd like to make them craftable and populate a few factions with what weapons I feel are appropriate. I'm not too worried about weapon models at this stage.

 

So, why this in particular? Well, I think it's lore-friendly. It only makes sense that if there are magically cursed bondage devices scattered around Skyrim, then not only would bandits and folks uses them as traps, but they'd want to use them as weapons too! And if bandits can use them, then the player should certainly be able to do so (among other factions).

 

- Additionally, it'd add a different sense of strategy to combat. Basic enemies would likely have, say, ankle cuffs, corsets, chastity devices and such which provide weakening but not debilitating debuffs, up to Bosses which may have gags, bondage mitts, armbinders and the like that make a fight much more risky.

 

- Likewise, the player should only have access to less debilitating gear early on, too. The ability to take a powerful (non-unique, of course) humanoid enemy out of the fight with a single swing of an armbinder shouldn't be given lightly. Eg, Iron/Steel smithing to weaponize leg shackles, and Ebony or even dragonstuff for some paw mitts, maybe.

 

Why heavy attacks only? Because I think it'd be wonderfully fun to smack someone around with a chastity belt if I didn't think my foe deserved wearing it.

 

That all said...

Unfortunately, despite having a decent programming background, I don't have a lot of modding experience. Devious Devices modding is clearly even more convoluted. We've made an attempt, but it's clear to me that we just need help and advice. We're currently working with Notepad++ and Creation Kit through Mod Organizer (1.3.11), and although I and my friend have the weapon/enchantment/magiceffect set up, the process of compiling the script we do have and getting it to run at all (even just to see what's wrong with the poor thing), are sorta' lost on us.

 

Link to comment

Figure I'd post an update after a day or two of work.

 

Alright! My simple very-testy test script compiles successfully (despite using MO with CK), but I have a few issues. I got some inspiration by looking at the magiceffects for one of Kimy's weapons in DCL, and two or three of my lines are similar. (The second commented out If statement with some modifications, and representing this as a magiceffect at all)

 

It's a dumb script with no nuance--it's only supposed to remove a helmet and equip a gag on any hit so long as the target is valid.

Scriptname darm_applygag extends activemagiceffect

zadlibs Property libs auto
Keyword Property ActortypeNPC auto
Keyword Property ArmorHelmet auto
Keyword Property ClothingHead auto

Event OnEffectStart(Actor akTarget, Actor akCaster)
	Actor plyr = Game.GetPlayer()
	;###Make sure that one of the actors is a player
	If akTarget != plyr && akCaster != plyr
	Debug.Notification("Player doesn't exist")
	Debug.Trace("DARM Player doesn't exist")
		return
	EndIf
	;###Make sure that akTarget is a valid target: Exists, is NPC or Player, isn't wearing a gag, isn't unique, essential, protected, child, animating (as per DD), or dead.
;	If !akTarget || (!akTarget.HasKeyword(ActorTypeNPC) && akTarget != plyr) || akTarget.WornHasKeyword(libs.zad_DeviousGag) || akTarget.GetActorBase().IsUnique() || akTarget.GetActorBase().IsEssential() || akTarget.GetActorBase().IsProtected() || akTarget.IsChild() || libs.IsAnimating(akTarget) || akTarget.IsDead()
;		Debug.Notification("Invalid Target")
;		Debug.Trace("Invalid DARM target")
;		return
;	EndIf
	If !akTarget
		Debug.Notification("Not a DARM target")
		return
	Elseif !akTarget.HasKeyword(ActorTypeNPC)
		Debug.Notification("Not a DARM NPC")
		return
	Elseif akTarget.WornHasKeyword(libs.zad_DeviousGag)
		Debug.Notification("Wearing a DARM gag")
		return
	Elseif akTarget.GetActorBase().IsUnique() || akTarget.GetActorBase().IsEssential() || akTarget.GetActorBase().IsProtected() || akTarget.IsChild() || libs.IsAnimating(akTarget) || akTarget.IsDead()
		Debug.Notification("Unique/Protected DARMit")
		return
	EndIf
	;###Check to make sure there's something in the head slot before removing it
	If akTarget.WornHasKeyword(ArmorHelmet) || akTarget.WornHasKeyword(ClothingHead)
	    Armor toremove = akTarget.GetWornForm(0x00000001) as Armor
		akTarget.UnequipItem(toremove)
	EndIf
	;###Equip ball gag onto target
	libs.equipDevice(akTarget, libs.gagBall, libs.gagBallRendered, libs.zad_DeviousGag, skipevents = false, skipmutex = false)
	Debug.Notification("Gag Applied")
	Debug.Trace("DARM gag applied")
EndEvent

 

I've managed to narrow down my issue to two spots:

 

First: For some reason, the Target doesn't seem to have any keywords (or worn keywords). I've tested this against imperials and bandits so far with no success, but as soon as I remove the '!akTarget.HasKeyword(ActorTypeNPC)' part, it goes through until my 'Gag Applied' notification.

 

Second: It doesn't actually apply the gag, nor does it remove the target's helmet. (That is, libs.equipDevice does nothing, and the prior If statement doesn't do anything at all.)

 

I feel like the second issue is part of the first, in that the Target doesn't have any keywords, but I have no idea what would cause this sort of weird problem.

 

Link to comment

Been waiting/brainstorming for something like this for a while now. Besides Cursed loot, Devious Followers (which i'm not keen on) or Devious Captures (I never lose fights anymore even at level 20!) - there's not much integration into Skyrim. Sometimes, I only find devious loot on bandits or the occasional trap, which I block with a lucky charm! (hee hee, me lucky charms!) *I have random events set very low*

I had made a request thread awhile back about Devious Wizards. It would be similar to something I had scripted in F:NV. In that case it was a spore plant that would equip the player with a face/thigh/body hugger upon hit. And this apparel item slowed the character down, debuffed SPECIAL but was removable after a time.
*Ahem* So my Devious Wizards idea, would have them throw spell spheres at you, dodgeable, that would equip stuff like Yokes, Armbinders, Gags.... hell even blindfolds! *Yikes!* that's a fight lost! If you had the keys on you, you could menu -> unlock -> continue Combat. But if not, you were going to lose.

Hope this project takes off nicely.

Link to comment

Deviously Vanilla does have something similar, namely the Wabbajack does this.

 

I considered creating a mod like this myself, but in the end I decided against it, because Skyrim really just isn't designed for it.

 

The main problem you're going to run into, is that DDi is very slow. For the DV Wabbajack, I set up a ModEvent to handle it, so the rest of the effects will run in time, but the devices themselves can apply quite late. During combat - especially with a larger number of enemies - scripts on actors tend to be slow anyways, because of threading (at least the way I understand it, native functions that aren't non-delayed or latent (check the CK wiki, if the function is not in either of those categories), always take at least 1 frame to return), with combat scripts running it might take multiple frames before your functions start, and DDi can delay the combat scripts.

 

During quests etc, this doesn't generally matter, since all that'll happen is you get a little pause between sentences, but during combat when you want scripts to complete fast, it can kinda screw up the game.

 

As for the script, I don't see anything necessarily wrong on the face of it.

I would use Actor.UnequipItemSlot() rather than using Actor.UnequipItem() and slotmasks.

Do you get any errors in the Papyrus logs? You might not have the properties set properly or something.

Link to comment

Well, it turns out that I'd actually missed a whole step! (the one where you have to go into the script properties in the magiceffect and do the keyword association) Right now the script works perfectly, except for removing the weapon after a successful attack (and runs fairly fast, too). Although, I've gotta' ask, what do you mean by the script screwing up the game during combat?

 

Ideally the foe/player will drop/unequip the weapon/armor associated with the device area before DD even gets involved, so that part of the combat script should be quick enough, though.

Link to comment
11 minutes ago, Axolu said:

Although, I've gotta' ask, what do you mean by the script screwing up the game during combat?

So, Papyrus uses threading (obviously) to allow multiple scripts to run on another script instance (Armor, Actor etc are all script instances in Papyrus). It only allows one script to access a script instance at a time, and pauses any other scripts running on it. Combined with the fact that any native function that isn't non-delayed, will run for at least 1 frame, this can cause some fairly major lag in executing scripts.

More on the CK wiki: https://www.creationkit.com/index.php?title=Threading_Notes_(Papyrus)

 

With combat mods installed, your probably going to have scripts running on all actors in combat fairly consistently (For things like injuries or staggering, all that stuff). A call to EquipDevice() from DDi makes a pretty significant amount of calls to functions in Actor, which can lock up the scripts from the combat mod.

 

Tbh it might not impact combat as much as I think it might, but that's something you would just have to test ingame.

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