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

アクション行

さあ、いよいよキャラクターたちが口を開きますわ。 「誰が、何を話すか」――それを書くのがアクション行ですの。 ここがゴーストの命、いちばん楽しいところですわよ。張り切って参りましょう!


アクション行は、キャラクター(アクター)の発言や演出を記述する行である。基本形は「アクター名 : アクション内容」であり、内容には通常テキストとインライン要素を自由に組み合わせられる。

基本構文

アクター名:アクション内容

コロンの前がアクター名、後ろがアクション内容となる。

会話
    ぱすた:今日はいい天気だね
    ラザニア:そうですわね、散歩に参りましょうか

アクター名は会話だけでなく、さくらスクリプトによる表情指定などアクション全般を制御する。

アクターの省略

一度アクターを指定すると、続く行ではアクター名を省略し、コロンだけで前の発話を継続できる。

長い会話
    ぱすた:今日はね
    :とてもいい天気なんだ
    :だから散歩に行こうと思ってるんだ

    ラザニア:よろしくてよ!
    :ご一緒いたしますわ!

インライン要素

アクション内容には次の要素を埋め込める。

要素構文説明
通常テキストこんにちは任意の文字列
単語参照@word_name登録済み単語からランダム選択
単語参照(動的)@$var_name変数値を単語名として参照
@エスケープ@@リテラルの「@」を 1 文字出力
変数参照$var_name変数値を展開
関数呼び出し@func_name()Lua 関数を呼び出し
関数呼び出し(引数)@func(x:10)名前付き引数で呼び出し
さくらスクリプト\n \w8 \s[0]表情・タイミング制御
いろいろ
    ぱすた:こんにちは、$player_name さん!\w8
    ぱすた:今日の天気は@weather_words ですね\n
    ぱすた@greet(time:morning)

重要: アクション内では変数の参照$var)のみ可能。変数の宣言・代入($var:value)は専用の変数代入行で行う(変数・スコープ)。

インライン要素の区切り

行は左から右へ走査され、マーカー文字(\ )で分岐して各要素が最長一致で切り出される。識別子の終端は、空白による区切り、または識別子に含まれない文字の出現で決まる。

空白による区切り

空白はトークン区切りとして認識され、空白の数に関係なく 1 つの区切りとして扱われる。区切りの空白は出力に含まれない。

@挨拶 みんな!      → 単語参照「挨拶」+ 通常テキスト「みんな!」
@挨拶   みんな!  → 同じ出力(空白数は無関係)
$name さん         → 変数参照「name」+ 通常テキスト「さん」

空白がない場合(最長一致)

空白で区切られない場合、識別子に含まれない文字が現れるまでを最長一致で取り込む。

@挨拶、みんな!        → 単語参照「@挨拶」+ 通常テキスト「、みんな!」(読点は識別子外)
$name!                → 変数参照「$name」+ 通常テキスト「!」
@weather_wordsですね  → 識別子「@weather_wordsですね」として吸収(意図しない例)

意図せず後続が吸収されるのを防ぐには、空白で区切る(@weather_words ですね)か、読点など識別子に含まれない記号で区切る(@weather_words、ですね)。

行継続

インデントした行を続けると、前行の発話に連結される。

長文
    ぱすた:長い台詞は
        複数行に分けて
        記述できます

継続行は行マーカー( )で始めてはならない。これらで始まると別の行種として解釈される。

改行

アクション行内の改行には 2 通りがある。

  • さくらスクリプトの \n: 常に「改行」として解釈され、出力に改行文字が挿入される。
  • 継続行内の空行(糖衣構文): 行継続の領域で、インデントのみで内容のない行(空白だけ、または空行)は 1 改行として解釈される。連続する空行はその数だけ連続改行になる。
改行例
    ぱすた:1行目。
        1行目の続き。

        2行目。

上の例の出力は「1行目。1行目の続き。\n2行目。」となる(空行が 1 改行として解釈される)。継続行以外の空行(インデントなしの空行など)はレイアウト用として無視され、改行にはならない。

細かいタイミング制御には、さくらスクリプトの \w 等を使うのが推奨される(さくらスクリプト)。


これでキャラクターが生き生きと喋り出しますわ。 変数や単語を混ぜれば、表現は無限に広がりますのよ。次は表情を操る「さくらスクリプト」へ。

権威的仕様: アクション行の厳密な定義は doc/spec/06-action-line.md を参照。インライン要素の各論は 変数・スコープ単語定義さくらスクリプト も参照。