My history with textures

I first got hold of DOOM v1.1 in February of 1994, and like everyone else at the time I was blown away by the atmosphere. Many attribute this to its novel solution for fading to darkness in the distance, the non-orthogonal designs and varying heights, or the sound design. Certainly these are all major contributing factors, but to me the style of the textures and sprites is what stood out the most relative to all other games at the time.

As my interest in DOOM grew and I started mapping in the spring of 1994, I didn’t really have an urge to make my own textures; Getting to craft worlds with the existing ones was exciting enough. But once peopled started figuring out how to add custom textures to PWAD’s, the idea that I could do that too slowly began to grow.

Before I go on, it’s probably worth pointing out that I’ve never considered myself an artist, even now. I merely love DOOM and get a kick out of crafting content for it, regardless of whether it’s levels or textures.

While I had dabbled in textures starting in 1996, my first released texture contributions came in Gothic DM 2 (May 2, 1998), and Overload DM (August 28, 1998). I had contributed textures to Mordeth even earlier, though to this day those remain unreleased. Eventually I ended up joining and subsequently leading The Darkening team for episode two, creating what was probably one of the more complete texture sets at the time, at least considering it wasn’t based on assets from other games. It was released August 5, 2000, and for the next 18 years this was my last released DOOM project.

Discontentment ensues

The text file for Darkening E2 stated that using the textures for other maps was not allowed, and I recall having two reasons for this: First, that I wanted this to be exclusive to The Darkening, feeling that that letting others use them would dilute the iconic look. But the second reason was that before it was even released, I felt I could do so much better: I didn’t want these textures to be my legacy. (They were released as a texture pack for anyone to use much later, as I changed my mind over time.)

A few weeks after Darkening E2 came out I got a job and moved to Stockholm, Sweden’s capital, leaving the tiny remote town I’d grown up in. For then 20 year old me, this massive change provided incredible amounts of distraction and DOOM feel off my priority list. But the feeling of wanting to create and release some truly pro level textures lingered.

Perfect, Odium, and more

In the following years I became involved in several ill fated DOOM projects. ‘Perfect’ was the first one post Darkening E2, lead by fellow Swede Martin Friberg and involved Derek MacDonald (afterglow). This is where I started to craft a new set of textures, still drawing massive inspiration from Quake 2 but paying closer attention to the techniques used. As that project lost momentum there was Odium, again with Derek and now with Mike Watson (Cyb). This inherited the Perfect assets, and more was added. This too was largely abandoned, more by me than by Derek or Mike. Other project ideas were tossed around, there was even a darken3.wad for a while, and I had another project called Summoning that also didn’t go anywhere.

I think these all failed because I had too many other things going on in my life to care sufficiently to pull through on a major DOOM project, and I wasn’t going to lower the bar for myself. But the interest never faded away entirely, and all these years I kept collecting source imagery, ideas, and references.

A fresh start

Eventually I decided to just start over: I’d recycle the things I still liked from the abandoned projects, tune up the stuff that could be salvaged, and just throw out anything that simply wasn’t of professional quality.

This time there wasn’t a bigger project attached to it, which was a major relief and probably a key reason for why OTEX exists: It allowed me to take proper joy in creating textures again, focus on learning techniques and free exploration.

In the years I lived in New York, 2013-2018, I traveled for work absurdly often. Holed up in AirBnB’s or hotels with my Mac laptop, I started finding the time and mindset to create, and the set quickly grew. My progress log’s first entry is from early 2017 but I had been drawing quite regularly for well over a year at that point.

The purpose of OTEX

There’s been a lot of effort and talent thrown at DOOM textures through the years, but remarkably there isn’t a single free-to-use texture set that is diverse, of consistent commercial quality, and not derived from other games.

As I was finding that my skills were beginning to catch up to my scrutinous eye, the idea of creating such a texture Wad began to form. I took a deep nerd dive into reading up on old techniques used at id, analyzing Adrian Carmack’s work across games in great detail, and collecting even more source material.

During development I decided I wanted OTEX to become a de facto standard for non-derivative DOOM textures, and realized that meant I’d have to outdo all other texture sets in terms of  versatility, and do so while sustaining a very high quality level. The incredible work in BTSX has remained a major inspiration in this pursuit, but I also wanted the broad range of CC4-TEX so that mappers would be happy to use OTEX as their one and only texture resource. These are more aspirations than quantifiable goals, but served as my guiding principles.

