Разработчик запустил Doom внутри базы данных SQL
Программист Лукас Фогель создал проект SQLDoom, который запускает классическую игру Doom с помощью SQL-запросов к базе данных для игровой логики и отрисовки. Проект стал значительным улучшением по сравнению с его предыдущей, менее удачной попыткой.

Разработчик опубликовал подробный рассказ о том, как ему удалось запустить классический шутер Doom, используя исключительно SQL-запросы к базе данных вместо обычного игрового движка.
Проект под названием SQLDoom использует небольшой клиент на Python, который обрабатывает ввод и вывод игрока, управляет таймингом игры и отображает кадры на экране. Однако вся реальная игровая логика — как геометрия уровней, так и состояние игры — хранится и обрабатывается в таблицах базы данных CedarDB. Около 1300 строк SQL-кода, распределённых по 89 табличным выражениям, обеспечивают работу игровой механики и генерируют 35 растровых кадров в секунду.
Улучшение по сравнению с предыдущей попыткой
SQLDoom представляет собой значительный шаг вперёд по сравнению с предыдущим проектом разработчика, DoomQL, который был создан годом ранее с целью создать многопользовательский шутер полностью на SQL. Однако та более ранняя попытка привела лишь к чёрно-белой ASCII-графике на основе raycasting, напоминающей простые карты с прямыми углами из Wolfenstein 3D, а не сам Doom.
Новая версия SQLDoom способна генерировать полноцветные кадры разрешением 640×480 пикселей, которые выглядят так, будто получены из оригинального исполняемого файла Doom.
Как данные превращаются в игру
По словам разработчика, преобразование классических WAD-файлов Doom в реляционную базу данных оказалось относительно простым, поскольку оригинальная игра уже разбивала уровни на вершины, линии, секторы и подобные элементы, которые хорошо укладываются в структуру базы данных. Даже знаменитые деревья двоичного разбиения пространства игры удалось перевести в SQL с помощью ключа сортировки, заранее вычисляемого для позиции каждого объекта при загрузке. Благодаря этому ключу простой оператор "ORDER BY" определяет для каждого кадра, какие части стен нужно показывать, а какие — пропускать, что существенно повышает производительность.


