Title: 吉里吉里/KAGEX WORLD拡張 データ設定マニュアル
Author: 合資会社ワムソフト

※deprecated
　立ち絵定義の方法などが新しくなってない

●はじめに

ここでは 吉里吉里/KAGEX にて拡張された envinit.tjs への
キャラクタ・背景などの各種素材登録方法と基本的な
スクリプティング方法を記述します。

●登録の概要

吉里吉里/KAGEX ではスクリプトを簡略化する為に envinit.tjs という
ファイルにとしてキャラクターや背景などスクリプト中によく使う素材を登録できます。

例えば 通常の KAG で背景やキャラクター（立ち絵）を表示しようとすると

[image storage="school" page=fore layer=base]
[image layer=0 page=fore storage="akari" visible=true left=340 top=100]

というスクリプトが必要になりますが、吉里吉里/KAGEX では

[学校]
[あかり 出 中]

という名前指定のスクリプトにて背景・キャラクターを表示することができます。
ただし、この方法でのスクリプトを行うには事前に envinit.tjs というファイルに「」として登録が必要になります。

envinit.tjs 自体は TJS2 のディクショナリ情報で構成されています。

●記述方式の基本

記述の基本になる概念は以下の２つです

・配列

配列は、複数の同種の情報を単純に列挙したものです。
TJS では [] を使って配列が定義できます。

配列の値の参照には 配列名[インデックス番号] の表記を使います。

配列の記述例
--------------------------------------------------
var a = [ 1, 2, 3, "text", "text2"];

dm(a[0]); // "1" と表示されます
dm(a[3]); // "text" と表示されます
--------------------------------------------------

詳細は  http://   をご参照ください

・辞書（連想配列）

辞書は、名前と値の組み合わせを記録するものです。
TJS では %[] を使って辞書が定義できます。

辞書の値の参照には 辞書名["鍵名"] または 辞書名.鍵名 の記述を使います

辞書の記述例
--------------------------------------------------
var dic = %[ "num" => 1, "date" => "2006/1/2" ];  // perl風

dm(a.num);       // "1" と表示されます
dm(a["date"]);   // "2006/1/2" と表示されます

// 鍵が文字列の場合は以下の記述も使えます
var dic = %[ num:1, data:"2006/1/2" ];
--------------------------------------------------

詳細は  http://   をご参照ください

必ず定義の前後を %[ ] にて囲う必要があります。

●背景画像データの作成と登録

通常は画面サイズ（800x600）で作成します

時間帯（朝/昼/夜) ごとにバリエーションをつくり、それにあわせて 
 envinit.tjs の times と stages に情報を登録します。

例
-------------------
  bg01_0  自宅朝
  bg01_1　自宅昼
  bg01_2　自宅夜
  bg02_0  学校朝
  bg02_1  学校昼
  bg02_2  学校夜
  ....
-------------------

envinit.tjs への登録例
--------------------------------
    "times" => %[
        "朝" => %[
            "prefix" => "0",
            ],
        "昼" => %[
            "prefix" => "1",
            ],
        "夜" => %[
            "prefix" => "2",
            ],
		],

    "defaultTime" => "昼",
	
    "stages" => %[
        "自宅" => %[
            "image" => "BG01_TIME",
            ],
        "学校" => %[
            "image" => "BG02_TIME",
            ],
		],
--------------------------------

演出用途で大きい背景を指定するような場合は、
初期座標位置を stages 記述に追加しておくと便利です

●イベント絵データの作成と登録


●レイヤ用データの作成と登録


●立ち絵データの作成と登録

◇立ち絵データの考え方

(0)レベル
　立ち位置の前後位置でデータを別に準備する

(1)ポーズ　
　基本的なシルエットが同じになるもの
　表情パターンを基本的に使いまわしできるもの

(2)服装
　あるポーズにおける服装のバリエーション

(3)表情
　あるポーズにおける表情のバリエーション

