はじめに
『Fy Mascot』は『キャラクターエンジン』や『オプションプログラム』などのプログラムを作ることで、オリジナルのキャラクターを作ったり、機能を追加したりすることができます。プログラムの作成には、『Fy Mascot』に添付しているサンプルソースコードを参考にして下さい。
サンプルソースコード
『Fy Mascot』には『キャラクターエンジン』と『オプションプログラム』のサンプルソースコードを添付しています。ソースコードはC言語で書かれており、Visual Studio Communityなどフリーの開発環境で誰でも自由に作ることができます。
サンプルソースコードは以下のファイルで構成されています。
- 『character.c』 … 『キャラクターエンジン』 キャラクターのコントロールなど
- 『option.c』 … 『オプションプログラム』 プラグインや機能追加など
『Fy Mascot』と各種プログラムとは『GICP』というプロトコルで決められたXML形式の文字列をやりとりすることで連動させます。
『キャラクターエンジン』と『オプションプログラム』
『キャラクターエンジン』はキャラクターをコントロールするプログラム、オプションプログラムは『Fy Mascot』に各種機能を追加/強化するプログラムです。いずれも後述の仕様を満たしたDLL(ダイナミックリンクライブラリ)で、基本的には同じものですが用途が異なるので分けています。
『キャラクターエンジン』や『オプションプログラム』は、『GICP』の文字列をエクスポートされたcommunication関数を使ってやりとりします。
『Fy Mascot』から『キャラクターエンジン』や『オプションプログラム』へのGICP文字列は、各モジュールに備わったcommunication関数に対して送られ、逆に各モジュールから『Fy Mascot』へのGICP文字列は、load関数で引き渡された『Fy Mascot』に備わったcommunication関数に対して送られます。
GICP通信のメモリ管理
communication関数で通信される文字列は各モジュール間でやりとりされ、異なるモジュール内でメモリの確保や解放が行われます。通常のmallocなどの関数でメモリを確保すると異なるモジュールでは解放できないため、『Fy Mascot』では専用のメモリ関数を用意しload関数で引き渡しています。communication関数で送受信するGICP文字列のバッファは全てこの関数で確保・解放を行ってください。
『Fy Mascot』のメモリ関数は独自のメモリ管理機能を搭載しており、メモリリークやバッファオーバーフロー(プログラムが落ちない程度の軽度なもの)をログに書き出すことができます※1。
※1 メモリエラーを書き出す機能はデフォルトでOFFになっています。設定プロパティシートには設定項目がありませんが、設定ファイルを編集することで有効にすることができます。
エクスポート関数
『キャラクターエンジン』と『オプションプログラム』は以下の関数をエクスポートする必要があります。3つのうちどれか一つでもかけている場合は不備があるとしてはじかれます。
| character.c / option.c |
![]() |
●load関数
load関数は『オプションプログラム』が『Fy Mascot』にロード、アンロードされた時に実行されます。第4引数以降の関数について詳しくは後述のload関数で引き渡される関数をご参照ください。
第1引数 int i_status
ロードされた場合は『1』が、アンロードされた時は『2』が入ります。
第2引数 char *lp_path
『オプションプログラム』が保存されているフォルダの絶対パスです(ANSI/Shift_JIS)。
第3引数 void *lp_reserved
現在は使われておりません。
第4引数 GICPMALLOC_FUNC malloc_func
GICP通信に利用するバッファを確保するためのmalloc関数です。
第5引数 GICPMALLOC_FUNC free_func
GICP通信に利用するバッファを解放するためのfree関数です。
第6引数 GICPCOM_FUNC com_func
GICP通信で『Fy Mascot』へGICP文字列を送る際に利用する関数です 。
第7引数 STATUS_FUNC status_func
『Fy Mascot』のステータス表示に利用する関数です。
戻り値 int
失敗した場合は0を、成功した場合は0以外を返します。
説明
『Fy Mascot』ではloadの戻り値が0の場合は不備があるものとしてロードを中止します。たとえば、必要なファイルなどを最初にチェックして不備がある場合や対応OSではないプラットホームの際に意図的に中止させたい時に有効です。 unload時は、戻り値に関わらずアンロードされます。
●communication関数
『Fy Mascot』から『キャラクターエンジン』や『オプションプログラム』へのGICP通信がこの関数を使って行われます。『キャラクターエンジン』や『オプションプログラム』から『Fy Mascot』への通信は、前述のload関数で引き渡された関数を利用します。
第1引数 char **lpp_buffer
GICP文字列が格納されたバッファのです。ポインタのポインタである点に注意してください。
第2引数 int *lp_length
第1引数で引き渡されたバッファのサイズです。ポインタである点に注意してください。
戻り値 int
失敗した場合は0を、成功した場合は0以外を返します。
●configuration関数
configuration関数は『オプションプログラム』の設定用プロパティシートを『Fy Mascot』の設定ダイアログから呼び出すための関数です。DialogBoxやDialogBoxParam関数でダイアログを作成します。
第1引数 HWND h_parent
『Fy Mascot』の設定ダイアログのウィンドウハンドルです。作成するシートの親ウィンドウとして指定するのに使います。
第2引数 unsigned short us_language
現在『Fy Mascot』で選択されている言語をロケールID (LCID) で指定します。ロケールIDはマイクロソフトの指定したコードで、1033が英語、1041が日本語、というように決められています。すべての言語に対応する必要はなく、対応するかどうかは製作者の自由です。
戻り値 int
失敗した場合は0を、成功した場合は0以外を返します。
load関数で引き渡される関数
『Fy Mascot』本体がエクスポートしているGICP通信用の関数などは、load関数に引数として渡されます。ここで引き渡された関数へのポインタをグローバル変数などに格納して利用します。
- malloc_func … GICP用のmalloc関数
- free_func … GICP用のfree関数
- com_func … 『Fy Mascot』へのGICP通信用
- status_func … ステータス表示用
| load関数で引き渡される関数 |
![]() |
●malloc_func関数
GICP文字列を格納するバッファを確保します。確保されたバッファは必ず後述の『free_func』関数を使って解放してください。
第2引数以下は前述のメモリ管理機能で使用する情報です。これらの引数にはマクロと__FILE__や__LINE__を使うと便利です。
| #define gmalloc(s) malloc_func( (s) , L"name" , __FILE__ , __LINE__ ) |
第1引数 int i_size
確保するバッファのサイズです。
第2引数 char *lp_module
関数を実行するモジュールの名前を半角英数255文字以下(ANSI/Shift_JIS)で記述します。
第3引数 char *lp_source
ソースファイルの絶対パスです。関数内でファイル名に変換されますが、__FILE__を使うことを前提に設計されているので絶対パスで引き渡してください。
第4引数 int i_line
関数が実行されたソースコード内の行数です。__LINE__を使うことを前提に設計されています。
戻り値 void *
確保されたバッファの先頭のポインタを返します。
●free_func関数
前述のmalloc_funcで確保されたバッファを解放する際に利用します。
第2引数以降はmalloc_funcと同じで、こちらもマクロと__FILE__や__LINE__を使うと便利です。
| #define gfree(p) free_func( (p) , L"name" , __FILE__ , __LINE__ ) |
第1引数 void *lp_pointer
解放するバッファのポインタ
第2引数 char *lp_module
関数を実行するモジュールの名前を半角英数255文字以下(ANSI/Shift_JIS)で記述します。
第3引数 char *lp_source
ソースファイルの絶対パスです。__FILE__を使うことを前提に設計されています。
第4引数 int i_line
関数が実行されたソースコード内の行数です。__LINE__を使うことを前提に設計されています。
戻り値 void
戻り値はありません。
●com_func関数
『Fy Mascot』への通信に使うcommunication関数です。『キャラクターエンジン』や『オプションプログラム』にあるcommunication関数と同様の仕様となっています。
第1引数 char **lpp_buffer
GICP文字列の入ったバッファへのポインタのポインタです。バッファは『malloc_func』で確保します。
第2引数 int *lp_length
GICP文字列のバッファの長さ(終端\0を含む長さ)が格納されたint型の変数へのポインタです。
戻り値 int
通信が失敗した場合は0を、成功した場合には0以外を返します。
説明
『Fy Mascot』からGICP文字列が送られてきたら、プログラム内で適切な処理をします。そして、RETURNする際に確保されたメモリを一旦『free_func』で解放して、再度適切な大きさのメモリを『malloc_func』で確保してGICP文字列を記述します。
新たに得られたバッファのポインタとそのサイズをchar **lpp_bufferとint *lp_lengthに入れます。この為に第1引数がポインタのポインタとなり、第2引数がポインタとなっているのです。
この仕様は『キャラクターエンジン』や『オプションプログラム』から『Fy Mascot』へ通信する場合も同様です。この為、送信した側は必ずメモリの解放をする必要があり、受信側した側は解放だけ行って確保しないような事をしてはいけません。
●status_func関数
『Fy Mascot』のステータス表示へ文字を表示させるための関数です。
第1引数 char **lpp_buffer
ステータスに表示する255バイト以下のUTF-8の文字列を引き渡します。バッファの解放などはされません。
GICPの概要
『Fy Mascot』では、GICPというプロトコルで定義された文字列をやりとりして動作します。『Fy Mascot』、『キャラクターエンジン』、『オプションプロググラム』の間は関数で通信を行います。
GICPの概要
・メッセージ一覧
『Fy Mascot』に実装されているメッセージの一覧です。これらのメッセージを利用して『Fy Mascot』が動作します。
NOTICE
NOTICEクラスは『キャラクターエンジン』や『オプションプログラム』などに各種イベントを知らせるときに使用するクラスです。
TALK
TALKクラスは、『Fy Mascot』にセリフをしゃべってもらうときに使用するクラスです。
MOTION
MOTIONクラスは、『Fy Mascot』にモーションをやってもらうときに使用するクラスです。
FUNCTION
『Fy Mascot』では、『オプションプログラム』でテキストボックスに入力した言葉で何かをやってもらう機能などで使用するクラスです。
- FUNCTION-GETFUNCTION … 『Fy Mascot』から対応している機能を問い合わせる。
- FUNCTION-EXECUTION … 『Fy Mascot』から機能を実行する。
- FUNCTION-LIST … 『Fy Mascot』に対応している機能の一覧を取得してもらう。
- FUNCTION-REQUEST … 『Fy Mascot』に対応している機能を実行してもらう。
SYSTEM
SYSTEMクラスは、『Fy Mascot』のシステム上の処理を行う際に利用するクラスです。
・GICPの基本的な構成
GICP文字列はXMLの書式に準拠しています。また、プログラムの作成を容易にし、人に分かりやすくするために以下のルールも追加しています。独自の要素を追加する場合も、わかりやすいというコンセプトは踏襲していただけるとうれしいです。
| ファイル名 | スタイル |
|---|---|
| 空要素 | GICPでは空要素は使わず、必ず開始タグと終了タグで構成します。 |
| 空白 | タグの中に不要な空白があると処理に失敗するかもしれません。 |
| 要素内容 | 内部処理に使用する英文字のパラメータは大文字に統一してください。※1 |
| 要素名 | 同じ要素名が並ぶと処理に失敗するかもしれないので推奨しません。※2 |
※1 あくまで内部処理用のパラメータに対してのことで、ユーザー入力やセリフ等はこれに含めません。
※2 属性をもうけて番号をふるのがオススメです。
GICPの文字コード
『Fy Mascot』のGICPで通信される文字コードはUTF-8です。
Windowsでプログラムを作ると、この仕様がメンドーなことこの上ないのですが。。。世の中の流れがUTF-8がスタンダードになっているようなので全面的にUTF-8で処理するようにしました。ただ、文字を表示する関数以外は、ほとんどマルチバイト用の関数がそのままUTF-8でも使えます。
GICPの構文
GICPは大きく見ると、『送り手』、『送り先』、『メッセージ』、『メッセージの追加情報』で分類される文字列で構成されます。各要素は入れ子式に要素を分類追加することができるので、汎用性と拡張性を兼ね備えている、と自負しております(笑)。
GICPの全ての内容は<gicp>~</gicp>に納められ、『gicp』には属性としてversionを記述します。『gicp』の中に以下の四つの要素が入ります。
- 『master』・・・『送り手』を記述する
- 『follower』・・・『送り先』を記述する
- 『witchcraft』・・・『イベント』を記述する
- 『incantation』・・・『イベントの追加情報』を記述する

