TRNG-Animationコマンド

このドキュメントは、TestPositionコマンドとENV_ITEM_TEST_POSITION条件の詳細な調査を含む、Animationコマンドの簡単な紹介です。

概要

前書き
WADMergerで新しいアニメーションを作成する
Animationスクリプトコマンドを入力
カスタムアニメーションにNG AnimCommandsを追加する
TestPositionコマンド
相対軸
ララの大きさ
Test Lara Positionプロジェクト
提案
サンプルA - ジープの右後輪の前
理想的な位置の計算
サンプルB - ジープの裏側
自己調整機能
サンプルC - 王座の前
複数のENV条件を使用するには
サンプルD - メタルゲートの前
TestPositionでの二重の向き
Metasequoiaを使用してオブジェクトの原点を移動する
サンプルE - キューブの前のララ
あらゆる面を向いている
サンプルF - ララがBADDY_1をパンチする(完全な実例)
移動中のアイテムの理想的な位置を計算する
ララに新しいスキルを加えるために必要なこと
戦いのサンプルをどのように強化する
サンプルG - ルーム形状をテストする条件
内側と外側のコーナー
G3 - モンキー天井の高さ
G4 - 正面壁のよじ登り
G5 - モンキースイングの上に登れる壁がある
G6 - モンキースイングの上に登れる壁があり、その壁を背にする
G7 - 高い壁にぶら下がったララ
トラブルシューティング
StateIDに関する問題
最も一般的な問題
StateIDリスト

前書き

Animationコマンドを使用すると、Laraの新しい対話型アクションを作成できます。
ANIMATINGのようなオブジェクトに、アニメーションを作成して新しい機能を持つことができます。

そのための課題は次のとおりです。

WADMergerで新しいアニメーションを作成する

この操作は難しいかもしれません。インターネットでチュートリアルを見つけて、それを学ぶ方法があります。
TRSearch.orgのチュートリアルをご覧ください。

場合によっては、NGLEや他のTRの標準アニメーションを使用し、それを他のターゲットとともに使用することもできます。

Animationスクリプトコマンドを入力

このドキュメントでは、アニメーションを開始するための正しい位置と条件を確認する方法を説明します。
Animationコマンドの一般的な情報については、Animationスクリプトコマンドを参照してください。

カスタムアニメーションにNG AnimCommandsを追加する

NG AnimCommandsは、SetPosition AnimCommandsの形式でエクスポートされます。
フリップエフェクトとアクションをNG AnimCommandsとしてエクスポートするには、トリガウィンドウを開き、[Export AnimCommand]をクリックします。
このAnimCommandsを実行するときのフレーム数を入力すると、次のようなテキストが表示されます。
***********************************************************
Add a SetPosition anim command with following values:

Set Position [-24556] [136] [5635]

Infos about exported trigger
-------------------------------------------------------------------------------
Exporting: TRIGGER(5635:0) for FLIPEFFECT(136)
<#> : Lara. (Physics) Vertical. Attract Lara <&>up/down with (E)speed
<&> : Down (Always, jumping/falling phase)
(E) : Speed=   22

AnimCommand: Frame=20
-------------------------------------------------------------------------------
************************************************************
重要なデータは次のとおりです。

Set Position [-24556] [136] [5635]

WADMergerで、ララを選択した状態でAnimationEditorを開き、カスタム(作成する)アニメーションを選択します。
アイコン「01010」をクリックします。
新しいウィンドウのコンボボックスで「Set Position」を選択します。
NGLEから受け取った3つの数字を右側の3つの白い枠に入力します。この例では、数字は[-24556] [136] [5635]です。
[Add]ボタンをクリックします。

今すぐWADを保存してください。

備考:AnimCommandsを簡単に拡張するには、Script.txtにタイプされたTriggerGroupを実行するフリップエフェクトをAnimCommandsとして書き出すのが良いトリックです。

Exporting: TRIGGER(515:0) for FLIPEFFECT(118)
<#> : TriggerGroup. Perform <&>TriggerGroup from script.dat in (E)way
<&> : TriggerGroup=    3
(E) :  Continue performing (it will be always performed until you stop it)

上記の例では、AnimCommandsはTriggerGroup = 3を実行します。
こうすれば、WADファイルまたはTR4ファイルを変更することなく、TriggerGroupに多くのトリガおよび条件を追加でき、非常に複雑な効果を作り出すことができます。


TestPositionコマンド

バージョン1.1.9.8から、新しいTestPositionコマンドが追加されました。

構文:TestPosition= IdTestPosition , Flags(TPOS_...) , Slot Moveable , XDistanceMin, XDistanceMax , YDistanceMin, YDistanceMax , ZDistanceMin, ZDistanceMax , HOrientDiffMin, HOrientDiffMax , VOrientDiffMin, VOrientDiffMax , ROrientDiffMin, ROrientDiffMax

範囲:[Level]セクションで使用する

TestPositionを使用すると、ララの他のアイテム(指定されたSlotを持つすべてのMoveable)に対する正しい位置を設定できます。
次に、有効条件(ENV_ITEM_TEST_POSITION)で変換するには、AnimationコマンドのDistanceForEnvフィールド、またはMultEnvConditonコマンドのExtraフィールドにIdTestPositionを入力する必要があります。

TestPositionフィールドの説明

IdTestPositionフィールド

このフィールドには、このコマンドのIDを入力します。
このIDはトリガや他のスクリプトコマンドを実行するときに使用します。同じ[Level]セクションにあるこのコマンドの最初には「1」を使用し、2番目のコマンドには「2」を使用します。
IDの有効範囲は1から999です。
このIDはAnimationコマンドのDistanceForEnvフィールドまたは、MultEnvConditionsコマンドのExtraフィールドに入力します。

Flags(TPOS_...)フィールド

このフィールドには、いくつかの特殊機能を設定するため、1つ以上のTPOS_コンスタンツを入力します。
IGNOREと入力すると、TPOS_コンスタンツを省略できます。
NG_Center[Reference]のTPOS_コンスタンツも参照してください。

Slot Moveableフィールド

このフィールドには、チェックするアイテムのスロット(番号または名前)を入力します。
備考:FlagsフィールドにTPOS_TEST_ITEM_INDEXコンスタンツを追加した場合、このフィールドにチェックするアイテムのインデックスを直接入力する必要があります。
NG_Center[Reference]のTPOS_TEST_ITEM_INDEXコンスタンツも参照してください。

XDistanceMin and XDistanceMaxフィールド

これらのフィールドには、ララの原点Xとテストするアイテムの原点Xの最小有効距離と最大有効距離を入力します。
X軸が何であるかを理解するには、画像を参照してください。
image
薄い青色で、X軸とその向きが表示されています。
これらの2つのフィールドの距離は、ララの原点X - アイテムの原点Xによって与えられます。
このため、通常、入力する範囲は、XDistanceMinでは常に負の値になり、XDistanceMaxでは正の値になります。

例えば、以下のような場合
XDistanceMin = -256
XDistanceMax = +256

ララとアイテムのX軸の距離が1クリック(1セクターは1024単位のため、1クリックは256単位)内であることを表しています。
逆に、XDistanceMinとXDistanceMaxを0に設定すると、ララと他のアイテムが、1ピクセル程の距離も存在しないことになります。とにかく、0と0を設定するのは慣れが必要なため、やめておいたほうがよいでしょう。
他の例をみてみましょう。
テストするアイテムがコーヒーカップであり、ゲーム中のカップがX軸と+100の距離である場合、これはカップがララの左手の近くにあることを意味します。距離が-100であれば、カップはララの右手に近づくはずです。

X軸(または他の軸)の有効範囲を計算するときは、TestPositionの比較で使用される「相対軸」(次の段落を参照)の概念を覚えておく必要があります。

相対軸

