Creating an incinerator: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
mNo edit summary
No edit summary
Line 1: Line 1:
{{Back|Portal Level Creation}}
{{Back|Portal Level Creation}}
{{Cleanup}}
{{Cleanup}}
{{Warning|This tutorial is incomplete!}}
{{Warning|This tutorial is incomplete/possibly inaccurate! Someone experienced with Portal mapping is required to check for errors.}}


== Introduction ==
== Introduction ==
In this tutorial you will learn how to make an Aperture Science Emergency Intelligence Incinerator which will open a door when a something is put inside.
In this tutorial you will learn how to make an Aperture Science Emergency Intelligence Incinerator that will open when a certian box is placed into it, and open when that box is placed on a 1500-Megawatt Aperture Science Heavy-Duty Supercolliding Superbutton.


== Instructions ==
== Instructions ==
=== Step 1 - The Incinerator ===
=== Step 1 - The Box ===
<ol>
<ol>
<li>Create a <code>[[prop_dynamic]]</code> with the following properties:  
<li>Create a <code>[[prop_physics]]</code> with the following properties:
::{| class=standard-table
!  Property Name || Value
|-
| Name || victim_box
|-
| World Model || <code>models/props/metal_box.mdl</code>
|-
|}</li>
</ol>
 
=== Step 2 - The Incinerator ===
<ol start="2">
<li>Create a <code>[[prop_dynamic]]</code> with the following properties:
::{| class=standard-table
::{| class=standard-table
!  Property Name || Value
!  Property Name || Value
Line 17: Line 30:
| World Model || <code>models/props_bts/glados_aperturedoor.mdl</code>
| World Model || <code>models/props_bts/glados_aperturedoor.mdl</code>
|-
|-
|}</li>
|}
Give it the following outputs:
::{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[Image:Io11.png]] || OnUser1 || incinerator || SetAnimation || open || 0.00 || No
|-
| [[Image:Io11.png]] || OnUser1 || incinerator || SetAnimation || close || 4.00 || No
|}
<li>Create a room under it with the walls textured with "<code>metal/metalwall048c_gradient</code>" and the floors textured with "<code>lights/light_orange001</code>".  
<li>Create a room under it with the walls textured with "<code>metal/metalwall048c_gradient</code>" and the floors textured with "<code>lights/light_orange001</code>".  
<li>Create a 2 unit tall <code>[[trigger_once]]</code> covering the bottom of the room with the following properties:
<li>Create a 2 unit tall <code>[[trigger_once]]</code> covering the bottom of the room with the following properties:
Line 25: Line 46:
| Name || trigger_door1
| Name || trigger_door1
|-
|-
| Filter Name || (name of box)
| Filter Name || victom_box
|-
|-
|}</li>
|}</li>
<li>Surround the <code>prop_dynamic</code> with a invisible brush- <code>models/props_bts/glados_aperturedoor.mdl</code> seems to lack a collision model!</li>
<!--<li>Surround the <code>prop_dynamic</code> with a invisible brush- <code>models/props_bts/glados_aperturedoor.mdl</code> seems to lack a collision model!</li>-->
</ol>
</ol>


