コマンドで分岐させましょう

 $ σ_σ$  < いよいよインタラクティブフィクションの本領、コマンド入力よ!
 Σc ' _' )  < そして分岐だ! 分けまくるぜ!

コマンド入力

 前回メッセージを表示することができました。TEXTIOのO(output)ができたわけです。
 今回は、TEXTIOのI(intput)を解説します。

 実際の入力部分はシステム(textio.swf)が担当するので、シナリオで書くのは入力されたコマンドに対する反応(リアクション)の部分です。

<?xml version="1.0" encoding="UTF-8"?>
<textio>
<act>
<p> 人形がある。</p>
<select>
	<option verb="ミル;">
		<p> 今にも動き出しそうだ。</p>
	</option>
	<option verb="タタク;サワル;ナデル;ツツク;コヅク;ケル;ナグル">
		<p> ふらふらと揺れた。</p>
	</option>
</select>
</act>
</textio>

各要素の説明

select要素

<select></select>

 このselect要素で囲んだところは、入力に対応する部分ですよ、という宣言。
 それ以外の意味はほとんどないので、textio→act→selectまでの関係は、自動的に書く感じになります。

 Σc ' _' )  < とにかく書いとけ、みたいなんで解説になってんの?
 $ σ_σ$  < 考えなくていいんだから、楽でいいんじゃない。

 簡単ですね!

 さて、select要素が出現したところでコマンド入力が開始され、次に解説するoption要素で設定したコマンドが入力されない限り、ずっと入力を受け付けます。

option要素

 次に出てくるのがoption要素です。
 select要素の中に複数配置できて、配置しただけ受け付けるコマンドが増えます。
 これがコマンド処理、ひいてはテクスティオの根幹となる要素と言えます。

<option verb="ミル">
	<p> 今にも動き出しそうだ。</p>
</option>

 verbは動詞という意味で、ここに受け付ける動詞(単語・コマンド)を書きます。
 ここでは、verb="ミル"と書いてあるので、ミルという動詞を受け付けます。

 入力がverb属性に書いた動詞に合致した場合、option要素の中が実行されます。
 この場合はp要素が実行されて、メッセージが表示される、というわけです。
 optionの中には複数の要素を入れることもできます。

既定コマンド

<option verb="ミル;">
	<p> 今にも動き出しそうだ。</p>
</option>

 上記の例ではミルの後に;が書いてありverb="ミル;"となっています。
 こうすると、最初に書かれた単語が、動詞が入力されなかった場合に、既定コマンドとして利用されます。
 コマンドを入力せずに、改行(enter/return)キーを押した場合に、ミルが入力されたと見なされるので、プレイヤーは入力で楽ができますし、ミルに設定しておけば、ひとまず状況を確認することができます。
 インタラクティブフィクションは、ミルによって返って来たメッセージを起点にして、プレイを広げていくのが基本ですから、そこが自動になっているのは、かなり便利です。
 もちろん、シナリオによっては、ミル以外を規定値に設定した方が適切な場面もあります。
 なお、複数のverb属性の末尾に;が現れた場合、より上にある方を優先します。

コマンド列挙

<option verb="タタク">
    <p> ふらふらと揺れた。</p>
</option>
<option verb="サワル">
    <p> ふらふらと揺れた。</p>
</option>
<option verb="ナデル">
    <p> ふらふらと揺れた。</p>
</option>
<option verb="ツツク">
    <p> ふらふらと揺れた。</p>
</option>
<option verb="コヅク">
    <p> ふらふらと揺れた。</p>
</option>
<option verb="ケル">
    <p> ふらふらと揺れた。</p>
</option>
<option verb="ナグル">
    <p> ふらふらと揺れた。</p>
</option>

 iFはプレイヤーが自由に単語を入力できるので、多くの単語に対応しておいた方がプレイ感覚は良くなります。
 あまりに入力を受け付けてくれないと、プレイヤーのやる気が落ちてくるのです。
 例のようにoption要素を増やして、色々な単語に反応するように作るのが望ましいと言えます。

 でも、作る方にもやる気があります。思いつく限りの単語にいちいち対応していては、完成するゲームも完成しません。

<option verb="タタク;サワル;ナデル;ツツク;コヅク;ケル;ナグル">
	<p> ふらふらと揺れた。</p>
</option>

 そこで上記のように、同じ反応をする単語は;で区切って一気に並べます。
 こうすると列挙された単語のどれが入力されてもoption要素内が実行されます。
 見ての通り、option要素を列挙するより圧倒的に楽です。
 プレイヤーは多くの単語に反応が用意されて嬉しく、制作者は少ない労力で対応単語を増やせて嬉しい、一挙両得なシステムです。

 これでかなりゲームらしい感じになってきました。
 その上、プレイヤー側にも制作者側にも手抜き方法も用意されています。
 簡単ですね!

 $ σ_σ$  < 自分でプログラム書いた方が簡単、って人もいそうなくらい簡単ね。
 Σc;' Д' )  < テクスティオは、もっと色々できますから!! できますからー!!!

 これで、textioactpselectそしてoptionの6要素を紹介しました。かなり本格的になってきたと言えるでしょう。
 今回までの内容で作れるスライムいじりというサンプルゲームを用意しました。
 ゲーム作りの参考にしたり、単に遊んだりしてみてください。 

まとめ

  • select要素で囲むとコマンド入力開始。
  • option要素はコマンドの受け皿。沢山並べよう。
  • verb属性に;で区切って単語を列挙。
  • verb属性の最後の;は既定コマンドのしるし。

 分岐できるようになったとはいえ、メッセージが変わるだけでは寂しいですね。
 「いや、十分楽しい」って人も多い気もしますが、流れ的に寂しいということにしてください。
 次回は、actを変更してシナリオを進行させる方法を解説します。