The script_intro entity is a singleplayer only entity that is used extensively in the intro sequence for Half-Life 2. It makes use of DirectX's buffer blending capabilities to overlay a second camera onto the main camera, i.e., the player's view, and to blend between the two views using various effects. This is also useful for doing traditional A-B camera exposition sequences.
Some of the possible uses for this entity include hallucination effects, and dream sequences, traditional A-B camera work for machinima, and so on.
The main issue with understanding this entity is the workflow isn't the same as other entities, in that it's highly time based. You don't just set keys and it works, but rather you'll have to trigger it at intervals using inputs, so a good working knowledge of Source's entity I/O system is required.
There's only one key that you have to deal with on this entity, and that's it's targetname. Once you have a name to refer to the entity by, all the work is done by sending it inputs. First thing that you have to do to use script_intro is to send in an Activate input. This will (I believe) initialize the secondary framebuffer it uses.
There are several inputs you have to send to 'initialize' the entity, before it functions the way you expect it to. Each will be explained. They are SetCameraViewEntity, FadeTo, SetNextBlendMode, and SetNextBlendTime.
Start by sending the SetCameraViewEntity input, with the name of the point_camera entity that you'll be using as the second view as a parameter. Remember, the player's viewpoint is the first camera, so in traditional film terms, the player is the A camera, and the point_camera that script_intro is using is the B camera. You'll send further inputs to script_intro to control blending between the A and B cameras.
You'll use the FadeTo value to tell the second camera what Alpha value it should display at. This is what controls how transparent the camera will be when it's overlayed over the first view. You use the input by sending a parameter with it with two values separated by a space. The first value is an integer with a range of 0-255, where 255 is completely opaque, and 0 is completely transparent. The second value is a number in seconds, that the fade will occur over. Next you'll want to use the SetNextBlendMode and SetNextBlendTime to accompish effects. SetNextBlendMode with a parameter of '6' is the most natural of blend modes. It will produce a straight fade between the two cameras. The other blend modes will produce special effects, such as the black and white and inversion effects seen in HL2's intro. Send a SetNextBlendMode input with a integer parameter of 0 through 6, each produces a different effect. This sets up the blend; you next send an input of SetNextBlendTime to execute the blend, with a parameter that equals the time value that you want the blend effect to occur over, in seconds. The blend mode will cause the camera to change effects when executed; so it will blend from one effect to the next.
Of note, the FadeTo input is used hackishly in the intro sequence to fadeout the player's view. This is because the env_fade entity can't be iterated, i.e. you can't have two env_fades, and fade from one to the other.
This is an incomplete list of the apparent function of the blend modes. These can be set in the entity by sending it a SetNextBlendMode and SetNextBlendTime or just SetBlendMode.
values:
1: Inverted Black & White with levels. This appears to map the screenbuffer to grayscale, invert the colors, and apply some sort of posterize filter.
2: Black As far as I can tell, this blanks both primary and secondary screen buffers.
3: Black & White Blend This maps the screenbuffers to grayscale, and blends between them.
4: A cam is normal, B is black This appears to blank the secondary screenbuffer, and leaves the primary unaffected.
5: B cam is normal, A is black This is the reverse of 4.
6: Normal mix, Overlay This appears to be the most straightforward mix between the two screenbuffers, applying a straight blend.
<key> <value>
<output name> <targetname>:<inputname>:<parameter>:<delay>:<max times to fire (-1 == infinite)>
<alpha> <duration>
Добавил ivan_cool