Discouragement Field

From Valve Developer Community
Jump to: navigation, search

The Discouragement Field or Laser Field is a special energy field in Portal 2 which blocks only the player, not other objects. It can be considered as the counterpart to the Emancipation Grid. However, contact with the field instantly kills the player.


Laser Field example.
  • Download these two instance files: death_field_128x128.vmf and death_field_256x256.vmf and put them into your instance folder under instances\gameplay. (If only text comes up and you can't download it, press ctrl+A, copy it, paste it in Notepad, and save as death_field_128x128.vmf under All Files (for the 128x128 one)). (Website Dead)
  • Create a new func_instance in your map, select VMF Filename and click Browse... on the right and select one of the two death field instances.
  • The Discouragement Field is now ready and active on default. If you want to activate or deactivate the field, follow these steps:
    • Give the func_instance a name (Fix Up Name), for example death_field_1.
    • Create a trigger or button somewhere and give it these outputs:
My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger death_field_1 instance:enable;Trigger <none> 0.00 No

(for activation)

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger death_field_1 instance:disable;Trigger <none> 0.00 No

(for deactivation)

Manual Creation

Alright, for this tutorial we're going to create a Laser Field with a width of 128 units. Select the tools/toolsnodraw texture and create a 128w 1l 128h block brush.

Now click Shift + A to open the Texture Application Tool, select the front and the back face of the brush, apply the effects/laserplane texture and click "Fit".
Click for preview.
Note:I recommend that, after you hit "Fit", you also align it to the top, as well as adding 256 to the 'Y' axis. This will add to the visual effect by removing the annoying yet very common gap in the middle part of the field.

Next, tie the brush to an entity by clicking the toEntity button on the lower right side of the Hammer Interface and make it a func_brush with the following settings:

Property Name Value
Name deathfield1_brush
Render FX Constant Glow
Solidity Never Solid

Now, we want the Laser Field to kill the player when they try to pass through it. For this, create a 128w 2l 128h block brush that overlaps the first brush you made, apply the tools/toolstrigger texture to every face and make it a trigger_hurt with these settings:

Property Name Value
Name deathfield1_trigger
Damage 1000
Damage Cap 1000

And of course, make sure the Clients flag is enabled, otherwise, it won't work.

To make it look like the lasers aren't just coming out of nowhere, create two prop_static entities. One to the left and one to the right of the Death Field brush. Select the model models/props/fizzler.mdl and set the skin to "2".

Click for preview.

Now create an ambient_generic and place it roughly in the middle of the brush. Use the following settings:

Property Name Value
Name deathfield1_sound
Sound Name LaserGreen.BeamLoop
Volume 4
SourceEntityName deathfield1_brush

The flags Start silent and Is NOT looped must be disabled!

Alright, the Laser Field itself is ready to be used in-game now, but for sure you want to use the possibility of turning it on and off in your map. For this example we will use a prop_floor_button. Name it something like "button" and create the outputs:

My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnPressed deathfield1_brush Disable 0.00 No
Io11.png OnPressed deathfield1_trigger Disable 0.00 No
Io11.png OnPressed deathfield1_sound StopSound 0.00 No
Io11.png OnPressed deathfield1_light TurnOff 0.00 No
Io11.png OnUnPressed deathfield1_brush Enable 0.00 No
Io11.png OnUnPressed deathfield1_trigger Enable 0.00 No
Io11.png OnUnPressed deathfield1_sound PlaySound 0.00 No
Io11.png OnUnPressed deathfield1_light TurnOn 0.00 No

Congratulations! You have created a fully functional Laser Field for use in your map!