Jump to content

FNIS for Modders / FNIS 4.0 [WIP]


fore

Recommended Posts

This thread is for Modders and Users interested in Animation Modding with FNIS
 
PLEASE DO NOT POST User Installation Problems here. For user problems go to the FNIS Nexus thread
 
Status:

 

FNIS 4.1 Experimental     (Update, November 22)

  • Patch which MIGHT solve some Load Game CTDs

 

 

FNIS 4.0 (final and finally) is released (October 02).

  • Supports creature animation definitions
    See FNIS Zoo as the first custom creature mod, and example on how to use the creature part (scripts!)
     
  • Supports furniture animation definitions like
        fu FURNITURE1 FURNITURE1_Enter.hkx FURNITURE1_Loop.hkx FURNITURE1_Exit.hkx
    or with 1 AnimObject
       fu -o FURNITURE2 FURNITURE2_Enter.hkx FURNITURE2_Loop.hkx FURNITURE2_Exit.hkx AnimObjectAxe
     
  • Supports arm offset animation definitions like
      ofa BoundArms BoundArms.hkx
    or with 1 AnimObject
      ofa -o BoundArms BoundArms.hkx ShackleAnimObject
     
  • "-st" (sticky) option for type "o" (AnimObject) animations. This will prevent unequipping of AnimObjects at the end of the animation.
    AnimObject will be unequipped with the next (Skyrim) AO animation. But unfortunately also (for unknown reason) with EVERY FNIS animation.
     
  • AnimVar definition of Animation Varaible (behavior variables) like
      AnimVar MyVar1 INT32 1
    These variables are planned for future releases to be used as animation condition. But right now they can come handy as deposit for Actor Valuses (AV)

 

Skyrim Animation Background:
In Skyrim animations only work when they are integrated with the Havok Behavior Tool (HBT) This tool creates so-called Behavior files, like the ones in data/meshes/actors/character/behaviors. Behavior files define all necessary logic around animationsLike the events necessary to start or interrupt an animation, blending between 2 animations, conditions, timing, .... Unfortunately, we have neither the right version of HBT available, nor Bethesda's animation project files which would allow us to modify behaviors. We can only "hack" into the existing behavior files. That'S what FNIS is doing.
 
But behavior files are really HUGE. Behaviors for 3rd person characters, transformed into xlm format, are about 1.2 million lines. Undocumented, and without any debugging or testing support.
 
Tools:
hkxcmd for converting behavior and animation files from .hkx to .xml, and back
CondenseBehavior for presenting Behavior contents in a more comprehensible format
 
FNIS 4.0 planned enhancements:
  1. creature animations for custom creature races
  2. AnimObjects for creatures (selected creatures only)
  3. animationdriven animations: allows characters to move as defined by animations (and not by NPC packages or PC movement keys)
  4. sequenced animations on furniture
 
How furniture animations work:
Almost all furniture animations work through sittarget packages.
  • with FNIS create a new furniture animation (format will change!)
FU <AnimEvent> <AnimFile Enter> <AnimFile Loop> <AnimFile Exit>
This will 2 AnimEvents (<AnimEvent>_Enter and <AnimEvent>_EnterInstant). Exit event is always "IdleChairExitStart")
  • define a new furniture object with a different keyword(e.g. "isMyFurniture")
Note: for furniture without necessary mesh (e.g. chair or bed) I prefer a modification of the "SearchChest" furniture. This allows direct accass without any necessary character turns.
  • in CK Animations -> 0_master.hkx -> ActionActivate -> ActivateRootChar -> Chair define a new set of 4 Idle Animations. You can use IdleCrouchedPray as example. THe first Animation contains your new keyword as condition. Use your generated FNIS AnimEvents appropriately.
Note: If you copy/past/move existing Idle definitions, make sure you clean your mod with TESVEdit afterwards.
 
Link to comment

..from ZaZ animation thread.

 


Very welcome, Arrok. But I'm not talking about the skeleton.nif, I'm talking about the AO nif. Each AO nif has a NiStringExtraData to the bone the AO i attached to. Mostly AnimObjectR for items held in the right hand. But I have also seen the Magic Node. But as I said, I have no idea how you do this, how you would place a chair where you want it.

 

If you use a real chair, or AO, depends what you do. Both have a disadvantage. The real chair needs to exist, because creating and deleting one every time you run the animations will cause save bloats. This is not the case with AOs. But there you need to define your animations in a way that doesn't move the chair with the body.

 

