プロトコルリファレンス

← ホームへ戻る
このページは newserv プロジェクトの docs/ ディレクトリをもとにまとめたもので、PSOBB のクライアントとサーバー間のネットワークプロトコルと、ゲーム内のサブコマンド(0x60/0x62/0x6C/0x6D のペイロード)を扱います。オペコードとハンドラー名は、ソースコードやパケットキャプチャと照合しやすいよう英語のままにしています。

PSO プロトコルコマンド リファレンス

このドキュメントは、PSO クライアントと newserv サーバーの間で使われるネットワークプロトコルのコマンド(オペコード)を説明します。

概要

コマンドは 1 バイトのオペコード(0x00–0xFF)で識別されます。同じコマンドでも、ゲームのバージョンによって処理が異なる場合があります。サーバーは 14 のゲームバージョンに対応しています:

列バージョン
1PC_PATCH
2BB_PATCH
3DC_NTE
4DC_112000
5DCV1
6DCV2
7PC_NTE
8PC
9GCNTE
10GC
11EP3TE
12EP3
13XB
14BB

コマンドヘッダーの形式

  • DC/GC/XB(PSOCommandHeaderDCV3): 4 バイト — command(1)、flag(1)、size(2)
  • PC(PSOCommandHeaderPC): 4 バイト — size(2)、command(1)、flag(1)
  • BB(PSOCommandHeaderBB): 8 バイト — size(2)、command(2)、flag(4)

ソースコードの命名規則

  • C_ 接頭辞:クライアント → サーバー(クライアントが送信)
  • S_ 接頭辞:サーバー → クライアント(サーバーが送信)
  • SC_ 接頭辞:双方向(どちらの方向でも使用)

パッチサーバーのコマンド(PC_PATCH / BB_PATCH のみ)

オペコード方向名前説明
0x02S→CServerInit_Patchパッチ接続のサーバー初期化
0x02C→S(応答)クライアントがパッチサーバーの初期化を確認
0x04S→C(ログイン要求)サーバーがユーザーのログイン情報を要求
0x04C→SLogin_Patchクライアントがユーザー名・パスワード・メールアドレスを送信
0x06S→COpenFile_Patchパッチ対象のファイルを開く
0x07S→CWriteFileHeader_Patchパッチ中にファイルヘッダーを書き込む
0x08S→CCloseCurrentFile_Patchパッチ中の現在のファイルを閉じる
0x09S→CEnterDirectory_Patchパッチ中にディレクトリへ入る
0x0CS→CFileChecksumRequest_Patchクライアントにファイルのチェックサムを要求
0x0FC→SFileInformation_Patchクライアントがファイルのチェックサムとサイズを返す
0x10C→S(全チェックサム完了)クライアントがすべてのチェックサム要求への応答を完了
0x11S→CStartFileDownloads_Patchファイルのダウンロードを開始

ログインと認証のコマンド

オペコード方向ハンドラーバージョン説明
0x02/0x17S→C—DC/PC/V3サーバー初期化(暗号化の設定)
0x03S→C—BBBB のサーバー初期化
0x05C→Son_05_XBXBXbox の切断(ゲーム終了)
0x05C→Son_ignoredその他無視(暗号化の確認)
0x88C→Son_88_DCNTEDC_NTEDC NTE のログイン
0x8BC→Son_8B_DCNTEDC_NTEDC NTE の拡張ログイン
0x90C→Son_90_DCDCDC V1 のログイン
0x91S→C—DC/PC/V3サーバー初期化(別形式)
0x92C→Son_92_DCDCDC V1 の登録
0x93C→Son_93_DCDCハードウェア情報付きの DC V1 ログイン
0x93C→Son_93_BBBBBB のログイン(複数のサブ形式)
0x9AC→Son_9ADC/PC/V3V1 シリアル + V2 シリアルでログイン
0x9BS→C—すべてサーバー初期化(別形式)
0x9CC→Son_9CDC/PC/V3/BB登録
0x9DC→Son_9D_9EDC/PC/GCログイン(DC/PC/GC 形式)
0x9EC→Son_9D_9EPC/GCログイン(拡張形式)
0x9EC→Son_9E_XBXBXbox のログイン
0xDBC→Son_DB_V3V3アカウントの確認(V3)

ナビゲーションとメニューのコマンド

