Safecracking move-network def is Script_MUD5_Safecrack_Player (NOT mini_games@safecrack); name lives in alloc8or move_networks.txt, not native docs
Goal
Drive RDR2's real safe-cracking minigame (kneel at dial, listen for tumbler clicks) from a script — the immersive "rob the safe" animation. The mechanic is a move-network task: TASK_MOVE_NETWORK_BY_NAME_WITH_INIT_PARAMS (0x139805C2A67C4795) / ..._ADVANCED_... (0x7B6A04F98BBAFB2C) with a caller-built DataView taskData* struct.
The trap
The first thing you reach for is the anim-DICT name as the move-network DEF name, e.g. mini_games@safecrack@base (the dict exists — HasAnimDictLoaded returns true). But move-network def names are a SEPARATE namespace from anim dicts. Verified live on build 1491:
REQUEST_MOVE_NETWORK_DEF("mini_games@safecrack@base")→HAS_MOVE_NETWORK_DEF_LOADEDstays false (60ms+). Same for bare"safecrack".- The task then no-ops (
IS_TASK_MOVE_NETWORK_ACTIVE= false).
The fix — the real def name
Move-network def names are catalogued in alloc8or's dump, referenced by _GET_TASK_MOVE_NETWORK_ID (0xCACC2F9D994504B7): https://alloc8or.re/rdr3/doc/misc/move_networks.txt . The safecrack-related defs there are:
Script_MUD5_Safecrack_Player← runs on the CRACKER pedScript_MUD5_Safecrack_Safe← runs on the SAFE entityScript_MPOUT4_Safecrack_Player
Verified live (build 1491): REQUEST_MOVE_NETWORK_DEF("Script_MUD5_Safecrack_Player") → HAS_MOVE_NETWORK_DEF_LOADED = true in ~60ms, and TASK_MOVE_NETWORK_ADVANCED_BY_NAME_WITH_INIT_PARAMS on the player ped → IS_TASK_MOVE_NETWORK_ACTIVE = true. So the task starts.
Useful probe natives (all confirmed present, build 1491)
REQUEST_MOVE_NETWORK_DEF0x2B6529C54D29037AHAS_MOVE_NETWORK_DEF_LOADED0x2C04D89A0FB4E244(BOOL) — your "is this name real?" oracle. Brute-test candidate names with this.IS_TASK_MOVE_NETWORK_ACTIVE0x921CE12C489C4C41(BOOL) — did the task actually start on the ped.GET_TASK_MOVE_NETWORK_STATE0x717E4D1F2048376D(const char*) — current state node name; use this to read the dial/crack progress instead of guessing signal names.REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION0xD01015C7316AE176(ped, name) — drive the net to the next state.
Method that works for ANY unknown move-network
Don't grep the native docs for def names (they aren't there). Pull the full list from move_networks.txt, then brute-confirm each candidate with REQUEST_MOVE_NETWORK_DEF + HAS_MOVE_NETWORK_DEF_LOADED in a tight loop in-game. The dict the net references (mini_games@safecrack@base) still needs RequestAnimDict loaded alongside.
Soundset for the clicks: RDRO_Safecracking_Sounds. Freestanding safe model with open anim: s_safe01x (0x45FCD11E) — NOT p_safebla01x (that's a vault-DOOR panel).
Linked natives
_GET_TASK_MOVE_NETWORK_ID(0xCACC2F9D994504B7)GET_TASK_MOVE_NETWORK_STATE(0x717E4D1F2048376D)HAS_MOVE_NETWORK_DEF_LOADED(0x2C04D89A0FB4E244)IS_TASK_MOVE_NETWORK_ACTIVE(0x921CE12C489C4C41)REQUEST_MOVE_NETWORK_DEF(0x2B6529C54D29037A)REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(0xD01015C7316AE176)TASK_MOVE_NETWORK_ADVANCED_BY_NAME_WITH_INIT_PARAMS(0x7B6A04F98BBAFB2C)TASK_MOVE_NETWORK_BY_NAME_WITH_INIT_PARAMS(0x139805C2A67C4795)
Tags: safecrack, movenetwork, task, minigame, robbery, rdr3, animation
Category: natives
Source: scandi-robbery-core-build
Created: 2026-06-09T16:40:32.234Z