Creating Portal Vacuum Tubes: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(Created page with "{{back | Portal Behind The Scenes Level Creation}} ==Introduction== This tutorial will teach you how to create Vacuum Tubes. {{Warning| This page is incomplete, it's recommen...")
 
m (Setting bug notice hidetested=1 param on page where the bug might not need tested in param specified)
 
(36 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{back | Portal Behind The Scenes Level Creation}}
{{DISPLAYTITLE: Portal BTS - Tutorial - Vacuum Tubes}}{{back | Portal Level Creation|Portal Level Creation}}{{stub}}{{Morescreenshots}}
==Introduction==
__NOTOC__
This tutorial will teach you how to create Vacuum Tubes.
=Introduction=
This guide will teach you how to create Vacuum Tubes. You can [[Creating_Portal_Vacuum_Tubes#Enterable Tubes|enter some vacuum tubes]] however, other [[Creating_Portal_Vacuum_Tubes#Detail Vacuum Tubes|vacuum tubes are just for detail]].


{{Warning| This page is incomplete, it's recommended that you don't follow the guide until it's finished}}
==Enterable Tubes==


== See Also ==
Enterable vacuum tubes are seen in <code>testchmb_a_15</code>.


* [[Portal Behind The Scenes Level Creation]]
==Setting Up==
 
Put <code>[[prop_static]]</code> entities. Set their model to these:
 
* Straight Tube - '''clear_tube_straight.mdl'''
* Mutli-Directional Tube - '''clear_tube_tjoint.mdl'''
* Broken Tube - '''clear_tube_broken.mdl'''
* 90 Degree Tubes - '''clear_tube_90deg.mdl'''
 
Enter the following properties:
{| class=standard-table
!  Property Name || Value
|-
| Collisions || Not Solid
|}
 
 
Create your path with the models.
[[File:Portal vacuum tubes path.png|thumb|left|300px|Vacuum Tube Path]]
{{clr}}
 
==Walls==
Create walls with the <code>[[nodraw]]</code> texture, and texture the inside faces or visible faces with <code>metal/metalwall_bts_006a</code>. Create orange pits as well.
[[File:Portal vacuum tubes walls.png|thumb|left|300px|Vacuum Tube Walls]]
{{clr}}
 
 
==Simple Collisions==
Put brushes around the tubes with the <code>[[Tool_textures#invisible|invisible]]</code> texture. The ceiling and floor brushes should be 32 units in width and the side brushes should be 24 units in Width. Turn all of these brushes to a <code>[[func_detail]]</code>.
[[File:Portal vacuum tubes collision.png|thumb|left|300px|Vacuum Tube Collision]]
{{clr}}
 
==Movement==
 
===Horizontal Movement===
 
Create brushes with the <code>[[Tool_textures#trigger|Trigger]]</code> texture 32 units high and 80 in width, the length will depend on how long your tube is.
[[File:Portal vacuum tubes trigger push.png|thumb|left|300px|Vacuum Tube Collision]]
{{clr}}
 
Tie each individual brush to a <code>[[trigger_push]]</code> entity and enter the following properties:
 
{| class=standard-table
!  Property Name || Value
|-
| Speed of Push || 350
|}
 
Tick the <code>Clients</code> flag and set its <code>Push Direction</code> to the direction your tube will go.
 
===Vertical Movement===
 
If your pipes require you to move up, you need to create a 80w*80l*16h brush with the <code>[[Tool_textures#Invisible|Invisible]]</code> texture, tie it to a <code>[[func_door]]</code> entity and enter the following properties:
 
{| class=standard-table
!  Property Name || Value
|-
| Name || door_push_up_pipe
|-
| Speed|| 200
|-
| Forced Closed|| Yes
|-
| Move Direction|| -90 0 0
|}
 
Set the '''Lip''' value to the distance you need the door to move as a negative number.
 
Create a 29w*128l*64h brush with the <code>trigger</code> texture, tie this brush to a <code>[[trigger_multiple]]</code> and enter the following properties.
 
{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[File:Io11.png]] || OnStartTouch || door_push_up_pipe || Open || <none> || 0.00 || No
|}
 
Under flags, untick <code>Touch Opens</code> and tick <code>Door Silent</code>. Set the lip value to a negative value to move the door upwards.
 
Make sure there are no <code>trigger_push</code> brushes that interfere with the <code>door_push_up_pipe</code>. You will also have to [[Creating Portal Vacuum Tubes#Entrance#Broken Tube#Force Crouch|force the player to crouch]].
 
==Lighting==
 
Create a <code>[[light]]</code> entity and enter the following properties:
{| class=standard-table
!  Property Name || Value
|-
| Brightness|| 242 91 0 100
|-
| BrightnessScaleHDR|| .5
|-
| Constant|| 500000
|}
 
Place these lights 592 units away from each other. Sometimes you can put these lights closer if necessary.
 
==Entrance==
 
Create an <code>[[env_soundscape]]</code> and enter the following properties:
 
{| class=standard-table
!  Property Name || Value
|-
| Radius || 64
|-
| Soundscape || portal_escape.tube
|}
 
Place the soundscape inside of the entrance.
 
 
You will have to get creative if you don't want the entrance to your tube to be a broken tube.
 
===Broken Tube===
 
Create a tube with the <code>clear_tube_broken</code> model.
 
Put <code>invisible</code> brushes around the broken tube model for collision.
 
====Force Crouch====
 
Create a <code>[[point_clientcommand]]</code> entity and set its name to clientcommand.
 
Create a <code>trigger_multiple</code> entity and enter the following outputs:
 
{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[File:Io11.png]] || OnTrigger || clientcommand || Command || +duck || 0.00 || No
|-
| [[File:Io11.png]] || OnEndTouch || clientcommand || Command || -duck || 0.00 || No
|}
 
{{bug|hidetested=1|When a player loads a save, loads a new map, or selects a new chapter, they will remain ducked if they didn't exit the trigger.}}
 
====Sound====
 
Create an <code>[[ambient_generic]]</code> entity and enter the following properties:
 
{| class=standard-table
!  Property Name || Value
|-
| Name || sound_suction
|-
| Sound Name || Portal.tube_suck
|}
 
Under Flags, tick <code>Is NOT Looped</code>.
 
Place the <code>ambient_generic</code> inside the tube, but move it a bit closer to the direction the tube is going.
 
====Particles====
 
Create an <code>[[ambient_generic]]</code> entity and enter the following properties:
 
{| class=standard-table
!  Property Name || Value
|-
| Name || particles_broken_tube_suck
|-
| Particle System Name || broken_tube_suck
|}
 
Under Flags, tick <code>Is NOT Looped</code>.
 
In Portal, the first 2 Control Point values were used, however, they don't change the particle in any way so they can be left ignored.
 
Place the particle above the broken tube model.
 
====Starting the Effects====
 
Create a <code>[[logic_relay]]</code> entity and set its name to relay_broken_tube_effects.
 
{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[File:Io11.png]] || OnTrigger || sound_suction || PlaySound || <none> || 0.00 || No
|-
| [[File:Io11.png]] || OnTrigger || particles_broken_tube_suck || Start || <none> || 0.00 || No
|}
 
==Exit==
 
Place a new soundscape to what you need.
 
You will have to get creative if you don't want the exit to your tube to be a Box Dropper Lid breaking. Some level designers create another broken tube for the exit.
 
===Box Dropper===
 
First, complete the [[Box dropper]] guide.
 
The top of the box dropper shaft uses the <code>portal_testchmb.tight_space</code> soundscape.
 
Make sure the tube exit drops you into the box dropper.
 
====Arch====
 
Create a 128*128*8 arch with the <code>nodraw</code> texture and enter the following properties:
 
*Wall Width: 29
 
*Number of Sides: 32
 
Use the vertex tool to create this exact shape:
 
[[File:vacuum_tubes_exit_box_dropper_hole.PNG|thumb|left|300px|Box Dropper Arch]]
{{clr}}
 
Tie the brushes to a <code>func_detail</code>.
 
Texture the top faces and the center faces with <code>metal/metalwall_bts_006a</code>.
 
{{note| This is being done a bit differently from how <code>testchmb_a_15</code> creates the arch because the map uses a slightly outdated version of Test Chamber 09, optionally you can texture the center faces with <code>metal/metalwall061f</code> because the area came from an earlier art pass.}}
 
{{todo|Finish the rest of the guide}}
 
=Detail Vacuum Tubes=
 
These vacuum tubes can simply be seen shooting boxes across the tube. However, not all vacuum tubes require boxes.
 
= See also =


* [[Portal Level Creation]]
* [[Portal Level Creation]]
[[Category: Level Design]][[Category: Portal]][[Category: Tutorials]][[Category:Level_Design_Tutorials]]
 
[[Category:Portal]]
[[Category:Level Design]]
[[Category:Tutorials]]

Latest revision as of 07:17, 20 May 2025

Portal Level Creation

Stub

This article or section is a stub. You can help by expanding it.


Introduction

This guide will teach you how to create Vacuum Tubes. You can enter some vacuum tubes however, other vacuum tubes are just for detail.

Enterable Tubes

Enterable vacuum tubes are seen in testchmb_a_15.

Setting Up

Put prop_static entities. Set their model to these:

  • Straight Tube - clear_tube_straight.mdl
  • Mutli-Directional Tube - clear_tube_tjoint.mdl
  • Broken Tube - clear_tube_broken.mdl
  • 90 Degree Tubes - clear_tube_90deg.mdl

Enter the following properties:

Property Name Value
Collisions Not Solid


Create your path with the models.

Vacuum Tube Path

Walls

Create walls with the nodraw texture, and texture the inside faces or visible faces with metal/metalwall_bts_006a. Create orange pits as well.

Vacuum Tube Walls


Simple Collisions

Put brushes around the tubes with the invisible texture. The ceiling and floor brushes should be 32 units in width and the side brushes should be 24 units in Width. Turn all of these brushes to a func_detail.

Vacuum Tube Collision

Movement

Horizontal Movement

Create brushes with the Trigger texture 32 units high and 80 in width, the length will depend on how long your tube is.

Vacuum Tube Collision

Tie each individual brush to a trigger_push entity and enter the following properties:

Property Name Value
Speed of Push 350

Tick the Clients flag and set its Push Direction to the direction your tube will go.

Vertical Movement

If your pipes require you to move up, you need to create a 80w*80l*16h brush with the Invisible texture, tie it to a func_door entity and enter the following properties:

Property Name Value
Name door_push_up_pipe
Speed 200
Forced Closed Yes
Move Direction -90 0 0

Set the Lip value to the distance you need the door to move as a negative number.

Create a 29w*128l*64h brush with the trigger texture, tie this brush to a trigger_multiple and enter the following properties.

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnStartTouch door_push_up_pipe Open <none> 0.00 No

Under flags, untick Touch Opens and tick Door Silent. Set the lip value to a negative value to move the door upwards.

Make sure there are no trigger_push brushes that interfere with the door_push_up_pipe. You will also have to force the player to crouch.

Lighting

Create a light entity and enter the following properties:

Property Name Value
Brightness 242 91 0 100
BrightnessScaleHDR .5
Constant 500000

Place these lights 592 units away from each other. Sometimes you can put these lights closer if necessary.

Entrance

Create an env_soundscape and enter the following properties:

Property Name Value
Radius 64
Soundscape portal_escape.tube

Place the soundscape inside of the entrance.


You will have to get creative if you don't want the entrance to your tube to be a broken tube.

Broken Tube

Create a tube with the clear_tube_broken model.

Put invisible brushes around the broken tube model for collision.

Force Crouch

Create a point_clientcommand entity and set its name to clientcommand.

Create a trigger_multiple entity and enter the following outputs:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger clientcommand Command +duck 0.00 No
Io11.png OnEndTouch clientcommand Command -duck 0.00 No
Icon-Bug.pngBug:When a player loads a save, loads a new map, or selects a new chapter, they will remain ducked if they didn't exit the trigger.

Sound

Create an ambient_generic entity and enter the following properties:

Property Name Value
Name sound_suction
Sound Name Portal.tube_suck

Under Flags, tick Is NOT Looped.

Place the ambient_generic inside the tube, but move it a bit closer to the direction the tube is going.

Particles

Create an ambient_generic entity and enter the following properties:

Property Name Value
Name particles_broken_tube_suck
Particle System Name broken_tube_suck

Under Flags, tick Is NOT Looped.

In Portal, the first 2 Control Point values were used, however, they don't change the particle in any way so they can be left ignored.

Place the particle above the broken tube model.

Starting the Effects

Create a logic_relay entity and set its name to relay_broken_tube_effects.

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger sound_suction PlaySound <none> 0.00 No
Io11.png OnTrigger particles_broken_tube_suck Start <none> 0.00 No

Exit

Place a new soundscape to what you need.

You will have to get creative if you don't want the exit to your tube to be a Box Dropper Lid breaking. Some level designers create another broken tube for the exit.

Box Dropper

First, complete the Box dropper guide.

The top of the box dropper shaft uses the portal_testchmb.tight_space soundscape.

Make sure the tube exit drops you into the box dropper.

Arch

Create a 128*128*8 arch with the nodraw texture and enter the following properties:

  • Wall Width: 29
  • Number of Sides: 32

Use the vertex tool to create this exact shape:

Box Dropper Arch

Tie the brushes to a func_detail.

Texture the top faces and the center faces with metal/metalwall_bts_006a.

Note.pngNote: This is being done a bit differently from how testchmb_a_15 creates the arch because the map uses a slightly outdated version of Test Chamber 09, optionally you can texture the center faces with metal/metalwall061f because the area came from an earlier art pass.
Todo: Finish the rest of the guide

Detail Vacuum Tubes

These vacuum tubes can simply be seen shooting boxes across the tube. However, not all vacuum tubes require boxes.

See also