Hidden Triggers in TRNG
by AkyV

Page 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

1.13. Ahmet subject
 

1.13.1. The name of the field:

Custom_A (Different usage in according with type of item) (Short)
 

Executable combination:

Transport (X) ahmet to (Y) new X horizontal start position when the scales are being reset the next time
 

Y: 1st-100th squares of the floor grid, counted from the northern (top) edge of Room Editor Window

Force: single.
 

Note:

- If you don't change Z horizontal coordinate (see below) then that will keep its value.

- The game draws a horizontal vector that starts from the previous X, Z point, and ends at the next X, Z point. The vector cannot cross room walls or else the combination will fail. But that doesn't mean the new X, Z point cannot be in another room - in this case the vector must cross portals (doors) where there were room walls before.

- In the new X, Z position the ahmet will be put on the floor square of the room there. (If the ahmet will be in a higher/lower floor square after this 'transportation', in another room, so not where you want, then you probably must descend/ascend the vertical position of the previous X, Z point - i.e. the floor square there -, to solve the problem.)

 

Condition combination:

If (X) ahmet will be in (A) X horizontal start position when the scales are being reset the next time
 

A: 1st-100th squares of the floor grid, counted from the northern (top) edge of Room Editor Window

Type: sequence.
 

1.13.2. The name of the field:

Custom_C (Different usage in according with type of item) (Short)
 

Executable combination:

Transport (X) ahmet to (Y) new Z horizontal start position when the scales are being reset the next time
 

This combination works in similar way as I said in Chapter 1.13.1.

The squares now counted from the western (left) edge of Room Editor Window.
 

Condition combination:

If (X) ahmet will be in (A) Z horizontal start position when the scales are being reset the next time
 

A: 1st-100th squares of the floor grid, counted from the western (left) edge of Room Editor Window.

Type: sequence.
 

1.14. Scales subject
 

1.14.1. The name of the field:

Custom_B (Different usage in according with type of item) (Short)
 

Condition combination:

If the wrong amount of water is just poured in (X) scales
 

A: 'equal' 1

Type: simple.
 

Note:

This combination could be useful because the original setup of scales is able to activate only objects if the wrong amount is poured - but now you can activate anything with this condition.
 

1.15. Falling block subject
 

1.15.1. The name of the field:

Custom_A (Different usage in according with type of item) (Short)
 

