Домой Игры Разработчик Лукас Фогель запустил игру Doom внутри базы данных SQL

Разработчик Лукас Фогель запустил игру Doom внутри базы данных SQL

Программист Лукас Фогель представил проект SQLDoom, перенеся классическую игру 1993 года в среду СУБД CedarDB с использованием 5900 строк SQL-кода.

0
0

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

Графический интерфейс проекта SQLDoom
Проект SQLDoom переносит игровую логику классического шутера в среду СУБД CedarDB

Особенности технической реализации 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 уникальным экспериментом в области интеграции игровых движков и систем управления данными.