『Fy Mascot』-オモヒカネについて

はじめに

サンプルのキャラクターは『オモヒカネ』という『思考エンジン』を搭載しています。『オモヒカネ』はセリフをスクリプト(テキストファイル)として分けているので、メモ帳で編集することでキャラクターに好きなセリフを話させることができます。

『オモヒカネ』はこの他にも独自の拡張機能が搭載されており、『思考エンジン』を自前で作らなくても、オリジナルのキャラクターをそこそこ表現できるようになっています。まずは『オモヒカネ』を使って、モデルデータとセリフスクリプトでキャラクターを作ってみるのが簡単でオススメです。

  1. モデルデータを用意して『model』フォルダに入れる。
  2. 『scripts』フォルダの中にあるセリフスクリプトをメモ帳で編集する。

だいたいこんな感じでオリジナルキャラクターができあがります。

オモヒカネの概要

『思考エンジン』は、『Fy Mascot』からイベントが送られてきて、それに応じてなんらかの反応(モーションとセリフ)をします。

『オモヒカネ』では、イベントごとのセリフやモーションをスクリプト(テキストファイル)として保存しており、それを使ってイベントをこなします。このため、プログラムを書き換えなくても、スクリプトファイルを追加することで新たなイベントに対応することができるのが特徴です。

picture

『オモヒカネ』はスクリプトファイルがないイベントが送られてきた場合は無視するようになっているので、全てのイベントを網羅する必要はありません。少数のスクリプトファイルでも問題なく動作します。まずは最低限のセリフを選んで編集し、残りを削除することで無理なくキャラクターを作ることができます。

スクリプトファイルは『オモヒカネ』の保存されているフォルダの『scripts』フォルダの中に保存しています。スクリプトファイルは起動時にスキャンされ『オモヒカネ』のプロパティシートで見ることができます。なお、『scripts』フォルダは『オモヒカネ』独自の仕様なので、他の『思考エンジン』では必要ありません。

スクリプトファイル

スクリプトファイルは、『イベント情報』と『セリフスクリプト』で構成されています。なお、イベント名でファイルを管理しているのでスクリプトファイルのファイル名は自由です。

picture

☆イベント情報

イベント情報はこのスクリプトファイルが使われるイベントです。『information』と『parameter』の2つのパラメータがあり、『Fy Mascot』から送られてくるNOTICE-EXECUTIONの『event』タグに対応します。

例えば、カオ(アタリ名:FACE)をクリックすると『information』に『CLICK』、『parameter』に『FACE』というイベントが送られてきます。『オモヒカネ』はスクリプトファイルから、『information』が『CLICK』で『parameter』が『FACE』となっているものからセリフを選びます。

picture

☆セリフアイテム

セリフアイテムはナンバー、アトリビュート(属性)、セリフスクリプトで構成されます。


picture

☆ナンバー

セリフアイテムのナンバーで1から順番に欠番や重複のないようにふります。なお番号が抜けるとそこで検索が打ち切られてその後のセリフアイテムが無効になってしまうので注意してください。

☆アトリビュート(属性)

同じイベントのセリフでも『時と場合』によって変化させることができた方が良いでしょう。例えば挨拶のセリフでも朝と夜では異なります。それを指定するパラメータがアトリビュート(『attribute』)です。『オモヒカネ』は『attribute』のパラメータでスクリプトファイルの中から最適なセリフを選択します。一つの『attribute』につき半角英数255文字以下(全角の場合は100文字程度)です

『attribute』はイベントによって異なり表のようになっています。『attribute』の指定がなかったり、ヒットする『attribute』がなかった場合は『NORMAL』が選ばれます。なお、『オプションプロググラム』などと連動して独自のアトリビュートを使うこともできます。

イベント アトリビュート 意味
START FIRSTSTART 初めて起動された
SHORTBLANK ついさっき起動したばかり
LONGBLANK 久しぶりに起動した
EARLYMORNING 早朝
MORNING
DAYTIME 昼間
EARLYEVENING 夕方
EVENING
MIDNIGHT 草木も眠る丑三つ時
EXIT MORNING
DAYTIME
EVENING
HEALTHCARE NORMAL ふつう
CAUTION やばめ
DANGER

また、アトリビュートは対話のような場合のキーワードとしても使います。ですので日本語の指定もできます。さらに、カンマで区切って複数のアトリビュートを記述することができます。この場合、もっともヒット率が高いものが選択されます(同率の場合は先にヒットした方が優先されます)。アトリビュートは最大で16個以下です。

『attribute』
   <attribute>属性1,属性2,属性3,属性4</attribute>

