Skip to content
Tech News
← Back to articles

Doom now "runs" in Microsoft Paint thanks to a wildly inventive clipboard trick

read original more articles
Why This Matters

This inventive project demonstrates the remarkable flexibility of software and creative problem-solving by running a classic game like Doom through Microsoft Paint using clipboard tricks. It highlights how innovative approaches can push the boundaries of what seemingly simple applications can achieve, inspiring developers and enthusiasts alike. For consumers, it underscores the playful potential of technology and the importance of creative experimentation in the tech industry.

Key Takeaways

WTF?! It's long been established that Doom can be made to run on pretty much anything with a screen, but this ability goes beyond mere devices. The latest example of the classic FPS's legendary portability involves Microsoft Paint essentially being used as a monitor that displays the original shareware version of the game – and the project was developed by Microsoft Azure CTO Mark Russinovich.

Called DoomPaint, Russinovich's creation doesn't literally execute Doom inside Microsoft's drawing app. Instead, ViZDoom, a ZDoom-based platform designed primarily for AI research, runs the engine and renders it headlessly. It loads the genuine shareware DOOM1.WAD for the first episode, while maps not included with that release use the BSD-licensed Freedoom WADs.

Every rendered frame is placed on the Windows clipboard as a bitmap and pasted onto the Paint canvas as a genuine document edit. A low-level keyboard hook captures the usual movement, strafing, shooting, and door-opening controls while Paint remains the active window, preventing the keystrokes from affecting the drawing app.

Making the process work smoothly required more than endlessly hammering Ctrl+V. Russinovich writes that an early version repeatedly overwrote the clipboard, sometimes replacing frame data before Paint had finished reading it. DoomPaint instead publishes a single OLE data object and updates the image bytes it supplies. Paint's reads also signal when the next frame can be made available, avoiding the race condition.

Performance depends on the PC and selected resolution, which can range from Doom's native 320 x 200 up to 640 x 480. The engine runs on its own thread at Doom's native 35Hz tic rate, meaning the displayed frame rate is capped at 35 fps and may be lower depending on how quickly the machine can make Paint process and composite the pasted images.

The setup brings some entertaining side effects. Because every frame is a real Paint edit, Ctrl+Z can move backward through them, while choosing File > Save produces a PNG screenshot. The project also includes the original Episode One music, converted from Doom's MUS format to MIDI on the fly, alongside sound effects supplied by the engine.

"Paint renders the game but does not compute it. Paint computes nothing. Paint has never computed anything. That's the joke," Russinovich explains.

DoomPaint is available on GitHub under an MIT license. Running its batch file creates a Python virtual environment and installs the required dependencies. ViZDoom boots directly into a map, so there are no title screens, demos, or in-game menus, and performance can sometimes fall to what Russinovich calls "spreadsheet-tier."

We've extensively covered the incredibly long list of things that can run Doom in one form or another. They include: