
Doom SQL запустили у базі даних
Розробник Лукас Фогель запустив Doom SQL у базі даних. Проєкт SQLDoom реалізує логіку гри 1300 рядками SQL-запитів і створює 35 кадрів за секунду, а невеликий Python-клієнт керує введенням, управлінням часом та відображенням кадрів на екрані.
Розробник Лукас Фогель запустив гру 1993 року Doom SQL у базі даних. У довгому блозі він описує, як його SQLDoom відображає гру майже повністю SQL-запитами, і сам визнає: «Відображення Doom у базі даних — явно погана ідея».
Як це працює
SQLDoom не емулятор: введення, виведення, час і відображення кадрів на екрані керує невеликий Python-клієнт, а сама гра відбувається позаду нього, у таблицях CedarDB. Приблизно 1300 рядків SQL-запитів, розподілених на 89 CTE, реалізують логіку гри та генерують 35 кадрів за секунду у вигляді бітмапи.
Перенесення класичних WAD-файлів Doom у реляційну базу виявилося відносно простим, оскільки оригінальний рушій розбиває рівні на вершини, лінії та сектори. У SQL також вбудовані дерева бінарного розбиття простору (BSP): попередньо обчислений sort_key для об'єктів дозволяє запиту ORDER BY щокадру вирішувати, яку частину стіни малювати, а яку ні. Саме цей трюк робить гру швидкою.

Від ASCII до кольорових кадрів
SQLDoom набагато кращий за минулорічний проєкт Фогеля, DoomQL. Тоді він намагався створити «повністю на SQL побудований багатокористувацький шутер, схожий на Doom», але в результаті вийшла лише заснована на рейкастингу сіра ASCII-графіка, яка більше нагадувала 90-градусні мапи Wolfenstein 3D, ніж Doom. Тепер же проєкт створює повноцінні 640×480 кадри, які схожі на кадри оригінального Doom.
Найскладнішим виявилося відображення підлоги та стелі. В оригінальній грі вони малюються вертикально, за допомогою visplanes та змін стану, що погано переноситься на SQL. Замість цього Фогель написав «досить хакерське» рішення, яке базується на ітерації по впорядкованому списку панелей.
Продуктивність і мультиплеєр
Незважаючи на те, що все читається та пишеться в SQL-таблицях, за словами Фогеля, SQLDoom працює зі швидкістю близько 60 кадрів за секунду на ноутбуці з Ryzen 7, а на навантажених сценах іноді падає до 35 кадрів.
За його ж словами, база даних дає перевагу для багатокористувацьких серверів: вона зберігає стабільну копію стану гри та сама регулює одночасний доступ, тому «не існує частково застосованих оновлень, помилок фізики чи розбіжностей щодо того, чи справді ракета влучила».
Для запуску гри потрібен код на GitHub, CedarDB та WAD-файл Doom. Також існує безкоштовне онлайн-демо, хоча під час тестування Ars Technica цей варіант працював погано.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.