Hi,
I usually completelly remove the goraud lighting on character sprites. I do a mix of a floor shadowmap as ambient color plus simple distance lighting. When the sprite is over a block the vecAmbient vector does the job as ambient color, but over terrains or models it is needed to set the sprites UNLIT and LIGHT flags and set its color vector to the objects shadowmap color. I do all this stuff on the trace to the ground.

Code:
float4 PS (
	float4 tex : TEXCOORD0,
	float4 worldPos : TEXCOORD1 ) : COLOR0
	{
		float4 textureColor = tex2D ( ColorSampler, tex.xy );
		float4 color = vecAmbient * vecLight;
		float fDepth = distance ( vecViewPos.xyz, worldPos.xyz );
		for ( int i=0; i<iLights; i++ )
		{
			float Distance = distance ( vecLightPos[i].xyz, worldPos.xyz );
			float Radiance = saturate ( ( vecLightPos[i].w - Distance ) / vecLightPos[i].w );
			color.rgb += vecLightColor[i].rgb * Radiance;
		}
		color.rgb = saturate ( color.rgb );
		color.rgb *= textureColor.rgb;
		float Fog = saturate ( ( fDepth - vecFog.x ) * vecFog.z );
		color.rgb = lerp ( color.rgb, vecFogColor, Fog );
		color.a = min ( vecLight.w, textureColor.a );
	   return color;
	}



Code:
var height = c_trace ( &my->x, &vPos, IGNORE_ME | IGNORE_MODELS | IGNORE_SPRITES | SCAN_TEXTURE );
vec_set ( &my->blue, COLOR_WHITE );
if ( HIT_TARGET )
{
	if ( you ) // if you exits, is the terrain
	{
		if ( you->lightmap )
		{
			BMAP *bmpSkin1 = ent_getskin ( you, 1 );
			var scale = bmap_width(you->lightmap) / bmap_width(bmpSkin1);
			var format = bmap_lock ( you->lightmap, 0 );
			var cX = hit.u1 * scale;
			var cY = hit.v1 * scale;
			var pixel = pixel_for_bmap ( you->lightmap, cX, cY );
			COLOR col;
			pixel_to_vec ( &col, NULL, format, pixel );
			vec_set ( &my->blue, &col );
			set ( my, LIGHT | UNLIT );
			bmap_unlock ( you->lightmap );
		}
	}
	else // hit a block
	{
		reset ( my, LIGHT | UNLIT );
	}
}



Other way I can imagine but never did is building a normalmap that describes opposite normals to the face on the borders of the sprite, so when a light is in the sprites back some of the pixels of the border of the sprite are lighted regarding to the light direction. It could look pretty cool.

Hope it helps.
Salud!