25. コンディション

CONDITIONトリガ:

CONDITIONトリガは実行可能なトリガと重ねて配置する必要があります。実行可能なトリガは(それらと重なったCONDITIONトリガで定義された)条件がtrueの場合にのみ実行されます。 - CONDITIONトリガは、次のとおりです。:

1.「Trigger」ウィンドウの値がOBJECTである場合:

- C14:指定した動的オブジェクトが、ちょうどアクティブ/非アクティブです。
- C21、C23またはC24:指定した動的オブジェクトが、ちょうど指定したアニメーションを実行しています。
- C22:指定した動的オブジェクトが、ちょうど指定したState IDでアニメーションを実行しています。
- C26:ララは指定した動的オブジェクトに、ちょうど触れています。
- C37:指定した動的オブジェクトが、ちょうど指定した透明度を持っています。
- C54やC55:ララと指定した動的オブジェクトの間には 、ちょうど一定の距離があります。

2.「Trigger」ウィンドウの値がPARAMETERである場合:

a, インベントリ条件:

- C1:指定したアイテムが、ちょうどインベントリにありません。
- C2:指定したアイテム(少なくとも1つのコピー)が、ちょうどインベントリにあります。
- C3:指定したアイテムの少なくとも指定した数が、ちょうどインベントリにあります。
- C4:指定したアイテムの指定した数より少ない数が、ちょうどインベントリにあります。

b, ララのアクションに関する条件:

- C5:ララは、ちょうど指定したアクション(歩行、モンキースイングなど)を実行している、またはしていない。
- C30:ララは、ちょうど指定したアニメーションを実行しています。
- C31:ララは、ちょうど指定したState IDでアニメーションを実行しています。

c、ララの位置に関する条件:

- 「Fragmented」トリガ:ララは、ちょうど彼女の足元のスクエアの、指定した位置にいます。
「Fragmented」トリガに関しては
http://www.tombraiderforums.com/showthread.php?t=211861
http://www.tombraiderforums.com/showthread.php?t=212038
にも説明があります。

= C6、C7またはC8:位置は細長い場所であったり、2つの細長い場所が互いに交差する「小さな正方形」です。
= C60:位置は正方形と同じ中心を持った円です。
= C61、C62、C63またはC64:位置は、正方形の角に中心を持った4分の1の円形(またはその一部)です。
= C65、C66、C67またはC68:位置は、正方形の辺の中央に中心を持った半円形(またはその一部)です。
= C69、C70、C71またはC72:位置は(正方形の一角と同じ一角を持つ)三角形です。
= C73、C74、C75またはC76:位置は(正方形の一辺と同じ辺から成る)三角形です。
= C77:位置は菱形です。
= C78:位置はParametersスクリプトコマンドのPARAM_TRIANGLEコンスタンツで定義されてカスタマイズされた三角形です。
= C79:位置はParametersスクリプトコマンドのPARAM_QUADRILATERALコンスタンツで定義されてカスタマイズされた四辺形です。
= C80:位置はParametersスクリプトコマンドのPARAM_CIRCLEコンスタンツで定義されてカスタマイズされた中心を持った円(またはその一部)です。

(さらに詳しいfragmented conditionsの説明、BRIDGEオブジェクトのためのその使用法、BRIDGEオブジェクトへの特殊なコリジョンの作り方が、Paolone氏の「Miscellaneous2」デモプロジェクトファイルにあるので参照してください。)

- C9:ララは、ちょうどトリガスクエア上空の指定した高さにいます。
- C10やC11(2つのトリガは同じ結果になります):ララは、ちょうどトリガスクエア上空の指定した高さにいません。
- C81:ララは、ちょうど雪/雨/水の部屋にいます。

d, ララと他のオブジェクトとの条件:

- C27:ララは、ちょうど指定したオブジェクトスロットの動的オブジェクトに触れています。
- C28:ララは、ちょうど敵や不死の敵やフレンドリーなクリーチャーに触れています。
- C33:ララは、ちょうど指定したオブジェクトスロットの静的オブジェクトに触れています。
- C34:ララは、ちょうど指定した静的オブジェクトに触れています。
- C35:ララは、ちょうど指定したオブジェクトを運転/保持しています。
- C59:ララは、ちょうどインベントリ内のアイテム(メディパック/弾薬/武器以外のキー、パズルなど)を選択したところです。

e, ララに関するその他の条件:

- C17:ララは、これまでに少なくとも、指定した数のシークレットを見つけています。
- C18:ララは、これまでに、ちょうど指定した数のシークレットを見つけています。
- C25:ララは、ちょうど指定した状態(毒に侵されている、不死身など)にあるか、または、そうではありません。
- C29:ララは、ちょうど指定した体力があります。
- C36:ララがトリガ領域にいる時ちょうど生成されるランダム値は、間隔(1と指定した値との間)の数です。ランダムにコンディションがtrueになるかが決められるということ?

