it.xnews.jp
生成: 2026-10-05 読了 約 3 分 model: claude-haiku-4-5 原文: https://cedardb.com/blog/sqldoom/ raw.md

元祖 Doom をSQL に ポートして動作させた

1993年のオリジナル Doom のゲームロジックとレンダラーをSQL クエリとしてデータベース内で実装し、動作させるプロジェクトが完成した。ゲームループは元の 35 FPS で動作し、レンダラーは 320x200 ピクセルのフレームを最大 60 Hz で生成する。マルチプレイのデスマッチは4プレイヤースロットで機能する。

開発者によると、「1993年のオリジナル Doom のゲームロジックとレンダラーをSQL に ポートしてデータベース内で実行しました。ゲームループはオリジナルの 35 FPS で動作し、レンダラーはラップトップ上で完全な 320x200 フレームバッファを最大 60 Hz で生成します」という。

ゲーム実装の規模

ゲームロジックはおよそ 5900 行のSQL コードで実装されており、これはオリジナルC ソースコードの約 9000 行に相当する。レンダリングパイプラインはおよそ 1300 行のSQL 87コードで構成され、単一フレームのクエリ内に 89 個の共通テーブル式(CTE)を含む。元のlinux_doom ソースではレンダリングエンジンに約 3300 行を費やしていたことと比較すると、SQL での実装は元の実装の約 2.5 倍のコード行数削減を実現している。

SQL版とVanilla版の比較

パフォーマンス特性

最も遅いゲームティックは E4M1 レベルで46体の覚醒モンスターがいる場合の 10.45 ミリ秒であり、これは 28.6 ミリ秒の時間予算の 37 パーセントに相当する。一方、覚醒モンスターが6体の典型的なティックは平均 2.15 ミリ秒で、予算全体の 8 パーセントを使用する。壁のレンダリングは平均 1.7 ミリ秒のコストがかかり、床・天井・空のレンダリングは一般的に約 3 ミリ秒を要する。

Game loop waterfallの最悪ケース

ゲーム機能と互換性

マルチプレイのデスマッチは4プレイヤースロットで完全に機能し、シェアウェア版の第1エピソードが公開サーバーでプレイ可能である。Python はタイミング、キーボード入力、ビットマップ表示を担当し、すべてのゲームロジックと描画がSQL 内で実行される。

WAD ファイルフォーマットは高い関連性を持つ設計になっており、1000 行のPython コードでWAD ファイルをデータベースに変換できる。Doom 1 全体のインポートはラップトップ上で約 18 秒で完了する。

レンダリング構造

Doom のレンダリングアルゴリズムはBSP ツリーを使用して前から後ろへと描画を行う。E4M8 レベルに含まれる最も深いBSP ツリーの深さは 32 レベルに達する。

CTEの有向非巡回グラフ(DAG)

筆者の見立て

この記事は元記事の事実のみに基づいて自動生成されました。

出典

CedarDB「We ported the original Doom to SQL」https://cedardb.com/blog/sqldoom/

この記事をシェア