The Torch
by 
		AkyV
		Part1 - 
		The Basics
1.1. WHAT IS NEEDED
		
If you want to use Lara's torch in your level, then you need these 
		things in your WAD - you can find them all for example in the WAD of an 
		original TRLE project, coastal.wad:
a, The torch item 
		(BURNING_TORCH_ITEM). Place it so Lara can pick it up. In this case it 
		won't get into inventory: Lara will hold it in the left hand and you can 
		get rid of it if Lara throws it (by key 'drawing a weapon', i.e. SPACE) 
		or drops it (by drawing a weapon with shortcut keys 1, 2 etc. or 
		choosing a weapon from inventory).
b, The TORCH_ANIM object: it 
		contains Lara's 'left hand with the torch' mesh and some animations to 
		use the torch.
c, The animations 427, 428, 429, 430 and 431 of 
		LARA object to use the torch for ignition.
Note:
		You don't want Lara to pick up the torch with SARCOPHAGUS method. (See 
		for example original TRLE project cleopal.prj Room97 to get what this 
		method means.)
1.2. IGNITING THE TORCH
If 
		Lara has the torch in her hand then she can ignite it if she stands 
		close to a triggered flame (an object FLAME_EMITTER or a 
		FLAME_EMITTER2), and holds the torch to that, using key Action (CTRL).
		For the successful igniting operation the flame object isn't allowed to 
		be:
a, lower than Lara's soles
b, higher than 1 square (4 
		clicks) from Lara's soles (with FLAME_EMITTER)
c, higher than 3,5 
		clicks from Lara's soles (with FLAME_EMITTER2)*
*: 1 click on 
		Floor+/-, Ceiling+/- buttons with the left mouse button (or hitting key 
		Q, A, W, S once) moves the marked effect bulb, light bulb or object with 
		0,5 click unit. (Doing the same thing with the right button moves them 
		with 4 click units.)
		
		
		Notes:
1. It should also work with 
		the non-default flames of these objects:
a, FLAME_EMITTER with 
		negative OCB window value (blown flame, igniting the torch at the source 
		of the flame)
b, FLAME_EMITTER2 with OCB window value 1 or 3 (small 
		or very small flame)
c, FLAME_EMITTER2 with OCB window value 2 
		('traveling' flame)
d, FLAME_EMITTER2 with OCB window value 123 
		(flame on the middle of the square - because the default flame of 
		FLAME_EMITTER2 won't be on the middle of the square where the flame 
		object is - as opposed to FLAME_EMITTER - but it will be at the side of 
		the square where the bottom of this 'red pyramid' object - we call the 
		objects like this 'nullmesh' - is.)
But it won't work for other 
		flames (for example, FLAME_EMITTER3).
2. The statuses of these 
		flames (as for Lara):
torch: harmless
FLAME_EMITTER: harmful
		FLAME_EMITTER2: harmless
1.3. THE BASIC USING OF THE 
		IGNITED TORCH
You can use the ignited torch mostly for 
		these purposes:
a, Lighting with it in the darkness.
Just 
		think about this situation: Lara doesn't have any flares so she has to 
		find and ignite the torch to see in a pitch dark room.
(Okay, she can 
		also light a bit with the gunflash but what if she doesn't have any 
		weapons? - See 'Lara (Weapons)' FLIPEFFECT triggers.
And, okay, she 
		can also light with binoculars, but we can take that from her as well. - 
		See Equipment script command or 'Inventory Item' FLIPEFFECT triggers.)
		
b, Igniting flames with it.
In these cases the rules are (mostly) 
		the same just as at igniting the torch: if Lara has the flaming torch in 
		her hand and she stands to a non-triggered flame (an object 
		FLAME_EMITTER or a FLAME_EMITTER2), then she will ignite the flame 
		object with the torch, if she holds the torch to the flame object, using 
		key Action (CTRL). These flame objects must be within 0-4 (0-3,5) clicks 
		vertical distance, but it doesn't matter if they don't have the default 
		OCB window values.
But you have to do one more thing to make this 
		setup work: place one HEAVY trigger on the square of each of these flame 
		objects. The subject of a HEAVY is the flame object on that square.
		
The non-flaming flame objects are invisible, of course. So, if you 
		want to know whereto Lara holds the flaming torch to ignite this flame 
		object then you have to mark the place of this object somehow. - For 
		example, placing the object to an oil lamp:
		
		c, The ropes in FIREROPE object slot are flammable. 
		If Lara stands to a rope like this with the flaming torch, then the rope 
		will be ignited. (You don't have to use CTRL to ignite. But the torch 
		must touch the rope over the square of the rope so if you don't reach 
		the rope with the torch then jump to it.)