f, プレーヤーに関する条件:

- C12:プレイヤーは、ちょうど指定したキーを入力しています。(または、入力していない。)
- C13:プレーヤーは、ちょうど指定したキーコマンドが割り当てられたキーを入力しています。(または、入力していない。)
- C19:レベル内のいずれかのキーパッドで、プレーヤーによって最後に入力されたコードは、指定した値です。

g, その他の条件:

- C15:指定したTriggerGroupスクリプトコマンドで定義された条件は、(下記参照)ちょうどtrueです。
- C16:指定したMultEnvConditionスクリプトコマンドで定義された条件は、(下記参照)ちょうどtrueです。
- C20:いわゆる「スクリーンタイマー」は、ちょうど指定した値を持っています。(注意:「高い」と「低い」値がトリガで反転しています。)「反転しています」と書かれていますが何が反転しているのかよくわかっていません。
- C32:(P-フレームを除く)指定したアニメーションの範囲が、今まさにアクティブか、アクティブでないか。

h, 変数に関する条件:原文のgは誤り。

- C38-C53、C56-C58:「31.変数」/「32.メモリゾーン」の説明を参照してください。

「複数の」条件:

MultEnvConditionスクリプトコマンドを使用することは、(C16)CONDITIONトリガのための特別な条件を定義する方法です。:

- なぜならMultEnvConditionsで複雑な条件を定義することができるからです、また
- いくつかの特殊な(しかし単純な)条件は直接CONDITIONトリガでは定義できず、MultEnvConditionsでだけ定義できるからです。

(ENVコンスタンツを参照して、このスクリプトコマンドの条件の種類を確認してください。その他 - 追加として - MultEnvConditionsによって使用されるコンスタンツには:ROOM、DENV、HOLDがあります。)

TriggerGroupsでの条件:

上記のように(C15トリガを参照してください)、1つ以上の条件をTriggerGroupsで持つことができます。これは便利です。なぜなら(重複のルールにより)スクエアに複数のCONDITIONトリガを配置することができないからです。
例えば、ふたつのCONDITIONトリガでふたつの条件を定義したければこうします。:TriggerGroupにリンクされたC15トリガをひとつだけマップに配置します。 スクリプトでは、そのTriggerGroupは2つのCONDITIONトリガを持っているでしょう。

「混合」TriggerGroups - 基本:

しかし、また、実行可能トリガとCONDITIONトリガの両方を持っている「混合」TriggerGroupsを持つことができます。 - この非常に簡単な例を参照してください。:

TriggerGroup= TriggerGroup ID, CONDITION trigger, executable trigger

C15CONDITIONトリガと実行可能トリガを同じスクエアに配置する代わりに、上記のTriggerGroupを開始するためのF118トリガのみを配置します。同じことが起こります:F118がトリガされると、TriggerGroupで実行可能なトリガは、CONDITIONトリガがtrueの場合にのみ実行されます。(注:リンクされているTriggerGroupが、1つまたは複数のCONDITIONトリガを含む場合は、トリガウィンドウ(E)で「multiple」トリガとしてF118トリガを設定することを忘れないでください。)
または、特別な例:

TriggerGroup= TriggerGroup ID, executable trigger1, CONDITION trigger, executable trigger2

さて、何が起こるでしょう:F118を有効にすると、最初の実行可能なトリガは、どんな場合でも有効化されますが、第2の実行可能なトリガはCONDITIONがtrueの場合にのみ、有効化されます。
しかし、当然のことながら、複数のCONDITIONトリガを含んだTriggerGroupsを持つことができます。 - それでは、簡単な例を見てみましょう:

TriggerGroup= ID, ConditionTrigger1 (CT1), ConditionTrigger2 (CT2),ExecutableTrigger1 (ET1),ExecutableTrigger2 (ET2)

すると、ET1とET2はCT1とCT2の両方がtrueの場合にのみ実行されます。(注:2つの条件トリガの間の「AND」接続を定義するTGROUP_ANDコンスタンツは必要ありません。そのコンスタンツは忘れてください。)
しかし、トリガ順序は、非常に重要です。 - 上記TriggerGroupでトリガの順序を変更すればそれが分かるでしょう:

TriggerGroup= ID, CT1, ET1, CT2, ET2

このTriggerGroupの意味は次のとおりです。:CT1がtrueの場合、ET1が実行され、CT2を検討します。 CT2もtrueである場合、ET2が実行されます。

「混合」TriggerGroupsの「OR」接続:

