-
Notifications
You must be signed in to change notification settings - Fork 29
The Basics of Poses and Gestures
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.
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
.
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_Idle
The basic pose itself -
HMM_AM_ThinkingFrustration_ThinkingFrustration_Enter
Transitional animation that helps to smoothly change from one pose to this one -
HMM_AM_ThinkingFrustration_ThinkingFrustration_HandGesture
A hand gesture specifically for use with this pose -
HMM_AM_ThinkingFrustration_ThinkingFrustration_Exit
Transitional animation that helps to smoothly change from this pose to another -
HMM_AM_ThinkingFrustration_ThinkingFrustration_Twitch1
Twitch 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.
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_joker
These animations affect Joker himself, and there are 2 keys in this track. -
Gesture -- Joker_Chair
These affect Joker's chair only, and there is 1 key in this track.
Clicking on global_joker
s Track shows us a list of things:
-
m_aGestures
This is a sort of subfolder that tells him what animations to play. Animations in here will play on top of anyPose
he's in. -
nm_StartingPoseSet
This tells him what set of animations he should look in to find thePose
he should begin this node with. -
nm_StartingPoseAnim
This tells him the exact animation from within the set to use. -
m_fStartPoseOffset
This is the number of seconds he should offset the starting animation by. This can be useful to prevent "popping" between nodes. -
m_bUseDynamicAnimsets
This is a boolean value that says whether or not an attempt should be made to mix this animation with others. -
ePoseFilter
Always set to None -
eStartingPose
Always set to None -
n_nmFindActor
This specifies which actor should be using these instructions. -
m_aTrackKeys
This 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.
-
aChainedGestures
This is a mechanic for blending animations together and is not well understood. Often has nothing in it. -
nm_PoseSet
Functions much likenm_StartingPoseSet
and this is for putting a character into a newPose
-
nm_PoseAnim
Functions much likenm_StartingPoseAnim
-
nmGestureSet
Which set the animation we want to play is located in -
nmGestureAnim
Which exact animation from the set we want -
nmTransitionSet
andnmTransitionAnim
are just like the previous, but are for transitional animations, such asThinkingFrustration_Enter
and exit. -
fPlayRate
This is how fast the animation should play. 0.1 is slowest, 1 is default speed, and can be multiplied. -
fStartOffset
Offsets 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. -
fEndOffset
Offsets 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. -
fStartBlendDuration
This is how quickly in seconds the animation should "take over." A higher value is a more gradual blend. -
fEndBlendDuration
like the above, but for blending back into thePose
. -
fTransBlendTime
like the above, but for transitional animations. -
bInvalidData
Whether or not the game sees this as a valid instruction. Always set this to False if you would like your animation to play. -
bOneShotAnim
Whether or not this animation should only ever play once. Typically this is left to False, and probably has something to do with Chaining. -
bChainToPrevious
Whether or not this animation should start as soon as anyaChainedGesture
s finish. This mechanic is poorly understood. -
bPlayUntilNext
Whether or not this animation should loop until the actor receives a new instruction. -
bTerminateAllGestures
Whether or not this animation should stop any other animations already playing once it starts. -
bUseDynAnimSets
Often left to False -
bSnapToPose
Whether 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.
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.
Section under construction
Section under construction
Section under construction