ニュースニュース

開発ログ

2026年10月30日

綱の向こう側

TECH記事 #6
城がスローモーションで崩れ落ちる。ゲームが自動で組み上げるHighlightsのリールのように
城がスローモーションで崩れ落ちる。ゲームが自動で組み上げるHighlightsのリールのように

8人のプレイヤーで試合をテストするため、同じコンピューターでゲームのウィンドウを8つ開きました。それぞれのウィンドウでは、AIが誰かの代わりに遊んでいます。戦いの途中で、そのうちの一つを閉じて、開き直しました。

そこまで来るのに、この章すべてが必要でした。

まずは一対一から

綱引きは、綱の向こう側に人がいるときがいちばん面白いものです。だからオンライン対戦は、早い段階から用意しました。プレイヤーの一人がSteamでルームを作り、友達を招待します。それぞれが陣営とパークを選べば、試合が始まります。試合が終わると、Rematchを押すことで、両者が同じ選択のまま、すでにReady状態のルームへ戻ります。

興味深いのは、インターネットを通らないものです。一つの戦いには片側90体の部隊がいて、それぞれにHP、目標、経路、クールダウンがあります。そのすべてを送り続けるのは重く、壊れやすい。だから送りません。

通信チェス

手紙でチェスを指し合う、通信チェスの二人を思い浮かべてください。それぞれが自宅に盤を持っていて、郵便で届くのは指し手だけです。「ナイトをf3へ」。誰かが手紙を書かずに駒を動かさない限り、二つの盤はずっと同じままです。

Castle Arenaのオンラインも同じように動きます。二台のコンピューターが同じシミュレーションを並べて動かし、交換するのはプレイヤーの命令だけです。「ここに建てる」「あそこをアップグレードする」「ここで救出を使う」。あなたの命令は、両方のマシンでおよそ200ミリ秒後に実行されます。

この比較が通じなくなる点があり、そこがいちばん難しいところです。チェスには乱数がありません。Castle Arenaにはあります。クリティカルヒット、回避、抽選。もし各コンピューターが自分でサイコロを振れば、最初の一撃で盤は分かれてしまいます。だから、偶然のすべては、両側で同じシードから始まる一つの乱数列から出てきます。ルールが別の場所から乱数を取ると、自動テストが失敗します。

同じ始まりと同じ命令があれば、二台のマシンは、最後のHPの一点まで同じ戦いに到達しなければなりません。

1秒に一度ほど、二台は戦闘全体の指紋(チェックサム)を比べます。違いがあれば、二つの別々のゲームが静かにずれていくのを許すのではなく、試合を止めます。

ただで手に入ったもの

この方式には、おまけの恩恵もありました。同じ命令から同じ戦いが生まれるので、リプレイはとても小さくなります。保存するのは、試合の設定、シード、そして命令のリストだけです。0.5倍から8倍の速度で見られ、どこへでも飛べます。

プレイ中、スカウトが各レーンの各秒の激しさを記録し、大きな瞬間を記録します。救出、建物の崩壊、城の陥落などです。試合後、Highlightsは30〜60秒のリールにまとめます。城の陥落はスローモーションになります。結果画面のグラフもクリックできます。ポイントをクリックすれば、リプレイがその瞬間から開きます。「あれ、北のトレイルをいつ失ったんだっけ?」という問いへの、最も速い答えです。

誰かが落ちたとき

接続は切れ、ゲームは固まり、コンピューターは再起動します。一対一では、相手が消えると試合は一時停止し、2:30の再接続カウントダウンが表示されます。切断されたほうは、ゲームを開き直してRejoin matchを選ぶだけです。残っているコンピューターが戦いの完全なスナップショットを送り、そこから二人は再開します。

各側により多くの人を

同じ流れで、対戦モードも増えました。モードはレシピのようなものです。陣営を選ぶ、ランダムにする、ミラーにする、ドラフトする。そこに48のコマンドを重ねられます。「救出なし」から、自分の領域にコインが降るものまで。各レシピは短いコードになり、-rr3-nt-cc のように、コピーして友達に送れます。

その後、2v2と3v3のチーム戦が加わりました。各プレイヤーは自分のワーカー、ゴールド、救出を持ちます。城、領域、戦場の部隊はチームのものです。そこで一つの疑問が生まれました。3v3の城は、3倍の強さにすべきではないか?

測ってみました。

形式 試合時間
1v1 10.1分
2v2 12.1分
3v3 13.0分

城のHPをプレイヤー数だけ掛けても、試合時間は約0.3分しか変わりませんでした。試合は、防衛が崩れたときに決まるのであって、城のHPバーで決まるのではないのです。そこで城はどの形式でも同じにし、代わりに側ごとの部隊の上限を90、135、180と増やしています。

八人で一つの戦い

チーム戦のオンラインは、最初は、あなたと友達がそれぞれAIの味方を連れて戦う形でした。その後、2v2から4v4まで、どの席にも人が座れるようになりました。

二人の場合、コンピューターは命令を直接やり取りします。八人では、全員を全員につなぐと28の接続が必要になり、それぞれが独自の方法で失敗する可能性があります。そこでオンラインのチーム戦は星型です。ゲストはホストとだけ話し、ホストが他の全員に命令を中継します。

そして、4v4で誰かが落ちたとき、試合を止めて一人を待つのは、残りの六人にとって不公平です。

誰かが切断したとき 1v1 4v4
試合 一時停止して待つ 続行する
空いた席 空いたまま AIがすぐに引き継ぐ(全コンピューターで同じターンから)
戻ってきた人 スナップショットを受け取って再開 スナップショットを受け取り、他の人に追いついてから、席を返してもらう

八つのウィンドウが教えてくれたこと

グラフィックなしのテストでも、すべての形式で切断と復帰を模擬し、どれも同じ戦いに行き着いていました。しかし、実際にゲームを開いてみると、2v2では4つのウィンドウ、4v4では8つのウィンドウで試したことで、どのテストも捕まえられなかった4つの問題が見つかりました。

  • 始まらないルーム。 全員がデフォルトの陣営で入ってきました。チームは陣営の重複を許さないので、試合は始まりません。今ではReadyを押した時点で、味方との重複がすぐに警告されます。
  • 参加をあきらめるゲスト。 八つのウィンドウが同時に読み込むと、ホストの応答が遅くなり、参加リクエストは一度しか送られませんでした。今では最大20秒間、繰り返し送ります。
  • 七人が待つ一人。 最初のバージョンでは、スナップショットを受け取った時点で席が戻されるため、残りの七人は、その人の戦場が読み込まれるまで約30秒待つことになりました。今では、AIが席を保持し、プレイヤーが追いつくまで待ちます。
  • いちばん遅いPC。 試合の準備に8秒以上かかった人は、最初のターンの前にAIに席を奪われました。今では、まだ読み込み中の人に45秒が与えられます。

閉じて開き直したウィンドウでも、試合は続きました。最後には、八つすべてが同一の戦いで終わりました。

まだ足りないもの

ホストが切断して戻らなければ、ルームを引き継ぐ者はおらず、そのチームは負けます。また、命令は、たとえ味方同士であっても常にホストを経由します。どちらも今後の課題として書き留めてあります。

一つの戦いに八人がいれば、八通りの遊び方を求めます。そして、そこで陣営が登場します。

— チーム