しかし、混合TriggerGroupsは、AND接続だけではありません。「OR」接続をしたい場合、TGROUP_ORコンスタンツを使用します。 - 例えば:

TriggerGroup= ID, CT1, CT2+TGROUP_OR, ET1原文の:は誤り

このTriggerGroupの意味は次のとおりです。:CT1がtrueまたはCT2がtrueであるならば、ET1が実行されます。
もう少し複雑なケースを見てみましょう:

TriggerGroup= ID, CT1, CT2, CT3+TGROUP_OR, ET1

このTriggerGroupの意味は次のとおりです。:CT1がtrueで、(CT2またはCT3)がtrueであるならば、ET1が実行されます。

「混合」TriggerGroupsの「NOT」接続:

TGROUP_NOTコンスタンツを使用する、「NOT TRUE」状況について、例えばこれを参照してください。:

TriggerGroup= ID, CT1, CT2+TGROUP_NOT, ET1, ET2, ET3

このTriggerGroupの意味は次のとおりです。:CT1がtrueで、CT2がtrueでない場合、ET1とET2とET3が実行されます。 - しかし、ここではそれを少し変更してみましょう:

TriggerGroup= ID, CT1+TGROUP_OR, CT2+TGROUP_NOT, ET1, ET2, ET3

このTriggerGroupの意味は次のとおりです。:CT1がtrueまたはCT2がtrueでない場合は、ET1とET2とET3が実行されます。
(見ての通り、TGROUP_NOTに続いている場合、TGROUP_ORはまた、最初の条件に接続することができます。)
今度は「二重否定」を見てみましょう:

TriggerGroup= ID, CT1+TGROUP_NOT, CT2+TGROUP_NOT, ET1, ET2

このTriggerGroupの意味は次のとおりです。:CT1がtrueでない AND/OR CT2がtrueでない場合は、ET1とET2が実行されます。
(AND/ORは、お互いの後に2つのTGROUP_NOTコンスタンツを持っている場合、時にそれが、「ないORない」なのか「ないANDない」なのか、状況を判断するのは容易ではないことを意味します。ですから、この設定を調整するには注意し、状況を慎重にテストしてください。)

「混合」TriggerGroupsの「ELSE」接続:

混合TriggerGroupsを制御するコンスタンツがもう一つあります。それはTGROUP_ELSEです。 - 簡単な例を見てみましょう:

TriggerGroup= ID, CT1, ET1, CT2+TGROUP_ELSE, ET2

このTriggerGroupの意味は次のとおりです。:まず第一に、ゲームはCT1条件を検討します。それがtrueである場合、ET1が実行されます。CT1がtrueでない場合、ゲームはET1をスキップし、CT2条件を検討します。CT2がtrueの場合、ET2が実行されます。
最後に、複雑な例を見てみましょう

TriggerGroup= ID, CT1, CT2+TGROUP_OR, ET1, ET2, CT3+TGROUP_ELSE, ET3, >
CT4+TGROUP_ELSE, CT5+TGROUP_NOT, ET4, ET5, ET6

このTriggerGroupの意味は次のとおりです。:ゲームはCT1とCT2を検討します。それらのいずれかがtrueである場合、ET1およびET2が実行されます。どちらもtrueでない場合、CT3を検討します。CT3がtrueであればET3が実行されます。CT3がtrueではない場合、ゲームはCT4とCT5を検討します。CT4がtrueで、CT5がtrueでない場合、ET4、ET5とET6が実行されます。

CONDITIONトリガのみのTriggerGroupsでの「OR」または「NOT」接続:

C15トリガでもORとNOT接続を使用することができます。 - 例を見てみましょう:
C15と重ねて配置された実行可能なトリガがあり、OR(またはNOT)接続されたCONDITIONトリガがC15にリンクされているTriggerGroupにある場合:

TriggerGroup= ID, CT1, CT2+TGROUP_OR

CT1またはCT2がtrueであるならば、実行可能なトリガが有効になります。

GlobalTriggers:

GlobalTriggersは条件を使ったトリガです。条件がtrueであれば一つ/複数の他のトリガ(Trueトリガ)がアクティブになります。条件がtrueでなければ何も起こらないか、一つ/複数のトリガ(Falseトリガ)がアクティブになります。GlobalTriggersは、レベル全体を通して条件を検討しているので 「グローバル」です。すなわちGlobalTriggersは、レベルの各フレームで自動的に有効になります。 - 理解するために以下を参照してください:

