Difference between revisions of "Crusher"

From Valve Developer Community
Jump to: navigation, search
(Use comma attachment syntax)
 
(23 intermediate revisions by 12 users not shown)
Line 1: Line 1:
"That's a crusher. We sell those too" ~ Cave Johnson
+
{{otherlang2|
 
+
ru=Crusher:ru
 +
}}
 +
[[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.
 
+
[[Image: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 24: Line 27:
 
| 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 32: Line 36:
 
| Name || crusher1_trigger_hurt
 
| Name || crusher1_trigger_hurt
 
|-
 
|-
| Parent || crusher1
+
| Parent || crusher1,base_attach
 
|-
 
|-
 
| Damage || 1000
 
| Damage || 1000
Line 40: Line 44:
 
| 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 46: Line 50:
 
| Name || crusher1_trigger_hurt
 
| Name || crusher1_trigger_hurt
 
|-
 
|-
| Parent || crusher1
+
| Parent || crusher1,base_attach
 
|-
 
|-
 
| Visible || No
 
| Visible || No
Line 57: Line 61:
 
|}
 
|}
  
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 83: Line 78:
 
|}
 
|}
  
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 100: Line 95:
 
|}
 
|}
  
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 119: Line 114:
 
|}
 
|}
  
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 134: Line 129:
 
|}
 
|}
  
10. Create a [[func_instance_io_proxy]] entity with the following settings:{{why}}
+
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 144: Line 139:
 
!  || 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
+
| [[Image:Io11.png]] || OnProxyRelay || crusher1_logic_relay_crush || Trigger || || 0.00 || No
 
|-
 
|-
| [[Image:Io11.png]] || OnProxyRelay2 || crusher1_logic_relay_uncrush || Trigger || || 0.00 || No
+
| [[Image:Io11.png]] || OnProxyRelay || crusher1_logic_relay_uncrush || Trigger || || 0.00 || No
 
|-
 
|-
| [[Image:Io11.png]] || OnProxyRelay3 || crusher1_logic_compare || Compare || || 0.00 || No
+
| [[Image:Io11.png]] || OnProxyRelay || crusher1_logic_compare || Compare || || 0.00 || No
 
|}
 
|}
  
11. Create a [[logic_relay]] entity with the following settings:
+
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.
::{| 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
 
|}
 
  
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.
+
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 13:27, 7 August 2020

Русский
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.png Note: 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.png Note: 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