『master』
masterは送り手を記述します。
実際は内部で使われることはあんまりないのですが、返信などがある場合に必要になります。要素には『place』と『detail』があります。
| 名前 | 場所 |
|---|---|
| MASCOT | 『Fy Mascot』本体。 『detail』には何も記述する必要はありません。 |
| CHARACTER | 『キャラクターエンジン』。 『detail』は何も記述する必要はありませんが、『name』を設けてキャラクターを限定することもできます。この情報を利用するかどうかは『キャラクターエンジン』によります(無視されるかも)。 |
| OPTION | オプションプログラム。 『detail』に『name』を記述します。 |
| SOMEONE | 誰か。 後述のGICP RETURNで送り先が不要な場合に利用します。 『detail』には何も記述する必要はありません。 |
『follower』
followerには送り先を記述します。この内容は送り先の特定に使われます。masterと内容は同じで、送り返す際はmasterの内容をそのままfollowerに記述することで送信することが可能です。送り手が存在しない場合はGICPの失敗として処理されます。
『witchcraft』
witchcraftには送信するメッセージの種類を記述します。要素の内容には『class』と『order』があり、『class』にはそのメッセージのクラスを、『order』にはそのクラス内で有効なオーダーを記述します。クラスとオーダーを分けたのは、分かりやすくするためです。(なのでSOMETHINGクラスとか作らないでください)
オプションプログラムと『キャラクターエンジン』など、『Fy Mascot』が対応する必要がないものに関しては、『class』と『order』ともに自由に定めることができます。※同じオーダーでもクラスが異なれば別々のものとして認識されます。
『incantation』
incantationはwitchcraftによって要素内容が変化します。メッセージに関するパラメータやデータなどが記述されます。
『incantation』には『userdata』要素を追加することができ、ユーザーが任意の追加情報を付加することができます。また『userdata』要素は、不要な場合省略することもできます。
・GICP RETURN
GICPは通信が完了した際に結果をGICP文字列で返します。これをGICP RETURNと呼びます。すでに接続されているので送信元(master)も送信先(follower)も必要ないと思いますが、一応省略はしない方針なので完全なGICP文字列にして返信するようにして下さい。
※いちいち送り先を作るのが面倒な場合はplaceにSOMEONEと記述すると便利です。
『result』
GICP RETURNの内容はメッセージによって異なりますが、『Fy Mascot』では全てのメッセージのGICP RETURNに『result』タグを作り、そこに結果を入れて返すようにしています。
| パラメータ | 場所 |
|---|---|
| OK | 成功 |
| BADREQUEST | パラメータに不備がある、間違っている |
| ERROR | エラー |
| NOTSUPPORTED | 未サポート |
ユーザーを待つ返信
GICPは受信後すぐにGICP RETURNを返信します。ユーザーの入力待ちや処理に時間がかかる場合などは、GICPを受信した時点で受信した旨だけを返して、返信内容が確定した時点で受け手側から再度GICPを送信します。このようなメッセージは『follower』の情報を間違えないよう記述する必要があります。
NOTICE
NOTICEクラスは、『キャラクターエンジン』や『オプションプログラム』にイベントを通知するのに利用されるクラスです。『キャラクターエンジン』は、このメッセージをもとにモーションやセリフの反応をします。『Fy Mascot』、『キャラクターエンジン』、『オプションプログラム』は、このメッセージを使って各種情報をやりとりします。
たとえば、起動したら『Fy Mascot』は『キャラクターエンジン』や『オプションプログラム』に『起動』という情報をNOTICEクラスのメッセージで送ります。『キャラクターエンジン』はそれに対して『こんにちは!』というセリフを『Fy Mascot』に送るといった具合です。
| NOTICE-EXECUTION | 『Fy Mascot』→『キャラクターエンジン』や『オプションプログラム』 |
|---|---|
| NOTICE-REQUEST | 『キャラクターエンジン』や『オプションプログラム』→『Fy Mascot』と全体 |
NOTICE-EXECUTION [from Mascot]
NOTICE-EXECUTIONは『Fy Mascot』から『キャラクターエンジン』や『オプションプログラム』に対してイベントを送ります。
GICP
『event』
『event』の中には『information』と『parameter』があり、イベントの種類を記述します。『キャラクターエンジン』や『オプションプログラム』が独自のイベントを作ることもできます。『information』と『parameter』はそれぞれ半角英数255文字以下です。
| 『information』 | 『parameter』 | 意味 |
|---|---|---|
| NOTICE | START | マスコット(キャラクター)が起動した。 |
| EXIT(※) | マスコットに終了コマンドが送られた。 | |
| STANDBY | マスコットがスタンバイ状態になった。 | |
| WAKEUP | マスコットがスタンバイ状態から復帰した。 | |
| TWEET | 何かしゃべって。 | |
| HEALTHCARE | パソコンが起動してから一定時間が経過した(休息を促す)。 | |
| BACKSEAT | スクリーンセーバーが解除された(席に戻った=声をかける)。 | |
| RESOURCE | リソースの使用率が高い。 | |
| CHANGECHARACTER | キャラクターが変更された。 | |
| DROPFILE | キャラクターにファイルがドロップされた。 | |
| CLICK | キャラクターがツツかれた。 | |
| STROKE | キャラクターがナデられた。 | |
| MESSAGE | キャラクターに情報をしゃべってもらう。 | |
| NOTSUPPORTED | 対応していないオーダー・パラメータが実行された。 | |
| TALK | START | セリフが開始された。 |
| FINISH | セリフが終了した。 | |
| SCRIPTDATA | セリフにスクリプトデータタグがあった。 |
※『キャラクターエンジン』はEXITイベントを受け取ったら、セリフの後に必ずSYSTEM-EXITを『Fy Mascot』に送って終了させてください。そうしないとメニューで『終了』を選んでも終了しなくなってしまいます!
『data』
『data』はイベントによって異なっていて、各イベントのパラメータやデータを記述します。
| 『information』 | 『parameter』 | 『data』 |
|---|---|---|
| NOTICE | START | |
| EXIT | ||
| STANDBY | ||
| WAKEUP | ||
| TWEET | ||
| HEALTHCARE | <hour>起動してからの経過した時間</hour> | |
| BACKSEAT | <minute>席を離れていた時間(分)</minute> | |
| RESOURCE | <device>デバイス</device> ・CPU ・・・ CPUの負荷が高い。 ・MEMORY ・・・ メモリの使用率が高い。 |
|
| CHANGECHARACTER | <name>交代後のキャラクターの名前</name> | |
| DROPFILE | <path>ドロップされたファイルのパス</path> | |
| CLICK |
<label>(アタリ名)</label> ※senderは半角英数255文字以下(全角なら100文字程度)です。 <status>クリックのステータス</status> ・LEFT ・・・ クリック ・RIGHT ・・・ 右クリック <point> <x>クリック場所のX座標</x> <y>クリック場所のY座標</y> </point> |
|
| STROKE |
<label>(アタリ名)</label> ※senderは半角英数255文字以下(全角なら100文字程度)です。 <point> <x>ストローク場所のX座標</x> <y>ストローク場所のY座標</y> </point> |
|
| MESSAGE | <sender>送り手の名前</sender> ※senderは半角英数255文字以下(全角なら100文字程度)です。 <message>しゃべってもらいたい情報(言葉)</message> | |
| NOTSUPPORTED | <word>入力された文字</word> | |
| TALK | START | <script>セリフのスクリプト</script> ・後述のTALK-EXECUTIONの『script』の中身 |
| FINISH | <status>終了ステータス</status> ・COMPLETION ・・・ 最後まで話した。 ・BREAK ・・・ 途中で中断した。 |
|
| SCRIPTDATA | <scriptdata>スクリプトデータ</scriptdata> ・後述のTalk Scriptの\d[]タグ内の文字列 |
『userdata』
『Fy Mascot』は下記のイベントに対して『userdata』を追加します。
| 『event』 | 『userdata』 |
|---|---|
| TALK-START | ・後述のTALK-EXECUTIONの『userdata』の中身 |
| TALK-FINISH | ・後述のTALK-EXECUTIONの『userdata』の中身 |
| TALK-SCRIPTDATA | ・後述のTALK-EXECUTIONの『userdata』の中身 |
| MESSAGE | ※『オモヒカネ』に独自の拡張機能搭載 |
添付のキャラクターの『キャラクターエンジン』には『userdata』を使った独自の拡張機能が搭載されており、スクリプトなどを上手に使うことでオリジナルのキャラクターを実現できるようになっています。
GICP RETURN
『result』
終了ステータスとしてGICP RETURNの『result』を記述します。
NOTICE-REQUEST [to Mascot]
『キャラクターエンジン』や『オプションプログラム』から『Fy Mascot』経由でNOTICE-EXECUTIONを送ってもらいます。これにより、例えば『音声認識の結果』や『ジェスチャー』などを、標準で対応している他の情報と同じようにNOTICE-EXECUTIONのイベントとして送ることができます。
GICP
NOTICE-EXECUTIONと同じで、その情報はそのままNOTICE-EXECUTIONとして『キャラクターエンジン』や『オプションプログラム』に送られます。『userdata』がある場合もそのままNOTICE-EXECUTIONの『userdata』として送られます。
GICP RETURN
終了ステータスとしてGICP RETURNの『result』が記述されます。
TALK
TALKクラスは、『Fy Mascot』にセリフをしゃべってもらうときに使用するクラスです。
TALK-EXECUTION [to Mascot]
セリフをしゃべってもらいます。
GICP
『priority』
キャンバスへの優先順位を記述します。既にキャンバスにセリフが表示されている場合は、どちらを優先するか判断する必要があります。『Fy Mascot』では双方の『priority』パラメータを比較して、どちらが優先されるかを判定しています。世のお父さんはがんばっています(笑)。
| TYPE | 意味 |
|---|---|
| WIFE | 競合相手がWIFE以外ならば優先されます。 ユーザーの操作によるものなどを想定しています。 |
| DAUGHTER | 競合相手がMEならば優先されます。 意味のある通知、伝えたい通知などを想定します。 |
| ME | しゃべっている間は容赦なくはじかれます。 ランダムで独り言を発する場合などを想定しています。 |
優先の場合は、既に表示されていた内容はキャンセルボタンを押されたのと同じ処理をして終了させて、優先された方の内容が新たに表示されます。優先されなかった場合は表示されず、GICP RETURNの『result』要素に『CONFLICT』が入ります。
『script』
セリフを『\(円マーク)』を使ったTalk Scriptで記述します。なお、『\』は文字としての『\』なので、C言語などのプログラム内部では'\\'と記述します。
| スクリプト記号 | 意味 |
|---|---|
| \n | 改行します。 |
| \w[数字] | 次の文字を表示するまで間をおきます。 (数字は何ミリ秒待つかを記述) |
| \e | 表示したセリフを消去します。 |
| \m[モーションセット] | モーションセットを実行します。 半角英数字で255文字以内です。 |
| \d[文字列] | セリフの表示がこの部分に来たタイミングで[]内の文字列を NOTICE-EXECUTIONのTALK-SCRIPTDATAイベントで送ります。 音声読み上げ機能との連動などを想定しています。 |
| \\ | \(円マーク)を表示します。 (\\を表示したい場合は\\\\と記述) |
GICP RETURN
『result』
終了ステータスとしてGICP RETURNの『result』が記述されます。
TALK-BREAK [to Mascot]
セリフを中断してもらうときに使用します。例えば対話などでユーザーが入力を行った場合にまだ表示しているセリフを中断させて次の表示を行うことができます。
GICP
なし
GICP RETURN
『result』
終了ステータスとしてGICP RETURNの『result』が記述されます。
『status』
| STATUS | 意味 |
|---|---|
| HALT | セリフは表示していなかった。 |
| RUN | セリフが表示中だった。 |
『script』
『status』がRUNだった場合、表示中のTalk Scriptが記述されます。
『userdata』
『status』がRUNで、表示中のセリフを送ったTALK-EXECUTIONに『userdata』があった場合は、その内容が記述されます。
MOTION
『Fy Mascot』にモーションをやってもらうときのクラスです。
MOTION-EXECUTION [to Mascot]
『Fy Mascot』のキャラクターにモーションをやってもらうときに使用するメッセージです。
GICP
『motion』
モーションセットを記述します。
GICP RETURN
『result』
終了ステータスとしてGICP RETURNの『result』が記述されます。
FUNCTION
『Fy Mascot』では、テキストボックスに入力した言葉で『キャラクターエンジン』や『オプションプログラム』に何かをやってもらうことができます。

