# Difference between revisions of "List Of Material Proxies"

To do: There are still lots of undocumented proxies

## Calculation

`Add` Adds two variables.

`srcVar1`
`srcVar2`
`resultVar`

`Multiply` Multiplies two variables.

`srcVar1`
`srcVar2`
`resultVar`

`Subtract` Subtracts the second variable from the first.

`srcVar1`
`srcVar2`
`resultVar`

`Divide` Divides the first variable by the second.

`srcVar1`
`srcVar2`
`resultVar`

`Equals` Copies the value of a variable to another.

`srcVar1`
`resultVar`

`Abs` Computes the absolute (i.e. unsigned) value of a variable.

`srcVar1`
`resultVar`

`Frac`

Returns the fractional component of a variable.
Tip: frac(4.23) = .23
For integer values, no change occurs.
`srcVar1`
`resultVar`

`Int`

Returns the integer component of a variable.
Tip: int(4.23) = 4
`srcVar1`
`resultVar`

`Clamp` Keeps a variable within a specified range.

`min`
`max`
`srcVar1`
`resultVar`
srcVar1 and resultVar can be the same.

`LessOrEqual` Compares the first value to the second.

`lessEqualVar`
`greaterVar`
Variable to copy to `resultVar` if this condition is met.
`srcVar1`
`srcVar2`
`resultVar`

`SelectFirstIfNonZero` Selects the first value over the second if it is anything other than zero.

`srcVar1`
`srcVar2`
`resultVar`

`WrapMinMax` (in all games since )
Constrains a value into a range, wrapping around if it exceeds it.

`srcVar1`
The value to constrain.
`minVal`
`maxVal`
Range to constrain the value to. If min is less than max, min is always returned.
`resultVar`
The variable to write the results to.

`Exponential` A value that changes at a faster and faster rate.

`minVal`
`maxVal`
Upper and lower value clamps.
`srcVar1`
`offset`
`scale`
`resultVar`
resultVar = scale * exp( srcVar1 + offset )
Tip: exp(5) = 148.413159

## Number generation

`Sine` A sine wave.

`sineperiod`
Period between wave peaks, in seconds.
`sinemin`
`sinemax`
Values at the top and bottom of the wave
`timeoffset`
Used to offset the starting position of the wave
`resultVar`

`LinearRamp` An ever-increasing float value.

`rate`
Units per second.
`initialValue`
Value at map start.
`resultVar`

`CurrentTime` The number of seconds the current map has been running on the server for.

`resultVar`
This is intended to set the `\$time` shader variable, used by several shaders to adjust their effects over time.

`UniformNoise` A noisy signal where each value is equally likely to occur.

`minVal`
`maxVal`
`resultVar`

`GaussianNoise` A noisy signal where values are biased towards the average.

`mean`
The average value around which the noise will centre
`halfWidth`
The distance from the average at which it's only 30% likely to occur.
`minVal`
`maxVal`
`resultVar`

`MatrixRotate` A rotation matrix from the provided axis and angle.

`axisVar`
Axis of rotation, in the format `[x y z]`
`angle`
Degrees of rotation around axis.
`resultVar`
The result of this is a transformation matrix, suitable to set `\$basetexturetransform` and other similar variables.

`PlayerProximity` The distance between the entity the material is applied to and the local player.

`scale`
The value is rescaled to be between 0 and the scale value.
`resultVar`

`PlayerTeamMatch` Returns 1 if the team of the entity the material is applied to matches that of the local player. Used in TF2 for func_respawnroomvisualizer.

`resultVar`
This value is 1 if the local player is on the same team and 0 if the local player is not.

`PlayerView`

The dot product of the player's view angle and the relative origin of the material's entity.
Warning: Will cause a crash when used on prop_static or world brushes, which don't have an entity.
`scale`
The value is rescaled to be between 0 and the scale value.
`resultVar`

`PlayerSpeed` Speed of the local player.

`scale`
The value is multiplied by this value. This factor defaults to `0.005`.
`resultVar`

`PlayerPosition` The local player's position.

`scale`
The value is multiplied by this value. This factor defaults to `0.005`.
`resultVar`
= `[x y z]`

`PlayerHealth` The local player's health (0-1).

`scale`
The value is rescaled to be between 0 and the scale value.
`resultVar`

`PlayerDamageTime` The number of seconds since the local player was last damaged.

`scale`
The value is rescaled to be between 0 and the scale value.
`resultVar`

`EntityOrigin`

The material's entity's origin. This is hardcoded to output to an `\$entityorigin` variable doesn't use `resultVar`.
Warning: Will cause a crash when used on prop_static or world brushes, which don't have an entity.

`EntitySpeed`

