View Cart
Category Tutorial TopicsLevel DesignUnreal Engine 4UDKCryEngine 3 SDKGame Modeling: MayaCounter-Strike: Global OffensiveLeft4Dead 1 and 2Time Management and ProductivityGame Environment Art+DesignGetting StartedBrowse Full Tutorial List

CS:GO From Top Down Layout to BSP Block-In Workflow

Category: Source: CS:GO SDK
February 10, 2014
Full Text Tutorial and Notes:

In this tutorial I'm going to show you how to take your top down map layout sketch for Counter-Strike: Global Offensive map and begin blocking in BSP in Hammer level editor.

We will create a floor plan of the map in order to test gameplay timing of choke points, objectives and path routes. This process has to happen before creating the shell of the environment, add any detail, props, texture or light the map.

In this tutorial you will learn:

  • How to take your top down layout sketch and BSP block-in your map.
  • How to time your choke points and path routes.
  • Workflow of the process
  • How to BSP block in and test your layout for gameplay

I recommend that you watch the following two tutorials that cover important gameplay principles for creating map layouts. These tutorials lead into this current tutorial:

CS:GO How to Design Gameplay Map Layouts (Complete In-Depth Guide)
CS:GO 6 Principles of Choke Point Level Design


Launch Hammer Editor and start a new map.

Save your map first. File --> Save As.

Name of the map file right now doesn't matter, but to make it easier later, use de_ or cs_ prefix (depending on map type).

  • de_ (defuse map type)
  • cs_ (hostage map type)

Use the completed paper layout as a guide to start blocking in the map.

Use only BSP brushes and developer textures. At this early stage do not place any props, textures or geometry detail. Goal is to take what you have on paper and replicate that layout in the editor.

I start with top orthographic view in Hammer and aim to recreate the paper layout. During this stage I focus on the floor plan only; no walls, no ceiling. I want the paper layout to match bsp top down layout.

I start with the attacking team first and create the ground floor. To judge scale and proportion a lot better I insert a human player scale model, which is also becomes a player start for the attacking team.

Using the ground plane as a working bsp brush, I duplicate it, move it and resize it to create the rest of the layout. I block in main paths, connecting paths, choke points and objective areas; referencing the paper layout a lot.

I keep the grid at 32 units. This allows me to stay on the grid easier and I'm able to just focus on the floor plan.

Don't worry about current size of the map; if the distance is too big or too small. We will refine this after the gameplay timing test.

Once you've completed the layout and it looks close to the top down paper sketch; it is time to compile and test the timing of the map.


Before we can compile and test, we need to add few necessary entities.

These are: skybox, player spawn, light_environment, env_cubemap.

Skybox: create a brush with 'skybox' texture and surround the entire map. Select the brush and hollow it out; Tools --> Make Hollow. I use hollow at 32 units. This is a very quick and simple way to create a skybox that will allow us to jump into the map and test.

Important: this is not how you want to create a skybox for your final map. This is only for testing purposes.

Player Spawns: insert a single player spawn for each team. These entities are info_player_terrorist and info_player_counterterrorist. Make sure you raise each spawn point 16 units above ground; otherwise you'll get a spawn error. At this stage do not insert every spawn point for each team (12-16 spawns). Much of the layout will change and having these spawn points will just waste our time.

light_environment: this entity is a skylight. You need this to reflect the skybox and create realistic lighting in your map. Open up light_enviroment properties by double clicking on the entity. Use CS:GO Sky List for skybox list and light properties. At this point I just pick a well lit map and copy/paste its light properties.

Note: the lighting of the map will come at a later stage in the map's production. This is just for play-testing and timing of the layout.

env_cubemap: this entity will make all reflections in-game to appear properly. If you do not have an env_cubemap, all shiny/reflective surfaces in the map will appear as black and white in-game. Inserting a single cubemap will fix that error. Eventually, you will want to include multiple env_cubemaps in front of surfaces that you want to reflect that specific area.

Compile your map with all the above entities inserted and run the map.


Gameplay timing test is very important for creating balance and pacing of the map.

Once the map is loaded join a team. I start with the attacking team first. In this case it is the T-team.

Pull up the console (~ 'tilde key'; key right above Tab) and type in the following console commands:

  • bot_kick (kicks all the bots)
  • mp_warmup_end (removes the warm up at the start of the map)
  • mp_restartgame 1 (this command is what you want to use to start every new additional round; this places you back at spawn and with a fresh round timer for test timing)

Once you spawn, use the round clock timer and time yourself as you run from spawn point to a choke point. Note that time down. Use the 'mp_restartgame 1' command in console and rush towards the second choke point. Remember to get the knife out for maximum running speed in-game.

Switch teams and do the same timing test for CT. Note down all the times for both teams.

When both teams reach the same choke point, do those times match? Defending team should be at a choke point slightly earlier then the attacking team.

As the attacking team, you want to make sure that you reach the area right before the choke point, but not through the choke point. Remember that once you get pass the choke point, you are in the clear, for the most part. The defending team has to get to a choke point to defend right before the attacking team reaches it. This timing has to be reworked till it is almost perfect. 1-2 seconds late and attacking team gains an advantage. The map becomes unbalanced. I covered this more in-depth in the detailed guide.

The timing test will tell you what is wrong with pacing and balance of your map. Notes will help you to decide how to fix this. You will need to figure out how to make those times more balanced for both teams. Maybe you will need to expand the main route for the CT side, or push back the spawn points of the T team back so it takes them longer to reach the choke point.


Begin reworking the layout. Move brushes, move back spawn, extend paths etc.

Do the timing test again. Rework the layout again. Do this as many times as you need until the timing of both teams is where you like it.

Most of the official maps in CSGO has their timing down to anywhere between 10-18 seconds from spawn to a choke point.

Also remember to test the timing between bomb sites. I like to keep this anywhere between 12-18 seconds.

After you got the map's timing down you can move on to create walls and start adding height. Move floors up and down, add stairs or ramps, etc.

Start to expand the layout to include walls, ceiling, exterior and interior areas.

Make your map alpha ready. This means you want to make it as player friendly as you can without spending a lot of time on detailing geometry. You need player feedback on your map.

Insert all the player starts for both teams. Add bombsite zones or hostage rescue areas, buy zones and decals to help the players navigate around in your map a lot easier.

Getting the map ready to the alpha stage play testing is the focus on next tutorial.

Updated & Revised - Preproduction Blueprint: How to Plan Your Game Environments and Level Designs

© 2008-2016. All articles on World of Level Design™ are copyrighted.
Not to be reproduced without prior written consent.