«DOOMQL startet med et bevisst urimelig spørsmål: hva om SQLite var spillmotoren, og ikke bare stedet der et spill lagrer data?» — Peter Gostev, DOOMQL-dokumentasjonen
Gostev publiserte svaret som kjørbar kode. DOOMQL er et førstepersons skytespill der SQL eier bevegelse, kollisjon, fiender, kamp, progresjon og hver RGB-piksel på skjermen. Simon Willison omtalte prosjektet på bloggen sin 13. juli og skriver at det ble bygget med GPT-5.6 Sol. Det finnes ingen nettleser, ingen Canvas og ingen SVG i prosjektet, og ifølge dokumentasjonen inneholder den spillbare runtimen ingen grafikk-kode i Python.
Mekanikken er enklere enn den høres ut. For hver frame leser SQL spiller- og kart-tabellene og produserer én rad per piksel, med kolonnene x, y, r, g og b. Et andre SQL-view gjør RGB-radene om til fargede terminalblokker. Python-verten sender inn rå tastetrykk, tid og terminalstørrelse, og skriver ut resultatet uendret. Hele det synlige bildet kommer fra én spørring: SELECT scanline FROM render_frame ORDER BY y;. Raytraceren bak er en rekursiv CTE.
Willison tok det et steg videre. Spillet skriver tilstanden sin til en helt vanlig SQLite-fil, så han åpnet den i Datasette mens han spilte, og ba Claude bygge et grensesnitt oppå:
«Bygg en app som viser gjeldende skjermtilstand med frame_pixels-viewet og kolonnene x, y, r, g, b. La den oppdatere seg én gang i sekundet.» — Simon Willison, om den nye Datasette Apps-pluginen
Resultatet ble en HTML- og JavaScript-app inne i Datasette som speilet terminalbildet live. Én setning til, «add a minimap», ga ham et minikart.
Poenget for deg som bygger ligger i inspiserbarheten. DOOMQL har en make inspect-modus som åpner den samme databasen skrivebeskyttet med PRAGMA query_only=ON og viser tick, oppløsning, den faktiske render-spørringen og reelle før- og etterverdier for bevegelse, skudd og skade. Audit-hendelsene skrives inne i samme transaksjon som selve spillendringen, og rulles tilbake sammen med den. Når tilstanden bor i en database framfor i minnet, blir den lesbar for verktøy du allerede har. Det er samme grep som strukturert logging i en agent-pipeline, bare demonstrert med et spill.
Hva bør du gjøre?
- Klon repoet og kjør
make runfra rota. Du trenger Python 3.11 eller nyere, SQLite 3.45 eller nyere med matematikk-funksjoner, og en terminal med 24-bits farge. Ingen tredjeparts Python-avhengigheter. - Åpne et andre vindu med
make inspectmens du spiller, og les SQL-en som faktisk kjørte for hver handling. Det er her læringen ligger. - Pek Datasette mot
.doomql/doomql.sqlitehvis du vil bygge din egen visning oppå spilltilstanden.