Creating an incinerator: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
m (Unicodifying, replaced: [[Image: → [[File: (20))
 
(56 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Back|Portal Level Creation}}
{{back | Portal Level Creation}}
{{Cleanup}}
{{DISPLAYTITLE: Portal - Tutorial - Incinerator}}
{{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 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.
In this tutorial you will learn how to create an Aperture Science Emergency Intelligence Incinerator.


== Instructions ==
== Instructions ==
=== Step 1 - The Box ===
<ol>
<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 ===
===The Incinerator===
<ol start="2">
Create a [[prop_dynamic]] entity
<li>Create a <code>[[prop_dynamic]]</code> with the following properties:
Set the world model to <code>models/props_bts/glados_aperturedoor.mdl</code>
::{| class=standard-table
 
!  Property Name || Value
Change its name to <code> model_incinerator_door </code>
|-
Choose <code>Collisions</code> and choose <code>Not Solid</code>
| Name || incinerator
 
|-
===The Floor===
| World Model || <code>models/props_bts/glados_aperturedoor.mdl</code>
Make a floor, Two brushes are <code>192w*64l*16h</code> and the other 2 are <code>40w*128l*16h</code>
|-
 
[[File:Incinerator_floor.PNG|thumb|right|200px|The floor of the incinerator]] {{clr}}
 
===The Little Room===
[[File:Incinerator_tinyroom.PNG|thumb|right|200px|The Small Room of the incinerator]]
Make a little room, the walls for each side contain 2 brushes.
 
2 walls are <code>152w*16*128h</code> brushes.
 
The top part of the walls have the texture <code>metalwall_bts_006a</code> and
the bottom part has the texture <code>metalwall_bts_006b_gradient</code>.
 
Rotate the faces by 180 degrees. Align the textures with the texture tool with Texture Shift.
 
The floor of the little room is <code>128w*128l*16h</code> and the top face texture is <code>light_orange001</code> {{clr}}
 
===Fire Particles===
[[File:Incinerator_particles.PNG |thumb|right|200px|The Position of the Fire Particle]]
 
Create a [[info_particle_system]] entity
 
Set its name to <code>fire_particles</code>
 
Set the angles to <code>0 270 0</code>
 
Set <code>Particle System Name</code> to <code>fire_incinerator_door</code>
 
Put this particle in the hole of the incinerator doors {{clr}}
 
===Manual Collision===
[[File:Incinerator arch1.PNG |thumb|right|200px|Manual Collision]]
Create a <code>208*208l*16h</code> arch with the <code>invisible</code> texture and
set wall width to "40", Number of sides = 16, Arc = 360, Start Angle = 0
 
Select the brushes and hold 'ctrl + m' choose the X value and type "25"
 
Tie the entire shape to a [[func_detail]]
 
Position the brushes just like this.
====Second Part of Manual Collision====
[[File:Incinerator arch2_3.PNG |thumb|right|150px|Manual Collision]]
[[File:Incinerator arch2.PNG |thumb|right|150px|Manual Collision]]
[[File:Incinerator arch2_2.PNG |thumb|right|150px|Manual Collision]]
Create a <code>144*144l*192h</code> arch with the <code>invisible</code> texture
 
Set Number of sides to 16
 
Set wall width to 16
 
Set Arc to 360
 
Set Start Angle to 0
 
 
Select the clipping tool, from the top right of the shape, make a <code>30 degree cut</code> from right to left.
Then cut off the top side of the shape.
 
Tie the shape to a func_detail
 
Now do your best to fit the shape into the incinerator.
 
{{Note| These brushes are for collision so do your best to fit them out.}} {{clr}}
 
===Fire Damage to Player===
Create a <code>152w*128*l*224h</code> brush with the trigger texture.
 
Tie it to a [[trigger_hurt]] entity.
 
Set <code>Damage</code> and <code>Damage Cap</code> to <code>100</code>
 
Change <code>Damage Type</code> to <code>BURN</code>
 
Set <code>Zero Damage Force</code> to <code>Yes</code>
{{clr}}
===Nudging The Box===
[[File:Incinerator_Trigger_Placement.PNG |thumb|right|200px|Nudging the box]]
Create a <code>128s*128l*8h</code> brush with the trigger texture. Tie it to a [[trigger_multiple]].
 
Set its name to <code>nudge_boxes</code>
 
Set its <code>filter_name</code> to <code>filter_boxes</code>
 
Go to flags and check <code>Physics Objects</code> and uncheck <code>clients</code>.
 
Go to outputs and enter the following:
 
{| {{OutputsTable}}
| [[File:Io11.png]] || OnTrigger || !activator || Wake || || 0.00 || No
|}
|}
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 2 unit tall <code>[[trigger_once]]</code> covering the bottom of the room with the following properties:
::{| class=standard-table
!  Property Name || Value
|-
| Name || trigger_door1
|-
| Filter Name || victom_box
|-
|}</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>


=== Step 3 - The Door ===
 
<ol start="5"><li>Refer to [[Creating_a_button_and_door#The_door_setup]] for door creation.</li></ol>
Copy and paste the trigger_multiple and make it a [[trigger_push]]
=== Step 5 -  Button Triggers ===
Remove the Output from the "Outputs" tab
<!--Copied straight from http://developer.valvesoftware.com/wiki/Creating_a_button_and_door#The_button and modified to fit tutorial-->
 
<ol start="7">
Set its move direction to 24 90 0 and leave everything else as it is.
[[Image:Buttonanddoor4.jpg|right|thumb|The larger trigger_multiple.]]
 
<li>Create a <code>48Wx48Lx1H</code> <code>[[trigger_multiple]]</code> with the following properties:
 
::{| class=standard-table
Put the two triggers in the same spot and press ctrl + m. Choose the X value and type "25".
!  Property Name || Value
 
|-
Position them just like this.
| Name || button_trigger_player
 
|}  
===Door Collision===
Place it right on top of the button_top_model.</li>
Make <code>128s*128l*8h</code> brush with the invisible texture.
[[Image:Buttonanddoor5.jpg|right|thumb|The smaller trigger_multiple.]]
Tie it to a [[func_brush]] entity.
<li>Create a <code>[[filter_activator_name]]</code> nearby your button with the following properties:
 
::{| class=standard-table
Name it <code>incinerator_collision_door</code>
!  Property Name || Value
 
Hold Ctrl + M and change the x value to 25
Position it just like this
[[File:Incinerator_funcbrush.PNG |thumb|left|200px|Door Collision]]
{{clr}}
 
===Sounds===
Make an [[ambient_generic]] entity and name it to <code>sound_incinerator</code>.
 
Set its <code>Sound Name</code> to <code>Portalgun.pedestal_rotate</code>
 
Set its <code>SourceEntityName</code> to <code>model_incinerator_door</code>
 
{{Note| The sounds are only used in the GLaDOS boss fight, so adding/changing the sound is completely up to you.}}
===Making the Incinerator Functional===
 
Create 3 [[logic_relay]] entities
 
Name them <code>relay_incinerator_open</code>, <code>relay_incinerator_close</code>, and <code>relay_euthanization</code>
 
On <code>relay_incinerator_open</code> add the following outputs:
 
{| {{OutputsTable}}
| [[File:Io11.png]] || OnTrigger || fire_particles || Start || || 0.00 || No
|-
|-
| Name || button_filter_boxes
| [[File:Io11.png]] || OnTrigger || incinerator_collision_door || Disable || || 0.00 || No
|-
|-
| Filter Name || victim_box
| [[File:Io11.png]] || OnTrigger || model_incinerator_door || setanimation || open || 0.00 || No
|}</li>
<li>Next create a <code>7Wx7Lx1H</code> cylinder <code>trigger_multiple</code> with 8 sides and the following properties:
::{| class=standard-table
!  Property Name || Value
|-
|-
| Name || button_trigger_box
| [[File:Io11.png]] || OnTrigger || sound_incinerator || playsound ||  || 0.00 || No
|-
| 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 <code>button_top_model</code></li>


<li>Create an <code>[[ambient_generic]]</code> with the following properties:
On <code>relay_incinerator_close</code> add the following outputs:
::{| class=standard-table
 
!  Property Name || Value
{| {{OutputsTable}}
| [[File:Io11.png]] || OnTrigger || fire_particles || stop || || 0.00 || No
|-
|-
| Name || button_down
| [[File:Io11.png]] || OnTrigger || incinerator_collision_door || Enable || || 0.00 || No
|-
|-
| Sound Name || Portal.button_down
| [[File:Io11.png]] || OnTrigger || model_incinerator_door || setanimation || close || 0.00 || No
|-
|-
| Source Entity Name || button_top_model
| [[File:Io11.png]] || OnTrigger || sound_incinerator || playsound || || 0.00 || No
|}</li>
<li>Create another <code>[[ambient_generic]]</code> with the following properties:
::{| class=standard-table
!  Property Name || Value
|-
| Name || button_up
|-
| Sound Name || Portal.button_up
|-
| Source Entity Name || button_top_model
|}</li>
<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:
::{| class=standard-table
!  || 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
|-
| [[Image:Io11.png]] || OnOpen || door_left || Open || <none> || 0.00 || No
|-
| [[Image:Io11.png]] || OnOpen || door_right || Open || <none> || 0.00 || No
|-
| [[Image:Io11.png]] || OnOpen || button_down || PlaySound || <none> || 0.00 || No
|}
|}


7. Select the larger <code>trigger_multiple</code>, "button_trigger_player" and setup the Output as below:
===Killing the Box===
::{| class=standard-table
 
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
Make <code>128s*128l*48h</code> brush with the trigger texture.
|-
Tie it to a trigger_once entity.
| [[Image:Io11.png]] || OnEndTouchAll || button_trigger_box || Enable || <none> || 0.00 || No
 
|-
Name it to <code>trigger_killbox</code>
| [[Image:Io11.png]] || OnEndTouchAll || button_top_door || Close || <none> || 0.00 || No
 
|-
Set its <code>Filter Name</code> to <code>filter_boxes</code>
| [[Image:Io11.png]] || OnStartTouch || button_trigger_box || Disable || <none> || 0.00 || No
|-
| [[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:
::{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[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 || 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.]]
9. Finally, create a [[light]] entity underneath the top of the button but still inside the base. Give it the following properties:
::{| class=standard-table
!  Property Name || Value
|-
| Brightness || 251 159 57 30
|-
| 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.
Go to flags and check <code>physics objects</code> and uncheck <code>Clients</code>
{{clr}}


== Temp ==
Enter the following in outputs:
(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>".


2. Create a <code>prop_dynamic</code> aligned on top of the <code>prop_static</code> with the following settings:
{| {{OutputsTable}}
::{| class=standard-table
| [[File:Io11.png]] || OnStartTouch || !activator || kill || || 0.00 || No
! Property Name || Value
|-
| World Model || models/props/button_top_reference.mdl
|-
|-
| Name || button_top_model
| [[File:Io11.png]] || OnStartTouch || relay_euthanization || Trigger || || 0.00 || No
|}
|}


=== Movement ===
==Implementation==
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:
Have a certain object trigger <code>relay_incinerator_open</code> to open the incinerator
::{| class=standard-table
 
!  Property Name || Value
When that certain object deactivates, trigger <code>relay_incinerator_close</code>.
|-
| 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 <code>button_top_model</code> to be "button_top_door".
If that certain object can't deactivate, make <code>relay_euthanization</code> trigger the <code>relay_incinerator_close</code>.


== See also ==
== See also ==
* [[Portal Level Creation]]
* [[Portal Level Creation]]


[[Category:Level Design Tutorials]]
[[Category:Portal]]
[[Category:Portal]]
[[Category:Level Design]]
[[Category:Tutorials]]

Latest revision as of 00:17, 7 January 2024

Portal Level Creation


Introduction

In this tutorial you will learn how to create an Aperture Science Emergency Intelligence Incinerator.

Instructions

The Incinerator

Create a prop_dynamic entity Set the world model to models/props_bts/glados_aperturedoor.mdl

Change its name to model_incinerator_door Choose Collisions and choose Not Solid

The Floor

Make a floor, Two brushes are 192w*64l*16h and the other 2 are 40w*128l*16h

The floor of the incinerator

The Little Room

The Small Room of the incinerator

Make a little room, the walls for each side contain 2 brushes.

2 walls are 152w*16*128h brushes.

The top part of the walls have the texture metalwall_bts_006a and the bottom part has the texture metalwall_bts_006b_gradient.

Rotate the faces by 180 degrees. Align the textures with the texture tool with Texture Shift.

The floor of the little room is 128w*128l*16h and the top face texture is light_orange001

Fire Particles

The Position of the Fire Particle

Create a info_particle_system entity

Set its name to fire_particles

Set the angles to 0 270 0

Set Particle System Name to fire_incinerator_door

Put this particle in the hole of the incinerator doors

Manual Collision

Manual Collision

Create a 208*208l*16h arch with the invisible texture and set wall width to "40", Number of sides = 16, Arc = 360, Start Angle = 0

Select the brushes and hold 'ctrl + m' choose the X value and type "25"

Tie the entire shape to a func_detail

Position the brushes just like this.

Second Part of Manual Collision

Manual Collision
Manual Collision
Manual Collision

Create a 144*144l*192h arch with the invisible texture

Set Number of sides to 16

Set wall width to 16

Set Arc to 360

Set Start Angle to 0


Select the clipping tool, from the top right of the shape, make a 30 degree cut from right to left. Then cut off the top side of the shape.

Tie the shape to a func_detail

Now do your best to fit the shape into the incinerator.

Note.pngNote: These brushes are for collision so do your best to fit them out.

Fire Damage to Player

Create a 152w*128*l*224h brush with the trigger texture.

Tie it to a trigger_hurt entity.

Set Damage and Damage Cap to 100

Change Damage Type to BURN

Set Zero Damage Force to Yes

Nudging The Box

Nudging the box

Create a 128s*128l*8h brush with the trigger texture. Tie it to a trigger_multiple.

Set its name to nudge_boxes

Set its filter_name to filter_boxes

Go to flags and check Physics Objects and uncheck clients.

Go to outputs and enter the following:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger !activator Wake 0.00 No


Copy and paste the trigger_multiple and make it a trigger_push Remove the Output from the "Outputs" tab

Set its move direction to 24 90 0 and leave everything else as it is.


Put the two triggers in the same spot and press ctrl + m. Choose the X value and type "25".

Position them just like this.

Door Collision

Make 128s*128l*8h brush with the invisible texture. Tie it to a func_brush entity.

Name it incinerator_collision_door

Hold Ctrl + M and change the x value to 25 Position it just like this

Door Collision

Sounds

Make an ambient_generic entity and name it to sound_incinerator.

Set its Sound Name to Portalgun.pedestal_rotate

Set its SourceEntityName to model_incinerator_door

Note.pngNote: The sounds are only used in the GLaDOS boss fight, so adding/changing the sound is completely up to you.

Making the Incinerator Functional

Create 3 logic_relay entities

Name them relay_incinerator_open, relay_incinerator_close, and relay_euthanization

On relay_incinerator_open add the following outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger fire_particles Start 0.00 No
Io11.png OnTrigger incinerator_collision_door Disable 0.00 No
Io11.png OnTrigger model_incinerator_door setanimation open 0.00 No
Io11.png OnTrigger sound_incinerator playsound 0.00 No

On relay_incinerator_close add the following outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger fire_particles stop 0.00 No
Io11.png OnTrigger incinerator_collision_door Enable 0.00 No
Io11.png OnTrigger model_incinerator_door setanimation close 0.00 No
Io11.png OnTrigger sound_incinerator playsound 0.00 No

Killing the Box

Make 128s*128l*48h brush with the trigger texture. Tie it to a trigger_once entity.

Name it to trigger_killbox

Set its Filter Name to filter_boxes

Go to flags and check physics objects and uncheck Clients

Enter the following in outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnStartTouch !activator kill 0.00 No
Io11.png OnStartTouch relay_euthanization Trigger 0.00 No

Implementation

Have a certain object trigger relay_incinerator_open to open the incinerator

When that certain object deactivates, trigger relay_incinerator_close.

If that certain object can't deactivate, make relay_euthanization trigger the relay_incinerator_close.

See also