I decided to give myself a deadline, to avoid this too losing momentum and becoming abandoned, and DOOM’s 25th birthday seemed like a good idea: December 10, 2018.

Versatility vs insanity

The ambition to make OTEX the only texture Wad anyone would need is admittedly quite delusional: There’s been so many themes crammed into DOOM over the years that covering, extending, and perfecting them all is close to impossible. Beyond that, I wanted to explore new themes: We’ve had egyptian ruins but I wanted Cambodian. We’ve done medieval but I wanted Art Deco. There’s industrial but I wanted Brutalism. I could continue for a lifetime and never be done, and who knows—maybe I will keep going.

For the initial release, I’ve prioritized expanding the sets I already had going on rather than getting some placeholders in there for all the planned themes. I’ve also tried to make sure the basic necessities are covered: Doors, switches, lights. This means that there’s a lot missing when comparing to other major texture sets, and if you want a very specific theme then OTEX  might not be the best choice. But I’d rather have it that way for now than to include something half-assed.

What makes a DOOM texture

Aside from the obvious basics—the data format, the resolution, and the palette—DOOM textures owe their distinct aesthetics to the production techniques used, which at the time were somewhat novel.

Photo sources

There had been games using photographic sources before DOOM, but the vast majority were digital drawings. In the early 1990’s digital cameras were extremely expensive (and/or shitty), digitizing video gave mediocre results at best, and scanners failed to provide the per-pixel control needed when targeting the low resolution of 1993 computers and consoles. DOOM changed this by including art that was expertly fine tuned from photographic sources, or painted over digitally to create a hybrid look that felt far more gritty and real than the more cartoon-y look of its contemporaries.

As Adrian Carmack had honed his skills in pixel art for a big range of id games already, he came into DOOM with a very strong fundamental understanding of digital art. The reason many games from 95-98 still look worse is they relied on photographic sources without having the digital art craftsmanship foundation. So you ended up with shitty dithering, too much contrast, blurry scaling, and terrible filter effects. DOOM had almost none of that, contributing strongly to its celebrated legacy.

My take on the art style

With OTEX I’ve strived to capture that original DOOM art vibe. While I don’t think I’ve nailed it perfectly, the set feels fairly coherent and largely faithful to DOOM’s blend of photo sources and digital art. But the inspiration comes from elsewhere too: I’ve opted to borrow styles and techniques from later Adrian Carmack game art rather than from Raven or 3D Realms games, as the latter were either more cartoon-y due to being entirely hand drawn, or less polished photographic sources. I’ve also mostly avoided 3D modeled source material.

One key difference is that my OTEX textures has more elaborate and often more pronounced “bump mapping” than the vanilla textures: The highlights and shadows that indicates shape of panels, gaps between things or rivets is much more inspired by Quake 2 than by DOOM, and a very distinct evolution from my work for Darkening E2.

Dithering was very rarely used in any vanilla assets so I’ve avoided it almost entirely, with only a small set of exceptions. It simply looks too noisy at DOOM’s texture resolution and with its bold palette. You could get away with more of that in the far more subdued Quake 2 palette and texture filtering on GPU rendering is almost a must to make dithering look good, but DOOM should be played without texture filtering in my opinion, so that is what I’ve designed for.

I’m still mystified as to how Adrian achieved some of his techniques using Deluxe Paint, but I’ve almost exclusively used Photoshop instead of going fully retro. The tools affect the work of course, so this alone accounts for some key differences. His reliance on vertical lines in his materials—from STONE2 to TEKGREN*—is something I’ve tried to replicate, but never quite achieved to the degree he did. (See OBASEO*, ODOORD*, and OMETLB* in OTEX for some of my attempts.)

Structuring a texture Wad

Making a big texture set is not just about the art itself but also about making it easy to work with. If someone gave me this Wad, how would I ultimately want it to be set up?

Naming convention

