Jump to content

[WIP] Furniture Interaction Framework - for NPCs and Player


Recommended Posts

Ah, thanks. How did i not found this by searching for "sexlife" ...strange.

looks interesting, and it seems that some of its features are/will be also duplicated by my mod (namely making npcs do stuff on their own) - could be beneficial for both if we'd maybe coordinate somehow, i'll keep it in mind.

Link to comment

Ah, thanks. How did i not found this by searching for "sexlife" ...strange.

looks interesting, and it seems that some of its features are/will be also duplicated by my mod (namely making npcs do stuff on their own) - could be beneficial for both if we'd maybe coordinate somehow, i'll keep it in mind.

 

that is music in my ears ! :D :D :D

Link to comment

Progress report...

 

Reinstalled the game and the few basic mods i am using during development (including newest Zaz anim pack 605).

Player doesnt get pushed around anymore - unless after loading a save where he is still actively participating in some action, but that happens to NPCs too, and i am positive i can fix that by reseting actors position after loading) - maybe cleaning and reinstalling helped? I really hope so (keep your fingers crossed).

Was afraid that updating Zaz could introduce some issues with my mod, but so far so good, and it even seems some small anim glitches i had before, are gone or at least much less aparent.

 

Apart from that, no changes since last report.

Now i am going to redo the voice plugin to reflect the new system based on ProcessTrapHit, and then i'll probably continue with implementing and tweaking of few basic interactions and test all possible types.

Dont wanna promise anything yet, but right now it looks that a first alpha release may happen soon.

Link to comment

Finally! after almost 20 hours of fiddling with dialogs, the first voice category is finished and works very well.

16 more categories to go (i am almost sorry i even got this idea :-)), but those should go faster now, and maybe i will merge few of them into one.

 

Anyway, those voices sound so good it surprised even me.

Ppl who tend to keep things at least a little lorefriendly, will be very pleased i think, and the rest... well, they can always use sexlab sounds or some custom voice plugins (but thats near the bottom of my feature list, so dont expect support for that in the first release).

Link to comment

Working on the random NPC interactions controller, and having a small problem, or dilema...

 

How to check if given actor is available/allowed to have particular or any interaction.

...i guess it should be specified inside every 'interaction' definition, but how?

Should it be based on a race, so i can then use GetRace() on actor and compare?

But what about custom races... hypothetically, i can create a new race, which has the same properties as an orc race (skelton/animation-wise), but such racemod wouldn't pass this check, unless my framework (or particular interaction mod that extends the framework) "knows" about it.

Would there be some way to get around this somehow?

...its not a shopwstopper, but i'd like to find some neat, flexible, and universally working way.

Link to comment

Hi Roggvir, this mod is going to be a great addtion to the game and will allow for a whole new experience. I have been looking for something like this that can provide an ingame activity comparable to SecondLife. I love to do my own ingame scenarios and create scenes for videos and graphical stories and this will be great. I have used oli3d's bondage furniture mod in the past, but unfortunately is has a couple of problems with NPC positioning, as you mentioned in this thread. I use Jaxonz Positioner for furniture positioning and that works great. Adding animations will be huge for my purposes. Really looking forward to this. Thumbs up!

Link to comment

 

Also, how do i check if an actor is restrained by the SetRestrained() command?

Same goes for SetDontMove() ...i need to ignore actors having any of these set.

 

Should be GetRestrained(), returns 1 if restrained.

 

 

Well, yeah, thats what i'd expect, but such function is not listed on CK wiki, and my Papyrus compiler doesnt know it either, does it work for you???

There is a console or conditional function with that name, but you cant use those from a papyrus script.

Link to comment

 

 

Also, how do i check if an actor is restrained by the SetRestrained() command?

Same goes for SetDontMove() ...i need to ignore actors having any of these set.

 

Should be GetRestrained(), returns 1 if restrained.

 

 

Well, yeah, thats what i'd expect, but such function is not listed on CK wiki, and my Papyrus compiler doesnt know it either, does it work for you???

There is a console or conditional function with that name, but you cant use those from a papyrus script.

 

 

Oh, hm. No idea then.

 

As a work around, if you're the one setting restrained and dontmove, you can maybe make an array and store the references there, then directly check the array?

Link to comment

Oh, hm. No idea then.

 

As a work around, if you're the one setting restrained and dontmove, you can maybe make an array and store the references there, then directly check the array?

 

 

Well, thats the problem - its not me who might be setting those flags on actors, but other 3rd party scripts may do it and i have no way knowing.

