Inside KAG3/デバッグに関するTIPS

Last-modified: 2016-02-24 (水) 13:06:54

「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.ksdKAG内部で使われているシステム変数
datasu.ksd通常のシステム変数
data0.kdt~data998.kdtゲーム変数saveThumbnailがfalseの時
data0.bmp~data998.bmpゲーム変数saveThumbnailがtrueの時
data999.ksdKAG内部で使われているゲーム変数「最初に戻る」時に使われる
  • 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)も試してみる

参考


*1 ラベルの通過回数は、Config.tjsのautoRecordPageShowingがtrueの場合にのみ記録されている。
*2 trueの代わりにkag.debugMenu.visibleを代入する手もある。この方法だと、Config.tjsのdebugMenu.visibleがtrueの場合のみ、コントローラやコンソールも表示されることになる。