Try to isolate down to the part which is causing the problem.
The first thing I'd do is disable GL_BLEND, and see if it works.
And you can just create a uniform variable in your shader, it does the same thing as using glMaterial, but it's "easier" in my opinion.
Vertex:
uniform vec4 uni_fade;varying vec4 var_fade;void main(){ var_fade = uni_fade; gl_Position = ftransform();}
Fragment:
varying vec4 var_fade;void main(){ gl_FragColor = var_fade;}
And to upload the colors in the uniform variable:
(You can only use glUniform outside a glBegin()..glEnd() block)
glUniform4f(glGetUniformLocation(handle_to_shader, "uni_fade"), red, green, blue, alpha);
And lastly, make sure that your getLife() function is returning correct values :)
I hope this helps.