DOOM draait in regex

Menig tweaker zal zich soms heel wat voelen als hij of zij reguliere expressies gebruikt. Maar dat is kinderspel vergeleken met wat programmeur Artem Lytkin met regex kan. Die heeft DOOM geschreven in een 96MB groot regexcommando. Dat werkt, maar echt speelbaar is het niet te noemen.

Lytkin, die zichzelf ook 4RH1T3CT0R7 noemt, heeft DOOM weten te porten naar een lange regexformule. In de praktijk heeft Lytkin alle data van DOOM, zoals cpu-registers, het geheugen, de framebuffer en de DOOM-engine, vertaald naar een plaintextbestand dat in totaal 96MB groot is.

Wat zijn regular expressions?

Regular expressions, meestal afgekort tot regex, zijn zoekopdrachten om bepaalde patronen van tekens in tekst en code te vinden en te vervangen. Ze kunnen bijvoorbeeld worden gebruikt om alle vormen van de term 'Tweakers' in een lange tekst te vinden, ook als daar Tweakers.net staat of tweakers zonder hoofdletter. Het is een krachtig hulpmiddel voor zoekopdrachten naar een patroon in plaats van een exacte overeenkomst.

Bij iedere actie, zoals het genereren van een frame, start Lytkins tool een regexzoekopdracht. Daarmee zoekt de tool de juiste tekst in het tekstbestand. De regexformule zet die vervolgens om in een string die correspondeert met de cpu-registers.

Dat is, zoals je misschien verwacht, onbeschrijfelijk traag. Om een enkel frame te tonen gebruikt het script niet minder dan 13.994.067 substitutions. In een kleine demo van honderd frames zitten 1,2 miljard vervangingen.

Maar traag of niet: de game werkt wel. Lytkin zegt dat de hash van ieder frame identiek is aan die van de originele game. Het is alleen zo traag dat het praktisch onspeelbaar is. Het script heeft een paar minuten nodig om een frame te genereren. Daardoor lijkt spelen op 'schaken via de post', zegt de maker. Dan kun je de game toch beter in DNS-records spelen.

DOOM regex

Door Tijs Hofmans

Nieuwscoördinator

29-07-2026 • 16:19

25

Reacties (25)

Sorteer op:

Weergave:

Als iemand die in het verleden aardig wat met regexes heeft lopen kutten kan ik je zeggen dat je wel echt een ontzettende hekel aan jezelf moet hebben als je dit gaat maken.

Maar wel weer ultiem respect als je het voor elkaar krijgt :D
Ik gok dat meneer Claude wel geholpen heeft, mag ik hopen. Zonder regex101.com kom ik er ook niet uit hoor :P
In principe heb je hier geen Claude voor nodig, als je eenmaal een manier hebt gevonden om voldoende operatoren naar regex substituties mappen zodat je aan de voorkant een turing-compleet taaltje overhoudt (en dat hoeven niet veel operatoren te zijn, in theorie is een 'counter machine' [1] al voldoende), dan hoef je 'alleen' nog maar een transpiler te maken van een DOOM versie gecompileerd naar een of ander niet te complexe intermediate representation naar je eigen operaties die tot de uiteindelijke regex kunnen worden gecombineerd. Ik zal niet claimen dat het 'makkelijk' is, maar gezien het feit dat er niet echt limitaties zijn aan het praktisch gebruik van de uiteindelijke oplossing, kan je het uit vrij simpele primitieven opbouwen.

[1] Wikipedia: Counter machine

[Reactie gewijzigd door johnbetonschaar op 29 juli 2026 16:56]

Heb je comment tweemaal gelezen en telkens halverwegen gaven men hersenen het op. Respect for the knowledge..
Ik mag hopen dat hij hulp heeft gehad..... anders heeft hij nu andere hulp nodig denk ik :P
Ik zou me niet verbazen als dit gemaakt is met behulp van een taalmodel - dus het probleem van de regexp is dan dus uitbesteed aan een computer...

Ik moet nu overigens wel denken aan een kwoot van Netscape engineer Jamie Zawinski:
Some people, when confronted with a problem, think 'I know, I'll use regular expressions.' Now they have two problems.
Ik ga er vanuit dat hij reguliere 'haha' code heeft geschreven die dit allemaal voor hem heeft gegenereerd? Alsnog, het zal vast een leuk frustrerend project zijn geweest.

[Reactie gewijzigd door ZpAz op 29 juli 2026 16:34]

Ik kan niets anders dan me hier volledig achter scharen 🤭

Regex is handig, maar ook best wel verschrikkelijk als je er zelf een wat langere moet schrijven hehe, dus vooral veel respect naar deze Artem Lytkin, misschien is hij gewoon lichtelijk masochistisch of zo, ieder z'n ding 😉

Blij dat er tegenwoordig tientallen goeie regex generators zijn waar je even snel de ~100 meest voorkomende in elkaar kunt klikken, er was een tijd dat ik die dingen echt haatte hehe.
Zelf maken is al niet zo leuk. Maar een bestaande lange regex van een collega developer ontcijferen nog minder. Gelukkig hebben we daar tegenwoordig hulpjes voor.
Zelf maken is al niet zo leuk. Maar een bestaande lange regex van een collega developer ontcijferen nog minder. Gelukkig hebben we daar tegenwoordig hulpjes voor.
Zo heb ik iets van 10 jaar geleden ofzo meegewerkt aan een documentatie project voor WordPress. Samen met een collega alle regexen van de teksteditor zitten uitpluizen om te documenteren. En er waren exact 0 regels documentatie al aanwezig. Dan zijn hulpjes als regex101.com heel hard nodig. En was het verdomd handig dat je met iemand werkt die letterlijk tegen me zei nadat ze voor het eerst een regex zag "Goh, regexxen zijn helemaal niet zo moeilijk".
/offtopic

