When I show people my latest game, or any of the prototypes that led to it, they usually go, “cool, it’s like those old dungeon crawlers, except with more freedom of movement”. For the longest time I was like, “actually”, but you know what? It’s time to accept that my little graphics engine diverged from its original inspiration right from my earliest attempt.
(Besides, I mention said inspiration at least once a year. It must be the single most cited game on the No Time To Play website. See if you can find it.)
So yes. Imagine a first-person dungeon crawler like in the late 1980s and early 1990s, except you can look – and walk – in eight directions rather than just four. In 1998, Might&Magic VI jumped straight to 3D, presumably influenced by all the shooters that were popular at the time; I'm taking a step back from that point. Turn-based games are still fun, and don't have to be slow or fiddly either; but they pretty much require tile-based movement. And so it becomes obvious why D&D maps are still drawn on graph paper...
The trick is achieving the first-person effect without increasing art requirements geometrically. Interestingly, a solution can also be found in three-decades-old games: sprite scaling, which arcade racers made popular before it culminated in the cult classic Space Harrier. Back then it required hardware acceleration, but nowadays it can be done in real time on the CPU – or could be if layer upon layer of libraries didn't get in the way. Luckily, with turn-based gameplay that's not an issue.
But wait, why not combine modern 3D techniques with traditional gameplay, like Legend of Grimrock does? Because the whole point is to keep it low-tech. It saves a whole lot of headaches when you don't have to worry about the kind of GPU your players have. Besides, the math is a lot simpler, and not everyone is well-versed in math. I'd rather understand how my own engine works, thank you very much.
Speaking of which: this is why I didn't end up writing a real-time raycasting engine instead: because the math is just a little over my head. Don't judge! I have friends who know even less. Better to make something useful at my own level of comfort.
Besides, check out all the things a sprite scaling engine can do that good old Wolfenstein 3D couldn't:
- Placing objects at different heights for truly three-dimensional gameplay.
- Backgrounds that aren't just a solid color, and change depending on which way you're facing. Even a poor man's skybox helps a lot with orientation.
- Third-person camera! That's a big one, opening up possibilities for strategic gameplay, controlling multiple units and whatnot. You can even switch between first- and third-person, just like in World of Warcraft.
Of course, there are disadvantages as well:
- With just one image per terrain feature (barring animations) you're limited to objects that look roughly the same from all directions: trees, columns, giant yarnballs... or modernist houses. While any more would add to both the programmer's and the artist's workload.
- Any attempt to make solid walls will look both ugly and unconvincing. This is very much an outdoors engine. Then again, that's true of other games I mentioned already, and look how famous they are.
- All objects on a map must be of comparable size. You can scale some of them to be a little larger than the tile they occupy, but only a little. Single objects taking up multiple tiles are right out, else the illusion shatters.
That said, you can always place objects between tiles to break up the grid a little; the graphics engine doesn't actually care. It does care about the size of a tile in world units... but a tile can be higher than it is wide (and deep), because the view can only rotate around the vertical axis. A useful feature for depicting urban environments!
While on the subject of depth, that's where things get a bit messy, because the 2.5D camera uses a left-handed coordinate system, with the Z axis going into the screen (because that makes it easier to reason about 3D projection), while the rest of the engine uses right-handed coordinates, with the Z axis going up (because that makes it easier to reason about the map). But converting between the two is a simple matter of swapping the Y and Z axes.
So that's the NoTime Engine. As of this writing, it doesn't yet exist in a stand-alone, reusable form, and has only been used in one completed game. But everyone who saw it (and the other prototypes) noted the distinctive visual style, and how it expands an old genre while preserving its spirit.
Which tells me this is the right path. Stay tuned.
(Just to make it crystal-clear, the engine is now call Eightway.)