2017年7月24日月曜日

スプラトゥーン2 サーモンランの通信方式を推測

■はじめに

 スプラトゥーンのバトルはプレイヤー8人がフルメッシュ型のP2P通信でイカ操作情報をやりとりしていることは分かっていたが(参考記事)、サーモンランではNPCのシャケ達が登場する。このシャケ達の情報もプレイヤー4人で同期していなければならない。
 シャケ達の動きの情報をプレイヤー4人でどのように同期させているのか、想像してみた。
  • シャケ達の動きのシード値だけプレイ開始時に同期しており、そこへ各プレイヤーの操作情報を当て込んでいる(同期しておらず、各プレイヤーそれぞれで計算している)
  • シャケ達の動きは、4人のうち1人から、他の3人へリアルタイムに配信されている
  • シャケ達の動きは、4人以外の任天堂サーバーからリアルタイムに配信されている
 上記のどの方式なのか、サーモンラン中のSwitchの通信を覗き込むことによって推測してみることとした。

■サーモンラン中の通信状況

 サーモンラン中の通信相手は一般プレイヤー3人がほとんどでした。よって、サーモンラン中は4人がフルメッシュ型のP2P通信をしていることが分かりました。外部の任天堂サーバーなどとリアルタイムに操作情報をやりとりしている痕跡は見られませんでした。

 上り通信(私から他プレイヤー3人向け)の通信速度の推移の積み上げグラフです。3人とも均等であることが分かります。私のイカ操作情報を送信しているものと思われます。


 続いて、下り通信(他プレイヤー3人から私向け)の通信速度の推移の積み上げグラフです。3人均等ではなく、ある1人(プレイヤーA)からの受信速度が常に高いことが分かります。これは、プレイヤーAからシャケの動きを受信しているためと思われます。


■サーモンラン中の通信状況

 以上の結果より、どのようにシャケ情報をプレイヤー4人で同期させているか推測できました。

 まず、AWS(Amazon Web Service)上の任天堂サーバーを経由して4人がマッチングされます。マッチング後に任天堂サーバーから、シャケの出現位置、時間、頻度、イベント等(サーモンシナリオ)が配信されます。また、任天堂サーバーは、4人のうち1人をホスト担当として指名します。


 サーモンランが始まると、ホストはサーモンシナリオに基いて自分の端末にシャケを出現させます。シャケの情報は他プレイヤー3人にもリアルタイムに配信します。


■終わりに

 プレイヤー人口が増えても、任天堂サーバーに負荷がかからない仕組みになってるんだなと思いました。