The material's entity's speed.
Warning: Will cause a crash when used on prop_static or world brushes, which don't have an entity.
`resultVar`
The current speed of this entity, in units per second.

`EntityRandom`

A static random number associated with the entity the material is applied to. Helpful for staggering effects that appear on multiple objects.
Warning: Will cause a crash when used on prop_static or world brushes, which don't have an entity.
`scale`
The value is rescaled to be between 0 and the scale value.
`resultVar`

`IsNPC` Returns whether the material is applied to a NPC. Used in HL2 for npc_hunter's eye glow, which is supposed to stay off on ragdolls.

`scale`
The value to return when the material is applied to a NPC. Despite the name, nothing in this process is multiplied. (although this must be a float)
`resultVar`
This value is equal to `scale` if the material is applied to a NPC. Otherwise, this value stays at 0.

## Texture manipulation

`AnimatedTexture` Increments the current frame of an animated VTF.

`animatedtexturevar`
Texture to increment frame for.
( i.e. `\$basetexture`, `\$bumpmap`, `\$normalmap`, `\$detail`)
`animatedtextureframenumvar`
Frame variable to increment.
( i.e. `\$frame`, `\$bumpframe`, `\$detailframe`)
`animatedtextureframerate`
Framerate in frames per second. Fixed; cannot be changed once set.

`AnimatedEntityTexture` Identical to AnimatedTexture, except the entity controls when the animation starts and is "notified" when the animation is wrapped.

`animatedtexturevar`
`animatedtextureframenumvar`
`animatedtextureframerate`

`AnimatedOffsetTexture` Identical to AnimatedTexture, except the animation begins when the entity it's applied to spawns.

`animatedtexturevar`
`animatedtextureframenumvar`
`animatedtextureframerate`

`AnimateSpecificTexture` Identical to AnimatedTexture, except only the specified texture could be animated.

`animatedtexturevar`
`animatedtextureframenumvar`
`animatedtextureframerate`
`onlyAnimateOnTexture`
The full path for the texture that this proxy should function with.

To do: What is this used for?

`TextureTransform` Generates a texture transform matrix for use with \$basetexturetransform etc.

`centerVar`
`scaleVar`
`rotateVar`
`translateVar`
Optional input variables for the matrix. Each one can be a float or a 2D vector.
`resultVar`

`TextureScroll` Returns a transform matrix or vector that will translate a texture at a given angle at a given rate.

`textureScrollVar`
Destination for the resulting transformation.
`textureScrollRate`
Rate of scroll in units per second.
`textureScrollAngle`
Angle of rotation to move along. (90 = up, 180 = left, etc)

`LampBeam` Modulates the material's alpha value based on angle between the beam's direction and the viewer's eye point. This is used to make the beams of volumetric light on lights fade as you look at them dead on. Must be attached to entity for angle use.

`LampHalo` Modulates the material's alpha value based on angle between the beam's direction and the viewer's eye point. Like the LampBeam proxy, but used for the halo at the beam's base. Must be attached to entity for angle use.

`CustomSteamImageOnModel` Replaces the \$baseTexture with a custom texture. No parameters.

## Entity integration

`MaterialModify / MaterialModifyAnimated` Used in conjunction with the material_modify_control entity to configure arbitrary parameters from map I/O. Only works when the material is applied to an entity. MaterialModify takes no parameters. MaterialModifyAnimated takes the same parameters as AnimatedTexture.

`WaterLOD` Coordinates water LOD values between the map's water_lod_control entity and the material's internal values.

`\$CHEAPWATERSTARTDISTANCE`
Start distance for cheap water
Note: must be set outside of proxy block.
`\$CHEAPWATERENDDISTANCE`
End distance for cheap water
Note: must be set outside of proxy block.

`BreakableSurface` Sets the base texture to a material name held by the entity (used for switching surface material on shatter). Must be attached to a `func_breakable_surf` entity.

`ConveyorScroll` Returns the scroll parameters for a texture used as a conveyor, so it matches the entity's settings. Must be attached to `func_conveyor` entity.

`textureScrollVar`
Name of variable to place result in. Must be a matrix or vector type variable (i.e. `\$baseTextureOffset`).

`Camo` Only used by material "Dev\dev_camo.vmt". This generates a texture matching the surroundings, which appears to be intended to be used for Combine Elite at some point. Much of the code is disabled, so this is not usable.

`\$camopatterntexture`
The source texture for the camo effect. Should be I8 format.
`\$camoboundingboxmin`
`\$camoboundingboxmax`
Random points within this bounding box will be sampled to determine the camo coloring.

`HeliBlade` Controls transition on npc_helicopter's blades. This fades in or out the blades to convert from a set of physical blades into a spinning blurred circle.

