If you're making add-ons, plan on them not working on the shareware game, and plan on including statements about the trademarks and copyrights that id Software owns, as well as disclaimers that they won't support your add-on product, nor will they support DOOM after it has been modified.
Now the theory HAS been verified. However, the actual implementation is still being worked on (debugged) as I'm writing this. Also, I don't want to steal anyone's hard work outright. This means that there is NOT a node creation algorithm here, but I do outline how one can be done. I have tried to come up with one on my own, but it is too difficult for me, especially with all the other things I'm simultaneously doing.
Where you WILL find pseudo-code is in the BLOCKMAP section. I borrowed an excellent idea from a contributor, and code based on the algorithm given here should be very fast. Even huge levels should recalculate in seconds.
Another new section completely explains the REJECT resource.
This entire document has been re-formatted, and there have been several other additions, and hopefully the last of the typos has been rooted out. I consider these specs to be at least 95% complete. There are only minor gaps in the information now. If the promised "official specifications" were released today, I expect this would compare favorably with them (although I know exactly what parts of it I would look to first).
I've been notified of something very disappointing, and after a couple weeks of trying there seems to be no way around it. The pictures that are used for sprites (things like barrels, demons, and the player's pistol) all have to be listed together in one .WAD file. This means that they don't work from pwad files. The same thing goes for the floor pictures. Luckily, the walls are done in a more flexible way, so they work in pwads. All this is explained in chapter [5].
Ted Vessenes (tedv@geom.umn.ed) I had the THING angles wrong in the original specs. Matt Tagliaferri (matt.tagliaferri@pcohio.com) The author of the DOOMVB40 editor (aka DOOMCAD). I forgot to describe the TEXTURE1/2 pointer table in the 1.1 specs. Also, helped with linedef types, and provided a good BLOCKMAP algorithm. Raphael Quinet (quinet@montefiore.ulg.ac.be) The author of the NEWDEU editor, now DEU 5, the first editor that can actually do the nodes. Go get it. Gave me lots of rigorous contributions on linedef types and special sectors. Robert Fenske (rfenske@swri.edu) Part of the team that created the VERDA editor. Gave me a great list of the linedef attributes; also helped with linedef types, a blockmap list, special sectors, and general tips and suggestions. John A. Matzen (jamatzen@cs.twsu.edu) Instrument names in GENMIDI. Jeff Bird (jeff@wench.ece.jcu.edu.au) Good ideas and suggestions about the NODES, and a blockmap algorithm. Alistair Brown (A.D.Brown@bradford.ac.uk) Helped me understand the NODES; and told me how REJECT works. Robert D. Potter (potter@bronze.lcs.mit.edu) Good theory about what BLOCKMAP is for and how the engine uses it. Joel Lucsy (jjlucsy@mtu.edu) Info on COLORMAP and PLAYPAL. Tom Nettleship (mastn@midge.bath.ac.uk) I learned about BSP trees from his comp.graphics.algorithms messages. Colin Reed (dyl@cix.compulink.co.uk) I had the x upper and lower bounds for node bounding boxes backwards. Frans P. de Vries (fpdevries@hgl.signaal.nl) Thanks for the cool ASCII DOOM logo used for the header.Thanks for all the help! Sorry if I left anyone out. If you have any comments or questions, have spotted any errors, or have any possible additions, please send me e-mail.