1.レベルが開始されます。
2.フレーム#1:GlobalTriggerは、その条件を検討します。それがtrueであれば、GlobalTriggerにリンクされているTriggerGroup内の実行トリガ(単数または複数)が、発生します。そうでない場合は、何も起こりません - または、GlobalTriggerにリンクされているTriggerGroup内の他の実行トリガ(複数可)(存在する場合)が、発生します。
3.フレーム#2:GlobalTriggerは、その条件を検討します。それがtrueであれば、GlobalTriggerにリンクされているTriggerGroup内の実行トリガ(単数または複数)が、発生します。そうでない場合は、何も起こりません - または、GlobalTriggerにリンクされているTriggerGroup内の他の実行トリガ(複数可)(存在する場合)が、発生します。2.と同じ文章ですが、各フレームで同じことが行われているという意味です。このフレームとはアニメーションの編集でも使われてる「フレームレート」のフレームで、GlobalTriggerはそれを無効にしない限り、1秒間に30回の「条件の検討/トリガの実行」をずっと行い続けます。
等。

GlobalTriggersは配置することができないトリガです。GlobalTriggerを定義するためにしなければいけないことは、GlobalTriggerスクリプトコマンドを入力することです。(いくつかの機能についてはFGTコンスタンツを、GlobalTriggerのための条件を定義するにはGTコンスタンツを、GT_TITLE_SCREEN条件についてはTSCRコンスタンツを、GT_DISTANCE ...条件についてはGTDコンスタンツを、GT_LARA_HOLDS_ITEM条件についてはHOLDコンスタンツを、GT_GAME_KEY...条件についてはKEY1またはKEY2のコンスタンツを、GT_KEYBOARD_CODE条件についてはNG Center[Reference]のKeyboard Scancodesを参照してください。)
無効にされたGlobalTriggersは何もしません。GlobalTriggerに含まれている条件を検討しません。永久にGlobalTriggerを無効にしたいのであれば、これらがその理由になるでしょう。

- 指定したレベルセクションでGlobalTriggerに、いずれの実行トリガも有効にしてほしくない、または
- GlobalTriggerが検討すべき指定したレベルセクションでは何も起こらないと確信しているので、GlobalTriggerを、エンジンの一部のメモリを節約するために無効にします。(そのための他のトリックは、FGTコンスタンツによる「ワンショットモード」です。:GlobalTriggerはすべき事をしたので、これ以上必要としないなら、「ワンショット」モードで、これ以上何かを有効にしません。)

FGT_DISABLEDコンスタンツはレベルの開始時にGlobalTriggerを無効にするために使用します。レベルの間、任意のタイミングで、 指定したGlobalTriggerを無効/有効にするためにF109を使用してください 。

GlobalTriggersで「トリック」:

GlobalTriggersは、「条件で一杯」のTriggerGroup(C15トリガのためのTriggerGroupのような)を含む、数種類の条件を使用することができます - しかし、その「条件が一杯」なものに「対して」トリックを使用することができます。
GT_ALWAYSコンスタンツは条件が常にtrueであることを意味し、GlobalTriggerは、レベルの各フレームごとに、Trueトリガが有効になります。しかし、TrueトリガのTriggerGroupに条件を配置することもできます。 - それでは、例を見てみましょう:

GlobalTrigger= 1, IGNORE, GT_ALWAYS, IGNORE, IGNORE, 1, IGNORE
TriggerGroup= 1, CT1, ET1, CT2+TGROUP_ELSE, ET2

ご覧の通り、GT_ALWAYSはレベルの各フレームでTriggerGroup = 1を有効にしますが 、ET1はCT1がtrueの場合にのみ発生し、CT1がtrueではなくCT2がtrueの場合にのみET2が発生します。

その後は、GlobalTriggerの条件と実行可能TriggerGroupsの両方が、条件と実行のトリガの両方を使用できるというのが、すぐに分かると思います。
- 例えば、GT_CONDITION_GROUPで(このようにGlobalTriggerの条件が、条件のTriggerGroup「だけ」の場合):

GlobalTrigger= 1, IGNORE, GT_CONDITION_GROUP, IGNORE, 1, 2, IGNORE
TriggerGroup= 1, ET1, ET2, CT1
TriggerGroup= 2, CT2, CT3+TGROUP_OR, ET3

ご覧の通り、ET1とET2を、レベルの各フレームで実行します。(ET1とET2は、CT1に必要なパラメータを定義するので、今は重要です)。CT1が(ET1とET2によって定義されたパラメータから実際の値を使用して)trueの場合、ゲームはCT2とCT3を検討します。それらのいずれかがtrueである場合には、ET3が実行されます。
(条件は様々なパラメータの値を持つことができるので、条件の対象が一定でない場合は、この「GlobalTriggersの条件TriggerGroupは、また実行可能なトリガを持つ」ということは、理にかなっています。 - 変数の説明でそれがわかるでしょう。)


前のページ
次のページ