Valve Developer Union

Power Up: More Special Effects in Half-Life

(May 13, 2018)

(Community guide by Windawz, with information adapted from the Half-Life Red Alert site)

As discussed in the original guide, Half-Life cleverly used entities and sequences to give the virtual world of Black Mesa more life than was common in PC games at the time. In this guide, we'll go over more examples of notable scripted sequences and special effects used throughout the game.

"Anomalous Materials"


The scientists in the stalls of the Sector C bathroom (where the player first gets the HEV suit) are an interesting bit of entity reuse. These scientists don't use the normal scientist entity; instead, they use a special one, monster_sitting_scientist. This is normally used for the scientists typing at computers and terminals throughout the lab. They have only one animation, that of typing, but as they're never seen from the legs up, this isn't much of an issue.

A scientist typing away in a stall
A scientist typing away in a stall

"Office Complex"


One of the most noteworthy scenes in this part of the game is of a scientist diving out of the window of an office, with a zombie falling out of the upper walkway and another breaking through the wall following suit. This is a complex scene, consisting of three separate multi_manager entities to trigger and delay each of its parts.

The scene in question Its setup in the editor
Left: The scene in question
Right: Its setup in the editor

A simple trigger_once begins the sequence, targeting the divestart multi_manager. This triggers the scripted_sequence entity (named dive), the func_breakable glass (named window), and the two other multi_manager entities (both named zombie), in that order. (zombie is also the name of the scripted_sequence used to begin animating the zombie that breaks through the wall.)

The dive scripted sequence grabs the monster_scientist, divingbob, and flings him through the window. A trigger_push gets him running away towards the player, and a separate trigger_relay kills off the trigger_push after it's been used. The zombie breaking through the wall, breakout begins his kick_punch_wall sequence, as the zombie targetname has been triggered. (An additional trigger_once acts as insurance in case the zombie targetname isn't triggered by the divestart multi_manager.)

The second multi_manager controls the breaking of the wall, which is made up of several func_breakable entities. Once destroyed, the zombie has a path to take and will likely begin to give chase to the player.

The third multi_manager entity controls the zombie falling down through the glass. zjump, the scripted_sequence that throws the zombie, jumperz, through the glass, goes first, followed by the shattering of the zwindow breakable. An env_sprite and an ambient_generic are paired to cause the blood and thud of the zombie hitting the floor. Another trigger_push gets this zombie moving once more, with another trigger_relay to delete it once it's been used.

The c1a2b window scene in flow chart form
The c1a2b window scene in flow chart form

Here's the above sequence in flow chart form, showing what triggers what. The green boxes refer to the scientist sequence, the blue boxes refer to the zombie breaking out of the wall, and the red boxes refer to the zombie falling from the walkway. The numbered arrows represent, in seconds, the length of time the action is delayed.

Scientist dangling Oh wait he's fine
Left: Scientist dangling
Right: Oh wait he's fine

Another scene, where a scientist dangles precariously from a ladder, can be found on the same map. The player comes into contact with two triggers as they ascend. One trigger causes the scientist to bemoan his inability to hold on to the ladder, using a scripted_sentence entity playing the !sc_dangling sentence, and another trigger higher up in the shaft causes him to play his fall_elevator sequence using a scripted_sequence entity.

"We've Got Hostiles!"


There's a scene in this map where large chunks of debris fall on the player as they navigate a duct system, trying to make it to the surface as it's bombarded by mortar fire. In addition to some concrete func_breakable entities, a few larger pieces of debris fall, including a fan and part of a ladder, both of which are actually func_train entities set to fall when the player enters the ducts.

Watch your head What this all looks like in the editor
Left: Watch your head
Right: What this all looks like in the editor

"Power Up"


This map provides an excellent example of the use of env_beam. A pipe acting as a blow torch sticks out of the top floor of this area. This is created by an env_beam entity with its texture set to sprites/fire.spr and its two ends set up at the mouth of the pipe and the end of the flame. The beam's damage value is set to 1000 so as to seriously injure whatever it touches. Spawnflags 1 (Start On) and 256 (Shade End) are also set; some beam sprites might look best when you to shade the start instead.

Flame Flame's keyvalues
Left: Flame
Right: Flame's keyvalues


On the way to the generator room, you pass through a shaft filled with toxic waste. Similar to the lava pits in Quake, this shaft has blobs that fly up out of it at the player. The setup is similar to the toxic waste cannister during "Black Mesa Inbound", in map c0a0d: an env_shooter targeting two multi_manager entities that trigger one another in a five-second loop.

Greeeeeeeeen A look at the env_shooter's keyvalues
Left: Greeeeeeeeen
Right: A look at the env_shooter's keyvalues

In another part of the map, a badly wounded marine is dragged into a hole in the wall by a bullsquid, breaking his leg and leaving blood stains about. Once again, the scene is perfectly tuned to the brushwork, with a multi_manager triggering both the scripted_sequence for the bullsquid and the one for the soldier.

Crunch Several scripted_sequences
Left: Crunch
Right: Several scripted_sequences


This map provides a rare example of a model being used as decoration in a GoldSrc map. The spinning, holographic globe inside the rocket bunker is actually a cycler entity. Normally reserved for Valve's internal use in "zoo" maps, the cycler gets its name because it cycles through the model's sequences when shot. This is why the globe bleeds and jitters slightly when shot. Two env_render entities give the globe its transparent effect using the "additive" render mode.

Nice globe pew pew :3 It's a model!
Left: Nice globe
Right: It's a model!

There's still yet more examples of Valve being creative with reusing entities and creating elaborate sequences to delight and shock the player. Being inventive pays off, doesn't it?