あの「DOOM」がついにPDFファイルに移植される

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にアクセスしたのが以下。若干のラグがありましたが、確かにプレイすることができました。
