I've been coding along with the archives, and I must have done something wrong because my avatar is on the wrong Z-plane when it emerges from the top of the stairs. Instead of going up 3 meters, it goes up 3 meters + the 1.5 meter offset passed to the stairs.
That was leading to no collisions with the "upper floor" walls because I wasn't checking the correct Z-plane for collisions. I was able to "fix" that problem by adding 1.5 meters to the Z in my collision code, but I'd much rather fix the stairs than leave it that way.
In case you're still vague on what I'm talking about, here's what my Z coordinate collision check looks like now:
| if ((Rel.Z + (0.5 * World->TileDepthInMeters) >= MinCorner.Z)
|
| && (Rel.Z + (0.5 * World->TileDepthInMeters) < MaxCorner.Z))
|
That's where my avatar goes when I climb the stairs; Rel.Z plus half of the tile depth in meters. It's absolutely driving me batty. When I step through, I can see the little guy suddenly jump up by the offset, then move the rest of the way in the expected increments, but I can't pinpoint what's causing him to do that.
I'll paste in all the code I think might be relevant beneath this, but let me know if you need something I haven't included.