TestPositionの比較を理解するのは複雑です。軸はララの現在の方向に相対的ですが、通常3D世界ではX、Y、Z座標は固定していると考えています。
ところがX軸の距離を計算すると、TRNGは3D世界の起点をララの原点に固定し、ララが向いている方へ3D世界を回転させます。
画像を参照してください。
image
上記の理由から、Zの距離を256単位として設定すると、ララの前に、他のアイテムが1クリックの距離にあることになります。3D世界で(ゲーム画面から見て)ララが他のアイテムの左または右にある場合は、ララの原点と向いている方向との比較を実行して位置が変更されます。つまり、ララが向いている方向が新しいZ軸の方向になります。
説明は複雑ですが、サンプルレベルを使って理解することができ、非常にうまく動作することがわかります。
備考:この方法はEidosのプログラマーによって作成されたものです。

YDistanceMin and YDistanceMaxフィールド

これらのフィールドには、Y軸上の距離範囲を入力します。
上の画像を参照してください。Y軸は白色です。

X軸上の距離範囲の説明は、Y軸上に対しても同じです。とにかくこの場合はさらに複雑です。なぜなら、ララのXとZの原点は常に同じですが、彼女の体の半分であるララの原点Yは、現在のアニメーションに応じて変化します。
診断モードを使ってアニメーションでララの原点Yの意味するものを理解することをお勧めします。
Script.txtの[Options]セクションにコマンドを入力します。

Diagnostic=ENABLED
ゲームでは、ララについて多くのことがわかります。
「Cy = ...」の値を見てください。
それが何を意味するのかを理解するには、床が0クリックのサンプルプロジェクトを作成し、4セクターを4クリック押し上げて、フロアに4クリックの穴をあけます。
そしてララが床にいるとき、Cyが何であるかわかるでしょう。
部屋の床が0クリックならCyは「0」になり、ララが4クリックの高さに上がるとCyがCy= -1024になります。なぜなら、Y軸は負の数で上がるからです。さらに、ララが4クリック深い穴にいくと、平らな床よりも4クリックの差があるので、Cyは+1024になるはずです。
今度は、ララが4クリック上昇したブロックの端にぶら下がっている場合、別のアニメーション(ぶら下がっている)があり、このアニメーションでは原点Yはララの足にはなく、ララの膝のあたりです。(!)
サンプルプロジェクトを作成し(床が0クリック)、水のある部屋を作成すると、ララが水面に浮かんでいるときの原点Yは、水面のY座標とCy値は同じようになるはずです。この場合、原点Yはララの首にあります。

したがって、TestPositionコマンドを作成するときは、最初に、カスタムアニメーションを開始する前のララの原点Yの位置を確認し、その位置を参照してY範囲を作成する必要があります。

それでは原点Yが彼女の足にあるときの例をみてみましょう。

アイテムが小さなボールで、それがララの前にある場合、ボールがララの頭のような高さになると、その距離は(約)+ 600になります。距離が負の場合、例えば-1024ならボールは、ララよりも1セクター下の穴にあります。

X軸上の距離とは異なり、Y軸上の距離の範囲を設定すると、Yピボット(Y軸上のララの原点Y)が足元にあるとき、同じ値では - と+記号のどちらを使用するかわからないので、minとmaxとは異なる絶対値を必要とする可能性があります。

例えば、ララの頭の前に(ララの頭のように大きく、球の中心にYの原点がある)上記の球がある場合、以下のように設定する必要があります。
YDistanceMin = 550
YDistanceMax = 650

ご覧のように、上記の値に負の値はありません。
これは、ララの身長が約3クリックであるため、256 * 3 = 768単位(正確には800単位)になります。
ボールがララの頭の前にあって、ボールがララの首よりも低くならないようにして、足(原点Y)からの距離が約512単位になるようにするには、YDistanceMinに550を設定します。なぜなら、550以下だと、ボールがララの足に非常に近くなるからです。
一方でララの頭の上にはボールを置きたくないし、ララの身長が768のため、最大距離は768になります。(ここでは650を使用しました)

相対軸(上の段落を参照)に取り組むことを覚えておいて、ララやアイテムの原点Yが正または負であることは重要ではなく、距離が常に正しい方法で働きます。
(ボールの例で)Y軸上の距離が0であるとき、ボールがララの足の前にあり、したがって誤った位置になります。

ララの大きさ

起立姿勢でのララのサイズとメッシュの位置をよりよく理解するには、画像を参照してください。
image
歪みがあるにもかかわらずパースペクティブビューの場合は、ララのサイズを次のように仮定できます。

起立姿勢の高さ(画像Aまたは画像C)= 800

起立姿勢の手から手への幅(画像A)= 320

側面からのララの幅(画像C)= 130

しゃがんだ時の高さ(画像D)= 320

クライミング時の高さ(画像B)= 600

ZDistanceMin and ZDistanceMaxフィールド

これらのフィールドには、Z軸上の距離範囲を入力します。
Z軸は常にララが向いている方向です。
Zの差(Lara.Z - Item.Z)が負の場合、これはアイテムがララの前にあることを意味し、差がプラスの場合はララがアイテムを通過し、今度は彼女の後ろにあることを意味します。

HOrientDiffMin and HOrientDiffMaxフィールド

これらのフィールドには、ララとアイテムの水平方向(向き)の関係(差異)の許容範囲を入力します。
水平方向は、Lara.HorizonalOrient - Item.HorizontalOrientによって与えられます。
「水平」の意味を理解するために、画像を参照してください。
image
ララ(または他のアイテム)のデフォルトのH向きは0です。これは、マップにアイテムを配置した直後にNGLEで表示される位置です。
H方向の違いがどのように変化するのか、サンプルレベルを使って理解することができます。

正しい距離範囲(前のフィールドを参照)を設定しても、水平方向の違いが間違っていれば、ララを(正しく)アイテムに近づけさせることができますが、アイテムはララに正しい側を示していません。
例えば、キャビネットのようなオブジェクトを作成し、ララがロックを強制的に開くアニメーションを作成する場合、ララがキャビネットオブジェクトに近いだけでなく、ララがロックの前にいなければなりません。なぜなら、もしララがキャビネットの裏側にいる場合、その距離は正しいかもしれませんが、アニメーションは意味を持たないはずだからです。

最初のステップとして、H方位の理想的な差異を見つけて、少なくともわずかな誤差がある範囲を作成する必要があります。
例えばキャビネットの場合、差は$8000(32768)(直面している)と範囲は最小値が例えば$7f00であり、最大値が同じ値(+/- $100)、すなわち$8100です。

VOrientDiffMin and VOrientDiffMaxフィールド

これらのフィールドには、垂直方向の差の範囲を入力します。
画像を参照してください。
image
この範囲はそれほど重要ではありません。100回のうち99回は、両方のアイテム(ララと他のアイテム)でVOrientation=0だからです。

範囲をMin = - 200、Max = +200として設定できます。
ララが別のVOrientを持っている非常にまれなケースは、ダッシュしているとき、水中で泳ぐとき、または彼女がダイビングしているときです。
とにかく、サンプルレベルを使って理解することができます。

ROrientDiffMin and ROrientDiffMaxフィールド

これらのフィールドには、ララとアイテムの間の回転方向の差の有効範囲を入力します。
おそらく「回転」は、このような矛盾を説明する正しい言葉ではありませんが、画像を参照してください。
image

値の変更はほとんどありません。常に0にする必要があるため、ララとアイテムの差もゼロにする必要があります。
とにかく、ララがダッシュで走って、左右に曲がっている時に、この値は少し変化しています。
-200 + 200の範囲で入力できますが、ほとんどの場合、おそらく0と0を入力することもできます。


Test Lara Positionプロジェクト

