Skip to content

Combat Moves Controls ​

Every key here is a default in config.lua and can be changed. Names come from client/keys.lua, which ships readable. INPUT_* control names resolve in only two places — the four dive inputs, and the gun-trick slots and nativeSlots entries — which fall through to GetHashKey when the name is not a key name. Config.MenuKey, Config.SlideKey, Config.Roll.key and Config.GunTricks.key go through CS.ResolveKey alone, so an INPUT_* name is not found there: the menu key is dropped with a console error and the panel is left on /combatmoves, and the other three fall back to C, LALT and TAB.

Keyboard ​

ActionDefaultSet in
Open the menuPGUPConfig.MenuKey
Open the menu (command)/combatmoves—
Jump straight to Gun Tricks/guntricks—
Slidehold C for 250 msConfig.SlideKey
RollLALT, with or without a movement directionConfig.Roll.key
Start / stop gun tricksdouble-tap NConfig.GunTricks.key
Next tricktap N while spinningsame key
Stop spinninghold N for 500 msConfig.GunTricks.holdToStopMs
DiveG plus a movement directionConfig.Dive.keyboard.diveInput
Go pronehold crouch for 500 msConfig.Dive.keyboard.proneInput
Stand up from pronetap crouchsame control
Roll onto your backthe jump control, while crawlingnot configurable
Sit up from pronethe lock-on-animal controlConfig.Dive.keyboard.sitInput
Stealth modedouble-tap the left-stick-click controlConfig.Dive.keyboard.stealthInput
Release everything/unstuck—

A direction is optional for the roll but required for the dive. pickClips() returns the forward pair when no movement control is held, and Config.Roll.allowFromStandstill ships true, so a bare LALT rolls you forward. The dive returns without diving if nothing is held, but one movement key on its own is enough, including S for a backward dive.

The defaults for the three dive controls are given as game controls rather than letters, so they follow whatever the player has those actions bound to:

SettingDefaultWhich action that is
proneInputINPUT_DUCKcrouch
stealthInputINPUT_FRONTEND_LSleft stick click
sitInputINPUT_INTERACT_LOCKON_ANIMALlock on to an animal

Controller ​

The resource reads IS_USING_KEYBOARD_AND_MOUSE every frame and swaps binding sets, exactly as the original does, so a player moving between a pad and a keyboard mid-session gets the right set each time. Only the dive feature has a separate controller set.

ActionDefault controlSet in
DiveINPUT_MELEE_GRAPPLE, held 300 msConfig.Dive.controller.diveInput
Go proneINPUT_DUCK, held 500 msConfig.Dive.controller.proneInput
Stealth modedouble-tap INPUT_LOOK_BEHINDConfig.Dive.controller.stealthInput
Sit up from proneINPUT_COVERConfig.Dive.controller.sitInput

The stealth double-tap window is tighter on a pad — 201 ms, against 401 ms on keyboard. Both numbers come from the original binary.

The slide, roll and gun-trick keys have no separate controller set, and an INPUT_* control name will not give them one. Config.SlideKey (in the default 'key' input mode), Config.Roll.key and Config.GunTricks.key are resolved with CS.ResolveKey only, which looks the name up in the raw keyboard hashes in client/keys.lua and returns nothing for an INPUT_* name. Each then prints a console error and falls back to its shipped default — C for the slide, LALT for the roll, TAB for gun tricks — so the binding looks unchanged in game.

The one supported way to put the slide on a game control is Config.InputMode = 'control' plus Config.SlideInput. The roll and gun-trick keys have no control-name path at all. The dive inputs need none — they already ship as control names.

Hold and tap timings ​

DefaultSetting
Slide hold250 msConfig.HoldDuration
Slide double-tap window400 msConfig.DoubleTapWindow
Gun-trick double-tap window400 msConfig.GunTricks.doubleTapWindow
Gun-trick hold-to-stop500 msConfig.GunTricks.holdToStopMs
Dive hold (keyboard)1 msConfig.Dive.keyboard.diveHoldTime
Dive hold (controller)300 msConfig.Dive.controller.diveHoldTime
Prone hold500 msConfig.Dive.keyboard.proneHoldTime
Stealth tap window401 ms / 201 msConfig.Dive.*.stealthTapWindow

