「KAG Systemリファレンス」の「デバッグしよう」「陥りやすいミス」の補足資料。
最初にConfig.tjsのdebugMenu.visibleをtrueにしておくことは大切。セーブデータを削除しても現象が再現するかどうか確認するのも大切。
コンソール/監視式/traceタグを使ったデバッグ
以下の式をコンソール、監視式、traceタグで適宜評価すれば、効率的にデバッグが進められることが多い。
マクロ定義
任意のマクロ定義内容を確認
例えば、マクロFooの定義内容を調べるには、コンソールか監視式でkag.conductor.macros.fooの値を調べれば良い。
以下の点に注意のこと。
- マクロ名に含まれる半角英大文字は、半角英子文字に変換されている
- マクロ定義内容の末尾に [macropop] という文字列がある
全てのマクロ定義内容を確認
コンソールで以下の式を実行すれば、プロジェクトフォルダの下にmacro.txtというテキストファイルが出力される。
(Dictionary.saveStruct incontextof kag.conductor.macros)("macro.txt")
このmacro.txtには全マクロ定義が出力されている。
マクロ定義中のダブルクォーテーションは \" にエスケープされていることに注意。
背景レイヤ
- kag.fore.base.Anim_loadParams.storage … 表画面に読み込んでいる画像ファイル名
- kag.back.base.Anim_loadParams.storage … 裏画面に読み込んでいる画像ファイル名
前景レイヤ
nは前景レイヤ番号(0~)を意味する。
- kag.fore.layers[n].visible … 表画面の表示状態(真/偽)
- kag.back.layers[n].visible … 裏画面の表示状態(真/偽)
- kag.fore.layers[n].opacity … 表画面の不透明度(0:透明~255:不透明)
- kag.back.layers[n].opacity … 裏画面の不透明度(0:透明~255:不透明)
- kag.fore.layers[n].Anim_loadParams.storage … 表画面に読み込んでいる画像ファイル名
- kag.back.layers[n].Anim_loadParams.storage … 裏画面に読み込んでいる画像ファイル名
メッセージレイヤ
- kag.autoMode … 「自動的に読み進む」になっているか否か(真/偽)
- kag.chSpeed … 現在の文字表示速度(厳密には文字表示にかけるウェイト)。単位はミリ秒
- kag.current.name … カレントのメッセージレイヤ名
- kag.skipMode … スキップの状態。 0=スキップなし、1=クリック待ち記号まで、2=改ページ待ち記号まで、3=次の停止まで、4=早送り
BGM・SE・ビデオ
nは効果音バッファ番号(0~)またはムービーオブジェクト番号(0~)を意味する。
- kag.bgm.playingStorage … 再生中のストレージ名(再生が完了すると空文字になる)
- kag.bgm.currentBuffer.volume\1000 … BGMの音量
- kag.bgm.currentBuffer.volume2\1000 … BGMの大域音量
- kag.bgm.currentBuffer.status … BGMの現在の状態
- kag.movies[n].audioVolume\1000 … ムービーオブジェクト n の音量(大域音量ではない)
- kag.se[n].volume\1000 … 効果音バッファ n の音量
- kag.se[n].volume2\1000 … 効果音バッファ n の大域音量
ラベルの通過回数
監視式にsf.trail_KAGシナリオファイル_ラベルを追加しておくと良い。
例えば、KAGシナリオファイルがfirst.ks、ラベルが*startなら、sf.trail_first_startというシステム変数を監視する。*1
その他の項目
確認したい項目と、監視式に追加する式は下表の通り。
項目 | 式 | 備考 |
現在、実行中のKAGシナリオファイル名 | kag.conductor.curStorage | |
同、現在の行番号 | kag.conductor.curLine | |
同、現在の文字列 | kag.conductor.curLineStr | |
現在のラベル名 | kag.currentLabel | 通常のラベル、セーブ可能なラベルのどちらも有り得る |
現在のページ(ラベルの見出し)名 | kag.currentPageName |
セーブデータ内容でのデバッグ
Config.tjsのsaveDataModeを空文字にしておけば、セーブデータからシステム変数・ゲーム変数の内容を確認できる。
Config.tjsのdataNameが"data"だった場合のセーブデータファイル名と記録内容を下表に示す。
ファイル名 | 説明 | 備考 |
datasc.ksd | KAG内部で使われているシステム変数 | |
datasu.ksd | 通常のシステム変数 | |
data0.kdt~data998.kdt | ゲーム変数 | saveThumbnailがfalseの時 |
data0.bmp~data998.bmp | ゲーム変数 | saveThumbnailがtrueの時 |
data999.ksd | KAG内部で使われているゲーム変数 | 「最初に戻る」時に使われる |
- Config.tjsのsaveThumbnailをtrueにした場合、ゲーム変数はBMP形式で保存されるが、ファイルの末尾にゲーム変数の内容が記述されている。バイナリエディタなどで閲覧すると良い
- saveThumbnailがtrueの場合、data999.ksdも中身はBMP形式になっている
吉里吉里/KAG起動時にコントローラやコンソールを表示させる
AfterInit.tjsの先頭に以下の行を挿入する。
Debug.controller.visible = true; // コントローラを表示 Debug.console.visible = true; // コンソールを表示
あるいは、first.ksの先頭に以下の行を挿入しても良い。*2
[iscript] Debug.controller.visible = true; // コントローラを表示 Debug.console.visible = true; // コンソールを表示 [endscript]
その他
画像に関するデバッグ
意図通りに画像が表示されない場合の対処。
- 前景レイヤの表示状態、座標、サイズに異常がないか確かめてみる。わざと前景レイヤを表示する/不透明度を上げてみるのも手
- メッセージレイヤの場合、加えてマージンに異常がないか確かめてみる。わざと上下左右のマージンを0にしてみるのも手
- レイヤ構造のダンプ(Shift+F12)も試してみる