[MEGATUTORIAL] How to make a map!

Megascatterbomb

L1: Registered
Jul 9, 2014
21
6
Hello tf2maps.net users!

NOTICE: This guide is incomplete. Therefore, feedback will be greatly appreciated below.

Welcome to the "How to make a map" Mega-tutorial!

In this section, we will be covering how to make a map, from first booting up hammer, to publishing your final version right here. You don’t have to follow the steps exactly; this is just a reference for new users and experts alike.

Here’s the contents page (Coming up: Clickable links to go straight to a chapter! and pictures, because I have yet to take screenshots)

Code:
* What is Hammer?
* Can I run Hammer on my computer?
[INDENT]* Minimum Specs[/INDENT]
* How to install Hammer
	[INDENT]* The Source SDK method
	* The bin method[/INDENT]
* Opening Hammer for the first time
	[INDENT]* The Source SDK method
	* The bin method[/INDENT]
* Learning the interface
	[INDENT]* The border
	* Tools
	* File bar
	* The windows[/INDENT]
* Hammer concepts and you
[INDENT]	* Measurements
	* Brushes
	* Textures
		[INDENT]* Tool Textures
		* Decals and Overlays[/INDENT]
	* Entities
	* I/O
	* Displacements[/INDENT]
* Before beginning
* How to stop going lazy
* Building the foundation
	[INDENT]* Creating and naming a new map
	* Where to start
	* What NOT to do[/INDENT]
* Leaks
[INDENT]	* What causes leaks
	* How to find and fix[/INDENT]
* Compiling
	* Settings
	* Expert Mode
* Lets add some gameplay!
	[INDENT]* Constructing a payload map
	* Entities
	* I/O
	* Spawnrooms
	[INDENT]	* Spawn doors
		* Setup gates
		* Resupply lockers[/INDENT]
	* Signage[/INDENT]
* Checking your map
[INDENT]	* Debugging
	* Am I ready to move on?[/INDENT]
* Refining the layout
	[INDENT]* Is it balanced?[/INDENT]
* mat_fullbright, your 2nd worst nightmare
* Let there be light!
	[INDENT]* Types of light
	* Where to place light
	* Naming lights
	* HDR[/INDENT]
* Optimising
	[INDENT]* func_detail
	* Hints
	* func_viscluster[/INDENT]
* Cubemaps
	[INDENT]* Placing Cubemaps
	* Compiling Cubemaps[/INDENT]
* Final Checklist
	[INDENT]* Am I ready to publish?[/INDENT]
* Final Compile
* Posting your first alpha
* Getting feedback
	[INDENT]* General feedback
	* Gamedays[/INDENT]
* Refining the map
	[INDENT]* What feedback is important?
	* Posting updates[/INDENT]
* The final alpha
	[INDENT]* How do I know this is the final alpha?[/INDENT]
* Prepping for beta
* Detailing
	[INDENT]* Picking a theme
	* Artpassing
	* Adding props
	* Displacements
	* Skyboxes
[INDENT]		* 3D Skyboxes
		* light_env[/INDENT]
	* Adding "pockets" of detail
	* Soundscapes[/INDENT]
* Custom Content
	[INDENT]* Making custom content
	* Porting custom content
	* Packing custom content[/INDENT]
* Releasing your first beta
	[INDENT]* Your checklist[/INDENT]
* Getting feedback (Part 2)
[INDENT]	* Applying your feedback[/INDENT]
* Refining the map (Part 2)
	[INDENT]* What feedback is important?[/INDENT]
* Release Candidates
	[INDENT]* Difference between beta and RC[/INDENT]
* Going Final
	[INDENT]* Difference between RC and final[/INDENT]
* Final Notes
* Useful resources
	[INDENT]* Mapping resources
	* Useful Tutorials
	* Useful Checklists[/INDENT]
* Changelog


What is Hammer?

