Hidden Triggers in TRNG
by AkyV

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

1. Combinations in Item Memory Zone
 

The subject of the Item Memory Zone is always a concrete Moveable object (including Lara as LARA object) which is placed in the map.

 

Triggers for the executable combinations:
 

The basic formulas if you use variables in the combination:

 

a, the version if you don't use big numbers:

 

Trigger1. An A54 to define the actual subject of Item Memory Zone. (Hereafter we call that subject 'X object'.)
Trigger2. An F232 to put a value (Y) between 0 and 127 into the chosen variable. Or an F252 to put a value (Y) between -1 and -128 into the chosen variable.

Trigger3. An F257 to force the chosen variable value into the chosen field.

 

b, the version if you use big numbers:

 

Trigger1. An A54 to define the actual subject of Item Memory Zone. (Hereafter we call that subject 'X object'.)

Trigger2. An F263 to put a value (Y) between -65536 and 65535 into the chosen variable.

Trigger3. An F257 to force the chosen variable value into the chosen field.

 

The basic formulas if you don't use variables in the combination:

 

a, the version if you don't use big numbers:

 

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

Trigger2. An F255 to put a value (Y) between 0 and 127 into the chosen field.

 

b, the version if you don't use big numbers:

 

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

Trigger2. An F261 to put a value (Y) between -65536 and 65535 into the chosen field.

 

Changing the basic formula:

 

a, Only with variables - if the number you want to force is above 65535: see Chapter I-21.

b, If you want to accomplish something special with the formula: see Chapter 7. and 8.

 

Triggers for the condition combinations:

 

The basic formulas:

 

a, the version if you don't use big numbers:

 

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 C43 trigger to study the chosen variable value if that is equal with a chosen number (A) between 0 and 31.

 

b, the version if you use big numbers:

 

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 C40 trigger to study the chosen variable value if that is equal with a chosen number 
(A) between 0 and 65535.

 

Changing the basic formula:

 