zipファイル「AnimationTestPosition.zip」には、小さなプロジェクトを作成するためのすべてのソースファイルがあります。
このプロジェクトでは、ララがカスタムアニメーションを開始する時を確認するため、正しいENV_conditionsとTestPositionコマンドをどのように設定するかを説明しています。
特定のサンプルで始める前にいくつかの提案があります。

提案

サンプルA - ジープの右後輪の前

このサンプルでは、ジープ(ANIMATING6)の右後輪の前で、ララがしゃがんでいるAnimationコマンドを設定します。
理想的な位置はこれです。
image
その理由は、ララがホイールを変更するカスタムアニメーションを実行するからです。
最初のステップは、TestPositionコマンドで入力する値を検出することです。
このコマンドは、各軸と方向(向き)タイプの範囲のリストを受け入れます。
値は、ララとアイテムとの間の相違点です。
診断を有効にすると(上記の提案を参照)、画面の右下に差分値が表示されます。

理想的な位置の計算

image
値は「Dif:」で始まります。

この場合、軸上の距離に関する理想的な値は次のとおりです。DifX = 605 DifY = 0 DifZ = -579

この値を使用して、X、Y、Zの範囲をこのように構築できます。

XDistanceMin = 605-300
XDistanceMax = 605+300

YDistanceMin = 0-128
YDistanceMax= 0+128

ZDistanceMin= -579-200
ZDistanceMax= -579+200

理想的な位置に完全に到達するのは難しいため、各理想値に許容範囲値を追加しました。
ここではX許容値として「300」、Y許容値として「128」、Z許容値として「200」を使用しました。
値を大きく設定すると、ララは理想的な位置から少し離れていても正しい位置になりますが、小さな許容値を入力すると理想的な位置に非常に近づく必要があります。

今度は、向きの違い(直面)について同じ計算をしなければなりません。
画面には次のように表示されます。

HOrientDif=-16249($C087)
VOrientDif= 0($0000)
ROrientDif= 0($0000)

NGLEでは向きが16進形式(前に「$」が付いた番号)で表示されます。$0000(東)、$4000(南)、$8000(西)または$C000(北)
Orient番号も16進形式で表示する必要があります。
したがって正しい値は画面($C087)に最も近い値の$C000になります。
そこで$C000をHOrientDifMin / HOrientDifMax範囲の理想値として使用します。
$C000の10進は-16384なので、HOrient範囲の値は次のようになります。

HOrientDifMin = -16384-$0800
HOrientDifMax = -16384+$0800

この場合も、HOrient許容値として$0800を使用しました。
角度は$4000 = 90度、$2000 = 45度、$1000 = 22.5度、$0800 = 11.25度、etcとなるので、16進値($)を使用して角度をより簡単に理解できます。
ここでは+ 11度の+/-を使用しましたが、TRNGで使用されている標準値:$1000をHOrient許容値として使用する方が良いでしょう。

この場合のVOrientとROrientについては意味がありませんので、理想値は0の範囲を入力してください。

上記のすべての計算を要約すると、TestPositionコマンドは次のようになります。
TestPosition=1, IGNORE, ANIMATING6, 605-300, 605+300, 0-128, 0+128, -579-200, -579+200, -16384-$0800, -16384+$0800, -1000,1000,-1000,1000
Animationコマンドは次のようになります。
Animation=-1, IGNORE,IGNORE, IGNORE, ENV_ITEM_TEST_POSITION, 1,IGNORE, STATE_ON_ALL_FOURS_BACK, >
          STATE_ON_ALL_FOURS_FORWARD, STATE_ON_ALL_FOURS_STANDING, STATE_ON_ALL_FOURS_TURN_LEFT, >
          STATE_ON_ALL_FOURS_TURN_RIGHT
このコマンドでは、次のことがわかります。
最初の 「-1」の値は、コマンドの診断モードで作業を行います。
アニメーションを実行する必要がある場合、画面に 「Anim-1 = YES」と表示されます。

「ENV_ITEM_TEST_POSITION」条件は、Id = 「1」のTestPositionを使用します。

スクリプトを作成しゲームでチェックして、アニメーションの実行位置を確認できます。
どのように状態を変更するかを確認するために許容値を変更してみてください。

備考:このサンプルでは、カスタムアニメーションを有効にするためのキーボードコマンドは入力していません。これは、診断モードで作業しているためですが、本当にカスタムアニメーションを使用する場合は、アニメーションを開始するためにキーボードコマンドを入力する必要があります。
例えば、ララが正しい位置にあるときにJumpコマンドを使用してホイールの変更を実行する場合、カスタムアニメーションが650だったとして、Animationコマンドは次のようになります。
Animation=650, KEY1_JUMP, IGNORE, IGNORE, ENV_ITEM_TEST_POSITION, 1, IGNORE, STATE_ON_ALL_FOURS_BACK, >
          STATE_ON_ALL_FOURS_FORWARD, STATE_ON_ALL_FOURS_STANDING, STATE_ON_ALL_FOURS_TURN_LEFT, >
          STATE_ON_ALL_FOURS_TURN_RIGHT

サンプルB - ジープの裏側

このサンプルでは、ララがジープ(ANIMATING6)の後ろにあるときにアニメーションを実行します。
image
理想的な位置は、診断モードで見ることができます。
image
理想的な位置は

DifX= 0 DifY= 0 DifZ= -981 OrienHDiff= 0

次のTestPositionコマンドで変換されます。
TestPosition=2, IGNORE, ANIMATING6, 0-400, 0+400, 0-127, 0+127, -981-200, -981+200, 0-$1000, 0+$1000,-1000,1000,-1000,1000
TestPositionコマンドで入力する理想的な位置と最終的なデータとの間の変換の計算の詳細については、理想的な位置の計算を参照してください。

このサンプルBでは、新しいAnimationコマンドがあります。

Animation=-2,KEY1_ACTION,IGNORE, FAN_ALIGN_TO_ENV_POS, ENV_ITEM_TEST_POSITION, 2, IGNORE, STATE_STOP
ここで、FAN_ALIGN_TO_ENV_POSフラグを使用して、理想的な位置にあるララの自己調整を有効にしました。

自己調整機能

私たちはすでに古いトゥームレイダーの中で何度も自己調整の特徴を目にしています。例えば、ララがPUSHABLEオブジェクトの前にいるとき、プレイヤーがアクションキーを押すと、ララは正確な位置(理想的な位置)に移動し、この調整の後にプッシュ/プルアニメーションが開始されます。
カスタムアニメーションも同じ機能を持つことができます。
この機能の利点は、同時に2つの目標を達成できることです。
自己調整を有効にするには、AnimationコマンドのFAN_フラグにFAN_ALIGN_TO_ENV_POSフラグを追加するだけです。

このフラグは、TestPositionを使用してENV_ITEM_TEST_POSITION条件でララの正しい位置を確認した場合にのみ機能します。
その理由は、自己調整では、自己調整で到達する理想的な位置を見つけるために、TestPositionのデータを自分自身で使用するためです。
TRNGは逆計算を実行して、TestPositionの範囲から理想的な位置を取得します。
使用される式は単純です。(MaxRange + MinRange)/ 2
このようにX、Y、Z、Hの各Orientは、ララに理想的な向きと位置が見つけられます。

備考:
- 自己調整を使用する場合は、Animationコマンドのキーボードコマンドを設定する必要があります。そうしないと、ララは予期しない方法で動きます。

- 自己調整は、ララが立ち上がっている(または立ち上げ時)とき、水中で泳いでいるときや水面に浮いているときにはうまくいくはずですが、吊り下げ状態(登り、モンキースイング)やしゃがんだ状態では失敗する可能性があります。

