[GUIDE] All About Light

Tiftid

the Embodiment of Scarlet Devil
aa
Sep 10, 2016
545
417
Those who know me well know that for the past couple of years or so, I've been obsessed with light and shadow.
You can't be obsessed with something and not gain at least a little knowledge about it, so I'm going to share that knowledge with future generations, who will definitely be attentive to it and profit by it.

My original headers for this guide were written in order from most opinionated but most relevant, to least opinionated but least relevant, so naturally I'll write them in reverse order for the real thing.

Incidentally, this is sort of written for intermediate-advanced mappers. You're not likely to get much out of this if you're just starting out.

Prop Lighting​

VRAD Compile Parameters​

This is essentially just paraphrasing this guide.

Without -final, all light rays will only be allowed to bounce once, so shadowy areas will be much darker and less detailed than they otherwise would be.

Without -staticproppolys, your props will use their collision mesh instead of their actual mesh to cast shadows.
This can range from mildly inaccurate, to very very inaccurate, to casting no shadows at all.

Without -staticproplighting, your props will use the light calculated at the infinitesimally small point of their origin to light their entire model.
This means that if the origin happens to be inside a wall or floor, the entire model will be dark.
With this parameter, each vertex of your prop will calculate its own light value, and then the engine will blend between each vertex to create a gradient on every surface, generally making the prop look much better.

As it happens, you can still observe the "props where their origin is inside a wall" thing even with -staticproplighting enabled. (The pipes from props_mining and props_hydro are a common example). What's going on!?
Any prop that uses $phong, including the aforementioned pipes, will be unable to utilise vertex lighting.

Also, if you use info_lighting for a prop, that prop will by definition be entirely lit by a single point.
So, if you've got a prop that's half in light and half in shadow, using an info_lighting can only make it appear to be entirely in light or entirely in shadow.
(This isn't entirely true - even non-vertex lighting still bases itself on the incoming light vectors and the normal vectors of the props' mesh, so triangles on the prop that are facing away from the light direction will be dark).

This deficiency of info_lighting spawned this rant from the legendary YM:
1715163616935.png

Also, before I forget - all prop_dynamic and prop_physics entities will not be able to use vertex lighting, so lighting on them can end up looking pretty crap.


