Tutorial: Counter-Strike mapping Last edited 2 months ago2024-09-20 14:50:10 UTC

Introduction to Counter-Strike mapping

About other Counter-Strike versions
This tutorial also applies to Counter-Strike: Condition Zero.

However, it does not applies to Counter-Strike: Condition Zero - Deleted Scenes (the "singleplayer campaign/missions game").
Before we start, make sure you have familiarised yourself with the In the Beginning series of tutorials. I know you're thinking, "Half-Life? But I want to map for Counter-Strike!" sure, but the basics are the same and the idea behind this tutorial is to show you the differences.

Spawn points

There are two things that must be in a Counter-Strike map: If you only put the info_player_start in the map, then no-one else will be able to join the map. It is a good idea to place about 16 of each type of info_player_ entity in your map for a total of 32 spawns. It is up to you how many you want to use, but 32 is the max number the game can handle, and with the limited number of active servers at this stage in the life of Counter-Strike, you're ensuring that every server can safely have the map in their rotation. Even if a map is designed for less people, server operators tend to avoid maps with less spawns than their number of player slots because the map could be started with a small number but people could join later and end up stuck in spectator until the map ends or spots open up. Make sure they are not too close together or they will spawn frag each other. Give them a little space, about 32 units on either side and about 8 units off the floor. It's imperative that the entities are not intersecting geometry in anyway. If you're not sure if all of your spawn points are safe you can load up the map with bots and test it out. If you have both CS 1.6 and CS: Condition Zero on Steam then it's as easy as starting up the map in Condition Zero and using the bots in game. You don't even have to copy the map or assets over, CZ will automatically read it from the cstrike folder.

Buy zones

There is also an entity that is normally used with the spawn points and that is a func_buyzone. The buy zone is a brush based entity that defines an area where the teams can purchase weapons and equipment.

The buy zone is not absolutely necessary, as the info_player_ entity will define a small area at its location that acts like one - but you can't change the size, which is why a specific buy zone brush is recommended. If you use a buy zone, then the spawn point will not act as a default buy zone. This is good for when you want the players to travel to the buy zone before being allowed to buy weapons. If you're making a fight yard map or another map that you don't want buying to be allowed in, you can place the buy zone somewhere inaccessible to prevent the spawn points acting as buy zones.

Map types

There are a few types of maps out there for Counter-Strike. It is a good idea to know what type of map you are making before you start. The mapname prefix normally gives you an idea of what type of map it is going to be: Here are a few unofficial map types made by the community over the years: It is possible in some cases to support hybrid gameplay by combining game modes into one map, for example a csde map would have both hostages and bomb sites. However combining types is uncommon since it's unpopular with players. CS wasn't designed with this in mind - if you want to release multiple game types for your map, you should probably compile separate versions of it for each mode.

Creating a hostage rescue (cs_) map

See also: hostage_entity (Counter-Strike)func_hostage_rescue (Counter-Strike)info_hostage_rescue (Counter-Strike)infodecal

Starting with an empty room, you will need to add the following: Next, add some hostages to be rescued. Place a few hostage_entity entities in your map. The number of hostage entities you put in the map is up to you, but most maps use 4 or 5.

Now we need somewhere to lead them so they will be rescued. You have two choices here: If you use both entities in the same map, only the func_hostage_rescue will be used by the game as a rescue zone, so it's best to only use one type in your map. If you put either entity close to a wall, be careful as it might be possible for the hostages to be rescued from the other side of the wall. It is recommended that you put your hostage rescue zone in an open area.

Finally, you will need some way to mark the rescue zone for the players to see. The hostage rescue point decal is {hrpoint in the cstrike/decals.wad, but you can create your own if you want to add a unique touch to your map.

Creating a defuse (de_) map

See also: func_bomb_target (Counter-Strike)info_bomb_target (Counter-Strike)infodecal

Just like a cs_ map, start by adding some player spawn points and buy zones.

Next, you will need at least one func_bomb_target entity - the size of the brush will define the area in which the player can place the bomb. Similar to the hostage rescue zone entities, you could use an info_bomb_target instead if you're okay using a fixed size bomb zone.

Again, you should place some decals so players know where the bomb target is. {target and {target2 are good options for this, but you can use a custom decal or texture instead. It is also a good idea to avoid putting bomb targets in water, and if it's next to water, to test if there is any way to still plant it in the water. If the bomb is planted in water the bomb will not explode when the timer ends and it won't end the round.

Creating an assassination (as_) map

See also: info_vip_start (Counter-Strike)func_vip_safetyzone (Counter-Strike)

Once again, start by adding some spawn points and buy zones to your map. For an assassination map, you must add one additional spawn point: a info_vip_start, so the VIP can spawn. It should probably be around the same area as the CT spawn points, as it's their job to protect the VIP.

You'll then need a func_vip_safetyzone to mark the escape zone for the hostage, this works just like the bomb zone and hostage rescue zone brush entities. Most maps don't use a particular decal to mark this zone, but use objects in the world instead - such as a vehicle, door, or elevator. Feel free to create some custom textures to suit your map, though.

Creating an escape (es_) map

See also: func_escapezone (Counter-Strike)

This map type isn't very popular, and for good reason - the latest versions of CS don't support it very well. The aim of this game mode is for the terrorists to reach an escape zone, so that zone should be close to the CT spawn so they can protect it. The escape zone is marked by a func_escapezone entity, which works the same as the other zone-type entities.

Triggering entities once per round & resetting entities on each round

If you're adding complex entity setups to you map, you will probably encounter difficulty with CS's behavior surrounding resetting entities. Many entities such as doors and breakables will reset automatically each round, but other entities and complex setups will not. It's quite tricky to create an entity setup that will only work once in a round, but will reset cleanly so it can work again in the next round. Fortunately MistaX88 has created a handy example map with workarounds for this issue, click through to the example map below for more information.
Loading embedded content: Vault Item #6280

3 Comments

Commented 14 years ago2010-03-08 22:24:13 UTC Comment #100600
hey thanks
Commented 11 years ago2013-06-28 15:05:13 UTC Comment #100601
hey bro how do you make waypoints for bots...plz tell!!
Commented 4 years ago2020-12-07 12:30:07 UTC Comment #103124
I will definitely be using this!

You must log in to post a comment. You can login or register a new account.