Audio Track changes when entering Specific 
		Environments
by 
		Titak and Raymond
With the help of conditions (using variables), TriggerGroups and GlobalTriggers it is possible to change the audio when Lara enters another environment. Normally, when for example Lara goes from outside to inside, you can easily trigger a new background audiotrack using the appropriate Sound flipeffecttriggers. But when Lara is going into water for example, you can not set these triggers. In this tutorial I am going to describe how to change the background audio track when going underwater. This tutorial is the result of a cooperation between Raymond and myself. Raymond helped me out with the experiments I started for my own levels, when things turned out to be more complicated than anticipated at first. So, many thanks go to Raymond for making this possible!
Situation 1
		In SITUATION 1 I am 
		assuming that you are only going to use one ambient background track for 
		when Lara is in a dry room.
So there is no change in background audio 
		during the level
Audio Stuff
		
In this 
		tutorial I use 107.wav as default background audio and 102.wav will be 
		the underwater ambience audio track.
In the script you always 
		have the following line:
Level= 
		DATA\mylevel,107
		107 is the default background audio for the level. 
It plays on 
		channel 1.
Since I want this audiotrack to change to another track 
		when going underwater I also want this underwater audio to play on 
		channel 1.
Now, go into the room editor and export the following 
		triggers:
; Exporting: 
		TRIGGER(358:0) for FLIPEFFECT(68)
; <#> : Sound. (CD) Play <&>CD 
		track in (E) way on channel1
; <&> : AUDIO\102
; (E) : Looped 
		playback
; Values to add in script command: $2000, 68, $166
; 
		Exporting: TRIGGER(363:0) for FLIPEFFECT(68)
; <#> : Sound. (CD) Play 
		<&>CD track in (E) way on channel1
; <&> : AUDIO\107
; (E) : 
		Looped playback
; Values to add in script command: $2000, 68, $16B
		
In your script make the following TriggerGroups with the triggers 
		you just exported:
TriggerGroup= 1, 
		$2000, 68, $166 ; play audio 102.wav
TriggerGroup= 2, $2000, 68, $16B 
		; play audio 107.wav
		Environmental Conditions Stuff
		
The game needs to know 
		whether or not Lara is underwater so it will know which background audio 
		track to play.
For this we are going to use the fact that each 
		environment has a certain value in the game.
In this case we are 
		going to copy this value to a numeric variable in the Savegame Memory 
		zone.
We will use this value later on as a condition to tell the 
		engine when the underwater ambient track 102 should play and when track 
		107 should play.
The script for this is:
		TriggerGroup= 3, $2000, 244, $852
; 
		Exporting: TRIGGER(2128:0) for FLIPEFFECT(244)
; <#> : Variables. 
		Memory. Copy to <&>Numeric Variable the (E)Savegame Memory value
; 
		<&> : Local Short Beta1
; (E) : Lara. Environment where lara is. 
		(ground, underwater ecc,) (Short)
; Values to add in script command: 
		$2000, 244, $852
GlobalTrigger= 1, IGNORE, GT_ALWAYS, IGNORE, IGNORE, 
		3, IGNORE
I'm using the 
		GlobalTrigger so I don't have to place a trigger for TG3 in the prj.
		
When checking the value of LocalShortBeta1 ingame with the 
		Diagnostics enabled you will see that this value is 1 when Lara is 
		completely underwater.
This will be used for our condition.
So 
		export the following trigger:
[1]; Exporting: CONDITION(43:60) for 
		PARAMETER(80)
; <#> : Local Short Beta1
; <&> : Variables. The 
		<#>Numeric Variable is = than (E)Value
; (E) : Value= 1
; Values 
		to add in script command: $8000, 82, $12B[/I]
We need to have a 
		condition that this variable has value 1 AND we need a condition that 
		this variable does not have value 1
So make the following 
		TriggerGroups with the exported values:
		TriggerGroup= 4, $8000, 82, $12B ; condition 
		that Local Short Beta1 has value 1
TriggerGroup= 5, $8000 + 
		TGROUP_NOT, 82, $12B ; condition that Local Short Beta1 does NOT have 
		value 1
		Putting it All Together
		
Now for the final 
		touches: the GlobalTriggers which are needed to make it all work! We 
		have already established that audio track 102 has to play when Lara is 
		underwater. Underwater is when Local Short Beta1 has value 1.
So we 
		need to put TG4 and TG1 in one GlobalTrigger:
		TriggerGroup= 4, $8000, 82, $12B ; condition 
		that Local Short Beta1 has value 1