Finally, without -textureshadows, any surface of a model that has a semitransparent texture will cast shadows as if entirely transparent.
With it, surfaces like grates can cast a grate-like shadow.
But there are MANY caveats.
Firstly - this only applies to models, so even if you compile with this parameter, your brushes with semitransparent textures will still seem fully transparent.
Secondly - only the models with a "forcetextureshadow" string defined in a "lights.rad" file can cast textureshadows with this compile parameter.
So if you have a custom prop that you want to cast textureshadows, you need to create your own version of this file and add it to your VRAD compile via the lights parameter.
I've attached my own custom lights.rad file with a bunch of extra forcetextureshadows defined to this post, so you can just use it instead of making your own one.
(You will need to change the file extension from .txt to .rad, since the site doesn't let me upload .rad files).

Here's what your VRAD settings should look like to include a custom file:
1715164060141.png


The file itself should be placed in "steamapps/common/Team Fortress 2/tf/", not in any subfolders.

With the combination of textureshadows and high-resolution lightmaps, you can achieve really striking shadows!
1715164751009.png


Despite all the caveats I spoke about for the last two, I consider the above four compile parameters essential to all VRAD compiles.

That's compile parameters done, now we can get on to the cool stuff!

Lightmapped Props​

If you're really good at being told what to think, then after the previous section you may be thinking "Vertex lighting is the best way to light props!"
So now let's talk about all the ways in which it's a horrible way to light props.

This is a door.
1715164861877.png


This is a prop that was introduced into the game with the inclusion of koth_king in 2011.
But it has a massive problem: It's a suitably low-poly prop for what it needs to be!
More specifically, the wireframe of its front face looks like this:
1715165124621.png


Lighting is decided on a per-vertex basis.
So if we overlay what the shadow SHOULD look like onto this wireframe, we can see what vertices are considered to be in shadow:
1715165314528.png


If we then compile the map, we can see that the door will look like this:
1715166363133.png


This is because all three vertices of the top right triangle are in shadow, so the engine assumes that the entire triangle must be in shadow.
This is the purest, and most common, example of the failures of vertex lighting.
You can fix this, for this door prop in particular, via three simple methods:
  1. Set the door prop's "Disable Vertex Lighting?" property to Yes
  2. Use an info_lighting to disable vertex lighting
  3. Set the door prop's "Disable self-shadowing from vertex lighting" property to Yes
But all of these are poor solutions for other props, because they all make the lighting worse in some capacity.

To understand what lightmapped props will do for us, let's replace the door prop with an exaggerated, brush-based equivalent (because brushes use lightmaps):
1715166701718.png

You can see that the shadow looks exactly as it should.
This is because lightmaps, being an image, represent points of light and shadow as evenly spaced pixels, instead of going by vertices which might be incredibly far apart and produce a low-resolution surface.

Here you can see what the lightmap pixels, or "luxels" on this door look like:
1715166868821.png

You can also see that the Lightmap Grid view previews props as solid white by default, because they don't have lightmaps.

To enable lightmapping on a prop, all you need to do is alter these parameters:
1715167069158.png


Then, if you're using Hammer++, you can preview the prop's lightmaps in the same Lightmap Grid View I was using earlier - however, the actual Lighting Preview will not preview that prop's lightmaps.
1715167137803.png


The interesting thing about prop lightmaps is that it overlays the lightmap luxels over the actual texture of the prop.
So, instead of setting how wide (in world units) each luxel is like you do for world brushes, you're setting how many luxels the image spans across.

What this means practically is that for a larger prop, you're going to need a higher resolution.
64x64 was pretty high-resolution for that door, but here's what 64x64 looks like on one of the conveyor belts from 2fort:
1715167320542.png

As you can see, it's pretty inadequate. Just think - if each of those pixels was a colour rather than a light value, you'd be forgiven for thinking that was a model from 1998.

Out of curiosity, let's check out how that door looks in-game:
1715167657602.png

Now, that's pretty cool! The door handle is casting a long shadow along the door, and every subtle protrusion from the door's surface has subtle but powerful ambient-occlusion-style shadows.
The vertices of this door prop are actually even lower-resolution than the metal one from earlier, so you could never get this with vertex lighting.

If this isn't a big enough upgrade in visual quality to convince you, then bow before the power of the radar dish example:
Vertex Lighting​
Lightmaps (192x192)​
1715167850443.png
1715167910901.png

Now, that said, there are some caveats with lightmapped props.
Firstly, remember when I said earlier that phong-shaded props don't support vertex lighting? They also don't support lightmapping.

Additionally - and bear with me here - since lightmapped props use their texture to construct the lightmap, any model that reuses parts of the texture on multiple parts of the model will also reuse that same part of the lightmap.
Here's an example:
1715168575197.png

The arch is a lightmapped prop. We can see that from this angle, the inside is in shadow, because it's facing away from the sun.
By that logic, we should expect to have the inside be illuminated on the other side, so let's see if that's true:
1715168631352.png

Uh oh! It's not illuminated! And we can see that that's not just because the sun angle is too sharp, because the floor below the wall is clearly illuminated.
What's going on?

To put it simply, when some Valve modeller created this prop, they presumably only created the mesh and UV for one side, and then simply mirrored it to create the same side.
This means that both sides reuse the same UV, so if you enable lightmapping for this prop, both sides will have the same lighting, even if they really shouldn't.
You can also see this by looking above the arch, where the textures are clearly mirrored:
1715168756865.png


So, unfortunately, enabling lightmaps for this prop is almost never a good idea.
But it gets worse!
Propper is a program that turns VMF files into models that can be used in maps.
As it turns out, Propper doesn't create new and unique UVs for the props - it just references whatever base-game textures you used on the original brushes.
This means that it's very, very likely for props made by Propper to reuse parts of their UV and therefore create buggy lighting when lightmapped.
You can find out how to fix this here.

Here's a general set of guidelines for props that are likely to be broken in this way:
  • Most foliage
  • Most structures that're made out of a lot of planks
  • Props that were clearly made originally by some internal tool Valve used to convert brushes to props
  • (fairly sure) The metal door prop I used as an example, funnily enough
  • Props which act as a cluster of a number of smaller props
  • Any of the corrugated metal props from props_2fort (because as YM mentioned in the guide earlier, they're made up of a single set of polygons, which we can expand to understand that both sides are sharing the same UV)
  • In the props_island folder, a lot of props have their textures in the same image file as other props - this is so that when you have a lot of props in a scene, you're making fewer unique draw calls for their UVs... or something. I'm not actually sure whether this breaks lightmapping, though.
Here's an incomplete list of props that use phong shading and therefore don't support lightmapping (or, for that matter, vertex lighting):
  • models/props_hydro/dumptruck.mdl
  • models/props_mining/industrial_pipe01_128_01.mdl and all similar variants
  • models/props_hydro/2pipe_straight_128.mdl and all similar variants
  • models/props_hydro/3pipe_straight_128.mdl and all similar variants
  • models/props_2fort/milkjug001.mdl
  • models/props_hydro/water_machinery1.mdl and all similar variants
  • models/props_gameplay/resupply_locker.mdl
  • models/props_gameplay/cap_point_base.mdl
To finish off this section, I'll note that sometimes vertex lighting is perfectly fine!
For instance, if a prop is entirely in darkness, it doesn't really matter how complicated the shadows on its SURFACE are, so you may as well use vertex lighting.
Similarly, if there are lights illuminating the prop, but the prop isn't likely to cast any complex shadows on itself, and there aren't any complex shadows being cast on its surface by other stuff, vertex lighting will do a completely fine job there too.
Finally, if a prop has a very vertex-dense surface, vertex lighting will be almost indistinguishable from lightmapping anyway, so why would you bother enabling lightmapping there?

One case where I would never, ever recommend enabling lightmapping is the rock props from props_mining, because they fit all criteria:
  • They're not likely to cast interesting self shadows
  • Their surface is decently vertex-dense, and more importantly the vertices are very UNIFORM, so unlike the door props from earlier, you don't get massive areas on their surface which are represented by only two triangles
I'm also not entirely convinced that lightmapping even works for them - they might have different parts of their model reusing the same parts of the texture.

Lightmaps​

Now that you're good and bored of me talking about lightmaps, let's talk some more about lightmaps!
I've already mentioned that a lightmap is a texture on the surface of an object, where the pixels control what colour of light that object is receiving.

But there are various upsides, downsides and subtleties associated with this, which I'll go into now.

You may know already that you can control how dense the luxels on a brush surface are in the Face Edit Sheet:
1715170013008.png

The default value is 16, and since it's "Hammer units per luxel", it confusingly works the opposite way to prop lightmaps - a LOWER number means higher-resolution shadows on that surface.

You may also know that, since lightmaps are a texture that's saved in the map file, having high-quality lightmaps will increase your map's filesize and make it take longer to download.

So, in general, you should only use a size lower than 16 on surfaces which actually have the edge of a shadow, and if this surface happens to be massive, you should cut it up so that only the part of the surface which actually has the edge of the shadow has low luxel size.

This is important not only to save on filesize, but also because of the esoteric topic of lightmap paging.
Lightmap paging refers to the fact that Source has a limit on how large the lightmap on a surface can be.
Gigantic surfaces will, naturally, have a very large lightmap texture and go over this limit, so Source splits large surfaces up automatically so they fit inside this limit.

So, if you're lowering the luxel size on a surface, you're making it so that that surface will get split up more often.
This means that if you give a large surface a luxel size of 4, and then place an info_overlay on that surface, you'll get an error saying something like "info_overlay on too many faces - max 64" (and this error stops your compile!). This means that the SINGULAR surface the overlay is on had such a large lightmap texture that Source had to split it up into more than 64 faces.
The simple solution to this error is to split the face up manually.

You may also know that if you get too eager with low luxel size, your map will crash when you load it with an error message "EngineError: Engine hunk overflow!"
But what I discovered is that, fascinatingly, this isn't closely related to luxel size at all!
Firstly, it happens on maps where the creator has left all surfaces at the default luxel size on 16, but it only happens on VERY large maps - maps with a lot of faces.
What this indicates is that engine hunk overflow is actually a lot more closely related to the number of FACES in your map than the number of LUXELS, and the only reason low luxel sizes make you reach this error faster is because lightmap paging splits your map up so it has a massive number of faces.

Another facet of lightmap paging is how it interacts with displacements.
The engine can split brushes up to satisfy its lightmap paging requirements, but it can't do the same thing for displacements, because that would misalign the vertices (the same reason why you can't sew two displacements unless their original brushes have connecting edges).
So, it just imposes a hard limit on how small the luxel size on a given displacement can be, based on that displacement's size.
If you select a displacement bigger than roughly 512x512 and try setting its luxel size to 4, you'll find that Hammer CHANGES the displacement's luxel size to 5, which is disgusting and perverse and offends God.

Interestingly, this also affects people who don't give a fuck about changing luxel sizes in their map - because if you make a big enough displacement, even the default luxel size of 16 is too small to satisfy lightmap paging requirements!
You can generally see this in amateurishly-constructed 3D skyboxes.

While on the topic of 3D skyboxes - since 3D skyboxes take whatever the sky_camera sees and upscale it by 16 times, that means the lightmaps of any brushes in the 3D skybox look as though they're 16 times bigger than they should be!
Here's the point where the main map and 3D skybox connect in a map I once analysed, seen with mat_luxels 1:
1715171010063.png

If you've ever looked at a map's 3D skybox and thought that the lighting in it looks flat and dull, this is why.
You can easily solve this by using a luxel size of 1 instead of 16 on 3D skybox brushes - and, in the case of displacements, splitting them up a LOT so you can use a luxel size of 4 or 2.

Interestingly, this isn't a problem for 3D skybox props, since they generally use vertex lighting, and so their resolution doesn't change at all with scale.

Light Parameters​

There are a lot of parameters on light entities that barely anyone explores.
Everyone knows what colour, brightness, inner angle and outer angle do, but what about the other ones?

Well, let's find out:

Focus​

Focus is the least interesting of the unexplored light keyvalues.
It only exists on light_spot, and all it does is control how blurry the edge of the light is:
guide_lighting_spotlight_focus2.png


A higher Focus value means blurrier edges, and a lower Focus value means sharper edges.

In my experience, a low Focus value can be good for a kind of "cinematic-spotlight" effect, where you have one light that seems really strong, and that helps to dominate the scene and draw your eye to it.

Attenuation​

1715171438887.png


Attenuation describes how much the intensity of the light diminishes as the distance from the light entity increases.
By default, light attenuation is set to Quadratic.
This is good, because it matches the real-world light intensity formula i = i0 / d^2.

But, just like with the Focus value, sometimes an unrealistic light can be used for greater visual effect.
In particular, changing the attenuation from Quadratic to Linear or even Constant can be great to create a light that casts a longer, more powerful shadow than its Quadratic equivalent.
Here's a comparison:
guide_lighting_spotlight_attenuation.png

guide_lighting_spotlight_attenuation_b.png


You can also "mix" the values, for instance by setting the attenuation to be simultaneously Linear and Quadratic.
But I've played around with this a bit, and I found that the only combination that really gets any results is a Constant value of 10000 or thereabouts, a Linear value of 0 and a Quadratic value of 1.
Valve used this combination extensively in Half-Life 2, specifically in Ravenholm and Nova Prospekt - so, in other words, to do exactly what I said before, where a bright, sharp-edged spotlight in a dark scene dominates the scene and draws the viewer's eye.
And as it happens, this combination happens to look nearly identical to just plain old Linear attenuation.

So, I recommend using Linear attenuation whenever you want a bold shadow, because it's just the right combination of having almost no falloff, but not having none at all like Constant.

Also, point lights function very differently from spotlights as regards attenuation:
guide_lighting_pointlight_attenuation.png


So, linear point lights generally look TERRIBLE, but if you're getting an unconvincing effect from your Quadratic point lights like in the left of this image, you may find it helpful to switch to Linear.

By the way, light_environment uses Constant attenuation. This cannot be altered.

One thing you may have noticed about light entities is that you can also set a "50% Distance" and "0% Distance".
These are the distances away from the light at which the light intensity will be 50% of the original, and 0% respectively.
If you set these distances, it will override your Constant/Linear/Quadratic attenuation settings.
Here are a few example settings:
guide_lighting_spotlight_manualfalloff.png


You can also set "Hard Falloff", which theoretically makes lights fall off to exactly 0 brightness beyond the 0% distance.
In Hammer++, Lighting Preview makes this look like it actually works, but I'm fairly sure it doesn't work in-game. Or maybe the FGD I use is just gaslighting me?

Anyway, what I've found with manual falloff distances is that you're generally using them either to create a soft gradient falloff (which is what you'd expect from Quadratic attenuation), or a light that maintains its brightness at a long distance (which is what you'd expect from Linear attenuation).
So, I generally just use either Quadratic or Linear attenuation straight-up instead of bothering with manual distances.

SunSpreadAngle​

This is basically going to just paraphrase this guide.

SunSpreadAngle controls how diffuse shadows from the sun are, or in other words, how blurry the edge of the shadow is - similar to Focus in a light_spot.

But SunSpreadAngle does this in a really idiotic way - it basically just makes two copies of the shadow, and offsets them by +- the SunSpreadAngle.
So, at very high SunSpreadAngles, and especially when low luxel sizes get involved, shadows from the sun become horribly unconvincing.

As YM mentions in the guide, the default SunSpreadAngle is 5 degrees, but in real life the sun takes up 32 arcminutes in the sky angularly, or about 0.5 degrees.
So really, the default SunSpreadAngle should be 0.5.
Combining a low SunSpreadAngle and a high lightmap resolution can lead to beautiful, stark shadows from the sun.
I don't recommend setting the SunSpreadAngle any lower than 0.25 (even though some maps have it at 0!) because the sun shadows still need to have somewhat blurry edges.
I also don't recommend setting it to anything abve 1.25, even on cloudy days where the shadows should naturally be more diffuse.

Colour & Design Theory​

Out of all the maps I've artpassed, in which I've spent hours carefully poring over the lighting in each and every one of them, this scene from cp_bruhstbowl is still my favourite:
cp_1a_004.jpg


But why is it my favourite?
  • Low luxel sizes are used, but not exclusively to cast complex shadows - instead, the simple shadows cast by the yellow light along the floors and walls are rendered in high detail, and the subtle shadow of the inset doorframe onto the door within is also rendered in high detail
  • The lights are positioned in such a way that only one surface of each object is illuminated brightly - so, even on different faces of the same object you get a pleasing light-dark contrast
  • The room has several light sources in it, but parts of it are still dark
But most important in my mind is the colour-contrast.
The contrast between the intensely orange-yellow fluorescent tube and the blueish spotlight, lightbulb and shadowy areas creates a subtle, yet pleasing, blue-yellow contrast.

Another pleasing factor is the light-dark contrast I talked about earlier.
Basically, the point I'm trying to get across is that we want to avoid uniformly lit scenes.
Contrast is naturally pleasing to the eye, and can be created either through light vs. dark, or colours which are close to opposite on the colour wheel.
But generally, the most pleasing scenes will actually do both of these things.

And THAT'S why this room is still my favourite part out of all of the maps I've artpassed.

I also want to show you an example of a poorly lit room from koth_sawmill:
1715172849843.png


Not only is the entire room uniformly lit in white with nearly no dark parts, but Valve was actually so lazy that instead of using a light_spot for the light, they placed a point light directly under it and called it a day.
This means that the light coming out of the spotlight cone somehow... magically bends? and goes directly up into the ceiling, which is quite impossible.

Sawmill in general is an example of a map I find very poor-looking. The sunlight and shadows are almost the same colour (and yes, I know this happens in real life on cloudy days - why do you think people find cloudy days depressing-looking?), and nearly every room is lit by an absolute spam of spotlights and point lights which are all the same colour.

Don't be lazy like this in your maps.
At the very least, aim to light every room with at most two light sources, preferably spotlights or the sun so some parts of the room are dark, and try out interesting angles for your spotlights instead of pointing them straight down.

Having your scenes be uniformly lit also takes away a prime opportunity - that is, placing props specifically so that they cast an interesting shadow.
The example I always like to use is this crane:
1715173265912.png


By placing this complex object specifically on a wall that's receiving sunlight and has high lightmap resolution, I'm essentially getting two details for the price of one - the crane AND its shadow.
This is actually particularly beneficial, because shadows in Source are pre-saved into the map file - so the performance cost of having detailed shadows is... nothing!? And on top of that, the shadows don't fade out at a distance like most other engines - it's a veritable lifehack!
So, you can achieve much more detail in your map than you otherwise would've been able to, simply by specifically placing your details so they cast interesting shadows.

This is also another great case for vertex lighting - even if a prop isn't lightmapped, it can still be complex in shape, and therefore cast complex shadows onto a brush surface which IS lightmapped.

Coming up is the part I was saying was "most opinionated" at the start of the guide.
You may think that "All this time I've been saying stuff about real life, but TF2 is the funny painting/cartoon style game! It's not meant to resemble real life!"
While that is true to an extent, you'll find that most of the paintings TF2 was inspired by, and most of the painting-like scenes in TF2, actually follow the rules of promoting light-dark contrast and colour-contrast.

Additionally, since TF2 is using ray-traced lighting (exactly the way real light works) with the real-life light attenuation formula, it's actually using very realistic lighting. You also see this kind of thing in animated movies - even though they aren't trying to promote a realistic style, they're still using ray-tracing, and still generally using sunlight and sky colours that are possible in real life - because anything else makes the viewer subconsciously think your scenes look "wrong".

One thing I always hate to see is maps with pink skies and pink sunlight.
Pink skies are perfectly possible in real life - but the sunlight itself is almost NEVER pink.
In fact, the sunlight in real life is never really anything except yellow, white or yellow-white.
Additionally, if you're using a pink sky AND pink sunlight, you're almost BEGGING for a boring scene with no visual contrast.
It doesn't help that the maps that do that almost always insist on using really bright and often purple or pink ambient light, so there's hardly any light-dark contrast, or colour-contrast between sunlight and shadow.

I've run through all my notes now.
I never anticipated this guide to become a 4500 word behemoth, but that's what dumping the knowledge gained from a 2-year obsession will do, I guess.
And that knowledge - is all about light.
 

Attachments

  • lights_tiftid.txt
    9.3 KB · Views: 7
Last edited:

Sae35™

L1: Registered
Jan 3, 2023
38
11
Very nice. I've always had trouble properly lighting a map and this'll be a good guide for future reference.
 

spruce

L2: Junior Member
Aug 14, 2022
96
27
It doesn't help that the maps that do that almost always insist on using really bright and often purple or pink ambient light, so there's hardly any light-dark contrast, or colour-contrast between sunlight and shadow.
I feel I'm being called out.
Cool guide though! I will save to my favorite pages.
 

fiend

L1: Registered
Jun 7, 2020
39
7
Great post! Although as of the 64bit update a couple of weeks ago the lightmap hunk was apparently removed (according to ficool). I haven't tested it, but in theory that section of the post can now be removed, and we can all lightmap freely without worrying about hunks, as gaben intended.
 

Brokkhouse

I'm sorry Mario, your logic is in another instance
Server Staff
Oct 9, 2021
176
104
Great post! Although as of the 64bit update a couple of weeks ago the lightmap hunk was apparently removed (according to ficool). I haven't tested it, but in theory that section of the post can now be removed, and we can all lightmap freely without worrying about hunks, as gaben intended.
I think it might be a good idea to test the true limitations now. I expect @Tiftid to be the first to reach them.
 

Tiftid

the Embodiment of Scarlet Devil
aa
Sep 10, 2016
545
417
Here are some things I either forgot or neglected to mention:

Dynamic Shadows​

I've already spoken (briefly) about how prop_dynamic doesn't support vertex lighting.
I have additionally assumed that since anyone can see that prop_dynamic doesn't have the lightmapping-related parameters that prop_static does, you have logically inferred that prop_dynamic also does not support lightmapping.

What I did NOT mention was that prop_dynamic also doesn't cast any shadows.
Since the game has no way to differentiate whether or not a prop_dynamic will move, or disappear, during gameplay, it assumes that ALL prop_dynamics might do that.
So, since lightmapping is entirely precalculated before the map is even loaded, if a prop_dynamic that was parented to a func_tracktrain cast lightmap shadows, then there would be a shadow coming from nothing in the case where it moved.

You can actually see this in-game, because Valve doesn't prevent func_tracktrain itself from casting lightmapped shadows, so if you enable the "Enable Lightmapped Shadows?" property on a func_door (that doesn't have a transparent texture) or a func_tracktrain, you'll see that the tracktrain casts shadows, but only from its starting position.

