User:Dr. Orange/Floor button: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(Implementation)
(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 || &nbsp; || 0.00 || No
| [[Image:Io11.png]] || OnTrigger || floor_button_trigger_player || Disable || &nbsp; || 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 || &nbsp; || 0.00 || No
| [[Image:Io11.png]] || OnOpen || button_down || PlaySound || &nbsp; || 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

The base brush

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

Overlays

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

Button base prop

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

The door brush

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

The button prop
Positioning of the button prop

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

The trigger brushes

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:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnEndTouchAll floor_button_door Close   0.00 No
Io11.png OnEndTouchAll floor_button_trigger_box Enable   0.00 No
Io11.png OnTrigger floor_button_door Open   0.00 No
Io11.png OnTrigger floor_button_trigger_box Disable   0.00 No


Next, add the following outputs to floor_button_trigger_box:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnEndTouchAll floor_button_door Close   0.00 No
Io11.png OnEndTouchAll floor_button_trigger_player Enable   0.00 No
Io11.png OnTrigger floor_button_door Open   0.00 No
Io11.png OnTrigger floor_button_trigger_player Disable   0.00 No

Step 7

The ambient_generic entities

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
Io11.png OnClose button_up PlaySound   0.00 No
Io11.png OnOpen button_down PlaySound   0.00 No

Step 8

The light entity

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

The floor button in-game

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