Creating a portal elevator: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (some minor linkage; topic needs more details)
(Removed skill level)
 
(29 intermediate revisions by 9 users not shown)
Line 1: Line 1:
{{Back|Portal Level Creation}}
{{DISPLAYTITLE: Portal - Tutorial - Elevator}}
{{Complete}}
{{back | Portal Level Creation}}
==Introduction==
{{lang|Creating_a_portal_elevator}}
<div style='padding-left:20px'>
{{Morescreenshots}}
It is a common misconception that making a elevator in portal is very hard. It is, however a very simple process. If it is created properly, it can be turned into a [[prefab]] and be easily duplicated.</div>
{{cleanup}}


==The Base==
== Introduction ==
<div style='padding-left:20px'>
The first thing to do is to build the base for the elevator. This consists of [[brush]]es and [[func_detail]]s. It is the fastest part of the process.</div>


===The Landing===
It is a common misconception that making an elevator in Portal is very hard. It is, however a very simple process. If it is created properly, it can be turned into a [[prefab]] and be easily duplicated.
[[Image:Eletut.jpg|right|thumb|Step 1]]
<div style='padding-left:20px'>
A landing is really easy to make. It consists of 7 walls and a floor and ceiling with a similar hole.<br>
It can be easily recreated from the image on the right.<br>
When you have finished your first landing, texture it and group it, so it can be easily duplicated for the bottom landing.</div>


<div style='clear:both'>
== The Base ==
===The Shaft===
[[Image:Eletut_(1).jpg|right|thumb|Step 2]]
<div style='padding-left:20px'>
The shaft is also very easy. It consists of 3 parts. A top cap, a middle piece, and a bottom cap.<br>
Walls are 192*16, and textured with plasticwall002a.<br>
The caps are 64 units tall, and the center piece is 384 units.</div></div>


<div style='clear:both'>
The first thing to do is to build the base for the elevator. This consists of [[brush]]es and [[func_detail]]s. It is the fastest part of the process.
===The Shaft Details===
[[Image:Eletut_(2).jpg|right|thumb|Step 3]]
<div style='padding-left:20px'>
*1. Create 4 16*16 sized brushes and place them in each corner. They should be turned into a [[func_detail]].<br>
*2. Next, create a block that is 8*8*160.
:Texture it with plasticwall002a as well.
:Then slice it into 3 pieces vertically, that are 2, 4, and 2 respectively.
:Take the center piece and resize it to be 2 units wide, instead of 8. Texture it with white008.
:Duplicate this piece to from a square.
:Make it a func_detail and place one every 64 units in the center shaft.</div></div>


<div style='clear:both'>
=== The Landing ===
===The Landing Details===
[[Image:Eletut_(3).jpg|right|thumb|Step 4]]
<div style='padding-left:20px'>
Place the elevator landing prop in the center of the landing.<br>
You may choose to add the 16 light beams, however for such a time consuming process, it is easier to copy it from the example map.<br>
Note: All original portal maps have a misplaced light beam. If copying it, you may wish to move it into place.<br>
Place the platform rings in place. The top of these rings align to the top of the platform room.<br>
Copy the landing details to the second landing.</div></div>


[[File:Eletut.jpg|right|thumb|Step 1]]
A landing is really easy to make. It consists of 7 walls and a floor and ceiling with a similar hole. It can be easily recreated from the image on the right. Please note, that the image to the right, the grid is 16 units/square. When you have finished your first landing, texture it and group it, so it can be easily duplicated for the bottom landing.


==The Elevator==
===Exit / Entrance details===
Create a [[prop_static]] entity and enter the following properties:


===The Props===
{| class=standard-table
[[Image:Eletut_(4).jpg|right|thumb|Step 5]]
!  Property Name || Value
<div style='padding-left:20px'>
|-
| World Model || models/props/elevator_caps/elevator_caps.mdl
|}
 
Next, fit the prop inside the entrance and exit of the elevator
 
====Second Model====
Make another prop_static entity and enter the following properties:
 
{| class=standard-table
!  Property Name || Value
|-
| World Model || models/props/elevatorshaft_wall/elevatorshaft_wall.mdl
|}
 
