プレイ中の通信
プライベートバイトの通信には、 敵やアイテムの生成、プレイヤーの行動、 WAVEの進行に関係する通知が含まれます。 ここでは、認証して読み取れた内容から ゲーム中に何が分かるかを説明します。 部屋への参加はLAN Playの通信で扱います。
対象はSplatoon 3 11.3.0の保存した1回のLAN Playです。 別のステージや試合でも同じ内容になるとは確認していません。
敵の位置
敵の生成通知から、種類と生成要求位置を読み取れます。 これは敵を出すときに指定された座標です。 移動後の現在位置や、 その敵が画面上に残っているかは示しません。
一部のオオモノの生成要求位置は ステージデータにある出現地点の候補と整合しました。 タワーのように専用の地点処理を使う敵には、 通常の出現地点の計算をそのまま当てはめられません。 この照合は、ゲームシードからの事前予測が 完成したことを意味しません。
アイテムと金イクラ
アイテムの生成通知には位置が含まれ、 後から届く取得応答と対応付けられるものがあります。 ただし、読み取った生成通知が すべて金イクラを表すかは未確認です。
金イクラの射出や納品に関係する通知もありますが、 生成から取得、納品までを 同じ金イクラの動きとして追跡できていません。 アイテムが動いた後の現在位置と、 画面上で消える時刻も未確認です。
WAVEと仲間
通信にはWAVEの進行や、 プレイヤーの状態に関係する値が含まれます。 ただし、読み取った進行値を 画面のWAVE番号と同一視できません。
ダウン、復活、救助、スペシャル発動に関係する通知もあります。 どの参加者に対応するかは、まだつながっていません。 仲間の現在位置、ブキ、スペシャルの残数、 金イクラの所持数を表示できる段階ではありません。
マップに表示できること
| 対象 | 表示できる情報 | まだ表示できない情報 |
|---|---|---|
| 納品所 | ステージデータにある候補位置 | その潮位で有効な場所の確定 |
| 敵 | 受信した種類と生成要求位置 | 移動後の現在位置と消滅 |
| アイテム | 種別未確定の生成要求位置 | 金イクラかどうかと現在位置 |
| 仲間 | 一部の行動通知 | 個人との対応、現在位置、装備と所持数 |
納品所の候補は潮位ごとに分かれます。 候補をすべて同時に有効な納品所として描くことはできません。 敵とアイテムも、生成要求位置を 「現在そこにいる位置」として表示しないようにします。
Pythonで座標を読む例
次は座標の読み取りだけを示す部分例です。 11.3.0の復号器と保存通信で照合した CoopEnemySpawnNetEventの形式を使います。 入力のchunk_bitsは イベント本文を先頭からLSB-firstで整数にした値です。 各軸を−256~256の範囲に復元します。 UDPパケットをこの関数へ直接渡しても読めません。
python
def decode_axis(raw: int) -> float:
magnitude = raw & 0xFFFF
sign = -1 if raw & 0x10000 else 1
return sign * magnitude * 256 / 65535
def decode_enemy_xyz(chunk_bits: int) -> tuple[float, float, float]:
return (
decode_axis((chunk_bits >> 200) & 0x1FFFF),
decode_axis((chunk_bits >> 217) & 0x1FFFF),
decode_axis((chunk_bits >> 234) & 0x1FFFF),
)参考資料
- 所有するSplatoon 3 11.3.0の実行ファイルとステージデータ。
- プライベートバイトで保存したLAN Play通信。