余談ですが、オモヒカネは対話モード(CONVERSATIONイベント)の場合、セリフの表示中に次の言葉を入れると、表示中のセリフの時に使ったキーワードもセリフの選択に利用しています。

過去のキーワードの優先度は回数ごとに0.5倍になっていきます(今回が1.0、1回前が0.5、2回前は0.25...)。最大で16個のアトリビュートまで保持されて古いものから破棄されていきます。

これにより、直前に話した内容も含めて適切なセリフを選択できるようにしています。もちろん、優先度が半分になっているので、今回の言葉の方が優先されますが、今回の言葉だけでは同率のセリフが複数あった場合は、過去のキーワードが生きてきます。

なお、セリフが表示中の場合に限られるので注意してください。消えるとすべて忘れます(笑)。

☆セリフスクリプト

セリフの本文です。以下のスクリプト構文とスクリプト記号が使えます。

スクリプト構文

セリフファイルにはいくつかのスクリプト構文があります。

$select{#item1|#item2}は、複数のセリフスクリプトのうちからランダムで一つを選ぶ場合に利用します。item1やitem2のところにセリフスクリプトのアイテムナンバー(数字のみ)を記述します。3つならば$select{#item1|#item2|#item3}といった具合に増やしていきます。

picture

なお、$select{#item1@file1.xml|#item2@file2.xml}のようにアイテムナンバーの後に@をつけてファイル名を記述することで、他のファイルのセリフスクリプトから選択することもできます。

$script{#item}は、$selectのセリフアイテムが1つしかないバージョンです。


$select{"string1"|"string2"}は、複数のセンテンスからランダムで一つ選ぶ場合に利用します。
例えば、『私は甘い物は$select{"好き"|"嫌い"}です。』のように使えば、『私は甘い物は好きです。』か『私は甘い物が嫌いです。』がランダムで選択されます。センテンスの前後に『"』があることに注意してください。

$replace{word}は、特定の文字に置き換える場合に利用します。表のような日にちや時間といったものと、アプリケーション側から指定されたものがあります。

置き換え文字 意味
character キャラクターの名前で置き換えます。
year 今年の西暦で置き換えます。
month 今月の月で置き換えます。
day 今日の日にちで置き換えます。
hour 今の時間で置き換えます。
minute 今の分で置き換えます。
week 今日の曜日で置き換えます。
sender イベントの『information』が『MESSAGE』の時、送り手の名前で置き換えます。
(『sender』要素に記述された内容)
string イベントの『information』が『MESSAGE』の時、送られてきた言葉で置き換えます。
(『string』要素に記述された内容)

picture

スクリプト記号

セリフには、それらしく表示するためにいくつかのスクリプト記号をが用意されています。詳しくはTalk Scriptをご覧下さい。

記号 意味
\n 改行します。
\w[数字] 次の文字を表示するまで間をおきます。
(数字は何ミリ秒待つかを指定)
\e 表示したセリフを消去します。
\m[モーション名] モーションセットを実行します。
モーション名は半角英数字で255文字以内です。
\\ \(円マーク)を表示します。
(\\を表示したい場合は\\\\と記述)

・NOTICE-EXECUTIONの拡張

『オモヒカネ』には、NOTICE-EXECUTIONで『event』の『information』が『MESSAGE』のイベントでユーザーデータ『userdata』を使った拡張機能を搭載しています。

このイベントは、本来どのアプリケーションからのものでも同じように処理するものですが、『userdata』に『extension』要素を追加することでアプリケーションごとに違ったリアクションができるようにしたものです。この要素がない場合は通常通りアプリケーションによらない一般的なリアクションをとります。

これにより、キャラクター側にスクリプトファイルを用意することで、オプションプログラムなどの独自のイベントに対応した自然なセリフをキャラクターに話してもらうことが可能になります

『extension』

『extension』
<extension>
   <attribute>属性</attribute>
   <replace>
      <item no="1"><key>word1</key><word>言葉1</word></item>
      <item no="2"><key>word2</key><word>言葉2</word></item>
      <item no="3"><key>word3</key><word>言葉3</word></item>
   </replace>
</extension>

この要素は、『attribute』と『replace』で構成されます。

『attribute』はスクリプトファイルの『attribute』に対応してセリフを選択するのに使われます。現時点では、こちらはスクリプトのようなカンマ区切りによる複数のアトリビュートの指定には対応していません。

『replace』は任意で必要に応じて置き換える言葉を記述します。下の例ではスクリプトの『$replace{word}』という部分を『晴れのち曇り』という言葉に置き換えています。スクリプトファイルの項に記載された既定の置き換え文字は使わないでください。

picture