Creating an energy ball launcher and catcher: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(Removed skill level)
 
(55 intermediate revisions by 20 users not shown)
Line 1: Line 1:
[[Category:Level Design Tutorials]]
{{DISPLAYTITLE: Portal - Tutorial - Energy Ball Launcher and Catcher}}
= Introduction =
{{lang|Portal - Tutorial - Energy Ball Launcher and Catcher}}
The purpose of this tutorial is to illustrate how to create a single ball launcher and have a single ball catcher be its target.  Both the launcher and the catcher instructions will detail how the basic animations as well as the visual and sound effects work.
{{back | Portal Level Creation}}
=The Aperture Science High Energy Pellet Launcher =
 
[[Image:launcher-catcher01.jpg|right|thumb|Launcher Assembly]]
==Introduction==
The launcher is comprised of three entities:
This page will show you how to create Energy Ball Launchers and Catchers.
*'''a [[func_brush]]'''
 
*'''a [[point_energy_ball_launcher]]'''
==Launcher==
*'''a [[prop_dynamic]]'''
 
The model used is:
===Launcher Base===
*'''models/props/combine_ball_launcher.mdl'''
[[File:portal_eball_launcher_base_brush.PNG|thumb|right|200px|Concrete Slab]]
To create the launcher:
Create a 8w*128l*128h brush with the <code>[[nodraw]]</code> texture. Tie this brush to a <code>[[func_detail]]</code>. Texture the front face with <code>concrete/concrete_modular_wall001a</code> and the border faces with <code>signage/hazard_orange_03b</code>. Rotate the textures if they aren't aligned.
:1. Create a [[prop_dynamic]] entity (Shift + E) with a World Model of '''models/props/combine_ball_launcher.mdl''' and a name of “ball_launcher”
 
