Contacting me
Apprently all of my contact forms have been broken for over a month… I wondered why I was not getting any emails from my site. So if you have tried to reach me via the contact forms on my site in the past month, sorry. I’m going to be looking for a fix as soon as I can. Until then email me directly at:doug@tophattwaffle.com
ill make a post when they are fixed
River tutorial progress
It is being made! It’s just taking a lot longer to make all of the textures that I need to make it look real. Here is what I have so far!
River tutorial
Just letting you guys know that I will be making the river tutorial. I just need to make some textures for you guys first. I want this to be a high quality tutorial that will place rivers in ALL THE MAPS.
Mapping Workflow, Keeping Your Sanity for the Extra Long Projects
If you’re even reading this right now it’s because you use Hammer editor, and know that is can be a black vortex of your time. Knowing how to work through a project without giving Hammer too much of your time is always a wonderful thing to do. You could be spending that time on having a life in the great outdoors, or making another level in hammer. So with that you are the artist, and that newly created map file is your canvas. Lets turn it into something wonderful.
Planning Stage
Planning your level can do wonders for the time spend creating the level. It also helps reduce the amount of reworks that do you because you think that you can do better. When planning your level out you should know your skill cap, and the limitations of hammer along with the engine. Planning to do something that you can’t, or something that is impossible for the engine is a waste of time and will make you feel like crap for wasting your time on it. So keep it simple, working around you. If you see something in another level and want to emulate it for your own level but don’t know how find out. You can either contact the creator of that level and ask for help on the situation, or decompile the level. Now when I say decompile the level, I’m saying this as a learning purpose only. If you go and just copy what they have made you’re not learning anything, you’re just hurting yourself.

Once you have the idea in your head you might want to get it onto paper, or some other form or medium that you can store it in. You don’t need to be Van Gogh with your design when putting it onto paper. You are most likely the only one that is going to be looking at in anyways. Here are some of the doodles that my Lab Rat team have come up with for designs.
As you can see they are by no mean pretty, but they get the point across. You mainly want it to prevent you from forgetting what you wanted to do. You might find that you will constantly get ideas for your level just going about your daily life. I get a lot of mine right before bed and I keep a notebook near by so I can jot them down before I go to bed. If you’re not the kind of person to doodle, then you can always just make a rough outline in hammer with the dev textures. It takes no more than 20 minutes to lay out an entire level.
Start Mapping
You now have your layout, and you’re most likely feeling like you’ve gotten a lot done. This is in fact not that case! I don’t want to burst your bubble but the longest part has just begun. You now start building your level in hammer, for all of the screenshots in this I’ll be using one level that I’ve made. (a level for Portal 2 Lab Rat.)
You might not even know where to begin your level, believe me we have all been there. I’m also sure we all start at the same spot, the player spawn. It’s best to make your level the same way you play it, start to finish.
You can now build your level in two different ways:
- You can build in passes. When building in passes you doing things 1 pass at a time.
- You do the brush pass. You lay out the entire level in brush. Place no models, and do no detail work at all.
- Functionality pass. You then go back and all of the functionality parts of the level. This is stuff like doors, entity systems, anything that the player HAS to do to complete the level.
- Detail pass. You go back, and add full detail to your level. In this you would place all of your models, lights, sounds, and everything else that your level is missing.
- Test pass. You test the entire level, then go back and fix what you found to be broken.
- You can build in areas/steps. When building like this you build like the pass method, but you do it one room at a time. You fully complete one room, before moving onto another room. You are basically breaking down the map into little maps, and finishing them faster.
Work Flow, and Time Management
Your time is precious, and you need to spend it wisely. This can be done by having good work flow, basically a lot of little things to help speed up the total process. One of the biggest things that you can do to speed up mapping is to use the mouse as little as you can. No matter how fast you may think you are with it the keyboard is always faster. So use hot keys, the time you spend by pressing the hot key is less then moving the mouse from where ever it to to Edit->Map properties. Here is a complete list of Hammer’s hot keys to help you speed up the process. Hammer Editor Hot Keys. Once you’ve started using hot keys you should find that the whole process is a little faster, does it not feel good to be a keyboard warrior?
The grid is a wonderful thing to help stay organized, and hammer enjoys when things are on it as well. Without getting to much into optimization the grid helps you stay sane, because there won’t be a ton of lines scattered all over the place.
Sense vision is so important to us we need to help keep it clear. While starting the level off you can see everything fine because there is not much there yet. But give it time, soon your level will be filled by your masterfully placed brushes, and props. Yet when the grid gets too cluttered you’ll need to clean it up, and you’ll use vis groups for this. They allow you hid certain things from your level so you have better vision of what you’re working on. You can also toggle prop, and displacement from bring drawn to just the bounding box. To toggle this just click the “Toggle Models in 2D” button, it’s located 2 icons to the right of “Run map” and looks like this:![]()
Here is what it looks like when you have them enabled, and disabled.