Hammer is the tool you and everyone else uses to make maps for TF2, CS:GO and other source games. The tool is free to anyone who owns a legal copy of a source engine game. Thankfully, TF2 is free, so if you have TF2, you can get Hammer in no time.

Today we will be focusing on TF2, but some of the concepts described here can be translated to other games; CS:GO, for example.


Can I run Hammer on my computer?

Anyone can try, but Hammer is a very intense program to run. I advise checking your system specs to see whether your computer can run the program smoothly. For Windows users, go to start and search for "System", then click "System Information". This is how you can check your system specs.

Minimum Specs

For Hammer to run smoothly, I highly recommend using these specs as a guideline for your system. If you want to upgrade your PC to run Hammer more smoothly, try adding more RAM. A single 8GB stick shouldn’t cost more than $100. Note that Hammer DOES NOT USE THE GPU AT ALL. So don't spend $3000 on the best GPU out there, because it is literally doing nothing. The GPU is only needed for TF2. Also I recommend saving about 1/2 to 1 GB for storing maps, as I also recommend keeping a copy of every version of your map stored somewhere safe.

Here’s my minimum and recommended specs for Hammer. I would avoid AMD CPUs all together, as they can do so little per cycle that even an Intel dual core 2.9 GHz processor can destroy AMD's Octa-core (8 core) 4.7 GHz processor.

Minimum:
CPU 2.5 GHz Dual Core
RAM 4GB
Free Space 500 MB

Recommended:
CPU: 2.7 GHz Quad core or better
RAM 8 GB
Free Space 750 MB+

What I have:
CPU 3.4 GHz Quad core (Intel core i7 3770)
RAM 16 GB
HDD 1 TB

(Disclaimer: These specs are not hard rules, these are merely recommendations purely based on my past experiences with hammer. Please do not treat as hard limitations.)

***Pro Tip***
Having more CPU cores makes a HUGE difference of compile times. Hammer can in fact benefit from up to 16 threads!


I also like having multiple monitors. I have three 1280x1024 "square" monitors in a row for bringing up tutorials with a 1920x1080 monitor for gaming and editing up top. Having multiple monitors is a HUGE advantage for productivity, as you can have Hammer on one screen, tutorials on the second, and some other stuff on the third and fourth. If you have lots of monitors but little RAM, I also would recommend having task manager open to keep an eye on your RAM (You can easily hit 80-100% usage with 8GB of RAM).


How to Install Hammer

Hammer has two variants: The source SDK flavour and the bin flavour. I use the bin flavour, as it tends to be more reliable, but if you like making custom models for props and stuff, then go for the source SDK method. The bin method updates with TF2, but it requires Administrator access to install and run.

The Source SDK method

Navigate to your Steam library. At the top of your steam library, you'll see a heading that changes what is listed in your library. Click that and go to tools. In tools, find the program called Source SDK. Double click and install. THIS METHOD IS BROKEN! USE BIN METHOD INSTEAD!

The bin method

Provided you have installed TF2, the hammer.exe file will also be installed. Navigate to C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2\bin\. Right click hammer.exe and create a shortcut. Position this shortcut on your desktop for later use. Then double click Hammer.bat.


Opening Hammer for the first time

The Source SDK method

Just double click your desktop shortcut. A menu will appear with multiple options and a drop-down box at the bottom. Make sure this drop-down box is set to "Team Fortress 2" and double click "Hammer Editor". THIS METHOD IS BROKEN! USE BIN METHOD INSTEAD!

The bin method

Remember that shortcut I told you to place in the previous section? Just double click and you get sent straight to Hammer. Easy.


Learning the interface.

You can't use Hammer unless you know the interface. Its nigh impossible to learn absolutely everything in your first map, but getting grips on the basics does help a lot.

The interface is made up of four windows in a square, with tools on the outside border. These tools can be moved around, therefore I will reference these tools by default location. The four windows are, from left to right then top to bottom: 3D view, top (x/y) view, front (y/z) view and side (x/z) view.

