コマンドで分岐させましょう
$ σ_σ$ < いよいよインタラクティブフィクションの本領、コマンド入力よ! Σ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;' Д' ) < テクスティオは、もっと色々できますから!! できますからー!!!
これで、textio、act、p、selectそしてoptionの6要素を紹介しました。かなり本格的になってきたと言えるでしょう。
今回までの内容で作れるスライムいじりというサンプルゲームを用意しました。
ゲーム作りの参考にしたり、単に遊んだりしてみてください。
まとめ
- select要素で囲むとコマンド入力開始。
- option要素はコマンドの受け皿。沢山並べよう。
- verb属性に;で区切って単語を列挙。
- verb属性の最後の;は既定コマンドのしるし。
分岐できるようになったとはいえ、メッセージが変わるだけでは寂しいですね。
「いや、十分楽しい」って人も多い気もしますが、流れ的に寂しいということにしてください。
次回は、actを変更してシナリオを進行させる方法を解説します。