オペコード方向ハンドラー説明
0x07S→C—メニュー項目の一覧
0x08C→Son_08_E6ゲーム一覧を要求
0x09C→Son_09メニュー項目の情報を要求(クエスト・ゲーム・ロビーの詳細)
0x0ES→C—旧形式のゲーム参加
0x10C→Son_10メニューの選択(メインメニュー、ゲーム一覧、クエスト一覧など)
0x1FC→Son_1Fインフォメーションメニューを要求
0x84C→Son_84ロビーの選択
0xA0C→Son_A0シップ変更(シップ選択に戻る)
0xA1C→Son_A1ブロック変更(シップ変更と同じ扱い)
0xD6C→Son_D6_V3インフォボード/ウェルカムメッセージを要求(V3)
0xE6C→Son_08_E6観戦チーム一覧を要求(BB)

ロビーとプレイヤーの管理

オペコード方向ハンドラー説明
0x61C→Son_61_98プレイヤーデータ(キャラクターデータ)を送信
0x64S→C—ゲーム参加の通知
0x65/0x67/0x68S→C—ロビー参加の通知
0x66/0x69S→C—ロビー退出の通知
0x83S→C—ロビー一覧
0x88S→C—矢印の更新(ロビーの矢印)
0x95S→C—ギルドカード番号の設定
0x96C→Son_96キャラクターの保存情報
0x98C→Son_61_98ゲーム退出(プレイヤーデータを送信)
0xC1S→C—ゲーム作成

ゲームコマンドとサブコマンド

オペコード方向ハンドラー説明
0x60C→S/S→Con_6x_C9_CBゲームのサブコマンド(部屋全体に送信)
0x62C→S/S→Con_6x_C9_CBゲームのサブコマンド(特定のプレイヤーへ)
0x6CC→S/S→Con_6x_C9_CB拡張ゲームサブコマンド(全体に送信)
0x6DC→S/S→Con_6x_C9_CB拡張ゲームサブコマンド(特定のプレイヤーへ)
0xC9C→Son_6x_C9_CB / on_C9_XBゲームのサブコマンド(EP3/XB 版)
0xCBC→Son_6x_C9_CBゲームのサブコマンド(EP3 版)
0x30C→Son_30ゲーム作成

チャットとコミュニケーション

オペコード方向ハンドラー説明
0x01S→C—クライアントにテキストメッセージを送信
0x06C→Son_06チャットメッセージ/チャットコマンド
0x11S→C—システムメッセージ(BB ではスクロール表示)
0x1AS→C—メッセージボックス
0x40C→S/S→C—ギルドカード検索
0xB0S→C—テキストメッセージ(スクロール)
0xC0C→Son_C0シンボルチャットを全体に送信
0xC1C→Son_C1_PC / on_C1_BBゲーム作成(PC/BB)
0xC2C→Son_C2シンボルチャット
0xD8S→C/C→Son_D8インフォボード

クエストシステム

オペコード方向ハンドラー説明
0xA2C→Son_A2クエスト一覧の要求
0xA2/0xA4S→C—クエストメニューの項目
0x44/0xA6S→C—クエストファイルを開く
0x13/0xA7C→Son_13_A7_V3_V4クエストファイル書き込みの確認
0xA9C→Son_A9クエスト選択のキャンセル
0xAAC→Son_AAクエスト統計の更新
0xABS→C—クエストラベルの呼び出し
0xACC→Son_AC_V3_BBクエストファイルの読み込み完了/参加可能なクエストの準備完了
0xB2S→C—コードの実行(クライアントに関数を送信)
0xB3C→Son_B3コード実行の結果(関数呼び出しの応答)

サーバーシステムのコマンド

オペコード方向ハンドラー説明
0x04S→C—クライアント設定の更新
0x19S→C—再接続(別のサーバーへリダイレクト)
0x1DC→Son_1DPing の応答
0xB1C→Son_B1サーバー時刻を要求
0xB1S→C—サーバー時刻の応答
0xDES→C—レアモンスター一覧(BB)
0xEFS→C—シャットダウンコマンドの設定(BB)

BB 専用のコマンド

