i think USE_BOX depends on the bounding box of the entity calling the c_trace, so if this is called by another entity (whoever the "my" pointer points to), the box will be based on that entity's shape. if it is a standalone function with no "my" pointer -- well, the camera doesn't have a bounding box afaik.
you could get the difference between the camera's current z and its new z, and average it out. this way, the camera should smoothly move between the different heights instead of instantly going to the new height.
hope this helps

julz