a, For smaller/bigger condition relations (if I say that or - if you're studying a sequence - any time):

- if you don't use big numbers:

 

= replace C43 trigger by C42 trigger to study the chosen variable value if that is smaller than a chosen number between 0 and 31, or

= replace C43 trigger by C41 trigger to study the chosen variable value if that is bigger than/equal with a chosen number between 0 and 31..

 

- if you use big numbers:

 

= replace C40 trigger by C39 trigger to study the chosen variable value if that is smaller than a chosen number between 0 and 65535, or

= replace C40 trigger by C38 trigger to study the chosen variable value if that is bigger than/equal with a chosen number between 0 and 65535.

 

b, If you're studying a sequence, and the condition need a tolerance: see Chapter I-18.

c, If the subject may have negative value in the examined property: see Chapter I-19. (I will always tell when it is needed.)

d, If the number you want to study is above 65535: see Chapter I-22.

e, If you want to accomplish something special with the formula: see Chapter 7. and 8.

1.1. General subject
 
1.1.1. The name of the field:
Contact Flags ($2400 = damage lara on touching) (Long)
 
Executable combination:
Make Lara invulnerable against the direct attack of (X) enemy
 
Y: 0
Force: continuous. When stopping it: the invulnerability ends at once.
 
Notes:
- 'Direct attack': sword, bite etc. I.e. the combination doesn't work with bullets. (Hurts caused by traps are also not included now.)
- 'If Lara collides with X object' conditions will probably fail if you are just using this executable combination on X object.
 
1.1.2. The name of the field:
Custom Flags (Different flags in according with object type) (Byte)
 
Executable combination (1):
Reactivate (X) Moveable object in (Y) way
 
Y:
62-general
63-One Shot
Force: single.
 
Notes:
- 'Reactivate' means this combination will work to activate the object only if you have deactivated the object before at least once.
- It also works if the 'real' trigger of the object was either One Shot or not.
- Don't use it with timed objects. (Except: if you antitrigger them - independently of them just working or not - before using the combination.)
 
Executable combination (2):
Remove the One Shot status of (X) Moveable object (till the next One Shot activation) in (Y) mode
 
Y:
0:
- remove the One Shot status of the antitriggered object or
- antitrigger the just active object (even if the object is not One Shot!), also removing its One Shot status
62:
- remove the One Shot status of the just active object, or
- remove the One Shot status of the timed object (independently of the - negative or positive - timer is still running or expired), or
- Be careful! It will retrigger the antitriggered objects (without One Shot status) (see Executable combination (1))
Force: single.
 
Having 'One Shot status' means the object has been activated by a One Shot trigger, so you cannot activate it once again.
 
So use this combination if you have activated an object by a One Shot trigger.
After that, you will be able to activate any (One Shot, non-One Shot) trigger of the object (again).
 
Notes:
- Don't misunderstand: this combination won't remove the 'One Shot' flag from a trigger, that's why I said: 'till the next One Shot activation', when the combination loses its effect.
- This combination is effectless about One Shot status if you activate it when the object doesn't have the One Shot status.
- The combination doesn't work if you use a TGROUP_SINGLE_SHOT flag instead of One Shot.
 
Executable combination (3):
Add One Shot status to (X) Moveable object in (Y) mode
 
Y:
1:
- add One Shot status to the just inactive object (after antitriggering or before the first activation) or
- antitrigger the just active object (even if the object is One Shot!), also adding One Shot status to that
63:
- add One Shot status to the just active object, or
- add One Shot status to the timed object (independently of the - negative or positive - timer is still running or expired), or
- Be careful! It will retrigger the antitriggered objects (with One Shot status) (see Executable combination (1))
Force: single.
 
So, after that, you won't be able to activate the object again - unless you remove the One Shot status.
 
Notes:
- This combination is effectless about One Shot status if you activate it when the object has the One Shot status.
- The combination doesn't work if you use a TGROUP_SINGLE_SHOT flag instead of One Shot.
 
Executable combination (4):
Force (Y) codebit button status on (X) Moveable object
 
Y:
+2: Button1 is active
+4: Button2 is active
+8: Button3 is active
+16: Button4 is active
+32: Button5 is active
Force: single.
 
As you know you need five active number buttons (1, 2, 3, 4, 5) so the object will be active. - See an example:
Button1, 2 and 3 are switched on (active) in OCB panel. You have a trigger where Button4 and 5 are switched on. If you activate the trigger then you also activate the trigger codebit buttons. Now all the number buttons are active, so the object will be active.
 
This combination is useful for example for this trick:
There is a Trigger X for Object A, with 1, 2 buttons are switched on (+2+4=6).
There is a Trigger Y for Object A, with 3, 4, 5 buttons are switched on (+8+16+32=56).
Lara activates Trigger X and then Trigger Y, so the object will be activated. Now you force Value 6 into this field as if only Trigger X had been activated, so the object will be antitriggered. Now Lara needs to activate Trigger Y again to retrigger the object.
 
Note:
Unfortunately, this doesn't work with objects which cannot be triggered. I.e. eg. you can't change the codebit button value of an AI_FOLLOW to make the guide do something else, reaching that AI_FOLLOW.
 
Condition combination (1):
If the One Shot status of (X) Moveable object is (A)
 
A:
'equal'
0:
- the object hasn't been triggered before (naturally not having One Shot status), or
- the object is antitriggered, not having One Shot status
1:
- the object hasn't been triggered before (having One Shot status forced on), or
- the object is antitriggered, having One Shot status
62:
- the (timed or not timed) object is active, not having One Shot status, or
- the timer for the positive timer has expired, the object has become inactive, not having One Shot status, or
- the timer for the negative timer has started, the object still isn't active, not having One Shot status
63:
- the (timed or not timed) object is active, having One Shot status, or
- the timer for the positive timer has expired, the object has become inactive, having One Shot status, or
- the timer for the negative timer has started, the object still isn't active, having One Shot status
Type: simple.
 
Note:
Don't use this combination if you can have a Condition combination (2) case for the object. (So if you switch on/off codebit buttons.)
 
Condition combination (2):
If the codebit button status of (X) Moveable object is (A)
 
A:
'equal'
0:
- the object doesn't have active codebit buttons and hasn't been activated before, or
- the object has been antitriggered
+2:
- Button1 in Set Trigger Type panel is switched on, and has become active when the trigger with this button for the object has been activated or
- Button1 in OCB panel is active (i.e. switched on)
+4:
- Button2 in Set Trigger Type panel is switched on, and has become active when the trigger with this button for the object has been activated or
- Button2 in OCB panel is active (i.e. switched on)
+8:
- Button3 in Set Trigger Type panel is switched on, and has become active when the trigger with this button for the object has been activated or
- Button3 in OCB panel is active (i.e. switched on)
+16:
- Button4 in Set Trigger Type panel is switched on, and has become active when the trigger with this button for the object has been activated or
- Button4 in OCB panel is active (i.e. switched on)
+32:
- Button5 in Set Trigger Type panel is switched on, and has become active when the trigger with this button for the object has been activated or
- Button5 in OCB panel is active (i.e. switched on)
Type: simple.
 
Notes:
- The condition is useful if you want to change the button status by the executable combination (4), and if you want to study if it has happened yet or not.
- Don't use this combination if you can have a Condition combination (1) case for the object. (So if you switched on One Shot button or if you forced on/off One Shot status.)
- If Button1, 2, 3, 4 and 5 in the OCB panel are all active (i.e. switched on) it means the object will be activated at once, without any trigger, when the level starts. But the value is not +2+4+8+16+32=62 now, but 64.
-If you activate a TRIGGER with Value 64 object, then the object will be antitriggered, and the value becomes 126. (This deed could be useful, if you want to use a One Shot switch to switch off an object.) You need to deactivate the object with a 'real' antitrigger so the values (and TRIGGER triggers) will 'start acting normally'.
 
Condition combination (3):
If (X) enemy is dead (general solution)
 
A: 'bigger/equal' 100
Type: simple.
 
Note:
Use it if you have problems with C14 trigger to examine the death of the enemy:
 
- Because C14 is not savegame-stable. I.e. you can't study the death of the enemy if you save the game after the death, and you load that savegame after that.
- Because C14 won't work with special deaths. (See: Chapter 1.1.6. Condition combination (3).)
 
1.1.3. The name of the field:
Facing Horizontal (Short)
 
Executable combination:
Turn (X) Moveable object suddenly to face (Y) direction of the compass
 
Y: from -32768 to 32767
Force:
- single: the AI of the object or (in the case of Lara) the player by the keys are able to correct it at once.
- continuous: the object (including Lara) is not able to turn to another direction. When stopping it: the AI of the object or (in the case of Lara) the player by the keys are able to correct it at once.
 
Notes:
- The meaning of the main directions (according to the game, not the Room Editor):
 
0: north
8192: northeast
16384: east
24576: southeast
-32768: south
-24576: southwest
-16384: west
-8192: northwest
 
- This is a useful combination for every Moveable object. (Including the similar combinations with the other 'Facing' fields below.) I mean, there are some other methods to turn the objects:
 
= ACTION triggers or Parameters= PARAM_ROTATE_ITEM Script commands to turn the item suddenly or continuously by a given degrees.
= ACTION triggers to turn the item continuously to face a given main direction.
 
But - except these 'Facing' fields - we don't have methods to turn the object suddenly to face a given (either main or not main) direction.
- In the case of Lara the continuous force is not the same as when you disable left/right arrow keys so she can't turn. First, the keys are enabled now, so Lara will try to turn if the player hit them - but she can't. Secondly, the keys are enabled now, so the player can use them for other purposes, eg. rolling the inventory.
 
Condition combination:
If (X) Moveable object faces (A) direction of the compass
 
A:
- with Positive formula (facing the 'eastern half' or exactly north): from 0 to 32767
- with Negative formula (facing the 'western half' or exactly north/south): from 0 to 32768
- with Null formula (facing exactly north): 0
Type: sequence.
 
1.1.4. The name of the field:
Facing Rotation (Only for Lara) (Short)
 
Executable combination (1):
Turn the face of (X) Moveable object suddenly left or right to (Y)
 
Y: from -32768 to 32767
Force: continuous. When stopping it: the game will correct the position automatically to the default one.
 
Notes:
- The main directions are:
 
exactly upside (default): 0
exactly right (90degrees): 16384
exactly upside down (180degrees): -32768
exactly left (90degrees): -16384
 
- Whatever the field name says - 'only Lara' -, this field works well with other objects.
- If Lara is rotated then maybe some of her animations - for example: doing interactions with objects - are impossible to do.
- Hair object of Lara may be buggy a bit with this kind of rotation.
 
Executable combination (2):
Turn Lara under water to (Y)
 
Y: from -32768 to 32767
Force: continuous. When stopping it: the game will correct the position automatically to the default one.
 
Lara's 'relative vertical axis' always goes from her feet to her head even if she's just leaning backwards/forwards etc. Executable combination (1) turns the object around a horizontal axis, but Executable combination (2) turns Lara around her 'relative vertical axis'.
 
Notes:
- The main directions are:
 
turned exactly upside (default, i.e. faces exactly below): 0
turned exactly right (i.e. faces exactly the left) (90degrees): 16384
turned exactly upside down (i.e. faces exactly above) (180degrees): -32768
turned exactly left (i.e. faces exactly right) (90degrees): -16384
 
- Executable combination (2) works for only Lara in water. So eg. in the case of crocodiles only Executable combination (1) will work both on land and in water.
 
Condition combination (1):
If the face of (X) Moveable object is turned (A) left or right
 
A:
- with Positive formula (turned to the 'right half' or exactly upside): from 0 to 32767
- with Negative formula (turned to the 'left half' or exactly upside/upside down): from 0 to 32768
- with Null formula (exactly upside): 0
Type: sequence.
 
Note:
This combination doesn't work for Lara under water.
 
Condition combination (2):
If Lara is turned under water to (A)
 
A:
- with Positive formula (faces the 'left half' or exactly below): from 0 to 32767
- with Negative formula (faces the 'right half' or exactly below/above): from 0 to 32768
- with Null formula (faces exactly below): 0
Type: sequence.
 
Note:
The condition is useful if you want to change the angle by the executable combination, and if you want to study if it has happened yet or not.
 
1.1.5. The name of the field:
Facing Vertical (Short)
 
Executable combination:
Turn (X) Moveable object suddenly to face (Y) the ceiling or the floor
 
Y: from -32768 to 32767
Force:
- Usually single.
- With Lara: continuous. When stopping it: some 'serious state changes' - for example, jumping with Lara into deep water - may annul the effect of the rotation after that.
 
Note:
The main directions are:
 
exactly upside (default): 0
turned exactly backwards (i.e. faces exactly the ceiling) (90degrees): 16384
turned exactly upside down (180degrees): -32768
turned exactly forwards (i.e. faces exactly the floor) (90degrees): -16384
 
Condition combination:
If (X) Moveable object faces (A) the ceiling or the floor
 
A:
- with Positive formula (turned to the 'back half' or exactly upside): from 0 to 32767
- with Negative formula (turned to the 'front half' or exactly upside/upside down): from 0 to 32768
- with Null formula (exactly upside): 0
Type: sequence.
 
1.1.6. The name of the field:
Flags of Item (Long)
 
Be careful!
This field is very useful but could be problematic. The best way to avoid the problems is if you avoid complex and/or special situations with this field about the actual subject. For example, don't use this field if the object doesn't have a collision. Or if the enemy is poisoned then don't examine by this field if the enemy has been hit or not. Etc.
So if something doesn't work with this field that possibly means the situation is too complex/special - so make it easier!
 
Executable combination (1):
Force Guard AI property on (X) enemy
 
Y: 547
Force: single.
 
Notes:
- Force the value only if the creature is active (alive).
- The property will be 'created' where the creature just is. So, if you force the property then the creature stops where he just is and starts acting as if he were standing at an AI_GUARD object.
- This forced property has the same property as the original AI object. For example, the creature at AI_GUARD object will notice Lara if she is close to him, dropping the property. That's why you cannot force Guard property on the creature if Lara is too close to him, when you activate the combination.
- An AI_GUARD object works only once during the lifetime of the creature. But you can force Guard property any time you want while the creature is living.
- Forcing other AI properties is buggy or effectless. (Or useless. For example why should you force Follow property? I mean, 'AI_FOLLOW type creatures' - Guide, Von Croy etc. - always need AI_FOLLOW objects, but other creatures can't do anything with Follow property even if you force it on them.)
- 'Forcing Guard' means only the single Guard property, i.e. not including Guard+Modify.
- 'Forcing Guard' when the creature is standing at an AI_GUARD and an AI_MODIFY object means the creature will drop Modify property and starts acting as if only there were an AI_GUARD object there.
 
Executable combination (2):
Force (X) enemy to drop all the AI properties
 
Y: 35
Force: single.
 
Notes:
- Force the value only if the creature is active (alive).
- For example, if the creature keeps guard at an AI_GUARD object, then dropping this Guard property (i.e. forcing 35) means the creature will leave his post - though Lara has not disturbed him, being too far away from him. (It also works with forced Guard property.)
So 'drop' means 'as if Lara had distracted the creature performing that property'.
- The combination is useful only with Guard, Modify, Guard+Modify, Patrol properties.
 
Executable combination (3):
Poison (X) enemy
 
Y: 291
Force: single.
 
Notes:
- Force the value only if the creature is active (alive).
- After all, this field means 'decrease the health of the enemy by degrees, but continuously, in a rhythm as if a poisoned arrow had hit him'.
 
Executable combination (4):
Make (X) horseman starts patrolling
 
Y: 8227
Force: single.
 
Notes:
- Force the value only if the horseman is riding.
- 'Patrolling' means this now: sometimes during the battle with Lara, the horseman decides to ride back to the AI_FOLLOW objects. First to his and then to the one of the horse. So he starts not caring about Lara (now the value turns into 8227) and rides back. If he reaches the AI_FOLLOW of the horse, then 8227 will change, the patrol ends.
 
Executable combination (5):
(Y) Enable/disable Lara's interaction with (X) Moveable object
 
Y: 32 (enable), 35 (disable), 96 (disable: only in the case of a standalone camera target)
Force: single.
 
Note:
You can force interaction status only with some object types such as pushable objects, pushpull/kick doors, double doors, crowbar doors, underwater doors, floor/ceiling trapdoors, zipline, sarcophagus, scales or standalone camera targets.
But it doesn't work (or buggy) with vehicles, rope, polerope, parallel (swing) bar, pickups, switches, key/puzzle holes, falling blocks, smashable bike wall/floor, burning floor, twoblock platforms (moving by the weight of Lara), SAS drag blokes, pushed rollingballs or element puzzle. (I didn't test other objects here but you can try that.)
Some remarks about the theme:
 
- Some objects need to be triggered so that it will work properly (burning floor, twoblock platform etc.). The triggered/antitriggered status has nothing to do with the enabled/disabled status. 'Enabled' means 'something will happen with that object if Lara touches that by herself or - eg. see the torch in the case of the burning floor - by a tool'.
- In fact it works with firerope, falling block or crowbar pickups, but if you disabled the interaction then you can't enable it again. (I.e. eg. a disabled falling block becomes a stable platform forever. Or a disabled firerope won't catch fire ever.)
- Don't worry if this combination can't do what you want. See eg. further descriptions below to know how you can enable/disable the interaction with falling blocks, pulley or crowbar switch, including the conditions about that.
- See A77 and A78 triggers to enable/disable tightropes.
- Let's see a nice example: a pushpull door (with disabled interaction) has an invisible keyhole (just as in the door in Coastal Ruins in the mouth of the tunnel towards the Catacombs). Lara cannot open the door, but then you will use the key in the keyhole that will enable the interaction again, so she will be able to open the door. I.e. it is a very nice natural situation: 'the door is closed, but use the key, and you will able to use the doorknob'.