The border

The border is made up of the various tools and shortcuts you will use. The most commonly used items are the tools and the Run Map button. On the right hand side are some selection options and the visgroups menu. The visgroups menu can be used to hide different categories of objects from view eg hide all entities and displacements to look for leaks. Also on the right hand side is the material browser, just click "Browse" (next to the texture preview) to open it.

Tools

These tools perform the fundamental functions required to make a map. By default they are placed on the left hand side, although I like to place my toolbar on the top to get more horizontal space. These are the tools in order from top to bottom/left to right:

:selectiontool:
Selection tool:
This tool can be used to select anything in the map. Clicking an object in the 2D or 3D views allows said object to be stretched, rotated or sheared across any of the 2D views. Holding Control allows multiple objects to be selected. Holding a click and dragging allows an object to be moved, while holding shift while dragging allows an object to be cloned.

:zoomtool:
Magnify tool:
Allows you to magnify the 2D views to your liking (the same effect can be achieved by scrolling in and out with any other tool).

:cameratool:
Camera tool:
This tool allows you to create multiple cameras that roam the 3D space. These are useful if you have to return to a specific point(s) frequently.

:entityool:
Entity tool:
Allows you to place an entity at any place in the map. Can be placed against a surface in the 3D view or have a specific location specified in the 2D views.

:brushtool:
Block tool:
This tool creates blocks that you draw in the 2D views. The blocks can be resized to your liking. Hitting enter creates the block with the texture selected in "current texture" on the right. Other shapes like cylinders can be created as well.

***Pro Tip***
Drawing a square in the x/y view will specify the two dimensions x and y. The third dimension, z will match the length and position of the last selected object! This applies to all the 2D views.


:faceedittool:
Texture Application tool:
Clicking this tool will bring up a dialog box. First though, you must select the face (side) of any brush. This tool has two main functions. First, you can mess around with textures. You can change the texture scale and apply different textures to the same brush. The second function is displacement creation. You can create displacements and edit them to create nice smooth terrain.

:applytexture:
Apply current texture:
This button merely overwrites the texture on the selected brush with the current selected texture.

:decaltool:
Decal tool:
This tool allows you to place decals (selected in the materials browser) on brushes.

:overlaytool:
Overlay tool:
Very similar to the Decal tool, but gives a lot more flexibility and control to you.

:clippingtool:
Clipping tool:
Allows you to cut off a part of a brush, useful for getting walls to blend in at unusual angles.

:vertextool:
Vertex manipulation tool:
Allows one to manipulate the vertices of the brush to their liking.

***WARNING***
Make sure that you do not make any brushes concave. This will generate an invalid solid and could stop your map from compiling!


File Bar

The file bar is small, but contains a lot of functionality. If you open the file menu and look closely, you may notice some keyboard shortcuts that will be of use to you. By far the most important one is Ctrl+S to save. Save all the time! Whenever you do something, save. You can thank me later. Here’s a link to VDC (Valve Developer Community) that goes into detail about the file bar.

https://developer.valvesoftware.com/wiki/Category:Hammer_Menus

The windows

Finally we come to the centrepiece of the interface. The top left window is a 3D view from the perspective of a moveable camera. Pressing Z while hovering your mouse over it will allow you to roam the map, similar to noclip. The top right view provides a top down perspective on the map. The bottom left gives the front view and the bottom right gives the side view. Selecting an object gives the object a red tint in the 3D view and a Yellow/Red border in the 2D views. In the 2D views, the object can be moved (click and drag), stretched (click to get 8 squares around border of object, click one and drag), rotated (click to get 4 circles around border, click one and drag) and sheared (click to get 4 squares around border, click one and drag). Clicking the selected object cycles between these alterations. Remember:

8 Squares = Stretching
4 Circles = Rotating
4 Squares = Shearing


Hammer concepts and you

