I learned two more things about light shaders:
void light() {
DIFFUSE_LIGHT += max(dot(NORMAL, LIGHT),0.0) * ATTENUATION * ALBEDO * LIGHT_COLOR;
vec3 H = normalize(VIEW + LIGHT);
float NdotH = max(0, dot(NORMAL, H));
float specular = pow(NdotH, specular_power) * specular_strength * ATTENUATION.x;
SPECULAR_LIGHT += specular*LIGHT_COLOR;
}
First, I multiply both diffuse and specular light by LIGHT_COLOR.
Also,
dot(NORMAL, LIGHT)
should be
max(dot(NORMAL, LIGHT),0.0)
otherwise, if a light is behind the surface, it will get darker.