7 段目:挨拶したい
礼儀作法のお稽古を始めますわ。まずはお手本を――ようこそ、いらっしゃいまし。と、こう迎えるのが挨拶というものですのよ。
今のところ、お二人のご挨拶は、起動のときのひとことだけでございます。
フンッ、ですから今日あらためますのよ。迎えるとき、送り出すとき、お別れのとき――お客様のお名前くらい、きちんと呼ばせてみせますわ。
叶えたいこと
この章で叶えるのは「場面に合わせて挨拶する」ですわ。ほかのゴーストと交代するとき、初めて起動したとき、閉じるとき――それぞれに挨拶を持たせますのよ。足す辞書は、今回も 1 枚ですの。
- この章で足すファイル:
ghost/master/dic/07-greeting.pasta - この章で使いはじめる道具: 開発用パレットの「スクリプト入力」・「
\-タグで終了しない」 - この章で招くゴースト: emo2(切り替えの相手役)
- 叶うこと: ほかのゴーストと切り替わるとき・初めて起動したとき・閉じるときに、女の子と男の子が挨拶する。おしゃべりの中で、ベースウェアの名前を話す
新しく覚える表現
イベントと同じ名前のシーンを書く
1 段目で書いた *OnBoot の種明かしをいたしますわ。ベースウェアは、起動や終了、ゴーストの切り替えのたびに、イベントを送ってきますの。そして pasta は、イベントと同じ名前のシーンを呼びますのよ。
*OnFirstBoot
女の子:@笑顔 初めまして!これからよろしくね。
男の子:@笑顔 ユーザーさん、ぼくもよろしくね。
- ベースウェア(SSP など)は、起動や終了、ゴーストの切り替えのたびに、イベントを送ってくる
- イベントと同じ名前のシーンを書いておくと、pasta はそのシーンを呼ぶ。1 段目の
*OnBootも、この仕組みで呼ばれている *OnFirstBoot—OnFirstBootは、初めて起動したときのイベントである。初めて起動したときは、OnBootの代わりにOnFirstBootが来る- 同じ名前のシーンが無いイベントには、ゴーストは何も話さない
- 同じ名前のシーンを複数書くと、4 段目で覚えたとおり、呼ばれるたびにどれか 1 つが選ばれる
- この章の辞書は、次の 4 つのイベントに応える
| シーン | 呼ばれるとき |
|---|---|
*OnGhostChanged | ほかのゴーストから切り替わってきたとき(迎え入れ) |
*OnGhostChanging | ほかのゴーストへ切り替わるとき(送り出し) |
*OnFirstBoot | 初めて起動したとき |
*OnClose | ゴーストを閉じるとき |
一覧に無いイベントは UKADOC で探す
では、どんなイベントが来るのかは、どこで調べればよいのでしょう。pasta のマニュアルにも主なイベントの一覧はありますけれど、すべてを載せてはいませんの。全部が並んでいるのは、UKADOC の一覧ですわ。
マニュアルの一覧に無いイベントには、応えられないのでございますか。
いいえ、応えられますわ。UKADOC で見つけたイベントと同じ名前のシーンを書けば、それで応答になりますのよ。送り出しの OnGhostChanging が、ちょうどその例ですの。
*OnGhostChanging
>transfer_req_to_var
女の子:@キラキラ $r0 、バトンタッチだよ!
- pasta のマニュアルのイベント一覧(主要イベント)に無いイベントも、同じ名前のシーンを書けば応答できる
- どんなイベントがあるかは、UKADOC の SHIORI Event 一覧 で調べられる
OnGhostChangingは、pasta のマニュアルの一覧に無いイベントである。説明は UKADOC の OnGhostChanging の項にある- 上の 2 行目の
>transfer_req_to_varと、台詞の中の$r0は、次の節で扱う - UKADOC の項には、イベントがいつ来るかと、イベントに付いてくる付加情報(
Reference0、Reference1…)の意味が書いてある - この章で初めて扱う 4 つのイベントの出典は、次の表のとおりである
| イベント | いつ来るか(UKADOC より) | この段で使う Reference(UKADOC より) |
|---|---|---|
OnGhostChanged | 「他のゴーストから自ゴーストに切り替えられた際に発生。」 | Reference0 —「直前のゴーストの本体側の名前。」 |
OnGhostChanging | 「他のゴーストへの切り替え指示があった際に発生。」 | Reference0 —「切り替わるゴーストの本体側の名前。」 |
OnFirstBoot | 「初回起動した際に発生。」 | —(この段の辞書は使わない) |
OnClose | 「終了が指示された際に発生。」 | —(この段の辞書は使わない) |
付加情報を変数に取り出す
イベントには、付加情報が付いてきますの。迎え入れの OnGhostChanged なら、Reference0 に直前のゴーストの名前が入っていますわ。これを台詞に使えば、お相手の名前を呼んで挨拶できますのよ。
取り出し方は、たったの 1 行ですわ。シーンの先頭で >transfer_req_to_var を呼ぶと、付加情報が $r0 から $r9 までの変数に入りますの。
*OnGhostChanged
>transfer_req_to_var
女の子:@笑顔 $r0 から、バトンを受け取ったよ!
男の子:@笑顔 ここからは、ぼくたちの番だね。
- イベントには、付加情報(
Reference0、Reference1…)が付いてくる。付加情報は、自動では変数に入らない >transfer_req_to_var— シーンの先頭にこの行を書くと、付加情報が$r0〜$r9に入る。行の頭を字下げして書く$r0〜$r9—Reference0〜Reference9の値が入る変数である。rと数字は全角である- 変数の後ろには空白を置いて、続く台詞と区切る。6 段目の
$時12と同じである *OnGhostChangedの$r0には、直前のゴーストの本体側の名前が入る。emo2 から切り替わってきたときはむらさきである- 上の女の子の台詞は、emo2 から切り替わってきたときは「むらさきから、バトンを受け取ったよ!」になる
*OnGhostChangingの$r0には、切り替え先のゴーストの本体側の名前が入る。送り出しの台詞は、相手に向けて一言で引き継ぐ- 本体側の名前は、そのゴーストの
descript.txtのsakura.nameである - それぞれの
Referenceに何が入るかは、イベントごとに異なる。UKADOC のイベントの項で調べる
お嬢様、その 1 行を書き忘れますと、どうなるのでございましょう。
名前の入らない、間の抜けた挨拶になってしまいますわ……。付加情報は、ひとりでには変数に入りませんのよ。
>transfer_req_to_varを書き忘れると、$r0は空のままになる。上の女の子の台詞は「から、バトンを受け取ったよ!」になる
ベースウェアに聞く
付加情報は、ベースウェアのほうから届けてくれるものでしたわね。では、こちらから尋ねたいときは、どうしましょうかしら。そのための書き方が $% ですの。ゴースト自身では知りえないことを、ベースウェアに聞けますわ。
*会話
女の子:@キラキラ わたしたち、$%baseware.name の上で動いてるんだね。
男の子:@通常 うん、いつも乗せてもらってるんだ。
$%プロパティ名で、ベースウェアのプロパティを読める。$%で始まる変数を、プロパティ変数と呼ぶ- プロパティ変数を使うと、ゴースト自身では知りえないことを、ベースウェアに聞ける
$%baseware.name— いま動いているベースウェアの名前が入る。出典は UKADOC の baseware.name である- プロパティ名の後ろには空白を置いて、続く台詞と区切る
- SSP の上では、上の女の子の台詞は「わたしたち、SSPの上で動いてるんだね。」になる
- このシーンの名前は
会話である。2 段目からのおしゃべりの 1 つとして、暇なときに出る
来なくなるイベント
ここにひとつ、落とし穴がありますの。切り替わってきたときには、迎え入れの挨拶に続けて起動の挨拶も出る――そう思い込んで書き進めますと、当てが外れてしまいますわ。
迎え入れの挨拶のあとに、OnBoot は来ないのでございますか。
来ませんわ。*OnGhostChanged が話したら、ベースウェアは続けて OnBoot を送ってきませんの。送り出しの *OnGhostChanging と OnClose も、同じ間柄ですわ。
| シーン | このシーンで話したとき | 何も話さずに終えたとき(204) |
|---|---|---|
*OnGhostChanged | 続けて OnBoot は来ない | ベースウェアは次に OnBoot を送ってくる |
*OnGhostChanging | 続けて OnClose は来ない | ベースウェアは次に OnClose を送ってくる |
*OnFirstBoot | 続けて OnBoot は来ない | ベースウェアは次に OnBoot を送ってくる |
- 204 は、シーンが何も話さずに終えたときに、pasta がベースウェアへ返す応答である
- この章の辞書のシーンは、どれも話す。ほかのゴーストから切り替わってきたときに、1 段目の
*OnBootの台詞は出ない - 迎え入れの挨拶は
*OnGhostChangedに、起動の挨拶は*OnBootに書く。迎え入れのシーンに、起動の挨拶を重ねて書かない - この関係はベースウェアの規則である。根拠は、UKADOC の OnGhostChanged・OnGhostChanging・OnFirstBoot・OnBoot・OnClose の項にある
辞書ファイルを足す
ghost/master/dic/07-greeting.pasta を作り、次の内容を UTF-8 で保存する。
# 7 段目:挨拶したい
# ベースウェア(SSP など)は、起動や終了、ゴーストの切り替えのたびにイベントを送ってくる。
# イベントと同じ名前のシーンを書いておくと、pasta はそのシーンを呼ぶ。
# pasta のマニュアルのイベント一覧に無いイベントも、同じ名前のシーンを書けば応答できる。
# どんなイベントがあるかは UKADOC の一覧で調べられる(https://ssp.shillest.net/ukadoc/manual/list_shiori_event.html#OnGhostChanging)。
# イベントには付加情報(Reference0、Reference1 …)が付いてくる。
# シーンの先頭で >transfer_req_to_var を呼ぶと、付加情報が $r0〜$r9 に入る。変数の後ろには空白を置いて区切る。
# ほかのゴーストから切り替わってきたとき(迎え入れ)。
# $r0 には、直前のゴーストの本体側の名前が入る(emo2 から切り替わってきたときは「むらさき」)。
# このシーンで話すと、続けて OnBoot は来ない。何も話さずに終えると(204)、ベースウェアは次に OnBoot を送ってくる。
*OnGhostChanged
>transfer_req_to_var
女の子:@笑顔 $r0 から、バトンを受け取ったよ!
男の子:@笑顔 ここからは、ぼくたちの番だね。
*OnGhostChanged
>transfer_req_to_var
女の子:@キラキラ $r0 と交代で来たよ!
男の子:@通常 ユーザーさん、よろしくね。
# ほかのゴーストへ切り替わるとき(送り出し)。OnGhostChanging は pasta のマニュアルの一覧に無いイベント。
# $r0 には、切り替え先のゴーストの本体側の名前が入る。相手に向けて一言で引き継ぐ。
# このシーンで話すと、続けて OnClose は来ない。何も話さずに終えると(204)、ベースウェアは次に OnClose を送ってくる。
*OnGhostChanging
>transfer_req_to_var
女の子:@笑顔 $r0 、あとはよろしくね!
男の子:@通常 ユーザーさん、またね。
*OnGhostChanging
>transfer_req_to_var
女の子:@キラキラ $r0 、バトンタッチだよ!
# 初めて起動したときは、OnBoot の代わりに OnFirstBoot が来る。
# このシーンで話すと、続けて OnBoot は来ない。何も話さずに終えると(204)、ベースウェアは次に OnBoot を送ってくる。
*OnFirstBoot
女の子:@笑顔 初めまして!これからよろしくね。
男の子:@笑顔 ユーザーさん、ぼくもよろしくね。
# ゴーストを閉じるときは OnClose が来る。
# 応答したら、最後に >ゴースト終了 を書いて閉じる(書かないと閉じない)。(300)は閉じるまでに待つミリ秒。
# 何も話さずに終えると(204)、ベースウェアがそのまま閉じる。
*OnClose
女の子:@通常 @終了挨拶
男の子:@通常 また呼んでよね。
>ゴースト終了(300)
*OnClose
女の子:@眠い おやすみなさい……
男の子:@通常 おやすみ。
>ゴースト終了(300)
# $%プロパティ名 で、ベースウェアのプロパティを読める。ゴースト自身では知りえないことを、ベースウェアに聞ける。
# $%baseware.name には、いま動いているベースウェアの名前が入る(https://ssp.shillest.net/ukadoc/manual/list_propertysystem.html#baseware.name)。
*会話
女の子:@キラキラ わたしたち、$%baseware.name の上で動いてるんだね。
男の子:@通常 うん、いつも乗せてもらってるんだ。
- 1〜6 段目のファイルは書き換えない。新しいファイルを
dic/に足すだけで、この段になる - 1 段目の
*OnBootも書き換えない。起動したときの挨拶は、これまでどおり*OnBootが話す *OnCloseの最後の行>ゴースト終了(300)は、ゴーストを閉じる行である。応答したら、最後にこの行を書く。書かないと閉じない(300)は、閉じるまでに待つミリ秒である*OnCloseが何も話さずに終えると、ベースウェアがそのまま閉じる@終了挨拶は、5 段目で決めた単語である- 台詞の頭の
@笑顔・@キラキラ・@通常・@眠いは、3 段目で付けた表情名である
起動して確かめる
- SSP を終了し、もう一度起動する。
- 自分のゴーストが出ていなければ、メニューから切り替える。
- 足した辞書は、起動し直すと読み込まれる。この後の 3 つの確かめは、この 2 つの手順を済ませてから始める
- 成功の目印(おしゃべり): そのまま待つと、おしゃべりの 1 つとして、女の子「わたしたち、SSPの上で動いてるんだね。」、男の子「うん、いつも乗せてもらってるんだ。」が出る
会話という名前のシーンは、この章の 1 つを足して 8 つになった。8 回のおしゃべりで、8 つの掛け合いが 1 回ずつ出る- この章の「スクリプト入力でイベントを起こす」と「閉じるときの挨拶を確かめる」の節では、開発用パレットを使う。開発者用機能は、6 段目の「開発者用機能を有効にする」 で有効にしている
メニューから emo2 と切り替える
挨拶には、お相手が要りますわね。お相手は emo2 にお願いしましょう。pasta.dll で作りこまれた、ショーケースのゴーストですのよ。
- emo2 の配布ページ から
emo2.narをダウンロードする。 emo2.narを SSP のウィンドウへドロップして、SSP に入れる。- 自分のゴーストが出ていなければ、メニューから切り替える。
- 自分のゴーストを右クリックし、メニューの「ゴースト切り替え」から emo2(メニューに出る名前は
えも??)に切り替える。 - emo2 が出たら、emo2 を右クリックし、メニューの「ゴースト切り替え」から自分のゴーストに切り替える。
- 成功の目印(手順 4 の後): 送り出しの挨拶として、次のどちらかが出る
- 女の子「むらさき、あとはよろしくね!」、男の子「ユーザーさん、またね。」
- 女の子「むらさき、バトンタッチだよ!」
- 成功の目印(手順 5 の後): 迎え入れの挨拶として、次のどちらかが出る
- 女の子「むらさきから、バトンを受け取ったよ!」、男の子「ここからは、ぼくたちの番だね。」
- 女の子「むらさきと交代で来たよ!」、男の子「ユーザーさん、よろしくね。」