- ゲームでララが無限に動く場合、これはあなたが理想的な位置を計算するために多少ミスしたことを意味します。実際にはアイテムの衝突ボックスが彼女を止めるため、ララの理想的な位置を設定します。
この場合、ララとアイテムの間の距離がどの軸にあるかに応じて、ZまたはXの理想的な値を変更する必要があります。

サンプルC - 王座の前

このサンプルでは、この位置に到達させます。
image
このサンプルでは、ララは手にフレアを持っている。という別の条件を必要とします。
理想的な位置については、
image
上記の画像で見られる理想的な位置を使用して、上の段落の理想的な位置の計算で示されているように、TestPositionを作成することができます。

このサンプルで興味深いのは、もう一つのENV条件(通常のENV_ITEM_TEST_POSITION条件以外のもの)も検証する必要があるということです。
それはララがフレアを持ったままカスタムアニメーションを実行するということです。

複数のENV条件を使用するには

Animationコマンドでは1つのENV_条件だけを直接設定できるので、この制限を超えるには、2つの条件を格納するMultEnvConditionコマンドを使用する必要がありますが、Animationコマンドでは、ENV_MULT_CONDITIONコンスタンツを使用し、DistanceForEnvフィールドで、テストする条件とともにMultEnvConditionのIDを入力します。
この方法を使用すると、Animationコマンドだけで多くのENV条件を実行できます。

MultEnvConditionコマンドは最初のフィールドにそのIDを持ち、次のフィールドは3つの値のグループです。各グループには次の3つのフィールドがあります。

EnvCondition
DistanceForEnv
Extra

上記のフィールドの名前はAnimationコマンドと同じで、同じ方法で使用できます。

ですから、「ララはフレアを持っている」、「ララはTestPositionにいる」という複数の条件を設定するには、次のコマンドを入力します。
;テストの位置
TestPosition=3, IGNORE, ANIMATING7, 0-512, 0+512, 0-127, 0+127, -860-300, -860+300, 0-$1000, 0+$1000, 0,0,0,0

;複数の条件
MultEnvCondition=1, ENV_HOLD_EXTRA_ITEM_IN_HANDS, IGNORE, HOLD_FLARE, > ;第一の条件:ララがフレアを持っている
                 ENV_ITEM_TEST_POSITION, 3, IGNORE ;第二の条件:TestPositionの3番

;最後にAnimationコマンド(診断モード)
Animation=-3, KEY1_ACTION, IGNORE, FAN_ALIGN_TO_ENV_POS, ENV_MULT_CONDITION, 1 , IGNORE , STATE_STOP

サンプルD - メタルゲートの前

このサンプルでは、メタルゲートの前に到達させます。
image
理想的な位置のデータは次のとおりです。
image
Animation=-4, KEY1_ACTION, IGNORE, FAN_ALIGN_TO_ENV_POS, ENV_ITEM_TEST_POSITION, 4, IGNORE, STATE_STOP
上記の画像で見られる理想的な位置を使用して、上の段落の理想的な位置の計算で示されているように、TestPositionを作成することができます。

TestPositionでの二重の向き

このサンプルDでは、TestPositionコマンドでTPOS_DOUBLE_HORIENTフラグを使用しました。
このフラグは、オブジェクトの反対側の位置でも作業を行うことを可能にします。
ゲームで試してみると、ゲートの両側からアニメーションを開始することができます。

このフラグは、オブジェクトのピボット(原点X、Y、Z)が実際に目に見えるメッシュの中央にある場合にのみうまく機能します。残念ながら、場合によっては、ピボットはアイテムが配置されるセクターの隅にあり、この場合、両側からのアニメーションは上手くいきません。

Metasequoiaを使用してオブジェクトの原点を移動する

オブジェクトのピボットを移動する必要がある場合は、MetasequoiaとStrpixを使用する必要があります。

Strpixでは、オブジェクトのメッシュを見つけて、このメッシュをDXF形式で書き出します。
次に、画像の設定でMetasequoiaにDXFファイルをインポートします。
image
現在、Metasequoiaでは、各セクターはtomb4セクターの1/4です。
ここで使ったゲートは、tomb4セクターの中心にその原点を持つように移動しました。
あなたはMetasequoiaでどのように表示されるか見ることができます。
image
tomb4セクターの中心が赤い点です。基準として3軸の色付き線を使用してください。
上の画像の白い色はtomb4セクターです。

tomb4セクターの中心にオブジェクトを移動すると、次のパラメータを使用してDXF形式でオブジェクトをエクスポートします。
image
次に、Strpixで変更されたDXFファイルを同じメッシュのオブジェクトにインポートします。

この操作の後、FexAnimを使用して、オブジェクトの衝突と可視性ボックスを修正する必要があります。これは、Metasequoiaで位置を変更したためです。

FexAnimを使用すると、TR4ファイルのみで作業できます。
  1. レベルを作成してTR4ファイルを作成します。
  2. このTR4ファイルをFexAnimでロードします。
  3. オブジェクトを左フレームで選択します。
  4. アイテムをクリックし、「Show」をチェックします。
  5. ここであなたのオブジェクトのアニメーションごとに[Automatic Bound]ボタンをクリックします。FexAnimウィンドウの左上隅にアニメーションのリストが表示されます。
  6. すべてのアニメーションが完了したら、メニューから[Save As]を選択し、同じTR4ファイルを新しく選択します。
  7. 今、あなたの正しいオブジェクトをWADファイルに入れるには、WADMergerを使用してオブジェクトをTR4ファイルからWADファイルに移動する必要があります。

サンプルE - キューブの前のララ

このサンプルでは、立方体の前に到達させます。
image

あらゆる面を向いている

このサンプルでは、TestPositionでTPOS_FOUR_HORIENTフラグを使用して、立方体の各側に対してTestPositionを実行しました。
このフラグは、オブジェクトの原点がセクターの中心に正確にあり、オブジェクトが各面に規則的な形をしている場合にのみ正常に機能します。
TestPosition=5, TPOS_FOUR_HORIENT, ANIMATING3, 0-512, 0+512, 0-127, 0+127, -680-200, -680+200, 0-$1000, 0+$1000,0,0,0,0

Animation=-5, KEY1_ACTION, IGNORE, FAN_ALIGN_TO_ENV_POS, ENV_ITEM_TEST_POSITION, 5, IGNORE, STATE_STOP

サンプルF - ララがBADDY_1をパンチする(完全な実例)

これまでのサンプルでは、位置を確認するTestPositionのみを設定していましたが、そのサンプルでカスタムアニメーションを使用すると、常に欠落していました。
理由は簡単です。ここまではAnimationEditorでカスタムアニメーションを作成しておらず、スクリプトコマンドを実行してカスタムアニメーションの位置を確認していただけだからです。
しかし、このサンプルFでは、TR5で見つけたアニメーションを使って完全な実例を作成します。
アニメーションはララパンチでなければなりませんが、実際には私たちの目標とするアニメーションほど良くありません。
新しいアニメーションを作成できる場合は、作成した戦闘アニメーションを使用してこのサンプルを拡張することができます。ここでは、スクリプトコマンドで作成する方法を検討します。

移動中のアイテムの理想的な位置を計算する

動いているアイテムに対してララの理想的な位置を計算する方法は、これまでと同じですが、この場合、Moveableの動きが続くという複雑さがあります。
この問題を解決するには、単純なトリックを実行することができます。Moveableの位置はゲームでまだトリガされていなくても、診断モードで表示されるため、彼のコリジョンが理想的な位置であると画面から読み取ることができます。
image
私たちは、上の画像のようにMoveableのある位置に特殊なテクスチャを配置して、目印にすることができます。
赤いテクスチャの白い円は、BADDY_1を配置したX、Zの位置を示し、小さな黒い矢印は、彼が向いている方向です。
今、私たちはBADDY_1を動かす際に、そのテクスチャを使って理想的な位置を検出することができます。
LogItemコマンドにインデックスを入力します。
LogItem=FLI_SHOW_DIFFERENCES, 14
ゲームをプレイし、正しい位置にララを移動させます。
image
画面上のデータを読み取ると

