Fix: Players Can't Download Your Custom Maps

May 21, 2025 Daemon666 7 min read 9 views

You add a custom map to the rotation, the server changes to it, and players either drop with a missing-file message or spawn into a world of black-and-purple checkerboard textures with the map name printed in the console but nothing downloaded. Custom-content downloading in CS 1.6 is gated by a small set of server cvars and by whether the file physically exists where the engine expects it. Work through these in order.

1. Turn on downloading at all

The master switch is sv_allowdownload. If it is 0, a client that lacks the .bsp simply joins without it — hence the checkerboard. In server.cfg:

sv_allowdownload 1
sv_allowupload 1

This alone lets the engine hand the map over the slow in-game UDP channel. It works, but a 15–25 MB map trickling at a few KB/s empties your server on every rotation, which is why the real fix is FastDL (step 3). See the download cvars explained for exactly how each one interacts.

2. Confirm the map file is really on the server

The engine only offers files it has. The map and every resource it references must live under cstrike/:

cstrike/maps/de_rats.bsp
cstrike/maps/de_rats.txt      # optional map description/overview
cstrike/gfx/env/*.tga         # skybox, if the map uses a custom one
cstrike/sound/...             # custom sounds referenced by the map

A map that loads fine for you but not for others usually has custom textures compiled into the BSP (fine, they travel with it) versus external resources (skybox, sprites, sounds) that live in separate files the client must also download. Missing skybox shows as a solid colour where the sky should be; missing sounds are silent. Every external file the map needs must be present server-side or it cannot be sent.

A quick way to enumerate what a map actually pulls is its resource list: the engine sends the client the same file list it precached, so if a texture or sound is baked into a plugin rather than the map, it must still be reachable. When you install a downloaded map, unpack the whole archive — not just the .bsp — because the sprites, overview and sound folders in that archive are exactly the external resources clients need.

3. Point clients at a FastDL mirror

The proper fix is an HTTP mirror so downloads happen at real web speed:

sv_downloadurl "http://dl.example.com/cs"

The engine appends the full game-relative path including the cstrike/ folder, so the client fetches http://dl.example.com/cs/cstrike/maps/de_rats.bsp. Your web root must contain a cstrike/ directory mirroring the server's layout. The complete Nginx/Apache walkthrough with bzip2 compression is in the FastDL setup guide; if files 404 over HTTP see the FastDL 404 fix.

4. Watch the consumers cvar and resource count

CS 1.6 has a hard cap of 512 precached resources per map (models, sounds, sprites, generic files combined). A map plus a stack of custom-content plugins can hit it, and when it does the server prints:

Host_Error: PF_precache_generic: Precache_Generic overflow

or a too many files style message, and content silently fails to send. If a specific map breaks downloading while others work, count what your plugins precache and trim decals/sounds you do not need.

5. The client can veto it

Downloading also depends on the player's own cl_allowdownload, which lives on their machine, not yours. If they set it to 0, they join every server with missing content no matter what you configure. It defaults to 1, so this only bites players who changed it — but when one player has missing textures and everyone else is fine, that is the cause and only they can fix it. Tell them to open the console and set it back:

cl_allowdownload 1
cl_allowupload 1

Some third-party client packs ship with downloading disabled to "speed up" joins; players on those builds will always miss content until they flip it on. There is nothing you can do server-side to override a client that refuses downloads.

Common errors

  • Black/purple checkerboard texturessv_allowdownload 0, or the resource is not on the server. Enable the cvar and confirm the file exists under cstrike/.
  • Download crawls, server empties on map change — no sv_downloadurl, so it fell back to the UDP transfer. Set up FastDL.
  • Solid-colour sky, otherwise fine — the custom skybox TGAs in cstrike/gfx/env/ are missing from the server or the mirror.
  • Precache_Generic overflow — you exceeded the 512-resource cap. Reduce custom sounds/models/decals.
  • One player misses everything, others are fine — that client set cl_allowdownload 0.

Verification

Delete the map from a test client, connect, and watch the console: you should see it fetch de_rats.bsp (fast over HTTP if the mirror is right). Read the cvar back with no argument to confirm it is set:

sv_allowdownload
sv_downloadurl

Then join and look at the world — real textures, a proper sky, audible custom sounds. If the map plays for everyone but downloads slowly, your only missing piece is the FastDL mirror; if it 404s over HTTP, the cstrike/ path in the web root is wrong.

Contributors: Daemon666 ✦
Share: