Config
Add a realistic recoil feel to your weapons without making them annoying.
// Config
Config = {}
-- Master toggles
Config.Enabled = true
Config.Debug = false -- /recoil_debug toggles runtime debug prints
Config.DisableWhileInMenu = true -- pauses logic when pause menu is open
-- Input / detection
Config.ADSControl = 25 -- INPUT_AIM (Right Mouse / LT)
Config.RunControl = 21 -- INPUT_SPRINT
Config.RecoilTickMs = 0 -- 0 = every frame when armed, otherwise sleeps this many ms (0 recommended)
-- Recoil behavior (global multipliers)
-- Vertical recoil knobs:
-- 1) Config.Global.RecoilScale (master strength)
-- 2) Config.DefaultWeapon.PitchMin/PitchMax (fallback per-shot kick)
-- 3) Config.Weapons[WEAPON_*].PitchMin/PitchMax (per-weapon)
-- 4) Config.Global.MaxPitch (hard cap on accumulated recoil)
-- 5) SustainGrowPerShot / SustainMax (extra climb over sustained fire)
Config.Global = {
-- Recoil scale depending on stance/state
ADSMultiplier = 0.05, -- lower recoil when aiming down sights
HipMultiplier = 0.15,
RecoilScale = 0.018, -- overall recoil strength (lower = less recoil)
MovingMultiplier = 0.20,
SprintingMultiplier = 0.20,
InAirMultiplier = 0.20,
VehicleMultiplier = 0.20,
DuckingMultiplier = 0.25, -- IsPedDucking (only true if your server enables crouch)
CoverMultiplier = 0.15,
-- Sustained fire
SustainGrowPerShot = 0.000, -- additional recoil per shot while holding trigger
SustainMax = 0.000, -- max added recoil from sustain
SustainResetMs = 240, -- if you stop shooting for this long, sustain decays quickly
-- Horizontal drift shaping
HorizontalBias = 0.00, -- -1..+1 overall push to one side (0 = neutral)
HorizontalRandomness = 0.025, -- 0..1 randomness amount (lower = less side-to-side)
ExtraHorizontalScale = 0.000, -- extra side drift added per shot (set 0 to disable)
PatternSeedPerWeapon = true, -- stable drift per weapon so it feels consistent
-- Recovery
RecoverySpeed = 24.0, -- higher = returns to neutral faster (per second)
MaxPitch = 0.05, -- clamp recoil pitch offset (degrees)
MaxHeading = 0.025, -- clamp recoil heading offset (degrees)
-- Camera shake (optional, subtle)
CameraShakeEnabled = true,
CameraShakeType = 'SMALL_EXPLOSION_SHAKE',
CameraShakeScale = 0.12, -- global shake scale multiplier (raise/lower to taste)
-- Aim sway (optional)
AimSwayEnabled = false,
AimSwayPitch = 0.008, -- degrees (subtle)
AimSwayHeading = 0.010, -- degrees (subtle)
AimSwaySpeed = 0.85, -- speed multiplier
AimSwayMoveBoost = 1.25, -- sway increases while moving
}
-- Default recoil profile (used when weapon not listed below)
Config.DefaultWeapon = {
-- Camera punch per shot (degrees)
PitchMin = 0.006,
PitchMax = 0.010,
HeadingMin = -0.004,
HeadingMax = 0.004,
-- Extra per-shot shake (multiplies global)
Shake = 1.0,
-- First shot kick (semi-auto / tap fire feel)
FirstShotMultiplier = 1.00,
-- Automatic scaling
AutoFireMultiplier = 0.38,
}
-- Weapon-specific profiles
Config.Weapons = {
-- Pistols
WEAPON_PISTOL = { PitchMin=0.008, PitchMax=0.014, HeadingMin=-0.005, HeadingMax=0.005, Shake=0.8, FirstShotMultiplier=1.12, AutoFireMultiplier=0.9 },
WEAPON_COMBATPISTOL = { PitchMin=0.004, PitchMax=0.007, HeadingMin=-0.005, HeadingMax=0.005, Shake=0.85, FirstShotMultiplier=1.12, AutoFireMultiplier=0.9 },
WEAPON_PISTOL50 = { PitchMin=0.005, PitchMax=0.009, HeadingMin=-0.006, HeadingMax=0.006, Shake=1.1, FirstShotMultiplier=1.18, AutoFireMultiplier=0.9 },
-- SMGs
WEAPON_SMG = { PitchMin=0.006, PitchMax=0.01, HeadingMin=-0.006, HeadingMax=0.006, Shake=1.05, FirstShotMultiplier=1.10, AutoFireMultiplier=0.65 },
WEAPON_MICROSMG = { PitchMin=0.006, PitchMax=0.01, HeadingMin=-0.006, HeadingMax=0.006, Shake=1.0, FirstShotMultiplier=1.10, AutoFireMultiplier=0.65 },
-- Rifles
WEAPON_CARBINERIFLE = { PitchMin=0.006, PitchMax=0.01, HeadingMin=-0.006, HeadingMax=0.006, Shake=1.15, FirstShotMultiplier=1.08, AutoFireMultiplier=0.65 },
WEAPON_ASSAULTRIFLE = { PitchMin=0.007, PitchMax=0.012, HeadingMin=-0.007, HeadingMax=0.007, Shake=1.20, FirstShotMultiplier=1.08, AutoFireMultiplier=0.65 },
WEAPON_SPECIALCARBINE = { PitchMin=0.012, PitchMax=0.02, HeadingMin=-0.006, HeadingMax=0.006, Shake=1.15, FirstShotMultiplier=1.08, AutoFireMultiplier=0.65 },
-- Shotguns
WEAPON_PUMPSHOTGUN = { PitchMin=0.02, PitchMax=0.032, HeadingMin=-0.008, HeadingMax=0.008, Shake=1.35, FirstShotMultiplier=1.0, AutoFireMultiplier=0.9 },
WEAPON_SAWNOFFSHOTGUN = { PitchMin=0.022, PitchMax=0.034, HeadingMin=-0.008, HeadingMax=0.008, Shake=1.40, FirstShotMultiplier=1.0, AutoFireMultiplier=0.9 },
-- Snipers
WEAPON_SNIPERRIFLE = { PitchMin=0.015, PitchMax=0.024, HeadingMin=-0.004, HeadingMax=0.004, Shake=1.1, FirstShotMultiplier=1.0, AutoFireMultiplier=0.9 },
WEAPON_HEAVYSNIPER = { PitchMin=0.018, PitchMax=0.028, HeadingMin=-0.004, HeadingMax=0.004, Shake=1.2, FirstShotMultiplier=1.0, AutoFireMultiplier=0.9 },
}
-- Blacklist weapons (no recoil script applied)
Config.Blacklist = {
WEAPON_STUNGUN = true,
WEAPON_FIREEXTINGUISHER = true,
WEAPON_PETROLCAN = true,
WEAPON_SNOWBALL = true,
WEAPON_BALL = true,
WEAPON_FLARE = true,
WEAPON_GRENADE = true,
WEAPON_SMOKEGRENADE = true,
WEAPON_PIPEBOMB = true,
}
-- Optional: per-weapon aim sway overrides (otherwise global sway used)
Config.AimSwayOverrides = {
-- WEAPON_SNIPERRIFLE = { Pitch=0.04, Heading=0.05, Speed=0.8 },
}
Last updated