(4)選択肢の作り方

次は選択肢の作り方です。

「伺か」の一般的な、相方キャラつきのゴーストと異なり、COLORS betaやCOLORS Widgetでは原則的に単体でトークを行います。ですので、選択肢を用いたユーザーとのやりとりは、唯一、他者とのコミュニケーション劇を行える表現になりますので、とても重要です。

何かボケてユーザーにつっこませ、さらにボケる

ユーザーにボケさせて、それをつっこむ

ユーザーにボケさせて、それに乗る

など様々な応用が考えられます。

まず、クリックできる選択肢を表示するには、文中で

\q[選択肢表示文字列","選択時発動イベントハンドラ名(好きにつけてよい)]

と書きます。すると、選択肢が表示されます。

(さくらスクリプトに詳しい人は注意してください。一般的なさくらスクリプトの使用法と異なる部分があります!それは、選択肢表示文字列と選択肢発動イベントハンドラ名を仕切る「,」の前後を「"」で囲っていることです。華和梨辞書中では「,」は単語の区切り、という特別な意味を持つ文字です。そのため、ここで華和梨に単語をぶちぎられないために、「,」を「"」で囲う必要があります。)

このさくらスクリプトにより表示された選択肢をユーザーが押すと、「Select.選択肢発動イベントハンドラ名(\qにて好きにつけた名前)」エントリに登録されている単語が、次に続くトークとして呼び出されます。

ちょっとややこしかったですね。以下、例です。

sentence : \0\s[102]今日はいい天気ですね?\n・\q[気持ちいいね","feelgood]\n・\q[リア充爆発しろ","feelbad]
Select.feelgood : \0\s[133]本当に気持ちいいですね。\w8\w8どこか行きましょうか?\e
Select.feelbad : \0\s[310]私だって…\w8\w82次元ですから…\w8\w8\0\s[320]察してくださいよう…\e

このようにすると、「今日はいい天気ですね?」と発話したあと、選択肢がふたつ(「気持ちいいね」と「リア充爆発しろ」)が表示されます。

ユーザーが「気持ちいいね」を選択すると、イベントハンドラ(feelgoodと名づけてある)が呼び出され、Select.feelgoodに登録されたネタ「本当に気持ちいいですね。(略)」が表示されます。

ユーザーが「リア充爆発しろ」を選択すると、イベントハンドラ(feelbadと名づけてある)が呼び出され、Select.feelbadに登録されたネタ「私だって…2次元ですから…(略)」が表示されます。

sentence : \0\s[102]今日はいい天気ですね?\n・\q[気持ちいいね","feelgood]\n・\q[リア充爆発しろ","feelbad]
Select.feelgood : \0\s[133]本当に気持ちいいですね。\w8\w8どこか行きましょうか?\e
Select.feelgood : \0\s[102]こんな日は…\w8\w8\0\s[232]仕事なんてしていられないですね…\e
Select.feelbad : \0\s[310]私だって…\w8\w82次元ですから…\w8\w8\0\s[320]察してくださいよう…\e
Select.feelbad : \0\s[412]あらあら。\w8\w8いらいらしていると、しわが増えますよ?\e

もちろん、こんな風にすれば、反応の種類が増えてランダムに反応を返します。

なお、COLORS Widgetでは、クリック時に呼び出されるエントリ名が「Select.選択肢発動イベントハンドラ名」ではなく、「event.選択肢発動イベントハンドラ名」なので橋渡しが必要になります。さらに、このイベントハンドラも本当はキャラごとに名前を変えたほうがよく、また、COLORS Widgetではハンドラ名に全角文字などを使うのは非対応なので使用しないのが無難なので…

上の例を実際に組み込むときは以下の用にするのが実際的です。(キャラの名前が「しんぷるとん」の場合)

