Первые версии легендарного Quake (в частности, quake.exe и vquake.exe) создавались на рабочих станциях HP 712-60 под управлением NeXT. Кросс-компиляция выполнялась с использованием DJGPP на сервере DEC Alpha 2100A. Однако после официального релиза в июне 1996 года команда id Software, столкнувшись с отсутствием перспектив у платформы NeXT, приняла решение полностью обновить свой технологический стек.
«Сразу после выхода Quake мы перешли на оборудование Intergraph под управлением Windows NT».
— Джон Кармак[1]
Последующие итерации игры (winquake.exe, glquake.exe), а также сетевой клиент QuakeWorld (qwcl.exe и qwsv.exe), разрабатывались и собирались уже в среде Windows NT с применением Microsoft Visual C++ 4.X.
В данном материале мы подробно разберем процесс воссоздания среды разработки 1997 года для сборки бинарных файлов Quake под Win32.
Варианты окружения для энтузиастов
Степень исторической достоверности эксперимента зависит от выбранного вами оборудования. Существует четыре основных пути:
- Попытаться найти оригинальную рабочую станцию Intergraph RealizM Dual P6-200MHz (задача практически невыполнимая).
- Собрать систему на базе двух процессоров Pentium Pro (сложно, но материнскую плату вроде W6-LI найти реально).
- Использовать классический ПК конца 90-х, соответствующий спецификациям той эпохи.
- Развернуть виртуальную машину в Oracle Virtualbox (самый доступный способ).
Описанные ниже шаги были успешно протестированы как на реальном «Quake PC», так и в виртуальной среде с Windows 98SE и Windows NT 4.0.
Развертывание Windows NT 4
Процесс установки Windows NT 4 не вызывает сложностей благодаря загрузочному компакт-диску и занимает около получаса на аутентичном «железе».

Экран загрузки Windows NT подкупает своим лаконичным стилем. Он наглядно отображает количество активных ядер процессора (в отличие от Windows 9x, NT изначально поддерживала многопроцессорность) и объем доступной памяти, обходясь без лишних визуальных эффектов.
Важный нюанс: если вы добавите второй процессор в уже установленную систему, Windows NT его не увидит. Потребуется переустановка ОС для смены уровня абстрагирования от оборудования (HAL) на версию с поддержкой SMP. На платах вроде W6-LI, помимо самого Pentium Pro, необходимо установить и соответствующий регулятор напряжения.

Визуально Windows NT 4 идентична линейке Windows 9x. Это был огромный шаг вперед по сравнению с NT 3.x, которая использовала интерфейс в стиле Windows 3.1, выглядевший крайне архаично.
Подготовка Visual C++ 6
Хотя в 1996 году Quake писался на Visual C++ 4.X, к 1999 году проект был переведен на шестую версию IDE. Если у вас не сохранилось оригинального диска, образ можно найти в «Архиве Интернета» или на специализированных ресурсах вроде WinWorld.

В те времена системы защиты ПО полагались на серийные номера (Product ID), так как постоянное интернет-соединение было редкостью.

В процессе инсталляции упоминается грядущая Visual Studio — концепция объединения различных инструментов разработки в единую среду, которая вскоре станет отраслевым стандартом Microsoft.

Интересно, что интерфейс установщика плохо масштабируется под высокие разрешения. На мониторах с разрешением 1280×1024, которые наверняка использовали программисты id Software, окно выглядит пустовато, а полоса прогресса смещена. Оптимально верстка смотрится лишь в 640×480 или 800×600.

Работа с исходным кодом
Крайне важно: не пытайтесь загружать код напрямую с GitHub или передавать файлы через современные FTP-клиенты в текстовом режиме. Это нарушит структуру файлов рабочего пространства .dsw, и Visual C++ 6 не сможет их корректно прочитать, не выдав при этом вразумительной ошибки.
Рекомендуется использовать оригинальный архив q1source.zip. Ранее он был доступен на официальном FTP id Software, а сейчас хранится в Quake Official Archive.

Для распаковки идеально подойдет WinRar версии 2.50 — он безупречно работает в среде NT/9x.

Откройте «WinQuake.dsw» через меню «Open Workspace». В отличие от современных форматов .sln и .vcxproj, VC++6 оперирует файлами .dsp (проект) и .dsw (рабочая область).
Процесс компиляции и устранение ошибок
Первая попытка запустить «Rebuild All», скорее всего, завершится неудачей. Причина в ассемблерных файлах (.s), содержащих легендарные оптимизации Майкла Абраша. Для их обработки требуется ассемблер ml.exe, входящий в состав VC++6 Processor Pack.
Для корректной настройки системы соблюдайте строгую последовательность:
- Установите Visual Studio 6.0 Service Pack 5 (
vc6sp5.exe). - Перед этим инсталлятор потребует наличие MDAC 2.5. Не ищите его в сети — нужный файл
mdac_typ.exeуже находится в папке с распакованным сервис-паком. - После обновления установите Processor Pack (
vcpp5.exe).
Скопируйте полученный ml.exe в папку bin вашей Visual C++. Теперь повторная полная пересборка проекта должна пройти без ошибок.

После завершения сборки остается лишь скопировать библиотеки PmProXX.dll, WdirXX.dll и ресурсы из папки id1. Теперь ваш собственноручно скомпилированный Quake готов к запуску!
Наследие Visual C++ 6
Для своего времени Visual C++ 6 была невероятно продвинутым инструментом. Функции перехода к определению, отладка через точки останова, инспекция переменных и трассировка стека делали её настоящим фаворитом среди разработчиков того времени.

Источники:
[1] Архив интервью с Джоном Кармаком.
[2] Официальный архив ресурсов Quake под редакцией Джейсона Браунлесса.

