Η ερώτηση «μπορεί να τρέξει το Doom;» απέκτησε μια νέα, απρόσμενη απάντηση. Ο Lukas Vogel, σε μια εκτενή τεχνική ανάλυση, παρουσίασε το SQLDoom, ένα εγχείρημα που μεταφέρει τη λογική και την απόδοση του θρυλικού παιχνιδιού εξ ολοκλήρου μέσα σε μια σχεσιακή βάση δεδομένων.
Η αρχιτεκτονική του SQLDoom
Αν και το εγχείρημα χρησιμοποιεί έναν μικρό client σε Python για τον χειρισμό της εισόδου/εξόδου και του χρονισμού, η καρδιά του παιχνιδιού χτυπά στη βάση δεδομένων CedarDB. Περίπου 1.300 γραμμές SQL ερωτημάτων, κατανεμημένες σε 89 κοινές εκφράσεις πίνακα (Common Table Expressions - CTEs), υλοποιούν τη λογική του παιχνιδιού και παράγουν 35 bitmap framebuffers το δευτερόλεπτο.
Το SQLDoom αποτελεί σημαντική εξέλιξη σε σχέση με το προηγούμενο project του Vogel, το DoomQL, το οποίο περιοριζόταν σε γραφικά ASCII τύπου Wolfenstein 3D. Η νέα έκδοση αποδίδει πλήρως έγχρωμα καρέ σε ανάλυση 640x480, παραπέμποντας απευθείας στην αυθεντική εμπειρία του 1993.
Από τους πίνακες στην Κόλαση
Η μετατροπή των κλασικών αρχείων WAD του Doom σε σχεσιακή βάση αποδείχθηκε σχετικά απλή, καθώς η δομή του παιχνιδιού (κορυφές, γραμμές, τομείς) ταιριάζει με τη λογική των πινάκων. Ακόμη και τα δέντρα δυαδικού διαχωρισμού χώρου (BSP trees) μεταφράστηκαν σε SQL χρησιμοποιώντας ένα sort_key. Με μια απλή εντολή ORDER BY, η βάση δεδομένων μπορεί να καθορίσει ποια τμήματα των τοίχων πρέπει να εμφανιστούν σε κάθε καρέ.
Παρά τον τεράστιο φόρτο εργασίας που συνεπάγεται η ανάγνωση και εγγραφή σε πίνακες SQL για κάθε κίνηση, το σύστημα πέτυχε ταχύτητες έως και 60 fps σε laptop με επεξεργαστή Ryzen 7, με περιστασιακές πτώσεις στα 35 fps σε πιο «φορτωμένες» σκηνές.
Πλεονεκτήματα για το Multiplayer
Πέρα από τον πειραματικό χαρακτήρα, ο Vogel επισημαίνει ότι η χρήση βάσης δεδομένων προσφέρει εγγενή πλεονεκτήματα για παιχνίδια πολλών παικτών. Λόγω της φύσης των συναλλαγών στην SQL, υπάρχει ένα σταθερό «στιγμιότυπο αναφοράς» για την κατάσταση του παιχνιδιού. Αυτό εξαλείφει προβλήματα όπως τα physics bugs ή τις διαφωνίες μεταξύ παικτών για το αν μια ρουκέτα βρήκε τελικά τον στόχο της.