Skip to content

LAN Playの通信 ​

部屋を作るSwitchをホスト、 部屋に入るSwitchを参加側と呼びます。 両者は部屋を見つけた後、Piaという仕組みでデータをやり取りします。

「Net 11」「Protocol 11」はPiaのメッセージ名です。 Net 11は参加者の接続先などの情報、 Protocol 11は部屋の設定などを伝えます。

対象はSplatoon 3 11.3.0のLAN Playです。 通常のインターネット通信とは区別します。

通信の流れ ​

図は保存した参加例の主な順序です。 参加が成立する条件は、まだ確認できていません。

途中には接続を維持するための通信も入ります。 部屋情報を受け取っただけでは、入室は成立しません。

用途UDPポート
部屋を探すUDP 35000
部屋発見後のPia通信UDP 49152

部屋を見つける ​

参加側が検索要求を送ると、 ホストは部屋情報と接続に必要な情報を返します。 応答には、先ほどの要求との対応を確かめる値があります。 ただし、この値で部屋情報全体が認証されるわけではありません。

その後、接続と参加者情報を交換します。 通信上の応答だけから、 画面上で参加が完了したとは判断できません。 最終的な参加成立条件には未確認の部分があります。

鍵と検証値 ​

部屋を見つけた後の通信を読むには、 対象の部屋に対応する鍵が必要です。 名前の似た値でも役割が違います。

名前役割
matchmake key部屋を探す条件。暗号鍵ではありません。
game_key発見とPiaの鍵を作るための元になる値。
検索用AES鍵部屋を探す要求の一部を暗号化します。
challenge proof発見応答が要求に対応するかを確かめる値。鍵ではありません。
Pia用鍵部屋発見後のPia通信を認証・復号します。

game_keyの計算には、 ゲームの実行ファイルにある定数と処理手順が必要です。 パケットだけからは求められません。 Pia用鍵にはその部屋の発見応答に含まれる情報も必要です。 部屋を作り直した後は、前の部屋の情報を流用できません。 鍵の実値はこのWikiに載せません。

部屋で共有される設定 ​

待機中の設定更新には、 ステージの識別名とキケン度に対応する値が含まれます。 ステージのCop_*名と数値IDの対応は IDと入力値にまとめました。 キケン度の値と画面表示の関係は、 調べた範囲では計算できます。 全範囲で同じ関係になるかは未確認です。

ゲーム中にはゲームシード、ステージ、 JobType、難易度を含むWAVE前の設定も送られます。 通信のゲームシードを抽選に採用する処理は確認しました。 保存したプレイで実際に採用されたかは未確認です。 WAVE 情報で計算できる範囲を説明します。

読み取れる範囲 ​

Pia通信は認証・復号し、 圧縮されていれば展開してから中身を読みます。 設定やゲーム中の一部の通知は復元できましたが、 接続制御のすべての意味は分かっていません。

敵やアイテム、仲間について分かったことは プレイ中の通信にまとめました。

参考資料 ​

  • 所有するSplatoon 3 11.3.0の実行ファイル。
  • プライベートバイトで保存したLAN Play通信。