Clean mapping guide.
Quote from Lpfreaky90 on March 19, 2012, 11:47 pmHello everyone,
Disclaimer
This is one of the methods you can use to map. I don't say other ones are worse but for me this is an easy strategy that can help you create maps fast and with nicely aligned textures.
In this guide I'm often referring to steam/steamapps/common/portal 2/sdk_content/maps/ this is the default path for hammer; if you have different settings this path can be different.intro
Over the last few weeks you've seen 3 recent releases by me:
Cube 'n Buttons,
Lp's Lazr0s and
Lp's Flingtro.You could've seen that I use a very similar appearance in all those maps. Very clean, modern style. I've developed a technique that is really easy to use and which makes mapping really easy.
In this post I'd like to explain the basics of this technique.
The basics
Let's start at the very beginning:
When you open up hammer you start with a nice little grid. I suggest setting your grid size to 32. Zoom to the center (where all the blue lines come together). This is the origin of the map. Each time you load hammer this is where your default camera starts.
Convenient to have this in the center of your main room? no.
If your map uses lasers that turn on an off there will be sparks at the origin. There are also a few other things that make it a good idea not to start at the origin.The technique I'm using is copying blocks of 128x128x32 and/or 128x128x128 through my maps. To make sure the textures are properly aligned I start with the tile/white_wall_tile_bullseye texture. It's a 128x128 texture and you will immediately see if it's placed correctly or not.
Ok: so where do we start. Usually I actually do start at the origin. I draw a 128x128x32 block like this:
As you can see I draw this at the top right of the cross in the xy-plane and I draw it under the line in the z-plane. When you start from this point each of your textures will be automatically aligned! But I already said I wanted to start away from the center so with [Shift] we have to copy the tile like this:With a bit more pressing shift you can make a nice 3x3 floor. Group them together and you have a nice group. Select that group, rotate it and make it a nice wall for your map. Do this for all four sides and then also create a ceiling. It should look something like this:
Once you've done that make sure that your bullseyes are still nicely in place and use the texture replacement tool to replace your bullseye texture by nodraw. This looks a lot better and is also a bit better for performance sometimes.Now that you got this nodraw room it's time to add some actual textures!
Make sure that you use floor textures on the floor and ceiling textures on the ceiling.
So go to the texture browser and select a nice floor texture and use the texture application tool to apply it to the floor. The advantage of the texture application tool over the apply current texture is that it looks a lot tidier in hammer and if the back of the wall is the wall on the other side it's very easy to give that another texture in order to make it look good. For black textures I suggest starting with black_wall_metal_004c. This is also fits nicely on the grid. Add variation as you like to the walls. If you use this stategy the only thing you need to be carefull with are the textures that don't fit in 128x128 areas like black_wall_metal_002f and black_wall_metal_004d. If you used my technique you might need to change the position of the texture; but only with 512 in the x-and/or y-direction!Once you got your walls properly you'll need light. For this we will use default instances. These are good lights that provide nice light. With black textures I prefer to use "cool" lights; they're a bit blueish and they look very good. To add these create an entity, make it a func_instance and click on VMF Filename and browse to steamapps/common/portal 2/sdk_content/maps/instances/lights and select light_panel_128_cool_med.vmf This is a nice light for this room. Once you selected it hit enter. If you haven't saved your map yet nothing will happen. So save it now and load the map again. You will now see a light where you placed that instance the last time.
I now suggest you draw the instance light to the ceiling. Remove the center brush and make sure the light fits in nicely. Now add an info_player_start and hit compile. Your map should now look something like this:
You can also use steamapps/common/portal 2/sdk_content/maps/instances/lights and select light_panel_128_cool_high.vmf this one gives a lot more light. It is very useful to add this to larger rooms. Don't add too much lights or your map will be blinding which isn't good. Something that's also good to take in account is that light looks a lot brighter on black then it does on white. See also my previous images.
If you keep working with 128x128x128 blocks you will never get off-grid. However doors and fizzlers between rooms look a lot better when you put them between 32 unit thick walls. However; as soon as you've done that you need to start to (slightly) worry about your texture alignment. You need to shift the texture on the wall 128 or -128 units depending on what side you changed the room. That should align nicely again.
If you want to make a corridor it's very simple: just delete the block where you want to have the corridor and make the walls next to it 128x128x128 and the block above it as well. Then just simply copy the floor over as well and give it proper textures:
If you're planning to do long corridors I suggest to only make the first and/or last blocks 128x128x128. It looks cleaner if the rest are just nicely 128x128x32. If you're having problems with lighting I suggest making the corridors 256 high so you can add proper light panels to it. Doing this in a 128 high corridor is a bad idea; the light easily gets too bright.If you want to make height differences: also use 128x128x128 blocks to get to a lower point:
The final thing I want to mention in this post is the other way of lighting your room: observation rooms. They look really cool and people like to have them in the maps they play! To add these create an instance and browse to maps/instances/labs/ now choose observation_room_128x128_1.vmf or
observation_room_256x128_1.vmf and place them in your map. For this example I will be using observation_room_256x128_1.vmf.
Now delete 2 blocks so the observation room fits in.
As you can see with the red arrows there are overlapping textures here! Usually they will take extra computer power to be shown and it doesn't even look good. So they need to be fixed. This is a special case though: overlapping nodraw textures don't cost more computer power. They can get strange graphical glitches though so it's still a good idea to fix it!In order to do this set your grid size to 16 and cut the edges so they are the same as the edges from the observation room:
Get your camera inside the observation room to make sure you got 'em all! not that if you did all there is one nodraw texture visible from the instance, this is part of the instance itself.now is a nice time to stop reading and start practicing in hammer. Just create a slightly bigger level than this and keep using shift to copy and paste. Once you master this technique I suggest reading the next post.
todo
* More instances is faster mapping!
* Adding various test elements.
* How are we going to add all those indicator lights here?So keep tuned, and please let me know what you think of it so far, where can I improve and is it clear enough?
~Lp
Hello everyone,
Disclaimer
This is one of the methods you can use to map. I don't say other ones are worse but for me this is an easy strategy that can help you create maps fast and with nicely aligned textures.
In this guide I'm often referring to steam/steamapps/common/portal 2/sdk_content/maps/ this is the default path for hammer; if you have different settings this path can be different.
intro
Over the last few weeks you've seen 3 recent releases by me:
Cube 'n Buttons,
Lp's Lazr0s and
Lp's Flingtro.
You could've seen that I use a very similar appearance in all those maps. Very clean, modern style. I've developed a technique that is really easy to use and which makes mapping really easy.
In this post I'd like to explain the basics of this technique.
The basics
Let's start at the very beginning:
When you open up hammer you start with a nice little grid. I suggest setting your grid size to 32. Zoom to the center (where all the blue lines come together). This is the origin of the map. Each time you load hammer this is where your default camera starts.
Convenient to have this in the center of your main room? no.
If your map uses lasers that turn on an off there will be sparks at the origin. There are also a few other things that make it a good idea not to start at the origin.
The technique I'm using is copying blocks of 128x128x32 and/or 128x128x128 through my maps. To make sure the textures are properly aligned I start with the tile/white_wall_tile_bullseye texture. It's a 128x128 texture and you will immediately see if it's placed correctly or not.
Ok: so where do we start. Usually I actually do start at the origin. I draw a 128x128x32 block like this:
As you can see I draw this at the top right of the cross in the xy-plane and I draw it under the line in the z-plane. When you start from this point each of your textures will be automatically aligned! But I already said I wanted to start away from the center so with [Shift] we have to copy the tile like this:
With a bit more pressing shift you can make a nice 3x3 floor. Group them together and you have a nice group. Select that group, rotate it and make it a nice wall for your map. Do this for all four sides and then also create a ceiling. It should look something like this:
Once you've done that make sure that your bullseyes are still nicely in place and use the texture replacement tool to replace your bullseye texture by nodraw. This looks a lot better and is also a bit better for performance sometimes.
Now that you got this nodraw room it's time to add some actual textures!
Make sure that you use floor textures on the floor and ceiling textures on the ceiling.
So go to the texture browser and select a nice floor texture and use the texture application tool to apply it to the floor. The advantage of the texture application tool over the apply current texture is that it looks a lot tidier in hammer and if the back of the wall is the wall on the other side it's very easy to give that another texture in order to make it look good. For black textures I suggest starting with black_wall_metal_004c. This is also fits nicely on the grid. Add variation as you like to the walls. If you use this stategy the only thing you need to be carefull with are the textures that don't fit in 128x128 areas like black_wall_metal_002f and black_wall_metal_004d. If you used my technique you might need to change the position of the texture; but only with 512 in the x-and/or y-direction!
Once you got your walls properly you'll need light. For this we will use default instances. These are good lights that provide nice light. With black textures I prefer to use "cool" lights; they're a bit blueish and they look very good. To add these create an entity, make it a func_instance and click on VMF Filename and browse to steamapps/common/portal 2/sdk_content/maps/instances/lights and select light_panel_128_cool_med.vmf This is a nice light for this room. Once you selected it hit enter. If you haven't saved your map yet nothing will happen. So save it now and load the map again. You will now see a light where you placed that instance the last time.
I now suggest you draw the instance light to the ceiling. Remove the center brush and make sure the light fits in nicely. Now add an info_player_start and hit compile. Your map should now look something like this:
You can also use steamapps/common/portal 2/sdk_content/maps/instances/lights and select light_panel_128_cool_high.vmf this one gives a lot more light. It is very useful to add this to larger rooms. Don't add too much lights or your map will be blinding which isn't good. Something that's also good to take in account is that light looks a lot brighter on black then it does on white. See also my previous images.
If you keep working with 128x128x128 blocks you will never get off-grid. However doors and fizzlers between rooms look a lot better when you put them between 32 unit thick walls. However; as soon as you've done that you need to start to (slightly) worry about your texture alignment. You need to shift the texture on the wall 128 or -128 units depending on what side you changed the room. That should align nicely again.
If you want to make a corridor it's very simple: just delete the block where you want to have the corridor and make the walls next to it 128x128x128 and the block above it as well. Then just simply copy the floor over as well and give it proper textures:
If you're planning to do long corridors I suggest to only make the first and/or last blocks 128x128x128. It looks cleaner if the rest are just nicely 128x128x32. If you're having problems with lighting I suggest making the corridors 256 high so you can add proper light panels to it. Doing this in a 128 high corridor is a bad idea; the light easily gets too bright.
If you want to make height differences: also use 128x128x128 blocks to get to a lower point:
The final thing I want to mention in this post is the other way of lighting your room: observation rooms. They look really cool and people like to have them in the maps they play! To add these create an instance and browse to maps/instances/labs/ now choose observation_room_128x128_1.vmf or
observation_room_256x128_1.vmf and place them in your map. For this example I will be using observation_room_256x128_1.vmf.
Now delete 2 blocks so the observation room fits in.
As you can see with the red arrows there are overlapping textures here! Usually they will take extra computer power to be shown and it doesn't even look good. So they need to be fixed. This is a special case though: overlapping nodraw textures don't cost more computer power. They can get strange graphical glitches though so it's still a good idea to fix it!
In order to do this set your grid size to 16 and cut the edges so they are the same as the edges from the observation room:
Get your camera inside the observation room to make sure you got 'em all! not that if you did all there is one nodraw texture visible from the instance, this is part of the instance itself.
now is a nice time to stop reading and start practicing in hammer. Just create a slightly bigger level than this and keep using shift to copy and paste. Once you master this technique I suggest reading the next post.
todo
* More instances is faster mapping!
* Adding various test elements.
* How are we going to add all those indicator lights here?
So keep tuned, and please let me know what you think of it so far, where can I improve and is it clear enough?
~Lp
Quote from Lpfreaky90 on March 19, 2012, 11:48 pmAdding test elements
Cube droppers; gel and gel droppers:
Once you created your first room it's time to add test elements. Let's start with a cube dropper and a button. For the cube dropper we use an instance: instancesgameplaycube_dropper_normal.vmf
As you can see the model clips (overlaps) with the wall. What's harder to see is that the instance either sticks out of the ceiling a bit or it is somewhat inside the ceiling by default. This doesn't look good so I suggest you now set your grid to 8 and drag it down one block, after that it's at the proper height. Because the model clips with the wall it's a good idea to move it.
To do this you have two options: move it to the center of the room or create a 256x256x32 brush around the box dropper:
Personally I prefer the 256x256 option because it is less room wasted! It is important to know that this cube dropper can only used once. This is because a lot of things in the instance have the @ prefix. This triggers all relays with the same name. also outside the instance itself. You can either use cube_dropper_multiple_normal.vmf or open cube_dropper_normal.vmf; remove the @'s and save it under a different name in your own instance folder. For example: All my custom instances are in maps/instances/Lp/ this way it's very easy to find your own instances and share them with others.95% of the time you want a button to respawn a cube. This often prevents people from getting stuck in your level so now it's time to add a button. Go to hammer and create a prop_button. Place it near a wall: a button against the wall is often looking better then a button in the middle of the room. If you want you can create a 64x32x4 brush as a base. Use the [ and ] buttons to get to a grid size of 4 to get the proper height and then switch back to 32 again. It's just a small detail that makes your map look better. Use a floor texture for the top face and add plastic/plasticwall004 to the sides. Now press [Ctrl]+[T] to make it a func_detail. This is something that will improve performance. I'll go into that later. Then grab the cube dropper and place it. For the height you once again should temporarily set your grid size to 4 you can also use this grid size to place the button nicely at the center of the platform.
Once the button is properly placed double click it or select it and press Alt+Enter. Set the "Delay Before Reset" property to 3 and "prevent fast recent" to Yes. This is very important: if people press the button too fast the cubes can get stuck thereby breaking your puzzle. So make sure you do this.
Now it is time to activate the cubedropper. To do this select the cube dropper first and give it a name. "cube_dropper" for example. Then select the button and go to the outputs tab. Click add and add the folowing output:
Usually when you added the name cube_dropper you can press the arrow up and down keys to see the inputs you can give to the instance. Congratulations; you now have a working cube dropper!Once you have the gel dropper it is a good idea to add indicator lights. They are the blue/orange dots that help people see what each button does. To do this you must select the apply overlay tool:
once you selected that tool browse for "indicator" and you will find the signage/indicator_lights/indicator_lights_floor texture. Select it and click somewhere on the surface where you want that texture to be.(to be continued...)
Adding test elements
Cube droppers; gel and gel droppers:
Once you created your first room it's time to add test elements. Let's start with a cube dropper and a button. For the cube dropper we use an instance: instancesgameplaycube_dropper_normal.vmf
As you can see the model clips (overlaps) with the wall. What's harder to see is that the instance either sticks out of the ceiling a bit or it is somewhat inside the ceiling by default. This doesn't look good so I suggest you now set your grid to 8 and drag it down one block, after that it's at the proper height. Because the model clips with the wall it's a good idea to move it.
To do this you have two options: move it to the center of the room or create a 256x256x32 brush around the box dropper:
Personally I prefer the 256x256 option because it is less room wasted! It is important to know that this cube dropper can only used once. This is because a lot of things in the instance have the @ prefix. This triggers all relays with the same name. also outside the instance itself. You can either use cube_dropper_multiple_normal.vmf or open cube_dropper_normal.vmf; remove the @'s and save it under a different name in your own instance folder. For example: All my custom instances are in maps/instances/Lp/ this way it's very easy to find your own instances and share them with others.
95% of the time you want a button to respawn a cube. This often prevents people from getting stuck in your level so now it's time to add a button. Go to hammer and create a prop_button. Place it near a wall: a button against the wall is often looking better then a button in the middle of the room. If you want you can create a 64x32x4 brush as a base. Use the [ and ] buttons to get to a grid size of 4 to get the proper height and then switch back to 32 again. It's just a small detail that makes your map look better. Use a floor texture for the top face and add plastic/plasticwall004 to the sides. Now press [Ctrl]+[T] to make it a func_detail. This is something that will improve performance. I'll go into that later. Then grab the cube dropper and place it. For the height you once again should temporarily set your grid size to 4 you can also use this grid size to place the button nicely at the center of the platform.
Once the button is properly placed double click it or select it and press Alt+Enter. Set the "Delay Before Reset" property to 3 and "prevent fast recent" to Yes. This is very important: if people press the button too fast the cubes can get stuck thereby breaking your puzzle. So make sure you do this.
Now it is time to activate the cubedropper. To do this select the cube dropper first and give it a name. "cube_dropper" for example. Then select the button and go to the outputs tab. Click add and add the folowing output:
Usually when you added the name cube_dropper you can press the arrow up and down keys to see the inputs you can give to the instance. Congratulations; you now have a working cube dropper!
Once you have the gel dropper it is a good idea to add indicator lights. They are the blue/orange dots that help people see what each button does. To do this you must select the apply overlay tool:
once you selected that tool browse for "indicator" and you will find the signage/indicator_lights/indicator_lights_floor texture. Select it and click somewhere on the surface where you want that texture to be.
(to be continued...)
Quote from Lpfreaky90 on March 19, 2012, 11:48 pmreserved for further use
reserved for further use
Quote from Lpfreaky90 on March 19, 2012, 11:48 pmreserved for further use
reserved for further use
Quote from Lpfreaky90 on March 19, 2012, 11:48 pmreserved for further use
Feel free to post now
reserved for further use
Feel free to post now

