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
maptoken."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
tdmon CoD1, UO and CoD2, butwaron CoD4 and World at War. - Letting a mod own the rotation too. Many mapvote mods set
sv_mapRotationCurrentthemselves. If yours does, setg_allowVote 0and 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"