In any case, when you use a Sequenced Animation it should look like

 S -o AnimActor1stage1 AnimActor1stage1.hkx AnimObjectAnimActor1stage1

(uppercase "S")

 

The non-optimized SA version you only need if you remove an AO between 2 stages, or change headtracking in between.

 

But I want to come back to the furniture animations I want to implement for FNIS 4.0. Furniture animations are not only used for bed or chair, they are used everywhere a character needs to do an animation at a precise spot and angle. So mining and smithing are furniture idles, and even the Telvanni tower lift in Dragonborn.

 

So I think furnitures will become THE choice to make sex animations in the future. But as I said, they are quite tricky in behaviors, and modders will have to spend some additional effort to define them in the CK.

 

 

Yes, definitely not a real chair,..has to be AO. Its ok if the chair moves with the actor,...as the animation will have the actor stationary in a sitting position.  It needs to appear (just like the mining pick during mining animation) during the animation, and disappear when the animation ends.  

 

Alternatively, the chair could even be an equippable armor applied during the animation.

 

I'm gonna be looking into getting this to work,...and checking out FNIS 4.0.

 

Thanks again. 

 

 

 

Edit: Ok, I found out a good bit about what I need to do to get the chair positioned,...like you said the AO bones.  L&Rhands,....the head, and there is one more at the root node (being the one probably most suitable seeing as the root wont be animated,...and the others may.  
 
Also guessing the linking of the chair mesh and texture to the animobject node needs to be done via esp. Unless I can list the default vanilla chair as an animobject without the animation requiring a real chair nearby.. (testing this now).  
 
 
.....on an unrelated topic
 
do you have plans to extend FNIS beyond character behaviors in the future? I know people would like to see custom werewolf and vamipre lord animations. Idk how hard that'd be to incorporate into FNIS or if its even possible. But i'd like to see those behaviors hacked one day in Skyrim's lifetime.
 
Edit 2:
 
post-2323-0-31656800-1368210347_thumb.png
 
 
Ok I got the chair rigged to an animobject node,....but I think a little guesswork is gonna be involved when I load Skyrim with this object,....probably going to have to adjust the bone position and keep checking in skyrim to test alignment.  I dont think I would be able to import the mesh positioned perfectly and attached to the bone in 3dsMax the way it is in Skyrim. Mainly due to the fact I just attached it while the mesh was at the origin.  (default import).
 
 

 

Link to comment

I'm sorry, but I have really no idea how to make AnimObjects. To me they look like normal nifs, with an added NiStringExtraData for the bone. Isn't it possible to make everything with nifskope?

 

IS HERE NOONE HAVING EXPEREINCE making AnimObjects? Maybe you ask cotyounoyume. His Estrus objects are nothing but AOs.

 

And I don't have any plans for other creatures. In principle, it should not be that much different from character behaviors. But I'm scared by this sheer amount of different creatures, and all that testing effort involved.

 

But maybe I can lure someone else into doing these kind of things with this thread.  :)

Link to comment

first generated furniture animations are working. But usual parameters (AnimObjects, blend time, head tracking, ...) still needs to be integrated.

 

Wait, so furniture anims can be played with AOs?! Nice!

 

This will 2 AnimEvents (<AnimEvent>_Enter and <AnimEvent>_EnterInstant). Exit event is always "IdleChairExitStart")

 

Does it mean that default Exit event will be always used without an ability to add our custom ones?

Link to comment

 

Wait, so furniture anims can be played with AOs?! Nice!

 

Blacksmithing animations are furniture with AO

 

 

 

This will 2 AnimEvents (<AnimEvent>_Enter and <AnimEvent>_EnterInstant). Exit event is always "IdleChairExitStart")

 

Does it mean that default Exit event will be always used without an ability to add our custom ones?

 

 

This is exactly why I started this thread. Furniture animation are made VERY specific. They all follow some pattern. And I'm unsure if you guys really want it that way. Although I don't know what else I gonna do, if you don't like it.  :)

 

Like this 3 animations & 3 AnimEvents pattern. Beth stricly follows this, even in cases where they don't need everything. Like the searchTable animation works without enter and exit animations. Still they use dummy animations (mt_idle) and do the whole structure for 3 animations, but use a different startState to avoid the entry animation.

 

