選択肢とウェイト

湊には、選択肢やウェイト専用の構文はありません。 SAKURAスクリプトの \q[…] や \w… をセリフの中にそのまま書きます。

選択肢

選ばれたらイベントを実行する

\q[ラベル,ID] で選択肢を出します。 ID を On で始まる名前にすると、選ばれたときにSSPがそのイベントを直接実行します。 選ばれたときのトークを、その名前で定義してください。

OnBoot => {
    湊: どっちにしますか?
    \q[りんご,OnApple]
    \q[みかん,OnOrange]
}

OnApple => {
    湊: りんごですね。
}

OnOrange => {
    湊: みかんですね。
}
\0どっちにしますか?\n\q[りんご,OnApple]\n\q[みかん,OnOrange]\e
\0りんごですね。\e
\0みかんですね。\e

1行目が OnBoot の出力、2行目と3行目がそれぞれの選択肢を選んだときの出力です。

\q[…] だけの行は、直前のセリフに \n(改行)付きでつながります。 選択肢が縦に並ぶのはこのためです。

選択肢に値を持たせる

\q[ラベル,OnID,値0,値1] のように、IDのあとに値を続けられます。 値は、選ばれたイベントの reference["0"]、reference["1"] に入ります。 同じイベントで、選ばれた選択肢を見分けたいときに使います。

OnBoot => {
    湊: お茶にしますか?
    \q[はい,OnAnswer,はい]
    \q[いいえ,OnAnswer,いいえ]
}

OnAnswer => {
    湊: 「${reference["0"]}」ですね。
}
\0お茶にしますか?\n\q[はい,OnAnswer,はい]\n\q[いいえ,OnAnswer,いいえ]\e
\0「はい」ですね。\e
\0「いいえ」ですね。\e

reference についてはnow・referenceの使い方も見てください。

選択肢の名前のトークを呼ぶ

ID を On で始めないと、SSPは OnChoiceSelect イベントを送り、reference["0"] にIDを入れます。 OnChoiceSelect で call reference.0 と書けば、IDと同じ名前のトークを呼べます。 選択肢を増やしても、OnChoiceSelect を書き換える必要はありません。

OnBoot => {
    湊: どっち?
    \q[はい,はい]
    \q[いいえ,いいえ]
}

OnChoiceSelect => {
    call reference.0
}

はい => {
    湊: はいが選ばれました。
}

いいえ => {
    湊: いいえが選ばれました。
}
\0どっち?\n\q[はい,はい]\n\q[いいえ,いいえ]\e
\0はいが選ばれました。\e
(204)
  • 同じ名前のトークが複数あれば、その中からランダムに1つ選ばれます。
  • 存在しない名前のときは何も出力されません(上の例の3行目。SHIORIの応答は204になります)。エラーにはなりません。

call reference.0 は動的なcallです。構文チェッカーで notice が出ることがありますが、無視してかまいません。

選択肢を条件で出す

\q[…] の行を if で囲むと、条件を満たすときだけ選択肢を出せます。

OnBoot => {
    湊: どれにしますか?
    \q[りんご,OnApple]
    if (save.見た) {
        \n\q[みかん,OnOrange]
    }
}

OnSet => {
    global save.見た = true
}
\0どれにしますか?\n\q[りんご,OnApple]\e
(204)
\0どれにしますか?\n\q[りんご,OnApple]\n\q[みかん,OnOrange]\e

if の中の \q[…] は直前のセリフにつながらないので、改行の \n を自分で書いてください。

ウェイト

湊は、ウェイトを自動では入れません。何も書かないと、間を置かずに一気に表示されます。 間を空けたいところに、SAKURAスクリプトのウェイトを書いてください。

書き方意味
\w1〜\w950ミリ秒×数字だけ待つ(\w5 で250ミリ秒)
\_w[500]指定したミリ秒だけ待つ
OnBoot => {
    湊: えっと……\w9\w9それは\_w[1000]秘密です。
}
\0えっと……\w9\w9それは\_w[1000]秘密です。\e

文字列の中でも \ は1つ

"…" の文字列の中でも、ウェイトは \w5 と1つのバックスラッシュで書きます。 \\w5 と2つ書くと、\\ がそのまま残り、SSPには「\ という文字を表示する」と解釈されてしまいます。

OnBoot => {
    let ok = "あ\w5い"
    let ng = "あ\\w5い"
    湊: ${ok}|${ng}
}
\0あ\w5い|あ\\w5い\e

句読点にまとめてウェイトを付ける

replace を使った関数を作っておくと、句読点のあとにウェイトを付けられます。

func wait(s) {
    return replace(replace(s, "、", "、\w3"), "。", "。\w9")
}

OnBoot => {
    湊: ${wait("今日は、いい天気ですね。")}
}
\0今日は、\w3いい天気ですね。\w9\e

この関数は、使うセリフごとに ${wait("…")} と書く必要があります。 ゴースト全体の出力にまとめて付けたいときは、SSPの OnTranslate イベントを使う方法があります。 詳しくは移行ガイドの3. イベントを見てください。