Configuration
Two files, both readable and editable after escrow.
| File | Holds |
|---|---|
config.lua | Menu, keys, playback |
clips.lua | The pose list |
Both are loaded when the resource starts, so restart it after editing either:
restart rm_30-custom-female-poseMenu and commands
| Key | Default | |
|---|---|---|
Config.Title | 'Female Poses' | Shown in the menu header |
Config.UseMenu | true | false removes the menu; the command lists poses in the F8 console instead |
Config.Command | 'rm_female_poses' | The chat command |
Config.MenuSide | 'right' | 'left' or 'right' |
Config.CloseOnPlay | false | Close the menu after pressing Play |
Config.Theme | 'redm' | 'redm' or 'fivem' |
Config.Accent | '' | Accent colour, e.g. '#9b2d20'. Empty uses the theme default |
With Config.UseMenu = false, /rm_female_poses prints the numbered pose list to the player's own F8 console. Chat gets a single pointer line — 29 animations listed in the F8 console. Use /rm_female_poses <id|number> — and nothing at all if the server has no chat resource started.
Keys
| Key | Default | |
|---|---|---|
Config.MenuKeyVK | 0x76 (F7) | Virtual-key code that opens the menu |
Config.MenuKeyLabel | 'F7' | The key name the open menu listens for to close itself |
Config.StopKeyVK | 0x58 (X) | Virtual-key code that stops the pose |
Config.StopKeyLabel | 'X' | Displayed in the menu |
Config.MenuControl | nil | Control-hash fallback |
Config.StopControl | nil | Control-hash fallback |
The two labels do different jobs
StopKeyLabel is the one that is drawn in the menu.
MenuKeyLabel is not drawn at all — the interface compares it against the key you press to decide whether to close. So if you change MenuKeyVK to F9 and leave the label as 'F7', F9 opens the menu and then will not close it, because the interface is still listening for F7.
Change both together, and keep the label spelled as the browser names the key.
These are Windows virtual-key codes, not control hashes
RedM has no RegisterKeyMapping, so the pack uses RegisterRawKeymap — a RedM-only native that takes a raw virtual key. Players cannot rebind it in the game's key settings; you set it once for the server.
Useful codes, from config.lua's own comments:
| Key | Code |
|---|---|
F5 | 0x74 |
F6 | 0x75 — photo mode, avoid |
F7 | 0x76 |
F9 | 0x78 |
X | 0x58 |
Z | 0x5A |
DELETE | 0x2E |
PAGE DOWN | 0x22 |
Set a code to 0 to unbind that key entirely. The label disappears from the menu automatically when nothing is bound — the menu only shows a label for a key that really exists.
MenuControl and StopControl are a fallback for builds where the raw keymap fails to register.
Playback
| Key | Default | |
|---|---|---|
Config.BlendIn | 4.0 | Blend-in speed |
Config.BlendOut | -4.0 | Blend-out speed |
Config.StopBlend | 2.0 | Blend used when stopping |
Config.DefaultSpeed | 1.0 | Starting playback speed |
Config.MinSpeed | 0.25 | Slowest the menu allows |
Config.MaxSpeed | 2.0 | Fastest the menu allows |
Config.HolsterWeapon | true | Holster a drawn weapon before a full-body pose |
Config.BlockOnMount | true | Refuse a full-body pose while mounted or in a vehicle (wagon, coach, boat) |
Config.RootMotionExtraFlags | 0 | Extra flags ORed in for clips marked rootMotion |
Config.Debug | false | Console tracing, and enables /rm_female_poses debug |
HolsterWeapon only applies to full-body poses. An upper-body pose leaves the weapon alone, because you are still moving.
BlockOnMount likewise only refuses full-body poses, and it covers any vehicle as well as a mount — a wagon, stagecoach, boat or canoe refuses the same way a horse does. Upper-body poses are allowed in all of them, since they layer over the riding or sitting animation rather than replacing it.
Config.StopBlend also times a hard clear
Besides setting the blend-out rate, StopBlend times a safety net on explicit stops. When you stop a pose with the stop key, /rm_female_poses stop or the Stop export, the resource checks the ped again 1000 / max(StopBlend, 0.5) + 200 ms later — 700 ms at the 2.0 default, and never more than 2200 ms, because the divisor is clamped at 0.5. If a clip of this pack is still playing then, the resource calls ClearPedTasks, which clears all of the ped's tasks, not just this pack's.
So lowering StopBlend below about 0.5 buys no extra blend time. At 0.2 the blend-out needs roughly five seconds, but the hard clear fires at 2200 ms — cutting the blend off mid-way and cancelling unrelated tasks on the character. For a softer stop, stay at or above 0.5.
Config.Dict is a fallback, not a setting you need
Config.Dict = 'redmorrow_com@pose5' is used only for a clip that somehow has no dict of its own. Every shipped clip has one, so it never comes into play.
clips.lua
One entry per pose:
{
id = 'pose5',
label = 'pose5',
dict = 'redmorrow_com@pose5',
clip = 'pose5',
category = 'pose5',
duration = 1.967,
mode = 'loop',
rootMotion = false,
},Safe to edit
| Field | |
|---|---|
label | The name shown in the menu |
category | How the menu groups poses — 'Portrait', 'Saloon', 'Casual' |
mode | Default playback: 'once', 'loop' or 'hold' |
walk | Add walk = true to make a pose default to upper-body |
duration | Shown as the length badge on each menu row; nothing reads it for playback — every clip is played with duration -1 |
Giving the poses real names and categories is the single highest-value edit here. The shipped labels are the internal ids, which tell a player nothing.
{ id = 'pose5', label = 'Leaning on the rail', dict = 'redmorrow_com@pose5',
clip = 'pose5', category = 'Saloon', duration = 1.967, mode = 'loop', rootMotion = false },Never edit
| Field | Why |
|---|---|
dict | Must match the name stored inside the .ycd file |
clip | Must match the clip name inside that dictionary |
A wrong dict means the dictionary never loads. A wrong clip means it loads and nothing plays. Neither raises an error.
Two entries are already unusual — leave them alone
hatsdown_clip uses dict redmorrow_com@pose7, and pose29 uses dict redmorrow_com@pose26. They look like mistakes and are not. "Correcting" them breaks both poses.
flags
An entry may carry a numeric flags field. If present it is used verbatim as the flag value — the resource stops deriving flags from mode, walk and rootMotion for that clip, so Config.RootMotionExtraFlags is not ORed in either.
walk still applies outside the flag value, though. It alone decides whether Config.BlockOnMount refuses the pose while mounted or in a vehicle, and whether Config.HolsterWeapon holsters a drawn weapon — both are tested against walk, not against your flag bits. The task slot, by contrast, is taken from your flags. So for a clip that should layer over locomotion, include UPPERBODY | SECONDARY (24) yourself, and set walk = true as well if it should be allowed on a mount or in a vehicle and leave the weapon drawn.
That is the escape hatch for a pose that needs something the three modes do not express. Leave it off unless you know the RDR3 flag values; they are listed in the Developer API.
rootMotion
Marks a clip that moves the character rather than holding it in place. Every shipped pose is false.
When a clip is marked true and is played full-body, Config.RootMotionExtraFlags is ORed into its flags — which is the hook for adding something like USE_MOVER_EXTRACTION if you add a travelling clip of your own.
What escrow protects
| Editable | Protected |
|---|---|
config.lua | stream/*.ycd |
clips.lua | client.lua |
README.md, LICENSE.md, docs/*.md | html/ |
You can rename, regroup and re-time every pose, change the menu and rebind the keys. You cannot extract or alter the animation data.
After editing
restart rm_30-custom-female-poseBoth files are client scripts read at load. A refresh alone is not enough.