More proof that the GS movement code sucks, eh?
I don't want to use PhysX and I don't want to write my own collision system. All I want to use is c_move() and c_trace(). Additionally the code shouldn't be too complex (it's not important that the result is 100% perfect).
c_move and c_trace are next to useless unless you place invisible walls over each and every non-flat surface and generally pamper the system into submission. No matter which way you look at it you will end up with a complex solution. Unlike Quake's AABB, which is very robust, even a slightly acute surface in Gamestudio can cause tremendous problems to its built-in movement system.
EDIT: @Pappenheimer: JCL's solution doesn't solve many problems and opens several cans of worms on its own.