Introducing the NoTime Engine

(Archived from the original Tumblr post for safekeeping.)

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:

Of course, there are disadvantages as well:

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.)