Skip to the content.

This is part of the series behind the scenes of RP2040 Doom:

See here for some nice videos of RP2040 Doom in action. The code is here.


The following is a brief high level overview of the development steps, with some details of things that aren’t described in other sections. I am apparently incapable of using meaningful commit messages, so I include some examples here as a window into my sanity/thinking at any given point!

Step 1 - Build wrangling and new Doom executables

Random commits: “ooh mmap”, “what is vanilla doom I wonder?”

Step 2 - Proving out the new 3D rendering strategy

Random commits: “look ma no visplanes”, “oops broke something”

Step 3 - Prototyping ahead-of-the-beam rendering

Random commits; “hot fuzz”, “confused”, “pixels - gloriously crappy pixels”, “wootling - purple sky at night; textured delight”

Step 4 - Getting ahead-of-the-beam rendering working on RP2040 adding floors/ceilings

Random commits: “split baby in 3”, “full on tee fucking hee”

Step 5 - Working towards a real RP2040 Doom binary

Random commits: “argggh midi conversion is nuts.. and loading music from temp file; jeez”, “somehow doomy_tiny makes some noise”

Step 6 - A diversion into OPL2 emulation

Random commits: “good luck!”, “arse”, “hee haw some sound - although it takes a whole f-ing cpu”, “asm bound to work!”, “WEEEEEEEE”

Step 7 - Getting the game loop running

Random commits: “yikes mucho memory”, “ok so far”, “doh broke something”

Step 8 - Adding sound effects

Random commits: “shrinky sound effects”, “painfulling our way forward with picomixer”

Step 9 - Running the “baby” prototype alongside the game loop

Random commits: “doom_baby is born… looks like some flash contention”, “oops”

Step 10 - Working towards actual Doom rendering, and a new WAD conversion tool

Random commits: “woot … whd loading”, “ok wad size is looking a little depressing right now”

Step 11 - Adding single-color 3D rendering

Random commits: “pink eye”, “yes its playable”, “really quite fun

Step 12 - A quest to reduce RAM

Random commits: “getting in on the short pointers”, “ok but why”, “oops this broke it”.

Step 13 - Working on level data compression

Random commits: “wiffling”, “convertopants”, “looks plausible”

Step 14 - A foray into music compression, demo compression, transparent walls and cheat codes.

Random commits: “brain strain”, “can this be true?”, “mind the gap”, “woot decodoplasty”

Step 15 - Dragged kicking and screaming into graphic compression

Random commits: “yup that’s broken”, “wtf”, “double wtf”, “fuck frankly”

Step 16 - Threading textures all the way through to the rendering and letting the “baby” die

Random commits: “extract a few functions”, “cogitate”

Step 17 - Actually rendering textures from the compressed data

Random commits: “um hail mary update of texutremids”, “why are there holes?”, “stupid duplicate patch”

Step 18 - Adding the status bar and menus

Random commits: “well that was confusing!”, “hmm”, “man this status bar is hard”

Step 19 - Adding splash and intermission screens

Random commits: “something approaching an intermission screen at least working on device… very farty music”, “tee hee menu during splash”

Step 20 - Adding text mode for quit to DOS text

Random commits: “woot, that works”, “quittastic”

Step 21 - Improving texture rendering speed and adding an FPS indicator

Random commits: “seems less crashy”.

Step 22 - Adding wipe effect

Random commits: “ooh wipey”

Step 23 - Adding “Bunny” end screen, DOS shell, HELP screens

Random commits: “saved about 20k i think”, “more foolishness, but it does say how much space there isn’t”

Step 24 - Adding “switches” and texture/flat animations

Random commits: “woot switches for the bitches”

Step 25 - Getting more speed-ups

Random commits: “wtf this seems slower”, “ok new encoding doesn’t break shit, lets try a few”, “thought stone was the problem, it was me”

Step 26 - Supporting load/save of games, saving more space

Random commits; “getting smaller”, “somewhat plausible”

Step 27 - Adding networking support

Random commits: “ok.. lets try and hail mary the lobby”, “ack this is hard”

Step 28 - Doing more optimization, code shrinking and bug fixes

Random commits: “fun fun good”

Step 29 - Adding Ultimate Doom and Doom II support

Random commits: “going quite nicely; e4m2 has MANY columns”, “remove WEEBLER”

Step 30 - Back-filling missing functionality, adding USB support

Random commits: “aok”

Step 31 - Having a look at “TNT: Evilution” and “The Plutonia Experiment”

Random commits: “arghh.. tex/flat anims don’t work they way i thought they did!”

Step 32 - Adding the “Doom Cast” end screen

Random commits: “ha ok somewhat drawy”

THE END. How about going back to the Introduction?

Find me on twitter.