Everyday Animations FAQ
The questions this pack raises most often. The short version is that there are 94 animations in male and female versions, and the resource contains animations and a clip list — nothing else.
Before you buy
How many animations are there?
94, in five groups:
| Group | Animations |
|---|---|
| Greetings & Social | 15 |
| Communication Gestures | 32 |
| Reactions & Expressions | 16 |
| Standing & Idle | 18 |
| Casual Actions | 13 |
| Total | 94 |
Each one ships in a male and a female version, so the pack holds 188 clips across 19 dictionaries and 38 .ycd files. Every clip name in the list resolves inside the files that ship, with no dictionary missing and none left over.
The full table, with the dictionary, clip name, length and play mode for every row, is on the animation list.
Is it a script or an asset pack?
An asset pack, plus a reference table telling you what is in it.
| File | What it is |
|---|---|
stream/ | 38 .ycd animation dictionaries, 4.5 MB total |
clips.lua | A data table. 94 rows, 15 of them live. Zero functions |
server.lua | One line. It prints a start-up message |
fxmanifest.lua | Declares those two files, escrow_ignore and dependency '/assetpacks' |
README.md, CHANGELOG.md, docs/ | Notes packaged with the download. These pages are the reference for what the pack contains |
That is the whole resource. There is no client script, so there is no code on the player's machine beyond the one table clips.lua defines when it loads.
Does it include a menu or commands?
No — and it is worth being plain about how far that goes. The pack ships no menu, no chat command, no keybind, no events and no config options, because it ships no playback code at all. clips.lua is pure data and server.lua is a single print.
What you get is the animations and a list giving the dictionary and clip name of each one. What plays them is yours to supply.
A player cannot trigger an animation out of the box
Install the pack on its own and all 38 dictionaries stream correctly, but no key and no command will do anything, because nothing in the resource is listening for one. You supply the playback — an emote resource you already run, or a few lines of your own client code. Both routes are under Using it.
This is the same shape as the other RedMorrow animation packs: 100+ Female Poses, 24+ Dances and 30+ Dances all stream clips and leave the triggering to you.
Are there male and female versions?
Yes, for every one of the 94 animations. The rule holds on all 94 rows with no exceptions:
bodies.male == dict
bodies.female == dict .. '@f'So the female dictionary is the male name with @f appended, and the clip name inside the two files is identical. Choosing a body is a dictionary swap, not a lookup — rm@salute and rm@salute@f both contain a clip called salute.
That is why the pack is 19 dictionaries and 38 files: every dictionary ships as a pair. The list is under every dictionary ships twice.
Do I need a framework or a database?
Neither. VORP, RSG, RedEM:RP or no framework at all — the resource never looks for one, because it runs nothing that could. There is no SQL, nothing is written anywhere, and nothing is kept between sessions.
Do I need an emote system?
Not strictly, but you do need something to play the clips.
Your options are an emote resource — RedM Emotes or whatever you already run — or roughly ten lines of your own client script. With neither, the pack streams 4.5 MB to every player and nothing visible ever happens.
Every emote system asks for the same two values, the dictionary and the clip name, and both are in the animation list. For RedM Emotes specifically, see three ways to add an emote.
What do I actually need?
| A RedM server | Any build supporting fx_version 'cerulean' and lua54 'yes' |
| Asset packs on your licence key | Required. The manifest declares dependency '/assetpacks' |
| A way to play clips | Required. An emote resource, or your own script |
| Framework | Not required |
| Database | Not required |
| OneSync | Not required |
What is dependency '/assetpacks'?
A Cfx.re entitlement check tied to your server licence key. If asset packs are not enabled for that key, the resource's animation data never reaches your players, and nothing inside the resource can work around it.
The requirement is genuine here, because streaming files is exactly what the entitlement governs.
This is the usual cause of "the list works but nothing happens"
Without the entitlement the resource starts and the console looks healthy, but no animation data streams, so every clip you ask for fails. Your code asks for a dictionary, the dictionary never loads, and the character stands still with no error anywhere. Check the entitlement first when a clip you know the name of refuses to play. Installation covers where to look.
Will it slow my server down?
No, and the figure is absent rather than small. Server-side the resource is one print at start-up. Client-side it defines one table and then does nothing — no threads, no event handlers, no loops, no per-frame work. There is nothing in the pack that can accumulate cost while it runs.
Players download about 4.5 MB of animation files the first time they join, and the files are cached after that. A dictionary only loads into memory when something plays a clip from it, so the first play of an animation may stutter once. Every play after that is instant, and the dictionaries you never use are never loaded at all.
Does it work on FiveM?
No. These are RDR2 .ycd dictionaries and the manifest declares game 'rdr3'. The animations do not exist in GTA V.
Can I use the animations in single-player RDR2?
Yes. The .ycd files are standard RDR2 clip dictionaries, with nothing RedM-specific inside them.
Install Lenny's Mod Loader for RDR2, if you do not already run it.
Make a mod folder with a
streamdirectory and copy the.ycdfiles from the pack'sstream/folder into it.Play a clip with any script or trainer that takes a dictionary and a clip name.
The names are identical to the RedM side, so the animation list works unchanged. dependency '/assetpacks' is a server-side entitlement check and has nothing to do with single-player, and clips.lua is only a reference table there — there is no server to load it.
What your purchase permits you to do with the files is set by the licence attached to it rather than by this page. If you need that in writing, ask on the RedMorrow Discord.
Using it
I installed it and nothing happens. What now?
Confirm the resource started, then decide who plays the clips.
Add the
ensureline toserver.cfg, matching the folder on disk:cfgensure rm_everyday_v1Check the server console for the one line
server.luaprints:text[rm] Animation pack started.That line is the whole of the pack's server-side behaviour. Seeing it means the resource started; it does not mean anything streamed.
Decide who plays the clips. Either hand the dictionary and clip pairs from the animation list to your emote resource, or add your own client script.
Test exactly one animation first, before you copy 94 rows anywhere.
rm@salutewith the clipsaluteis a good choice — 2.833 s, unmistakable on screen, and it stands still.
Playing an animation and Integrating walk through both routes in full.
What does the minimum client code look like?
Three natives, in this order:
local dict = 'rm@salute'
local clip = 'salute'
RequestAnimDict(dict)
while not HasAnimDictLoaded(dict) do Wait(0) end
-- RDR3's TaskPlayAnim takes THIRTEEN arguments
TaskPlayAnim(PlayerPedId(), dict, clip, 4.0, -4.0, -1, 1, 0.0, false, 0, false, 0, false)A duration argument of -1 means no time limit; with the loop flag the clip runs until something stops it. Flag 1 in the seventh position is the known-good starting point for this pack — RDR3's flag values are not GTA V's, so a number copied out of a FiveM resource will not mean what its name suggests here. Test any variant you try on screen before you expose it to players, and see the platform notes under RedM.
Put a timeout on that wait
A clip asked for from a dictionary that never loaded fails silently — no console error, no warning, the character stands there doing nothing. An unbounded while not HasAnimDictLoaded(dict) do Wait(0) end turns that into a thread that spins forever and tells you nothing. Give it a deadline and print the dictionary name when you give up:
local function loadDict(dict)
if HasAnimDictLoaded(dict) then return true end
if not DoesAnimDictExist(dict) then return false end
RequestAnimDict(dict)
local deadline = GetGameTimer() + 5000
while not HasAnimDictLoaded(dict) do
if GetGameTimer() > deadline then return false end
Wait(0)
end
return true
endOnce playback has started you can release the dictionary with RemoveAnimDict(dict).
How do I pick the male or the female version?
Append @f to the dictionary for the female version, and leave it off for the male one. Because the suffix rule holds on all 94 rows and the clip name does not change, that is the entire decision:
local function animDict(baseDict, female)
return female and (baseDict .. '@f') or baseDict
endWhat to pass as female is the part worth thinking about. Where your server already stores a character's sex — most frameworks do — read that field. IsPedMale is reliable on standard multiplayer and story peds, and can be wrong on heavily customised ones, so treat it as the fallback rather than the source of truth.
Both versions play on either body. The matching one fits better.
How do I stop an animation?
ClearPedTasks(ped) stops it. For a gesture played in the secondary task slot, use ClearPedSecondaryTask(ped) instead so you do not cancel whatever else the ped was doing.
Starting an animation clears the ped's tasks, which is why two resources animating the same character cancel each other. Stop one deliberately before starting the other. Animation Basics goes into that.
Which animations move the character?
Four. These carry rootMotion = true, so they travel and want a little space around them:
a_man_stands_on_the_left_leg_in_a_yoga_tree_pose_with_the_handsa_woman_stands_holding_a_map_open_in_both_hands_and_looks_arounlook_binoculars_animationwhiteboard_animation
The other 90 stay on the spot. Play one of these four indoors, on a staircase, or on a cart, and the character can end up somewhere you did not intend — so play them full body, in the open, and check each one on your own map before you offer it. Details are under root-motion clips.
Why is an animation only 0.033 seconds long?
Because it is a single frame at 30 fps — a static pose rather than an animation. Five rows are like that:
male_sitting_pose · female_standing_pose · hand_in_back · cross_legged_sitting · leaning_against_wall
A one-frame clip played straight through flashes and vanishes. To be usable it needs your code to keep it on screen, by holding the last frame or by looping it — either way the pose then sits there until you clear it. Four of the five already carry mode = 'loop' as a hint; male_sitting_pose carries once, which is the wrong hint for a pose. See single-frame poses.
Are they loops or one-shots?
Across all 94, mode is split 48 once and 46 loop.
The 15 greetings all ship as loop
Every row in Greetings & Social carries mode = 'loop' despite being a one-shot social gesture. A 0.533-second waving on loop reads as a twitch rather than a wave. Set those 15 to once in your own menu or in clips.lua unless you specifically want them repeating.
mode is a hint for your code, not a setting the pack acts on — nothing in the resource reads it. Whichever field your emote system uses for the same purpose, that is the one that decides what happens in game.
Why do two ids appear twice?
Because pointing and pointing_gesture each exist in two places — once inside the big gesture dictionary, and once in a standalone dictionary of their own:
| Id | In the gesture pack | Standalone |
|---|---|---|
pointing | rm@communication_gestures, 3.433 s | rm@pointing, 3.433 s |
pointing_gesture | rm@communication_gestures, 1.967 s | rm@pointing_gesture, 1.833 s |
pointing is the same length on both sides and is probably one animation exported twice. pointing_gesture differs by 0.134 s, so those two are genuinely different takes and both are worth keeping.
In clips.lua as it ships there is no live collision, because the standalone rows are the active ones and the gesture-pack twins sit in a commented block. The clash appears the moment you merge the blocks together.
An id lookup finds one and loses the other
If you build a menu keyed on id, whichever row comes second is unreachable. Key on the dictionary and clip together, or rename one side — pointing_alt and pointing_gesture_alt for the standalone pair reads well enough. See duplicate ids.
Why is Config.Clips nil in my own resource?
Because CFX gives every resource its own Lua state. clips.lua is a client script of this pack, so the table exists inside this resource and nowhere else, and your script cannot see it. There are no events or exports that would hand it over either.
Two ways around that. Copy the rows into your own resource and maintain your copy, or read the file from disk on the server — it stays readable because escrow_ignore covers it:
-- Server side, in your resource. Returns the pack's Config.Clips, or an empty table.
local function getEverydayClips()
local src = LoadResourceFile('rm_everyday_v1', 'clips.lua')
if not src then return {} end
local env = { Config = {} }
local chunk = load(src, '@rm_everyday_v1/clips.lua', 't', env)
if not chunk or not pcall(chunk) then return {} end
return env.Config.Clips or {}
endThe first argument must match the folder on disk, and what you get back is the 15 live rows only, for the reason given under Editing it. Integrating covers both routes, and what reads it covers the loading side.
Editing it
Can I edit the list?
Yes. escrow_ignore covers clips.lua and the .ycd files in stream/, so the clip list ships readable and stays that way.
| Safe to edit | Leave alone |
|---|---|
label — the display name your menu shows | dict — must match the name stored inside the .ycd |
category — the menu group, and worth rewriting | clip — must match the clip name inside the dictionary |
id, mode, duration — your own reference values | stream/*.ycd — binary animation assets |
dict and clip are the two values the game actually resolves. Change either one and that row stops working, with the same silent failure as a missing dictionary. Everything else in a row is yours, because nothing in the pack reads any of it.
category is not the five-group split
There are 19 distinct category values in the file, and 15 of them hold a single item — each greeting was given a category of its own. A menu built straight from category therefore produces fifteen one-item groups alongside four real ones. The five groups used on these pages are the useful split, so rewrite category to match them if your menu groups by that field.
The clips.lua file covers the format row by row, and what you may change goes field by field.
Why does clips.lua only show 15 animations?
Because the file holds five Config.Clips blocks and four of them ship commented out:
| Block | Rows | State in clips.lua |
|---|---|---|
| Communication Gestures | 32 | Commented |
| Reactions & Expressions | 16 | Commented |
| Standing & Idle | 18 | Commented |
| Casual Actions | 13 | Commented |
| Greetings & Social | 15 | Live |
Nothing is missing from your download. All 38 .ycd files are present, and every one of the 94 clip names resolves inside them. Hand an emote menu a dictionary and a clip name and it plays any of the 94 today — the commented rows have no effect on what the game can do, because nothing in the pack reads the table in the first place.
Where the file's state does matter is if you copy rows out of clips.lua instead of out of the animation list. Then you get 15 rows and wonder where the rest went.
Config.Clips assigns, it does not append
Uncommenting the four blocks does not give you 94 rows. Each block is a plain Config.Clips = { … }, so the last one evaluated wins and every earlier block is silently discarded — you would end up with 15 rows again and no error to tell you why.
Merge all 94 rows into a single table instead, and resolve the two duplicate ids (pointing and pointing_gesture) in the same pass, because merging is exactly what brings them into collision. Merging them properly shows the shape to aim for.
Can I rename the resource folder?
Yes. In CFX the resource name is the directory name, and the name 'rm' line in fxmanifest.lua is metadata that renames nothing.
The rule is that your ensure line matches the folder on disk. Out of the box the folder is rm_everyday_v1:
ensure rm_everyday_v1Rename the folder to rm and ensure rm is correct instead. If you read clips.lua with LoadResourceFile, update the resource name there too. The dictionary names are baked into the .ycd files as rm@… and have nothing to do with the folder name, so no animation cares either way.
Can I rename the .ycd files?
No. An RDR2 dictionary stores its own name inside the file. Renaming the file only makes the file name and the dictionary name disagree, and every clip in it stops resolving — silently, as usual.
Renaming has to happen at export time, which means it is not something you can do to a packaged pack. The same goes for the two very long ids generated from source filenames: the id and the label in clips.lua are yours to shorten, the clip name inside the .ycd is not.
What happens to my edits when the pack updates?
They are overwritten, unless you move them first. The pack is assets plus one data file, so an update means replacing stream/ and clips.lua wholesale.
Keep your edited clips.lua outside the resource folder and diff it against the new one rather than pasting it back blind — a new version may have merged the blocks, renamed an id or added animations your copy does not know about. Do not mix files from two versions in one folder.
Still stuck? Troubleshooting sorts the common symptoms by cause. If that does not cover it, bring your server console output and the result of DoesAnimDictExist('rm@salute') to the RedMorrow Discord.