Лукас Фогель, сооснователь CedarDB, в сентябре 2025 года создал DOOMQL — многопользовательский 3D-шутер, целиком на SQL. Он использует реляционные таблицы для логики, состояния и рейкастинга ASCII-графики, обеспечивая 30 FPS.
Вас ждёт экскурс в архитектуру игры, далее я расскажу о конвейере рендеринга в SQL, об игровом цикле, а также позабавлю вас интересной метаигрой ...
Несмотря на минимализм, DOOMQL обеспечивает стабильную частоту кадров и мультиплеер, тогда как DuckDB-DOOM работает в браузере при ~8 FPS и ...
Building a DOOM-like multiplayer shooter in pure SQL. Lukas Vogel. Contents. Why even do this? Architectural overview; Game state ...
Other key differences in DOOMQL and the DuckDB-DOOM clone are that the former is a multiplayer effort, with SQL used for both rendering and ...
В мире, где DOOM запускают на самых разных экзотических устройствах - от калькуляторов до тестов на беременность - появление новой версии шутера неизменно привлекает интерес. Однако проект DOOMQL, представленный сооснователем CedarDB Лукасом Фогелем, выделяется не столько самой игрой, сколько фундаментальным подходом к её реализации: полностью на SQL. Эта разработка поднимает вопросы о границах применения реляционных баз данных и их неожиданной эффективности в задачах, традиционно относящихся к игровому движку.
Проект DOOMQL, запущенный в сентябре 2025 года, стал результатом месячного декретного отпуска у Фогеля, давая ему шанс для глубокого экспериментального программирования. Вдохновением послужил DuckDB-Doom Патрика Трейнера, который также использовал SQL-логику, но полагался на JavaScript для рендеринга и обработки ввода. Фогель поставил цель довести идею до логического конца, отказавшись от JavaScript и создав многопользовательский шутер, где вся игровая логика, состояние и даже отрисовка осуществляются исключительно средствами SQL.
Центральная идея DOOMQL заключается в представлении всего игрового мира как набора SQL-таблиц. Это включает в себя:
player_move_speed, player_turn_speed, ammo_max и ammo_refill_interval_seconds, сохраняются в таблице config.map представляет игровое пространство, где каждая ячейка (x, y) имеет свой тип tile (например, # для стены).hp), боезапас (ammo) и счёт (score) контролируются таблицами players и mobs.'w', 'a', 's', 'd', 'x' для стрельбы) записываются в таблицах inputs.Игровой цикл, работающий с частотой около 30 тиков в секунду, является небольшим shell-скриптом, который повторно вызывает SQL-файл - gameloop.sql. Этот файл содержит транзакции, обрабатывающие все игровые события: движение снарядов, коллизии, урон игрокам, начисление очков и возрождение.
Замечательно, что выполнение каждого такого цикла занимает примерно 1 мс на машине Фогеля, что, по его словам, позволяет потенциально увеличить тактовую частоту.
Одним из наиболее запоминающихся аспектов DOOMQL является полностью SQL-ориентированный поток рендеринга. В отличие от традиционных графических библиотек, визуализация достигается набором SQL-представлений (VIEW), которые эмулируют процесс рейкастинга:
visible_tiles выясняют, какие зоны карты доступны игроку, а также их дистанцию.string_agg, образуя ASCII-образ мира.HP), боезапас (AMMO) и миникарта, генерируются динамически через SQL-запросы и строковое форматирование.Фогель описывает это как "стек SQL-представлений, реализующих рейкастинг и проекцию спрайтов".
DOOMQL обеспечивает постоянные 30 FPS при разрешении 128×64 пикселей в одиночном режиме. Это существенно оттягивает 8 FPS при 32×16 пикселях, предлагаемых DuckDB-Doom, что, по словам Фогеля, является свидетельством эффективности используемой базы данных CedarDB и оптимизации запросов. Мультиплеерная часть реализуется за счёт того, что база данных по своей природе предназначена для синхронизации общего состояния между клиентами:
inputs.SELECT full_row FROM screen WHERE player_id = <your_id> ORDER BY y.Такой метод позволяет мгновенно синхронизировать состояние игры для всех участников, при этом каждый клиент получает своё отдельное, согласованное представление мира благодаря транзакционной изоляции БД. Возможность «читерить», меняя напрямую записи в таблице players (UPDATE players SET hp = 100000 WHERE player_id = <your_id>), лишь подчёркивает открытость архитектуры.
Фогель соглашается, что «делать это было... плохой идеей?» с точки зрения поддержки кода, который становится «ужасно трудно отлаживать». Тем не менее, он отмечает, насколько естественно получалось описывать состояние и логику игры на SQL, и полагает, что, возможно, случайно придумал паттерн «entity-component-system».
Проект DOOMQL доступен на GitHub под лицензией MIT, что позволяет любому желающему изучить и модифировать код. Фогель также планирует добавить в игру улучшения, такие как:
Он также бросает вызов другим энтузиастам: «Если найдёте [другую базу данных, которая сможет с ней [CedarDB] потягаться] - дайте знать!». DOOMQL не просто иллюстрирует необычное использование SQL, а служит ярким примером того, как базовые компьютерные идеи могут быть переосмыслены и реализованы в самых неожиданных условиях, расширяя границы возможного в разработке ПО. Это исследование явно демонстрирует, что даже простейшие инструменты могут стать фундаментом для создания сложных интерактивных систем, если подойти к задаче с достаточной изобретательностью.
Вас ждёт экскурс в архитектуру игры, далее я расскажу о конвейере рендеринга в SQL, об игровом цикле, а также позабавлю вас интересной метаигрой ...
Несмотря на минимализм, DOOMQL обеспечивает стабильную частоту кадров и мультиплеер, тогда как DuckDB-DOOM работает в браузере при ~8 FPS и ...
Building a DOOM-like multiplayer shooter in pure SQL. Lukas Vogel. Contents. Why even do this? Architectural overview; Game state ...
Other key differences in DOOMQL and the DuckDB-DOOM clone are that the former is a multiplayer effort, with SQL used for both rendering and ...
Вопросы и ответы