`\$fadeout`
`\$alpha`
This proxy sets the value of the alpha variable.

`ParticleSphereProxy` Only used by material "particle\SmokeStack.vmt". Seems to be defined in `particle_proxies.cpp`. Valve remark: "FIXME: Is this even needed any more?"

`Shadow` Only used by Shadow. No known parameters.

`ShadowModel` Only used by ShadowModel. No known parameters.

`ToggleTexture` Toggles a texture based on the frame number set by env_texturetoggle. Must be attached to an entity.

`toggleTextureVar`
Texture to modify based on frames.
`toggleTextureFrameNumVar`
Variable used for frame number.
`toggleShouldWrap`
Whether the animation should wrap over not.

`PlayerLogo` Internal proxy for "decals/playerlogo##" decals. Generates and assigns a texture for a specific player index.

## Utility

`Empty` Used to comment out proxies. Surround a bunch of proxies with the empty proxy to cause those proxies to not operate.

`Dummy` Prints `developer` messages in response to the proxy being created, being initialized being bound to an entity, and being removed.

## Miscellaneous

`ConVar (in all games since )` Allows you to link a specific variable to a ConVar a client has set.

`convar`
The ConVar name to link to. ( E.G. "mat_specular" )
Note: Strings will not be parsed through, the value of the ConVar must be a number.
`resultVar`
Returns the value of the ConVar.

## Game Specific

### Half-Life 2

`EntityOriginAlyx` Identical to EntityOrigin with an x offset of 15. Created as a last-minute hack before The Orange Box shipped.

`Ep1IntroVortRefract` Uses `\$refractamount` to generate a ratio and sends it to the same variable, not using `resultVar`. Created as a last-minute hack before The Orange Box shipped.

### Team Fortress 2

`spy_invis` Related to the \$cloakPassEnabled parameter. Typical found in player model materials. No parameters.

`weapon_invis` Related to the \$cloakPassEnabled parameter. Typical found in weapon world model materials. No parameters.

`vm_invis` Related to the \$cloakPassEnabled parameter. Typical found in weapon view model materials. No parameters.

`invis` Same as the former three, planned replacement since February 22, 2013 Patch because none of them are different from each other.

`building_invis` To do

`CommunityWeapon` Passes the value '1' when item is flagged as a 'Community Weapons'. Passes '0' otherwise.

`resultVar`

`InvulnLevel` Passes a float value to set the opacity of the invulnerability effect when a player has been'Übered'.

`resultVar`

`BurnLevel` Passes a float value to set the opacity of the fire overlay effect when a player has been burned.

`resultVar`

`YellowLevel` Passes an RGB value when 'Jarate' has been used on a player.

`resultVar`

`ModelGlowColor` When active passes hard coded color value to create the 'crit' glow effect. Color is either Red or Blue. When inactive value is pure white (255 255 255).

`resultVar`

`ItemTintColor` Passes an RGB value when a Paint Can is used. Value is specific to Paint color. Passes '0' when no Paint is used.

`resultVar`

`BuildingRescueLevel` Passes a transform matrix to set the amplitude of the Rescue Ranger display.

`resultVar`

`TeamTexture` Changes the animation frame of the texture depending on the current team

`resultVar`

`AnimatedWeaponSheen` Performs the killstreak effect

`animatedtexturevar`
`animatedtextureframenumvar`
`animatedtextureframerate`

`WeaponSkin` To do

`ShieldFalloff` To do

`WheatlyEyeGlow` To do

`StatTrakIllum` To do

`StatTrakDigit` To do

`StatTrakIcon` To do

`StickybombGlowColor` To do

`SniperRifleCharge` To do

`CustomSteamImageOnModel` To do

`Heartbeat` To do

`PlayerTeam` Returns a value depending on the team the player is currently in.

`team`
Unknown
`resultVar`
0 = survivor / 1 = infected / 2 = spectator

`BloodyHands` Returns a value between 0 and 1 depending on the number of hits with a melee weapon.

`resultVar`
number of hits / 5
doesn't go over 1 after 5 hits
value is shared between world and view model

`IT` Returns a value between 0 and 1 depending on the fact that the survivor is covered in Boomer bile.

`resultVar`
1 = fully covered / 0 = not covered

`BurnLevel` Passes a float value to set the opacity of the fire overlay effect when an infected has been burned.

`resultVar`
1 = on fire / 0 = not on fire

`BBQLevel` Seen in materials\models\infected\hulk\hulk_01.vmt

`resultVar`

### Portal 2

`FizzlerVortex` Gives fizzlers their effects. Doesn't take any arguments.

### Black Mesa

`TauCharge` Seen in materials\models\weapons\v_gauss\v_taucannon_core.vmt

`resultVar`