---
title: "mp_timelimit, mp_maxrounds and Map Flow Tuning"
excerpt: "How the four end-of-map limits interact, which need ReGameDLL, why whichever fires first wins, and how to design a map flow that ends cleanly and advances the rotation."
category: "administration"
tags: "cvars, gameplay"
image: ""
read_time: "8 min read"
---
<p>What ends a map on CS 1.6 is not <a href="/tutorials/mapcycle-txt-setup">mapcycle.txt</a> — the rotation only advances once a map ends, and <em>ending</em> is decided by four cvars that race each other. Set them carelessly and the map either never ends or ends in a way that surprises players mid-round. This explains the four limits, which ones require ReGameDLL, and how to pick a flow that feels intentional.</p><h2>1. The four ways a map ends</h2><table><thead><tr><th>Cvar</th><th>Unit</th><th>Requires</th><th>Ends the map when...</th></tr></thead><tbody><tr><td><code>mp_timelimit</code></td><td>minutes</td><td>stock</td><td>the clock runs out.</td></tr><tr><td><code>mp_maxrounds</code></td><td>rounds</td><td>ReGameDLL</td><td>N rounds have been played.</td></tr><tr><td><code>mp_winlimit</code></td><td>wins</td><td>ReGameDLL</td><td>one team reaches N round wins.</td></tr><tr><td><code>mp_fraglimit</code></td><td>frags</td><td>stock</td><td>any player reaches N kills.</td></tr></tbody></table><p>Only <code>mp_timelimit</code> and <code>mp_fraglimit</code> exist on stock Valve CS. <code>mp_maxrounds</code> and <code>mp_winlimit</code> are added by <a href="/tutorials/install-regamedll-cs16">ReGameDLL_CS</a>; on stock CS, setting them is a silent no-op — the value goes nowhere and the map never ends by round count.</p><h2>2. Whichever fires first wins</h2><p>These limits are not prioritized; they run in parallel and the <strong>first</strong> one satisfied ends the map. If you set <code>mp_timelimit 30</code> and <code>mp_maxrounds 30</code>, a fast-paced map may hit 30 rounds in 22 minutes and end early, while a slow one hits 30 minutes first. That is not a bug — it is the design. The mistake is setting several limits without deciding which you actually want to govern the map, then being confused when the map ends at an unpredictable moment.</p><h2>3. Pick one primary limit</h2><p>Decide what your server is for and let one cvar lead:</p><ul><li><strong>Casual public</strong> — time-based. Set <code>mp_timelimit</code> (20–30 is common) and leave the others at <code>0</code>. Everyone knows roughly how long a map lasts.</li><li><strong>Competitive / MR-style</strong> — round-based. Set <code>mp_maxrounds</code> (e.g. 30 for an MR15) and set <code>mp_timelimit 0</code> so the map ends on rounds, not the clock.</li><li><strong>Race to a score</strong> — <code>mp_winlimit</code>. The map ends the instant a team clinches, good for short rotations.</li><li><strong>Deathmatch-style</strong> — <code>mp_fraglimit</code>, ending on individual kills.</li></ul><pre>// casual public example
mp_timelimit 25
mp_maxrounds 0
mp_winlimit 0
mp_fraglimit 0</pre><h2>4. Set the limit to 0 to disable it</h2><p>Every one of these is disabled by <code>0</code>. The dangerous combination is <strong>all four at 0</strong>: nothing ends the map, the rotation freezes, and it looks like your <a href="/tutorials/mapcycle-txt-setup">mapcycle</a> is broken when in fact nothing is telling the map to end. If a server loops one map forever, check these four cvars before touching the cycle file.</p><h2>5. Leave room for the end-of-map vote</h2><p>If you run an end-of-map vote or Rock The Vote, it is scheduled off <code>mp_timelimit</code> — the vote pops in the closing minutes of the time limit. A purely round-based flow (<code>mp_timelimit 0</code>, <code>mp_maxrounds 30</code>) gives the vote nothing to hook onto, so the vote never appears. If you want both a round limit and a vote, keep a generous <code>mp_timelimit</code> as a backstop so the vote still fires. See <a href="/tutorials/rtv-nextmap-setup">the RTV and nextmap guide</a> for how the vote timing works, and the full <a href="/tutorials/mp-cvars-reference">mp_ cvars reference</a> for the round-timing cvars that shape play between these limits.</p><h2>6. A worked example</h2><p>Say you run a competitive 5v5 and want a clean MR15 — first team to 16 wins, or 30 rounds played, whichever settles it — with a two-minute buffer at the end for the scoreboard. The flow is round-governed, so the round cvars lead and time is only a safety net:</p><pre>mp_maxrounds 30 // 30 rounds = MR15
mp_winlimit 16 // a team clinching 16 ends it immediately
mp_timelimit 0 // no clock; rounds decide the map
mp_fraglimit 0 // not a deathmatch
mp_chattime 10 // end-of-map scoreboard window</pre><p>Here <code>mp_winlimit 16</code> and <code>mp_maxrounds 30</code> describe the <em>same</em> ending from two angles — a 16–14 result trips the win limit at round 30, a 16–6 result trips it early at round 22 — and either way the map ends and the <a href="/tutorials/mapcycle-txt-setup">cycle</a> advances. Now contrast a casual public box: there you want <code>mp_timelimit 25</code> leading with every round cvar at <code>0</code>, so maps last a predictable wall-clock length regardless of score. The two configurations are opposites, and the point is to choose one philosophy — clock or rounds — rather than half-setting both and getting a map that ends at a moment nobody predicted.</p><h2>Common errors</h2><ul><li><strong>Map never changes</strong> — all four limits are <code>0</code>. Set at least one.</li><li><strong><code>mp_maxrounds</code> does nothing</strong> — you are on stock CS. It needs <a href="/tutorials/install-regamedll-cs16">ReGameDLL_CS</a>.</li><li><strong>Map ends earlier than expected</strong> — a second limit fired first. Set the ones you do not want to <code>0</code>.</li><li><strong>End-of-map vote never shows</strong> — <code>mp_timelimit 0</code>. The vote is scheduled off the time limit; keep a non-zero backstop.</li><li><strong>Limits keep reverting</strong> — ReGameDLL's <code>game.cfg</code> or an AMXX config re-sets them after <code>server.cfg</code>. Trace the execution order.</li></ul><h2>Verification</h2><p>Read the four cvars back in the console:</p><pre>mp_timelimit
mp_maxrounds
mp_winlimit
mp_fraglimit</pre><p>Confirm only the one you want to govern the map is non-zero. Then lower your primary limit to something small — <code>mp_timelimit 2</code> or <code>mp_maxrounds 2</code> — on a test server and confirm the map ends and advances to the next <a href="/tutorials/mapcycle-txt-setup">cycle entry</a> exactly when that limit is hit. Restore your real values once the flow behaves.</p>