Skip to content

プレイ中の通信 ​

プライベートバイトの通信には、 敵やアイテムの生成、プレイヤーの行動、 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通信。