For this you need to understand how normal mapping actually works. It fakes the normal direction of the surface and darkens the areas that point kind of the same direction as the light. Problem with that is, that you have to know where the light is, to compair the normal vector and the light incident vector. The real problem in this case is that all the surfaces lit by static lights only store the information of how much light there is and which color shines on it. This information is stored in the .bsp as a lightmap (actually several ones). You have no information about the incident light vector. This results in normal mapping that is only visible with (real) dynamic lights like saber and muzzleflashes. You have multiple options. First one: Tell the shader before compilation that there is a normal map and bake the occlusion information in the lightmaps. Pro: Easy to work out, you find a tutorial in the tutorials section about it. Con: You actually loose the advantage of very crisp normal mapping for static lights, because lightmaps have a low resolution. (you could krank it up in GTKRadiant, but you will loose lots of performance overall) Second one: Use fxRunners. There was a map Scizo made for rend2 and he added dynamic ligths via fxRunners. I have no idea how this works, I guess you can find the map 2 or 3 pages prior this one. He included his map file (also all his shaders, textures and so on, so this is worth a look for you). Third one: Use parallax mapping. Example also in the map made by Scizo. Last one (not a real one I guess): Fix deluxe mapping in the rend2 branch and simply compile your map with -deluxe in the lighting stage. (this technique is not perfect, but it should suffice for most cases) GL2 can use deluxemapping, ioq3 too. Hope this helps.