Crusher: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (Game reference.)
m (Unicodifying, replaced: [[Image: → [[File: (14))
 
(27 intermediate revisions by 16 users not shown)
Line 1: Line 1:
{{lang|Crusher}}
[[File:Crushericon.png|thumb|right]]
In [[Portal 2]], '''Crushers''' are [[Panels]] with spikes. Like panels, they are attached to robotic arms. However, directly behind the robotic arm is a massive piston which drives the crusher.
In [[Portal 2]], '''Crushers''' are [[Panels]] with spikes. Like panels, they are attached to robotic arms. However, directly behind the robotic arm is a massive piston which drives the crusher.
 
[[File:Portal2crusherpanel.PNG|thumb|right|300px|The Crusher panel]]
== Creating Crushers ==
== Creating Crushers ==
{{note|As an alternate to creating a crusher from scratch, there is an instance available for download [[Crusher#External Links|here]].}}


1. Create a [[prop_dynamic]] entity with the following settings:
1. Create a [[prop_dynamic]] entity with the following settings:
Line 22: Line 25:
| Name || crusher1_brush
| Name || crusher1_brush
|-
|-
| Parent || crusher1
| Parent || crusher1,base_attach
|}
|}
{{note|Hammer will indicate that the parent keyvalue is invalid, because of the extra <code>,base_attach</code>. Ignore it, it will work fine in-game. This is needed to make the brush follow the crusher's animation.}}
3. Create a <code>200x112x192</code> block brush around the previous brush. Tie it to a [[trigger_hurt]] entity with the following settings:
3. Create a <code>200x112x192</code> block brush around the previous brush. Tie it to a [[trigger_hurt]] entity with the following settings:
::{| class=standard-table
::{| class=standard-table
Line 30: Line 34:
| Name || crusher1_trigger_hurt
| Name || crusher1_trigger_hurt
|-
|-
| Parent || crusher1
| Parent || crusher1,base_attach
|-
|-
| Damage || 1000
| Damage || 1000
Line 38: Line 42:
| Damage Type || CRUSH
| Damage Type || CRUSH
|}
|}
4. Create a <code>200x96x192</code> block brush around the trigger_hurt brush. Tie it to a [[trigger_portal_cleanser]] entity with the following settings:
4. Create a <code>200x96x192</code> block brush around the [[trigger_hurt]] brush. Tie it to a [[trigger_portal_cleanser]] entity with the following settings:
::{| class=standard-table
::{| class=standard-table
!  Property Name || Value
!  Property Name || Value
Line 44: Line 48:
| Name || crusher1_trigger_hurt
| Name || crusher1_trigger_hurt
|-
|-
| Parent || crusher1
| Parent || crusher1,base_attach
|-
|-
| Visible || No
| Visible || No
Line 52: Line 56:
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || OnDissolve|| (your dropper's trigger's name) || Trigger || || 0.00 || No
| [[File:Io11.png]] || OnDissolve|| (your dropper's trigger's name) || Trigger || || 0.00 || No
|}
|}


5. Create a [[logic_auto]] entity and set up the outputs as follows:
5. Create a [[logic_relay]] with the following settings:
::{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[Image:Io11.png]] || OnMapSpawn || crusher1_brush || SetParentAttachmentMaintainOffset || base_attach || 0.05 || No
|-
| [[Image:Io11.png]] || OnMapSpawn || crusher1_trigger_hurt || SetParentAttachmentMaintainOffset || base_attach || 0.05 || No
|}
 
6. Create a [[logic_relay]] with the following settings:
::{| class=standard-table
::{| class=standard-table
!  Property Name || Value
!  Property Name || Value
Line 74: Line 69:
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || OnTrigger  || crusher1 || SetAnimation || smash_in || 0.00 || No
| [[File:Io11.png]] || OnTrigger  || crusher1 || SetAnimation || smash_in || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger  || crusher1_trigger_hurt || Enable || || 0.00 || No
| [[File:Io11.png]] || OnTrigger  || crusher1_trigger_hurt || Enable || || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger  || crusher1_math_counter || SetValue || 0 || 0.00 || No
| [[File:Io11.png]] || OnTrigger  || crusher1_math_counter || SetValue || 0 || 0.00 || No
|}
|}


7. Create a [[logic_relay]] with the following settings:
6. Create a [[logic_relay]] with the following settings:
::{| class=standard-table
::{| class=standard-table
!  Property Name || Value
!  Property Name || Value
Line 91: Line 86:
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || OnTrigger  || crusher1 || SetAnimation || smash_out || 0.00 || No
| [[File:Io11.png]] || OnTrigger  || crusher1 || SetAnimation || smash_out || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger  || crusher1_trigger_hurt || Disable || || 0.00 || No
| [[File:Io11.png]] || OnTrigger  || crusher1_trigger_hurt || Disable || || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnTrigger  || crusher1_math_counter || SetValue || 1 || 0.00 || No
| [[File:Io11.png]] || OnTrigger  || crusher1_math_counter || SetValue || 1 || 0.00 || No
|}
|}


8. Create a [[logic_compare]] with the following settings:
7. Create a [[logic_compare]] with the following settings:
::{| class=standard-table
::{| class=standard-table
!  Property Name || Value
!  Property Name || Value
Line 112: Line 107:
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || OnLessThan || crusher1_logic_relay_crush || CancelPending || || 0.00 || No
| [[File:Io11.png]] || OnLessThan || crusher1_logic_relay_crush || CancelPending || || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnLessThan || crusher1_logic_relay_crush || Disable || || 0.00 || No
| [[File:Io11.png]] || OnLessThan || crusher1_logic_relay_crush || Disable || || 0.00 || No
|}
|}


9. Create a [[math_counter]] with the following settings:
8. Create a [[math_counter]] with the following settings:
::{| class=standard-table
::{| class=standard-table
!  Property Name || Value
!  Property Name || Value
Line 129: Line 124:
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || OutValue || crusher1_logic_compare || SetValue|| || 0.00 || No
| [[File:Io11.png]] || OutValue || crusher1_logic_compare || SetValue|| || 0.00 || No
|}
 
10. Create a [[func_instance_io_proxy]] entity with the following settings:
::{| class=standard-table
!  Property Name || Value
|-
| Name || crusher1_proxy_crush
|}
and the following outputs:
::{| class=standard-table
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| [[Image:Io11.png]] || OnProxyRelay1 || crusher1_logic_relay_crush || Trigger || || 0.00 || No
|-
| [[Image:Io11.png]] || OnProxyRelay2 || crusher1_logic_relay_uncrush || Trigger || || 0.00 || No
|-
| [[Image:Io11.png]] || OnProxyRelay3 || crusher1_logic_compare || Compare || || 0.00 || No
|}
|}


11. Create a [[logic_relay]] entity with the following settings:
9. In order to allow the firing of outputs for entities in a [[func_instance]] you'll have to create a [[func_instance_io_proxy]] entity with the following settings:
::{| class=standard-table
::{| class=standard-table
!  Property Name || Value
!  Property Name || Value
Line 159: Line 137:
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
|-
|-
| [[Image:Io11.png]] || OnProxyRelay1 || crusher1_logic_relay_crush || Trigger || || 0.00 || No
| [[File:Io11.png]] || OnProxyRelay || crusher1_logic_relay_crush || Trigger || || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnProxyRelay2 || crusher1_logic_relay_uncrush || Trigger || || 0.00 || No
| [[File:Io11.png]] || OnProxyRelay || crusher1_logic_relay_uncrush || Trigger || || 0.00 || No
|-
|-
| [[Image:Io11.png]] || OnProxyRelay3 || crusher1_logic_compare || Compare || || 0.00 || No
| [[File:Io11.png]] || OnProxyRelay || crusher1_logic_compare || Compare || || 0.00 || No
|}
|}


12. Set up triggers to open or close the crusher by triggering the proxy relays on '''crusher1_proxy_crush'''. Use '''crusher1_logic_compare'''  to get the state of the crusher.
10. Set up triggers to open or close the crusher by triggering the proxy relays on '''crusher1_proxy_crush'''. Use '''crusher1_logic_compare'''  to get the state of the crusher.


Or if you're feeling lazy just copy the file from "Instances" to "Prefabs" and add your trigger in the once you load the prefab and un-group it


== See also ==
== External Links ==
* [[Portal 2 Level Creation]]
* [http://forums.thinking.withportals.com/downloads.php?view=detail&df_id=1092 Download Crusher Instances (many custom options)] - A crusher instance by [http://forums.thinking.withportals.com/memberlist.php?mode=viewprofile&u=3264 Skotty]


[[Category:Portal 2 Level Design]]
[[Category:Portal 2 Level Design]]
[[Category:Portal 2 Tutorials]]
[[Category:Portal 2 Tutorials]]

Latest revision as of 08:43, 8 January 2024

English (en)Русский (ru)中文 (zh)Translate (Translate)
Crushericon.png

In Portal 2, Crushers are Panels with spikes. Like panels, they are attached to robotic arms. However, directly behind the robotic arm is a massive piston which drives the crusher.

The Crusher panel

Creating Crushers

Note.pngNote:As an alternate to creating a crusher from scratch, there is an instance available for download here.

1. Create a prop_dynamic entity with the following settings:

Property Name Value
World Model models/anim_wp/cursher/crusher.mdl
Name crusher1
Collision Not Solid
Hold animation? Yes

2. Create a 128x64x192 block brush around the spikes on the model. Tie it to a func_brush entity with the following settings:

Property Name Value
Name crusher1_brush
Parent crusher1,base_attach
Note.pngNote:Hammer will indicate that the parent keyvalue is invalid, because of the extra ,base_attach. Ignore it, it will work fine in-game. This is needed to make the brush follow the crusher's animation.

3. Create a 200x112x192 block brush around the previous brush. Tie it to a trigger_hurt entity with the following settings:

Property Name Value
Name crusher1_trigger_hurt
Parent crusher1,base_attach
Damage 1000
Damage Cap 1000
Damage Type CRUSH

4. Create a 200x96x192 block brush around the trigger_hurt brush. Tie it to a trigger_portal_cleanser entity with the following settings:

Property Name Value
Name crusher1_trigger_hurt
Parent crusher1,base_attach
Visible No

and the following outputs:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnDissolve (your dropper's trigger's name) Trigger 0.00 No

5. Create a logic_relay with the following settings:

Property Name Value
Name crusher1_logic_relay_crush

with the following outputs:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger crusher1 SetAnimation smash_in 0.00 No
Io11.png OnTrigger crusher1_trigger_hurt Enable 0.00 No
Io11.png OnTrigger crusher1_math_counter SetValue 0 0.00 No

6. Create a logic_relay with the following settings:

Property Name Value
Name crusher1_logic_relay_uncrush

with the following outputs:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger crusher1 SetAnimation smash_out 0.00 No
Io11.png OnTrigger crusher1_trigger_hurt Disable 0.00 No
Io11.png OnTrigger crusher1_math_counter SetValue 1 0.00 No

7. Create a logic_compare with the following settings:

Property Name Value
Name crusher1_logic_compare
Initial Value 0
Compare Value 1

and the following outputs:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnLessThan crusher1_logic_relay_crush CancelPending 0.00 No
Io11.png OnLessThan crusher1_logic_relay_crush Disable 0.00 No

8. Create a math_counter with the following settings:

Property Name Value
Name crusher1_math_counter
Maximum Legal Value 1

and the following outputs:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OutValue crusher1_logic_compare SetValue 0.00 No

9. In order to allow the firing of outputs for entities in a func_instance you'll have to create a func_instance_io_proxy entity with the following settings:

Property Name Value
Name crusher1_proxy_crush

and the following outputs:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnProxyRelay crusher1_logic_relay_crush Trigger 0.00 No
Io11.png OnProxyRelay crusher1_logic_relay_uncrush Trigger 0.00 No
Io11.png OnProxyRelay crusher1_logic_compare Compare 0.00 No

10. Set up triggers to open or close the crusher by triggering the proxy relays on crusher1_proxy_crush. Use crusher1_logic_compare to get the state of the crusher.

Or if you're feeling lazy just copy the file from "Instances" to "Prefabs" and add your trigger in the once you load the prefab and un-group it

External Links