User:Dr. Orange/Floor button: Difference between revisions
Dr. Orange (talk | contribs) (Implementation) |
Dr. Orange (talk | contribs) (Added pictures) |
||
Line 4: | Line 4: | ||
== Creation == | == Creation == | ||
=== Step 1 === | === Step 1 === | ||
[[File:Floor button base.png|200px|thumb|right|The base brush]] | |||
Create a <code>128w*128l*8h</code> [[brush]] and tie it to a <code>[[func_detail]]</code>. Texture the sides of the brush with <code>signage/hazard_orange_03b</code>, texture the top with <code>concrete/concrete_modular_floor001a</code>, and texture the bottom with <code>[[Tool_textures#nodraw|tools/toolsnodraw]]</code>. | Create a <code>128w*128l*8h</code> [[brush]] and tie it to a <code>[[func_detail]]</code>. Texture the sides of the brush with <code>signage/hazard_orange_03b</code>, texture the top with <code>concrete/concrete_modular_floor001a</code>, and texture the bottom with <code>[[Tool_textures#nodraw|tools/toolsnodraw]]</code>. | ||
{{clr}} | |||
=== Step 2 === | === Step 2 === | ||
[[File:Floor button overlays.png|200px|thumb|right|Overlays]] | |||
Place four [[Hammer Overlay Tool|overlays]] with the texture <code>signage/overlay_button_accent</code> on top of the brush. Position them in the corners and rotate them so they look like in the picture on the right. | Place four [[Hammer Overlay Tool|overlays]] with the texture <code>signage/overlay_button_accent</code> on top of the brush. Position them in the corners and rotate them so they look like in the picture on the right. | ||
{{clr}} | |||
=== Step 3 === | === Step 3 === | ||
[[File:Floor button prop base.png|200px|thumb|right|Button base prop]] | |||
Create a <code>[[prop_static]]</code> entity and set its ''World Model'' to <code>models/props/button_base_reference.mdl</code>. Position it in the middle on top of the base brush. Rotate it so that the sign with a box and an arrow on the rim of the button faces the way the player will enter the room. | Create a <code>[[prop_static]]</code> entity and set its ''World Model'' to <code>models/props/button_base_reference.mdl</code>. Position it in the middle on top of the base brush. Rotate it so that the sign with a box and an arrow on the rim of the button faces the way the player will enter the room. | ||
{{clr}} | |||
=== Step 4 === | === Step 4 === | ||
[[File:Floor button door.png|200px|thumb|right|The door brush]] | |||
Create <code>60w*60l*8h</code> 8-sided [[Primitive#Cylinder|cylinder]] textured with <code>tools/toolsnodraw</code> above the base brush, in the same place as the button base prop. Tie this brush to a <code>[[func_door]]</code> entity and set the following keyvalues: | Create <code>60w*60l*8h</code> 8-sided [[Primitive#Cylinder|cylinder]] textured with <code>tools/toolsnodraw</code> above the base brush, in the same place as the button base prop. Tie this brush to a <code>[[func_door]]</code> entity and set the following keyvalues: | ||
{| class="standard-table sortable" | {| class="standard-table sortable" | ||
Line 31: | Line 35: | ||
Next, go to the flags section and make sure that all flags are unchecked. | Next, go to the flags section and make sure that all flags are unchecked. | ||
{{clr}} | |||
=== Step 5 === | === Step 5 === | ||
[[File:Floor button prop button.png|200px|thumb|right|The button prop]] | |||
[[File:Floor button origins.png|200px|thumb|right|Positioning of the button prop]] | |||
Create a <code>[[prop_dynamic]]</code> entity. Set its ''World Model'' to <code>models/props/button_top_reference.mdl</code>, set its ''Pitch Yaw Roll (Y Z X)'' to the same as the button base prop's and set its ''Parent'' to <code>floor_button_door</code>. Finally, position it in the same place as the base prop, except the origin of the button prop should be 2 units above the origin of the base prop. | Create a <code>[[prop_dynamic]]</code> entity. Set its ''World Model'' to <code>models/props/button_top_reference.mdl</code>, set its ''Pitch Yaw Roll (Y Z X)'' to the same as the button base prop's and set its ''Parent'' to <code>floor_button_door</code>. Finally, position it in the same place as the base prop, except the origin of the button prop should be 2 units above the origin of the base prop. | ||
{{clr}} | |||
=== Step 6 === | === Step 6 === | ||
[[File:Floor button triggers.png|200px|thumb|right|The trigger brushes]] | |||
Create a <code>48w*48l*2h</code> brush textured with <code>[[Tool textures#trigger|tools/toolstrigger]]</code>. Tie this brush to a <code>[[trigger_multiple]]</code> entity and set its ''Name'' to <code>floor_button_trigger_player</code>. Go to its flags and make sure ''Clients'' is the only flag that is checked. | Create a <code>48w*48l*2h</code> brush textured with <code>[[Tool textures#trigger|tools/toolstrigger]]</code>. Tie this brush to a <code>[[trigger_multiple]]</code> entity and set its ''Name'' to <code>floor_button_trigger_player</code>. Go to its flags and make sure ''Clients'' is the only flag that is checked. | ||
Line 68: | Line 75: | ||
| [[Image:Io11.png]] || OnTrigger || floor_button_trigger_player || Disable || || 0.00 || No | | [[Image:Io11.png]] || OnTrigger || floor_button_trigger_player || Disable || || 0.00 || No | ||
|} | |} | ||
{{clr}} | |||
=== Step 7 === | === Step 7 === | ||
[[File:Floor button ambients.png|200px|thumb|right|The <code>ambient_generic</code> entities]] | |||
Create two <code>[[ambient_generic]]</code> entities near the button. Set the following keyvalues on the first one: | Create two <code>[[ambient_generic]]</code> entities near the button. Set the following keyvalues on the first one: | ||
{| class="standard-table sortable" | {| class="standard-table sortable" | ||
Line 103: | Line 111: | ||
| [[Image:Io11.png]] || OnOpen || button_down || PlaySound || || 0.00 || No | | [[Image:Io11.png]] || OnOpen || button_down || PlaySound || || 0.00 || No | ||
|} | |} | ||
{{clr}} | |||
=== Step 8 === | === Step 8 === | ||
[[File:Floor button light.png|200px|thumb|right|The <code>light</code> entity]] | |||
Create a <code>[[light]]</code> entity in the middle of the base prop, 8 units above the base brush. Set the following keyvalues on it: | Create a <code>[[light]]</code> entity in the middle of the base prop, 8 units above the base brush. Set the following keyvalues on it: | ||
{| class="standard-table sortable" | {| class="standard-table sortable" | ||
Line 118: | Line 127: | ||
The button is now finished and ready to be implemented in a map. | The button is now finished and ready to be implemented in a map. | ||
{{clr}} | |||
== Implementation == | == Implementation == | ||
[[File:Floor button ingame.png|300px|thumb|right|The floor button in-game]] | |||
=== Step 1 === | === Step 1 === | ||
Place the button where it should be in the map. | Place the button where it should be in the map. | ||
=== Step 2 === | === Step 2 === | ||
Add the outputs that should fire when the button is activated. The outputs that should be fired when the button is pressed should be the ''OnOpen'' output on <code>floor_button_door</code>, and the ''OnClose'' output when the button is released. | Add the outputs that should fire when the button is activated. The outputs that should be fired when the button is pressed should be the ''OnOpen'' output on <code>floor_button_door</code>, and the ''OnClose'' output when the button is released. | ||
{{clr}} | |||
== See Also == | == See Also == | ||
* [[Button (Portal 2)]] - Portal 2 variant | * [[Button (Portal 2)]] - Portal 2 variant | ||
* [[Creating a switch]] - Pedestal button | * [[Creating a switch]] - Pedestal button | ||
<!-- | <!-- | ||
[[Category:Level Design Tutorials]] | [[Category:Level Design Tutorials]] | ||
[[Category:Portal]] | [[Category:Portal]] | ||
--> | --> |
Latest revision as of 08:05, 13 July 2018
This tutorial will show step-by-step how to create the floor button, a test element commonly seen throughout the Portal test chambers. The floor button is activated by a weighted storage cube being placed on it, or when a player stands on it, and it can be used to trigger other test elements such as doors, platforms and elevators.
Creation
Step 1
Create a 128w*128l*8h
brush and tie it to a func_detail
. Texture the sides of the brush with signage/hazard_orange_03b
, texture the top with concrete/concrete_modular_floor001a
, and texture the bottom with tools/toolsnodraw
.
Step 2
Place four overlays with the texture signage/overlay_button_accent
on top of the brush. Position them in the corners and rotate them so they look like in the picture on the right.
Step 3
Create a prop_static
entity and set its World Model to models/props/button_base_reference.mdl
. Position it in the middle on top of the base brush. Rotate it so that the sign with a box and an arrow on the rim of the button faces the way the player will enter the room.
Step 4
Create 60w*60l*8h
8-sided cylinder textured with tools/toolsnodraw
above the base brush, in the same place as the button base prop. Tie this brush to a func_door
entity and set the following keyvalues:
Property Name | Value |
---|---|
Name | floor_button_door |
Speed | 25 |
Delay Before Reset | -1 |
Move Direction | 90 0 0 |
Next, go to the flags section and make sure that all flags are unchecked.
Step 5
Create a prop_dynamic
entity. Set its World Model to models/props/button_top_reference.mdl
, set its Pitch Yaw Roll (Y Z X) to the same as the button base prop's and set its Parent to floor_button_door
. Finally, position it in the same place as the base prop, except the origin of the button prop should be 2 units above the origin of the base prop.
Step 6
Create a 48w*48l*2h
brush textured with tools/toolstrigger
. Tie this brush to a trigger_multiple
entity and set its Name to floor_button_trigger_player
. Go to its flags and make sure Clients is the only flag that is checked.
Next create a 8w*8l*2h
8-sided cylinder brush, also textured with tools/toolstrigger
in the same place as the floor_button_trigger_player
brush and tie it to a trigger_multiple
entity. Set its Name to floor_button_trigger_box
and make sure only the Physics Objects flag is checked. Next, set its Filter Name to filter_boxes
. If you have created a box dropper in your level, you should already have this entity, but if you don't, create a new filter_activator_name
entity with the Name filter_boxes
and set its filter to the name of your weighted storage cube.
Now add the following outputs to floor_button_trigger_player
:
Next, add the following outputs to floor_button_trigger_box
:
Step 7
Create two ambient_generic
entities near the button. Set the following keyvalues on the first one:
Property Name | Value |
---|---|
Name | button_down |
Sound Name | Portal.button_down |
SourceEntityName | floor_button_door |
Set the following keyvalues on the second ambient_generic
:
Property Name | Value |
---|---|
Name | button_up |
Sound Name | Portal.button_up |
SourceEntityName | floor_button_door |
Next, add the following outputs to floor_button_door
:
My Output | Target Entity | Target Input | Parameter | Delay | Only Once | |
---|---|---|---|---|---|---|
![]() |
OnClose | button_up | PlaySound | 0.00 | No | |
![]() |
OnOpen | button_down | PlaySound | 0.00 | No |
Step 8
Create a light
entity in the middle of the base prop, 8 units above the base brush. Set the following keyvalues on it:
Property Name | Value |
---|---|
Brightness | 251 159 57 30 |
BrightnessHDR | 251 159 57 20 |
The button is now finished and ready to be implemented in a map.
Implementation
Step 1
Place the button where it should be in the map.
Step 2
Add the outputs that should fire when the button is activated. The outputs that should be fired when the button is pressed should be the OnOpen output on floor_button_door
, and the OnClose output when the button is released.
See Also
- Button (Portal 2) - Portal 2 variant
- Creating a switch - Pedestal button