Как id Software создавала Wolfenstein 3D на основе технологий из Commander Keen
Данная статья является фрагментом книги Game Engine Black Book: Wolfenstein 3D — подробного исследования, посвящённого истории, коду и разработке оказавшего огромное влияние на игровую отрасль шутера от первого лица про уничтожение нацистов.
В этой главе раскрываются истоки игры и рассказывается о том, как она была построена на фундаменте успеха и технологий игры Commander Keen, которая сама была построена из останков неудачной попытки продать Nintendo порт Mario 3 для PC.
Полную книгу, написанную автором и программистом Фабьеном Сангларом, можно приобрести в бумажном или цифровом виде.
В 1990 году небольшая компания Softdisk из Шривпорта (штат Луизиана) успешно вела дела на рынке shareware.
Предоставляя услуги распространения видеоигр по подписке, Softdisk создавала и каждый месяц рассылала по почте своим подписчикам новые игры. Бизнес шёл хорошо, но некоторые из сотрудников фирмы были более амбициозными.
Они думали, что им хватает умений увеличить масштаб и они хотели это доказать. Они создали новый способ программирования сайд-скроллинга и назвали эту технологию адаптивным обновлением тайлов (adaptive tile refresh). Она позволяла выполнять аппаратный скроллинг (прокрутку экрана) на PC, благодаря чему компьютер мог соперничать с NES. В начале 1990 годов они безостановочно работали по выходным над воссозданием Super Mario 3 на PC, чтобы продемонстрировать свои навыки Nintendo.
Команда «Ideas from the Deep», как они сами себя называли, смогла изготовить клон Mario, но, к сожалению, ей не удалось убедить Nintendo дать им контракт. Как ни была впечатлена японская компания, она хотела, чтобы серия Mario оставалась только на консолях Nintendo.
«Мы отправили демо в Nintendo of America, а она в свою очередь переслала его в головной офис в Киото. Высшее руководство посмотрело демо и было сильно впечатлено. Однако они не хотели, чтобы их интеллектуальная собственность была на каких-то других устройствах, кроме их оборудования, поэтому просто похвалили нас и сказали, что это невозможно». — Джон Ромеро, программист
Mario на PC. Аббревиатура IFD расшифровывается как Ideas from the Deep.
Этого эпизода им оказалось достаточно, чтобы убедить себя, что у них не только есть талант, соответствующий их амбициям, но и слаженная команда с рабочей этикой, которые потенциально смогут открыть им широкие возможности. В феврале 1991 года четыре сотрудника Softdisk сделали «прыжок веры» и основали собственную компанию id Software.
Основатели id Software.
(Подробнее об этом можно прочитать в книге Дэвида Кушнера Masters of Doom).
Они сразу же воспользовались технологией, разработанной для PC-версии Mario 3, чтобы начать выпускать собственные игры и строить интеллектуальную собственность. Не тратя времени, команда выпускала за год не менее трёх игр.
- Commander Keen Episode 1, 2 и 3: Invasion of the Vorticons (14 декабря 1990 года)
- Commander Keen Episode 4, 5, and 6: Good Bye Galaxy (15 декабря 1991 года)
- Отдельная игра Commander Keen: Aliens Ate My Baby Sitter (декабрь 1991 года)
Эти игры, издаваемые FormGen, мгновенно обрели успех и очень хорошо продавались. Команда также продолжала писать игры для издания Softdisk, в большинстве из которых использовалось адаптивное обновление тайлов:
- Commander Keen in Keen Dreams (1991 год)
- Dangerous Dave in the Haunted Mansion (1991 год)
- Rescue Rover (1991 год)
- Rescue Rover 2 (1991 год)
- Shadow Knights (1991 год)
- Hovertank 3D (апрель 1991 года).
- Catacomb 3D: A New Dimension (ноябрь 1991 года)
Весной 1991 года начало зарождаться новое поколение технологии id Software. В игре Hovertank 3D игрок оказывался внутри танка. Пока в ней ещё не было наложения текстур, а темп игры оставался довольно медленным. Catacomb 3D ознаменовала появление текстур и повысила уровень погружения в игру: игрок теперь управлял волшебником с видом от первого лица.
В ноябре 1991 года команда покончила со всеми обязательствами перед SoftDisk. Её следующая игра будет использовать создаваемую парнями 3D-технологию и выйдет под названием Wolfenstein 3D. Из-за масштаба и амбициозности игры в команду приняли ещё четырёх человек и теперь в ней было восемь сотрудников.
«Джейсон (Jason Blochowiak) был частью id с самого начала, но в процессе разработки „Вульфа“ наши пути разошлись». — Джон Кармак, программист.
Фотография команды из «пасхалки» в Spear of Destiny. Надпись внизу: «мы без штанов».
На самом деле, штаны всё-таки на них.
Организация
В сентябре 1991 года, руководствуясь школьными воспоминаниями Тома и Джейсона, команда перебралась из Шривпорта в Мэдисон (штат Висконсин). Ребята обосновали свой офис в двухэтажном кирпичном здании жилого комплекса The Pines на High Ridge Trail, 2622. Все они жили на расстоянии пешей прогулки до офиса, за исключением Кармака, которого не волновали неудобства: он поселился прямо на втором этаже офиса.
Разработка Wolfenstein 3D началась в январе 1992 года. Температура упала и с неба валил снег, поэтому команда полностью погрузилась в работу и редко покидала офис. Разработка длилась четыре месяца. Wolfenstein 3D был выпущен в мае 1992 года.
На протяжении этих четырёх месяцев организация работы в команде была достаточно стандартной для игровых студий той эпохи: четыре парня, сидящие в одной комнате, поддержка быстрого темпа разработки и сильное чувство товарищества (и много шума из-за образа общения Джона Ромеро и Тома Холла).
На карте ниже показан угол со SNES, на которой было сыграно бесчисленное количество игр в F-Zero, и зона для Dungeons & Dragons, часто упоминаемая в Masters of Doom. То, что один из членов команды (Джон Кармак) жил прямо над студией, было вполне обыденным состоянием.
«Мы начинали с переноса данных на гибких дисках, но в конце концов создали сеть Novell на основе коаксиального Ethernet*. У нас не было системы контроля версий. Как ни удивительно, у нас её не было аж до Quake 3, при разработке которого мы начали пользоваться Visual Source Safe». — Джон Кармак, программист.
* Комментарий Джона Ромеро: «Живя в Мэдисоне, в ноябре 1991 года мы купили систему Novell Netware 3.11 ценой 7000 долларов. В неё входил файловый сервер, кабели и сетевые карты».
Все работали на лучших PC, которые можно было купить за деньги: самых мощных 386-DX 33MHz с 4МБ ОЗУ.
Программирование
Разработка выполнялась в среде Borland C++ 3.1 (но на языке C), которая по умолчанию работала в режиме VGA mode 3: текстовый экран размером 80 на 25 символов.
Джон Кармак занимался кодом времени выполнения. Джон Ромеро программировал многие инструменты (редактор карт TED5, упаковщик ресурсов IGRAB, упаковщик музыки MUSE). Джейсон Блоховяк писал важные подсистемы игры (диспетчер ввода, диспетчер страниц, диспетчер звука, диспетчер пользователей).
Решение Borland представляло собой систему «всё в одном». IDE под названием BC.EXE, несмотря на некоторую нестабильность, обеспечивала неуклюжее многооконное редактирование кода с приятной подсветкой синтаксиса. Компилятор и компоновщик тоже были частью системы и имели названия BCC.EXE и TLINK.EXE.
Однако переходить в режим командной строки не требовалось. IDE позволяла создавать, собирать, выполнять и отлаживать проект.
Чтобы компенсировать маленький размер ЭЛТ-экрана, некоторые разработчики использовали два монитора. (Примечание Джона Ромеро: «И Джон Кармак, и я работали с Turbo Debugger на небольших 12-дюймовых монохромных мониторах с янтарным экраном»).
Графические ресурсы игры
Все графические ресурсы создавались Адрианом Кармаком (Кевин Клауд создал несколько текстур, а также работал над дизайном и структурой буклета руководства к Wolfenstein 3D). Вся работа выполнялась в Deluxe Paint (написанном Брентом Иверсоном из Electronic Arts) и сохранялась в файлах ILBM (InterLeaved BitMap) (проприетарный формат Deluxe Paint).
Так как режим VGA основан на использовании палитр (цвета задавались не 24-битными значениями RGB, а индексами, указывающими на 256-цветную таблицу), процесс творчества был сложным. В первую очередь Адриану приходилось принимать ключевое решение — какие цвета попадут в палитру (в некоторых играх, например, в Monkey Island использовалось несколько палитр, менявшихся в зависимости от части игры. id Software выбрала более простое решение и использовала для всей игры одну палитру), а затем рисовать всё только этими цветами.
Палитра Wolfenstein 3D. Всё в игре отрисовывалось при помощи этих 256 цветов.
Координаты палитры меняются от 0x00 до 0x0F по горизонтали и от 0x00 до 0xF0 по вертикали. Горизонтальный синий градиент внизу начинается с 0xF0 и заканчивается на 0xFE. 0xFF (обозначенный розовым) — это особый цвет, считающийся движком прозрачным и всегда пропускаемый при рендеринге.
Все ресурсы рисовались мышью вручную. Так как при отображении буфера кадров на экране режим VGA растягивал его, Адриану приходилось быть аккуратным и рисовать всё в том разрешении, в котором должна была работать игра (320x200).
«Адриан и Кевин работали непосредственно в Deluxe Paint, в то время у нас не было никаких инструментов для сканирования». — Джон Кармак, программист.
Графические ресурсы разделены на две категории:
- Элементы 2D-меню, поставляемые с игрой в файлах VGAGRAPH, VGAHEAD и VGADICT
- Элементы 3D-режима (стены и спрайты), поставляемые в архиве VSWAP
Процесс производства ресурсов
После генерации графических ресурсов инструмент IGRAB упаковывал все ILBM в один архив и генерировал файл заголовка C с идентификаторами ресурсов. Движок ссылается на ресурс непосредственно с помощью этих ID.
Конвейер создания ресурсов для 2D-меню.
В коде движка использование ресурсов было жёстко прописано в перечислении. Это перечисление (enum) является смещением в таблице HEAD, из которой берётся смещение в архиве DATA. Благодаря этому слою косвенных ссылок ресурсы можно было заново генерировать и менять их порядок без модификации исходного кода.
Интересный факт: такая система привела к проблемам после публикации исходного кода. Заголовок .h в его комплекте не соответствовал файлам ресурсов из shareware-версии или ранних версий Wolfenstein 3D. Опубликованные заголовки были взяты из Spear of Destiny. Можете посмотреть, к какому графическому хаосу это приводило, в статье «Компилируем, как будто на дворе 1992 год» на сайте fabiensanglard.net [перевод статьи на Хабре].
В официальном руководстве по Wolfenstein 3D, опубликованном в 1992 году, объяснён творческий процесс. Он содержит множество рисунков Тома Холла и показывает кучу набросков, сделанных Томом и переведённых в пиксели командой художников.
«Когда креативный директор Id Том Холл придумывал идею экрана, он отдавал набросок Адриану Кармаку. Ниже показаны примеры некоторых набросков дизайна экрана заставки, выполненных Томом. Для игры был выбрал третий набросок». — «Официальное руководство по Wolfenstein 3D»
Руководство также содержит несколько фотографий команды тех времён; советую прочитать его для понимания контекста.
[Дизайн руководства создавался на NeXT ColorStation. Это был единственный случай использования машины Стива Джобса для создания Wolfenstein 3D, несмотря на то, что id купила её в декабре 1991 года. Позже, в 1993 году, серия рабочих станций NeXT стала ключевым элементом производственного конвейера Doom.]