The non-euclidean library of Ágonos Temple is now fully navigable, although I'll have to add more mechanics when I model and program Alimaña and turn it into a stealth section. I didn't need to use the depth buffer (although I still want to learn how to do it).
Light geometry of the non-euclidean library
The red and blue quadrants in that graph include two overlapping meshes each, meaning that the library has six quadrants - which of course makes no sense, but my goal was for it not to make sense. To make it navigable, I had to figure out when to swap those meshes without the player noticing the trick.
I initially over-complicated it, because I didn't realize that the small bookcase on the left already solved the whole problem. As shown by the red and blue lines, the overlapping quadrants are never visible at the same time because there is always something blocking the view, so it was as simple as swapping the red quadrants when the camera passes point a and the blue ones when it passes point b. It works seamlessly.
To keep things simple, I combined all colliders into two nodes, one for the first three quadrants and one for the last three quadrants. However, I keep embarrassingly forgetting that visible and solid are not the same thing in game development, so it took me a moment to realize that the colliders have to swap when the player, not the camera, passes point a or point b.
I spent the last few days modeling level 6, the Battle of Pedrea (formerly Alegro, but I didn't like the name). As usual, it feels a bit small, but I can rearrange the buildings without much effort. The level was initially supposed to be just a demon swarm murder-fest, but I added a few environmental puzzles so bigger enemies are more fun to kill.
However, the first tests have shown a few game-wide bugs I need to fix (or features I'll definitely keep):
Guardrails don't stop jump attacks, so they're completely useless. I don't mind if crazy players yeet themselves off the level, but I can't have them accidentally softlocking themselves.
Breakable blocks and climbable blocks are on different layers, so I can't have a block that is both breakable and climbable unless I make it announce its climbability, which opens a different can of worms: if I can mark specific objects as climbable, I can vastly simplify level designs by not letting the player climb anything except what I specifically allow, but that would reduce their freedom of exploration. So I have a decision to make.
The destroyed castle at the end of the level can be entered through the chimney with a kamikaze jump. I'm totally placing a collectible in there.