DifX = -25 Y=0 Z=-469 HOrientDif = 757($02f5)

これらの理想的な位置を得ることができます。

DifX = 0 Y=0 Z= -400 HOrientDif = 0($0000)

HOrientDifに、東方向に右腕を使ってララがパンチするという事実を補うため、私たちは西方向に大きな回転の許容値を与えています。

したがって、TestPositionコマンドは次のようになります。
TestPosition=6, TPOS_FOUR_HORIENT, BADDY_1, 0-200,0+200, 0-127, 0+127, -400-256, -400+256, 0-$1000 ,0+$1800 ,0,0,0,0
TPOS_FOUR_HORIENTフラグを使用して4方向の上で作業を行いましたが、これは選択肢に過ぎず、1方向でしか動作しないように設定した方が、より現実的でした。

ララに新しいスキルを加えるために必要なこと

ララに新しいスキルを追加するには、次のことが必要です。

カスタムアニメーション

ここではこのアニメーションを使用します。完璧ではありませんが、現状では最高のものです。
image
彼女がクロスボウやピストルなどを構えたときにパンチするのを避けるため、手が自由であるかどうか確認するためにENV_FREE_HANDS条件を追加する必要があります。
MultEnvCondition=2, ENV_FREE_HANDS, IGNORE, IGNORE, > ;ララの手を自由にする。
                 ENV_ITEM_TEST_POSITION, 6, IGNORE;ララがBADDY_1に近づくためのTestPosition。

Animation=445, KEY1_ACTION, IGNORE, FAN_KEEP_NEXT_StateID, ENV_MULT_CONDITION, 2, IGNORE, STATE_STOP

NG AnimCommandsの設定方法

NG AnimCommandsは、カスタムアニメーションを再生するときに実行される特別なAnimCommandsです。
NG AnimCommandsのデータを取得するには、トリガウィンドウの[Export AnimCommand]をクリックします。

カスタムアニメーションにNG AnimCommandsを追加するもご覧ください。

今、私たちはどのようなスキルをララに与えるのか、それをどのようにしてTriggerGroupに変換するかを判断する必要があります。

スキルは敵(BADDY_1)をパンチすることで、AnimCommandsは敵のHP(活力)を取り除き、BADDY_1を投げ飛ばすアニメを設定する必要があります。

私たちのTriggerGroupには2つのトリガがあります。

最初にエクスポートされたトリガは、敵のHPを低下させます。
; Exporting: TRIGGER(2086:0) for ACTION(14)
; <#> : BADDY_1    ID:14     in sector:(4,4) of Room4(これはTestPositionで見つかったBADDY_1に置き換えられます)
; <&> : Enemy. Hurth <#>enemy removing (E)Vitality points
; (E) : Vitality Points=    8
; Values to add in script command: $5000, 14, $826
一方、BADDY_1を投げ飛ばすアニメのための第二のトリガ
; Exporting: TRIGGER(783:0) for ACTION(14)
; <#> : BADDY_1    ID:14     in sector:(4,4) of Room4
; <&> : Force (E) animation (0-31) for <#>object
; (E) :    3 Animation
; Values to add in script command: $5000, 14, $30F
TriggerGroupコマンドで入力するデータは、エクスポートされた各トリガの3つの値であるため、TriggerGroupは次のようになります。
TriggerGroup=1, $5000+TGROUP_USE_FOUND_ITEM_INDEX, 14, $826, > ; 敵を傷つけHPを8取り除く。
             $5000+TGROUP_USE_FOUND_ITEM_INDEX, 14, $30F ;BADDY_1を投げ飛ばすアニメ。
備考:
TGROUP_USE_FOUND_ITEM_INDEXフラグを使用して、エクスポートされたトリガに入力された元のアイテムインデックスを、TestPositionコマンドで正しい位置を検出した(任意の)アイテムインデックスに置き換えました。
この理由から、TriggerGroupのトリガは、index = 14の特定のMoveableと関連付けられ、スキルはレベル内のすべてのBADDY_1で同様に働くことができます。
サンプルでは、異なるインデックスを持つ別のBADDY_1を置き、ララが高い床に行くと彼をトリガすることができ、あなたは私たちのスキルがこの新しいBADDY_1アイテムでも動作することがわかります。

BADDY_1のために強制されたアニメーションは別のアニメーションの複製です。
ここではBADDY_1を殺すために使用されたアニメーションを利用しましたが、これは彼を倒すためにのみ利用し、この(複製したアニメーションの)NextAnimにBADDY_1が立ち上がるための別のデフォルトのアニメーションを設定しました。

これで、TriggerGroup = 1を実行するフリップエフェクトトリガをエクスポートします、
image
[Export AnimCommand]ボタンをクリックすると、このAnimCommandsを実行する際にフレーム番号を入力するように求められます。番号12を選択しました。

備考:AnimationEditorでフレームレートが1以外の場合は、フレーム内の有効フレーム数を考慮する必要があります。

我々はこのテキストを得ます。
--------------------------------------------------------------------------------------------------
Add a SetPosition anim command with following values:

Set Position [-24564] [118] [1]

Infos about exported trigger
-------------------------------------------------------------------------------
Exporting: TRIGGER(1:0) for FLIPEFFECT(118)
<#> : TriggerGroup. Perform <&>TriggerGroup from script.dat in (E)way
<&> : TriggerGroup=    1
(E) :  Mutiple performing (to use when in TriggerGroup there is some condition)

AnimCommand: Frame=12
--------------------------------------------------------------------------------------------------
ここでWADMergerを開いてララを選択しクリックして、AnimationEditorで、上のAnimCommandsをアニメーション445に配置できます。
追加するデータは次のとおりです。

Set Position [-24564] [118] [1]

カスタムアニメーションにNG AnimCommandsを追加するを参照してください。

戦いのサンプルをどのように強化する

私たちのサンプルを再生しようとすると、それは動作しますが、それほどうまくはありません。
AnimationEditorで新しいアニメーションを作成する時間と能力があれば、もっと素晴らしいものができます。

異なる戦闘アニメーション

異なる戦闘モードを持つ2つ以上のアニメーションを作成することができます。パンチ、キックなど。
カスタムアニメーションごとに異なるテストとアニメーションのグループを設定し、さらにキーボードコマンドを有効にします。
アニメーションの種類ごとに、異なる敵に異なるダメージを与え、傷つけるアニメーションを作成する必要があります。

新しい非射撃武器を作成する

あなたはナイフを使って戦うことができます。
すべての武器管理がハードコーディングされているため、解決すべき問題があります。
この方法を使うことをお勧めします。
上記の提案に従えば、ナイフはうまくいくはずです。
理論的には、傷つけるアニメーションの後に敵にいくつかの効果を追加するようなことができます。流血効果をAnimCommandsとして追加するため、アクショントリガをエクスポートして、敵の傷ついたアニメーションに挿入することでこの目的は実現できます。

ナイフを普通のインベントリアイテムとして持っているのは少し難しいですが、現在は一般的な方法でしか対応できません。
ピックアップアイテムのようなインベントリアイテムを修正して、ナイフの外観を与えることです。

このようなCustomizeコマンドをScript.txtに入力してください。
Customize=CUST_SET_INV_ITEM, PICKUP_ITEM4
ナイフがPICKUP_ITEM4だったとすると、
武器のようにアイテムを常にインベントリに保存するには、上記のコマンドが必要です。(ララがピストルを構えたとき、それらはインベントリに残ります)

