Inspiration

We wanted to learn OpenGL and thought making a simple game engine would be quite cool.

What it does

Loads the original WAD (short for where's all the data?) files of the game back from 1993. Renders the levels in a 3D environment that resembles the classic game.

How we built it

eyeballing

Challenges we ran into

Floor and ceiling rendering is tricky and is not implemented properly. The techniques used in the original engine cannot be applied because that assumes rendering on the CPU and we really wanted to do OpenGL. The archaic file format is also a bit inconvenient to work with, especially in a strongly typed setting. Raw 1:1 bindings to OpenGl aren't too nice either. nullPtr in Haskell just doesn't feel right.

Accomplishments that we're proud of

Managed to draw pixels on the screen

What we learned

  • (some) OpenGL.
  • How to sweep unsafe code under the carpet and randomly get segfaults in 'pure' code

What's next for Doom in Haskell

Nothing really, it was planned to be a weekend hack and thus has fulfilled its purpose (it is currently a bit broken, might fix up the simple low hanging fruit) let's just say the no-clip cheat is turned on by default, and turning it off is not implemented yet and a bit (very) inefficient too

Built With

  • ghc-extensions-(lots)
  • haskell
  • type-classes
Share this project:

Updates