See this example in 
		'Coastal Ruins' level (original TRLE project coastal.prj Room108 and the 
		adjacent rooms):
		
		d, You can use the torch for the
		burning floor.
e, You can use the torch 
		for the element puzzle.
1.4. 
		THE TORCH AND THE WATER
a, Lara will never be able to 
		pick up the torch in deep water. (But she will if she's standing in 
		water.)
b, Lara will let the torch go automatically if she falls 
		/ dives into deep water. (But she won't if she's standing in water or 
		floating on the surface of water.)
c, If it's not in Lara's hand 
		then the torch will be put out automatically under the surface of water.
		
Note:
These rules don't work about quicksand. In 
		quicksand rooms the torch will work as on land.
1.5. 
		TAKING THE TORCH IN LARA'S HAND INTO THE NEXT LEVEL
Lara 
		can hold the flaming/non-flaming torch when jumping level. In this case 
		she shows up in the new level with the torch in the hand.
If it's 
		problematic then place another torch item anywhere in this new level.
		(If it's still problematic then I think it must be a WAD problem in the 
		new level.)
1.6. ADDITIONAL FEATURES
		
1.6.1. Putting the torch into/taking it from Lara's hand
		
You can also give the torch into Lara's hand or remove it from the 
		hand if you use this FLIPEFFECT trigger:
Lara. (Mesh) Torch. 
		<&>Give/Remove Torch to/from hand of Lara
But don't forget about 
		these things when giving the torch with that trigger:
a, The 
		torch won't be flaming just when Lara gets it if
- she hasn't got 
		the torch in her hand before in this level,
- the last torch in her 
		hand wasn't flaming in this level.
b, The torch will be flaming 
		just when Lara gets it if the last torch in her hand was flaming in this 
		level.
c, Don't give the torch to Lara's hand if she just has 
		something (pistols etc.) in it. (In some cases you may try it. For 
		example if she's driving motorbike. But even if it's successful then it 
		can't be ignited or flaming in that position.)
1.6.2. 
		Throwing the torch away
Activating this FLIPEFFECT 
		trigger, Lara will holster the weapons in the hands or throw the 
		flare/torch in the hand:
Lara. (Weapons) Remove weapons or flare 
		from lara's hands
Note:
After a throwing like 
		this Lara's next weapon-drawing must be with shortcut keys or from 
		inventory.
1.6.3. The flame on the torch
		You can also ignite/put out the torch (if it's just in Lara's hand) if 
		you use this FLIPEFFECT trigger:
Lara. (Mesh) Torch. 
		<&>Light/Put-Out the Torch in the hands of Lara
		Part2 - Advanced Settings
		2.1. USING CONDITIONS FOR THE TORCH
		
You can use the torch for some more purposes if you use conditions 
		for the torch.
2.1.1. Conditions customized for the torch
		
Use these constants in script:
HOLD_ANY_TORCH: it means the 
		condition is true if Lara just has the flaming/non-flaming torch in the 
		hand
HOLD_FIRED_TORCH: it means the condition is true if Lara just 
		has the flaming torch in the hand
HOLD_OUT_TORCH: it means the 
		condition is true if Lara just has the non-flaming torch in the hand
		
You can use the constants in GlobalTrigger or MultEnvCondition 
		script commands as conditions.
Let's see two examples:
		GlobalTrigger= 1, IGNORE, GT_LARA_HOLDS_ITEM, HOLD_FIRED_TORCH, IGNORE, 
		1, 2
This GlobalTrigger says if Lara has the flaming torch in her 
		hand then TriggerGroup#1 will happen or else (i.e. if she has a 
		non-flaming torch or other things in the hand or if her hands are empty) 
		TriggerGroup#2 will happen.
MultEnvCondition= 1, 
		ENV_HOLD_EXTRA_ITEM_IN_HANDS, IGNORE, HOLD_OUT_TORCH
This 
		MultEnvCondition defines a condition that is true if Lara has the 
		non-flaming torch in her hand.
You can use this MultEnvCondition:
		
a, in a CONDITION trigger: 'Multiple condition of 
		<#>MultEnvCondition script command in (E)way'.
b, in an Animation 
		script command - for example:
Animation= 500, 30, IGNORE, 
		FAN_KEYS_AS_SCANCODE, ENV_MULT_CONDITION, 1, IGNORE, -103
So you 
		can start Lara's Animation500 with key A (the 30 means this key - see 
		Keyboard Scancodes list in NG_Center\Reference) if Lara's standing (i.e. 
		if she has Animation103) and has a non-flaming torch in the hand. 
		(Thanks to FAN_KEYS_AS_SCANCODE constant you can use non-TR4 keys to 
		start an animation.)
Notes:
1. 'Lara. (Holds) 
		Lara is holding/driving the <#>item' CONDITION trigger also has those 
		any/fired/out torch conditions.
2. It could also be useful to 
		adjust this general CONDITION trigger for the torch:
'Lara. 
		(Animation) Lara is performing <#>animation': the condition is true if 
		Lara's just performing an animation (marked in window #) of using the 
		torch.
2.1.2. Conditions of the variables used for the 
		torch
For example you want to simulate this thing: 'Lara 
		throws/drops the flaming torch and the current of air - caused by this 
		flying torch - will blow the flame out'. - In this case write this in 
		the Script:
GlobalTrigger= 2, IGNORE, GT_CONDITION_GROUP, IGNORE, 
		3, 4, IGNORE
TriggerGroup= 3, $2000, 244, $1450, $8000, 80, $12B, 
		$8000+TGROUP_OR, 80, $22B
TriggerGroup= 4, $2000, 199, $0
This 
		GlobalTrigger says if the condition in TriggerGroup#3 is true then 
		TriggerGroup#4 will happen.
; Exporting: 
		TRIGGER(5200:0) for FLIPEFFECT(244)
; <#> : Variables. Memory. Copy 
		to <&>Numeric Variable the (E)Savegame Memory value
; <&> : Local 
		Short Alfa1
; (E) : Lara. Test. Throw out item from the Hands (1 = 
		lara is throwing out item) (Short)
; Values to add in script command: 
		$2000, 244, $1450
This trigger gives data for the condition 
		in TriggerGroup#3, i.e. puts the actual value of window E into Local 
		Short Alfa1 variable.
The window E is a field of Savegame Memory 
		Zone: 'Lara. Test. Throw out item from the Hands (1 = lara is throwing 
		out item) (Short)'. (See more about it in the tutorial in Variables demo 
		project.)
This field is about the actual status of the torch, 
		presenting that with these values:
0: Lara picks up/holds the 
		torch / torch is (in NGLE position/thrown/dropped) on the floor
1: 
		Lara throws the torch by hitting SPACE
2: Lara drops the torch by 
		drawing a weapon (with shortcut keys or in inventory)
3: Lara ignites 
		the torch with the flame / the flame with the torch
		; Exporting: CONDITION(43:60) for PARAMETER(80)
		; <#> : Local Short Alfa1
; <&> : Variables. The <#>Numeric Variable 
		is = than (E)Value
; (E) : Value= 1
; Values to add in script 
		command: $8000, 80, $12B
; Exporting: CONDITION(43:58) for 
		PARAMETER(80)
; <#> : Local Short Alfa1
; <&> : Variables. The 
		<#>Numeric Variable is = than (E)Value
; (E) : Value= 2
; Values 
		to add in script command: $8000, 80, $22B
The two triggers 
		above examine the value of 'Lara. Test. Throw out item from the Hands (1 
		= lara is throwing out item) (Short)' in Local Short Alfa1 variable. If 
		it's 1 (because Lara's just throwing the torch) or 2 (because Lara's 
		just dropping the torch) then the condition in TriggerGroup#3 is true. 
		(Thanks to TGROUP_OR constant we can adjust 'OR connection' between 
		$8000, 80, $12B and $8000, 80, $22B.)
; 
		Exporting: TRIGGER(0:0) for FLIPEFFECT(199)
; <#> : Lara. (Mesh) 
		Torch. <&>Light/Put-Out the Torch in the hands of Lara
; <&> : Put 
		out the Torch
; (E) :
; Values to add in script command: $2000, 
		199, $0
So if Lara's just throwing / dropping the torch then 
		this trigger puts out the flame on the torch.
Notes:
		
1. Just think about this situation: Lara picks the torch up at the 
		starting point of the level, and she also ignites it there at a flame. 
		Then she carries the torch to the end of the level where she ignites a 
		flame with the torch before finishing the level.
