Competitive 5v5 Config (ESL Style) for CS 1.6
A competitive 5v5 config is not just \"public server with friendly fire on.\" It is a specific, deliberately austere ruleset — fixed economy timings, no auto-balancing, restricted spectating, friendly fire enabled with team-kill punishment removed — loaded on demand for a match and unloaded afterward. This walks through the cvars that matter, what belongs in the config versus a match plugin, and how to keep it from bleeding into your public settings.
1. Keep the match config separate
Do not put competitive values in server.cfg. Create a dedicated file, cstrike/match.cfg, that you exec when a match starts and that a public config overwrites when it ends. That way your public server.cfg is the resting state and the match settings are a temporary overlay:
// in-game / rcon
exec match.cfg // switch to competitive rules
// ... play the match ...
exec public.cfg // restore public rules
2. The core round and economy cvars
These are the values ESL-style 5on5 has used for years. Units matter — roundtime and buytime are in minutes (see the mp_ cvars reference):
// match.cfg -- round & economy
mp_freezetime 6
mp_roundtime 1.75 // 1:45, standard for de_ maps
mp_startmoney 800
mp_buytime 0.25 // 15 seconds
mp_c4timer 35 // classic competitive fuse
mp_maxrounds 0 // the match plugin controls score, not this
mp_timelimit 0 // no time-based map change during a match
3. Fair-play and team cvars
Competitive turns off the conveniences a public server wants. Friendly fire is on, but automatic team-kill punishment is off because the referee/admin handles it; teams are never auto-shuffled:
// match.cfg -- fair play
mp_friendlyfire 1
mp_tkpunish 0 // FF on, but no auto-punish -- admins decide
mp_autoteambalance 0 // never move players between teams
mp_limitteams 0 // 5v5 is set by the players, not the engine
mp_hostagepenalty 0 // irrelevant on de_ maps; avoid accidental kicks
mp_forcecamera 2 // dead players locked -- anti-ghosting
mp_fadetoblack 0 // most leagues play with this off; agree beforehand
mp_forcecamera 2 (also seen as mp_forcechasecam on some builds) is the anti-ghosting rule: a dead player cannot free-fly the map and call positions. Confirm the exact cvar name on your build — type it in console with no argument and see if it echoes a value.
4. Movement, sound and rates
Competitive play wants full information and headroom on the network. Keep footsteps and flashlight on, standard movement speed, and generous rates so nobody is rate-limited during a clutch:
// match.cfg -- feel & network
mp_footsteps 1
mp_flashlight 1
sv_maxspeed 320
sv_maxrate 25000
sv_minrate 20000
sv_maxupdaterate 101
sv_minupdaterate 60
sv_cheats 0
mp_logdetail 3 // log attacks + kills for review
mp_logmessages 1
The update rate ceiling is only real if your server FPS can sustain it — promising 101 on a 60 FPS box just produces choke. See the sys_ticrate truth and the essential cvars list.
5. Let a match plugin run the actual match
The config sets the rules; it does not run the match. The score, the MR15 half-switch, the knife round for side selection, the ready-up (.ready/.live), warmup, and the score printout are all the job of a match/PUG plugin. Do not try to reproduce that with mp_maxrounds alone — you will get a map change mid-match at the worst moment. Install a maintained match plugin and let it own the flow; the CSB Match System handles the knife round, side pick, live-on-3, halves with side switch and the final score for a standard 5v5; pair it with CSB Ready System for ready-up. On ReGameDLL these plugins are more reliable because round-end and money hooks are exposed cleanly through ReAPI.
Common errors
- Map changes in the middle of a match — you left
mp_maxroundsormp_timelimitnon-zero and it fired. Zero both and let the match plugin end the map. - Buytime is way too long —
mp_buytime 15is 15 minutes. Use0.25for 15 seconds. - Dead players calling positions —
mp_forcecamerais 0. Set it to lock spectating; confirm the cvar name your build uses. - Teams get shuffled at halftime —
mp_autoteambalance 1is still on from the public config. The match overlay must set it to 0. - Public settings never came back — you execed
match.cfgbut never restored the public config. Keep apublic.cfgand exec it (or change the map) after the match. - A cvar \"does not exist\" — it is a ReGameDLL-only cvar and you are on stock CS. Install ReGameDLL or drop that line.
Verification
Load the config and read the key values back before anyone joins:
exec match.cfg
mp_freezetime
mp_roundtime
mp_friendlyfire
mp_autoteambalance
Each should echo the competitive value. Then run a knife round through your match plugin and confirm the side switch and score are correct at MR15. Finally, exec public.cfg and verify friendly fire and auto-balance return to your public defaults — the overlay is only safe if it cleanly reverts.









