メインコンテンツまでスキップ
バージョン: 1.3.0

ゲーム内情報フォーマット

本ページではサンプルゲームから送信されるデータフォーマットをまとめています。

現在、ゲーム側から通知される情報は以下の通りです。 ゲーム全編で同一のフォーマットになっているわけではなく、タイトル画面やゲームクリア画面などでは通常時と異なるフォーマットになっていることに注意してください。

備考

ゲーム起動オプションで -CollisionTestMode=True を指定した場合に追加で送信される情報は別途まとめてあります。
詳細はコリジョンチェック時に追加されるゲーム内情報をご確認ください。

実際にゲームから送信されるデータ

実際にゲームから送信されるデータは JSON 形式で、以下のようなデータ構造になっています。
Python ではこれを辞書型に変換したものを扱いますが、以下を見れば扱いには困らないはずです。

{
"Camera":
{
"Location": {"X": 70937.359375, "Y": 34220.4609375, "Z": 1679.9627685546875},
"Rotation": {"Roll": 0, "Pitch": 0, "Yaw": 0}
},
"Player":
{
"Location": {"X": 71377.359375, "Y": 34220.4609375, "Z": 1579.9627685546875},
"Rotation": {"Roll": 0, "Pitch": 0, "Yaw": 0}
},
"Level": "PL_020RIV",
"GamePad":
{
"LeftAnalogX": 0,
"LeftAnalogY": 0,
"RightAnalogX": 0,
"RightAnalogY": 0,
"LeftThumb": false,
"RightThumb": false,
"DPadUp": false,
"DPadDown": false,
"DPadLeft": false,
"DPadRight": false,
"FaceButtonTop": false,
"FaceButtonBottom": false,
"FaceButtonLeft": false,
"FaceButtonRight": false,
"LeftShoulder": false,
"RightShoulder": false,
"LeftTriggerThreshold": false,
"RightTriggerThreshold": false,
"LeftTriggerAnalog": 0,
"RightTriggerAnalog": 0,
"SpecialLeft": false,
"SpecialRight": false
},
"PerformanceInfo":
{
"AverageFPS": 57.734519958496094,
"FrameTime": 0,
"GameThreadTime": 0,
"GPUFrameTime": 0,
"RenderThreadTime": 0
},
"Alfort":
{
"IsShowMessage": false,
"CurrentMessageID": "None",
"Enemies":
[

],
"Treasures":
[
{
"Location": {"X": 72474.2890625, "Y": 34413.89453125, "Z": 1929.6226806640625},
"Activate": false
}
],
"DebugCamera":
{
"DebugCameraMode": false,
"MoveSpeed": 0
},
"Player":
{
"IsFalling": false,
"CanJump": true,
"Invincible": false
},
"SystemMenu":
{
"IsShow": false,
"SelectedButton": "None"
},
"LoadMenu":
{
"IsShow": false,
"SelectedName": "None"
},
"DebugMenu":
{
"IsShow": false,
"SelectedButton": "None"
},
"EnableEnemyAI": true
},
"HitsHorizontal":
[
{"IsHit": true, "Distance": 624.1575317382812},
{"IsHit": true, "Distance": 694.7598876953125},
{"IsHit": true, "Distance": 740.9083251953125},
{"IsHit": true, "Distance": 780.4559936523438},
{"IsHit": true, "Distance": 1108.2440185546875},
{"IsHit": true, "Distance": 899.2445068359375},
{"IsHit": false, "Distance": 1200},
{"IsHit": false, "Distance": 1200},
{"IsHit": false, "Distance": 1200},
{"IsHit": true, "Distance": 863.7992553710938},
{"IsHit": true, "Distance": 648.9057006835938},
{"IsHit": true, "Distance": 656.3204345703125},
{"IsHit": true, "Distance": 888.7544555664062},
{"IsHit": false, "Distance": 1200},
{"IsHit": true, "Distance": 1182.20263671875},
{"IsHit": true, "Distance": 818.56201171875}
],
"HitsVertical":
[
{"IsHit": true, "Distance": 492.1499328613281},
{"IsHit": true, "Distance": 492.1499328613281},
{"IsHit": true, "Distance": 492.1499328613281},
{"IsHit": true, "Distance": 492.1499328613281},
{"IsHit": true, "Distance": 492.1499328613281},
{"IsHit": true, "Distance": 492.1499328613281},
{"IsHit": true, "Distance": 492.1499328613281},
{"IsHit": true, "Distance": 492.1499328613281},
{"IsHit": true, "Distance": 492.1499328613281},
{"IsHit": true, "Distance": 492.1499328613281},
{"IsHit": true, "Distance": 492.3634948730469},
{"IsHit": true, "Distance": 492.6759948730469},
{"IsHit": true, "Distance": 494.25225830078125},
{"IsHit": true, "Distance": 495.18975830078125},
{"IsHit": true, "Distance": 291.5408630371094},
{"IsHit": true, "Distance": 266.5455017089844},
{"IsHit": true, "Distance": 248.2661590576172},
{"IsHit": true, "Distance": 229.98666381835938},
{"IsHit": true, "Distance": 211.90834045410156},
{"IsHit": true, "Distance": 195.4944305419922},
{"IsHit": true, "Distance": 55.337825775146484}
],
"HitsScanV":
[-省略-],
"HitsScanH":
[-省略-]
}

