Creating a button and door
In this tutorial you will learn how to create a 1500-Megawatt Aperture Science Heavy-Duty Supercolliding Superbutton which when stepped on or weighted down with a weighted storage cube will open a specified door.
The door setup
First thing is to make the door which will open on activation of the button.
Create a prop_static in the doorway. The World Model should be set to "
models/props/door_01_frame_reference.mdl" or "
models/props/door_01_frame_wide_reference.mdl" (either one works).
1. Create a prop_dynamic with the following settings:
Property Name Value World Model models/props/door_01_lftdoor_reference.mdl Name door_left_model
Align it to the left, inside of the door frame.
2. Create a
56Lx8Wx104H block brush with texture nodraw centered and inside the door model. Tie it to a func_door entity by selecting the object and using the menu option "Tie to Entity". The func_door entity should have the following settings:
Property Name Value Name door_left Speed 250 Stop Sound Doors.FullClose8 Delay before Reset -1 Lip 12 Move Direction (This will be different for which way your door is facing)
Also make sure that you un-check Touch opens under Flags.
3. Select Move Direction in the Properties Dialog. When you tie a brush to func_door the direction the door is pointing at and the Move Direction are both initialized to
0 0 0. Which means in the 2D top (x/y) view the func_door is pointing at and will move to the right as indicated in the the circular indicator of the Properties dialog. The only number we are concerned with for this door is the Yaw (middle number) which can be changed by dragging the pointer around in the Angle Compass or typing an angle into the combobox to the left of it. Common angles are 0, 90, 180, and 270 which moves the door right, up, left, or down respectively when viewed in the 2D top (x/y) view.
4. Repeat steps 1-3 but change the following:
Property Name Value World Model models/props/door_01_rtdoor_reference.mdl Name door_right_model
And for the func_door:
Property Name Value Name door_right Move Direction (The opposite of the move direction for the left door)
5. Set the parent of
prop_dynamic) to "door_left". Also set the parent of
door_right_model to "door_right".
1. Create a
prop_static with a World Model of "
2. Create a
prop_dynamic aligned on top of the
prop_static with the following settings:
Property Name Value World Model models/props/button_top_reference.mdl Name button_top_model
prop_dynamicwith the bottom of the
prop_staticthen move it up 1 unit to avoid getting stuck down.
Property Name Value Name button_top_door Speed 25 Delay before Reset -1 Move Direction 90 0 0 (or Down)
Also make sure "Passable" is checked under Flags.
2. Set the Parent of
button_top_model to be "button_top_door".
Property Name Value Name button_trigger_player
We will set up the Output later. Also make sure to only have the flag: Clients set.
60Wx60Lx1H8 sided cylinder brush the button will have a more consistent response from all angles.
2. Next create a
7Wx7Lx2H cylinder brush with 8 sides and textured with trigger texture. Put this brush directly on top and in the center of the
button_top_model and tie it to a
trigger_multiple with the following settings:
Property Name Value Name button_trigger_box
And only the following Flags are checked:
- Physics Objects
We will set up the Output later.
3. Create a filter_activator_name nearby your button with the following settings:
Property Name Value Name button_filter_boxes Filter Name (The name your box entity has)
4. Select your
button_trigger_box trigger and set the Filter Name to "button_filter_boxes".
5. Create two ambient_generic entities and give one the following settings:
Property Name Value Name button_down Sound Name Portal.button_down Source Entity Name button_top_model
and the other with
Property Name Value Name button_up Sound Name Portal.button_up Source Entity Name button_top_model
6. Now go back and select the cylinder
func_door brush under the button, "button_top_door" and setup the Outputs as below:
7. Select the larger
trigger_multiple, "button_trigger_player" and setup the Output as below:
8. Select the smaller, cylinder
trigger_multiple, "button_trigger_box" and setup the Output as below:
9. Finally, create a light entity underneath the top of the button but still inside the base. Give it the following properties:
Property Name Value Brightness 251 159 57 30 BrightnessHDR 251 159 57 20
You have now created a button which will open a door by a player standing on the button or a box weighing it down. Only those two things will work on it.
Making a hole in the wall to fit the door
While this step is optional, and your door may be fully functional without it, your map will look especially awkward if you just have a door in the middle of a space, and even more so if you don't have walls around it to block the player before opening the door. This step is simple enough, so it is recommended that you try it out by following the next tutorial on Creating a door frame using the Clipping Tool.
Usable prefab of the door frame: Creating a button and door/DoorFrame.vmf.
This is the most basic button and door setup. You can also have the triggers turn off or on other things in the map, have them trigger a logic_choreographed_scene or just about anything. For the Portal feel you can have them trigger Indicator Lights based on the button up or down status.
If you do decide to use Indicator Lights, then make sure to have the func_door (The Nodraw cylinder) Set Outputs when it closes, and opens. When it opens, set the texture Index to 1, and when it closes, set the texture index to 0, via a env_texturetoggle that controls the lights.
- Example map Example map using this tutorial. VMF included.