Something like the mezzanine, if I understand it correctly, is partially in the game already! The way the abyss works, (just mmap it in wizmode,) it generates new terrain when you come close to the map's edge, and destroys terrain on the other side, moving the player character to the middle of the new map. The mezzanine has to do that, except the terrain must be finite and persistent, which the abyss isn't.
- Code:
row 1) # level 1 #
row 2) PART OF LEVEL 1 ONLY > # # < if you're here, the game considers you to be on level 1
row 3) PART OF LEVEL 1 ONLY > ##### ##### < if you're here, the game considers you to be on level 1
row 4) PART OF LEVELS 1 & 2 > #### ###### < if you're here, the game considers you to be on level 1
row 5) PART OF LEVELS 1 & 2 > ##### ##### < if you're here, the game considers you to be on level 2
row 6) PART OF LEVEL 2 ONLY > #### ###### < if you're here, the game considers you to be on level 2
row 7) PART OF LEVEL 2 ONLY > # # < if you're here, the game considers you to be on level 2
row 8) # level 2 #
the rows labelled "part of levels 1 & 2" would be the mezzanine. So, you step onto the current map's edge, and end up on the other level. Of course other shapes can be used. Big shapes. Spirals. Tunnels. And they would be considered terrain of both levels, with a boundary where the previous level deactivates and the new level activates. (Just stretch out the above diagram, for an example.) If you want, you can place these mezzanines anywhere on a level, not just the edge:
- Code:
row 1) example of small mezzanine
row 2)
row 3) ## ###
row 4) #>## #>#
row 5) #<# ##<#
row 6) ### ##
level 1 level 2
(the # must be "unnaturally hard" of course)
You basically have one large, continuous game-world, which I find appealing.
Note tho, in my diagrams, if the player moves from row 4 to row 5, and the level changes from 1 to 2, then row 4 is empty, and there are no monsters adjacent to it on the
new level, so no monster is going to move there. I like that.
If you
want monsters to follow the player around, even with my killhole-mezzanine example, you can "freeze"
not all other levels, as is done currently, but instead, everything beyond a particular radius/distance, such as 30 tiles, or current+adjacent levels. Computation is kept manageable. Monsters could follow freely, and this is an improvement over most "making monsters come with the player" suggestions, because it does not introduce any new and arbitrary rules for how stairs function.
Such "freezing" tends to cause problems in some games, but may not be a big deal in Crawl, since there's not much you can do to manipulate monsters farther than 30 tiles away from you.