デバッガの使い方

「デバッガの使い方」の編集履歴(バックアップ)一覧に戻る
デバッガの使い方」を以下のとおり復元します。
**デバッグモード/デバッガの使い方
#image(de_01.png)

設定画面を開き、「一般」タブの「デバッグモード」にチェックを入れてOKを押すと、
CardWirthPyはデバッグモードで動き始めます。(Py1以降はCtrl+Dでも可能)


&bold(){目次}
#contents(fromhere=true)

**デバッグモードで出来ること
基本的にはCWのデバグ宿やユーティリティモードと同じ動作をします。
+貼り紙画面にエディタで開くボタンが追加。また、終了済みや条件を満たさないシナリオに突入できる。
+シナリオのプレイ中に所有カードを破棄できる。また、プレミアカードを売却・破棄できる。
+簡易方式でキャラクターを新規作成することができる(CWのデバグ宿互換)。
+いつでもキャラクターの素質、情報、種族等を能力変動も加味した上で再設定できる。
+バトル中、エネミーカードや同行キャストは常に暴露状態。&br()行動の選択も自由に行え、手札を何度でもシャッフルできる。
+カードの検索で「&bold(){キーコード}」で絞り込むことができる。
+シナリオ終了時にゴシップや終了印の変更、入手・喪失したカード、称号の変更などの情報を表示(オプション設定)。
+&bold(){デバッガ(F3)}が使用できる。デバッガは&bold(){強化版状態変数インスペクタ}のようなもので、以下のことが行えます。
  状態変数・背景・BGMといった状況の記録と復元。
  ゴシップ、シナリオの終了印など、宿データの操作。
  所持金、称号、所有カードなど、パーティデータの操作。
  状態変数の値、情報カードや同行キャストの所持状態などのシナリオプレイデータの操作。
  背景の更新、BGMの変更。
  イベント実行中のプレイヤーカードの上げ下げ。
  イベントの一覧と実行。
  イベントの一時停止、ステップ実行、実行フローの変更。
  実行中のエリアやイベントをエディタで開く。


***■バトルで同行キャストを表示し、行動を選択する
エネミーカードの行動を選択するのは簡単です。プレイヤーカードと同様にカードを選択して手札ビューを開き、使わせたいカードを選択するだけです。同行キャストの行動を選択する時は、ひとつ手間が必要になります。同行キャストは画面上に表示されないため、表示しなくてはなりません。

#image(de_02.png)

そこで、デバッグモード時に画面下部に現れる同行キャストを表示する(F6)ボタンを押すと、同行キャストが半透明の状態で画面上部に表示されます。これによって、エネミーカード同様行動を見たり選択したりする事ができるようになります。

***■状況の記録について
シナリオをプレイしていると、状況は刻々と変わっていきます。キャラクターの状態は元より、フラグやステップの値、背景、再生されるBGM、情報カードの数や同行キャストの人数。
任意でこれらの状態を記録しておき、後で復元できるようにしておくと、デバッグの時に便利です。これはCardWirth 1.28から提供されている機能ですが、CardWirthPyでも実行できます。記録されるデータは次のものです。

 状態変数(フラグとステップ)。
 表示中の背景。
 再生中のBGM。
 プレイ中のエリア。
 同行キャスト。
 情報カードの所持状態。

状況をファイルに保存するには、デバッガのツールバーのボタンか、メニューの「セーブ」を選択します。

保存したファイルは、やはりツールバーのボタンか、メニューの「ロード」で読み込み、セーブした時の状況を復元する事ができます。

記録されるのは上に記した状況のみで、完全なセーブデータとはならない事に注意してください。これはデバッグの補助に用いるための機能で、宿データのセーブを何度でも作れるといった機能ではありません。また、あるシナリオで保存した状況を他のシナリオで読み込もうとすると、内容の不一致によって正常な復元が行えません。

***■背景の更新ボタンについて
ある程度シナリオ制作に慣れた作者であれば知っている事ですが、いわゆる「背景セル」の表示をフラグによって制御しようとすると、「セルが参照するフラグを切り替える」「画面の再構築コンテントを実行する」という2手順が必要になります。
デバッガの状態変数一覧でフラグの値を変更すると、「セルが参照するフラグを切り替える」段階しか実施されないため、フラグの値は表示されている背景には反映されません。

