How to Add Custom Maps to an ET: Legacy Server (pk3 + Fast DL)
Upload custom map pk3 files to an ET: Legacy server, put them in the rotation or map vote, set up sv_wwwBaseURL fast downloads and fix pk3 conflicts.
Updated Oct 7, 2026 · 7 min read
On this page
To add a custom map to an ET: Legacy server, upload the map's .pk3 file to the server's etmain folder (not legacy), look inside the pk3 for the real map name in maps/<name>.bsp, and add map <name> to your rotation file. Restart, and players without the map download it automatically as long as sv_allowDownload "1" is set. For fast downloads, put the same pk3 on a web server under etmain/ and set sv_wwwDownload "1" and sv_wwwBaseURL to that web address.
Below is each step, how to get the map into map voting and campaigns, and what to do when two pk3 files fight.
Step 1: get the pk3 and find the map name
Community maps for Enemy Territory are distributed as pk3 files, which are plain zip archives. Classic picks like Supply Depot, Braundorf, Adlernest and ET Ice are still on most public servers.
The file name of the pk3 and the name you type for map are not always the same. Before uploading:
- Open the pk3 with any zip tool (rename a copy to
.zipif your system needs it). - Look in the
maps/folder. The.bspfile name is the map name. Amaps/braundorf_b4.bspmeans you load it withmap braundorf_b4. - Check
scripts/for a.arenafile. Map voting reads it to list the map with a proper long name.
Linux servers are case sensitive, so use the exact case of the bsp name. Most are lowercase.
Step 2: upload to etmain
The ET: Legacy wiki is clear on placement: custom maps, rotation configs and campaign pk3 files go in etmain, so every mod can read them. If you put a map inside legacy/, players would download it again for every mod that uses it. Only mod specific packs (sounds, skins, HUD bits made for the legacy mod) belong in legacy/.
Over SFTP or a file manager, that means:
etmain/
├── pak0.pk3
├── pak1.pk3
├── pak2.pk3
├── etl_server.cfg
├── supply.pk3 <- your custom maps
├── braundorf_b4.pk3
└── et_ice.pk3
Upload in binary mode if your SFTP client asks. A broken transfer gives a pk3 that fails the pure check later. New to SFTP? What is SFTP for game servers covers clients and logins.
The server only scans pk3 files at startup, so restart after uploading. To test without changing the rotation, open the console and run map braundorf_b4 (or /rcon map braundorf_b4 from the game).
Step 3: add the map to the rotation
Which file you edit depends on which rotation line is active near the end of etmain/etl_server.cfg.
Objective or map vote rotation (objectivecycle.cfg or mapvotecycle.cfg): add a line and keep the chain closed. For objective mode:
set d1 "set g_gametype 2 ; map oasis ; set nextmap vstr d2"
set d2 "set g_gametype 2 ; map supply ; set nextmap vstr d3"
set d3 "set g_gametype 2 ; map braundorf_b4 ; set nextmap vstr d4"
set d4 "set g_gametype 2 ; map goldrush ; set nextmap vstr d5"
set d5 "set g_gametype 2 ; map et_ice ; set nextmap vstr d1"
vstr d1
In mapvotecycle.cfg the lines look the same but with g_gametype 6. There, the chain is only the fallback order used when nobody votes. The vote menu itself lists every map the server has with a .arena file, minus anything in g_excludedMaps in legacy.cfg. If a map never shows up in the vote, its pk3 probably has no arena file.
Campaign rotation (campaigncycle.cfg): campaigns are defined by .campaign files inside pk3s, so a custom map only plays in campaign mode if a campaign pk3 lists it. Upload the campaign pk3 to etmain with its maps, then add a line such as set d3 "campaign cmpgn_yourname ; set nextcampaign vstr d1".
The full syntax of these files is in ET: Legacy etl_server.cfg explained.

