そのための課題は次のとおりです。
場合によっては、NGLEや他のTRの標準アニメーションを使用し、それを他のターゲットとともに使用することもできます。
*********************************************************** 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= 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を入力する必要があります。
例えば、以下のような場合
XDistanceMin = -256
XDistanceMax = +256
ララとアイテムのX軸の距離が1クリック(1セクターは1024単位のため、1クリックは256単位)内であることを表しています。
逆に、XDistanceMinとXDistanceMaxを0に設定すると、ララと他のアイテムが、1ピクセル程の距離も存在しないことになります。とにかく、0と0を設定するのは慣れが必要なため、やめておいたほうがよいでしょう。
他の例をみてみましょう。
テストするアイテムがコーヒーカップであり、ゲーム中のカップがX軸と+100の距離である場合、これはカップがララの左手の近くにあることを意味します。距離が-100であれば、カップはララの右手に近づくはずです。
X軸上の距離範囲の説明は、Y軸上に対しても同じです。とにかくこの場合はさらに複雑です。なぜなら、ララのXとZの原点は常に同じですが、彼女の体の半分であるララの原点Yは、現在のアニメーションに応じて変化します。
診断モードを使ってアニメーションでララの原点Yの意味するものを理解することをお勧めします。
Script.txtの[Options]セクションにコマンドを入力します。
Diagnostic=ENABLEDゲームでは、ララについて多くのことがわかります。
したがって、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を使用しました)
起立姿勢の高さ(画像Aまたは画像C)= 800
起立姿勢の手から手への幅(画像A)= 320
側面からのララの幅(画像C)= 130
しゃがんだ時の高さ(画像D)= 320
クライミング時の高さ(画像B)= 600正しい距離範囲(前のフィールドを参照)を設定しても、水平方向の違いが間違っていれば、ララを(正しく)アイテムに近づけさせることができますが、アイテムはララに正しい側を示していません。
例えば、キャビネットのようなオブジェクトを作成し、ララがロックを強制的に開くアニメーションを作成する場合、ララがキャビネットオブジェクトに近いだけでなく、ララがロックの前にいなければなりません。なぜなら、もしララがキャビネットの裏側にいる場合、その距離は正しいかもしれませんが、アニメーションは意味を持たないはずだからです。
範囲をMin = - 200、Max = +200として設定できます。
ララが別のVOrientを持っている非常にまれなケースは、ダッシュしているとき、水中で泳ぐとき、または彼女がダイビングしているときです。
とにかく、サンプルレベルを使って理解することができます。
値の変更はほとんどありません。常に0にする必要があるため、ララとアイテムの差もゼロにする必要があります。
とにかく、ララがダッシュで走って、左右に曲がっている時に、この値は少し変化しています。
-200 + 200の範囲で入力できますが、ほとんどの場合、おそらく0と0を入力することもできます。
Diagnostic=ENABLEDDiagnosticを使用すると、画面上にララに関する情報を表示でき、新しいコマンドLogItemでは他のアイテムについても同じ情報を得ることができます。LogItem(IndexItemToLogフィールド)には他のアイテムのインデックスを入力する必要があります。
LogItem=FLI_SHOW_DIFFERENCES, IndexItemToLog
あなたがLara.Z座標 > Item.Zを絶対に必要とする場合は、サインを反転する画面上の差分値を読み取ることができます。
例えば、ZDif = +400を読んだ場合、理想的な位置はZDif = -400として使用してください。この場合、XDifが0以外の場合は逆もあります。XDifが-150の場合、理想的な位置はXDif = +150と考えるべきです。
備考:この説明はYDif値を考慮しません。なぜなら、それは常にあなたが画面上で読んだ値だからです。
この場合、軸上の距離に関する理想的な値は次のとおりです。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,1000Animationコマンドは次のようになります。
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このコマンドでは、次のことがわかります。
「ENV_ITEM_TEST_POSITION」条件は、Id = 「1」のTestPositionを使用します。
スクリプトを作成しゲームでチェックして、アニメーションの実行位置を確認できます。
どのように状態を変更するかを確認するために許容値を変更してみてください。
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
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,1000TestPositionコマンドで入力する理想的な位置と最終的なデータとの間の変換の計算の詳細については、理想的な位置の計算を参照してください。
このサンプル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フラグを使用して、理想的な位置にあるララの自己調整を有効にしました。
このフラグは、TestPositionを使用してENV_ITEM_TEST_POSITION条件でララの正しい位置を確認した場合にのみ機能します。
その理由は、自己調整では、自己調整で到達する理想的な位置を見つけるために、TestPositionのデータを自分自身で使用するためです。
TRNGは逆計算を実行して、TestPositionの範囲から理想的な位置を取得します。
使用される式は単純です。(MaxRange + MinRange)/ 2
このようにX、Y、Z、Hの各Orientは、ララに理想的な向きと位置が見つけられます。
備考:
- 自己調整を使用する場合は、Animationコマンドのキーボードコマンドを設定する必要があります。そうしないと、ララは予期しない方法で動きます。
- 自己調整は、ララが立ち上がっている(または立ち上げ時)とき、水中で泳いでいるときや水面に浮いているときにはうまくいくはずですが、吊り下げ状態(登り、モンキースイング)やしゃがんだ状態では失敗する可能性があります。
- ゲームでララが無限に動く場合、これはあなたが理想的な位置を計算するために多少ミスしたことを意味します。実際にはアイテムの衝突ボックスが彼女を止めるため、ララの理想的な位置を設定します。このサンプルで興味深いのは、もう一つのENV条件(通常のENV_ITEM_TEST_POSITION条件以外のもの)も検証する必要があるということです。
それはララがフレアを持ったままカスタムアニメーションを実行するということです。
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
Animation=-4, KEY1_ACTION, IGNORE, FAN_ALIGN_TO_ENV_POS, ENV_ITEM_TEST_POSITION, 4, IGNORE, STATE_STOP上記の画像で見られる理想的な位置を使用して、上の段落の理想的な位置の計算で示されているように、TestPositionを作成することができます。
このフラグは、オブジェクトのピボット(原点X、Y、Z)が実際に目に見えるメッシュの中央にある場合にのみうまく機能します。残念ながら、場合によっては、ピボットはアイテムが配置されるセクターの隅にあり、この場合、両側からのアニメーションは上手くいきません。
Strpixでは、オブジェクトのメッシュを見つけて、このメッシュをDXF形式で書き出します。
次に、画像の設定でMetasequoiaにDXFファイルをインポートします。
現在、Metasequoiaでは、各セクターはtomb4セクターの1/4です。
ここで使ったゲートは、tomb4セクターの中心にその原点を持つように移動しました。
あなたはMetasequoiaでどのように表示されるか見ることができます。
tomb4セクターの中心が赤い点です。基準として3軸の色付き線を使用してください。
上の画像の白い色はtomb4セクターです。
tomb4セクターの中心にオブジェクトを移動すると、次のパラメータを使用してDXF形式でオブジェクトをエクスポートします。
次に、Strpixで変更されたDXFファイルを同じメッシュのオブジェクトにインポートします。
この操作の後、FexAnimを使用して、オブジェクトの衝突と可視性ボックスを修正する必要があります。これは、Metasequoiaで位置を変更したためです。
FexAnimを使用すると、TR4ファイルのみで作業できます。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
LogItem=FLI_SHOW_DIFFERENCES, 14ゲームをプレイし、正しい位置にララを移動させます。
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,0TPOS_FOUR_HORIENTフラグを使用して4方向の上で作業を行いましたが、これは選択肢に過ぎず、1方向でしか動作しないように設定した方が、より現実的でした。
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を追加するもご覧ください。
今、私たちはどのようなスキルをララに与えるのか、それをどのようにして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, $30FTriggerGroupコマンドで入力するデータは、エクスポートされた各トリガの3つの値であるため、TriggerGroupは次のようになります。
TriggerGroup=1, $5000+TGROUP_USE_FOUND_ITEM_INDEX, 14, $826, > ; 敵を傷つけHPを8取り除く。 $5000+TGROUP_USE_FOUND_ITEM_INDEX, 14, $30F ;BADDY_1を投げ飛ばすアニメ。備考:
BADDY_1のために強制されたアニメーションは別のアニメーションの複製です。
ここではBADDY_1を殺すために使用されたアニメーションを利用しましたが、これは彼を倒すためにのみ利用し、この(複製したアニメーションの)NextAnimにBADDY_1が立ち上がるための別のデフォルトのアニメーションを設定しました。
これで、TriggerGroup = 1を実行するフリップエフェクトトリガをエクスポートします、
[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を追加するを参照してください。ナイフを普通のインベントリアイテムとして持っているのは少し難しいですが、現在は一般的な方法でしか対応できません。
ピックアップアイテムのようなインベントリアイテムを修正して、ナイフの外観を与えることです。
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」にします。
このようにして、私たちは新しい武器の最初の部分を実現します。
ララはナイフを見つけて拾うことができます。
それはインベントリに残ります。
ララはこのナイフを使うことができます。
そしてそれはララの手に現れます。
私たちのカスタムアニメーションでは、ララはそれを使って戦い、敵を殺すことができます。
GlobalTrigger=(GlobalTriggerのID), FGT_REMOVE_INPUT, GT_GAME_KEY1_COMMAND, KEY1_DRAW_WEAPON,...上記のGlobalTriggerは、武器を構えるためのゲームコマンドを邪魔します。
このため、上記の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はアクティブになりません。
ここではこれらすべての方法を作成する時間がありませんでしたが、おそらくこれで上手く動作するはずです。
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です。
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スクリプトコマンドで設定されます。
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を入力する必要があります。
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)にいることと、
この状態では、つかめる最小高さ(下側)、つかめる最大許容高さ(下側)、つかんだ先の空間の高さの3つの値が必要なため、DistanceForEnvフィールドは少し複雑です。
ララがつかめる場所を見つけるだけの条件なら、空間の高さは1クリックですが、ララがどの方角からでも壁の上の穴の中にジャンプして入ろうとするアニメーションを作成しようとしたら、空間の高さは少なくとも2クリックにする必要があります。
上のAnimationコマンドで、ここでは次のように設定しました。
最小値と床の距離:4クリック
最大値と床の距離:7クリック
手すり上のスペースの最小高さ:2クリック
DistanceForEnvフィールドでこれらの3つの値を圧縮する式は次のとおりです。
MinLowerSize + MaxLowerSide * 16 + HeightSpace * 256
この場合でも、16進形式だと理解するのが簡単です。$0274になります
備考: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_SWINGENV_POS_STRIP_1フラグを使用して境界にララを設定し、ENV_POS_HORTOGONALフラグを設定して境界をララと平行に設定しました。
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_SWINGENV_POS_STRIP_1の代わりにENV_POS_STRIP_3を使用したAnimationコマンドでは、ENV_POS_STRIP_3を使用するには境界線上に彼女の背中がなければならないので、注意してください。
Animation=-12, KEY1_ACTION, IGNORE, IGNORE, ENV_HANG_WITH_FEET, $250, IGNORE, STATE_HANG, > STATE_HANG_LEFT, STATE_HANG_RIGHTこの条件を使用して、カスタムアニメーションで上層階にすばやくジャンプさせることができます。ララの足先が壁に当たっているならば、彼女は上のフロアを飛び回ることができますが、足先が宙に浮いているならできません。
この他の画像では、足先が壁の下にあり、宙に浮いているので、条件はfalseです。
上の画像でははっきりしません。とにかくその部屋で遊んでいると、ララがぶら下がっている壁の高さに応じて、状態がYESまたはNOになるのがわかるでしょう。
次のような問題があります。
他のチャンスは、デフォルトの衝突と基本的な管理を持つが、禁止はほとんどないStateID 95または96を使用することです。
最後のチャンスとして、効果的なよく知られたStateIDを選択して、カスタムアニメーションに従って選択することができます。
例えば、アニメーションがジャンプを実行する場合は、ジャンプの開始時にのみカスタムアニメーションを使用できますが、ジャンプフェーズでは次のようなジャンプ固有のStateIDを使用できます。
25 STATE_BACK_JUMP
3 STATE_FORWARD_JUMP
27 STATE_LEFT_JUMP
28 STATE_UP_JUMP
Etc
アニメーションが水面を泳いでいる場合は、次のような互換StateIDに状態を設定することができます。
17 STATE_SWIM
リファレンスパネルの[Find]ボタンを使用して、希望のStateIDを探します。例えば、ジャンプを伴うStateIDの場合、検索ワード「state jump」を使用して検索を実行するか、このチュートリアルの下部にあるStateIDリストを読み込みます。スタティックアニメーションを作成することができます。スタティックアニメーションは、その足を動かすことができますが、AnimationEditorでは同じ位置にあります。次に、Animation Editorの[Speed]フィールドに値を入力するか、TRNGがララを動かすアニメーションの状態を選択します。
別の方法は、AnimationEditorでララを移動するときです。この場合、位置を解析し、ゲームで正しく実行させるには、このアニメーションに標準のAnimCommandsを入力する必要があります。(標準の)SetPositionコマンドを入力すると、ララの位置を開始位置から最終位置に移動します。
例えば、ララのアニメーションが1セクター前方向に移動する場合、SetPositionコマンドは次のようになります。
SetPosition [0] [0] [1024]
そして、あなたはこのように上記の値を読むべきです。
アニメーションの終わりに、元の原点が現在の位置(アニメーション中には移動されずにメッシュのみが移動されていたため)から新しい位置に変更されました。+0からXピボット、+0からYピボット、+1024(1セクター前方)からZピボット
構文は次のとおりです。
Set Position [+x] [+y] [+z]
または、拡張モードでは。
Set Position [+Right/-Left displacemente] [-Up/+down displacement] [+Forward/-backward displacement]
ララの標準アニメーション42を見てください。それは彼女が1ブロック登る時です。あなたは彼女[-768](負の数で上に上がる)の動きを見ることができ、彼女[128]は少し前に移動することができます。「AnimCommand. Turn (facing) current object of <&>degrees in (E)way」
AnimCommandsとしてエクスポートし、カスタムアニメーションにデータを入力します。「AnimCommand. Update also original Lara position. (after a SetPosition)」
AnimCommandsとしてエクスポートし、カスタムアニメーションにデータを入力します。この問題を解決するには、カスタムアニメーションを変更する必要があります。
カスタムアニメーションの最初のフレームは、前のアニメーションの最後のフレームと(ほぼ)同じ位置にララがいる必要があります。
カスタムアニメーションの最後のフレームは、次のアニメーションの最初のフレームと同じ位置にララがいる必要があります。次のアニメーションは、カスタムアニメーションのNextAnimフィールドの値になります。
StateIDについては、ララのNextStateIDの値が重要です。
AnimationEditorではできませんが、書き出したフリップエフェクトを使用して動的に変更することができます。
「Lara. (Animation) Force <&>StateID and (E)next StateID for Lara」
AnimationスクリプトコマンドでFANフラグを使用して希望のStateIDまたは次のStateIDを強制します。
FAN_SET_NEUTRAL_STATE_ID(TRNGがカスタムアニメーションを妨げないようにしたい場合)
しかし、これは現在のStateIDを考慮し、AnimationEditorのStateIDフィールドに同じ目標タイプを得ることができます。
FAN_KEEP_NEXT_StateID(カスタムアニメーションを1回だけ実行して元のアニメーションとStateIDに戻したい場合)
備考:FAN_KEEP_NEXT_StateIDを使用しない場合、ララが使用する次のStateIDは、AnimationEditorでカスタムアニメーションのStateIDフィールドに配置されたものと同じになります。
つまり、FAN_KEEP_NEXT_StateIDフラグを使用すると、次のStateIDは、カスタムアニメーションを開始する前に再生されたアニメーションと同じになります。
ループアニメーション(NextAnimは現在のアニメーションと同じです)でFAN_KEEP_NEXT_StateIDを使用する場合は、AnimationEditorを使用して、カスタムアニメーションにChange State Id値を追加する必要があります。
「Change State Id」は、次のような値を持つレコードです。
[StateID] [LowFrame] [HighFrame] [Next Anim] [NextFrame]
TRNGは、アニメーションに「Change State Id」レコードが見つかると、それを次のように使用します。
* ララのNextStateIDが[Change State Id]レコードの[StateID]フィールドと同じであることを確認します。
* 同じ場合は、現在のアニメーションの現在のフレーム番号がフレーム範囲[LowFrame] - [HighRange]に囲まれているかどうかを確認します。
*フレームが範囲内にある場合、TRNGは「Change State Id」レコードのアニメーション[Next Anim]を実行し、この[Next Anim]アニメーションは[Next Frame]フレームから開始されます。通常は0(最初のフレーム)にする必要がありますが、現在のアニメーションのフレームとよく似た[Next Anim]のアニメーションとフレームを最初のフレームに使用することもあります。
言いたい事は理解できるが上手く言葉にできません。
ここから↓
FAN_KEEP_NEXT_StateIDを設定すると、ララのStateIDが2になったときにカスタムアニメーションが開始されます。つまり、STATE_STOPでは、カスタムアニメーションの実行中にララのNextStateIDフィールドに「2」が表示されるため、[StateID]に値2を使用してレコードを入力する必要があります。
そして、STATE_STOPの典型的なStateID2になるまで、ララが立っている位置から到達するまでカスタムアニメーションの現在のフレームが[NextFrame]フレームから始まる [NextAnim]の新しいアニメーションの[Low] - [High]の正しいフレームを呼ぶため他の値をセットすべきです。
ここまで↑
カスタムアニメーションの「Change State id」レコードに、異なるフレーム範囲や異なるNextStateID値を他に渡すために、さらに追加することができます。
備考:
*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 ----------------------------------------------------------------