If i happen to try to use such actor, depending on when and how, it might deadlock the interaction thread and that could be annoying (players can still release/reset such threads from the MCM menu, but thats the last resort thing, that shouldn't be ever asked from players in my perfect world, so i would like to find a way).

Link to comment

Progress report...
 

  • Working on sounds
    So far added 3 voice categories, last one still needs to be checked and tweaked.
    Number of fitting sounds is rather limited for some voice types, but fortunately what i need in that category are mostly breathing sounds and such, so i can safely copy them from other voicetypes and in the game it wont be that bad - there isnt much difference when it comes to the breathing sound of a nord woman vs. redguard woman, etc..
    It sounds ok (in my opinion its better than any sounds provided by other mods i tried so far - and its lore-friendly).
     
  • Tweaking and randomizing the interactions (5 so far)
    Starting with pillory, which became my trusty test subject.
    Implemented and tweaked the Zaz candle wax 'torture', neatly randomized, and with perfectly tweaked voices (its the best one so far i'd say. Kudos to Bethesda for recording quite fitting sounds that i could abuse :-)).
    Pillory sex still needs some tweaking, because some animations are too fast for the sounds to keep up, but in general it works, it just needs a bit more love to make it as good as can be.
    Broom anim is also mostly ready, maybe i'll revisit it later to correct a bit offset audio.
    Caning/whipping didnt change much and doesnt need any audio timing tweaks because the game takes care of that without any need for scripting.
    Spanking needs some audio timing tweaks and adding of some slapping sounds, which i am afraid i wont find in vanilla game, so we'll see about that yet.
    After i am done with these, i am gonna move to some bed animations/interactions - i believe it will reveal a need to make yet some more alterations to the code, so the sooner i get to it, the better.

Well, thats about it, apart from some unmentioned scripting work (actually it was quite a number of tweaks, mostly concerning player interactions, some thread controller optimizations, and other stuff).

 

I am quite happy, because there are no outstanding issues that would need fixing, which is a relief after all this time struggling with ...almost everything.

Link to comment

Progress report...

  • Wasted some time trying to fix unfixable

    Tried to find solution or fix for the "actors in furniture sometimes play furniture entering animation/blending when player enters the cell".

    Some real gurus already tried to find out whats going on, but without any success. So, i am finally moving on.

     

  • Wasted some more time with pillory and its IsFurnitureInUse() issue

    The function should return true as long as somebody sits in the furniture, but with zbfPillorySingle it returns true only for few seconds at the beginning,

    and then it starts returning false - even if the pillory is still occupied.

    Again, couldn't find what the problem is, spent too much time with it already, so ..moving on.

     

  • Implemented interactions as spell based

    I hate spells :) but i couldnt find a better way to define and run interaction scripts from outside of the framework (to allow the expected modularity).

    So, interactions are now started by a script casting spells with attached activeMagicEffect script.

    It sounds ugly (at least to me), but its actually pretty neatly done, and works perfect.

     

  • Added three sample interactions for Pillory

    More will follow shortly, of course also for other objects.

 

...in the upcomming hours, i will update first post with some fresh info on current implementation, how it works, how to register custom furniture with anims and interactions, etc.

Still not download though (not until also the system of AI Packages gets finalized).

 

 

I know NOTHING about programming or coding but just a thought...

How does SLab know when there is a bed nearby? It actually asks you if you want to use it or not so..  could emulating that "behaviour" but with chairs, pillory, tables, etc help you?

 

Just my 2 cents, hopefully i am not pointing out the obvious :s

Link to comment

 

 

Progress report...

  • Wasted some time trying to fix unfixable

    Tried to find solution or fix for the "actors in furniture sometimes play furniture entering animation/blending when player enters the cell".

    Some real gurus already tried to find out whats going on, but without any success. So, i am finally moving on.

     

  • Wasted some more time with pillory and its IsFurnitureInUse() issue

    The function should return true as long as somebody sits in the furniture, but with zbfPillorySingle it returns true only for few seconds at the beginning,

    and then it starts returning false - even if the pillory is still occupied.

    Again, couldn't find what the problem is, spent too much time with it already, so ..moving on.

     

  • Implemented interactions as spell based

    I hate spells :) but i couldnt find a better way to define and run interaction scripts from outside of the framework (to allow the expected modularity).

    So, interactions are now started by a script casting spells with attached activeMagicEffect script.

    It sounds ugly (at least to me), but its actually pretty neatly done, and works perfect.

     

  • Added three sample interactions for Pillory

    More will follow shortly, of course also for other objects.