But, what if there's 
		no other flame placed and ignited in the level and Lara throws/drops the 
		torch in the middle of the level? If you used that 'flame-blowing' 
		condition, then Lara picks the torch up again, goes back to the starting 
		point, journeying half the level, and ignites that there again. - But 
		it's a bad level editing, of course.
To prevent this problem disable 
		the Globaltrigger for some points of the level (with 'GlobalTriggers. 
		<&>Enable/Disable the (E)GlobalTrigger' FLIPEFFECT trigger), so the 
		torch won't be put out at those points if Lara throws/drops it. (Saying, 
		for example, the 'blowing feature' won't work there, because the 
		'blowing feature' will work only in outside areas where 'the wind helps 
		to blow'.)
2. Maybe sometimes you can see flashing some kind of 
		flame in the very foreground of the screen. One of reasons of this is 
		the flaming torch thrown/dropped down - so, in a technical meaning (i.e. 
		to disable this unwanted effect), it's a useful thing to put out the 
		torch.
2.1.3. Mixed conditions
You can 
		mix the customized and variable type conditions of the torch. - See this 
		example:
GlobalTrigger= 3, IGNORE, GT_LARA_HOLDS_ITEM, 
		HOLD_OUT_TORCH, 5, 6, IGNORE
TriggerGroup= 5, $2000, 244, $1450, 
		$8000, 80, $32B
; Exporting: 
		CONDITION(43:56) for PARAMETER(80)
; <#> : Local Short Alfa1
; <&> 
		: Variables. The <#>Numeric Variable is = than (E)Value
; (E) : 
		Value= 3
; Values to add in script command: $8000, 80, $32B
		
The value 3 means 'Lara ignites the torch with the flame / the flame 
		with the torch' (see above). But we also use a HOLD_OUT_TORCH condition 
		this time, so TriggerGroup#6 will happen only if Lara's just igniting 
		the (non-flaming) torch with a flame and won't if Lara's just igniting a 
		flame with the (flaming) torch.
2.2. 'FREE HAND' FEATURE 
		WITH THE TORCH
Lara can't do some animations if she has 
		the torch in the hand: crouching, catching a ledge etc.
We can do 
		some trick to solve that problem - i.e., for example, we can make Lara 
		catch the ledges with the torch in the hand -, but it may have some risk 
		(i.e. it may mess up some of the adjacent animations), so be careful:
		
That's what I'm talking about:
Some of Lara animations must have 
		an AnimCommand so-called 'Command3'. If it's not there then maybe Lara 
		refuses to grab the subject of the animation: for example, she refuses 
		to grab a switch in an animation of using a switch. Because without 
		Command3 the game always senses Lara's hands are not free, thinking they 
		are engaged by something - a weapon, for example. - Lucky us, the 
		command won't work if there's really something in Lara's hands. (Because 
		of State-ID of the animation?)
But, if we use that AnimCommand at an 
		animation without that problem then Lara will overwrite the disallowance 
		for the really engaged hands in that animation. It means, for example, 
		she will be able to grab a ledge with a weapon in the hand.
But 
		Command3 (an original TR4 feature) won't work if we want that trick for 
		the torch.
No matter, we can solve it, exporting this FLIPEFFECT as 
		an AnimCommand: 'AnimCommand. Set temporary Free Hands until is 
		performing <&>Animation'. It can do all the things that Command3 can do, 
		moreover, it works for the torch. (The value of window & is the 
		animation where we want to use that AnimCommand. Add the command to any 
		frame of the animation.)
Notes:
1. Just after 
		that tricky animation you can find Lara with a lowered left hand. The 
		torch in the lowered hand is useless, moreover, for example, you can 
		draw weapon now and it means the torch will disappear in Lara's hand.
		You can solve the problem if you use 'Lara. (Mesh) Torch. <&>Give/Remove 
		Torch to/from hand of Lara' trigger (see above) just after that tricky 
		animation to raise Lara's hand again (i.e. to give her the torch back).
		
2. If the torch was flaming just before that animation then that 
		FLIPEFFECT (or any other one) won't help, the flame will be put out when 
		Lara starts the animation.
3. Other methods to adjust 'free 
		hands' for the torch (and other things in Lara's hand):
a, 
		ENV_FREE_HANDS constant for MultEnvCondition or Animation script 
		commands, as a condition.
b, FAN_SET_FREE_HANDS_TEMP constant for 
		Animation script command, as an order.
This tutorial was made using TRNG 1.2.2.6