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.
==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:
::
	My Output	Target Entity	Target Input 	Parameter	Delay	Only Once
	OnTrigger	box_dropper 	instance:cube_dropper;Trigger 	 	0.00 	No
	OnTrigger	box_dropper 	instance:cube_dropper_autorespawn;Enable	 	0.00 	No
===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:
::
	My Output 	Target Entity 	Target Input	Parameter	Delay	Only Once
	OnMapSpawn	cube_dropper_spawner	ForceSpawn 	 	1.00 	No
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:
::
	My Output	Target Entity 	Target Input	Parameter	Delay	Only Once
	OnFizzled	cube_dropper_trigger	Enable 	 	0.00 	No
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
::
	My Output 	Target Entity 	Target Input 	Parameter 	Delay	Only Once
	OnStartTouch 	cube_dropper_prop 	Skin 	1 	0.00 	No
	OnStartTouch 	cube_dropper_prop 	SetAnimation 	item_dropper_open 	0.00 	No
	OnStartTouch 	cube_dropper_prop 	SetDefaultAnimation	item_dropper_idle 	0.10 	No
	OnStartTouch 	cube_dropper_clip 	Disable 	 	0.30 	No
	OnEndTouchAll	cube_dropper_prop 	Skin 	0 	1.30 	No
	OnEndTouchAll	cube_dropper_prop 	SetAnimation 	item_dropper_close 	0.00 	No
	OnEndTouchAll	cube_dropper_prop 	SetDefaultAnimation	item_dropper_idle_closed 	0.10 	No
	OnEndTouchAll	cube_dropper_clip 	Enable 	 	0.00 	No
	OnEndTouchAll	!activator 	AddOutput 	OnUser1 !self:Dissolve:0:0:1	0.00 	No
	OnEndTouchAll	!self 	Disable 	 	0.00 	No
	OnEndTouchAll	cube_dropper_spawner	ForceSpawn 	 	1.50 	No
If using a prop_monster_box, you'll also need to add one more output:
::
	My Output 	Target Entity 	Target Input 	Parameter	Delay	Only Once
	OnEndTouchAll	cube_dropper_box	BecomeMonster	 	0.00 	No
Finally, on an input device such as a prop_button, add these outputs:
::
	My Output	Target Entity 	Target Input	Parameter	Delay	Only Once
	OnPressed	cube_dropper_box 	FireUser1 	 	0.00 	No
	OnPressed	cube_dropper_trigger	Enable 	 	0.00 	Yes
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
::
	My Output 	Target Entity 	Target Input 	Parameter	Delay	Only Once
	OnEntitySpawned	gel_dropper_control_rl	Disable 	 	0.00 	No
	OnEntitySpawned	gel_dropper_control_rl	CancelPending	 	0.00 	No
For the first logic_relay, set these keyvalues and outputs:
::
Property Name	Value
Name 	gel_dropper_spawner_rl
::
	My Output	Target Entity 	Target Input	Parameter	Delay	Only Once
	OnTrigger	gel_dropper_spawner	ForceSpawn 	 	0.50 	No
For the second logic_relay, set these keyvalues and outputs:
::
Property Name	Value
Name 	gel_dropper_control_rl
::
	My Output	Target Entity 	Target Input	Parameter	Delay	Only Once
	OnTrigger	gel_dropper_spawner_rl	Trigger 	 	0.00 	No
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>
::
	My Output 	Target Entity 	Target Input	Parameter	Delay	Only Once
	OnExploded	gel_dropper_spawner_rl	Trigger 	 	0.10 	No
	OnExploded	gel_dropper_control_rl	Enable 	 	0.10 	No
Finally, on an input device such as a floor button, set these outputs:
::
	My Output 	Target Entity 	Target Input 	Parameter	Delay	Only Once
	OnPressed 	gel_dropper_spawner_rl	Enable 	 	0.10 	No
	OnPressed 	gel_dropper_control_rl	Trigger 	 	0.20 	No
	OnUnPressed	gel_dropper_spawner_rl	Disable 	 	0.00 	No
	OnUnPressed	gel_dropper_spawner_rl	CancelPending	 	0.00 	No
This design allows for any input device to control the gel dropper while at the same time being virtually unbreakable by spamming input.
Category:Portal 2 Level Design
Category:Portal 2 Tutorials