Ren’Pyでのデバッグ方法

Ren’Pyでのデバッグ方法を考えます。

 Ren’PyはPythonで動作するのでPythonのデバッガーが使えるのですが、rpyファイル部分の処理がネックになります。通常のデバッガーはpyファイルで実行する前提なので、そのままRen’Pyでは使えなくはないですが、使いにくいです。以下のレポジトリでrpyファイルにもブレークポイントを設定できるデバッガーを公開してくれている方がいますが、試してみるとエラー表示もなくゲームが起動しませんでした。残念 (制作者に相談して見たところ使い方が悪かっただけみたいです。詳しくはこちらを参照、ただしかなり使いにくいので、奥の手のような使い方になると思われます) 。デバッガーが使えないとなると昔ながらのprintfデバッグが中心となります。

https://github.com/Enerccio/renpy-debugger

コンソールを使用したデバッグ

 ゲーム付属のデバッグツールとして他にShift+Oで開けるコンソールがあります。これはRen’PyやPythonのステートメントの実行、変数の確認ができるので非常に便利でメインのデバッグツールとなるでしょう。しかしコンソールを開く必要があるのでコンソールを開くこと自体が影響するデバックはできず、変数のリアルタイムな変化を見るのにも向いていません

変数の監視方法

 変数の変化を見るのならログファイルに出力する方法としてrenpy.log(msg)とconfig.logが、画面に表示する方法としてrenpy.watch(expr)とrenpy.unwatch(expr)関数が提供されています。しかし後者はメニューを表示すると非表示されてしまう、リアルタイムで評価するなら、DynamicDisplayable等でラップしないといけないなど使い勝手がよくないです。

 なので 変数監視用スクリーン を作成しました。gameディレクトリに配置してShift+Wを押せば変数の内容をリアルタイムに表示してくれます。ただしこれも画面に表示するという手順を経るので本当のリアルタイムとはいえません。

 ランチャーの設定からコンソールの出力を有効化するとゲームウィンドウ外にコンソールウィンドウがでます。print(expr)とするとその結果がこのコンソールに出力されます。これが一番副作用がなさそうです。

 特定位置への移動方法

 Ren’Pyにはコンソールから指定して特定の行から起動する方法が一応はあります(https://ja.renpy.org/doc/html/developer_tools.html#warping-to-a-line)。

 しかしこれはその行にたどり着く前の python式が 実行されないので複雑なゲームになるほど欲しい動作にはなりづらいと思われます。after_warpラベルを定義してワープ後の処理を上手く扱えるように記述すればある程度回避は可能ですが、なかなか難しいでしょう。幸いなことにRen’Py には協力なロールバック機能があり、 自動リロードを有効にすればファイル更新を検出するたびにリロードしてくれるのでこまめにセーブしてロールバックとスクリプト編集を繰り返すのが大体の人の開発方法になっていると思います。

 自動リロードはなかなか便利な機能ですが、最近の他のエンジンにはついているんでしょうかね?

 LightVNとかみるとこの辺の機能が強化されればもっと魅力的になるので頑張って欲しいなと思います。