ゲーム内情報フォーマット
本ページではサンプルゲームから送信されるデータフォーマットをまとめています。
現在、ゲーム側から通知される情報は以下の通りです。 ゲーム全編で同一のフォーマットになっているわけではなく、タイトル画面やゲームクリア画面などでは通常時と異なるフォーマットになっていることに注意してください。
ゲーム起動オプションで -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) |
Key | 解説 |
---|---|
IsHit | レイが衝突したか? |
Distance | 衝突までの距離 (float) ※衝突しない場合は最大値=1200 |
- レイキャストの方向はプレイヤーの向きには依存しないので注意して下さい。
- だいたい腰のあたりからレイキャストしているので、足元から若干浮いていることに留意して下さい。
- ゲーム起動時に
-DrawRaycast=True
オプションを付けることでレイキャストのデバッグ描画が有効になります。
HisVertical
HitsVertical
はプレイヤーの中心から前方に 21 個の球を上空から下方向に飛ばすレイキャストの結果を格納しています。
正確には点を飛ばすレイキャストではなく、球を飛ばすスフィアトレースです。
結果は 21 個の配列として格納されており、配列の先頭がプレイヤーの中心で、レイの間隔だけプレイヤーの前方方向にズレています。
パラメーター | 数値 |
---|---|
最大距離 | 800 (cm) |
球の半径 | 5 (cm) |
レイの間隔 | 40 (cm) |
Key | 解説 |
---|---|
IsHit | レイが衝突したか? |
Distance | 衝突までの距離 (float) ※衝突しない場合は最大値=800 |
- こちらはレイキャストの方向がプレイヤーの向きに依存します。
HitScanV
マップスキャン用のレイキャスト結果 (垂直方向) を格納しています。
ゲームを起動するとき起動オプション -MapScanMode=True
を指定した場合のみこのフィールドが存在します。
詳細はここでは省略します。
HitScanH
マップスキャン用のレイキャスト結果 (水平方向) を格納しています。
ゲームを起動するとき起動オプション -MapScanMode=True
を指定した場合のみこのフィールドが存在します。
詳細はここでは省略します。