event.OnLoad : ${event.OnTalk}
event.OnClick : ${event.OnTalk}
event.OnTalk : ${sentence}
sentence : \0\s[102]今日はいい天気ですね?\n・\q[気持ちいいね","_simpleton_.feelgood]\n・\q[リア充爆発しろ","_simpleton_.feelbad]
event._simpleton_.feelgood : ${Select._simpleton_.feelgood}
event._simpleton_.feelbad : ${Select._simpleton_.feelbad}
Select._simpleton_.feelgood : \0\s[133]本当に気持ちいいですね。\w8\w8どこか行きましょうか?\e
Select._simpleton_.feelgood : \0\s[102]こんな日は…\w8\w8\0\s[232]仕事なんてしていられないですね…\e
Select._simpleton_.feelbad : \0\s[310]私だって…\w8\w82次元ですから…\w8\w8\0\s[320]察してくださいよう…\e
Select._simpleton_.feelbad : \0\s[412]あらあら。\w8\w8いらいらしていると、しわが増えますよ?\e

この例をさらに発展させ、選択肢に表示する文字列をランダムに入れ替えることもできます。たとえば、

event.OnLoad : ${event.OnTalk}
event.OnClick : ${event.OnTalk}
event.OnTalk : ${sentence}
sentence : \0\s[102]今日はいい天気ですね?\n・\q[${_simpleton_.天気いい}","_simpleton_.feelgood]\n・\q[${_simpleton_.天気よくない}","_simpleton_.feelbad]
_simpleton_.天気いい : 気持ちいいね, 晴れてよかった
_simpleton_.天気よくない : どんよりだぜ, リア充爆発しろ
event._simpleton_.feelgood : ${Select._simpleton_.feelgood}
event._simpleton_.feelbad : ${Select._simpleton_.feelbad}
Select._simpleton_.feelgood : \0\s[133]本当に気持ちいいですね。\w8\w8どこか行きましょうか?\e
Select._simpleton_.feelgood : \0\s[102]こんな日は…\w8\w8\0\s[232]仕事なんてしていられないですね…\e
Select._simpleton_.feelbad : \0\s[310]私だって…\w8\w82次元ですから…\w8\w8\0\s[310]察してくださいよう…\e
Select._simpleton_.feelbad : \0\s[412]あらあら。\w8\w8いらいらしていると、しわが増えますよ?\e

こんな風にすれば、選択肢の表示文字列がランダムに変わります。

ちょっと込み入った書き方になりますが、反応のバリエーションが広がります。

さらに応用すれば、イベントハンドラ(選択時に発動するネタ先)も含めてごっそり入れ替えるように書くこともできるでしょう。

なお、COLORS beta上での動作と異なり、COLORS betaの「アーカイブ作成機能」の「ゴースト作成」で作成されるゴーストパックでは、そのままでは選択肢が動作しません。一手間かける必要があります。

いったん、「ゴースト作成」で作成されたnarファイルをZIP解凍ソフトなどで解凍します。

内部の、 ghost\master\ghost-menu.txt をテキストエディタなどで開きます。

# メニュー用入出力イベント
#event.OnRecommendsiteChoice :
#event.OnUserInput :
#event.OnChoiceSelect :
#event.OnChoiceTimeout :
#event.OnChoiceEnter :
#event.OnAnchorSelect :
# キー入力イベント
#event.OnKeyPress :

4行目の、「#event.OnChoiceSelect : 」を、次のように書き換えます。

# メニュー用入出力イベント
#event.OnRecommendsiteChoice :
#event.OnUserInput :
event.OnChoiceSelect : ${Select.$(EntNamReference 0)}
#event.OnChoiceTimeout :
#event.OnChoiceEnter :
#event.OnAnchorSelect :
# キー入力イベント
#event.OnKeyPress :

このようにすることで、COLORS beta上で動作していたときと同じように、選択肢が動作するようになります。

narファイルを再構築するには、解凍したghostフォルダ、shellフォルダ、install.txtをまとめてZIP形式で書庫に圧縮し、ファイル名の変更を行って、拡張子をzipからnarに書き換えてください。