Players speak emotional state keywords aloud to trigger a /me chat message and a matching animation. No commands, menus, or key combinations required.
Config file: shared/self-expression/default.lua
SelfExpressionConfig.enabled#| Type | Default |
|---|---|
boolean | true |
Enable or disable the self-expression addon entirely.
SelfExpressionConfig.debug#| Type | Default |
|---|---|
boolean | Config.AddonDebug |
Enable debug logging. Follows the global AddonDebug setting by default.
SelfExpressionConfig.meCommandFormat#| Type | Default |
|---|---|
string | "me %s" |
The chat command format used for the /me output. The %s placeholder is replaced with the state description.
SelfExpressionConfig.animationEnabled#| Type | Default |
|---|---|
boolean | true |
When true, a matching animation plays when a state is triggered.
SelfExpressionConfig.animationChance#| Type | Default |
|---|---|
number | 50 |
Percentage chance (0–100) that an animation plays when a state is triggered.
SelfExpressionConfig.animationDuration#| Type | Default |
|---|---|
number | 3000 |
Duration in milliseconds the animation plays before the character returns to idle.
SelfExpressionConfig.cooldownPerState#| Type | Default |
|---|---|
number | 10000 |
Per-state cooldown in milliseconds. A player must wait this long before triggering the same state again.
SelfExpressionConfig.globalCooldown#| Type | Default |
|---|---|
number | 3000 |
Global cooldown in milliseconds that applies across all states.
SelfExpressionConfig.layer#The self-expression addon uses the ambient layer — always active, no proximity context required.
SelfExpressionConfig.layer = { name = "ambient", }
Each state maps to a set of trigger phrases (defined in shared/self-expression/phrases.lua) and a pool of animations. When triggered, one animation is chosen at random from the pool. All six states are enabled by default.
SelfExpressionConfig.states#SelfExpressionConfig.states = { hungry = { enabled = true, animations = { { dict = "mp_player_inteat@burger", name = "mp_player_int_eat_burger" }, { dict = "amb@world_human_bum_standing@twitchy@idle_a", name = "idle_a" }, { dict = "anim@mp_player_intcelebrationmale@slow_clap", name = "slow_clap" }, }, }, thirsty = { enabled = true, animations = { { dict = "mp_player_intdrink", name = "loop_bottle" }, { dict = "amb@world_human_bum_standing@twitchy@idle_a", name = "idle_a" }, }, }, tired = { enabled = true, animations = { { dict = "amb@world_human_bum_slumped@male@idle_a", name = "idle_a" }, { dict = "anim@mp_player_intcelebrationmale@slow_clap", name = "slow_clap" }, { dict = "mp_sleep", name = "sleep_loop" }, }, }, injured = { enabled = true, animations = { { dict = "random@drunk_driver_1", name = "yourefinished_01" }, { dict = "missminuteman_1ig_2", name = "tasered_2" }, { dict = "amb@world_human_bum_standing@twitchy@idle_a", name = "idle_c" }, }, }, cold = { enabled = true, animations = { { dict = "amb@world_human_bum_standing@twitchy@idle_a", name = "idle_d" }, { dict = "anim@heists@ornate_bank@thermal_charge", name = "thermal_charge" }, }, }, hot = { enabled = true, animations = { { dict = "amb@world_human_bum_standing@twitchy@idle_a", name = "idle_b" }, { dict = "mp_player_int_upperface_sweat", name = "mp_player_int_face_sweat" }, }, }, }
To disable a specific state without removing it, set enabled = false:
SelfExpressionConfig.states.tired.enabled = false
To add a custom state, extend the table with a new key. The key name must match an entry in shared/self-expression/phrases.lua for voice triggers to work.
Last updated about 9 hours ago