D.A. Garden, on 18 October 2014 - 09:14 AM, said:
I never said anything about a "3 path system". Aside from referencing the 2-path system used since Sonic 2, what I did say was this:
"Although this only allows for two paths to cross the same space without issue, there is an area at the bottom of the last loop before the giant tree in act 1 where three paths cross each other- up the loop, down the loop, and up onto the loop from the separate path below"
I described, in detail, three distinct areas of collision that crossed each other on a 2D plane and how they were dealt with. The two-path system takes care of going up and coming down the loop, while the other, entirely distinct level path (not collision system path), which also crosses the same section of the level, is handled using this special exception. I've seen the code in the original game, and finding it is, in fact, how I got that particular level section to work correctly in my DS port after seeing that it didn't when I first imported the level. The pseudocode in my blog post is almost an exact duplicate of the C version I created for the 3DS port, which is based on the exact procedure I found in the original assembly
In all three versions, for exactly the same reason, it is absolutely necessary to handle it as an exception. Top-only collision is otherwise treated the same when found on a wall you're running up/down as it is when you encounter it on the floor below. You're allowed to pass through it "sideways" and from "below", but you always stand "on top of" it if any of it is below you. It's not fixed-directional; it's based on your orientation

00