Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 段目で付けた表情名である

起動して確かめる

  1. SSP を終了し、もう一度起動する。
  2. 自分のゴーストが出ていなければ、メニューから切り替える。
  • 足した辞書は、起動し直すと読み込まれる。この後の 3 つの確かめは、この 2 つの手順を済ませてから始める
  • 成功の目印(おしゃべり): そのまま待つと、おしゃべりの 1 つとして、女の子「わたしたち、SSPの上で動いてるんだね。」、男の子「うん、いつも乗せてもらってるんだ。」が出る
  • 会話 という名前のシーンは、この章の 1 つを足して 8 つになった。8 回のおしゃべりで、8 つの掛け合いが 1 回ずつ出る
  • この章の「スクリプト入力でイベントを起こす」と「閉じるときの挨拶を確かめる」の節では、開発用パレットを使う。開発者用機能は、6 段目の「開発者用機能を有効にする」 で有効にしている

メニューから emo2 と切り替える

クローディア(にっこり)

挨拶には、お相手が要りますわね。お相手は emo2 にお願いしましょう。pasta.dll で作りこまれた、ショーケースのゴーストですのよ。

  1. emo2 の配布ページ から emo2.nar をダウンロードする。
  2. emo2.nar を SSP のウィンドウへドロップして、SSP に入れる。
  3. 自分のゴーストが出ていなければ、メニューから切り替える。
  4. 自分のゴーストを右クリックし、メニューの「ゴースト切り替え」から emo2(メニューに出る名前は えも??)に切り替える。
  5. emo2 が出たら、emo2 を右クリックし、メニューの「ゴースト切り替え」から自分のゴーストに切り替える。
  • 成功の目印(手順 4 の後): 送り出しの挨拶として、次のどちらかが出る
    • 女の子「むらさき、あとはよろしくね!」、男の子「ユーザーさん、またね。」
    • 女の子「むらさき、バトンタッチだよ!」
  • 成功の目印(手順 5 の後): 迎え入れの挨拶として、次のどちらかが出る
    • 女の子「むらさきから、バトンを受け取ったよ!」、男の子「ここからは、ぼくたちの番だね。」
    • 女の子「むらさきと交代で来たよ!」、男の子「ユーザーさん、よろしくね。」

女の子「むらさきから、バトンを受け取ったよ!」、男の子「ここからは、ぼくたちの番だね。」と吹き出しに出ている画面

  • 手順 5 の後に、1 段目の「やっほー、今日もよろしくね。」は出ない。*OnGhostChanged が話したので、OnBoot は来ない
  • emo2 は、pasta.dll で作られたショーケースのゴーストである。配布版のゴーストの名前(name)は えも?? で、本体側の名前(sakura.name)は むらさき である
  • emo2 も、切り替えのイベントに応えて、相手の名前を呼んで挨拶する

スクリプト入力でイベントを起こす

クローディア(素)

お相手が手元にいないときや、初めての起動のように自然には巡ってこない場面は、こちらからイベントを起こして確かめますわ。6 段目で開けるようにした開発用パレットの「スクリプト入力」を使いますの。

  1. 自分のゴーストが出ている状態で Ctrl+Shift+D を押し、開発用パレットを開く。
  2. 開発用パレットの「スクリプト入力」を押す。
  3. 開いた入力ボックス(タイトルは 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 ヘルプの 開発用パレット にある

閉じるときの挨拶を確かめる

クローディア(考え中)

残るは、お別れの挨拶ですわね。ふつうに閉じれば見られますけれど、確かめるたびに起動し直すのは手間ですの。そこで、開発用パレットの「\- タグで終了しない」に助けてもらいますわ。

  1. 開発用パレットの「\- タグで終了しない」を ON にする。
  2. 開発用パレットの「スクリプト入力」を押し、開いた入力ボックスに下の 1 行を入力して、Enter キーを押して実行する。
  3. 手順 2 を何度か繰り返す。
  4. 開発用パレットの「\- タグで終了しない」を OFF に戻す。
  5. SSP を終了し、もう一度起動する。
\![raise,OnClose,user]
  • 成功の目印(手順 2・3 の後): 次の 2 つの挨拶のどちらかが出て、ゴーストは閉じない
    • 女の子が「またね~!」「お疲れ様!」「ばいばーい!」のどれかを話し、男の子が「また呼んでよね。」と返す
    • 女の子「おやすみなさい……」、男の子「おやすみ。」
  • 成功の目印(手順 5): SSP を終了するときに、上の 2 つの挨拶のどちらかが出てから、ゴーストが閉じる
  • \![raise,OnClose,user] の user は、OnClose の Reference0 の値である。ユーザーが終了したときに、ベースウェアはこの値を送ってくる。この章の辞書は、この値を使わない(OnClose の表)
  • >ゴースト終了 は、ゴーストを終了させるさくらスクリプト \- を出す。「\- タグで終了しない」を ON にすると、SSP はこの \- を無視するので、挨拶を繰り返し確かめられる
  • 開発用パレットの設定は、ゴーストごとに覚えられる。確かめ終えたら OFF に戻す。ON のままだと、*OnClose が話してもゴーストが閉じない

もっと詳しく


クローディア(したり顔)

迎えて、送って、お別れまで。これであの子たちも、どこへ出しても恥ずかしくありませんわね。

アンソニー(素)

お嬢様も先ほど、画面の向こうのお客様に手を振っておいででした。

クローディア(照れ)

……あ、挨拶には挨拶を返すものですわ。次は、あの子たちが触られたときの反応を仕込みますわよ。