<option>要素

 $ σ_σ$  < option要素はコマンドを設定するところよ。
 Σc ' _' )  < ここの充実度がゲームの深みを決めるぜ。

概要

 ユーザが入力するコマンドを設定する要素。
 通常select要素に含まれ、動詞と名詞の1〜2階層が作られる。

 option要素が複数並んでいる場合は上から順に判定され、最初に条件に合ったoptionの内容が実行される。

 option要素の中には、textioを除く要素が配置できる。
 ただし、option要素と同じ階層に配置できるのはoption要素のみ(selectの召喚要素も置けるが、実行時にoption要素に展開されるので、やっぱり置いているのはoption要素)

文脈(コンテクスト)

包含要素(select,option要素内)

<select>
	<option noun="カベ">
		<option verb="ミル">
			<p>しっくいのカベだ。</p>
		</option>
		<option verb="タタク">
			<p>硬くはないが崩れそうな気もしない。</p>
		</option>
	</option>
</select>

 option要素は2階層を作れるが、その際noun属性をもつものとverb属性を持つものを組み合わせる必要がある。
 出現順はverb→nounでも、その逆noun→verbでも良い。

 noun、verb他の条件に適合すると、内容が実行され、select要素のループから抜ける。

包含要素(select,option要素内)

<select>
	<option verb="ネル"/>
</select>

 optionは例外的に、idが付いていない空要素を置ける。包含要素ではあるが何も含んでいない。

 noun、verb他の条件に適合すると、何も実行せず、select要素のループから抜ける。
 条件に合うコマンドが入力されたら次に進む、というタイプのシナリオを作る際に使える。

定義要素(textio要素内 id付き)

<option id="wall" noun="カベ">
	<option verb="ミル">
		<p>しっくいのカベだ。</p>
	</option>
</option>

 textio要素直下(トップレベル)にidを付けて配置すると、召喚要素を使って呼び出せる。

召喚要素(select,option要素内 id付き)

<option id="wall"/>

 id付き空要素は定義要素が呼び出される。

属性

verb属性

 半角カナの動詞を;区切りで列挙する。その中のどれか一つに入力したコマンドが該当するとoption属性に含まれた部分が実行される。

 値の最後に;があるverb属性は、単語入力がない場合の代替値として使われる。その際、先頭の単語がコマンドとして表示される。
 代替値となるのは同階層の最初にある一つだけ(ただし条件によって分けることはできる)

 先頭に!演算子を書くと、それ以外の意味となる。
 これは例えば、パスワードのようにある一つの入力以外は受け付けない、といった場合の入力が間違いであった時の処理などに使う。
 具体的には、noun="!12345"のように書く。
 大抵はelse要素を使った方が分かりやすい。

 値にワイルドカードが使えverb="*"と表記することで、動詞・名詞ともに何を入力しても反応する選択肢ができる。
 一階層のoptionでのみ使用でき、後述のatto属性の値はkeepとして動作する。
 なにを入力しても反応するので、より厳しいコマンド回数制限を行う場合などに使うといいだろう。

<option verb="*"><p> コマンドが理解できません。</p></option>

noun属性

 基本的にverb属性と同じ性質を持つ。

 nounのワイルドカードはverbと組みあわせ、例えば、パスワード入力などに使う。

<option verb="イレル">
	<option noun="5648" atto="keep" at="テンキー">
		<p>正解!!</p>
	</option>
	<option noun="*" atto="keep" at="テンキー">
		<p>入力失敗…</p>
	</option>
</option>

 verbと異なる点は、後述のatto属性の指定がない場合、atの値(注目名詞)として使われるところ。

atto属性

 atto属性は入力した名詞を注目するかどうかを指定する。
 階層中にnoun属性を含んでいる場合には、最後のoption要素にatto属性が使える。

 atto属性を書くのはnoun属性があるoption要素ではなく、最後に判定されるoption要素に書く。
 else節がある場合、else要素でも指定の必要がある。指定忘れに気をつけて欲しい。

 atto属性の指定は、注目して欲しくない場合はatto="keep"、注目名詞を消す場合はatto=""を指定する。
 入力した名詞に注目する場合は、atto属性自体を指定しない。

<option noun="アタリ">
	<option verb="ミル;" atto="" item="ライト">
		<p>湿ったカベに囲まれたヘヤだ。</p>
	<else atto="keep"/>
		<p>アタリはクラヤミに包まれている。</p>
	</option>
</option>

 ちなみに、attoは「set "at" to XXX」の略。

条件分岐

適用可能な判定属性

 option要素はvar、i、item、at、pla属性による条件判定が可能。
 条件属性が複数ある場合は、andで判定が行われる。

<option verb="アケル" item="カギ" var="removeNail"><p>ドアを開いた。</p></option>

 option要素にat属性による判定を付加することで、3単語入力ができる。

<option noun="カギ">
	<option verb="サシコム" at="ドア"><p>ドアを開いた。</p></option>
</option>

 上記は「ドア>サシコム カギ」とコマンド入力された場合を示す。

else節

 option要素はelse要素を含める。
 option要素で何らかの判定属性が設定されていないと、else節は実行されない。
 noun属性とverb属性はelseでは判定されず、必ずoption要素に配置する。
 そのため、次のact要素を含む記述も含まない記述も、同様の判定となる。

<option verb="アケル">
	<act item="カギ">
		<p>ドアを開いた。</p>
	<else/>
		<p>ドアが開かない。</p>
	</act>
</option>

 elesの前も後ろも、コマンド判定までは済んでいると判断して処理されるので、上記のようにact属性によって括る必要はなく、省略できる。

<option verb="アケル" item="カギ">
	<p>ドアを開いた。</p>
<else/>
	<p>ドアが開かない。</p>
</option>

 atto属性はelse要素で個別に指定する。行動の結果によって、注目名詞が異なる方が自然だからだ。

<option  verb="アケル" item="カギ" atto="">
	<p>ドアを開いてニワに出た。</p>
	<go href="#garden"/>
<else atto="keep"/>
	<p>ドアは開かない。</p>
</option>