◇遠近レベル処理

遠近処理を使う場合にはレベル指定の項目を追加します。
レベルごとに拡大・縮小した全画像を準備し、ファイル名にレベル指定部分を
追加します。

◇設定方法

　1. 奥にある部分から順に 0 から順に番号をわりあてます
  2. envinit.tjs で levels の設定を行います。
    パラメータ zoom 
　　　指定されたレベルの画像が　標準:移動量がピクセル値と同じになる位置　に
　　　対して何％のサイズの画像になっているかを指定します。座標の補正に
　　　つかわれます。
　　パラメータ name
      画像ファイル名指定 (imageName や faceImageName) の LEVEL の部分に
　　　差し込む名称を指定します。

  3, positions に、目的のレベルに合致した名前を登録します

# サンプルの場合
# 0:奥  1:前  2:手前　　と登録して、1 をデフォルト (defaultLevel) に指定
# ただし、ファイル名は、前に登録したものにあわせて以下のように調整してあります
# 奥: hoge_1_X_X.png  もとの画像の60%サイズ
# 前: hoge_0_X_X.png  通常時の画像
# 前: hoge_2_X_X.png  もとの画像の120% サイズ

◇表情合成の方式

データの作り方としては２つのバリエーションが使えます

A.表情合成方式

 基本画像: (1)×(2) の組み合わせ
 表情画像: 表情画像の上に合成する差分 (3) を (1) の種類だけ準備

B.単体方式
 (1)×(2)×(3) 全パターンを作る

例　(ここではレベルについては無視してあります)
    ポーズ　1:正面 2:斜め
　　服装    1:制服 2:私服
    表情    0:通常 1:喜 2:怒 3:哀

A.表情合成方式の場合

ベース画像
 img1_1_0  正面制服・通常
 img1_2_0  正面私服・通常
 img2_1_0  斜め制服・通常
 img2_2_0　斜め私服・通常
表情差分
 img1_0_1  正面・喜（合成用）
 img1_0_2  正面・怒（合成用）
 img1_0_2  正面・哀（合成用）
 img2_0_1  斜め・喜（合成用）
 img2_0_2  斜め・怒（合成用）
 img2_0_2  斜め・哀（合成用）
 
B.単体別方式の場合

ベース画像
 img1_1_0  正面制服・通常
 img1_2_0  正面私服・通常
 img2_1_0  斜め制服・通常
 img2_2_0　斜め私服・通常
 img1_1_1  正面制服・喜
 img1_2_1  正面私服・喜
 img2_1_1  斜め制服・喜
 img2_2_1　斜め私服・喜
 img1_1_2  正面制服・怒
 img1_2_2  正面私服・怒
 img2_1_2  斜め制服・怒
 img2_2_2　斜め私服・怒
 img1_1_3  正面制服・哀
 img1_2_3  正面私服・哀
 img2_1_3  斜め制服・哀
 img2_2_3　斜め私服・哀

◇設定方法

1. 表情合成方式

パラメータ faceImageName が定義されてあるとこのロジックで動作します。

 1. ポーズと服装の組み合わせでベースになる画像を検出します
 2. その画像に表情部分の画像を合成します
 3. 合成済みの画像を立ち絵として表示します。

 表情ファイルはポーズごとにずれないように調整したものを準備する必要があります。
 同じポーズの中で表情ファイルを使いまわしされます。

2. 表情統合方式

パラメータ　faceImageName　を定義しないとこのロジックで動作します。

この場合には表情画像の合成の必要が無いため、ポーズ/服装間で形状が全然
別物になっていても問題ないため、「ポーズ」「服装」のいずれかを使う必要が
ありません。

1. 「ポーズ」は未指定（１つだけ）で「服装」と「表情」のみの切り替えで対応する

　ポーズのパラメータ　　の中に DRESS と FACE を両方含めます

2. 服装は未指定とし、「ポーズ」と「表情」の切り替えで対応する