Anyway, Valve's solution to this for props was to build a dynamic shadow system.
1716020910396.png

This system naively "projects" the prop's silhouette downwards. It will happily go through walls, and it will not care how illuminated the surface the shadow ends up on is, so you get weird ugly "doubling up" of shadows.
1716020925291.png


However, it is pretty high-resolution.
By the way, I saw a pretty cryptic post one time on the ctf_mach3 thread (now impossible to find ever since Vilepickle got banned and violently censored), saying that the mapper had tried turning nearly every prop into a prop_dynamic to use the prettier shadows, and discovered "why that wasn't a good idea..."
Decrypted, the long and short of it is that the game crashes if you have too many dynamic shadows on a map.
It doesn't crash straight-out - if you load the map from the main menu, it'll work fine, but if you load any other map before it, it'll crash.

The shadow_control entity determines how dynamic shadows work in your map - their angle, their colour and the distance they can travel.
What does this distance mean?
Well, a smaller distance will make it harder to penetrate through walls, and if you don't just set the angle straight down like a loser, then you'll observe a cool fadeout effect as the shadow approaches maximum distance.
It's worth noting that the Pitch component of this angle in this entity works inversely to how pitch in light_environment works - so in shadow_control, a pitch of 90 is straight down and a pitch of -90 is straight up.

If you don't have a shadow_control in your map, you will sometimes see dynamic shadows, but they will always point straight down, be very faint and have a seemingly random colour.
My guess is that the game is loading the part of memory where the dynamic shadow parameters are supposed to be and interpreting whatever it happens to read as dynamic shadow parameters.

My recommendation for how to use dynamic shadows is to set the angle to be the same as your light_enviroment angle (but with inverted pitch), and set the distance to between 128 and 192.
However, it must be admitted that both of these factors give the shadow a high chance to penetrate through walls.

There's a highly mysterious entity called info_no_dynamic_shadow, which lets you specify a list of brush face IDs that should not receive dynamic shadows.
In my experience, if you're thinking of using this entity, it means you should just disable shadows on the prop_dynamic which is giving you grief, although I'm now realising you can't do that for gameplay props e.g. players, ammo packs, Engineer buildings.
You may notice that info_no_dynamic_shadow doesn't let you stop dynamic shadows being cast onto props.
This is no problem, though - because another disadvantage of this system is that props entirely ignore dynamic shadows from other props!
1716021813938.png


Block Light​

blocklight is a tool texture which is invisible and nonsolid.
Its only purpose is to "Block Light" passing through it - in other words, cast artificial shadows.
When is this useful?
Well, Valve used it in plr_pipeline stage 3 - they built big invisible blocklight "fins" on the side of the ramps up to the CPs to make it so that all the invisible lights in the sky above the ramps don't overlight the ground below the ramps.
That's a perfectly valid way to use the entity, but you know me - I'll think of something more "out there".

Here are some ways I've used the entity in the past:
1716022386261.png

This grating is made of brushes, and as such -textureshadows cannot be used with it.
So, instead, a grid of blocklight brushes is built inside this grating, creating an artificial shadow.

You can't go overboard with this technique, because blocklight brushes still count as brushes - something I found out the hard way when pl_boatload ran into the hard limit of brushes on your map (8192 max), and I had to delete a bunch of my blocklight brushes.

1716022638839.png

This resupply locker has a blocklight brush inside it, which is the reason why you can see a shadow to the left of it.
However, amusingly, I forgot to turn off dynamic shadows on the resupply locker, so it casts two shadows, which is against God's will.

The Lists​

I mentioned that props with Phong shading enabled don't support vertex lighting or lightmapping.
What I didn't mention is that if a prop's texture has a bumpmap, it disables vertex lighting... for some reason. I'm not sure whether or not it also disables lightmapping.

