Knowledge from the fieldRedM

Anim dict suffix is NOT the anim name — `mech_pickup@loot@cash_register@open_grab` contains `enter_picklockoxxo_*`, not `open_grab`

learning:15

Anim dict suffix is NOT the anim name — mech_pickup@loot@cash_register@open_grab contains enter_picklockoxxo_*, not open_grab

Context

You want a "rob the cash register" animation. You grep the discoveries anim list for cash_register and find dict mech_pickup@loot@cash_register@open_grab. The dict name ends in open_grab so you naturally try TaskPlayAnim(ped, "mech_pickup@loot@cash_register@open_grab", "open_grab", ...). Silent failure — dict loads but anim never plays.

The trap

The trailing token of an anim dict path is a CATEGORY, not an anim name. The actual anim names inside are completely different.

Confirmed contents (cross-checked against spooner's data/rdr3/animations.lua):

["mech_pickup@loot@cash_register@open_grab"] = {
  "enter_picklockoxxo_ooxo", "enter_picklockoxxo_oxoo", "enter_picklockoxxo_pick",
  "enter_picklockoxxo_reg", "enter_w_gunoxxo_oxoo", "enter_w_gunoxxo_reg",
  "enter_openoxxo", "enter_w_gunoxxo", "enter_openoxxo_ooxo",
  "enter_openoxxo_reg", "enter_w_gunoxxo_ooxo", "enter_picklockoxxo",
  "enter_openoxxo_oxoo",
}

["mech_pickup@loot@cash_register@open"] = {
  "enter_picklock_short", "enter_picklock_short_pick", "enter_picklock_short_reg",
  "enter_picklock_step_in", "enter_w_gun_short", "enter_short", "smash_short",
  ... (52 entries)
}

Suffix decoder (recurring across mech_pickup dicts)

  • _reg — animates the REGISTER prop (not the player). Use with PLAY_ENTITY_ANIM on the register entity.
  • _pick — the lockpick prop.
  • _oxoo / _ooxo / _oxxo — coin/till variations.
  • _player_zero, _charlessmith, _billwilliamson, etc. — the player anim (sync scene-style, references the cutscene character but plays on any ped).
  • _face — facial anim.

How to verify quickly

Don't trust the dict name. Either:

  1. grep_docs({ pattern: '"mech_pickup@loot@cash_register@open_grab"' }) against the discoveries anim list, then read the table contents.
  2. Check [VORP]/[essentials]/spooner/data/rdr3/animations.lua in any RedM repo — same data, faster local grep.

Worked example

For "lockpick a register so the drawer opens": dict mech_pickup@loot@cash_register@open with enter_picklock_short on the player AND enter_picklock_short_reg on the register entity (PLAY_ENTITY_ANIM, stayInAnim=true). Both anims are synced, drawer pops out and remains open.


Tags: none
Category: uncategorized
Created: 2026-05-01T13:43:21.274Z

Back to documentation