
2026/03/24 0:17
**「DOOM Over DNS」** (ドゥーム・オーバーDNS)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
(すべての重要ポイントを統合し、根拠のない推測を除外した文書)
このプロジェクトは、Cloudflare にホストされた DNS TXT レコードだけで、完全な shareware DOOM ゲームを実行する方法を示しています。PowerShell 7 スクリプトを使用して、9 MB の WAD ファイルと .NET エンジンを直接メモリにロードします—ディスクへの書き込みは発生しません。
主な詳細点:
- WAD 全体は約1,964 個の TXT レコードに分割されます。各レコードは公開 DNS クエリで取得されます。
- .NET エンジン DLL も DNS からストリームで読み込み、Native AOT ビルドをフレームワーク依存型の .NET 8 アセンブリに変換する managed‑doom フォークを使用します。これにより、WAD のストリームベースロードと Win32 P/Invoke によるウィンドウ操作(GLFW なし、音声は NullSound/NullMusic スタブ)が可能です。
- インストールには PowerShell 7 が必要です (
)。メインスクリプトはwinget install Microsoft.PowerShell
です。Start-DoomOverDNS.ps1 -PrimaryZone 'example.com' - 新しいビルドを公開する手順:
- エンジンを次でビルドします
dotnet publish ManagedDoom/ManagedDoom.csproj -c Release -f net8.0 -o publish-out - Cloudflare の認証情報を
で設定します(トークンは「Edit zone DNS」権限が必要)。Set-CFCredential -ApiToken …
を次の引数で実行します:Publish-DoomOverDNS.ps1
,-PublishDir
,-WadPath 'DOOM1.WAD'
。オプションとしてプレフィックス(-Zones @('example.com')
,-WadPrefix
)や DNS サーバー上書き(-LibsPrefix
)を指定できます。-DnsServer
- エンジンを次でビルドします
- Cloudflare の無料ゾーンは最大 185 個の TXT チャンクしか保持できませんが、Pro/Business/Enterprise ゾーンでは 3,400 個まで可能です。WAD 単体で約1,199 個のチャンクが必要なため、Free‑tier ユーザーは
に複数ドメインを指定する必要があります。-Zones - アップロードは再開に対応しています:スクリプトはハッシュを検証し、
フラグで最後の正常チャンクから継続できます。-Resume
のパラメータ:Start-DoomOverDNS.ps1
,-PrimaryZone
,-DnsServer
(デフォルト-WadName
)、'doom1'
,-DoomArgs
,-WadPrefix
。-LibsPrefix
主要コンポーネントは、managed‑doom, Silk.NET, TrippyGL, id Software のオリジナル DOOM1.WAD、および Cloudflare DNS API です。このプロジェクトは、Cloudflare のグローバル DNS ネットワークとエッジキャッシュを活用し、ゲームデータを世界中に分散させるメモリのみでディスク不要な実行モデルを示しています。
本文
DNS‑Over‑DOOM – クラシックゲームを完全に DNS TXT レコードで実行
何それ?
DNS の TXT レコードは任意のテキストを格納できます。
Cloudflare は世界中で無料で配信し、エッジでキャッシュするので、ゾーンを問い合わせると即座にデータが返ります。
RFC 1035 が示す通り DNS はファイル保存システムとして設計されていませんが、1,964 個ほどの TXT レコードに分割した DOOM の共有版ゲーム全体を PowerShell と公開 DNS クエリだけで再生できます。
WAD ファイルはディスクに触れず、.NET のゲームエンジン DLL はメモリへ直接ロードされます。
すぐに始める
1️⃣ PowerShell 7 をインストール(まだの場合)
winget install Microsoft.PowerShell
2️⃣ DOOM をプレイ
.\Start-DoomOverDNS.ps1 -PrimaryZone 'example.com'
残りは
Resolve-DNSName で自動取得されます。
自分のゲームをアップロードする
1️⃣ ゲームエンジンをビルド
cd managed-doom dotnet publish ManagedDoom/ManagedDoom.csproj ` -c Release ` -f net8.0 ` -o publish-out
2️⃣ Cloudflare の認証情報を読み込む
Import-Module .\TXTRecords\TXTRecords.psm1 Set-CFCredential -ApiToken (Read-Host 'API Token' -AsSecureString)
3️⃣ DNS にアップロード
.\Publish-DoomOverDNS.ps1 ` -PublishDir 'managed-doom\publish-out' ` -WadPath 'DOOM1.WAD' ` -Zones @('example.com')
スクリプトパラメータ
Start‑DoomOverDNS.ps1
Start‑DoomOverDNS.ps1| パラメータ | デフォルト | 説明 |
|---|---|---|
| -PrimaryZone (必須) | – | ストライプメタレコードが存在する DNS ゾーン |
| -DnsServer | システムデフォルト | 指定解決器 IP(例:) |
| -WadName | | WAD タイプ:、、、、 |
| -DoomArgs | – | エンジンに渡す引数(例:) |
| -WadPrefix | | WAD ストライプ用 DNS プレフィックス |
| -LibsPrefix | | DLL バンドルストライプ用 DNS プレフィックス |
レコードがローカル解決器にまだ反映されていない場合は
を指定してください。-DnsServer '1.1.1.1'
Publish-DoomOverDNS.ps1
Publish-DoomOverDNS.ps1| パラメータ | デフォルト | 説明 |
|---|---|---|
| -PublishDir (必須) | – | dotnet publish 出力ディレクトリへのパス |
| -WadPath (必須) | – | WAD ファイルへのパス |
| -Zones (必須) | – | Cloudflare DNS ゾーン名の順序付き配列 |
| -WadPrefix | | WAD ストライプ用 DNS プレフィックス |
| -LibsPrefix | | DLL バンドルストライプ用 DNS プレフィックス |
| -Force | | 上書き時に確認プロンプトをスキップ |
アップロードには Edit zone DNS 権限付きの Cloudflare API トークンが必要です。
で読み込んでください。Set-CFCredential
高度なトピック
複数ゾーンストリーピング
Free tier のゾーンは 185 個のデータチャンクを保持できます。 Pro/Business/Enterprise は 3,400 個です。
WAD 単体が約 1,199 チャンク必要なので、Free tier ユーザーは複数ドメイン(例:
-Zones @('a.com', 'b.com'))を提供しなければなりません。モジュールはチャンクを自動で分散します。Pro ゾーン単体でも十分です。
中断されたアップロードの再開
アップロードが中断された場合、
Publish-TXTStripe は -Resume をサポートします。ハッシュを検証し、最後に正常だったチャンクを見つけて続行します。
managed‑doom パッチ
上流
managed-doom は Native AOT を使用しているため Assembly.Load() で読み込めません。このフォークはフレームワーク依存の .NET 8 アセンブリに変換し、以下を提供します:
- ストリームベースの WAD ロード
- Win32 P/Invoke を使ったウィンドウ管理(GLFW なし)
- 組み込み NullSound/NullMusic スタブ(音声なし)
コンポーネント
- managed-doom – .NET ゲームエンジン
- Silk.NET – 低レベルグラフィックス・入力抽象化
- TrippyGL – managed‑doom が使用する OpenGL ラッパー
- DOOM1.WAD – 元の共有版データ(id Software)
- Cloudflare DNS API – TXT レコードアップロード用