Ontwikkelaar laat DOOM draaien in pdf-bestand

Een ontwikkelaar is erin geslaagd om de klassieke first-person shooter DOOM werkend te krijgen binnen een pdf-bestand, door slim gebruik te maken van de ingebouwde JavaScript-mogelijkheden van het bestandsformaat.

De ontwikkelaar zette een oude versie van Emscripten in om de C-code naar asm.js te compileren, in plaats van WebAssembly. Voor de weergave van het spel gebruikt het project een techniek waarbij elk van de 200 beeldschermregels in Ascii-karakters wordt weergegeven in een apart tekstveld. Dit levert een monochrome weergave op in zes kleuren, wat volgens de maker net genoeg is om dingen van elkaar te kunnen onderscheiden.

De implementatie haalt een frametime van ongeveer 80 milliseconden door het intensieve updaten van de tekstweergave. Voor debugging is er een scrollende tekstconsole toegevoegd die bestaat uit 25 gestapelde tekstvelden, omdat de reguliere console.println-functie niet beschikbaar is in Chrome's pdf-engine.

Hoewel het pdf-formaat oorspronkelijk uitgebreide JavaScript-functionaliteit ondersteunde in Adobe Acrobat, waaronder 3d-rendering en HTTP-requests, hebben moderne browsers zoals Chrome en Firefox deze mogelijkheden om veiligheidsredenen grotendeels uitgeschakeld. De maker wist binnen deze beperkingen toch een werkende game te realiseren, al is het resultaat misschien niet de meest praktische manier om een potje DOOM te spelen.

Het project is vrijgegeven onder de GNU General Public License en geïnspireerd door eerdere experimenten met interactieve pdf-bestanden. De broncode is beschikbaar op GitHub voor wie het zelf wil proberen.

Doom in pdf-vorm
DOOM in pdf-vorm

Door Andrei Stiru

Redacteur

14-01-2025 • 15:03

44

Submitter: Pompi

Reacties (44)

44
44
28
4
1
12
Wijzig sortering
En voor wie wil zien hoe dat er uit ziet:

YouTube: Doom (1993) in a PDF file
Dan zou ik ook gelijk de link laten zien waarmee je het online kunt spelen. :) Nu is spelen een groot woord, want het zit net op 't randje. Maar toch leuk dat iemand daar zijn vrije tijd aan besteed!
Mag ik even mijn verbazing uiten over dat er zoveel code-mogelijkheden zitten? Geeft dit niet op termijn compatibliteits- en vooral ook security-problemen?

Waarom is er meer dan hele simpele (en trage) if-then-else voor wat formulieren nodig? In iets dat een printbaar document 'hoort' te zijn.

Dat gezegd hebbende: mooi gedaan.
PDF/A is de archiveer standaard: een subset van PDF waar dit soort Macromedia flash-achtige oplossingen niet inzitten.
Onder het mom van, we vragen het maar gewoon:

Waarom is het altijd Doom dat voor zulke gekke toepassingen wordt geport? Is dat spel zo efficient in elkaar gecodeerd?
A. het is 2D (want pseudo 3D, dus 2D)
B. de hoeveelheid code is nog behapbaar
C. Doom is inmiddels zo vaak geport dat je eigenlijk nooit naar de oorspronkelijke DOS source hoeft te grijpen, je kunt iets meer moderns als basis pakken
D. zoals je zelf zegt, het is ALTIJD Doom. Als iemand ineens met Blake Stone 3D aan de haal gaat dan weet ik niet of je het op tweakers.net gaat lezen, het is namelijk geen Doom. Respect aan ieder die uberhaupt weet welke game ik het over heb.

Ik wens je veel succes om met de code van Quake en omhoog aan de haal te gaan. Ten eerste is het een bak meer code en heb je ineens te maken met een volwaardige 3D simulatie. Dat doe je niet effe.

[Reactie gewijzigd door gimbal op 14 januari 2025 17:36]