Next, fit the prop inside the entrance and exit of the elevator and make sure the prop aligns with the walls.
 
=== The Shaft ===
 
[[File:Eletut_(1).jpg|right|thumb|Step 2]]
The shaft is also very easy. It consists of 3 parts. A top cap, a middle piece, and a bottom cap. Walls are 192*16, and textured with plasticwall002a. The caps are 64 units tall, and the center piece is 384 units.
 
=== The Shaft Details ===
 
[[File:Eletut_(2).jpg|right|thumb|Step 3]]
* 1. Create 4 16*16 sized brushes and place them in each corner. They should be turned into a [[func_detail]].
* 2. Next, create a block that is 8*8*160.
:A. Texture it with plasticwall002a as well.
:B. Then slice it into 3 pieces vertically, that are 2, 4, and 2 respectively.
:C. Take the center piece and resize it to be 2 units wide, instead of 8. Texture it with white008.
:D. Duplicate this piece to from a square.
:E. Make it a func_detail and place one every 64 units in the center shaft.
 
=== The Landing Details ===
 
[[File:Eletut_(3).jpg|right|thumb|Step 4]]
Place the elevator landing prop in the center of the landing. You may choose to add the 16 light beams, however for such a time consuming process, it is easier to copy it from the example map. Note: All original portal maps have a misplaced light beam. If copying it, you may wish to move it into place. Place the platform rings in place. The top of these rings align to the top of the platform room. Copy the landing details to the second landing.
<br>
<br>
<br>
<br>
<br>
<br>
 
== The Elevator ==
 
=== The Props ===
 
[[File:Eletut_(4).jpg|right|thumb|Step 5]]
Place a [[prop_dynamic]] with these settings in the lower landing.
Place a [[prop_dynamic]] with these settings in the lower landing.
{| class=standard-table
{| class=standard-table
Line 61: Line 81:
|-
|-
| World Model || models/props/round_elevator_body.mdl
| World Model || models/props/round_elevator_body.mdl
|}</div>
|}


<div style='clear:both'>
=== The func_ tracktrain ===
===The TrackTrain===
 
[[Image:Eletut_(5).jpg|right|thumb|Step 6]]
[[File:Eletut_(5).jpg|right|thumb|Step 6]]
<div style='padding-left:20px'>
Hide world details and make a [[func_tracktrain]] out of invisible brushes as shown.
Hide world details and make a [[func_tracktrain]] out of invisible brushes as shown.
{| class=standard-table
{| class=standard-table
Line 85: Line 104:
| Volume || 1
| Volume || 1
|}
|}
Check every flag except Fixed Orient, and Use Max Speed. Set these settings:</div></div>


<div style='clear:both'>
Check every flag except Fixed Orient, and Use Max Speed. Set these settings:
===The CrazyBlock===
 
[[Image:Eletut_(6).jpg|right|thumb|Step 7]]
=== Fixing door collisions ===
<div style='padding-left:20px'>
 
Create an invisible texture brush and place it as shown. This will stop a player from getting stuck in the door when collisions are enabled.
[[File:Eletut_(6).jpg|right|thumb|Step 7]]
Create a brush textured with tools\toolsinvisible and place it as shown. Tie this brush to a func_brush. This will stop a player from getting stuck in the door when collisions are enabled.
{| class=standard-table
{| class=standard-table
!  Property Name || Value
!  Property Name || Value
|-
|-
| Name || elevator1_block
| Name || elevator1_block
|-
| Parent || elevator1_train
|-
|-
| Start Disabled || Yes
| Start Disabled || Yes
|}</div></div>
|}


<div style='clear:both'>
=== The Paths ===
===The Paths===
 
[[Image:Eletut_(7).jpg|right|thumb|Step 8]]
[[File:Eletut_(7).jpg|right|thumb|Step 8]]
<div style='padding-left:20px'>
Place two paths in the center of the room. Call the first one "elevator1_path1," and the second one "elevator1_path2." Do not set the second path to point to anything.
Place two paths in the center of the room. Call the first one "elevator1_path1," and the second one "elevator1_path2." Do not set the second path to point to anything.
Enable props and test the map using [[ent_fire]]. Determine if the paths need to be repositioned. In my case I needed to move it back 8 units and down 16.</div></div>
Enable props and test the map using [[ent_fire]]. Determine if the paths need to be repositioned. In my case I needed to move it back 8 units and down 16.
 
