Skip to content

The Basics of Poses and Gestures

SpaceD0lphin edited this page Jan 29, 2022 · 3 revisions

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 conversation nor_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_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.

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_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.

Controls and Explanations

Clicking on global_jokers 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 any Pose he's in.
  • nm_StartingPoseSet This tells him what set of animations he should look in to find the Pose 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 in m_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 like nm_StartingPoseSet and this is for putting a character into a new Pose
  • nm_PoseAnim Functions much like nm_StartingPoseAnim
  • nmGestureSet Which set the animation we want to play is located in
  • nmGestureAnim Which exact animation from the set we want
  • nmTransitionSet and nmTransitionAnim are just like the previous, but are for transitional animations, such as ThinkingFrustration_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 the Pose.
  • 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 any aChainedGestures 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.

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

Clone this wiki locally