何を解決するものか
Project Zomboid 風のサバイバルを、インストール不要のブラウザで、スマホとPCが同じ世界に入れる形で遊べるようにする試みです。ソロに加えて4種のマルチモードを想定しています。
現在は M1(シミュレーション核の抽出)を進めている段階です。
担当範囲
企画・アーキテクチャ設計・実装。
技術的に難しかった点と、どう解いたか
1. ソロとマルチでロジックを二重管理しない
ソロはブラウザ内で完結し、マルチはサーバーが世界を持ちます。素直に作ると同じゲームロジックを2箇所に書くことになり、片方だけ直したバグが必ず出ます。
そこで (状態, 入力, dt) → 次状態 という純粋な TypeScript モジュールとしてシミュレーション核を1本だけ用意し、ソロはブラウザで、マルチはサーバーで同じ核を実行する設計にしました。描画と入力はその外側に置いています。
2. チートを構造的に防ぐ
クライアントを信用すると位置やダメージを書き換えられます。権威サーバー方式を採り、世界の真実はサーバーだけが持ちます。クライアントは入力の送信・描画・予測補間に徹します。
3. 後から作り直せない部分を先に用意する
永続ワールドと大規模マップは、あとから足すとアーキテクチャごと作り直しになります。まだ使わない段階でも、チャンクの load/save の口と AoI(関心領域)対応という2つの「縫い目」だけは最初から仕込みました。
4. クロスプレイの本体はプロトコル
Web とモバイルで別クライアントになっても、メッセージ形式をバージョン管理していれば同居できます。プロトコルを最初に固め、モバイルは Capacitor で Web ビルドを包む方針にしました。
学んだこと / 次にやること
後戻りコストの大きい判断を先に、小さい判断を後に。ゲームは特にこれが効きます。
M0(ソロのプロトタイプ)は動作済みで、現在は M1 のリファクタ中。以降 最小マルチ → PvE生存ルーム → ルールセット展開 → モバイル化 → 永続ワールド と進めます。