User:Dr. Orange/Switch: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(Switch tutorial)
 
(Finished, added images.)
 
Line 4: Line 4:


=== Step 1 ===
=== Step 1 ===
[[File:Switch base.png|200px|thumb|right|The base brush]]
Create a <code>32w*64l*8h</code> brush. Texture the sides of the brush with <code>signage/hazard_orange_03b</code>, and texture the top of the brush with <code>concrete/concrete_modular_floor001a</code>.
Create a <code>32w*64l*8h</code> brush. Texture the sides of the brush with <code>signage/hazard_orange_03b</code>, and texture the top of the brush with <code>concrete/concrete_modular_floor001a</code>.
{{clr}}


=== Step 2 ===
=== Step 2 ===
[[File:Switch button.png|200px|thumb|right|The switch model]]
Create a <code>[[prop_dynamic]]</code> entity and set its ''World Model'' to <code>models/props/switch001.mdl</code>, and set its ''Name'' to <code>switch1</code>.
Create a <code>[[prop_dynamic]]</code> entity and set its ''World Model'' to <code>models/props/switch001.mdl</code>, and set its ''Name'' to <code>switch1</code>.
{{clr}}


=== Step 3 ===
=== Step 3 ===
[[File:Switch sounds.png|200px|thumb|right|The <code>ambient_generic</code> entities]]
Create a <code>[[ambient_generic]]</code> and set its ''Name'' to <code>button1_down</code>, its ''Sound Name'' to <code>Portal.button_down</code>, and its ''Source Entity Name'' to <code>switch1</code>. Create another <code>ambient_generic</code> and set its ''Name'' to <code>button1_up</code>, its ''Sound Name'' to <code>Portal.button_up</code>, and its ''Source Entity Name'' to <code>switch1</code>.
Create a <code>[[ambient_generic]]</code> and set its ''Name'' to <code>button1_down</code>, its ''Sound Name'' to <code>Portal.button_down</code>, and its ''Source Entity Name'' to <code>switch1</code>. Create another <code>ambient_generic</code> and set its ''Name'' to <code>button1_up</code>, its ''Sound Name'' to <code>Portal.button_up</code>, and its ''Source Entity Name'' to <code>switch1</code>.
{{clr}}


=== Step 4 ===
=== Step 4 ===
[[File:Switch ticktock.png|200px|thumb|right|The timer setup]]
Create a <code>[[logic_timer]]</code> entity. Set its ''Name'' to <code>timer_ticktock1</code>, set ''Start Disabled'' to <code>Yes</code> and set its ''Refire Interval'' to <code>1</code>. Next, create an <code>ambient_generic</code> entity and set its ''Name'' to <code>sound_ticktock1</code>, set its ''Sound Name'' to <code>Portal.room1_TickTock</code>, set its ''Max Audible Distance'' to <code>441</code> and set it ''Source Entity Name'' to <code>switch1</code>. Now add the following output to <code>timer_ticktock1</code>:
Create a <code>[[logic_timer]]</code> entity. Set its ''Name'' to <code>timer_ticktock1</code>, set ''Start Disabled'' to <code>Yes</code> and set its ''Refire Interval'' to <code>1</code>. Next, create an <code>ambient_generic</code> entity and set its ''Name'' to <code>sound_ticktock1</code>, set its ''Sound Name'' to <code>Portal.room1_TickTock</code>, set its ''Max Audible Distance'' to <code>441</code> and set it ''Source Entity Name'' to <code>switch1</code>. Now add the following output to <code>timer_ticktock1</code>:
{| {{OutputsTable}}
{| {{OutputsTable}}
| [[Image:Io11.png]] || OnTimer || sound_ticktock1 || PlaySound || &nbsp; || 0.00 || No
| [[Image:Io11.png]] || OnTimer || sound_ticktock1 || PlaySound || &nbsp; || 0.00 || No
|}
|}
{{clr}}