Some things just can't be explained by interfaces alone. Good thing you're here then. Let’s explain some of the things you will encounter as you make your map.

Measurements

Everything in Hammer is measured in Hammer Units (HU). The scale is 16 HU for every foot (30.5 cm). It is always a good idea to keep these measurements in mind, to prevent overscaling or underscaling your map. For example, a standing player has a vertical hitbox height of 83 units. Be sure to refer to the VDC's Mappers Reference for more information.

Brushes

Brushes are what form your map. Every "block" that you draw with the block tool is a brush. Brushes are used to construct a map and seal it. Brushes also divide visleaves. Using tools such as the vertex tool or the clipping tool give you the ability to shape these any way you want.

Textures

Textures are placed on brushes and give said brush an appearance. Textures range from wood to grass to metals etc. Opening the material browser (click browse on the right hand side) allows you to select a texture. Hitting the apply texture button will change all faces on all selected brushes to that texture. These are standard textures, let’s look at the two other types of texture.

Tool Textures

Tool Textures are textures with function. There are many types of tool textures, but in this section, we will only cover those with use in TF2.

:nodraw:
Nodraw:
Nodraw is used where one needs an efficient method of sealing a part of the map that no-one will ever see. Nodraw brushes don't have a texture, they're invisible. This reduces load on compiling and reduces load on people who play the map. Nodraw can also be used on the outside surfaces of brushes that are facing the 'void' (that black space outside your map) that will stop unnecessary textures from being loaded.

***Pro Tip***
You can toggle the visibility of nodraw textures by pressing this button :rendernodraw: This button stops nodraw textures from being rendered in Hammer (they will still appear when you compile the map). Selected objects will still show their nodraw textures, though.


:playerclip:
Player Clip:
This brush is used to smoothen out surfaces like walls. Suppose you have a detailed wall with lots of solid props. You can use playerclips to smoothen that wall, so people don’t get stuck.

:trigger:
Trigger:
Trigger texture actually has no real function. The use of trigger texture is to help identify triggers, which are actually entities (Brush entities, to be exact).

:skybox:
Skybox:
This texture marks where you want players to see the sky. It can do everything from show a further landscape to emit light from the sun.

:aportal:
Area Portal:
Area Portals divide visibility. You'll learn about them later on. This texture is used to mark where areaportals are.

:blight:
Block Light:
The Block Light texture does exactly what it says on the tin. It is an invisible brush that blocks light. Useful for stopping light leaking through doors.

:skip:
Skip:
Skip textures benefit only the map maker. Brushes with skip on them are erased during compile. This is a good texture to use if you a using a brush purely for reference purposes but don’t want to erase it.

:thint:
Hint:
Hint textures split visleaves in two. This is used for optimisation purposes.

:eek:ccl:
Occluder:
This is used most commonly with func_occluder, which hides props completely covered by the brush from the player’s perspective.

***WARNING***
func_occluder is VERY CPU intensive! Use this entity sparingly!


:bbullets:
Block Bullets:
This texture creates a brush that does not interact with players but blocks bullets from passing through.

Decals and Overlays

Decals are like posters, you attach them to the wall, floor or ceiling of your map. You can look for decals in the material browser, then use the Decal Tool to place it wherever you want. Decals are quite limited in customisability. That’s where overlays come in. Overlays have a lot more flexibility than Decals and can be applied in the same way with the Overlay tool. Overlays and Decals cannot be applied to brush entities. Speaking of which, let’s move on to...

Entities

Entities form all of the functional parts of a map. There are three main categories of entity: Point, Brush and prop. Point entities take up only a single point in space and can be placed anywhere. A simple entity is info_player_teamspawn. This entity is used to define where spawnpoints are placed in the map. All entities have properties that can be edited. For example, info_player_teamspawn has properties like Team, Start Disabled and Associated Control Point. View the VDC for information on any particular entity.

