Ja/Standoffs

Standoff(膠着状態、にらみ合い)
2つのNPCグループが出会うと、自動的に敵に向かって殺し合いをはじめます。しかし、こうしてほしくない場合はどうしたらよいでしょうか？例えばあなたがシーンに到着して指揮をはじめるまで背景で銃撃戦を続けてほしい、またはスクリプトによるシークエンスが再生可能になるまで開けたエリアを横断してほしくない、という場合です。あるいは、交戦をより構造化したい場合もあるでしょう。Standoff(膠着状態、にらみ合い)はこうした問題への柔軟な解決策になります。
Standoffは2種の要素から構成されます:
* ai_goal_standoff (各勢力に1つずつ)
* ai_battle_line (任意数)
==構造==
はai_goal_standoffで与えられた交戦ルールに従います。さらに自分に適用されたの後ろに常に留まります。各勢力には1つのai_goal_standoffと、任意数のai_battle_lineを用意します。
----
===ai_goal_standoff===
これはどのNPCがこのStandoffに当てはまり、彼らがどんな特殊なルールを守るべきか指定します。
====キーバリュー====
* Reaction to tactical change: Standoffが終わったり、変更されたりした場合にAIがどのように反応すべきかを定義します。変更には、リーダーの移動(Player battleline参照)、敵の死亡、ヒントグループの変更などがあります。
** Move when ready (default AI): 通常通り行動します。
** Move when seek cover: 次の遮蔽物を見つける必要があるときに移動します。
** Move immediately: 別の場所にただちに移動します。
* Aggressiveness: このStandoffにおいてどのくらいNPCが攻撃的に振舞うかを設定します。
** 攻撃性を高いレベルに設定するとNPCを前に押し出して、より多くの時間を攻撃に使い、隠れる時間が短くなります。また他の設定が許す限りできるだけ前進しようとします。
** 低いレベルに設定するとNPCは長く遮蔽物に隠れるようになり、前進する可能性が低くなります。
** オンになっているBattlelineの場所まで到達すると、Medium(中)以上の設定はみな同じ行動になります。
* Player battleline: プレイヤーが友好的であるときに、プレイヤーを移動するBattlelineとして使用します。これにはオンになっているBattlelineを上書きする効果はありません!プレイヤーが対向している場合の効果は不明です。この設定をオンにすると、プレイヤーはこのstandoffの'リーダー'になります。
* Stay at cover location: NPCが遮蔽をみつけたら、standoffが終了するまでその場所を動きません。NPCがbattlelineまで前進しないようにします。
* Abandon if enemies hide: このエリアでの敵の最近の活動がなくなったらstandoffを終了します。
====インプット====
* Activate/Deactivate: 強制的にstandoffを開始・終了します。Standoffは通常の場合は敵に遭遇した場合に自動的に開始し、敵が死ぬか視界から長い間消えると終了します。
* SetAggressiveness: Aggressivenessキーバリューを操作します。
** 使用できる値はVery Low/Low/Medium/High/Very Highもしくは0から5です。数字の場合5がVery Highです。
----
===ai_battle_line===
このエンティティが指定するすべてのNPCはこのBattlelineの後ろに留まります。障害物を回避する必要がある場合にはNPCが少しはみだすこともあります。このエンティティの上の鳩モデルはエディタ内においてのエンティティの向きを示しています。ゲーム内でのbattlelineを可視化するにはai_drawbattlelinesを使用してください。
Battlelineにはとても興味深い使用法があります。Standoffの一員を親(parent)として使うことも、その逆にstandoffを前進させ続けることもできます。
====キーバリュー====
* Actor(s) or squad to affect: Battlelineの影響を受けるチームを指定できることで複数のbattlelineを同時に持つことができます。これは複数の射程距離の武器や、NPC種類に合わせて配置を行うのに役立ちます。
* Strict: プレイヤーがチーム命令でbattlelineを上書きすることが可能か？これは二重否定の問いになっています: Yesにするとこれは厳格なもので、上書きができません。NoにするとプレイヤーはNPCにbattlelineを越えるように命令を出すことが出来ます。
** このキーバリューはstandoffのaggressiveness(攻撃性)を上書きしないことに注意してください。standoffにいるNPCはstandoff指定の攻撃性とあなたの命令の両方に従い、時には矛盾することがあります
====フラグ====
* Use parent's orientation: battlelineがNPCにparent(親子設定)されている時にこのフラグが設定されていない場合、その親のNPCの向きが変わると、battlelineもそれに伴って回転してしまいます。これはほとんどの場合にとってとても望ましくないことです。
====インプット====
* SetParentAttachment: キーバリューを通じてparent(親)となるエンティティを設定したら、このインプットをつかってそのエンティティの特定のにbattlelineを接続します。これが役に立つには、本当に大きなアニメーションつきプロップが必要でしょう:Valveがなぜ必要としたのかは神のみぞ知る…
==制限とバグ==
* テスト中時々、攻撃性をVeryLow(とても低い)にしたNPCが自分自身の判断で敵の前に突撃を開始することがありました。これはマップのエラーかもしれません。
* standoffの中でチームを指揮するのは難しいです。というのもNPCが常に自分についてくるとも、命令を聞くとも限らないからです。
* NPCは特定の状況ではbattlelineを越えます。例えば敵が視界にあるが射程範囲にはいっていない、もしくは他のNPCを治療したいという時です。
* battlelineを越えるかどうか決めるときに、障害物を考慮しません。これで大きく回り道を取る可能性があります。
==サンプル==
このサンプルマップにはai_goal_standoffエンティティが2つ、ai_battle_lineエンティティが4つ(3つが市民、1つはコンバイン用)あります。
* 市民
** ai_goal_standoff
*** Aggressiveness: Medium(中)。市民はバランスのとれた戦略で戦います。
** 3x ai_battle_line
*** 2x battleline_platform
**** Actor(s) or squad to affect: rebel_platform_squad。このsquad(チーム)はマップがロードされたときにプラットホームに立っている市民を指しています。
**** Strict: 市民は命令をされてもbattlelineを越えません。(このため市民は命令できませんが、このフラグを変更して自分で実験してみましょう。)
**** 2つのbattlelineは90度の角度なので、NPCはこのプラットホームのなかに「囲い込まれて」います。
*** battleline_rebel
**** Actor(s) or squad to affect: rebel_* このワイルドカードでの指定はこのマップの全ての市民(rebel_1からrebel_4)に適用されます。
**** Strict: No. The NPCs will not go over this battle line of their own accord, but will if ordered to by the player.
* コンバイン
** ai_goal_standoff
*** Aggressiveness: Very High(とても高い) 到達できないエリアかbattlelineに到達するまでコンバインは前進します。
** 1x ai_battle_line
*** battleline_combine
**** Actor(s) or squad to affect: combine_longrange
**** もう1つのコンバインのsquad(チーム)のcombine_shortrangeはbattlelineの指定がなく、必要があればマップのどこにでも移動してきます。(彼らはショットガンで武装しています) 
プレイヤーのスタート地点近くに使い方のラベル説明がついた2つのボタンがあります。左のボタンはコンバインの攻撃性を決め(VeryHigh:とても高い、とVeryLow:とても低いを切り替える)、右のボタンは全てのai_battle_lineをオフにします。
サンプルマップ (VMF)