Как только человеку становится скучно, он начинает выдумывать самые безумные идеи. Например, Лукас Вогель решил построить многопользовательский шутер в стиле DOOM, но сделать это не на каком-нибудь там игровом движке, а целиком на SQL. Да-да, вы не ослышались! Весь игровой процесс от карты и состояния игроков до рендера и синхронизации был реализован при помощи базы данных CedarDB.
Представляете, какой каруселью должны были кружиться у разработчиков головы!
Теперь представьте себе этот мир: все сущности в игре — это просто таблицы. Есть таблица для карты, где хранятся уровни, стены и точки респауна; есть таблица для игроков с их здоровьем, патронами и счетом; есть даже таблица для ввода игроков — кнопочки W, A, S, D и Х для стрельбы. И все действия в игре — это просто SQL-запросы.
Моддинг «на лету»? Нет проблем! Меняем конфигурацию игры karaoke-style прямо во время матча.
Визуализация?
Тоже SQL! Рейкастинг? Рекурсивные CTE! Спрайты?
Отображаются с учетом глубины и перспективы. А string_agg собирает кадры построчно в текстовую «рамку». И все это — в рамках SQL.
Для того чтобы заставить всю эту магию работать, использовался обычный скрипт на bash, который каждый тик запускал SQL-скрипт gameloop.sql.
Каждый тик — это транзакция, благодаря чему состояние всегда оставалось согласованным. ACID (атомарность, согласованность, изолированность и надежное сохранение изменений) работает на полную катушку!
Однако самое интересное началось после добавления мультиплеера. Для синхронизации состояния игры потребовалось всего лишь два запроса: один для отображения экрана определенному игроку и другой для отправки его ввода.
И это работает! Программисты сетевого кода неделями бьются над такими вещами.
Но самое забавное начинается тогда, когда клиент может слать произвольный SQL запрос серверу. Тут жизнь превращается в настоящий ад: читерство на уровне SQL!
Кто-то обнуляет здоровье всем соперникам (лоу-скилл), кто-то крадет убийства (креатив), а кому-то не хватает атомарности транзакций для успешного удаления пули до того, как она нанесла урон.
Этот эксперимент показывает не только безумие создания шутера на SQL, но и то, что иногда нужно выходить за пределы привычного и экспериментировать. Возможно, эти безумные идеи однажды приведут к созданию чего-то по-настоящему уникального. Кто знает, может быть через пару лет мы будем играть в шутеры написанные… на Excel?