Map Scanner によるマップスキャン
- 環境の構築
- 作業フォルダの作成
- ツールのコード変更
- ゲームを制御するクラスの作成
- ゲームから受け取るデータのハンドリング
- パッド入力の対応
- タイトル画面からゲームプレイ画面に遷移するための対応
- スキャン前の事前処理
- Order の用意
- スキャン中のキャラクターの動作制御
- スキャン用パラメータの設定
- マップスキャンと経路探索の実行
環境の構築
こちらを参照して、Map Scanner 用の Python 仮想環境を構築してください。
作業フォルダの作成
こちらを参照して、ダウンロードした Map Scanner のソースコードフォルダのコピー、およびフォルダ名とインポート先の変更を行ってください。
なお、{新規ゲーム名}
の部分は template
としてください。
ツールのコード変更
ゲームを制御するクラスの作成
Third Person テンプレートでは、サンプルゲーム用の実装がそのまま使用できます。
ゲームから受け取るデータのハンドリング
Third Person テンプレートでは、サンプルゲーム用の実装がそのまま使用できます。
Third Person テンプレートでは存在しない情報を参照するための関数があることには注意してください。 今回の例では該当する関数が呼ばれることはないため、そのままでも問題ありません。
パッド入力の対応
Third Person テンプレートでは、サンプルゲーム用の実装がそのまま使用できます。
タイトル画面からゲームプレイ画面に遷移するための対応
template/custom_client_thread.py
> CustomComThread
クラス > title_menu_setting()
にタイトル画面で行うべき操作コマンドが定義されています。
ただし、Third Person Template はゲームを起動すると直接ゲーム画面へ遷移するため、コードには実行できない操作コマンドも含まれています。
下記の例に従って一部をコメントアウトしてください。
def title_menu_setting(self):
"""
タイトル画面を突破する
"""
"""
self.order_list.append(custom_order.SelectTitleMenu("ロード"))
self.order_list.append(custom_order.LoadMenu(self.save_data_name))
"""
self.order_list.append(custom_order.WaitLoading())
スキャン前の事前処理
スキャン開始前にプレイヤーの移動モードを「デバッグ移動モード」に変更する必要があります。
template/custom_client_thread.py
> CustomComThread
クラス > set_debug_function()
にこれを行うための操作コマンドが定義されています。
ただし、Third Person Template では該当するゲーム仕様が存在しないため、コードには実行できない操作コマンドも含まれています。
下記の例に従って一部をコメントアウトしてください。
def set_debug_function(self):
"""
デバッグ機能の設定
"""
self.order_list.append(custom_order.WaitSec(1))
"""
self.order_list.append(custom_order.OpenDebugMenu(True))
self.order_list.append(custom_order.SetDebugMenu("Player無敵切り替え"))
self.order_list.append(custom_order.SetDebugMenu("位置情報の表示切り替え"))
self.order_list.append(custom_order.SetDebugMenu("全ての扉を開放する"))
self.order_list.append(custom_order.OpenDebugMenu(False))
self.order_list.append(custom_order.WaitSec(5))
"""
self.order_list.append(custom_order.SetDebugMove())
self.order_list.append(custom_order.SetDebugSpeed(self.scan_speed))
Order の用意
大部分がそのまま利用できますが、デバッグ移動に関する Order は一部変更が必要です。
template/custom_order.py
> class SetDebugSpeed
ゲームへの組み込み で説明した手順に従って実装した場合、デバッグ移動に関するパラメータは DebugCamera
フィールドから参照できるようになっています。関連する部分を以下のように変更してください。
def execute(self, game_dict: dict) -> Tuple[bridge.PseudoPadInput, bool]:
# (略)
else:
self.push_key = True
# speed_now = game_dict["Alfort"]["DebugCamera"]["MoveSpeed"] # この行をコメントアウト
speed_now = game_dict["DebugCamera"]["MoveSpeed"] # この行を追加
# (略)
template/custom_order.py
> class SetDebugMove
先述の class SetDebugSpeed
と同じ要領で以下の変更を行ってください。
def execute(self, game_dict: dict) -> Tuple[bridge.PseudoPadInput, bool]:
# (略)
if self.start_frame is None:
# self.start_debugmove_state = game_dict["Alfort"]["DebugCamera"]["DebugCameraMode"] # この行をコメントアウト
self.start_debugmove_state = game_dict["DebugCamera"]["DebugCameraMode"] # この行を追加
self.start_frame = self.elapsed_frame
# (略)
if self.elapsed_frame - self.start_frame > 80:
pad_input.LeftTriggerThreshold = False
pad_input.RightTriggerThreshold = False
pad_input.LeftThumb = False
# if game_dict["Alfort"]["DebugCamera"]["DebugCameraMode"] != self.start_debugmove_state: # この行をコメントアウト
if game_dict["DebugCamera"]["DebugCameraMode"] != self.start_debugmove_state: # この行を追加
done = True
# (略)
スキャン中のキャラクターの動作制御
Third Person テンプレートでは、サンプルゲーム用の実装がそのまま使用できます。
スキャン用パラメータの設定
以下の手順で settings.yaml
の内容を書き換えてください。
なお、Third Person Template のマップ ID を template
と定めます。
サンプルファイルでは PL_
で始まる文字列 (PL_010VIL
、PL_020RIV
など) がマップ ID に相当しますので、この部分を適宜読み替えてください。
セーブデータのファイル名の書き換え
スキャン開始時に読み込むセーブデータのファイル名を書き換えます。Third Person Template にはセーブデータが存在しないため、scan_params > save_data > template
に none
と記述します。
なお、none
と書けばセーブデータのないゲームに対応できるわけではありません。これまでの手順でセーブデータを読み込む処理をコメントアウトしているために、セーブデータのファイル名とは関係のない文字列を入れても問題が起こらないようになっています。
// settings.yaml
scan_params: // スキャン設定
save_data: // セーブデータのファイル名 (拡張子なし)
template: none
探索開始地点の書き換え
幅優先探索でプレイヤーが到達可能な範囲を列挙する際の探索開始地点を書き換えます。search_params > start_pos > template
を以下のように変更してください。
// settings.yaml
search_params:
start_pos: // 探索開始地点
template: [[900, 1110, 100]] // [[x 座標, y 座標, z 座標]]
ちなみに、ここで指定している座標は ThirdPersonCharacter
アクタが配置されている座標です。
スキャン範囲の書き換え
マップスキャンを行う範囲を書き換えます。map_params > template > X/Y/Z > End/Start
を以下のように変更してください。
実際にプレイヤーが行動できる範囲よりも少し広めに指定してください。 ここでは x, y 座標については周囲 4 方向を覆う壁より少し外側、z 座標については下限を床より少し下側、上限を十分に大きな適当な値としています。
map_params:
template: // マップ ID
X:
End: 3400 // X範囲終了位置
Start: -400 // X範囲開始位置
Y:
End: 3900
Start: -400
Z:
End: 1000
Start: 0
スキャン用パラメータの設定
Third Person テンプレートでは、サンプルゲーム用の実装がそのまま使用できます。
マップスキャンと経路探索の実行
ここまでの作業で、Map Scanner が Third Person テンプレート上で使用できるようになりました。実際にマップスキャンと経路探索を行う手順については ツールマニュアル を参照してください。
なお、Third Person テンプレートではレベル上にマップ遷移用のコリジョンが存在しないため、{マップ ID}_hitbox.json
は必要ありません。