Condition combination (1):

If (X) enemy has (A) AI property
 

A:

'equal'

35: the enemy doesn't have AI property, because:

a, he's dropped his AI properties when he's been distracted by Lara, or

b, you've made him drop all the AI properties by the executable combination above, or

c, he will have Guard AI property, but only later, if you will force it on him.

547: the enemy has Guard AI property, because

a, he's standing at an AI_GUARD object, or

b, you've forced Guard property on him, or

c, he's reached the second AI_AMBUSH object from the first one, or

d, he was standing at an AI_GUARD and an AI_MODIFY object but you've forced Guard property on him.

1059: the enemy has Ambush AI property, because he's running from the first AI_AMBUSH object to the second one.

2083: the enemy has Patrol AI property, because he's patrolling between AI_PATROL1 and AI_PATROL2 objects.

4131: the enemy has Modify AI property, because he's standing at an AI_MODIFY object.

4643: the enemy has Guard+Modify AI property, because he's standing at an AI_GUARD and an AI_MODIFY object.

Type: simple.
 

Notes:

- Don't use the combination if the enemy is not alive (still not living or dead).

- The value is also 35 if the enemy doesn't have an AI property and he hasn't had it before and he won't have it later. But it is naturally a case which is not needed to study.

- We won't study the Follow AI property (A=8227), because, as I said above it is logical that some objects have that flag but some objects don't.

