Entuziasts liek Doom darboties SQL datubāzē
Programmētājs Lukas Fogels izveidojis projektu SQLDoom, kas ļauj spēlēt klasisko spēli Doom, izmantojot SQL datubāzes vaicājumus spēles loģikai un attēlu veidošanai. Projekts ir uzlabojums salīdzinājumā ar viņa iepriekšējo, mazāk veiksmīgo eksperimentu.

Vācu programmētājs Lukas Fogels publicējis detalizētu apraksts par to, kā viņam izdevies palaist leģendāro spēli Doom, izmantojot tikai SQL datubāzes vaicājumus, nevis tradicionālu spēles dzinēju.
Projekts, kas saņēmis nosaukumu SQLDoom, izmanto nelielu Python klientu, kas apstrādā lietotāja ievadi, izvadu, spēles laika sinhronizāciju un attēlo katru kadru ekrānā. Taču visa faktiskā spēles loģika — gan kartes dati, gan spēles stāvoklis — glabājas un tiek apstrādāta CedarDB datubāzes tabulās. Ap 1300 SQL koda rindiņu, kas sadalītas 89 tabulu izteiksmēs, nodrošina spēles mehānikas darbību un katru sekundi ģenerē 35 bitkaršu kadrus.
Uzlabojums salīdzinājumā ar iepriekšējo versiju
SQLDoom ir ievērojams solis uz priekšu salīdzinājumā ar Fogela iepriekšējo projektu DoomQL, kas tika izstrādāts gadu iepriekš ar mērķi izveidot daudzspēlētāju šāviņa spēli pilnībā SQL vidē. Tomēr tā rezultāts bija vien melnbalta, uz staru apstaroju balstīta ASCII grafika, kas vairāk atgādināja vienkāršo, taisnajos leņķos būvēto Wolfenstein 3D karti nekā Doom.
Jaunā SQLDoom versija spēj ģenerēt pilnkrāsu 640×480 pikseļu kadrus, kas pēc izskata atbilst oriģinālās Doom spēles izpildprogrammai.
Kā dati kļūst par spēli
Fogels raksta, ka klasisko Doom WAD failu pārveide relāciju datubāzē bija salīdzinoši vienkārša, jo oriģinālā spēle jau sākotnēji sadalīja līmeņus virsotnēs, līnijās, sektoros un citos elementos, kas labi iederas datubāzes struktūrā. Pat spēles slaveno binārā telpas dalījuma koku struktūru izdevies pārnest SQL vidē, izmantojot iepriekš aprēķinātu kārtošanas atslēgu katrai objekta pozīcijai ielādes laikā. Pateicoties šai atslēgai, vienkāršs "ORDER BY" vaicājums katrā kadrā nosaka, kuras sienu daļas rādīt un kuras ignorēt, tādējādi būtiski palielinot veiktspēju.