&ref(http://www9.atwiki.jp/cwpy?cmd=upload&act=open&pageid=18&file=I_AREA.png)

そこで、デバッガの「&bold(){背景の更新}」ボタンを押すと、画面の再構築コンテントと同様に機能し、フラグの状態を背景に反映することができます。

***■実行中のエリア・バトル・パッケージやイベントをエディタで開く
この機能を使用するには、Pyの詳細設定モードの「シナリオ」>「外部アプリ」からどのエディタを使用するか設定する必要があります。

#image(de_05.png)

この設定を行っておけば、ボタンを押すだけで現在プレイ中のシナリオをエディタで開ける上、[[CWXEditor>https://bitbucket.org/k4nagatsuki/cwxeditor]]なら、現在パーティがいるエリアや行われているバトル、現在実行中のイベントコンテントを自動的にエディタ上で選択された状態で始める事ができます。

CWXEditor以外のエディタでは次のような制限があります(2016年1月現在)。
 CardWirthEditorのすべてのバージョンで、エディタ本体は開けてもシナリオを開く事はできません。
 WirthBuilderでは、シナリオを開けるだけで、プレイ中のエリアやイベントを自動的に選択できません。
 また、圧縮されたシナリオは全て開けません。


**イベントの実行を制御する

#image(de_06c.png)
ツールバーのこれらのボタンは、左から「&link_anchor(a){イベントの実行}」「&link_anchor(b){ステップリターン}(Ctrl+Shift+F11)」「&link_anchor(c){ステップオーバー}(F11)」「&link_anchor(d){ステップイン}(Ctrl+F11)」「&link_anchor(e){ポーズ・再開}(F10)」「&link_anchor(g){イベント強制終了}(F12)」「&link_anchor(h){ブレークポイント切替}(Ctrl+B)」「&link_anchor(i){ブレークポイントクリア}」という作業を行うためのものです。設定できないタイミングでは灰色になります。右側の数値入力欄は、イベントコンテントの実行前に入れる&link_anchor(j){待機時間}を指定するものです。

順を追って解説していきます。


&aname(a,option=nolink)
***■任意のイベントを実行する
通常、プレイ中のシナリオで任意のイベントを実行する事はできません。たとえば、シナリオの開始直後に最終決戦直前のイベントを流したり、所持していないカードの使用時イベントを見たりする事はできません。
しかし、デバッグのために任意のイベントを実行したい事はあります。そのため、Pyのデバッガにはシナリオ内の全てのイベントを一覧にし、選択して実行する機能が備わっています。

#image(de_07.png)

デバッガのツールバーで青い三角ボタンをクリックすると、全イベントの一覧を見る事ができます。
ここでも青い三角がイベントを表しています。ツリーを開くとイベントの発火条件を見る事ができ、ダブルクリックするか、選択して実行ボタンを押すとすぐにイベントを開始する事ができます。

&aname(b,option=nolink)
***■コール元に戻る(ステップリターン)
「パッケージの中身をここまで見たけど、この先はもういいや。戻ってコール元のイベントツリーを辿りたい」という時には「ステップリターン」を使います。これはスタートやパッケージのコール中であれば、コール元に戻るところまで一気に続きのイベントを実行してしまう機能です。

なお、コール中でなければ、イベントそのものが一気に最後まで実行されます。

&aname(c,option=nolink)
***■1コンテントずつ実行する(ステップオーバー)
一時停止したイベントを再開するには「ボーズ・再開」ボタンをもう一度押せばよいのですが、単に止められるだけではあまり便利ではありません。

そこで、デバッガには、1コンテント(1ステップ)ずつ、じっくり観察しながら実行するための機能が備わっています(それを「ステップ実行」と呼びます)。

一時停止した状態で、縦長の矢印「ステップオーバー」ボタンを押してみてください。押すたびに1コンテントずつイベントが進行します。イベントツリーを1ステップずつ実行しながら観察する事により、「この辺りでバグが起きて変な処理が行われるんだけど、具体的にどこからおかしくなるのか?」等といった調査が簡単に行えるようになります。

&aname(d,option=nolink)
***■スタートやパッケージのコールを飛ばす・飛ばさない(ステップイン)
ところで、ステップオーバーによってスタートやパッケージのコールを実行すると、おかしな事が起こります。コールされたスタートやパッケージの処理が一瞬で終わってしまい、コール元の次のコンテントが実行される状態になるのです(コール先にメッセージやウェイトが無い場合)。

これはステップオーバー機能の仕様で、「1ステップずつ実行するが、コール先までは立ち入らない(それらの内容は飛び越して=オーバーしていく)」ようになっているためです。コール先も観察しながら実行したい場合は、「ステップイン」を使用します。「ステップイン」は、1コンテントずつ実行する事はステップオーバーと同じですが、コール系のコンテントの実行時にコール先でも一時停止する(コール先に立ち入る=インする)という機能です。

&aname(e,option=nolink)
***■イベントの実行を一時停止する
デバッガでは、実行中のイベントツリーの内容が表示され、どこを実行中か見る事ができます。

そこで、ツールバーの緑色の三角ボタン、「ポーズ・再開」ボタンを押してみましょう。次のイベントコンテントが実行される前に、イベントの実行が一時停止されます。このボタンはイベント実行前に予め押しておく事もでき、その場合はイベントの冒頭で一時停止されます。

&aname(f,option=nolink)
***■イベントの任意の箇所を実行する
一時停止中やメッセージコンテント表示中であれば、表示中のイベントの好きなところへ実行を移して処理の流れを変える事ができます。方法は実行したいイベントをダブルクリックする(または選択してEnterキーを押す)だけです。

#image(de_11.png)

これで「ACTIVE!!」と表示されている箇所からイベントが再開されます。「長大なイベントの後半部分を、前半を飛ばしてチェックしたい」というような場合に便利です。ただし、スタートのコール元の情報はそのまま残っているので、コール中に別のスタートツリーへ実行を移すとイベントの流れがおかしくなる場合があるため、注意してください。

&aname(g,option=nolink)
***■イベントを強制終了する
実行中のツリーを強制的に終わらせ、操作可能な状態にします。
効果中断コンテントを実行した場合と同効果です。

&aname(h,option=nolink)
***■ブレークポイント切替
ブレークポイントとはソフトウェアのデバッグにおいて実行中のプログラムを一時的に中断させるポイントのことです。
CWシナリオのデバッグなので一時中断されるのはツリーです。ブレークポイントはシナリオごとに保存されます。
ブレークポイントはツリーの左の余白をクリックすることでも付けることができます。

&aname(i,option=nolink)
***■ブレークポイントクリア
ブレークポイントを設けたシナリオの一覧を表示・削除ができます。シナリオ名で検索を利用することもできます。

&aname(j,option=nolink)
***■ゆっくりと実行する
例えばツールバーの数値入力欄に10を入力すると、イベントの実行を、1コンテントにつき1秒遅らせる事ができます。
じっくりイベントの流れを見る必要があるが、ステップ実行は面倒というような時に便利です。

***■おさらい
まずデバッグしたいイベントツリー実行中に&link_anchor(e){一時停止ボタン}(F10)を押してみる。
イベントを再開したい場合はもう一度押せばOK。メッセージやウェイトがほとんど無く、
停止する間もなく一瞬で終わってしまう場合は予め押しておくか、&link_anchor(j){ウェイト窓に数字を入力}して実行間隔を遅くする。
任意の場所で何度も止めたいときは&link_anchor(h){ブレークポイント}を設けておくと便利。
デバッグしたいツリーが遠いときは&link_anchor(a){イベントの実行}から任意のイベントを呼び出すことができる。

&link_anchor(c){ステップオーバー}(F11)/&link_anchor(d){ステップイン}はそれぞれ一コンテントずつ、メッセージコンテントのように手動送りできるが、
ステップオーバーはコール先は通常実行し、ステップインはコール先でも停止する。
&link_anchor(b){ステップリターン}は手動送りをやめ、そのツリーを実行しきってコール先まで戻る。

いずれにしてもメッセージコンテント表示中はCWの仕様上イベントは止まる(無限ウェイトが掛かる)ので、
メッセージ主体のツリーを組む作者はコンテントのアイコンを直感的に&link_anchor(a){ダブルクリック}していくだけでも問題ない。
ツリーを急に終わらせたくなったときは&link_anchor(g){イベントの強制終了}(F12)。どのタイミングでもキャンプ画面/戦闘画面に戻れる。


**デバッグモード時のキー操作一覧
|>|灰字はデバッガを開いている場合のみ有効|
|Ctrl+D|デバッグモードのオン・オフを切り替える|
|F3|デバッガを起動|
|F6|バトル中であれば同行キャストを表示|
|BGCOLOR(#F0F0F0):Ctrl+B|&link_anchor(h){ブレークポイント切替}|
|BGCOLOR(#F0F0F0):Ctrl+E|エディタで開く|
|BGCOLOR(#F0F0F0):Ctrl+I|背景更新|
|BGCOLOR(#F0F0F0):Ctrl+L|最終セーブに戻す|
|BGCOLOR(#F0F0F0):Ctrl+O|ロード|
|BGCOLOR(#F0F0F0):Ctrl+R|全回復|
|BGCOLOR(#F0F0F0):Ctrl+S|セーブ|
|BGCOLOR(#F0F0F0):Ctrl+X|シナリオ中断|
|BGCOLOR(#F0F0F0):Ctrl+F5|エリアの再読込|
|BGCOLOR(#F0F0F0):F10|&link_anchor(e){イベント一時停止・再開}|
|BGCOLOR(#F0F0F0):F11|&link_anchor(c){ステップオーバー}|
|BGCOLOR(#F0F0F0):Ctrl+F11|&link_anchor(d){ステップイン}|
|BGCOLOR(#F0F0F0):Ctrl+Shift+F11|&link_anchor(b){ステップリターン}|
|BGCOLOR(#F0F0F0):F12|&link_anchor(g){イベントの強制終了}|
------
スクリーンショットに表示されているシナリオのリソースは、groupAskによって作成され、CardWirth愛護協会によって配布されている「CardWirth ver1.50 Fullpack」に入っているものです(シナリオ「ゴブリンの洞窟」及びその他のリソース)。ReadMe_1st_Full.txt内の「● 著作権/免責/転載に関して」節の内容に基づいてスクリーンショット内に使用しています。 

復元してよろしいですか?