オペコード方向ハンドラー説明
0xDCC→Son_DC_BBギルドカードデータの要求
0xDC (01)S→C—ギルドカードのヘッダー
0xDC (02)S→C—ギルドカードファイルの分割データ
0xDFC→Son_DF_BBチャレンジモードの設定
0xE0C→Son_E0_BBシステムファイルを要求
0xE1S→C—システムファイル作成の通知
0xE2C→Son_E2_BBシステムファイルの同期
0xE3C→Son_E3_BBプレイヤーのプレビュー要求/キャラクター選択
0xE4S→C—プレイヤー選択の承認/プレイヤーのプレビュー
0xE5C→Son_E5_BBキャラクター作成
0xE6S→C—クライアント初期化(BB)
0xE7C→Son_E7_BBセーブファイルの同期
0xE8C→Son_E8_BBギルドカードの操作(追加・削除・コメント・並べ替え)
0xEAC→Son_EA_BBチームのコマンド(作成・解散・メンバーの追加や削除など)
0xEBC→Son_EB_BBストリームファイルの操作(インデックス/分割データ)
0xECC→Son_EC_BBキャラクター選択を抜ける
0xEDC→Son_ED_BB設定の更新(オプション・シンボルチャット・ショートカット・キー設定・パッド設定・テクニックメニュー・カスタマイズ・チャレンジ記録)

BB チームのサブコマンド(0xEA)

サブオペコード方向説明
0x01EAC→Sチーム作成
0x03EAC→Sチームメンバーの追加
0x05EAC→Sチームメンバーの削除
0x09EAS→Cチームメンバー一覧
0x0FEAC→Sチームフラッグの設定
0x11EAC→Sチームメンバーの権限レベルの変更
0x12EAS→Cチーム所属の更新
0x13EAS→Cプレイヤーのチーム情報(ロビーの全クライアントへ)
0x15EAS→Cプレイヤーのチーム情報(単一クライアントへ)
0x18EAS→Cチーム内ランキング
0x19EAS→Cチーム報酬一覧
0x1AEAS→Cチーム報酬一覧(購入済み)
0x1CEAS→Cチーム間ランキング
0x1DEAS→Cチーム報酬フラグの更新
0x1EEAC→Sチーム名の変更

エピソード3(カードバトル)のコマンド

オペコード方向ハンドラー説明
0xB7C→Son_B7_Ep3EP3 のランク/音楽の更新を要求
0xB7S→C—ランクの更新
0xB9S→C—メディアの更新(マップ、カード定義など)
0xBAC→Son_BA_Ep3メセタの取引(ショップでのカード売買)
0xBAS→C—メセタ取引の結果
0xBBS→C—トーナメント観戦チーム一覧
0xCAC→Son_CA_Ep3カードバトルサーバーのデータ(ゲームコマンド)
0xCCS→C—トーナメント参加の確認
0xDCC→Son_DC_Ep3トーナメント一覧を要求(EP3)
0xE0S→C—トーナメント一覧
0xE1S→C—ゲーム情報
0xE2C→Son_E2_Ep3トーナメントの操作(一覧・確認・参加・辞退)
0xE2S→C—トーナメント参加者一覧
0xE3S→C—トーナメントのゲーム詳細
0xE4C→Son_E4_Ep3カードバトルのテーブル状態の更新
0xE4S→C—カードバトルのテーブル状態
0xE5C→Son_E5_Ep3カードバトルのテーブルの確認
0xE5S→C—カードバトルのテーブル確認への応答
0xE6C→S—観戦チームに参加
0xE7C→S—観戦チームを作成
0xE8S→C—観戦チーム参加への応答
0xE9S→C—観戦チームから退出
0xEAS→C—時間制限付きメッセージボックス
0xEEC→Son_EE_Ep3カードトレードの操作
0xEES→C—カードトレードの状態進行/完了
0xEFC→Son_EF_Ep3カードオークション
0xEFS→C—カードオークションの開始

GC/Xbox 専用のコマンド

オペコード方向ハンドラー説明
0xD7C→Son_D7_GCGBA ゲームファイルの要求(GC)
0xD0C→Son_D0_V3_BBチョイスサーチの条件の更新(V3/BB)
0xD2C→Son_D2_V3_BBチョイスサーチの要求(V3/BB)
0xD4C→Son_D4_V3_BBチョイスサーチの結果の選択(V3/BB)

DC NTE 専用のコマンド