The predefined Exit event seem to be necessary to run the exit animation when a sittarget package is terminated. I think that was the result of one test, when I unknowingly made a furniture animation with a custom exit event. This common event seems to trigger something necessary for the end. But I don't think this is a disadvantage. It will still start your custom exit animation.

Link to comment

I'm sorry, but I have really no idea how to make AnimObjects. To me they look like normal nifs, with an added NiStringExtraData for the bone. Isn't it possible to make everything with nifskope?

 

IS HERE NOONE HAVING EXPEREINCE making AnimObjects? Maybe you ask cotyounoyume. His Estrus objects are nothing but AOs.

 

And I don't have any plans for other creatures. In principle, it should not be that much different from character behaviors. But I'm scared by this sheer amount of different creatures, and all that testing effort involved.

 

But maybe I can lure someone else into doing these kind of things with this thread.  :)

 

Yea they're normal nifs. Just flagged in the CK as AO, thus only used during animation. Don't sweat it Fore, you were more than helpful. Thanks a ton. I pretty much have it figured now.  And thanks for the reference, ill msg cotyounoyume if I hit any snags.

 

Thanks again for FNIS, 4.0 looks great. Can't wait. :D

Link to comment

FNIS 4.0 planned enhancements:
  1. furniture animations: used for all animations which need to be executed at a certain position and angle. Like chairs and beds, but also mining smithing, searchchest, and even tzhe Dragonborn Telvanni tower lift.
  2. arm offset animations: changing the arm position while walking, running, turning, showrace, talking, standing. Used for basket holding, as well as for bonds.

1) and 2) don't work in seperate behavior files, and need to be integrated into mt_behavior.hkx. But since Bethesda will not release any more DLC, I have changed my strategy, and modify standard behavior files as well.

 

just for clarification(so that i am getting this right):

 

Example sit/chair

 

if i go in the "CT -> Gameplay -> Actors\character\Behaviors\0_Master.hkx

 

there is an

 

ActionActivate\AcitvateRootChar\EnterChair:

char is translated from current position to the "sitdown" start position(for example turn his back to chair) -> SitDownAnimation

if you have 4 entrypoints (front-leftt-right-back - defined in the sittingfurniture.nif)

you need at least 4 Animations....

 

 

if the Actor is sitting, he can independently perform idles like drink, eat a bread, eating soup ...rubbing his nose..etc.

(defined in for Example: ActionIdle\NPCIdleRoot\NonCobatIdles\DrinkingRoot etc.) ... same animation can be used for standing idles, because they only manipulate  arms, chest and head.......(what is defined in the behaviorfile)

 

then:

ActionActivate\AcitvateRootChar\ExitChair

animation from sit to StandingIdle

 

All this is steered by keywords.

 

1. in the nif file of the sitTarget(furniture - entry:front/right etc)

2. in the behaviorfile(StartSit, SitIdle, ExitSit) that calls for the

3. needed Animations....

4. in CT by packages/scripts etc. via keywords....?

 

This means for AO, Example Estrus:

 

Start:

a. Force Actor to StartPosition

b. Tentacle(FromStandingidle) grabs Victim

c. do the common tentacle things(maybe different animation steered by randomnes/or script)

d. endEvent.....

 

For a ZazPillory:

 

Start:

a. Force Actor to StartPosition

b. Pillory open -> Actor gets in Pillory -> Pillory close(synced Animations)

c. do the common pillory things(another actor whipping victim....)

d. endEvent.....

 

etc...

 

To get it right - there are hkx-files that only play animations and there are hkx-files that manages this animations?

 

Moin

Oli

 

 

 

 

 

 

Link to comment

 

 

 

just for clarification(so that i am getting this right):

 

Example sit/chair

 

if i go in the "CT -> Gameplay -> Actors\character\Behaviors\0_Master.hkx

 

there is an

 

ActionActivate\AcitvateRootChar\EnterChair:

char is translated from current position to the "sitdown" start position(for example turn his back to chair) -> SitDownAnimation

if you have 4 entrypoints (front-leftt-right-back - defined in the sittingfurniture.nif)

you need at least 4 Animations....

 

 

if the Actor is sitting, he can independently perform idles like drink, eat a bread, eating soup ...rubbing his nose..etc.

(defined in for Example: ActionIdle\NPCIdleRoot\NonCobatIdles\DrinkingRoot etc.) ... same animation can be used for standing idles, because they only manipulate  arms, chest and head.......(what is defined in the behaviorfile)

 

then:

ActionActivate\AcitvateRootChar\ExitChair

