The Basics of Poses and Gestures - ME3Tweaks/LegendaryExplorer GitHub Wiki
What are Poses and Gestures, and What Do They Do? (ARTICLE UNDER CONSTRUCTION)
In the context of Mass Effect games, Poses and Gestures are preset animations that can be played on actors during conversations. A Pose is an animation such as standing with arms folded or sitting in a chair, and a Gesture is a smaller movement, such as a nod of the head or a shrug. Gestures can be combined, blended and controlled in many ways to produce fluid character performances.
In order to work with animations, familiarity with the Package Editor is a necessity. Familiarity with Dialogue Editor and Matinee Editor is also strongly advised, as these animations are found and edited within InterpDatas, most easily visualised in conversations' Entry and Reply Nodes.
How Do They Work?
Animations are controlled within conversation nodes, and play at times defined by Keys. The best way towards understand how animations work begins with understanding how they are organised within the game, and what the namespace is.
For example:
- In ME3/LE3's
BioD_Nor_201Bridge_LOC_INT.pcc, Export 6701 is the folder for the conversationnor_joker_bridge_d_dlg. - Expanding this shows the conversation's
Node Data Sequence. - Expanding the sequence shows a list of things starting with "
KIS_DYN_".
These are Kismet Objects, and animations are contained within these. They are pieces of sequencing logic that instruct the game on what animations are available to use. In order for an animation to be used within a conversation, its Kismet Object must be present within the conversation's LOC_INT.pcc.
Breaking Down the Namespace
Export 492 is KIS_DYN_HMM_AM_ThinkingFrustration.
KIS_DYN tells us this is the Kismet Object. HMM tells us this contains animations from the Humanoid Male family, AM tells us it is an ambient animation, and ThinkingFrustration is the last part of the set's name.
Broadly speaking, animations are contained within sets, and these sets contain related animations.
By looking at this Export's Properties in Package Editor and expanding its Sequences tab, we can see all the animations this particular Kismet Object makes available to us:
HMM_AM_ThinkingFrustration_ThinkingFrustration_IdleThe basic pose itselfHMM_AM_ThinkingFrustration_ThinkingFrustration_EnterTransitional animation that helps to smoothly change from one pose to this oneHMM_AM_ThinkingFrustration_ThinkingFrustration_HandGestureA hand gesture specifically for use with this poseHMM_AM_ThinkingFrustration_ThinkingFrustration_ExitTransitional animation that helps to smoothly change from this pose to anotherHMM_AM_ThinkingFrustration_ThinkingFrustration_Twitch1Twitch animations are for breaking monotony if a pose is used for a long time
In addition to AM ambient poses, there are others. DL, DP, FC, and WI; at the time of this writing, these are not understood, but it is thought that D stands for Dynamic, and DP for Dynamic Pose.
HMM refers to animations from the Humanoid Male family, and HMF to Humanoid Female.
Looking at Animations in Context
Opening BioD_Nor_201Bridge_LOC_INT.pcc in Dialogue Editor, we can find Entry Node 93, "Hey, Commander! Check out my copilot!"
Opening this node's InterpData in Matinee Editor, we can see a list of things. Joker has some animations to do in this node. Expanding his Group's tab shows two Tracks:
Gesture -- global_jokerThese animations affect Joker himself, and there are 2 keys in this track.Gesture -- Joker_ChairThese affect Joker's chair only, and there is 1 key in this track.
Controls and Explanations
Clicking on global_jokers Track shows us a list of things:
m_aGesturesThis is a sort of subfolder that tells him what animations to play. Animations in here will play on top of anyPosehe's in.nm_StartingPoseSetThis tells him what set of animations he should look in to find thePosehe should begin this node with.nm_StartingPoseAnimThis tells him the exact animation from within the set to use.m_fStartPoseOffsetThis is the number of seconds he should offset the starting animation by. This can be useful to prevent "popping" between nodes.m_bUseDynamicAnimsetsThis is a boolean value that says whether or not an attempt should be made to mix this animation with others.ePoseFilterAlways set to NoneeStartingPoseAlways set to Nonen_nmFindActorThis specifies which actor should be using these instructions.m_aTrackKeysThis specifies the time at which animations will trigger. One key per item found inm_aGesture.
Expanding m_aGestures shows us each animation he will play. In this case, there are two. Expanding item 0 shows us all the controls.
aChainedGesturesThis is a mechanic for blending animations together and is not well understood. Often has nothing in it.nm_PoseSetFunctions much likenm_StartingPoseSetand this is for putting a character into a newPosenm_PoseAnimFunctions much likenm_StartingPoseAnimnmGestureSetWhich set the animation we want to play is located innmGestureAnimWhich exact animation from the set we wantnmTransitionSetandnmTransitionAnimare just like the previous, but are for transitional animations, such asThinkingFrustration_Enterand exit.fPlayRateThis is how fast the animation should play. 0.1 is slowest, 1 is default speed, and can be multiplied.fStartOffsetOffsets start of an animation by specified number of frames. If we need an animation to start somewhere other than its beginning, it is set here. This is not when an animation should play.fEndOffsetOffsets end of animation by specified number of frames. If we need an animation to finish sooner than its end, it is specified here. In this way, we can play fragments of animations to blend in with others.fStartBlendDurationThis is how quickly in seconds the animation should "take over." A higher value is a more gradual blend.fEndBlendDurationlike the above, but for blending back into thePose.fTransBlendTimelike the above, but for transitional animations.bInvalidDataWhether or not the game sees this as a valid instruction. Always set this to False if you would like your animation to play.bOneShotAnimWhether or not this animation should only ever play once. Typically this is left to False, and probably has something to do with Chaining.bChainToPreviousWhether or not this animation should start as soon as anyaChainedGestures finish. This mechanic is poorly understood.bPlayUntilNextWhether or not this animation should loop until the actor receives a new instruction.bTerminateAllGesturesWhether or not this animation should stop any other animations already playing once it starts.bUseDynAnimSetsOften left to FalsebSnapToPoseWhether or not the animation should blend in, or happen within a single frame. Useful for having a character doing a certain animation during a camera cut.ePoseFilter,ePose,eGestureFilter,eGesture, always set to None.
Previewing an Animation (WIP)
Currently, LEX's Animation Viewer only works with OT3. Once running however, any animation in the game can be previewed, and information such as duration in seconds and frames can be displayed. This is useful for determining which animations to use, as well as any offsets needed.
Setting up a Gesture (WIP)
Section under construction
Transitioning Into and Out Of a Pose (WIP)
Section under construction
Importing an Animation (WIP)
Section under construction