Filter Applications
フィルターの活用
このチュートリアルは"Filter(フィルター)"エンティティの使用法を説明するものです。 フィルターはtarget name(ターゲット名)やclassname(クラス名)やダメージ種類といったもの、もしくはその組み合わせによって特定の何かをトリガーしたり、起動させたりできる一連のエンティティ群です。 言うまでもなく、これはマップにおいて様々に活用できます。 もしCTFマップ(チームに分かれて敵陣からの旗の奪取を競う)の一種をデザインしているのなら、プレイヤーがずるをして自チームの旗からポイントを得ないようにフィルターを使う必要があります。 特定のエンティティクラス、例えばnpc_zombieだけが何かを起動可能で、npc_crowは関係ないというようにする場合にも有用です。
このチュートリアルはエンティティ、トリガー、I/Oシステム(エンティティインプット、アウトプット)の基礎知識があることを前提として、フィルター種類とその活用の基礎的な説明として書かれています。
Targetname(ターゲット名) によるフィルタリング
filter_activator_nameエンティティを使うことでtargetname(ターゲット名)によるフィルタリングが行えます。 このエンティティは指定したエンティティのターゲット名によって、許可するか、そうでないかを決定します。 これには3つのキーバリューが必要です。 ゲームワールドからトリガーがそのフィルターを呼び出せるように、targetnameキーバリューが必要です。 エンティティのフィルターを行うには、filternameキーバリューが必要です。 そしてこのフィルターで何を行うのかを決定するために、"0"(Allow entities that match criteria) か"1"(Disallow entities that match criteria)のNegatedキーバリューが必要です。この値が1の時は、特定のターゲット名に一致していない全てのエンティティを許可します。 この値が0のときは、ターゲット名が指定したものと一致するエンティティのみを許可します。
このトリガーにはとても多くの実用例があります。Half-Life2の駅マップのゴミ箱シークエンスを見てみましょう。 どうやってゲームは、他の自動販売機からのものではなく、その場面での缶を投げ入れる必要があると判断するのでしょうか。 またどのように持ち帰り容器と捨てなければならない缶を区別しているのでしょうか? フィルターです。
フィルターの観点から同じシークエンスを作成するとしたら、その缶を単純に"can"と名づけ、filternameキーバリューが"can"でNegatedキーバリューが0"(Allow entities that match criteria)のfilter_activator_nameエンティティ、そしてチュートリアルとして近くの警報を鳴らすPlaySoundアウトプットを持ったトリガーを用意します。 (さらに、トリガーが物理アイテムを認識するようにフラグ設定をする必要があります。) そうすると、targetnameが'can'の物理アイテムをトリガーの空間に落とすと、警報音が鳴るでしょう。
Classname(クラス名) によるフィルタリング
filter_activator_classエンティティを使うことでclassname(クラス名)によるフィルタリングが行えます。 targetnameとnegatedについては上と同じですが、異なるキーバリューもあります。 このエンティティにはfilterclassキーバリューがあり、ここにはフィルタリングを行いたいクラス名(例、npc_zombie)を入力します。
これはより一般的なフィルタリング用に見え、実際そうですが、独自の使用法もあります。 例えば、ゾンビが突撃してきて、ある地点まできたら警告音をトリガーするようなシークエンスを作成するとしましょう。(チュートリアル目的です。私は警告音を気に入っているようです) しかし、他にもNPCがいたらどうでしょうか? カラスも音をトリガーできたとしたらどうでしょうか? もしくは物理アイテムもできたとしたら? それではシーンはうまくいきません。 ここでクラス名フィルタリングが役に立つのです。
ゾンビに特別な名前をつける必要はありません。というのも、ゾンビ一般にこのトリガーを発動してほしいからです。 ここではfilterclassにnpc_zombieを設定したfilter_activator_classを用意し、トリガーがこのフィルターを使うようにするだけで十分です。 トリガーのフラグは物理アイテムとNPCに設定してみます。 警告音のアウトプットを用意し、マップに物理アイテムを散乱させてみます。 トリガーに物理アイテムを投げてみましょう。 何も起こりません。 filter_activator_classはこのトリガーがnpc_zombiesによってのみ起動されることを保証します。
ダメージ種類によるフィルタリング
ダメージ種類でのフィルタリングには、推測できるように、filter_damage_typeを使用します。 上の2つのフィルターと同じ2つのキーバリューがありますが、ここではdamagetypeというダメージ種類のためのキーバリューがあります。 このフィルターはトリガーを発動するアクティベーターに対しては使えませんが、何かに対してどのダメージ種類が効果があるかをフィルターするのに使用できます。 以下にdamagetypeで指定できるダメージ種類のリストを示します:
Generic(一般)-0 Crush(破砕)-1 Bullet(弾丸)-2 Slash(斬撃)-4 Burn(火傷)-8 Freeze(凍結)-16 Fall(落下)-32 Blast(爆風)-64 Club(鈍器)-128 Shock(電撃)-256 Sonic (衝撃波)- 512 Energybeam(エネルギービーム)-1024 Drown(溺れる)-16384 Paralyze(麻痺)-32768 Nervegas(神経ガス)-65536 Poison(毒)-131072 Radiation(放射線)-262144 Drownrecover(溺れからの回復)-524288 Chemical (化学)- 1048576 Slowburn(ゆっくりした火傷)-2097152 Slowfreeze(ゆっくりした凍結)-4194304
これはnpc_combine_sなどのNPCに適用できます。これはどの種類のダメージが傷をつけることができるかを指定します。 例えば、burn(火傷)のダメージだけが傷を負わせることができる、というようにできます。 このエンティティは次に説明するfilter_multiとの組み合わせによって役立ちます。
複数種類フィルタリング
最後に説明するのは複数種類のフィルタリングです。これは5つまでの作成したフィルターをANDかOR比較で1つにまとめて、トリガーの発動に使うことができます。 ANDは発動するまでに全ての条件を満たす必要があり、ORは1つでも条件を満たせば発動します。 ダメージ種類、名前、クラス名フィルタリングを組み合わせてより複雑なフィルターを作ることもできます。 このフィルターは他のフィルターと同じようなキーバリューを持ちますが、これ自身は実際のフィルタリングを行わず、他のフィルターのまとめて大きいフィルターを作るだけになります。
フィルターのまとめ
今まで見てきたように、フィルタリングはシングルプレイヤーでも、独自ルールのデスマッチを作る上でも貴重なアセットです。 他のエンティティ同様、正しく使われた場合、フィルターはとても協力で役に立ちます。そしてまたとても柔軟なもので、活用方法はほぼ無限大です。
フィルタリングを楽しんでください!