ドキュメントを読む(2)

kagex.txt

doc/kagex.txtから適度に抜粋。

各タグなどは直接参照してください。とりあえず機能の追加や変更などをさらっと見ていってます。

特殊レイヤの追加

◆特殊レイヤの追加

次の2枚の全画面レイヤが拡張されています。

stage 背景レイヤの上、前景レイヤの下にさしこまれるレイヤ
event 前景レイヤの上、メッセージレイヤの下にさしこまれるレイヤ

※正確には前景レイヤはレベルによって位置が変化します

本来の KAG での「背景」は base レイヤを使うのですが、この base
レイヤに対しては、吉里吉里の実装上の制限から、移動が伴う指定を
行うことができません。このため、背景画像を回転させる用途のために
別途専用レイヤを導入しました。

また「イベント画面」の表示の便宜のため、前景レイヤの上に表示できる
専用レイヤを準備しました。

次のようなレイヤ構造になります

-- -- -- -- messages (KAGメッセージレイヤ)
-- -- -- -- layers (KAG前景レイヤ:level5~8)
----------- event
-- -- -- -- layers (KAG前景レイヤ:level0~4)
----------- stage
----------- base (KAG背景レイヤ)

書かれているようにKAG3の背景レイヤは、吉里吉里のウィンドウのプライマリレイヤ(一番親となるレイヤ)のため、いくつかの制限がありましたが、ズームや回転などのためプライマリレイヤでないstageレイヤを新規作成したようです。

また、eventレイヤはイベント絵を表示するためのレイヤ。サンプルでは背景や前景の上に位置して覆ってましたね。

前景レイヤへのレベル概念の導入

◆前景レイヤへのレベル概念の導入

KAG 本来の前景レイヤは番号順の表示順をもっています。
KAGEX では、レベル」という概念を持ち、レベル単位で表示順が決定されます。

・レベルが小さいレイヤ群ほど下に表示されます
→laylevel コマンドで制御可能

・同じレベルの中で「最前列」「最後列」の表示制御が可能です
→layfront / layback コマンドで制御可能

パッと見た感じでは、単純にz-indexを9段階に分けただけじゃなくて、同じレベルでも異なる奥行き関係を指定できるっぽい。レベルはおおまかなキャラクタの集団のまとまりを意味して、特定のキャラクタがその集団の中で手前にでるとかをlayfrontで指定できるような感じでしょうか。

メッセージ窓表示系拡張

◇メッセージ窓表示系拡張

◆拡張の概要

ADV スタイルのゲーム作成に都合が良いように、
記述ルールが拡張され、改行に対する自動処理をわりあてる
ことが可能になっています。

また、内部的に「名前レイヤ」「表情レイヤ」をサポート
する拡張が行われています。

よくある下部1/4くらいのメッセージウィンドウのとき、左上につく発言者名だったり、左端あたりにあるキャラのアイコンですね。

linemode

◆linemode (新規)

KAG の改行に対するルールを切り替えます。
これを用いることで、メッセージ窓スタイルの作品の場合に
[l]や[cm]などを明示的に記述しなくてもよくなります。

※注意点 linemode が有効な場合は ignoreCR 指定が強制でONの状態になります

属性
  mode  line または page
      未指定の場合は通常の KAG の動作に戻ります。

用語解説
 改行: テキストに直接入力されている改行コードによる改行のことです
 空行: 改行のみの行が1行以上続いていることをさします

KAG2においては、ksファイル中の改行コード(\r\n)はシナリオの改行([r])を意味しており、文末に\を挿入したとき(\\\r\n)はそれがエスケープされていました。KAG3においてはConfig.tjsでignoreCR=falseにすると、KAG2互換モードとして改行コードによってシナリオも改行され、trueにするとrタグで明示しなければ強制改行はできませんでした。

KAGEXではそれに替わるいくつかのモードが選べるようです。しかし、Config.tjsとかじゃなくてタグで指定するのか。

各モードについては省略

名前/表示名

【名前/表示名】

という記述に対して、
名前表示コマンド [dispname name=名前 disp=表示名] が自動的に呼び出されます。

linemodeでなんらかのモードを有効にした際、【名前】でタグが呼び出されるっぽい。

便利なんだろうけど、【】記号が変換しなきゃでてこないんで記述性としてはどうなんだろうな。タグなどコマンドは通常半角で行われるので、(スクリプタじゃない)ライターからしてみれば変換作業も半角全角作業もどちらも似たようなものなんかもしれんけど。

メッセージ窓UI拡張

◇メッセージ窓 UI 拡張

◆概要

メッセージ窓に配置されたボタンなどのUI諸機能が拡張されています。
また、配置された各オブジェクトは、レイヤ.names[] プロパティ経由で
名前ベースで参照することができます。


-------------------------------------------------
[current page=fore name=message0]
[button name=auto normal="auto"] ボタンを登録

tjs から以下の記述で参照可能
kag.fore.messages[0].names["auto"]
-------------------------------------------------