Quote from BenVlodgi on March 20, 2012, 12:02 amLooks good, bassically how I do it... I know where you got using the bussley texture from
I Figure it would help if I post my checklist for clean maps
Uses instance elevators
Has an elevator video
Has a light-up sign room
All walls have aligned textures
Lighting
All rooms are lit by real light sources
global_ents should always be in a map, used for fog
Should never be so bright that you cant see the textures (blinding)
Puzzles is well laid out, the exit/goal should be obvious from the beginning
Observation rooms should be in every chamber
lasers and excursion funnels, should emit light, which has to be done manually
Nothing should be hidden
Things that cause death should be made clear.
Include security cameras, but not too many
Lighting should point out key parts of the test ie. portalable surfaces
The exit elevator should usually be covered by a door
There should always be indicator lights
Indicator lights that go to doors should always have checkboxes
Anything that uses timers, need to have timer panels
The map should make sense
Looks good, bassically how I do it... I know where you got using the bussley texture from
I Figure it would help if I post my checklist for clean maps
Uses instance elevators
Has an elevator video
Has a light-up sign room
All walls have aligned textures
Lighting
All rooms are lit by real light sources
global_ents should always be in a map, used for fog
Should never be so bright that you cant see the textures (blinding)
Puzzles is well laid out, the exit/goal should be obvious from the beginning
Observation rooms should be in every chamber
lasers and excursion funnels, should emit light, which has to be done manually
Nothing should be hidden
Things that cause death should be made clear.
Include security cameras, but not too many
Lighting should point out key parts of the test ie. portalable surfaces
The exit elevator should usually be covered by a door
There should always be indicator lights
Indicator lights that go to doors should always have checkboxes
Anything that uses timers, need to have timer panels
The map should make sense
Quote from spongylover123 on March 20, 2012, 12:08 amActually, I recommend using the trasition and global_ents instances in your map first.
I don't think you should make small 128x128x32 blocks for the whole map.it's knid of a hassle especially for large maps. (but your choice)
I also recommend adding hints to your maps.
Load your portal file and add hints in the blue.
It optimizes your map and good for low end computers.
(dont do it like valve does it in some of their maps, god the horror)never use lights so bright, that you can only see white on a surface, you need to make it darker.
P.S observation rooms should not be in every chamber. Some Valve maps dont even have observation rooms.
Actually, I recommend using the trasition and global_ents instances in your map first.
I don't think you should make small 128x128x32 blocks for the whole map.
it's knid of a hassle especially for large maps. (but your choice)
I also recommend adding hints to your maps.
Load your portal file and add hints in the blue.
It optimizes your map and good for low end computers.
(dont do it like valve does it in some of their maps, god the horror)
never use lights so bright, that you can only see white on a surface, you need to make it darker.
P.S observation rooms should not be in every chamber. Some Valve maps dont even have observation rooms.
Quote from Spam Nugget on March 20, 2012, 5:11 amIn regards to observatino rooms and cameras, the way i do it is to basically try and make it so the non-existant scientists would be able to watch most (if not all) of the area in the chamber, especially the interesting bits of the test. Also, dont put observation rooms in places with low ceilings, the windows should not be at floor level.
In regards to observatino rooms and cameras, the way i do it is to basically try and make it so the non-existant scientists would be able to watch most (if not all) of the area in the chamber, especially the interesting bits of the test. Also, dont put observation rooms in places with low ceilings, the windows should not be at floor level.