Oeh ja, Blake Stone: Aliens of Gold. Jeugdsentiment. Na Wolfenstein 3D heb ik die game ook veel gespeeld. Doom draaide niet op de PC die we toen hadden :P
Blake Stone - Aliens of Gold en Blake Stone - Planet Strike, jawel. Volgens mij heb ik ergens nog een re-release op CD-ROM liggen van die twee.
Beter dan Half-Life. ;-)
Is er niemand die zichzelf afvraagt of het überhaupt wel wenselijk is dat een PDF JavaScript kan uitvoeren?
Jawel, daarom wordt het, zoals in het artikel vermeld, al gelimiteerd...
In browsers, dat zegt niets over eender welke andere PDF viewer. Zoals Adobe Acrobat zelf.
En dus is er iemand die er over nadenkt of het wenselijk is...
Javascript is natuurlijk wel exact gemaakt om te draaien in een sandbox (de browser).Door deze comment te plaatsen heb je ook javascript gedraait die volledig dynamisch door tweakers ingeladen word.

Het is niet alsof javascript vanuit de browser bij je lokale bestanden kan ofzo he :+ Of bij andere tabbladen in je browser.

Dat gezegd hebbende ze draaien een of andere custom javascript engine, en die heeft natuurlijk niet zo veel doorgemaakt en gezien dan de javascript engines van de grote 3 (chrome, firefox, safari), en zijn daardoor geheid lekker dan de grote 3.

Persoonlijk open ik PDF's in de browser, waar inderdaad javascript kan draaien, maar dat is niet anders dan op welke site dan ook die ik bedoel
Javascript is natuurlijk wel exact gemaakt om te draaien in een sandbox (de browser).
En de keren dat Javascript uit die sandbox ontsnapt is zijn niet te tellen. Door actieve content toe te laten wordt de browser complexer en vele malen kwetsbaarder. Active-X, Javascript, Plugins als Java en Flash: allemaal verantwoordelijk voor een hele reeks security incidenten.
Door deze comment te plaatsen heb je ook javascript gedraait die volledig dynamisch door tweakers ingeladen word.
Speciaal voor jou plaats ik dit comment zonder javascript te gebruiken :)
Het is niet alsof javascript vanuit de browser bij je lokale bestanden kan ofzo he :+ Of bij andere tabbladen in je browser.
Dat is precies wat al die kwetsbaarheden wel mogelijk maken.

En Adobe reader heeft gewoon precies hetzelfde probleem. Feature creep, want goed genoeg was niet goed genoeg en geld verdien je met "innovatie", niet met gewoon een stabiel product leveren dat één belangrijk ding goed en veilig doet.

edit: Het blijft natuurlijk wel weer een prachtig voorbeeld van "niet omdat het moet, maar omdat het kan".

[Reactie gewijzigd door locke960 op 14 januari 2025 21:29]

Een taal maakt het niet perse veiliger. Als je met C code uit een sandbox kunt komen (zoals een VM, kernel namespace, of container) dan kun je dat met een andere taal doorgaans ook. De benodigde lekken zitten soms in de hardware.
Overal word beweerd dat je geen onbekende pdf's moet openen ivm virussen. Ik vind zijn vraag juist erg realistisch.

Voor web 2.0 was het standaard dat je na een nieuwe browser installatie javascript uitzette ivm veiligheids issues.
Ja, ik. Vind het raar en onwenselijk dat dit met pdf kan. Alle bekende browsers (die vaak als default pdf-opener fungeren) ondersteunen pdfscripting maar het is uit te zetten. In Firefox in about:config (pdfjs.enableScripting), in Chrome/Chromium zal het ook wel kunnen.

[Reactie gewijzigd door ray0755 op 14 januari 2025 16:37]

Dit kan dan ook toegevoegd worden aan de lijst met devices waar Doom op draaid: https://canitrundoom.org/?page=1
Op welk device drait het dan.

Dit is een heel nieuwe dimensie lol
Hij is grappig, maar fake, random oled schermpje in een behuizing van een zwangerschapstest.
Nu IPX network game toevoegen via het clipboard zodat 2 geopende PDF's tegen elkaar kunnen deathmatchen.
Play Doom Forever
Gamen op de afgeschermde pc van je werkgever is altijd mogelijk ;)
Of gewoon quake 3 in de browser

[Reactie gewijzigd door drakiesoft op 14 januari 2025 16:03]

Dat kon je vroeger al doen met Quake Live.
Wikipedia: Quake Live

Kon hem volgens mij gratis overzetten naar Steam als betaalde versie.
Speel het nog steeds.
Ongelooflijk, toevallig gisteren nog een tetris versie binnen PDF gespeeld. _/-\o_
Ik heb er inhoudelijk niet zoveel op te reageren behalve dat ik het heel creatief vind :)
Ik weet niet wat indrukwekkender is. Dit, of de limited tandenborstel edition.

Op dit item kan niet meer gereageerd worden.