Двигун Doom - це

Doom engine(українськадвижок Doom) (також відомий, якId Tech 1) — псевдотрьохвимірний ігровий движок, розроблений американською компанією id Software і застосовуваний у комп'ютерних іграх Heretic,

Зміст

Поліпшення двигуна (порівняно з Wolfenstein 3D)

  • Підлога та стеля можуть мати будь-яку висоту.
  • Стіни не обов'язково орієнтовані у напрямку «північ-південь» або «захід-схід».
  • Варіюється освітленість, що підвищувала реалістичність графіки.
  • Ліфти, двері, що дистанційно відкриваються, опускаються і притискають стелі, піднімаються сходинки та інші рухомі елементи.
  • Поява противників, які мають здібності до польоту (пробігти під якими, або пролетіти зверху в стрибку все одно не уявлялося можливим).
  • Звукова підсистема підтримувала стереозвук та мікшування до 8 ефектів одночасно.
  • Персонаж під час руху похитувався вгору-вниз, що створило більшу ілюзію ходьби (у Wolfenstein точка огляду знаходилася на постійній висоті приблизно на рівні живота, гравець ніби їхав в інвалідному візку).
  • Дозволялося (хоч і не заохочувалося) підключення додаткових модулів (Джона Кармака, який сам модифікував ігри та хотів, щоб інші це робили).

Обмеження

Однак у двигуна були обмеження:

  • Лабіринт має горизонтальну підлогу зі стелею та вертикальні стіни.
  • Дві кімнати не можуть бути одна над одною. Таким чином, карта рівня є цілком двовимірною.
  • У всій грі масштабспрайтів та текстур постійний. Тому, наприклад, неможливо встановити високодеталізований плакат на менш детальній стіні.
  • Лише зародкова взаємодія гравця зігровими предметами: неможливо вибити вікно, зламати стіну, штовхнути ящик тощо.
  • На персонажів не впливала різниця у висоті поверхів — імп, що нишпорить у підвалі, цілком міг завдати пошкодження гравцеві, що перебуває в парі сотень метрів вище, на горищі.
  • Ліфти та платформи можуть рухатися вгору-вниз, але не в горизонтальній площині.

Технічні особливості

Двигун був написаний на Сі на робочих станціях NEXTSTEP. Спочатку використовувався компілятор Intel C, але надалі перейшли на Watcom C. Утиліти були написані під NeXT на об'єктному стилі.

Усі обчислення проводяться у фіксованій комою 16,16, з машинною одиницею, що дорівнює одному текселю (зростання гравця 56 текселів - значить, 1 тексель приблизно дорівнює 3 см). Для кутових величин застосовується фіксована кома, в якій 65536 = 360 °.

Запис демо-роликів і мультиплеєр засновані на тому, що у цифровий ЕОМ той самий код з одними й тими самими даними призводить до одному й тому результату, а поведінка цілочисленної арифметики жорстко заспецифіковано і залежить від моделі процесора. Гра записує в демо-ролик (і передає по мережі) команди керування; якщо в грі немає грубих помилок, різні машини, інтерпретуючи одні й самі команди управління, отримують один і той же результат. Втім, помилки, що призводять до розсинхронізації, у грі все-таки є: зокрема, якщо в одиночній грі зайти в меню гра зупиняється, але ролик продовжує писатися. Недолік такого підходу – неможливість перемотати ролик; його можна лише прокрутити з початку.

У режимі запису демо-роликів точність поворотів знижувалася до 256 на 360 градусів; уважний гравець міг помітити, що в режимі демо-запису наведення стає грубішим. Це служило виключно для економії пам'яті у демо-роликахі реально не потрібно.

Для прискорення відображення використовується BSP-дерево (на відміну від порталів уDuke Nukem 3D). Об'єкти зображуються як спрайтів, на відмінуQuake.

Рух рекурсивно проходить по BSP-дереву, малюючи стіни від далеких до ближніх.

Під час цього циклу малюються лише глухі стіни (тобто середні текстури для односторонніх стін, і верхні та нижні — для двосторонніх). Об'єкти, підлоги та грати записуються в окремі масиви і малюються на більш пізніх стадіях. До речі, масив, в якому зберігаються підлоги, зробили досить малим, і у самодіяльних конструкторів досить часто траплялося переповнення та вихід із повідомленням "No more visplanes!"