A keyboard dive hold time of 1 means the dive fires on press. The controller's 300 ms exists because the grapple button has a normal job to do.

What each default key steals ​

Every default is already a game control, so binding it means taking that action away for as long as the key is held.

KeyNormal game actionHow it is handled
CINPUT_LOOK_BEHINDsuppressed while held, via Config.SuppressWhileHeld
NINPUT_PUSH_TO_TALKnot suppressed — see the warning below
GINPUT_INTERACT_OPTION1the dive needs a direction too, so a bare press still does its normal job
crouchduckprone needs a 500 ms hold, so a tap still crouches

N is push-to-talk

On a server with voice chat, double-tapping N to start spinning also keys the player's microphone. TAB (INPUT_TOGGLE_HOLSTER) is the obvious swap:

lua
Config.GunTricks.key = 'TAB'

This is not a bug in the resource — N is the original mod's key, and RedM puts push-to-talk on it. It is simply worth changing before launch on any server with voice.

If you change Config.SlideKey, change Config.SuppressWhileHeld to match, or set it to {} to leave the vanilla action alone:

lua
Config.SlideKey          = 'V'
Config.SuppressWhileHeld = {}   -- or the INPUT_* name V is bound to

Keys that cannot be bound ​

K, T and Y

RedM has no raw key hash for these three, so nothing can bind them. This is a platform limitation, not a limitation of this resource. The usable set in client/keys.lua is:

  • letters A–Z except K, T and Y
  • numbers 1–8
  • arrow keys, F1, F4, F6
  • CTRL, SHIFT, TAB, SPACEBAR, ENTER, BACKSPACE, LALT, DEL, PGUP, PGDN
  • MOUSE1, MOUSE2, MOUSE3, MWUP, LEFTBRACKET, RIGHTBRACKET

A raw hash works too: Config.SlideKey = 0x9959A6F0 is C.

The per-trick keys the original mod used — G H J B L F for tricks 1–6 — are not bound here. Every one of them is a real game control, and because RDR2 hides a prompt whose control is disabled, suppressing them also stopped their prompt rows drawing, so they cost something and earned nothing. Tap N for the next trick, or pick one in the menu.

Config.GunTricks.slots is left in place as an empty table rather than removed, so putting them back is a config change rather than a code change.

Letting players choose their own slide key ​

lua
Config.InputMode  = 'keymap'
Config.DefaultKey = 'C'

The slide then appears in the player's own Settings → Key Bindings → FiveM list and they pick the key themselves. The other two modes are:

Config.InputModeReadsUses
'key'a plain keyboard key by nameConfig.SlideKey (default)
'control'an in-game control nameConfig.SlideInput
'keymap'a rebindable bindingConfig.DefaultKey as the starting offer

Only the slide has an input mode. The roll and gun-trick keys are read as key names only — a control name is rejected and the shipped default is substituted. The dive inputs and the gun-trick slots and nativeSlots entries are the places that accept either form.

Driving the menu ​

Arrow keysmove, and change the value on a slider or options row
Enterselect
Backspacego back a page
Escapeclose
Tabfocus the search box
Mousehover to highlight, click to activate, click a ◀ ▶ to nudge a value, wheel to scroll, click outside to close

You cannot walk around while the panel is open. The menu calls SetNuiFocus(true, ...) and the resource never calls SetNuiFocusKeepInput, so the keyboard goes to the page and the game receives nothing — your character stands still until you close it. The mouse cursor is the second half of that call and needs Config.MenuMouse, which is on by default — the trade-off and how to turn it off live are covered on The menu.

Documentation for RedMorrow. Scripts are licensed per server — redistribution is not permitted.