Sounds like your not hitting the right object/polygon - would be best if you posted your code.
Anyway the general approach would be something like this
vec_set(temp, vector(50, 0, 0));
vec_rotate(temp, my.pan);
vec_add(temp, my.x);
if (c_trace(my.x, temp, IGNORE_ME | USE_BOX))
{
vec_to_angle(my.pan, normal);
my.tilt -=90;
}
Der Normalenvektor zeigt naturgemäß vom der getroffenen Oberfläche weg, setzt man ein standardmäßig ausgerichtetes Modell auf diese Rotation würde es 'auf der Oberfläche stehen'.
my.tilt -=90 (evtl isses auch +=90, bin da grad nich sicher) rotiert den Player sozusagen mit dem Bauch zur Oberfläche.