Ik zat net even naar de documentatie te kijken van dit project, maar heb al snel besloten dat mijn hoofd dit gewoon niet aankan :P

[Reactie gewijzigd door TERW_DAN op 29 juli 2026 16:47]

Regex is en blijft een vorm van zelfkastijding.
Inderdaad, de haren rijzen mij te berge.

Wat een verschrikking.
Een schitterend voorbeeld van 'omdat het kan'

Ik blijf het geweldig vinden hoe mensen de meest bizarre manieren vinden om Doom te spelen. Naja, spelen... zichtbaar te maken, want dit kun je toch geen spelen meer noemen :) Niet alleen de sloot aan apparaten waar het op draait, maar ook dit soort dingen.

Ik ben geen ontwikkelaar, snap er eerlijk gezegd heel weinig van, maar ik heb respect voor deze mensen.
Je hoeft geen ontwikkelaar te zijn om regexes te kunnen schrijven, met een beetje analytisch vermogen en veel zelfhaat kom je al een heel eind.
Als je besluit hier aan te beginnen heeft je analytisch vermogen je al lang geleden in de steek gelaten dus blijft zelfhaat over.
Analytisch vermogen is volgens mij net heel aanwezig. Rationeel denkvermogen zal rationeel gedacht hebben "wat doe ik hier nog?".
Ik ga op retraite en mijn leven eens herbezinnen.
Doom voor de C64 is er ook al het ziet er niet zo mooi uit als deze maar het is dan ook niet 96mb groot
Dus als ik het goed begrijp draait deze doom variant helemaal niet in regex (want dat is niet wat regex is), maar gebruikt het regex om gegevens terug te converteren van een of ander obscuur TXT formaat naar werkbare instructies?
Je begrijpt het verkeerd, maar dat is vermoedelijk een gebrek aan theoretische informatica kennis. Elke Turing complete programmeertaal kan elk programmeerbaar probleem oplossen. Regex is zo'n taal en Doom emis zo'n programma, dus dit is totaal geen verrassing. En dat het compleet onpraktisch is, ook niet.
Maar regex is geen Turingvolledige programmeertaal. Regexes zijn computationeel vrij eenvoudige dingen, en dat is voor het doel waar ze meestal voor gebruikt worden, zoeken in tekst, ook juist hun kracht.

Deze DOOM draait dan ook niet "in regex", en dat beweert de auteur ook niet. Hij gebruikt term rewriting (eigenlijk string rewriting, een variant daarvan), waarbij de regels door regexen geimplementeerd worden. En string rewriting is wel Turingvolledig.

Het werkt ongeveer zo: De toestand van de computer (geheugen, registers, etc) wordt gerepresenteerd door een 96.6 MB groot tekstbestand. Hij heeft een geordende lijst van 544 substitutieregels geschreven, waarbij elke substitutieregel een regex-substitutie is. Zijn tool zoekt de eerste substitutieregel die op dat tekstbestand gematcht kan worden, en voert die regel uit, waardoor een nieuwe toestand ontstaat. Daarna zoekt hij weer de eerste matchende regel, en daarna weer, ad infinitum. Die 544 regels emuleren een CPU, en hij heeft Doom naar die CPU gecompileerd.
Dit is wel erg low-level. De CPU emuleren werkt natuurlijk wel en vergt het minste werk aan de engine zelf, maar ik zou denken dat er ook wel simpelere VMs/interpreters zijn waar je Doom naar kunt porten (als het niet al gebeurd is) en dan die met een (extended) regex implementeren, dan is het iets minder Turing tarpit. Kan toch weer een orde van grootte sneller zijn!

...niet dat je met die aanpak dan wel acceptabele framerates zou krijgen, daarvoor moet Doom gewoon teveel doen.
Nou ja, daadwerkelijk draaien in regex doet het ook niet. Het is opgeslagen in regex vorm dat vervolgens op een bepaalde manier uitgevoerd wordt. Dat is wel iets anders dan echt daadwerkelijk draaien in regex. Dit is dus mijns inziens echt wel iets anders dan dat DOOM draait in/op een espresso machine of een eink tablet bijvoorbeeld.
Ja, maar laten we wel wezen, er zijn dan ook geen regex engines die rechtstreeks een scherm aan kunnen sturen, het moet uit de lengte of uit de breedte komen. "In principe" had hij de hele regex engine op een FPGA kunnen branden en direct koppelen aan hardware zodat dat wel kon, maar gezien de performance zou dat een nog nuttelozere exercitie zijn dan wat het nu is.

Het is weer eens wat nieuws, als je nu Doom weet te draaien op een wasmachine of zo gaapt iedereen omdat we al gewend zijn aan rare hardware.
Een 96MB tekstbestand, amai.

Voor mij heeft deze meer een 'Does it display Doom'-gehalte... maar wel weer knap hoe iemand zoiets in elkaar bokst.

Om te kunnen reageren moet je ingelogd zijn