次に、GT_USED_INVENTORY_ITEMとPICKUP_ITEM4のスロットを持つGlobalTriggerコマンドを作成する必要があります。
このGlobalTrigger(条件がtrueの場合)は、「Lara. (Mesh) Torch. <&>Give/Remove Torch to/from hand of Lara」トリガをエクスポートしたTriggerGroupに対して実行されます。

もちろん、トーチの設定を「Give」にします。

このようにして、私たちは新しい武器の最初の部分を実現します。

ララはナイフを見つけて拾うことができます。
それはインベントリに残ります。
ララはこのナイフを使うことができます。
そしてそれはララの手に現れます。
私たちのカスタムアニメーションでは、ララはそれを使って戦い、敵を殺すことができます。

まだ1つの問題があります。
ララが他の武器を選択するとどうなりますか?私たちのナイフ/トーチは投げ捨てられますが、これは私たちのスキルにとって理想的な動作ではありません。
この問題を解決するには、別のGlobalTriggerコマンドを次のように設定する必要があります。
GlobalTrigger=(GlobalTriggerのID), FGT_REMOVE_INPUT, GT_GAME_KEY1_COMMAND, KEY1_DRAW_WEAPON,...
上記のGlobalTriggerは、武器を構えるためのゲームコマンドを邪魔します。
FGT_REMOVE_INPUTフラグを追加すると、IdConditionTriggerGroupの条件がtrueの場合にのみ、ゲームコマンドDrawWeaponコマンドは削除されますが、それ以外の場合、DrawWeaponは正常に実行されます。

このため、上記のGlobalTriggerによって呼び出される2つのTriggerGroupを作成する必要があります。
このTriggerGroupでエクスポートするトリガは、「Lara. (Holds) Lara is holding/driving the <#>item" with item "Holding_Any_Torch」
次に、GlobalTriggerコマンドの「IdConditionTriggerGroup」フィールドに上記TriggerGroupのIDを入力します。

- トーチ/ナイフを持っていても、プレイヤーはナイフを捨てて別の武器を使うことを選んだとき、どうなりますか?この問題を解決するために使用されたTriggerGroupをどうするか。
簡単ですが悪い解決策、フリップエフェクトトリガ「Lara. (Mesh) Torch. <&>Give/Remove Torch to/from hand of Lara」の設定を「Remove」にしたものをTriggerGroupに入力する。
この場合、GlobalTriggerでFGT_REMOVE_INPUTフラグを使用する必要はありません。
プレイヤーがスペースバーを押して銃を構えると、ナイフはララの手から消え、ピストルを構えるコマンドは正常に機能します。
しかし、これはナイフが突然消えて不自然です。

より難しい解決策ですが、より効果的なのは、ナイフを取り外すために右手を身体の袋に移動する別のカスタムアニメーションを作成することです。このアニメーションの正しいフレームにNG AnimCommandsを配置してナイフのメッシュを取り除くことができます。
トリガは上記の「Lara. (Mesh) Torch. <&>Give/Remove Torch to/from hand of Lara」の設定を「Remove」にするのと同じです。
この場合、TriggerGroupではフリップエフェクトトリガだけを入力してカスタムアニメーションを実行し、ナイフとその中のAnimCommandsを取り出し、必要な操作を行います。
備考:この解決策を使用する場合、FGT_REMOVE_INPUTフラグをGlobalTriggerに入れておく必要があります。このフラグがない場合、DrawWeaponゲームコマンドは許可され、我々のアニメーションはトーチ/ナイフを投げるためのデフォルトのアニメーションに置き換えられます。
言い換えると、FGT_REMOVE_INPUTフラグを使用すると、GlobalTriggerによって最初のDrawWeaponコマンドはナイフをしまうために使用されます。
この操作の後、プレイヤーはスペースバーを押してピストルを構えることができ、カスタムアニメーションが完了すると、トーチが手元にないためGlobalTriggerはアクティブになりません。

ここではこれらすべての方法を作成する時間がありませんでしたが、おそらくこれで上手く動作するはずです。


サンプルG - ルーム形状をテストする条件

サンプルGには、ララに対するルーム形状を検出するための診断モードのAnimationコマンドのリストがあります。
多くの条件には明確な意味があるため、最も具体的な環境条件についてのみ説明します。
備考:これらのサンプルの多くは、立っていて、ACTION(「Ctrl」)キーを押して条件を実行する必要があります。

内側と外側のコーナー

いくつかの条件には、「IN_CORNER」または「OUT_CORNER」というコーナーの定義があります。
これらの条件下では、ララがコーナリングモードになったり、登りモードまたはハングモードで左または右に曲がったりする可能性があります。
ここでは、「内側」または「外側」のコーナーの概念を理解するための画像を示します。

G1 - 内側コーナー

image
上の画像では、内側(右)コーナーの意味を見ることができます。
Animation=-6, KEY1_ACTION, IGNORE, IGNORE, ENV_CLIMB_RIGHT_IN_CORNER, IGNORE, IGNORE, STATE_CLIMB_DOWN, >
          STATE_CLIMB_LEFT, STATE_CLIMB_RIGHT, STATE_CLIMB_UP, STATE_CLIMB_START_AND_STANDING
使用される条件はENV_CLIMB_RIGHT_IN_CORNERであり、ララが他のモードで登るときは、右に内側に登ることができる壁があるときはtrueです。
条件がtrueであるときの位置を示すために、「Anim = 6 = YES」というテキストを見ることができます。
ララを左に移動しようとすると、ララが右端から離れすぎるため、診断の変更が「Anim-6 = no」になります。
とにかく、DistanceForEnvフィールドを変更して、右壁からの許容距離を増やすこともできます。
デフォルト値(DistanceForEnvにIGNOREを入力した場合に使用される)は140です。より大きな値を入力すると、ララが右壁から遠い場合でも条件がtrueになります。

G2 - 外側コーナー

image
上の画像では、外側のコーナーを見ることができます。
Animation=-7, KEY1_ACTION, IGNORE, IGNORE, ENV_CLIMB_LEFT_OUT_CORNER, IGNORE,IGNORE, STATE_CLIMB_DOWN, >
          STATE_CLIMB_LEFT, STATE_CLIMB_RIGHT, STATE_CLIMB_UP, STATE_CLIMB_START_AND_STANDING
使用される条件は、ENV_CLIMB_LEFT_OUT_CORNERで、Animation = -7スクリプトコマンドで設定されます。
診断情報「Anim-7 = YES」を見ることができます。なぜなら、ララは、左隅の外側に回り込むのに十分近いからです。

G3 - モンキー天井の高さ

image
条件ENV_MONKEY_CEILINGは、ララと天井の距離を確認します。
Animation=-8, KEY1_ACTION, IGNORE, IGNORE, ENV_MONKEY_CEILING, $0705, IGNORE,STATE_STOP
この状態は、ララがモンキースイングのセクターにあり、天井からの高さの距離がDistanceForEnvで設定された範囲内にある場合にのみ当てはまります。

他のENV条件とは異なり、DistanceForEnvには2つの値が必要です。

MaxClickHeight * 256 + MinClickHeight

例えば、この例では、範囲5(minheight)と7(maxheight)で囲まれた高さを調べました。

DistanceForEnvが範囲を必要とする場合、16進形式がよいでしょう。なぜなら、16進数で、高さの距離がMax(07)とMin(05)クリックでは、$0705となり、読みやすいからです。
10進形式では、数字は1797となり、わかりにくいです。

備考:
混乱しないでください。DistanceForEnvでは、クリック数のある範囲を入力することはほとんどありません。この条件でのみです。ほとんどのENV条件では、距離は絶対値を持ち、1セクター= 1024で、1クリックはDistanceForEnvで256を入力する必要があります。

G4 - 正面壁のよじ登り