=== Step 2 - The Door ===
=== Step 3 - The Door ===
<ol start="5">
<ol start="5"><li>Refer to [[Creating_a_button_and_door#The_door_setup]] for door creation.</li></ol>
<li>Create a [[prop_static]] in your door way. The ''World Model'' should be set to "<code>models/props/door_01_frame_reference.mdl</code>" or "<code>models/props/door_01_frame_wide_reference.mdl</code>" (which ever one floats your boat).</li>
=== Step 5 -  Button Triggers ===
</ol>
<!--Copied straight from http://developer.valvesoftware.com/wiki/Creating_a_button_and_door#The_button and modified to fit tutorial-->
 
<ol start="7">
=== the doors ===
[[Image:Buttonanddoor4.jpg|right|thumb|The larger trigger_multiple.]]
  Create a [[prop_dynamic]] with the following settings:
<li>Create a <code>48Wx48Lx1H</code> <code>[[trigger_multiple]]</code> with the following properties:
::{| class=standard-table
!  Property Name || Value
|-
| Name || button_trigger_player
|}
Place it right on top of the button_top_model.</li>
[[Image:Buttonanddoor5.jpg|right|thumb|The smaller trigger_multiple.]]
<li>Create a <code>[[filter_activator_name]]</code> nearby your button with the following properties:
::{| class=standard-table
! Property Name || Value
|-
| Name || button_filter_boxes
|-
| Filter Name || victim_box
|}</li>
<li>Next create a <code>7Wx7Lx1H</code> cylinder <code>trigger_multiple</code> with 8 sides and the following properties:
::{| class=standard-table
::{| class=standard-table
!  Property Name || Value
!  Property Name || Value
|-
|-
| World Model || models/props/door_01_lftdoor_reference.mdl
| Name || button_trigger_box
|-
|-
| Name || door_l(that's an L, not a 1)
| Filter Name || button_filter_boxes
|}
|}
put it in the left side of the door frame.
Change the flags so only "Physics Objects" is set, and place it directly on top and in the center of the <code>button_top_model</code></li>


2. Create a <code>12Wx56Lx104H</code> block brush with texture [[nodraw]] centered and inside the door model. Tie it to a [[func_door]] entity with the following settings:
<li>Create an <code>[[ambient_generic]]</code> with the following properties:
::{| class=standard-table
::{| class=standard-table
!  Property Name || Value
!  Property Name || Value
|-
|-
| Name || door_1(this time it's a 1, not an L)
| Name || button_down
|-
|-
| Speed || 250
| Sound Name || Portal.button_down
|-
|-
| Stop Sound || Doors.FullClose8
| Source Entity Name || button_top_model
|}</li>
<li>Create another <code>[[ambient_generic]]</code> with the following properties:
::{| class=standard-table
!  Property Name || Value
|-
|-
| Delay before Reset || -1
| Name || button_up
|-
|-
| Lip || 12
| Sound Name || Portal.button_up
|-
|-
| Move Direction || (This will be different for which way your door is facing)
| Source Entity Name || button_top_model
|}
|}</li>
Also make sure that you un-check ''Touch opens'' under ''Flags''.
<li>Now go back and select the cylinder <code>func_door</code> brush under the button, "button_top_door" and setup the Outputs as below:
 
The best way to ensure you have the correct Move Direction is to first mark the direction on the circular indicator, then round to the nearest 90 degrees (so long as your doors are intended to be square with the Hammer coordinate system).
{{note|You can also put a blocking damage if you don't want the player to get stuck inside it. Also, you can turn on Forced Closed for it to close even if the player tried to jam it open with a camera or cube.}}
[[Image:Buttonanddoor2.jpg|right|thumb|Final door.]]
3. Repeat steps 1-3 but change the following:
For the <code>prop_dynamic</code>:
::{| class=standard-table
::{| class=standard-table
! Property Name || Value
!   || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[Image:Io11.png]] || OnClose || door_left || Close || <none> || 0.00 || No
|-
| [[Image:Io11.png]] || OnClose || door_right || Close || <none> || 0.00 || No
|-
| [[Image:Io11.png]] || OnClose || button_up || PlaySound || <none> || 0.00 || No
|-
|-
| World Model || models/props/door_01_rtdoor_reference.mdl
| [[Image:Io11.png]] || OnOpen || door_left || Open || <none> || 0.00 || No
|-
|-
| Name || door_r
| [[Image:Io11.png]] || OnOpen || door_right || Open || <none> || 0.00 || No
|}
And for the func_door:
::{| class=standard-table
!  Property Name || Value
|-
|-
| Name || door_2
| [[Image:Io11.png]] || OnOpen || button_down || PlaySound || <none> || 0.00 || No
|}
|}


4. Set the parent of <code>door_l</code> (the <code>prop_dynamic</code>) to "door_1". Also set the parent of <code>door_r</code> to "door_2".
7. Select the larger <code>trigger_multiple</code>, "button_trigger_player" and setup the Output as below:
 
==now you must choose between a trigger or a switch to open your incinerator.==
 
=== the trigger ===
create a brush with the "<code>tools/toolstrigger</code>" texture. Place it where your player will have to go to turn on the incinerator.  Tie it to a [[trigger_multiple]] entity with the following settings:
::{| class=standard-table
::{| class=standard-table
! Property Name || Value
!   || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[Image:Io11.png]] || OnEndTouchAll || button_trigger_box || Enable || <none> || 0.00 || No
|-
| [[Image:Io11.png]] || OnEndTouchAll || button_top_door || Close || <none> || 0.00 || No
|-
|-
| Name || trigger_incinerator
| [[Image:Io11.png]] || OnStartTouch || button_trigger_box || Disable || <none> || 0.00 || No
|-
|-
| Delay Before Reset || anywhere inbetween 5-10 seconds
| [[Image:Io11.png]] || OnStartTouch || button_top_door || Open || <none> || 0.00 || No
|}
|}
 
8. Select the smaller, cylinder <code>trigger_multiple</code>, "button_trigger_box" and setup the Output as below:
and the following outputs:
::{| class=standard-table
::{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || OnStartTouch || incinerator || SetAnimation || Open || 0.00 || No
| [[Image:Io11.png]] || OnEndTouchAll || button_trigger_player || Enable || <none> || 0.00 || No
|-
| [[Image:Io11.png]] || OnEndTouchAll || button_top_door || Close || <none> || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnStartTouch || incinerator || SetAnimation || Close || 4.00 || No
| [[Image:Io11.png]] || OnStartTouch || button_trigger_player || Disable || <none> || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnStartTouch || button_top_door || Open || <none> || 0.00 || No
|}
|}
 
[[Image:Buttonanddoor6.jpg|right|thumb|The final product.]]
=== '''OPTIONAL''' the switch ===
9. Finally, create a [[light]] entity underneath the top of the button but still inside the base. Give it the following properties:
create a <code>prop_dynamic</code> with the following settings.
::{| class=standard-table
::{| class=standard-table
!   Property Name || Value
! Property Name || Value
|-
|-
| Name || button_incinerator.mdl
| Brightness || 251 159 57 30
|-
|-
| World Model || models/props/switch001.mdl
| BrightnessHDR || 251 159 57 20
|}
|}
{{Note|The light should be '''2''' Units above the original base ground that the main base Button model is on, in order to cast correctly.}}
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.
{{clr}}
== Temp ==
(This section is being used to store information during the current edit. Do not modify)
=== Models ===
[[Image:Buttonanddoor3.jpg|right|thumb|How to align the button models.]]
1. Create a <code>prop_static</code> with a ''World Model'' of "<code>models/props/button_base_reference.mdl</code>".


Now create a 16Lx16Wx12H brush textured with either the "<code>tools/toolsinvisible</code>" texture or the "<code>tools/toolsnodraw</code>" and place it right on top of where the player will have to press. Tie it to a <code>func_button</code> entity with the following settings:
2. Create a <code>prop_dynamic</code> aligned on top of the <code>prop_static</code> with the following settings:
::{| class=standard-table
::{| class=standard-table
!   Property Name || Value
! Property Name || Value
|-
|-
| Name || button_incinerator
| World Model || models/props/button_top_reference.mdl
|-
| Name || button_top_model
|}
|}


and make it have the following outputs:
=== Movement ===
1. Next create a <code>58Wx58Lx9H</code> cylinder brush with 8 sides and textured with [[Tool textures|nodraw]]. Move this brush right underneath your <code>prop_dynamic</code>. Tie the cylinder to a [[func_door]] with the following settings:
::{| class=standard-table
::{| class=standard-table
!   || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
! Property Name || Value
|-
| Name || button_top_door
|-
| Speed || 25
|-
|-
| [[Image:Io11.png]] || OnPressed || incinerator || SetAnimation || open || 0.00 || No
| Delay before Reset || -1
|-
|-
| [[Image:Io11.png]] || onPressed || incinerator || SetAnimation || close || 4.00 || No
| Move Direction || 90 0 0 (or Down)
|}
|}
still not done... i'll edit it again when i have time.
Also make sure nothing is checked under ''Flags''.
 
2. Set the Parent of <code>button_top_model</code> to be "button_top_door".


== See also ==
== See also ==

Revision as of 21:33, 30 December 2009

Portal Level Creation
Broom icon.png
This article or section needs to be cleaned up to conform to a higher standard of quality.
For help, see the VDC Editing Help and Wikipedia cleanup process. Also, remember to check for any notes left by the tagger at this article's talk page.
Warning.pngWarning:This tutorial is incomplete/possibly inaccurate! Someone experienced with Portal mapping is required to check for errors.

Introduction

In this tutorial you will learn how to make an Aperture Science Emergency Intelligence Incinerator that will open when a certian box is placed into it, and open when that box is placed on a 1500-Megawatt Aperture Science Heavy-Duty Supercolliding Superbutton.

Instructions

Step 1 - The Box

  1. Create a prop_physics with the following properties:
    Property Name Value
    Name victim_box
    World Model models/props/metal_box.mdl

Step 2 - The Incinerator

  1. Create a prop_dynamic with the following properties:
    Property Name Value
    Name incinerator
    World Model models/props_bts/glados_aperturedoor.mdl

    Give it the following outputs:

    My Output Target Entity Target Input Parameter Delay Only Once
    Io11.png OnUser1 incinerator SetAnimation open 0.00 No
    Io11.png OnUser1 incinerator SetAnimation close 4.00 No
  2. Create a room under it with the walls textured with "metal/metalwall048c_gradient" and the floors textured with "lights/light_orange001".
  3. Create a 2 unit tall trigger_once covering the bottom of the room with the following properties:
    Property Name Value
    Name trigger_door1
    Filter Name victom_box

Step 3 - The Door

  1. Refer to Creating_a_button_and_door#The_door_setup for door creation.

Step 5 - Button Triggers

    The larger trigger_multiple.
  1. Create a 48Wx48Lx1H trigger_multiple with the following properties:
    Property Name Value
    Name button_trigger_player
    Place it right on top of the button_top_model.
  2. The smaller trigger_multiple.
  3. Create a filter_activator_name nearby your button with the following properties:
    Property Name Value
    Name button_filter_boxes
    Filter Name victim_box
  4. Next create a 7Wx7Lx1H cylinder trigger_multiple with 8 sides and the following properties:
    Property Name Value
    Name button_trigger_box
    Filter Name button_filter_boxes
    Change the flags so only "Physics Objects" is set, and place it directly on top and in the center of the button_top_model
  5. Create an ambient_generic with the following properties:
    Property Name Value
    Name button_down
    Sound Name Portal.button_down
    Source Entity Name button_top_model
  6. Create another ambient_generic with the following properties:
    Property Name Value
    Name button_up
    Sound Name Portal.button_up
    Source Entity Name button_top_model
  7. Now go back and select the cylinder func_door brush under the button, "button_top_door" and setup the Outputs as below:
    My Output Target Entity Target Input Parameter Delay Only Once
    Io11.png OnClose door_left Close <none> 0.00 No
    Io11.png OnClose door_right Close <none> 0.00 No
    Io11.png OnClose button_up PlaySound <none> 0.00 No
    Io11.png OnOpen door_left Open <none> 0.00 No
    Io11.png OnOpen door_right Open <none> 0.00 No
    Io11.png OnOpen button_down PlaySound <none> 0.00 No

    7. Select the larger trigger_multiple, "button_trigger_player" and setup the Output as below:

    My Output Target Entity Target Input Parameter Delay Only Once
    Io11.png OnEndTouchAll button_trigger_box Enable <none> 0.00 No
    Io11.png OnEndTouchAll button_top_door Close <none> 0.00 No
    Io11.png OnStartTouch button_trigger_box Disable <none> 0.00 No
    Io11.png OnStartTouch button_top_door Open <none> 0.00 No

    8. Select the smaller, cylinder trigger_multiple, "button_trigger_box" and setup the Output as below:

    My Output Target Entity Target Input Parameter Delay Only Once
    Io11.png OnEndTouchAll button_trigger_player Enable <none> 0.00 No
    Io11.png OnEndTouchAll button_top_door Close <none> 0.00 No
    Io11.png OnStartTouch button_trigger_player Disable <none> 0.00 No
    Io11.png OnStartTouch button_top_door Open <none> 0.00 No
    The final product.

    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
    Note.pngNote:The light should be 2 Units above the original base ground that the main base Button model is on, in order to cast correctly.

    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.

    Temp

    (This section is being used to store information during the current edit. Do not modify)

    Models

    How to align the button models.

    1. Create a prop_static with a World Model of "models/props/button_base_reference.mdl".

    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

    Movement

    1. Next create a 58Wx58Lx9H cylinder brush with 8 sides and textured with nodraw. Move this brush right underneath your prop_dynamic. Tie the cylinder to a func_door with the following settings:

    Property Name Value
    Name button_top_door
    Speed 25
    Delay before Reset -1
    Move Direction 90 0 0 (or Down)

    Also make sure nothing is checked under Flags.

    2. Set the Parent of button_top_model to be "button_top_door".

    See also