本物のゲームエンジンをブラウザで動かす
ZUPI のデモが再現ではない理由と、それを可能にするためにコードベースで何が成り立っていなければならなかったか。
技術ノート · · 読了 5 分
更新、2026年10月3日。ここで述べているデモはもう存在しません。そしてその理由のほうが、この記事より価値があります。以下はすべて、実在した工学的な仕事についての正しい記録です。ZUPI のルールモジュールは本当に無改変で取り込まれていましたし、そのハッシュは本当にビルドごとに検査されていましたし、盤は本当にアプリが生成するままのレベル1でした。そのあとアプリが変わりました。ZUPI: Pulse Shield が2026年9月30日に公開され、それは別のゲームです。ですからここで称えられているモジュールは前のゲームのものになりました。その主張を守っていた検査が証明できたのは、複製がリポジトリと一致することだけで、そのリポジトリが人々のダウンロードする当のものであり続けていることではありません。/try/zupi はいま誠実な再現版です。以下の議論は Glow Garden と Veyra については今も成り立ちます。欠けていたのは、取り込んだ複製はハッシュを取り直すだけでなく、取り込み元を同定し直す必要があるということです。
どのプロダクトスタジオのサイトも同じ問題に直面します。スクリーンショットは手ざわりを見せられず、ゲームとはほとんどその手ざわりだからです。通常の答えは再現です。製品を示唆できる程度に近づけた、簡略化したブラウザ版。私たちはそれが利用可能な選択肢のうち最悪だと考えています。本物のエンジニアリングを費やし、どちらかが変わった瞬間にアプリから乖離し、訪問者が遊ぶものは構造上その製品ではありません。
ZUPI は、マーケティングとはまったく関係のない理由で、この選択そのものを避けさせてくれました。
境界はすでにそこにあった
ZUPI のルールは、サードパーティの実行時依存を持たない単一の自己完結したモジュールに住んでいます。物理、衝突処理、レベル生成、難易度曲線、得点計算、そして三秒静止ルールをそれが所有しています。キャンバスが何かを知りません。レベル番号を渡して構築し、デルタタイムで進めるクラスを公開し、すべてがどこにあるかを教えてくれます。
その境界はウェブのために引かれたのではありません。レンダラーなしでゲームをテストできるように、そして同じルールを二度書かずに Android ビルドと iOS ビルドの両方を支えられるように引かれました。テスト用の仕組みから駆動できるモジュールは、ブラウザからも駆動できる。それはたまたまそうなっただけです。
実際にやったこと
- ルールのモジュールを無改変で取り込み、その出自を隣に記録した。移植でも書き換えでもなく、同じファイル。
- アプリのインターフェースを写すのではなく、NOVEMADE 自身のビジュアル言語でウェブ用のレンダラーを書いた。
- 固定タイムステップのループから駆動し、ディスプレイのリフレッシュレートに関係なくシミュレーションが同一に進むようにした。
- レベル生成にはまったく手を触れなかったので、盤はアプリが生成するままのレベル1である。
重要なのは最後の点です。レベルはレベルごとの決定論的なシードから導かれるので、これはレベル1に似た盤ではありません。レベル1そのものです。ここで突破することは、アプリで突破することとまったく同じ意味を持ちます。
インターフェースの問題としての誠実さ
「本物のエンジン」と「再現」は本当に別の主張なので、私たちのデモのカタログはすべての項目に忠実度の記述を載せており、それはあれば良い項目ではなく、内容モデル上の必須項目です。まだ存在しないデモは、存在するときに何になるかを述べています。Didi のものは再現にならざるを得ないということも含めて。ロジックがネイティブ UI 層に結びついており、公開できるエンジンの境界がないからです。
持ち帰る価値のあること
再利用できる教訓はウェブデモについてではありません。「これを私たちの UI なしで他の誰かが駆動できるか」という問いは、製品ができたあとではなく作っているあいだに問う価値がある、ということです。答えが「はい」なら、テストしやすさと移植性が手に入り、そして結果として、二度作らずに済んだデモが手に入ります。