animation from sit to StandingIdle

 

All this is steered by keywords.

 

1. in the nif file of the sitTarget(furniture - entry:front/right etc)

2. in the behaviorfile(StartSit, SitIdle, ExitSit) that calls for the

3. needed Animations....

4. in CT by packages/scripts etc. via keywords....?

 

This means for AO, Example Estrus:

 

Start:

a. Force Actor to StartPosition

b. Tentacle(FromStandingidle) grabs Victim

c. do the common tentacle things(maybe different animation steered by randomnes/or script)

d. endEvent.....

 

For a ZazPillory:

 

Start:

a. Force Actor to StartPosition

b. Pillory open -> Actor gets in Pillory -> Pillory close(synced Animations)

c. do the common pillory things(another actor whipping victim....)

d. endEvent.....

 

etc...

 

To get it right - there are hkx-files that only play animations and there are hkx-files that manages this animations?

 

Moin

Oli

 

 

I see. I need to make it clear that (at last for the beginning) I will only provide those 4 idle object animations (1 root, 3 leaves). Like the IdleCrouchedPray I mentioned, or the IdleJarlChair, or more than 90% of all furniture animations. 

 

The behavior for bed and chair is blown up because of all these options, and I don't think that this really is so necessary for the modding community. I don't say I won't make it if there is real need. But right now I want to concentrate on this simple, but usual case. 

 

Also there will be no "independantly" performed idles. This is what is called "offset idles" in the behaviors. And these offset idles are by far not as easy as can be assumed, and has been in Oblivion. It's not possible to call an animation, and overlay it with all animations executed from here on. I haven't looked into the sitting offset. But as you have noticed, I will provide arm offset behavior. From there I know, that these offsets require a very restrictive behavior definition. 

 

The offset animations (for this particular purpose, e.g. arm offset) are defined in one branch, and ALL animations which have to be overlayed with (walking, running, turning, talking, ...) are defined in another branch. And both branches are combined in one node with the offset setup.

 

So if ou want to define a specific offset to be executed for example on some skyrim animations, and some custom animations, this is theoretically not possible. In my understanding. And maybe I'm wrong. But that's what I have learned from arm offset.

 

The AO stuff I have still to implement and test. For the beginning I only plan to provide AO from the beginning of entry to the end of exit. So the AO would be loaded as soon as the character has reached position.

 

But what I would like to do in a later release is to make the furniture idles exactly as the sequenced animations.

Link to comment

 

..from ZaZ animation thread.

 

Very welcome, Arrok. But I'm not talking about the skeleton.nif, I'm talking about the AO nif. Each AO nif has a NiStringExtraData to the bone the AO i attached to. Mostly AnimObjectR for items held in the right hand. But I have also seen the Magic Node. But as I said, I have no idea how you do this, how you would place a chair where you want it.

 

If you use a real chair, or AO, depends what you do. Both have a disadvantage. The real chair needs to exist, because creating and deleting one every time you run the animations will cause save bloats. This is not the case with AOs. But there you need to define your animations in a way that doesn't move the chair with the body.

 

In any case, when you use a Sequenced Animation it should look like

 S -o AnimActor1stage1 AnimActor1stage1.hkx AnimObjectAnimActor1stage1

(uppercase "S")

 

The non-optimized SA version you only need if you remove an AO between 2 stages, or change headtracking in between.

 

But I want to come back to the furniture animations I want to implement for FNIS 4.0. Furniture animations are not only used for bed or chair, they are used everywhere a character needs to do an animation at a precise spot and angle. So mining and smithing are furniture idles, and even the Telvanni tower lift in Dragonborn.

 

So I think furnitures will become THE choice to make sex animations in the future. But as I said, they are quite tricky in behaviors, and modders will have to spend some additional effort to define them in the CK.

 

 

Yes, definitely not a real chair,..has to be AO. Its ok if the chair moves with the actor,...as the animation will have the actor stationary in a sitting position.  It needs to appear (just like the mining pick during mining animation) during the animation, and disappear when the animation ends.  

 

Alternatively, the chair could even be an equippable armor applied during the animation.

 

I'm gonna be looking into getting this to work,...and checking out FNIS 4.0.

 

Thanks again. 

 

 

 

