Creating an energy ball launcher and catcher
Introduction
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.
The Aperture Science High Energy Pellet Launcher
The launcher is comprised of three entities:
The model used is:
- models/props/combine_ball_launcher.mdl
To create the launcher:
- 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
- 3. Create a point_energy_ball_launcher entity (Shift + E) and set its name to "ball"
- 4. Place the new entity inside the dome of the “ball_launcher” model
- 5. Create a new brush 20 units or so square and 1 unit thick with the noclip texture
- 6. Turn this brush into a func_brush entity (Ctrl + T) and name it “ball_launcher_shield”
- 7. Place the “ball_launcher_shield” so that it is touching the black circular shield of the “ball_launcher model”
- 8. Open up the point_energy_ball_launcher properties (Ctrl + T) and set these outputs:
- 9. Adjust the keyvalues of point_energy_ball_launcher to set the desired direction, speed, type, and life of the ball.
The Aperture Science High Energy Pellet Launcher is now complete.

The Aperture Science High Energy Pellet Target
The target is comprised of eleven entities:
- an ambient_generic
- an env_sprite
- a filter_combineball_type
- a func_tracktrain
- a logic_relay
- two path_tracks
- a point_spotlight
- two prop_dynamics
- a trigger_multiple
The models used are:
- /models/props/combine_ball_catcher.mdl
- /models/Effects/combine_ball.mdl
To create the catcher:
- 1. Create a prop_dynamic entity (Shift + E) with a World Model of models/props/combine_ball_launcher.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/combine_ball.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:
- 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.
- 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.
- 16. Create a brush with the noclip texture
- 17. Turn this brush into a func_tracktrain entity and name it “ball_trap_door”
- 18. Place brush slightly above the two path_tracks 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 First Stop Target path_ball_trap_01 Move Sound d3_citadel.podarm_move Start Sound d3_citadel.podarm_move_start Stop Sound d3_citadel.podarm_move_stop
- 20. Open up the property window (Ctrl + T) for “path_ball_trap_02” and set this output:
- 21. Create a point_spotlight entity (Shift + E) and name it “ball_trap_spotlight”
- 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.
- 23. Create an ambient_generic entity (Shift + E) and name it “ball_trap_sound”
- 24. Set Sound Name for "ball_trap_sound" to “AlyxEMP.Charge”
- 25 Open tthe propery window (Ctrl + T) for “trigger_ball_trap” and set these outputs:

The Aperture Science High Energy Pellet Target is now complete.
Theory
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.