解説

タイトル画面(PL_Title)

タイトル画面は特別扱いです。タイトル画面では以下のようなデータを送信します。

  • Title: タイトル画面に関する情報
    • SelectedButton: 選択中のメニューボタン (string)
  • LoadMenu: ロードメニューに関する情報
    • IsShow: 現在表示されているか? (bool)
    • SelectedName: 選択中のセーブデータ名 (string)
    • SelectedDate: 選択中のセーブデータの日付 (string)
  • Level: 現在のレベル名 (string)
  • GemePad: ゲームパッドの状態
    • 省略
  • PerformanceInfo: パフォーマンスに関する情報
    • AverageFPS: 直近の平均 FPS (float)
    • FrameTime: 1 フレームの処理時間 (float)
    • GameThreadTime: 1 フレーム内のゲームスレッド処理時間 (float)
    • GPUFrameTime: 1 フレーム内の GPU 処理時間 (float)
    • RenderThreadTime: 1 フレーム内の描画スレッド処理時間 (float)

補足

SelectedButton

タイトル画面のメニューにあるボタンのどれが選択状態かを示しています。 以下の値を取ります。

  • ロード
  • 最初から
  • ゲーム終了
  • None

ゲームオーバー画面(PL_GameOver) / ゲームクリア画面(PL_Clear)

ゲームオーバー画面とゲームクリア画面も特別扱いです。ゲームオーバー画面/ゲームクリア画面では以下のようなデータを送信します。

  • Level: 現在のレベル名 (string)
  • GemePad: ゲームパッドの状態
    • 省略
  • PerformanceInfo: パフォーマンスに関する情報
    • AverageFPS: 直近の平均 FPS (float)
    • FrameTime: 1 フレームの処理時間 (float)
    • GameThreadTime: 1 フレーム内のゲームスレッド処理時間 (float)
    • GPUFrameTime: 1 フレーム内の GPU 処理時間 (float)
    • RenderThreadTime: 1 フレーム内の描画スレッド処理時間 (float)

それ以外