オペコード方向ハンドラー説明
0x88C→Son_88_DCNTEログイン
0x8AC→Son_8A接続情報
0x8BC→Son_8B_DCNTE拡張ログイン
0x8EC→Son_8E_DCNTEシップ変更(0xA0 に対応)
0x8FC→Son_8F_DCNTEブロック変更(0xA1 に対応)

アイテムとショップのコマンド

オペコード方向説明
0x24S→Cシークレットくじ券の交換結果(BB)
0x25S→CGallon のプランの結果(BB)

ゲームサブコマンド リファレンス(0x60/0x62/0x6C/0x6D)

ゲームのサブコマンドは、メインプロトコルのコマンド 0x60(全体に送信)、0x62(特定のプレイヤーへ)、0x6C(拡張・全体に送信)、0x6D(拡張・特定のプレイヤーへ)の中で運ばれます。各サブコマンドには 1 バイトのサブオペコード(0x00–0xFF)があります。

サブコマンドヘッダーの形式

標準ヘッダー:4 バイト — subcommand(1)、size_in_dwords(1)、data... 拡張ヘッダー(size=0):8 バイト — subcommand(1)、0x00、extended_size(4)、data...

バージョンの対応

各サブコマンドには 3 つのオペコード列があります:

  • DC NTE — ドリームキャスト Network Trial Edition
  • DC 11/2000 — ドリームキャストの試作版(2000年11月)
  • Final — そのほかのすべてのバージョン(DCV1、DCV2、PC、GC、EP3、XB、BB)

NONE は、そのバージョンにはそのサブコマンドが存在しないことを表します。


プレイヤーの移動と位置

サブオペコードハンドラー説明
6x1Fon_change_floorフロアの変更(テレポートやパイプでの移動を含む)
6x20on_movement_xyz_with_floorフロア付きで位置を設定(SetPosition)
6x21on_change_floorフロアの変更(別形式)
6x24on_movement_xyzプレイヤーを XYZ 位置へテレポート
6x3Eon_movement_xyz_with_floor位置で停止
6x3Fon_movement_xyz_with_floor位置の設定(別形式)
6x40on_movement_xz位置まで歩く(XZ 平面)
6x41on_movement_xz位置まで走る/移動する
6x42on_movement_xz位置まで走る/移動する(別形式)
6x55on_movement_xyzマップ内ワープ
6x56on_movement_xyzプレイヤーの位置と向きを設定
6x94on_warp別のエリアへワープ

プレイヤーの状態とアニメーション

サブオペコードハンドラー説明
6x02forward_subcommand_m(基本の転送)
6x03forward_subcommand_m(基本の転送)
6x04forward_subcommand_m(基本の転送)
6x05on_switch_state_changedスイッチの状態が変化
6x0Con_received_condition状態異常を受けた
6x0Eforward (entity_id_transcode)状態異常を解除
6x17on_set_entity_pos_and_angleエンティティの位置と向きを設定
6x23on_set_player_visibleプレイヤーを表示状態にする
6x2Fon_change_hpプレイヤーの HP を変更
6x30on_level_upプレイヤーのレベルアップ
6x4Aon_change_hpHP の変更(別種)
6x4Bon_change_hpHP の変更(別種)
6x4Con_change_hpHP の変更(別種)
6x4Don_player_diedプレイヤーが戦闘不能
6x4Eon_player_revivableプレイヤーが復活可能になった
6x4Fon_player_revivedプレイヤーが復活した
6x52on_set_animation_stateアニメーションの状態を設定

アイテムと所持品の操作

サブオペコードハンドラー説明
6x25on_equip_itemアイテムを装備
6x26on_unequip_itemアイテムの装備を外す
6x27on_use_itemアイテムを使用(消費)
6x28on_feed_magマグにエサを与える
6x29on_destroy_inventory_item所持品のアイテムを破棄
6x2Aon_player_drop_itemプレイヤーがアイテムを床に落とす
6x2Bon_create_inventory_item所持品にアイテムを作成
6x59on_pick_up_itemアイテムを拾う(確定)
6x5Aon_pick_up_item_requestアイテムを拾う要求
6x5Con_destroy_floor_item床のアイテムを破棄
6x5Don_drop_partial_stackスタックの一部を落とす
6x5Eon_buy_shop_itemショップでアイテムを購入
6x5Fon_box_or_enemy_item_drop箱・エネミーからのドロップ通知
6x60on_entity_drop_item_requestエンティティのドロップ要求
6x63on_destroy_floor_item床のアイテムを破棄(別形式)
6xA2on_entity_drop_item_requestエンティティのドロップ要求(別形式)

