sv_mapRotation: Call of Duty map rotation syntax

Updated 2026-07-25

sv_mapRotation is a flat, space-separated list of tokens. It is not a list of map names, which is why half-correct rotations silently do something other than what you meant.

The grammar

set sv_mapRotation "gametype dm map mp_harbor map mp_chateau map mp_depot"
Token Argument Effect
gametype gametype code Sets the gametype for every map that follows
map map code Appends a map to the rotation
exec cfg filename Executes a config before the next map loads
allow_jeeps 0 / 1 United Offensive only
allow_tanks 0 / 1 United Offensive only

Tokens are positional and sticky: gametype applies to everything after it until the next gametype token.

Mixing gametypes

set sv_mapRotation "gametype tdm map mp_carentan map mp_brecourt gametype sd map mp_toujane map mp_burgundy"

That plays two Team Deathmatch maps, then two Search & Destroy maps, then wraps.

Per-map settings with exec

exec runs a config file before the map after it loads, which is how you give different gametypes different rules:

set sv_mapRotation "gametype tdm exec tdm.cfg map mp_carentan gametype sd exec sd.cfg map mp_toujane"

With tdm.cfg containing set scr_tdm_timelimit 15 and so on. The cfg path is relative to the gamedir, so main/tdm.cfg.

United Offensive vehicles

set sv_mapRotation "gametype tdm map mp_ponyri allow_tanks 1 allow_jeeps 1 map mp_berlin allow_tanks 0"

Like gametype, these are sticky until changed.

Applying a rotation

Setting the cvar does not start it. Follow it with map_rotate:

set sv_mapRotation "gametype dm map mp_harbor map mp_chateau"
map_rotate

Or over rcon:

rcon <password> set sv_mapRotation "gametype dm map mp_harbor map mp_chateau"
rcon <password> map_rotate

Remember that a bare set over rcon returns no output whether or not it worked. Read it back — see the rcon guide.

sv_mapRotationCurrent

The engine keeps a second cvar, sv_mapRotationCurrent, which is the remaining rotation. It is consumed from the front as maps advance, and refilled from sv_mapRotation when it empties.

That gives you a clean way to force a specific next map without disturbing the configured rotation:

rcon <password> set sv_maprotationcurrent " gametype dm map mp_carentan"
rcon <password> map_rotate

Note the leading space inside the quotes. The engine's tokeniser expects it; without it the first token is frequently swallowed. After that single map plays out, the rotation refills from sv_mapRotation as normal.

This is exactly how mapvote mods apply the winning vote.

Common mistakes

  • Writing map names without the map token. "mp_harbor mp_chateau" parses to nothing usable.
  • Forgetting map_rotate. The new rotation sits there unused until the current map ends.
  • Using display names instead of codes. It is mp_citystreets, not "District". The map lists have every code.
  • Wrong gametype code for the engine generation. Team Deathmatch is tdm on CoD1, UO and CoD2, but war on CoD4 and World at War.
  • Letting a mod own the rotation too. Many mapvote mods set sv_mapRotationCurrent themselves. If yours does, set g_allowVote 0 and let the mod drive.

Example rotations

Call of Duty 1, mixed:

set sv_mapRotation "gametype dm map mp_harbor map mp_chateau map mp_depot map mp_carentan gametype tdm map mp_brecourt map mp_railyard"

Call of Duty 2, Search & Destroy only:

set sv_mapRotation "gametype sd map mp_toujane map mp_carentan map mp_brecourt map mp_burgundy map mp_decoy map mp_railyard"

Call of Duty 4, Team Deathmatch:

set sv_mapRotation "gametype war map mp_crash map mp_backlot map mp_crossfire map mp_vacant map mp_citystreets map mp_strike"

Frequently asked

How do I mix gametypes in a Call of Duty map rotation?

Put a gametype token before the maps it applies to. It stays in effect until the next gametype token, so "gametype tdm map mp_carentan gametype sd map mp_toujane" plays one map of each.

How do I force the next map over rcon without changing the rotation?

Set sv_mapRotationCurrent to a single entry with a leading space, for example " gametype dm map mp_carentan", then run map_rotate. The rotation refills from sv_mapRotation afterwards.