An Emancipation Grid (also Emancipation Grill or more commonly, Fizzler), is a special energy field in Portal and Portal 2 which resets the portal gun of any player (destroying both portals) and vaporizes other objects that touch it. It also blocks portals. These should be used wherever you don't want the player shooting one portal in one area and another in a second, and when you don't want the player to bring objects into another area. These destroy portals and objects.
In Portal 2, however, it is composed of an entity (trigger_portal_cleanser) combined with a pair of models (fizzler.mdl). The brush used for the trigger should be nodraw except for the two visible faces which have a fizzler texture on them.
As with most of Portal 2's testing elements there's an instance for this gameplay element as well. These are static and are only 128x128 units, and they were specifically designed to work in conjunction with the turbine elevator, so their use is very limited. However it comes in three designs, including decayed black and white, and clean black.
Manual Creation (Static)
This tutorial aims to be easy to understand even to users with little or no knowledge of Hammer.
Create a prop_dynamic and, for this tutorial, use the world model
"models/props/fizzler.mdl". There are a few more "fizzler" models for use in the Old Aperture themed maps, and for dynamic 'open-close' sequences. Change the skin on the modern models to choose between Clean, Rusty and Laserfield skins.
models/props/fizzler.mdl: Static model that is always open.
models/props/fizzler_dynamic.mdl: Dynamic model with open/close animations.
models/props_underground/underground_fizzler.mdl: A 128*128 model used for corridors and entrances. Use the "fizzler_underground" texture.
models/props_underground/underground_fizzler_wall.mdl: A model for larger fizzlers.
These are the main four, although there are more models, some more detailed and some less.
Now you would like to place one model at each end of the area you would like things would get 'fizzled' in a way they both face each other. The fizzler model, as you might have noticed, sinks in the wall to let the closing animation to be played if necessary; even though we are using the 'static' model the socket is still there.
To solve this we would make three brushes that surround the fizzler from the back, sides and part of the front (note that the side brushes would be the front side too), don't forget to tie these brushes to a func_detail.
We would now make two brushes, each 32x8 units and 128 units tall, we would place them on each side of the fizzler's model. Make sure the fizzler's attachment panels sit each on a brush as seen in the picture.
Add one more brush behind the model to seal off the void (if there's another wall there already, there's no need for it).
All these brushes can be textured with
nodraw, although the brushes on the top and bottom should be textured with the floor/ceiling texture.
Create a brush using the 'nodraw' texture (tools/toolsnodraw), extending from one fizzler model to the other. This will act as the emancipation area. It should be one unit thick and 128 units high. Tie the brush (pressing+ ) to a "trigger_portal_cleanser" entity. Set "Visible?" to yes and hit apply.
Open the Texture Application tool and select only the front and back faces of the fizzler, the parts that will be seen. Click "Browse" and filter "fizzler" select "effects/fizzler" and change the texture scale to 0.125 on both the X and the Y axis, now click "Apply".
You should now have a working fizzler! If you name it you can open and close it through the I/O system, in this case don't forget to chose a "models/props/fizzler_dynamic.mdl" and to add proper animations when it's closed and opened.
Manual Creation (Dynamic)
Sometimes, when a fizzler is a test element in a chamber, it must be enabled/disabled or opened/closed. The following tutorial teaches you how to make a dynamic fizzler.
1. Create 2 prop_dynamic entities with the following settings:
Property Name Value World Model models/props/fizzler_dynamic.mdl Name fizzlers Hold Animation Yes Collision Not Solid
2. Create a 128-unit high trigger_portal_cleanser brush with the following settings:
Property Name Value Name fizzler_brush Visible Yes
Select Flags :
- Physics Objects
3. Create a logic_relay entity with the following keyvalues:
Property Name Value Name relay_fizzler_enable
and the following outputs:
4. Create a logic_relay entity with following keyvalues:
Property Name Value Name relay_fizzler_disable
and following outputs:
An input is necesary to open and close the fizzler. In this tutorial, we'll use a simple prop_floor_button. When the player, or a cube, press the button, the fizzler will be disabled; likewise, when the button is unpressed, the fizzler becomes enabled.
5. Create a prop_floor_button entity with the following outputs:
Sometimes a fizzler should be higher or wider than 128 units, but as the fizzler model is only 128 units tall a set of another two fizzler models, and brushes, on top the ones you just created are required. To do this, simply copy-drag everything you just created 128 units high, repeat as many times as necessary.
Do not stretch the brushes to the height you need, as you want only a part of the field to flash in white when a portal shot hits it; For consistency official maps use this approach.
To make the fizzler wider we would need to split the brush to three parts. Just use the Clipping Tool ( + ) on the sides closest to the models, make sure both sides of the clip remain (both are highlighted in white). These two new brushes should be 64 units long. The middle brush should stretch between these two brushes - it's length doesn't matter. Again, open the Texture Application tool and color both front and back sides of the middle brush with
"effects/fizzler_center", one of the other brushes with
"effects/fizzler_l" and the one left with
"effects/fizzler_r". Then 'Fit' the texture to the face. Due to the way texture wrapping works, a small seam can be seen on the edge of the
r brushes. To fix this, use the Vertex Tool ( + ) to widen the center brush by about 4 units, shrinking the others to match. This ensures the textures don't resize in any way.
"fizzler_r"are the direction of the glow emitted by the device, an effect the middle part does not have.
For Old Aperture there are similar textures:
Creating a Portal 1 Fizzler
This wall of particles destroys any objects that come in contact with it and closes any portals that have been opened by the player.
First thing is first, due to the sheer size of the fizzler you might need to create an appropriate sized doorway to construct the fizzler in. However there are about three known particle effects that exist for this effect. Those three effects are:
- portal_cleanser - The normal sized fizzler effect, however it is the only known one that exists.
- Cleanser_edge_1 - A larger more messy effect, that is used for larger fizzlers, mainly this effect is only to be used at the fizzler's source.
- Cleanser_edge_2 - Similar to Cleanser_edge_1 but goes out farther and is probably intended for extremely larger fizzlers.
The first thing that needs to be created is the doorway that will act as the fizzler holder. You can also use a prop for this effect as well, however for the purpose of this tutorial a model will be used.
The available props for this is:
To use as a base we need to create a trigger_portal_cleanser, which in size should be 128x128. Note that this is the base size for a normal sized fizzler. Also the trigger should 2 Units thick.
Go ahead and name it if you want, that way you can keep track of how many you might have.
Next is to make a prop_static with the world model of: models/props/portal_cleanser_1.mdl. Go ahead and clone it (Shift+Drag) and rotate the cloned prop to make it appears as in the picture above.
You are free to line up everything you have so far directly in a straight line, or you can change it to your liking.
Now there is one last thing to be done.
The last thing to put in is a info_particle_system entity, with the particle system name Property set to: portal_cleanser. Last to do is to make sure it aligns with your trigger right directly in the center of the brush itself.
Make sure to also have the particle effect start active.
And thats it, now you're all done! Compile with vvis and vrad enabled and anything that walks through the fizzler should now automatically be fizzled. Good Luck.
If you have a box dropper that you want to spawn a new box if the player destroys hers in a fizzler, you can use the output OnDissolveBox, but only if your box prop_physics has the world model "models/props/metal_box.mdl" and/or is named box.
Since this can be limiting in certain conditions, the alternate solution is to make 2 trigger_portal_cleanser brushes, 1 unit thick right next to each other and use the output OnDissolve rather than OnDissolveBox. Create 2 filters, one that accepts the box name(s) you want, and one that rejects the box names you want. Apply one filter to one of your trigger_portal_cleanser, and the other filter to your other trigger_portal_cleanser. In this manner, one trigger_portal_cleanser will only handle you boxes dissolve, and the other will handle other physics objects, and portal fizzling.