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

ノベルモード Novel Mode

ノベルモードは、biwa言語がノベルゲーム開発用言語であるために最も特徴的で重要な文法部分である。

ノベルモードはscene定義により定義されたシーンの、記号{{から始まり、記号}}で始まる行までの間である。

ノベルモードでは、ノベルゲームの最も大きな構成要素がノベルのテキストであることから、ノベルのテキストを直接記述できるように設計されている。 アクション表現に必要な各種コマンドは特殊記号(#, $, @など)により修飾された部分で記述することとなる。

scene scene1(g: MyGame) -> MyGame {{
  // この部分がノベルモード

  // `@`によって、キャラクター`biwa`が会話する
  // (メッセージウィンドウに名前やアイコンを表示する)ことを明示
  // この`こんにちは!`と`わたしは琵琶。`はそのままメッセージウィンドウに表示される
  @biwa
  こんにちは!
  わたしは琵琶。

  // `#`で始まる行は命令を記述できる
  // `${}`は値を埋め込んで出力できる(表示可能な値の型に限る)
  #let se1 = Sound::new("sounds/se1.mp3")
  #play_se(se1)
  #if g.states.got_point > 50 {
    @akane
    @akane.appear_in(0, 0)
    すごいね、${g.states.got_point}ポイントも獲得しているよ!
  } else {
    まだポイントが足りないよ
  }
}}

<nobel-mode>

::= <^> <raw-novel-text> <$>
| <novel-mode-statement>

ノベルモードでは、

  • ノベルテキストそのもの
  • 制御構文やコマンドなどの文

のいずれかを使用できる。後者は文(<statement>)とほとんど同じであるが、あらゆる構文は明示的に改行が示されている箇所以外に改行があってはならない(その中で使われている<expression>についても同様に改行が含まれていてはならないが、それ以外の構文は同じである)。

ここでは、行頭を<^>、行末(改行)を<$>で表すことにする。

<novel-mode-statement>

::= <^> # <expression> <$>