== The Details ==
 
=== Beams ===


<div style='clear:both'>
[[File:Eletut_(8).jpg|right|thumb|Step 9]]
==The Details==
</div>
===Beams===
[[Image:Eletut_(8).jpg|right|thumb|Step 9]]
<div style='padding-left:20px'>
Place an [[info_particle_system]] with the following values:
Place an [[info_particle_system]] with the following values:
{| class=standard-table
{| class=standard-table
Line 129: Line 144:


Place an env_citidel_energy_core with these settings:
Place an env_citidel_energy_core with these settings:
{| class=standard-table
{| class=standard-table
!  Property Name || Value
!  Property Name || Value
Line 135: Line 151:
|-
|-
| Parent || elevator1_train
| Parent || elevator1_train
|}</div>
|}


<div style='clear:both'>
=== Lights ===


===Lights===
[[File:Eletut_(9).jpg|right|thumb|Step 10]]
[[Image:Eletut_(9).jpg|right|thumb|Step 10]]
<div style='padding-left:20px'>
Place two [[light]]s with the following settings:
Place two [[light]]s with the following settings:
{| class=standard-table
{| class=standard-table
Line 154: Line 168:
| Brightness HDR || 183 204 218 40
| Brightness HDR || 183 204 218 40
|}
|}
Also, set initially dark.</div></div>
Also, set initially dark.


<div style='clear:both'>
=== Sounds ===
===Sounds===
 
[[Image:Eletut_(10).jpg|right|thumb|Step 11]]
[[File:Eletut_(10).jpg|right|thumb|Step 11]]
<div style='padding-left:20px'>
Place three [[sound]]s, with their source set to the elevator model.
Place three [[sound]]s, with their source set to the elevator model.
They should be:
They should be:
Line 166: Line 179:
* Doors.FullClose11
* Doors.FullClose11


Name them something unique.</div>
Name them something unique.
 
=== Shake ===


<div style='clear:both'>
===Shake===
<div style='padding-left:20px'>
Add an [[env_shake]] with these settings:
Add an [[env_shake]] with these settings:
{| class=standard-table
{| class=standard-table
Line 180: Line 192:
|-
|-
| Parent || elevator1_train
| Parent || elevator1_train
|}</div>
|}
 
== The Trigger ==


==The Trigger==
<div style='padding-left:20px'>
Create a [[trigger]] brush inside the elevator with these outputs:
Create a [[trigger]] brush inside the elevator with these outputs:


Line 189: Line 201:
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_doors || SetAnimation || close || 0.00 || No
| [[File:Io11.png]] || OnTrigger || elevator1_doors || SetAnimation || close || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_doors || EnableCollision ||  || 0.00 || No
| [[File:Io11.png]] || OnTrigger || elevator1_doors || EnableCollision ||  || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_block || Enable ||  || 0.00 || No
| [[File:Io11.png]] || OnTrigger || elevator1_block || Enable ||  || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_train || StartForward ||  || 5.00 || No
| [[File:Io11.png]] || OnTrigger || elevator1_train || StartForward ||  || 5.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_start || PlaySound ||  || 5.00 || No
| [[File:Io11.png]] || OnTrigger || elevator1_start || PlaySound ||  || 5.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_shake || StartShake ||  || 5.00 || No
| [[File:Io11.png]] || OnTrigger || elevator1_shake || StartShake ||  || 5.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_lights || TurnOn ||  || 8.00 || No
| [[File:Io11.png]] || OnTrigger || elevator1_lights || TurnOn ||  || 8.00 || No
|}
|}


