Script
キャラクター作成ガイド
Apricotでキャラクターを作るために使うスクリプトの仕様をまとめてみました。 キャラクターを作成する際の手助けとなれば幸いです。
Apricotのスクリプトは全てXMLで記述されています。このスクリプトで使用できるタグは、現在8個あります。
- script
- character
- sequence
- message
- motion
- image
- sound
- process
scriptタグ
<script> ...(省略)... </script>
ルートタグです。必ず必要なものです。
characterタグ
<script> <character name="アプリコタン" width="240" height="320"> ...(省略)... </character> </script>
キャラクターを定義します。1個以上必要です。親要素はscriptタグです。
キャラクターを複数表示させる場合は、キャラクター分のcharacterタグを用意します。
バルーンのx座標上の位置は、width属性の値とoffset-x属性の値から決定されます。
バルーンは、width属性の値 - offset-x属性の値からwidth属性の値の間にセンタリングされて表示されます。
name属性:キャラクターの名前を設定します。
x属性:キャラクターを表示するX座標上の位置を設定します。(省略可)
y属性:キャラクターを表示するY座標上の位置を設定します。(省略可)
width属性:キャラクターを表示するための横幅を設定します。
height属性:キャラクターを表示するための高さを設定します。
origin-x属性:キャラクターを表示するX座標の原点の位置を設定します。デフォルト値は0です。(省略可)
origin-y属性:キャラクターを表示するY座標の原点の位置を設定します。デフォルト値は0です。(省略可)
sequenceタグ
<script>
<character name="アプリコたん" width="240" height="320">
<sequence name="Blink>
...(省略)...
</sequence>
<sequence name="Idle">
<sequence name="Blink" />
</sequence>
<character>
</script>
sequenceタグは、キャラクターの動作の集合を記述します。また、sequenceタグの名前毎に状態をもつことも出来ます。
name属性はシークエンスの名前を表します。複数同じ名前がある場合は、ランダムに呼び出すシークエンスが決定されます。
state属性は状態を表します。この状態を表す値は呼び出された場所に限らず機能し、シークエンスの名前と一致する状態のシークエンスを実行します。一致しない場合は、state属性が未指定のシークエンスを実行します。
sequenceタグの名前親要素はcharacterタグ、またはsequenceタグです。
sequenceタグはネストすることも出来ます。(4.5のβ2から)
sequenceタグがネストされた状態で空要素の場合は、指定されたsequenceタグを呼び出します。state属性を指定すると設定された状態で状態遷移します。指定がない場合は現在の状態を維持します。上記の例では、Idle状態の時に、name属性の値がBlinkのsequenceを呼び出します。
name属性:シークエンスの名前です。sequenceタグ内にタグを含む場合は、シークエンスの名前を設定します。Apricotで予約されているname属性の値についてついては、Apricotのイベントの種類を参照して下さい。
タグが空要素の場合は、呼び出すシークエンスの名前を指定します。
state属性:タグが空要素の場合は、状態を設定します。sequenceタグ内にタグを含む場合は、タグが空要素時で呼び出しの際に設定したstateの文字列にマッチした場合にsequenceが実行されます。マッチしない場合は、stateが空のものが実行されます。state属性には正規表現が使えます。
<sequence name="Activate">
<sequence name="Apricotan.StatefulTalk" state="デレ\d">
<sequence name="Apricotan.StatefulTalk" state="ツン1">
<message>べっ、別に${キャラクター}なんか好きじゃないなの!</message>
<sequence name="Apricotan.Shy" />
</sequence>
<sequence name="Apricotan.StatefulTalk" state="ツン1" />
</sequence>
<sequence name="Apricotan.StatefulTalk" state="ツン1">
<sequence name="Apricotan.StatefulTalk" state="ツン2">
<message>べっ、別に${キャラクター}なんか好きじゃないなのっ!</message>
<sequence name="Apricotan.Anger" />
</sequence>
<sequence name="Apricotan.StatefulTalk" state="ツン2" />
</sequence>
<sequence name="Apricotan.StatefulTalk" state="ツン2">
<message>べっ、別に${キャラクター}なんか好きじゃないなのっ!</message>
<sequence name="Apricotan.Anger" />
</sequence>
<sequence name="Apricotan.StatefulTalk" />
</sequence>
上記の例(4.5のβ2から)では、Apricotan.StatefulTalkシークエンスの状態(state)が「デレ1」、「デレ2」、「ツン1」、「ツン2」という4つある場合を想定しています。
Apricotan.StatefulTalkシークエンスの状態が「デレ1」または「デレ2」の場合に、このsequenceタグが実行されると「デレ\d」のシークエンスを実行後、「ツン1」に状態が遷移します。「ツン1」の場合は、「ツン1」のシークエンスを実行後、「ツン2」に状態が遷移します。「ツン2」の場合は「ツン2」の状態を維持します。
messageタグ
バルーンに表示されるテキストを設定します。親要素はsequenceタグです。
speed属性: メッセージスピードを設定します。(デフォルト値:30)
duration属性: バルーンの表示している時間を設定します。単位はミリ秒です。(デフォルト値:5000)
motionタグ
<script>
<character name="アプリコタン" width="240" height="320">
<sequence name="Start">
<motion loop="False" fps="10" z-index="1" iterations="30">
<image x="10" y="20">Images\Apricotan-Face-02.png</image>
</motion>
<motion loop="False" fps="10" z-index="1">
<image x="10" y="20">Images\Apricotan-Face-01.png</image>
</motion>
</sequence>
...(省略)...
<character>
</script>
キャラクターの動きを定義します。motionタグには画像の並び順を設定します。
パラパラ漫画のコマの集まりのようなものです。
z-indexの値が同じmotionタグがある場合は、上のmotionタグから順に処理されます。
imageタグを子に持ちます。親要素はsequenceタグです。
着せ替えを使用するには、type属性を設定して下さい。
loop属性:Trueの時、レイヤー(z-index)が上書きされるまでループします。(省略可。省略時False。)
type属性:着せ替えを使用する場合に、着せ替えのメニューに表示する名前を設定します。(省略可)
fps属性:FPS値を設定します。
z-index属性:レイヤーを設定します。0以上の整数値が入ります。
iterations属性:繰り返し回数を設定します。繰り返しを設定することにより、その回数分繰り返すことが出来ます。
<sequence name="Sample">
<motion fps="30" z-index="1" iterations="2">
<image>Animation01.png</image>
<image>Animation02.png</image>
</motion>
</sequence>
上記のXMLは、
<sequence name="Sample">
<motion fps="30" z-index="1" iterations="2">
<image>Animation01.png</image>
<image>Animation02.png</image>
</motion>
</sequence>
と、同じ実行結果になります。
<sequence name="Sample">
<motion fps=>"30" z-index="1" iterations="2">
<image>Animation01.png</image>
<image>Animation02.png</image>
</motion>
<motion fps="10" z-index="1" iterations="3">
<image>Animation02.png</image>
</motion>
</sequence>
待機しているように見せるには、3秒間同じ画像を表示するXMLを上記のようにfps属性とiterations属性を記述します。
imageタグ
画像ファイルのパスを設定します。親要素はmotionタグです。
画像ファイルは、PNG推奨です。
x属性: 画像を表示するX座標上の位置を設定します。(省略可)
y属性: 画像を表示するY座標上の位置を設定します。(省略可)
width属性: 画像の幅を設定します。(省略可)
height属性: 画像の高さを設定します。(省略可)
opacity属性: 画像のアルファ値を0から1までで設定します。0で透明になります。1が不透明になります。(省略可)
soundタグ
音声ファイルのパスを設定します。親要素はsequenceタグです。
音声ファイルは、WAVEフォーマットです。
processタグ
実行ファイルのパスを設定します。親要素はsequenceタグです。
args属性: 実行ファイルのパラメータを設定します。(省略可)
イベントの種類
Apricotでイベントが発生すると、Apricotスクリプト内の該当するsequenceタグが呼び出されます。該当するタグとは、システムで予約済みの値とname属性の値がマッチしたものです。
Start
<sequence name="Start"> ...(省略)... </script>プログラム開始時に呼び出されます。
Stop
<sequence name="Stop"> ...(省略)... </script>プログラム停止時に呼び出されます。終了処理などに使用します。
Idle
アイドル状態の時に呼び出されます。
Tick
時間が変わった時に呼び出されます。
DoubleClick
<sequence name="DoubleClick"> ...(省略)... </script>キャラクターがダブルクリックされた時に呼び出されます。
DrawClipboard
クリップボードにテキストがコピーされた時に呼び出されます。
Learn
単語を覚える時/忘れる時に呼び出されます。
Alert
<sequence name="Alert"> <message>新着のエントリーがあります。</message> </script>RSS/Atomフィードを取得後、新着のエントリーがあった時に呼び出されます。
Trend
話題になっているキーワードを算出後、呼び出されます。
Search
検索が実行された際に呼び出されます。
Suggest
関連エントリを抽出した際に呼び出されます。。
Activate
<sequence name="Activate">
<message>べっ、別に${人名|キャラクター}なんか好きじゃないなの</message>
</sequence>
キャラクターが勝手に喋る時に呼び出されます。${キャラクター}を使用すると、キャラクターの名前に置き換わります。「|」を使用して複数指定することも出来ます。${キャラクター|人名}とすると、キャラクターまたは人名のいずれかに置き換わります。
キャラクターのように指定できる値は、下記のようになっています。
- キャラクター
- する事
- テクノロジ
- モノ
- 人を表す言葉
- 人名
- 問題
- 時間を表す言葉
- 現象
- 生物
- 症状
- 着るもの
- 組織
- 聞くもの
- 職業
- 行く所
- 見るもの
- 読むもの
- 食べ物
- 飲み物



