ここでは吉里吉里2/KAG3についての覚書を書いていきます。吉里吉里はNScripter以上にマニュアルが充実しているので、精読すれば、ある程度分かるようになります。
お勧めサイトはこちら。
エディタ
プラグイン・お役立ち情報
上級者向け
●return大事!
これはNSでも吉里吉里でも言えることですが……吉里吉里ならTJSでラベル移動とかしたくなるじゃないですか。
しかし落とし穴。確かにラベル位置は移動するんですが、スクリプト処理はTJSのまま実行されるのですね。
どういうことかと言うと、移動先に何かしら処理を書いておいたとする。しかしTJSがreturnされてない状態だと、飛んだ命令の後に、その後の処理を実行してしまう。移動先の処理は確か後回しにされた記憶があります。飛んだ後はreturnを忘れずに!
サンプルコード
転載・改変ご自由にどうぞ。AfterInit.tjsというファイルを作って、そこに書き込むとKAGがバージョンUPしても対応できます。
テキストサイズの変更をメニューに追加(フォントのところ)
kag.characterMenu.add(this.FontSz = new KAGMenuItem(this, "フォントサイズ(&S)", 0,
function {
var fsz = System.inputString("フォントサイズ設定", "15~24pxまで設定できます", kag.current.defaultFontSize);
fsz = 15 if fsz < 15;
fsz = 24 if fsz > 24;
kag.current.setDefaultFont( % [size: int fsz]);
}, false));
//kag.characterMenu.FontSz.stopRecur = true;
テキストサイズ変更を選択すると、入力ダイアログが出ます。
fszは下限と上限も設定しています。
メニューから指定シナリオへ飛ぶ
kag.helpMenu.add(this.help = new KAGMenuItem(this, "タイトル(&H) ...", 0,
function {kag.callExtraConductor('シナリオファイル.ks','*ラベル');}, false));
メニューから何かのシナリオへ飛ぶことができます。操作方法説明とかに使えます。但し、これはサブルーチンを使っているので、右クリックメニュー使用時は併用ができません。
エンターキーによるスキップ抑制
kag.skipKeyPressing = function(){
//supportReadingKey が押されているかどうか
var sg = getKeyState;
return sg(supportReadingKey);
};
微妙に未完成。ホントはページ末ではなく行末で停止したいんだけど。とりあえず押っぱでも次のページには勝手に行きません。
ショートカット追加
function KeyHook(key, shift){
if (key == #'H' || key == VK_UP || key == VK_PRIOR) {//履歴[H][↑][PageUP]
kag.current.setPosition( % [visible:false]);
kag.showHistory();
kag.current.setPosition( % [visible:true]);
return true;
}
if(key == #'L' || key == #'S'){/*セーブ管理画面。
これはセーブ・ロードで分けてもいいでしょう。*/
kag.callExtraConductor('ファイル.ks','*ラベル');
return true;
}
if(key ==VK_F1){//ヘルプ[F1]
kag.callExtraConductor('ファイル.ks','*ラベル');
return true;
}
if (key == VK_F2) {//Qセーブ[F2] 確認を入れた方が親切。
kag.callExtraConductor('ファイル.ks','*ラベル');
return true;
}
if(key ==VK_F3){//Qロード[F3]
kag.restoreBookMark(任意の栞番号, false);
return true;
}
if ((key > 48 && key < 58) || (key > 96 && key < 106)) {
//テンキー含む0~9でセーブができます
var n = key >95 ? key -97 : key -49;
//簡易ロード[shift]+[0]~[9]
if (shift == VK_SHIFT) kag.restoreBookMark(n);
else kag.storeBookMark(n);//簡易セーブ[0]~[9]
return true;
}
if (key == VK_SPACE) {
//メッセージ隠し[space] 右クリックメニュー使用時はメニューが表示されます。
kag.onPrimaryRightClick();
return true;
}
}
kag.keyDownHook.add(KeyHook);