このメッセージは『オーダー』と『パラメータ』の2つで構成されています。上の例だと『LAUNCH』が『オーダー』で、『ペイント』や『メモ帳』などが『パラメータ』になります。『オーダー』はプログラムの方で決められた単語の中から選ぶ必要がありますが、『パラメータ』はユーザーの自由入力も認められます。
『Fy Mascot』は予め、『キャラクターエンジン』と『オプションプログラム』に対してどのような『オーダー』があるのかをFUNCTION-GETFUNCTIONで取得します。ユーザーによって『オーダー』が入力されたら、今度は同じくFUNCTION-GETFUNCTIONで『パラメータ』を取得します。
『オーダー』と『パラメータ』が確定されたら、その機能を持った『キャラクターエンジン』か『オプションプログラム』にFUNCTION-EXECUTIONが実行されます。
また、『キャラクターエンジン』や『オプションプログラム』は、FUNCTION-LISTを使って『Fy Mascot』に搭載されている『キャラクターエンジン』と『オプションプログラム』の『オーダー』の一覧や『パラメータ』の一覧を取得することができます。
そして、FUNCTION-REQUESTによってテキストボックスに入力されたのと同じように任意の機能を実行することができます。
FUNCTION-GETFUNCTION [from Mascot]
『Fy Mascot』から『キャラクターエンジン』と『オプションプログラム』に対してどのような『オーダー』や『パラメータ』があるのかをFUNCTION-GETFUNCTIONで取得します。この結果はテキストボックスの入力支援や、他の『キャラクターエンジン』や『オプションプログラム』が利用するためのFUNCTION-LISTに使われます。
GICP
『type』
| 『type』 | 意味 |
|---|---|
| ORDER | 『オーダー』を取得します。 |
| PARAM | 『パラメータ』を取得します。 |
『order』
『type』要素がPARAMの場合のみ追加され、どの『オーダー』のパラメーターを取得するのかを記述します。
GICP RETURN
『result』
終了ステータスとしてGICP RETURNの『result』を記述します。
『function』
対応しているならば『オーダー』か『パラメータ』の一覧を記述します。『パラメータ』の場合は『order』要素が追加され、要求された『パラメータ』が何の『オーダー』の『パラメータ』なのか記述します。一覧は『items』の中の『item』で、項目は1から1つずつ増やしていきます。
| 『function』 |
| <incantation> <result>OK</result> <function> <order>パラメータ場合はそのオーダー</order> <items> <item no="1">(オーダー/パラメータ1)</item> <item no="2">(オーダー/パラメータ2)</item> <item no="3">(オーダー/パラメータ3)</item> </items> </function> </incantation> |