　ポーズのパラメータ　　の中に FACE のみを含めます。

◇立ち絵データの作成について

立ち絵データの原点位置は画像の「下端中央」になります。

データ作成時の注意事項

(1) 全キャラクタに対して「足元」の位置をあわせておく

(2) 個別のキャラに分割

　　☆画像の下端はトリミングしてはいけない（原点がずれるため）
　　☆画面の上端は任意にトリミングしてかまわない

(3) キャラクタ別の立ち絵の左右位置調整

　　あるキャラクタのすべてのバリエーションの
　　立ち絵についてセンター位置をあわせておくきます。
　　このあと、個別のポーズについて、左右のトリミングを
　　行ってもかまいませんが、センターがずれないように
　　注意する必要があります。（左右同じ量づつトリミングする必要がある）

(3) 表情のレイヤはベースのレイヤと同じサイズで作成します。
　
　　これは表情の座標を適切にあわせるためです。
　　フォトショップの場合「WEB用に保存」を使えばベースレイヤと
　　同じサイズのままPNGで出力できます。

  　PNG 形式の場合は、off_x off_y を適切に残すことが可能なら
    トリミングしてもかまいません。
	例: imagemagik を使用してトリミング
    > mogrify -trim *.png


●charactors の詳細説明

まず、キャラクターの立ち絵の構成は以下の様にします

　・基本となるポーズ(filename)
　・奥行(LEVEL)
　・服装(DRESS)
　・表情(FACE)

　これを filename_LEVEL_DRESS_FACE という規則にそってファイル名をつけます。

キャラクターの構成は以下の様になっています。

"キャラクター名" => %[
	poses" => %[
		"ポーズ名" => %[
			"image" => "合成済みキャラクターの立ち絵ファイル名 (filename_LEVEL_DRESS_FACE)",
			"dresses" => %[
				"服装バリエーション名" => "服装バリエーションファイル名 (DRESS部分)"
			],
			"defaultDress" => "標準服装に設定する服装バリエーション名 ",
			"faces" => %[
				"表情名" => "表情ファイル名(FACE部分)",
			],
			"defaultFace" => "標準の表情ファイルの",
		
                ],
            "defaultPose" => "標準のポーズ名",
            "voiceFile" => "音声ファイル名",
            "voiceName" => "",
            ],

●levels の詳細説明

 levels は charactor の LEVEL 部分にそのまま反映されます。

    "levels" => [
        %[
            // 拡大率指定
            "zoom" => 拡大率,
            "name" => "charactor内のLEVEL部分に指定する値"
            ],
        ],

という構成になります。

●positions の詳細説明

    // キャラクタ配置情報定義
    "positions" => %[

        "名" => %[
            "type" => 指定タイプ,
		KAGEnvironment.DISPPOSITION : 表示指定 
		KAGEnvironment.XPOSITION    : X座標指定
		KAGEnvironment.LEVEL        : 奥行き指定
            "disp" => 表示指定内容 ( type が KAGEnvironment.DISPPOSITION の場合)
		KAGEnvImage.BOTH       : 表示
		KAGEnvImage.BU         : 立ち絵部分のみ表示
		KAGEnvImage.CLEAR      : 消去
		KAGEnvImage.FACE       : 顔のみ表示
		KAGEnvImage.INVISIBLE  : 非表示
            "xpos" => X座標を数値で指定 
            "level" =>  levels、charactors の LEVEL を指定
            ],
        ],




●環境情報の定義

ワールドオブジェクトの定義は envInit.tjs というファイルで行います。
記述の詳細は envInit.tjs の内容を確認してください。

◇キャラクタ登録

◇ポジション登録

◇イベント絵登録

◇舞台情報登録


◇アクション指定について

レイヤの動きをあらかじめ登録しておいて、
それをレイヤに非同期に適用することが可能です。

(1) 登録ずみアクション

