The solid universe of Thief: The Dark Project

Thief is one of my favourite games. I hung around its modding community in the late 00s, as I was learning to code in order to make my own games. I heard all about its baroque editing suite, and the quirks of its engine, designed so that Thief’s all-important aural landscape would function plausibly.

Screenshot from Thief's Lost City level showing old stone houses inside a vast cave surrounded by lava

Something I continue to think about these years later is Thief’s solid universe.

In most game engines, “the world” of a level is inherently empty, and is filled up with objects by level designers. This can result in amusing bugs like “falling through the ground” into the void beyond, or visual glitches where you can see “nothing” rendered as a “hall of mirrors”.

https://www.reddit.com/r/gamedev/comments/n6bmh7/what_is_this_rendering_bugeffect_called_when_the/

But in Thief, the world actually started off as completely solid. It was full of “earth” until a level designer inserted a volume of air to make a room. The game’s artists carved out levels from this solid universe, tunneling away the rooms, gardens, streets and yes, actual caves, that the player experiences.

Sean Barrett, a lead programmer on the game, describes the process:

The entire space started solid, so one brush operation was “carve out a hole in this area”–in other words “change the area covered by this brush to open”. For example you would use this to carve out a room. Another placed solid matter; you could use this to create a pillar. Another placed water, and another lava. Because space could be of 4 types (solid, air, water, or lava – oh hey, the 4 classical elements!), each operation could be considered by which output type it produced.

Moreover, we allowed these operations to be selective. For example, the “flood brush” turned air into water, but left all other types alone. This made it easier to fill an area with water–you could construct it entirely with air and then fill the lower half with water. Because of the temporal aspect, you could then go and change some of the water to “air” if you needed to. It would have been possible to make brush types that were much complicated (air turns to water, water turns to solid, solid turns to air, and lava unchanged) but this wasn’t actually useful so I think all the brush types were of the unconditional-single-type or conditional-single-type.

https://nothings.org/gamedev/thief_rendering.html#csg

I find this idea somehow comforting to meditate on.

One of the effects in the game itself is that outdoor areas feel almost underground. Though you can see a sky overhead, it isn’t the infinitely-distant skybox of an empty-universe game; it’s a firmament, a surface you can gauge the distance of, painted with stars.

I may need to replay Thief.