Doom als kunstgalerie, omgevormd tot Captcha, verboden door bedrijven, draaiend op grasmaaiers, Lego-stenen, teletekst, zelfs in zichzelf. De technische redenen doen er niet toe; het enige geldige antwoord is omdat we het kunnen. Wat is het volgende? Jarenlang hebben gebruikers allerlei elementen (sommige behoorlijk kwaadaardig) in PDF-documenten gestopt, maar GitHub-gebruiker "adding2210" maakte een port die de Doomguy in het PDF-systeem van Google Chrome presenteert.
Als we aan PDF-documenten denken, komt automatisch een rigide formaat in ons op, met inhoud die moeilijk te wijzigen is zonder externe hulp. Niet iedereen weet echter dat PDF JavaScript ondersteunt. Het enige programma dat het volledig implementeerde was Adobe Acrobat, met functies zoals 3D-rendering en HTTP-verzoeken. De ondersteuning in browsers zoals Chrome en Firefox is echter veel beperkter (vanwege beveiligingsoverwegingen) ... maar dat is niet genoeg om "adding2210" op GitHub tegen te houden. Wat deed hij? Doom draaien in een PDF.
DoomPDF: "Rip and tear" in een PDF-document
Hoe werkt dit precies? "adding2210" legt uit dat de C-code kan worden gecompileerd om binnen een PDF te draaien met behulp van een oude versie van Emscripten die zich richt op asm.js in plaats van WebAssembly. De rest is een kwestie van het ontwikkelen van een manier om invoercommando's te registreren en een framebuffer voor de uitvoer. De invoer is eenvoudig, omdat de PDF-engine van Chromium tekstvelden en knoppen ondersteunt. De framebuffer is een heel ander verhaal, maar "adding2210" slaagde erin om een uitvoer van zes monochrome tinten in pure ASCII te presenteren, en elke frame heeft een gemiddelde latentie van 80 milliseconden.
Kortom, het ziet er slecht uit, maar dat maakt niet uit. De enige manier om DoomPDF correct uit te voeren is met een variant van Chromium, en om de Doomguy te besturen moet je "typen" in een klein gedeelte van het document. Natuurlijk maken de framerate-problemen het bijna onmogelijk om te spelen, maar ik kan me voorstellen dat meer dan één waaghals in het verleden een vergelijkbare prestatie accepteerde om er "van te genieten" op een 386.