***Pro Tip***
Almost all entities can be named! Giving an entity a unique name will allow you to interact with it through I/O. We will cover this in more detail in the next chapter.


Brush Entities are more complicated; they perform functions over a specified volume. For example, func_respawnroom treats all the volume inside of it as a respawnroom, allowing players to switch loadout. Some brush entities have what is called an origin. The origin is a point of reference that the entity uses to perform its function. A rotating door will use the origin as its centre of rotation. Finally, we come to Prop Entities. Prop Entities (or props for short) are structures that would be extremely complicated to reproduce with brushes. Props have a model, which is defined in the props properties. This model can be anything from a sign to a staircase to a barrel just there to add detail. Props can have multiple appearances on the same model. These are called skins. Skins are on the same model (which has the same shape), but a different appearance, like a different coloured sign or a sign that can say A, B or C.

***WARNING***
You cannot place entities in the void! Doing so will cause all the lighting in your map to go funny and generate a leak!


I/O

Standing for Input/Output, I/O is how entities communicate with each other. Let’s go through a basic input and output. We begin with a team_control_point, this entity is the control point you see in 5cp and Attack/Defend. We have a prop_dynamic underneath the control point. This forms the metallic base with a red light, because our control point is owned by RED. When the control point is captured by BLU, we want our prop_dynamic to change colour. We achieve this with an Output. Go to the "Outputs" tab in the control point's properties and click add. We have multiple fields to fill in, let’s see what they are.

My output named ____
Targets entities named _____
Via this input ____
With a parameter override of ____
After a delay in seconds of ____

For "My output named", we need to specify what condition has to be met for this output to trigger. Since we want to trigger this output when BLU captures the control point, we set this to "OnCapTeam2" (use OnCapTeam1 for RED). Now we have to specify our target entity. We are targeting the prop_dynamic, so we have to give it a name. If we assume this point is point A, we can name our prop_dynamic something like cap_base_a, prop_cap_a, cap_a_base etc. Let’s see what we have so far.

My output named "OnCapTeam2"
Targets entities named "prop_cap_a"
Via this input ____
With a parameter override of ____
After a delay in seconds of ____

So what’s our input? Let's recap what we are doing. We are changing the skin of our prop_dynamic. Therefore it would make sense to use the "Skin" input. But that’s not enough; there are three skins for this prop, how will the map know which one of the other two we want? That’s what the parameter override is, we put the skin number in there. In this case, we want skin 2. Finally, we come to the delay. Since we want the light to change with the control point being captured, set this to 0. We have completed our I/O!

My output named "OnCapTeam2"
Targets entities named "prop_cap_a"
Via this input "Skin"
With a parameter override of "2"
After a delay in seconds of "0"

***WARNING***
Never use quotes in I/O! Otherwise your map may be corrupted and need to be manually edited with a text editor!


Displacements

Displacements are used to create terrain. Everything from cliff edges to the grassy ground are created with displacements. Displacements are always four-sided, however their shape can be distorted. A displacement is divided into a grid, each point on the grid having a height value. This height value is what gives the terrain its height. For an excellent tutorial on displacements, go to these links below:
https://developer.valvesoftware.com/wiki/Displacements
http://forums.tf2maps.net/showthread.php?t=10287


Before Beginning

Read up! You’ve learnt a lot so far, but since what we’re about to do isn’t exactly the easiest thing possible, I’d recommend starting with CTF. Just follow this guide on VDC and get a very basic, functioning map. I’m going to do a payload map because that is where you will learn the most skills. Now what do you need to get started?

You need a plan! There are two ESSENTIAL QUESTIONS that you have to answer before beginning:
What gamemode am I going to do?
What theme am I going to do?
In this tutorial I am going to create pl_mountaintop, it is a payload map that is going to have three stages. Most maps have 3-4 points for single stage variants, in case you wanted to go that route. I am doing a multistage to show you how to set up a multistage map, just in case you want to. It is going to have upward/Badlands sorta theme with an indoor area that has a spytech theme. Now let’s plan this out!