I think in terms of boolean variables. Generally, it makes things easier.
Quote from Jimo on March 20, 2012, 3:43 pmThanks for the tips here. The texturing tutorial is great and I'm going to give it a try tonight on my map. I've been struggling with getting my textures looking good.
Thanks for the tips here. The texturing tutorial is great and I'm going to give it a try tonight on my map. I've been struggling with getting my textures looking good.
Quote from Lpfreaky90 on March 20, 2012, 4:11 pmBenVlodgi wrote:Looks good, bassically how I do it... I know where you got using the bussley texture from![]()
I Figure it would help if I post my checklist for clean maps
<<long checklist>>Yes, the bullseye texture was your idea
I used to use another texture for it but the bullseye looks really clean!I mostly agree with your checklist; though I don't think an observation room is required in every room.
spongylover123 wrote:Actually, I recommend using the trasition and global_ents instances in your map first.
I don't think you should make small 128x128x32 blocks for the whole map.it's knid of a hassle especially for large maps. (but your choice)
That seems to be the case at first; but if you group larger pieces together it is actually really easy! Why don't you give it a try and let me know what you think after you finished a map?
The best thing about it that it is really easy to change or to add parts: forgot a white surface? No problem; we got a nice 128x128 part right there
spongylover123 wrote:I also recommend adding hints to your maps.Hint/skips occulders; func_details; areaportals and so forth are very powerful but I just started this guide and hint/skips are not the basics. By using this very blocky method the visleaves also stay relatively simple so that is good too.
spongylover123 wrote:Load your portal file and add hints in the blue.
It optimizes your map and good for low end computers.
(dont do it like valve does it in some of their maps, god the horror)Good optimization requires careful attention to line of sights and usually I prefer to keep visleaves in mind while mapping. And add them myself first before loading up the portal files. (Though I have to admit that I haven't hint/skipped my newest two maps yet
)
spongylover123 wrote:never use lights so bright, that you can only see white on a surface, you need to make it darker.P.S observation rooms should not be in every chamber. Some Valve maps dont even have observation rooms.
I agree; this is the reason why I have a custom light_panel_128_cool_low.vmf
Jimo wrote:Thanks for the tips here. The texturing tutorial is great and I'm going to give it a try tonight on my map. I've been struggling with getting my textures looking good.Glad I could help; I'm planning to add more stuff later on this week, so keep an eye on this thread!