Here is a COMPLETE list of phong-shaded prop VMTs (except for various props that are never meant to be used as map props), obtained via Python script:
Found parameter $phong! Line: 6, File: models\ol\blumain_old.vmt
Found parameter $phong! Line: 6, File: models\ol\blutext.vmt
Found parameter $phong! Line: 11, File: models\pickups\emitter001.vmt
Found parameter $phong! Line: 9, File: models\pickups\emitter001_glow.vmt
Found parameter $phong! Line: 7, File: models\pickups\pickup_powerup_blue.vmt
Found parameter $phong! Line: 7, File: models\pickups\pickup_powerup_blue_trans.vmt
Found parameter $phong! Line: 7, File: models\pickups\pickup_powerup_red.vmt
Found parameter $phong! Line: 7, File: models\pickups\pickup_powerup_red_trans.vmt
Found parameter $phong! Line: 7, File: models\pickups\pickup_powerup_set.vmt
Found parameter $phong! Line: 10, File: models\pickups\pickup_powerup_set_blue.vmt
Found parameter $phong! Line: 10, File: models\pickups\pickup_powerup_set_new.vmt
Found parameter $phong! Line: 10, File: models\pickups\pickup_powerup_set_red.vmt
Found parameter $phong! Line: 7, File: models\pickups\pickup_powerup_trans_blue.vmt
Found parameter $phong! Line: 7, File: models\pickups\pickup_powerup_trans_orange.vmt
Found parameter $phong! Line: 5, File: models\props_2fort\2fort_rockwall001.vmt
Found parameter $phong! Line: 3, File: models\props_2fort\blast_door.vmt
Found parameter $phong! Line: 4, File: models\props_2fort\chimney007.vmt
Found parameter $phong! Line: 3, File: models\props_2fort\fire_extinguisher.vmt
Found parameter $phong! Line: 3, File: models\props_2fort\hose001.vmt
Found parameter $phong! Line: 3, File: models\props_2fort\hubcap.vmt
Found parameter $phong! Line: 4, File: models\props_2fort\milkjug001.vmt
Found parameter $phong! Line: 3, File: models\props_2fort\mop_and_bucket01.vmt
Found parameter $phong! Line: 3, File: models\props_2fort\telephone001.vmt
Found parameter $phong! Line: 3, File: models\props_2fort\tire001.vmt
Found parameter $phong! Line: 3, File: models\props_2fort\tire002.vmt
Found parameter $phong! Line: 3, File: models\props_2fort\tire003.vmt
Found parameter $phong! Line: 4, File: models\props_badlands\firingrange_dividing_guard.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder1.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder1_desat.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder1_nonormal.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder2.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder2_desat.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder2_nonormal.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder4.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder4_desat.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder4_nonormal.vmt
Found parameter $phong! Line: 6, File: models\props_coalmine\boulder5.vmt
Found parameter $phong! Line: 6, File: models\props_coalmine\boulder5_desat.vmt
Found parameter $phong! Line: 6, File: models\props_coalmine\boulder5_nonormal.vmt
Found parameter $phong! Line: 6, File: models\props_coalmine\boulder6.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder6_desat.vmt
Found parameter $phong! Line: 6, File: models\props_coalmine\boulder6_nonormal.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder7.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder7_desat.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder7_nonormal.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder_pile1.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder_pile1_desat.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\boulder_pile1_nonormal.vmt
Found parameter $phong! Line: 5, File: models\props_coalmine\window1.vmt
Found parameter $phong! Line: 17, File: models\props_doomsday\australium_bar.vmt
Found parameter $phong! Line: 10, File: models\props_doomsday\australium_container.vmt
Found parameter $phong! Line: 10, File: models\props_doomsday\australium_container_blue.vmt
Found parameter $phong! Line: 10, File: models\props_doomsday\australium_container_red.vmt
Found parameter $phong! Line: 5, File: models\props_doomsday\mini_light_blue.vmt
Found parameter $phong! Line: 5, File: models\props_doomsday\mini_light_gray.vmt
Found parameter $phong! Line: 5, File: models\props_doomsday\mini_light_red.vmt
Found parameter $phong! Line: 5, File: models\props_doomsday\mini_light_yellow.vmt
Found parameter $phong! Line: 5, File: models\props_doomsday\power_core_type1_blue.vmt
Found parameter $phong! Line: 5, File: models\props_doomsday\power_core_type1_red.vmt
Found parameter $phong! Line: 8, File: models\props_doomsday\rocket_socket_doomsday.vmt
Found parameter $phong! Line: 8, File: models\props_doomsday\sign_gameplay_doomsday01.vmt
Found parameter $phong! Line: 8, File: models\props_doomsday\sign_gameplay_doomsday01b.vmt
Found parameter $phong! Line: 8, File: models\props_doomsday\sign_gameplay_doomsday02.vmt
Found parameter $phong! Line: 8, File: models\props_doomsday\sign_gameplay_doomsday02b.vmt
Found parameter $phong! Line: 5, File: models\props_farm\banana_peel.vmt
Found parameter $phong! Line: 4, File: models\props_farm\diary_book.vmt
Found parameter $phong! Line: 3, File: models\props_farm\tractor_tire001.vmt
Found parameter $phong! Line: 4, File: models\props_farm\welding_machine01.vmt
Found parameter $phong! Line: 4, File: models\props_farm\welding_machine01_skin2.vmt
Found parameter $phong! Line: 7, File: models\props_foliage\cactus01.vmt
Found parameter $phong! Line: 7, File: models\props_foliage\space_cactus01.vmt
Found parameter $phong! Line: 6, File: models\props_forest\dove.vmt
Found parameter $phong! Line: 4, File: models\props_forest\icicle.vmt
Found parameter $phong! Line: 6, File: models\props_forest\kitchen_shelf.vmt
Found parameter $phong! Line: 5, File: models\props_forest\kitchen_stove.vmt
Found parameter $phong! Line: 9, File: models\props_forest\sawblade_moving.vmt
Found parameter $phong! Line: 9, File: models\props_forest\sawblade_moving_bloody.vmt
Found parameter $phong! Line: 4, File: models\props_forest\sawmill_logs.vmt
Found parameter $phong! Line: 7, File: models\props_forest\saw_blade.vmt
Found parameter $phong! Line: 5, File: models\props_forest\tree_pine_stack.vmt
Found parameter $phong! Line: 7, File: models\props_forest\wheelbarrow.vmt
Found parameter $phong! Line: 5, File: models\props_frontline\dumpster.vmt
Found parameter $phong! Line: 5, File: models\props_frontline\dumpster_1.vmt
Found parameter $phong! Line: 5, File: models\props_frontline\dumpster_2.vmt
Found parameter $phong! Line: 5, File: models\props_frontline\dumpster_3.vmt
Found parameter $phong! Line: 5, File: models\props_frontline\dumpster_4.vmt
Found parameter $phong! Line: 5, File: models\props_gameplay\ball001.vmt
Found parameter $phong! Line: 5, File: models\props_gameplay\ball001_birthday.vmt
Found parameter $phong! Line: 5, File: models\props_gameplay\balloonicorn01.vmt
Found parameter $phong! Line: 5, File: models\props_gameplay\balloonicorn01_blue.vmt
Found parameter $phong! Line: 5, File: models\props_gameplay\balloonicorn01_paintable.vmt
Found parameter $phong! Line: 5, File: models\props_gameplay\balloonicorn_reindeer.vmt
Found parameter $phong! Line: 5, File: models\props_gameplay\balloonicorn_reindeer_blue.vmt
Found parameter $phong! Line: 4, File: models\props_gameplay\barbell01.vmt
Found parameter $phong! Line: 4, File: models\props_gameplay\bottle001.vmt
Found parameter $phong! Line: 4, File: models\props_gameplay\can001.vmt
Found parameter $phong! Line: 4, File: models\props_gameplay\foot_spray_can01.vmt
Found parameter $phong! Line: 3, File: models\props_gameplay\orange_cone001.vmt
Found parameter $phong! Line: 4, File: models\props_gameplay\pill_bottle01.vmt
Found parameter $phong! Line: 4, File: models\props_gameplay\resupply_locker.vmt
Found parameter $phong! Line: 4, File: models\props_gameplay\resupply_locker02.vmt
Found parameter $phong! Line: 4, File: models\props_gameplay\sewer_entrance01.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin1.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin10.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin11.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin12.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin2.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin3.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin4.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin5.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin6.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin7.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin8.vmt
Found parameter $phong! Line: 8, File: models\props_gameplay\sign_gameplay01_skin9.vmt
Found parameter $phong! Line: 13, File: models\props_gameplay\tombstone_crocostyle.vmt
Found parameter $phong! Line: 13, File: models\props_gameplay\tombstone_gasjockey.vmt
Found parameter $phong! Line: 13, File: models\props_gameplay\tombstone_specialdelivery.vmt
Found parameter $phong! Line: 13, File: models\props_gameplay\tombstone_tankbuster.vmt
Found parameter $phong! Line: 14, File: models\props_gameplay\tumor_loaf.vmt
Found parameter $phong! Line: 3, File: models\props_gameplay\weight_scale01.vmt
Found parameter $phong! Line: 5, File: models\props_gameplay\windowed_door.vmt
Found parameter $phong! Line: 6, File: models\props_granary\grain_sack_blue.vmt
Found parameter $phong! Line: 6, File: models\props_granary\grain_sack_red.vmt
Found parameter $phong! Line: 5, File: models\props_halloween\bell_lock.vmt
Found parameter $phong! Line: 10, File: models\props_halloween\bell_mechanism.vmt
Found parameter $phong! Line: 7, File: models\props_halloween\big_top_mouth.vmt
Found parameter $phong! Line: 10, File: models\props_halloween\big_top_outside.vmt
Found parameter $phong! Line: 7, File: models\props_halloween\bombonomicon.vmt
Found parameter $phong! Line: 7, File: models\props_halloween\candle.vmt
Found parameter $phong! Line: 5, File: models\props_halloween\eyeball_projectile.vmt
Found parameter $phong! Line: 9, File: models\props_halloween\flask.vmt
Found parameter $phong! Line: 8, File: models\props_halloween\flask_glass.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\flask_liquid.vmt
Found parameter $phong! Line: 11, File: models\props_halloween\fortune_teller_awning.vmt
Found parameter $phong! Line: 11, File: models\props_halloween\fortune_teller_awning_off.vmt
Found parameter $phong! Line: 7, File: models\props_halloween\fortune_teller_booth.vmt
Found parameter $phong! Line: 7, File: models\props_halloween\fortune_teller_booth_off.vmt
Found parameter $phong! Line: 8, File: models\props_halloween\fortune_teller_glass.vmt
Found parameter $phong! Line: 6, File: models\props_halloween\fridge.vmt
Found parameter $phong! Line: 8, File: models\props_halloween\gargoyle.vmt
Found parameter $phong! Line: 19, File: models\props_halloween\gargoyle_bronze.vmt
Found parameter $phong! Line: 5, File: models\props_halloween\gargoyle_ghost.vmt
Found parameter $phong! Line: 20, File: models\props_halloween\gargoyle_gold.vmt
Found parameter $phong! Line: 19, File: models\props_halloween\gargoyle_silver.vmt
Found parameter $phong! Line: 9, File: models\props_halloween\gargoyle_stuff.vmt
Found parameter $phong! Line: 3, File: models\props_halloween\halloween_arena_goal.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\halloween_blk.vmt
Found parameter $phong! Line: 16, File: models\props_halloween\halloween_demoeye.vmt
Found parameter $phong! Line: 16, File: models\props_halloween\halloween_demoeye_blue.vmt
Found parameter $phong! Line: 11, File: models\props_halloween\halloween_demoeye_glass.vmt
Found parameter $phong! Line: 11, File: models\props_halloween\halloween_demoeye_glass_2.vmt
Found parameter $phong! Line: 12, File: models\props_halloween\halloween_demoeye_glass_add.vmt
Found parameter $phong! Line: 13, File: models\props_halloween\halloween_demoeye_glass_blue.vmt
Found parameter $phong! Line: 9, File: models\props_halloween\halloween_demoeye_illum.vmt
Found parameter $phong! Line: 8, File: models\props_halloween\halloween_demoeye_illum_blue.vmt
Found parameter $phong! Line: 8, File: models\props_halloween\halloween_demoeye_illum_brown.vmt
Found parameter $phong! Line: 5, File: models\props_halloween\halloween_demoeye_lid.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\halloween_ghost.vmt
Found parameter $phong! Line: 6, File: models\props_halloween\halloween_gift.vmt
Found parameter $phong! Line: 3, File: models\props_halloween\halloween_racetrack_flags.vmt
Found parameter $phong! Line: 3, File: models\props_halloween\halloween_racetrack_streetlight.vmt
Found parameter $phong! Line: 3, File: models\props_halloween\halloween_racetrack_wall.vmt
Found parameter $phong! Line: 3, File: models\props_halloween\halloween_racetrack_wall_accent.vmt
Found parameter $phong! Line: 3, File: models\props_halloween\halloween_racetrack_wall_bracket.vmt
Found parameter $phong! Line: 9, File: models\props_halloween\halloween_rocks.vmt
Found parameter $phong! Line: 10, File: models\props_halloween\hammer_mechanism.vmt
Found parameter $phong! Line: 25, File: models\props_halloween\haunted_eyeball.vmt
Found parameter $phong! Line: 15, File: models\props_halloween\haunted_eyeball_angry.vmt
Found parameter $phong! Line: 24, File: models\props_halloween\haunted_eyeball_blue.vmt
Found parameter $phong! Line: 24, File: models\props_halloween\haunted_eyeball_red.vmt
Found parameter $phong! Line: 5, File: models\props_halloween\hwn_bell_ringer_pole01.vmt
Found parameter $phong! Line: 9, File: models\props_halloween\hwn_flask.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\hwn_flask_liquid001.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\hwn_flask_liquid002.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\hwn_flask_liquid003.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\hwn_flask_liquid004.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\hwn_flask_liquid005.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\hwn_flask_liquid006.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\hwn_flask_liquid007.vmt
Found parameter $phong! Line: 7, File: models\props_halloween\hwn_jump_hoop01.vmt
Found parameter $phong! Line: 6, File: models\props_halloween\hwn_jump_hoop02.vmt
Found parameter $phong! Line: 5, File: models\props_halloween\hwn_kart_ball01.vmt
Found parameter $phong! Line: 8, File: models\props_halloween\hwn_spellbook_generic.vmt
Found parameter $phong! Line: 7, File: models\props_halloween\hwn_spellbook_magazine.vmt
Found parameter $phong! Line: 7, File: models\props_halloween\hwn_spellbook_major.vmt
Found parameter $phong! Line: 6, File: models\props_halloween\hwn_tent_pole01.vmt
Found parameter $phong! Line: 5, File: models\props_halloween\medkit_full.vmt
Found parameter $phong! Line: 5, File: models\props_halloween\medkit_med.vmt
Found parameter $phong! Line: 5, File: models\props_halloween\medkit_sml.vmt
Found parameter $phong! Line: 4, File: models\props_halloween\mousetrap.vmt
Found parameter $phong! Line: 7, File: models\props_halloween\mouth_goal_blue.vmt
Found parameter $phong! Line: 7, File: models\props_halloween\mouth_goal_red.vmt
Found parameter $phong! Line: 14, File: models\props_halloween\pumpkin.vmt
Found parameter $phong! Line: 11, File: models\props_halloween\pumpkinloot.vmt
Found parameter $phong! Line: 14, File: models\props_halloween\pumpkin_explode.vmt
Found parameter $phong! Line: 14, File: models\props_halloween\pumpkin_explode_blue.vmt
Found parameter $phong! Line: 14, File: models\props_halloween\pumpkin_explode_red.vmt
Found parameter $phong! Line: 17, File: models\props_halloween\scary_ghost.vmt
Found parameter $phong! Line: 3, File: models\props_halloween\skull.vmt
Found parameter $phong! Line: 3, File: models\props_halloween\skull_horns.vmt
Found parameter $phong! Line: 5, File: models\props_halloween\skull_island_skullhat.vmt
Found parameter $phong! Line: 3, File: models\props_halloween\tombstone_01.vmt
Found parameter $phong! Line: 3, File: models\props_halloween\tombstone_02.vmt
Found parameter $phong! Line: 23, File: models\props_hightower_event\cliff_bridge.vmt
Found parameter $phong! Line: 23, File: models\props_hightower_event\cliff_bridge_blink.vmt
Found parameter $phong! Line: 12, File: models\props_hydro\2pipe.vmt
Found parameter $phong! Line: 5, File: models\props_hydro\barricade.vmt
Found parameter $phong! Line: 24, File: models\props_hydro\cap_point_arrow.vmt
Found parameter $phong! Line: 24, File: models\props_hydro\cap_point_arrow_blue.vmt
Found parameter $phong! Line: 4, File: models\props_hydro\car_lift.vmt
Found parameter $phong! Line: 5, File: models\props_hydro\dumptruck.vmt
Found parameter $phong! Line: 12, File: models\props_hydro\gorge_fence.vmt
Found parameter $phong! Line: 12, File: models\props_hydro\gorge_fence2.vmt
Found parameter $phong! Line: 11, File: models\props_hydro\gorge_handrails.vmt
Found parameter $phong! Line: 11, File: models\props_hydro\gorge_set1.vmt
Found parameter $phong! Line: 10, File: models\props_hydro\gorge_set2.vmt
Found parameter $phong! Line: 11, File: models\props_hydro\gorge_set3.vmt
Found parameter $phong! Line: 10, File: models\props_hydro\gorge_set4.vmt
Found parameter $phong! Line: 10, File: models\props_hydro\gorge_set5.vmt
Found parameter $phong! Line: 4, File: models\props_hydro\hydraulic_door.vmt
Found parameter $phong! Line: 4, File: models\props_hydro\observatory_dome.vmt
Found parameter $phong! Line: 5, File: models\props_hydro\satellite_antenna01.vmt
Found parameter $phong! Line: 4, File: models\props_hydro\substation_transformer01.vmt
Found parameter $phong! Line: 11, File: models\props_hydro\wall_map.vmt
Found parameter $phong! Line: 5, File: models\props_hydro\water_barrel.vmt
Found parameter $phong! Line: 12, File: models\props_hydro\water_machinery1.vmt
Found parameter $phong! Line: 13, File: models\props_hydro\water_machinery2.vmt
Found parameter $phong! Line: 12, File: models\props_hydro\water_machinery3.vmt
Found parameter $phong! Line: 11, File: models\props_hydro\water_machinery4.vmt
Found parameter $phong! Line: 13, File: models\props_hydro\water_pipes.vmt
Found parameter $phong! Line: 6, File: models\props_island\bamboo_large.vmt
Found parameter $phong! Line: 9, File: models\props_island\bamboo_wall_panel001.vmt
Found parameter $phong! Line: 27, File: models\props_island\blue_spawn_atrium_glass.vmt
Found parameter $phong! Line: 10, File: models\props_island\bubbles_green_anim.vmt
Found parameter $phong! Line: 12, File: models\props_island\bubbles_off.vmt
Found parameter $phong! Line: 9, File: models\props_island\crocodile.vmt
Found parameter $phong! Line: 6, File: models\props_island\fork_lift.vmt
Found parameter $phong! Line: 9, File: models\props_island\hazardwaste_drum.vmt
Found parameter $phong! Line: 6, File: models\props_island\island_buoy.vmt
Found parameter $phong! Line: 6, File: models\props_island\island_crane_mechanism.vmt
Found parameter $phong! Line: 6, File: models\props_island\island_gantry01.vmt
Found parameter $phong! Line: 12, File: models\props_island\island_helicopter.vmt
Found parameter $phong! Line: 13, File: models\props_island\island_incubator_large01.vmt
Found parameter $phong! Line: 12, File: models\props_island\island_incubator_pipes_set01.vmt
Found parameter $phong! Line: 6, File: models\props_island\island_park_signage.vmt
Found parameter $phong! Line: 6, File: models\props_island\island_park_signage_fees.vmt
Found parameter $phong! Line: 6, File: models\props_island\island_park_signage_healthwarning.vmt
Found parameter $phong! Line: 6, File: models\props_island\island_park_signage_logo.vmt
Found parameter $phong! Line: 12, File: models\props_island\island_speedboat.vmt
Found parameter $phong! Line: 6, File: models\props_island\island_tram_cage.vmt
Found parameter $phong! Line: 10, File: models\props_island\island_tram_cage_alpha.vmt
Found parameter $phong! Line: 8, File: models\props_island\island_tree_trunk01.vmt
Found parameter $phong! Line: 8, File: models\props_island\island_tree_trunk01_nomove.vmt
Found parameter $phong! Line: 10, File: models\props_island\lagoon.vmt
Found parameter $phong! Line: 11, File: models\props_island\lagoon_mist.vmt
Found parameter $phong! Line: 9, File: models\props_island\large_yeti_container01.vmt
Found parameter $phong! Line: 9, File: models\props_island\large_yeti_container01_open.vmt
Found parameter $phong! Line: 7, File: models\props_island\rainbow.vmt
Found parameter $phong! Line: 13, File: models\props_island\stalagtites.vmt
Found parameter $phong! Line: 9, File: models\props_island\steroid_drum.vmt
Found parameter $phong! Line: 6, File: models\props_island\this_tall_sign.vmt
Found parameter $phong! Line: 7, File: models\props_island\tram_window.vmt
Found parameter $phong! Line: 5, File: models\props_island\yeti.vmt
Found parameter $phong! Line: 5, File: models\props_island\yeti_face.vmt
Found parameter $phong! Line: 5, File: models\props_island\yeti_teeth_tongue.vmt
Found parameter $phong! Line: 6, File: models\props_lakeside_event\bomb_temp.vmt
Found parameter $phong! Line: 6, File: models\props_lakeside_event\bomb_temp_s1.vmt
Found parameter $phong! Line: 6, File: models\props_lakeside_event\bomb_temp_s2.vmt
Found parameter $phong! Line: 10, File: models\props_manor\all_domination_hat.vmt
Found parameter $phong! Line: 5, File: models\props_manor\baby_grand_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\baby_grand_01a.vmt
Found parameter $phong! Line: 5, File: models\props_manor\bookcase_132_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\bookcase_132_02.vmt
Found parameter $phong! Line: 5, File: models\props_manor\bookcase_132_03.vmt
Found parameter $phong! Line: 5, File: models\props_manor\candelabra_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\chair_01.vmt
Found parameter $phong! Line: 6, File: models\props_manor\chair_01a.vmt
Found parameter $phong! Line: 5, File: models\props_manor\chandelier_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\clamshell_light_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\coffin_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\coffin_01a.vmt
Found parameter $phong! Line: 5, File: models\props_manor\coffin_02.vmt
Found parameter $phong! Line: 5, File: models\props_manor\coffin_02a.vmt
Found parameter $phong! Line: 7, File: models\props_manor\couch_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\couch_01a.vmt
Found parameter $phong! Line: 5, File: models\props_manor\doorframe_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\doorframe_01_door_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\fireplace_02.vmt
Found parameter $phong! Line: 5, File: models\props_manor\front_doors_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\grandfather_clock_01.vmt
Found parameter $phong! Line: 4, File: models\props_manor\immortality_machine_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\mann_manor_sign.vmt
Found parameter $phong! Line: 4, File: models\props_manor\observatory_dome.vmt
Found parameter $phong! Line: 5, File: models\props_manor\painting_sheet_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\painting_sheet_02.vmt
Found parameter $phong! Line: 5, File: models\props_manor\portrait_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\table_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\table_01a.vmt
Found parameter $phong! Line: 4, File: models\props_manor\table_01b.vmt
Found parameter $phong! Line: 5, File: models\props_manor\table_03.vmt
Found parameter $phong! Line: 5, File: models\props_manor\table_03a.vmt
Found parameter $phong! Line: 5, File: models\props_manor\trailer_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\vase_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\wall_candelabra_01.vmt
Found parameter $phong! Line: 5, File: models\props_manor\wall_candelabra_02.vmt
Found parameter $phong! Line: 5, File: models\props_medical\med_heavybody001.vmt
Found parameter $phong! Line: 5, File: models\props_medical\med_table001.vmt
Found parameter $phong! Line: 6, File: models\props_medical\plague_box.vmt
Found parameter $phong! Line: 5, File: models\props_medical\plague_box2.vmt
Found parameter $phong! Line: 6, File: models\props_medieval\bar_table.vmt
Found parameter $phong! Line: 5, File: models\props_medieval\meat.vmt
Found parameter $phong! Line: 5, File: models\props_medieval\meats.vmt
Found parameter $phong! Line: 5, File: models\props_medieval\scroll.vmt
Found parameter $phong! Line: 6, File: models\props_medieval\training_dummy.vmt
Found parameter $phong! Line: 10, File: models\props_medieval\training_dummy_gauntlets.vmt
Found parameter $phong! Line: 6, File: models\props_medieval\wooden_stairs.vmt
Found parameter $phong! Line: 4, File: models\props_mining\crank02.vmt
Found parameter $phong! Line: 5, File: models\props_mining\generator01.vmt
Found parameter $phong! Line: 4, File: models\props_mining\generator_handrail01.vmt
Found parameter $phong! Line: 4, File: models\props_mining\generator_handrail02.vmt
Found parameter $phong! Line: 3, File: models\props_mining\generator_machine01.vmt
Found parameter $phong! Line: 4, File: models\props_mining\generator_pipe01.vmt
Found parameter $phong! Line: 4, File: models\props_mining\generator_valve01.vmt
Found parameter $phong! Line: 4, File: models\props_mining\industrial_pipe01.vmt
Found parameter $phong! Line: 6, File: models\props_mining\ingot001.vmt
Found parameter $phong! Line: 8, File: models\props_moonbase\moon_asteroids_small.vmt
Found parameter $phong! Line: 8, File: models\props_moonbase\moon_asteroid_large001.vmt
Found parameter $phong! Line: 12, File: models\props_moonbase\moon_gravel_crystal.vmt
Found parameter $phong! Line: 12, File: models\props_moonbase\moon_gravel_crystal_blue.vmt
Found parameter $phong! Line: 12, File: models\props_moonbase\moon_gravel_crystal_red.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_handrail01.vmt
Found parameter $phong! Line: 12, File: models\props_moonbase\moon_hatch.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_ceiling_pipe01.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_ceiling_pipe02.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_computer01.vmt
Found parameter $phong! Line: 9, File: models\props_moonbase\moon_interior_computer01_glass.vmt
Found parameter $phong! Line: 9, File: models\props_moonbase\moon_interior_computer01_glass2.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_computer02.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_computer03.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_computer04.vmt
Found parameter $phong! Line: 7, File: models\props_moonbase\moon_interior_computer05.vmt
Found parameter $phong! Line: 12, File: models\props_moonbase\moon_interior_fan01.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_fan01_pipe.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_intercom01.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_intercom02.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_keyboard01.vmt
Found parameter $phong! Line: 7, File: models\props_moonbase\moon_interior_monitor01.vmt
Found parameter $phong! Line: 5, File: models\props_moonbase\moon_interior_panelwall01.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_pipes01.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_pipewires01.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_interior_tanks01.vmt
Found parameter $phong! Line: 9, File: models\props_moonbase\moon_interior_tech01.vmt
Found parameter $phong! Line: 9, File: models\props_moonbase\moon_interior_tech02.vmt
Found parameter $phong! Line: 9, File: models\props_moonbase\moon_interior_tech03.vmt
Found parameter $phong! Line: 9, File: models\props_moonbase\moon_interior_tech04.vmt
Found parameter $phong! Line: 8, File: models\props_moonbase\moon_mountains001.vmt
Found parameter $phong! Line: 18, File: models\props_moonbase\moon_rock001.vmt
Found parameter $phong! Line: 20, File: models\props_moonbase\moon_rock002_baked.vmt
Found parameter $phong! Line: 18, File: models\props_moonbase\moon_rock_large001.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_spaceship01.vmt
Found parameter $phong! Line: 4, File: models\props_moonbase\moon_spaceship01_blue.vmt
Found parameter $phong! Line: 12, File: models\props_moonbase\moon_spawn_door.vmt
Found parameter $phong! Line: 10, File: models\props_moonbase\moon_spawn_door_glass.vmt
Found parameter $phong! Line: 12, File: models\props_moonbase\moon_spawn_windows.vmt
Found parameter $phong! Line: 10, File: models\props_moonbase\moon_tube_light01.vmt
Found parameter $phong! Line: 10, File: models\props_moonbase\moon_tube_light01_glass.vmt
Found parameter $phong! Line: 5, File: models\props_moonbase\moon_water_hatch01.vmt
Found parameter $phong! Line: 16, File: models\props_moonbase\powersupply_core_blue.vmt
Found parameter $phong! Line: 16, File: models\props_moonbase\powersupply_core_red.vmt
Found parameter $phong! Line: 5, File: models\props_movies\alert_sign\alert_sign_blue.vmt
Found parameter $phong! Line: 5, File: models\props_movies\alert_sign\alert_sign_red.vmt
Found parameter $phong! Line: 8, File: models\props_movies\campervan\campervan.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\brokenwood.vmt
Found parameter $phong! Line: 4, File: models\props_mvm\combined_robot_blue_gibs.vmt
Found parameter $phong! Line: 4, File: models\props_mvm\combined_robot_head_gibs.vmt
Found parameter $phong! Line: 6, File: models\props_mvm\ground_projector.vmt
Found parameter $phong! Line: 8, File: models\props_mvm\ground_projector_on.vmt
Found parameter $phong! Line: 6, File: models\props_mvm\hatchmetal.vmt
Found parameter $phong! Line: 6, File: models\props_mvm\holo_projector.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\industrial_pipe01b.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\mannco_lit_sign.vmt
Found parameter $phong! Line: 4, File: models\props_mvm\mannhole_hatch.vmt
Found parameter $phong! Line: 4, File: models\props_mvm\mann_hatch.vmt
Found parameter $phong! Line: 4, File: models\props_mvm\mann_hatch_cast_iron.vmt
Found parameter $phong! Line: 6, File: models\props_mvm\mine_elevator.vmt
Found parameter $phong! Line: 5, File: models\props_mvm\mvm_deathpit_skyboulders.vmt
Found parameter $phong! Line: 6, File: models\props_mvm\mvm_human_skeleton.vmt
Found parameter $phong! Line: 6, File: models\props_mvm\mvm_human_skull.vmt
Found parameter $phong! Line: 4, File: models\props_mvm\mvm_museum_case.vmt
Found parameter $phong! Line: 4, File: models\props_mvm\mvm_museum_coal.vmt
Found parameter $phong! Line: 3, File: models\props_mvm\mvm_museum_pedestal.vmt
Found parameter $phong! Line: 3, File: models\props_mvm\mvm_museum_phone.vmt
Found parameter $phong! Line: 3, File: models\props_mvm\mvm_museum_phone_board.vmt
Found parameter $phong! Line: 6, File: models\props_mvm\mvm_museum_plaque001.vmt
Found parameter $phong! Line: 10, File: models\props_mvm\mvm_museum_plaque002.vmt
Found parameter $phong! Line: 9, File: models\props_mvm\mvm_museum_plaque003.vmt
Found parameter $phong! Line: 9, File: models\props_mvm\mvm_museum_plaque004.vmt
Found parameter $phong! Line: 9, File: models\props_mvm\mvm_museum_plaque005.vmt
Found parameter $phong! Line: 9, File: models\props_mvm\mvm_museum_plaque006.vmt
Found parameter $phong! Line: 9, File: models\props_mvm\mvm_museum_plaque007.vmt
Found parameter $phong! Line: 9, File: models\props_mvm\mvm_museum_plaque008.vmt
Found parameter $phong! Line: 12, File: models\props_mvm\mvm_museum_rope.vmt
Found parameter $phong! Line: 16, File: models\props_mvm\mvm_museum_rope_stand.vmt
Found parameter $phong! Line: 8, File: models\props_mvm\mvm_newspaper001.vmt
Found parameter $phong! Line: 8, File: models\props_mvm\mvm_newspaper002.vmt
Found parameter $phong! Line: 8, File: models\props_mvm\mvm_newspaper003.vmt
Found parameter $phong! Line: 8, File: models\props_mvm\mvm_newspaper004.vmt
Found parameter $phong! Line: 8, File: models\props_mvm\mvm_newspaper005.vmt
Found parameter $phong! Line: 8, File: models\props_mvm\mvm_portrait01.vmt
Found parameter $phong! Line: 8, File: models\props_mvm\mvm_portrait02.vmt
Found parameter $phong! Line: 8, File: models\props_mvm\mvm_portrait03.vmt
Found parameter $phong! Line: 8, File: models\props_mvm\mvm_portrait04.vmt
Found parameter $phong! Line: 19, File: models\props_mvm\mvm_revive_heavy.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\mvm_revive_heavy_rim.vmt
Found parameter $phong! Line: 3, File: models\props_mvm\mvm_revive_tombstone_base.vmt
Found parameter $phong! Line: 10, File: models\props_mvm\mvm_upgradestation_automat_01_glass.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\mvm_upgrade_center_01.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\mvm_upgrade_center_02.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\mvm_upgrade_center_sign.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\mvm_upgrade_tools_01.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\mvm_upgrade_tools_02.vmt
Found parameter $phong! Line: 9, File: models\props_mvm\mvm_wall_photos.vmt
Found parameter $phong! Line: 5, File: models\props_mvm\pipe_section.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\scratched_window001_glass.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\siren.vmt
Found parameter $phong! Line: 7, File: models\props_mvm\water_pipes.vmt
Found parameter $phong! Line: 16, File: models\props_powerhouse\emergency_launch_button.vmt
Found parameter $phong! Line: 15, File: models\props_powerhouse\powerhouse_blast_doors.vmt
Found parameter $phong! Line: 13, File: models\props_powerhouse\powerhouse_blinds.vmt
Found parameter $phong! Line: 15, File: models\props_powerhouse\powerhouse_console.vmt
Found parameter $phong! Line: 15, File: models\props_powerhouse\powerhouse_console_blu.vmt
Found parameter $phong! Line: 9, File: models\props_powerhouse\powerhouse_desk_stuff.vmt
Found parameter $phong! Line: 14, File: models\props_powerhouse\powerhouse_monitor01.vmt
Found parameter $phong! Line: 14, File: models\props_powerhouse\powerhouse_monitor01_blu.vmt
Found parameter $phong! Line: 5, File: models\props_powerhouse\powerhouse_turbine.vmt
Found parameter $phong! Line: 4, File: models\props_powerhouse\powerhouse_turbine_base.vmt
Found parameter $phong! Line: 4, File: models\props_powerhouse\powerhouse_turbine_base_blu.vmt
Found parameter $phong! Line: 5, File: models\props_powerhouse\powerhouse_turbine_blu.vmt
Found parameter $phong! Line: 6, File: models\props_soho\bus_skin1.vmt
Found parameter $phong! Line: 6, File: models\props_soho\bus_skin2.vmt
Found parameter $phong! Line: 7, File: models\props_soho\handrail001.vmt
Found parameter $phong! Line: 7, File: models\props_soho\lightpole001.vmt
Found parameter $phong! Line: 6, File: models\props_soho\trashbag001.vmt
Found parameter $phong! Line: 5, File: models\props_spytech\chair.vmt
Found parameter $phong! Line: 3, File: models\props_spytech\fire_bell01.vmt
Found parameter $phong! Line: 4, File: models\props_spytech\metal_strut.vmt
Found parameter $phong! Line: 5, File: models\props_spytech\rocket_tower.vmt
Found parameter $phong! Line: 9, File: models\props_spytech\safe.vmt
Found parameter $phong! Line: 4, File: models\props_spytech\satellite_dish001.vmt
Found parameter $phong! Line: 4, File: models\props_spytech\tv001.vmt
Found parameter $phong! Line: 3, File: models\props_spytech\vent.vmt
Found parameter $phong! Line: 2, File: models\props_swamp\chainsaw.vmt
Found parameter $phong! Line: 6, File: models\props_swamp\connected_buoy_blue.vmt
Found parameter $phong! Line: 6, File: models\props_swamp\connected_buoy_red.vmt
Found parameter $phong! Line: 8, File: models\props_swamp\landrover.vmt
Found parameter $phong! Line: 8, File: models\props_swamp\landrover2.vmt
Found parameter $phong! Line: 8, File: models\props_swamp\landrover3.vmt
Found parameter $phong! Line: 8, File: models\props_teaser\saucer.vmt
Found parameter $phong! Line: 7, File: models\props_teaser\update_billboard001.vmt
Found parameter $phong! Line: 3, File: models\props_trainyard\beer_keg001.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\bomb_blutarch.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\bomb_blutarch_body.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\bomb_redmond.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\bomb_redmond_body.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\cart_base.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\cart_base_separate.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\cart_bomb.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\cart_bomb_red.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\cart_bomb_separate.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\cart_dispenser.vmt
Found parameter $phong! Line: 7, File: models\props_trainyard\cart_dispenser_red.vmt
Found parameter $phong! Line: 6, File: models\props_trainyard\eotl_trainbomb.vmt
Found parameter $phong! Line: 6, File: models\props_trainyard\eotl_trainbomb_blue.vmt
Found parameter $phong! Line: 4, File: models\props_trainyard\handrail_thick001.vmt
Found parameter $phong! Line: 3, File: models\props_trainyard\portable_stairs001.vmt
Found parameter $phong! Line: 10, File: models\props_trainyard\powercable_truss.vmt
Found parameter $phong! Line: 4, File: models\props_urban\urban_chair.vmt
Found parameter $phong! Line: 3, File: models\props_urban\urban_entrance_gate_large.vmt
Found parameter $phong! Line: 4, File: models\props_urban\urban_shop_sign01.vmt
Found parameter $phong! Line: 4, File: models\props_urban\urban_shop_sign02.vmt
Found parameter $phong! Line: 5, File: models\props_urban\urban_subwaycar.vmt
Found parameter $phong! Line: 5, File: models\props_urban\urban_subwaycar_a.vmt
Found parameter $phong! Line: 9, File: models\props_vehicles\pickup03.vmt
Found parameter $phong! Line: 9, File: models\props_vehicles\pickup04.vmt
Found parameter $phong! Line: 3, File: models\props_vehicles\train_rockets.vmt
Found parameter $phong! Line: 8, File: models\props_viaduct_event\eye_patch01.vmt
Found parameter $phong! Line: 3, File: models\props_viaduct_event\skull_island01.vmt
Found parameter $phong! Line: 10, File: models\props_well\brewing_vat.vmt
Found parameter $phong! Line: 5, File: models\props_well\bridge_railing_blue.vmt
Found parameter $phong! Line: 5, File: models\props_well\bridge_railing_red.vmt
Found parameter $phong! Line: 4, File: models\props_well\computer_cart01.vmt
Found parameter $phong! Line: 11, File: models\props_well\distillery_still.vmt
Found parameter $phong! Line: 3, File: models\props_well\hand_truck01.vmt
Found parameter $phong! Line: 3, File: models\props_well\hand_truck01_skin2.vmt

