Cant you use the normal vector returned by a single c_trace ? Not tracing twice or animating for every possible tilt angle...
I'm not shure , but it should work with models , not only level blocks...
This is from the manual :
function test
{
vec_set(temp, my.x);
temp.z -= 1000; // 1000 Quants down
c_trace(my.x, temp, IGNORE_ME);
vec_set(my.x, target);
vec_to_angle(my.pan, normal); // put on surface
}