...in the upcomming hours, i will update first post with some fresh info on current implementation, how it works, how to register custom furniture with anims and interactions, etc.

Still not download though (not until also the system of AI Packages gets finalized).

 

 

 

I know NOTHING about programming or coding but just a thought...

How does SLab know when there is a bed nearby? It actually asks you if you want to use it or not so..  could emulating that "behaviour" but with chairs, pillory, tables, etc help you?

 

Just my 2 cents, hopefully i am not pointing out the obvious :s

 

Well, to be honest, imo you are pointing the obvious, but i appreciate it anyway (one never really knows what can help until one tries :)

...but you got me confused, because how does it relate to my post you replied to?

 

Anyway, regarding finding any kind of furniture...

Several ways are available, but none of them seems to be much good in my case.

Basicaly, you can search for ONE type of object or for a LIST of types, both in given radius or for the closest one.

It works ok when searching for only one, or few object types, but i need a system that can potentially handle much more types in very short time (2 seconds and most, even that can be annoyingly long in some situations) - which seems impossible, especially when you consider the situations i need to use this for.

 

One situation is finding ALL available object types near player.

Its for enabling various player dialog choices, so i need to know if ANY of the usable object types are anywhere near player.

That is several types of chairs, several types of tables, several types of beds, several types of stone slabs, several types of walls (but i am not sure if i can even detect those yet), several types of fence, etc., and then all special objects like those in Zaz Animation Pack.

Thats a LOT of different objects types, and i need to make the applicable dialog choices available fast, because its very annoying if you have to wait several seconds until the dialogs are available to you, every time you move around (even within same interior cell).

Right now, i think its impossible to do this fast enough with any functions currently available in Vanilla game or SKSE.

So, after i am done with other features, i will do some research whether i could achieve this via an SKSE plugin i could write - if not, then i would have to ditch the dialogs i made for this purpose, and use a fallback method based around cursor reference changes.

Thinking about it again, maybe that would be the best way anyway?

...allowing player to press some key when looking at specific object would make some script set a reference to this object, determine its type and set the corresponding global variable to enable particular set of dialog choices applicable to this object,

or without talking, player could then look at some NPC/follower and press that key again, which would make the actor assume some default pose on/around this object and then player could start any of the applicable interactions via enabled dialog choices.

Or the other way around, first talk to the NPC and say "Get on that...", then point on the objects and press the key.

 

Another situation is finding these objects for random NPC interactions.

In this case the speed of finding these object doesnt really matter, because its not making player to wait for anything, as he is not involved (or even if the is to be involved, the search happens prior to player's involvment).

This situation is not about "finding the fastest way", but more like "finding the right way".

Not that it would be particularly difficulat, but i yet need to do some more thinging and decide how i am gonna do this in terms of structure or program logic.

Currently i am using very simple purely random-based system implemented in the main "furniture framework" quest script.

Every two seconds, it simply iterates over all threads having some actor already assigned, but not being animated as there are no other (co)actors assigned yet.

If such thread is found, FindRandomActorFromRef() is used to find random actor.

If a random actor is found, it checks his availability (not busy interacting in other threads, not a child, not paralyzed, not in dialogue with player, not player's teammate, not arrested, not...whatever, and also not having a special fatigue magic effect that gets applied after every interaction and lasts 2 minutes to prevent the same actor being selected again and again right after he finishes his interaction).

If the randomly selected actor passes all checks, he is assigned into that thread, and framework takes care of the rest.

If the actor didnt passed any of the checks, the script immediately calls FindRandomActorFromRef() again to get another actor (which could be the same one - for all we know, there may be only ONE actor around anyway, but we dont care - at worst he wont passes the checks again), which can be repeated up to 5 times for every thread we are being iterated over.

Obviously, this is just a temporary solution i am using for testing, it needs the player to send npcs into some furniture first, and the random actor availability checks are also basic and doesnt reflect actors preferences, arousal, or anything else you may think would be cool to take into account.

Another thing is, this works only within cells that are currently loaded, but i'd like to make it so when you arrive somewhere even for first time, there should be something happening (of course, within some logical and probability constrains), but i am not yet sure how to do that (maybe i'll have to use scenes for this).

As you can see, i still need to do a LOT of thinking about how to do this.

 

 

Anyway, see? pointing the obvious can be sometimes beneficial too, even for a little brainstorming, so thanks :)

Link to comment

