定義要素でまとめましょう

 $ σ_σ$  < 召喚要素は、あらかじめ定義した内容を呼び出す空要素よ。
 Σc ' _' )  < しょうかんがえることもできるね……勢いで言った、今は反省している。

召喚要素

 テクスティオは、要素がある場所や使っている属性によって機能が大きく変わる、文脈依存型の言語です。
 特に今回解説する召喚要素と定義要素は、テクスティオの特徴的な要素の使い方で、なかなか便利なので、ぜひ身に付けておきましょう。

<?xml version="1.0" encoding="UTF-8"?>
<textio>
<act><select>
<option verb="ミル;"><option noun="ヘヤ;アタリ;マワリ;" atto=""><p id="room"/></option></option>
<option verb="イク;デル;"><option noun="ベランダ;ソト" atto=""><go href="#veranda"/></option></option>
<option id="self"/>
</select></act>

<act id="veranda"><select>
<option verb="ミル;"><option noun="ベランダ;アタリ;マワリ;" atto="">
	<p> ヘヤから張り出したベランダにいる。</p>
</option></option>
<option verb="イク;ハイル;"><option noun="ヘヤ;ナカ" atto=""><go href="#start"/></option></option>
<option id="self"/>
</select></act>

<p id="room"> ヘヤのソトにはベランダがある。</p>

<option id="self" noun="ジブン">
	<option verb="ミル;"><p> 派手な軽装……常夏気分に浮かれているな。</p></option>
</option>
</textio>

各要素の説明

id属性付き空要素

<option id="self"/>

 actpselectoptionのid属性付き空要素は、そのものではなく、同じidを持ったトップレベルの同じ要素が代わりに実行されます。
 このような「id属性付き空要素」をテクスティオでは「召喚要素」と言います。

 Σc ' _' )  < あー、意味わかんねー。
 $ σ_σ$  < 意味は分かるけど、入れ替わって何が嬉しいの?

 今回のサンプルでは、id="self"のoption要素が入れ替わっています。
 ジブンや手持ちのアイテムのように、場所(act)が変わっても常に反応する名詞で、特にその反応に変化も必要ない場合、一カ所に反応をまとめて書いて、それを使い回す方が楽です。

 Σc ' _' )  < はー、分かったような分からんような。
 $ σ_σ$  < つまり、複数箇所で使わないと意味ないのね。

 確かに、このサンプルの<p id="room"/>のような使い方は、あまり意味がありません。

トップレベルのid属性付き要素

<option id="self" noun="ジブン">
	<option verb="ミル;"><p> 派手な軽装……常夏気分に浮かれているな。</p></option>
</option>

 id属性付き空要素と置き換えられるのが、textio要素の直下(トップレベル)に書かれたid属性付き要素です。
 このような「トップレベルのid属性付き要素」をテクスティオでは「定義要素」と言います。

 idの内容が同じでも、要素が異なると別のものと判断されます。
 つまり、<act id="sample">と<p id="sample">、<select id="sample">、<option id="sample">は別物として扱われます。

 Σc ' _' )  < そりゃそーじゃねーの? って感じの説明だな。
 $ σ_σ$  < そりゃそう、ってことは直感的な仕様というわけね。

 act要素以外は、トップレベルに存在する場合は必ず定義要素です。
 ほとんどの要素は、召喚要素がトップレベルの定義要素とそのまま入れ替わりますが、select要素のみは、selectの内容(つまり、いくつかのoption要素)と入れ替わります。
 詳しくは各要素のリファレンスを参照してください。

 今回紹介したのは他のプログラミング言語では、サブルーチンとか関数とか言われているものです。
 なかなか奥深いものなので、基本的な使い方が分かっても、使いこなすのはなかなか難しいかもしれません。
 とはいえ、使い慣れてくると召喚・定義要素なしで作るのが面倒くさくなるほどの使い勝手の良さがあります。

まとめ

  • 「id属性付き空要素」は「召喚要素」。
  • 「トップレベルのid属性付き要素」は「定義要素」。
  • 定義要素は召喚要素で呼び出される。

 規模が大きくなると、root.xmlだけで記述するのが大変になってきます。
 次回は、複数のシナリオファイルを使う方法を解説します。