どのように変数を使用するかは非常に簡単です。フリップエフェクトを使って変数を別の変数にコピーするか、何らかの数学関数を適用し、何らかの変数に掛け算を加えます。
代わりに、より複雑なことは、変数を使って役に立つものを実現する方法を理解することです。もう一つの目標は、GlobalTrigger、TriggerGroupと条件を使用して、非常に複雑な新しいスキルを実現することです。
TRNGでは、プログラミングのように多くのコマンドが動作しています。コマンドのためのTriggerGroupと条件のためのコンディショントリガです。
しかし、それは各プログラミング言語の基本要件、すなわち変数を欠いていました。
例えば、GlobalTriggerとTriggerGroupを使用して、新しい車両やハードコーディングされたパズルをシミュレートするなど、新しい複雑な操作を実現できますが、これを実現するには、これらの複雑な操作のどの段階でそれを行うか覚えておく必要があります。
TRNG_variables.zipプロジェクトのJump-Gainの例を見ると、変数を使ってララの新しいスキルをどのように使用できるかを理解できます。変数にはLocal変数とGlobal変数の2つがあります。
実際には異なる変数であることを理解することが重要です。Local Alfa変数はGlobal Alfaよりも独立した値を持ちます。
Local Alfa変数は、一つのレベルでのみ適用されるLocal変数です。一方、Global変数は、すべてのレベルで同じ値を持ちます。
Global変数の方が良いと思うかもしれませんが、現実にはLocal変数はそれぞれのレベルの変数を保持する利点があるので、レベル1のLocal Alfaの値を持つことができます(フィニッシュトリガ付き)。レベル2に入ると、レベル2のLocal Alfaでは異なる値を持つことができます。レベル1に戻ると、レベル1のLocal Alfaの値が新たに見つかります。
変数がそのレベルにのみ影響を及ぼす場合はLocal変数を使用し、あるレベルに値を設定し、将来のレベルでもその値を使いたい場合はGlobal変数を使用する必要があります。
TRNG変数で使用されているオーバーラップを理解するために、大きなボックスを分割して多くの小さなボックスを収納することを想像してみてください。
次の画像を参照してください。Byte :Min= 0 ;Max= 255(正の数のみ) Short:Min= -32768 ;Max= +32767 Long :Min= -2.147.483.648;Max= +2.147.483.647(すなわち、約+/-20億)大きな変数または小さな変数が重複している場合は、大きな変数を上書きする際にエラーを回避しなければなりません。
Text1
Text2
Text3
Text4
BigText
LastInputText
Timerは、LocalまたはGlobalな変数
CurrentValue変数(Globalのみ)
LastInputNumber変数(Globalのみ)
Store変数:変数Aから変数Pまで(すべてのGlobalと共通変数のようにByte、ShortまたはLongサイズに分割できる)
TRNGTimerで時間を設定するには、2つのフリップエフェクトがあります。値は秒単位またはティックフレーム単位で設定できます。1秒= 30ティックフレームです。
これらの異なるフリップエフェクトにもかかわらず、TRNGTimerの値は常にティックフレームであることを覚えておいてください。単純にフリップエフェクトによって値を秒単位で入力すると、エンジンはティックフレーム単位で変換すると考えます。
TRNGTimerを起動するフリップエフェクトは、画面上でタイマーを表示しないことに注意してください。TRNGTimerを表示または非表示にするには別のフリップエフェクトを使用する必要があります。
場合によっては、新しいスキルのための時間間隔を計算する「隠された」タイマーを持つと便利かもしれません。
例えばジャンプゲインスキルでも、ジャンプの到着から1.5秒が経過したときにすべてを無効にするためにLocalTimerを使用しました。
TRNGTimerのもう一つの興味深い特徴は、プレースフォルダ(変数のプレースフォルダを参照)を任意のテキストに挿入できることです。そのTimer変数は現在の時間で置き換えられます。形式は次のとおりです。
mm:ss:t
「mm」は分、「ss」は秒、「t」は秒です。
このようにして、簡単に次のようなテキストを表示できます。
Remaining time: #0073
そして、それはゲームで、このように表示されます。
Reamining time: 00:53:4
この値は、時間の経過とともに継続的に更新されます。
進行を増減するためのタイマーを設定することができます。
フリップエフェクトを使用すると、画面上にTRNG時間をすばやく表示できます。
テキストの色や大きさについてはプレフィックスが付いていますが、そのフリップエフェクトで変更することはできません。一方サイズや色が異なるTRNGTimerを表示するには、一般的な「print ng string」フリップエフェクトは、希望のタイマーのプレースフォルダを含んでいるので、色、サイズ、および望みどおりの表示を設定することができます。上記の方法のおかげで、GlobalTriggerでSINGLE_SHOTフラグを使用する必要はありません(またどちらも推奨できません)。TRNGTimerが最終値に達したときに停止し、タイマーの次回起動までGlobalTriggerは使用できません。
ゲームで変数の値を表示するには、プレースフォルダをテキストにコピーして表示します。
この方法でできることはたくさんあります。
例えば、セーブデータのメモリから変数の中の望むものをコピーし、次のようなテキストを表示して、独自の統計情報を表示することができます。
Stars of Iside #0044
Remaing Time #0073
Missing Targets #004A
変数に正しい値をコピーすると、次のように表示されます。
Stars of Iside 2
Remaining Time 05:23:2
Missing Targets: 8
TimerプレースフォルダについてはTimer変数の章も参照してください。
ピックアップしたアイテムやその他の統計情報の値を取得するには、重要なメモリゾーンについての次の章を参照してください。
クリティカルメモリゾーンとは、TRNGエンジンがオブジェクトの位置、インベントリアイテムの数、および他の多くの興味深いものを設定するために使用するゾーンを意味します。
ほとんどのTRNGフリップエフェクトは、正しいメモリゾーンに正しい値を書き込んで作成されています。今度は、このように他の独自の特殊効果を作成することもできます。
私はクリティカルメモリゾーンの変更がいくつかのひどい混乱を起こす可能性があることを覚えておいてください。もしあなたが優れたエキスパートではないなら、インベントリアイテムの数や統計情報の値といった限られた内容を読むためにのみ、クリティカルメモリゾーンの使用を制限したほうがよいでしょう。
別の方法として、新しいスキルを作成したい場合は、クリティカルメモリゾーンを変更する必要があります。例えば、Moveableに関するすべての最も重要な値が保存されているアイテム構造の例があります。
現在、次のクリティカルメモリゾーンが利用可能です。
以下の章では、ゾーンごとに説明します。
アイテムメモリの説明アイテムメモリ上で操作を実行する前に、アクショントリガを使用する必要があります。「Variables. Set the index of <#>moveable as Selected Item」。変更するアイテムメモリを選択します。各移動体は、自身のアイテムメモリ、すなわちそのデータを有する構造体を有します。備考:説明が間違っている可能性があります。ヒントとコツの章で提案されている方法を使用して、一部のフィールドの動作を検証することができます。 |
||
フィールド名 |
サイズ |
フィールドの説明 |
Animation Now | Short |
このフィールドは現在のアニメーションをホストします。 このアニメーションの数は絶対的なものです。これは、ある敵の最初のアニメーションの0の番号を見つけることができないことを意味しますが、TR4ファイルの以前のすべてのMoveableのアニメーションの完全なリストの中に、現在のアニメーションの番号についてのBigNumberを見つけることができます。 例えば、Moveableの最初のアニメーションが0になり、2番目のアニメーションが1になるような、相対番号でこの絶対番号を変換するには、この計算を実行する必要があります。 1)「Slot id」フィールドからスロットインデックスを読み取ります(まだわからない場合)。 3)スロットメモリ内の「First Animation Index」を読みます。 4)これで、相対アニメーションを次のように取得できます。 RelativeAnimIndex = ItemMemory.AnimationNumber - Slot.FirstAnimationIndex. |
Contact Flags | Long |
$ 2000と$ 400の単一のビットがあると、ララは触れるとこのアイテムによって損傷するはずです。 ダーツにはこの値があります。$ 2400 |
Custom Flags | Byte |
謎のフィールド。 このフィールドの値は、オブジェクトのタイプに応じて変化するようです。 何かを知らせるビットフラグのように見えます。 |
Custom_A | Short |
このフィールドは、他のカスタムフィールドと同様に、オブジェクトのタイプに応じて使い方が異なります。 特定のアイテムからどのように使用されるかを調べる唯一の方法は、そのアイテムが有効な間にこのフィールドを調べることです。 ヒントとコツの章を参照してください。 |
Custom_B | Short | Custom_Aフィールドの説明を参照 |
Custom_C | Short | Custom_Aフィールドの説明を参照 |
Custom_D | Short | Custom_Aフィールドの説明を参照 |
Facing Horizontal | Short |
この値は横向きです。つまり、上からララを見ると、ララが見ている方向です。 値については、「Facing Vertical」フィールドに説明があります。 |
Facing Rotation | Short |
このフェーシングは特に重要であり、ララのアイテムのみで動作するはずです。 このフィールドの影響を受ける回転軸を理解するには、AnimationCommandのサンプルの画像を見ることができます。 |
Facing Vertical | Short |
この値は、床とのperienticolarの線よりも尊重度を表します。 プロジェクトのサンプル「Variables_TRNG」では、垂直方向の変化を見ることができます。 値は0から360度の範囲は0000から$ FFFFです。 例えば$ 4000は90度、$ 8000は180度です。 この値がゼロでないことはめったにありません。ララがダッシュで走ったときに起こります。 |
Flags of Item | Long |
これは非常に重要で非常に複雑なフィールドです。 このFlagsフィールドでは、各ビットが現在のアイテムのいくつかのプロパティを設定します。 ここに表示されている値は各ビットの絶対値です。つまり、$ 0008が表示されている場合は、絶対値$ 0008を持つビット3を設定またはクリアする必要があることを意味します。 これは私の発見のリストです。 $ 0001:アイテムが有効になっています$ 0002:アイテムが衝突しているか、このアイテムに更新が必要です $ 0004:アイテムはまだゲームで有効になっていません $ 0008:アイテムが落下しています(このアイテムには重力が働いています) $ 0010:アイテムで負傷しました。ララのライフバーの表示を強制します $ 0020:敵はまだ死んでいない。彼は有効にすることも、彼が生きていることもできる $ 0040:敵は爆発で殺されました $ 0100:敵が毒殺された $ 0200:敵はAI_GUARDモードです $ 0400:敵はAI_AMBUSHモードです $ 0800:敵はAI_PATROL1モードです $ 1000:敵はAI_MODIFYモードです $ 2000:敵はAI_FOLLOWモードです $ 4000:これは新しい自己作成アイテムです。GrenadeやCrossBow弾薬のように |
Frame Now | Short |
現在のアニメーションの現在のフレーム番号です。 警告:この値は絶対値です。これは、アニメーションが開始されるときに、(最初のフレームのような)ゼロのかわりにBigNumberになる可能性があることを意味します。 相対(現在のアニメーションのフレームに対して)インデックスを絶対フレーム番号を変換するには、次の計算を実行する必要があります。 1)「Animation Now」フィールドを読む。 そして、この方法で現在のアニメーションの相対的なフレーム数を取得します。 RelativeFrameIndex= Item.FrameNow - Animation.FirstAbsFrameIndex |
Height Floor below the item | Long |
このアイテムには、現在のアイテムの下にある床のY座標が含まれます。 値はアイテムのY座標と同じフォーマットであり、非常に頻繁に同じ値です。アイテムが地面に触れるたびに発生します。 |
HP Vitality | Short |
このフィールドには、通常、現在のアイテムのHPの残量(ライフレベル)があります。 アイテムがこのフィールド内の敵(AI機能で移動可能)でない場合、このアイテムがキル可能でターゲティング可能ではないことを示す$ C000値になります。 |
Object buttons | Short | このフィールドには、オブジェクトコードウィンドウで読み込んだ5つのボタン(+ Invisibleボタン)を示すビットが格納されます。 |
OCB Code | Short | このフィールドには、NGLEプログラムのこのアイテムのOCBウィンドウに入力した数値が表示されます。 |
Position X | Long |
現在のアイテムのX座標。 X軸は、上下のビューで対応しています。 X座標は常に正の値をとります。 他のPosition YおよびPosition Zフィールドの場合と同様に、1セクタは1024単位、1クリックは256単位です。 |
Position Y | Long |
ポジションYは正と負の値を持ち、ララの垂直座標(フロアよりも上または下の点)を通知します。 上辺は負の値を持ち、下辺は正の値を持ちます。 |
Position Z | Long |
現在のアイテムのZ座標です。 Z軸は、左右の角度で対応しています。 Z座標は常に正の値をとります 他のPosition YおよびPosition Xフィールドの場合と同様に、1セクタは1024単位、1クリックは256単位です。 |
Room | Short |
部屋のインデックスは、このアイテムがどこにあるかを示します。 備考: - tomb4のインデックスは、NGLEで表示されるルームインデックスと異なる場合があります。これは、NGLEのプロジェクトに空きがあることによって異なります。 とにかく、正しいフリップエフェクトを使用して、部屋のインデックスでtomb4の部屋のインデックスを変換することができます。 - 部屋のインデックスの値は255を超えることはできません。したがって、このフィールドには短いサイズがありますが、必要に応じてこの番号をByte変数に格納することもできます。 |
Slot Id | Short |
このフィールドには、現在のアイテムのスロット番号が含まれます。例えば、Lara = 0、AHMET = 102 など。 この番号をインデックスとして使用して、選択したスロットメモリを設定することができます。 |
Speed Horizontal | Short |
このフィールドは、現在のアイテムの水平方向の速度です。 実際には速度は増分され、アイテムの現在の方向(直面)に続くX、Z座標に加算されます。 |
Speed Vertical | Short |
このフィールドは垂直速度です。通常、下降(正の値)または上へのジャンプ(負の値)の速度です。 備考:ララが水中にあるときは、この速度値だけが使用され、水平速度は無視されます。 |
State Id Next | Short | このフィールドは、「State Id Now」フィールドのように機能しますが、次のStateIDを設定したままにします。 |
State Id Now | Short |
このアイテムの現在のStateIDです。 ララのStateIDはよく知られていますが、他の敵もStateIDを持っています。 |
Transparence level | Short |
このアイテムは、現在のアイテムの透明度レベルを示します。 値が0のときは透明度がないので、アイテムは完全に不透明です。 値が126の場合、アイテムは完全に透明になります。 備考:アクショントリガを使用して、Moveableの透明部分を変更することができます。一方、この操作を変数で実行しようとすると、TRNGエンジンによって0以外の値では値が増え、値が127に達するとアイテムが削除されることに注意してください。 実際には、このフィールドにゼロ以外の値を入力するとアイテムは透明になり、その後削除されます。 透明性のみを設定する場合は、特定のアクショントリガを使用することをお勧めします。このアクショントリガはこのフィールドの値をフリーズして削除フェーズを停止します。 |
Unknown (落下時の加速度?) | Short | このフィールドでは加速値を維持できますが、いくつかのフィールドについては、ターゲットが不明です。 |
Unknown (Grenadeを撃った?) | Short |
謎のフィールド。 私が知っているのは、敵が手榴弾を撃ったときにこのフィールドに$ C210という値が書かれていることだけです。 |
Unknown (Sprite1 Id) | Byte |
謎のフィールド。 私の古い研究では、Moveableで使われているいくつかのスプライトだと思えたので、スプライトのインデックスでなければなりませんでしたが、今はよく覚えていません。 |
Unknown (Sprite2 Id) | Byte | このフィールドについては、他のフィールド「Unknown(Sprite1 Id)」の説明を参照してください。 |
Unknown CountDown | Short | このフィールドにはいくつかの調査が必要です。それはカウントダウンのように見えますが、どういう意味なのかは分かりません。それは遅延起動のためのカウンターかもしれません。 |
Unknowns (Light A - H) | Long |
これは多くの未知のフィールドです。 それらはアイテムの光や色について使うことができましたが、現実にはわかりません。 |
Visible Mesh Flags | Long |
各セットビットは、可視メッシュに信号を送ります。 メッシュ0ビット0(値= $ 1)、メッシュ1ビット1(値$ 2)、メッシュ2ビット2(値$ 4)。 デフォルト値は-1、つまりすべてのビットを有効にしてアイテムのすべてのメッシュを表示する$ FFFFFFFFFです。 メッシュを目に見えないようにしたい場合は、「Clear bit ..」で始まるフリップエフェクトにしてください。とにかく、メッシュを表示/非表示にするいくつかのアクショントリガが既にあることを覚えておいてください。 |
セーブデータメモリの説明このメモリには、すべての値がセーブデータに保存/復元されます。値の大部分はインベントリアイテムですが、TRNG用の特別な値もあります。 |
||
フィールド名 |
サイズ |
フィールドの説明 |
Inventory. Keys 1 - 8 Keys 9 - 16 Pickup Items 1 - 8 Quest items 1-8 |
Byte |
これらのフィールドはすべて同じように動作します。各ビットは特定のアイテム番号の存在を知らせます。 $01 = Item 1 |
Inventory. Laser Sight Binocular Crow Bar |
Byte | アイテムが存在する場合の値は1、ない場合の値は0 |
Inventory. Pistols mask UZI Mask Shotgun CrowBow Greanade-Gun Revolver |
Byte |
これらのフィールドはすべて同じように動作します。 それらは、それぞれの武器の存在と、弾薬とLASERSIGHTの存在を知らせるビットマスクを持っています。 $ 01 =武器は存在する |
Inventory. Small medipacks Large Medipacks Flares Ammo Pistol Ammo UZI Ammo revolver Ammo Normal Shotgun Ammo Wide-shot Shotgun Ammo Normal Grenade Ammo Super Grenade Ammo Flash Grenade Ammo Normal CrossBow Ammo Poisoned CrossBow Ammo Explosive CrossBow |
Short |
これらのフィールドはすべて、そのアイテムのそれぞれの数量を示します。 いくつかのメモ: - Shotgunの弾薬は、インベントリで表示される数より6倍大きいです。例えば、通常のShotgunの弾薬に5が表示されている場合、「Ammo Normal Shotgun」は値30(6 * 5 = 30)になります。 - これらのフィールドのいくつかに-1がある場合、これは無制限の数量を意味します。 |
Inventory. Big Skin Bag | Byte |
ビッグ水袋(Scalesで使用)の存在とその中のリットルの量を知らせるビットマスクです。 0 =行方不明 |
Inventory. Combo items 1 - 4 | Byte |
コンボアイテムごとに2つの要素があることを知らせるビットマスクです。 コンボアイテムは2つに分割されたアイテムです。ララはそれぞれのアイテムを見つけ、両方のアイテムを所有しているときに、それらを結合して別の新しいアイテムを入手することができます。 このフィールドには、1つのコンボだけに関する情報があります。 $ 01 =パズル1のコンボアイテム1 |
Inventory. Combo items 5 - 8 | Byte |
これは、パズルアイテム5、6、7、および8の単一のコンボアイテムのインベントリの存在を表すためのビットマスクです。 $ 01 =パズル5のコンボアイテム1 |
Inventory. Little Skin Bag | Byte |
リトル水袋(Scalesで使用)の存在とその中のリットルの量を知らせるビットマスクです。 0 =行方不明 |
Inventory. Mechanical Scarab | Byte |
このフィールドは、単一のメカニカルスカラベの存在を維持するためのマスクビットです。 1 =フルメカニカルスカラベ(キーがスカラベに取り付けられています) |
Inventory. Remaining usage of Mechanical Scarab | Short |
このフィールドは、メカニカルスカラベがどれくらい使用されたかを記録します。 値が0の時、ララがもう一回使用すると、スカラベは爆発します。 スカラベがインベントリにない場合、または(スカラベとキー)のいずれか1つしかない場合、値は0です。 メカニカルスカラベが完成したばかりのとき、エンジンはこのフィールドに値3を入力します。 スカラベが使用されるたびにこの値は1だけ減少します。 |
Inventory. Examine Item 1 Examine Item 2 Examine Item 3 Puzzle Item 1 Puzzle Item 2 Puzzle Item 3 Puzzle Item 4 Puzzle Item 5 Puzzle Item 6 Puzzle Item 7 Puzzle Item 8 Puzzle Item 9 Puzzle Item 10 Puzzle Item 11 Puzzle Item 12 |
Byte |
これらのフィールドの値は単純に数です。 ゼロは「欠落」を意味し、他の値はこのタイプのアイテムがララによってどれだけ集められたかを示します。 |
Lara. Air for Lara | Short |
これは水中でのララの酸素量です。 最大酸素量(バーがいっぱいのとき)は1800ですが、値が0のときはHPバー(ライフレベル)が減少し始めます。 |
Lara. Current Weapon | Short |
このフィールドには現在選択されている武器が格納されますが、この武器は必ずしもララの手の中ではありません。 このフィールドには、プレイヤーがDRAW WEAPONコマンド(スペースバー)を使用するときに、どの武器が抽出されなければならないかがエンジンに伝えられます。 0 =何もない |
Lara. Environment where lara is. | Short |
このフィールドは非常に重要で、水、水中または地面といった、どのような環境であるかを伝えます。 ララを管理するためのすべての手順は、この値に従って劇的に変化します。 0 =地面だけでなく登山、モンキースイング、ジャンプ、落下 |
Lara. Hands. Attached Lara Status | Short |
このフィールドは、彼女の手の中のアイテムに関するララの現在の動作を記録します。 1 =特殊付属品:ポールロープ、乗り物、壁をつかむ 2 =彼女はアイテム(武器、トーチ、フレア)を拾っている 3 =彼女はアイテム(武器、トーチ、フレア)を手放している 4 =彼女は手の武器やトーチ(フレアではない)をつかんでいる |
Lara. Hands. Item in the Hands of Lara (current) | Short |
現在のアイテムをララの手に保持します。アイテムが手になければ0にします。 このフィールドの値は、次の値を持つことができます。 0 =何もない 1 =Pistol 2 =Revolver 3 =UZI 4 =Shotgun 5 =Grenade 6 =CrossBow 7 =フレア 8 =トーチ トリック:このフィールドに値8(=トーチ)を書いて、「Attached Lara Status」フィールドに値2(=ララがアイテムを投げている)を書き込むと、ララの手には存在しないにもかかわらずトーチが作成されます。 |
Lara. Hands. Item in the Hands of Lara (next) | Short | このフィールドは、「Lara. Hands. Item in the Hands of Lara (Current)」のフィールドのアイテムと同じ値ですが、このフィールドにはララが取るであろうアイテムが格納されます。 |
Lara. Hands. Remaining time with lighted flare in the hand | Short |
これは、ララがフレアを手に入れたときにティックフレーム単位(1秒= 30ティックフレーム)でカウントダウンを維持します。 カウントダウンがゼロ(0)に達すると、ララはフレアを捨てます。 最大値は900または1000と思われ、それはフレアの最大維持値です。 |
Lara. Hands. Weapon in the hand | Short |
このフィールドは、ララの手の武器を表しています。 備考:ララがこのフィールドに武器(フレア、トーチ)と異なるアイテムを保持している場合、0 0 =何もない |
Lara. Item Index of Lara | Short |
これは、アイテムメモリのララのインデックスです。ララのアイテムメモリに対する操作を実行する場合は、このフィールドの値を読み取り、「Item Index of Selected Item Memory」にコピーできます。 このインデックスの値はtomb4のフォーマットであり、すぐに使うことができますが、ララに関するNGLEプログラムで見られるインデックスとは異なる場合があります。 |
Lara. Poison1 | Short |
このフィールドには、ララへの毒の量が表示されます。 これは、レベルの画面の変形を設定するために使用されます。大きな値でより大きな変形になります。 このフィールドは常にPoison2の値が同じです。異なる値を設定すると、短時間に同じ値になります。 大きなサソリの毒は2048 |
Lara. Poison2 | Short |
このフィールドは、Lara Poison1と連携して動作します。 このフィールドはPoison1よりも重要であると思われます。なぜなら、このフィールドに0以外の値を入れてPoison1を0にするとララは毒状態になりますが、逆にすると何も起こらないからです。 |
Lara. Rope. Speed sliding on the rope | Short | ララはロープをつかんでいて、スイングのスピードを加速させようとしています。 |
Lara. Special Status of Lara | Byte |
これは、ララのステータスを示すフラグ付きのビットマスクです。 $ 01 =ララはトーチやフレア(武器ではない)をにぎっている |
Lara. Special2 Status of Lara | Byte |
ララのその他のステータス。 0x04 =ララはひっくり返っています(要検証) |
Lara. Test. Climb sector Test | Short |
このフィールドはあまり役に立ちません。それは、登ることの出来る壁があったとしても、それがどこにあるのか、その壁が何であるか、またはこの壁に近づいているかどうかは分からないからです。 唯一の用途は、このフィールドにゼロを入力し登れないようにすることですが、エンジンがこのフィールドを正しい値に更新し続けるので、それが機能するかどうかはわかりません。 |
Lara. Test. Lara has a flare in her hand | Short | ララがフレアを持っているとき、このフィールドは値= 1になる。 |
Lara. Test. Lara is on rope | Short |
このフィールドには、ララがいるロープのインデックスが含まれていなければなりません。 このフィールドに-1がある場合、ララはロープにいませんが、値が-1と異なる場合はロープにあり、値はララによって使用されるロープアイテムのインデックスです。 |
Lara. Test. Lara is placing the weapon on the back | Short | ララが武器をしまうとき、この武器(Shotgun、CrossBow、Grenade)は背中にかつぐものの1つである。このフィールドは1になる。 |
Lara. Test. Throw out item from the Hands | Short |
ララがトーチやフレアを投げ込んでいる場合、または彼女が武器をしまっている場合。 1 =彼女はアイテムを投げ捨てている。 |
Lara. Weapon on the back of Lara | Short |
このフィールドには、CrossBow、Grenade、CrowBarなどの武器が含まれています。 値はスロットインデックスです。例えば、このフィールドにCrossBowがある場合、値は356になります。 備考:明らかに、このフィールドはララのメッシュのホルスターの存在も変えるかもしれませんが、私はこの問題を研究する時間がありませんでした。 |
Statistics. Secrets Used MediPacks |
Byte | 見つけたシークレットの数と使用したメディパックを統計画面に示します。 |
Statistics. Distance | Long |
このフィールドには、ララが、これまでゲーム全体で移動した距離が含まれています。 使用される単位は、このように計算される。この値の1メートル= 419単位。 |
Statistics. Killed Enemies | Short | 統計画面に表示されるララが、これまでゲーム全体で殺した敵の数です。 |
Statistics. Used Ammos | Short | このフィールドは、統計画面の使用された弾薬に対応します。 |
System. Auto-Aiming for Enemy | Byte | 私は覚えていませんが、このフィールドには、ララが目指す現在の敵についての情報、または自動照準モードが有効になっている場合は少なくなっています。(要検証) |
System. Core Game Timer | Long |
このフィールドはあまり役に立ちません。理論的には、冒険の開始からの経過時間を記録しなければなりませんが、実際にはこれは最後のロードゲーム操作の値だけです。 この値は、最後にゲームをロード/セーブした後にのみ更新されます。 コアゲームタイマーのアクティブバージョンをチェックしたい場合は、コードメモリに「Frame 3d Counter」を、またはゲームメモリに「TRNG Organizer Timer」を使用する必要があります。 |
System. Disable special keys | Short |
これは奇妙なフィールドです。 このフィールドに値= 15が設定されている場合、プレイヤーは、インベントリ管理、一時停止、セーブゲーム、またはセーブゲーム画面の読み込みを行うことができます。 |
System. Fog Bulb Color | Long | 霧の電球の色です。 |
System. Index of enemy aimed by Lara | Long |
これは現在、ララが目指している敵のインデックスです。これはララの武器の現在の目標です。 ララが敵をターゲットにしていない場合、このフィールドの値は-1です。 |
System. Number of current Level | Byte |
Script.datの[Level]セクションの次に続く現在のレベルの番号です。 タイトルは0で、最初の再生可能レベルは常に1です。 |
System. Screen Timer | Long |
これは、「Run for the iris」レベルで見たのと同じ画面時間です。 ティックフレーム(1秒= 30ティックフレーム)です。 エンジンはゼロと異なるときにのみこの値を増加させます。 このフィールドが0以外の場合、タイマーは画面に表示され、0の場合はタイマーは非表示になり、このフィールドは無視されます(これ以上は増加しません)。 |
System. Unknown (インベントリから選択されたアイテム?) | Long | このフィールドは、インベントリで選択された最後のアイテムとリンクしていますが、インベントリアイテムの選択をチェックする場合は、GT_USED_INVENTORY_ITEM GlobalTriggerを使用することをお勧めします。 |
TRNG Index. Animation Index for Selected Animation Memory | Short |
「variables. memory ... Selected Animation memory」フリップエフェクト/コンディションでアニメーションメモリを確認または変更するために使われます。 この値を変更して、確認または変更するアニメーション構造を選択することができます。 |
TRNG Index. Index of found Item | Short |
これは、TestPositionコマンドまたはGT_DISTANCE_FROM_ITEM GlobalTriggerのような、いくつかのTRNG条件で見つかったアイテムの索引です。 TriggerGroupコマンドでは、TGROUP_USE_FOUND_ITEM_INDEXフラグを使用してこのインデックスの使用を強制することができます。このように、エクスポートされたトリガに存在するアクショントリガのより詳細なインデックスは無視され、TRNG関数の最後のアイテムについてこのインデックスが使用されます。 このインデックスは、いくつかの変数にインデックスが格納されたアイテムに対してアクショントリガを実行するために非常に便利です。この「Found Index」フィールドにインデックスをコピーし、TGROUP_USE_FOUND_ITEM_INDEXフラグでエクスポートされたトリガを実行するだけです。 |
TRNG Index. Index of moveable performing last AnimComand | Short |
最後に実行されたAnimCommandsを所有するMoveableのインデックスです。 TriggerGroupでは、TGROUP_USE_OWNER_ANIM_ITEM_INDEXフラグを使用してこのインデックスの使用を強制できます。 |
TRNG Index. Item Index for Selected Item Memory | Short |
これは、変数で変更するアイテム構造を選択するために使用されるインデックスです。メモリフリップエフェクトは、選択されたアイテムメモリ上で動作します。 通常、アクショントリガを使用して、使用するアイテムメモリを設定しますが、この変数を渡す場合は、アイテムのインデックス番号を入力できます。アイテムメモリに関するフリップエフェクトでこの希望のアイテムのメモリを読み書きします。 |
TRNG Index. Slot Index for Selected Slot Memory | Short |
これはTRNGインデックスです。 変数とスロットメモリに関する操作を実行すると、TRNGエンジンはこのインデックスを使用して、使用されるスロットを認識します。 したがって、このインデックスには、確認または変更したいスロットメモリのスロットインデックスを書き込むことができます。 |
TRNG Organizer Timer | Long |
Organizerコマンドを計算するためにTRNGが使用するタイマーです。 Organizerがあってもなくても、このフィールドはフレームごとに常に更新されます。 このため、イベントからどれくらいの時間が経過したかを検出することができます。 「ヒントとコツ」の章を参照してください。 備考:このタイマーはゲームで更新されますが、インベントリ中または一時停止中にこのタイマーは停止されます。 |
コードメモリの説明 |
||
フィールド名 |
サイズ |
フィールドの説明 |
Audio Track Number on Channel 1 | Short |
このフィールドは、bass.dll機能を使用している場合にのみ機能します。 このフィールドには、現在チャンネル1で再生されているオーディオトラックの数が表示されます。オーディオトラックが再生されていない場合は-1です。 |
Audio Track Number on Channel 2 | Short | このフィールドは上記と同様に動作しますが、チャンネル2用です。 |
Camera Mode Now Camera Mode Next |
Long |
これらのフィールドは、カメラの種類に関する表示を含む。カメラモード。 0 =追尾カメラ |
Current Level number | Byte |
このフィールドには現在のレベル番号が格納されます。0はタイトル、1は再生可能な最初のレベルです。 備考:この値は、セーブデータメモリにある「System. Number of current Level」よりも更新されています。 |
Dash Bar Value | Short |
ダッシュバーの値です(ララがダッシュしている時に実行されます)。 最大値は120です。 |
Earthquake vertical movement | Long | このフィールドには地震の影響がある場合、カメラビューのY軸の垂直方向の移動距離とに負の値があります。 |
Frame 3d Counter | Long | このフィールドは「Frame System Counter」のように機能しますが、唯一の違いはこの「Frame 3d Counter」がPAUSEモードで停止することです。 |
Frame System Counter. | Long |
これはゲームのチックフレームのメインカウンターです。 これは、セーブゲームやポーズモードでも機能します。 上記の理由から、「ヒントとコツ」セクションで説明されている署名付き時間の方法については良い選択ではありません(画面上にメニューがある時間を含みます)。 |
Inventory Item required in game | Long | このフィールドには、スイッチ(キーを尋ねる)、ドア(CrowBarを尋ねる)、ジープ(ジープのキーを求める)などのインタラクティブオブジェクトによって必要とされるインベントリアイテムのスロット番号が一時的に保存されます。 |
KeyBoard Game Command hit | Long |
プレイヤーがキーによってララを移動させた(または何かさせた)とき、ここにそのキーコマンドのコードが表示されます。 値をテストするか、ビット操作(ビット/クリアビットの設定)を使用して(理論的に)それらを変更することができます。 NG_Center[Reference]にあるKEY1_とKEY2_の定数です。 例えば、現在あるかどうかを確認する場合は、次のようになります。 $ 4000 KEY2_DASH この値は「$ 40000000」のように表示されます(右側に4つの「0」が追加されています)。 |
Music volume | Long |
このフィールドには、オーディオトラックの音量です。 最大値は100です。 このフィールドを変更すると、TRNGエンジンは音量を変更しますが、bass.dllを使用している場合にのみ機能します。 |
Screen. Width game screen in pixel Height game screen in pixel |
Short |
これらのフィールドには、現在のゲームスクリーンのスクリーンサイズがあります。 この値を変更して現在の解像度を変更するのに、あまり有用ではありません。とにかく、コンディショントリガ+文字列を表示してプレイヤーにセットアッププログラムによる現在の解像度の変更を通知するのに、画面がごくわずかかどうかをチェックするために使用します。 |
Script Dat. Level Flags | Short |
現在のレベルのScript.datからのフラグを持つビットマスクです。 $ 0001 =YoungLara 0x0200 ColAddHorizon |
Script Dat. Option Flags | Byte |
このフィールドは、Script.datファイルの設定を保存するマスクビットです。 単一のビットを読んだり、変更したりすることができます。 $ 01 =FlyCheat有効になっています |
Sound SFX volume | Long |
効果音の音量です。 最大値= 100 |
Speed Layer1 Speed Layer2 |
Byte |
これらのフィールドは、Layer1(またはLayer2)スクリプトコマンドの第4フィールドの値タイプをホストします。 範囲の値:-16 +16 |
Test. Disable Fog Bulbs | Byte |
このフィールドでは、ソフトウェアを介して霧の電球を無効にすることができます。 このフィールドが1のとき、霧の電球はゲームでは隠されます。 |
Test. How entered in current game | Long |
このフィールドには、このゲームセクションの開始方法を示す値があります。 とにかく0= 新しいレベル、4= セーブゲームからロードされた。すべての値はわかりません。 |
Test. There is a Flyby in progress | Long | フライバイが進行中の場合、このフィールドは= 1であり、フライバイが進行中でない場合は0です。 |
スロットメモリの説明スロットメモリの操作を行う前に、「Variables. Memory. Set the <&>Slot as Selected Slot Memory」フリップエフェクトを使用して、次の操作に使用するスロットを選択してください。 |
||
フィールド名 |
サイズ |
フィールドの説明 |
Explosion Mask. | Long | それはマスクビットです。各ビットは、それを爆発させることができる武器である可能性があります。(要検証) |
First Animation Index | Short |
現在のアイテムで使用されている最初のアニメーションの絶対インデックスです。 このフィールドは、アイテムに関するアニメーションの相対的な数を計算するのに重要です。 アイテムメモリの「Animation Now」フィールドも参照してください。 |
First Mesh Index | Short |
現在のMoveableのメッシュの最初のメッシュの絶対数です。 これは、Moveableのメッシュの相対メッシュを取得するために使用する必要があります。 現在、このフィールドは有用ではありません。 |
Flags. Main flags | Short |
現在のスロットに関する多くの機能を通知するためのビットマスクです。 $ 0001 =このスロットは存在します(このレベルに0がない場合) |
FootStep | Short | ララまたは敵の影(要検証) |
HP. Max Vitality at start | Short |
このフィールドには、現在のスロットタイプのすべてのアイテムのデフォルトの開始時のHPがあります。 このフィールドでスロットがキル可能でない場合、$ c000の値になる可能性があります。 |
Number of Meshes | Short | 現在のMoveableのメッシュの数です。 |
Pointer for Collision Procedure | Long |
現在のアイテムとララの衝突をチェックします。 このフィールドに0を入力すると、このスロットを持つすべてのアイテムは衝突を失い、ララはそれらの間を通過できるようになります。 |
Pointer for Draw Extra Procedure | Long |
アイテムの余分なオプションを描画する手続きポインタ。 ジープとサイドカーに使用されています。 |
Pointer for Emitter Procedure | Long | アイテムが他のアイテムに発行できる場合、このポインタには、この操作のためのコードを入力します。 |
Pointer for Initialization Procedure | Long |
このスロットを持つすべてのMoveableは、このフィールドに格納されたアドレスを持つプロシージャによって初期化されます。 このフィールドを変更するのは有用ではありません。 |
Pointer for Main Control Procedure | Long |
メインコントロールプロシージャアドレス。 メインコントロールプロシージャは、AIに適用され、アイテムを移動し、現在のアイテムタイプに関する他の「アニメーション」機能を実行する。 このフィールドに0を入力すると、このスロットのすべてのアイテムが凍結します。 とにかく、いくつかのアイテムを凍結する場合は、アクショントリガを使用して移動を凍結するほうがよいでしょう。 |
Pointer for Special Ceiling Procedure | Long | このプロシージャは、天井のアイテムを処理する必要がありますが、それは少し神秘的です。 |
Pointer for Special Floor Procedure | Long |
特別なプロシージャのポインタはほとんどMoveableにだけ存在します。 私はそれがこれらのアイテムの上を歩くことが許されていたと思うが、私は確信していない。 |
Test Attack Lara | Short |
Moveableの敵タイプの信号、つまりアイテムはララを攻撃する必要があります。(要検証) 値1 =ララを攻撃する |
Unknown1 | Short | おそらくMIPバージョンを有効にするための距離。 |
Unknown2 | Short | 通常、値は50です。 |
Unknown3 | Short | Item構造体のCustom_Bアイテムにコピーされます。 |
Unknown4 | Long | これについてはわかりません。 |
アニメーションメモリの説明アニメーションメモリを使用する前に、「Variables. Memory. Set <&>Animation as Seleted Animation Memory.」フリップエフェクトトリガを選択してください。備考:この表では、既知または有用なフィールドのみが記述され、他のフィールドは無視されていますが、選択されたアニメーションメモリのフリップエフェクトで全てのフィールドを見つけることが出来ます。 |
||
フィールド名 |
サイズ |
フィールドの説明 |
First absolute Frame index | Short |
このフィールドは、このアニメーションで使用される最初のフレームのインデックスです。 このフィールドを使用すると、現在の相対フレーム番号を検出できます。 アイテムメモリの「Frame Now」フィールドも参照してください。 |
Frame Rate | Byte | このフィールドは繰り返しフレームを掛け合わせるため、この数値が大きいほどアニメーションが遅く見えます。 |
Frame Size | Byte |
このフィールドはフレームに必要なバイト数を示しますが、現在のアニメーションが存在するかどうかを検出するために読み取り専用でこのフィールドを使用できます。 FrameSIze = 0の場合、アニメーションが欠落しています。 |
Next Animation index | Short | これは、この最後に実行されるアニメーションのインデックスです。 |
Number of Animation Commands | Short | このアニメーションにAnimCommandsが含まれている場合、このフィールドにはAnimCommandsの数があります。それ以外の場合は0になります。 |
Number of State Changes | Short |
このフィールドには、このアニメーションのState Changesレコードの数があります。 Stateは複雑なビットで、現在のアニメーションとMoveableのNextStateIDフィールドと同じStateIDを持つ別のアニメーションを渡す正しいフレームを選択するために使用されます。 |
Speed | Short | 現在の水平移動速度を変更する必要がありますが、このフィールドは非常に頻繁に0です。 |
State Id | Short | アニメーションが実行されると、このStateIDはMoveableのために設定されます。 |
インベントリメモリゾーンインベントリメモリフィールドで操作を実行する前に、フリップエフェクトを使用して常にTriggerGroupを起動して、選択したインベントリメモリを作業対象に設定するようにしてください。フリップエフェクトは次のとおりです。 「Variables. Memory. Set the <&>Inventory item as Selected Inventory Memory」 |
||
フィールド名 |
サイズ |
フィールドの説明 |
Distance of Cam. | Short |
この値は、カムからのアイテムの距離がどのくらいであるかを示します。 距離が大きくなると、アイテムは小さく表示され、距離が小さくなるとアイテムが大きく表示されます。 |
Slot of Mesh to show in Inventory | Short |
このフィールドには、アイテムのスロット番号が表示されます。 スロットは、インベントリ画面に正しいメッシュを表示するためにのみ使用されます。 例えば、Large Medipackの場合、スロット番号は368です。 |
String index of Name | Short |
このフィールドにはStringのインデックス(English.datから)がアイテムの下の画面に表示される名前と一緒にあります。 例えば、「Load」アイテムの場合、数値は78。 |
Top Border in 2d plane. | Short |
この値は、オブジェクトを上または下に移動するための2次元ビューでの調整です。 インベントリのアイテムがあまりにも上すぎる場合は、このフィールドを増やし、アイテムを下げ、アイテムが低すぎる場合は、このフィールドを減らし、アイテムを上げることができます。 |
Type Flags | Short |
このフィールドはフラグをホストします。それぞれが特定の機能を有効にするために使用される1つ以上の単一の値。 このフィールドは異なるフィールドであるため、[View Flags]と混同しないでください。 これらは許容されるフラグです。 $ 0001 =このアイテムを表示する(存在する)$ 0002 =テキスト「EQUIP」テキストを表示する(武器に使用される) $ 0004 =テキストを表示する「USE」テキスト(多くのピックアップやキーで使用されます) $ 0008 =「COMBINE」テキストを表示する(水袋/パズルコンボ、武器+レーザーサイト) $ 0010 =「SEPARATE」テキストを表示する(レーザーサイト付きの武器について) $ 0020 =「EXAMINE」テキストを表示する $ 0040 =Shotgun弾薬(ノーマルショットまたはワイドショットを選択可能) $ 0080 =CrossBow弾薬(普通、毒矢、爆発物を選ぶことを選択可能) $ 0100 =Grenade弾薬(ノーマル、スーパー、フラッシュを選択可能) $ 0200 =UZI弾薬 $ 0400 =ピストル弾薬 $ 1000 =ゲームをロードする $ 2000 =ゲームを保存する |
Unknown | Long |
私はこのフィールドの平均を知らない。 私はこのフィールドに常に2つの値しかないことを知っています:+1または-1。 0または1、+ 1以外の数を入力すると、アイテムのメッシュがインベントリから消えているように見えます。 |
View Flags | Short |
このフィールドはフラグをホストします。それぞれが特定の機能を有効にするために使用される1つ以上の単一の値。 私は各値の平均を知らない。 確かに値2は次のことを意味します。 $ 4000と$ 8000のフラグは使用方法とリンクしていますが、どのように動作するのかよくわかりません。 |
X Facing about the cam view on X Axis | Short | このフィールドは、PuzzleスクリプトコマンドのOrient_Xフィールドと同じ値です。 |
Y Facing of an ideal cam placed in front of the item. | Short | このフィールドは、PuzzleスクリプトコマンドのOrient_Yフィールドと同じ値です。 |
Z Facing about the cam view on Z Axis | Short | このフィールドは、PuzzleスクリプトコマンドのOrient_Zフィールドと同じ値です。 |
TRNGTimerを開始する
; <#> : Variables. Timer. Initialize <&>TRNG Timer to (E)Seconds ; <&> : Global Timer ; (E) : Seconds= 30 ; <#> : Variables. Timer. Start the <&>TRNG Timer in (E)Mode ; <&> : Global Timer ; (E) : Decreasing Timer (Countdown) ; <#> : Variables. Timer. Show <&>TRNG Timer in (E)Position ; <&> : Global Timer ; (E) : POSITION_TOP_CENTER3つのフリップエフェクトトリガの内容は以下の通り。
1)タイマーの値を設定する
2)カウントダウンを開始する
3)タイマーを表示する。なぜなら、場合によってはタイマーは隠れているから。
タイマーが所定の値に達したかどうかを検出する
; Exporting: TRIGGER(259:0) for FLIPEFFECT(66) ; <#> : Text. Set <&>color and (E)position for next Print String flipeffect ; <&> : Red ; (E) : Bottom line, central alignment ; Values to add in script command: $2000, 66, $103 ; Exporting: TRIGGER(772:0) for FLIPEFFECT(64) ; <#> : Text. Print ExtraNG <&>string on screen for (E) seconds ; <&> : 4: The time is completed ; (E) : 5 seconds ; Values to add in script command: $2000, 64, $504 ; Exporting: TRIGGER(513:0) for FLIPEFFECT(270) ; <#> : Variables. Timer. Hide <&>TRNG Timer in (E)Seconds ; <&> : Global Timer ; (E) : Seconds= 2 ; Values to add in script command: $2000, 270, $201 TriggerGroup=1, $2000, 66, $103, $2000, 64, $304, $2000, 270, $201 GlobalTrigger=1, IGNORE, GT_TRNG_G_TIMER_EQUALS, 0, IGNORE, 1
; Exporting: TRIGGER(1:1) for FLIPEFFECT(265) ; <#> : Variables. Timer. Stop the <&>TRNG Timer ; <&> : Global Timer ; (E) : ; Values to add in script command: $2000, 265, $1 ; Exporting: TRIGGER(769:1) for FLIPEFFECT(270) ; <#> : Variables. Timer. Hide <&>TRNG Timer in (E)Seconds ; <&> : Global Timer ; (E) : Seconds= 3 ; Values to add in script command: $2000, 270, $301 ; Exporting: TRIGGER(51:0) for FLIPEFFECT(271) ; <#> : Variables. Numeric. Copy <&>Numeric Variable to CurrentValue ; <&> : Global Long Timer ; (E) : ; Values to add in script command: $2000, 271, $33 ; Exporting: TRIGGER(7935:0) for FLIPEFFECT(253) ; <#> : Variables. Numeric. Divide <&>Numeric Variable by (E)Value ; <&> : Current Value ; (E) : Value 30 ; Values to add in script command: $2000, 253, $1EFF ; Exporting: TRIGGER(58:0) for FLIPEFFECT(273) ; <#> : Variables. Memory. Add to <&>Savegame Memory the CurrentValue ; <&> : Inventory. Small medikit (Short) ; (E) : ; Values to add in script command: $2000, 273, $3A ; Exporting: TRIGGER(1286:0) for FLIPEFFECT(64) ; <#> : Text. Print ExtraNG <&>string on screen for (E) seconds ; <&> : 6: You saved #0800 seconds\ntherefore you gained #0800 medipacks. ; (E) : 5 seconds ; Values to add in script command: $2000, 64, $506 TriggerGroup=2, $2000, 265, $1, $2000, 270, $301, $2000, 271, $33, > $2000, 253, $1EFF, $2000, 273, $3A, $2000, 64, $506我々は以下の操作を行いました。
1)タイマーを停止する
2)タイマーを非表示にします(そうでなければ、タイマーは静止していても永遠に画面に残ります)
3)次に、LocalTimer変数から次の時刻を読み込みます
4)そして、その値を30で割りました。なぜなら、タイマーはティックフレーム単位で働くからです。毎秒30単位
5)今度はCurrentValue変数に保存秒数があり、それをメディパックで変換することができます
6)現在の値を、インベントリ中のメディパックの数が少ないセーブゲームメモリのフィールドに追加する
7)最後に、CurrentValueのプレースフォルダにテキスト「#0800」を入力して結果を表示します。
ジャンプを強化する計算
ジャンプゲインの価値をどこから得ることができますか?
私はダッシュバーの残りのダッシュ速度を選びました。コードメモリにこの値が設定されています。これは、フィジカルと一貫しています。ジャンプする前にララを速く走らせると、ジャンプが大きくなるはずです。
実際には、この方法ではジャンプゲイン値を得るのに退屈な問題がありました。ララがダッシュフェーズにあるときにエンジンはジャンプを許さず、ララが通常速度に戻ると、エンジンはララにジャンプを許可します。
今後の拡張
ジャンプゲイン値をキャッチ
ジャンプを検出し、ジャンプゲインを適用する
ジャンプが完了したらすべてクリア
The Global Trigger: GT_BEFORE_SAVING_VARIABLES and GT_AFTER_RELOADING_VARIABLES
最初のステップは、セーブデータで何を保存(そして復元)すべきかを理解することです。
TRNG変数を保存してリロードする必要があるため、この説明を混同しないでください。これは真実ではありません。すべてのTRNG変数は自動的に保存され、再ロードされます。
別の方法として、いくつかのメモリゾーンで行った変更を保存して復元するだけでなく、信号を保存する場所にいくつかの変数を使用することを思い出す必要があります。
新しいスキルを作成したら、スキルが永続的であるかどうかを確認する必要があります。それがゲームの保存と再読み込みの後にも残っている場合。
それが残っていればそれは完璧です。あなたは何も保存する必要はありません。
パッチを保存するための標準的な手順
パッチをリロードする標準的な手順
1)学習するメモリフィールドの内容を読み込むTriggerGroupを作成し、この値を共通の数値変数にコピーします。
2)GT_ALWAYSと共にGlobalTriggerを使用して、TriggerGroupの上に連続して(つまり、常に)実行します。
3)ここで、いくつかの変数には、私たちの学習するメモリゾーンの内容があります。
4)これで、画面上に連続的に表示される変数で診断することができます。
5)それであまりにも速く表示が変化する場合は、tomb4_log.exeユーティリティで作成したログファイルにもこの値を表示することができます。
6)ログファイルに値を表示するには、TriggerGroupに「Variables. Log. Print in log file the <&>Extra NG String」フリップエフェクトを追加します。
7)変数のプレースフォルダを持つ[ExtraNG]Stringのテキストを使用して、その変数の現在の値を表示します。
8)こうしてゲームでは、ゲームにおける私たちの行動に従って、そのフィールドの内容がどのように変化するかを見ることができます。
メモリメッセージの内容を診断メッセージに挿入する
; Exporting: TRIGGER(54:0) for ACTION(495) ; <#> : HARPY ID:495 in sector:(10,7) of Room70 ; <&> : Variables. Set the index of <#>moveable as Selected Item ; (E) : ; Values to add in script command: $5000, 495, $36今回はHarpyアイテムを選択しました。
次に、「Flags of Item」フィールドの値を変数「Local Long Delta」(以下LL_Delta)にコピーするエクスポートされたトリガを追加します。
; Exporting: TRIGGER(10098:0) for FLIPEFFECT(256) ; <#> : Variables. Memory. Copy to <&> Numeric Variable the (E)Selected Item Memory ; <&> : Local Long Delta ; (E) : Flags of Item (Long) ; Values to add in script command: $2000, 256, $2772「Flags of Item」フィールドのすべての変更の一覧を取得するには、utiltiy Tomb4_log.exeで作成されたログファイルにLL_Delta変数の内容を出力するようにトリガするように追加します。
; Exporting: TRIGGER(1650:0) for FLIPEFFECT(309) ; <#> : Variables. Log. Print the value of <&>Numeric Variable in (E)Format ; <&> : Local Long Delta ; (E) : Hexadecimal and Binary ; Values to add in script command: $2000, 309, $672今度は、上記のすべてのトリガを新しいTriggerGroupにコピーします。
TriggerGroup=15, $5000, 495, $36, $2000, 256, $2772, $2000, 309, $672最後に、GlobalTriggerを作成して、常にTriggerGroup 15の上で実行します。
GlobalTrigger=8, IGNORE, GT_ALWAYS, IGNORE, IGNORE, 15次に、スクリプトの[Options]セクションで変数の診断を有効にする必要があります。
Diagnostic=ENABLED DiagnosticType=DGX_COMMON_VARIABLES, IGNOREよくできました。これでScript.txtファイルの作業が完了しました。
このプロジェクトでは、「Item of Flags」の値をアクティブ化の最初に確認することが面白いため、Harpyをトリガする場所に配置してアイテムをトリガします。
今度はスクリプトとレベルを構築することができます。ログファイルのリストを取得したい場合は、「Tomb4_log.exe」ユーティリティを起動してゲームをプレイします。
画面上では、「Flags of Item」が変化したときにLL_Delta変数が変化し、ログファイルでは進行の変化のリストを見ることができます。
ログファイルを調べる
6859: Local Long Delta = %00000000000000000000000000100110 $26 ;not yet enabled
26078: Local Long Delta = %00000000000000000000000000100011 $23 ;enabled in game
67266: Local Long Delta = %00000000000000000000000000110011 $33 ;lara shots harpy
67297: Local Long Delta = %00000000000000000000000000100011 $23 ;nothing
67609: Local Long Delta = %00000000000000000000000000110011 $33 ;lara shots harpy
67641: Local Long Delta = %00000000000000000000000000101011 $2B ;harpy touches lara
67906: Local Long Delta = %00000000000000000000000000100011 $23 ;nothing
70078: Local Long Delta = %00000000000000000000000000000100 $4 ;harpy has been killed
Flags of Itemの変更が発生したときに私がやっていたことについてのコメントを追加しました。
上記のログを見てみると、例えば、ララがHarpyに当たったとき、短い瞬間($ 23から$ 33 = + $ 10)のビットが追加されるので、$ 10ビットは「現在のアイテムが傷ついている」。
その後、他の興味深い事実を発見することができました(実際には既に知られています、アイテムメモリゾーンを参照)。
$ 20のビットは、Harpyがまだ有効になっていないときに存在し、有効になっているときは残っていますが、Harpyが終了すると消えます。
ですから、$ 20のビットは「敵はまだゲームにとって面白い」と考えることができます。ビット$ 20が失われている間、敵は死んでおり、それはもはや使われなくなるでしょう。
私たちの発見の用法を見つける
実験を行う
これらの実験を実行すると、何も起こっていないと感じるかもしれませんが、そのアイテムに対して異なるアクションを適用して、より良い方法で変更をテストする必要があります。
例えば、他のクリーチャーを配置して、あなたの変更がHarpyと他の敵との間の関係を変更するかどうかを確認することができます。
戦闘段階にいくつかの相違があるかどうかを確認するために、Harpyを撃つことを試みることができます。
少なくともこのように変更があるかどうかを確認するために、Harpyの下にいくつかのAIアイテムを配置しようとすることができます。
Etc。
完全なデバッグまたは簡潔なデバッグ
Diagnostic=ENABLED DiagnosticType=DGX_LOG_SCRIPT_COMMANDS, IGNOREDiagnosticTypeコマンドでDGX_LOG_SCRIPT_COMMANDSフラグを使用すると、新しい値は画面に表示されませんが、Tomb4_log.exeユーティリティ(TRLE\TOOLSフォルダにあります)で作成されたファイルに毎回長い診断のリストが表示されます。TRNGは、いくつかのTriggerGroup、GlobalTrigger、Organizer、またはSwitchを実行します。
スクリプトデバッグには2種類あります。コマンドで有効にする完全なデバッグです。
DiagnosticType=DGX_LOG_SCRIPT_COMMANDS, IGNOREまた、EDGX_CONCISE_SCRIPT_LOG値のコマンドに追加できる簡潔なデバッグ。
DiagnosticType=DGX_LOG_SCRIPT_COMMANDS, EDGX_CONCISE_SCRIPT_LOGこの選択肢の長所と短所については、次の点を考慮する必要があります。
完全なデバッグにはより多くの情報が含まれているため、スクリプトコマンドで実際に発生することがわかりますが、解析するポイントを見つけるのが難しい巨大なログファイルを作成することになります。
簡潔なデバッグは反対に、情報は少なくなりますが、より簡潔なログファイルを入手すると読みやすくなります。
スクリプトのデバッグの例
上記のログからどのように見ることができますか?変数が使用された(条件付きで読み込み、書き込み、またはテストされる)たびに、その値がログに表示されます。
この機能は、スクリプトコマンドではうまくいかないことを理解するのに非常に役立ちます。
コンディショントリガ
完全デバッグのログファイルのこの例を参照してください。
上記のコンディショントリガでは、2つの条件をテストしました。
1)LocalLongAlfa変数にビット0(値1)がセットされているかどうか確認する。
2)そして、もしララの現在の状態IDが3ならば
最初の条件では、変数の状態に対する他の条件を使用して単一のトリガで実行できますが、コンディショントリガでチェックする前に値を「State-id」アイテムフィールドから共通変数に移動する必要があるため不可能です。
不幸なことに、StateIDから現在の値に値を移動する非コンディショントリガは条件リスト内の何も変更しないので、この操作は可能です。
デバッグログを中断して再開する
「Enemy. Save the coordinates and facing of <#>Moveable in savegame」
この状況に関するいくつかの考慮事項があります。
1)可能ならば、同じアクションを実行する独自のプロシージャを再構築するために、標準のアクショントリガを使用してアイテムを移動したり向きを変更したりする方が良いでしょう。新しい技術があれば、2つのTRNGTimerがすべての要求に対して十分ではない可能性があります。
幸いにも、同時に多くのカウンターを持っている簡単なトリックがあり、TRNGTimerを使う必要はありません。
Organizer Timerの値を使用することができます。セーブデータメモリでそれを読み取ることができます。
オーガナイザーのタイマーは、プログラムがゲームモード(インベントリなしまたは画面の一時停止中)の間は常に更新されます。
このタイマーのおかげで、現在のオーガナイザタイマーを保存して、最後の読み取りからどれくらいの目盛りフレームが経過したかを確認することができます。
例えば、与えられた瞬間から30ティックフレームが経過したと計算する場合は、オーガナイザタイマーのコピーをLong変数、例えば変数Betaに入れて、次のサイクルで、数式:
TimeNow = OrganizerTimer - Beta
この方法では、複数のタイマーを使用して効果を同期させることができます。