メッセージ枠に対するスキップボタンなどのUIについてなんか拡張されてる模様。

選択肢機能拡張

◇選択肢機能拡張(新規)

Link とは異なる専用の選択肢機能です。

linkタグとは別になんかあるっぽい。

シーン回想機能

◇シーン回想機能(新規)

「シーン回想」を実現するための補助機能です。

A: シナリオ中指定の場合

1. シーン回想したい部分を
-------------------
*kaisouBegin番号
......
*kaisouEnd番号
-------------------
のラベルで囲んでおきます。

2. recollection 命令で no 指定でシーン回想を呼び出すことができます。

この方式の場合は、セーブデータを利用して回想処理を行います。
このため、セーブデータの不整合の影響をうけるので注意が必要です

B: 回想用シナリオを別途準備する場合

1. 回想用のシナリオを本来の本文とは別に準備します
そのシナリオの末尾には endrecollection 命令をいれておきます
2. recoillection 命令で storage/target 指定でシーン回想シナリオを呼び出します

タイトル画面からいけるシーン回想モードなどを容易に実現するっぽい機能。

Aの方法は回想する範囲をラベルで囲んでおく方法。開始位置にジャンプして、終了位置で戻ってくるっぽい感じ。

Bの方法は別のシナリオファイルを用意して、サブルーチンのreturnにあたるようなendrecollectionを末尾に挿入しておく方法。これだと既読関係のスキップはどういったように制御されるのだろうか。

自動ラベル処理について

●自動ラベル処理について

◇概要

KAG での「保存」は、ユーザが明示的につけた「ラベル」単位で行われます。

参考:
http://devdoc.kikyou.info/tvp/docs/kag3doc/contents/SaveLoad.html

これは ADV 系のゲームにおいては保存箇所が制限されることになり、
かなりユーザにとって不便です。

KAGEX では、「自動ラベルモード」があり、これを有効にすると [p] 毎に
栞への保存が可能になります。ラインモードが有効な場合は仮想的な
[p] 毎でこれが有効になります。

あわせて既読管理も通常の単純なラベル単位ではなく、
ラベル+ラベルからの行カウント単位になり、細かい制御が
行われるようになります。

以下の変数を指定します。Config.tjs で指定可能です

kag.autoLabelMode    自動ラベルモード。true で有効
kag.autoLabelType     自動ラベルモードの制御種別指定 0:call 方式 1:行番号方式

◇call 方式

 古いKAGEX での autoLabelMode です。
[p] 毎にcall 処理を呼び出すことでラベルづけする方法です。

 このモードで記録された call から戻る処理の関係で、復帰処理の
 チェックが厳しく、シナリオデータが書き換わった場合の保存データの
 復帰がラベルよりも保障されづらくなります。ご注意ください。

◇行番号方式

新しい方式です。KAG のロード処理と実行系に手をいれることで、
 近傍のラベルおよびそこからの行カウントでのスキップ処理で
 情報を記録しています。

 ・call を介してないので情報がずれたときも復帰できる可能性が高い
 ・スクリプト作業時にファイル改変によるエラー発生がおこらない
 
 などの特徴があります。基本的には新規ではこれを利用することを
 お勧めします。

 なお、このモードを使う場合は、ラベルとしてのセーブは autoLabelMode = false
の場合と同じになるので、シナリオファイル中の要所に保存可能ラベルを
 手動でうつことで、デバッグメニューの「自動ラベルセーブ」による
 「前のラベルに戻る」「次のラベルにすすむ」を利用することが可能です。

書かれてあるとおり、吉里吉里/KAGでは処理しているシナリオがラベルを通過ときに、ゲーム変数やレイヤ構成などが実際に栞に保存される辞書配列にコピーされるため、ラベルをすぎたあとでの変数の変化や既読データは反映されません。

だからといって、自動化させちゃうと画一的なルールでしか保存されず場合によっては煩わしいこともあります。KAGはどちらかというと、ユーザ(開発者)の手間は増えるだろうけど自由に制御させよう、といった考えがあり、利点でもあり難点もあったりします。

加えて、ラベル名を連番などであてると、パッチをあててシナリオを変更したり追加したときシナリオのラベルと栞などが参照するラベルとが一致しないという自体になりかねません。

そのため、ある程度労力があるのであれば、やはり直接ラベルを記入するといった方法が無難なんですが、これらの方法がどのくらいいい感じなのかはちょっとここからははっきりと伺えません。とりあえず後者の方は変更に強いっぽいですが。

パース機能

◇パース機能

[parce voice=1]

これ以降のファイルをすべて先行でパース処理します。
パース処理モードでは、ボイスの扱いが異なります。

・キャラクタ別のボイス指定機能は意味を持ちません

・以下の特殊なボイス指定を使います

なんかあるようですが、よくわかりません。

 
kagex/doc2.txt · 最終更新: 2010/01/31 19:45 by tohka