(In fact, the guide or Von Croy won't have Follow property continuously during their lifetime, sometimes they drop it temporarily. But it is not easy to tell exactly when it happens so we should skip discussing this.)

- Be careful, we can have some special situations with AI properties. - Some cases I discovered:
 

= It is not so easy to 'really' lose the Modify property. For example, a crocodile will leave AI_MODIFY after having been distracted, but still having the value of Modify property. Or, baddy_1 distracted can't leave AI_MODIFY, just starts shooting at Lara with infinite ammo, still having the value of Modify property. - To make everything work normally again, you need to force the creature to drop all the AI properties.

= If the skeleton/baddy jumps aside when triggered (see: OCB 1 or 2) then he adopts Guard property (temporarily, while he's doing that).

= If Setha can't find Lara, then he adopts Ambush property (forever, so he won't drop it if he will find Lara later).
 

Condition combination (2):

If (X) enemy has (A) special status
 

A:

'equal'

43: dying, affected by gravitation (i.e. the skeleton is just falling into the pit after Lara having shot that, or the harpy is just falling into the ground after Lara having shot that)

51: has just been hit

291: alive but poisoned

8227: the horseman is just getting on the horse or patrolling

Type: simple.
 

Notes:

- About Value 51:
 

= It also works with immortal enemies.

= It works only with bullets, i.e. useless with arrows or grenades. (But you can do something similar with arrows or grenades - see Customize=CUST_AMMO Script command.)

= It works even if the aggressor is not Lara. (See if Troops shoots at a scorpion.) But it doesn't work with direct attacks. (See if the scorpion grabs a Troops.)

= If Lara hits 'accidentally' (i.e. if the player uses 'automatic targeting', but Lara shoots without aiming) that also matters now.
 

- About Value 8227:
 

= If Lara starts disturbing the horseman (i.e. shoots after him when he rides to get farther from her to AI_FOLLOW's) then two things is possible:

a, (Usually.) He drops Value 8227, aborting the patrol, and comes back to her.

b, (Rarely.) He comes back to her, not dropping 8227, saying 'It's so rude to disturb me. Now I punish you to learn good manners and then go back patrolling'.

= See more about horsemen in Chapter 1.8.


 

- Though teeth spikes are naturally not 'enemies', you can also use this condition with teeth spikes, with Value A=38, which means 'the teeth spikes has never been activated before'. Because C14 condition (which works not only with 'enemies', though the trigger name is about 'creatures') doesn't work with non-creatures in the case of 'Enemy has not been yet activated' condition.

And one more thing about C14 in the case of teeth spikes: 'Enemy is active' means 'the spikes are sticking out' and 'Enemy is not active' means 'the spikes are totally drawn back'. So teeth spikes are 'not active' even they are triggered but they are totally drawn back. So these are not 'triggered' or 'antitriggered' conditions now.

So be careful with C14 in the case of teeth spikes!

(In the cases of other non-living objects 'active' equals with 'triggered' and 'not active' equals with 'antitriggered'.)
 

Condition combination (3):

If (X) enemy is dead with (A) special death
 

A:

'smaller'

10 - a non-living Moveable object (column, teeth spikes etc.) has been exploded (as 'creature') by A14 trigger.

'equal'

2 - any enemy (including wraith) is killed by A14 trigger in 'exploding creature' way.

4 - smash object (triggered or not) or hydra has been shattered by explosive ammunition or smash object (triggered) has been shattered by Lara jumping to that (it is a useful condition, because in the case of the 'death' of smash objects - which can never happen by non-explosive ammo! - HEAVY triggers are useless, as opposed to Shatter objects)

18 - any enemy killed by explosive ammunition

34 - wraith1, wraith2 has died in the water, or falling block has fallen, or laserhead/smashable bike wall/floor has been shattered, or any enemy (including wraith) has been removed by A14 trigger

36 - jeep/motorbike has been exploded (fallen into water), or any enemy (including wraith)/a non-living Moveable object has been exploded (in 'ground/sky' or 'underwater' way) by A14 trigger

38 - the guide has been disappeared (by OCB codebit buttons of AI_FOLLOW)

42 - the skeleton has gone after Lara having shot that into the pit

51 - the fishes are all emitted (i.e. the emitter itself is 'dead')

258 - any enemy was poisoned when being killed by A14 trigger in 'exploding creature' way

260 - any enemy died when being poisoned (but perhaps not the poison itself but bullets killed him)

274 - any enemy was poisoned when explosive ammunition killed him

292 - any enemy was poisoned when being killed by A14 trigger in 'exploding ground/sky' or 'exploding underwater' way

8230 - baboon has gone by a flash

Type: simple.
 

Notes:

- Use C14 if you want to study the death of the enemy by A14 trigger, in 'kill creature' mode.

- After some kills performed by A14, Lara is able to aim/shoot at - even the last, empty position of - the 'dead' enemy. (So do not shoot at dead enemies.)

- The 'usual' death can also be examined in this combination, with 'equal=4'.

- As you see this condition will also work with some non-creature Moveable objects.

- In the case of some 'serious' non-living Moveable object (i.e. if the Moveables that are more than simple Animatings) the condition will also work with A14 trigger, in 'remove' mode. But the values are a bit chaotic, so I didn't put them into the list. Test your object in this condition if you want to know that value. (Or try that 1.1.2. 'general death' condition instead.)

- Cases when the status remains 'living' after the death:
 

= If Lara shot the ahmet dead so he's lying dead on the floor. Because, don't forget, according to the original setup, an Ahmet will never be dead, but will be transported to his cage when having been shot dead.

= A Flipeffect has made the little beetles or fishes disappear.

= Lara has shot the head of the skeleton, making that shatter.

= Locusts after dissipating.

= Kill any enemy by A14 trigger in 'antitrigger' (freezing) way.

= Create a pause in emitting creatures by A14 trigger in 'disable' way.

= Hide the enemy by A14 trigger.

= Ghost trap (see A13 trigger) for wraith3.
 

Condition combination (4):

If (X) wraith3 death status is (A)
 

A:

547: wraith3 has touched ANIMATING10 the first time

(each +512 means a newer touch)

13346: wraith3 has touched ANIMATING10 the last time - which has made him killed

Type: sequence.
 

As you know, a wraith3 dies if he touches an ANIMATING10, circling around it. But not right away, i.e. he must touch it more than once. Each frame when he touches the object is +512 in the counter. The 26th frame means the death of the wraith.

It happens in three (sometimes four) parts. Each part usually means a 8-10 frames long touch. So, for example, when he touches first then the counter starts: 547, 1059. 4131, 4643. Then he gets farther from ANIMATING10. Then he comes back for a newer part: 5155, 5667. 8739, 9251. Then he gets farther from ANIMATING10 again. Then he comes back for a newer part again: 9763, 10275. 12835, 13346. And now he dies.
 

Condition combination (5):

If Lara's interaction with (X) Moveable object is (A)
 

A:

'equal'

32 - tightrope is enabled (with or without an interaction) or

pushable object, pushpull/kick door, double door, crowbar door, underwater door, floor/ceiling trapdoor, zipline, sarcophagus is enabled but there is no interaction being performed or

scales is enabled but there is no interaction being performed (only in the start position i.e. before the first usage or after any reset) or

switch (without triggers) or timed switch hasn't been used before or

there is no interaction being performed with (non-timed) switch (with triggers) or SAS drag bloke or

timed switch is in off position again (after one or more usage) with Lara at the switch or

puzzle hole hasn't been used before or there is an interaction being performed with it (It's worth using this condition if there aren't triggers on the square of the hole. If there are - and usually there are, naturally - then the usual 'the KEY trigger hasn't been activated yet' means this condition.) or

key hole hasn't been used before or

standalone camera target hasn't been used before or enabled again

34 - tightrope is disabled or

Lara is performing the 'reaching into the backpack and inserting key item' animation at the key hole (see a similar condition for puzzle holes in Chapter 1.42.) and (if there are no triggers on the square of the hole) after that

35 - there is an interaction being performed with pushable object, zipline, (non-timed) switch or

there is an interaction being performed with scales or - after the interaction - the ahmet hasn't killed yet to reset the scales

the one and only interaction is being performed or has been performed with pushpull/kick door, double door, crowbar door, underwater door, floor/ceiling trapdoor, sarcophagus, SAS drag bloke or

pushable object, pushpull/kick door, double door, crowbar door, underwater door, floor/ceiling trapdoor, zipline, sarcophagus, scales is disabled or

zipline is just being triggered (to get back to the upper position)* or

there is an interaction being performed with timed switch or the timed switch is in on position or

the puzzle hole (a, if there are triggers on the square of the hole: the moment when puzzle item has just been inserted or if Lara is not at the hole after inserting the item, b, if there aren't triggers on the square of the hole: when puzzle item has been inserted)

36 - the key hole (after inserting the item) - only if there are triggers on the square of the hole (After all, you don't need this condition, because 'the KEY trigger has been activated yet' means this condition.)

37 - switch (without triggers) isn't just being used but hasn't been used at least once before or

timed switch is in off position again (after one or more usage) without Lara at the switch or

the puzzle hole (if Lara is at the hole after inserting the item) - only if there are triggers on the square of the hole

96 - there is an interaction being performed with a standalone camera target or (still not enabling the target again) there was an interaction being performed

Type: simple.
 

*: the value is 35 even there is nothing for the trigger to do i.e. if the zipline is in the upper position.
 

Notes:

- If the object is moving without Lara (eg. if she has let the zipline so she falls down, but the zipline is still sliding) that is also calculated as she's just in interaction with it.

- See interaction conditions about fireropes in Chapter 1.26.1.

- See a general interaction condition here: Chapter 2.51.

- See the 'disabled pushpull door with a key' example above. If you try that then you can also try this:

An AOD-type 'trying the closed pushpull door unsuccessfully' custom animation, starting it with this condition: 'if the door is disabled and performing the �closed� animation (Animation0) and Lara's hands are free and she is in a given position to the door - see: TestPosition Script command - and she's performing Animation103, and CTRL is being used then start the animation'. (You need another GlobalTrigger now to disable all the keys while Lara's performing the custom animation, so eg. she will not be able to draw weapons when trying the door.)
 

1.1.7. The name of the field:

Frame Now (warning it's an abs value) (Short)
 

Condition combination:

If (X) Moveable object just performs (A) absolute frame
 

A: 'equal' absolute frame index

Type: simple.
 

'Absolute' frames always calculate all the actual animations of the object, as if all the animations were only one, huge animation. I.e. each absolute animation frame shows up only once in the case of that object. So eg. the absolute frame with ID=567 at that object doesn't belong to a concrete animation, it belongs to that object, there is no other Absolute Frame 567 of that object.

For example you'd like to know the absolute ID of Frame 8 of Animation 18 of BADDY_1. (This is the animation when the baddy is just standing immovably.) Then open that WAD in NG Center\Tools\Animation Watcher, in 'Show PRESENT ANIMATIONS for current slot' mode. Choose BADDY_1 slot then see 'Anim' column. Choose the line of 18 (i.e. the line of Animation 18). See the green window below, searching for 'FrameStart' line. The value here is the Absolute Frame ID of Frame 0 of that animation. Probably you'll see 400 there now. 0+8=8, so 400+8=408, i.e. the absolute ID of Frame 8 of Animation 18 of BADDY_1 is 408.

So eg. 'If (BADDY_1 ID25) Moveable object just performs (408) absolute frame' true condition means the BADDY_1 that has object index=25 is just performing Frame 8 of his Animation 18.
 

Be careful! Adding/removing frames/animations to/from that object may change that absolute frame index.
 

Note:

This condition could be useful eg. if you want an AnimCommand not for all the BADDY_1 creatures placed in the map, but only for a concrete BADDY_1. (In the case of ACTION triggers it is possible if you export a trigger into WADMerger. But it doesn't work with other cases.) So you won't add that AnimCommand to that frame of BADDY_1 objects in WADMerger. Instead of that, you apply that AnimCommand as a placed trigger in the map (or an exported trigger in a GlobalTrigger), and then use this condition for that trigger. So the trigger will be executed only if this concrete BADDY_1 performs that frame.

(And there is one more trick here: you can disable that trigger temporarily, for example with a Trigger Triggerer. It will cause that concrete BADDY_1 will activate that trigger only if he performs that frame AND if the trigger is just enabled.)

(You can see something similar in Chapter 2.52.)
 

1.1.8. The name of the field:

Height Floor below the item (Long)
 

Condition combination:

If the floor below (X) Moveable object is just at (A) units from Floor Level 0
 

A:

- with Positive formula (below Floor Level 0 or exactly Floor Level 0): from 0 to 32 512 units*

- with Negative formula (above Floor Level 0 or exactly Floor Level 0): from 0 to 32 768 units**

- with Null formula (exactly Floor Level 0): 0 unit

Type: sequence.
 

*: the deepest useful floor is Floor Level -127=-127 clicks=127x256 units=32 512 units

**: the highest useful floor is Floor Level 128=128 clicks=128x256 units=32 768 units
 

Notes:

- The usage is recommended only with creatures if they are just alive.

- Two examples to understand why this condition could be a great help for level-editing:
 

= Lara is in a room with a very uneven floor. You want her to activate a thing only if the floor below her is on a given level. It means one trigger on each square that has on that level, with 'fragmented' conditions. (The conditions are needed because not each part of a broken surface has on the same level.) Or, instead of that, you create a GlobalTrigger, with an 'if the floor below.' condition for Lara. The A in that condition is the required floor level. (The GlobalTrigger is naturally enabled only if Lara is in that room.)

(Use one more condition in the GlobalTrigger: C25, in 'touching floor' mode. It causes 'if the floor below her is on a given level' turns into 'if she's on the given floor level'.)

= You want a trigger for Lara and a HEAVY trigger on the same square. It isn't possible, of course, so you place a trigger for Lara there and - instead of placing that HEAVY - create a GlobalTrigger, with an 'if the floor below.' condition, for the required creature. The A in that condition is the floor level value of that square. (In the zone where the GlobalTrigger is enabled there can't be other square on that floor level.)
 

1.1.9. The name of the field:

HP (Current life level. $C000 = unkillable) (Short)
 

Executable combination (1):

Adjust the actual life points of (X) enemy to (Y)
 

Y: from 1 to any

Force: single.
 

Note:

You can adjust the value even before triggering the creature. In that case the actual life point is naturally the same as the maximal life points. (So it is a good method if you want to force a new maximal life points only for a given creature, meanwhile the other creatures of the slot will have the original maximal life points or the maximal life points forced by an Enemy Script command.)
 

Executable combination (2):

Make (X) enemy immortal from now on
 

Y: from 1 to any

Force: continuous. When stopping it: the enemy will become mortal, with Y actual life points.
 

Note:

These 'immortal' enemies remain 'aimable'.
 

Condition combination:

If the actual life points of (X) enemy is (A)
 

A: from 1 to any

Type: sequence.
 

1.1.10. The name of the field:

OCB Code (The value you typed in OCB of this item) (Short)
 

Condition combination:

If the OCB code typed of (X) Moveable object is (A)
 

A: 'equal' OCB code typed in the OCB window

Type: simple.
 

Notes:

- The executable combination of this field is workable but needless. I mean, A79 trigger will do the same. But we have some problems to force a new OCB value on an object:
 

= Sometimes it is not savegame-stable. So not only activate A79, but trigger it with a continuous force, in a GlobalTrigger. Disable the GlobalTrigger only if you don't want to keep the forced value any more.

= Force a new OCB number on an enemy only if he hasn't come to life yet. But we still cannot be sure it will work.
 

- The condition combination is useful, because if you can change the OCB number by A79 then perhaps it is worth examining if the OCB number is this or that in the given moment.
 

1.1.11. The name of the field:

Position X (Long)
 

Executable combination:

Force (Y) new X horizontal actual position on (X) Moveable object
 

Y: from 1 to 103 424 units (counted from the northern - 'upper' - edge of Room Editor Window)

Force: single.
 

Notes:

- The northest square line of the editor window is useless for the inside part of the rooms. One square is 1024 units, so one square line has 1024 units width. It means if you move your room in the editor window as northern as you can, then you will always see a little (1024 units wide) gap, the northern wall of the room will never reach the northern edge of the window.

That's why eg. if you place your room in the northest position, and you want to force an 'in 3 squares distance from that wall' horizontal position on the object, then the proper solution is 1024+3x1024=4096 units, not 0+3x1024=3072 units.

The biggest distance from wall to wall inside the rooms is 100 squares=102 400 units.

That's why I said that 102 400+1024=103 424.

- You may ask why we want to complicate this thing. I mean, a simple 'Move' ACTION trigger or a Parameters=PARAM_MOVE_ITEM command would be more simple to force the position, wouldn't it? - Well, those features move the object with a given distance, but this combination moves the object into a given position. That is not always the same.

And one more thing: a 'usual' transportation with LARA_START_POS objects (see A40 trigger) always forces a new X, Y and Z coordinates on (X) object. But this combination will be able to force only Position X and the transported thing will keep its actual Position Y and Z.

- If you feel it's hard to define a value like that then use Diagnostics for Lara. Take her to the required position, then see her coordinates on the screen - and now you got the required value.

- We cannot always transport anything anywhere, i.e. there are some rules:
 

= Usually Moveable objects can be transported ONLY inside the room where they are placed in Room Editor.

= Objects with AI can be transported ONLY inside the room where they just are in the moment when you transport them.

= Lara can be transported into any room, with one of these methods:
 

a, The vector of the move from the start to the target cannot cross walls or floors, only portals between rooms.

b, You can transport her into any room, if you also force the ID of the destination room (see 'Room (Room where is the item) (Short)' field below) at the same time on her.
 

- If the animation has a SetPosition AnimCommand (see for example: LARA object Animation 97), changing a coordinate, then that coordinate won't be refreshed in this field while the animation is being performed.
 

Condition combination:

If the X horizontal position of (X) Moveable object is (A)
 

A: from 1 to 103 424 units

Type: sequence.
 

Note:

The original 'fragmented' conditions work only for Lara. You should see: you can also use the position condition combinations for other Moveables as 'HEAVY type fragmented conditions'. (Because eg. a condition like that is able to define a position such as 'in the middle of a square'.)
 

1.1.12. The name of the field:

Position Y (Long)
 

Condition combination:

If the Y vertical position of (X) Moveable object is (A)
 

A:

- with Positive formula (below Floor Level 0 or exactly Floor Level 0): from 0 to 32 512 units*

- with Negative formula (above Floor Level 0 or exactly Floor Level 0): from 0 to 32 768 units**

- with Null formula (exactly Floor Level 0): 0 unit

Type: sequence.
 

*: the deepest useful point of the level is on Floor Level -127=-127 clicks=127x256 units=32 512 units

**: the highest useful point of the level is on Floor Level 128=128 clicks=128x256 units=32 768 units
 

1.1.13. The name of the field:

Position Z (Long)
 

Executable combination:

Force (Y) new Z horizontal actual position on (X) Moveable object
 

Y: from 1 to 103 424 units (counted from the western - 'left' - edge of Room Editor Window)

Force: single.
 

Note:

See the notes above. (1.1.11. executable.)
 

Condition combination:

If the Z horizontal position of (X) Moveable object is (A)
 

A: from 1 to 103 424 units

Type: sequence.
 

Note:

The original 'fragmented' conditions work only for Lara. You should see: you can also use the position condition combinations for other Moveables as 'HEAVY type fragmented conditions'. (Because eg. a condition like that is able to define a position such as 'in the middle of a square'.)

1.1.14. The name of the field:

Room (Room where is the item) (Short)
 

Executable combination:

Force (Y) new room on Lara
 

Y: the game ('tomb') index of the room (See Select Room window in Room Editor. In 'RoomName (A:B )' B means the room game index. A is the Room Editor - 'NGLE' - index.)

Force: single.
 

Notes:

- It is useful with 'Position X (Long)' and 'Position Z (Long)' fields (see above) if you transported Lara into a new room, if the vector of the move crossed walls/floors. So use it in the same TriggerGroup, where you can find the executable formula for Lara of 'Position X (Long)' or 'Position Z (Long)' field. Put the present formula after that formula in that TriggerGroup.

- If you can't decide about the room, then see the pivot of the object. For example, if Lara is standing in a 1 click deep pool, then she's in the room above the water surface. But, when she's standing in a 2 clicks deep (waist-deep) pool, then she's in the pool. - It's because when Lara is standing in a 1 click deep (knee-deep) pool, then her pivot (her butt) is above the water surface.
 

Condition combination:

If (X) Moveable object is just in (A) room
 

A: 'equal' the game ('tomb') index of the room

Type: simple.
 

Notes:

- It also works for Lara, but there is a simpler solution for her: see ENV_ROOM_IS type MultEnvCondition.

- I said in Chapter 1.1.11. you cannot transport non-AI Moveable objects out of their rooms. But it doesn't mean they won't leave their rooms. Just think about a zipline that will slide from one room to another. (Or the motorbike etc.) And yes, in their cases the index of the room will be updated when they change rooms.
 

1.1.15. The name of the field:

Speed in horizontal movements (Short)

 

Executable combination:

Force (Y) horizontal speed on the actual animation of (X) Moveable object
 

Y: from 0 to any speed value

Force: continuous. When stopping it: the speeds start working 'normally'.
 

Notes:

- Let's see an example to understand what 'horizontal speed' exactly means now:

When Lara's standing, then she's performing her ID103 animation (Speed value in WADMerger Animation Editor: 0.) Then she starts running, performing her ID6 animation (Speed value: 23.) Then she's running, performing her ID0 animation (Speed value: 47.)

When she starts running (Animation6) then the Speed jumps from Value 0 of the previous animation to Value 23 of the present Animation, at once. But Animation6 has an 'Accel: 1' value in WADMerger Animation Editor. It means the speed will be increased by 1 per frame in the game: 24, 25 etc. When Animation6 has ended and Lara starts performing Animation0 then the last speed of Animation6 (it's probably 36) will jump from the 47 constant speed value of Animation0.

So not always WADMerger Speed value is shown in this field, but the accelerated speed value as well if the animation has Accel value. (Naturally negative Accel value means decreasing speed.)

- By the way, eg. 25 in this field means Lara will move horizontally 25 units during that frame. - Though this time 1024 units seems a bit less than 1 square.

- This combination doesn't always work. - Let's see another example to understand:

This is the 'stand jumping forward' animation combination of Lara, according to WADMerger Animation Editor:
 

Animation73: she's ready to jump, Speed: 0, Accel: 0

Animation76: she starts jumping forward, Speed: 99, Accel: 0

Animation77: she's jumping forward, Speed: 0, Accel: 0

 

But, when you study this field in the game (by Diagnostics), that's what you'll see:
 

Animation76: speed is constantly 99.

Animation77: speed is constantly 50. Not 0 at all!
 

But that is logical. I mean the speed of Animation77 is hardcoded, because the real value is 50 when Lara's performing a stand jump, and 75 when Lara's performing a run jump. WADMerger seems to be unable to handle hardcoded speed value, that's why that shows 0 speed value.

And that's the point: it seems you can force the speed value with this combination only in the case of hardcoded speeds.

For example, use it this way, if you want to force a new speed for the running jump: GlobalTrigger1 will force continuously the formula, in GT_ALWAYS way, but the GlobalTrigger is still disabled.

There are two more GlobalTriggers:

GlobalTrigger2 has a TriggerGroup as a condition. This TriggerGroup contains these condition triggers: 'if Lara is performing Animation16' OR 'if Lara is performing Animation18'. (Because the running jumps will start with Animation16 or 18, instead Animation76.) The executable trigger of this GlobalTrigger is a trigger to enable GlobalTrigger1.

So GlobalTrigger2 enabled GlobalTrigger1, the continuous force has started on the actual animation. Animation16 or 18 actual animations are too short and doesn't have a hardcoded speed, so the force has no effect now. But it will have an effect, if Animation77 starts.

GlobalTrigger3 has a TriggerGroup as a condition. This TriggerGroup contains this condition trigger: 'if Lara is not performing jumping status'. The executable trigger of this GlobalTrigger is a trigger to disable GlobalTrigger1 again. - So if Lara has finished the jump (Animation77), then the continuous force ends, preventing from overwriting the hardcoded speed of further animations.

- See more about horizontal speed in the description of 'Speed (Short)' Animation Memory Zone field below. (Chapter 5.10.)
 

Condition combination:

If the actual horizontal speed of (X) Moveable object is (A)
 

A: from 0 to any speed value

Type: sequence.
 

Note:

It works with any animation even that doesn't have a hardcoded speed. Let's see an example how this condition is useful:

When Lara is driving vehicles then you must study the horizontal speed of the vehicle (instead the speed of Lara object or Vehicle_Extra object). The biggest speed with motorbike (after using nitro) is 192. So if you use 'If the actual horizontal speed of (motorbike) Moveable object is (192)' condition, and that is true, that means Lara used the nitro and drives the motorbike with maximum speed.
 

1.1.16. The name of the field:

Speed vertical movements or underwater (Short)
 

Executable combination:

Force (Y) vertical speed on the actual animation of (X) Moveable object
 

Y: negative speed value (moving upwards), positive speed value (moving downwards) or 0 (no move)

Force: continuous. When stopping it: the speeds start working 'normally'.
 

Notes:

- Probably you cannot force a bigger value than the biggest default (Animation Editor) vertical speed of that animation.

- It doesn't always need to use this combination. See eg. F136 to force a new vertical speed on Lara jumping.

- Also use this field if you are interested in Lara's swimming speed. (But only in her case. I.e. eg. the swimming speed of the crocodile is calculated as a horizontal speed.) - This speed is always positive.

For example, when swimming under water (Animation 86) then Lara's maximum swimming speed is 200. Let's say, the pool is not water but some 'thick liquid', so you force Value 50 into this field (to make Lara swim slower), continuously, this time using 'if Lara is performing Animation 86' as a condition. (So 50 will act as a new maximum swimming speed, instead of 200.)
 

Condition combination:

If the actual vertical speed of (X) Moveable object is (A)
 

A:

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

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

- with Null formula (no speed): 0 speed

Type: sequence.
 

Note:

Let's see an example how this condition is useful:

Animation28 is the 'jumping up then falling down' animation of Lara. When she starts jumping up, then her energy (i.e. the vertical speed) is the biggest and starts decreasing while she gets higher and higher (-104, -98, -92, -86 etc.). When she reaches the top, then the energy is -2, and when the fall-down phase starts from the top, then it starts increasing while she gets lower and lower (4, 10, 16, 22 etc.) Just before she reaches back to the ground, the energy is 100.

So, for example Value -2 in this field means 'if Lara has just reached the top of her fly'. (You also need to use 'if Lara is performing Animation28' condition in the combination, after the last condition trigger of the original combination. Because, without that, -2 condition would also work if Lara had -2 vertical speed in the case of another animation.)
 

1.1.17. The name of the field:

State Id Next (Short)
 

Condition combination:

If the next state ID of (X) Moveable object is (A)
 

A: 'equal' State ID of the object

Type: simple.
 

Notes:

- This field shows the state of an animation. This state is the state of the animation that will be performed after the actual animation. This state is the state of the animation you can see in 'Next Animation' box of the actual animation, in Animation Editor.

- We don't talk about an executable formula for this field because we have other triggers for that: F78, F170 or F171 in the case of Lara or A39 in the case of other Moveable objects. (Honestly, I don't find A39 too useful.)
 

1.1.18. The name of the field:

State Id Now (Short)
 

Executable combination:

Force (Y) actual State ID on (X) Moveable object
 

Y: State ID of the object

Force: single.
 

Note:

Use it only if the subject is not Lara. See Lara's State ID triggers here: F78, F170 or F171.
 

Condition combination:

If the actual state ID of (X) Moveable object is (A)
 

A: 'equal' State ID of the object

Type: simple.
 

Notes:

- This field shows the state of an animation. This state is the state of the actual animation. This state is seen in 'StateID' box of the actual animation, in Animation Editor.

- Don't use this combination in the case of Lara. Use C31 instead.
 

1.1.19. The name of the field:

Unknown (Light_A) (Long)
 

Condition combination:

If red ambience light shining on (X) Moveable object is (A)
 

A: color value

Type: simple, but you can use either 'equal' or 'smaller' or 'bigger/equal' conditions.
 

Notes:

- The definition of 'red ambience light':
 

= the red component of RGB ambience light of the actual room typed in Room Editor, but

= don't forget: the RGB ambience value of the actual room is 'mixed' with the RGB ambience value of the adjacent room close to the portal between those two rooms. That's why the red ambience light shining on the object is not exactly the value you typed, if the object is close to a portal and if the room at the other side of the portal has another red ambience light. (Use another condition combination as well in the TriggerGroup of the present combination - see Chapter 1.1.26. - if you want the present condition to be true only when exactly the typed ambience light of the room shines on the object.)
 

- A is always the eightfold of the component. So eg A=8 is Red light=1, A=512 is Red light=64, A=1024 is Red light=128 etc.

- These values won't be affected if another light source (light bulb, fog bulb etc.) also shines on the object.

- There is a tiny bug about this condition: it won't work properly until the object comes through doors (portals) between rooms at least once or twice. (Don't misunderstand: it doesn't matter how many doors the object will cross or which ones those doors are. Which matters is the number of crosses so far, but through any doors.) - But each cross matters to prevent the bug only if the given color is different on the two sides of the door!

So use the condition only if you are sure that the object has crossed at least two doors during its lifetime so far, with different colors on each side of the doors.
 

1.1.20. The name of the field:

Unknown (Light_B ) (Long)
 

Condition combination:

If green ambience light shining on (X) Moveable object is (A)
 

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

1.1.21. The name of the field:

Unknown (Light_C) (Long)
 

Condition combination:

If blue ambience light shining on (X) Moveable object is (A)
 

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

1.1.22. The name of the field:

Unknown (Light_D) (Long)
 

Executable combination:

Force blinking (Y) color on (X) Moveable object
 

Y: color value

Force: continuous. When stopping it: only the 'normal' colors (ambience, bulbs etc.) will shine on the object again.
 

While you are forcing, the blink has two phase: when you see the 'normal' colors on the object and when you see the forced (Y) color on the object. (The rhythm of the blink is hardcoded, mostly constant. Maybe it changes sometimes: eg. if the color of the unused motorbike is blinking but then Lara starts riding the bike.)

If you have the RGB code you want to force then turn it into hexadecimal format. For example the color is R/G/B=20/100/50. It is $14/$64/$32 in hexadecimal. Merge the numbers: $146432. Then turn that back into decimal: 1336370. This 1336370 is your Value Y.
 

Notes:

- A condition combination will work for this field, if you want to study the RGB ambience light just shining on the object. But unnecessary. I mean, it is simpler if you combine the single color conditions (see above) in a TriggerGroup: 'If red ambience light shining on (X) Moveable object is (A) and if green ambience light shining on (X) Moveable object is (A) and If blue ambience light shining on (X) Moveable object is (A)'.

- A similar command works for the colors of Static objects: see Parameters= PARAM_COLOR_ITEM Script command.
 

1.1.23. The name of the field:

Unknown (Light_E) (Long)
 

Condition combination:

If red ambience light shining on (X) Moveable object has changed (A) compared to the previous room
 

A:

- with Positive formula (more light color in the new room): positive change values (C41 this time must be '>=1'.)

- with Negative formula (less light color in the new room): positive change values (C42 this time must be '<0'.)

- with Null formula (no change): doesn't work!

Type: simple, but you can use either 'equal' or 'smaller' or 'bigger/equal' conditions.
 

Notes:
 

- For example, the red ambience light in Room Editor in Room A is 60 and in Room B is 45. When Lara (if her object ID is X now) steps through the door (portal) between the rooms from Room A into Room B then the field becomes -15, because 45-60= -15.

- The condition won't work if there is no change between two rooms. (i.e. if A is 0.) - So don't use this condition if the red color of the adjacent rooms is the same.

- The 'crossing two doors' problem (see above) also exists now.
 

1.1.24. The name of the field:

Unknown (Light_F) (Long)
 

Condition combination:

If green ambience light shining on (X) Moveable object has changed (A) compared to the previous room
 

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

1.1.25. The name of the field:

Unknown (Light_G) (Long)
 

Condition combination:

If blue ambience light shining on (X) Moveable object has changed (A) compared to the previous room
 

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

1.1.26. The name of the field:

Unknown (Light_H) (Long)
 

Condition combination (1):

If the ambience light shining on (X) Moveable object (A) is/is not a mixture of two adjacent rooms
 

A:

'equal'

0: not mixture, the ambience light is exactly the typed light of the room where the object is

0, with TGROUP_NOT flag in the condition trigger: mixture, the object is close to the portal of the room having different ambience light

Type: simple.
 

Notes:

- See in Chapter 1.1.19. what this condition means.

- The 'crossing two doors' problem (see above) also exists now.

 

Condition combination (2):

If (X) Moveable object (A) has just/has not come through a door

 

A:

'equal'

7: has just come through a door (i.e. portal between rooms)

7, with TGROUP_NOT flag in the condition trigger: has not come through a door

Type: simple.
 

Note:

The 'crossing two doors' problem (see above) also exists now.

 

1.1.27. The name of the field:

Unknown (Pheraps accelleration on falling) (Short)
 

Condition combination:

If (X) Moveable object performs (A) action at AI_FOLLOW
 

A: 'equal' State ID of the object

Type: simple.
 

So this field is useful only with objects using AI_FOLLOW nullmeshes. - Two examples to understand what it is:
 

- When the guide starts his route the he reaches soon a square on which there's an AI_FOLLOW. Now the field value is 42 for a short while. ('For a short while' means the value is 42 then it is 0 again very soon.) When he's got the torch from the wall and steps further to ignite it, then the value is 11 for a short while. Then a flipeffect sends him further. He reaches the next AI_FOLLOW. The value is 41 for a short while. Then (thanks to this AI_FOLLOW having OCB 2 codebit on) he performs his crouching animation, causing the value become 43 for a short while.

42, 11, 41 and 43 are State ID's for the guide's animations: 42 (Animation67 - a short step to arrange him to the AI_FOLLOW), 11 - (Animation30 - to ignite the torch), 41 - (Animation66 - a short step to arrange him to the AI_FOLLOW ), 43 - (Animation69 - the crouching animation).

- When the horseman has finished the patrol (see Chapter 1.1.6. Executable combination (4)) then he starts riding back fast to Lara from the AI_FOLLOW. Now the field value is 17 for a short while.

17 is a State ID for these animations of the horseman: Animation29 (fast riding), Animation30 (starts fast riding).
 

Note:

This condition is not always useful. For example, if the guide ignites the torch, then an 'if the guide's state ID is 11' or 'if the guide's animation is 30' could be an easier condition. - Because it is the guide's one and only chance to ignite the torch.

But it is a good condition for example in the case of Value 17 with the horseman. Because 'if the horseman's animation is 29' means 'if the horseman is riding fast any time'. But 'If (horseman) Moveable object performs (17) action at AI_FOLLOW' means 'the horseman starts riding fast just after finishing the patrol'.
 

1.1.28. The name of the field:

Unknown Countdown (Some counter, not yet discovered) (Short)
 

Condition combination (1):

If the timer of (X) Moveable object has (A) frames before expiring
 

A: positive frames or 0 ('A' must be the positive version of the negative number if the timer is negative!)

Type: sequence.
 

Notes:

- So this condition is a condition for the good old timer we type in the Timer box of Set Trigger Type panel.

- Use F284 to invert the sign in the chosen variable if you typed a negative number in the Timer box. Place that F284 exactly before the condition trigger in the TriggerGroup.

I.e. in this field we won't use Negative/Positive/Null formula, because the values are surely only positive or only negative values!

- The field takes the value from the trigger even if the timer won't start. (For example, the timer will start a flame for 10 seconds=300 frames. If Lara steps on the trigger, then the field value jumps from 0 to 300. Even if the timer won't start - because Lara is still standing on the trigger.) - So you shouldn't use the timer maximum value in this condition.

- An executable combination for this field could be useful. But unnecessary. I mean just use another timed trigger to overwrite the original trigger timer value.
 

Condition combination (2):

If the activity status of timer of (X) Moveable object 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. F284 to invert the sign in the chosen variable - but you need it only if you typed a negative number in the Timer box!

Trigger4. A C40/43 trigger to study the chosen variable value.

Trigger5. A C43 trigger to study U. - Use it only if you want to separate the meanings of A>=1. (See below.)

 

A:

'equal' 0:

- the trigger of the positive timer has never been activated before or

- the negative timer is not running (because the timer has never been activated before or expired, so not because Lara is standing on the trigger)

'smaller' 0: the positive timer is not running (because the timer has expired so not because Lara is standing on the trigger), but has been activated at least once before

'bigger/equal' 1:

- the timed (positive or negative) trigger is activated, but the timer is not running because Lara is still standing on the trigger

- the positive or negative timer of the timed trigger is running

Type: simple.
 

U: the maximum value of the timer in frames (invert the sign here if the timer is negative)

Use TGROUP_NOT flag in Trigger5, if you want only this meaning of A>=1 condition: 'the positive or negative timer of the timed trigger is running', ruling out the 'Lara is standing on the trigger' part.

Or don't use TGROUP_NOT flag in Trigger5, if you want only this meaning of A>=1 condition: 'the timed (positive or negative) trigger is activated, but the timer is not running because Lara is still standing on the trigger', ruling out the 'timer is running' part.
 

Note:

This condition is useful, because the object (triggered by a positive or negative timer) will have 'active' status forever (except: if you antitrigger the object) for C14 trigger always after the timed trigger has been activated for the very first time. (I.e. C14 is not useful for timed objects.)
 

1.1.29. The name of the field:

Visible Mesh Flags (each mesh a different bit) (Long)

 

Condition combination:

If (A) meshes of (X) Moveable object are invisible/shattered

 

A: 'equal' 1 plus B

B:

Each mesh of the object has a codebit in this field. - It is easy to understand:
 

All the meshes are visible or unhurt: 0

Only Mesh0 is invisible or shattered: Bit 0=Value 1

Only Mesh1 is invisible or shattered: Bit 1=Value 2

Only Mesh2 is invisible or shattered: Bit 2=Value 4

Only Mesh3 is invisible or shattered: Bit 3=Value 8

Etc.
 

If more meshes are invisible/shattered at the same time, then their aggregate what matters.

So, for example, if only Mesh2 and Mesh4 are invisible/shattered, then the value is 1+Bit 2+Bit 4= 1+4+16=21.

 

Type: simple.
 

Notes:

- Use F284 to invert the sign in the chosen variable. (Because of technical reasons I don't explain it now.) Place that F284 exactly before the condition trigger in the TriggerGroup.

- See in Chapter 4.1. how you can make a single mesh shatterable.

- Don't mix the two possibilities: i.e. use this condition for invisibility only if all the meshes are and remain unhurt, or use this condition for the shatter function only if all the meshes are and remain visible.

- The mesh keeps the collision after becoming invisible/having shattered.

- Lara needs to aim with the lasersight to shatter now.

- This condition is useful in the shatter case, because we can't use the 'if the Shatter object shatters then that activates a Heavy trigger' method now.

- There is an executable version of this formula to make meshes visible/invisible. But it's unnecessary. Use A50 (invisible) or A51 (visible again) instead.

(A50 has a savegame-stability problem, use NEF_SAVE_MESH_VISIBILITY Script flag to solve that problem.

Unfortunately, NEF_SAVE_MESH_VISIBILITY doesn't work with non-creatures. So now not only activate A50, but trigger it with a GT_ALWAYS or GT_LOADED_SAVEGAME GlobalTrigger. Disable the GlobalTrigger only if you don't want to keep that mesh in invisible status any more.)

- We can have a complicated savegame-stability problem in this field if the meshes are shattered. To prevent that, I highly recommend using maximum one shatterable mesh for an object. (It doesn't mean you don't need to prevent the savegame-stability problem for that only one mesh now. Use this method:

GlobalTrigger1.Condition: 'if the given mesh has shattered' (i.e. if B=the given mesh). Executable: enable GlobalTrigger2.

GlobalTrigger2. FGT_DISABLED. Condition: GT_ALWAYS or GT_LOADED_SAVEGAME. Executable: A50 to make the given mesh invisible.)