登録してあるパラメータのセットをアクションとして指定します。
指定するパラメータの意味は KAGEX のものと同じです

A. envinit.tjs の actions 項目に辞書として登録

envinit.tjs 
---------------------------------------------
    "actions" => %[
        "おじぎ" => %[
            "module" => LayerJumpOnceActionModule,
            "vibration" => -50,
            "cycle" => 3000,
            ],
    ...
    ],
---------------------------------------------

B. action_名前.tjs のスクリプトファイルを作成

action_おじぎ.tjs
---------------------------------------------
%[
  "module" => LayerJumpOnceActionModule,
   "vibration" => -50,
   "cycle" => 3000,
]
---------------------------------------------

シナリオファイル中
---------------------------------------------
[みなせ action=おじぎ]

または省略記法で

[みなせ おじぎ]
---------------------------------------------

(2) envinit.tjs に登録してない場合

アクション名が、KAGEX アクション拡張のモジュール名と合致する場合は、
他の属性からパラメータを参照してアクション指定を再現します。
	
記述例
--------------------------------------------------------------------
[みなせ action=LayerJumpOnceActionModule vibration=-50 cycle=3000]
--------------------------------------------------------------------

☆アクション指定に対する注意事項

その１

以下の直接指定はそれぞれ world 拡張の該当する命令に自動的に
置換されるため、アクションとしての指定は意味をもちません

LayerFadeToModeModule  → opacity + time
LayerToRotateModule    → rotate  + time
LayerNormalZoomModule  → zoom    + time
LayerAccelMoveModule   → xpos, ypos, accel=1, time
LayerNormalMoveModule  → xpos, ypos, accel=0, time
LayerDeccelMoveModule  → xpos, ypos, accel=-1, time

その２

アクション指定の「結果」（時間指定した場合など）は見た目のままには保存されません。

・実行完了前だった場合はロード時に頭から再現されます
・実行完了後だった場合は無視されます

例えば LayerNormalRotateModule で時間指定して、一定時間後に特定の角度でとめる、
といった処理をした場合、その角度は内部的な回転角度にはフィードバックされて
おらず、その状態で SAVE/LOAD すると角度はリセットされます。
こういった使い方をしたい場合は、アクション指定の後に、
別途目的の回転角度にする指定を rotate などで指定するようにしてください。

例:
// アクションで時間指定して１回転半させて停止
[event action=LayerNormalRotateModule angvel=180 time=3000 sync]
// 完了後の位置を指定（回転をクリックでスキップしてもこの角度になる）
[event rotate=180]


◇トランジション指定について

(1) 登録ずみトランジション

登録してあるパラメータのセットをトランジションパラメータとして指定可能です。
指定するパラメータの意味は KAG の trans タグのものと同じです

A. envinit.tjs の transitions 項目に辞書として登録