Edit: Ok, I found out a good bit about what I need to do to get the chair positioned,...like you said the AO bones.  L&Rhands,....the head, and there is one more at the root node (being the one probably most suitable seeing as the root wont be animated,...and the others may.  
 
Also guessing the linking of the chair mesh and texture to the animobject node needs to be done via esp. Unless I can list the default vanilla chair as an animobject without the animation requiring a real chair nearby.. (testing this now).  
 
 
.....on an unrelated topic
 
do you have plans to extend FNIS beyond character behaviors in the future? I know people would like to see custom werewolf and vamipre lord animations. Idk how hard that'd be to incorporate into FNIS or if its even possible. But i'd like to see those behaviors hacked one day in Skyrim's lifetime.
 
Edit 2:
 
 
 
Ok I got the chair rigged to an animobject node,....but I think a little guesswork is gonna be involved when I load Skyrim with this object,....probably going to have to adjust the bone position and keep checking in skyrim to test alignment.  I dont think I would be able to import the mesh positioned perfectly and attached to the bone in 3dsMax the way it is in Skyrim. Mainly due to the fact I just attached it while the mesh was at the origin.  (default import).

 

If you set the pivot point for the chair the same as the pivot point for the animobject bone then you don't need to change anything. If you have a case where the animobject must move along only one or two axis I would look at the position functions from maxscript. I used the x and y position before to make the pole for a stripper animation follow the hand; the script I had running matched the x and y position of the hand, and ignored z movement of course to keep the pole from moving up and down. I just linked the pole to animobjecta I think and used that to preview the position of the pole; the pole must be exported by itself though, so it is for previewing only, to get it work in the game all you have to do is set the nistringextradata to be parented (prn) to the bone you want it to follow (animobjecta in my case). I haven't made anymore AOs but you can look at the pole I have there if you want to see how I set the string to parent my crap.

 

http://www.loverslab.com/topic/9125-mod-request-stripper-dance/

 

The only problem I've noticed though is that you can only have a single object for an AO which is annoying unless more than one actor is used together to create a sequence.

Link to comment

 

The only problem I've noticed though is that you can only have a single object for an AO which is annoying unless more than one actor is used together to create a sequence.

 

With FNIS 3.5 you can assign an arbitrary number of AOs. :shy:

Link to comment

hey fore, would custom movements that arent "offset" compatible be possible for now? I mean that they wouldnt need to be "overlaid" on anything since it would be just non-combat, non jump stance. Simply move up down left right.

Link to comment

Out of curiosity, I haven't been able to find any sort of documentation that explains the available options when creating the behaviors, other than what's listed at the top of FNIS_FNIS_List.txt and that leaves much to be desired in terms of explanation, though admittedly I haven't looked very hard outside of that txt file and skimming the nexus post for modders information. Currently with SexLab animation sequences I've been doing them like so: 

' Female Actor 1 '
s -a Missionary_A1_S1 Missionary_A1_S1.hkx
+ Missionary_A1_S2 Missionary_A1_S2.hkx
+ Missionary_A1_S3 Missionary_A1_S3.hkx
+ Missionary_A1_S4 Missionary_A1_S4.hkx

' Male Actor 2 '
s -a Missionary_A2_S1 Missionary_A2_S1.hkx
+ Missionary_A2_S2 Missionary_A2_S2.hkx
+ Missionary_A2_S3 Missionary_A2_S3.hkx
+ Missionary_A2_S4 Missionary_A2_S4.hkx

Then in scripts I'm just storing 2 idle arrays, one for each actor with their idles from above listed in order thensimply having both actors play the same slot of their array at the same time, and advancing to  playing the next array element on a timer/hotkey.

 

I have a sinking feeling I'm grossly misusing sequences here though, and that there is a much better way, as it seems like they could just as easily be a separate basic animations here and function all the same with how I'm using them.

 

Post animation the only way I've been able to get them out of looping the last animation in the sequence and reset is by pushing them over with havok so they have to stand up, all the vanilla reset idles I've tried don't seem to do anything to get them out of the loop.

 

I'm sure there's a better way, I just don't know what. I'm purely a programmer, animation and creationkit stuff is far from my forte.

 

Link to comment

Out of curiosity, I haven't been able to find any sort of documentation that explains the available options when creating the behaviors, other than what's listed at the top of FNIS_FNIS_List.txt and that leaves much to be desired in terms of explanation, though admittedly I haven't looked very hard outside of that txt file and skimming the nexus post for modders information. Currently with SexLab animation sequences I've been doing them like so: 

' Female Actor 1 '
s -a Missionary_A1_S1 Missionary_A1_S1.hkx
+ Missionary_A1_S2 Missionary_A1_S2.hkx
+ Missionary_A1_S3 Missionary_A1_S3.hkx
+ Missionary_A1_S4 Missionary_A1_S4.hkx

' Male Actor 2 '
s -a Missionary_A2_S1 Missionary_A2_S1.hkx
+ Missionary_A2_S2 Missionary_A2_S2.hkx
+ Missionary_A2_S3 Missionary_A2_S3.hkx
+ Missionary_A2_S4 Missionary_A2_S4.hkx

Then in scripts I'm just storing 2 idle arrays, one for each actor with their idles from above listed in order thensimply having both actors play the same slot of their array at the same time, and advancing to  playing the next array element on a timer/hotkey.

 

I have a sinking feeling I'm grossly misusing sequences here though, and that there is a much better way, as it seems like they could just as easily be a separate basic animations here and function all the same with how I'm using them.

 

Post animation the only way I've been able to get them out of looping the last animation in the sequence and reset is by pushing them over with havok so they have to stand up, all the vanilla reset idles I've tried don't seem to do anything to get them out of the loop.

 

I'm sure there's a better way, I just don't know what. I'm purely a programmer, animation and creationkit stuff is far from my forte.

 

cast one of the actor in a furniture.....?

 

Moin

Oli

 

Link to comment

hey fore, would custom movements that arent "offset" compatible be possible for now? I mean that they wouldnt need to be "overlaid" on anything since it would be just non-combat, non jump stance. Simply move up down left right.

 

Now that Bethesda will not release any new DLC, and therefore probably never will change standard behavior files any mor, we can do a lot of things that was too dangerous before. So I think it should be possible to make alternative animations for all kind of things. What you propose here already came into my mind. The problem for me is that things which might be a relatively easy hack (into mt_behavior) take much more effort when they have to be automated, for many different animation. 

 

So I will look into that after 4.0. It might be a little strange to use. Because apparently it's not possible to use a new AE, but by setting of behavior variables it should be possible to use  conditional transitions.

 

Out of curiosity, I haven't been able to find any sort of documentation that explains the available options when creating the behaviors, other than what's listed at the top of FNIS_FNIS_List.txt and that leaves much to be desired in terms of explanation, though admittedly I haven't looked very hard outside of that txt file and skimming the nexus post for modders information. Currently with SexLab animation sequences I've been doing them like so: 

' Female Actor 1 '
s -a Missionary_A1_S1 Missionary_A1_S1.hkx
+ Missionary_A1_S2 Missionary_A1_S2.hkx
+ Missionary_A1_S3 Missionary_A1_S3.hkx
+ Missionary_A1_S4 Missionary_A1_S4.hkx

' Male Actor 2 '
s -a Missionary_A2_S1 Missionary_A2_S1.hkx
+ Missionary_A2_S2 Missionary_A2_S2.hkx
+ Missionary_A2_S3 Missionary_A2_S3.hkx
+ Missionary_A2_S4 Missionary_A2_S4.hkx

Then in scripts I'm just storing 2 idle arrays, one for each actor with their idles from above listed in order thensimply having both actors play the same slot of their array at the same time, and advancing to  playing the next array element on a timer/hotkey.

 

I have a sinking feeling I'm grossly misusing sequences here though, and that there is a much better way, as it seems like they could just as easily be a separate basic animations here and function all the same with how I'm using them.

 

Post animation the only way I've been able to get them out of looping the last animation in the sequence and reset is by pushing them over with havok so they have to stand up, all the vanilla reset idles I've tried don't seem to do anything to get them out of the loop.

 

I'm sure there's a better way, I just don't know what. I'm purely a programmer, animation and creationkit stuff is far from my forte.

 

No, this is exactly the reason why there are SAs.It's easier to use and should have better result when these animations transition into one another, rather then ending one (basic) animation, and start the next one. Of course, the full effect of SAs you get when you use acyclic animations in between (automatic transition). But even in your simple case I think it's better to use an SA.

 

Animations can always be terminated by an SAE(IdleForceDefaultState).

 

EDIT: you find (a bit) more information under "Usage for Modders" towards the end of the description,

 

 

cast one of the actor in a furniture.....?

 

Moin

Oli

 

 

Each actor needs it's own furniture.

Link to comment

 

 

 

 

Animations can always be terminated by an SAE(IdleForceDefaultState).

 

EDIT: you find (a bit) more information under "Usage for Modders" towards the end of the description,

 

 

 

 

 

Is SendAnimationEvent(akTarget, "IdleForceDefaultState") considered safe in this context? The creationkit wiki makes me a bit hesitant to switch to using that to break animations what with saying "This bypasses the check on ObjectReference that prevents sending events to actors. If you use it to send an event to actors, you will most likely mess up the actor permanently as the internal actor data may no longer match their animation state." http://www.creationkit.com/SendAnimationEvent_-_Debug

 

Attempts have just doing actor.PlayerIdle(IdleForceDefaultState) or other idle reset sounding animations all seem to do nothing.

Link to comment

I think this CK Wiki statement is nonsense. I have read it before I wrote the FNIS Spells, and therefore used playidles. But ever since I use SAE in my test programs whenever it's possible, and it works perfect. And one of the early animation mods, Adult Show or Bathing Beauties (can't remember which), was also using SAE from the beginning.

 