You can see that on the left there is so much more going on, and it’s hard for me to see what I’m doing. Where as on the right I can see exactly what I’m doing. You can see my vis group’s filter control to the left. In it I have my map organized into the areas of my map, I can easily toggle what I do and don’t want to see. If you want to know how to create vis groups you can watch: Tutorial 39, Vis grouping.
We all like to test what we’ve just made, and sometimes we are doing a lot of testing because of the guess work we are doing. But with every test you are required to compile your level. Depending on how good your computer is, and how well the level is optimized the compile can take anywhere from 5 minutes, to 3 hours. Knowing what compile settings are needed to test your level are very important. If you’re just testing entities you don’t need VVIS or VRAD, so you can just compile with VBSP. The level will be laggy, but you will only spend 15 seconds compiling, compared to the longer compile time including lighting and vis data.
But testing lighting information can be a little longer, because VRAD needs to fire rays so it knows how to light your level. You can test certain level of you area by using the cordon tool.
When you use the cordon tool it hides everything outside of the cordon box, and seals the map from leaks. This will allows you to test lighting much faster, because you’re only compile a room, as opposed to compiling the entire level to just test said room.
Finalizing
You are now moving on to last bend of the mapping process, finalizing. At the end of this is a check list on how to finish up a level, but I’ll write out some of my thoughts on the process, but the check list is king!
There are a few things that you need to do, make sure you have cubemaps added to your level. The cubemaps are what the engine use for cheap reflections. Add them, then buildcubemaps. Then you need to make sure the FPS is acceptable in your level, this means optimizing your level, not one likes it but it has to be done. If you don’t know how to do this watch: Tutorial 21, Optimization. Then compile your level on normal settings, you don’t want to do a final compile here because you’re just doing a test run here. (If you want to test with the advanced compile settings you can.)
Next run though your level, find any and all bugs that you can and fix them. Next you’ll want to send your level off to some testers, don’t send it to everyone on your friends list. Once you’ve sent it to your tester(s) make sure they know it’s a beta, and that they are to find any problems they can. Listen to them, I’ve made this mistake before thinking that I knew what was best. Not everyone thinks like you, you may have made things hard to find and will need to place some hints to nudge the player along in the right direction.
After you’ve fixed all of the problems that your testers have found fix them, then run though one more time and see if you have made any more problems by fixing the previous bugs. If you’re all good then pack the level (if needed, you’ll only need to do this if you have custom content in the level.) After the packing you are all done!
I hope that this is what you guys meant, and wanted by a “work flow” tutorial, if you feel I’ve missed anything let me know and I’ll try to fix it when I can. Thanks, and happy mapping!!! <3
Finalizing a level check list
- Add env_cubemaps to your level.
- Optimize your level. (If you don’t know how, watch THIS)
- Do a rough compile of the level. Compile with VRAD and VVIS set to normal.
- If compile takes long on VVIS, Go to your level and make sure you have func_detailed the correct things. (If you don’t know what “func_detail” is, watch THIS)
- Build cube maps, type: “Buildcubemaps” in console for this.
- Play through your level for about an hour or more. Look for game play and visual flaws, then correct them. If none Start back at #3.
- Get (a) friend(s) to play your level, have him/her look for game play and visual flaws, then correct them. If none Start back at #3.
- If your map has passed the testing phases you can move on to the Final Compile
- Settings up a final compile takes a few steps, first click “run map”
- Click “Expert”
- Click “Edit”
- Select Default, and Click “Copy”
- Name it: Final Compile (Slow)
- Select “Final Compile (Slow)” from the drop down.
- Under “$light_exe” add the following to the parameters, before “-game”: -final -textureshadows -hdr -StaticPropLighting -StaticPropPolys
- Add a new command, put: $light_exe in the command area.
- Add the following to the newly created commands parameters: -final -textureshadows -ldr -StaticPropLighting -StaticPropPolys -game $gamedir $path\$file
- Move the new command to be above the old $light_exe command.
- Compile the map under the new compile settings.
- Build cube maps again, type: “Buildcubemaps” in console for this.
- Toggle HDR modes. (If it’s on, turn it off. if It’s off turn it on)
- Build cube maps again under the new HDR settings, type: “Buildcubemaps” in console for this.
- Close the game.
- Pack all your custom content (if any) into your level using: PakRat, VIDE, MAN, or PackBSP. (PackBSP does the best job)
- Remove your: Materials, Models, and Sounds folder from your root directory of your game. (Rename them, move them to desktop. Just make the game create new ones)
- Load the packed level, make sure the map packer got all of the custom content into the level. If not, go to step 13 and try a different packer.
- If everything is good to go. Release the map.
Hammer hot key list
There are many hotkeys in Hammer that can help you turn the blank map into a wonderful masterpiece in no time. Hammer does give you a list of most of then in various places, but some are completely hidden and have little, to no way to be found. There is currently a hotkey reference on the VDC but I feel that it lacks some definition, so I’m going to put some detail into this.
File Operations
| Hot Key | Command | More Info |
|---|---|---|
| CTRL+O | Open File | Opens a previously saved map file. |
| CTRL+S | Save file | Saves the currently open, and selected map file. Not a bad idea to train yourself to press this every 2 minutes. |
| ALT+B | Export Again | Export the currently open map file. |
| F9 | Run Map | Compiles the map to a BSP file to be played by the engine. |
| CTRL+SHIFT+S | Open Sound Browser | Opens Hammer's sound browser. |
| CTRL+N | New File | Opens a new, blank map file. |
Clipboard
| Hot Key | Command | Description |
|---|---|---|
| CTRL+C | Copy | Adds selected object to clipboard |
| CTRL+X | Cut | Adds selected object to clipboard, while removing the source object. |
| CTRL+V | Paste | Pastes the current object in clipboard to world. |
| CTRL+SHIFT+V | Paste Special | Opens the paste special window. |
Tools
| Hot Key | Command | Description |
|---|---|---|
| SHIFT+S | Selection Tool | Makes the selection tool active, with it you can select various map elements. |
| SHIFT+G | Magnify Tool | Makes the Magnify Tool active, with it you can zoom the views in hammer. |
| SHIFT+C | Camera Tool | Makes the Camera Tool, active. You can use it to fly through your level in the 3D view. |
| SHIFT+E | Entity Tool | Selects the entity tool, with it you can place new entities in your level. |
| SHIFT+B | Block Tool | Selects the block tool, with it you can make new brushes in then 2D views. |
| SHIFT+A | Face Edit Sheet | Selects the Face Edit Sheet. With it you can change textures of single faces, or turn brushes into displacements. |
| SHIFT+T | Apply Current Texture | Applies the currently selected texture to the selected brush(es) |
| SHIFT+D | Decal Tool | Selects decal tool. You can then apply the selected texture as decals. |
| SHIFT+O | Overlay Tool | Selects overlay tool. You can then apply the selected texture as overlays. |
| SHIFT+X | Clipping Tool | Selects the clipping tool, you can cut brushes with it. Press the hot key again to change the clipping setting. |
| SHIFT+V | Vertex Tool | Makes the vertex tool active, you can edit brush vertex points once selected. |
Grid Operations
| Hot Key | Command | Description |
|---|---|---|
| [ | Decrease Grid size | Decrease the grid size by a power of 2 |
| ] | Increase Grid size | Increase the grid size by a power of 2 |
| SHIFT+R | Toggle Viewport Grid | Enable/disable the viewport's grid. |
| SHIFT+W | Toggle Grid Snap | Enable/disable the snap to grid feature of Hammer. |
| P | Toggle 3D Brush Grid | Enable/disable the grid on selected brushes in the 3D view. |
| CTRL+B | Snap selected to grid | Snap the selected object(s) to the grid, based on the selection's bounding box. |
| CTRL+SHIFT+B | Snap selected to grid | Snap the selected object(s) to the grid, individually. |
Grouping
| Hot Key | Command | Description |
|---|---|---|
| CTRL+G | Group | Group the selected objects. |
| CTRL+U | Ungroup | Ungroup the selected objects. |
| CTRL+R | Create prefab | Creates a prefab with the currently selected object(s) |
| CTRL+W | Toggle group selections | Toggle Ignore Groups mode to bypass entity and group selection. |
| CTRL+T | Move selected to entity | Makes the selected brush(es) a entity. |
| CTRL+SHIFT+W | Move selected to world | Removes all entity status from the selected brush(es) |
Viewports
| Hot key | Command | Description |
|---|---|---|
| CTRL+A | Auto size view ports | Re-sizes all 4 view ports to be the same size. |
| SHIFT+Z | Maximize/Restore view port | Full screens the active view port, or restores the status before the full screen. |
| Arrow Keys | Pan view/Nudge selected | Pan view, or nudge the selected object(s). |
| SHIFT+Arrow Keys | Clone selected+nudge | Close the selected object(s), whilst nudging them. |
| CTRL+I | Flip Vertically | Flip the selected object(s) vertically. |
| CTRL+L | Flip Horizontally | Flip the selected object(s) Horizontally. |
| F2 | Switch to 2D top view (X/Y) | |
| F3 | Switch to 2D Side view (X/Z) | |
| F4 | Switch to 2D Front view (Y/Z) | |
| F5 | Switch to 3D Textured view | |
| SHIFT+F5 | Switch to 3D Shaded textured view | |
| TAB | Cycle view ports | Cycles active viewport view. |
2D Views
| Hot Key | Command | Description |
|---|---|---|
| NumPad +/- | Zoom in/out | Zooms in and out the active 2D view. You can hold control to sync all 2D views. |
| Mouse Wheel | See: NumPad +/- | See: NumPad +/- |
| 1-9 | Zoom presets | |
| Spacebar+M1+Drag | Drags the active view around | You can use this to move the view in a tablet computer style.` |
| ALT (Hold) | Disable Snap to grid | Completely disables snap to grid. This is not recommended for brushes, as it messes with VVIS and VRAD. |
| CTRL+E | Center 2D views | Centers the 2D views on the selected object(s). |
3D view
| Hot Key | Command | Description |
|---|---|---|
| Spacebar (Hold) | Various movements options | Hold M1, allows you to rotate the angle of the view. Hold M2, allows you to move the position of the camera, without changing the angle. Hold M1+M2, Move the camera without changing the angle. |
| Spacebar+SHIFT | Various movements options | Hold M1, same as above. Hold M2, move forward and backwards, as well as pan side to side. |
| Arrow keys | Aim | Change aim |
| Mouse Wheel | Zoom | Zoom |
| W,A,S,D | Move | Move in 3D space |
| Z | Toggle Mouse look | Locks the mouse to the 3D view as a look method. |
| P | Toggle 3D grid | See Grid settings |
| O | Display FPS | Display FPS, rather useless. |
| I | Toggle bounding boxes | Toggles bounding boxes for all visible object(s), annoying to me. |
| X or CTRL+F9 | Enables editing in 3D view | Allows you to move, re-size, and rotate objects in the 3D view. |
| 1 | Decrease clipping plane | Decreases the draw distance of hammer, nice for slower machines. |
| 2 | Increases clipping plane | Increases the draw distance, do you like lag? |
| CTRL+SHIFT+E | Center 3D view on selection | <--- |
| Hot Key | Command | Description |
|---|---|---|
| Mouse 1 | Selects object, or cycles editing modes | Selects an un-selected object, or cycles through: re-size, rotate, and skew. |
| Mouse 1 (Holding) | Cycle though objects under cursor | Cycles through all objects under the cursor, useful for getting those hard to reach items. (3D view only) |
| Mouse 1 (Click and Drag) | Makes a selection box/selects objects | Will make a selection box, or selects objects under the box. Depending on your settings. |
| CTRL (Hold) | Multi select | Used to select multiple object(s) |
| SHIFT (Click and drag) | Clone | Clones the selected object to a new position. You'll notice that I do this a lot in my tutorials. |
| SHIFT (Hold) | Unconstrained 15 degree rotation | If you have the 15 degree rotation lock on (under 2d views in options) this will allow you to turn it off whilst you're holding it. |
| SHIFT+Q/ESC | Clear selection | Deselects all selected objects. Pleases my OCD. |
| PGUP | Previous selection in hit list | Will cycle through all objects that could be selected if no other object was in the way. |
| PGDN | Next selection in hit list | Will cycle through all objects that could be selected if no other object was in the way. |
| CTRL+T | Move selected to entity | Makes the selected brush(es) a entity. |
| CTRL+SHIFT+W | Move selected to world | Removes all entity status from the selected brush(es) |
| ALT+ENTER | Object properties | Open the object properties for the select object(s) |
Camera Tool
| Hot Key | Command | Description |
|---|---|---|
| SHIFT (Hold)+M1 (Drag) | Creates new camera | Creates a new camera position to be used later. |
| PGUP | Cycle previous camera position | <--- |
| PGDN | Cycle next camera position | <--- |
| Delete | Deletes current camera position | <--- |
| CTRL (Hold)+Drag a camera | Move a camera, and it's point of interest together | <--- |
| Mouse Wheel | Move active camera | Move active camera forward or backwards. |
Block tool
| Hot Key | Command | Description |
|---|---|---|
| M1+Drag | Creates a new block outline | <--- |
| Enter | Creates a block | Creates a block from a previously made block outline. |
| ESC | Cancel block creation | <--- |
| ALT+SHIFT+C | Insert original prefab | <--- |
Entity Tool
| Hot Key | Command | Description |
|---|---|---|
| M1 | Create entity | Creates the currently selected entity in the 3D view. If used in the 2D view you get to create the entity like a brush. |
| Delete | Removes last made entity |
Face edit sheet
| Hot Key | Command | Description |
|---|---|---|
| CTRL (Hold) | Select multiple faces | <--- |
| SHIFT (Hold) | Select all faces on brush | Selects all faces on the desired brush. |
| M2 | Apply material | Applies the currently selected mater to the clicked face. |
| Shift+M2 | Apply material to all faces | Applies the selected material to all faces on the clicked brush. |
| ALT+M2 | Apply materials with wrapping | Applies the currently selected material to the clicked face, whilst using the previously selected material to wrap and align the new texture. |
| ALT+SHIFT+M2 | Apply material to all faces with wrapping | See above, but will all faces on the brush |
Displacement editing sheet
| Hot Key | Command | Description |
|---|---|---|
| CTRL+M1 | Select multiple faces | <--- |
| SHIFT (Hold) | Select all faces on brush | <--- |
| SHIFT (Hold)+CTRL (Hold) | Add all un-selected faces to selection | <--- |
Displacement editing tool, paint geometry
| Hot Key | Command | Description |
|---|---|---|
| M1 | Paints geometry | Applies the currently selected settings to the displacement. |
| M2 | Paints geometry | Applies the currently selected settings to the displacement, but inverses it. |
| CTRL+M1 | Select/Deselect face | |
| SHIFT+CTRL+M1 | Select all un-selected faces | |
| ALT+M1 | Change editing sphere size | Increase/Decrease the painting sphere size. |
| SHIFT | Drags vertex in line | Moves a vertex point in the direction of the currently selected axis |
Displacement editing tool, paint alpha
| Hot Key | Command | Description |
|---|---|---|
| M1 | Applies 2nd texture | Paints the displacement with the textures $basetexture2 |
| M2 | Applies first texture | Paints the displacement with the textures $basetexture |
| CTRL+M1 | Select multiple faces | |
| SHIFT+CTRL | Select all un-selected faces |
Overlay tool
| Hot Key | Command | Description |
|---|---|---|
| SHIFT+O | Selects/Changes overlay mode | Will select the overlay tool, and if pressed again will change to overlay vertex mode. |
| CTRL (Hold) | Selects multiple overylays | |
| SHIFT (Hold) | Makes over lay vertex points snap to each other | Makes overlay's vertex point snap, so you can create a seamless overlay path with them. |
Clipping tool
| Hot Key | Command | Description |
|---|---|---|
| M1 | Create new clipping plane | Makes a new plane to clip the selected brush(es) across. |
| SHIFT (Hold)+M1 | Override old plane with new one | Makes a new clipping plane, while override, and removing the old one. |
| ENTER | Clip | Preform the clip action |
| CTRL (Hold)+M1 | Move both clipping handles | Moves both clipping handles at the same time. |
| O | Toggles clip measurements | Enables/disables the clipping measurements in the 2D view while clipping a brush. |
| SHIFT+X | Cycle clipping modes | Cycle clipping modes from Cut+Delete to Split. |
Vertex edit tool
| Hot Keys | Command | Description |
|---|---|---|
| M1 | Select vertex or edges | |
| CTRL (Hold)+M1 | Add, or remove vertex points from selection | |
| CTRL+F | Split faces | Splits the faces on a brush, so you can make the brush more complex. (You must have two points currently selected for this to work) |
| ALT+E | Opens scaling box | Summons the vertex scaling box so you can scale your vertex points from a point. |
| ENTER | Preform vertex scale | |
| SHIFT+V | Cycle vertex display modes |
Miscellaneous
| Hot Key | Command | Description |
|---|---|---|
| CTRL+Z | Undo | Your best friend, treat him nice! |
| CTRL+Y | Redo | Redo what you just undid. Silly. |
| SHIFT+L | Toggle Texture lock | Enables/disables the texture lock when moving textures. |
| CTRL+M | Transform | Opens the transform box so you can scale, rotate, and move any selected object(s) by a certain amount. |
| ALT+P | Check for problems | Opens the check for problems box. |
| ESC | Clear/cancel | Cancels a various amount of tools/actions. |
| CTRL+SHIFT+G | Open find brush number window | |
| CTRL+SHIFT+F | Open fine entities window | |
| CTRL+SHIFT+R | Open replace entities window | |
| F1 | Help | Opens the VDC. |
| CTRL+R | Creates prefab from selection | |
| H | Hides object from view | Hides the objects from view, and does not compile them until un-hidden |
| U | Un-hide hidden objects | Brings all hidden objects back into view. |
New tutorials coming soon!
Hey everyone, I’ve finally cleaned out my email box of all your tutorial requests and have added them to a list. I plan to make one from this list each week, maybe two a week if I’m feeling up to it. I’ll make a new poll every week where you can vote for the tutorial that you want me to make. You can find the poll on the right side of the site.








