putting my 2 cents in:
spectralfreak... I could be mistaking but don't you mean
return saturate(LightColor*TexColor);
also, the calculations of LightColor should be
float4 LightingColor = float4(saturate(TotalAmbient + TotalDiffuse + TotalSpecular),1);
but I'm no expert on this matter, perhaps our Gurucould shed some light on this matter?

float4x4 World;
float4x4 View;
float4x4 Projection;
sampler TextureSampler;
float3 AmbientColor;
float3 EyePosition;
float3 DiffuseColor;
float3 LightDirection;
float3 LightDiffuseColor;
float SpecularPower;
float3 LightSpecularColor;
struct VS_INPUT
{
float4 Position : POSITION0;
float2 Texcoord : TEXCOORD0;
float4 Color : COLOR0;
float3 Normal : NORMAL0;
};
struct VS_OUTPUT
{
float4 Position : POSITION0;
float2 Texcoord : TEXCOORD0;
float4 Color : COLOR0;
float3 Normal : TEXCOORD1;
float3 ViewDirection : TEXCOORD2;
};
VS_OUTPUT Transform(VS_INPUT Input)
{
VS_OUTPUT Output;
float4 worldPosition = mul(Input.Position, World);
float4 viewPosition = mul(worldPosition, View);
Output.Position = mul(viewPosition, Projection);
Output.Texcoord = Input.Texcoord;
Output.Color = Input.Color;
Output.Normal = mul(Input.Normal, World);
Output.ViewDirection = EyePosition - worldPosition;
return Output;
}
struct PS_INPUT
{
float2 Texcoord : TEXCOORD0;
float4 Color : COLOR0;
float3 Normal : TEXCOORD1;
float3 ViewDirection : TEXCOORD2;
};
float4 BasicShader(PS_INPUT Input) : COLOR0
{
float3 Normal = normalize(Input.Normal);
float3 ViewDirection = normalize(Input.ViewDirection);
LightDirection = normalize(-LightDirection);
float EdgeComponent = dot(Normal, ViewDirection);
float3 TotalAmbient = saturate(AmbientColor * EdgeComponent);
// Diffuse Calculations
float NDotL = dot(Normal, LightDirection);
float3 DiffuseAverage = (DiffuseColor + LightDiffuseColor) * 0.5f;
float3 TotalDiffuse = saturate(DiffuseAverage * NDotL);
// Specular Calculations
float3 Reflection = normalize(2.0f * Normal * NDotL - LightDirection);
float RDotV = max(0.0f, dot(Reflection, ViewDirection));
float3 TotalSpecular = saturate(LightSpecularColor * pow(RDotV, SpecularPower));
float4 TextureColor = Input.Color.rgba * tex2D(TextureSampler, Input.Texcoord);
float4 LightingColor = float4(saturate(TotalAmbient + TotalDiffuse + TotalSpecular),1);
return saturate(TextureColor*LightingColor);
}
technique TransformColorTexture
{
pass Pass1
{
VertexShader = compile vs_2_0 Transform();
PixelShader = compile ps_2_0 BasicShader();
}
}