Reference library

Emotes and animations.

Search the configured world’s emotes table by name, row ID, visual state ID or message. Each row maps a name to an animation for a client version range.

  • 31,574 mappings
  • 25,249 unique names
  • 220 mappings with chat text
  • 31,354 animation-only mappings

Snapshot: October 14, 2026. These are database mappings; a client’s models and assets determine what can actually render. A listed name does not automatically register a player slash command.

Table fields and usage ↓

Build filtering uses the stored inclusive range: minimum ≤ build ≤ maximum. A maximum of 0 means no upper limit. Leave the build blank to compare all mappings for a name.

31,574 matching mappings.

Available mappings from the world database snapshot. Empty message fields are shown as —.
Row IDNameVisual state IDClient build rangeMessageTargeted messageStored self message
1920artificing_failure2302 1–843 ———
8026artificing_failure10765 60085–60114 ———
1921artificing_idle2303 1–843 ———
8027artificing_idle10766 60085–60114 ———
1922artificing_success2304 1–843 ———
8028artificing_success10767 60085–60114 ———
2268artsn_chem_sound2840 1–843 ———
8029artsn_chem_sound10768 60085–60114 ———
2269artsn_chimepad_sound2841 1–843 ———
8030artsn_chimepad_sound10769 60085–60114 ———
2270artsn_forge_helmet_sound2842 1–843 ———
8031artsn_forge_helmet_sound10770 60085–60114 ———
2271artsn_forge_sound2843 1–843 ———
8032artsn_forge_sound10771 60085–60114 ———
2272artsn_glow_sound2844 1–843 ———
8033artsn_glow_sound10772 60085–60114 ———
2273artsn_knives_sound2845 1–843 ———
8034artsn_knives_sound10773 60085–60114 ———
2274artsn_knot_sound2846 1–843 ———
8035artsn_knot_sound10774 60085–60114 ———
2275artsn_logcut_sound2847 1–843 ———
8036artsn_logcut_sound10775 60085–60114 ———
2121artsn_metal_bar_end_snd2650 1–843 ———
8037artsn_metal_bar_end_snd10776 60085–60114 ———
2122artsn_metal_bar_snd2651 1–843 ———
8038artsn_metal_bar_snd10777 60085–60114 ———
2276artsn_molecule_sound2848 1–843 ———
8039artsn_molecule_sound10778 60085–60114 ———
2277artsn_planer_sound2849 1–843 ———
8040artsn_planer_sound10779 60085–60114 ———
2278artsn_saw_sound2850 1–843 ———
8041artsn_saw_sound10780 60085–60114 ———
2279artsn_stove_sound2851 1–843 ———
8042artsn_stove_sound10781 60085–60114 ———
3239asg_stonegaze_snd5644 1–843 ———
8043asg_stonegaze_snd10782 60085–60114 ———
16394asleep28365 60085–60114 ———
15668attachment25623 60085–60114 ———
365attack65 1–843 ———
8044attack10783 60085–60114 ———
366attack0166 1–843 ———
8045attack0110784 60085–60114 ———
367attack0267 1–843 ———
8046attack0210785 60085–60114 ———
2291attack032869 1–843 ———
8047attack0310786 60085–60114 ———
28853attack03_headshake71582 60085–60114 ———
3130attack045284 1–843 ———
8048attack0410787 60085–60114 ———
3440attack056775 1–843 ———
15779attack0526082 60085–60114 ———
16166attack0627391 60085–60114 ———
3361attack16465 1–843 ———
3427attack26727 1–843 ———
3428attack36728 1–843 ———
373attacktiming76 1–843 ———
8074attacktiming10813 60085–60114 ———
374attacktiming_a77 1–843 ———
8075attacktiming_a10814 60085–60114 ———
11039attack_0215529 60085–60114 ———
28688attack_0367262 60085–60114 ———
15786attack_arm26110 60085–60114 ———
16242attack_arms27714 60085–60114 ———
1371attack_backhand_trigger1627 1–843 ———
8049attack_backhand_trigger10788 60085–60114 ———
3422attack_bite6694 1–843 ———
8050attack_bite10789 60085–60114 ———
14997attack_bites24691 60085–60114 ———
11759attack_bolts17072 60085–60114 ———
10568attack_boss0113458 60085–60114 ———
10569attack_boss0213459 60085–60114 ———
1484attack_breath1772 1–843 ———
8051attack_breath10790 60085–60114 ———
8052attack_breath0110791 60085–60114 ———
2913attack_breath024468 1–843 ———
8053attack_breath0210792 60085–60114 ———
3362attack_breath_area6466 1–843 ———
13171attack_breath_crush20117 60085–60114 ———
12042attack_breath_inhale17823 60085–60114 ———
16395attack_breath_old28366 60085–60114 ———
13172attack_breath_poison20118 60085–60114 ———
16169attack_breath_snd27404 60085–60114 ———
12043attack_burst17824 60085–60114 ———
13811attack_cage21579 60085–60114 ———
16389attack_cannibal28338 60085–60114 ———
3423attack_claw6695 1–843 ———
12044attack_dark_breath17825 60085–60114 ———
12130attack_disarm17988 60085–60114 ———
15757attack_dive25950 60085–60114 ———
7673attack_earthshake10012 60085–60114 ———
12782attack_eat19497 60085–60114 ———
12363attack_eye_beams18548 60085–60114 ———
16440attack_eye_cone28594 60085–60114 ———
12378attack_eye_ring18577 60085–60114 ———
16208attack_fistslam27561 60085–60114 ———
15688attack_flame25688 60085–60114 ———
2965attack_forehand_trigger4595 1–843 ———
8054attack_forehand_trigger10793 60085–60114 ———
11074attack_fx15678 60085–60114 ———
16209attack_groundroar27562 60085–60114 ———
Table fields and server behavior
Schema from the same database snapshot.
ColumnSQL typeMeaning
idint(10) unsigned Auto-increment primary key for the database row. This is not the animation ID.
namevarchar(128)
Nullable
Exact name used by the server’s animation lookup. The same name can have separate rows for different client builds.
visual_state_idint(10) unsigned Numeric animation ID sent in WS_CannedEmote for the selected mapping. IDs can change between version ranges.
messagevarchar(255)
Nullable
Default chat text, used without a different target or when targeted_message is empty. The server prefixes the originator’s name for player emotes.
targeted_messagevarchar(255)
Nullable
Chat text used when a different target exists. The %t placeholder is replaced with the target’s name.
self_messagevarchar(255)
Nullable
Stored database field. The current WorldDatabase loader does not select it and HandleEmote does not use it.
min_version_rangeint(10) unsigned Inclusive lowest client build for this mapping; 0 allows builds from zero upward.
max_version_rangeint(10) unsigned Inclusive highest client build; 0 means no upper limit.

