Animations
Almost every RedM script that moves a character is doing one of four things. Knowing which one you are looking at is most of the work, because they take different values and fail in different ways.
| Kind | What it is | What it needs |
|---|---|---|
| Animation | A clip from a dictionary, played on the ped | A dict and a name |
| Scenario | A packaged behaviour the game drives itself | A WORLD_HUMAN_* name, hashed at runtime |
| Walk style | How the character moves when walking | An MP_Style_* string |
| Prop | A model attached to a bone, usually with a clip | A model, a bone, a position and a rotation |
Dictionaries and clips
An animation is addressed by two strings — the dictionary it lives in, and the clip inside it:
dict = 'amb_wander@code_human_basket_wander@female_a@base'
name = 'base'The dictionary has to be requested and loaded before the clip will play. A script that asks for a clip from a dictionary that never loaded usually fails silently — the character simply stands there — which is why most resources wait on the request with a timeout and then give up rather than hanging.
The clip name is often base
Ambient dictionaries tend to hold one long idle called base, with the variation living in the dictionary name rather than the clip name. That is why the dictionaries are so specific — female_a, male_a, @base, @wip_base.
Scenarios
A scenario is a whole behaviour rather than a single clip — the game picks the animations, the props and the transitions itself.
WORLD_HUMAN_SMOKING
WORLD_HUMAN_CAMP_FIRE_STAND
GENERIC_SEAT_CHAIR_SCENARIO
MP_LOBBY_PROP_HUMAN_SEAT_CHAIRThey take no dictionary. Resources that store both kinds in one table usually leave the dictionary column empty, or put a placeholder in it, for scenario rows.
Scenarios are also the thing most likely to refuse politely: a seated scenario that does not suit the prop a character is standing next to simply will not take, and the character stands back up.
Walk styles
MP_Style_DefaultA walk style is applied and then stays applied — it is not a clip that ends. Scripts that offer them usually have to provide an explicit way back to normal, because stopping an emote does not clear one.
Walk styles are also the one animation kind that generally survives being mounted.
Flags
Animation flags are a bitmask, and two bits come up constantly:
| Bit | Value | Effect |
|---|---|---|
| 1 | 1 | Loop |
| 16 | 16 | Upper body only |
| 32 | 32 | Keep player control |
48 is the pair that matters — upper body plus keep control — which is what lets a character wave while still walking. A script that offers "emotes you can move during" is almost always ORing the flags with 48.
Full-body animations without those bits hold the character in place until the animation is cleared.
Where the names come from
There is no official catalogue. The community one everyone uses is rdr3_discoveries, whose ingameanims_list.lua is a listing of in-game animation names, and whose scenario data is the usual reference for WORLD_HUMAN_* names.
Those are name lists, not game data. Nothing is extracted and nothing is redistributed — a resource stores the names and asks the game to load them at runtime, which is why an animation pack adds no download weight to your server.
This is why animation packs are large but weightless
RedM Emotes ships an optional pack of 4,133 animations generated from that listing. It is 546 KB of SQL and adds nothing at all to what a player downloads, because every clip it names is already in the game.
When an animation does nothing
In rough order of likelihood:
| Cause | How it looks |
|---|---|
| The dictionary never loaded | Nothing happens, no error |
| Wrong clip for that dictionary | Nothing happens, no error |
| Something else cleared the ped's tasks | The animation starts and is immediately cancelled |
| The character is mounted | Most resources refuse outright while on a horse |
| A scenario that does not suit the spot | The character stands back up |
Two scripts animating the same ped will fight
Starting an animation usually clears the ped's existing tasks, and the other resource's TaskPlayAnim will clear yours right back. This is the single most common cause of "my emote cancels itself" — and it is not a bug in either resource.
If you are writing one, stop the other resource's animation deliberately rather than hoping. RedM Emotes exposes Stop() for exactly this.
Props on a bone
A prop animation attaches a model to a skeleton bone with a position and rotation offset:
prop = {
model = 'p_cup02x',
bone = 'SKEL_R_Finger12',
position = { x = 0.07, y = 0.02, z = 0.04 },
rotation = { x = -20.0, y = 0.0, z = 0.0 },
},Getting those offsets right is trial and error — there is no formula, and the same offsets on a different bone or a different model will be wrong. Starting from a known-good entry and nudging it is far faster than starting from zero.
A prop also has to be cleaned up: if the game drops it, or the animation ends without the script noticing, you are left holding nothing or holding it forever.
Animation packs
| Pack | |
|---|---|
| 30+ Female Poses | Free. 29 custom female poses as native .ycd dictionaries, with an in-game menu and exports |
Where to go next
| A library of emotes, walk styles, scenarios and props | RedM Emotes |
| Playing an animation from your own resource | RedM Emotes Developer API |
| Which key opens what | Keybind Hashes |
| The platform itself | RedM |