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通信。