:2. Place the new entity where you want it in your map
{{note|The base isn't needed if your launcher is on a metal wall}}
:3.  Create a [[point_energy_ball_launcher]] entity (Shift + E) and set its name to "ball"
{{clr}}
:4. Place the new entity inside the dome of the “ball_launcher” model
===Launcher Model===
:5. Create a new brush 20 units or so square and 1 unit thick with the nodraw texture
[[File:portal_eball_launcher_model.PNG|thumb|right|200px|Launcher Model]]
:6.  Turn this brush into a [[func_brush]] entity (Ctrl + T) and name it “ball_launcher_shield”
Create a <code>[[prop_dynamic]]</code> entity and enter the following properties:
:7. Place the “ball_launcher_shield” so that it is touching the black circular shield of the “ball_launcher model”
{| class=standard-table
:8. Open up the [[point_energy_ball_launcher]] properties (Ctrl + T) and set these outputs:
!  Property Name || Value
::{|
|-
!   || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
| Name || ball_spawner_prop
|-
| World Model || models/props/combine_ball_launcher.mdl
|}
{{clr}}
===Launcher Lighting===
[[File:portal_eball_launcher_light.PNG|thumb|right|200px|Launcher Light Entity]]
Create a <code>[[light]]</code> entity and enter the following properties:
{| class=standard-table
! Property Name || Value
|-
| Brightness || 218 76 26 30
|-
| BrightnessHDR || 218 76 26 30
|}
Place the light inside the Launcher Model.
{{clr}}
===Launcher Clipping===
[[File:portal_eball_launcher_playerclip.PNG|thumb|right|200px|Launcher Clip Brush]]
Create a 32w*64l*64h brush with the <code>playerclip</code> texture. Position this brush in front of the Launcher Base.
{{clr}}
===Launcher noportal===
[[File:portal_eball_launcher_noportal.PNG|thumb|right|200px|Launcher noportal volume]]
Create a 8w*96l*96h brush with the <code>invisible</code> texture.
{{note|The noportal brush isn't needed if your launcher is on a metal wall}}
{{clr}}
===Launcher Collision===
[[File:portal_eball_launcher_collision.PNG|thumb|right|200px|Launcher Collision]]
Create a 1w*16l*16h brush with the <code>nodraw</code> texture. Position this brush in the front in the model. Tie this brush to a <code>func_detail</code>.
{{clr}}
===Launcher Spawner===
[[File:portal_eball_launcher_spawner.PNG|thumb|right|200px|Launcher Spawner]]
Create a <code>[[point_energy_ball_launcher]]</code> entity and position the entity right in front of the Collision Brush, touching the outer face.
 
Enter the following properties:
 
{| class=standard-table
! Property Name || Value
|-
| Name || energy_ball_launcher
|-
|-
| [[Image:Io11.png]] || OnPostSpawnBall || ball_launcher || SetAnimation || close || 0.00 || No
| Ball count || 1
|-
|-
| [[Image:Io11.png]] || OnPostSpawnBall || ball_launcher_shield || Disable || <none> || 0.00 || No
| Min ball speed || 200
|-
|-
| [[Image:Io11.png]] || OnPostSpawnBall || ball_launcher_shield || Enable || <none> || 2.00 || No
| Max ball speed || 200
|-
| Ball radius || 12.0
|-
| Ball Respawn Time || 2.0
|}
{{note| The <code>Min ball speed</code> and <code>Max ball speed</code> values can be changed, but make sure they are the same value. The minimum value to enter is 200 and the max is 400.}}
 
Sometimes under flags, the launcher starts inactive and gets activated when you touch a trigger.
 
Enter the following output:
{| {{OutputsTable}}
| [[File:Io21.png]] || OnPostSpawnBall || ball_spawner_prop || SetAnimation || close || 0.00 || No
|}
{{clr}}
 
==Ball Catcher==
 
{{note|Ball Catchers are modified ball catchers from [[Half-Life 2: Episode One]].}}
 
===Catcher Base===
[[File:portal_eball_catcher_base.PNG|thumb|right|200px|Catcher Base]]
Create 2 8w*40l*128h brushes with the <code>nodraw</code> texture.
 
Create 2 8w*48l*40h brushes with the <code>nodraw</code> texture.
 
Texture the front faces with <code>concrete/concrete_modular_wall001a</code> and the outer edge faces with <code>signage/hazard_orange_03b</code>. Rotate the textures if they aren't aligned.
 
Create an 8w*48l*48h brush with the <code>playerclip</code> texture and put the brush inside of the concrete base so the player can't fall through.
 
{{note|The base isn't needed if your catcher is on a metal wall}}
{{clr}}
===Catcher Interior===
[[File:portal_eball_catcher_interior.PNG|thumb|right|200px|Catcher Interior]]
Create 2 16w*16l*48h brushes with the <code>nodraw</code> texture.
 
Create 2 16w*48l*16h brushes with the <code>nodraw</code> texture.
 
Create a 16w*48l*48h brush with the <code>nodraw</code> texture.
 
Put these brushes behind the Catcher Base.
{{clr}}
===Catcher Model===
[[File:portal_eball_catcher_model.PNG|thumb|right|200px|Catcher Model]]
Create a <code>prop_dynamic</code> entity and enter the following properties:
{| class=standard-table
!  Property Name || Value
|-
| World Model || models/props/combine_ball_catcher.mdl
|-
| Disable Shadows || Yes
|-
| Name || ball_trap_1_housing
|}
|}
:9.  Adjust the keyvalues of [[point_energy_ball_launcher]] to set the desired direction, speed, type, and life of the ball.
{{clr}}
The Aperture Science High Energy Pellet Launcher is now complete.
===Catcher Sprites===
{{note| If desired you can also place the [[point_energy_ball_launcher]] outside of the “ball_launcher” model and remove the “ball_launcher_shield” outputs.}}
[[File:portal_eball_catcher_sprites.PNG|thumb|right|200px|Catcher Sprites]]
=The Aperture Science High Energy Pellet Target =
Create an <code>[[env_sprite]]</code> entity and enter the following properties:
[[Image:launcher-catcher02.JPG|right|thumb|Target Assembly]]
 
The target is comprised of eleven entities:
{| class=standard-table
*'''an [[ambient_generic]]'''
! Property Name || Value
*'''an [[env_sprite]]'''
|-
*'''a [[filter_combineball_type]]'''
| Name || ball_trap_1_sprite
*'''a [[func_tracktrain]]'''
|-
*'''a [[logic_relay]]'''
| Parent || ball_trap_1_housing
*'''two [[path_track]]s'''
|-
*'''a [[point_spotlight]]'''
| Render FX || Distort
*'''two [[prop_dynamic]]s'''
|-
*'''a [[trigger_multiple]]'''
| Render Mode || Additive
The models used are:
|-
*'''/models/props/combine_ball_catcher.mdl'''
| Framerate || 30
*'''/models/Effects/combineball.mdl'''
|-
To create the catcher:
| Sprite Name || materials/sprites/physring1.vmt
:1.  Create a [[prop_dynamic]] entity (Shift + E) with a World Model of '''models/props/combine_ball_catcher.mdl''' and a name of “ball_trap”
:2.  Place the entity where you want it in your map {{note| The model requires a hole of at least 32 units square and 8 units deep.  Otherwise, when the model animates to its closed state, part of the model will be hidden in a wall.}}
:3. Create a [[filter_combineball_type]] entity (Shift + E) and name it filter_ball.
:4.  Set the balltype for “filter_ball” to '''"Launched by [[point_combine_ball_launcher]]"'''
:5.  Create a brush with the trigger texture to cover the opening of the “ball_trap” model.
:6.  Turn this brush into a [[trigger_multiple]] entity (Ctrl + T) and name it “trigger_ball_trap”, also set the filter_name to “filter_ball”
:7.  Create a [[prop_dynamic]] entity (Shift + E) with a World Model of '''/models/Effects/combineball.mdl''', set its parent to “ball_trap” and name it “ball_trap_ball”
:8.  Create a [[env_sprite]] entity (Shift + E), set its Sprite Name to '''/sprites/physring1.vmt''', set its parent to “ball_trap” and name it “ball_trap_sprite”
:9.  Place both “ball_trap_ball” and “ball_trap_sprite” somewhere near the front of the “ball_trap” model
:10.  Create a [[logic_relay]] entity (Shift + E) and name it “relay_ball_trap_spawn”
:11.  Open up the [[logic_relay]] properties and set these outputs:
::{|
|| My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || OnSpawn || ball_trap_ball || SetParentAttachment || ball_attachment || 0.00 || No
| Scale || 1.5
|-
|-
| [[Image:Io11.png]] || OnSpawn || ball_trap_sprite || SetParentAttachment || ball_attachment || 0.00 || No
| Size of Glow Proxy Geometry || 0
|}
|}
:12.  Create a [[path_track]] entity (Shift + E) and name it “path_ball_trap_01”, set Next Stop Target to "path_ball_trap_02"
 
:13.  Place “path_ball_trap_01”  in front of and slightly above the “ball_trap” model.
Create another <code>env_sprite</code> entity and enter the following properties:
:14.  Create a [[path_track]] entity (Shift + E) and name it “path_ball_trap_02, set Next Stop Target to "path_ball_trap_01”
 
:15.  Place “path_ball_trap_02”  behind and slightly above the “ball_trap” model.
{| class=standard-table
:16.  Create a brush with the nodraw texture
:17.  Turn this brush into a [[func_tracktrain]] entity and name it “ball_trap_door”
:18.  Place brush slightly above the two [[path_track]]s and behind “path_ball_trap_01”
:19.  Open up the property window (Ctrl + T) for “ball_trap_door” and set these keyvalues:
::{|
!  Property Name || Value
!  Property Name || Value
|-
| Name || ball_trap_1_sprite
|-
|-
| First Stop Target || path_ball_trap_01
| Parent || ball_trap_1_housing
|-
|-
| Move Sound || d3_citadel.podarm_move
| Render FX || Distort
|-
| Render Mode || World Space Glow
|-
| Framerate || 30
|-
| Sprite Name || materials/sprites/glow01.vmt
|-
| Scale || 2
|-
| Size of Glow Proxy Geometry || 0
|}
{{clr}}
===Catcher Ball===
[[File:portal_eball_catcher_ball_model.PNG|thumb|right|200px|Ball Model]]
 
Create a <code>prop_dynamic</code> entity and enter the following properties:


{| class=standard-table
!  Property Name || Value
|-
| Parent || ball_trap_1_housing
|-
|-
| Start Sound || d3_citadel.podarm_move_start
| World Model || models/Effects/combineball.mdl
|-
|-
| Stop Sound || d3_citadel.podarm_move_stop
| Name || ball_trap_1_ball
|-
| Start Disabled || Yes
|}
|}
:20. Open up the property window (Ctrl + T) for “path_ball_trap_02” and set this output:
{{clr}}
::{|
===Catcher Spotlight===
!   || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
[[File:portal_eball_catcher_spotlight.PNG|thumb|right|200px|Catcher Spotlight]]
 
Create a <code>[[point_spotlight]]</code> entity and enter the following properties:
{| class=standard-table
! Property Name || Value
|-
| Name || spotlight1
|-
| Color || 218 76 26
|-
| Spotlight Length || 256
|-
|-
| [[Image:Io11.png]] || OnPass || ball_trap_door || SetSpeed || 0 || 0.00 || No
| Spotlight Width || 32
|-
| HDR color scale || 2.0
|}
|}
:21. Create a [[point_spotlight]] entity (Shift + E) and name it “ball_trap_spotlight”
{{clr}}
:22.  Set the color for “ball_trap_spotlight” to '''”255 0 0”''', the beam length is normally the length of the room, and the width somewhere between 20 and 40.
===Catcher Filter===
:23.  Create an [[ambient_generic]] entity (Shift + E) and name it “ball_trap_sound”
[[File:portal_eball_catcher_filter.PNG|thumb|right|200px|Ball Filter]]
:24.  Set Sound Name for "ball_trap_sound" to '''“AlyxEMP.Charge”'''
 
:25  Open the propery window (Ctrl + T) for “trigger_ball_trap” and set these outputs:
Create a <code>filter_combineball_type</code> entity and enter the following properties:
::{|
{| class=standard-table
!   || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
! Property Name || Value
|-
| Parent || ball_trap_1_housing
|-
|-
| [[Image:Io11.png]] || OnStartTouch || trigger_ball_trap || Disable || <none> || 0.00 || No
| Name || filter_combine_ballpermit_alt
|-
|-
| [[Image:Io11.png]] || OnStartTouch || ball || Disable || <none> || 0.00 || No
| Ball Type || Launched by point_combine_ball_launcher
|}
{{clr}}
===Catcher Sounds===
[[File:portal_eball_catcher_sounds.PNG|thumb|right|200px|Catcher Sound]]
 
Create an <code>[[ambient_generic]]</code> entity and enter the following properties:
{| class=standard-table
!  Property Name || Value
|-
|-
| [[Image:Io11.png]] || OnStartTouch || !activator || Kill || <none> || 0.00 || No
| Name || sound_activate
|-
|-
| [[Image:Io11.png]] || OnStartTouch || ball_trap_ball || Enable || <none> || 0.00 || No
| Sound Name || AlyxEMP.Charge
|}
{{clr}}
===Catcher Setup===
[[File:portal_eball_catcher_setup.PNG|thumb|right|200px|Catcher Sound]]
 
Create a <code>[[logic_relay]]</code> entity and enter the following property:
{| class=standard-table
!  Property Name || Value
|-
| Name || relay_ball_trap_1_setup
|}
 
Enter the following outputs:
Enter the following output:
{| {{OutputsTable}}
| [[File:Io21.png]] || OnSpawn || ball_trap_1_ball || SetParentAttachment || ball_attachment || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnStartTouch || ball_trap_sprite || Enable || <none> || 0.00 || No
| [[File:Io21.png]] || OnSpawn || ball_trap_1_sprite || SetParentAttachment || ball_attachment || 0.00 || No
|}
{{clr}}
===Catcher Trigger===
[[File:portal_eball_catcher_trigger.PNG|thumb|right|200px|Catcher Trigger]]
 
Create a 96w*96l*32h cylinder with 8 sides with the <code>trigger</code> texture
 
Use the [[Hammer Transform Dialog]] and set its Y rotation value to 90.
 
Position the brush inside of the catcher.
 
Tie this brush to a <code>[[trigger_multiple]]</code> entity and enter the following properties:
 
{| class=standard-table
!  Property Name || Value
|-
| Name || ball_trap_1
|-
|-
| [[Image:Io11.png]] || OnStartTouch || ball_trap || SetAnimation|| close || 0.00 || No
| Filter Name || filter_combine_ballpermit_alt
|}
 
Enter the following outputs:
{| {{OutputsTable}}
| [[File:Io21.png]] || OnTrigger || !activator || Kill || <none> || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnStartTouch || ball_trap_spotlight || LightOff || <none> || 0.00 || No
| [[File:Io21.png]] || OnTrigger || ball_trap_1_ball || Enable || <none> || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnStartTouch || ball_door || SetSpeed || .5 || 0.00 || No
| [[File:Io21.png]] || OnTrigger || ball_trap_1_housing || SetAnimation || close || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnStartTouch || ball_trap_sound || PlaySound || <none> || 0.00 || No
| [[File:Io21.png]] || OnTrigger || ball_trap_1_housing || SetAnimation || closed || 2.00 || No
|-
| [[File:Io21.png]] || OnTrigger || ball_trap_1_sprite || ShowSprite || <none> || 0.00 || No
|-
| [[File:Io21.png]] || OnTrigger || energy_ball_launcher || Disable || <none> || 0.00 || No
|-
| [[File:Io21.png]] || OnTrigger || sound_activate || PlaySound || <none> || 0.00 || No
|-
| [[File:Io21.png]] || OnTrigger || spotlight1 || LightOff || <none> || 0.00 || No
|}
|}
{{note| I have found that the “ball_door” sounds are drowned out by the “ball_trap_sound”, you may want to adjust the delay for the PlaySound}}
The Aperture Science High Energy Pellet Target is now complete.


=Theory=
Under Flags, modify the following:
[[Image:launcher-catcher03.jpg|right|thumb|Working Energy Pellet Launcher and Target]]
 
These instructions illustrate the most basic use of the launcher and catchers. Theoretically you should be able to have one launcher and multiple catchers, or even catchers that reset themselves.
{{entity-flag-start}}
{{entity-flag|Clients|off|}}
{{entity-flag|Physics Objects|on|}}
{{entity-flag-end}}
 
{{clr}}
 
==Implementation==
 
You should have the same amount of launchers as catchers. If you have multiple catchers and launchers, remember to change the <code>energy_ball_launcher</code> in the trigger's outputs.


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


Return to [[Portal Level Creation]]
[[Category:Portal]]
[[Category:Level Design]]
[[Category:Tutorials]]

Latest revision as of 17:51, 19 April 2025

English (en)Русский (ru)Translate (Translate)
Portal Level Creation

Introduction

This page will show you how to create Energy Ball Launchers and Catchers.

Launcher

Launcher Base

Concrete Slab

Create a 8w*128l*128h brush with the nodraw texture. Tie this brush to a func_detail. Texture the front face with concrete/concrete_modular_wall001a and the border faces with signage/hazard_orange_03b. Rotate the textures if they aren't aligned.

Note.pngNote:The base isn't needed if your launcher is on a metal wall

Launcher Model

Launcher Model

Create a prop_dynamic entity and enter the following properties:

Property Name Value
Name ball_spawner_prop
World Model models/props/combine_ball_launcher.mdl

Launcher Lighting

Launcher Light Entity

Create a light entity and enter the following properties:

Property Name Value
Brightness 218 76 26 30
BrightnessHDR 218 76 26 30

Place the light inside the Launcher Model.

Launcher Clipping

Launcher Clip Brush

Create a 32w*64l*64h brush with the playerclip texture. Position this brush in front of the Launcher Base.

Launcher noportal

Launcher noportal volume

Create a 8w*96l*96h brush with the invisible texture.

Note.pngNote:The noportal brush isn't needed if your launcher is on a metal wall

Launcher Collision

Launcher Collision

Create a 1w*16l*16h brush with the nodraw texture. Position this brush in the front in the model. Tie this brush to a func_detail.

Launcher Spawner

Launcher Spawner

Create a point_energy_ball_launcher entity and position the entity right in front of the Collision Brush, touching the outer face.

Enter the following properties:

Property Name Value
Name energy_ball_launcher
Ball count 1
Min ball speed 200
Max ball speed 200
Ball radius 12.0
Ball Respawn Time 2.0
Note.pngNote: The Min ball speed and Max ball speed values can be changed, but make sure they are the same value. The minimum value to enter is 200 and the max is 400.

Sometimes under flags, the launcher starts inactive and gets activated when you touch a trigger.

Enter the following output:

  My Output Target Entity Target Input Parameter Delay Only Once
Io21.png OnPostSpawnBall ball_spawner_prop SetAnimation close 0.00 No

Ball Catcher

Note.pngNote:Ball Catchers are modified ball catchers from Half-Life 2: Episode One.

Catcher Base

Catcher Base

Create 2 8w*40l*128h brushes with the nodraw texture.

Create 2 8w*48l*40h brushes with the nodraw texture.

Texture the front faces with concrete/concrete_modular_wall001a and the outer edge faces with signage/hazard_orange_03b. Rotate the textures if they aren't aligned.

Create an 8w*48l*48h brush with the playerclip texture and put the brush inside of the concrete base so the player can't fall through.

Note.pngNote:The base isn't needed if your catcher is on a metal wall

Catcher Interior

Catcher Interior

Create 2 16w*16l*48h brushes with the nodraw texture.

Create 2 16w*48l*16h brushes with the nodraw texture.

Create a 16w*48l*48h brush with the nodraw texture.

Put these brushes behind the Catcher Base.

Catcher Model

Catcher Model

Create a prop_dynamic entity and enter the following properties:

Property Name Value
World Model models/props/combine_ball_catcher.mdl
Disable Shadows Yes
Name ball_trap_1_housing

Catcher Sprites

Catcher Sprites

Create an env_sprite entity and enter the following properties:

Property Name Value
Name ball_trap_1_sprite
Parent ball_trap_1_housing
Render FX Distort
Render Mode Additive
Framerate 30
Sprite Name materials/sprites/physring1.vmt
Scale 1.5
Size of Glow Proxy Geometry 0

Create another env_sprite entity and enter the following properties:

Property Name Value
Name ball_trap_1_sprite
Parent ball_trap_1_housing
Render FX Distort
Render Mode World Space Glow
Framerate 30
Sprite Name materials/sprites/glow01.vmt
Scale 2
Size of Glow Proxy Geometry 0

Catcher Ball

Ball Model

Create a prop_dynamic entity and enter the following properties:

Property Name Value
Parent ball_trap_1_housing
World Model models/Effects/combineball.mdl
Name ball_trap_1_ball
Start Disabled Yes

Catcher Spotlight

Catcher Spotlight

Create a point_spotlight entity and enter the following properties:

Property Name Value
Name spotlight1
Color 218 76 26
Spotlight Length 256
Spotlight Width 32
HDR color scale 2.0

Catcher Filter

Ball Filter

Create a filter_combineball_type entity and enter the following properties:

Property Name Value
Parent ball_trap_1_housing
Name filter_combine_ballpermit_alt
Ball Type Launched by point_combine_ball_launcher

Catcher Sounds

Catcher Sound

Create an ambient_generic entity and enter the following properties:

Property Name Value
Name sound_activate
Sound Name AlyxEMP.Charge

Catcher Setup

Catcher Sound

Create a logic_relay entity and enter the following property:

Property Name Value
Name relay_ball_trap_1_setup

Enter the following outputs: Enter the following output:

  My Output Target Entity Target Input Parameter Delay Only Once
Io21.png OnSpawn ball_trap_1_ball SetParentAttachment ball_attachment 0.00 No
Io21.png OnSpawn ball_trap_1_sprite SetParentAttachment ball_attachment 0.00 No

Catcher Trigger

Catcher Trigger

Create a 96w*96l*32h cylinder with 8 sides with the trigger texture

Use the Hammer Transform Dialog and set its Y rotation value to 90.

Position the brush inside of the catcher.

Tie this brush to a trigger_multiple entity and enter the following properties:

Property Name Value
Name ball_trap_1
Filter Name filter_combine_ballpermit_alt

Enter the following outputs:

  My Output Target Entity Target Input Parameter Delay Only Once
Io21.png OnTrigger !activator Kill <none> 0.00 No
Io21.png OnTrigger ball_trap_1_ball Enable <none> 0.00 No
Io21.png OnTrigger ball_trap_1_housing SetAnimation close 0.00 No
Io21.png OnTrigger ball_trap_1_housing SetAnimation closed 2.00 No
Io21.png OnTrigger ball_trap_1_sprite ShowSprite <none> 0.00 No
Io21.png OnTrigger energy_ball_launcher Disable <none> 0.00 No
Io21.png OnTrigger sound_activate PlaySound <none> 0.00 No
Io21.png OnTrigger spotlight1 LightOff <none> 0.00 No

Under Flags, modify the following:

Flag
Checkbox-off.png Clients
Checkbox-on.png Physics Objects

Implementation

You should have the same amount of launchers as catchers. If you have multiple catchers and launchers, remember to change the energy_ball_launcher in the trigger's outputs.

See also