I settled on a naming convention where everything starts with an O since that’s what my name begins with and no vanilla textures use that as their first character. Out of the remaining seven characters, I decided to dedicate 4 to the theme/material, 1 to theme variation, and 2 to pattern variation. A hypothetical texture named OPANLD43 would convey the following info:

  1. O means it’s an OTEX texture, made by me.
  2. PANL is a four letter material or theme marker. Often these omit vowels to fit into 4 characters, so in this case PANL could mean “panel”.
  3. D means it is the fourth material variation within the theme.
  4. 43 is (most often) code for the pattern, where 4 denotes the Y divisions and 3 the X divisions. (this was sloppy of me, as it should have been XY and not YX). In the case of 43 you should expect 64×32 panels.

This, like any naming convention limited to 7 characters, has run into some problems:

  • Some materials that should logically be under one theme is under another. This is most obvious with how many blackened metal themes are not under BKMT (BlacK MeTal) but instead under IRON, METL or something else.
  • Some theme variations have textures that should objectively have been their own theme variation letter. See OBKMTD03/49/59/90+ for example.
  • Not all materials adhere to the number system. OBKMTB is one example, and many others (such as bricks) just ignore the number pattern for an incremental system instead, sometimes using steps of 10 to denote color/pattern combinations (like OBRCKQ).
  • Sometimes the Y/X division of the numeric values fail. OMETLD/E/F has more pattern variation that this system comfortable handles, and OSPRTE has a lot of variations with the same pattern division but different styles, putting a different type of stress on the system.

In general though, the system allows for some fairly smooth texture exploration. Say you’re using a 64x64px pattern and want to try out other materials: Just search for ‘33’ in OTEX and all the 64x64px patterns should show up.

TEXTURE1 vs TEXTURE2

In the original Shareware DOOM, textures were defined in a list called TEXTURE1. Since this was just episode 1 with a smaller set of textures, the full game instead uses a lump called TEXTURE2. For DOOM II there was no shareware version so it only uses TEXTURE1 and practically all projects that supply custom textures in a Wad include a TEXTURE1 lump with definitions for all the DOOM II textures plus their own additions.

But the game engine still recognizes TEXTURE2 as a valid texture definition lump if it’s present, even when using DOOM2.WAD as the IWAD. Furthermore, it seems all implementations of the engine can read both TEXTURE1 and TEXTURE2 at once. This should in theory make it possible to define all the OTEX textures in TEXTURE2, so that as a standalone resource Wad it’s compatible with all DOOM IWAD’s as well as other texture sets as long as they use TEXTURE1.

Unfortunately, this doesn’t work in PrBoomPlus. To explain why, we need to dive a bit deeper.

In DOOM, textures are made out of patches. For example, switches are usually a switch patch placed over a patch of the base material. In a DOOM Wad file, textures are thus not images, but instead a list of references to patches and their placement. Unfortunately each item in this list points to patches via their order of appearance in a lump called PNAMES. So a texture actually has 3 components:

  1. The graphics data itself, a lump in DOOM’s picture format
  2. An entry in PNAMES referencing the graphics lump
  3. An entry in TEXTUREn referencing the index # of the graphics lump’s appearance in PNAMES

While the engine can load both TEXTURE1 and TEXTURE2, each of them will reference indexes in PNAMES. But it seems most engines, with the exception of the GZDoom family, just loads the last PNAMES list and assumes it includes everything, which means we have entries in both TEXTUREn lumps referencing the same PNAMES number expecting different things. The result in PrBoomPlus is that TEXTURE1 ends up getting patches from the PWAD, breaking all vanilla textures.

Most resource WAD’s include the IWAD’s PNAMES and TEXTUREn entries alongside its own, so that it’s possible to use both IWAD and PWAD textures, but this means you’re locked to that specific IWAD and adding additional PWADs—which I was hoping the use of TEXTURE2 would allow—turns out to not be possible.

The right thing for the engine to do seems clear when reading the DoomWiki entry:

At startup time (to be precise, during “R_Init: Init DOOM refresh daemon”), the patches inside the Wad are read and combined into Wall Textures, or how the source code refers to, “map textures”.

If it’d just do this for TEXTURE1 and TEXTURE2 separately using the PNAMES lists native to that Wad, this should work. It seems difficult to imagine a scenario where this would break some other expected behavior, and indeed GZDoom successfully does something close to this.

So until this is solved in PrBoomPlus and other engines, OTEX needs to be used as the only texture resource for your maps, or you can use GZDoom.