#Dev

Building Quake 1997-Style: A Journey Through Retro Development

Trends Reporter
3 min read

Recreating the original Quake compilation process using period-accurate tools and techniques from 1997, including Windows NT 4.0, Visual C++ 6, and the challenges of legacy development environments.

In a fascinating exploration of software archaeology, Fabien Sanglard has documented the process of compiling Quake exactly as it was done in 1997, providing a window into the development practices of id Software during one of gaming's most influential periods.

The Historical Context

When Quake first shipped in 1996, id Software's development environment was already evolving. The initial versions of Quake (quake.exe and vquake.exe) were developed on HP 712-60 machines running NeXT and cross-compiled with DJGPP on a DEC Alpha server 2100A. However, concerns about NeXT's stagnation prompted a significant infrastructure change.

"We moved to Intergraph hardware running Windows NT right after shipping Quake," John Carmack revealed in a conversation with Sanglard. This transition marked the beginning of the Windows NT era for Quake development, with subsequent versions including winquake.exe, glquake.exe, and QuakeWorld all being compiled on Windows NT using Visual C++ 4.X.

Setting Up the Authentic Environment

The article outlines four approaches to achieving historical accuracy, ranging from finding original hardware to using virtualization:

  1. Original Hardware: An Intergraph RealizM Dual P6-200MHz workstation (extremely rare)
  2. Alternative Vintage Hardware: A dual Pentium Pro machine, with the W6-LI motherboard being more accessible
  3. Late 90s PC: A standard Quake-era computer
  4. Virtualization: Using Oracle VirtualBox to create a period-accurate VM

Both Windows 98SE and Windows NT 4.0 were tested successfully for this process.

Windows NT 4.0 Installation

The installation of Windows NT 4.0 proved straightforward, with the bootable CD completing the process in about 30 minutes. The minimalist startup screen notably displayed CPU count and RAM amount - features that highlighted the operating system's server-oriented design. Unlike Windows 95/98, NT 4.0 supported multiple processors, though detecting additional CPUs required a complete reinstallation to update the Hardware Abstraction Layer (HAL).

Visual C++ 6.0 Setup

The development environment of choice was Visual C++ 6.0, which had become the standard by 1999 after Quake's initial development on VC++ 4.X. The installation process revealed several period-specific quirks:

  • The installer required a product ID for anti-piracy purposes
  • The interface was designed for lower resolutions (640x480 or 800x600), appearing awkward at 1280x1024
  • The installation screen featured oddly placed progress bars with excessive empty space

The installer also hinted at Microsoft's future direction with mentions of "Visual Studio," which would eventually become the unified development environment.

Source Code Acquisition

A critical lesson emerged regarding source code handling: obtaining the code from GitHub or via FTP would corrupt the workspace .dsw file, causing Visual C++ 6.0 to fail silently without displaying any error messages. Instead, the authentic q1source.zip file from the Quake Official Archive maintained by Jason Brownless was required.

File transfer methods included drag-and-drop for VMs or using Quick 'n Easy FTP Server, which worked on both Windows 9X and NT. Decompression required WinRAR v2.50, which remained compatible with the period operating systems.

Building the Project

The compilation process encountered several obstacles reminiscent of 1990s software development:

  1. Initial Build Failure: VC++6 couldn't assemble the hand-optimized assembly files (.s files) written by Michael Abrash
  2. Processor Pack Installation: Required vcpp5.exe, but its setup (setupsp5.exe) failed without MDAC 2.5
  3. MDAC Workaround: Instead of downloading MDAC from the internet, running acmsetup.exe from the same folder as the decompressed vcpp5.exe resolved the dependency
  4. Final Success: After installing the Processor Pack, "Rebuild All" completed successfully

The process was described as feeling "like following the solution of Monkey Island. Nothing makes sense. We are definitely deeeep into the 90s."

Results and Reflections

The successful compilation produced working executables, including QuakeWorld, which functioned with QSpy. The experience highlighted Visual C++ 6.0's capabilities for 1996, featuring:

  • "Go to definition" functionality
  • Breakpoints and stack traces
  • Variable inspection
  • Absence of IntelliSense auto-completion (a feature that would come later)

For developers of that era, VC++6 represented a significant leap forward in integrated development environments, offering tools that would feel remarkably powerful even by modern standards.

This exercise in retro development not only recreates a piece of gaming history but also illuminates the challenges and innovations of 1990s software engineering, demonstrating how far development tools have evolved while highlighting the timeless nature of certain programming challenges.

Comments

Loading comments...