I Figure it would help if I post my checklist for clean maps
<<long checklist>>
Yes, the bullseye texture was your idea
I used to use another texture for it but the bullseye looks really clean!
I mostly agree with your checklist; though I don't think an observation room is required in every room.
I don't think you should make small 128x128x32 blocks for the whole map.
it's knid of a hassle especially for large maps. (but your choice)
That seems to be the case at first; but if you group larger pieces together it is actually really easy! Why don't you give it a try and let me know what you think after you finished a map? The best thing about it that it is really easy to change or to add parts: forgot a white surface? No problem; we got a nice 128x128 part right there
Hint/skips occulders; func_details; areaportals and so forth are very powerful but I just started this guide and hint/skips are not the basics. By using this very blocky method the visleaves also stay relatively simple so that is good too.
It optimizes your map and good for low end computers.
(dont do it like valve does it in some of their maps, god the horror)
Good optimization requires careful attention to line of sights and usually I prefer to keep visleaves in mind while mapping. And add them myself first before loading up the portal files. (Though I have to admit that I haven't hint/skipped my newest two maps yet )
P.S observation rooms should not be in every chamber. Some Valve maps dont even have observation rooms.
I agree; this is the reason why I have a custom light_panel_128_cool_low.vmf

Glad I could help; I'm planning to add more stuff later on this week, so keep an eye on this thread!