So SAE is totally safe. Maybe, if you are raising an AE which is used as an "intemittent" AE in a chain of AEs you might get some side-effects. But these are behavior internal, and will never be stored in a save.

 

And of course you will not see any reaction on actor.PlayerIdle(IdleForceDefaultState). It will only set the actor in it's default state, which is the regular idle. Something he has prpbably performed anyway.

 

In fact, I had planned to switch the next FNIS Spells version from playidle to SAE. The big disadvantage of playidle is, that you have to define a property variable for each possible playidle, and assign the parameter. And I believe that script parameters play a role in save game bloats and CTDs after mod and skyrim updates. xp32 has told me her experience with PCEA instabilities after Skyrim 1.8. She thinks that very often Pinup Poser was involved. And what special about PP? An incredible amount of playidle and resulting property variables....

Link to comment

Right now I'm using separate script for each animation sequence, each with it's own idle properties. It's certainly a cumbersome method though, and one I spent forever trying specifically trying to avoid before feeling like I had no other choice. Using SAE event sounds like an interesting way around that, one to good to be true, being able to instead just build strings dynamically and passing that off to SAE. But still, heavily relying on anything labeled debug to perform an important parts in a production script makes me hesitant, not just in Papyrus but any language.

 

I'll try experimenting with it in a new branch though, switching to it fully over playidle would require a major overhaul of all my animation related scripts.

