Box dropper: Difference between revisions
Griffindavis (talk | contribs) mNo edit summary |
(Removed skill level) |
||
(33 intermediate revisions by 10 users not shown) | |||
Line 1: | Line 1: | ||
{{LanguageBar|title = Portal - Tutorial - Box Dropper}} | |||
{{Back | Portal Level Creation}} | |||
{{toc-right}} | |||
This tutorial will show step-by-step how to create the '''box dropper''', or '''vital apparatus vent''', seen throughout the [[Portal]] test chambers. The box droppers can be used to give the player a new weighted storage cube whenever their previous one is destroyed. | |||
{{clr}} | {{clr}} | ||
=== | == Construction == | ||
=== Dropper model === | |||
[[File:Box dropper models.jpg|right|thumb|300px|The models]] | |||
Create a <code>[[prop_dynamic]]</code>, set its model to <code>models/props/box_dropper.mdl</code>. | |||
Create a <code>prop_dynamic</code>, set its model to <code>models/props/box_dropper_cover.mdl</code> and name <code>box_dropper_model_cover</code>. | |||
Create | |||
Align the two entities so they are in the same place where the dropper should be in the map. | |||
{{clr}} | |||
=== Ceiling Arch === | |||
Use the [[Hammer Arch Properties|arch tool]] to create a <code>128L*128W*16H</code> arch above the <code>prop_dynamic</code> entities with the following settings: | |||
{| class="standard-table sortable" | |||
! Property Name !! Value | |||
|- | |||
| Wall width || 24 | |||
|- | |||
| Number of Sides || 8 | |||
|- | |||
| Arc || 360 | |||
|- | |||
| Start Angle || 0 | |||
|- | |||
| Add Height || 0 | |||
|} | |||
Tie this brush to a <code>[[func_detail]]</code> then use the [[Hammer Vertex Tool|vertex manipulation tool]] to move the corners of the arch so it resembles a rectangle with a hole in the middle. After that, texture the inner rim of the arch with <code>metal/metalwall061f</code>. Texture the underside of the arch with <code>concrete/concrete_modular_ceiling001a</code>. | |||
<gallery> | |||
Image:Box dropper arch.jpg|The arch | |||
Image:Box dropper arch2.jpg|The arch after vertex manipulation | |||
Image:Box dropper arch3.jpg|The arch textured | |||
</gallery> | |||
{{clr}} | |||
=== Ceiling shaft === | |||
[[File:Box_dropper_shaft.jpg|right|thumb|300px|The shaft seen from the outside]] | |||
[[File:Box_dropper_shaft2.jpg|right|thumb|300px|The inside of the shaft with nodraw hidden]] | |||
Create a shaft using brushes above the dropper with the dimensions of <code>128L*128W*256H</code> and split the sides of the shaft in two equal pieces with the [[clipping tool]]. Then proceed to texture the lower inner walls with <code>metal/metalwall_bts_006a</code>, top inner walls with <code>metal/metalwall_bts_006b_gradient</code> and inner ceiling with <code>lights/light_orange001</code>. | |||
{{clr}} | {{clr}} | ||
== | === Box Template === | ||
Create a small <code>128L*128W*112H</code> room above the dropper shaft with [[nodraw]] textured brushes. | |||
{{ | |||
[[ | Next, create a <code>[[prop_physics]]</code> entity in the middle of this room and set its model to <code>models/props/metal_box.mdl</code> and name to <code>box</code>. Give it the following outputs: | ||
{| {{OutputsTable}} | |||
| [[File:Io21.png]] || OnOutOfWorld || !activator || Kill || || 0.00 || No | |||
|- | |||
| [[File:Io12.png]] || OnOutOfWorld || <span style="color:red">logic_drop_box</span>|| Trigger || || 0.00 || Yes | |||
|} | |||
Create a <code>[[point_template]]</code> in the middle of the <code>box</code> entity. Set its name to <code>box_template</code> and set its first template to <code>box</code>. | |||
Create an <code>[[env_entity_maker]]</code> somewhere near the top of the shaft of the dropper. Set its name to <code>entity_box_maker</code> and set its ''Point_template to spawn'' to <code>box_template</code>. | |||
Create a <code>[[filter_activator_name]]</code> entity somewhere in the map. Set its name to <code>filter_boxes</code> and set its ''Filter Name'' to <code>box</code>. | |||
Create a <code>[[logic_auto]]</code> entity and enter the following output: | |||
{| {{OutputsTable}} | |||
| [[File:Io12.png]] || OnMapSpawn || <span style="color:red">entity_box_maker</span>|| ForceSpawn || || 0.00 || No | |||
|} | |||
=== Lid Brush === | |||
[[File:Box_dropper_stop_plugging.jpg|right|thumb|300px|<code>tube_stop_plugging</code>]] | |||
Create a <code>96L*96W*4H</code> nodraw textured brush just below the lid of the dropper. Tie this brush to a <code>[[func_brush]]</code> entity. Set its name to <code>stop_tube_plugging</code> and set its ''Start Disabled'' keyvalue to ''Yes''. | |||
Create a | |||
{{clr}} | |||
=== Lid Trigger === | |||
[[File:Box_dropper_trigger.jpg|right|thumb|300px|<code>trigger_box_dropper_clear</code>]] | |||
Create a <code>128L*128W*128H</code> [[Tool_textures#trigger|trigger]] textured brush around the box dropper models. | |||
Tie this brush to a <code>[[trigger_multiple]]</code> and enter the following properties: | |||
{| class=standard-table | {| class=standard-table | ||
! | ! Property Name || Value | ||
|- | |||
| Name || trigger_box_dropper_clear | |||
|- | |||
| Start Disabled || Yes | |||
|- | |||
| Filter Name || filter_boxes | |||
|} | |||
{{clr}} | |||
Under Flags, modify the following: | |||
{{entity-flag-start}} | |||
{{entity-flag|Physics Objects|on|}} | |||
{{entity-flag|Clients|off|}} | |||
{{entity-flag-end}} | |||
Now give it the following outputs: | |||
{| {{OutputsTable}} | |||
| [[File:Io11.png]] || OnEndTouch || entity_box_maker || ForceSpawn || || 0.00 || No | |||
|- | |||
| [[File:Io11.png]] || OnEndTouch || box_dropper_model_cover || SetAnimation || close || 0.00 || No | |||
|- | |||
| [[File:Io11.png]] || OnEndTouch || stop_tube_plugging || Enable || || 0.00 || No | |||
|- | |- | ||
| | | [[File:Io21.png]] || OnEndTouch || !self || Disable || || 0.00 || No | ||
|- | |- | ||
| | | [[File:Io11.png]] || OnEndTouch || stop_tube_plugging || Disable || || 2.00 || No | ||
|- | |- | ||
|OnTrigger || | | [[File:Io21.png]] || OnTrigger || !activator || Wake || || 0.00 || No | ||
|} | |} | ||
== | {{clr}} | ||
{| | === Lid Logic === | ||
Create a <code>[[logic_relay]]</code> and set its name to <code>logic_drop_box</code>. Give it the following outputs: | |||
{| {{OutputsTable}} | |||
| [[File:Io11.png]] || OnTrigger || box_dropper_model_cover || SetAnimation || open || 0.00 || No | |||
|- | |- | ||
| | | [[File:Io11.png]] || OnTrigger || stop_tube_plugging || Disable || || 0.00 || No | ||
|- | |- | ||
| | | [[File:Io11.png]] || OnTrigger || trigger_box_dropper_clear || Enable || || 0.00 || No | ||
|} | |} | ||
== | === Shaft Slopes === | ||
[[File:Box_dropper_funnel.jpg|right|thumb|300px|The sloped brushes]] | |||
Create brushes and use the clipping tool to shape them like depicted in the picture below. Tie all of these brushes to a <code>[[func_detail]]</code> entity. The dropper is now finished and ready to be implemented into a map. | |||
{{clr}} | |||
== Implementation == | |||
Place the dropper in the ceiling above where the box should drop. Texture the visible sides of the ceiling brushes with the <code>signage/hazard_orange_03b</code> texture. | |||
=== Box Setup === | |||
Set up a trigger to send the ''Trigger'' input to the <code>logic_drop_box</code> entity. This can be done in numerous ways, such as using a <code>[[trigger_once]]</code> to have the box drop when the player enters the room or a <code>[[trigger_look]]</code> to make the box drop when the player is looking at the dropper. | |||
=== Box Respawn === | |||
If there are [[Creating_a_portal/object_fizzler|fizzlers]] or [[Creating poison water|Hazard Liquid]] in the map, the box must be set up to respawn if it can be lost. For fizzlers, add a ''OnDissolveBox'' output that triggers <code>logic_drop_box</code> to the <code>[[trigger_portal_cleanser]]</code> entity. | |||
To make the box respawn if it's lost in goo, create a <code>trigger_multiple</code> within the goo volume with its filter set to <code>filter_boxes</code>, the ''Physics Objects'' flag set, and with the following outputs: | |||
{| {{OutputsTable}} | |||
| [[File:Io21.png]] || OnStartTouch || !activator || Kill || || 0.00 || No | |||
|- | |||
| [[File:Io11.png]] || OnStartTouch || logic_drop_box || Trigger || || 0.00 || No | |||
|} | |||
[[Category:Portal]] | [[Category:Portal]] | ||
[[Category:Level Design]] | |||
[[Category:Tutorials]] |
Latest revision as of 17:50, 19 April 2025
This tutorial will show step-by-step how to create the box dropper, or vital apparatus vent, seen throughout the Portal test chambers. The box droppers can be used to give the player a new weighted storage cube whenever their previous one is destroyed.
Construction
Dropper model
Create a prop_dynamic
, set its model to models/props/box_dropper.mdl
.
Create a prop_dynamic
, set its model to models/props/box_dropper_cover.mdl
and name box_dropper_model_cover
.
Align the two entities so they are in the same place where the dropper should be in the map.
Ceiling Arch
Use the arch tool to create a 128L*128W*16H
arch above the prop_dynamic
entities with the following settings:
Property Name | Value |
---|---|
Wall width | 24 |
Number of Sides | 8 |
Arc | 360 |
Start Angle | 0 |
Add Height | 0 |
Tie this brush to a func_detail
then use the vertex manipulation tool to move the corners of the arch so it resembles a rectangle with a hole in the middle. After that, texture the inner rim of the arch with metal/metalwall061f
. Texture the underside of the arch with concrete/concrete_modular_ceiling001a
.
Ceiling shaft
Create a shaft using brushes above the dropper with the dimensions of 128L*128W*256H
and split the sides of the shaft in two equal pieces with the clipping tool. Then proceed to texture the lower inner walls with metal/metalwall_bts_006a
, top inner walls with metal/metalwall_bts_006b_gradient
and inner ceiling with lights/light_orange001
.
Box Template
Create a small 128L*128W*112H
room above the dropper shaft with nodraw textured brushes.
Next, create a prop_physics
entity in the middle of this room and set its model to models/props/metal_box.mdl
and name to box
. Give it the following outputs:
My Output | Target Entity | Target Input | Parameter | Delay | Only Once | |
---|---|---|---|---|---|---|
![]() |
OnOutOfWorld | !activator | Kill | 0.00 | No | |
![]() |
OnOutOfWorld | logic_drop_box | Trigger | 0.00 | Yes |
Create a point_template
in the middle of the box
entity. Set its name to box_template
and set its first template to box
.
Create an env_entity_maker
somewhere near the top of the shaft of the dropper. Set its name to entity_box_maker
and set its Point_template to spawn to box_template
.
Create a filter_activator_name
entity somewhere in the map. Set its name to filter_boxes
and set its Filter Name to box
.
Create a logic_auto
entity and enter the following output:
My Output | Target Entity | Target Input | Parameter | Delay | Only Once | |
---|---|---|---|---|---|---|
![]() |
OnMapSpawn | entity_box_maker | ForceSpawn | 0.00 | No |
Lid Brush
Create a 96L*96W*4H
nodraw textured brush just below the lid of the dropper. Tie this brush to a func_brush
entity. Set its name to stop_tube_plugging
and set its Start Disabled keyvalue to Yes.
Lid Trigger
Create a 128L*128W*128H
trigger textured brush around the box dropper models.
Tie this brush to a trigger_multiple
and enter the following properties:
Property Name | Value |
---|---|
Name | trigger_box_dropper_clear |
Start Disabled | Yes |
Filter Name | filter_boxes |
Under Flags, modify the following:
Flag | ||||
![]() |
Physics Objects | |||
![]() |
Clients | |||
Now give it the following outputs:
Lid Logic
Create a logic_relay
and set its name to logic_drop_box
. Give it the following outputs:
Shaft Slopes
Create brushes and use the clipping tool to shape them like depicted in the picture below. Tie all of these brushes to a func_detail
entity. The dropper is now finished and ready to be implemented into a map.
Implementation
Place the dropper in the ceiling above where the box should drop. Texture the visible sides of the ceiling brushes with the signage/hazard_orange_03b
texture.
Box Setup
Set up a trigger to send the Trigger input to the logic_drop_box
entity. This can be done in numerous ways, such as using a trigger_once
to have the box drop when the player enters the room or a trigger_look
to make the box drop when the player is looking at the dropper.
Box Respawn
If there are fizzlers or Hazard Liquid in the map, the box must be set up to respawn if it can be lost. For fizzlers, add a OnDissolveBox output that triggers logic_drop_box
to the trigger_portal_cleanser
entity.
To make the box respawn if it's lost in goo, create a trigger_multiple
within the goo volume with its filter set to filter_boxes
, the Physics Objects flag set, and with the following outputs:
My Output | Target Entity | Target Input | Parameter | Delay | Only Once | |
---|---|---|---|---|---|---|
![]() |
OnStartTouch | !activator | Kill | 0.00 | No | |
![]() |
OnStartTouch | logic_drop_box | Trigger | 0.00 | No |