「Stellaris」の新DLC「The Machine Age」発売は5月7日!

「Hearts of Iron IV」開発日記2019年6月12日――竜殺し

HoI4 開発日記

「Hearts of Iron IV」開発日記2019年6月12日分が公開されていましたので、その内容をご紹介。今回は同期ズレについて。

前回:開発日記2019年6月5日――3周年


スポンサーリンク

概要

開発日記2019年6月12日は、同期ズレについて。

  • 今週に入ってから1.7リリース後のテレメトリーデータを調査したところ、以前より同期ズレが多く発生していることがわかった。これはつまり私たちが新たに同期ズレの問題を起こしてしまったということだ。HoI4は再同期とホットジョインを行うが、依然としてプレイヤーは同期ズレに悩まされているため、私たちは現在これについて小さなホットフィックスパッチ(1.7.1)を調査している。
  • 同期ズレは見つけるのが本当に難しい場合もあり、パッチがいつリリースできるかはまだわからない。だが昨日のうちに確実な手がかりをつかみ、現在はよい解決に向かっている。

技術的なことについて:同期ズレってなに?

  • 同期ズレ(OOS、Out of Sync)はマルチプレイにおいてホストとクライアントが異なる動作を始めることで起こる。例えば一方のコンピューター上でドイツが勝利して戦闘が終わり、もう一方のコンピューター上ではソ連が勝利して終わるというようなことになる。
  • 通常は大きく食い違った状態にはならないが、ひとたびこうした状態が起こると差異は急速に広がり始めるため、ゲームを止めてプレイヤーにアラートを出す。このときホストが「再同期(Resync)」ボタンを押すとゲームは同期状態に戻る。再同期はゲームの状態をリセットし、ホストの状態をセーブデータとして送信して全員がこれをロードしてゲームに戻る。
  • では、なにが同期ズレを引き起こすのか? これは難しいところで、たいていは新たな理由で起こる。可能性が高いのは異なるプラットフォームでマルチプレイしていることで、というのは場合によっては基本的なコードライブラリが異なる動作をするからだ。
  • マルチスレッディングが原因のこともある。多くのコードをスレッド化しており、同期を保てないとしても、出来事が世界に影響を与える場合にはすべてのマシンで同様にその出来事が発生するようにしなければならない。不正なメモリアクセスによる問題や想定外の方法でゲーム状態を変更してしまうような問題(あるいはクラッシュすることもあるが、これは発見と修正が容易だ)もある。
  • 同期ズレの発見と修正は長いプロセスになり得る。というのは発生が極めて稀で、起こっていることを突き止めるために多くのステップや繰り返しを経ることになるからだ。発見には、巨大なログファイルを出す特別な設定でQAとマルチプレイテストを走らせ、同期ズレが発生したらログファイルとセーブデータを比較して違いを見る。これで調査を始める領域を決める。
  • 例えばユニットの指揮統制が異なっているとすると、これは多くの理由によって起こり得る。そこで私たちは関連するコード領域でさらにログを取り、別のテストをする。予想が正しければさらにログを取り、詳細を調べる。
  • 問題がプレイヤーと関係ない場合には、こうした手順の一部は夜の間に自動的に実行されるが、そういう場合は多くない。
  • 修正が終わると私たちはちゃんと修正されたか確認するためにオープンベータパッチを作成するか、間違いなく問題を修正できたと思ったときは直接正式パッチを出す。
  • 同期ズレ修正に参加していないチームの人員は完全に1.8「ハスキー」と次の拡張の作業に移った。だが、これはまだ初期段階にあり、みなさんにお見せできるものができるまではしばらくかかる。そのため、私たちはお見せできるものができ上がるまで、今回を最後にしばらく開発日記をお休みする(名誉ある社会主義国家スウェーデンの夏休みもすぐだ)。

パラド社プログラマーAndy Gainey氏による追記

同期ズレに取り組んでいるプログラマーのAndy Gainey氏による追記はさらに技術的に掘り下げたものですが、関心のある方は少ないと思いますので省略します。

同期ズレ修正にあたって、デバッグツールを4つの方法で改良したこと、現在の同期ズレ対策として義勇軍の海上輸送処理における輸送船確保の問題に対処していることが述べられています。

質疑応答

Q1:夏休み前にホットフィックスはないの?

A1:そうは言っていないが、いつリリースできるかはわからない。

Q2:同期ズレの問題でプレイヤーが手助けできることはある?

A2:再現できる同期ズレについてはセーブデータ(できればホストの)をつけてバグレポートしてもらえると、たいていは内部で再現できて問題の原因を素早く究明できる。使用しているMod、使用していない拡張、ホストやクライアントごとのOSも添えてもらえると、特に特定の条件で発生する問題の再現に役立つが、内部で再現するのは簡単ではない。


次回:開発日記2019年8月28日――フランスの見直し

スポンサーリンク

コメント

  1. 今回の日記は、マルチプレイ限定なんですかねぇ。

    • そうみたいですね。

  2. 名誉ある社会主義国家うらやましい

タイトルとURLをコピーしました