Knowledge from the fieldRedM

mech_loco_m@* and other LOCO clipsets cannot be played with TASK_PLAY_ANIM — they are clipsets, not regular anim dicts

learning:14

mech_loco_m@* and other LOCO clipsets cannot be played with TASK_PLAY_ANIM — they are clipsets, not regular anim dicts

Context

You want a ped to play a "walking while carrying X" animation. You search the discoveries anim list and find dicts like mech_loco_m@character@arthur@carry@dynamite_stick@walk ("move") or mech_loco_m@character@arthur@carry@dynamite_stick@idle ("idle"). You try to load them with RequestAnimDict and play with TASK_PLAY_ANIM. Silent no-op — anim never starts.

The trap

mech_loco_m@* (and mech_loco_f@*) are LOCOMOTION CLIPSETS, not script anim dicts. They are applied to the ped's locomotion archetype, not played as one-shot anims. RequestAnimDict may even return true and HasAnimDictLoaded may be true, but TASK_PLAY_ANIM does nothing visible.

Related learning:11 covers this distinction for walkstyles. Same applies to carry locomotions.

What works instead

For "walk while carrying a stick of dynamite", use a regular script_story@* anim dict that has a sync-scene-style player anim. Verified working:

  • script_story@wnt4@ig@ig28_bill_rigging_walk — has ig28_bill_rigging_walk_ig_billwilliamson (player) and ig28_bill_rigging_walk_p_dynamite01x (the dynamite prop, synced).
  • script_story@wnt4@ig@ig32_arthur_spool_pickups@{front,back,left,right} — pickup-from-direction anims for fuse spool prop.
  • script_ca@cachr@ig@ig3_explosives — placement of detonator/dynamite/fuse spool, has place_dynamite_*_p_detonator01x anims for the prop.

Quick test

If RequestAnimDict returns true but IsEntityPlayingAnim(ped, dict, name, 3) is false 100ms after TASK_PLAY_ANIM, you're hitting this. Switch to a script_story@* or script_re@* dict.

Caveats

The script_story dicts are authored from cutscenes — they often include root-motion that physically translates the ped (and may end abruptly because the cutscene fades). Useful for scripted moments, less so for pure "walking-loop" overlays. Upper-body flag (16) + secondary flag (32) + looping flag (1) = flag 49 lets the player still drive their own movement, but the anim still ends at its authored duration unless the dict has true loop variants.


Tags: none
Category: uncategorized
Created: 2026-05-01T13:42:59.046Z

Back to documentation