E1M1

Starting to dissect DOOM, by
2019-01-02

I was gifted the Game Engine Black Book DOOM for Christmas, to my great pleasure. It will let me finally satisfy the curiosity that has been lingering in me since '93. And I suspect it is not entirely without some expectation that I get this book now, after having recreated the rendering engine from Wolfenstein 3D in a live-coding session at RevolverConf 2018.1.

My primary goal here is to implement a rendering engine of the same kind that Doom sports. But I should note that this will be for my educational benefit, so there is no point in taking shortcuts or arriving at the goal as quickly as possible. And this is not going to be quick no matter what.

So, I'll attack it piecemeal. I'll try to identify steps I can take along the way that will bring me closer to the rendering engine, but will not require me to set aside extended periods of concentration. Those are in short supply.

These last few days, I have created a library and command-line tools to work with WAD files (wad-ls and wad-read), a delightfully simple, if a bit stupid, data format. With that as a building block, it was relatively simple to read and make sense of a map, and even render it as an SVG.

This is what I love about graphics programming. After a relatively small effort, my results are clearly visible in the unmistakable shape of E1M1:

E1M1

, 2019