A finished map is more than a .bsp. To ship it to a live server so players download everything cleanly, you assemble the map plus every asset it references into the exact folder layout the game expects, then mirror that layout onto your FastDL host. Miss one file or put it one folder too deep and players get missing textures, ERROR models, or a slow in-game trickle. This is the packaging checklist.
1. Gather every file the map needs
Start from the .res file — it is your packing list. You need:
maps/de_mymap.bsp— the compiled mapmaps/de_mymap.res— the content manifest- Any external
.wadthe map did not embed (if you used external WADs) - Custom
models/,sound/,sprites/the map references - The six
gfx/env/skybox faces if the sky is custom overviews/de_mymap.bmpand.txtfor the radar
If you embedded textures with -wadinclude, you do not ship a WAD at all — the BSP carries them. That is the simplest package for a map with only a few custom textures.
2. Lay them out under cstrike/
Every path is relative to cstrike/, and the server and FastDL host must mirror that structure exactly:
cstrike/maps/de_mymap.bsp cstrike/maps/de_mymap.res cstrike/models/props/mymap_crate.mdl cstrike/sound/ambient/mymap_wind.wav cstrike/sprites/mymap_glow.spr cstrike/gfx/env/mysky_up.tga (and dn/lf/rt/ft/bk) cstrike/overviews/de_mymap.bmp cstrike/overviews/de_mymap.txt
Put these on the game server first so the map runs, and confirm it loads locally with all content before touching FastDL. See installing custom maps for the server-side placement.
3. Mirror the tree onto the FastDL host
The FastDL web root must contain a cstrike/ directory that mirrors the server, because the engine requests <sv_downloadurl>/cstrike/maps/de_mymap.bsp — the full game-relative path including the cstrike/ level. Copy the same files to the same relative paths on the web host. If your sv_downloadurl is http://dl.example.com/cs, then the crate model must resolve at http://dl.example.com/cs/cstrike/models/props/mymap_crate.mdl. The full server/mirror wiring is in the FastDL setup guide and the download cvars.
4. Compress with bzip2 for fast transfers
FastDL clients will fetch a .bz2 version of a file if it exists, decompressing it on arrival — much faster than the raw file. Create .bz2 copies of each large asset alongside the originals on the web host:
de_mymap.bsp -> de_mymap.bsp.bz2 mymap_crate.mdl -> mymap_crate.mdl.bz2
Keep both the plain and the .bz2 so any client works. The mechanics and tooling are in FastDL bzip2 compression.
5. Confirm the WAD is delivered or embedded
If textures are external, the custom .wad must be on both the server and the FastDL host and listed so clients fetch it — otherwise you get black textures. If you embedded with -wadinclude, skip this: nothing to ship. Never ship the giant stock WADs — every client already has halflife.wad and cstrike.wad.
6. Keep the server and mirror byte-identical
The server and the FastDL host must hold the same files at the same relative paths. If you fix a texture, recompile the map, or rename an asset, update both places in the same step — a map that plays fine on the server but pulls an old .bsp from a stale mirror gives players a version mismatch and a failed download. A simple discipline that prevents this: build the complete cstrike/ package once in a staging folder, verify the map loads from it locally, then push that same folder to the game server and to the web root. Never edit one side and forget the other. When you rotate the map into the cycle, confirm the server has the map installed and the mirror has every file the .res names, because the download only works when both halves agree.
Common errors
- Everything 404s over HTTP — the
cstrike/level is missing or doubled in the web root. The path must be<url>/cstrike/maps/...exactly. - Map downloads but models are
ERROR— the model is not in the.resor not on the mirror. Reconcile the.reswith the files. - Black/checkerboard textures — external WAD not delivered, or not embedded. See missing textures.
- Downloads crawl — no
.bz2copies, orsv_downloadurlunreachable. Add bzip2 files and test the URL. - Sky blank for players — the six
gfx/env/faces are not in the package. Ship all six.
Verification
Use a clean client with none of the custom content and connect to the server with FastDL live. Watch the download list: the .bsp, the models, sounds, sprites and sky faces should all transfer over HTTP, then the map should render with every texture, model and the correct sky. Open one asset's full FastDL URL in a browser to prove the path resolves. If a single file fails, its .res line or its position in the cstrike/ tree is wrong — fix that one path and re-test. That clean-client download is the only proof the package is complete.









