Doom відтворили у SQL-базі даних

Doom відтворили у SQL-базі даних

Розробник Лукас Фогель відтворив Doom у SQL-базі даних CedarDB із повноколірним рендерингом кадрів.

Розробник Лукас Фогель створив SQLDoom — версію Doom, у якій логіка гри та формування зображення працюють через SQL-запити в базі даних CedarDB. Проєкт генерує повноколірні кадри роздільністю 640×480, а невеликий клієнт на Python відповідає за введення, виведення зображення та синхронізацію часу, повідомляє Ars Technica.

 

Ігрова логіка у запитах

 

У базі даних зберігаються геометрія рівнів і стан гри. Приблизно 1300 рядків SQL-коду, розподілених між 89 спільними табличними виразами, реалізують ігрову логіку та створюють до 35 растрових кадрів за секунду в складних сценах. За словами Фогеля, на ноутбуці з процесором Ryzen 7 SQLDoom працював приблизно з частотою 60 кадрів за секунду, хоча в насичених сценах показник інколи знижувався до 35.

 

Як перенесли рівні Doom

 

Фогель переніс класичні WAD-файли Doom у реляційну базу даних. Структура оригінальної гри, де рівні складаються з вершин, ліній і секторів, виявилася придатною для такого перетворення. Двійкові дерева поділу простору також подано через наперед обчислений ключ сортування для об’єктів у кожній позиції. Це дає змогу за допомогою оператора ORDER BY визначати, які ділянки стін слід показувати в конкретному кадрі, а які — відкидати.

Найскладнішим елементом стало відтворення підлоги й стелі. Оригінальна Doom використовує для цього механізм visplanes і зміну стану під час рендерингу по стовпцях, тоді як у SQLDoom Фогель застосував інший підхід — послідовну обробку впорядкованого списку панелей. Проєкт також можна запустити локально за наявності коду, CedarDB і WAD-файлу Doom.