Combat Moves Configuration
Everything lives in config.lua, which ships readable. client/keys.lua does too, so you can add a key name that is not listed.
The three layers
| Layer | Set in | Authority |
|---|---|---|
| Convars | server.cfg | highest — a player cannot get past these |
config.lua | the file | the defaults every client starts with |
| In-game menu | the panel | that player's own session, lost on restart |
A value changed in the menu applies immediately and lasts until the resource restarts. It is not saved and not sent to anyone else.
- To make a value permanent, put it in
config.lua. - To make a value unreachable, use a convar or hide the row.
Input
| Default | ||
|---|---|---|
Config.MenuKey | 'PGUP' | nil for the command only |
Config.MenuMouse | true | cursor in the menu |
Config.InputMode | 'key' | 'key', 'control' or 'keymap' |
Config.SlideKey | 'C' | used by 'key' mode |
Config.SlideInput | 'INPUT_COVER' | used by 'control' mode |
Config.DefaultKey | 'C' | the opening offer in 'keymap' mode |
Config.SuppressWhileHeld | { 'INPUT_LOOK_BEHIND' } | actions to swallow while the slide key is held |
Config.ActivationType | 'Hold' | 'Hold', 'DoubleTap' or 'SingleTap' |
Config.HoldDuration | 250 | ms, for 'Hold' |
Config.DoubleTapWindow | 400 | ms, for 'DoubleTap' |
Config.HoldReleaseStopsSlide | true | letting go ends the slide early |
C is Look Behind by default, which is why SuppressWhileHeld has that entry. If you change SlideKey, change it to match — or set it to {} to leave the vanilla action alone.
Slide behaviour
| Default | ||
|---|---|---|
Config.InfiniteSlide | false | slide until stopped manually |
Config.SlideDuration | 1500 | ms |
Config.MaxInfiniteDuration | 10000 | RedM hard cap, so a stuck client cannot slide forever |
Config.CrouchAfterSlide | true | |
Config.CustomCamera | true | the slide camera |
Config.EnableDeadEyeAutomaticallyDuringSlide | true | |
Config.EnableBulletTimeDuringSlide | false | desyncs the player — see below |
Config.BulletTimeScale | 0.4 | lower is slower |
Config.StaminaDrainRate | 2.0 | per second of sliding |
Config.StaminaSafetyFloor | 10 | RedM; 0 for parity with the original |
Config.SlideSpeed | 0.0 | extra speed; 0 lets the clip move the ped |
Config.ApplyMudDecal | false |
Bullet time is a client-wide time-scale change
The player using it sees the world slowed while everyone else sees them moving normally. It ships off. Block it from server.cfg so the menu cannot turn it back on — see Server setup.
The stamina safety floor exists because an empty stamina core makes RDR2 start draining the health core. It was investigated as a cause of players dying mid-slide and ruled out; it is kept only so a long session does not wear a player down.
Movement tuning
RedM-specific. Covered in full on Combat Slide.
| Default | ||
|---|---|---|
Config.MovementMode | 'velocity' | dead — declared but never read; the forward push is gated on Config.Apply.velocity and SlideSpeed > 0, the drift and brake on Config.Apply.velocity alone |
Config.LockHeading | false | leave this off — on, the weapon never reaches a firable state |
Config.SteerRate | 2.5 | degrees per frame, the original's value |
Config.FaceAimWhileSliding | true | face where you look; A/D drift, S brakes |
Config.SlideDrift | 1.0 | m/s of sideways drift |
Config.SlideBrakeSpeed | 1.5 | m/s that S brakes down to |
Config.FaceWhereYouAim | false | keep facing your aim while aiming |
When sliding is allowed
| Default | ||
|---|---|---|
Config.MinSpeed | 2.5 | m/s of ground speed required |
Config.RequireSprint | false | true demands a real sprint, not a jog |
Config.Cooldown | 750 | ms between slides |
Config.AllowInWater | false | |
Config.AllowIndoors | true | |
Config.AllowInCombat | true | false blocks sliding while in melee combat |
Config.BlockWithBinoculars | true | |
Config.KeepWeaponDrawn | true | gates the Config.SlideResetFlags loop; it never re-equips anything |
Config.ObstacleCheckDistance | 1.6 | metres; 0.0 disables the probe |
Config.ForceThirdPerson | true | dead — declared but never read; third person is forced only when the slide started in first person and Config.Apply.camera is on |
Config.SlideResetFlags | { 93 } | PRF_DontQuitMotionAiming |
Never add reset flag 27
PRF_BlockWeaponFire will stop the weapon firing mid-slide. Note also that the list above is only applied while Config.KeepWeaponDrawn is true — the two rows are not independent, and setting KeepWeaponDrawn to false stops flag 93 being applied at all.
Config.AbortOn decides which ped states cut a slide short — dead, ragdoll, mount and vehicle are on; incapacitated is off, because IS_PED_INCAPACITATED was observed firing mid-slide on a player at full health.
Animation
Config.Anim holds the dictionaries, clips, flags, filters and timing read out of the original ASI. Full table on Combat Slide. The ones worth touching:
| Default | ||
|---|---|---|
useWeaponFilters | true | false gives a plain full-body slide |
forceFilter | nil | force one filter for testing |
disabled | false | dead — declared but never read; for a slide with no animation task set Config.Apply.anim = false |
femaleEntryDict / femaleExitDict | nil | the defaults read fine on female models |
Combat Roll
| Default | |
|---|---|
Config.Roll.enabled | true |
Config.Roll.trigger | 'key' |
Config.Roll.key | 'LALT' |
Config.Roll.cooldown | 900 |
Config.Roll.requireAiming | false |
Config.Roll.allowFromStandstill | true |
Config.Roll.faceCamera | true |
Config.Roll.lockHeading | true |
Config.Roll.disablePainAudio | true |
Config.Roll.handoverPhase | 0.84 |
Config.Roll.exitPhase | 0.005 |
Config.Roll.phaseTimeoutMs | 2000 |
The phase values and the menu-slider caveat are on Combat Roll.
Gun Tricks
| Default | |
|---|---|
Config.GunTricks.enabled | true |
Config.GunTricks.key | 'N' — push-to-talk in RedM |
Config.GunTricks.doubleTapWindow | 400 |
Config.GunTricks.holdToStopMs | 500 |
Config.GunTricks.nextTrickKey | nil |
Config.GunTricks.requirePistol | true |
Config.GunTricks.handMode | 'auto' |
Config.GunTricks.holsterOnStop | true |
Config.GunTricks.cooldown | 600 |
Config.GunTricks.random | 'start' |
Config.GunTricks.notifyOnChange | true |
Config.GunTricks.hudMode | 'none' |
Config.GunTricks.slots | {} |
Config.GunTricks.nativeSlots | {} |
Config.GunTricks.suppressSlotControls | true |
Config.GunTricks.suppressSelectKeys | true |
Config.GunTricks.promptForceEnableControls | false |
Full detail on Gun Tricks.
Dive, Crawl & Gun
The inputs, the .ini switches and the recovered constants are all under Config.Dive. The complete tables are on Dive, Crawl & Gun; the headline values:
| Default | |
|---|---|
Config.Dive.enabled | true |
Config.Dive.keyboard.diveInput | 'G' |
Config.Dive.keyboard.proneInput | 'INPUT_DUCK' |
Config.Dive.keyboard.proneHoldTime | 500 |
Config.Dive.enableIFramesDuringDive | true — think about this one |
Config.Dive.minStaminaToDive | 10.0 |
Config.Dive.diveStaminaCost | 9.0 |
Config.Dive.cooldown | 800 |
Config.Dive.backwardTransitionToSitting | false |
Config.Dive.holdStillWhileProneAiming | true |
Config.Dive.crawlWalkSpeed | 0.0 |
Config.Dive.enableProneCamera | true |
Config.Dive.enableDiveCamera | true |
Stealth is under Config.Dive.stealth — see Stealth mode.
Everything under Config.Dive.anim is verbatim from the decompile
69 call sites, each with its own flags, ikFlags, bone filter and blend times. Changing a value there is not a tuning exercise; measure first with cs_diveanim and cs_flags, which print real clip durations and decode flag bits by name.
Debug
Config.Debug = true -- ships ONSet this to false before you go live
It ships true, which prints a state report to every player's own console after every slide, roll, trick and dive.
It only gates printing
client/debug.lua registers all 28 cs_* commands and /unstuck whether Config.Debug is on or off, and the two diagnostic threads only start when a player runs cs_watch or cs_dive. So turning it off does not remove the commands — and /unstuck keeps working in production, which is what you want. See Debug commands.
Bisection switches
Config.Apply switches every individual thing a slide does to the ped. In normal use they should all be true.
Config.Apply = {
anim = true, -- TASK_PLAY_ANIM
camera = true, -- the scripted slide camera
velocity = true, -- SET_ENTITY_VELOCITY each frame
heading = true, -- SET_ENTITY_HEADING each frame
controls = true, -- the DISABLE_CONTROL_ACTION list
actionFlags = true, -- _SET_PED_ACTION_DISABLE_FLAG
resetFlags = true, -- SET_PED_RESET_FLAG; also needs Config.KeepWeaponDrawn
stamina = true, -- _CHANGE_PED_STAMINA
}With all of them false a slide does nothing but run its timer, so one can be turned back on at a time to find which one breaks something. cs_sweep drives them automatically, one configuration per slide, recording whether the animation played and whether a shot came out.
Disabled controls
Config.DisabledControls = {
'INPUT_MELEE_ATTACK',
'INPUT_MELEE_GRAPPLE',
'INPUT_MELEE_GRAPPLE_ATTACK',
'INPUT_MELEE_GRAPPLE_CHOKE',
'INPUT_MELEE_GRAPPLE_REVERSAL',
'INPUT_MELEE_BLOCK',
}
Config.DisableRelatedActions = true
Config.BlockAttackUnlessAiming = trueExactly the six the original disables. Note it does not disable jump, cover, duck or dive. Config.ActionDisableFlags is built as 0–34 and is used by the clean-up path.
Where the original's .ini names went
Combat Slide.ini | config.lua |
|---|---|
SlideInput | Config.SlideKey |
ActivationType | Config.ActivationType |
HoldDuration | Config.HoldDuration |
HoldReleaseStopsSlide | same name |
InfiniteSlide | Config.InfiniteSlide |
SlideDuration | Config.SlideDuration |
CrouchAfterSlide | same name |
CustomCamera | Config.CustomCamera |
EnableDeadEyeAutomaticallyDuringSlide | same name |
EnableBulletTimeDuringSlide | same name |
BulletTimeScale | Config.BulletTimeScale |
StaminaDrainRate | Config.StaminaDrainRate |
SlideSpeed | Config.SlideSpeed |
ApplyMudDecal | Config.ApplyMudDecal |
CombatRoll.ini's JOHN_ONLY is dropped — meaningless with arbitrary character models. GunTricks.ini only configured its own menu key. Dive - Crawl N Gun.ini keeps its names under Config.Dive, with both control sections preserved as Config.Dive.keyboard and Config.Dive.controller.