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
1579pike_attack_recoil021886 1–843 ———
9230pike_attack_recoil0211985 60085–60114 ———
1580pike_attack_recoil031887 1–843 ———
9231pike_attack_recoil0311986 60085–60114 ———
548pike_backup412 1–843 ———
9232pike_backup11987 60085–60114 ———
2160pike_charge_up2699 1–843 ———
9233pike_charge_up11988 60085–60114 ———
1581pike_death_blow1888 1–843 ———
9234pike_death_blow11989 60085–60114 ———
2161pike_defensive_buff2700 1–843 ———
9235pike_defensive_buff11990 60085–60114 ———
14899pike_dodge24354 60085–60114 ———
1582pike_dodge_backhand1889 1–843 ———
9236pike_dodge_backhand11991 60085–60114 ———
1583pike_dodge_down1890 1–843 ———
9237pike_dodge_down11992 60085–60114 ———
1584pike_dodge_forehand1891 1–843 ———
9238pike_dodge_forehand11993 60085–60114 ———
1585pike_dodge_thrust1892 1–843 ———
9239pike_dodge_thrust11994 60085–60114 ———
549pike_enter417 1–843 ———
9240pike_enter11995 60085–60114 ———
550pike_exit418 1–843 ———
9241pike_exit11996 60085–60114 ———
2162pike_feint2701 1–843 ———
9242pike_feint11997 60085–60114 ———
551pike_idle419 1–843 ———
6725pike_idle419 60085–60114 ———
9243pike_idle0111998 60085–60114 ———
2163pike_kick2702 1–843 ———
7162pike_kick2702 60085–60114 ———
2428pike_knockdowntoknees3023 1–843 ———
9244pike_knockdowntoknees11999 60085–60114 ———
2429pike_knockedtoback3024 1–843 ———
9245pike_knockedtoback12000 60085–60114 ———
2430pike_knockedtoback_getup3025 1–843 ———
9246pike_knockedtoback_getup12001 60085–60114 ———
2164pike_offensive_buff2703 1–843 ———
9247pike_offensive_buff12002 60085–60114 ———
14900pike_ouch24355 60085–60114 ———
3163pike_ouch01_backhand5459 1–843 ———
9248pike_ouch01_backhand12003 60085–60114 ———
3164pike_ouch02_down5460 1–843 ———
9249pike_ouch02_down12004 60085–60114 ———
1586pike_ouch_backhand1893 1–843 ———
9250pike_ouch_backhand12005 60085–60114 ———
1587pike_ouch_down1894 1–843 ———
9251pike_ouch_down12006 60085–60114 ———
1588pike_ouch_forehand1895 1–843 ———
9252pike_ouch_forehand12007 60085–60114 ———
1589pike_ouch_thrust1896 1–843 ———
9253pike_ouch_thrust12008 60085–60114 ———
1590pike_parry_backhand1897 1–843 ———
9254pike_parry_backhand12009 60085–60114 ———
1591pike_parry_down1898 1–843 ———
9255pike_parry_down12010 60085–60114 ———
1592pike_parry_forehand1899 1–843 ———
9256pike_parry_forehand12011 60085–60114 ———
1593pike_parry_thrust1900 1–843 ———
9257pike_parry_thrust12012 60085–60114 ———
16744pike_run29716 60085–60114 ———
552pike_strafe_left426 1–843 ———
9258pike_strafe_left12013 60085–60114 ———
553pike_strafe_right427 1–843 ———
9259pike_strafe_right12014 60085–60114 ———
2165pike_super_buff2704 1–843 ———
9260pike_super_buff12015 60085–60114 ———
2166pike_taunt2705 1–843 ———
9261pike_taunt12016 60085–60114 ———
15686pike_twirl25666 60085–60114 ———
554pike_walk428 1–843 ———
9262pike_walk12017 60085–60114 ———
2167pike_whirling_attack2706 1–843 ———
7163pike_whirling_attack2706 60085–60114 ———
2246pike_wild_swing2800 1–843 ———
7209pike_wild_swing2800 60085–60114 ———
16303piledriver28025 60085–60114 ———
1910planer2288 1–843 ———
9267planer12022 60085–60114 ———
14759player_wing_mount_backup24084 60085–60114 ———
14760player_wing_mount_fall24085 60085–60114 ———
14761player_wing_mount_fly_backup24086 60085–60114 ———
14762player_wing_mount_fly_climb24087 60085–60114 ———
14763player_wing_mount_fly_dive24088 60085–60114 ———
14764player_wing_mount_fly_down24089 60085–60114 ———
14765player_wing_mount_fly_glide24090 60085–60114 ———
14766player_wing_mount_fly_glide_left24091 60085–60114 ———
14767player_wing_mount_fly_glide_right24092 60085–60114 ———
14768player_wing_mount_fly_idle24093 60085–60114 ———
14769player_wing_mount_fly_run24094 60085–60114 ———
14770player_wing_mount_fly_strafe_left24095 60085–60114 ———
14771player_wing_mount_fly_strafe_right24096 60085–60114 ———
14772player_wing_mount_fly_turn_left24097 60085–60114 ———
14773player_wing_mount_fly_turn_right24098 60085–60114 ———
14774player_wing_mount_fly_up24099 60085–60114 ———
14775player_wing_mount_fly_walk24100 60085–60114 ———
14776player_wing_mount_idle24101 60085–60114 ———
14777player_wing_mount_jump24102 60085–60114 ———
14778player_wing_mount_land24103 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.