UI natives
Mods never fight the game's own HUD if they can help it — they take over input with a handful of natives, draw their own layer, and give control back so nothing leaks. This is the native layer a mod's menu, radial wheel and instructions are built from.
Taking input away
DISABLE_CONTROL_ACTION(inputGroup, controlIndex, disable) freezes a specific control (fire, cover, movement…). In real UI — a radial menu taking over the hand, a dialogue expecting a click — this is what stops the game from also firing while your wheel is open:
Function.Call(Hash.DISABLE_CONTROL_ACTION, 0, (int)Control.Select, true);
When you need it: any custom surface that must be modal. Without it, the game's own bindings bleed through your menu and the player aims, shoots or pulls up the phone while "talking" to your NPC. Disable on open, re-enable on close — symmetric, or your controls stay dead forever.
Reading input
IS_CONTROL_JUST_PRESSED(inputGroup, controlIndex) and GET_CONTROL_NORMAL(inputGroup, controlIndex) give you the player's hand directly.
When you need it: the wheel's open-hand moment. Real wheels and quick menus poll control indices — not Key.W enums — so they behave identically for gamepad and keyboard, and they gate on IS_CONTROL_JUST_PRESSED instead of a raw key so input feels like one action, not a held button re-firing every frame.
Drawing text
The text stack opens with BEGIN_TEXT_COMMAND_*, fills with ADD_TEXT_COMPONENT_*, closes with END_TEXT_COMMAND_* (e.g. END_TEXT_COMMAND_DISPLAY_HELP). Drawing a subtitle or a help message is always this three-beat shape.
When you need it: feeding the player the "why" of a scene — a shortness instruction near a caption point, a short help line the player can dismiss. The three parts are rigid: open, add, display. Skip one and the text silently swallows itself.
Help vs subtitle vs ticker
The natives mirror the surface types GTA distinguishes: numbered help and subtitles for diegetic speech and instructions, while confirmations and system state are ticker/notification text that share none of the stack.
When you need it: choosing which native to touch. A line of dialogue is a subtitle; a saved-config confirmation is a ticker; a short tutorial hint is help text. Using the right surface keeps your UI from stacking two voices on top of the player's screen.
What not to do
- Loop
DISABLE_CONTROL_ACTIONinTickand remember to restore (the same disable call withfalse, or the input silently cancels); the symmetry failure — disabling on open, forgetting on close — is the classic "my controls got eaten" bug. - Don't mix a menu and subtitles full-screen at once; one reading surface at a time, and the natives are part of keeping that discipline.