Here is what I am doing for my collision detection between entities and map objects (since I don't like the way hulls work for the same reason - they too often pass halfway through walls etc).

Do a trace in the direction your entity is about to move with the vector length being the distance it is about to move. In the trace_mode include the use_box flag. If trace returns a non-zero value you are going to hit something before you have finished your movement - so then do a vec_normalize (movement_vector, result_of_trace);
note that characters won't glide in this case, but just stick. I haven't taken time to work out a means of gliding yet (I just got through writing the code to do the above). Also since I just barely finished I haven't tested it with more than just a few simply blocks and flat wall surfaces and the like, but just an idea that may help you...... basically the whole concept is based upon the 6 day tutorial in the WDL manual where they detect if a entity is standing on the ground or falling. Be aware that you will also need to tweak your min_x, max_x, min_y and max_y values somewhat if you want absolutely no entity overlapping into the walls/objects.

If I understand the undocumented feature mentioned previously in this thread it is essentially doing the same thing (though probably much quicker) and would still have glide options available etc - but then again it is undocumented and may not work for you.....