Після того, як відмальовані стіни, рядками малюються підлоги, записані вvisplanes.

У кожному секторі міститься пов'язаний список об'єктів, які знаходяться в ньому. Для визначення видимості об'єкта (а також завдання точок відсічення) використовується одномірний аналог Z-буфера. Видимі об'єкти разом з точками відсічення складаються в масив, після чого вони сортуються і малюються від далеких до ближніх за допомогою тих же процедур, що використовуються для малювання стін. На цьому етапі малюються і грати («середні» текстури на двосторонніх стінах).

Текстури стін і спрайти зберігаються в

Doom для DOS працював у чотиристорінковому X-режимі VGA 320×200 з потрійною буферизацією, для Linux використовував звичайний режим VGA 13h. При цьому цифру дозволу було закодовано в асемблерних процедурах у двох місцях; версії гри, які використовували змінну роздільну здатність, динамічно модифікували код, підставляючи потрібну роздільну здатність. Втім, в частинах гри, які до движка не відносяться, зустрічалося дуже багато магічних чисел, пов'язаних з роздільною здатністю екрануекранними координатами різних об'єктів, тому перші порти Doom'а страждали на графіку меню, що «розповзається» в SVGA-режимах.

Тривале завантаження

Doom відомий своїм тривалим завантаженням (більше хвилини на комп'ютерах свого часу). Основним пожирачем часу була ініціалізація такого собі «Doom refresh daemon». За цією незрозумілою назвою стоїть побудова бази текстур.

Мабуть, фрагментування текстур спочатку було зроблено для того, щоб деякі частини текстур не затемнювалися з відстанню, як не затемнюються спрайти снарядів (про це говорить незадіяне поле в блоках TEXTURE1 і TEXTURE2). Як би там не було, яскраві ліхтарі на темних текстурах не увійшли до гри.

Мережевий код

Doom заснований на моделі "рівний з рівним". Як було сказано вище, синхронність гри на всіх машинах забезпечується тим фактом, що той самий код з одними й тими самими даними повертає той самий результат. Під час кожного такту перевіряються координати гравця; якщо вони не збігаються, гра припиняє роботу з повідомленням про розсинхронізацію. Жодних засобів протистояння затримкам передачі немає. Вхід у розпочату гру немає.

Підтримка того чи іншого мережного протоколу не включена доDoom. Для того, щоб запустити гру по мережі, гравці викликають зовнішню програму — мережний драйвер, який налагоджує зв'язок між машинами та викликає EXE-файл Doom'а. Така конструкція дозволяє писати зовнішні драйвери для інших мережевих протоколів — або програми запуску Doom'а по мережі, зручніші за наявні.

Ігри на движку Doom'а

двигун

Двигун Doom'у продавався іншим компаніям. На ньому було зроблено низку ігор. Серед них:

Також фанами гри створювалися користувальницькі моди, що повністю перетворювали гру. Перший із такихмодів -Alien Doom- був зроблений за фільмом «Чужий». Згодом з'явилися моди і за іншими фільмами: «Мисливці за привидами», «Бетмен» та «Секретні матеріали». Див.

Відкриття вихідного коду

Піонерами розширенняDoomбули Лі Кіллоу (Boom- розширена версія Doom, в якій були виправлені всі помилки оригінальної гри, а також серйозно, майже в 1,5 рази, був прискорений двигун), Денис Фабріс і Борис Перейра (Doom Legacy- версія Doom з якісним інтерфейсом користувача і підтримкою високих дозволів), а також Брюс Льюїс - створив glDoom, перший порт Doom'а під резервної копії не було. Через це Кармак переліцензував вихідні тексти під GNU General Public License: якби ліцензія не була такою, що обмежує, вихідний текст обов'язково знайшовся б у когось. [1] Інші ресурси так і залишаються платними.

Зараз існує кілька десятків розширених версійDoom— від найпростіших до надзвичайно потужних. Вони дозволяють грати з більш високою роздільною здатністю, ніж оригінальний Doom, мають додаткові можливості (огляд вниз, перехрестя прицілу), а також розширену мережеву гру. Найбільш відомі з цих версій:

УDoom LegacyтаZDoomє можливість гри з ботами.

Менш значущі моди коротко перелічені списку портів серії Doom.