- The Backdooms は、QRコード上で直接実行できるHTMLゲームで、DOOM 1993 と The Backrooms に着想を得て開発された
- このプロジェクトは、QRコードの保存容量と圧縮の限界を試し、QRコード内で軽量なWebアプリケーションをホストする革新的な方法を示すために設計された
- ゲームは、QRコードをスキャンするだけでインターネット接続なしにプレイでき、極限まで圧縮された形で提供される
- DecompressionStream API を使って、ブラウザ内で動的にゲームを実行できる
- 現代的なモバイルブラウザで互換性があり、Python と QRコードライブラリを使って QRコードを生成できる
プロジェクト概要
- The Backdooms は、QRコード上で直接実行できるHTMLゲームで、DOOM 1993 と The Backrooms に着想を得て開発された
- QRコードの保存容量と圧縮の限界を試し、QRコード内で軽量なWebアプリケーションをホストする革新的な方法を示すために設計された
機能
- 完全オフライン: QRコードをスキャンした後、インターネット接続なしでゲームをプレイできる
- 極限の圧縮: Zlib 圧縮、Gzip の伸長ストリーム、base64 エンコーディングを使って、最終結果を極限まで圧縮する
- 自己展開型Webページ:
DecompressionStream API を使って、ブラウザ内で動的にゲームを実行する
- モバイル対応: DecompressionStream API をサポートする最新のモバイルブラウザで動作する(Edge、Yandex、Opera)
インストールと依存関係
- 技術的には最新のWebブラウザだけで十分だが、約 2.5kb のゲームの QRコードを生成するには、Python 3.7+、
qrcode ライブラリ、pillow が必要
使い方
1️⃣ ゲームをQRコードに変換
- スクリプトを次のコマンドで実行:
python3 QRGEN.py <your-game.html> <output-qrcode.png>
2️⃣ QRコードをスキャン
- スマートフォンや QR スキャナーを使って、ゲームをWebブラウザで直接開ける
3️⃣ すぐにプレイ 🎮
- ダウンロードやインストールなしで The Backdooms を楽しめる
技術的な分析
圧縮ワークフロー
- 入力HTMLの読み込み: ファイルまたは入力ソースから指定された HTML コンテンツを読み込む
- Zlib 圧縮 + GZip 伸長: HTML を Zlib で圧縮し、GZip の DecompressionStream を使って最良の圧縮を実現する
- Base64 エンコーディング: 圧縮データを Base64 でエンコードしてテキストベースのまま維持し、HTML ファイルに安全に埋め込めるようにする
- HTML ラッパーに含める: JavaScript ベースの自己展開型 HTML ラッパーが生成される。このラッパーには、ブラウザで開かれたときにコンテンツを自動で伸長する DecompressionStream API 関数が含まれる
- データ URI への変換: HTML 全体を
data:text/html;base64,... 形式に変換し、物理ファイルなしで簡単に保存・共有できるようにする
QRコード生成ロジック
- システムはまず
qr.make(fit=True) を使い、コンテンツ長に応じて QR サイズを動的に調整し、可能な限り最小の QR バージョンを生成しようとする
- 必要なバージョンが 40 を超える場合(QRコード規格の上限)、
fit=False でバージョン 40 を強制する
- 最大データ容量を確保するため、可能な限り多くのデータを収められる最も低い誤り訂正レベル L を使用する
- データがなお QR v40 レベル L に収まらない場合、プロセスは失敗し、データが QRコードにエンコードするには大きすぎるというエラーメッセージが返される
結果
- 成功すると、QRコードが生成されて表示される
- 失敗すると、データが QRコードにエンコードするには大きすぎるというエラーメッセージとともにプロセスが終了する
ライセンス
- このプロジェクトは MIT ライセンス の下で公開されており、自由に利用、修正、共有できる
クレジット
- DOOM を開発した id Software
- 5年前にこのアイデアを提案した matttkc
- Undertale の素晴らしい音楽を作った Toby Fox。このゲームの GitHub ホスティング版では Bonetrousle の 8ビット版を使用している
- Kuber Mehta によって開発された
1件のコメント
Hacker Newsのコメント
ときどき思いつきでランダムなプロジェクトを始めるのですが、今回もそんな感じでした。今年の初めに1週間で作ったプロジェクトでしたが共有しておらず、今回共有することにしました
次のプロジェクト: LLMをQRコードにする
本当にすごいプロジェクトです。
data:URLについて知ることができました。data:URIスキームは知っていましたが、完全なURLとして使えるとは知りませんでした。QRコードの中にゲーム全体を入れられないかと考えたことはありましたが、HTTP(s)リンクが必要だと勘違いして保留にしていました。この作品から大きな刺激を受けました: QRコードの中にゲーム全体を入れられるか? [YouTubeリンク]リポジトリにスクリーンショットをいくつか追加してほしいです。私はスマホで見ているのですが、理由は分からないものの、3つのボタンと黒い画面しか表示されませんでした
iPhoneの標準QRコードスキャナーでスキャンしたところ、「利用可能なデータがありません」と表示されました
キャンバスのCSSを
image-rendering: pixelatedに更新して、画像がぼやけず鮮明に表示されるようにすべきですこれからもすてきなものを作り続けてください、kuberwastaken
素晴らしいプロジェクトです。「自己完結型QRコード」がcanitrundoomに追加されるのを待っています(技術的に承認されるのかは分かりませんが)
このプロジェクトはSnow Crashに近づいてきている感じがします。QRコードを見て、自分の脳が変質していないか気になりました :-D 驚くべき仕事です
とてもクールです。細かい指摘ですが、DOOMはレイキャスティングを使っていませんでした。このプロジェクトはWolfenstein 3Dに近く、Wolf3Dはレイキャスティングを使っていました