Link to comment

I think what that CK Wiki statement means is, in case you use SAE to trigger a certain event that has associated a certain variable, the SAE will not set the correct variable to reflect the animation state... For example:

 

the variable IsSprinting (probably a bool, I havent checked it on the xml). If you start sprinting, I'm assuming that bool will be set to true (and false once you stop). If you use the SAE, and trigger the sprint event, it may not set that variable, leaving it set to false (even then I'm not absolutely sure, because at least all vanilla events are able to be processed by the behaviour graph through SAE). But other then that I don't see how it could permanently screw. Also, since we are talking about FNIS generated behaviours, I dont see any worries at all for use SAE or not, because FNIS variables are not (and correct me if I'm wrong Fore) game breaking, they can hardly cause anything wrong to happen because they are custom. They dont set if you are swimming, sprinting, etc... the most they could do is set non default variables like isPooping, isFucking, isFarting, isPickingTheNose... Sending a SAE(IdleForceDefaultState), probably will even help to "restart" the graph and all the variables, because it tells the actor to go to the default state, so I see no possible negative side effects from that either.

Link to comment

Right now I'm using separate script for each animation sequence, each with it's own idle properties. It's certainly a cumbersome method though, and one I spent forever trying specifically trying to avoid before feeling like I had no other choice. Using SAE event sounds like an interesting way around that, one to good to be true, being able to instead just build strings dynamically and passing that off to SAE. But still, heavily relying on anything labeled debug to perform an important parts in a production script makes me hesitant, not just in Papyrus but any language.

 

I'll try experimenting with it in a new branch though, switching to it fully over playidle would require a major overhaul of all my animation related scripts.

 

I think the reason Beth doesn't use SAE is a design change during devvelopment. If you look into the CK Animation window, you will find several additional paramaters which are all not used any more. They wanted to add more data to idle objects then just the AE, but decided not to do. So besides the condition there is nothing left but the Idle Object / AE assignment.

 

And if you look into IdleMarker definitions (the only way Skyrim uses simple idles) you will see both Idle Object and AE listed, like pari.

 

