Движок Doom/Сравнение Doom и Build

Материал из Викитропов
Перейти к навигации Перейти к поиску
править Движок Doom Build
Автор Джон Кармак (id Software) Кен Сильвермен (инди → 3D Realms)
Язык программирования Написан на Си, игровая логика пишется на нём же. В Hexen часть логики уровня может писаться специальным байт-кодом BEHAVIOR, реконструирован хакерами. Написан на Cи, но изрядная часть игровой логики записана во внешних скриптах с расширением CON. Кроме того, с клиентами Сильвермен исходниками не делился, отправляя им только собранные OBJ-файлы.
Системные требования Для картинки 320×200 — старшие модели Intel 80386, 4 МБ оперативной памяти, что гораздо лучше Build.

Современная DOS-версия с поддержкой SVGA и достаточной скоростью для чего-то большего 320×200 — Pentium Pro и 16 МБ оперативной памяти, что уже гораздо хуже.

Для картинки 320×200 — младшие модели Intel 80486, 8 МБ оперативной памяти.

Для 640×480 — Pentium 133. В отличие от DOOM, поддержка видеодрайвером VESA 2.0 желательна, но не обязательна.

Графика 256-цветная; разрешение картинки изначально жёстко фиксированное 320×200, переделка потребовала много работы как над отрисовкой, так и над интерфейсом. 256-цветная, переменного разрешения. Были глюки с высокими разрешениями, но в современных версиях движка они большей частью закрыты.
Камера В первой версии обзора вверх-вниз не было, позже — в двухточечной проекции (не полноценное 3D). Несмотря на это, трёхмерная физика стрельбы была всегда. Обзор вверх-вниз в двухточечной проекции. В современных версиях — полноценное 3D.
Звук Сложный звук со стерео, вариацией высоты и приоритетом одних звуков над другими. Звуки точечные. Суррогаты объёмного звука: звук может быть «отовсюду» на максимальной громкости независимо от расстояния; патч на функцию затихания на уровнях с боссами. Как‑то поддеживается динамик; ни одним из портов не подхвачен. Сложный звук со стерео и приоритетом одних звуков над другими. Динамик не поддерживается.
Музыка MIDI-подобный формат музыки, довольно быстро написали конвертеры MUS↔MIDI. Порты конвертируют его в MIDI, поддерживают настоящие MIDI-файлы. MIDI-файлы.
Геометрия уровня Полы и потолки строго горизонтальные, стены строго вертикальные. Полы и потолки могут быть наклонными, стены всё так же вертикальные.
Многоэтажности нет (секторы не могут пересекаться из-за ограничений алгоритма отрисовки). Есть зачатки многоэтажности — секторы могут быть расположены друг над другом, если они не видны оба сразу. Кроме того, потолок одного сектора может служить полом другого — в Duke Nukem 3D так реализованы лифты, трубы, подводный мир.
Динамически может меняться только высота пола или потолка — именно поэтому в Doom двери открываются вверх. В Hexen добавили поддержку полиобъектов, которые могут ограниченно двигаться по горизонтали. Поддерживается динамическое изменение высоты пола и потолка, а также произвольное движение сектора внутри другого, лишь бы пересечений не было — это позволило реализовать распахивающиеся двери, горизонтальные лифты, огромные крутящиеся шестерни из полов/потолков и даже подобие машинок.
Разнообразные и красивые секторные эффекты: сектор может утонуть в лаве (или, наоборот, подняться из лавы), могут построиться ступеньки. 50 разнообразных эффектов вроде сдвижных дверей и строящихся мостов, но той «вкусноты», как в Doom, нет.
Масштаб текстур постоянный. Поворот текстур пола/потолка невозможен; в Heretic и Hexen реализовали сдвиг. С текстурами стен всё значительно свободнее. Поддерживается переменный масштаб текстур: например, на менее детальной стене можно расположить детализированный плакат.
Как развитие предыдущего пункта — поддерживаются декали на стенах, в том числе динамически появляющиеся. Через них можно реализовать, помимо прочего, следы крови и пуль на стенах; в Doom их нет.
Объекты Спрайты, для каждого объекта задаются 1 или 8 поворотов. Можно также указать, что кадр А в отражённом виде станет кадром Б — обычно чтобы сократить число поворотов до пяти, но у пауков раскладка более сложная. Спрайты, для каждого объекта задаются 1 или 5 поворотов (остальные три — симметрично отражённые версии). В продвинутых версиях движка ограниченно воксели.
Поддерживается динамическая перекраска спрайтов, но в Doom используется только для сетевой игры. Даже белый и красный «козлы» — это отдельные наборы спрайтов. Динамическая перекраска спрайтов широко используется для разных версий противников.
Поддерживается перемещение по всем трём осям. Хитбокс каждого — параллелепипед со сторонами, параллельными осям X/Y/Z. В Doom в некоторых ситуациях хитбокс имеет бесконечную высоту. Поддерживается перемещение по всем трём осям.
Полупрозрачность реализована с помощью специальных цветовых таблиц 256×256, в которых записано, как будет выглядеть цвет А за полупрозрачным объектом цвета Б. Для нескольких уровней прозрачности нужно несколько таблиц — в некоторых портах Doom их число доходило до 5.
Освещение Постоянное для каждого сектора. Чтобы сделать световое пятно, нужно создать несколько вложенных друг в друга секторов.
Рендеринг Программный, от ближних секторов к дальним, с помощью двоичного разбиения пространства. Одновременно находит видимые объекты и рисует 64 ближайших от дальних к ближним. Это требует предварительной обработки перед построением геометрии, что делает редактирование в визуальном режиме (WYSIWYG, сделал изменение — сразу увидел результат) невозможным. Программный, от ближних к дальним, с помощью порталов. Поэтому редактор там WYSIWYG, и одна стена — это всегда одна стена и никогда не разбивается на части (но дважды, трижды и т. д. рисуется, если смотрим на неё из-за колонны).

В современных версиях движка есть поддержка аппаратного рендера через OpenGL.

Скорость игры 35 тактов в секунду (половина штатной частоты VGA). В портах для приставок пришлось снижать до 30 и пересчитывать скорости. 30 тактов в секунду.
Редактор уровней Множество сторонних редакторов уровней, в том числе крайне дружественных пользователю. Единственный и жутко неудобный редактор уровней — несмотря на этот самый WYSIWYG.
Лицензия Изначально коммерческая, ныне — GNU GPL v2