image
使用される条件はENV_SUPPORT_IN_FRONT_WALLで、正面の壁の近くにいて、希望する高さのスペースがあるかどうかを確認するために使用されます。
Animation=-9, KEY1_ACTION, IGNORE, IGNORE, ENV_SUPPORT_IN_FRONT_WALL+ >
          ENV_POS_STRIP_1+ENV_POS_HORTOGONAL, $0274, IGNORE, STATE_STOP
このAnimationコマンドでは、ENV_POS_STRIP_1フラグを使用して、ララが壁側のセクターの最前面(ストリップ1)にいることと、
ララに正しい向きにいることを要求するには、ENV_POS_HORTOGONALフラグを立ててください。
あなたがララがいる方向またはセクターのサイドを変更して、条件が「いいえ」であるときはゲームで(「Ctrl」キーを押して)確認することができます。

この状態では、つかめる最小高さ(下側)、つかめる最大許容高さ(下側)、つかんだ先の空間の高さの3つの値が必要なため、DistanceForEnvフィールドは少し複雑です。
ララがつかめる場所を見つけるだけの条件なら、空間の高さは1クリックですが、ララがどの方角からでも壁の上の穴の中にジャンプして入ろうとするアニメーションを作成しようとしたら、空間の高さは少なくとも2クリックにする必要があります。
上のAnimationコマンドで、ここでは次のように設定しました。

最小値と床の距離:4クリック
最大値と床の距離:7クリック
手すり上のスペースの最小高さ:2クリック

DistanceForEnvフィールドでこれらの3つの値を圧縮する式は次のとおりです。

MinLowerSize + MaxLowerSide * 16 + HeightSpace * 256

この場合でも、16進形式だと理解するのが簡単です。$0274になります

備考:
ララが、この壁を登っているときに壁に穴があることを確認するためにこの条件を使用したい場合は、ララが登っている間ララのYビポットが異なるため、DistanceForEnvで入力する値が異なることがあります。
このような状況で正しい値を見つけるには、診断モードが非常に便利です。上のようなAnimationコマンドを入力します(ただし、登っているStateIDが異なるために最後に「2」を変更する必要があります)。そしてララの条件がtrueであるかどうか(YESに変化するかどうか)を確認するために上下に移動します。次に、使用する正確な距離値がわかるまで、スクリプトコマンドを変更し、より良い値を理解することができます。

G5 - モンキースイングの上に登れる壁がある

image
上の画像はENV_HOLE_IN_FRONT_CEILING_CLIMB条件のtrueの状態を示しています
Animation=-10, KEY1_ACTION, IGNORE, IGNORE, ENV_HOLE_IN_FRONT_CEILING_CLIMB + >
          ENV_POS_STRIP_1+ENV_POS_HORTOGONAL, IGNORE, IGNORE, >
          STATE_MONKEY_STILL_OR_HANG_SWING
ENV_POS_STRIP_1フラグを使用して境界にララを設定し、ENV_POS_HORTOGONALフラグを設定して境界をララと平行に設定しました。

G6 - モンキースイングの上に登れる壁があり、その壁を背にする

image
上の画像は、ENV_HOLE_BACK_CEILING_CLIMB条件のtrueの状態を示しています。
Animation=-11, KEY1_ACTION, IGNORE, IGNORE, ENV_HOLE_BACK_CEILING_CLIMB + >
          ENV_POS_STRIP_3+ENV_POS_HORTOGONAL, IGNORE, IGNORE, >
          STATE_MONKEY_STILL_OR_HANG_SWING
ENV_POS_STRIP_1の代わりにENV_POS_STRIP_3を使用したAnimationコマンドでは、ENV_POS_STRIP_3を使用するには境界線上に彼女の背中がなければならないので、注意してください。

G7 - 高い壁にぶら下がったララ

image
上の画像は、ENV_HANG_WITH_FEET条件のtrueの状態を示しています。
Animation=-12, KEY1_ACTION, IGNORE, IGNORE, ENV_HANG_WITH_FEET, $250, IGNORE, STATE_HANG, >
          STATE_HANG_LEFT, STATE_HANG_RIGHT
この条件を使用して、カスタムアニメーションで上層階にすばやくジャンプさせることができます。ララの足先が壁に当たっているならば、彼女は上のフロアを飛び回ることができますが、足先が宙に浮いているならできません。
image

この他の画像では、足先が壁の下にあり、宙に浮いているので、条件はfalseです。
上の画像でははっきりしません。とにかくその部屋で遊んでいると、ララがぶら下がっている壁の高さに応じて、状態がYESまたはNOになるのがわかるでしょう。


トラブルシューティング

正しいENV条件でAnimationコマンドを作成して、カスタムアニメーションを開始することはできたものの、希望とは違ったものになってしまう場合があります。
このような状況は、AnimationEditorのカスタムアニメーションに設定されたStateIDが間違っている。アニメーションの実行を準備するためのFAN_フラグがない。または何らかの衝突の問題が原因で発生することがあります。
この章では、最も一般的な問題についていくつか提案します。

StateIDに関する問題

状況によっては、アニメーションに不適切なStateIDが設定されているためアニメーションを実行する際に問題が発生することがあります。
各StateID番号には、TRNGで実行されるコードの別の部分があります。
間違ったStateIDを選択した場合、このコードはアニメーションを妨害または禁止する可能性があります。これは、物理法則に違反する可能性があるためです。

最も一般的な問題

問題の種類に応じて、正しい解決策を見つけることができます。
あなたは正しいENV_条件と(さらに)TestPositionコマンドを設定して、カスタムアニメーションを開始することはできました。
ですからカスタムアニメーションを実行している間に、問題があるはずです。

次のような問題があります。

StateIDリスト

これは、デフォルトのtomb4 exeのStateIDの完全なリストです。

備考:

*Managementプロシージャは、入力ゲームコマンドをフィルタリングしたり、何をしているのか、周囲に何があるか(彼女の周りの環境)に応じて、状態やアニメーションの多くの変更を適用するために使用されるコードです。

* Collisionプロシージャは、理論上、ララがそのStateIDにいるときに適用される衝突についてのみチェックする必要があります。とにかく多くの状況では、ほとんどの計算がCollisionプロシージャで発生します。

* NULL値には手続きがありません。つまり、TRNGはそのStateIDタイプをサポートするために特別なことを何もしません。

* LARA DEFAULT COLは、デフォルトのCollisionプロシージャです。特別なチェックは行いませんが、ララが壁、床または天井に入るのを避けるためのデフォルトの検証のみが実行されます。

* CONTROLLEDプロシージャは、ララがハードコーディングされた特定のアニメーションを実行しているかどうかを確認し、アニメーション番号に従って追加の操作を実行します

* CONTROLLED LETプロシージャは、上記の「COONTROLLED」プロシージャと同じように動作しますが、この場合、他の位置(標準のAnimCommandsのSetPosition)で移動されるアニメーションで動作するようです。
CONTROLLED LET StateIDが2つあります。95(衝突のチェックが限定されています)と96が衝突のチェックなしです。

* SPECIALプロシージャは、ララを異なる位置または距離から見た、新しいカメラモードのみを強制します。

* COMPRESSは、ララがスプリングのようにしゃがんでから、ある方向にジャンプするいくつかのジャンプの準備段階です。

  StateID   Managementプロシージャ        Collisionプロシージャ
