1993年のDoomをSQLで完全再現、ゲームロジックもレンダラーもクエリで動作

We ported the original Doom to SQL

1993年のDoomをSQLで完全再現、ゲームロジックもレンダラーもクエリで動作

CedarDBのエンジニアが、1993年のオリジナルDoomのゲームロジックとレンダラーをSQLで実装し、データベース内で動作させた。ゲームループはオリジナルと同じ35Hzで動き、レンダラーは320x200のフレームバッファを最大60Hzで生成。Pythonは入力と表示のみを担当する。デスマッチも動作し、EUとUSのサーバーで今すぐプレイ可能だ。

正直なところ、複雑なゲームロジックをSQLで表現するのがこれほど簡単だとは驚きだった。ゲームロジックはわずか約5900行のSQLで書かれている。
  1. bob1029

    > 複雑なゲームロジックをSQLで表現するのがこんなに簡単だとは驚いた。ゲームロジックはたった約5900行のSQLだ。

    現代のSQLの能力について、HNはまだまだ大いに居眠りしていると思う。

    ドメイン上で手続き型コードを保守することがほぼ不可能なほど複雑なビジネスも存在する。ビジネスルールをSQLで実装すると、問題を分解して、より多くの人が同時に関われるようにできる。

    半導体製造で働いていたとき、工場を運用するためにストアドプロシージャとSQLに非常に大きく依存していた。運用上の意思決定ロジックがコードに存在することはほとんどなかった。何百人ものユーザーが同じプロシージャ群を検査し、変更を提案していた。この手のもののテストは簡単だった。毎朝本番DBを複製し、ライブデータに対して直接実験していたからだ。ビジネスの情報とそのロジックの間にギャップはなかった。ほとんどの現場はこういうふうには運営されていない。彼らはデータベースを、データとロジックの両方の結節点ではなく、単なるCRUD取得エンジンのように扱っている。

    人々がMicrosoft、Oracle、IBMに大金を費やすことを提唱するとき、彼らは概して上記のようなものを求めている。文字通り、ビジネスがその中で運用される単一のシステムが欲しいのだ。1つで済むのにソリューションを10以上のベンダーやツールに分散させるのは、組織内でのあなたの役割によっては、ほとんど過失に近い。

  2. dclavijo

    TCならDoomが動く。

  3. soltanov

    バニラCより少ない行数で、クエリプランナをステートマシンとして悪用しているのは、究極のエンジニアリング上の不正行為だ。大好きだ。

  4. goosethe

    我が同胞たちよ!

    https://github.com/seanwevans/pg_shell

    https://github.com/seanwevans/pg_gpt2

    https://github.com/seanwevans/pg_os

    https://github.com/seanwevans/pg_git

  5. noduerme

    ゲーム状態がSQLテーブルであるというのは、私にとって1年間の最適化の記憶をちょっと呼び起こした。2010年にカジノを書いたとき、すべてのリモート呼び出しが、信頼できる唯一の情報源として使われるSQLテーブル上のゲーム状態を更新するというのが、良い決断だったのか悪い決断だったのか、いまだに確信が持てない。複数のプレイヤーがいれば、時に問題が起きるだろうことは想像がつく。初期のデッドロック問題のいくつかは凄まじかった。スケーリングは悪夢だった。しかし、すべてがアトミックだった。1ターンがサーバーに届かないかデッドロックする以外にデータが失われるリスクはなく、巨大なnodejsプロセスが全員の呼び出しで同時に詰まったり、メモリを失ったりするようなこともなかった。常に状態があった。

    振り返ってみると、うまく調整できれば、マルチプレイヤーのターン制ゲームにとって悪くない設計パターンのように思える。アトミック性は少なくとも、失われない一貫した状態が存在することを保証する。アクションゲームでその読み書きループをやる?まったくの愚行だが、私にはかなり笑える。

この日のほかの記事

2026-10-05