CL-DoomView  CL-DoomView


CL-DoomView is a program for viewing Doom levels (and a way for me to finally learn OpenGL).

How do I get set up?

CL-DoomView is designed to work with SBCL. It has been tested with SBCL 2.1.0.

Most of the dependencies can be fetched with Quicklisp. However, there are a few that you will have to grab manually:

  • p36-lib: A utility library of mine that provides some extra batteries to Common Lisp. Basically my own personal standard lib.
  • cl-remi-log: My own logging library.
  • cl-dwaddle: My Doom data library for Common Lisp.

Once you have the dependencies:

  • Clone the repository locally where ASDF can find it.
  • Use ASDF to load the system inside of your Lisp implementation (e.g., (asdf:load-system :cl-doomview))

Running the viewer

Command line arguments aren't implemented yet. In the meantime, to run the program, type this into the REPL:

(main #P"/path/to-an-iwad.wad" "map01")

CL-DoomView places some limitations on your wads. First, GL Nodes and GL_PVS data MUST BE PRESENT for any level you want to view. These can be built using AJBSP and glVis, respectively. If you want to view one of the original IWAD levels, please PLEASE make a separate copy before building GL Nodes/GL_PVS data for it. Once command line arguments are in-place, PWADs and external sidecar files (*.gwa) for GL Nodes/GL_PVS will be supported.

Doom, Doom2, and Final Doom IWADs are known to work. Heretic should, but I haven't tested it.

Development Info

Logging messages

You can (push :debug (rlog:logger-muffle rlog:*logger*)) and (push :verbose (rlog:logger-muffle rlog:*logger*)) to quiet debugging/verbose messages if you desire.

Style info

I use a slightly unorthodox style for my code. Aside from these differences, please use normal Lisp formatting.

  • Keep lines 118 characters or shorter. Obviously sometimes you can't, but please try. Use 115 characters for Markdown files, though.
  • I mark types using the form T/..... For example, T/SOME-NEAT-TYPE. For predicates on these, use SOME-NEAT-TYPE-P.
  • No tabs. Only spaces.