Line 208: Line 220:
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_shake || StartShake ||  || 0.00 || No
| [[File:Io11.png]] || OnPass || elevator1_close || PlaySound ||  || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_close || PlaySound ||  || 0.00 || No
| [[File:Io11.png]] || OnPass || elevator1_lights || TurnOff ||  || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_lights || TurnOff ||  || 0.00 || No
| [[File:Io11.png]] || OnPass || elevator1_chime || PlaySound ||  || 1.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_chime || PlaySound || || 1.00 || No
| [[File:Io11.png]] || OnPass || elevator1_doors || SetAnimation || open || 1.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_doors || SetAnimation || open || 1.00 || No
| [[File:Io11.png]] || OnPass || elevator1_block || Disable || || 1.50 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger || elevator1_block || Disable ||  || 1.50 || No
| [[File:Io11.png]] || OnPass || elevator1_doors || DisableCollision ||  || 1.50 || No
|-
|}
| [[Image:Io11.png]] || OnTrigger || elevator1_doors || DisableCollision ||  || 1.50 || No
|}</div>


==Final Touches==
== Final Touches ==
<div style='padding-left:20px'>
Place a [[soundscape]] (portal_testchmb.elevator_shaft) in the center of the shaft. You may add a changelevel, which fires with the [[path_track]]. Change levels will not be covered in this tutorial.
Place a [[soundscape]] (portal_testchmb.elevator_shaft) in the center of the shaft.<br>
You may add a changelevel, which fires with the [[path_track]]. Change levels will not be covered in this tutorial.


To make this an elevator at the beginning, simply change the train's first stop target to elevator1_path2.
To make this an elevator at the beginning, simply change the train's first stop target to elevator1_path2.
Line 232: Line 240:
Note: You should save the elevator in its own file and copy and paste it to preserve the grouping, so you can easily turn it into a multi stop elevator.
Note: You should save the elevator in its own file and copy and paste it to preserve the grouping, so you can easily turn it into a multi stop elevator.


To make a multiple stop elevator, simply add another path track, and set the middle path tracks to fire a stop event to the train. A trigger can be placed at every floor and disabled until required.</div>
To make a multiple stop elevator, simply add another path track, and set the middle path tracks to fire a stop event to the train. A trigger can be placed at every floor and disabled until required.
 
Remember to disable collision when placing your trigger in your level.  Otherwise, you will not be able to enter the elevator.</div>
 
== See also ==
* [[Portal Level Creation]]


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

Latest revision as of 17:49, 19 April 2025

Portal Level Creation
English (en)Русский (ru)Translate (Translate)
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.

Introduction

It is a common misconception that making an elevator in Portal is very hard. It is, however a very simple process. If it is created properly, it can be turned into a prefab and be easily duplicated.

The Base

The first thing to do is to build the base for the elevator. This consists of brushes and func_details. It is the fastest part of the process.

The Landing

Step 1

A landing is really easy to make. It consists of 7 walls and a floor and ceiling with a similar hole. It can be easily recreated from the image on the right. Please note, that the image to the right, the grid is 16 units/square. When you have finished your first landing, texture it and group it, so it can be easily duplicated for the bottom landing.

Exit / Entrance details

Create a prop_static entity and enter the following properties:

Property Name Value
World Model models/props/elevator_caps/elevator_caps.mdl

Next, fit the prop inside the entrance and exit of the elevator

Second Model

Make another prop_static entity and enter the following properties:

Property Name Value
World Model models/props/elevatorshaft_wall/elevatorshaft_wall.mdl

Next, fit the prop inside the entrance and exit of the elevator and make sure the prop aligns with the walls.

The Shaft

Step 2

The shaft is also very easy. It consists of 3 parts. A top cap, a middle piece, and a bottom cap. Walls are 192*16, and textured with plasticwall002a. The caps are 64 units tall, and the center piece is 384 units.

The Shaft Details

Step 3
  • 1. Create 4 16*16 sized brushes and place them in each corner. They should be turned into a func_detail.
  • 2. Next, create a block that is 8*8*160.
A. Texture it with plasticwall002a as well.
B. Then slice it into 3 pieces vertically, that are 2, 4, and 2 respectively.
C. Take the center piece and resize it to be 2 units wide, instead of 8. Texture it with white008.
D. Duplicate this piece to from a square.
E. Make it a func_detail and place one every 64 units in the center shaft.

