CS 1.6 competitive config guide
How to set up your CS 1.6 config for competitive play. FPS cap, network rates, interp, config file structure, and the settings that actually matter.
The quick version
Create a file called userconfig.cfg in your cstrike folder with this:
fps_override "1"
fps_max "99.5"
gl_vsync "0"
rate "20000"
cl_cmdrate "105"
cl_updaterate "100"
ex_interp "0"
fastsprites "2"
r_dynamic "0"
cl_weather "0"
m_filter "0"
m_customaccel "0"
Launch options (Steam > right-click CS 1.6 > Properties > Launch Options):
-nomsaa -nojoy -gl -novid -noforcemparms -noforcemaccel -noforcemspd
That covers 90% of what matters. The rest of this guide explains why.
Why fps_max 100 and not unlimited?
This is the most common question from players coming from modern games.
CS 1.6 runs on the GoldSrc engine where physics are calculated per frame. Movement, jumping, weapon fire rates, grenade physics - all tied to frametime (1/fps). At 100 FPS that's 0.01 seconds per step, which is what the engine was designed for.
Go above ~120 FPS and things break: movement feels off, landing recovery gets weird, fire rates change. Valve has confirmed this. Competitive servers enforce 100 FPS for this reason.
So the goal isn't high FPS. It's stable 100 FPS. Any modern PC does this effortlessly.
The 99.5 thing
The engine adds ~0.5 to your fps_max internally. fps_max 100 gives you ~100.5. For exactly 100, set fps_max 99.5. Using 101 is fine too, the difference is negligible. Just don't use 200+ or 0.
Unlocking the cap
Steam CS 1.6 silently ignores fps_max above 100 unless you set fps_override 1. On non-Steam, developer 1 does the same but also spams debug output.
Network settings
This is where most players have wrong values, often copied from outdated guides or CS:GO configs.
GoldSrc sends commands to the server once per rendered frame. Your cmdrate can't exceed your FPS. At 100 FPS you can send at most 100 commands per second.
| Command | Value | Why |
|---|---|---|
rate | 20000 | Max bytes/sec from server. 20000 is the GoldSrc limit. Many old configs use 25000 (the Quake limit), which is just wrong |
cl_cmdrate | 105 | Commands per second to server. Set slightly above FPS so no inputs get dropped |
cl_updaterate | 100 | Updates per second from server. Matches the standard 100-tick server rate |
ex_interp | 0 | Interpolation delay. 0 = auto (1/updaterate = 0.01s). Never set 0.1 like old guides say - that adds 100ms of positional lag to every other player |
cl_cmdbackup | 2 | Resends per command for packet loss protection |
The FPS-hitreg connection
If your FPS drops to 50 during a smoke fight, your effective cmdrate drops to 50 too. Fewer commands reaching the server = your shots register less reliably. This is why FPS stability matters more than peak FPS.
How to check your rates
net_graph 3 shows everything: FPS, ping, loss, choke. Red dots mean your cmdrate is too low (commands aren't being sent). Orange/yellow means updaterate mismatch with the server.
Note: many public servers cap sv_maxupdaterate at 30. Your cl_updaterate 100 won't help there. Check net_graph to see what rate you're actually getting.
Config file structure
CS 1.6 loads configs in this order:
1. autoexec.cfg (engine init)
2. Launch options
3. config.cfg (game-generated, overwrites autoexec!)
4. userconfig.cfg (last, always wins)
Use userconfig.cfg for everything. The game rewrites config.cfg on exit, so anything in autoexec.cfg gets overwritten. userconfig.cfg loads after config.cfg and your values stick.
Create it in your cstrike folder if it doesn't exist.
Alternatively, set config.cfg to read-only (right-click > Properties > Read-only) to stop the game from rewriting it.
Launch options
-nomsaa -nojoy -gl -novid -noforcemparms -noforcemaccel -noforcemspd
| Option | What it does |
|---|---|
-nomsaa | Disables MSAA. Valve's own fix for smoke grenade FPS drops |
-nojoy | Disables controller polling |
-gl | Forces OpenGL renderer (best latency and performance) |
-novid | Skips intro video |
-noforcemparms -noforcemaccel -noforcemspd | Prevents CS from overriding your mouse settings |
-freq 144 | Sets refresh rate (use your monitor's actual Hz) |
Options that do nothing in CS 1.6
These get copied from CS:GO guides constantly:
-tickrate 128- server controls tickrate, not client-threads- GoldSrc is single-threaded-heapsize- not used by GoldSrc+mat_queue_mode 2- Source engine only
Smoke grenades and fastsprites
Smoke grenades are the one thing that can still cause FPS drops even on fast hardware. The engine renders smoke as stacked alpha-blended sprites and the CPU-side sorting is expensive.
fastsprites 2 replaces the volumetric smoke with flat fast sprites. It looks different but most competitive players use it. Combined with -nomsaa, smoke shouldn't cause any drops.
Mouse settings
CS 1.6 tries to apply its own mouse acceleration on top of your OS settings. The -noforcemparms -noforcemaccel -noforcemspd launch options prevent this.
In-game:
m_filter "0"
m_customaccel "0"
Also turn off Enhance Pointer Precision in Windows mouse settings. That's mouse acceleration at the OS level.
The interp trap
This deserves its own section because bad interp advice has been floating around for 20 years.
ex_interp controls how far in the past other players are rendered. The engine needs some buffer to smooth out network jitter. With ex_interp 0, it auto-calculates as 1 / cl_updaterate. At updaterate 100, that's 0.01 seconds (10ms).
Many old guides recommend ex_interp 0.1. That means 100ms of interpolation delay. Every other player on your screen is shown where they were a tenth of a second ago. You're literally aiming behind people.
Use ex_interp 0 and let the engine calculate it.
Other useful settings
| Command | Value | What it does |
|---|---|---|
r_dynamic | 0 | No dynamic lighting from muzzle flashes. Cleaner visuals |
cl_weather | 0 | No rain/snow on maps like de_aztec |
cl_shadows | 0 | No player shadows |
gl_flashblendlight | 0 | No radial light from flashbangs |
max_shells | 0 | No shell casings |
max_smokepuffs | 0 | No gunfire smoke particles |
cl_minmodels | 1 | All players use one model (fewer polygons in busy servers) |
r_decals | 0 | No bullet holes or blood on walls |
snd_noextraupdate | 1 | Skip extra sound passes per frame |
These aren't about performance on modern hardware. They're about cleaner visuals and fewer distractions.
Full userconfig.cfg
// FPS
fps_override "1"
fps_max "99.5"
gl_vsync "0"
// Network
rate "20000"
cl_cmdrate "105"
cl_updaterate "100"
ex_interp "0"
cl_cmdbackup "2"
// Visuals
r_dynamic "0"
gl_flashblendlight "0"
cl_weather "0"
cl_shadows "0"
fastsprites "2"
max_shells "0"
max_smokepuffs "0"
cl_minmodels "1"
cl_himodels "0"
r_decals "0"
cl_ejectbrass "0"
// Mouse
m_filter "0"
m_customaccel "0"
// Sound
snd_noextraupdate "1"
snd_mixahead "0.1"
Drop this in your cstrike folder, restart the game, and you're set.