サウンドノベルプレーヤー 「のべ〜る」

【ゾウリムシでもわかるサウンドノベル制作講座】



■ 第07回:応用編B 選択と分岐

くににん「さて今回はいよいよ選択肢と分岐の話をしよう」
フィー「分岐というと、いよいよ一本道ノベルじゃなくなるんですね」
くににん「そうだね。ノベルはアクションゲームではないから、読者が関与できるところ
といえば選択肢を選ぶくらいしかない。のべ〜るでは、3択分岐のみだが
選択処理をサポートしている。書き方は、↓こんな感じだ」

【3択処理】

#select3 {
選択肢1
選択肢2
選択肢3
/
選択肢1を選んだときの処理
/
選択肢2を選んだときの処理
/
選択肢3を選んだときの処理
}

フィー「あー、基礎編の最初で { とか / を使わないように・・・と書いてあったのは
ここで区切り文字に使っているからだったんですね」
くににん「そのとおり。ついでに、テキスト中の TAB や改行が画面への表示で無視
される仕様になっているのは、こういうブロック構文をテキスト文中に見やす
い形で書き入れたかったからなんだ」
フィー「選択肢○を選んだときの処理 と書いてある部分は、普通に文章を続けて
書いてしまっていいんですか?」
くににん「普通に文章を続けてかまわないし、コマンドも記述できる。ただし行頭の
インデントはスペースじゃなくてTABでそろえてほしい。TABはいくつ入れて
も画面表示には影響しない。」
フィー「ところで、選択肢を選んだあとの処理がものすごく長くなっちゃったときはどう
しましょうか。この構文の中で書ききれない場合もあると思いますけど」
くににん「そんなときは、テキスト文章の別の場所にジャンプしてしまえばいい」
フィー「ジャンプ?」
くににん「テキストの好きなところにラベルを書いて、そこに処理を飛ばすことができる
んだ。↓こんなふうに書けばいい」

【ラベル】 * で始まり : で終わる32文字以内の英数字シンボル。画面には
表示されない。大文字/小文字は区別される。また、ラベルは必
ず行頭に書く必要がある。


*TOP:
*LABEL:
*LOOP_TOP:

【ジャンプ処理】

#jump ラベル名



*TOP:

その晩、俺は旅先の宿で酔っ払いのおやじと相部屋になってしまった。#w ;

*LABEL:
おやじ「さあさあ、飲め、飲め、ぐいーっと飲め!」
#select3 {
いや、遠慮しておきます
寝たふりをする
おう、ぐいーっと行くぜ!
/
俺 「いや、遠慮しておきます」#w ;
おやじ「なにーぃ?貴様、わしの酒が飲めんのかぁ?」#w ;
私 「そそそそーゆー訳では…」#w ;
…いかん。このおやじは完全に出来上がっている。#w ;
#page
#jump *LABEL:
/
俺は、寝たふりをして豪快なおやじの高笑いをかわそうとした。#w
…が、おやじは高笑いをしながら俺の肩をつかんで激しくゆすりだし、
さらに首根っこを鷲づかみにしてマラカスのように振りだした。#w
これではたまらない。#w

#page
「わかりました、わかりましたよ…もう」#w ;
俺が起き上がると、おやじは話し相手ができたことをたいそう喜び、
頼みもしないのに杯を押し付けて日本酒を注ぎだした。#w
#page
#jump *LABEL:
/
「おう、ぐいーっと行くぜ!」#w ;
今夜は他にすることもないので、俺はこの酔っ払いおやじに
しばし付き合うことにした。#w どうせならワンゲル系のノリのいい
女子大生なんかが好みだが、まあ贅沢を言っても仕方がない。#w ;
}
;
#page
「乾杯〜!」;
なかばやけくそになって飲みはじめた俺は、いつのまにかこのおやじの唇に
いいしれぬ魅力を感じ始めていた。#w ;
やばい…#w 俺にそんな趣味があろうとは(汗);
;
【とりあえずここまで】
#halt




フィー「あー、ラベルって、こういう使い方をするんですか・・・!」
くににん「この機能があると、処理の分岐を記述するのがラクになるんだ。上の例はプ
レイヤーが作者の思惑どおりの選択をするまでループするようになっているけ
ど、別の場所に飛ばして違うストーリーに分岐していってもいい」
フィー「わき道にそれてバッドエンド・・・みたいな展開が思い浮かびますね。それにし
ても・・・もうちょっとまともなサンプルはないんですか。これじゃ全部バッドエンド
になりそうですよ〜」
くににん「まあ、あくまでもサンプルだしw」
フィー「それはともかく、ラベルについて、なにか注意したほうがいい点はありますか」
くににん「ひとつの文書ファイル中で、同じ名前のラベルを何度も使わないようにお願い
したいね。のべ〜るのシステムはラベルをテキストの先頭から単純にサーチして
いくから、同じ名前のラベルがたくさんあっても常に最初にヒットしたラベルしか
認識しないんだ。」
フィー「ほかのファイルの文章に飛んでいきたいときは、どうすればいいんですか」
くににん「#file_change コマンドを使う。基礎編の冒頭で config.txt から処理を飛ば
したのと一緒だね。」


【別のスクリプトファイルに制御を移す】

#file_change ファイル名 ラベル


フィー「ここまでくると、シーン別にファイルを分けておいて、選択肢に応じて処理を移
してもよさそうですね」
くににん「そうだね。これを覚えるとかなり大規模な作品でもつくれると思う。」
フィー「ということで、今回は・・・」
くににん「ちょっと待った」
フィー「はい?」
くににん「ひとつだけ、付け加えておくことがあるんだ。選択肢コマンドは一度に3行ぶん
の画面領域を使うから、テキストが画面いっぱいに表示された状態では選択
肢を表示できなくなって警告メッセージを出すことがある。そんなときは適当に
改ページを入れるなどして画面レイアウトを工夫してほしい」
フィー「な・・・なるほど(^^;)」
くににん「とゆーことで、今回はここまで♪」




【今回のまとめ】

1) 3択処理

#select3 {
選択肢1
選択肢2
選択肢3
/
選択肢1を選んだときの処理
/
選択肢2を選んだときの処理
/
選択肢3を選んだときの処理
}

2) ラベルジャンプ

【ラベル】 * で始まり : で終わる32文字以内の英数字シンボルで、
行頭に書いてある必要がある。テキスト中に書いてあっても
画面には表示されない。

【ジャンプ処理】

#jump ラベル名

【別のスクリプトファイルにジャンプ】

#file_change ファイル名 ラベル