Ok I don't know if it can be done but you know the feature where we order a compagnon to do something (the cursor change and we point the item we want the follower to interact with)

and we would get a nice hybrid of dialogue and pointing. Removing the need of scanning

You can also add a book listing the "usable furnitures" (and how to spawn them if needed)

Link to comment

Ok I don't know if it can be done but you know the feature where we order a compagnon to do something (the cursor change and we point the item we want the follower to interact with)

and we would get a nice hybrid of dialogue and pointing. Removing the need of scanning

You can also add a book listing the "usable furnitures" (and how to spawn them if needed)

I was using the do-favor feature at the very beginning, but there were some disadvantages, and things that rendered such way unusable:

  • it needed a script running on every furniture

    To detect when actor "sits in" or activates the furniture, so we can assign him into a thread alias, and so we can proceed with whatever we want to do next as with enabling dialog choices for furniture specific interactions, etc.

     

  • It required player to do more than with current system

    Currently, player engages in a dialog, selects a choice "get into that pillory", and that's it.

    With do-favor, player engages in dialog, selects a choice "do something for me", then he had to point at the furniture and press E - less immersive, and slightly more annoying because of the additional pointing and pressing the key.

    Of course, if i eventually decide i cannot keep the current system (for reasons i mentioned before), and replace it with a system based on cursor reference changes, then it will be basically same as the do-favor, but still better because do-favor doesnt work (furniture scripts everywhere, etc.)

     

  • It wouldnt look good for some objects

    Take a chair for example, if you use do-favour, the NPC will go there and sit on the chair, but we dont want him to be sitting right? we want him to for example kneel on it while leaning over the backrest and get fucked from behind, right?

    So, do-favour would result in awkward movement consisting of sitting first, then getting up again, and then entering the required pose.

    With my current system, or even with the fallback based on cursor ref change, the actor will assume the desired pose right away.

     

  • Most importantly, it wouldn't work for all objects

    Anything that is not a "furniture" (fences/walls/etc.) cannot be activated, so the do-favor wouldnt do anything because it relies on "activating" things.

So, do-favor is not the way to go.

Link to comment

Progress report...

 

Working on those voice dialogs (especially the pre/post action things that actors say), i decided i need to take a more "scientifical" approach after i noticed that some races or npc types have very few topic infos making them repeat the same things over and over or keeping them silent - not much immersive.

So, believing there must be more kind of "hidden" in various dialogs or quests that doesnt seem suitale or didnt catch my eye, i exported all the dialogs, imported all those records into a database, and now i am going through the records and marking those i deem usefull.

 

8499 voice topics already reviewed, 25930 to go.

 

I already mass-excluded some based on containing various keyword, like names (addressing specific person), etc., but as you can see thats not enough.

I still need to narrow it down more, because this is too much to go through for one person, maybe i'll start with excluding any that contain more than 15 words, or something like that.

 

Link to comment

I dont know if this matters or not or if you know about it or if it even helps :o. But since all the NPC's in Skyrim can lean on a wall or a pillar maybe you can use that as reference on how to make the animations ?.

 

(Personally I dont know what the hell I am writing so that's that lol...)

Link to comment

I dont know if this matters or not or if you know about it or if it even helps :o. But since all the NPC's in Skyrim can lean on a wall or a pillar maybe you can use that as reference on how to make the animations ?.

 

(Personally I dont know what the hell I am writing so that's that lol...)

 

The leaning on a wall/pillar, or leaning over railings that you're talking about, is done automatically via NPC Idle package, which makes use of an "idle marker" - it's completely unrelated to the actual wall/pillar/railing, the NPC will do that as long as the marker is there even if the wall is not.

 

Anyway, i dont have any problems regarding making NPCs play any animations wherever and whenever i want, so i am not sure what you mean... but thanks for trying to help, i do appreciate it.

Link to comment

Aw I am so useless *sob*.

 

Well.. Good luck Roggvir :) this framework might become the 2nd most important mod next to Sexlab Framework if you can manage to pull it off :).

 

Also I am pretty sure alot of great modders here can help you out, just ask them in PM if you are stuck :) they might be able to help or not. Who knows any kind of pointer even if its useless might turn out to help you out later on the road :)

Link to comment

Finally done with going through all of the 34K dialog topic infos. Selected 1461 that seemed usefull for various situations, now i am gonna actually listen to these selected few and remove any that do not really fit (i suspect there are also many duplicates - dont understand why, so that should also shrink the number significantly).

Then i am gonna sort it into categorized dialogs, and then back to the real work.

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