envinit.tjs 
---------------------------------------------
    "transitions" => %[
        "通常更新" => %[
            "time" => 1000,
            "method" => "crossfade",
            ],
---------------------------------------------

B. trans_名前.tjs のスクリプトファイルを作成

trans_通常更新.tjs
---------------------------------------------
%[
  "time" => 1000,
  "method" => "crossfade",
]
---------------------------------------------

シナリオファイル中
---------------------------------------------
[みなせ 制服 trans=通常更新]

または省略記法で

[みなせ 制服 通常更新]
---------------------------------------------

(2) envinit.tjs に登録してない場合

トランジション名が、trans の method 名と合致する場合は、
他の属性からパラメータを参照してトランジション指定を再現します。
	
記述例
--------------------------------------------------------------------
[みなせ trans=crossfade time=1000]
--------------------------------------------------------------------

◇トランジションの追加パラメータ

トランジション定義には、KAG で使えるものが一通り使えるほか、
次の指定が有効です

属性 	
	transwait
		トランジション後に指定した時間だけ待ちが挿入されます。
	　　待ちはトランジションキャンセル時にあわせてキャンセルされます。

	msgoff
		トランジションを実行しようとするタイミングでメッセージ窓
		が表示されていた場合、それを消去してから処理を開始します。
		
		※この消去処理はシステム組み込みのフェード消去になります。
		　専用の消去処理をおこないたい場合は、あらかじめ msgoff 
  		  コマンドを使って消去するようにしてください

    charoff
        ※背景画像にのみ有効
		トランジション実行時にキャラクタ画像を消去します

	showaction
		表示時アクション指定
		指定されていると、キャラクタやレイヤの表示時に
		この処理がアクションとして実行されます。

	hideaction
		消去時アクション指定
		指定されていると、キャラクタやレイヤの消去時に
		この処理がアクションとして実行されます。

◇特殊トランジション

   ・method が記述されていない
　 ・showaction/hideaction が両方記述されている

　場合は、通常の吉里吉里の機能としてのトランジションではなく、
　アクションによる新旧レイヤ切り替え処理になります。

　・古いレイヤが hideaction で消去されます
　・新しいレイヤが showaction で表示されます

　この時以下のパラメータが追加で有効となります

　hideaction	hideaction の時間を上書きしていします(省略時はtimeと同じ)
  showdelay		showaction を開始する時間を遅らせます。
  hidedelay		hideaction を開始する時間を遅らせます。

showaction と hideaction どちらを先にしたいかを
このパラメータで調整します。標準では同時になります。

例：先に表示

 --------- 表示アクション(time)
 ......... hidedelay
          ----------- 消去アクション (hidetime)

例2: 先に消す
 ......... showdelay
           --------- 表示アクション(time)
 --------- 消去アクション (hidetime)

　何も指定しないと、両方のアクションの終了を待ちます。
　nosync を指定すると、アクションの終了を待たず、次の処理にうつります。
　これを利用すると、複数のキャラの消去方法を別に指定することが可能です

◇trans のデフォルト指定

	charTrans
	charDispTrans


●ＢＧＭの作成

基本構造
-------------------------------
イントロ部
　　　　　　　←ラベル "start" ←-+
ループ部                          |  ループ：条件 フラグ0 が 0
              ←ラベル "end"    --+
コーダ部
-------------------------------

☆ラベルづけとループ指定は吉里吉里のループチューナを使います

作成時のポイント

(1) コーダ部のラストはぶつぎりにしない。
　　切りの良いところまで音楽をいれてそれなりにフェードなどをかけておく。

　　→サウンドモードなどで単発再生したときにきれいに終わらせることができるため。
　　　ループを１ループ分余分にいれて、単発再生では２回ループしておわるように
　　　するというのもありだと思われます。

(2) イントロ部はなくてもかまわない
　　その場合でも、ラベル "start" はいれておきます

(3) ループにはフラグをつけます。条件は「フラグ0が0」

　　KAG でBGM再生を行う場合に、ループが存在すると、
　　loop 属性の指定のあるなしにかかわらず永久にループしてしまいます。
　　これの強制制御のためにフラグを指定しておきます

・イントロなしで再生する場合は "start" を指定して再生させます

●ＳＥの作成

命名規則の方法論
※SEではじめると省略きほうがつかえるのを USE からこぴぺ

ファイル形式:ogg

●ボイスデータの作成

命名規則方法論
※ USEからこぴぺ

ファイル形式：ogg

●トラックゲイン調整について

・なにができるか

　データを一切いじらずに、再生時に機能的に個別で音量を調整する機能
　情報は ogg のヘッダにはいるので、劣化することはありません

・ツールとしてなにがあるのか

  VorbisGain 
  foobar2000

・方法論

（１）まずはWAVを音量調整したうえでつくるのが基本
（２）どうしても個別調整したい場合、OGG をつくったあと、ゲイン調整できる

　例：ＢＧＭファイルが１つだけ音量がなんか大きい/小さい
　　　特定のボイスだけが音が小さいけど再発注めんどうなどなど

