<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>