Skip to content

Expressions, gestures, moods and poses

A line of dialogue is more than its words. A bot can shrug as it speaks, look surprised, turn hostile for the rest of the conversation, or sit down. You author that in ChatMapper, next to the line it belongs to, and it plays when the scenario runs in your space.

There are two ways to write a performance, and they mean the same thing:

  • Fields on the node set what happens as the line starts.
  • Tags inside the dialogue text place something at a point in the line.

Use fields for the ordinary case. Use a tag when it matters where in the sentence something happens, or when someone other than the speaker should react.

KindLastsExampleIn a LearnBrite space
GestureA momentwave, nod, shrugPlays a body animation.
ExpressionA momentsurprised, angry, warmPlays on the face only.
MoodUntil changedconfident, reserved, angryChanges how the bot idles, talks and gestures from then on.
PoseUntil changedsit_chair, lean_wallChanges the bot’s body position. Needs a recent runtime; see Limits.

Gestures and expressions are beats: they happen and are over. Mood and pose are states: set one and it stays until a later line changes it. Each time a conversation starts, every character in it returns to its own baseline, if it has one.

You need a project in LearnBrite mode. The full list of gestures and poses only appears in that mode, because it is the space’s own catalogue.

In the sidebar, open Details → Custom field templates and click Add performance fields (expression, gesture, mood, pose).

This adds the fields to dialogue nodes and actors. If nodes or actors you created earlier do not show them, expand Dialog nodes in the same section and click Add missing fields to all existing dialog nodes, then do the same under Actors.

You only do this once per project.

Select a node. On the Content tab of the Inspector, open Advanced at the bottom. You now have:

FieldWhat it does
ExpressionThe speaker’s facial expression for this line.
Expression_intensityHow strongly, from 0 to 1. Leave blank for the default.
GestureA body gesture as the line starts.
MoodThe speaker’s mood from this line on. Blank leaves it unchanged.
PoseThe speaker’s pose from this line on. Blank leaves it unchanged.

Each is a dropdown. Leave a field blank and nothing happens for it. All of them apply to the node’s Actor.

The Gesture list is grouped:

  • Works on every player — fifteen common gestures such as wave, nod, shake head, shrug, point, laugh, applause, thumbs up. Prefer these: a scenario written with them also performs outside LearnBrite.
  • LearnBrite gestures — the rest of what your space can play, from bow and cheer to rotfl.
  • LearnBrite animations — individual clips, grouped by what they are. Pick from here when you want one specific animation, such as a particular dance.
MoodPlays as the space’s
neutralThe default manner
confidentConfident
reserved, sadReserved
energeticUrban
boredWaiting
angryGrumpy
happyHappy

Open Actors in the sidebar and open an actor. Mood and Pose there set how that character starts every conversation it takes part in. A node’s own Mood or Pose overrides the baseline from that line on.

Type a tag into Dialogue Text where it should happen:

I never [gesture:shrug]agreed to that.

The tag names what kind of thing it is, then which one:

[gesture:wave]
[expression:surprised]
[mood:angry]
[pose:sit_chair]

Tags never appear on screen and are never spoken. They are removed from the text the learner sees and from the text sent to a voice.

Where a line is split into sentences with |, a tag belongs to the sentence it sits in:

I never agreed to that.|[expression:angry]You know I didn't.

By default a tag is performed by the speaker. Add a target to give it to someone else:

[gesture:nod,target:conversant]Take your time.
[gesture:wave,target:"Dr Lee"]Hello, everyone.

conversant is the node’s Conversant. A name is any actor in the project; put it in quotes if it contains a space. This is how a listener reacts while another character is talking, which is often what makes a scene believable.

[gesture:…] has always been a LearnBrite tag. Existing projects that use it, including with settings such as duration or mask, publish exactly as before:

[gesture:wave,duration:3000]

Validate reports performance problems as warnings. They never block a publish.

WarningWhat it means
…is not in the performance vocabularyThe name is misspelled or does not exist.
…is not in the LearnBrite catalogue; it is published as writtenChatMapper does not recognise the gesture, but sends it to the space unchanged in case the space does.
…does nothing on LearnBriteThe space has no way to show it. A few expressions, such as contempt, have no face animation there.
performance cue in Menu Text never firesTags only work in Dialogue Text. Move it to the line that is spoken.
…needs two actors: add a targethug, handshake and hi5 involve a second character.

The simulator and the standalone players show your text without the tags. They do not animate anything; to see the performance, publish and open the space.

Your project is not changed. On publish, ChatMapper translates each field and tag into the action the space understands, using the animation name the space actually has. That is why nod works even though the space calls that animation something else.

A node with performance fields but no dialogue text, such as a player choice, still performs: the fields run when the node plays.

  • Everything fires as the line appears. A tag in the middle of a sentence does not yet wait for that word to be spoken. Split the sentence with | if the timing matters.
  • Poses need a recent runtime. On an older space a pose is ignored. It does no harm.
  • Three moods may look the same as neutral on current avatars: Waiting, Grumpy and Happy.
  • Two-character gestures play between the learner’s avatar and the target bot.
  • First person and VR participants may not see a bot’s body or face clearly. Do not let a gesture carry information the words do not.
  • Fewer, well-placed beats read better than constant movement.
  • A listener reacts to what is said, not to how the speaker feels. Calm delivery of bad news should get a concerned listener.
  • Change mood where the story changes, usually after a learner’s choice, so the consequence is visible.
  • Gestures do not mean the same thing everywhere. A thumbs up or a beckoning hand is not neutral in every culture.