Using a named animation

For example, wave maps to visual state 883 for builds 1–843 and 13287 for builds 60085–60114 in this snapshot. Search a name with the build left blank to see its variants.

In Lua, PlayAnimationString resolves the name through the emote catalog. This example plays the named animation without using the spawn’s current target:

PlayAnimationString(Spawn, "wave", nil, true)

Player canned emotes use /cannedemote wave. The separate /emote command sends custom chat text. For NPCs, HandleEmote sends the animation with an empty emote message.

Message placeholders: %t is the target’s name; %g1 becomes his/her, %g2 becomes him/her, and %g3 becomes he/she, using the originator’s gender. The current handler replaces the first occurrence of each placeholder.

The “With chat text” filter includes rows with a nonempty message or targeted_message. “Animation only” means both fields are empty. Stored self_message does not affect either filter.

Build filtering shows literal database ranges. FindAnimation also has a narrow verified fallback for bow_knockedtoback in builds 562–935 when no direct mapping exists; it does not make all modern mappings available to those builds.

Source: configured local world emotes table, exported read-only on October 14, 2026. Runtime behavior checked against WorldServer/WorldDatabase.cpp, WorldServer/Spawn/VisualStates.h, WorldServer/Zone/zoneserver.cpp, WorldServer/Commands/Commands.cpp and WorldServer/Lua/LuaFunctions.cpp. Other worlds can have different mappings.