Crusher: Difference between revisions
m (Game reference.) |
Thunder4ik (talk | contribs) 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 | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnDissolve|| (your dropper's trigger's name) || Trigger || || 0.00 || No | ||
|} | |} | ||
5 | 5. 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 | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || crusher1 || SetAnimation || smash_in || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || crusher1_trigger_hurt || Enable || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || crusher1_math_counter || SetValue || 0 || 0.00 || No | ||
|} | |} | ||
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 | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || crusher1 || SetAnimation || smash_out || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || crusher1_trigger_hurt || Disable || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnTrigger || crusher1_math_counter || SetValue || 1 || 0.00 || No | ||
|} | |} | ||
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 | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnLessThan || crusher1_logic_relay_crush || CancelPending || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnLessThan || crusher1_logic_relay_crush || Disable || || 0.00 || No | ||
|} | |} | ||
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 | ||
|- | |- | ||
| [[ | | [[File: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: | |||
::{| 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 | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnProxyRelay || crusher1_logic_relay_crush || Trigger || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File:Io11.png]] || OnProxyRelay || crusher1_logic_relay_uncrush || Trigger || || 0.00 || No | ||
|- | |- | ||
| [[ | | [[File: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 == | ||
* [[ | * [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
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.
Creating Crushers

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

,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:
5. Create a logic_relay with the following settings:
Property Name Value Name crusher1_logic_relay_crush
with the following outputs:
6. Create a logic_relay with the following settings:
Property Name Value Name crusher1_logic_relay_uncrush
with the following outputs:
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:
8. Create a math_counter with the following settings:
Property Name Value Name crusher1_math_counter Maximum Legal Value 1
and the following outputs:
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:
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
- Download Crusher Instances (many custom options) - A crusher instance by Skotty