Here is a COMPLETE list of bumpmapped prop VMTs (except for various props that are never meant to be used as map props), obtained via Python script:
Found parameter $bumpmap! Line: 3, File: models\pickups\emitter001.vmt
Found parameter $bumpmap! Line: 3, File: models\pickups\emitter001_glow.vmt
Found parameter $bumpmap! Line: 3, File: models\pickups\pickup_powerup_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\pickups\pickup_powerup_blue_trans.vmt
Found parameter $bumpmap! Line: 3, File: models\pickups\pickup_powerup_red.vmt
Found parameter $bumpmap! Line: 3, File: models\pickups\pickup_powerup_red_trans.vmt
Found parameter $bumpmap! Line: 3, File: models\pickups\pickup_powerup_set.vmt
Found parameter $bumpmap! Line: 6, File: models\pickups\pickup_powerup_set_blue.vmt
Found parameter $bumpmap! Line: 6, File: models\pickups\pickup_powerup_set_new.vmt
Found parameter $bumpmap! Line: 6, File: models\pickups\pickup_powerup_set_red.vmt
Found parameter $bumpmap! Line: 3, File: models\pickups\pickup_powerup_trans_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\pickups\pickup_powerup_trans_orange.vmt
Found parameter $bumpmap! Line: 4, File: models\props_2fort\2fort_rockwall001.vmt
Found parameter $bumpmap! Line: 9, File: models\props_2fort\fire_extinguisher.vmt
Found parameter $bumpmap! Line: 8, File: models\props_2fort\hubcap.vmt
Found parameter $bumpmap! Line: 8, File: models\props_2fort\milkjug001.vmt
Found parameter $bumpmap! Line: 7, File: models\props_2fort\telephone001.vmt
Found parameter $bumpmap! Line: 7, File: models\props_2fort\tire001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_badlands\firingrange_dividing_guard.vmt
Found parameter $bumpmap! Line: 3, File: models\props_badlands\rock001_skybox.vmt
Found parameter $bumpmap! Line: 3, File: models\props_badlands\rock002_skybox.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder1.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder1_desat.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder1_nonormal.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder2.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder2_desat.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder2_nonormal.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder4.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder4_desat.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder4_nonormal.vmt
Found parameter $bumpmap! Line: 4, File: models\props_coalmine\boulder5.vmt
Found parameter $bumpmap! Line: 4, File: models\props_coalmine\boulder5_desat.vmt
Found parameter $bumpmap! Line: 4, File: models\props_coalmine\boulder5_nonormal.vmt
Found parameter $bumpmap! Line: 4, File: models\props_coalmine\boulder6.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder6_desat.vmt
Found parameter $bumpmap! Line: 4, File: models\props_coalmine\boulder6_nonormal.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder7.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder7_desat.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder7_nonormal.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder_pile1.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder_pile1_desat.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\boulder_pile1_nonormal.vmt
Found parameter $bumpmap! Line: 3, File: models\props_coalmine\window1.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\australium_bar.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\mini_light_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\mini_light_gray.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\mini_light_red.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\mini_light_yellow.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\power_core_type1_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\power_core_type1_red.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\rocket_socket_doomsday.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\sign_gameplay_doomsday01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\sign_gameplay_doomsday01b.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\sign_gameplay_doomsday02.vmt
Found parameter $bumpmap! Line: 3, File: models\props_doomsday\sign_gameplay_doomsday02b.vmt
Found parameter $bumpmap! Line: 7, File: models\props_farm\tractor_tire001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_farm\wood_floor001.vmt
Found parameter $bumpmap! Line: 5, File: models\props_foliage\cactus01.vmt
Found parameter $bumpmap! Line: 5, File: models\props_foliage\space_cactus01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_forest\kitchen_shelf.vmt
Found parameter $bumpmap! Line: 3, File: models\props_forest\kitchen_stove.vmt
Found parameter $bumpmap! Line: 3, File: models\props_forest\sawmill_logs.vmt
Found parameter $bumpmap! Line: 3, File: models\props_forest\saw_blade.vmt
Found parameter $bumpmap! Line: 3, File: models\props_forest\tree_pine_stack.vmt
Found parameter $bumpmap! Line: 3, File: models\props_forest\tree_pine_stump01.vmt
Found parameter $bumpmap! Line: 4, File: models\props_forest\wall019.vmt
Found parameter $bumpmap! Line: 4, File: models\props_forest\wall021.vmt
Found parameter $bumpmap! Line: 4, File: models\props_forest\wall025.vmt
Found parameter $bumpmap! Line: 3, File: models\props_forest\wheelbarrow.vmt
Found parameter $bumpmap! Line: 3, File: models\props_frontline\dumpster.vmt
Found parameter $bumpmap! Line: 3, File: models\props_frontline\dumpster_1.vmt
Found parameter $bumpmap! Line: 3, File: models\props_frontline\dumpster_2.vmt
Found parameter $bumpmap! Line: 3, File: models\props_frontline\dumpster_3.vmt
Found parameter $bumpmap! Line: 3, File: models\props_frontline\dumpster_4.vmt
Found parameter $bumpmap! Line: 3, File: models\props_frontline\stone_window_deco.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\ball001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\ball001_birthday.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\balloonicorn01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\balloonicorn01_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\balloonicorn01_paintable.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\balloonicorn_reindeer.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\balloonicorn_reindeer_blue.vmt
Found parameter $bumpmap! Line: 8, File: models\props_gameplay\cap_point_base.vmt
Found parameter $bumpmap! Line: 9, File: models\props_gameplay\cap_point_base_blue.vmt
Found parameter $bumpmap! Line: 10, File: models\props_gameplay\cap_point_base_red.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\haybale.vmt
Found parameter $bumpmap! Line: 7, File: models\props_gameplay\orange_cone001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\resupply_locker02.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sack.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin1.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin10.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin11.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin12.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin2.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin3.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin4.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin5.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin6.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin7.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin8.vmt
Found parameter $bumpmap! Line: 3, File: models\props_gameplay\sign_gameplay01_skin9.vmt
Found parameter $bumpmap! Line: 9, File: models\props_gameplay\tombstone_crocostyle.vmt
Found parameter $bumpmap! Line: 9, File: models\props_gameplay\tombstone_gasjockey.vmt
Found parameter $bumpmap! Line: 9, File: models\props_gameplay\tombstone_specialdelivery.vmt
Found parameter $bumpmap! Line: 9, File: models\props_gameplay\tombstone_tankbuster.vmt
Found parameter $bumpmap! Line: 4, File: models\props_gameplay\tumor_loaf.vmt
Found parameter $bumpmap! Line: 7, File: models\props_gameplay\weight_scale01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_granary\grain_sack_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\props_granary\grain_sack_red.vmt
Found parameter $bumpmap! Line: 8, File: models\props_halloween\bell_mechanism.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\big_top_mouth.vmt
Found parameter $bumpmap! Line: 8, File: models\props_halloween\big_top_outside.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\bombonomicon.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\candle.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\eyeball_projectile.vmt
Found parameter $bumpmap! Line: 9, File: models\props_halloween\fortune_teller_awning.vmt
Found parameter $bumpmap! Line: 9, File: models\props_halloween\fortune_teller_awning_off.vmt
Found parameter $bumpmap! Line: 5, File: models\props_halloween\halloween_demoeye.vmt
Found parameter $bumpmap! Line: 5, File: models\props_halloween\halloween_demoeye_blue.vmt
Found parameter $bumpmap! Line: 5, File: models\props_halloween\halloween_demoeye_illum.vmt
Found parameter $bumpmap! Line: 4, File: models\props_halloween\halloween_demoeye_illum_blue.vmt
Found parameter $bumpmap! Line: 4, File: models\props_halloween\halloween_demoeye_illum_brown.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\halloween_demoeye_lid.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\halloween_gift.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\halloween_rocks.vmt
Found parameter $bumpmap! Line: 8, File: models\props_halloween\hammer_mechanism.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\haunted_eyeball.vmt
Found parameter $bumpmap! Line: 6, File: models\props_halloween\haunted_eyeball_angry.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\haunted_eyeball_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\haunted_eyeball_red.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\hwn_bell_ringer_pole01.vmt
Found parameter $bumpmap! Line: 4, File: models\props_halloween\hwn_jump_hoop01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\hwn_jump_hoop02.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\hwn_kart_ball01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\hwn_spellbook_generic.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\hwn_tent_pole01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\medkit_full.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\medkit_med.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\medkit_sml.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\mouth_goal_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\mouth_goal_red.vmt
Found parameter $bumpmap! Line: 7, File: models\props_halloween\pumpkin.vmt
Found parameter $bumpmap! Line: 7, File: models\props_halloween\pumpkin_explode.vmt
Found parameter $bumpmap! Line: 7, File: models\props_halloween\pumpkin_explode_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\pumpkin_explode_blue_dx80.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\pumpkin_explode_dx80.vmt
Found parameter $bumpmap! Line: 7, File: models\props_halloween\pumpkin_explode_red.vmt
Found parameter $bumpmap! Line: 3, File: models\props_halloween\pumpkin_explode_red_dx80.vmt
Found parameter $bumpmap! Line: 9, File: models\props_halloween\scary_ghost.vmt
Found parameter $bumpmap! Line: 3, File: models\props_hydro\barricade.vmt
Found parameter $bumpmap! Line: 3, File: models\props_hydro\cap_point_arrow.vmt
Found parameter $bumpmap! Line: 3, File: models\props_hydro\cap_point_arrow_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\props_hydro\dumptruck.vmt
Found parameter $bumpmap! Line: 8, File: models\props_hydro\substation_transformer01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_hydro\wall_map.vmt
Found parameter $bumpmap! Line: 4, File: models\props_island\bamboo_wall_panel001.vmt
Found parameter $bumpmap! Line: 4, File: models\props_island\crocodile.vmt
Found parameter $bumpmap! Line: 4, File: models\props_island\hazardwaste_drum.vmt
Found parameter $bumpmap! Line: 3, File: models\props_island\island_op_light.vmt
Found parameter $bumpmap! Line: 4, File: models\props_island\large_yeti_container01.vmt
Found parameter $bumpmap! Line: 4, File: models\props_island\large_yeti_container01_open.vmt
Found parameter $bumpmap! Line: 4, File: models\props_island\stalagtites.vmt
Found parameter $bumpmap! Line: 4, File: models\props_island\steroid_drum.vmt
Found parameter $bumpmap! Line: 3, File: models\props_island\yeti.vmt
Found parameter $bumpmap! Line: 3, File: models\props_island\yeti_face.vmt
Found parameter $bumpmap! Line: 3, File: models\props_island\yeti_teeth_tongue.vmt
Found parameter $bumpmap! Line: 3, File: models\props_lakeside\flat_wall_02.vmt
Found parameter $bumpmap! Line: 3, File: models\props_lakeside\flat_wall_03.vmt
Found parameter $bumpmap! Line: 5, File: models\props_lakeside_event\bomb_temp.vmt
Found parameter $bumpmap! Line: 5, File: models\props_lakeside_event\bomb_temp_s1.vmt
Found parameter $bumpmap! Line: 5, File: models\props_lakeside_event\bomb_temp_s2.vmt
Found parameter $bumpmap! Line: 3, File: models\props_manor\all_domination_hat.vmt
Found parameter $bumpmap! Line: 4, File: models\props_manor\chair_01a.vmt
Found parameter $bumpmap! Line: 4, File: models\props_manor\couch_01.vmt
Found parameter $bumpmap! Line: 4, File: models\props_manor\fireplace_01.vmt
Found parameter $bumpmap! Line: 5, File: models\props_manor\gargoyle_01.vmt
Found parameter $bumpmap! Line: 5, File: models\props_manor\gate_statue_01.vmt
Found parameter $bumpmap! Line: 5, File: models\props_manor\gravestone_sheet_01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_medieval\meat.vmt
Found parameter $bumpmap! Line: 3, File: models\props_medieval\meats.vmt
Found parameter $bumpmap! Line: 4, File: models\props_medieval\minerette\minerette.vmt
Found parameter $bumpmap! Line: 3, File: models\props_medieval\pendant_flag\bannerflag.vmt
Found parameter $bumpmap! Line: 3, File: models\props_medieval\scroll.vmt
Found parameter $bumpmap! Line: 3, File: models\props_medieval\stonewall001a_ticket_booth.vmt
Found parameter $bumpmap! Line: 4, File: models\props_medieval\target\target.vmt
Found parameter $bumpmap! Line: 5, File: models\props_medieval\target\target.vmt
Found parameter $bumpmap! Line: 4, File: models\props_medieval\training_dummy.vmt
Found parameter $bumpmap! Line: 8, File: models\props_medieval\training_dummy_gauntlets.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mining\dustbowl_roof01.vmt
Found parameter $bumpmap! Line: 4, File: models\props_mining\dustbowl_roof01.vmt
Found parameter $bumpmap! Line: 4, File: models\props_mining\generator01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mining\generator_handrail01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mining\generator_handrail02.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mining\generator_valve01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mining\gravel_pile001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mining\ingot001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mining\wall025.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_asteroids_small.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_asteroid_large001.vmt
Found parameter $bumpmap! Line: 5, File: models\props_moonbase\moon_entry_window01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_gravel_crystal.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_gravel_crystal_blue.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_gravel_crystal_red.vmt
Found parameter $bumpmap! Line: 4, File: models\props_moonbase\moon_interior_panel01.vmt
Found parameter $bumpmap! Line: 5, File: models\props_moonbase\moon_interior_panel01_glass.vmt
Found parameter $bumpmap! Line: 5, File: models\props_moonbase\moon_interior_trim01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_mountains001.vmt
Found parameter $bumpmap! Line: 5, File: models\props_moonbase\moon_red_airlock01.vmt
Found parameter $bumpmap! Line: 5, File: models\props_moonbase\moon_red_airlock02.vmt
Found parameter $bumpmap! Line: 5, File: models\props_moonbase\moon_red_airlock04.vmt
Found parameter $bumpmap! Line: 5, File: models\props_moonbase\moon_red_airlock05.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_rock001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_rock002_baked.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_rocks001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_rocks002.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_rocks003.vmt
Found parameter $bumpmap! Line: 3, File: models\props_moonbase\moon_rock_large001.vmt
Found parameter $bumpmap! Line: 5, File: models\props_moonbase\moon_stairs_window01.vmt
Found parameter $bumpmap! Line: 9, File: models\props_movies\alert_sign\alert_sign_blue.vmt
Found parameter $bumpmap! Line: 9, File: models\props_movies\alert_sign\alert_sign_red.vmt
Found parameter $bumpmap! Line: 4, File: models\props_movies\campervan\campervan.vmt
Found parameter $bumpmap! Line: 4, File: models\props_mvm\hatchmetal.vmt
Found parameter $bumpmap! Line: 5, File: models\props_mvm\industrial_pipe01b.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mvm\mvm_deathpit_skyboulders.vmt
Found parameter $bumpmap! Line: 7, File: models\props_mvm\mvm_museum_pedestal.vmt
Found parameter $bumpmap! Line: 7, File: models\props_mvm\mvm_museum_phone.vmt
Found parameter $bumpmap! Line: 7, File: models\props_mvm\mvm_museum_phone_board.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mvm\mvm_museum_rope.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mvm\mvm_museum_rope_stand.vmt
Found parameter $bumpmap! Line: 8, File: models\props_mvm\mvm_revive_heavy.vmt
Found parameter $bumpmap! Line: 3, File: models\props_mvm\mvm_revive_heavy_rim.vmt
Found parameter $bumpmap! Line: 8, File: models\props_mvm\mvm_revive_tombstone_base.vmt
Found parameter $bumpmap! Line: 4, File: models\props_mvm\office_windows_vents.vmt
Found parameter $bumpmap! Line: 4, File: models\props_mvm\pipes1111.vmt
Found parameter $bumpmap! Line: 4, File: models\props_mvm\pipe_section.vmt
Found parameter $bumpmap! Line: 5, File: models\props_mvm\siren.vmt
Found parameter $bumpmap! Line: 5, File: models\props_mvm\water_pipes.vmt
Found parameter $bumpmap! Line: 3, File: models\props_nightfall\wall020b.vmt
Found parameter $bumpmap! Line: 3, File: models\props_powerhouse\powerhouse_blast_doors_glass.vmt
Found parameter $bumpmap! Line: 4, File: models\props_powerhouse\powerhouse_turbine.vmt
Found parameter $bumpmap! Line: 4, File: models\props_powerhouse\powerhouse_turbine_blu.vmt
Found parameter $bumpmap! Line: 3, File: models\props_skybox\brickwall001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_skybox\brickwall001b.vmt
Found parameter $bumpmap! Line: 3, File: models\props_skybox\brickwall002.vmt
Found parameter $bumpmap! Line: 3, File: models\props_skybox\concretefloor007.vmt
Found parameter $bumpmap! Line: 3, File: models\props_skybox\metaldoor001.vmt
Found parameter $bumpmap! Line: 10, File: models\props_soho\window002.vmt
Found parameter $bumpmap! Line: 3, File: models\props_spytech\chair.vmt
Found parameter $bumpmap! Line: 9, File: models\props_spytech\fire_bell01.vmt
Found parameter $bumpmap! Line: 3, File: models\props_spytech\metal_strut.vmt
Found parameter $bumpmap! Line: 9, File: models\props_spytech\vent.vmt
Found parameter $bumpmap! Line: 3, File: models\props_sunshine\ibeam003.vmt
Found parameter $bumpmap! Line: 3, File: models\props_sunshine\imetal003.vmt
Found parameter $bumpmap! Line: 6, File: models\props_swamp\airboat_01.vmt
Found parameter $bumpmap! Line: 6, File: models\props_swamp\airboat_01b.vmt
Found parameter $bumpmap! Line: 6, File: models\props_swamp\airboat_01c.vmt
Found parameter $bumpmap! Line: 6, File: models\props_swamp\airboat_03.vmt
Found parameter $bumpmap! Line: 7, File: models\props_swamp\airboat_04.vmt
Found parameter $bumpmap! Line: 6, File: models\props_swamp\bug_zapper_01.vmt
Found parameter $bumpmap! Line: 6, File: models\props_swamp\bug_zapper_03.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\connected_buoy_blue.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\connected_buoy_red.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\hanging_sign01.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\hanging_sign02.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\hanging_sign03.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\hanging_sign04.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_cliff_01.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_cliff_01b.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_cliff_02.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_cliff_02b.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_cliff_03.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_01.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_01b.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_02.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_02b.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_03.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_03b.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_04.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_04b.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_05.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_05b.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_06.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_06b.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_07.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\karst_rock_07b.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\landrover.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\landrover2.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\landrover3.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\trophy_bass_01.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\trophy_bass_01b.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\trophy_bass_01c.vmt
Found parameter $bumpmap! Line: 5, File: models\props_swamp\trophy_bass_01d.vmt
Found parameter $bumpmap! Line: 4, File: models\props_teaser\update_billboard001.vmt
Found parameter $bumpmap! Line: 8, File: models\props_trainyard\beer_keg001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_trainyard\brickwall001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_trainyard\distillery_barrel001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_trainyard\eotl_trainbomb.vmt
Found parameter $bumpmap! Line: 3, File: models\props_trainyard\eotl_trainbomb_blue.vmt
Found parameter $bumpmap! Line: 8, File: models\props_trainyard\portable_stairs001.vmt
Found parameter $bumpmap! Line: 3, File: models\props_trainyard\stairs001a_wood.vmt
Found parameter $bumpmap! Line: 3, File: models\props_well\computer_cart01.vmt
Found parameter $bumpmap! Line: 3, File: models\thundermountain_fx\ibeam002_vert.vmt
Found parameter $bumpmap! Line: 3, File: models\thundermountain_fx\wall025_vert.vmt