『パラメータ』で任意の文字で対応する場合は、no=1に『*』を記述し以下のような形になります。WEB検索や対話などに使うことができます。
| 『function』(任意入力) |
| <incantation> <result>OK</result> <function> <order>オーダー<order> <items> <item no="1">*</item> </items> <function> </incantation> |
FUNCTION-EXECUTION [from Mascot]
『Fy Mascot』のテキスト入力にリストにある『オーダー』と『パラメータ』が入力された際に、当該の『キャラクターエンジン』や『オプションプロググラム』に対して送られます。
GICP
『order』
入力されたオーダーが記述されます。
『param』
入力されたパラメータが記述されます。
GICP RETURN
『result』
終了ステータスとしてGICP RETURNの『result』を記述します。
FUNCTION-LIST [to Mascot]
『キャラクターエンジン』や『オプションプログラム』から『Fy Mascot』に『オーダー』一覧や『パラメータ』一覧を取得するために使います。GICPとGICP RETURNは共にFUNCTION-GETFUNCTIONと同じです。
FUNCTION-GETFUNCTIONは、『Fy Mascot』が『キャラクターエンジン』や『オプションプロググラム』などに『オーダー』や『パラメータ』を問い合わせていたのに対して、FUNCTION-LISTは『キャラクターエンジン』や『オプションプロググラム』などが、現在実行中の『Fy Mascot』で使うことができる『オーダー』や『パラメータ』の一覧を問い合わせるイベントです。
GICP
FUNCTION-GETFUNCTIONと同じです。
GICP RETURN
FUNCTION-GETFUNCTIONと同じです。
FUNCTION-REQUEST [to Mascot]
『キャラクターエンジン』や『オプションプログラム』から『Fy Mascot』経由でFUNCTION-EXECUTIONを送ります。これによりテキストボックスに言葉を入力したのと同じように『キャラクターエンジン』や他の『オプションプログラム』に対してFUNCTION-EXECUTIONを送ることができます。
GICP
FUNCTION-EXECUTIONと同じで、その情報はそのままFUNCITON-EXECUTIONとして『キャラクターエンジン』や『オプションプログラム』に送られます。『userdata』がある場合もそのままFUNCTION-EXECUTIONの『userdata』として送られます。
GICP RETURN
終了ステータスとしてGICP RETURNの『result』が記述されます。
SYSTEM
『Fy Mascot』のシステム上の処理を行う際に利用するクラスです。
SYSTEM-EXIT [to Mascot]
『Fy Mascot』を終了させるイベントです。
GICP
『command』
| 『command』 | 意味 |
|---|---|
| EXIT | 終了 |
GICP RETURN
『result』
終了ステータスとしてGICP RETURNの『result』が記述されます。

