対ユーザーインターフェース用ゴースト「それはあなたです!」に関する仕様書。†
ゴースト概要†
- ゴースト間コミュニケート機能を利用して、ゴーストとユーザの間のコミュニケーションの仲立ちをします。
- ゴーストという「ソフトウェア」の「ユーザインタフェース」としてのゴースト。
ユーザインタフェースとしてのゴーストなので、ゴースト側からは、ユーザと同じ物として扱われることを想定しています。
逆に、ユーザ側からは、ユーザの分身(Miiやネトゲのプレイヤーキャラクターのような存在(アバター))として扱われることを想定しています。
やってること†
- ユーザが選択したキーワードを、該当のゴースト(拡張コミュニケート使用時は、起動中のすべてのゴースト)へ、ゴースト間コミュニケート機能を使って送信しています。
- 台本コミュニケートを受信して選択肢などを表示し、その結果を、台本コミュニケートを送信してきたゴーストに返信しています。
関連URL†
こんなことができます・こんなメリットがあります†
- ユーザーは……
- 今までよりも簡単にゴーストに対して呼びかけを行うことができます。
- 話しかけられるキーワードがあらかじめ示されているため、何を呼びかけたらいいか分からない、ということが無くなります。
- 話しかけられるキーワードが限定されているため、「ごめん、分からない」などと言われる確率が下がります。
- ゴーストの実装次第では、今までよりもゴーストとの対話が増え、更にゴーストを身近な存在として感じられるようになります。
- ゴースト作者は……
- 今までよりも簡単にユーザからゴーストに対して呼びかけてもらえるようになります。
- 反応できるキーワードをあらかじめ示しておくことにより、せっかく実装したのに全然呼びかけられない、というような、努力の無駄を無くすことができます。
- 反応すべきキーワードが限定されているので、ユーザからの呼びかけに対して、ゴーストがとんちんかんな反応を返してしまう確率が下がります。
- 選択肢やインプットボックスを表示するようなイベントを、「それはあなたです!」に丸投げすることにより、ゴースト自体のトークを中断することなく、ユーザ側に入力を求めることができるようになります。
- 今までよりもユーザとゴーストの対話を増やすことができますので、更にゴーストを身近な存在として感じてもらえるようになります。
- メニューを開くアクションを「それはあなたです!」に丸投げすることにより、マウスのダブルクリックでメニューを開くようにする必要が無くなるので、マウス反応の自由度が高まります。
こんなことはできません・こんなデメリットがあります†
どんなことも、うまい話だけ、なんてことはない訳で……
- あらかじめキーワードが示されているので、「ネタバレ」が避けられない。ネタバレ避けに「隠しキーワード」を作った場合、今まで以上に気づかれにくくなる(むしろそれを狙う、という手もありますが)。
- 入力機能を「それはあなたです!」に代行させる場合、「それはあなたです!」がインストールされ、同時に起動していなければならない(ただし、ゴーストの存在チェックと、NARの自動インストール、ゴースト呼び出しを使用すれば、自動化は可能であると思われます)。
- \0名が特殊(本来は環境変数である%username)なので、ゴーストやベースウェアによっては、通常のゴーストよりも対応に手間が掛かったり、場合によっては予期せぬ動作をする可能性があります。
テクニカルリファレンス†
組み込み済みキーワード†
| キーワード | トークID |
| おはよう! | DEFAULT_TALK_000 |
| こんにちは! | DEFAULT_TALK_001 |
| こんばんは! | DEFAULT_TALK_002 |
| おやすみ! | DEFAULT_TALK_003 |
| 元気? | DEFAULT_TALK_004 |
| 行ってきます | DEFAULT_TALK_005 |
| ただいま~ | DEFAULT_TALK_006 |
| 可愛いね! | DEFAULT_TALK_007 |
| 大好き! | DEFAULT_TALK_008 |
| 綺麗だね! | DEFAULT_TALK_009 |
| 愛してるよ! | DEFAULT_TALK_010 |
| 結婚して! | DEFAULT_TALK_011 |
| なでなで | DEFAULT_TALK_012 |
| つんつん | DEFAULT_TALK_013 |
| ぎゅ~ | DEFAULT_TALK_014 |
| さわさわ | DEFAULT_TALK_015 |
| もみもみ | DEFAULT_TALK_016 |
| ちゅっちゅ | DEFAULT_TALK_017 |
| うるさい | DEFAULT_TALK_018 |
| 黙れ | DEFAULT_TALK_019 |
| 帰れ | DEFAULT_TALK_020 |
- 部分一致でキーワードを判定するSHIORI(里々など)の場合、トークIDで判定すると、反応の誤爆を避けられます。
- 「それはあなたです!」をダブルクリックして開くメニューはタイムアウトしません。キャンセルを含め、何か選択するまで開きっぱなしです。
- メニュー開いて(DEFAULT_TALK_021)は、Ver.2.0で削除されました。
必要な場合は、設定ファイルを使用して「ゴースト専用メニュー」として追加して下さい。
設定ファイルによるカスタマイズ†
- 設定ファイル(anatadesu_setting.txt)をゴーストのghost/master/フォルダ直下に置くことで、ゴースト独自のメニューを表示させたり、組み込み済みキーワードを無効化したりすることができます(Ver.2.0以降)。
- 設定ファイルのサンプル
- 設定ファイルのエンコードは、UTF-8またはShift-JISが使用できます。
- エンコードは「それはあなたです!」が自動で判別するため、charsetのような指定は不要です。
- UTF-8は、BOM付き、BOMなしどちらにも対応しています。
- ファイルの内容によっては自動判定に失敗することもあります。
- 設定ファイルを使用することで、「それはあなたです!」からの呼びかけを制御できます。
- DEF_ALL<tab>0 とだけ書いた設定ファイルを所定の位置に置いておけば、「それはあなたです!」から呼びかけられなくなります(「全てのゴーストに呼びかける」を使用したときでも、この設定がされているゴーストには呼びかけません)。
- DEF_XXXに対して0か1を設定することで、上記の組み込み済みキーワードを任意にオンオフできます。
- 任意のメニューを追加することで、ゴーストの動作を制御できます。
- 特定のトークをさせる(おすすめの曲を紹介してもらう、コーヒーを奢る、労う、など)
- しゃべり頻度を調整する(もっと喋って、もう少し静かにして、黙って、など)
- メニューを開いたり名前覚えをさせる(メニュー開いて、名前覚えて、など)
- 設定ファイルの書式はサンプルファイル内の説明をご覧下さい。
ゴースト側で対応させるには?†
- このゴーストからのコミュニケートに対し、上記キーワードに対する反応を記述してください。
汎用反応の中に上記キーワードを含めておけば、そちらで反応するので、このゴースト専用に特別に反応を用意しなくても大丈夫な場合もあります。
各SHIORI用のサンプル辞書†
このサンプルを参考に、それぞれのゴースト用の反応を記述してください。
「それはあなたです!」からゴーストに通知されるゴースト名は?†
%username
- かなり特殊なゴースト名ですが、こうしないとゴースト名を取得して汎用コミュニケート反応するゴーストで不自然な反応になるので、あえてこうしています。
- ゴースト名が特殊なので、ゴースト間コミュニケートのSender特定や、切り替え反応などで問題が出る可能性があります。ご注意ください。
「それはあなたです!」からゴーストに通知されるコミュニケートスクリプトの書式†
\t\_q###<<呼びかけ内容>>###\c\_q\1\s[10]\0\s[0]<<ゴースト名>>、<<呼びかけ内容>>。\e
実際の例:よしのに向けて「おはよう!」と呼びかけた場合
\t\_q###DEFAULT_TALK_000:おはよう!###\c\_q\1\s[10]\0\s[0]よしの、\_w[150]おはよう!\e
- 割り込みによってスクリプトが中断しないよう、タイムクリティカルを設定しています。
- ヘッダ(\_q~\c\_qで囲まれた部分。以下同じ)と本文の「呼びかけ内容」の中身は基本的に同じですが、本文はトランスレートされている可能性があります。
キーワードとして使用する場合は、ヘッダ部分を調べる方が確実です。
- 現時点での仕様では、呼びかけ対象のゴーストをユーザが認識しやすいように、ゴースト名は必ず呼ぶようにしています(拡張コミュニケートを使った一斉同報送信時は、「みんな」と呼びかけます)。
このため、一部のゴーストでは想定通りの動作をしない(たとえば、名前呼ばれ反応が優先される、など)ことがありますのでご注意ください。
- ヘッダ部分に###で区切った物を配置することで、キーワードの抽出と条件分岐がしやすいようにしてみました。
- ヘッダ部分は、バルーン上では瞬間的にクリアされるため、ベースウェアの実装やマシンの処理速度にもよりますが、基本的にユーザの目に触れることはありません。
台本コミュニケートへの対応†
- このゴーストは台本コミュニケートに対応しています。
- 台本コミュニケートに関しては、台本コミュニケート仕様書を参照してください。
- 実行時はreference[1]に送信元ゴーストが喋ったスクリプトがセットされるため、それ以降のリファレンス番号が1つずつズレます。
以下の解説では、「辞書を記述する際のリファレンス番号」を基準にリファレンス番号を示しています。
- 台本コミュニケートを使用することで、コミュニケート対象となるゴースト側から「それはあなたです!」に選択肢を表示させ、ゴーストとの会話を成立させることができます(実際の例はデモムービーをご覧ください)。
- ゴースト名(\0名)が特殊なので、環境によってはうまく動作しない可能性があります。ご注意ください(現状、Windows上で動作するSSPでは特に問題なく動作しています)。
- 拡張コミュニケート使用時は、複数のゴーストから反応されたときに収拾が付かなくなるので台本コミュニケートからの応答を無視します。
- 具体的な実装例はYAYAサンプルをご覧下さい(「列挙するサンプル」で検索してください)。
- reference[2]に以下の内容を必要なだけ記述することで、選択肢を使い、任意の言葉を投げ返させることができます。
これを用いると、ユーザーとゴーストとの会話を成立させることが可能になります。具体例はデモムービーをご覧ください。
\q[選択肢のキャプション,OnDaihonCommunicateExecute,「それはあなたです!」に喋らせたい内容(,トークID)]
YAYAで実装した場合の例
//reference[2]に素直に列挙する際のサンプル
res_reference[0] = '%username';
res_reference[1] = 'ECHO/1.0';
res_reference[2] = '\1\s[10]\0\s[0]\_q\![*]\q[おっぱいが触ってくれって言ってたんでね,OnDaihonCommunicateExecute,おっぱいが触ってくれって言ってたんでね,1]\n/
\![*]\q[ふとももが触ってくれって言ってたんでね,OnDaihonCommunicateExecute,ふとももが触ってくれって言ってたんでね,1]\n/
\![*]\q[おしりが触ってくれって言ってたんでね,OnDaihonCommunicateExecute,おしりが触ってくれって言ってたんでね,1]\n/
\![*]\q[ごめんね、もうしないよ,OnDaihonCommunicateExecute,ごめんね、もうしないよ,0]\n\n\![*]\q[会話を打ち切る,nop]\e';
'\t\1\s[10]\0\s[2]ひゃっ!!!?\s[9]ど、どこ触ってんだよバカっ!!!\e';
- OnDaihonCommunicateExecuteが台本コミュニケートからの返信用イベントです。選択肢などを使用してキーワードを返信させたい場合は、このイベントを発動させてください。
- トークIDはオプションです(設定しなくても問題ありませんが、設定しておく方が判定が楽になると思います)。
- 「キャンセル」の選択肢を作りたい場合は、\q[キャンセル,nop]と記述した選択肢を設けてください(キャンセル、のキャプションは、「会話を打ち切る」などに、任意で変更可能です)。
- reference[2]を使用して選択肢を記述する場合、ウェイトは自動挿入されるので、書かなくても大丈夫です(\wX形式のウェイトは、書いても削除されます。\_w[XXX]形式のウェイトはそのまま残ります)。
- ウェイトの自動挿入を止めるには、\_qタグで囲って下さい。
- reference[2]を使用してメニューなどを表示させた場合、それがタイムアウトするかどうかは、reference[2]の記述内容に依存します。
なお、メニューがタイムアウトしても、何のイベントも発生しません(送信元ゴーストにも通知されません)。
台本コミュニケートを使用したときの返信†
\_q###(トークID):(喋らせたい内容)###\c\_q\1\s[10]\0\s[0](喋らせたい内容)。\e
例:上記の例で「ごめんね、もうしないよ」を選択した場合の返信。自動ウェイトの影響でヘッダー部分と表示部分で内容が異なっていることに注意。
\t\_q###0:ごめんね、もうしないよ###\c\_q\1\s[10]\0\s[0]ごめんね、\_w[150]もうしないよ。\e
- 台本コミュニケートの内容を上記の仕様通りに記述した場合、ユーザが選択肢を選んだときに、このフォーマットで、台本コミュニケートを投げてきたゴーストにスクリプトを投げ返します。
- 本文の「喋らせたい内容」は、トランスレーターの影響で内容が変化する可能性があります。
ヘッダ部分を見てキーワードを調べる方が、確実にキーワード反応させられます。
- トークIDなどを使用してキーワード反応したい場合に備え、OnDaihonCommunicateExecuteには、reference[1]で任意の値を設定できるようにしています(デリミタとして使用されている"###"と":"の使用は推奨しません)。
- 返信スクリプト内でのトークIDとキーワードは、ヘッダ内部で半角コロンで区切っています。
- こちらからは単純に台本コミュニケートで設定されたキーワードを投げ返すだけです。こちらから台本コミュニケートを発動させるようなことはしません。
キーワードに対する反応は、それぞれのゴースト内で制御・記述してください。
- トークIDを設定していなくても、台本コミュニケートからの返信は必ずこの形式になります(半角コロンが必ず含まれます)。
いちいち選択肢を書くのが面倒な人向けの手抜き記述仕様†
はっきり言って、\q[~~]を何個も書き並べるのは面倒です。なので、手抜きできる方法を用意してみました。
クリプトに組み込んであります。
- ゴースト間コミュニケートのreference[3]に要素を列挙すると、それを元に選択肢リストを自動生成します。また、reference[4]でキャンセルボタンのキャプションを指定します。
- 選択肢の要素の書式は
<<選択肢のキャプション=「それはあなたです!」が喋る内容>>###<<トークID(省略可)>>
で、これをカンマ区切りで列挙します。キャプションとトークIDの区切りは、半角シャープ(#)3つです。
トークIDは省略可能です。
YAYAで実装した場合の例。「トークIDあり」バージョン
//トークID付きでreference[3]~に列挙するサンプル(受け取り側ではreference[4]~)
res_reference[0] = '%username';
res_reference[1] = 'ECHO/1.0';
res_reference[3] = '巨乳は揉まれるために存在してるんだよ?###2,いい揉み心地でした♪###2,え?揉んだのは肩だよ?###3,ごめんね、もうしないよ###0';
res_reference[4] = '会話を打ち切る';
res_reference[6] = 15000; //15秒後にタイムアウト
'\t\1\s[10]\0\s[2]ひゃうっ!!?\s[9]い、いきなり何すんだよっ!!!\e';
YAYAで実装した場合の例。「トークIDなし」バージョン
//トークIDなしでreference[3]~に列挙するサンプル(受け取り側ではreference[4]~)
res_reference[0] = '%username';
res_reference[1] = 'ECHO/1.0';
res_reference[3] = 'ほっぺがぷにぷにしてそうだったからね~♪,おなかがぷにぷにしてそうだったからね~♪,ごめんごめん、悪気はなかったんだ';
res_reference[4] = '会話を打ち切る';
res_reference[6] = 15000; //15秒後にタイムアウト
"\t\1\s[10]\0\s[2]ふえっ!!?\s[4]い、いきなり突っつくなよう。\e";
- reference[4]に設定するキャンセル選択肢のキャプションは、単純にキャプションに設定したい文字列をそのまま記述してください。
- reference[3]に値を列挙した場合、reference[2]の内容は無視されます。
- reference[3]を使用して自動生成したメニューがタイムアウトするかどうかは、reference[6]の指定に依存します。
reference[6]を省略するか、正の整数以外を指定すると、タイムアウトしなくなります。
インプットボックスを使う†
- 名前覚えイベントなどを「それはあなたです!」に簡単に代行させられます。
- reference[7]に設定された値が、インプットボックスで入力が行われたときに、トークIDとして戻ります。
- インプットボックスに入力された内容は、キーワード部分に入って戻ります。
- reference[4]にデフォルト文字列、reference[5]にキャプション、reference[6]でタイムアウト時間を指定できます(いずれも省略可)。
YAYAで実装した場合の例。
On_名前覚え
{
//インプットボックスを「それはあなたです!」に丸投げするサンプル。今回は名前覚え。
//インプットボックスを開くタグのref0に、トークIDをセットして、戻り値で使用する。
//メニューなどからこの関数を呼び出してください。必要なら、「それはあなたです!」に「名前覚えて」アクションを追加します。
//この例では、reference[6]のタイムアウトの指定を省略している(=タイムアウトしない)
res_reference[0] = '%username';
res_reference[1] = 'ECHO/1.0';
res_reference[4] = username;
res_reference[5] = "インプットボックスに、%(selfname)に呼ばせたい名前を入力してください。";
res_reference[7] = 'NAME_INPUT';
'\t\1\s[10]\0\s[0]ん、じゃ、名前を入力してね。\1敬称込みで頼むで。\e';
}
選択肢やインプットボックスを出すときに、具体的に質問や説明を書けたら便利かも?†
という訳で、reference[5]に設定した物を、選択肢の前に表示するようにしました。reference[5]を省略すると、いきなり選択肢が表示されます。
YAYAで実装した場合の例
On_すごく○○です
{ //ランダムトーク中にユーザに話しかけるサンプル。
//ランダムトーク内で発動することを想定しています。
//ランダムトーク内で発動させる場合は、'\![raise,<<イベント名>>]\e'で発動。イベント名はOn~で始まっている必要があります。
if ('%username' _in_ ghostexlist) {
//起動中ゴーストの中に「それはあなたです!」がいたら、台本コミュニケート発動。
res_reference[0] = '%username';
res_reference[1] = 'ECHO/1.0';
res_reference[3] = 'すごく…大きいです。###すごく大きいです,すごく…小さいです。###すごく小さいです';
res_reference[4] = 'アッー!!?';
res_reference[5] = "\_q%(username)、%(selfname)を見てくれ。こいつをどう思う?\_q";
res_reference[6] = 15000; //15秒後にタイムアウト
"\t\0\s[60]\1\s[10]なあ%(username)、隣のやつを見てくれ。\0ん?\1\n[150]\s[11]こいつを、どう思う?\0\n[150]\s[4]ちょっと待て。\e";
} else {
RandomTalkMain;
}
}
実行イメージ(選択肢の前に、reference[5]で指定したキャプションが表示されている)
使用できない文字†
"'#$&()*+,-/:;<=>?@[]`{|}~
reference[3]、reference[4]、reference[7]では、上記の文字は使用できません。仮に使用しても'_'(アンダースコア)に置換されますのでご注意ください(デリミタとして使用される'###'と','を除く)。
また、\![vanishbymyself]などの"危険な"タグはエスケープされます。
リファレンスの優先順位†
| 優先順位 | リファレンス | 内容 |
| 高 | reference[7] | インプットボックス |
| 中 | reference[3] | かんたん選択肢書式 |
| 低 | reference[2] | 普通の台本コミュニケート書式 |
つまり、reference[2]やreference[3]を記述していても、reference[7]が記述されているとその内容は無視されます。
台本コミュニケートまとめ†
| リファレンス番号 | 内容 | 優先度 | 説明 | 備考 |
| 記述時 | 実行時 |
| 0 | 0 | %username | - | スクリプトの宛先 | 「それはあなたです!」の\0名(%username)を指定してください |
| - | 1 | ゴーストが喋ったスクリプト | - | 送信元ゴーストが喋ったスクリプト | 自動的に追加されます*1 |
| 1 | 2 | ECHO/1.0 | - | 台本コミュニケート識別子 | 省略不可。必ずこの通りに記述して下さい。 詳しくは台本コミュニケート仕様書参照 |
| 2 | 3 | 「それはあなたです!」に表示させたいスクリプト | 3 | 「それはあなたです!」のバルーンに表示したい内容を、さくらスクリプトで記述します。 | reference[3]が設定されていた場合は無視されます*2 |
| 3 | 4 | 列挙された選択肢の項目 | 2 | 「それはあなたです!」で表示したい選択肢の項目を、カンマ区切りで列挙します | |
| 4 | 5 | 「キャンセル」のキャプション インプットボックスのデフォルト文字列 | - | 「キャンセル」ボタンに表示したい文字列を設定します。 reference[8]が指定されている場合は、インプットボックスのデフォルト文字列を指定します。 | 省略可。 省略した場合は、ボタンには「キャンセル」と表示されます。 インプットボックスは未入力状態になります。 |
| 5 | 6 | 選択肢の前に表示される文章 | - | 選択肢やインプットボックスの前に表示したい文章を指定します (選択肢に対する説明など)。 | 省略可 さくらスクリプト使用可 |
| 6 | 7 | タイムアウト | - | 選択肢やインプットボックスのタイムアウトを指定します(単位:ミリ秒) | 省略可*3 |
| 7 | 8 | インプットボックスを表示させる場合のトークID | 1 | インプットボックスで入力が行われると、ここで設定した値をトークIDとして、 入力内容をキーワードとして返します。名前覚えなどに利用できます。 | |
その他†
こんなときは†
- 「それはあなたです!」から呼びかけられたくない
- 該当するゴーストの/ghost/master/以下に、設定ファイル(anatadesu_setting.txt)を置き、その中に、DEF_ALL<タブ>0、とだけ記述して下さい。
こうすると、そのゴーストに対して、「それはあなたです!」から一切呼びかけなくなります(一斉呼びかけの時も、該当ゴーストを除外して呼びかけます)。
- 独自のキーワードを追加したい
- 該当するゴーストの/ghost/master/以下に、設定ファイル(anatadesu_setting.txt)を置き、その中に、キーワードを列挙して下さい。
必要に応じてトークIDも設定して下さい。
※設定ファイルの書き方については、#設定ファイルによるカスタマイズを参考にして下さい。
バグかな?と思ったら†
- ゴーストが呼びかけに反応しません
- 該当ゴーストがゴースト間コミュニケートに対応していません。作者さんに依頼して、ゴースト間コミュニケートに対応してもらってください。
このゴーストの仕様に合うように対応してもらうのがベストですが、汎用の「おはよう」とか「おやすみ」などへの反応があるだけでも違ってきます。
- 「設定により<ゴースト名>に対する呼びかけはできません」と表示されます。
- 該当ゴーストでは設定ファイルにより「それはあなたです!」からの呼びかけを拒否しています。作者さんの意向なのでこちらではどうしようもありません。
「それはあなたです!」以外の方法でゴーストへの呼びかけを試みて下さい。
- YAYAゴーストで台本コミュニケートを使用すると意図したとおりの動作をしてくれない
- YAYAのシステム辞書が古い場合、リファレンスの記述を途中で省略すると、省略したところ以降のリファレンスがセットされず、意図したとおりの挙動にならないことがあります。
この現象は、最新版の紺野ややめのシステム辞書を導入し、リファレンスの書き方を、referenceXという形式から、reference[X]という形式の物に変更すれば回避できます。
システム辞書の移行には多少手間が掛かりますが、移行した方が何かとメリットが大きいので、古いタイプのシステム辞書を使用されている方は、この機会に移行してしまうことをおすすめします。
- 呼びかけに対して、「○○くんさん、おはよう」というように応答してしまう
- 伺かの環境変数展開が、トランスレーターを通った後に行われるために発生する問題です。
伺かの仕様なので、ユーザ名に敬称等を含めないようにする、ゴースト名を見て処理を分岐する、などの方法で対応して下さるようお願いいたします。