TriggerGroup= 1, $2000, 68, $166 ; 
		play audio 102.wav
GlobalTrigger= 2, FGT_SINGLE_SHOT_RESUMED, 
		GT_CONDITION_GROUP, IGNORE, 4, 1, -1
		
And audiotrack 107 has to play when Lara is on dry land, which means 
		that Local Short Beta1 does NOT have value 1.
So we need to put TG5 
		and TG2 into a second GlobalTrigger:
		TriggerGroup= 5, $8000 + TGROUP_NOT, 82, $12B ; condition that Local 
		Short Beta1 does NOT have value 1
TriggerGroup= 2, $2000, 68, $16B ; 
		play audio 107.wav
GlobalTrigger= 3, FGT_SINGLE_SHOT_RESUMED, 
		GT_CONDITION_GROUP, IGNORE, 5, 2, -1
So the total script looks like this:
TriggerGroup= 3, $2000, 244, $852 ; Copy the SaveGame Memory value for "Environment where lara is" to Local Short Beta1 GlobalTrigger= 1, IGNORE, GT_ALWAYS, IGNORE, IGNORE, 3, IGNORE TriggerGroup= 4, $8000, 82, $12B ; condition that Local Short Beta1 has value 1 TriggerGroup= 1, $2000, 68, $166 ; play audio 102.wav GlobalTrigger= 2, FGT_SINGLE_SHOT_RESUMED, GT_CONDITION_GROUP, IGNORE, 4, 1, -1 TriggerGroup= 5, $8000 + TGROUP_NOT, 82, $12B ; condition that Local Short Beta1 does NOT have value 1 TriggerGroup= 2, $2000, 68, $16B ; play audio 107.wav GlobalTrigger= 3, FGT_SINGLE_SHOT_RESUMED, GT_CONDITION_GROUP, IGNORE, 5, 2, -1
Situation 2
		For SITUATION 2 I am going to explain which 
		extra steps need to be taken when you change the background audio st 
		some point in the level.
Like for example when Lara goes from inside, 
		dry cave-like ambience, to outside, rain ambience.
		Audio Stuff
		
102.wav - underwater 
		ambience
107.wav - default background audio
106.wav - another 
		background track which should be triggered when Lara goes outside.
		
; Exporting: TRIGGER(358:0) for 
		FLIPEFFECT(68)
; <#> : Sound. (CD) Play <&>CD track in (E) way on 
		channel1
; <&> : AUDIO\102
; (E) : Looped playback
; Values to 
		add in script command: $2000, 68, $166
; Exporting: 
		TRIGGER(363:0) for FLIPEFFECT(68)
; <#> : Sound. (CD) Play <&>CD 
		track in (E) way on channel1
; <&> : AUDIO\107
; (E) : Looped 
		playback
; Values to add in script command: $2000, 68, $16B
; 
		Exporting: TRIGGER(363:0) for FLIPEFFECT(68)
; <#> : Sound. (CD) Play 
		<&>CD track in (E) way on channel1
; <&> : AUDIO\106
; (E) : 
		Looped playback
; Values to add in script command: $2000, 68, $16A
		
Extra Variables Stuff
		
For the game 
		to know which of the background tracks whould be played when Lara is NOT 
		underwater we need some additional variables stuff which also needs to 
		be used as an extra condition.
So, instead of triggering the audio we 
		are going to set a bit in a variable.
In this case I chose Local Byte 
		Delta4 to avoid a conflict with the Local Short Beta1 which we also need 
		again.
Export the following triggers and make two TriggerGroups with 
		them:
; Exporting: TRIGGER(331:0) for 
		FLIPEFFECT(234)
; <#> : Variables. Numeric. Set in <&>Variable the 
		(E)bit
; <&> : Local Byte Delta4
; (E) : Bit 1 ($00000002 ; 2)
		; Values to add in script command: $2000, 234, $14B
TriggerGroup= 6, 
		$2000, 234, $14B
; Exporting: TRIGGER(331:0) for FLIPEFFECT(235)
		; <#> : Variables. Numeric. Clear in <&>Variable the (E)bit
; <&> : 
		Local Byte Delta4
; (E) : Bit 1 ($00000002 ; 2)
; Values to add in 
		script command: $2000, 235, $14B
TriggerGroup= 7, $2000, 235, $14B
		
Also export the following condition triggers:
		; Exporting: CONDITION(44:60) for PARAMETER(68)
		; <#> : Local Byte Delta4