戦闘と攻撃

サブオペコードハンドラー説明
6x46forward (entity_targets_transcode)攻撃完了(命中した対象)
6x47forward (entity_targets_transcode)テクニックを発動(命中した対象)
6x48on_cast_technique_finishedテクニックの発動完了
6x49forward (entity_targets_transcode)フォトンブラストを発動(命中した対象)
6x89forward (entity_id_transcode)倒した側のエンティティ ID を設定
6x8Fforward (entity_id_transcode)バトルのダメージスコアを加算
6x91on_update_attackable_col_state攻撃可能な当たり判定の状態を更新
6xE4on_incr_enemy_damageエネミーのダメージを加算(拡張)

ボスの行動

サブオペコードハンドラー説明
6x10forward (entity_id_transcode)ドラゴン(ボス)の行動
6x11forward (entity_id_transcode)ドラゴン(ボス)の行動(別形式)
6x12on_dragon_actionsドラゴンの行動(特殊)
6x13forward (entity_id_transcode)デ・ロル・レ(ボス)の行動
6x14forward (entity_id_transcode)デ・ロル・レ(ボス)の対象付き行動
6x15forward (entity_id_transcode)ボルオプト(ボス)の行動
6x16on_vol_opt_actionsボルオプト(ボス)の行動(特殊)
6x18forward (entity_id_transcode)ボルオプト第2形態(ボス)の行動
6x19forward (entity_id_transcode)ダークファルスの行動
6x84on_vol_opt_actionsボルオプト(ボス)の行動(V2 以降)
6x9Fforward (entity_id_transcode)ガル・グリフォン(ボス)の行動
6xA0forward (entity_id_transcode)ガル・グリフォン(ボス)の行動(別形式)
6xA3forward (entity_id_transcode)オルガ・フロウ(ボス)の行動
6xA4forward (entity_id_transcode)オルガ・フロウ(ボス)の行動(別形式)
6xA5forward (entity_id_transcode)オルガ・フロウ(ボス)の行動(別形式2)
6xA8on_gol_dragon_actionsゴル ドラゴンの行動
6xA9forward (entity_id_transcode)バルバレイ(ボス)の行動
6xAAforward (entity_id_transcode)バルバレイ(ボス)の行動(別形式)

エネミーとオブジェクトの状態

サブオペコードハンドラー説明
6x0Aon_update_enemy_stateエネミーの状態を更新
6x0Bon_update_object_stateオブジェクトの状態を更新
6x76on_set_entity_set_flagエンティティのセットフラグを設定
6x86on_update_object_state破壊可能なオブジェクトに命中
6x9Con_set_enemy_low_game_flags_ultimateエネミーのフラグを設定(アルティメット)

ゲームの同期と参加

サブオペコードハンドラー説明
6x6Bon_sync_joining_player_compressed_state参加するプレイヤーの状態を同期(圧縮、プレイヤー 0)
6x6Con_sync_joining_player_compressed_state参加するプレイヤーの状態を同期(圧縮、プレイヤー 1)
6x6Don_sync_joining_player_compressed_state参加するプレイヤーの状態を同期(圧縮、プレイヤー 2)
6x6Eon_sync_joining_player_compressed_state参加するプレイヤーの状態を同期(圧縮、プレイヤー 3)
6x6Fon_sync_joining_player_quest_flags参加するプレイヤーのクエストフラグを同期
6x70on_sync_joining_player_disp_and_inventory参加するプレイヤーの表示データと所持品を同期

イベントとマップのトリガー

サブオペコードハンドラー説明
6x67on_trigger_set_eventセットイベントを発生させる
6x68on_update_telepipe_stateテレパイプの状態を更新
6x69on_npc_controlNPC の制御
6x6Aon_set_boss_warp_flagsボスワープのフラグを設定
6x75on_set_quest_flagクエストフラグを設定
6x77on_sync_quest_registerクエストレジスタを同期
6x93on_activate_timed_switch時限スイッチを作動

