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.
/i/2008281266.png?f=imagenormal)
:strip_exif()/u/26632/dosprompt2.gif?f=community)
/u/155722/Looneytunes.png?f=community)
/u/952371/crop5b1ea3a9d9923_cropped.png?f=community)
:strip_icc():strip_exif()/u/137578/crop684839b85b72a.jpg?f=community)
:strip_icc():strip_exif()/u/630253/4b8001781ceab258b7bf40f76426913e.jpeg?f=community)
/u/27299/hoofd.png?f=community)
:strip_exif()/u/53522/crop583d477015a24.gif?f=community)
:strip_icc():strip_exif()/u/464574/crop5ef5b118724ae_cropped.jpeg?f=community)