487 Emotes.
Zero Idle Memory.
rde_emotes is a complete emote system for ox_core: 487 native GTA5 animations across 10 categories, on-demand AnimDict loading with a 0 MB idle baseline, a cinematic live-preview camera, and built-in finger-point, crouch, and ragdoll gestures — all StateBag-synced.
Overview
487 validated native GTA5 animations, a cinematic live-preview camera so you see the emote on your own character before you play it, full multiplayer sync via StateBags, and a custom pack system that lets you drop in your own animations without touching a single line of core code.
Why this over generic emote scripts
| Generic Emote Scripts | rde_emotes |
|---|---|
| All anim dicts loaded permanently (~3.5 MiB+) | On-demand loading — 0 MB idle baseline |
| No live preview while browsing | Cinematic orbit camera — see it before you play it |
| Custom anims require editing core files | Drop-in custom pack system, zero core edits |
| Gestures are a separate resource | Finger point, crouch, ragdoll built in — StateBag synced |
Quick Start
ensure oxmysql
ensure ox_lib
ensure ox_core
ensure rde_emotes
The favorites table auto-creates on first start — no manual SQL import needed. Open the menu with F4.
| Key | Action | Rebindable |
|---|---|---|
| F4 | Toggle emote menu | ✅ FiveM Settings |
| X | Stop current emote | ✅ FiveM Settings |
| B | Finger point toggle | ✅ FiveM Settings |
| G | Ragdoll toggle | ✅ FiveM Settings |
| CTRL | Crouch / Stand toggle | ❌ Fixed (intercepts INPUT_DUCK) |
Gesture System (v1.0.1)
Three essential RP gestures, StateBag synced, no extra resource required:
| Gesture | How it works |
|---|---|
| Finger Point (B) | GTA:O native task_mp_pointing with camera pitch/heading tracking and wall-collision raycast — all players see the direction natively |
| Crouch / Stand (CTRL) | move_ped_crouched clipset, intercepts INPUT_DUCK, StateBag-synced via rde_emt_gesture |
| Ragdoll (G) | SetPedToRagdoll, auto-resets when the ped settles, GTA native network sync handles visibility |
Custom Pack System
AddCustomEmotes({
{
id = 'my_dance',
label = 'My Custom Dance',
type = 'anim',
dict = 'my_dict@',
clip = 'my_clip_name',
loop = true,
category = 'dance',
},
})
Drop the .lua file into data/custom/ — auto-loaded via fxmanifest wildcard, no config changes needed. Drop .ycd stream files into stream/[Your Pack Name]/. Auto-categorized by keyword detection.
Developer API
| Function | Notes |
|---|---|
| Anim_Play(emote) | Play an emote table directly |
| Anim_Stop() | Stop the currently active emote |
| Anim_IsPlaying() | Returns true/false |
| Anim_GetActive() | Returns the active emote table, or nil |
Performance
| State | Cost |
|---|---|
| Idle | 0.00 ms — no AnimDicts loaded, gestures at Wait(250–500) |
| Active | 0.01–0.03 ms — emote playing or finger pointing |
| Memory | 0 MB baseline → ~50–300 KB per loaded dict, auto-unloaded |
Common Pitfalls
Finger point not responding to B
The keybind registers on first resource start — if left blank in FiveM's key bindings menu, it won't trigger.
Fix: check FiveM Settings → Key Bindings → FiveM → "Point finger", assign B manually if blank. Use /fp to verify the logic independently of the keybind.
Crouch doesn't sync to other players
The rde_emt_gesture StateBag requires OneSync to broadcast to nearby clients.
Fix: ensure OneSync is enabled on the server.
FAQ
Does adding custom emotes require editing core files?
No — drop a .lua file into data/custom/ and it's auto-loaded and auto-categorized, zero core changes.
Is a synced two-player emote (hug, handshake) supported?
Not yet — it's on the roadmap alongside a radial emote wheel and per-emote sound effects.
Changelog
Gesture system added — finger point, crouch/stand toggle, ragdoll toggle, all StateBag-synced.
487 native emotes across 10 categories, on-demand loading, live preview camera, custom pack system, favorites.