Doom uruchomiony w bazie danych SQL – strzelanie z „krotki” stało się rzeczywistością
Istnieje pewna zasada – jeśli istnieje jakiś wynalazek, Doom albo został na nim uruchomiony, albo jest to kwestia czasu. Tym razem do tego zacnego grona dołączyły bazy danych SQL.
Mamy rok 2026. Branża technologiczna znajduje się w wyjątkowo trudnym położeniu. Niepohamowany apetyt wciskanego na siłę wszędzie AI sprawia, że ceny komponentów wzlatują na absurdalne poziomy, a każde zdanie napisane czy dzieło stworzone przez człowieka zostaje wciągnięte do zestawów treningowych bez poszanowania praw autorskich lub jakichkolwiek zgód autorów.
Dlatego, warto czasem zrobić krok w tył i skupić się na rzeczach, które są dla nas naprawdę ważne. Dla części ludzi jest to rodzina, dla innych pasja. Istnieje jednak pewna grupa ludzi, którzy uważają, że najważniejszą rzeczą na świecie jest uruchamianie Doom’a, bez względu na to jakie medium mają pod ręką. Z przyjemnością informuję, że grono te po raz kolejny przesunęło granice tego, co możliwe.
Doom w SQL
Ponad rok temu, Lukas Vogel, jeden ze współzałożycieli CedarDB, wpadł na pewien pomysł – co jeśli by odtworzyć Doom’a w czystym SQL’u? Efektem jego pracy, przypadającej na urlop rodzicielski, był DOOMQL, prosta gra przypominająca oryginał, renderująca widok za pomocą techniki ASCII-art. Dało się biegać, dało się strzelać, a gra wspierała nawet tryb multiplayer. Jednakże, z uwagi na jej wygląd i na fakt, że była to jedynie imitacja Doom’a, a nie jego port, ambicje Vogla pozostawały niezaspokojone.

Pomysł nie dawał deweloperowi spokoju. Vogel nie chciał iść na żadne kompromisy. Jego twór miał działać i wyglądać tak jak oryginalna gra. Z tego też powodu, korzystając z kolejnego urlopu rodzicielskiego, przysiadł do pracy nad znacznie ambitniejszym projektem, a owocem jego starań jest SQLDoom – pełnoprawny port logiki i renderera gry do SQL’a, z delikatną pomocą prostego klienta napisanego w Pythonie.
Jakim cudem to w ogóle działa?
SQLDoom działa w następujący sposób. Specjalny skrypt wykorzystujący bibliotekę pygame (do wszelkiego rodzaju programów interaktywnych) wysyła do bazy danych SQL wszelkie sygnały wejściowe z klawiatury oraz odpowiada za wysyłanie tzw. ticków 35 razy na sekundę. Za całą logikę gry odpowiadają zapytania do specjalnie przygotowanych tabel, w których przechowywane są wszystkie informacje na temat stanu gry. Każdy ruch gracza czy przeciwników na mapie jest uwzględniany i wyliczany.

Następnie wszystkie te dane są przekazywane do kwerend odpowiedzialnych za rendering, które przekształcają wszystkie informacje o stanie gry w ogromną tabelę zawierającą wartości RGB dla każdego piksela ekranu. Ostatnim krokiem jest wyświetlenie jej zawartości, za co odpowiada Pythonowy klient, który przy okazji wzbogaca grę o warstwę dźwiękową.
Baza danych to nie tak głupi pomysł
Jak możecie się domyślić, przetransformowanie Doom’a w coś zrozumiałego dla relacyjnej bazy danych SQL nie należy do łatwych zadań. Vogel słusznie zauważa, że rendering gry w takim środowisku nie należy do najlepszych pomysłów. Rysowanie grafiki przypominającej 3D bez akceleracji sprzętowej i współczesnych technik renderingu nie należało do łatwych zadań ani w 1993, kiedy Doom ujrzał światło dzienne, ani przy implementacji wszystkiego w ramach serwera bazodanowego, ale nie oznacza to, że jest to rzecz niemożliwa.
Podczas prac, Vogel odkrył jednak, że SQL jako silnik do gier nie jest aż tak złym pomysłem, jak mogłoby się to wydawać. Przykładowo, zarządzanie wszystkimi danymi jest znacznie łatwiejsze i efektywniejsze niż przy innych rozwiązaniach. Wszystkie informacje o parametrach broni zawierają się w jednym wierszu tabeli, a animacje to nic innego niż wynik kwerendy do tabeli z poszczególnymi klatkami. Vogel zauważył również, że z uwagi na sposób zapisu danych, zmiana działania poszczególnych elementów gry sprowadza się do jednego zapytania do bazy.

Port na SQL’a ma również pewien ciekawy efekt uboczny – tryb wieloosobowy jest zaimplementowany praktycznie w całości. Elementy takie jak uwierzytelnienie, kontrola dostępu czy spójność stanu gry wynikają z tego, jak działa sama baza danych, więc dodanie wsparcia dla wielu graczy to kwestia ustawienia odpowiednich uprawnień, tak aby każdy gracz mógł wejść w interakcję tylko z rzeczami, na które powinien mieć wpływ.
Doom wiecznie żywy
SQLDoom to kolejny przykład tego, dokąd może nas zaprowadzić ludzka ciekawość. Szczerze myślałem, że Doom odpalony w Minecraft, w pliku PDF, przejściówce lub na teście ciążowym to granica tego, co jest możliwe, ale najwyraźniej się myliłem.

Jeśli chcecie przekonać się na własną rękę jak działa Doom przeportowany na bazę danych, możecie to zrobić w tym miejscu. Jeśli natomiast chcielibyście dowiedzieć się więcej o kulisach projektu lub o tym jak uruchomić go na własnym sprzęcie, gorąco polecam zajrzeć do tekstu przygotowanego przez dewelopera.