It may not be immediately obvious which props some of these VMT files refer to.
Sorry!

Here's the Python script:
Python:
import os
import pyperclip
import sys

# by Tiftid 18/May/2024
# A script file for looking through a directory of VMT files, and logging which ones have specified parameters.

output = []
blacklisted_subfolders = [
    "soldier_statue",
    "player",
    "paintkits",
    "crafting",
    "gibs",
    "flag",
    "items",
    # "props_movies",
    "workshop",
    "workshop_partner",
    "weapons",
    "turret",
    "vgui",
    "bots",
    "effects",
    "class_menu",
    "buildables",
    "passtime",
    "props_ui"
]


def recursive_iterate_dir(dir_path: str, params: list[str]):
    for item in os.scandir(dir_path):
        if item.name in blacklisted_subfolders:
            continue
        if item.is_file():
            read_file_for_params(item, params)
        elif item.is_dir():
            recursive_iterate_dir(os.path.abspath(item), params)


def read_file_for_params(file_obj, params: list[str]):
    if not os.path.abspath(file_obj).endswith(".vmt"):
        return
    with open(file_obj) as file:
        data = file.readlines()
        for i, line in enumerate(data):
            line_split = line.split('"')
            for key in line_split:
                if key in params:
                    outstring = f"Found parameter [COLOR=rgb(184, 49, 47)]{key}[/COLOR]! Line: [COLOR=rgb(128, 208, 96)]{i}[/COLOR], File: [COLOR=rgb(96,128, 208)]{os.path.abspath(file_obj)}[/COLOR]"
                    output.append(outstring)
                    print(outstring)


if __name__ == "__main__":
    print("=================================Usage=================================")
    print("This file is for debugging VMT files. Pass in the filepath of the directory your VMT files are inside, and then each parameter you want to find in the VMTs.")
    recursive_iterate_dir(sys.argv[1], sys.argv[2:])
    key = input("Press X to copy the results to the clipboard. Press any other key to exit.")
    if key in ["x", "X"]:
        text = "\n".join(output)
        pyperclip.copy(text)
        print("Done!")

I feel sure that I'm forgetting something...