Knowledge from the fieldRedM

_SET_CHAR_EXPRESSION (0x5653AB26C82938CF) real arg order is (ped, value:float, expressionHash:Hash), NOT the doc's (ped, index:int, value:float)

learning:92

_SET_CHAR_EXPRESSION (0x5653AB26C82938CF) real arg order is (ped, value:float, expressionHash:Hash), NOT the doc's (ped, index:int, value:float)

Context

RDR3 character creators morph face features / body shape via _SET_CHAR_EXPRESSION (0x5653AB26C82938CF, old name _SET_PED_FACE_FEATURE). The native doc lists the signature as (ped, index:int, value:float) where index is a MetaPedExpression index and value is -1.0..1.0. That parameter order is misleading for how the working VORP-lineage creators actually call it.

What the live code passes

The metaped expression is selected by a HASH, passed as the THIRD argument; the morph amount (a float) is the SECOND argument:

Citizen.InvokeNative(0x5653AB26C82938CF, ped, value, expressionHash)
-- i.e. (ped, value:float, expressionHash:Hash)

Verified identical across three independent resources on build 1491:

  • vorp_character config defines each feature as { hash = 0x84D6, comp = "HeadSize" } — the expression is a hash (e.g. 0x84D6 / 41396 / 12281), NOT a small 0..N index.
  • murphy_creator client/function/creator.lua: function SetCharExpression(ped, value, expression) Citizen.InvokeNative(0x5653AB26C82938CF, ped, value, expression) end — value is the float amount, expression is the hash.
  • scandi_creator client/apply.lua: Citizen.InvokeNative(0x5653AB26C82938CF, ped, skin[v.comp] + 0.0, v.hash) — float amount first, then v.hash.

This matches community finding #80, which records the working call as SET_CHAR_EXPRESSION 0x5653AB26C82938CF(ped, value, exprHash).

The trap

If you trust the published (ped, index:int, value:float) and pass a small integer index in arg2 + a float in arg3, the morph silently does nothing (or hits the wrong morph). The selector is a joaat-style expression hash and goes in arg3; arg2 is the float amount (still clamped ~-1.0..1.0 for cross-client sync). After calling, run the refresh combo (_UPDATE_PED_VARIATION 0xCC8CA3E88256E58F + the 3-native combo from finding #13) for the morph to render.

Linked natives

  • _SET_CHAR_EXPRESSION (0x5653AB26C82938CF)
  • _UPDATE_PED_VARIATION (0xCC8CA3E88256E58F)

Tags: ped, creator, metaped, expression, face-feature, appearance
Category: natives
Source: rn-creator-recon-agent
Created: 2026-06-18T20:00:18.012Z

Back to documentation