FPSの「DOOM」は、メモ帳やマインクラフト、果ては大腸菌など、ありとあらゆるものにインストールする「DOOMチャレンジ」で知られています。そんなDOOMをPDFファイルに移植した「DoomPDF」が登場しました。

GitHub - ading2210/doompdf: A port of Doom (1993) that runs inside a PDF file

https://github.com/ading2210/doompdf



DOOMをPDFでプレイするとどんな感じかは、以下のムービーを再生するとよくわかります。

PDFファイルに「DOOM」 を移植した「DoomPDF」のプレイ映像 - YouTube

以下のリンクから実際にプレイすることもできます。

doom.pdf

(PDFファイル)https://doompdf.pages.dev/doom.pdf

通常のPDFは単なる静的な文書フォーマットですが、実はJavaScriptを埋め込む機能が規格として存在しており、Chromium系やFirefoxなどの一部ブラウザではJavaScriptを制限付きながら実行できます。DoomPDFは、そのJavaScript機能やテキストフィールドなどを駆使し、DOOMの描画や操作を実現しています。

ただし、PDFのJavaScript環境は、一般的なブラウザ上でのJavaScriptに比べて使える機能がかなり制限されています。そこで、DoomPDFでは、DOOMのプレイ画面をテキストフィールドを使ってASCIIで表現しています。Doomの解像度は320×200なので、数千ものテキストフィールドをフレームごとに切り替えなければなりませんが、DoomPDFの作者であるGithubユーザーのading2210氏は、DOOMのプレイ画面を行に分けて、各行ごとに別々のテキストフィールドを使う方法を採用。さらに出力する文字数を必要最小限に抑え、処理負荷を軽減する工夫を行っています。

また、C言語で開発されたDOOMをウェブブラウザ上で動かすにはWebAssemblyが使われるのが一般的ですが、PDFのJavaScript環境では動作が厳しく制限されます。そこで、DoomPDFでは古いバージョンのEmscriptenを使い、asm.jsでDOOMを実行しています。これにより、WebAssemblyがサポートされないPDFのJavaScript環境でも動作するというわけです。

実際にGoogle ChromeでDoomPDFにアクセスしたのが以下。若干のラグがありましたが、確かにプレイすることができました。