This field will work only if Lara steps on the block. (So don't use it if the block will start falling down by a trigger.)
 

Executable combination:

(Y) Enable/disable (X) falling block to be able to shiver (i.e. to start falling down)
 

Y: disable (1), enable (0)

Force: single.
 

Condition combination:

If (X) falling block (already shivering) will fall down in (B ) frames
 

B: A minus 1

A: 2-60 frames (60 is when the block starts shivering)

Type: sequence.
 

1.16. Rollingball subject
 

1.16.1. The name of the field:

Custom_A (Different usage in according with type of item) (Short)
 

Executable combination:

Adjust (X) rollingball north/south speed to (Y)
 

Y: positive numbers (southwards), negative numbers (northwards), 0 (no speed). (Approximately?) each 512 means the speed of the ball is just enough for a one square long travel. - So eg. 512 means the chafing between the ball and the floor will slow down the ball that will stop after further one square long travel - except, naturally, if the ball gets on a slope down or encounter an obstacle in the meantime.

(Another example: -1792=-3,5x512 means: in the given moment the speed of the ball - rolling in the north direction - is just enough for a 3,5 squares long travel, before the chafing stops the ball.)

Force: continuous. When stopping it: the ball will roll 'according to the rules of physics'.
 

Notes:

- North/south: in Room Editor facing.

- This combination is a great tool to make the ball roll down slow in a sharp slope or to shoot it out like a cannonball etc. (For example: place the ball in a totally horizontal floor, and trigger it. Now the ball won't move, but it is triggered - so, when you force a big speed on it, the ball will start rolling fast as if he were shot out of a cannon. - Or start with the speed, and the ball will be shot out when triggered.

Then the ball will cross a HEAVY to disable the GlobalTrigger - i.e. to stop forcing - so the ball wall lose his momentum by degrees and stop soon.)

- Naturally it is a complicated situation if the vector of the ball doesn't have a main (north, east, south, west) direction. For example, if it is rolling with A speed to northeastwards then it means it is rolling with B speed to northwards AND with C speed to eastwards.
 

Condition combination (1):

If (X) rollingball north/south speed is (A)
 

A:

- with Positive formula (moving southwards speed or no speed): 0 or positive speed values

- with Negative formula (moving northwards or no speed): 0 or positive speed values

- with Null formula (no speed): 0 speed

Type: sequence.
 

Notes:

Naturally 0 doesn't always mean 'stopped'. I mean, if the direction of the ball has an east/west part then 0 in north/south speed means the ball is rolling exactly eastwards or exactly westwards.

 

Condition combination (2):

If (X) rollingball is rolling (A) northwards/southwards
 

A:

'bigger/equal' 1 (moving southwards)

'smaller' 0 (moving northwards)

'equal' 0 (doesn't move)

Type: simple.
 

1.16.2. The name of the field:

Custom_B (Different usage in according with type of item) (Short)
 

Executable combination:

Adjust (X) rollingball east/west speed to (Y)

 

Y: positive numbers (eastwards), negative numbers (westwards), 0 (no speed).

Force: continuous. When stopping it: the ball will roll 'according to the rules of physics'.
 

Note:

East/west: in Room Editor facing.
 

Condition combination (1):

If (X) rollingball east/west speed is (A)
 

A:

- with Positive formula (moving eastwards speed or no speed): 0 or positive speed values

- with Negative formula (moving westwards or no speed): 0 or positive speed values

- with Null formula (no speed): 0 speed

Type: sequence.
 

Notes:

Naturally 0 doesn't always mean 'stopped'. I mean, if the direction of the ball has a north/south part then 0 in east/west speed means the ball is rolling exactly northwards or exactly southwards.
 

Condition combination (2):

If (X) rollingball is rolling (A) eastwards/westwards
 

A:

'bigger/equal' 1 (moving eastwards)

'smaller' 0 (moving westwards)

'equal' 0 (doesn't move)

Type: simple.
 

1.17. Teeth spikes subject
 

1.17.1. The name of the field:

Custom_A (Different usage in according with type of item) (Short)
 

Executable combination:

Adjust (X) teeth spikes speed to (Y)
 

Y: from 1 to about 850

Force: continuous. When stopping it: the speed of the spikes will be 'normal'.
 

Notes:

- Customized teeth spikes seem less dangerous than usual.

- Usually teeth spikes are 'bouncing'. If you force the speed then they will not.

- If the speed is too slow (i.e. closer to 0) then the spikes will not have enough time to be drawn back totally, so they will jump up again before reaching the floor level.
 

Condition combination:

If (X) teeth spikes extension is in (A) position
 

A: 'equal' 0 (the spikes are just totally extended), 1024: (the spikes are just totally drawn back)

Type: simple.
 

Note:

The spikes are 'bouncing' so they reach the top position twice at each extension.
 

1.17.2. The name of the field:

Custom_C (Different usage in according with type of item) (Short)
 

Executable combination:

Adjust the extension time to (Y) frames at (X) teeth spikes
 

Y:

from 1 to 63 frames (for the first condition)

from 1 to any frames (for the second condition)

Force: single.
 

Notes:

- 'Extension time' counted from when the spikes starting drawing back after the bounce, till the spikes shoot out of the ground the next time.

- If the time is too short (i.e. closer to 0) then the spikes will not have enough time to be drawn back totally, so they will jump up again before reaching the floor level.

- 'First' and 'second' condition means you must activate this combination by a GlobalTrigger, and the condition TriggerGroup of the GlobalTrigger must be this (first condition):
 

Trigger1. An A54 to define the same subject of Item Memory Zone.

Trigger2. An F256 to put the value of the same memory zone field into the same variable.

Trigger3. A C40 trigger to study the variable value if that is equal with 64.

 

Or this (second condition):
 

Trigger1. An A54 to define the same subject of Item Memory Zone.

Trigger2. An F256 to put the value of Custom_A memory zone field into another variable.

Trigger3. A C43 trigger to study the second variable value if that is equal with 0.
 

The differences between the two methods:
 

= Bouncing: it looks nicely (with first condition), it doesn't happen (with second condition)

= Possibility of bigger time than the default 64 frames: spikes cannot exceed the limit (with first condition), spikes can exceed the limit (with second condition)
 

Condition combination:

If the next extension of (X) teeth spikes start in (A) frames
 

A: from 1 to 64 frames (with the default method or if the executable formula is used with the first condition), from 1 to any frames (if the executable formula is used with the second condition)

Type: sequence.
 

1.18. Joby spikes subject
 

1.18.1. The name of the field:

Custom_A (Different usage in according with type of item) (Short)
 

Executable combination:

Adjust (X) joby spike rotation speed to (Y)
 

The basic formula (let's see only the version with variables now) is peculiar now:

 

Trigger1. An A54 to define the actual subject of Item Memory Zone.

Trigger2. An F256 to put the value of the chosen memory zone field into the chosen variable.

Trigger3. A C41 trigger to study if the chosen variable value >=1.

Trigger4. An F232/F263 to put a value into the chosen variable. (The force if the rotation is anti-clockwise.)

Trigger5. An F257 to force the chosen variable value into the chosen field. (The force if the rotation is anti-clockwise.)

Trigger6. A C42 trigger (with TGROUP_ELSE flag) to study if the chosen variable value <0.

Trigger7. An F232/F263 to put a value into the chosen variable. (The force if the rotation is clockwise.)

Trigger8. F284 to invert the sign in the chosen variable.

Trigger9. An F257 to force the chosen variable value into the chosen field. (The force if the rotation is clockwise.)
 

Y: from 1 to any speed (After 10000 the spike rotates very fast. 4100-whatever is the default maximum value.)

Force:

- Single, forced speed below the maximum: the speed jumps to the new value (increasing/decreasing the actual speed) then accelerates till reaching the maximum.

- Single, forced speed above the maximum: the spike will apply and keep the forced speed value.

- Continuous, forced speed below the maximum: the spike will apply and keep the forced speed value. When stopping it: the speed will increase to the maximum.
 

Notes:

- The odd formula is necessary because of the direction of the rotation that seems random: the speed value is positive in anti-clockwise case but negative in clockwise case. (I.e. it depends on the game: the spike will be triggered in clockwise or anti-clockwise way.) - We always force the same (positive) value in Trigger4 and Trigger7, so you should turn the sign of the negative value in Trigger7.

- If you activate the formula by an F118, then don't forget: TriggerGroups with condition triggers must be 'multiple' type in their F118.

- If the joby spike goes mad after you've loaded a savegame that means the game tries to perform both the directions at once. Load the savegame again (and again) to solve the problem (I can't see other solution now).

- When the joby spike has been triggered, first it rotates slowly, but after some seconds it reaches the maximum of its rotation speed.

- You cannot invert the direction forcing negative value on positive speed (or vice verse).
 

Condition combination (1):

If (X) joby spike rotation speed is (A)
 

The basic formula is peculiar now:
 

Trigger1. An A54 to define the actual subject of Item Memory Zone.

Trigger2. An F256 to put the value of the chosen memory zone field into the chosen variable

Trigger3. A C41 trigger to study if the chosen variable value >=1.

Trigger4. A C40/43 trigger to study the chosen variable value, as usual. (The study if the rotation is anti-clockwise.)

Trigger5. An executable trigger that will be executed if the speed is the given value.

Trigger6. A C42 trigger (with TGROUP_ELSE flag) to study if the chosen variable value <0.

Trigger7. F284 to invert the sign in the chosen variable.

Trigger8. A C40/43 trigger to study the chosen variable value, as usual. (The study if the rotation is clockwise.)

Trigger9. The same executable trigger that will be executed if the speed is the given value.
 

A: from 1 to any speed

Type: sequence.
 

Notes:

- Trigger4 and 8 study the same (positive) value. (Or 'values', if Trigger4 or 8 are not one C40/43 trigger but each of them is a 'bigger/equal-smaller' condition trigger pair.)

- As you see, this time we need to apply everyway the executable trigger (that will be executed if the condition is true) in the formula. (As you see, this trigger is the same, independently of the direction of the rotation, but you can choose different triggers if you want.)

- In this field we won't use Negative/Positive/Null formula, because now we use this peculiar formula instead of them.
 

Condition combination (2):

If (X) joby spike is rotating (A) clockwise/anti-clockwise
 

A:

'bigger/equal' 1 (anti-clockwise)

'smaller' 0 (clockwise)

Type: simple.
 

1.18.2. The name of the field:

Custom_B (Different usage in according with type of item) (Short)
 

Executable combination:

Adjust (X) joby spike actual extension to (Y)
 

Y: from 0 to any (the default maximum is 6303)

Force:

- Single, forced extension below the maximum: the extension jumps to the new value (increasing/decreasing the actual extension) then extends till reaching the maximum.

- Single, forced extension above the maximum: the spike will apply and keep the forced extension value.

- Continuous, forced extension below the maximum: the spike will apply and keep the forced extension value. When stopping it: the extension will increase to the maximum.
 

Note:

It works even if the spike is inactive.
 

Condition combination:

If the actual extension of (X) joby spike has (A) length
 

A: from 0 to any

Type: sequence.
 

1.18.3. The name of the field:

Custom_D (Different usage in according with type of item) (Short)
 

Executable combination:

Adjust (X) joby spike maximal extension to (Y)
 

Y: from 1 to any

Force: single.
 

Condition combination:

If the maximal extension of (X) joby spike has (A) length
 

A: from 1 to any

Type: sequence.
 

1.19. Chain/Plough/Stargate/Moving blade subject
 

1.19.1. The name of the field:

Custom_D (Different usage in according with type of item) (Short)
 

Condition combination:

If (X) chain/plough/stargate/moving blade first activity status is (A)
 

A:

'equal'

0: the trap has never been activated before

0, with TGROUP_NOT flag in the condition trigger:

a, the trap is active or

b, the trap is inactive but has been activated before at least once

Type: simple.
 

Note:

This 'first activity' condition is useful, because the 'Enemy has not been yet activated' in C14 works only with creatures. (Though 'Enemy is active' and 'Enemy is not active' are also useful with non-living objects in C14.)
 

1.20. Hammer subject
 

1.20.1. The name of the field:

Custom_A (Different usage in according with type of item) (Short)
 

Condition combination:

If (X) hammer is (A) striking/not striking
 

A:

'equal'

0: the hammer is ascending

0, with TGROUP_NOT flag in the condition trigger: the hammer is striking

Type: simple.
 

Note:

The first part of the shiver after the strike is included in the strike now.
 

1.20.2. The name of the field:

Custom_C (Different usage in according with type of item) (Short)
 

Condition combination:

If (X) hammer (A) is/is not in the uppermost position
 

A:

'equal'

0: the hammer is in the uppermost position

0, with TGROUP_NOT flag in the condition trigger: the hammer is not in the uppermost position

Type: simple.
 

1.20.3. The name of the field:

Custom_D (Different usage in according with type of item) (Short)
 

Condition combination:

If (X) hammer first activity status is (A)
 

A:

'equal'

0: the hammer has never been activated before

0, with TGROUP_NOT flag in the condition trigger:

a, the hammer is active or

b, the hammer is inactive but has been activated before at least once

Type: simple.
 

1.21. Burning floor subject
 

1.21.1. The name of the field:

Custom_C (Different usage in according with type of item) (Short)
 

Executable combination:

Force (Y) fire intensity on (X) burning floor
 

Y: from 1 to any

Force:

- The force is single (1-255), before the floor catches fire: the floor will catch fire with that intensity when the torch lands on it. Then the counter starts running up from that intensity.

If the force is continuous then the counter won't start till you abort forcing.

- The force is single (1-255), when the counter runs up: the intensity jumps (up/down) to that value, but the counter continues running up.

If the force is continuous then the counter won't continue till you abort forcing.

- The force is single (1-255), when the counter is at the maximum (255): the intensity jumps down to that value, and the counter runs up to 255 again.

If the force is continuous then the counter won't run up again till you abort forcing.

- The force is single (1-255), when the counter runs down: the intensity jumps (up/down) to that value, but the counter continues running down.

If the force is continuous then the counter won't continue till you abort forcing.

- The force is single (above 255), when the counter runs down: it causes a peculiar cycle. I.e. eg. if you force 850 that means three and a half cycle: from 850 to 765 (a lower half of the decreasing cycle), from 765 to 510 (a complete decreasing cycle: 765-510=255), from 510 to 255 (a complete decreasing cycle, 510-255=255), from 255 to 0 (a complete decreasing cycle). So, when the fire extinguishes at 765, 510 or 255 then it will flame out again at once, with full intensity. (At 0 the floor crumbles, naturally.)

If the force is continuous then the counter won't run till you abort forcing.
 

Notes:

- The trigger has no effect if the floor isn't burning.

- When the floor catches fire then a counter starts in this field from 0 to 255. The higher the number is the larger the fire is. When the counter stops at 255 then the intensity is constantly maximal. After some moments, the counter starts counting down. The lower the number is the more little the fire is. Reaching 0, the floor crumbles.

So, for example, if you want 'Intensity 200' that means this is the fire intensity when the counter (up/down) reaches 200.
 

Condition combination:

If the status of (X) burning floor is (A)
 

A:

'equal'

0 (the floor still isn't burning)

2 (the floor has been crumbled)

255 (the flames are at the constant maximum)

'bigger/equal' (3) and 'smaller' (255): the flames are just increasing/decreasing (Yes, two condition triggers, after each other!)

Type: simple.
 

1.21.2. The name of the field:

Custom_D (Different usage in according with type of item) (Short)
 

Executable combination (1):

Ignite (X) burning floor as if (Y) frames had been elapsed since the floor has caught fire
 

Y: from 1 to 449 frames

Force: single.
 

When the floor catches fire then a frame counter starts in this field from 0 to 450. When the counter reaches 450 then the fires start extinguishing.

So, for example, value 400 means the fires have started burning 400 frames ago, and they start extinguishing in 50 frames.
 

Notes:

- If you force a value then the floor catches fire by itself at once (having the intensity that belongs to that frame), and the counter starts from that frame.

- Using numbers above about 430 the solution is more or less buggy. (I.e. the flames will be put out sooner than you expect, with those numbers.)
 

Executable combination (2):

Force (Y) special status on (X) burning floor
 

Y: 0 or 450

Force:

- Single with 0: extinguishes the flames at once, the floor remains whole.

- Single with 450: the floor (still not burning) will crumble at once.

- Continuous with 0: the torch (though it will be devoured as usual) won't ignite this floor (till stop forcing) if Lara throws that on that.
 

Condition combination:

If (X) burning floor has been burning for (A) frames
 

A: from 1 to 449 frames

Type: sequence.