Dropper (Portal 2)
A dropper is a puzzle element in Portal 2. Objects like gel and cubes fall out of it. It can be hooked up to a button, among other possible input devices.
Contents
Creating Droppers
1. Create a func_instance entity with the following properties:
Property Name Value Fix up Name box_dropper VMF Filename instances/gameplay/cube_dropper_multiple_normal.vmf
If the cube dropper doesn't show up then save and reload so you can position it properly.
2. Align the bottom of the upper, rectangular section of the dropper (just above the cylindrical part) with the ceiling of your map.
The square may flash due to z-order issues with the ceiling. Then use the Clipping tool to cut a square out of your ceiling where the flashing square is. This will allow the cube to fall through. Once you've isolated the square piece of texture in your ceiling, go ahead and delete it. Be sure not to make the hole too big, or you'll have leaks.
3. Create the entity you want to activate the cube dropper (i.e. a trigger_once at the entrance to the room) and give it the following outputs:
List Of Instances
There are different instances for each kind of dropper, and several different designs. Just substitute the kind you need for the VMF Filename parameter above. Be aware, however, that some of these instances were made for special, one-time, in-game scenes or were leftovers from the development stages, and may be buggy. All files are under instances\gameplay\
.
Item, parameters Dropper style VMF Filename prop_weighted_cube, Standard Small, modern cube_dropper_dropontrigger_normal.vmf prop_weighted_cube, Standard Small, modern cube_dropper_multiple_normal.vmf prop_weighted_cube, standard Small, modern cube_dropper_normal.vmf prop_weighted_cube, Standard Long, exposed tube cube_dropper_large.vmf prop_weighted_cube, Standard Long exposed tube, dirty cube_dropper_large_dirty.vmf prop_weighted_cube, Reflector Small, modern reflectocube_dropper_dropontrigger_normal.vmf prop_weighted_cube, Reflector Small, modern reflectocube_dropper_multiple_normal.vmf prop_weighted_cube, Reflector Long, exposed tube reflectocube_dropper_large.vmf prop_weighted_cube, Reflector Long exposed tube, dirty reflectocube_dropper_large_dirty.vmf prop_weighted_cube, Sphere Small, modern sphere_dropper_dropontrigger_normal.vmf prop_weighted_cube, Sphere Small, modern sphere_dropper_multiple_normal.vmf prop_weighted_cube, Sphere Long, exposed tube sphere_dropper_large.vmf prop_weighted_cube, Sphere Long exposed tube, dirty sphere_dropper_large_dirty.vmf prop_weighted_cube, Sphere Small, modern item_dropper.vmf Gel, Water Small, modern paint_dropper_erase.vmf Gel, Bounce Small, modern paint_dropper_bounce.vmf Gel, Speed Small, modern paint_dropper_speed.vmf Gel, Stick (Reflection Gel) Small, open tube paint_dropper_stick.vmf Gel, $paint_type Small, modern paint_dropper.vmf prop_monster_box, walking Normal with music cube_dropper_a4.vmf prop_monster_box, hiding Normal with music cube_dropper_a4_box.vmf prop_monster_box, walking Normal with no tube cube_dropper_monster.vmf prop_monster_box, hiding Normal with no tube cube_dropper_monster_box.vmf Generic, whatever is placed in it Big box with opening cube_dropper_pendleton.vmf prop_weighted_cube, $paint_type, Wet Small, modern paint_bomb_dropper_modern.vmf prop_weighted_cube, Bounce, Dry Small, bare tube paint_bomb_dropper_bounce.vmf prop_weighted_cube, Speed, Dry Small, bare tube paint_bomb_dropper_speed.vmf prop_paint_bomb, $paint_type, $bomb_type Portal 1 Style paint_bomb_dropper.vmf prop_paint_bomb, $paint_type, $bomb_type Dirty paint_bomb_dropper_auto.vmf People, used in co-op maps Big box with opening cube_dropper_player.vmf
Manual Creation of Cube Droppers
Creating your own cube droppers is actually easier than you might think it to be. In fact, compared to the standard and PTI instances, this method of making cube droppers uses far fewer entities in general. You'll need:
- An env_entity_maker to continually spawn cubes for each time one gets lost
- A filter_activator_class
- A func_brush to cover just the opening of the dropper (use the tools/toolsinvisible texture for this brush entity)
- A logic_auto
- A point_template
- A prop_dynamic, which will be the dropper model
- A prop_weighted_cube or prop_monster_box
- A trigger_multiple, positioned inside of the dropper model and extending slightly beyond the dropper opening
To get an idea for precise placement of everything, check out the VMF instance instances/gameplay/cube_dropper_shared.vmf.
For the env_entity_maker, set these keyvalues:
Property Name Value Name cube_dropper_spawner Point_template To Spawn cube_dropper_template
For the filter_activator_class, set these keyvalues:
Property Name Value Name filter_weighted_cube Filter Classname prop_weighted_cube or prop_monster_box
For the func_brush, set these keyvalues:
Property Name Value Name cube_dropper_clip Disable shadows Yes
For the logic_auto, set these outputs:
For the point_template, set these keyvalues:
Property Name Value Name cube_dropper_template Template 1 cube_dropper_box
For the prop_dynamic, set these keyvalues:
Property Name Value Name cube_dropper_prop World Model models/props_backstage/item_dropper.mdl
If using a prop_monster_box, set these keyvalues:
Property Name Value Name cube_dropper_box Start as Box Yes
Otherwise, if using a prop_weighted_cube just set the name.
If you want your dropper to auto-respawn, also add this output to the cube:
And finally, for the trigger_multiple, set these keyvalues, flags, and outputs:
Property Name Value Name cube_dropper_trigger Filter Name filter_weighted_cube
Flag Enabled? Clients No Physics Objects Yes
If using a prop_monster_box, you'll also need to add one more output:
Finally, on an input device such as a prop_button, add these outputs:
If you want to auto-drop the first cube, relocate the second output to a trigger_once instead.
Droppers with a pre-placed cube
For this, you'll need a cube and a cube dropper of the same type.
If you don't have auto-respawn on and have a button for the dropper:
- Create your cube and give it a name.
- Create your button and set it to drop a cube when pressed.
- Set up an additional output for the button: to fizzle (dissolve) your pre-placed cube when pressed.
If you have auto-respawn on and no button for the dropper:
- Create your cube and set it to drop a cube when fizzled.
- That's it!
The advantage that this has is that now you can (for example) place a cube up high on a ledge but have the dropper in the middle of the room so that the player doesn't have to go through the tedium of retrieving the cube again. You might also use it to bring the cube a bit closer to the players when they enter an area while leaving the dropper a bit further away.
Manual Creation of Gel Droppers
Interestingly, all gel isn't always dispensed in the same way at Aperture. Sometimes it's a flow, and other times it's a great, big ball of gel. The former can easily be accomplished by using the info_paint_sprayer entity, but the latter requires the use of the prop_paint_bomb entity and some additional stuff. In either case, you can set the type of gel you want to use.
To make your own gel dropper using a prop_paint_bomb, you'll need:
- An env_entity_maker
- Two logic_relays
- A point_template
- A prop_paint_bomb
- Some prop_statics for the pipe(s) used to deliver the gel (look in models/props_underground in the Model Browser to find the relevant models)
For the env_entity_maker, set these keyvalues and outputs:
Property Name Value Name gel_dropper_spawner Point_template To Spawn gel_dropper_template
For the first logic_relay, set these keyvalues and outputs:
Property Name Value Name gel_dropper_spawner_rl
For the second logic_relay, set these keyvalues and outputs:
Property Name Value Name gel_dropper_control_rl
For the point_template, set these keyvalues:
Property Name Value Name gel_dropper_template Template 1 gel_dropper_bomb
For the prop_paint_bomb, set these keyvalues and outputs:
Property Name Value Name gel_dropper_bomb Paint Type <Select accordingly for your puzzle>
Finally, on an input device such as a floor button, set these outputs:
This design allows for any input device to control the gel dropper while at the same time being virtually unbreakable by spamming input.