I think what that CK Wiki statement means is, in case you use SAE to trigger a certain event that has associated a certain variable, the SAE will not set the correct variable to reflect the animation state... For example:

 

the variable IsSprinting (probably a bool, I havent checked it on the xml). If you start sprinting, I'm assuming that bool will be set to true (and false once you stop). If you use the SAE, and trigger the sprint event, it may not set that variable, leaving it set to false (even then I'm not absolutely sure, because at least all vanilla events are able to be processed by the behaviour graph through SAE). But other then that I don't see how it could permanently screw. Also, since we are talking about FNIS generated behaviours, I dont see any worries at all for use SAE or not, because FNIS variables are not (and correct me if I'm wrong Fore) game breaking, they can hardly cause anything wrong to happen because they are custom. They dont set if you are swimming, sprinting, etc... the most they could do is set non default variables like isPooping, isFucking, isFarting, isPickingTheNose... Sending a SAE(IdleForceDefaultState), probably will even help to "restart" the graph and all the variables, because it tells the actor to go to the default state, so I see no possible negative side effects from that either.

 

It's even less critical than that. Variable setting (and there are other Havok modifiers) are set AFTER the initial AE is caught. Only if you raise one of those AEs which are used by the behaviors for internal synchronizations there might be some effect. Although even that I have never noticed.

 

 

 

EDIT: I have just modified FNIS Spells from playidle to SAE. :)   Works like a charm. And the esp size was reduced from 33 KB to 20 KB. 

And, what I wasn't sure if it would work, I have dynamically created the strings for the AEs. A big advantage.

But as I said, the main effect I see is the reduction of save game overhead, and stability.

 

EDIT2: I just checked the mod "Dovahkiin Relaxes Too". This mod is full of idle calls. About 1/3 playidle and 2/3 SAE.

Link to comment

With SAE is it just properties you don't have you set? Or are you able skip setting the idle animation in creation all together? Leaving just needing FNIS generation and knowing the event name?

Link to comment

Well, as far as I know you must set events in CK because FNIS generation is just linking hkx animation files to idle names. Then in CK you define animation events from idles generated by FNIS. but im sure fore would explain it better.

 

[edit] i was almost right. /facepalm

Link to comment

Is there any advantage to use playidle over SAE? Can SAE handle sequenced animations comprised of 4+ idles?  

 

Also, when you say SAE doesn't need defined properties,...you'll still need an anim script per animation sequence I imagine, otherwise no quest scripts would ever access the idles, unless you list them.

 

Now if you didn't need to add animations to a resource script,...and just had to make the animation script (minus listing properties), I'd figure SAE would be way less hassle.

 

 

Link to comment

With SAE is it just properties you don't have you set? Or are you able skip setting the idle animation in creation all together? Leaving just needing FNIS generation and knowing the event name?

 

If you use SAE, then there is no need to define idles in CK at all. Which makes it a little more error prone, since you can misspell the AE name. But that's easy to figure.

 

Well, as far as I know you must set events in CK because FNIS generation is just linking hkx animation files to idle names. Then in CK you define animation events from idles generated by FNIS. but im sure fore would explain it better.

 

Not quite. FNIS is linking anim files to AnimEvents. The idle objects need to be defined only when you initiate idles through CK (idle markers, packages, quest idles). Or if you prefer playidle over SAE.  :shy:

 

Is there any advantage to use playidle over SAE? Can SAE handle sequenced animations comprised of 4+ idles?  

 

Also, when you say SAE doesn't need defined properties,...you'll still need an anim script per animation sequence I imagine, otherwise no quest scripts would ever access the idles, unless you list them.

 

Now if you didn't need to add animations to a resource script,...and just had to make the animation script (minus listing properties), I'd figure SAE would be way less hassle.

 

I don't see any advantage for using playidle over SAE. Not for "basic" idles, not for SA.

I have no idea if we can make use if the idle conditions when called from a script. That would be the only advantage I can imagine.

 

Now I don't understand your statement about "an animation script per animation sequence" and "quest scripts". You can call SAE from whatever script you like. Provided you have the id of the actor. And then you can even say something like Debug.SendAnimationEvent(akTarget, "FNISSPc" + n)

 

As I said. I just canged FNIS Spells from playidle to SAA, removed proerties and idle definitions, and reduced the (small) .esp size by 40%.

Link to comment

Archived

This topic is now archived and is closed to further replies.

  • 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