I made a Quake Map for the Quake 30th Anniversary limits jam!
You also can and should play the rest of the maps in the jam. For maximum authenticity I'd suggest the playing on the DOS version through DOSbox, which is what I tested in, or if you aren't a sadist, something like Qrustyquake., which has a few more modern amenities while keeping the software rendered look.
The mapping requirements were:
I had a basic layout for a deathmatch map lying around that I'd been working on, so I decided to see if I could adapt it into a single player map. This was a terrible idea and ruined my life.
Performance is a challenge. It is very important to quake (and all 3d rendering) that it is able to cull as much unseen geometry as possible. One way Quake does this is through a few compilation steps. Very simplisticly, it breaks the map into areas bounded by portals then chunks within that and precalcuates what geometry is visible from each different chunk of the map. In modern maps, this is not hugely important. It is still useful to do so for a number of reasons, but modern gpus are so much more capable than a pentium cpu that as a mapper it isn't something you have to actually worry about. Back in 1996 though, its very important that the player can't see too many rooms at once. Right angle corners are a big feature, windows less so. Next time you play Quake, try thinking about how much you can see at any time and how few long sightlines there are.
This deathmatch map has long sightlines (probably too long for a DM map as well), big parts of the arena are visible from other parts of it and it was averaging about 1500 world polys in its blockout, before any decorations were even added. A lot of the basic process then was breaking up the larger spaces into (hopefully interesting to play) subspaces that broke line of sight. An example of this is a u-bend turn by the nailgun/rocket launcher, which basically emerged to prevent the two areas it connected from being visible at the same time. Its not that there's no conscious design going into decisions too, but the layout is still significantly informed by the technical restrictions. The original map let you pass through the centre of the spindle either around the sides or on top of the central pillar, but this left too much visible geometry to run acceptably well.
This image is taken from roughly the same position as the one above it. I hope it illustrates how the basic layout remained the same, with various paths and sightlines cut off.
While this was going on, the visual identity started to emerge. There's a really beautiful map in Machine Games' Dimension of the Machine based around a desecrated church. Suspended over a huge chasm, it makes for quite the vista, blocks of white marble pierced and tainted by massive iron pipes. You get the sense it was laid down by the march of industrialism, a parasite erupting out of its innards long before it was infested by monsters. I couldn't hope to make something like that, in general, but especially with the base Quake limits, but its where the basic set of wall and floor textures came from and I hoped to capture a little of that look. I like to have a sense of some sort of narrative in my maps, at the very least in my head, to help focus the map around something. The deathmatch origins and limited scope meant I didn't really have a good sense of this outside of the keys you collect implying some vague emotion: The rune of regret is revealed and so on. This ended up more as a formal and art exercise than I was expecting then, but I think it worked out ok.
Cutting the map up mostly brought performance under control, but there were a few spots where if you looked in a certain direction, you could just about see through to the other side of the map. Notably from the start room you could see through the centre of the spindle all the way to the other side still. Doors don't fix this problem. As moving entities, they can't be accounted for by the compiler and so do not block sightlines. The solution to this then came from the final visual part of the map: that its an enormous cistern with water flowing down from the top parts of the map into the lower. Water volumes in 1996 Quake are opaque and do not move, meaning they are sightline blockers. It would look very strange to have blocks of water floating around the map though and the player would have to swim through them. Make them one unit thick though and cover them on both sides with a non colliding animated waterfall texture and you have a space that blocks line of sight, can be moved through by the player without them noticing its swimmable water since its so thin, and is visually justified. This also works with any 'liquid' brush in Quake, I think there's something pretty similar in Tonhao's map with portal textures going on.
File size was also a problem. 1.44 mb is not a lot, especially when textures take up so much room, so here are most of the things I did or considered to reduce filesize.
Lighting is a challenge. This was a place where there was some choice. It is quite possible and completely acceptable to use modern compilers to get more sophisticated lighting than was available in 1996, while still being fully compatible with the original game. It doesn't change the type of data the game uses, just the sophistication of the data you're giving to it. Modern compilers offer things like bounce lighting and different light falloff settings rather than the completely linear falloff of the original game. This is both quicker, and makes for far more naturalistic lighting. Without it you basically have your key lights, then put a huge amount of fill lights around, which is both time consuming, and looks a little odd if you ever stop and think about it. In the name of authenticity I ended up sticking with the basic tooklit. No bounce lighting, no super sampling, linear falloff. This was a huge mistake and ruined my life, especially as every individual light takes up file size. It takes a very long time and is quite tedious.
At this point the map was basically done. I had the normal difficulty implented, lighting and triggers all set up, and was just about scraping by on file size. The final hurdle was difficulty balancing. My usual workflow is to duplicate all enemies and pickups onto different trenchbroom layers and toggle each entity set to a different difficulty. This lets me hide entire difficulties and work on each seperately, rather than having to click each entity and check its settings to see what difficulty they're one. More entities, more data though, so I had to suffer the inconvenience. At every step in this late process, imagine also that I was constantly drifting over the file size limit and then scouring the map for ever smaller micro savings to bring it under agin.
I also really wanted deathmatch support but again seperate entities (deathmatch spawns etc.) meant more size. Where possible, I reused pickups from the singleplayer map (since existing items can be flagged to appear in deathmatch without adding a whole new entity) but this isn't really a great way to balance a map. I suspect in any non casual play, most of the action would take place in a few hotspots on one side of the map because of the way key items are distributed, which I did try to compensate for with additional item placement elsewhere. Without battle testing though, I have no idea how effective this was, sadly. I do still want to bully some friends into playing it sometime and see what happens.
I made it though, the cumulative scraping and scrimping left me at the exact limit of 1,457,664/1,457,664 bytes. Nice and tidy.
So as I crawl through the finish line, what, If anything, did I learn?
I wrote the bulk of this a few months ago, but am posting it on the day of Quake's 30th anniversary. On the one hand its kind of amazing that such a conservative game wrt its basic design still has its hooks in people (me) 30 years later. Really though I think this simplicity, this stripped back design, is what sustains it. Its pretty much perfectly positioned as a kind of ur-fps. You couldn't really make a game like this now, because quake has gently but firmly occupied that cultural spot, nothing made now is really allowed to be quite this straightforward. Its just a hair complex enough to carry the player along in combination with its stellar mood, simple enough that it can be reformed like clay in the hands of the people who continue to be inspired by it into endless little experiences and narratives. Its been a long road with no particular destination and long may it continue. Good shit.