Step 4: set up fast downloads
With only sv_allowDownload "1", the game server sends missing pk3 files itself, throttled by sv_dlRate. A 20 MB map can take minutes, and players often give up. A web redirect fixes it. In etl_server.cfg:
set sv_allowDownload "1"
set sv_wwwDownload "1"
set sv_wwwBaseURL "http://dl.example.com/et"
set sv_wwwDlDisconnected "1"
set sv_wwwFallbackURL ""
How the URL is built matters. The server sends the client to sv_wwwBaseURL + / + the file's path, folder included. So for etmain/supply.pk3 the client asks for:
http://dl.example.com/et/etmain/supply.pk3
On the web host, create an etmain folder under that base and upload the exact same pk3 files. Any plain file hosting works. Keep these points in mind:
- The pk3 must also stay on the game server. The server checks it has the file before redirecting.
- No trailing slash at the end of
sv_wwwBaseURL. sv_wwwDlDisconnected "1"lets players download while disconnected, so a slow download does not hitsv_dl_timeout.- When it works, the server console prints
Redirecting client 'name' to http://dl.example.com/et/etmain/supply.pk3. If the web download fails, you will seefalling back to regular downloadingand the slow path takes over.
Fixing pk3 conflicts and download errors
Two versions of the same map. Map authors often release mapname_b3.pk3 and later mapname_b4.pk3. If both contain maps/mapname.bsp, the engine loads pk3 files in alphabetical order and the later one overrides the earlier one, while pure clients may still be asked for both. Keep one version on the server and delete the other.
Custom pk3 that overrides stock files. Some old packs replace menus, sounds or the stock maps. Since ET: Legacy 2.77 the client keeps downloaded files in a dlcache folder and does not load them at game start, but on the server those files still load for every map. If stock maps act strangely after an upload, remove the newest pk3 and test again.
Could not download "etmain/x.pk3" because autodownloading is disabled on the server. Set sv_allowDownload "1" and restart, or give players the file another way.
Unpure client detected. Invalid .PK3 files referenced! The player has a different copy of a pk3 than the server. They should delete that file from their dlcache folder (in Documents\ETLegacy on Windows or ~/.etlegacy on Linux) and reconnect.
ERROR: Connection aborted - corrupt/duplicate official pak file server installation. pak0.pk3, pak1.pk3 or pak2.pk3 exists twice on the server, usually in both the install folder and the home path. Remove the copy from the home path.
Cannot autodownload official pk3 file means a player is missing the base game data. They need to reinstall ET: Legacy with the installer, which fetches it.
Bots stand still on a custom map. Omni-bot needs waypoint files made for that map. Without them, bots join but do not play the objectives. Leave such maps out of rotation on a bot heavy server.
Doing this on a hosted server
On a GamezServers ET: Legacy server, open the file manager or connect over SFTP, upload pk3 files into etmain, edit the rotation file in the browser, and restart from the panel. The live console shows the map loading, or the exact error if a name is wrong. Your Default Map in the panel can be a custom map once its pk3 is uploaded, but the rotation file's first map loads right after it, so put the same map at d1. We do not host the fast download files for you, so sv_wwwBaseURL still needs your own web space. For a group that wants maps without the setup work, our servers for friends page shows how the bill can be split.

FAQ
Do custom maps go in etmain or legacy?
Maps go in etmain. The ET: Legacy wiki recommends it so every mod can read them and players download each map once.
Why can't the map command find my custom map?
The name after map must match the .bsp file inside the pk3's maps folder, with the same case, and the server needs a restart after the upload.
Do players need to download maps manually?
No. With sv_allowDownload "1" the game offers the missing pk3 on connect. Players need autodownload turned on in their settings, which it is by default.
Is there a limit on how many maps I can upload?
There is no fixed count, but every pk3 loads at startup and big map packs slow joins for new players. Keep the pool to maps you actually rotate.
Can I use Wolfenstein: Enemy Territory map packs from old servers?
Yes. ET: Legacy reads the same pk3 format, so 2.60b era maps work. Just avoid packs that also replace menus or stock files.
Skip the setup. Your own ET Legacy server.
Then $2.99/mo. Just trying it? $0.75 for 3 days