村や平原街道など、ゲーム本編と呼べるレベルでは以下のようなデータを送信します。

  • Player: プレイヤーキャラクターに関する情報
    • Location: 位置
      • X: 位置座標_X (float)
      • Y: 位置座標_Y (float)
      • Z: 位置座標_Z (float)
    • Rotation: 回転
      • Roll: 回転角度_Roll (float)
      • Pitch: 回転角度_Pitch (float)
      • Yaw: 回転角度_Yaw (float)
  • Camera: カメラに関する情報
    • Location: 位置
      • X: 位置座標_X (float)
      • Y: 位置座標_Y (float)
      • Z: 位置座標_Z (float)
    • Rotation: 回転
      • Roll: 回転角度_Roll (float)
      • Pitch: 回転角度_Pitch (float)
      • Yaw: 回転角度_Yaw (float)
  • Level: 現在のレベル名 (string)
  • GemePad: ゲームパッドの状態
    • 省略
  • HitsHorizontal: プレイヤーから水平方向に飛ばしたレイキャストの結果 (配列)
    • IsHit: なにかに衝突したか? (bool)
    • Distance: 衝突までの距離 (float) ※衝突しない場合は最大値=1200
  • HitsVertical: プレイヤー前方に垂直下方向に飛ばしたレイキャストの結果 (配列)
    • IsHit: なにかに衝突したか? (bool)
    • Distance: 衝突までの距離 (float) ※衝突しない場合は最大値=800
  • PerformanceInfo: パフォーマンスに関する情報
    • AverageFPS: 直近の平均 FPS (float)
    • FrameTime: 1 フレームの処理時間 (float)
    • GameThreadTime: 1 フレーム内のゲームスレッド処理時間 (float)
    • GPUFrameTime: 1 フレーム内の GPU 処理時間 (float)
    • RenderThreadTime: 1 フレーム内の描画スレッド処理時間 (float)
  • Alfort: Alfort 固有情報
    • IsShowMessage: メッセージウィンドウが表示中か (bool)
    • CurrentMessageID: 現在表示中のメッセージの ID (string)
    • Enemies: 周辺の敵モンスター情報 (配列)
      • Location: 位置
        • X: 位置座標_X (float)
        • Y: 位置座標_Y (float)
        • Z: 位置座標_Z (float)
      • HP: 現在の HP (int)
      • Name: モンスター名 (string)
    • Treasures: 周辺の宝箱情報 (配列)
      • Location: 位置
        • X: 位置座標_X (float)
        • Y: 位置座標_Y (float)
        • Z: 位置座標_Z (float)
      • Activate: 使用済みか? (bool)
    • DebugCamera: デバッグカメラに関する情報
      • DebugCameraMode: デバッグカメラモードか? (bool)
      • MoveSpeed: 移動速度 (float)
    • Player: Alfort 固有のプレイヤー情報
      • IsFalling: 空中にいるか? (bool)
      • CanJump: 現在ジャンプすることが可能か? (bool)
      • Invincible: 無敵モード (bool)
    • SystemMenu: システムメニューに関する情報
      • IsShow: 現在表示されているか? (bool)
      • SelectedButton: 現在選択中のボタンテキスト (string)
    • LoadMenu: ロードメニューに関する情報
      • IsShow: 現在表示されているか? (bool)
      • SelectedName: 選択中のセーブデータ名 (string)
    • DebugMenu: デバッグメニューに関する情報
      • IsShow: 現在表示されているか? (bool)
      • SelectedButton: 現在選択中のボタンテキスト (string)
    • EnableEnemyAI: 敵 AI が有効状態か? (bool)

また、-MapScanMode=True 付きでゲームを起動した場合には以下のようなデータも追加で取得できます。

  • HitScanV: 垂直方向のレイキャスト
    • 詳細後述
  • HitScanH: 水平方向のレイキャスト
    • 詳細後述

補足

Alfort

サンプルゲーム(Alfort)固有の情報です。 逆に言うと、それ以外は汎用的にアクセスできるゲーム内情報です。

IsShowMessage

メッセージウィンドウが表示されている場合True、されていない場合Falseとなります。

CurrentMessageID

現在表示されているメッセージのメッセージ ID です。 メッセージごとにユニークな文字列ですが、同じメッセージには同じ ID が割り振られている点にご注意ください。(同じセリフを 2 回聞くなど)

メッセージがない場合は"None"となります。

Enemies

プレイヤーとの距離が1500 (cm)以内の敵キャラクターの情報を格納しています。

Key解説
Location敵キャラクターの位置
HP残り HP
Name設定されている敵モンスター名(現状どの犬も同じ名前になっているっぽい)
Treasures

