Ok, here's the code, just follow the steps:

Save the following as specmap_level.fx:


matrix matWorldViewProj;
matrix matWorld;

texture mtlSkin1;
texture entSkin1;
texture entSkin2;
texture entSkin3;
texture mtlSkin4;
vector vecLight;
dword mtlSkill1;
matrix matMtl;
technique envcube
{
pass p0
{
Texture[0] = <mtlSkin1>;
Texture[1] = <mtlSkin4>;
Texture[2] = <entSkin1>;
Texture[3] = <entSkin2>;

BumpEnvMat00[0] = 0.5f;
BumpEnvMat01[0] = 0.0f;
BumpEnvMat10[0] = 0.0f;
BumpEnvMat11[0] = 0.5f;
TextureFactor = 0x9f0f0f0f;
ColorArg1[0] = Texture;
ColorArg2[0] = TFactor;
ColorOp[0] = BumpEnvMap;
TexCoordIndex[0]=1;
TexCoordIndex[1] =1 ;
TextureTransformFlags[1] = Count3;
TextureTransform[1] = <matMtl>; // transform camera space back to world space
ColorArg1[1] = Texture;
ColorArg2[1] = Current;
ColorOp[1] = BlendFactorAlpha;

COLOROP[2] = AddSigned;
COLORARG1[2] = Texture;
COLORARG2[2] = Current;
TexCoordIndex[2] =1;

COLOROP[3] = Modulate4x;
COLORARG1[3] = Texture;
COLORARG2[3] = Current;
TexCoordIndex[3] =0;
magFilter[2]=Linear;
minFilter[2]=Linear;
mipFilter[2]=Linear;
magFilter[1]=Linear;
minFilter[1]=Linear;
mipFilter[1]=Linear;
magFilter[0]=Linear;
minFilter[0]=Linear;
mipFilter[0]=Linear;
magFilter[3]=Linear;
minFilter[3]=Linear;
mipFilter[3]=Linear;
}
}


Save the following as Shaders.wdl

// Rename all textures to your own
// yourenv_map can stay the same for all textures and is a sparkly sort of texture

bmap yourenv_map=<yourenv_map.tga>;
bmap yourDOT3map, <yourDOT3map.tga>;
bmap yourtexture = <yourtexture.bmp>;

material yourwadtexturename
{
skin1=yourDOT3map;
Skin3=yourtexture;
skin4=yourenv_map;
flags = tangent;
}

starter load_shaders()
{
d3d_automaterial=1;
effect_load(yourwadtexturename,"specmap_level.fx");
}