Компиляция Quake в духе 1997 года

Первые версии легендарного 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 не вызывает сложностей благодаря загрузочному компакт-диску и занимает около получаса на аутентичном «железе».

Компиляция Quake в духе 1997 года

Экран загрузки Windows NT подкупает своим лаконичным стилем. Он наглядно отображает количество активных ядер процессора (в отличие от Windows 9x, NT изначально поддерживала многопроцессорность) и объем доступной памяти, обходясь без лишних визуальных эффектов.

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

Интерфейс Windows NT 4

Визуально Windows NT 4 идентична линейке Windows 9x. Это был огромный шаг вперед по сравнению с NT 3.x, которая использовала интерфейс в стиле Windows 3.1, выглядевший крайне архаично.

Подготовка Visual C++ 6

Хотя в 1996 году Quake писался на Visual C++ 4.X, к 1999 году проект был переведен на шестую версию IDE. Если у вас не сохранилось оригинального диска, образ можно найти в «Архиве Интернета» или на специализированных ресурсах вроде WinWorld.

Установка Visual C++ 6

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

Ввод Product ID

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

Экран установки Visual Studio

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

Настройка компонентов Visual C++

Работа с исходным кодом

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

Рекомендуется использовать оригинальный архив q1source.zip. Ранее он был доступен на официальном FTP id Software, а сейчас хранится в Quake Official Archive.

Копирование исходников

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

Использование WinRar 2.50

Откройте «WinQuake.dsw» через меню «Open Workspace». В отличие от современных форматов .sln и .vcxproj, VC++6 оперирует файлами .dsp (проект) и .dsw (рабочая область).

Процесс компиляции и устранение ошибок

Первая попытка запустить «Rebuild All», скорее всего, завершится неудачей. Причина в ассемблерных файлах (.s), содержащих легендарные оптимизации Майкла Абраша. Для их обработки требуется ассемблер ml.exe, входящий в состав VC++6 Processor Pack.

Для корректной настройки системы соблюдайте строгую последовательность:

  1. Установите Visual Studio 6.0 Service Pack 5 (vc6sp5.exe).
  2. Перед этим инсталлятор потребует наличие MDAC 2.5. Не ищите его в сети — нужный файл mdac_typ.exe уже находится в папке с распакованным сервис-паком.
  3. После обновления установите Processor Pack (vcpp5.exe).

Скопируйте полученный ml.exe в папку bin вашей Visual C++. Теперь повторная полная пересборка проекта должна пройти без ошибок.

Успешная компиляция Quake

После завершения сборки остается лишь скопировать библиотеки PmProXX.dll, WdirXX.dll и ресурсы из папки id1. Теперь ваш собственноручно скомпилированный Quake готов к запуску!

Наследие Visual C++ 6

Для своего времени Visual C++ 6 была невероятно продвинутым инструментом. Функции перехода к определению, отладка через точки останова, инспекция переменных и трассировка стека делали её настоящим фаворитом среди разработчиков того времени.

Инструменты отладки VC++6

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

 

Источник

Читайте также