A defusal (de_) map is the most forgiving place to start, because it needs only a handful of special entities to be playable: two sets of spawns, a buy zone for each team, and at least one bomb site. Everything else — cover, rotations, timing — is level-design craft you refine later. This walks the minimum viable map, the pieces the engine actually requires, so your first compile drops you into a round rather than a "server info" error.
1. Seal a world-brush room
Draw a large box and hollow it (or build six world brushes) into a sealed room. This is the single most important rule in GoldSrc mapping: only world brushes seal the map. If the shell leaks, VIS and lighting never run — see fixing leaks with the pointfile. Texture every face; untextured faces cause compile warnings.
2. Place both team spawns
CS uses two different spawn entities, one per team, and the names are not intuitive:
info_player_start <- Counter-Terrorist spawns info_player_deathmatch <- Terrorist spawns
Place them slightly above the floor so players do not spawn stuck in the ground. For a full server you want roughly 16 of each, spread out so players do not telefrag on spawn. For a first test, four of each is enough. Point them in a sensible facing direction using the angle property.
3. Add a buy zone for each team
Players can only buy inside a buy zone. Make a thin brush covering each spawn area, tie it to func_buyzone, and set its team so CTs buy at their spawn and Ts at theirs:
Brush over CT spawn → tie to func_buyzone (team: CT) Brush over T spawn → tie to func_buyzone (team: T)
The buy-zone brush should use a tool/trigger texture (e.g. AAATRIGGER) so it is invisible in-game. Without a buy zone, players spawn with a pistol and no way to buy, and you will think the economy is broken.
4. Create a bomb site
A bomb site is a brush tied to func_bomb_target (some FGDs also expose info_bomb_target as a point marker). Cover the plant area — a corner of the room is fine for a first map — with a trigger-textured brush and tie it:
Brush over plant area → tie to func_bomb_target
With a bomb target present the game auto-arms the map as a defusal round: one T carries the C4, CTs must defuse. No hostage entities are needed for a de_ map — those belong to cs_ rescue maps.
5. Light the map
Without a light entity the whole map renders fullbright (flat, shadeless). Add at least one light entity, or a light_environment if the room has a sky. Set a brightness that is not blinding — the fourth value in the light's color is intensity:
light _light "255 255 220 200"
For an outdoor area, texture the ceiling with the SKY tool texture and add a single light_environment plus an info_sunlight/angle to cast directional sun. One indoor light is enough to prove the pipeline works.
6. Name it correctly and compile
Save the source map with a de_ prefix (e.g. de_firsttest) so the game treats it as defusal, then run a full compile from J.A.C.K. with all four stages enabled. The output .bsp must land in cstrike/maps/. Add it to your rotation via mapcycle.txt and, if you host downloads, mirror it through FastDL.
Troubleshooting
- Spawn as spectator / cannot join a team — you are missing one of the two spawn types. Both
info_player_startandinfo_player_deathmatchmust exist. - Round never starts / "waiting for players" — no
func_bomb_target, so the game has no objective. Add a bomb site. - Cannot buy anything — no
func_buyzoneover the spawn, or the brush is not actually tied to the entity. - Map is flat and shadeless — no
lightentity, or you compiled without RAD. Add a light and run the full toolchain. - Map will not load, "leak" in console — the shell is not sealed; walk the pointfile.
Verification
Launch a local server on the map with a couple of bots (see installing YaPB bots). You should spawn on a team, be able to buy at your spawn, pick up and plant the C4 at the site, and see the map lit rather than fullbright. Once the minimum map plays a full round end to end, iterate on the layout — cover, two bomb sites, tighter timings — and re-tune the final compile using the VHLT parameters.









