ニュースニュース

開発ログ

2026年10月25日

Kastle: 4つのゲームが共有するエンジン

TECH記事 #21
Dota 風の HUD レイアウトの Castle Survivors。エンジンが共有する4つのレイアウトの一つ
Dota 風の HUD レイアウトの Castle Survivors。エンジンが共有する4つのレイアウトの一つ

自社エンジンは高くつく決断ですが、単純な理由で選びました。1週間に3つのゲームがあり、それぞれが同じ3D世界、同じ生き物、同じサウンド、同じHUD、同じSteam、同じセーブ、同じ決定論的なマルチプレイを必要としていたからです。Kastleはそのすべてを持ち、10月9日にCastle Survivorsから取り出されました。ゲームのルールは含みません。ゲームは、その隣にあるフォルダーとして、独自のシミュレーション、コンテンツ、言葉を持ちます。エンジンはゲームをインポートせず、もしいつかそうなれば、自動チェックが失敗します。

エンジンが持つもの

シェル: タイトル、メニュー、オプション、クレジット、座席・色・チーム・チャットを備えたルーム、試合の一生、リプレイ、フレームループ。ネットワーク: Steam、LAN、オフラインによるルーム、チェックサム付きの決定論的ロックステップ、キャッチアップ、再参加、ホストの移行。シミュレーション: 固定ステップのループ、シード付きの乱数、空間ハッシュ、フローフィールドとAによるナビゲーション、そしてWarcraft IIIのランタイムです。攻撃と装甲の種類によるダメージ表、バフ、攻撃、ミサイルを含みます。レンダラー: 空、天候、昼と夜、島の地形、背景、動物相、ポストプロセッシング、生き物、弾、そしてすべてのエフェクト。オーディオ、4つのHUDレイアウトを持つ*インターフェース、スキーマ移行付きのセーブ、Steam、mod、Workshop。そしてアセットライブラリです。164の生き物モデル(705のスキン)、9つのパックにわたる1,115の背景モデル、17の島のテーマ、4つの星雲の空と深宇宙、235のエフェクト、74のサウンド。ゲームが購入したパックはこのライブラリに移され、各ゲームは読み込むフォルダーだけを出荷します。

最初の2週間

Kastleは、リプレイと同期ずれのレポート、GPUでの生き物のアニメーション、塔のためのエフェクトアトラス、位置付けられた武器の音、そしてコントローラーとSteam Deckの対応とともに生まれました。翌日には、テスト、ツール、圧縮テクスチャ、コンテンツmod、Kastle Skirmishという見本ゲーム、そしてポルトガル語とともに、独自のパッケージになりました。暗号化されたエントリーを読めるWarcraft IIIのマップインポーターと、ゲームの英雄のルールも加わりました。

10月24日には、バージョン0.2.0と0.3.0が出て、継続的インテグレーションも加わりました。型、エンジンとゲームの境界、カバレッジの下限付きのテスト、リント、Electron内で動く見本、監査、リリースです。ルームとロックステップは、敵対的なピアに対して強化されました。座席ごとの秘密鍵、ウィンドウのセキュリティはエンジンが強制するようになり、チェックサムは世界全体をカバーします。レンダラーには、画質段階の単一の表、地上のセルごとの背景のカリング、GPUで飛ぶパーティクル、画面サイズに応じた生き物のディテール、そして戦場の霧のオーバーレイが加わりました。シミュレーションには、群衆の分離、霧、トリガーが加わりました。オフラインの試合は保存して再開でき、再参加するプレイヤーは試合全体を再生する代わりにチェックポイントから始まり、観戦者はロビーや進行中の試合を見られます。大きなファイルはGit LFSを通るようになりました。

そして、目に見える効果もあります。剣の斬撃、19の魔法の弾の一斉射撃、RPGの火の学校、18の光る弾、16のMOBAの英雄のアルティメット、8段階の気のオーラ(光のドラゴンまで)、15の漫画風の発射体、フリップブックを持つ新しいアトラスです。すべて手続き的に作られ、どの攻撃クリップの一撃も、刃が触れる瞬間に当たります。

10月25日のラウンド

最後のラウンドは最も大きく、7つの前線で同時に行われました。Warcraft IIIのランタイムには命令(停止、保持、移動、攻撃、攻撃移動、パトロール、追従、シフトのキュー)、データとしての能力(接近、詠唱点、マナとクールダウンの支払い、後ろ振りかチャネル、中断)、そして6スロットのインベントリが加わりました。ステップの間は、メモリを一切割り当てません。ナビゲーションはユニットの大きさ、混雑のコスト、そして分離と合流するステアリングを学びました。

ロックステップでは、切断したプレイヤーのコマンドが再参加の後も残り、チェックサムは名前付きの部分に分割されました。同期ずれのレポートはどのシステムが分岐したかを示し、Studioのリプレイのタブが最初の一つに印を付けます。決定論のリントは、シミュレーションのコードの中で、2台のコンピューターを食い違わせるすべてのものに印を付けます。シードのない乱数、時計、比較関数のない並べ替え、順序に依存する反復などです。ソークは、遅延、損失、順序の入れ替え、分断のあるシミュレーションされたネットワーク上で試合全体を回し、すでに本物のバグを見つけました。ホストの後で開始したカウントダウンのゲストが、最初のターンを失っていたのです。パフォーマンスゲートは、例と500体の群衆を基準値と比べて、ローカルで測ります。CIの分は有料だからです。ワーカーの中のシミュレーションも測られました。5,000ユニットで、1フレームあたり0.1〜0.2ミリ秒を節約しますが、まだどのゲームも採用していません。色覚対応のチームのパレットは、通常の視覚とシミュレーションされた視覚のどちらでも、すべての色の組が最小の距離を保つようにしています。そして、エンジンの画面は英語とポルトガル語に加えて、スペイン語と簡体字中国語で表示されます。

その日の締めくくりとして、GPUのないサーバーでもCIが再び緑になりました。ソフトウェアレンダラーが最低の段階を描き、視覚回帰の参照画像は、今ではサーバー自身のものです。

誰が何を使うか

Line TowerとCustom Hero SurvivalはKastleの上で完全に動き、新しいラウンドを取り入れています。Castle Survivorsは、その判断でレンダラーだけを使います。シミュレーション、ネットワーク、インターフェース、セーブ、リプレイは、ゲーム独自のままです。Castle Arenaは独自のロックステップを持ち、エンジンは使いませんが、他の3つと同じようにKastle Studioと連携しています。エンジンは今日、独自の948のテストを持ち、どのゲームも、自分のテストと並べてそれを実行します。

— チーム