i don't find it that strange
- it's far faster to compute "am i above a floor" than store a 3d lookup table
- storing sorted lists when comparing maximums is another easy optimisation
- having ceilings extend up is easier than adding new objects inside every convex shape in a level, and then you're just extending up from a different point and can hit the same bugs
the problem isn't the method, really
the problem is that some co-ordinates are a few pixels off, some models don't have a triangle to cover a gap, and some of the positions aren't sorted, and discrete math does no-one any favours
in a more modern engine, you'd still have points being off, you'd still have gaps in models, and even then, you still get weird collision bugs.
sure enough, these are the sorts of bugs that, given enough time, are easy to shake out, especially with the right diagnostic tools
... but not every gamedev has the luxury of time