プレイヤーとの距離が1500 (cm)以内の宝箱の情報を格納しています。

Key解説
Location敵キャラクターの位置
Activate未取得の場合 False
DebugCamera

デバッグカメラモードに関する情報を格納しています。

Key解説
DebugCameraModeデバッグカメラモードか?
MoveSpeed移動速度 (デジタルボタン入力はこの数値の 0.01 倍の数値を利用します)
Alfort/Player

汎用的なプレイヤー情報とサンプルゲーム固有の情報を切り分けたほうが都合が良さそうなので、 全てのゲームでアクセスできるとは限らないプレイヤー情報 はこちらに格納します。

Key解説
IsFalling空中にいるか?
CanJump現在ジャンプすることが可能か?
Invincible無敵モード (デバッグメニューから切り替え可能)

例えば攻撃中にもジャンプは出来なくなるので CanJump が False となります。字面の通りの挙動です。

SystemMenu

スタートボタンを押すと表示される、システムメニューに関する情報を格納しています。 メニューが表示されていない場合でもアクセス可能です。

Key解説
IsShow現在表示されているか?
SelectedButton現在選択中のボタンテキスト
LoadMenu

タイトルもしくはシステムメニューから開く、ロードメニューに関する情報を格納しています。 メニューが表示されていない場合でもアクセス可能です。

Key解説
IsShow現在表示されているか?
SelectedName選択中のセーブデータ名
DebugMenu

LT + RT + 右スティック押し込みで開く、デバッグメニューに関する情報を格納しています。 メニューが表示されていない場合でもアクセス可能です。

Key解説
IsShow現在表示されているか?
SelectedName現在選択中のボタンテキスト
EnableEnemyAI

デバッグメニューで切り替えられる、敵 AI の有効/無効フラグです。

  • True … 敵が動く
  • False … 敵が止まる
HisHorizontal

HitsHorizontalはプレイヤーの中心(腰のあたり)から 16 方向に球を飛ばすレイキャストの結果を格納しています。

正確には点を飛ばすレイキャストではなく、球を飛ばすスフィアトレースです。

結果は 16 個の配列として格納されており、配列の先頭が X 軸方向で以降 360/16=22.5 度ずつ回転していきます。(下図参照)

パラメーター数値
レイキャストする距離1200 (cm)
球の半径10 (cm)

image.png

Key解説
IsHitレイが衝突したか?
Distance衝突までの距離 (float) ※衝突しない場合は最大値=1200
注意
  • レイキャストの方向はプレイヤーの向きには依存しないので注意して下さい。
  • だいたい腰のあたりからレイキャストしているので、足元から若干浮いていることに留意して下さい。
  • ゲーム起動時に -DrawRaycast=True オプションを付けることでレイキャストのデバッグ描画が有効になります。
HisVertical

HitsVertical はプレイヤーの中心から前方に 21 個の球を上空から下方向に飛ばすレイキャストの結果を格納しています。

正確には点を飛ばすレイキャストではなく、球を飛ばすスフィアトレースです。

結果は 21 個の配列として格納されており、配列の先頭がプレイヤーの中心で、レイの間隔だけプレイヤーの前方方向にズレています。

パラメーター数値
最大距離800 (cm)
球の半径5 (cm)
レイの間隔40 (cm)

image.png

Key解説
IsHitレイが衝突したか?
Distance衝突までの距離 (float) ※衝突しない場合は最大値=800
注意
  • こちらはレイキャストの方向がプレイヤーの向きに依存します。
HitScanV

マップスキャン用のレイキャスト結果 (垂直方向) を格納しています。

ゲームを起動するとき起動オプション -MapScanMode=True を指定した場合のみこのフィールドが存在します。

詳細はここでは省略します。

HitScanH

マップスキャン用のレイキャスト結果 (水平方向) を格納しています。

ゲームを起動するとき起動オプション -MapScanMode=True を指定した場合のみこのフィールドが存在します。

詳細はここでは省略します。