Knowledge from the fieldRedM

NPC "hands you an item" gesture: give_item_satchel anim + a frozen ped must be spawned already facing you (freeze locks rotation, so TASK_TURN_PED_TO_FACE_ENTITY no-ops)

learning:87

NPC "hands you an item" gesture: give_item_satchel anim + a frozen ped must be spawned already facing you (freeze locks rotation, so TASK_TURN_PED_TO_FACE_ENTITY no-ops)

Goal

A companion/quest NPC reaches into his satchel and "hands" the player something (a knife, a letter) during a dialogue beat — the polish that sells a handover.

The give animation (generic, reusable — not a story-mission anim)

dict = "script_common@mth_generic_enters@give_item_satchel@rhand@lleg_forward"
anim = "enter_rf"   -- also "enter_lf"

There's also script_common@mth_generic_enters@give_item_satchel@lhand@generic@step_forward (same enter_lf/enter_rf names). These are the "reach into satchel and offer it" gestures, generic and safe to reuse (unlike the b_handover_* / handover_* mission anims which are character-baked).

TWO standard anim traps apply:

  • The anim NAME is NOT the dict suffix. The dict ends in ...lleg_forward but the anim is enter_rf, not lleg_forward. (Grep the dict's body in ingameanims_list.lua for the real names.)
  • TaskPlayAnim silently no-ops unless RequestAnimDict(dict) + a while not HasAnimDictLoaded(dict) do Wait(0) end preload finished first. Play it with flag 48 (upper-body + secondary) so it layers over the ped's idle / head-track instead of resetting his pose.

The real trap: a FROZEN ped won't turn to face you

A dialogue NPC is usually FreezeEntityPosition(ped, true) so he stays put. But freeze locks rotation too — so TASK_TURN_PED_TO_FACE_ENTITY (0x5AD23D40115353AC) does nothing and he stays facing whatever way he spawned (often away from the player). Symptom: "the anim plays but he never turns to me."

Fix: compute the heading from his spot toward the player and set it before freezing (and again after PlaceEntityOnGroundProperly, which can nudge it), rather than relying on a turn task:

-- his spot (x,y), player at (px,py). RDR3 heading: 0 = +Y, CCW-positive.
local heading = math.deg(math.atan(-(px - x), (py - y)))   -- Lua atan(y,x) = atan2
CreatePed(model, x, y, z, heading, ...)
PlaceEntityOnGroundProperly(ped, true)
SetEntityHeading(ped, heading)        -- re-assert (PlaceOnGround can nudge)
FreezeEntityPosition(ped, true)
-- head-track still works while frozen (upper body); only the body TURN is blocked:
Citizen.InvokeNative(0x69F4BE8C8CC4796C, ped, player, -1, 2048, 3, 0) -- TASK_LOOK_AT_ENTITY

TASK_LOOK_AT_ENTITY (head-track) is unaffected by the freeze — keep it for the "he's addressing you" read; just don't depend on the body-turn task.

Linked natives

  • TASK_LOOK_AT_ENTITY (0x69F4BE8C8CC4796C)
  • TASK_TURN_PED_TO_FACE_ENTITY (0x5AD23D40115353AC)

Tags: animation, ped, handover, giveitem, freeze, facing, companion, rdr3
Category: natives
Source: scandi_onboarding hunt step
Created: 2026-06-04T16:23:09.579Z

Back to documentation