----------------------------------------------------------------
  0 ($00) : WALK                       COLLISION WALK
  1 ($01) : RUN                        COLLISION RUN
  2 ($02) : STOP                       COLLISION STOP
  3 ($03) : FORWARD JUMP               COLLISION FORWARD JUMP
  4 ($04) : NULL                       COLLISION FAST TURN
  5 ($05) : FAST BACK                  COLLISION FAST BACK
  6 ($06) : TURN RIGHT                 COLLISION TURN RIGHT
  7 ($07) : TURN LEFT                  COLLISION TURN LEFT
  8 ($08) : DEATH                      COLLISION DEATH
  9 ($09) : FAST FALL                  COLLISION FAST FALL
 10 ($0A) : HANG                       COLLISION HANG
 11 ($0B) : REACH                      COLLISION REACH
 12 ($0C) : SPLAT                      COLLISION SPLAT
 13 ($0D) : TREAD                      COLLISION TREAD
 14 ($0E) : NULL                       COLLISION FAST TURN
 15 ($0F) : COMPRESS                   COLLISION COMPRESS
 16 ($10) : BACK                       COLLISION BACK
 17 ($11) : SWIM                       COLLISION SWIM
 18 ($12) : GLIDE                      COLLISION GLIDE
 19 ($13) : NULL                       COLLISION NULL
 20 ($14) : FAST TURN                  COLLISION FAST TURN
 21 ($15) : STEP RIGHT                 COLLISION STEP RIGHT
 22 ($16) : STEP LEFT                  COLLISION STEP LEFT
 23 ($17) : NULL                       COLLISION ROLL2
 24 ($18) : SLIDE                      COLLISION SLIDE
 25 ($19) : BACK JUMP                  COLLISION BACK JUMP
 26 ($1A) : RIGHT JUMP                 COLLISION RIGHT JUMP
 27 ($1B) : LEFT JUMP                  COLLISION LEFT JUMP
 28 ($1C) : UP JUMP                    COLLISION UP JUMP
 29 ($1D) : FALL BACK                  COLLISION FALL BACK
 30 ($1E) : HANG LEFT                  COLLISION HANG LEFT
 31 ($1F) : HANG RIGHT                 COLLISION HANG RIGHT
 32 ($20) : SLIDE BACK                 COLLISION SLIDE BACK
 33 ($21) : SURF TREAD                 COLLISION SURF TREAD
 34 ($22) : SURF SWIM                  COLLISION SURF SWIM
 35 ($23) : DIVE                       COLLISION DIVE
 36 ($24) : PUSH BLOCK                 COLLISION NULL
 37 ($25) : PULL BLOCK                 COLLISION NULL
 38 ($26) : PUSH PULL READY            COLLISION NULL
 39 ($27) : PICK UP                    COLLISION NULL
 40 ($28) : SWITCH ON                  COLLISION NULL
 41 ($29) : SWITCH ON                  COLLISION NULL
 42 ($2A) : USE KEY                    COLLISION NULL
 43 ($2B) : USE PUZZLE                 COLLISION NULL
 44 ($2C) : UNDERWATER DEATH           COLLISION UNDERWATER DEATH
 45 ($2D) : NULL                       COLLISION ROLL
 46 ($2E) : SPECIAL                    NULL
 47 ($2F) : SURF BACK                  COLLISION SURF BACK
 48 ($30) : SURF LEFT                  COLLISION SURF LEFT
 49 ($31) : SURF RIGHT                 COLLISION SURF RIGHT
 50 ($32) : NULL                       NULL
 51 ($33) : NULL                       NULL
 52 ($34) : SWAN DIVE                  COLLISION SWAN DIVE
 53 ($35) : FAST DIVE                  COLLISION FAST DIVE
 54 ($36) : NULL                       COLLISION NULL
 55 ($37) : WATER OUT                  COLLISION NULL
 56 ($38) : CLIMB START_AND_STANDING   COLLISION CLIMB START AND STANDING
 57 ($39) : CLIMB UP                   COLLISION CLIMB UP
 58 ($3A) : CLIMB LEFT                 COLLISION CLIMB LEFT
 59 ($3B) : CLIMB END                  NULL
 60 ($3C) : CLIMB RIGHT                COLLISION CLIMB RIGHT
 61 ($3D) : CLIMB DOWN                 COLLISION CLIMB DOWN
 62 ($3E) : NULL                       NULL
 63 ($3F) : NULL                       NULL
 64 ($40) : NULL                       NULL
 65 ($41) : WADE                       COLLISION WADE
 66 ($42) : WATER ROLL                 COLLISION WATER ROLL
 67 ($43) : PICK UP FLARE              COLLISION NULL
 68 ($44) : NULL                       NULL
 69 ($45) : NULL                       NULL
 70 ($46) : DEATH SLIDE                NULL
 71 ($47) : DUCK                       COLLISION DUCK
 72 ($48) : DUCK                       COLLISION DUCK
 73 ($49) : DASH                       COLLISION DASH
 74 ($4A) : DASH DIVE                  COLLISION DASH DIVE
 75 ($4B) : MONKEY_STILL_OR_HANG_SWING COLLISION MONKEY_STILL_OR_HANG_SWING
 76 ($4C) : MONKEY SWING               COLLISION MONKEY SWING
 77 ($4D) : MONKEY LEFT                COLLISION MONKEY LEFT
 78 ($4E) : MONKEY RIGHT               COLLISION MONKEY RIGHT
 79 ($4F) : MONKEY 180                 COLLISION MONKEY 180
 80 ($50) : ON ALL FOURS STANDING      COLLISION ON ALL FOURS STANDING
 81 ($51) : ON ALL FOURS FORWARD       COLLISION ON ALL FOURS FORWARD
 82 ($52) : HANG TURN LEFT             COLLISION HANG TURN LEFT RIGHT
 83 ($53) : HANG TURN RIGHT            COLLISION HANG TURN LEFT RIGHT
 84 ($54) : ON ALL FOURS TURN LEFT     COLLISION ON ALL FOURS TURN LEFT RIGHT
 85 ($55) : ON ALL FOURS TURN RIGHT    COLLISION ON ALL FOURS TURN LEFT RIGHT
 86 ($56) : ON ALL FOURS BACK          COLLISION ON ALL FOURS TURN LEFT RIGHT BACK
 87 ($57) : NULL                       NULL
 88 ($58) : NULL                       COLLISION ON ALL FOURS TURN LEFT RIGHT TO HANG
 89 ($59) : CONTROLLED                 LARA DEFAULT COL
 90 ($5A) : ROPE LEFT                  NULL
 91 ($5B) : ROPE RIGHT                 NULL
 92 ($5C) : CONTROLLED                 LARA DEFAULT COL
 93 ($5D) : CONTROLLED                 NULL
 94 ($5E) : CONTROLLED                 NULL
 95 ($5F) : CONTROLLED LET             COLLISION TURN SWITCH
 96 ($60) : CONTROLLED LET             NULL
 97 ($61) : CONTROLLED                 NULL
 98 ($62) : PICK UP                    COLLISION NULL
 99 ($63) : NULL                       COLLISION POLE STATIC
100 ($64) : NULL                       COLLISION POLE UP
101 ($65) : NULL                       COLLISION POLE DOWN
102 ($66) : POLE LEFT                  NULL
103 ($67) : POLE RIGHT                 NULL
104 ($68) : PULLEY                     LARA DEFAULT COL
105 ($69) : DUCK LEFT                  COLLISION DUCK LEFT RIGHT
106 ($6A) : DUCK RIGHT                 COLLISION DUCK LEFT RIGHT
107 ($6B) : EXTERNAL CORNER LEFT       LARA DEFAULT COL
108 ($6C) : EXTERNAL CORNER RIGHT      LARA DEFAULT COL
109 ($6D) : INTERNAL CORNER LEFT       LARA DEFAULT COL
110 ($6E) : INTERNAL CORNER RIGHT      LARA DEFAULT COL
111 ($6F) : ROPE                       COLLISION ROPE
112 ($70) : ROPE CLIMB UP              NULL
113 ($71) : ROPE CLIMB DOWN            NULL
114 ($72) : ROPE                       COLLISION ROPE FORWARD
115 ($73) : ROPE                       COLLISION ROPE FORWARD
116 ($74) : NULL                       NULL
117 ($75) : CONTROLLED                 NULL
----------------------------------------------------------------