- 手順 5 の後に、1 段目の「やっほー、今日もよろしくね。」は出ない。
*OnGhostChangedが話したので、OnBootは来ない - emo2 は、pasta.dll で作られたショーケースのゴーストである。配布版のゴーストの名前(
name)はえも??で、本体側の名前(sakura.name)はむらさきである - emo2 も、切り替えのイベントに応えて、相手の名前を呼んで挨拶する
スクリプト入力でイベントを起こす
お相手が手元にいないときや、初めての起動のように自然には巡ってこない場面は、こちらからイベントを起こして確かめますわ。6 段目で開けるようにした開発用パレットの「スクリプト入力」を使いますの。
- 自分のゴーストが出ている状態で
Ctrl+Shift+Dを押し、開発用パレットを開く。 - 開発用パレットの「スクリプト入力」を押す。
- 開いた入力ボックス(タイトルは Send)に、次の 3 行を 1 行ずつ入力し、1 行ごとに Enter キーを押して実行する。
\![raise,OnGhostChanged,むらさき]
\![raise,OnGhostChanging,むらさき]
\![raise,OnFirstBoot,0]
- 成功の目印(1 行目): 迎え入れの挨拶が出る。台詞は、前の節の手順 5 の後と同じ 2 つのどちらかである
- 成功の目印(2 行目): 送り出しの挨拶が出る。台詞は、前の節の手順 4 の後と同じ 2 つのどちらかである
- 成功の目印(3 行目): 女の子の吹き出しに「初めまして!これからよろしくね。」と出て、続いて男の子の吹き出しに「ユーザーさん、ぼくもよろしくね。」と出る
\![raise,イベント名,Reference0,…]は、イベントを起こすさくらスクリプトである。イベント名の後ろに書いた値が、Reference0から順に入る- 1 行目と 2 行目の
むらさきがReference0で、台詞の$r0の場所に入る。むらさきを別の名前に書き換えると、台詞の中の名前もその名前になる - 3 行目の
0は、OnFirstBootのReference0の値である。ベースウェアが送ってくる形に合わせて書いている。この章の辞書は、この値を使わない(意味は OnFirstBoot の表にある) OnFirstBootは、初めて起動したときにだけ来る。1 段目で初めての起動を済ませているので、自然には呼ばれない。確かめるときは、3 行目でイベントを起こす- スクリプト入力に入れられるのは、さくらスクリプトである。辞書の書き方(
*OnBootなど)は入れられない - 入力ボックスは、実行した後も開いたままで、入力した行が残る。次の行は、残った行を書き換えて入力する
- 開発用パレットを開けないときは、6 段目の「開発者用機能を有効にする」 の手順で開発者用機能を有効にする
\![raise,…]の説明は UKADOC のさくらスクリプト一覧 に、開発用パレットの操作の正本は SSP ヘルプの 開発用パレット にある
閉じるときの挨拶を確かめる
残るは、お別れの挨拶ですわね。ふつうに閉じれば見られますけれど、確かめるたびに起動し直すのは手間ですの。そこで、開発用パレットの「\- タグで終了しない」に助けてもらいますわ。
- 開発用パレットの「
\-タグで終了しない」を ON にする。 - 開発用パレットの「スクリプト入力」を押し、開いた入力ボックスに下の 1 行を入力して、Enter キーを押して実行する。
- 手順 2 を何度か繰り返す。
- 開発用パレットの「
\-タグで終了しない」を OFF に戻す。 - SSP を終了し、もう一度起動する。
\![raise,OnClose,user]
- 成功の目印(手順 2・3 の後): 次の 2 つの挨拶のどちらかが出て、ゴーストは閉じない
- 女の子が「またね~!」「お疲れ様!」「ばいばーい!」のどれかを話し、男の子が「また呼んでよね。」と返す
- 女の子「おやすみなさい……」、男の子「おやすみ。」
- 成功の目印(手順 5): SSP を終了するときに、上の 2 つの挨拶のどちらかが出てから、ゴーストが閉じる
\![raise,OnClose,user]のuserは、OnCloseのReference0の値である。ユーザーが終了したときに、ベースウェアはこの値を送ってくる。この章の辞書は、この値を使わない(OnClose の表)>ゴースト終了は、ゴーストを終了させるさくらスクリプト\-を出す。「\-タグで終了しない」を ON にすると、SSP はこの\-を無視するので、挨拶を繰り返し確かめられる- 開発用パレットの設定は、ゴーストごとに覚えられる。確かめ終えたら OFF に戻す。ON のままだと、
*OnCloseが話してもゴーストが閉じない
もっと詳しく
- SHIORI イベントとハンドラ(イベントの一覧と、応答の仕組み)
- シーン関数フォールバック(イベントと同じ名前のシーンを探す仕組み)
- リクエスト変数(Reference)(
>transfer_req_to_varと$r0〜$r9) - プロパティ変数(
$%baseware.name) - UKADOC の OnGhostChanging
迎えて、送って、お別れまで。これであの子たちも、どこへ出しても恥ずかしくありませんわね。
お嬢様も先ほど、画面の向こうのお客様に手を振っておいででした。
……あ、挨拶には挨拶を返すものですわ。次は、あの子たちが触られたときの反応を仕込みますわよ。