コミュニケーション

サブオペコードハンドラー説明
6x06on_send_guild_cardほかのプレイヤーにギルドカードを送る
6x07on_symbol_chatシンボルチャット
6x74on_word_selectワードセレクト(定型文)
6xBDon_ep3_private_word_select_bb_bank_actionEP3 のプライベートワードセレクト/BB の銀行操作
6xB2on_play_sound_from_playerプレイヤーから効果音を再生

チャレンジモードとバトルモード

サブオペコードハンドラー説明
6x7Con_challenge_update_recordsチャレンジモードの記録を更新
6x7Don_update_battle_dataバトルモードのデータを更新
6x7Fon_battle_scoresバトルモードのスコア
6x97on_challenge_mode_retry_or_quitチャレンジモードのリトライまたは終了
6xCFon_battle_restart_bbバトルモードの再開(BB)
6xD0on_battle_level_up_bbバトルモードのレベルアップ(BB)
6xD1on_request_challenge_grave_recovery_item_bbチャレンジのお墓からの回復アイテム(BB)

BB 専用のサブコマンド

サブオペコードハンドラー説明
6xB5on_open_shop_bb_or_ep3_battle_subsショップを開く(BB)/EP3 のバトル用サブコマンド
6xB7on_buy_shop_item_bbショップのアイテムを購入(BB)
6xB8on_identify_item_bbアイテムの鑑定(テッカー)
6xBAon_accept_identify_item_bb鑑定したアイテムを受け取る
6xBBon_open_bank_bb_or_card_trade_counter_ep3銀行を開く(BB)/カードトレードカウンター(EP3)
6xC0on_sell_item_at_shop_bbショップでアイテムを売る
6xC3on_drop_partial_stack_bbスタックの一部を落とす
6xC4on_sort_inventory_bb所持品の並べ替え
6xC5on_medical_center_bbメディカルセンター(回復)
6xC6on_steal_exp_bb経験値を奪う(武器のエクストラアタック)
6xC7on_charge_attack_bbチャージ攻撃(武器のエクストラアタック)
6xC8on_enemy_exp_request_bbエネミーの経験値の要求
6xC9on_adjust_player_meseta_bbプレイヤーのメセタを調整
6xCAon_quest_create_item_bbクエストでアイテムを作成
6xCBon_transfer_item_via_mail_message_bbメールでアイテムを送る
6xCCon_exchange_item_for_team_points_bbアイテムをチームポイントと交換
6xD2on_write_quest_counter_bbクエストカウンターの書き込み
6xD5on_quest_exchange_item_bbクエストでのアイテム交換
6xD6on_wrap_item_bbアイテムのラッピング(プレゼント)
6xD7on_photon_drop_exchange_for_item_bbフォトンドロップとアイテムの交換
6xD8on_photon_drop_exchange_for_s_rank_special_bbフォトンドロップと S ランク特殊能力の交換
6xD9on_momoka_item_exchange_bbモモカとのアイテム交換
6xDAon_upgrade_weapon_attribute_bb武器の属性を強化
6xDEon_secret_lottery_ticket_exchange_bbシークレットくじ券の交換
6xDFon_photon_crystal_exchange_bbフォトンクリスタルの交換
6xE0on_quest_F95E_result_bbクエスト F95E の結果
6xE1on_quest_F95F_result_bbクエスト F95F の結果
6xE2on_quest_F960_result_bbクエスト F960 の結果

EP3 カードバトルのサブコマンド

サブオペコードハンドラー説明
6xBCon_ep3_trade_card_countsEP3 のトレードカードの枚数
6xBFon_forward_check_ep3_lobbyEP3 ロビーへの転送

Xbox 専用

サブオペコードハンドラー説明
6xB3on_xbox_voice_chat_controlXbox のボイスチャットの制御
6xB4on_xbox_voice_chat_controlXbox のボイスチャットの制御

デバッグ

サブオペコードハンドラー説明
6xFFon_debug_infoデバッグ情報(拡張サブコマンド。パッチのデバッグに使用)

まとめ

定義済みのサブコマンドの総数:256(0x00–0xFF)

  • 有効なハンドラー(on_invalid 以外):約 160
  • 転送のみ(サーバー側の処理なし):約 60
  • サーバー側で処理:約 100