Creating an incinerator: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(Cleaning up grammer, etc. Havn't mapped much for Portal, so I can't say about accuracy.)
m (Unicodifying, replaced: [[Image: → [[File: (20))
 
(61 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Back|Portal Level Creation}}
{{back | Portal Level Creation}}
{{DISPLAYTITLE: Portal - Tutorial - Incinerator}}
 
== Introduction ==
== Introduction ==
In this tutorial you will learn how to make an Aperture Science Emergency Intelligence Incinerator which will trigger a event when a something is put inside.
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 <code>models/props_bts/glados_aperturedoor.mdl</code>
 
Change its name to <code> model_incinerator_door </code>
Choose <code>Collisions</code> and choose <code>Not Solid</code>
 
===The Floor===
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>


=== The Incinerator ===
Put this particle in the hole of the incinerator doors {{clr}}
The first step would be


<ol>
===Manual Collision===
<li>Create a [[prop_dynamic]] with "World Model" set to "<code>models/props_bts/glados_aperturedoor.mdl</code>". Name it "<code>incinerator</code>"<!-- for now>. Make a room under it textured with "<code>metal/metalwall048c_gradient</code>" for the walls and "<code>lights/light_orange001</code>" for the floor of it. now make a 2 unit tall brush (that is as wide the long as the bottom of your room) using the "<code>tools/toolstrigger</code>" texture. tie it to a [[trigger_once]] entity with the following properties:
[[File:Incinerator arch1.PNG |thumb|right|200px|Manual Collision]]
::{| class=standard-table
Create a <code>208*208l*16h</code> arch with the <code>invisible</code> texture and
!  Property Name || Value
set wall width to "40", Number of sides = 16, Arc = 360, Start Angle = 0
|-
 
| Name || trigger_door1
Select the brushes and hold 'ctrl + m' choose the X value and type "25"
|-
 
| Filter Name || (name of box)
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
|}
|}


=== make it solid ===
unfortunately, if you leave it as is, it is not solid. so what i did in my map is that i placed invisible brushes all around and on it. this may take a while, but it looks really cool in-game.


== the door ==
Copy and paste the trigger_multiple and make it a [[trigger_push]]
now we must create a door for our incinerator to open.
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.


=== the door frame ===
===Door Collision===
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).
Make <code>128s*128l*8h</code> brush with the invisible texture.
Tie it to a [[func_brush]] entity.


=== the doors ===
Name it <code>incinerator_collision_door</code>
Create a [[prop_dynamic]] with the following settings:
 
::{| class=standard-table
Hold Ctrl + M and change the x value to 25
!  Property Name || Value
Position it just like this
|-
[[File:Incinerator_funcbrush.PNG |thumb|left|200px|Door Collision]]
| World Model || models/props/door_01_lftdoor_reference.mdl
{{clr}}
|-
 
| Name || door_l(that's an L, not a 1)
===Sounds===
|}
Make an [[ambient_generic]] entity and name it to <code>sound_incinerator</code>.
put it in the left side of the door frame.
 
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:


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:
{| {{OutputsTable}}
::{| class=standard-table
| [[File:Io11.png]] || OnTrigger || fire_particles || Start || || 0.00 || No
!  Property Name || Value
|-
| Name || door_1(this time it's a 1, not an L)
|-
| Speed || 250
|-
| Stop Sound || Doors.FullClose8
|-
|-
| Delay before Reset || -1
| [[File:Io11.png]] || OnTrigger || incinerator_collision_door || Disable || || 0.00 || No
|-
|-
| Lip || 12
| [[File:Io11.png]] || OnTrigger || model_incinerator_door || setanimation || open || 0.00 || No
|-
|-
| Move Direction || (This will be different for which way your door is facing)
| [[File:Io11.png]] || OnTrigger || sound_incinerator || playsound ||  || 0.00 || No
|}
|}
Also make sure that you un-check ''Touch opens'' under ''Flags''.


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).
On <code>relay_incinerator_close</code> add the following outputs:
{{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.]]
{| {{OutputsTable}}
3. Repeat steps 1-3 but change the following:
| [[File:Io11.png]] || OnTrigger || fire_particles || stop || || 0.00 || No
For the <code>prop_dynamic</code>:
::{| class=standard-table
!  Property Name || Value
|-
|-
| World Model || models/props/door_01_rtdoor_reference.mdl
| [[File:Io11.png]] || OnTrigger || incinerator_collision_door || Enable || || 0.00 || No
|-
|-
| Name || door_r
| [[File:Io11.png]] || OnTrigger || model_incinerator_door || setanimation || close || 0.00 || No
|}
And for the func_door:
::{| class=standard-table
!  Property Name || Value
|-
|-
| Name || door_2
| [[File:Io11.png]] || OnTrigger || sound_incinerator || playsound ||  || 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".
===Killing the Box===
 
Make <code>128s*128l*48h</code> brush with the trigger texture.
Tie it to a trigger_once entity.
 
Name it to <code>trigger_killbox</code>
 
Set its <code>Filter Name</code> to <code>filter_boxes</code>


==now you must choose between a trigger or a switch to open your incinerator.==
Go to flags and check <code>physics objects</code> and uncheck <code>Clients</code>


=== the trigger ===
Enter the following in outputs:
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
!  Property Name || Value
|-
| Name || trigger_incinerator
|-
| Delay Before Reset || anywhere inbetween 5-10 seconds
|}


and the following outputs:
{| {{OutputsTable}}
::{| class=standard-table
| [[File:Io11.png]] || OnStartTouch || !activator || kill || || 0.00 || No
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[Image:Io11.png]] || OnStartTouch || incinerator || SetAnimation || Open || 0.00 || No
|-
| [[Image:Io11.png]] || OnStartTouch || incinerator || SetAnimation || Close || 4.00 || No
|-
|-
| [[File:Io11.png]] || OnStartTouch || relay_euthanization || Trigger || || 0.00 || No
|}
|}


=== '''OPTIONAL''' the switch ===
==Implementation==
create a <code>prop_dynamic</code> with the following settings.
Have a certain object trigger <code>relay_incinerator_open</code> to open the incinerator
::{| class=standard-table
!  Property Name || Value
|-
| Name || button_incinerator.mdl
|-
| World Model || models/props/switch001.mdl
|}


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:
When that certain object deactivates, trigger <code>relay_incinerator_close</code>.
::{| class=standard-table
!  Property Name || Value
|-
| Name || button_incinerator
|}


and make it have the following outputs:
If that certain object can't deactivate, make <code>relay_euthanization</code> trigger the <code>relay_incinerator_close</code>.
::{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[Image:Io11.png]] || OnPressed || incinerator || SetAnimation || open || 0.00 || No
|-
| [[Image:Io11.png]] || onPressed || incinerator || SetAnimation || close || 4.00 || No
|}
still not done... i'll edit it again when i have time.


== 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