Энтузиасты продолжают переносить классический шутер Doom 1993 года на самые неожиданные платформы, от бытовых приборов до спутников. Новым этапом в истории этой «хакерской» традиции стал проект SQLDoom, созданный разработчиком Лукасом Фогелем. Автор, ранее представивший экспериментальную версию DoomQL, смог реализовать полноценную работу игры внутри базы данных CedarDB, ориентированной на высокую производительность и совместимость с Postgres.

Особенности технической реализации SQLDoom
Несмотря на необычность подхода, принцип работы SQLDoom оказался логичным с точки зрения архитектуры баз данных. Вся основная вычислительная нагрузка возложена на СУБД, в то время как Python-скрипт объемом около 1000 строк выполняет лишь вспомогательные функции: отвечает за вывод графики, воспроизведение звука и обработку ввода пользователя. Система работает по двухпоточной схеме, подобно многим современным портам игры: один поток с частотой 35 Гц отвечает за игровую логику, а второй — за отрисовку кадров и интерполяцию позиции камеры.
Процесс портирования начался с преобразования данных WAD-файла оригинальной игры в структуру таблиц. По словам Фогеля, реляционная модель оказалась очень близка к логике Doom, где уровни организованы в виде иерархических отношений «родитель-потомок», легко переносимых в обычные базы данных. В результате для реализации игрового цикла потребовалось 5900 строк SQL-кода, что заметно меньше, чем 9000 строк в оригинальном исходном коде на C. Экономия объема достигнута за счет использования операторов UPDATE… WHERE, которые позволяют обновлять состояние сразу множества сущностей параллельно, исключая необходимость в классических циклах for или while.
Графический движок и работа с данными
Одной из самых интересных частей проекта стал графический рендерер, реализованный всего в 1300 строк кода. Он опирается на один сложный SQL-запрос, охватывающий 89 различных таблиц. Фогель успешно адаптировал алгоритм обхода Binary Space Partitioning (BSP), который лег в основу графики Doom: структуры бинарных деревьев были представлены в табличном виде. Благодаря использованию SQL-запроса SELECT… ORDER BY, система автоматически сортирует элементы стен от ближних к дальним, что упрощает отрисовку. При этом автор отметил, что алгоритмы отрисовки пола и потолка оказались наиболее сложными для адаптации, так как они основаны на принципах заливки областей (flood-fill).
Преимущества использования базы данных для игрового процесса
Использование СУБД дает неожиданные преимущества, особенно в контексте многопользовательской игры. Поддержание синхронизации состояний между клиентами — задача, для которой базы данных изначально предназначены. Такие механизмы, как аутентификация, контроль доступа и создание снимков состояния (снапшотов), становятся фактически доступными «из коробки». Для выполнения игрового такта достаточно использовать команды START TRANSACTION и COMMIT, что гарантирует целостность и синхронизацию всех данных. Кроме того, хранение всех параметров в таблицах позволяет в режиме реального времени модифицировать характеристики оружия или поведение противников без перезапуска игры. Ознакомиться с исходным кодом и подробностями разработки SQLDoom можно в GitHub-репозитории проекта или в блоге Лукаса Фогеля.
Технические подробности реализации
Интересной особенностью архитектуры стало преобразование деревьев BSP (Binary Space Partitioning), созданных Джоном Кармаком. В SQLDoom каждое значение «лево/право» в структуре бинарного дерева преобразуется в отдельный бит, а порядок вершин сводится к единственному числовому значению. Этот подход позволил Фогелю использовать мощь SQL для рендеринга: база данных буквально берет на себя сортировку стен, располагая их в нужном порядке перед отрисовкой.
Разработчик отмечает, что по сравнению с классическим императивным программированием на C, SQL-реализация дает колоссальное преимущество в производительности при обновлении игровых сущностей. В то время как традиционный код требует перебора элементов через циклы for или while, SQL выполняет те же операции параллельно в рамках одного оператора UPDATE… WHERE. Это значительно оптимизирует вычисления внутри CedarDB.
Дополнительным бонусом использования СУБД стала легкость модификации игровых активов. Поскольку любой параметр противника или оружия — это отдельная строка в таблице базы данных, автор может изменять баланс игры или поведение врагов «на лету», просто обновляя значения в соответствующих ячейках без необходимости компиляции проекта.
Преимущества перед традиционными портами
Хотя реализация рендеринга пола и потолка оказалась самой трудоемкой задачей из-за специфики алгоритмов flood-fill (заливки областей), работа с многопользовательским режимом в рамках базы данных показала себя значительно эффективнее, чем в оригинальном Doom. Инструменты, которые обычно используются для управления транзакциями в бизнесе, здесь решают классические игровые проблемы:
- Синхронизация состояний: Использование команд START TRANSACTION и COMMIT позволяет выполнять игровые такты, гарантируя атомарность и целостность данных во всех связанных таблицах.
- Управление доступом: Системы аутентификации и контроля доступа, встроенные в RDBMS, снимают с разработчика необходимость писать собственные сетевые протоколы безопасности.
- Удобство отладки: Снапшоты (снимки состояния базы) позволяют мгновенно фиксировать состояние игрового мира для отладки или сетевой синхронизации, что делает SQLDoom уникальным экспериментом в области интеграции игровых движков и систем управления данными.