THIS IS A WORK IN PROGRESS, THIS GUIDE WILL BE UPDATED OVER TIME.



Code:
Changelog:

v 0.1.1 Added notice showing source SDK method is broken.
Changed payload map concept to Three-stage (I have no idea what I was thinking of before :/)
v 0.1: Initial public release.
 
Last edited:

Vel0city

func_fish
aa
Dec 6, 2014
1,947
1,589
I have to add a few parts.

Firstly, the Source SDK launcher for TF2's Hammer is borked. Always launch Hammer via bin.

Secondly, Hammer and the compiler can take advantage of 16 cores/threads, not 12.

Finally, don't make an 8 CP PL map. Just don't. Every single stage PL map has 4 max (3 CPs + final). The excuse "Try something unique and make it a selling point" just doesn't work for TF2 in general. Go with what's established, and try to make each map unique within that. Cactus Canyon is a great example of that. It's a normal multi-stage payload, but the finale is unique in that it gives intervals at which BLU has a chance of winning the round with the train. Besides, 8 CPs isn't a selling point. It will go on for far too long, and people know that. Heck, it's not so much a selling point as it is a way to tell people to stay away from a map.
 

Megascatterbomb

L1: Registered
Jul 9, 2014
21
6
I have to add a few parts.

Firstly, the Source SDK launcher for TF2's Hammer is borked. Always launch Hammer via bin.

Secondly, Hammer and the compiler can take advantage of 16 cores/threads, not 12.

Finally, don't make an 8 CP PL map. Just don't. Every single stage PL map has 4 max (3 CPs + final). The excuse "Try something unique and make it a selling point" just doesn't work for TF2 in general. Go with what's established, and try to make each map unique within that. Cactus Canyon is a great example of that. It's a normal multi-stage payload, but the finale is unique in that it gives intervals at which BLU has a chance of winning the round with the train. Besides, 8 CPs isn't a selling point. It will go on for far too long, and people know that. Heck, it's not so much a selling point as it is a way to tell people to stay away from a map.

Thanks for the advice, I havent started mapping yet, so I have a chance to edit it. Now that I think about it, it does sound stupid. Maybe Ill do a multi-stage payload instead.
 

Freyja

aa
Jul 31, 2009
2,994
5,813
A few things I noticed...

The source SDK version is completely broken, there's no reason to run it. You can do custom models and textures perfectly the same way in the new bin system.

8gb memory isn't minimum for hammer at all. Hammer is a 32bit program, it can only use 4gb anyway, as are the compile programs like vrad. I also don't really agree with your complete disregard of AMD CPU's, they work pretty well most of the time, just not quite up there with thee high-end intel i5's and i7's.

Block bullets does in fact interact with the player - it is solid to them. This is why it's commonly used in place of playerclip on stairs and such, as it also collides with the player as well as bullets (helping splash damage work properly on stairs).

Props are normal point entities, not technically another class, however this is just nitpicking.
 

Vel0city

func_fish
aa
Dec 6, 2014
1,947
1,589
A few things I noticed...

The source SDK version is completely broken, there's no reason to run it. You can do custom models and textures perfectly the same way in the new bin system.

8gb memory isn't minimum for hammer at all. Hammer is a 32bit program, it can only use 4gb anyway, as are the compile programs like vrad. I also don't really agree with your complete disregard of AMD CPU's, they work pretty well most of the time, just not quite up there with thee high-end intel i5's and i7's.

Block bullets does in fact interact with the player - it is solid to them. This is why it's commonly used in place of playerclip on stairs and such, as it also collides with the player as well as bullets (helping splash damage work properly on stairs).

Props are normal point entities, not technically another class, however this is just nitpicking.

3.2 GB. A 32-bit program can only use about 3.2 GB of RAM which can even be less depending on the VRAM size. Those 800 MBs make a difference.