=== Step 5 ===
=== Step 5 ===
[[File:Switch door.png|200px|thumb|right|The <code>func_door_rotating</code> brush]]
Create a <code>32w*32l*32h</code> brush 32 units above the bottom of the switch model. Texture it with <code>tools/toolsplayerclip</code> and tie it to a <code>[[func_door_rotating]]</code> entity. Set its ''Speed'' to <code>500</code>, its ''Distance'' to <code>0</code> and its ''Delay before reset'' to how long it should stay pressed for, in seconds. Set it to <code>-1</code> to make it stay pressed forever after being activated. Next, check the ''Use Opens'' and ''Door Silent'' flags. Next, add the following outputs to the door:
Create a <code>32w*32l*32h</code> brush 32 units above the bottom of the switch model. Texture it with <code>tools/toolsplayerclip</code> and tie it to a <code>[[func_door_rotating]]</code> entity. Set its ''Speed'' to <code>500</code>, its ''Distance'' to <code>0</code> and its ''Delay before reset'' to how long it should stay pressed for, in seconds. Set it to <code>-1</code> to make it stay pressed forever after being activated. Next, check the ''Use Opens'' and ''Door Silent'' flags. Next, add the following outputs to the door:
{| {{OutputsTable}}
{| {{OutputsTable}}
Line 33: Line 42:
| [[Image:Io11.png]] || OnFullyClosed || timer_ticktock1 || Disable || &nbsp; || 0.00 || No
| [[Image:Io11.png]] || OnFullyClosed || timer_ticktock1 || Disable || &nbsp; || 0.00 || No
|}
|}
The switch is now finished and ready to be implemented in a map.
{{clr}}


== Implementation ==
== Implementation ==
[[File:Switch ingame.jpg|300px|thumb|right|The switch in-game]]
=== Step 1 ===
Place the switch where it should be in the map. Rotate it if necessary.
=== Step 2 ===
Add the outputs that should fire when the switch is activated. The outputs that should fire when the switch is pressed should be the ''OnFullyOpen'' output on the <code>func_door_rotating</code> entity, and the ''OnFullyClosed'' output when the button is reset after its timer has run out.

Latest revision as of 12:50, 7 August 2018

This tutorial will show how to create the switch seen throughout the later test chambers of Portal. The switch is activated by a player using it, and can either be permanently pressed, or stay pressed for a set amount of time.

Creation

Step 1

The base brush

Create a 32w*64l*8h brush. Texture the sides of the brush with signage/hazard_orange_03b, and texture the top of the brush with concrete/concrete_modular_floor001a.

Step 2

The switch model

Create a prop_dynamic entity and set its World Model to models/props/switch001.mdl, and set its Name to switch1.

Step 3

The ambient_generic entities

Create a ambient_generic and set its Name to button1_down, its Sound Name to Portal.button_down, and its Source Entity Name to switch1. Create another ambient_generic and set its Name to button1_up, its Sound Name to Portal.button_up, and its Source Entity Name to switch1.

Step 4

The timer setup

Create a logic_timer entity. Set its Name to timer_ticktock1, set Start Disabled to Yes and set its Refire Interval to 1. Next, create an ambient_generic entity and set its Name to sound_ticktock1, set its Sound Name to Portal.room1_TickTock, set its Max Audible Distance to 441 and set it Source Entity Name to switch1. Now add the following output to timer_ticktock1:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTimer sound_ticktock1 PlaySound   0.00 No

Step 5

The func_door_rotating brush

Create a 32w*32l*32h brush 32 units above the bottom of the switch model. Texture it with tools/toolsplayerclip and tie it to a func_door_rotating entity. Set its Speed to 500, its Distance to 0 and its Delay before reset to how long it should stay pressed for, in seconds. Set it to -1 to make it stay pressed forever after being activated. Next, check the Use Opens and Door Silent flags. Next, add the following outputs to the door:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnOpen switch1 SetAnimation down 0.00 No
Io11.png OnFullyOpen button1_down PlaySound   0.00 No
Io11.png OnFullyOpen timer_ticktock1 Enable   0.00 No
Io11.png OnClose switch1 SetAnimation up 0.00 No
Io11.png OnFullyClosed button1_up PlaySound   0.00 No
Io11.png OnFullyClosed timer_ticktock1 Disable   0.00 No


The switch is now finished and ready to be implemented in a map.

Implementation

The switch in-game

Step 1

Place the switch where it should be in the map. Rotate it if necessary.

Step 2

Add the outputs that should fire when the switch is activated. The outputs that should fire when the switch is pressed should be the OnFullyOpen output on the func_door_rotating entity, and the OnFullyClosed output when the button is reset after its timer has run out.