; <&> : Variables. The <#>Numeric Variable 
		has the (E)Bit set
; (E) : Bit 1 ($00000002 ; 2)
; Values to add 
		in script command: $8000, 75, $12C
; Exporting: CONDITION(45:60) 
		for PARAMETER(75)
; <#> : Local Byte Delta4
; <&> : Variables. The 
		<#>Numeric Variable has the (E)Bit clear
; (E) : Bit 1 ($00000002 ; 
		2)
; Values to add in script command: $8000, 75, $12D
		
Place flipeffect triggers for these TG's on the tiles where you 
		would normally place the Sound flipeffect triggers for audio 107 and 
		106.
So now you place flipeffecttriggers for TG6 where you want to 
		activate audio 107 and you place flipeffecttriggers for TG7 where you 
		want to activate audio 106.
If the level starts with the default 
		audio 107 (from the script) you don't have to place a trigger for TG7 
		under LARA because the bit is cleared by default at the start fo the 
		level.
Putting it All Together
		
The first 
		part of the script is the same as in SITUATION 1:
		TriggerGroup= 3, $2000, 244, $852 ; Copy the 
		SaveGame Memory value for "Environment where lara is" to Local Short 
		Beta1
GlobalTrigger= 1, IGNORE, GT_ALWAYS, IGNORE, IGNORE, 3, IGNORE
		
TriggerGroup= 4, $8000, 82, $12B ; condition that Local Short Beta1 
		has value 1
TriggerGroup= 1, $2000, 68, $166 ; play audio 102.wav
		GlobalTrigger= 2, FGT_SINGLE_SHOT_RESUMED, GT_CONDITION_GROUP, IGNORE, 
		4, 1, -1
Instead of just 1 more 
		GlobalTrigger, like in SITUATION 1, we now need two extra 
		GlobalTriggers.
The extra conditions we exported before are now added 
		to the condition TG we also used in SITUATION 1:
		TriggerGroup= 5, $8000 + TGROUP_NOT, 82, $12B, 
		$8000, 75, $12D ; Local Short Beta1 is NOT 1, Local Byte Delta4 has bit 
		1 cleared
TriggerGroup= 2, $2000, 68, $16B ; play audio 107.wav
		GlobalTrigger= 3, FGT_SINGLE_SHOT_RESUMED, GT_CONDITION_GROUP, IGNORE, 
		5, 2, -1
TriggerGroup= 8, $8000 + TGROUP_NOT, 82, $12B, $8000, 
		75, $12C ; Local Short Beta1 is NOT 1, Local Byte Delta4 has bit 1 set
		TriggerGroup= 9, $2000, 68, $16A ; play audio 106.wav
GlobalTrigger= 
		4, FGT_SINGLE_SHOT_RESUMED, GT_CONDITION_GROUP, IGNORE, 8, 9, -1
		
So the total script looks like this:
; ---- place triggers for TG6 and TG7 in your prj TriggerGroup= 6, $2000, 234, $14B TriggerGroup= 7, $2000, 235, $14B TriggerGroup= 3, $2000, 244, $852 ; Copy the SaveGame Memory value for "Environment where lara is" to Local Short Beta1 GlobalTrigger= 1, IGNORE, GT_ALWAYS, IGNORE, IGNORE, 3, IGNORE TriggerGroup= 4, $8000, 82, $12B ; condition that Local Short Beta1 has value 1 TriggerGroup= 1, $2000, 68, $166 ; play audio 102.wav GlobalTrigger= 2, FGT_SINGLE_SHOT_RESUMED, GT_CONDITION_GROUP, IGNORE, 4, 1, -1 TriggerGroup= 5, $8000 + TGROUP_NOT, 82, $12B, $8000, 75, $12D ; Local Short Beta1 is NOT 1, Local Byte Delta4 has bit 1 cleared TriggerGroup= 2, $2000, 68, $16B ; play audio 107.wav GlobalTrigger= 3, FGT_SINGLE_SHOT_RESUMED, GT_CONDITION_GROUP, IGNORE, 5, 2, -1 TriggerGroup= 8, $8000 + TGROUP_NOT, 82, $12B, $8000, 75, $12C ; Local Short Beta1 is NOT 1, Local Byte Delta4 has bit 1 set TriggerGroup= 9, $2000, 68, $16A ; play audio 106.wav GlobalTrigger= 4, FGT_SINGLE_SHOT_RESUMED, GT_CONDITION_GROUP, IGNORE, 8, 9, -1