The Landing Details

Step 4

Place the elevator landing prop in the center of the landing. You may choose to add the 16 light beams, however for such a time consuming process, it is easier to copy it from the example map. Note: All original portal maps have a misplaced light beam. If copying it, you may wish to move it into place. Place the platform rings in place. The top of these rings align to the top of the platform room. Copy the landing details to the second landing.





The Elevator

The Props

Step 5

Place a prop_dynamic with these settings in the lower landing.

Property Name Value
Name elevator1_model
Parent elevator1_train
World Model models/props/round_elevator_body.mdl

The func_ tracktrain

Step 6

Hide world details and make a func_tracktrain out of invisible brushes as shown.

Property Name Value
Change Angles None
First Stop Target elevator1_path1
Height Above Track 0
Max Speed 65
Name elevator1_train
Stop Sound eli_lab.elevator_stop
Volume 1

Check every flag except Fixed Orient, and Use Max Speed. Set these settings:

Fixing door collisions

Step 7

Create a brush textured with tools\toolsinvisible and place it as shown. Tie this brush to a func_brush. This will stop a player from getting stuck in the door when collisions are enabled.

Property Name Value
Name elevator1_block
Start Disabled Yes

The Paths

Step 8

Place two paths in the center of the room. Call the first one "elevator1_path1," and the second one "elevator1_path2." Do not set the second path to point to anything. Enable props and test the map using ent_fire. Determine if the paths need to be repositioned. In my case I needed to move it back 8 units and down 16.

The Details

Beams

Step 9

Place an info_particle_system with the following values:

Property Name Value
Name elevator1_beam
Parent elevator1_train
Particle System Name elevator_beam
Start Active Yes

Place an env_citidel_energy_core with these settings:

Property Name Value
Name elevator1_core
Parent elevator1_train

Lights

Step 10

Place two lights with the following settings:

Property Name Value
Name elevator1_lights
Appearence Slow strobe
Brightness 183 204 218 60
Brightness HDR 183 204 218 40

Also, set initially dark.

Sounds

Step 11

Place three sounds, with their source set to the elevator model. They should be:

  • Portal.elevator_chime
  • Portal.elevator_start
  • Doors.FullClose11

Name them something unique.

Shake

Add an env_shake with these settings:

Property Name Value
Duration 2
Name elevator1_shake
Parent elevator1_train

The Trigger

Create a trigger brush inside the elevator with these outputs:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger elevator1_doors SetAnimation close 0.00 No
Io11.png OnTrigger elevator1_doors EnableCollision 0.00 No
Io11.png OnTrigger elevator1_block Enable 0.00 No
Io11.png OnTrigger elevator1_train StartForward 5.00 No
Io11.png OnTrigger elevator1_start PlaySound 5.00 No
Io11.png OnTrigger elevator1_shake StartShake 5.00 No
Io11.png OnTrigger elevator1_lights TurnOn 8.00 No

Set the second path track to have these outputs:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnPass elevator1_close PlaySound 0.00 No
Io11.png OnPass elevator1_lights TurnOff 0.00 No
Io11.png OnPass elevator1_chime PlaySound 1.00 No
Io11.png OnPass elevator1_doors SetAnimation open 1.00 No
Io11.png OnPass elevator1_block Disable 1.50 No
Io11.png OnPass elevator1_doors DisableCollision 1.50 No

Final Touches

Place a soundscape (portal_testchmb.elevator_shaft) in the center of the shaft. You may add a changelevel, which fires with the path_track. Change levels will not be covered in this tutorial.

To make this an elevator at the beginning, simply change the train's first stop target to elevator1_path2.

Note: You should save the elevator in its own file and copy and paste it to preserve the grouping, so you can easily turn it into a multi stop elevator.

To make a multiple stop elevator, simply add another path track, and set the middle path tracks to fire a stop event to the train. A trigger can be placed at every floor and disabled until required.

Remember to disable collision when placing your trigger in your level. Otherwise, you will not be able to enter the elevator.

See also