Let's compile Quake like it's 1997
Source: Hacker News
Feb 5 2026
The Purist’s Corner
Depending on how historically accurate you want to be, you can follow the steps with one of four environments:
- Intergraph RealizM Dual P6‑200 MHz workstation – good luck.
- Dual Pentium Pro machine – also a stretch, but finding a W6‑LI is doable.
- A regular late‑90s PC – e.g., the Quake PC.
- Oracle VirtualBox – create a VM.
I tested these steps both on the Quake PC and in VirtualBox, running either Windows 98 SE or Windows NT 4.0.
Installing Windows NT 4
Installing Windows NT 4 is straightforward because the CD is bootable. The installation took about 30 minutes.
I love how minimalist the Windows NT startup screen is. It proudly displays the number of detected CPUs (Windows 95/98 only supports one) and the amount of RAM. No silly animation.
Adding a second CPU won’t be detected automatically; you must reinstall to get the HAL that handles SMP systems. The same applies to a dual‑CPU motherboard. On a W6‑LI you need not only another Pentium Pro but also a regulator!
Windows NT 4 uses the same UI theme as Windows 9x. The first release, Windows NT 3, used the UI elements of Windows 3.1 and looked awful.
Installing Visual C++ 6
The Win32 version of Quake was originally coded with Visual C++ 4.x (the most recent Microsoft IDE in mid‑1996). By 1999 the project had migrated to Visual C++ 6. If you don’t have the CD handy, you can likely find it on the Internet Archive or WinWorldPC.
Installation Screens
| Step | Screenshot |
|---|---|
| 1. Visual C++ 6 installer start | ![]() |
| 2. Product ID entry (pre‑“always‑on” Internet) | ![]() |
| 3. “Visual Studio” branding (future Microsoft IDE) | ![]() |
| 4. UI layout (designed for 640×480 or 800×600) | ![]() |
| 5. Additional screens | ![]() |
Getting the Source Code
Do not fetch the source from GitHub or via FTP; that will corrupt the .dsw workspace file, causing VC++ 6 to fail silently. Instead download the original archive:
- q1source.zip – formerly on id Software’s FTP server, now hosted in the Quake Official Archive maintained by Jason Brownless[2].

Transferring Files to the VM
- Drag‑and‑drop (if using a VM).
- Or use Quick ‘n Easy FTP Server, which works on both 9x and NT.

Extracting the Archive
You’ll need WinRAR 2.50 (still works on 9x/NT).

Building Quake with VC++ 6
- Launch Visual C++ 6.
- Choose File → Open Workspace… and select
WinQuake.dsw.
Modern Visual Studio uses
.sln(Solution) and.vcxprojfiles, but VC++ 6 uses.dsp(project) and.dsw(workspace). The.dspcontains a single project; the.dswpoints to one or more.dspfiles.

- Start the build with Build → Rebuild All.

- The build will initially fail because VC++ 6 cannot assemble the hand‑optimized
.sfiles written by Michael Abrash.

- Install the VC++ 6 Processor Pack (contains
vcpp5.exe, the assembler).

After installing the pack, rebuild again and the compilation should succeed, yielding the classic Win32 Quake binaries.
Installing the Processor Pack (MDAC 2.5 prerequisite)

Of course, launching setupsp5.exe to install it will fail. This is because you need to install MDAC 2.5 first.
Don’t lose an hour trying to download MDAC from somewhere. You just need to run acmsetup.exe, which is in the same folder created when
vs6spp5.exedecompressed itself.
Now go back and run setupsp5.exe again. This time it will work. By now it should feel like you are following the solution of Monkey Island—nothing makes sense, and we are definitely deep into the 90s.
A more awkwardly small progress bar, but this is still progress.
Re‑open the project with VC++ 6 and run “Rebuild All” again. This time it should work.
Yup! Enjoy! You can even build/run QuakeWorld and it works with QSpy!
A darn good IDE
VC++ 6 is remarkably powerful for 1996. It has features such as “Go to definition”, breakpoints, stack traces, and variable inspection (but no IntelliSense auto‑completion yet). I never used it, but it must have felt like a dream at the time.
Footnotes
[1] John Carmack, id Software interview, 1996.
[2] Jason Brownless, Quake Official Archive, maintained at .
References
- (list of references would go here)
















