Index: AE/packages/VanillaBSL/IGMD/Airport/airport1_level_logic.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/Airport/airport1_level_logic.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/Airport/airport1_level_logic.bsl	(revision 313)
@@ -0,0 +1,662 @@
+### AIRPORT 1 LEVEL LOGIC ###
+
+### START, SAVE & OBJECTIVES ###
+
+func void func_start(string ai_name)
+{
+	dprint start_active
+
+	trigvolume_enable hidden1 1
+	trigvolume_enable hidden1 1
+
+	if (save_point eq 0)
+		{
+		my_save_point=0;
+		particle auto1 start
+		particle auto1fire start
+		particle auto1spark start
+		particle door1spark start
+		particle tctf1 start
+		}
+
+	if (save_point eq 1)
+		{
+		my_save_point=1;
+		env_show 10 1
+		env_show 11 1
+		env_show 12 1
+		dprint restore1_active
+		particle auto1 start
+		particle auto1fire start
+		particle auto1spark start
+		particle door1spark start
+		particle tctf1 start
+		sound_music_start mus_asian 0.5
+		music_script_start();
+		ai2_spawn IntroStriker01
+		ai2_spawn IntroStriker02
+		restore_game
+		sleep 30
+		set_target_1
+		set_objective_1
+		}
+
+	if (save_point eq 2)
+		{
+		my_save_point=2;
+		dprint restore_2
+		particle fx3 do start
+		particle exhaust create
+		Tarmac1
+		trigvolume_enable tarmac 0
+		trigvolume_enable trigger_volume_03 0
+		trigvolume_enable bomberboom 0
+		trigvolume_enable madbomberbait 0
+		door_lock 3
+		obj_kill 991 992
+		restore_game
+		sleep 30
+		set_target_3
+		set_objective_2
+		}	
+	
+	if (save_point eq 3)
+		{
+		my_save_point=3;	
+		dprint restore3_active
+		door_lock 3
+		door_unlock 6
+		particle lock1_locklight01 do stop
+		particle lock2_locklight01 do start
+		console_deactivate 5
+		particle door7_locklight01 do start
+		particle door2_locklight01 do start
+		console_deactivate 6
+		trigvolume_enable trigger_volume_02 0
+		trigvolume_enable trigger_volume_03 0
+		trigvolume_enable trigger_volume_04 0
+		trigvolume_enable trigger_volume_08 0
+		trigvolume_enable trigger_volume_10 0
+		trigvolume_enable trigger_volume_11 0
+		trigvolume_enable save_game 0
+		trigvolume_enable secondcoming 0
+		TerminalTwo1
+		particle auto1 stop
+		particle auto1fire stop
+		particle auto1spark stop
+		particle door1spark stop
+		particle tctf1 stop
+		ai2_spawn TerminalTwo_Striker_1
+		ai2_spawn TerminalTwo_Striker_2
+		particle fx4 do start	
+		particle fx5 do start
+		particle fx6 do start
+		particle fx1 do stop
+		particle fx2 do stop
+		particle fx3 do stop
+		music_script_start();
+		restore_game
+		sleep 30
+		set_objective_3
+		set_target_5
+		}
+}
+
+func void you_lose(string ai_name)
+{
+	all_music_counters
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+
+func void you_win(int char_index)
+{
+	all_music_counters
+	win
+}
+
+func void save_point_1(string player_name)
+{
+	dprint save_point_1_active
+	save_game 1 autosave
+}
+
+func void save_point_2(string player_name)
+{
+	dprint save_point_2_active
+	save_game 2 autosave
+}
+
+func void save_point_3(string player_name)
+{
+	dprint save_point_3_active
+	save_game 3 autosave
+	ai2_spawn TerminalTwo_Striker_1
+	ai2_spawn TerminalTwo_Striker_2
+	particle fx5 do start
+	particle fx6 do start
+	particle fx3 do stop
+	door_unlock 6
+	particle door7_locklight01 do start 
+	particle lock2_locklight01 do start 
+	particle door2_locklight01 do start
+}
+
+
+func void set_objective_1(string chr_index)
+{
+	dprint objective_1
+	objective_set(1)
+	sound_dialog_play c00_01_22shinatama
+}
+func void set_objective_2(string chr_index)
+{
+	dprint objective_2
+	objective_set(2)
+	sound_dialog_play c00_01_19shinatama
+}
+
+func void set_objective_3(string chr_index)
+{
+	dprint objective_3
+	objective_set(3)
+	console_deactivate 2
+	sound_dialog_play c00_01_18shinatama
+}
+
+func void set_objective_4(string chr_index)
+{
+	dprint objective_4
+	objective_set(4)
+	sound_dialog_play c00_01_20shinatama
+}
+
+func void set_target_1(string chr_index)
+{
+	dprint set_target1
+	target_set(1095, 30.0)
+	sound_dialog_play c00_01_28shinatama
+}
+
+func void set_target_2(string chr_index)
+{
+	dprint set_target2
+	target_set(1132, 30.0)
+	sound_dialog_play c00_01_27shinatama
+}
+
+func void set_target_3(string chr_index)
+{
+	dprint set_target3
+	target_set(1109, 30.0)
+	sound_dialog_play c00_01_26shinatama
+}
+
+func void set_target_4(string chr_index)
+{
+	dprint set_target4
+	target_set(1112, 30.0)
+	sound_dialog_play c00_01_25shinatama
+}
+
+func void set_target_5(string chr_index)
+{
+	dprint set_target5
+	target_set(1115, 30.0)
+	sound_dialog_play c00_01_24shinatama
+}
+
+func void set_target_6(string chr_index)
+{
+	dprint set_target6
+	target_set(1139, 30.0)
+	sound_dialog_play c00_01_28shinatama
+}
+
+func void set_target_blank(string chr_index)
+{
+	dprint set_targetblank
+	target_set(0, 0.0)
+}
+
+### MUSIC ###
+
+var int music_counter;
+
+func void music_force_stop(void)
+{
+	sleep 4500
+	if (0 ne music_counter) 
+		{
+		dprint music_force_stop
+		music_counter = 0
+		all_music_counters
+		}
+}
+
+func void music_script_start(void)
+{
+	music_counter = 2
+}
+
+func void striker_lullaby_1(string ai_name)
+{
+	dprint striker_lullaby1
+	music_counter = music_counter - 1
+	if (music_counter eq 0)
+		{
+		all_music_counters();
+		sleep f120
+		}
+}
+
+func void striker_lullaby_2(string ai_name)
+{
+	dprint striker_lullaby2
+	music_counter = music_counter - 1
+	if (music_counter eq 0)
+		{
+		all_music_counters();
+		sleep f120
+		}
+}
+
+func void all_music_counters(void)
+{
+	dprint STOP_THE_MUSIC
+	sound_music_stop mus_fitec_hd
+	sound_music_stop mus_fitec
+	sound_music_stop mus_fiteb
+	sound_music_stop mus_asian
+	sound_music_stop atm_gr06
+}
+
+### TEXT CONSOLES ###
+
+func void level_4a(void)
+{
+	dprint set_text_4a
+	text_console level_4a
+	console_reset 7
+}
+
+func void level_4b(void)
+{
+	dprint set_text_4b
+	text_console level_4b
+	console_reset 7
+}
+
+func void level_4c(void)
+{
+	dprint set_text_4c
+	text_console level_4c
+	console_reset 8
+}
+
+### GAMEPLAY PROGRESSION ###
+
+func void FixDoors(string char_index)
+{
+	dprint Fix_Doors
+	particle door2_locklight01 do stop
+	door_lock 10
+}
+
+func void hidden_civilian1(string ai_name)
+{
+	dprint hidden_civilian
+	ai2_spawn hidden_civ_1
+}
+
+func void panic1a(string char_index)
+{
+	dprint panic_1a
+
+	ai2_spawn civ_victim_6
+	playback civ_victim_6 civ_victim6_flee interp 30
+	ai2_spawn civ_victim_4
+	playback civ_victim_4 civ_victim4_flee interp 30
+	sleep 30
+	ai2_spawn Intro_Striker_4
+	playback Intro_Striker_4 striker4_advance interp 30
+	ai2_spawn Intro_Comguy_1
+}
+
+func void panic1b(string char_index)
+{
+	dprint panic_1b
+	ai2_passive Intro_Striker_4 1
+	ai2_spawn civ_victim_2
+	ai2_spawn civ_victim_3
+	playback civ_victim_3 civ_victim3_flee interp 30
+	sleep 120
+	ai2_spawn Intro_Striker_3
+	ai2_attack Intro_Striker_3 civ_victim_2
+	ai2_spawn Friend_Thug_1
+	ai2_spawn Neutral_Thug_1
+	ai2_spawn Neutral_Thug_3
+	particle fx1 do start
+	particle fx2 do start
+	chr_delete civ_victim_4
+	chr_delete civ_victim_6
+}
+
+func void hide_1(string char_index)
+{
+	dprint hide1
+	ai2_spawn civ_victim_5
+	playback_block civ_victim_5 civ_victim5_flee interp 30
+	ai2_dopath civ_victim_5 civ_victim_5
+}
+
+func void horror_1(string char_index)
+{
+	dprint horror1
+	ai2_passive Intro_Striker_4 0
+	ai2_spawn civ_victim_10
+	ai2_spawn civ_victim_11
+	ai2_spawn civ_victim_20
+	ai2_spawn civ_victim_21
+	particle fx1 do start
+	particle fx2 do start
+}
+	
+func void ambush_striker_1(string char_index)
+{
+	dprint ambush_1
+	ai2_spawn Terminal_Striker_1
+	ai2_spawn Terminal_Striker_2
+	ai2_spawn mad_bomber_1
+	obj_create 991 992
+}
+
+func void civ_victim_20s_flee(string char_index)
+{
+	dprint civ_victim_20s
+	ai2_dopath civ_victim_20 civ20s_flee1
+	ai2_dopath civ_victim_21 civ20s_flee2
+}
+
+func void LoadingBay1(string char_index)
+{
+	dprint spawn_guards
+	ai2_spawn LoadingBay_Thug_1
+	ai2_spawn LoadingBay_Thug_2
+	ai2_spawn LoadingBay_Striker_2
+	ai2_spawn LoadingBay_Comguy_1
+	particle fx3 do start
+}
+
+func void bomber_boom(string char_index)
+{
+	dprint bomberboom
+	particle bomb1 do explode
+	obj_kill 991 992
+	sleep 300
+	particle bomb1 stop
+}
+	
+func void mad_bomber_bait(string char_index)
+{
+	dprint bomber_bait
+	ai2_dopath mad_bomber_1 bomber_flee 1
+}
+
+func void patrolscript0200(string char_index)
+{
+	dprint bomber1_death
+	chr_delete mad_bomber_1
+}
+
+func void Tarmac1(string char_index)
+{
+	dprint spawn_guards
+	ai2_spawn Tarmac_Striker_1
+	ai2_spawn Tarmac_Striker_2
+	ai2_spawn Tarmac_Striker_3
+	ai2_spawn Tarmac_Striker_4
+	ai2_spawn Tarmac_Friend_1
+	ai2_spawn LoadingBay_Striker_1
+	sound_music_start atm_gr06 0.75
+	particle tarmacfire do start
+	particle exhaust create
+}
+
+func void back9a(string ai_name)
+{
+	dprint hidden_striker1
+	ai2_spawn hidden_striker1
+}
+
+func void back9b(string ai_name)
+{
+	dprint hidden_striker1
+	ai2_spawn hidden_striker2
+}
+
+func void bay1_particles(void)
+{
+	dprint bay1_fires_on
+	particle fx3 do start
+	particle fx4 do stop
+}
+
+func void fire_damage(string ai_name)
+{	
+	dprint fire_hurt_konoko
+	chr_poison (ai_name, 5, 30, 30);
+}
+
+func void bay2_particles(void)
+{
+	dprint bay2_fires_on
+	particle fx3 do stop
+	particle fx4 do start
+}
+
+# COME TO ME
+func void come_to_me(string ai_name)
+{
+	dprint go_to_konoko
+	ai2_dopath Tarmac_Striker_2 come_to_me 1
+	ai2_dopath Tarmac_Striker_3 come_to_me 1
+	ai2_dopath mad_bomber_2 come_to_me 1
+}
+
+# COME TO ME REDUX
+func void second_coming(string ai_name)
+{
+	dprint go_to_konoko_again
+	ai2_dopath Tarmac_Striker_2 come_to_me 1
+	ai2_dopath Tarmac_Striker_3 come_to_me 1
+	ai2_dopath mad_bomber_2 come_to_me 1
+}
+
+# PROGRESS CHECK
+
+var int progress_counter=2;
+
+func void progress_check_1(string ai_name)
+{
+	dprint progress_check1
+	progress_counter = progress_counter - 1
+	if (progress_counter eq 0)
+		{
+		pass_go_collect_whupass();
+		}
+}
+
+func void progress_check_2(string ai_name)
+{
+	dprint progress_check2
+	progress_counter = progress_counter - 1
+	if (progress_counter eq 0)
+		{
+		pass_go_collect_whupass();
+		}
+}
+
+func void progress_check_3(string ai_name)
+{
+	dprint progress_check3
+	progress_counter = progress_counter - 1
+	if (progress_counter eq 0)
+		{
+		pass_go_collect_whupass();
+		}
+}
+
+func void progress_check_4(string ai_name)
+{
+	dprint progress_check4
+	progress_counter = progress_counter - 1
+	if (progress_counter eq 0)
+		{
+		pass_go_collect_whupass();
+		}
+}
+
+func void exhaust_on(string ai_name)
+{
+	dprint start_exhaust
+	particle exhaust create
+}
+
+func void exhaust_off(string ai_name)
+{
+	dprint stop_exhaust
+	particle exhaust kill
+}
+
+func void pass_go_collect_whupass(string ai_name)
+{
+	dprint let_the_whupping_continue
+	trigvolume_enable save_game_2 1
+	trigvolume_enable secondcoming 0
+}
+
+func void patrolscript000(string ai_name)
+{
+	dprint do_my_bidding
+	particle lock2_locklight01 do start
+	door_unlock 6
+}
+	
+func void BayTwo1(string char_index)
+{
+	dprint spawn_guards
+	ai2_spawn BayTwo_Striker_1
+	ai2_spawn hidden_friend2
+	ai2_spawn mad_bomber_2
+	sound_music_stop atm_gr06
+}
+
+func void Repair1(string char_index)
+{
+	dprint spawn_guards
+	ai2_spawn Repair_Striker_1
+	ai2_spawn Repair_Comguy_1
+	ai2_spawn alamo_thug_1	
+}
+
+func void Repair2(string char_index)
+{
+	dprint spawn_guards
+	ai2_spawn Repair_Striker_2
+	ai2_spawn Repair_Comguy_2	
+}
+
+func void console_2_activate(string char_index)
+{
+	dprint console2_activate
+	console_activate 2
+}
+
+func void final_ambush(string char_index)
+{
+	dprint finalambush
+	input 0
+	begin_cutscene
+	sleep 60
+	cm_interpolate ambush1 0
+	sleep 150
+	console_activate 4
+	sleep 150
+	sound_music_start mus_fitec_hd 0.91
+	music_script_start
+	cm_interpolate ambush2 0
+	cm_interpolate_block ambush3 300
+	sleep 350	
+	cm_interpolate ambush4 300	
+	door_unlock 14
+	particle door3_locklight01 do start
+	ai2_spawn finalam_striker_1
+	ai2_spawn finalam_striker_2
+	ai2_setmovementmode finalam_striker_1 walk
+	ai2_setmovementmode finalam_striker_2 walk
+	playback finalam_striker_1 finalam_striker1 interp 30
+	playback finalam_striker_2 finalam_striker2 interp 30
+	sleep 300
+	particle door3_locklight01 do stop
+	sleep 300
+	door_lock 14	
+	ai2_dopath finalam_striker1 finalam_1 1
+	ai2_dopath finalam_striker2 finalam_2 1
+	trigvolume_enable i_uh_heheheh1 1
+	cm_reset
+	end_cutscene
+	input 1
+}
+
+func void i_uh_heheheh(string char_index)
+{
+	dprint iuh_heheheh
+	ai2_dopath finalam_striker_1 strategic_retreat1
+	ai2_dopath finalam_striker_2 strategic_retreat2
+} 
+	
+### DOOR LOCK LIGHTS ###
+
+func void change_terminaldoor_light(void)
+{
+	dprint door1
+	input 0
+	cm_interpolate door1 0
+	sleep 60
+	particle door1_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+}
+
+func void change_door2_light(void)
+{
+	dprint door2
+	input 0 
+	cm_interpolate door2 0
+	sleep 60
+	particle door2_locklight01 do start
+	sleep 150
+	set_objective_3
+	set_target_6
+	cm_reset
+	input 1
+}
+
+func void change_enddoor_light(void)
+{
+	dprint end_door
+	input 0
+	cm_interpolate ambush4 0	
+	sleep 60
+	particle door3_locklight01 do start
+	sleep 150
+	door_unlock 14
+	cm_reset
+	input 1
+}
+
+### Level scripted by Joseph ###
Index: AE/packages/VanillaBSL/IGMD/Airport/airport_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/Airport/airport_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/Airport/airport_cutscene.bsl	(revision 313)
@@ -0,0 +1,240 @@
+#
+# airport_cutscene.bsl
+#
+
+func
+airport_cs_intro
+{
+	#creates the cars, van
+	obj_create 633 633
+	obj_create 6331 6331
+	obj_create 647 647
+	obj_create 6471 6471 
+	obj_create 960 960
+	obj_create 9601 9602
+	obj_create 2 7
+	fade_out 0 0 0 0
+	cm_interpolate Camout01 0
+	sleep f7
+	
+	begin_cutscene
+
+	cm_jello 0
+	#fade_out 0 0 0 0
+	letterbox 1
+	fade_in 120
+	fork camcontrol
+
+	sound_music_start mus_asian 0.5
+	music_script_start();
+
+	sleep 120
+	fork intro_cars
+	#van start
+	env_anim 2 7
+	
+	fork shinatama_comm
+
+	sleep 855
+	chr_nocollision 0 1
+	#konoko on bike start
+	chr_envanim 0 IntroKonokoBox01
+	chr_animate 0 KONOKOcycle_ride 500
+	obj_create 10 12
+	env_anim 10 12
+	sleep 6
+	chr_create 100 start
+	ai2_spawn IntroStriker01
+	ai2_spawn IntroStriker02	
+
+	chr_forceholster IntroStriker02 1
+	
+	sleep 1
+	playback 100 IntroMuro01
+	playback IntroStriker01 IntroComguy01
+	playback IntroStriker02 IntroStriker01
+	sleep 498
+	#kill van object
+	obj_kill 2 7
+	#konoko off bike
+	chr_envanim 0 IntroKonokoBox02 norotation
+	chr_animate 0 KONOKOlev4_intro
+	
+	sound_music_volume mus_asian .25 0.5
+
+	cinematic_start(KONtalkangryfront, 180, 180, 15, 3, 10, false)
+	sleep 60
+	sound_dialog_play c04_14_02konoko
+	sleep 120
+	cinematic_stop (KONtalkangryfront, 16, 20)
+	playback 100 IntroMuro02
+	playback IntroStriker01 IntroComguy02
+	playback IntroStriker02 IntroStriker02
+	sleep 60
+	cinematic_start(MUROtalking, 180, 180, 15, 1, 15, false)
+	sleep f50
+	sound_dialog_play c04_14_01muro
+	sound_dialog_play_block pause
+	cinematic_stop (MUROtalking, 15, 30)
+
+	sound_music_volume mus_asian 0.8 2.0
+
+	playback 0 IntroKonoko01
+	chr_nocollision 0 0
+	obj_kill 10 12
+	env_show 10 1
+	env_show 11 1
+	env_show 12 1
+	
+	chr_forceholster IntroStriker02 0
+	
+	sleep 60
+	set_objective_1
+	set_target_1	
+
+	save_point_1
+
+	sleep 260
+	chr_delete 100
+}
+
+func
+camcontrol
+{
+	cm_anim both Camout01
+	sleep f80
+	sound_ambient_start c03_44_03truckby
+	cm_anim_block both Camout02
+	sound_ambient_start c03_49_16_truck
+	cm_anim_block both Camout03
+	sound_ambient_start c03_49_16_motorcycle
+	cm_anim_block both Camout04
+	cm_wait
+	sleep 2
+	cm_interpolate Camout05 0
+	sleep 1
+	cm_interpolate Camout06 120
+	sleep 300
+	cm_reset
+	cm_jello 1
+	letterbox 0
+	end_cutscene
+}
+
+func
+intro_cars
+{
+	sleep 633
+	env_anim 633 633
+	env_anim 6331 6331
+	sleep 14
+	env_anim 647 647
+	env_anim 6471 6471
+	sleep 203
+	sleep 110
+	env_anim 960 960
+	env_anim 9601 9602
+	sleep 560
+	obj_kill 633 633
+	obj_kill 6331 6331
+	obj_kill 647 647
+	obj_kill 6471 6471 
+	obj_kill 960 960
+	obj_kill 9601 9602
+}
+
+func shinatama_comm
+	{
+	sleep 90
+	sound_music_volume mus_asian 0.35 1.0
+	sound_dialog_play c00_01_104shinatama
+	cinematic_start (SHINtalking, 180, 180, 15, 1, 20, false)
+	sound_dialog_play_block pause
+	cinematic_stop (SHINtalking, 15, 20)
+	sound_music_volume mus_asian 0.5 1.0
+	}
+
+func
+Booth(string wazzzup)
+{
+	begin_cutscene weapon
+	#make Konoko run to a flag
+	ai2_takecontrol 1
+	ai2_movetoflag 0 1091
+	cm_interpolate BoothCamMuroWalk 240
+	ai2_spawn BoothMuro01
+	playback BoothMuro01 BoothMuroWalk
+	#Muro just stands there and talks for a while
+	sleep f180
+	cinematic_start(MUROtalking, 180, 180, 19, 7, 20, false)
+	sound_dialog_play c04_17_01muro
+	sound_dialog_play_block pause
+	#Konoko looks to see Strikers
+	ai2_takecontrol 0
+	cm_interpolate BoothCamKonokoLook 0
+	playback 0 BoothKonokoLook
+	ai2_spawn BoothStriker01
+	ai2_spawn BoothStriker02
+	sleep 30
+	playback BoothStriker01 BoothStriker01
+	playback BoothStriker02 BoothStriker02
+	sleep 50
+	#Strikers rush in
+	cm_interpolate BoothCamStrike01 0
+	cm_interpolate_block BoothCamStrike02 180
+	sleep f60
+	sound_dialog_play c04_17_02muro
+	sleep 140
+	#Muro walks out the door
+	playback BoothMuro01 BoothMuroLeave
+	sleep 30
+	cm_interpolate BoothCamLeave01 0
+	cm_interpolate_block BoothCamLeave02 300
+	sleep f30
+	sleep f50
+	sound_dialog_play c04_17_03muro
+	sound_dialog_play_block pause
+	sleep f30
+
+	sound_music_start mus_asian 0.8
+	music_script_start
+	trigvolume_enable stop_booth_music_tv 1
+
+	cinematic_stop (MUROtalking, 15, 20)
+	sleep 120
+	cm_reset
+	fork FixDoors
+	
+	particle door2_locklight01 do stop
+	particle door7_locklight01 do stop
+	door_lock 7
+	set_target_blank
+
+	chr_delete TerminalTwo_Striker_1
+	chr_delete TerminalTwo_Striker_2
+	chr_delete Tarmac_Striker_2
+	chr_delete Tarmac_Striker_4
+
+	chr_delete BoothMuro01
+	end_cutscene
+}
+
+func void stop_booth_music(string who)
+{
+	sound_music_stop mus_asian
+}
+
+func
+outro(string wazzup)
+{
+	begin_cutscene
+	#cm_interpolate OutroCam01 0
+	#playback 0 OutroKonoko
+	#sleep 400
+	fade_out 0 0 0 60
+	sleep f120
+	win
+}
+
+
+
Index: AE/packages/VanillaBSL/IGMD/Airport/airport_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/Airport/airport_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/Airport/airport_main.bsl	(revision 313)
@@ -0,0 +1,23 @@
+#
+# airport_main.bsl
+#
+
+var int my_save_point;
+
+func void main(void)
+{
+	gl_fog_blue=0
+	gl_fog_red=0
+	gl_fog_green=0
+	gl_fog_start=.995
+	gs_farclipplane_set 4000
+	env_show 10 0
+	env_show 11 0
+	env_show 12 0
+#	fork airport_cs_intro();
+	func_start
+	if (my_save_point eq 0)
+	{
+	airport_cs_intro
+	}
+}
Index: AE/packages/VanillaBSL/IGMD/Airport_III/airport2_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/Airport_III/airport2_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/Airport_III/airport2_cutscene.bsl	(revision 313)
@@ -0,0 +1,129 @@
+#
+# airportiii_cs_intro.bsl
+#
+
+func
+airportiii_cs_intro
+{
+	begin_cutscene
+	#hides VTOL object
+	fade_out 0 0 0 0
+	playback 0 IntroKonokoSet
+	sleep f60
+	fade_in 60
+	sleep f60
+	end_cutscene
+}
+
+
+func void
+camcontrol(
+	void)
+{
+	#unhides VTOL object
+	obj_create 61 67
+	obj_create 72 79
+	#vtol takes off
+	env_anim 61 67
+	env_anim 72 79
+	#hides Vtol gunk
+	env_show 161 0
+	env_show 162 0
+	env_show 163 0
+	env_show 164 0
+	env_show 165 0
+	env_show 166 0
+	env_show 167 0
+	env_show 172 0
+	env_show 173 0
+	env_show 174 0
+	env_show 175 0
+	env_show 176 0
+	env_show 177 0
+	env_show 178 0
+	env_show 179 0
+	sleep 500
+	#Muro and Cronie in plane talking
+	#chr_create 101 start
+	#chr_create 102 start
+	#chr_envanim 101 OutroComBip
+	#chr_envanim 102 OutroMuroBip
+}
+
+func void rappel_stop_old_music(void)
+{
+	sound_music_stop mus_space01
+}
+
+func void
+rappel(
+	void)
+{
+	rappel_stop_old_music
+
+	begin_cutscene
+	invincible=1
+	obj_create 51 52
+	env_anim 51 52
+	chr_animate 0 KONOKOlev6_rappel
+	chr_envanim 0 RapKonBipBox01 norotation
+	cm_anim both RapCam01
+	sleep f250
+	cutscene_sync mark
+	sound_ambient_start c04_32_23_misc
+	sleep f260
+	dprint CAMERA_RAP_CAM_02
+	cm_interpolate_block RapCam02 0
+	dprint CAMERA_RAP_CAM_03
+	cm_interpolate_block RapCam03 240
+	sleep f45
+	chr_animate 0 KONOKOlev6_tracer
+	sleep f180
+	obj_kill 51 51
+	#camera cut to show Konoko jumping off of plane
+	playback 0 RappelKonRun
+	cm_interpolate RappelCamRun01 0
+	cm_interpolate_block RappelCamRun02 180
+	sleep f180
+
+	#VTOL takes off
+	dprint VTOL_TAKES_OFF
+	sound_ambient_start c04_28_22_helic
+	fork camcontrol
+	cm_anim both OutCam01
+	cm_wait
+	chr_create 101 start
+	chr_create 102 start
+	chr_envanim 101 OutroComBip
+	chr_envanim 102 OutroMuroBip
+
+	cm_anim both OutCam02
+	dprint INSIDE_CAM
+	particle muroplane_prop do stop
+	sound_ambient_start propidle_2 0.4
+	playback 0 OutroKonokoSet
+	sleep f60
+	ai2_allpassive 1
+	sound_dialog_play c06_21_01SynHench2
+	cinematic_start (COMGUYtalking, 180, 180, 19, 7, 20, false)
+	sound_dialog_play_block c06_21_02muro
+	cinematic_start (MUROtalking, 180, 180, 20, 9, 20, true)	
+	sleep f200
+	cm_anim both OutCam03
+	dprint CAMERA_OUT_CAM_03
+	sound_ambient_start c04_28_22_helie 0.75
+	sound_ambient_volume propidle_2 0.0 0.0
+	sound_ambient_stop propidle_2
+#	playback 0 OutroKonSet
+	chr_delete 101
+	chr_delete 102
+	cm_wait
+	cinematic_stop (COMGUYtalking, 19, 20)
+	cinematic_stop (MUROtalking, 20, 20)
+	fade_out 0 0 0 60
+	sleep f60
+	end_cutscene
+	sleep f60
+	win
+}
+
Index: AE/packages/VanillaBSL/IGMD/Airport_III/airport2_level_logic.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/Airport_III/airport2_level_logic.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/Airport_III/airport2_level_logic.bsl	(revision 313)
@@ -0,0 +1,1196 @@
+### AIRPORT III LEVEL LOGIC ###
+
+### START, SAVE & OBJECTIVES ###
+
+func void func_start(string ai_name)
+{
+	
+	particle gas2 do stop
+	particle gaslight1 do stop
+	particle hanger5 do stop
+	trig_hide 1
+	trig_hide 2
+	trig_hide 3
+	trig_hide 4
+
+	if (my_save_point eq 0)
+		{
+		fork target_thug
+		}
+	
+	if (my_save_point eq 1)
+		{
+		dprint restore1_active
+		door_lock 11
+		tarmac
+		bomber_off
+		trigvolume_enable tarmac 0
+		restore_game
+		sound_music_start atm_gr09 0.75
+		objective_set(2)
+		target_set(7037,30.00)
+		}
+
+	if (my_save_point eq 2)
+		{
+		dprint restore1_active
+		trigvolume_enable save2 0
+		trigvolume_enable lowroad3 0
+		door_lock 21
+		door_lock 22
+		door_lock 35
+		particle lock5a_locklight01 do stop
+		particle lock5b_locklight01 do stop
+		particle lock35_locklight01 do stop
+		particle rotorwash do stop
+		particle room1 kill
+		Back2	
+		restore_game
+		music_save_point2_start
+		sleep 30
+		objective_set(3)
+		target_set(7085,30.00)
+		}
+
+	if (my_save_point eq 3)
+		{
+		dprint restore3_active
+		door_lock 21
+		door_lock 22
+		door_lock 24
+		particle lock5a_locklight01 do stop
+		particle lock5b_locklight01 do stop
+		trigvolume_enable save2 0
+		trigvolume_enable save3 0
+		Back2	
+		door_open 48
+		door_jam 48
+		trig_show 1
+		trig_show 2
+		trig_show 3
+		trig_show 4
+		restore_game
+		objective_set(3)
+		target_set(7085,30.00)
+		}
+	
+	if (my_save_point eq 4)
+		{
+		dprint restore4_active
+		trigvolume_enable lowroad1 0
+		trigvolume_enable lowroad2 0
+		trigvolume_enable lowroad3 0
+		trigvolume_enable lowroad4 0
+		trigvolume_enable hidden1a 0
+		trigvolume_enable hidden1b 0
+		trigvolume_enable save2 0
+		trigvolume_enable backcompound 0
+		trigvolume_enable remote 0
+		trigvolume_enable trigger_volume_08 1
+		door_lock 21
+		door_lock 22
+		door_lock 35
+		door_unlock 27
+		particle lock6_locklight01 do start
+		particle lock5a_locklight01 do stop
+		particle lock5b_locklight01 do stop
+		particle lock35_locklight01 do stop
+		console_deactivate 10
+		restore_game
+		sleep 30
+		set_objective_4
+		}
+
+	if (my_save_point eq 5)
+		{
+		dprint restore5_active
+		particle muroplane_prop do start
+		trigvolume_enable hangar2_setup 0
+		door_lock 36
+		particle lock7_locklight01 do stop
+		set_objective_5
+		ai2_spawn ambush_striker_2
+		ai2_spawn ambush_commguy_2
+		Hangar2a
+		restore_game
+		sound_music_start mus_space01 0.75
+		music_script_start
+		ai2_doalarm ambush_commguy_2 4
+		sleep 30
+		dprint set_objective5
+		objective_set(5)
+		target_set(1054,30.00)
+		}
+}
+
+func void you_lose(string ai_name)
+{
+	all_music_counters	
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+
+func void you_win(int char_index)
+{
+	all_music_counters
+	win
+}
+
+func void save_point_1(string ai_name)
+{
+	dprint savegame_1	
+	sound_music_stop mus_om03
+	if (my_save_point ne 1)
+		{
+		save_game 1 autosave
+		}
+	sound_music_stop
+	sound_music_start atm_gr09 0.75
+}
+
+func void save_point_2(string ai_name)
+{
+	dprint savegame_2
+	if (my_save_point ne 2)
+		{
+		save_game 2 autosave
+		}
+	music_save_point2_start
+	target_set(7085,30.00)
+}
+
+func void save_point_3(string ai_name)
+{
+	dprint savegame_3	
+	if (my_save_point ne 3)
+		{
+		save_game 3 autosave
+		}
+	sound_music_start atm_cl09 0.75
+}
+
+func void save_point_4(string ai_name)
+{
+	dprint savegame_4	
+	if (my_save_point ne 4)
+		{
+		save_game 4 autosave
+		}
+	sound_music_stop atm_cl09 0.75
+}
+
+func void save_point_5(string ai_name)
+{
+	particle muroplane_prop do start
+	dprint savegame_5	
+	if (my_save_point ne 5)
+		{
+		save_game 5 autosave
+		target_set(1054,30.00)
+		}
+}
+
+func void set_objective_1(string ai_name)
+{
+	dprint set_objective1
+	objective_set(1)
+	sound_music_start mus_om03
+	music_script_start
+	target_set(7124,30.00)
+	#sleep 300
+}
+
+func void set_objective_2(string ai_name)
+{
+	dprint set_objective2
+	objective_set(2)
+	target_set(7037,30.00)
+	sound_dialog_play c00_01_18shinatama
+}
+
+func void set_objective_3(string ai_name)
+{
+	dprint set_objective3
+	objective_set(3)
+	target_set(0,0)
+	sound_dialog_play c00_01_20shinatama
+}
+
+func void set_objective_4(string ai_name)
+{
+	dprint set_objective4
+	objective_set(4)
+	target_set(7060,30.00)
+	sound_dialog_play c00_01_19shinatama
+}
+
+func void target_change_1(string ai_name)
+{
+	target_set(7037,30.00)
+}
+
+func void target_change_2(string ai_name)
+{
+	target_set(7037,30.00)
+}
+
+func void low_target_set(string ai_name)
+{
+	target_set(7085,30.00)
+}
+
+func void low_target_clear(string ai_name)
+{
+	target_set(0,0)
+}
+
+func void high_target_set(string ai_name)
+{
+	target_set(7126,30.00)
+}
+
+func void high_target_clear(string ai_name)
+{
+	target_set(0,0)
+}
+
+### MUSIC ###
+
+var int music_counter;
+
+func void music_force_stop(void)
+{
+	sleep 4500
+	if (0 ne music_counter) 
+		{
+		dprint music_force_stop
+		music_counter = 0
+		all_music_counters
+		}
+}
+
+func void music_script_start(void)
+{
+	music_counter = 2
+}
+
+func void striker_lullaby_1(string ai_name)
+{
+	dprint striker_lullaby1
+	music_counter = music_counter - 1
+	if (music_counter eq 0)
+		{
+		all_music_counters();
+		}
+
+}
+func void striker_lullaby_2(string ai_name)
+{
+	dprint striker_lullaby2
+	music_counter = music_counter - 1
+	if (music_counter eq 0)
+		{
+		all_music_counters();
+		}
+}
+
+func void all_music_counters(void)
+{
+	dprint MARTY_HAS_LEFT_THE_BUILDING
+	sound_music_stop mus_asian
+	sound_music_stop mus_space01
+	sound_music_stop mus_om03
+	sound_music_stop mus_ot
+	sound_music_stop atm_cl09
+	sound_music_stop atm_gr09
+}
+
+func void music_save_point2_start(void)
+{
+	sound_music_start atm_cl09 1.0
+}
+
+### TEXT CONSOLES ###
+
+func void level6a(void)
+{
+	dprint text6a
+	text_console level_6a
+	console_reset 16
+}
+
+func void level6b(void)
+{
+	dprint text6b
+	text_console level_6b
+	console_reset 9
+}
+
+func void level6c(void)
+{
+	dprint text6c
+	text_console level_6c
+	console_reset 13
+}
+
+func void level6d(void)
+{
+	dprint text6d
+	text_console level_6d
+	console_reset 17
+}
+
+func void level6e(void)
+{
+	dprint text6e
+	text_console level_6e
+	console_reset 5
+}
+
+func void level6f(void)
+{
+	dprint text6f
+	text_console level_6f
+	console_reset 2
+}
+
+### GAMEPLAY PROGRESSION ###
+
+func void Start1(string char_index)
+{
+	dprint Start1
+	ai2_spawn Start_Striker_1
+	ai2_spawn Start_Striker_2
+	ai2_spawn Start_Comguy_1
+	particle room1 do start
+}
+
+# TARGET THUG
+func void target_thug(void)
+{
+	sleep f120
+	dprint target_thug
+	sound_dialog_play c00_01_28shinatama
+	ai2_spawn Start_Friend_1
+	ai2_spawn Start_Striker_5
+	ai2_makeaware Start_Striker_5 Start_Friend_1
+	sleep 30
+	set_objective_1
+}
+
+# TARGET THUG ROLL
+func void patrolscript0200(string char_index)
+{
+	playback_block Start_Friend_1 roll fromhere
+	ai2_dopath Start_Friend_1 Start_Friend_1b 1
+	ai2_setjobstate Start_Friend_1
+}
+
+# RETURN OF MAD BOMBER
+func void mad_bomber1(string ai_name)
+{
+	dprint boom
+	ai2_spawn mad_bomber1
+	sleep 150
+	particle bomb1 do explode
+	particle squib1a do explode
+	particle squib1b do explode
+	sleep 60
+	particle bomb2 do explode
+	particle squib2 do explode
+	sleep 30
+	particle bomb_damage1 do start
+}
+
+# SAVE THE THUG
+func void victim_thug1(string ai_name)
+{
+	dprint save_the_thug
+	ai2_spawn victim_thug1
+	ai2_spawn cruel_striker1
+}
+
+# HIDDEN FRIENDS
+func void hidden_thugs(string ai_name)
+{
+	ai2_spawn Start_Friend_2
+	ai2_spawn Start_Friend_3
+}
+
+# TARMAC
+func void tarmac(string ai_name)
+{
+	dprint tarmac_setup
+	ai2_spawn tarmac_striker_1
+	ai2_spawn tarmac_striker_2
+	ai2_spawn tarmac_striker_3
+	ai2_spawn tarmac_tanker_1
+	ai2_spawn tarmac_tanker_2
+	ai2_spawn tarmac_commguy_1
+
+	particle compound create
+}
+
+# ROOM 1 CLEAN-UP
+func void room1_cleanup(string ai_name)
+{
+	dprint room_1_clean
+	door_lock 11
+	chr_delete Start_Friend_2
+	chr_delete Start_Friend_3
+}
+
+# STRIKER TEE-OFF
+func void striker_tee_off(string ai_name)
+{
+	dprint I_pity_the_fool
+	ai2_dopath tarmac_striker_4 tarmac_striker_3b 1
+}
+
+# TANKER BACKUP
+func void tanker_backup(string ai_name)
+{
+	dprint tanker_backup
+	ai2_dopath tarmac_tanker_2 tarmac_tanker_2b 1
+}
+
+# UNLOCK COMMGUY
+func void unlock_commguy(string ai_name)
+{
+	dprint you_may_feel_a_zapping_sensation
+	ai2_dopath tarmac_commguy_1 tarmac_commguy_2 1
+	ai2_dopath tarmac_tanker_2 tarmac_tanker_2c 1
+	sound_music_stop atm_gr09
+}
+
+### WIL E. MURO ###
+
+# FIRST MURO
+func void muro_bait(string ai_name)
+{
+	dprint there_goes_muro
+	door_close 12
+	door_lock 12
+	begin_cutscene
+	ai2_spawn muro1
+	ai2_spawn escort_striker1
+	ai2_spawn escort_striker2
+	playback muro1 muro1 interp 30
+	playback escort_striker1 escort_striker1 interp 30
+	playback escort_striker2 escort_striker2 interp 30
+	sleep 30
+	dprint muro2_bait
+	chr_peace 0
+	input 0
+	particle compound kill
+	sound_music_start mus_asian 0.75
+	music_script_start	
+	cm_interpolate_block muro_2 0
+	sleep 90
+	cm_interpolate_block muro_3 400
+	sleep 430
+	particle garage1_locklight02 do start
+	door_open 26
+	door_jam 26
+	ai2_spawn Hangar1_A_Striker_1
+	ai2_spawn Hangar1_A_Striker_2
+	ai2_spawn Hangar1_A_Striker_3
+	playback Hangar1_A_Striker_2 hangar1_striker2 interp 30
+	playback Hangar1_A_Striker_3 hangar1_striker3 interp 30	
+	playback Hangar1_A_Striker_1 hangar1_striker1 interp 30
+	cm_interpolate_block muro_4 0
+	cm_interpolate_block muro_5 300
+	sleep 300
+	chr_delete muro1
+	chr_delete escort_striker1
+	chr_delete escort_striker2
+	cm_reset
+	end_cutscene
+	trigvolume_enable murobait_a 0
+	trigvolume_enable murobait_b 0
+	input 1
+	set_objective_3
+	particle lock3_locklight01 do stop
+	save_game_2
+}
+
+# FINAL MURO
+func void final_muro(string char_index)
+{
+	dprint last_muro_cutscene
+	sound_music_stop mus_ot 0.75
+	input 0
+	letterbox 1
+	cm_interpolate muro2a 0
+	ai2_spawn muro2
+	ai2_spawn escort_striker3
+	ai2_spawn escort_striker4
+	playback escort_striker3 final_escort3
+	playback escort_striker4 final_escort4
+	playback muro2 final_muro
+	cm_interpolate muro2a 0
+	cm_interpolate_block muro2b 300
+	sleep 300
+	cm_interpolate muro2c 0
+	cm_interpolate_block muro2d 300
+	sleep 350
+	cm_interpolate muro2e 0
+	cm_interpolate_block muro2f 300
+	sleep 300
+	chr_delete muro2
+	chr_delete escort_striker3
+	chr_delete escort_striker4
+	cm_reset
+	letterbox 0
+	input 1
+}
+		
+### BACK TO GAMEPLAY ###
+
+func void Hangar1_A(void)
+{
+	dprint open_sesame
+	door_unlock 12
+	particle lock3_locklight01 do start
+	trigvolume_enable murobait_a 1
+	target_set(7085,30.00)
+}
+
+func void hangar1a(string char_index)
+{
+	dprint hangar_1a
+	ai2_spawn Hangar1_B_Striker_1
+	ai2_spawn Hangar1_B_Striker_4
+}
+
+func void hangar1b(string ai_name)
+{
+	dprint hangar_1b
+	ai2_spawn superball_striker
+}
+
+func void hangar1c(string char_index)
+{
+	dprint hangar_1c
+	ai2_spawn Hangar1_B_Striker_5
+	ai2_spawn Hangar1_B_Striker_9
+	ai2_spawn Hangar1_A_Tanker_1
+	ai2_spawn Hangar1_B_Comguy_12
+}
+
+# HANGAR 1 ROOM D OPEN
+func void hangar1d_var(string ai_name)
+{
+	dprint hangar1d
+	hangar1d_counter = hangar1d_counter - 1
+	if (hangar1d_counter eq 0)
+		{
+		access_hangar1d_granted();
+		}
+}
+
+func void access_hangar1d_granted(string ai_name)
+{
+	dprint access_granted_d
+	particle garage2_locklight02 do start
+	door_unlock 19
+	door_open 19
+	door_jam 19
+	ai2_spawn hangar1d_enemy_1
+	ai2_spawn hangar1d_enemy_2
+}
+
+# HANGAR 1 ROOM F OPEN
+func void hangar1f_var(string ai_name)
+{
+	dprint hangar1f
+	hangar1f_counter = hangar1f_counter - 1
+	if (hangar1f_counter eq 0)
+		{
+		access_hangar1f_granted();
+		}
+}
+
+func void access_hangar1f_granted(string ai_name)
+{
+	dprint access_granted_f
+	particle garage3_locklight02 do start
+	door_unlock 20
+	door_open 20
+	door_jam 20
+	ai2_spawn hangar1f_enemy_1
+	ai2_spawn hangar1f_enemy_3
+	ai2_spawn rat_thug_4
+}
+
+func void skip_ratscene(string ai_name)
+{
+	dprint no_ratscene
+	door_unlock 24
+	particle lock9_locklight02 do start
+	console_deactivate
+}
+
+func void hangar1d_backup(string ai_name)
+{
+	dprint backup
+	ai2_spawn hangar1f_enemy_2
+}
+
+func void patrolscript0500(string ai_name)
+{
+	dprint jump_bomber
+	playback_block hangar1f_enemy_2 bomber_jump interp 30
+}
+
+func void secret_striker(string char_index)
+{
+	dprint striker_ambush
+	ai2_spawn secret_striker_1
+}
+
+func void secret_tanker(string char_index)
+{
+	dprint tanker_ambush
+	ai2_spawn secret_tanker_1
+}
+
+func void sos_1(string char_index)
+{
+	dprint sos1
+	ai2_spawn sos_badman_1
+}
+
+func void sos_2(string char_index)
+{
+	dprint sos2
+	ai2_spawn sos_badman_2
+}
+
+
+func void carpool_backup(string char_index)
+{
+	dprint carpool_ambush
+	ai2_spawn carpool_striker_2
+}
+
+func void Back1(string char_index)
+{
+	dprint Back1
+	ai2_spawn Roof1_Striker_1
+	ai2_spawn Roof1_Striker_2
+	ai2_spawn Hangar1_C_Striker_1
+	ai2_spawn Hangar1_C_Striker_2
+	ai2_spawn Hangar1_C_Friend_1
+}
+
+func void low_roadies_1(string ai_name)
+{
+	dprint roadies_1
+	ai2_spawn Back_Striker_1
+	ai2_spawn Back_Striker_2
+	ai2_spawn Back_Striker_3
+	ai2_spawn Back_Thug_1
+}
+
+func void low_roadies_2(string ai_name)
+{
+	dprint roadies_2
+	ai2_spawn Back_Tanker_1
+	ai2_spawn Back_Thug_2
+	ai2_spawn Back_Thug_3
+}
+
+func void Back2(string char_index)
+{
+	dprint Back2
+	ai2_spawn Roof2_Striker_1
+	ai2_spawn Roof2_Striker_2
+	ai2_spawn Roof2_Striker_3
+	ai2_spawn Back2_Comguy_1
+	ai2_spawn Back2_Tanker_1
+	ai2_spawn carpool_striker_1
+	ai2_spawn ahah_badman_1
+	ai2_spawn ahah_badman_2
+	particle roof2 do start
+}
+
+func void Rat_Guards(string char_index)
+{
+	dprint rat_guard
+	ai2_spawn Rat_Comguy_1
+	ai2_spawn Rat_Tanker_1
+	particle lock35_locklight01 do start
+}
+
+func void Back3(string char_index)
+{
+	dprint Back3
+	ai2_spawn Roof3_Striker_1
+	ai2_spawn Roof3_Striker_2
+	ai2_spawn Roof3_Tanker_1
+	particle roof3 do start
+}
+
+func void remote_lot(string ai_name)
+{
+	dprint remote_lot_guards
+	ai2_spawn remote_striker_1
+}
+
+func void roof3_backup1(string char_index)
+{
+	dprint roof_backup1
+	ai2_dopath Roof3_Striker_1 Roof3_Striker_1b 1
+}
+
+func void back_compound(string char_index)
+{
+	dprint compound
+	ai2_spawn compound_tanker_1
+	ai2_spawn compound_bomber_1
+	sound_music_stop atm_cl09
+}
+
+func void remote_parking(string ai_name)
+{
+	dprint remote_action
+	ai2_spawn hostage_thug_1
+	ai2_spawn hostage_thug_2
+	ai2_spawn hostage_thug_3
+	ai2_spawn squad_tanker_1
+	ai2_spawn squad_tanker_2
+}
+
+func void remote_backup_1(string ai_name)
+{
+	dprint remote_backup1
+	ai2_spawn hostage_striker_1
+}
+
+func void remote_backup_2(string ai_name)
+{
+	dprint remote_backup2
+	ai2_spawn hostage_striker_2
+}
+
+func void Office1(string char_index)
+{
+	dprint Office1
+	ai2_spawn Office1_Comguy_1
+	ai2_spawn Office1_Comguy_11
+	ai2_spawn Office2_Striker_1
+	ai2_spawn Office2_Striker_3
+	ai2_spawn Office3_Tanker_12
+	ai2_spawn neutral_1
+	ai2_spawn neutral_2
+	sound_music_start atm_gr09
+	particle muroplane_prop do
+}
+
+# HANGAR 2 AMBUSH
+func void ambush(string ai_name)
+{
+	dprint ambush_active
+	particle lock7_locklight01 do start
+	door_unlock 36
+	ai2_spawn ambush_striker_1
+	ai2_spawn ambush_commguy_1
+	sleep 220
+	ai2_doalarm ambush_commguy_1 4
+	sound_music_stop atm_gr09
+	sound_music_start mus_space01 0.75
+	music_script_start
+}
+
+func void Hangar2a(string char_index)
+{
+	dprint Hangar2a
+	ai2_spawn Hangar2_tanker_1
+	ai2_spawn alarm_striker_1
+}
+
+func void Hangar2b(string char_index)
+{
+	dprint Hangar2b
+	ai2_spawn Hangar2_Striker_3
+	ai2_spawn Hangar2_Striker_4
+	ai2_spawn Hangar2_Striker_5
+}
+
+func void alarm_sound_script(void)
+{
+	sound_ambient_start alarm_loop
+	sleep 900
+	sound_ambient_stop alarm_loop
+}
+
+func void raise_alarm(string char_index)
+{
+	dprint alarm_raised
+	ai2_dopath alarm_striker_1 alarm_striker_1a 1
+	fork alarm_sound_script
+}
+
+func void alarm_patrol(string char_index)
+{
+	dprint patrol_begun
+	ai2_dopath alarm_striker_1 alarm_striker_1b 1
+}
+
+#STRIKER SHOWDOWN
+var int striker_counter=3;
+
+func void striker_showdown_1(string ai_name)
+{
+	dprint striker_showdown1
+	striker_counter = striker_counter - 1
+	if (striker_counter eq 0)
+		{
+		total_striker_count();
+		}
+
+}
+
+func void striker_showdown_2(string ai_name)
+{
+	dprint striker_showdown2
+	striker_counter = striker_counter - 1
+	if (striker_counter eq 0)
+		{
+		total_striker_count();
+		}
+}
+
+func void striker_showdown_3(string ai_name)
+{
+	dprint striker_showdown3
+	striker_counter = striker_counter - 1
+	if (striker_counter eq 0)
+		{
+		total_striker_count();
+		}
+}
+
+func void total_striker_count(string ai_name)
+{
+	dprint rappel_point_active
+	trigvolume_enable rappel_point 1
+	particle rappel create
+	target_set(1054,30.00)
+	sound_music_stop mus_space01
+}
+
+# OBJECTIVE CHECK
+func void objective_check(string ai_name)
+{
+	dprint check_for_objective
+		if (chr_has_lsi(0))
+		{	
+		dprint set_objective5
+		objective_set(5)
+		target_set(7127,30.00)
+		trigvolume_enable objectivecheck 0
+		}
+}
+
+# LSI CHECK 1
+func void lsi_check_1(string ai_name)
+{
+	dprint check_lsi_1
+	if (chr_has_lsi(0))
+		{	
+		trigvolume_enable tripwire 1
+		}
+}
+
+# LSI CHECK 2
+func void lsi_check_2(string ai_name)
+{
+	dprint check_lsi_2
+	if (chr_has_lsi(0))
+		{	
+		particle rappel kill
+		rappel
+		}
+}
+
+### RATS IN THE SEWER ###
+
+# RAT DOOR
+func void rat_door(string ai_name)
+{
+	dprint open_rat_door
+	particle lock9_locklight02 do start
+	door_unlock 24
+	door_open 24
+	door_jam 24	
+	letterbox 1		
+	input 0
+	ai2_spawn rat_thug_1
+	ai2_spawn rat_thug_2
+	ai2_spawn rat_thug_3
+	cm_interpolate rat_door1 0
+	cm_interpolate_block rat_door2 300
+	sleep 250
+	playback rat_thug_1 rat_thug_1 interp 30
+	playback rat_thug_2 rat_thug_2 interp 30
+	playback rat_thug_3 rat_thug_3 interp 30
+	sleep 90
+	sleep 200
+	cm_reset
+	letterbox 0
+	input 1
+	door_unjam 24
+	door_close 24
+	sleep 250
+	chr_delete rat_thug_1
+	chr_delete rat_thug_2
+	chr_delete rat_thug_3
+}
+
+# GAS START
+func void gas_trig_show(string ai_name)
+{
+	dprint gastrig_show
+	trig_show 1
+	trig_show 2
+	trig_show 3
+	trig_show 4
+}
+
+func void gas(string ai_name)
+{
+	dprint rats_take_cover
+	particle gas1 do start
+	particle gas2 do start
+	particle gaslight1 do start
+	console_activate 14
+	console_activate 15
+	door_unjam 48
+	door_close 48
+	trigvolume_enable gas 1
+	timer_stop
+}
+
+# GAS OFF
+func void gas_off(string ai_name)
+{
+	dprint rats_scurry_on
+	particle gas1 do stop
+	particle gas2 do stop
+	particle gaslight1 do stop
+	console_reset 14
+	console_reset 15
+	door_open 48
+	door_jam 48
+	trigvolume_enable gas 0
+	timer_start 10 gas_on
+}
+
+# GAS ON
+func void gas_on(string ai_name)
+{
+	dprint rats_take_cover_again
+	door_lock 24
+	particle gas1 do start
+	particle gas2 do start
+	particle gaslight1 do start
+	console_activate 14
+	console_activate 15
+	door_unjam 48
+	trigvolume_enable gas 1
+}
+
+# GAS OFF FOR GOOD
+func void gas_kill(string ai_name)
+{
+	particle gas1 do stop
+	particle gas2 do stop
+	particle gaslight1 do stop
+	door_unjam 48
+}
+
+func void gas_trig_hide(string ai_name)
+{
+	dprint gastrig_hide
+	trig_hide 1
+	trig_hide 2
+	trig_hide 3
+	trig_hide 4
+	door_lock 48
+}
+
+func void poison_konoko(string ai_name)
+{	
+	chr_poison (konoko, 10, 60, 90);
+}
+
+func void fire_damage(string ai_name)
+{	
+	chr_poison (ai_name, 5, 30, 30);
+}
+
+### LOCKS & LIGHTS ###
+
+func void lock1(void)
+{
+	input 0
+	cm_interpolate lock1 0
+	sleep 60
+	particle lock1_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+	target_set(7125,30.00)
+}
+
+func void lock2(string ai_name)
+{
+	input 0
+	cm_interpolate lock2 0
+	sleep 60
+	particle lock2_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+	trigvolume_enable hidden_friends1 1
+}
+
+func void lock4(void)
+{
+	input 0
+	cm_interpolate lock4 0
+	sleep 60
+	particle lock4_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+}
+
+func void lock5_counter_decrement(void)
+{
+	dprint ENTERING_LOCK_5_DECREMENT
+	lock5_counter = lock5_counter - 1
+	if (lock5_counter eq 2)
+		{
+		sound_music_start mus_cool13 1.0
+		}
+	if (lock5_counter eq 0)
+		{
+		sound_music_stop mus_cool13
+		lock5_end();
+		}
+}
+
+func void lock5a_var(string ai_name)
+{
+	dprint lock5a
+	lock5_counter_decrement
+	input 0
+	cm_interpolate lock5d 0
+	sleep 60
+	particle lock5a_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+}
+
+func void lock5b_var(string ai_name)
+{
+	dprint lock5b
+	lock5_counter_decrement
+	input 0
+	cm_interpolate lock5d 0
+	sleep 60
+	particle lock5b_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+}
+
+func void lock5c_var(string ai_name)
+{
+	dprint lock5c
+	lock5_counter_decrement
+}
+
+# LOCK 5 END
+func void lock5_end(string ai_name)
+{
+	dprint room1_end
+	door_unlock 21
+	door_unlock 22
+	trigvolume_enable nodark 1
+}
+
+func void lock5(void)
+{
+	lock5c_var
+	letterbox 1
+	input 0
+	cm_interpolate lock5a 0
+	cm_interpolate_block lock5b 300
+	sleep 350
+	cm_interpolate_block lock5c 0
+	sleep 30
+	cm_interpolate_block lock5d 300
+	sleep 300
+	particle lock5c_locklight01 do start
+	sleep 60
+	cm_reset
+	letterbox 0
+	input 1
+}
+
+func void lock6(void)
+{
+	input 0
+	cm_interpolate lock6 0
+	sleep 60
+	particle lock6_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+	set_objective_4
+	trigvolume_enable trigger_volume_08 1
+	door_unlock 27
+}
+
+### PARTICLE CONTROL ###
+
+# MAD BOMBER DAMAGE OFF
+func void bomber_off(string ai_name)
+{
+	dprint mad_bomber_particles_off
+	particle bomb_damage1 do stop
+	particle room1 do stop
+	particle bomber1a kill
+}
+
+# PLANE ROTOR WASH ON
+func void rotor_wash(string ai_name)
+{
+	dprint rotorwash_on
+	particle rotorwash do start
+}
+
+# CARPOOL FIRE ON
+func void carpool_start(string ai_name)
+{
+	dprint carpool_particles_on
+	particle carpool create
+	particle carpool do start
+}
+
+# CARPOOL FIRE OFF
+func void carpool_stop(string ai_name)
+{
+	dprint carpool_particles_off
+	particle carpool kill
+	particle carpool do stop
+}
+
+### Level scripted by Joseph ###
Index: AE/packages/VanillaBSL/IGMD/Airport_III/airport2_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/Airport_III/airport2_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/Airport_III/airport2_main.bsl	(revision 313)
@@ -0,0 +1,26 @@
+#
+# airportiii_main.bsl
+#
+
+var int my_save_point;
+var int lock5_counter=3;
+var int hangar1d_counter=2;
+var int hangar1f_counter=2;
+
+func void main(void)
+{
+	gl_fog_blue=0
+	gl_fog_red=0
+	gl_fog_green=0
+	gl_fog_start=.99
+	gs_farclipplane_set 5000
+
+	my_save_point = save_point;
+
+	func_start
+
+	if (my_save_point eq 0)
+	{
+		airportiii_cs_intro();
+	}
+}
Index: AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_anim_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_anim_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_anim_scripts.bsl	(revision 313)
@@ -0,0 +1,34 @@
+#
+# anim_scripts.bsl
+#
+func void patrolscript0002 (string ai_name)
+{
+	playback_block Pod1_TCL_2 alarm2 interp 20
+}
+func void patrolscript0003 (string ai_name)
+{
+	playback_block Pod2_TCL_1 pod2alarm1 interp 20
+}
+func void patrolscript0004 (string ai_name)
+{
+	playback_block Pod2_TCL_2 pod2alarm2 interp 20
+}
+
+
+func void patrolscript0009 (string ai_name)
+{
+	particle lock99_locklight01 do start
+	door_unlock 11
+	sleep 540
+	particle lock99_locklight01 do stop
+	door_lock 11
+}
+func void patrolscript0010 (string ai_name)
+{
+	particle lock99_locklight01 do start
+	door_unlock 11
+# WAIT AND RELOCK DOORS
+	sleep 540
+	particle lock99_locklight01 do stop
+	door_lock 11
+}
Index: AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_cutscene.bsl	(revision 313)
@@ -0,0 +1,436 @@
+#
+# warehouse_cutscene.bsl
+#
+
+########################
+func void
+Kon(
+	void)
+{
+	cm_interpolate KonCamFoot01 0
+	cm_interpolate_block KonCamFoot02 300
+	sleep f260
+	#cm_interpolate KonCamChest01 0
+	#cm_interpolate_block KonCamChest02 180
+	#sleep f120
+	cm_interpolate KonCamBack01 0
+	cm_interpolate_block KonCamBack02 180
+	sleep f150
+	cm_interpolate KonCamSide01 0
+	cm_interpolate_block KonCamSide02 210
+	sleep f190
+	cm_interpolate KonCamFinish01
+	cm_interpolate_block KonCamFinish02 200
+	sleep 345
+	fade_out 0 0 0 15
+	sleep 15
+	cm_reset
+	fade_in 15
+	sleep 15
+}
+
+############################
+
+func void
+animate(string me)
+{
+	#chr_animate me KONCOMpunch_fw
+}
+
+func void swing(void)
+{
+	how_far_along = 0;
+	fade_out 0 0 0 30
+	sleep 30
+	splash_screen warehouse_splash_screen
+	swing_cutscene
+}
+
+func void jumping_sounds(void)
+{
+	sleep 97
+	# first hit on ledge
+	sound_impulse_play kon_land_con
+}
+
+func void
+swing_cutscene(
+	void)
+{
+	fade_out 0 0 0 0
+	sleep 15
+	how_far_along = 0;
+	begin_cutscene
+	cutscene_sync off
+	ai2_spawn kerr
+	ai2_spawn griffin
+	playback kerr KerrSet
+	playback griffin GriffinSet
+	cm_interpolate GriffinCam 0
+	sleep 30
+		chr_changeteam char_0 Konoko
+		chr_inv_reset 0
+		chr_giveweapon 0 w1_tap
+		chr_forceholster 0 1
+	cm_interpolate GriffinCam 0
+	fade_in 30
+	sleep 60
+	#griffin talks
+	cinematic_start (GRIFnametag, 180, 180, 15, 1, 20, false)
+	sound_dialog_play c01_01_01griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c01_01_02shinatama
+	cinematic_start (SHINnametagM, 180, 180, 16, 3, 20, true)
+	sound_dialog_play_block pause
+	cinematic_stop (SHINnametagM, 16, 20)
+	cm_interpolate OfficeCam02 0
+	cm_interpolate_block OfficeCam01 900
+	sleep 15
+	sound_dialog_play c01_01_03kerr
+	cinematic_start (KERRnametagM, 180, 180, 16, 3, 20, true)
+	sound_dialog_play_block pause
+	sound_dialog_play c01_01_04griffin
+	sound_dialog_play_block pause
+	playback 0 KonokoSet
+	sleep 10
+	cinematic_stop (KERRnametagM, 16, 20)
+	#camera of Konoko
+	#cm_reset
+	cm_interpolate KonokoCam01 0
+	cm_interpolate_block KonokoCam02 360
+	cinematic_start (KONnametagM, 180, 180, 16, 3, 20, true)
+	chr_animate 0 KONOKOwatch_idle 3000
+	sleep 10
+	sound_dialog_play c01_01_05griffin
+	sound_dialog_play_block pause
+	#cinematic_start (KONnametagM, 180, 180, 16, 3, 20, true)
+	sleep 30
+	sound_dialog_play c01_01_06konoko	
+	sound_dialog_play_block pause
+	sleep 20
+	cinematic_stop (KONnametagM, 16, 20)
+	sleep 15
+	#griffin cam
+	#sleep 30
+	cm_interpolate GriffinCam 0
+	sleep 30
+	sound_dialog_play c01_01_07griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c01_01_08shinatama
+	cinematic_start (SHINnametagM, 180, 180, 16, 3, 20, true)		
+	sound_dialog_play_block pause
+	cinematic_stop (SHINnametagM, 16, 20)
+	#office cam
+	cm_interpolate OfficeCam01 0
+	cm_interpolate_block OfficeCam02 900
+	sound_dialog_play c01_01_09kerr
+	cinematic_start (KERRnametagM, 180, 180, 16, 3, 20, true)
+	sound_dialog_play_block pause
+	sound_dialog_play c01_01_10griffin
+	sound_dialog_play_block pause
+	#cinematic_stop (KERRnametagM, 16, 20)
+	cinematic_stop (GRIFnametag, 15, 20)
+	sleep 60
+	#KerrCam
+	cm_interpolate KerrCam 0
+	#cinematic_start (KERRnametagM, 180, 180, 16, 3, 20, true)
+	sleep 40
+	sound_dialog_play c01_01_11kerr
+	sound_dialog_play_block pause
+	cutscene_sync on
+	sleep 40
+	cinematic_stop (KERRnametagM, 16, 20)
+	cm_anim both Cam4
+	cutscene_sync mark
+	chr_envanim 0 KonBipedBox02 norotation
+	chr_animate 0 KONOKOlev1_intro
+	fork jumping_sounds
+	env_anim 20 20
+	sleep f180
+	sound_ambient_start c00_20_07window
+	sleep f154
+	playback 0 SwingKonokoSet
+	# hit on the floor
+	sound_impulse_play kon_land_con
+	sleep 30
+	cm_reset
+	sleep f30
+#	end_cutscene
+	letterbox 0
+	chr_full_health 0
+	give_powerup ammo
+	give_powerup ammo
+	give_powerup ammo
+	chr_delete griffin
+	chr_delete kerr
+	s1
+	yhealth
+}
+
+func void chung_music_start(void)
+{
+	sound_music_start atm_low1 0.7
+}
+
+# we stop this music when we spawn the lsi striker (a tad after actually)
+func void chung_music_stop(void)
+{
+	sound_music_stop atm_low1
+}
+
+
+func void
+Chung(
+	void)
+{
+	begin_cutscene
+
+	chung_music_start
+
+	sleep 30
+	cm_jello 1
+	sound_dialog_play_block pause
+	sound_dialog_play c01_02_01konoko
+	sound_dialog_play_block pause
+	sleep 60
+	chr_animate 0 KONOKOwatch_start 60
+	sleep 40
+	cinematic_start (KONnametag, 180, 180, 15, 1, 20, false)
+	cinematic_start (GRIFnametagM, 180, 180, 16, 3, 20, true)
+	sleep 19
+	chr_animate 0 KONOKOwatch_idle 3000
+	sound_dialog_play c01_02_02konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c01_02_03griffin
+	sound_dialog_play_block pause
+	sleep 30
+	sound_dialog_play c01_02_04konoko
+	sound_dialog_play_block pause
+	sleep 60
+	sound_dialog_play c01_02_05griffin
+	sound_dialog_play_block pause
+	chr_animate 0 KONOKOwatch_stop
+	cinematic_stop (KONnametag, 15,20)
+	cinematic_stop (GRIFnametagM, 16,20)
+	sleep 15
+	cm_reset
+	end_cutscene
+	trigvolume_enable gotLSI_tv 1
+	target_set(1,0)
+	input 1
+}
+
+func void
+outro(
+	void)
+{
+	chr_delete WH_Thug_A 
+	chr_delete WH_Striker_B
+	chr_delete WH_Striker_D
+	begin_cutscene
+	#forklift raises into position
+	obj_create 101 109
+	env_show 101 0
+	env_show 102 0
+	env_show 103 0
+	env_show 104 0
+	env_show 105 0
+	env_show 106 0
+	env_show 107 0
+	env_show 108 0
+	env_show 109 0
+	env_anim 101 109
+	cm_anim both OutroCam01
+	cutscene_sync mark
+	sound_ambient_start c00_38_24_forklifta
+	sound_ambient_start c00_38_24_truck
+	playback 0 OutroKonokoWalk
+	cm_wait
+	#Konoko enters booth
+	cm_anim both OutroCam02
+	chr_envanim 0 OutroKonokoBox01 norotation
+	chr_animate 0 KONOKOlev1_Outro1
+	cm_wait
+	#Forklift starts down
+	cm_anim both OutroCam03
+	chr_envanim 0 OutroKonokoBox02
+	chr_animate 0 KONOKOlev1_Outro2 770
+	env_setanim 101 TwoForkLift01
+	env_setanim 102 TwoForkLift02
+	env_setanim 103 TwoForkLift03
+	env_setanim 104 TwoForkLift04
+	env_setanim 105 TwoForkLift05
+	env_setanim 106 TwoForkLift06
+	env_setanim 107 TwoForkLift07
+	env_setanim 108 TwoForkLift08
+	env_setanim 109 TwoForkLift09
+	env_show 201 0
+	env_show 202 0
+	env_show 203 0
+	env_show 204 0
+	env_show 205 0
+	env_show 206 0
+	env_show 207 0
+	obj_create 201 207
+	env_anim 201 207
+	cutscene_sync mark
+	sound_ambient_start c00_38_24_forkliftb
+	cm_anim_block both OutroCam04
+	cm_anim_block both OutroCam05
+	cutscene_sync mark
+	sound_ambient_start c00_52_13_crash_doors
+	cm_anim_block both OutroCam06
+	cm_wait
+	door_unlock 48
+	particle bigdoor_locklight02 do start
+	ai2_spawn OutroTCTF01
+	ai2_spawn OutroTCTF02
+	ai2_spawn OutroTCTF03
+	sleep 21
+	playback 0 OutroKonokoWalk
+	ai2_setmovementmode OutroTCTF01 run
+	ai2_setmovementmode OutroTCTF02 run
+	ai2_setmovementmode OutroTCTF03 run
+	cm_interpolate OutroCam07 0
+	cm_interpolate_block OutroCam08 240
+	playback OutroTCTF01 OutroTCTF01
+	playback OutroTCTF02 OutroTCTF02
+	playback OutroTCTF03 OutroTCTF03
+	sleep 230
+	playback 0 OutroKonokoJump
+	sleep 120
+	cm_interpolate OutroCam09 0
+	sleep 120
+	cm_reset
+	cm_orbit .1
+	chr_animate 0 KONOKOwatch_start 60
+	sleep 40
+	cinematic_start (KONnametag, 180, 180, 15, 1, 20, false)
+	cinematic_start (GRIFnametagM, 180, 180, 16, 3, 20, true)
+	sleep 19
+	chr_animate 0 KONOKOwatch_idle 3000
+	sound_dialog_play c01_03_01konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c01_03_02griffin
+	sound_dialog_play_block pause
+	ai2_spawn griffin
+	playback griffin GriffinSet
+	sound_dialog_play c01_03_03konoko
+	sound_dialog_play_block pause
+	#griffin Cam
+	cm_interpolate GriffinCam 0
+	cm_interpolate_block GriffinCam01 500
+	sound_dialog_play c01_03_04griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c01_03_05konoko
+	sound_dialog_play_block pause
+	cinematic_stop (KONnametag, 15, 20)
+	sleep 20
+	sound_dialog_play c01_03_06shinatama
+	cinematic_start (SHINtalking, 180, 180, 15, 1, 20, false)
+	sound_dialog_play_block pause
+	cinematic_stop (SHINtalking, 15, 20)
+	sleep 20
+	#konoko camera
+	chr_animate 0 KONOKOwatch_idle 3000
+	cm_reset
+	sleep 20
+	sound_dialog_play c01_03_07griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c01_03_08konoko
+	cinematic_start (KONnametag, 180, 180, 15, 1, 20, false)
+	sound_dialog_play_block pause
+	sleep 15
+	chr_animate 0 KONOKOwatch_stop
+	cinematic_stop (KONnametag, 15,20)
+	cinematic_stop (GRIFnametagM, 16,20)
+	fade_out 0 0 0 120
+	sleep 120
+	win
+}
+
+func void
+camcontrol(
+	void)
+{
+	cm_anim both OutroCam03
+	cm_anim both OutroCam04
+	cm_anim both OutroCam05
+	cm_anim both OutroCam06
+	cm_wait
+	end_cutscene
+}
+
+func void
+OutroLose(
+	void)
+{
+	begin_cutscene weapon
+	ai2_spawn LoseTCTF01
+	ai2_spawn LoseTCTF02
+	ai2_spawn LoseTCTF03
+	sleep f30
+	fade_out 0 0 0 15
+	door_unlock 48
+	particle bigdoor_locklight02 do start
+	sleep f15
+	playback 0 OutroLoseKonoko
+	ai2_setmovementmode LoseTCTF01 run
+	ai2_setmovementmode LoseTCTF02 run
+	ai2_setmovementmode LoseTCTF03 run
+	playback LoseTCTF01 OutroLoseTCTF01
+	playback LoseTCTF02 OutroLoseTCTF02
+	playback LoseTCTF03 OutroLoseTCTF03
+	sleep f25
+	fade_in 20
+	##show tctf guys stormin the place
+	cm_interpolate OutroLoseCam01 0
+	cm_interpolate_block OutroLoseCam011 120
+	sleep f150
+	##show and Hide truck stuff
+	env_show 201 0
+	env_show 202 0
+	env_show 203 0
+	env_show 204 0
+	env_show 205 0
+	env_show 206 0
+	env_show 207 0
+	obj_create 201 207
+	##Truck starts up
+	env_setanim 201 Losetruckwheel01
+	env_setanim 202 Losetruckwheel02
+	env_setanim 203 Losetruckwheel03
+	env_setanim 204 Losetruckwheel04
+	env_setanim 205 Losetruckwheel05
+	env_setanim 206 Losetruckback
+	env_setanim 207 Losetruckcab
+	cm_anim both OutroLoseCam02
+	cutscene_sync mark
+	sound_ambient_start truckleave
+	###Truck leaves
+	cm_anim_block both OutroLoseCam03
+	playback LoseTCTF01 OutroLoseRoll
+	playback LoseTCTF02 OutroLoseDie
+	playback LoseTCTF03 OutroLoseDodge
+	sleep f20
+	cutscene_sync mark
+	sound_ambient_start gar_dr_up
+	###
+	sleep f105
+	chr_set_health LoseTCTF02 0
+	#door_jam 48
+	sleep f105
+	cutscene_sync mark
+	sound_ambient_start gar_dr_down
+	cm_wait
+	sleep f30
+	fade_out 0 0 0 90
+	sleep f90
+	lose
+}
+	
+
+
+
+
+
Index: AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_level_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_level_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_level_scripts.bsl	(revision 313)
@@ -0,0 +1,949 @@
+# warehouse_level_scripts.bsl
+#
+# LEVEL LOGIC
+#
+########################### START & SAVE ##############################
+var int outro_has_started = 0;
+var int count_alarm;
+var int count_end_striker = 0;
+var int count_end_console = 0;
+var int td;
+var int ns;
+var int in_t64;
+var int d6;
+var int ul5;
+# music #
+
+func void music_train1(void)
+{
+	sound_music_start atm_gr06 0
+	sound_music_volume atm_gr06 0.7 3.0
+#	stopped by moving into combat rooms
+}
+
+func void music_train2(void)
+{
+	sound_music_start atm_ft68 0
+	sound_music_volume atm_ft68 0.75 3.0
+#	stopped by moving into firing range
+}
+
+func void music_train3(void)
+{
+	sound_music_start mus_amasian 0
+	sound_music_volume mus_amasian 0.75 3.0
+#	stopped by using last review console
+}
+
+func void music_firstfight(void)
+{
+	sound_music_start mus_ambgrv1 0
+	sound_music_volume mus_ambgrv1 0.75 3.0
+#	stopped by intro_enemies thug die or hurt scripts
+}
+
+func void music_timer(void)
+{
+	sound_music_start mus_chase 0
+	sound_music_volume mus_chase 0.75 3.0
+#	stopped in end_console or end_striker
+}
+
+func void music_stop(void)
+{
+	dprint STOP_THE_MUSIC
+	sound_music_volume atm_gr06 0.0 2.0
+	sound_music_stop atm_gr06
+	sound_music_volume atm_ft68 0.0 2.0
+	sound_music_stop atm_ft68
+	sound_music_volume mus_amasian 0.0 2.0
+	sound_music_stop mus_amasian
+	sound_music_volume mus_ambgrv1 0.0 2.0
+	sound_music_stop mus_ambgrv1
+	sound_music_volume mus_chase 0.0 3.0
+	sound_music_stop mus_chase
+}
+
+func void level_start(string ai_name)
+{
+# These functions are used when the game is restored.
+	
+	trigvolume_enable(intro_enemies_tv, 0);
+	trigvolume_enable(setup_bay3_tv, 0);
+	trigvolume_enable gotLSI_tv 0
+	trigvolume_enable trigger_volume_06 0
+	particle bigdoor_locklight02 do start
+
+	my_save_point = save_point;
+
+	if (my_save_point eq 0)
+	{
+		can_train_movement=1;
+		dprint SAVE_POINT_0	
+#		USE THIS FUNC TO SET UP TRAINING SEQUENCE AGAIN
+		splash_screen training_splash_screen
+		dprint hello
+	}
+
+	if (my_save_point eq 1)
+	{
+# this is a built in save point for 
+		can_train_movement=0;
+#		objective_set(1)
+		door_lock(15);
+		door_lock(16);
+		particle(lock1_locklight01, do, stop);
+		restore_game
+		playback 0 SwingKonokoSet
+		target_set(1,0.0)
+		dprint RESTORE_SAVE_Point_1
+		splash_screen warehouse_splash_screen
+		swing_cutscene
+	}
+
+	if (my_save_point eq 2)
+	{
+		can_train_movement=0;
+#		objective_set(1)
+		door_lock(15);
+		door_lock(16);
+		particle(lock1_locklight01, do, stop);
+		restore_game
+		ai2_spawn A_t48
+		playback 0 SwingKonokoSet
+		target_set(1,0.0)
+		dprint RESTORE_SAVE_Point_2_begin
+		splash_screen warehouse_splash_screen
+		cm_reset
+		sleep 30
+		chr_forceholster 0 0
+	}
+
+	if (my_save_point eq 3)
+	{
+		dprint RESTORE_SAVE_POINT_3
+		can_train_movement=0;
+		trigvolume_enable trigger_volume_03 0
+		target_set(7053, 15.0)
+		door_lock 16
+		ai2_spawn Mid_Thug_2
+		ai2_spawn Mid_Thug_1
+		restore_game
+		objective_set 2 silent
+		splash_screen warehouse_splash_screen
+	}
+
+	if (my_save_point eq 4)
+	{
+		dprint RESTORE_SAVE_POINT_4
+		can_train_movement=0;
+		door_lock 65
+		trigvolume_enable trigger_volume_68 0
+		target_set(7054, 30.0)
+	#	spawn_top	
+		restore_game
+		objective_set 2 silent
+		splash_screen warehouse_splash_screen
+	}
+
+	if (my_save_point eq 5)
+	{
+		dprint RESTORE_SAVE_POINT_5
+		can_train_movement=0;
+		door_lock 48
+		particle bigdoor_locklight02 do stop
+		ai2_spawn WH_Thug_A 
+		ai2_spawn WH_Striker_B
+		ai2_spawn WH_Striker_C
+		ai2_spawn WH_Striker_D
+		ai2_dopath WH_Thug_A WH_Thug_A
+		ai2_dopath WH_Striker_B WH_Striker_B
+		ai2_dopath WH_Striker_D WH_Striker_D
+		ai2_setjobstate WH_Thug_A 
+		ai2_setjobstate WH_Striker_B
+		ai2_setjobstate WH_Striker_D
+		chr_teleport WH_Striker_D 95
+		trigvolume_enable tv78 0
+		trigvolume_enable mid_warehouse_target 0
+		restore_game
+		splash_screen warehouse_splash_screen
+		sleep 7
+		train_timer
+	}
+}
+
+func void unholstergun(void)
+{
+	sleep 30
+	chr_forceholster 0 0 
+}
+
+# This is an example of a save game console.
+
+func void s1(string player_name)
+{
+	dprint saveit_1
+
+	if (my_save_point ne 2)
+	{
+		save_game 2 autosave
+	}
+}
+
+func void s2(string player_name)
+{
+	dprint saveit_2
+
+	if (my_save_point ne 3)
+	{
+		save_game 3 autosave
+	}
+}
+
+func void s3(string player_name)
+{
+	dprint saveit_3
+
+	if (my_save_point ne 4)
+	{
+		save_game 4 autosave
+	}
+}
+
+func void s4(string player_name)
+{
+	dprint saveit_4
+
+	if (my_save_point ne 5)
+	{
+		save_game 5 autosave
+	}
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+
+func void unlock1(string ai_name)
+{
+	dprint unlock1
+	target_set(33, 15.0)
+
+	door_unlock 15
+	door_unlock 16
+
+	input 0
+	cm_interpolate lock1 0
+	sleep 60
+	particle lock1_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+	sleep 120
+	ai2_spawn Bay1_Thug_1
+	trigvolume_enable intro_enemies_tv 1
+	trigvolume_enable trigger_volume_77 0
+}
+
+func void unlock2(string ai_name)
+{
+	dprint unlock2
+
+	music_stop
+
+	target_set(84, 15.0)
+
+	door_unlock 24
+	door_unlock 26
+
+	input 0
+	cm_interpolate lock2 0
+	sleep 60
+	particle lock2_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+	trigvolume_enable(setup_bay3_tv, 1);
+}
+
+func void setup_bay3(string ai_name)
+{
+	dprint setup_bay_3
+	target_set(84, 15.0)
+#	particle lock3_locklight01 do start
+}
+
+func void checkLSI(string ai_name)
+{
+	var int has_lsi = chr_has_lsi(0);
+
+	dprint checkLSI
+	trigvolume_enable gotLSI_tv 0
+
+	if (has_lsi eq 1)
+	{
+		input 0
+		sleep 25
+		chr_animate 0 KONOKOwatch_start 60 12
+		sleep 59
+		chr_animate 0 KONOKOwatch_idle 15
+		text_console level_1e
+		chr_animate 0 KONOKOwatch_stop
+		sleep 15
+		input 1
+		sleep 15
+		door_unlock 37
+		particle lock3_locklight01 do start
+		ai2_spawn Ambush_Striker_1
+		ai2_spawn Mid_Thug_1
+		ai2_spawn Mid_Thug_2
+		target_set(7053,30.0)
+		chung_music_stop
+		objective_set(2)
+		sound_dialog_play_block c00_01_21shinatama
+		sound_dialog_play_block pause
+	}
+
+	if (has_lsi eq 0)
+	{
+		# sleep and turn the trigger volume back on later
+		sleep 60
+		trigvolume_enable gotLSI_tv 1
+	}
+}
+
+func void t09(string ai_name)
+{
+	target_set(62,30.0)
+}
+
+func void spawn_top(string ai_name)
+{
+ 	dprint spawn_top
+	ai2_spawn Top_Striker_1
+	ai2_spawn Top_Comguy_1
+	ai2_spawn Top_Thug_3
+	ai2_spawn Top_Thug_5
+	ai2_spawn WH_Thug_A 
+	ai2_spawn WH_Striker_B
+	ai2_spawn WH_Striker_C
+	ai2_spawn WH_Striker_D
+}
+
+func void spawn_mid2(string ai_name)
+{
+ 	dprint spawn_mid2
+	ai2_spawn Mid2_Striker_1
+	ai2_spawn Mid2_Striker_2
+	target_set(66, 15.0)
+}
+
+func void unlock4(string ai_name)
+{
+	dprint unlock4
+	target_set(7054, 15.0)
+
+	door_unlock 65
+
+	input 0
+	cm_interpolate lock4 0
+	sleep 60
+	particle lock4_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+}
+
+func void unlock5(string ai_name)
+{
+	dprint unlock5
+	target_set(72, 30.0)
+	console_deactivate 4
+	door_unlock 73
+	door_unlock 74
+	door_unlock 81
+	door_unlock 82
+	ul5 = 1;
+	input 0
+	cm_interpolate lock5 0
+	sleep 60
+	particle lock5_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+	console_deactivate 7
+}
+
+func void hurt1(string ai_name)
+{
+	dprint HURT
+	ai2_makeignoreplayer Bay4_Comguy_1 1
+	ai2_doalarm Bay4_Comguy_1 6
+	ai2_dopath Bay4_Comguy_1 Run_To_Alarm
+	ai2_setjobstate Bay4_Comguy_1
+	sleep 60
+	sound_dialog_play_block c00_01_96shinatama
+
+}
+
+func void patrolscript0001(string ai_name)
+{
+	dprint comguy_do_alarm
+	ai2_doalarm Bay4_Comguy_1 6
+}
+
+func void unlock_alarm(void)
+{
+	dprint unlock_alarm
+	door_unlock 73
+	door_unlock 74
+	door_unlock 81
+	door_unlock 82
+	ai2_dopath Alarm_Bay4_Striker_1 Alarm_Bay4_Striker_1
+	sleep 107
+	particle lock5_locklight01 do start
+	console_deactivate 7
+}
+
+func void do_alarm_sound(void)
+{
+	sound_ambient_start alarm_loop
+	sleep 900
+	sound_ambient_stop alarm_loop
+}
+
+func void alarm_trig(string ai_name)
+{
+	dprint alarm_trig
+	trigvolume_enable alarm_trigvol 0
+	target_set(72,30.0)
+	if(ul5 eq 0)
+	{
+	#watch comguy set alarm, doors initially locked
+	if(count_alarm eq 0)
+	{	
+		ai2_passive Bay4_Comguy_1 1
+		ai2_spawn Alarm_Bay4_Striker_1
+		ai2_makeignoreplayer Alarm_Bay4_Striker_1 1
+		ai2_spawn Alarm_Bay4_Striker_2
+		ai2_makeignoreplayer Alarm_Bay4_Striker_2 1
+	#	ai2_spawn Bay5_Thug_1
+		ai2_spawn Bay5_Thug_2
+		ai2_doalarm Alarm_Bay4_Striker_1 4
+		input 0
+		chr_animate Bay4_Comguy_1 COMGUYconsole 
+		fade_out 0 0 0 30
+		letterbox 1
+		sleep 30
+		cm_interpolate alarm5 0
+		fade_in
+		sleep 90
+		fade_out 0 0 0 15
+		chr_teleport Alarm_Bay4_Striker_1 7033
+		sleep 15
+		cm_interpolate alarm1 0
+		fork do_alarm_sound
+		fade_in
+		sleep 40
+		cm_interpolate alarm2 240
+		sleep 320
+		cm_interpolate alarm3 90
+		sleep 70
+		particle lock5_locklight01 do start
+		sleep 20
+		cm_interpolate alarm4 0
+		sleep 60
+		fade_out 0 0 0 60
+		sleep 60
+		ai2_passive Bay4_Comguy_1 0
+	}
+
+	#no watch comguy set alarm, doors initially locked
+	if(count_alarm eq 1)
+	{	
+		ai2_spawn Alarm_Bay4_Striker_1
+		ai2_makeignoreplayer Alarm_Bay4_Striker_1 1
+		ai2_spawn Alarm_Bay4_Striker_2
+		ai2_makeignoreplayer Alarm_Bay4_Striker_2 1
+	#	ai2_spawn Bay5_Thug_1
+		ai2_spawn Bay5_Thug_2
+		input 0
+		fade_out 0 0 0 30
+		sleep 15
+		chr_teleport Alarm_Bay4_Striker_1 7033
+		ai2_doalarm Alarm_Bay4_Striker_1 4
+		sleep 15
+		letterbox 1
+		cm_interpolate alarm1 0
+		fork do_alarm_sound
+		fade_in
+		sleep 40
+		cm_interpolate alarm2 240
+		sleep 320
+		cm_interpolate alarm3 90
+		sleep 70
+		particle lock5_locklight01 do start
+		sleep 20
+		cm_interpolate alarm4 0
+		sleep 60
+		fade_out 0 0 0 60
+		sleep 60		
+	}
+	}
+
+	#watch comguy set alarm, doors already unlocked
+	if(ul5 eq 1)
+	{
+		if(trigvolume_count (66) eq 0)
+		{
+			if(count_alarm eq 0)
+			{	
+				ai2_passive Bay4_Comguy_1 1
+				ai2_spawn Alarm_Bay4_Striker_1
+				ai2_makeignoreplayer Alarm_Bay4_Striker_1 1
+				input 0
+				chr_animate Bay4_Comguy_1 COMGUYconsole 
+				fade_out 0 0 0 30
+				letterbox 1
+				sleep 30
+				cm_interpolate alarm5 0
+				fade_in
+				sleep 90
+				fade_out 0 0 0 15
+		#		chr_teleport Alarm_Bay4_Striker_1 7033
+				sleep 15
+				cm_interpolate alarm1 0
+				fork do_alarm_sound
+				fade_in
+				sleep 90
+				fade_out 0 0 0 60
+				sleep 60	
+				ai2_passive Bay4_Comguy_1 0
+			}
+
+	#no watch comguy set alarm, doors already unlocked
+			if(count_alarm eq 1)
+			{	
+				ai2_spawn Alarm_Bay4_Striker_1
+				ai2_makeignoreplayer Alarm_Bay4_Striker_1 1
+				input 0
+				fade_out 0 0 0 30
+				sleep 7
+				chr_teleport Alarm_Bay4_Striker_1 7033
+				sleep 23
+				letterbox 1
+				cm_interpolate alarm1 0
+				fork do_alarm_sound
+				fade_in
+				sleep 90
+				fade_out 0 0 0 60
+				sleep 60
+			}
+		}
+	}
+
+	cm_reset
+	fade_in
+	letterbox 0
+	input 1
+	#sleep 15
+	ai2_makeignoreplayer Alarm_Bay4_Striker_1 0
+	ai2_makeignoreplayer Alarm_Bay4_Striker_2 0
+	ai2_makeignoreplayer Bay4_Comguy_1 0
+	ai2_dopath Bay4_Comguy_1 patrol_42
+	ai2_setjobstate Bay4_Comguy_1 
+#	ai2_attack Alarm_Bay4_Striker_1 char_0
+	ai2_attack Alarm_Bay4_Striker_2 char_0
+
+}
+
+func void set_bay6_objective(string ai_name)
+{
+	dprint set_bay6_objective
+	target_set(92, 15.0)
+
+}
+
+func void spawn_bay6_top(string ai_name)
+{
+	ai2_spawn Bay6_Striker_1
+	ai2_spawn Bay6_Neutral_1
+	ai2_spawn Bay6_Neutral_2
+	ai2_spawn guard1
+	trigvolume_enable spawn_bay6_bot_tv 0
+
+	train_neutral();
+}
+
+func void spawn_bay6_bot(string ai_name)
+{
+	ai2_spawn Bay6_Striker_1b
+	ai2_spawn Bay6_Neutral_1b
+	ai2_spawn Bay6_Neutral_2
+	ai2_spawn guard1
+	trigvolume_enable spawn_bay6_top_tv 0
+
+	train_neutral();
+}
+
+func void open_warehouse(string ai_name)
+{
+	trigvolume_enable trigger_volume_06 0
+	objective_set(3)
+	sleep 10
+	target_set(93,15.0)
+	ai2_dopath Bay6_Neutral_2 Open_Warehouse
+	ai2_setjobstate Bay6_Neutral_2
+	ai2_spawn WH_Thug_A 
+	ai2_spawn WH_Striker_B
+	ai2_spawn WH_Striker_C
+	ai2_spawn WH_Striker_D
+	particle lock7_locklight01 do start
+	door_unlock 84
+	door_unlock 85
+	door_unlock 86
+
+	ai2_spawn Final_Thug_1
+	ai2_spawn Final_Thug_2
+	ai2_spawn Final_Thug_3
+	ai2_spawn Final_Thug_5
+
+	ai2_dopath WH_Thug_A WH_Thug_A
+	ai2_dopath WH_Striker_B WH_Striker_B
+	ai2_dopath WH_Striker_D WH_Striker_D
+
+	ai2_setjobstate WH_Thug_A 
+	ai2_setjobstate WH_Striker_B
+	ai2_setjobstate WH_Striker_D
+}
+
+func void t47(string ai_name)
+{
+	ai2_spawn Bay5_Thug_1
+	ai2_spawn Bay5_Thug_2
+}
+
+func void mid_warehouse_target(string ai_name)
+{
+#	Reset Target
+	target_set(96, 15.0)
+}
+func void stair1_target(string ai_name)
+{
+#	Reset Target
+	target_set(31,15.0)
+}
+
+func void stair2_target(string ai_name)
+{
+#	Reset Target
+	target_set(81,15.0)
+}
+
+func void enable_end(string ai_name)
+{
+#	trigvolume_enable end 1
+	timer_stop
+}
+
+func void gotoconsole(string ai_name)
+{
+#	dprint Guard_A_RTAlarm
+	console_activate 9
+	sleep 7
+	ai2_doalarm Bay6_Neutral_2 9
+	sleep 180
+	trigvolume_enable trigger_volume_06 1
+}
+
+func void t06(string ai_name)
+{
+	dprint t06
+	ai2_doalarm Bay6_Neutral_2 9
+}
+
+func void t10(string ai_name)
+{
+	dprint t10
+	ai2_makeignoreplayer Bay6_Neutral_1 1
+	ai2_makeignoreplayer Bay6_Neutral_1b 1
+	ai2_dopath Bay6_Neutral_1 Bay6_Thug_1
+	ai2_dopath Bay6_Neutral_1b Bay6_Thug_1_copy
+	sleep 240
+	ai2_makeignoreplayer Bay6_Neutral_1 0
+	ai2_makeignoreplayer Bay6_Neutral_1b 0	
+}
+
+func void final_striker_attack(void)
+{
+	ai2_attack WH_Striker_C char_0
+}
+
+func void end_console(string ai_name)
+{
+	dprint end_console
+	count_end_console = 1;
+	music_stop
+	timer_stop
+
+	if (count_end_striker eq 0)
+	{
+		final_striker_attack
+	}
+
+	if (count_end_striker eq 1)
+	{
+		outro_start
+	}
+
+}
+
+func void end_striker(string ai_name)
+{
+	dprint end_striker
+	count_end_striker =  1
+	music_stop
+
+	if (count_end_console eq 1)
+	{
+		outro_start
+	}
+}
+
+# we can only start the trigger volume once
+# and only if there are no bad guys in the area
+
+func void outro_start2(void)
+{
+	dprint READY_TO_BATTLE
+	outro_has_started = 1;
+	sleep 20
+	outro
+}
+
+func void outro_start(void)
+{
+	if (outro_has_started eq 0)
+	{
+		if (trigvolume_count (76) eq 0)
+		{
+			if (trigvolume_count (70) eq 1)
+			{
+				outro_start2
+			}
+		}
+	}
+}
+
+# once every 2/3 of a second, check to see if we are in the 
+# trigger and have no badguys near us
+
+func void t70(string ai_name)
+{
+	var int count_end_both = 0;
+
+	dprint t70_END
+
+	count_end_both = count_end_both + count_end_console;
+	count_end_both = count_end_both + count_end_striker;
+
+	trigvolume_enable trigger_volume_70 0
+
+	if (count_end_console eq 1)
+	{
+		outro_start
+	}
+
+	if (outro_has_started eq 0)
+	{
+		if (count_end_console eq 1)
+		{
+			final_striker_attack
+		}
+	}
+
+	if(outro_has_started eq 0)
+	{
+		sleep 40
+		trigvolume_enable trigger_volume_70 1	
+	}
+}
+
+func void t01(string ai_name)
+{
+	dprint t01
+	ai2_spawn A_t50
+}
+
+func void compass(void)
+{
+	target_set(44, 30.0)
+	ui_flash_element compass 1
+	sound_dialog_play_block c00_01_26shinatama
+	message xincoming 130
+	sleep 60
+	input 0
+	sleep 30
+	chr_animate 0 KONOKOwatch_start 60
+	sleep 59
+	chr_animate 0 KONOKOwatch_idle 15
+	text_console level_1d
+	ui_flash_element compass 0
+	chr_animate 0 KONOKOwatch_stop
+	input 1
+	sleep 60
+	objective_set (1)
+}
+
+func void t48_dead(string ai_name)
+{
+	dprint t48dead
+	td = 1;	
+	door_unlock 108
+	if(in_t64 eq 1)
+	{
+		sleep 180
+		compass
+	}
+}
+
+func void t63(string ai_name)
+{
+	dprint t63
+#	ai2_spawn A_t47
+	ai2_spawn A_t48
+}
+
+func void t64(string ai_name)
+{
+	dprint t64
+	if(in_t64 eq 0)
+	{	
+		in_t64 = 1;
+		ai2_dopath A_t48 patrol_49
+		ai2_setjobstate A_t48
+		ai2_attack A_t48 char_0
+	}
+	if(td eq 1)
+	{
+		trigvolume_enable trigger_volume_64 0
+		compass
+	}
+}
+
+func void t65(string ai_name)
+{
+	
+	dprint t65
+	if(d6 eq 0)
+	{
+		message xdoorislocked
+		dprint door_is_locked
+	}
+}
+
+func void t65b(string ai_name)
+{
+	
+	dprint t65b
+	if(d6 eq 0)
+	{
+		message_remove xdoorislocked
+	}
+}
+func void t67(string ai_name)
+{
+	
+	dprint t67
+	chr_changeteam guard1 Syndicate
+}
+
+func void t07(string ai_name)
+{
+	
+	dprint t07
+	ai2_spawn Top_Thug_5
+	ai2_spawn WH_Striker_C
+	ai2_spawn WH_Striker_D
+}
+
+func void t69(string ai_name)
+{
+	
+	dprint t69
+	ai2_spawn Top_Striker_1
+	ai2_spawn Top_Comguy_1
+	ai2_spawn Top_Thug_3
+}
+
+func void unlock6(string ai_name)
+{
+	dprint unlock6
+	d6 = 1
+	door_unlock 6
+	particle d1_locklight01 do start
+	trigvolume_enable trigger_volume_65 1
+}
+
+func void yhealth(string ai_name)
+{
+	dprint yhealth
+	message_remove
+	lock_keys 
+	input 1
+	ui_show_element right 1
+	sound_dialog_play_block c00_01_92shinatama
+	sound_dialog_play_block pause
+	ui_flash_element health 1
+	chr_animate 0 KONOKOwatch_start 60
+	sleep 59
+	chr_animate 0 KONOKOwatch_idle 15
+	text_console level_1m
+	ui_flash_element health 0
+	chr_animate 0 KONOKOwatch_stop
+	chr_forceholster 0 0
+	lock_keys keys_all
+	end_cutscene
+	if (trigvolume_count (63) eq 1)
+	{
+		ai2_spawn A_t48
+	}
+}
+
+func void console_evidence1(string ai_name)
+{
+	text_console level_1a
+	console_reset 19
+}
+
+func void console_evidence2(string ai_name)
+{
+	text_console level_1b
+	console_reset 20
+}
+
+func void t02(string ai_name)
+{
+	dprint t02
+	sleep 60
+	if(trigvolume_count (2) eq 1)
+	{
+		dprint spawned_secret
+		ai2_spawn secret2
+		trigvolume_enable trigger_volume_01 0
+		ai2_spawn A_t50
+		ai2_dopath A_t50 patrol_secret1
+		ai2_setjobstate A_t50
+	}
+}
+
+func void t05(string ai_name)
+{
+	dprint t05
+	ai2_spawn ambush_striker
+}
Index: AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_main.bsl	(revision 313)
@@ -0,0 +1,18 @@
+#
+# warehouse_main.bsl
+#
+
+var int my_save_point;
+
+func void main(void)
+{
+	env_show 2010 0
+	gl_fog_blue=.15
+	gl_fog_red=.15
+	gl_fog_green=.15
+	gl_fog_start=.99
+	gs_farclipplane_set 5000
+	obj_create 20 20
+	level_start
+
+}
Index: AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_particles.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_particles.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_particles.bsl	(revision 313)
@@ -0,0 +1,71 @@
+#
+# warehouse_particle.bsl
+#
+
+
+
+func void rat1(void)
+{
+	particle rat1 pulse
+}
+func void rat2(void)
+{
+	particle rat2 pulse
+}
+func void rat3(void)
+{
+	particle rat3 pulse
+}
+func void rat4(void)
+{
+	particle rat4 pulse
+}
+func void rat5(void)
+{
+	particle rat5 pulse
+}
+func void rat6(void)
+{
+	particle rat6 pulse
+}
+func void rat7(void)
+{
+	particle rat7 pulse
+}
+func void bug1(void)
+{
+	particle bug1 pulse
+}
+func void bug2(void)
+{
+	particle bug2 pulse
+}
+func void bug3(void)
+{
+	particle bug3 pulse
+}
+func void bug4(void)
+{
+	particle bug4 pulse
+}
+func void bug5(void)
+{
+	particle bug5 pulse
+}
+func void bug6(void)
+{
+	particle bug6 pulse
+}
+func void bug7(void)
+{
+	particle bug7 pulse
+}
+func void bug8(void)
+{
+	particle bug8 pulse
+}
+func void bug0(void)
+{
+	particle bug0 pulse
+}
+
Index: AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_train2.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_train2.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_train2.bsl	(revision 313)
@@ -0,0 +1,960 @@
+func void cheater(void)
+{
+	invincible=1
+	omnipotent=1
+	lock_keys keys_all
+	chr_teleport 0 7023
+}
+###################################
+# variables used in train2 scipts #
+###################################
+
+#used to see if PPK combo was successful
+var int combo_did;
+
+#used to determine when to activate or deactivate blocking drone, current script comments out the usefulness of this variable
+var int count_block;
+
+#determines if reload in ballistics or cell
+var int reload=0;
+
+#makes sure reloading cells doesn't play before player has even picked up the rifle
+var int droid_active;
+
+#sees if you already reloaded ballistics ammo before the system had a chance to prompt you to do so
+var int already_reloaded;
+
+#sees if you already reloaded cell ammo before system prompted you to do so.
+var int already_reloaded2;
+
+#counts number of reload prompts necessary, if you reloaded more than one time, you lose rating points
+var int had_to_reload;
+
+#determines when inside the target shooting function
+var int inside_target_function;
+
+#determines when inside ammo reload function
+var int inside_ammo_function = 0;
+
+#determines when not to display block droid message
+var int block_off;
+
+################################
+# fight training scripts below #
+################################
+
+#########################
+# punch and kick script #
+#########################
+func void train_fighting(string ai_name)
+{
+	how_far_along = 4;
+	music_stop
+	particle obj3 kill
+	particle obj4 kill	
+	trig_deactivate 1
+	trig_deactivate 2
+	trig_deactivate 3
+	message_remove c01_50_23
+	message_remove jump_encourage
+	message_remove jump_encourage2
+	sleep 60
+	sound_dialog_play_interrupt c00_01_64shinatama
+	message_remove
+	message begin_fight 240
+	sleep 240
+#	PUNCH-KICK
+	lock_keys keys_attack
+	message xpunch
+	chr_wait_animtype 0 punch
+	sleep 60
+	message_remove xpunch
+	sleep 60
+	message xkick
+	chr_wait_animtype 0 kick
+	sleep 60
+	message_remove xkick
+	sleep 60
+
+	if (how_far_along eq 4)
+	{
+		#throw two punches
+		sound_dialog_play_block c00_01_65shinatama
+		message punch
+		chr_wait_animtype 0 punch2
+		message_remove punch
+		sleep 60
+		message c01_50_27 180
+		sound_dialog_play_interrupt c00_01_66shinatama
+		sound_dialog_play_block pause
+		sleep 40
+	}
+
+	if (how_far_along eq 4)
+	{
+#		more combo
+		sound_dialog_play_block c00_01_67shinatama
+		sound_dialog_play_block pause
+		sleep 60
+	}
+
+	if (how_far_along eq 4)
+	{
+#		FIRST COMBO
+		message c01_50_29
+		fork combo_wait
+		chr_wait_animtype 0 ppk
+		combo_did = 1;
+		sleep 60
+		message_remove c01_50_29
+		message_remove c01_50_29b
+		sleep 60
+		sound_dialog_play_interrupt c00_01_07shinatama
+		message xppk 180
+		sleep 180
+	}
+	if(combo_did eq 1)
+	{
+		if (how_far_along eq 4)
+		{
+#		try linking for more combos
+		sound_dialog_play_block c00_01_69shinatama
+		sound_dialog_play_block pause
+		sleep 240
+		}
+
+		if (how_far_along eq 4)
+		{
+#		you're now ready to train with a sparring partner
+		sound_dialog_play_block c00_01_70shinatama
+		sound_dialog_play_block pause
+		sleep 30
+		}
+		if (how_far_along eq 4)
+		{
+#		proceed to the next room
+		sound_dialog_play_block c00_01_71shinatama
+		message xspar2
+		ai2_spawn dum_hit_flash
+		chr_lock_active dum_hit_flash
+		chr_death_lock dum_hit_flash 1
+		door_unlock 99
+		particle door2_locklight02 do start
+		}
+	}
+}
+
+func void combo_wait(string ai_name)
+{
+	sleep 600
+	if (combo_did eq 0)
+	{
+		dprint rating
+		rating =  rating + 1
+		rating
+		message_remove c01_50_29
+		sound_dialog_play_block c00_01_68shinatama
+		sleep 60
+	}
+	if (combo_did eq 0)
+	{
+		message c01_50_29b 240
+		sleep 240
+	}
+	if (combo_did eq 0)
+	{
+		message c01_50_29
+	}
+
+#	if(combo_did eq 0)
+#	{
+#		if (how_far_along eq 4)
+#		{
+#			try linking for more combos
+#			sound_dialog_play_block c00_01_69shinatama
+#			sound_dialog_play_block pause
+#			sleep 240
+#		}
+#
+#		if (how_far_along eq 4)
+#		{
+#			you're now ready to train with a sparring partner
+#			sound_dialog_play_block c00_01_70shinatama
+#			sound_dialog_play_block pause
+#			sleep 30
+#		}
+#		if (how_far_along eq 4)
+#		{
+#			proceed to the next room
+#			sound_dialog_play_block c00_01_71shinatama
+#			message xspar2
+#			ai2_spawn dum_hit_flash
+#			chr_lock_active dum_hit_flash
+#			chr_death_lock dum_hit_flash 1
+#			door_unlock 99
+#			particle door2_locklight02 do start
+#		}
+#	}
+}
+
+##################################
+# train player about hit flashes #
+##################################
+func void train_hit_flash(string ai_name)
+{
+	particle steam stop
+	music_train2
+	how_far_along = 6;
+	message_remove xspar2
+	sleep 60
+#	try hitting this dummy
+	sound_dialog_play_block c00_01_77shinatama
+	message start_hit
+	ai2_makeignoreplayer dum_hit_flash 1
+}
+
+func void hurt_dummy1(string ai_name)
+{
+	message_remove start_hit
+	sleep 60
+	door_lock 99
+	particle door2_locklight02 do stop
+#	dynamic hit flashes
+	message c01_50_35 300
+	sleep 240
+	ai2_dopath dum_hit_flash patrol_dum_hit_flash
+	ai2_setjobstate dum_hit_flash
+	sleep 60
+#	more dynamic hit flashes blue
+	message blueflash 300
+	sleep 240
+	ai2_dopath dum_hit_flash patrol_dum_hit_flash
+	ai2_setjobstate dum_hit_flash
+	sleep 60
+	message c01_50_37 300
+	sleep 240
+	ai2_dopath dum_hit_flash patrol_dum_hit_flash
+	ai2_setjobstate dum_hit_flash
+	sleep 60
+#	more dynamic hit flashes
+	message c01_50_38 300
+	sleep 240
+	ai2_dopath dum_hit_flash patrol_dum_hit_flash
+	ai2_setjobstate dum_hit_flash
+#	move on to the next room to learn how to perform the most dangerous attacks.
+	sleep 60
+	sound_dialog_play_block c00_01_78shinatama
+	message goto_throw
+	sleep 60
+	door_unlock 100
+	particle door3_locklight02 do start
+	ai2_spawn dum_train_throw
+	chr_lock_active dum_train_throw
+	chr_death_lock dum_train_throw 1
+	ai2_makeignoreplayer dum_train_throw 1
+}
+
+###################################
+# train player to throw opponents #
+###################################
+func void lockthrow(void)
+{
+	door_lock 100
+	particle door3_locklight02 do stop
+}
+
+func void train_throw(string ai_name)
+{
+	how_far_along = 7;
+	message_remove goto_throw
+	sleep 60
+	if (how_far_along eq 7)
+	{
+#		FIRST THROW
+		sound_dialog_play_block c00_01_79shinatama
+		message c01_50_41
+		chr_wait_animtype 0 throw_forward_punch throw_forward_kick run_throw_forward_punch run_throw_forward_kick 
+		message_remove c01_50_41
+		sleep 60
+	}
+
+	if (how_far_along eq 7)
+	{
+#		more throws
+		sound_dialog_play_block c00_01_80shinatama
+		ai2_dopath dum_train_throw patrol_train_throw2
+		ai2_setjobstate dum_train_throw
+		sleep 180
+		ai2_dopath dum_train_throw patrol_train_throw2
+		ai2_setjobstate dum_train_throw
+		sleep 180
+		message xthrow1 360
+		ai2_dopath dum_train_throw patrol_train_throw2
+		ai2_setjobstate dum_train_throw
+		sleep 180
+		ai2_dopath dum_train_throw patrol_train_throw2
+		ai2_setjobstate dum_train_throw
+		sleep 180
+		ai2_dopath dum_train_throw patrol_train_throw2
+		ai2_setjobstate dum_train_throw
+		sleep 180
+		message xthrow2 360
+		ai2_dopath dum_train_throw patrol_train_throw2
+		ai2_setjobstate dum_train_throw
+		sleep 180
+		ai2_dopath dum_train_throw patrol_train_throw2
+		ai2_setjobstate dum_train_throw
+		sleep 180
+		ai2_dopath dum_train_throw patrol_train_throw2
+		ai2_setjobstate dum_train_throw
+		sleep 180
+		ai2_dopath dum_train_throw patrol_train_throw2
+		ai2_setjobstate dum_train_throw
+	}
+
+	if (how_far_along eq 7)
+	{
+#		Proceed to the next room and try blocking the training dummy'sleep 240 attacks.
+		message goto_block
+		sleep 60
+		door_unlock 101
+		particle door4_locklight02 do start
+		particle door4b_locklight02 do start
+		ai2_spawn dum_train_block
+		ai2_makeignoreplayer dum_train_block 1
+		chr_invincible char_0 1
+	}
+
+}
+
+###############################
+# train player to block blows #
+###############################
+func void train_block(string ai_name)
+{
+#introduce blocking
+	how_far_along = 5;
+	message_remove goto_block
+#	dummy attack
+	sound_dialog_play_block c00_01_72shinatama
+	sound_dialog_play_block pause
+	sound_dialog_play_block c00_01_73shinatama
+	if(count_block eq 0)
+	{
+		message c01_50_33
+	}
+}
+
+func void train_block2(string ai_name)
+{	
+	ai2_makeignoreplayer dum_train_block 0
+	ai2_dopath dum_train_block patrol_56b
+	ai2_setjobstate dum_train_block
+	message_remove c01_50_33
+	if(count_block eq 0)
+	{
+		count_block = 1
+		door_lock 101
+		door_close 101
+		particle door4_locklight02 do stop
+		chr_delete dum_train_throw
+		chr_delete dum_hit_flash
+		chr_delete demo1
+		chr_delete demo2
+		chr_delete demo3
+		if (how_far_along eq 5)
+		{
+#			more blocking
+			sleep 60
+			message c01_50_32 300
+			sound_dialog_play_block c00_01_74shinatama
+			sound_dialog_play_pause 
+			sleep 30
+			sound_dialog_play_block c00_01_75shinatama
+			message xblocking2 300
+			sound_dialog_play_pause 
+			sleep 30
+			sound_dialog_play_block c00_01_76shinatama
+		}
+		sleep 120
+	#	message_remove xdronedeactive
+		ai2_makeignoreplayer dum_train_block 1
+		ai2_dopath dum_train_block patrol_56b
+		ai2_setjobstate dum_train_block 
+		sound_dialog_play_block c00_01_83shinatama
+		sound_dialog_play_block pause
+		door_unlock 102
+		particle door5_locklight02 do start
+		message goto_shoot
+		chr_inv_reset 0
+		music_stop
+		sleep 60
+		dprint spawn_shoot
+		ai2_spawn dum_train_shoot
+		ai2_spawn dum_train_shoot2
+		ai2_passive dum_train_shoot 1
+		ai2_passive dum_train_shoot2 1
+		chr_invincible dum_train_shoot 1
+		chr_invincible dum_train_shoot2 1
+		chr_invincible char_0 0
+		console_deactivate 12
+		trigvolume_enable tv75 0
+		trigvolume_enable tv74 0
+	}
+}
+
+func void disable_tv46(void)
+{
+	message_remove c01_50_33
+	trigvolume_enable trigger_volume_46 0
+}
+
+##################################
+# put drones back on their spots #
+##################################
+func void flash_path(string ai_name)
+{
+	sleep 90
+	ai2_dopath dum_hit_flash patrol_dum_hit_flash
+}
+
+func void throw_path(string ai_name)
+{
+	sleep 90
+	ai2_dopath dum_train_throw patrol_train_throw2
+}
+
+func void block_path(string ai_name)
+{
+	if(block_off eq 0)
+	{
+		block_off = 1;
+		message xdronedeactive 180
+	}
+	ai2_makeignoreplayer dum_train_block 1
+	ai2_dopath dum_train_block patrol_56
+	sleep 180
+	block_off = 0;
+}
+
+func void block_path2(string ai_name)
+{
+
+	ai2_makeignoreplayer dum_train_block 1
+	ai2_dopath dum_train_block patrol_56
+}
+######################################################
+# regenerate first two training dummies as necessary #
+######################################################
+
+func void regen1(string ai_name)
+{
+	dprint regen1
+	message_remove blueflash
+	message_remove c01_50_37
+	message_remove c01_50_38
+	sleep 60
+	message xregen1 180
+	sleep 180
+	chr_set_health dum_hit_flash 50
+	ai2_dopath dum_hit_flash patrol_dum_hit_flash
+	ai2_setjobstate dum_hit_flash
+}
+
+func void regen2(string ai_name)
+{
+	dprint regen2
+	sleep 60
+	message xregen1 180
+	sleep 180
+	chr_set_health dum_train_throw 50
+	ai2_dopath dum_hit_flash patrol_train_throw2
+	ai2_setjobstate dum_train_throw
+}
+
+#########################
+# train player to shoot #
+#########################
+func void train_shoot(string ai_name)
+{
+#	message_remove xdroneactive
+	message_remove xdronedeactive
+	particle g_tap1 create
+	sleep 7
+	weapon_spawn w1_tap 7042
+	wp_disable_fade=1
+	how_far_along = 8;
+	message_remove goto_shoot
+	sleep 60
+	ai2_dopath dum_train_throw patrol_train_throw
+	ai2_setjobstate dum_train_throw
+
+	if (how_far_along eq 8)
+	{
+	lock_keys keys_inventory
+	lock_keys keys_reload
+#	approach weapons
+	sound_dialog_play_block c00_01_84shinatama
+	sound_dialog_play_pause 
+	chr_wait_animtype char_0 Pickup_Pistol Pickup_Pistol_Mid 
+	door_lock 102
+	particle door5_locklight02 do stop
+	trigvolume_enable tv75 1
+	trigvolume_enable tv74 1
+	ui_show_element left 1
+	sleep 60
+	message c01_50_54
+#	hit targets
+	sound_dialog_play_block c00_01_85shinatama
+	chr_wait_animtype char_0 Autopistol_Recoil
+	sleep 120
+	message_remove c01_50_54
+	sleep 60
+	message c01_50_53 300
+	sleep 300
+	}
+}
+
+func void enter_ammo_function(void)
+{
+   dprint enter_ammo_function
+   inside_ammo_function = 1;
+}
+
+func void exit_ammo_function(void)
+{
+   dprint exit_ammo_function
+   inside_ammo_function = 0;
+}
+
+func void need_ammo(string ai_name)
+{
+   trigvolume_enable tv74 0
+
+   sleep 67
+   var int empty_weapon = chr_has_empty_weapon(char_0);
+
+   dprint trying_ammo_function
+
+   if (inside_ammo_function eq 0)
+   {
+      dprint doing_ammo_function
+      enter_ammo_function();
+
+	   if(empty_weapon eq 1)
+	   {
+		sleep 15
+		if(reload eq 0)
+		{
+			message_remove xkeepshoot
+			already_reloaded = 0;
+			sound_dialog_play_block c00_01_87shinatama
+			message c01_50_61
+		#	generate powerup
+			particle g_tap1 create
+			sleep 7
+			powerup_spawn ammo 7042
+			particle g_tap2 create
+			sleep 7
+			powerup_spawn ammo 7043
+			chr_wait_animtype char_0 Pickup_Object_Mid Pickup_Object
+			fork remove_reload_message
+		#	sleep 60
+			message_remove c01_50_61
+			sleep 90
+			if(already_reloaded eq 0)
+			{
+				message xreload
+				chr_wait_animtype char_0 reload_pistol
+				increase_rating()
+				message_remove xreload
+				sleep 90
+			}
+			message xkeepshoot
+		}
+		if(reload eq 1)
+		{
+			if(droid_active eq 1)
+			{
+				message c01_50_62
+			#	generate powerup
+				particle g_phr1 create
+				sleep 7
+				powerup_spawn cell 7044
+				particle g_phr2 create
+				sleep 7
+				powerup_spawn cell 7045
+				chr_wait_animtype char_0 Pickup_Object_Mid Pickup_Object
+			#	sleep 60
+				message_remove c01_50_62
+				fork remove_reload_message2
+				if(already_reloaded2 eq 0)
+				{
+					sleep 90
+					message xreload
+					chr_wait_animtype char_0 reload_rifle
+					dprint rating
+					increase_rating()
+					message_remove xreload
+				}
+			}
+		}
+	   }
+
+	   exit_ammo_function();
+	}
+
+   sleep 60
+   trigvolume_enable tv74 1
+}
+
+func void increase_rating(void)
+{
+	dprint rating
+	if(had_to_reload ne 0)
+	{
+
+		rating = rating + 1;
+	}
+	had_to_reload = had_to_reload + 1;
+}
+
+func void remove_reload_message(void)
+{
+	chr_wait_animtype char_0 reload_pistol
+	already_reloaded = 1;
+}
+
+func void remove_reload_message2(void)
+{
+	chr_wait_animtype char_0 reload_rifle
+	already_reloaded2 = 1;
+}
+
+func void enter_target_function(void)
+{
+   dprint enter_target_function
+   inside_target_function = 1;
+}
+
+func void exit_target_function(void)
+{
+   dprint exit_target_function
+   inside_target_function = 0;
+}
+
+func void targets_are_gone(void)
+{
+	reload=1;
+	message_remove xkeepshoot
+	trigvolume_enable tv75 0
+	sleep 7
+	particle g_phr1 create
+	sleep7
+	weapon_spawn w3_phr 7045
+	sound_dialog_play_block c00_01_86shinatama
+	sound_dialog_play_block pause
+	message_remove
+	#plasma, switch weapons
+	sound_dialog_play_block c00_01_88shinatama
+	chr_wait_animtype char_0 Pickup_Rifle Pickup_Rifle_Mid 
+	droid_active = 1;
+	sleep 30
+	#activate drone, hit it
+	chr_invincible dum_train_shoot 0		
+	ai2_passive dum_train_shoot 0
+	sound_dialog_play_block c00_01_89shinatama
+	ai2_dopath dum_train_shoot patrol_train_shoot
+	ai2_setjobstate dum_train_shoot
+}
+
+func void targets_are_not_gone(void)
+{
+	# CB: turn off the trigger volume and sleep for a second
+	# so as not to cause hideous performance loss
+	trigvolume_enable tv75 0
+	sleep 60
+	trigvolume_enable tv75 1
+}
+
+func void targets_gone(string ai_name)
+{
+	if(inside_target_function eq 0)
+	{	
+		enter_target_function()
+
+		var int num_broken = env_broken(3001, 3018);
+
+		if (num_broken eq 18)
+		{
+			targets_are_gone();
+		}
+	
+		if (num_broken < 18)
+		{
+			targets_are_not_gone();
+		}
+
+		exit_target_function
+	}
+}
+
+func void droid1_gone(string ai_name)
+{
+	if (how_far_along eq 8)
+	{
+		chr_invincible dum_train_shoot2 0
+#		now side to side
+		sound_dialog_play_block c00_01_90shinatama
+		sound_dialog_play_block pause
+		sleep 30
+		ai2_passive dum_train_shoot2 0
+		ai2_dopath dum_train_shoot2 patrol_train_shoot2
+		ai2_setjobstate dum_train_shoot2
+	}
+}
+
+func void droid2_gone(string ai_name)
+{
+	if (how_far_along eq 8)
+	{
+		reload = 2;
+		droid_active = 0;
+		message_remove
+		cinematic_start (SHINnametag, 180, 180, 15, 1, 20, false)
+#		great, done training
+		chr_changeteam char_0 Syndicate
+		music_train3
+		if(rating eq 0)
+		{
+			message poopy 
+
+		}
+		if(rating eq 1)
+		{
+			message poopy2 
+
+		}
+		if(rating eq 2)
+		{
+			message poopy3 
+
+		}
+		if(rating eq 3)
+		{
+			message poopy4 
+
+		}
+		if(rating eq 4)
+		{
+			message poopy5 
+
+		}
+		if(rating eq 5)
+		{
+			message poopy6 
+
+		}
+		if(rating > 5)
+		{
+			message poopy7 
+
+		}
+		sound_dialog_play_block c00_01_91shinatama
+		sound_dialog_play_block pause
+		sleep 40
+		sound_dialog_play_block c00_01_81shinatama
+		sound_dialog_play_block pause
+		message_remove
+		sleep 40
+		sound_dialog_play_block c00_01_82shinatama
+		sound_dialog_play_block pause
+		cinematic_stop (SHINnametag, 15, 20)
+ 		message xf1 400
+		sleep 400
+		message xlastreview
+		particle obj_lastreview create
+		console_activate 12
+		wp_disable_fade=0
+	}
+}
+
+func void lastreview(string ai_name)
+{
+	music_stop
+	particle obj_lastreview kill
+	message_remove
+	message_remove xlastreview
+	text_console level_1f
+	lock_keys keys_all
+	sleep 60
+	dprint swing
+	swing
+	ui_suppress_prompt=0
+} 
+
+######################################
+# training scripts used in warehouse #
+######################################
+# note: health function 'yhealth' is in the level_script file #
+
+func void train_fathealth(string ai_name)
+{
+	chr_wait_animtype char_0 Pickup_Object 
+	if(trigvolume_count (80) eq 1)
+	{
+		sleep 90
+		message xtabhypo 300
+		sound_dialog_play_block c00_01_93shinatama
+		sound_dialog_play_block pause
+		sleep 40
+		sound_dialog_play_block c00_01_94shinatama
+	}
+}
+
+func void intro_enemies(string ai_name)
+{
+	dprint intro_enemies
+	how_far_along = 11;
+
+	music_firstfight
+
+	if (how_far_along eq 11)
+	{
+		ai2_spawn Bay2_Thug_1
+		ai2_spawn Bay2_Thug_2
+	}
+
+	if (how_far_along eq 11)
+	{
+#		enemies
+		message c01_50_84 240
+		sleep 360
+	}
+}
+
+func void train_alarm(string ai_name)
+{
+	how_far_along = 13;
+
+	if (how_far_along eq 13)
+	{
+	ai2_spawn Bay4_Comguy_1
+#	alarm
+	sleep 180
+	message c01_50_88 240
+	sleep 240
+	}
+
+	if (how_far_along eq 13)
+	{
+#	alarm
+	message c01_50_89 240
+	sleep 240
+	}
+
+#	if (how_far_along eq 13)
+#	{
+#	alarm
+#	message c01_50_90 240
+#	sleep 240
+#	}
+}
+
+func void train_neutral(string ai_name)
+{
+	how_far_along = 14;
+	target_set(92,15.0)
+	if (how_far_along eq 14)
+	{
+#		neutrals
+		message c01_50_91 240
+		sleep 240
+		sound_dialog_play_block c00_01_97shinatama
+	}
+}
+
+func void train_timer(string ai_name)
+{
+	how_far_along = 15;
+
+	if(how_far_along eq 15)
+	{
+		target_set(96,15.0)
+		timer_start 180 OutroLose
+		sound_dialog_play_block c00_01_95shinatama
+		sleep 180
+		objective_set(4)
+		sound_dialog_play_block pause
+		music_timer
+	}
+
+	if (how_far_along eq 15)
+	{
+		sleep 60
+		message timer_text 300
+		sleep 360
+		message timer_text2 240
+	}
+}
+
+############################
+# warn about alarm console #
+############################
+func void alarm_warning(string ai_name)
+{ 
+	if(count_alarm eq 0)
+	{
+		message alarm_warn 300
+	}
+	count_alarm = 1;
+}
+
+func void alarm_warningb(string ai_name)
+{ 
+	count_alarm = 0;
+}
+
+#############################
+# consoles and compass hint #
+#############################
+func void console_jump(string ai_name)
+{
+	text_console level_1g
+	console_reset 18
+}
+
+func void console_escape(string ai_name)
+{
+	text_console level_1h
+	console_reset 17
+}
+
+func void console_attack(string ai_name)
+{
+	text_console level_1i
+	console_reset 16
+}
+
+func void console_flash(string ai_name)
+{
+	text_console level_1j
+	console_reset 15
+}
+
+func void console_throw(string ai_name)
+{
+	text_console level_1k
+	console_reset 14
+}
+
+func void console_block(string ai_name)
+{
+	text_console level_1l
+	console_reset 13
+}
+
+func void t77(string ai_name)
+{
+	message xarrow 400
+}
Index: AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_training_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_training_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/EnvWarehouse/warehouse_training_scripts.bsl	(revision 313)
@@ -0,0 +1,1143 @@
+######################
+# training variables #
+######################
+
+#checks to see if player is in correct room for executing current script
+var int how_far_along=0;
+
+#number of dash track lights
+var int tcount=17;
+
+#sees if player sprinted
+var int didsprint;
+
+#sees if player jumped up to big crate with power cell
+var int powerupon;
+
+#checks to see if OK to run training (for restored game funkiness)
+var int can_train_movement = 1;
+
+#continues crouch training
+var int onto_crouch2;
+
+#used to determine if dashing on track for the first time
+var int A;
+
+#used to determine if finished run was slow
+var int B;
+
+#set if running was failed
+var int bad;
+
+#used to measure performance of player
+var int rating = 1;
+
+#karen dies!
+var int demo3dead;
+
+#determines which jump script continues after getting on biggest crate	
+var int got_ammo;
+
+#prevents forcefield and particle/gunk from starting multiple times and not after jumping to the next room
+var int forcefieldstopped;
+var int particlestarted;
+
+##################
+# basic movement #
+##################
+func void train_movement(string ai_name)
+{
+	if (can_train_movement eq 1)
+	{
+		train_movement_internal
+	}
+}
+
+func void train_movement_internal(void)
+{
+	fade_out 0 0 0 0
+	cm_interpolate KonCamFoot01 0
+	particle forcefield1 do start
+	particle forcefield2 do start
+	particle steam start
+	ui_suppress_prompt=1
+	ui_show_element left 0
+	ui_show_element right 0
+	target_set (1,0.0)
+	env_show 2010 0
+	how_far_along = 1;
+	trigvolume_enable trigger_volume_54 0
+	lock_keys 
+	lock_keys keys_pause
+	trigvolume_enable tv_train_door 0
+	trigvolume_enable tv1 0
+	trigvolume_enable tv2 0	
+	trigvolume_enable tv3 0
+	trigvolume_enable tv4 0
+	trigvolume_enable tv5 0
+	trigvolume_enable tv6 0
+	trigvolume_enable tv7 0
+	trigvolume_enable tv8 0
+	trigvolume_enable tv9 0
+	trigvolume_enable tv10 0
+	trigvolume_enable tv11 0
+	trigvolume_enable tv12 0
+	trigvolume_enable tv13 0
+	trigvolume_enable tv14 0
+	trigvolume_enable tv15 0
+	trigvolume_enable tv16 0
+	trigvolume_enable tv17 0
+	trigvolume_enable tv_move4 0
+	trigvolume_enable tv_end 0
+	trigvolume_enable tv_review 0
+	console_deactivate 11
+
+	dprint train_movement
+
+	if(how_far_along eq 1)
+	{	
+		input 0
+		fade_in 120
+		sleep 90
+		fork Kon
+		####Shinatama telling Konoko that their neurolink is working perfectly, and telling her they're about to start training.
+		cinematic_start (SHINnametag, 180, 180, 15, 1, 20, false)
+		sleep f10
+		music_train1
+		sound_dialog_play c00_01_29shinatama
+		sound_dialog_play_block pause
+		sleep 30
+		sound_dialog_play c00_01_30shinatama
+		sound_dialog_play_block pause
+		sleep 30
+		sound_dialog_play c00_01_31shinatama
+		sound_dialog_play_block pause		
+		sleep 30
+		sound_dialog_play c00_01_32shinatama
+		sound_dialog_play_block pause
+		sleep 30
+		message xwelcome 240
+		sound_dialog_play c00_01_35shinatama
+		sound_dialog_play_block pause
+		cinematic_stop (SHINnametag, 15, 20)
+		input 1
+	}
+
+	if(how_far_along eq 1)
+	{
+		#use mouse
+		message xmouse 
+		chr_wait_animtype 0 standing_turn_left standing_turn_right
+		message_remove xmouse
+		sleep 60
+		#move with wads
+		lock_keys keys_movement 
+		message xmove 
+		chr_wait_animtype 0 run
+		sleep 60
+		message_remove xmove
+		sleep 60
+	}
+	if(how_far_along eq 1)
+	{
+		#combine to move diag
+		message xcombo 300
+		sleep 300
+	}
+	if(how_far_along eq 1)
+	{
+		#control console
+		message xconsole1
+		sleep 30
+		particle obj_control create
+		trigvolume_enable trigger_volume_54 1
+		console_activate 10
+		lock_keys keys_action
+
+	}
+}
+
+func void move2(string ai_name)
+{
+	#trigger volume near control console
+	message_remove xmouse
+	message_remove xmove
+	message_remove xcombo
+	message_remove xconsole1
+	particle obj_control kill
+}
+
+func void lights(string ai_name)
+{
+		particle t17 create
+		sleep 60
+		particle t16 create
+		sleep 60
+		particle t15 create
+		sleep 60
+		particle t14 create
+		sleep 60
+		particle t13 create
+		sleep 60
+		particle t12 create
+		sleep 60
+		particle t11 create
+		sleep 60
+		particle t10 create
+		sleep 60
+		particle t9 create
+		sleep 60
+		particle t8 create
+		sleep 60
+		particle t7 create
+		sleep 60
+		particle t6 create
+		sleep 60
+		particle t5 create
+		sleep 60
+		particle t4 create
+		sleep 60
+		particle t3 create
+		sleep 60
+		particle t2 create
+		sleep 60
+		particle t1 create
+}
+
+func void move3(string ai_name)
+{
+	#used control console
+	message_remove xactivate1
+	particle obj_control kill
+	sleep 60
+
+	if(A eq 0)
+	#first run, so warm up
+	{
+		if(how_far_along eq 1)
+		{
+			#we'll use lights for dash
+			sound_dialog_play c00_01_36shinatama			
+			message xactivate2 300
+			fork lights
+			sleep 30
+			#better warmup
+			sound_dialog_play_block c00_01_33shinatama
+			sound_dialog_play_block pause	
+		}
+		
+		if(how_far_along eq 1)
+		{
+			#turn and dash
+			message xdash1
+			fork encourage_dash
+			chr_wait_animation 0 KONSPRrun_lt KONSPRrun_rt
+			didsprint = 1
+			message_remove xdash1
+			message_remove xencouragedash
+			sleep 60
+			sound_dialog_play c00_01_37shinatama
+		#	sound_dialog_play_block pause
+		}
+
+		if(how_far_along eq 1)
+		{
+			#beautiful sprint
+			message xdash2 240
+			sleep  240
+		}
+
+		if(how_far_along eq 1)
+		{
+			#dash is fast but loud
+			message xdash3
+			sound_dialog_play c00_01_38shinatama
+			sound_dialog_play_block pause
+		}
+	}
+
+	if(A eq 1)
+	{
+		tcount= 17;
+		B = 0;
+		bad = 0;
+		if(how_far_along eq 1)
+		{
+		#	sound_dialog_play_block c00_01_41shinatama
+			dprint kill_parts
+			particle t17 kill
+			particle t16 kill
+			particle t15 kill
+			particle t14 kill
+			particle t13 kill
+			particle t12 kill
+			particle t11 kill
+			particle t10 kill
+			particle t9 kill
+			particle t8 kill
+			particle t7 kill
+			particle t6 kill
+			particle t5 kill
+			particle t4 kill
+			particle t3 kill
+			particle t2 kill
+			particle t1 kill
+			dprint recreate_parts
+			particle t17 create
+			particle t16 create
+			particle t15 create
+			particle t14 create
+			particle t13 create
+			particle t12 create
+			particle t11 create
+			particle t10 create
+			particle t9 create
+			particle t8 create
+			particle t7 create
+			particle t6 create
+			particle t5 create
+			particle t4 create
+			particle t3 create
+			particle t2 create
+			particle t1 create
+			trigvolume_reset tv_move4 
+		}
+	}
+
+	if(how_far_along eq 1)
+	{
+		message_remove xdash3
+		sleep 60
+		#goto track and trigger script in volume
+		particle obj_start create
+		message xgotrack
+		trigvolume_enable tv_move4 1
+	}
+}
+
+func void encourage_dash(string ai_name)
+{
+	sleep 600
+	if(didsprint eq 0)
+	{
+		message_remove xdash1
+		sleep 60
+		#that'sleep 300 not a dash
+		sound_dialog_play c00_01_39shinatama
+		message xencouragedash
+		dprint rating
+		rating = rating + 1;
+	}
+}
+
+func void move4(string ai_name)
+{
+  if(A eq 0)
+  {
+	if(how_far_along eq 1)
+	{
+		message_remove xgotrack
+		trigvolume_enable tv1 1
+		trigvolume_enable tv2 1	
+		trigvolume_enable tv3 1
+		trigvolume_enable tv4 1
+		trigvolume_enable tv5 1
+		trigvolume_enable tv6 1
+		trigvolume_enable tv7 1
+		trigvolume_enable tv8 1
+		trigvolume_enable tv9 1
+		trigvolume_enable tv10 1
+		trigvolume_enable tv11 1
+		trigvolume_enable tv12 1
+		trigvolume_enable tv13 1
+		trigvolume_enable tv14 1
+		trigvolume_enable tv15 1
+		trigvolume_enable tv16 1
+		trigvolume_enable tv17 1
+		particle obj_start kill
+		sound_dialog_play c00_01_41shinatama
+		sleep 60
+		message xrun
+	}
+  }
+ 	if(A eq 1)
+  	{
+		if(how_far_along eq 1)
+		{
+			message_remove xgotrack
+			trigvolume_reset tv1 
+			trigvolume_reset tv2 
+			trigvolume_reset tv3 
+			trigvolume_reset tv4 
+			trigvolume_reset tv5 
+			trigvolume_reset tv6 
+			trigvolume_reset tv7 
+			trigvolume_reset tv8 
+			trigvolume_reset tv9 
+			trigvolume_reset tv10 
+			trigvolume_reset tv11 
+			trigvolume_reset tv12 
+			trigvolume_reset tv13 
+			trigvolume_reset tv14 
+			trigvolume_reset tv15 
+			trigvolume_reset tv16 
+			trigvolume_reset tv17 
+			particle obj_start kill
+			sound_dialog_play c00_01_41shinatama
+			sleep 60
+			message xrun
+		}
+	}
+
+	particle obj_end create
+	trigvolume_reset tv_end
+	trigvolume_enable tv_end 1
+	sleep 660
+	dprint timeup
+	B = 1;
+}
+
+func void track_end(string ai_name)
+{
+	if(B eq 1)
+	{
+		bad = 1;
+	}
+	if(how_far_along eq 1)
+	{
+		particle obj_end kill
+		particle obj_start kill
+		message_remove
+		message_remove xrun
+		sleep 60
+		###all targets hit
+		if(tcount eq 0)
+		{
+			#### all hit, RUN WAS fast	
+			if(bad eq 0)
+			{
+				sound_dialog_play_block c00_01_42shinatama
+				message xgreat 240
+				A = 0;
+				sleep 240
+			}
+			####all hit, RUN WAS slow
+			if(bad eq 1)
+			{
+				dprint rating
+				rating = rating + 1;
+				sound_dialog_play_block c00_01_11shinatama
+				message xgoodbutslow 240
+				A = 0;
+				sleep 240
+			}
+		}
+
+		####targets were MISSED
+		if(tcount ne 0)
+		{
+			dprint rating
+			rating = rating + 1;
+			###missed, fast
+			if(bad eq 0)
+			{
+				sound_dialog_play_block c00_01_43shinatama
+				message xpractice 360
+				A = 1;
+				sleep 360
+			}
+			####missed, slow
+			if(bad eq 1)
+			{
+				sound_dialog_play_block c00_01_43shinatama
+				message xslowtoo 360
+				A = 1;
+				sleep 360
+			}
+		}
+	}
+   #####THIS ENDS BASIC MOVEMENTS FOR SUCCESSFUL RUNNERS
+  if(A eq 0)
+  {
+	if(how_far_along eq 1)
+	{
+		sound_dialog_play_block c00_01_44shinatama
+		message xendbasic 300
+		sleep 300
+	}
+
+	if(how_far_along eq 1)
+	{
+		sound_dialog_play c00_01_45shinatama
+		message xreview 
+		console_activate 11
+		trigvolume_enable tv_review 1
+		particle obj_data create
+	}
+  }
+      ####IF THE RUN WASN'T GOOD, THEN RESET CONSOLE
+	if(A eq 1)
+	{
+		message xconsole1
+		sleep 30
+		particle obj_control create
+		console_reset 10
+		console_activate 10
+		trigvolume_reset trigger_volume_54 		
+		trigvolume_enable trigger_volume_54 1
+	}
+}
+
+func void review(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		message_remove xreview
+		particle obj_data kill
+	#	sleep 60
+	#	message xactivate3
+	}
+}
+
+func void review2(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+	#	message_remove xactivate3
+		text_console level_1c
+		console_reset 11
+		sleep 120
+		message xgodoor
+		trigvolume_enable tv_train_door 1
+		sound_dialog_play c00_01_48shinatama
+	#	sound_dialog_play_block pause
+		particle obj1 create
+	}
+}
+
+func void track17(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t17 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track16(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t16 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track15(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t15 kill
+		tcount = tcount - 1
+}
+}
+
+func void track14(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t14 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track13(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t13 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track12(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t12 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track11(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		tcount = tcount - 1
+		particle t11 kill
+	}
+}
+
+func void track10(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t10 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track9(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t9 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track8(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t8 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track7(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t7 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track6(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t6 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track5(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t5 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track4(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t4 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track3(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t3 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track2(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t2 kill
+		tcount = tcount - 1
+	}
+}
+
+func void track1(string ai_name)
+{
+	if(how_far_along eq 1)
+	{
+		particle t1 kill
+		tcount = tcount - 1
+	}
+}
+
+###################
+# use manual door #
+###################
+func void train_door(string ai_name)
+{
+	dprint train_door
+	message_remove xgodoor
+	sleep 60
+#	Good.  Now the door will unlock as the indicator light turns green.
+	particle obj1 kill
+	#light goes green
+	message unlock_door1 240
+	sleep 40
+	door_unlock 98 
+	particle door1_locklight02 do start
+	sleep 200
+
+	if (how_far_along eq 1)
+	{
+		message open_door1b 300
+		sleep 300
+	}
+
+	if (how_far_along eq 1)
+	{
+#		Please proceed to the next room
+		message proceed_door1 300	
+		sleep 300
+	}
+	if (how_far_along eq 1)
+	{
+#		message open_door1	
+	}
+}
+
+########
+# jump #
+########
+func void train_jump(string ai_name)
+{	
+	how_far_along = 2;
+	lock_keys keys_inventory
+	message_remove open_door1
+	message_remove open_door1b
+	message_remove proceed_door1
+	sleep 120
+	if (how_far_along eq 2)
+	{
+		if(powerupon eq 0)
+		{
+			sound_dialog_play c00_01_49shinatama
+			message jump_basic 240
+			sleep 240
+		}
+	}
+	if (how_far_along eq 2)
+	{
+		if(powerupon eq 0)
+		{
+			lock_keys keys_jump
+#			SPACE to jump
+			message c01_50_06 
+			chr_wait_animtype 0 jump
+			sleep 60
+			message_remove c01_50_06
+			sleep 60
+		}
+	}
+	if (how_far_along eq 2)
+	{
+		if(powerupon eq 0)
+		{
+			sound_dialog_play c00_01_08shinatama
+		}
+	}
+	if (how_far_along eq 2)
+	{
+		if(powerupon eq 0)
+		{
+#			directional jumping
+#			(press W and then SPACE when you want to jump)
+			message c01_50_07 		
+			chr_wait_animation 0 KONOKOjump_fw_start KONOKOjump_lt_start KONOKOjump_rt_start KONOKOjump_bk_start
+			sleep 60
+			message_remove c01_50_07
+			sleep 60
+		}
+
+	}
+	if (how_far_along eq 2)
+	{
+		if(powerupon eq 0)
+		{
+#			longer hit space, longer jump
+			message jump_basic2 300		
+			sleep 120
+		}
+	}
+########################encourage players to jump to next room unless they are on the large crate
+	if (how_far_along eq 2)
+	{
+		if(powerupon eq 0)
+		{
+			if(forcefieldstopped eq 0)
+			{
+				forcefieldstopped = 1;
+				particle forcefield1 do stop
+				sleep 180
+			}
+		}
+		if(powerupon eq 0)
+		{
+			if(particlestarted eq 0)
+			{
+				particlestarted = 1;
+		 		sound_dialog_play c00_01_50shinatama
+		  	  	message jump1
+				particle obj2 create
+				env_show 2011 0
+			}
+
+		}
+	}
+}
+
+func void powerup(string ai_name)
+{
+	powerupon = 1
+	fork pickup_powerup
+	dprint rating
+	rating =  rating - 1;
+	message_remove jump_basic
+	message_remove jump_basic2
+	message_remove good
+	message_remove jump1
+#	particle obj2 kill
+	sleep 80
+	if(how_far_along eq 2)
+	{
+		sound_dialog_play c00_01_46shinatama
+		sound_dialog_play_block pause
+		sleep 30
+		sound_dialog_play c00_01_47shinatama
+		sound_dialog_play_block pause
+	}
+#############################encourage players to jump to next room unless they are getting the ammo
+	if(got_ammo eq 0)
+	{
+		if(how_far_along eq 2)
+		{	
+		#	particle obj2 kill
+			message_remove jump1
+		 	if(forcefieldstopped eq 0)
+			{
+				forcefieldstopped =1;
+				particle forcefield1 do stop
+				sleep 180
+        	}
+		}
+	}
+	if(got_ammo eq 0)
+	{
+		if(how_far_along eq 2)
+		{
+			sound_dialog_play c00_01_50shinatama
+			if(particlestarted eq 0)
+ 			{
+				particlestarted = 1;
+				particle obj2 create
+				env_show 2011 0
+            }
+		}
+	}
+}
+
+func void pickup_powerup(void)
+{
+#	particle obj2 kill
+	message_remove jump1
+	chr_wait_animtype 0 Pickup_Object
+	got_ammo = 1;
+	sleep 80
+	message xpower1 300
+	sleep 120
+#########################encourage players to jump to next room unless the messages have already gone by
+	
+	forcefieldstopped = 1;
+	particle forcefield1 do stop
+	sleep 180
+	if(how_far_along eq 2)
+	{
+		sound_dialog_play c00_01_50shinatama
+		if(particlestarted eq 0)
+		{
+			particlestarted = 1;
+			particle obj2 create
+			env_show 2011 0
+		}
+	}
+	if(how_far_along eq 2)
+	{
+		message jump1
+	}	
+}
+
+################
+# escape moves #
+################
+func void train_crouch(string ai_name)
+{
+	how_far_along = 3;
+	trigvolume_enable trigger_volume_62 0
+	message_remove
+	door_lock 98
+	particle door1_locklight02 do stop
+	particle obj2 kill
+	particle obj1 kill
+	particle obj_start kill
+	particle obj_end kill
+	particle obj_control kill
+	dprint train_crouch
+	trigvolume_enable trigger_volume_71 0
+	sleep 60
+	message_remove
+	particle obj2 kill
+	sound_dialog_play_interrupt c00_01_01shinatama
+	ai2_spawn demo1
+	ai2_spawn demo2
+	ai2_spawn demo3
+	chr_nocollision demo1 1
+	chr_nocollision demo2 1 
+	chr_nocollision demo3 1
+		ai2_dopath demo1 pdemo1
+		ai2_dopath demo2 pdemo2
+   		ai2_dopath demo3 pdemo3
+		ai2_setjobstate demo1
+		ai2_setjobstate demo2
+		ai2_setjobstate demo3
+	#shift important
+	if(how_far_along eq 3)
+	{
+		lock_keys keys_crouch
+		message shift 240
+		sleep 240
+	}
+
+	if(how_far_along eq 3)
+	{
+#		SHIFT to crouch
+		message c01_50_08 
+		chr_wait_animtype 0 crouch
+		sleep 60
+		message_remove c01_50_08
+		sleep 120
+	}
+
+	if(how_far_along eq 3)
+	{
+		sleep 30
+#		sorry to interrupt you
+		sound_dialog_play c00_01_51shinatama
+		sleep 60
+		message xinterrupt 180
+		sleep 180
+		message xfite
+		sleep 30
+		particle fight create
+		trigvolume_enable trigger_volume_71 1
+	}
+}
+
+func void crouch2(string ai_name)
+{
+	if (how_far_along eq 3)
+	{
+		message xresume 180
+		sleep 180
+#		MOVEWHile crouching
+		message c01_50_09
+		chr_wait_animtype 0 crouch_run crouch_run_backwards crouch_run_sidestep_left crouch_run_sidestep_right
+		sleep 60
+		message_remove c01_50_09
+		sleep 60
+		message c01_50_10 240
+		sound_dialog_play_block c00_01_54shinatama
+		sleep 240
+
+	}
+
+	if (how_far_along eq 3)
+	{
+#		ESCAPE MOVES somersault
+		message c01_50_11
+		chr_wait_animation 0 KONCOMcrouch_fw KONCOMcrouch_rt KONCOMcrouch_lt KONOKOcrouch_fw KONOKOss_lt_slide KONOKOss_rt_slide KONOKOrun_bk_slide
+		sleep 60
+		message_remove c01_50_11
+		sleep 60
+	}
+
+	if (how_far_along eq 3)
+	{
+#		cartwheel
+		message back 
+		chr_wait_animtype 0 crouch_back
+		sleep 60
+		sound_dialog_play_block c00_01_07shinatama
+		message_remove back
+		sleep 60
+	}
+
+	if (how_far_along eq 3)
+	{
+#		SLIDE
+		sleep 30
+		sound_dialog_play_block c00_01_55shinatama
+		sound_dialog_play_block pause
+		message c01_50_16 
+		chr_wait_animstate 0 run_slide
+		sleep 60
+		message_remove c01_50_16
+		sleep 60
+	}
+
+	if (how_far_along eq 3)
+	{
+#		slide under traps
+#		try sliding beneath these moving laser sensors
+		sleep 60
+		sound_dialog_play_block c00_01_57shinatama
+	}
+	if (how_far_along eq 3)
+	{
+		message slide 360
+		sleep 30
+		trig_activate 3
+		sleep 40
+		trig_activate 2
+		sleep 40
+		trig_activate 1
+		sleep 300
+		sound_dialog_play_block c00_01_56shinatama
+		sleep 300
+	}
+
+	if (how_far_along eq 3)
+	{
+#		especially important when fighting multiple opponents
+#		message c01_50_13 240
+		sound_dialog_play_block c00_01_59shinatama
+		sound_dialog_play_block pause
+		sleep 60
+	}
+
+	if (how_far_along eq 3)
+	{
+#		JUMP-FLIP
+		message jump_flip 300
+		sleep 300
+	}
+	if (how_far_along eq 3)
+	{
+		message c01_50_19	
+		chr_wait_animtype 0 flip
+		message_remove c01_50_19
+		sleep 60
+		sound_dialog_play_block c00_01_03shinatama
+		sound_dialog_play_block pause
+	}
+
+	if (how_far_along eq 3)
+	{
+#		hit opponent on ground
+		sound_dialog_play_block c00_01_60shinatama
+		sound_dialog_play_block pause
+	}
+
+	if (how_far_along eq 3)
+	{
+#		more jump-flip
+#		starting at the target cursor on the floor, dash and jump-flip up to the next level.
+		particle forcefield2 do stop
+		sleep 180	
+		sound_dialog_play_block c00_01_61shinatama
+		message c01_50_23 	
+		particle obj3 create
+		env_show 2012 0
+		sleep 600
+	}
+
+	if (how_far_along eq 3)
+	{
+		sound_dialog_play_block c00_01_62shinatama
+		sound_dialog_play_block pause
+		message_remove c01_50_23
+		sleep 60
+		message jump_encourage 300
+		sleep 300
+	}
+	if (how_far_along eq 1)
+	{
+		message c01_50_23
+		sleep 900	
+	}
+
+	if (how_far_along eq 3)
+	{
+		message_remove c01_50_23 
+		sleep 60
+	}
+	if (how_far_along eq 3)
+	{
+		sound_dialog_play_block c00_01_63shinatama
+		particle obj3 kill
+		sleep 30
+	}
+	if (how_far_along eq 3)
+	{
+		particle obj4 create
+		message jump_encourage2 
+		dprint rating
+		rating = rating + 1;
+	}
+}
+
+################
+# karen fights #
+################
+
+func void t71(string ai_name)
+{
+	message_remove xfite
+	chr_nocollision demo1 0
+	chr_nocollision demo2 0 
+	chr_nocollision demo3 0
+	env_show 2010 1
+	chr_changeteam demo1 Syndicate
+	chr_changeteam demo2 Syndicate
+	particle fight kill
+}
+
+func void demo3dies(string ai_name)
+{
+	dprint oh_no
+	demo3dead = 1;
+	chr_changeteam demo1 Konoko
+	chr_changeteam demo2 Konoko
+	if(trigvolume_count (71) eq 1)
+	{
+		sleep 60
+		sound_dialog_play c00_01_52shinatama
+		sound_dialog_play_block pause
+	}
+	sleep 60
+	crouch2
+
+}
+
+func void demo_over(string ai_name)
+{
+	onto_crouch2 = onto_crouch2 + 1
+	if(onto_crouch2 eq 2)
+	{
+		ai2_dopath demo3 pdemo4
+		ai2_setjobstate demo3
+		sleep 90
+		sound_dialog_play c00_01_53shinatama
+		sound_dialog_play_block pause
+		if(demo3dead eq 0)
+		{
+			crouch2
+		}
+	}
+}
Index: AE/packages/VanillaBSL/IGMD/compound/compound.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/compound/compound.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/compound/compound.bsl	(revision 313)
@@ -0,0 +1,1654 @@
+#	mountain compound
+#	scripts for level 19 by wu
+#	
+#	LEGEND
+#
+#	character naming convention: X_Yx
+#	where X = area letter (A=first area, B=second area, etc.)
+#	      Y = character type (N=ninja, T=tanker, S=striker, R=red, etc.)
+#		x = character number, usually same as character's initial patrol id
+#
+#	trigger volume scripts: t##, where ## refers to trigger volume id
+#	
+#	CONTENTS
+#	
+#	0.temporary debugging scripts
+#	1.variables defined
+#	1b.music scripts
+#	2.start and objectives scripts
+#	3.save game scripts
+#	4.cut scene scripts
+#	5.console scripts
+#	6.trigger volume scripts
+
+#	temporary debugging scripts 	#
+
+func void xxx(void)
+{
+	ParkLeft
+	t11
+	sleep 300
+	Truck
+}
+
+func void truck(string ai_name)
+{
+#	ai2_ignore_player=1
+	omnipotent=1
+	invincible=1
+	chr_teleport 0 4
+}
+
+func void computer(string ai_name)
+{
+#	ai2_ignore_player=1
+	dprint WALK_BACKWARDS_DOWN_THE_STAIRS_TO_OPEN_DOOR
+	omnipotent=1
+	invincible=1
+	chr_teleport 0 6
+}
+
+func void e(string ai_name)
+{
+	ai2_ignore_player=1
+	chr_teleport 0 100
+}
+
+func void butcher_test(void)
+{
+	invincible = 1
+	omnipotent = 1
+	extra_guys = 1
+	fork dish
+}
+
+func void test_setup(void)
+{
+	ai2_allpassive 1	
+
+	playback GrifElite01 GrifElite01Set
+	playback GrifElite02 GrifElite02Set
+	playback GrifElite03 GrifElite03Set
+	sleep f10
+	playback GrifElite02 GrifElite02Set
+	sleep f5
+	playback GrifElite03 GrifElite03Set
+	sleep f300
+
+
+	chr_envanim Griffin GrifGrifBox01
+	if (extra_guys eq 1) {
+		chr_envanim GrifOps01 GrifOps01Box01
+		chr_envanim GrifOps02 GrifOps02Box01
+	}
+	if (extra_guys eq 0) {
+		chr_envanim GrifOps02 GrifOps01Box01
+	}
+	chr_envanim GrifOps03 GrifOps03Box01
+	chr_animate Griffin COMGUYlev7_helistand 500
+	chr_animate GrifOps01 STRIKEcrouch_idle 400
+	chr_animate GrifOps02 STRIKEcrouch_idle 400
+	chr_animate GrifOps03 STRIKEcrouch_idle 400
+	sleep f90
+	sleep f200
+	chr_envanim Griffin GrifGrifBox02 norotation
+	if (extra_guys eq 1) {
+		chr_envanim GrifOps01 GrifOps01Box02 norotation
+		chr_envanim GrifOps02 GrifOps02Box02 norotation
+	}
+	if (extra_guys eq 0) {
+		chr_envanim GrifOps02 GrifOps01Box02 norotation
+	}
+	chr_envanim GrifOps03 GrifOps03Box02 norotation
+	chr_animate Griffin COMGUYlev7_Grif
+	if (extra_guys eq 1) {
+		chr_animate GrifOps01 STRIKElev7_Ops01
+		chr_animate GrifOps02 STRIKElev7_Ops02
+	}
+	if (extra_guys eq 0) {
+		chr_animate GrifOps02 STRIKElev7_Ops01
+	}
+	chr_animate GrifOps03 STRIKElev7_Ops03
+	sleep f240
+	playback Griffin GrifGrifRunAlt
+	if (extra_guys eq 1) {
+		playback GrifOps01 GrifOps01Run
+		playback GrifOps02 GrifOps02Run
+	}
+	if (extra_guys eq 0) {
+		playback GrifOps02 GrifOps01Run
+	}
+	sleep f10
+	playback_block GrifOps03 GrifOps03Run
+
+	sleep f300
+
+	playback GrifElite04 GrifWave2_Run1
+	playback GrifElite06 GrifWave2_Run3
+	playback_block GrifElite05 GrifWave2_Run1
+	sleep f300
+	
+
+	ai2_allpassive 0
+}
+
+func void test_boyz(void)
+{
+	playback Griffin GrifGrifRunAlt
+	if (extra_guys eq 1) {
+		playback GrifOps01 GrifOps01Run
+		playback GrifOps02 GrifOps02Run
+	}
+	if (extra_guys eq 0) {
+		playback GrifOps02 GrifOps01Run
+	}
+	sleep f10
+	playback_block GrifOps03 GrifOps03Run
+}
+
+###############################
+#	variables defined 	#
+###############################
+
+var int counter=2;
+var int my_save_point=0;
+var int console_count=0;
+var int stairs_open=0;
+var int comdies_ok=0;
+var int conused_ok=0;
+var int platform_ok=0;
+var int thru_door;
+var int count_swat_dies=3;
+var int console100used;
+var int console200used;
+var int console300used;
+var int console101used;
+var int count_attack3;
+var int muro_in_danger=0;
+var int round2_spawned=0;
+var int extra_guys=0;
+
+###############################
+#		music		      #
+###############################
+
+func void music_intro(void)
+{
+	sound_music_start mus_om01 .9
+#	stopped at set_objective_2
+}
+
+func void music_guns_timer(void)
+{
+	dprint OBSOLETE_music_guns_timer
+}
+
+func void music_truck(void)
+{
+	sound_music_start mus_asianb
+#	this music stopped at the end of the truck cutscene
+}
+
+func void stop_music_truck(void)
+{
+	sound_music_stop mus_asianb
+#	this music stopped at the end of the truck cutscene
+}
+
+func void music_guns(void)
+{
+	sound_music_start mus_main03_hd
+#	this music stopped in console301 or console300
+}
+
+func void music_guns_stop(void)
+{
+	sound_music_stop mus_main03_hd
+}
+
+func void music_battle(void)
+{
+	dprint MUSIC_BATTLE
+	sound_music_start mus_ot
+#	this music stopped in Outro
+}
+
+func void music_stop(void)
+{
+	dprint STOP_THE_MUSIC
+	sound_music_stop mus_om01
+	sound_music_stop mus_asianb
+	sound_music_stop mus_main03
+	sound_music_stop mus_main03_hd
+}
+
+###############################
+#	start and objectives	#
+###############################
+func void paths(string ai_name)
+{
+	ai2_dopath GrifOps01 patrol_521
+	ai2_dopath GrifOps02 patrol_515
+	ai2_dopath GrifOps03 patrol_517
+	ai2_dopath GrifElite01 patrol_513
+	ai2_dopath GrifElite02 patrol_514
+	ai2_dopath GrifElite03 patrol_518
+}
+
+func void spawnA(void)
+{
+	ai2_spawn A_S1
+	ai2_spawn A_S2
+	ai2_spawn A_E3
+	ai2_spawn A_E5
+	ai2_spawn A_E5b
+}
+
+func void start(string ai_name)
+{
+	dprint start	
+
+	trigvolume_enable trigger_volume_21 0
+	trigvolume_enable trigger_volume_21_copy 0
+	trigvolume_enable trigger_volume_44 0
+	trigvolume_enable trigger_volume_45 0
+	trigvolume_enable attack_1tv 0
+	trigvolume_enable attack_2tv 0
+	trigvolume_enable attack_3tv 0
+	trigvolume_enable attack_3tv_copy 0
+	trigvolume_enable attack_4tv 0
+
+	particle door12_locklight01 do start
+
+	door_lock 35
+	door_lock 36
+	door_lock 37
+	door_lock 39
+	door_lock 40
+	door_lock 41
+
+	if (my_save_point eq 0)
+	{
+		objective_set(1)
+		spawnA()
+	}
+
+	if (my_save_point eq 1)
+	{
+		save_point=1;	
+		objective_set(1)
+		music_intro
+		ai2_dopath A_S1 patrol_01b
+		ai2_setjobstate A_S1
+		spawnA()
+		restore_game
+		chr_set_health 0 400
+	}
+
+	if (my_save_point eq 2)
+	{
+		save_point=2;	
+		dprint restore2_beforetruck
+		objective_set(2)
+		door_lock 12
+		particle door12_locklight01 do stop
+		ai2_spawn C_Sr18
+		ai2_dopath C_Sr18 patrol_18
+		ai2_spawn C_Sr17
+		ai2_spawn C_Sr19
+		ai2_spawn C_Sb75
+		ai2_spawn C_Sb76
+		trigvolume_enable trigger_volume_39 0
+		restore_game
+	}
+
+	if (my_save_point eq 3)
+	{
+		save_point=3;	
+		dprint restore3_aftertruck
+		objective_set(4)
+		target_set (501,30.0)
+		env_show 151 0
+		env_show 152 0
+		env_show 153 0
+		env_show 154 0
+		env_show 155 0
+		env_show 156 0
+		env_show 157 0
+		env_show 158 0
+		env_show 159 0
+		#Hides door, unhides broken door 
+		env_show 911 1
+		env_show 912 0
+		env_show 913 0
+		#Shows Gunk truck
+		env_show 251 1
+		env_show 252 1
+		env_show 253 1
+		env_show 254 1
+		env_show 255 1
+		env_show 256 1
+		env_show 257 1
+		env_show 258 1
+		env_show 259 1
+		env_show 911 1
+		env_show 912 0
+		env_show 913 0
+		env_show 914 1
+		env_show 915 1
+		env_show 916 1 
+
+		ai2_spawn D_R33
+		restore_game
+	}
+
+	if (my_save_point eq 4)
+	{
+		dprint restore4_finalbattle
+		#hides original dish 
+		env_show 301 0
+		env_show 302 0
+		env_show 303 0
+		env_show 304 0
+		env_show 305 0
+		env_show 306 0
+		env_show 307 0
+		env_show 308 0
+		env_show 309 0
+		#Shows in place dish 
+		env_show 401 1
+		env_show 402 1
+		env_show 403 1
+		env_show 404 1
+		env_show 405 1
+		env_show 406 1
+		env_show 407 1
+		env_show 408 1
+		env_show 409 1
+		music_battle
+		gs_farclipplane_set 3000
+		particle dishpulse do start
+		particle sturm_ambient start
+
+		# start the dish loop
+		sp_start_dish_loop
+	
+
+		if (did_kill_griffen() eq 1)
+		{
+			dprint restoreMutant
+			ai2_spawn MutantMuro
+			chr_boss_shield MutantMuro
+			restore_game
+			objective_set(7,silent)
+		}
+
+		if (did_kill_griffen() eq 0)
+		{
+			dprint restoreGriffin
+			ai2_boss_battle = 1
+			ai2_spawn Griffin
+			if (extra_guys eq 1) 
+			{
+				ai2_spawn GrifOps01
+			}
+			ai2_spawn GrifOps02
+			ai2_spawn GrifOps03			
+			ai2_spawn Muro
+			chr_boss_shield Muro
+			if (extra_guys eq 1) 
+			{
+				ai2_spawn GrifElite01
+			}
+			ai2_spawn GrifElite02
+			ai2_spawn GrifElite03
+			chr_set_health Muro 500
+			fork wait_to_help
+			restore_game
+			objective_set(6,silent)
+			paths			
+		}
+	}
+}
+
+func void deathfall(void)
+{
+	cm_detach
+	sleep f90
+	chr_set_health 0 0
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+
+func void you_win(int char_index)
+{
+	outro
+	win
+}
+
+func void set_objective_1(string ai_name)
+{
+	dprint set_objective_1
+	objective_set(1)
+	target_set (1,0.0)
+}
+
+func void set_objective_2(string ai_name)
+{
+	dprint set_objective_2
+	ai2_spawn B_Eb11
+	ai2_spawn B_Eb16
+	ai2_spawn B_Esb15
+	ai2_spawn B_N1
+	ai2_spawn B_Sr9
+	ai2_spawn C_Sr17
+	ai2_spawn C_Sr18
+	ai2_spawn C_Sb75
+	ai2_spawn C_Sb76
+#	ai2_spawn C_Sb77
+	ai2_spawn C_Sb78
+	objective_set(2)
+	target_set (558,30.0)
+	music_stop
+}
+
+func void set_objective_5(string ai_name)
+{
+	dprint set_objective_5
+	objective_set(5)
+#	target_set (258,30.0)
+}
+
+###################
+#	save game	#
+###################
+
+func void s1(string ai_name)
+{
+	dprint SAVEDGAME1	
+
+	if (my_save_point ne 1)
+	{
+		save_game 1 autosave
+	}
+}
+
+func void s2(string ai_name)
+{
+	dprint SAVEDGAME2	
+
+	if (my_save_point ne 2)
+	{
+		save_game 2 autosave
+	}
+
+	ai2_dopath C_Sr17 patrol_17
+	ai2_setjobstate C_Sr17
+	ai2_dopath C_Sr18 patrol_18
+	ai2_setjobstate C_Sr18
+
+}
+
+func void s3(string ai_name)
+{
+	dprint SAVEDGAME3	
+
+	if (my_save_point ne 3)
+	{
+		save_game 3 autosave
+	}
+}
+
+func void s4(string ai_name)
+{
+	dprint SAVEDGAME4	
+
+	if (my_save_point ne 4)
+	{
+		save_game 4 autosave
+	}
+}
+
+##########################
+#	cut scene scripts  #
+##########################
+
+var int run_truck_once = 0;
+
+func void runTruck(string ai_name)
+{
+	dprint runTruck_check
+	if (run_truck_once eq 0)
+	{
+		ai2_tripalarm 1 char_0
+	}
+	run_truck_once = 1;
+
+	if (chr_has_lsi(0))
+	{
+		dprint LSI_OK
+		if (trigvolume_count(29) eq 0)
+		{
+			trigvolume_enable trigger_volume_23 0
+			dprint truck_ok
+			chr_delete C_b74
+			chr_delete C_Eb73
+			Truck
+			sleep 30
+			ai2_spawn D_R33	
+			chr_delete C_Eb21
+			chr_delete C_Eb22
+			chr_delete C_Eb27			
+			chr_delete C_Eb29
+			chr_delete C_Eb30
+			chr_delete C_N23
+			chr_delete C_N24
+			chr_delete C_Sb25
+			chr_delete C_Sb26
+			chr_delete C_Sr17
+			chr_delete C_Sr18
+			chr_delete C_Tb20
+			chr_delete C_Tr28	
+			#chr_delete C_Sb77
+			chr_delete C_Sb78		
+			objective_set(4)
+			target_set (501,30.0)
+			particle obj1 kill
+			s3
+		}	
+	}
+}
+
+
+func void t10(string ai_name)
+{
+
+	dprint t10
+	if (trigvolume_count(25) eq 0)
+	{
+		if (stairs_open eq 1)
+		{
+			trigvolume_enable trigger_volume_10 0
+			trigvolume_enable trigger_volume_12 0
+			trigvolume_enable trigger_volume_26 0
+			dprint ParkLeft
+			ParkLeft	
+			particle obj1 create
+			objective_set(3)
+			target_set(511,30.0)
+#			ai2_makeignoreplayer ParkStriker 1
+		}
+	}
+}
+
+func void t12(string ai_name)
+{
+
+	dprint t12
+	if (trigvolume_count(26) eq 0)
+	{	
+		if (stairs_open eq 1)
+		{
+			trigvolume_enable trigger_volume_12 0
+			trigvolume_enable trigger_volume_10 0
+			trigvolume_enable trigger_volume_25 0
+			dprint ParkRight
+			ParkRight
+			particle obj1 create
+			objective_set(3)
+			target_set(511,30.0)
+#			ai2_makeignoreplayer ParkStriker 1
+		}
+	}
+}
+
+func void patrolscript0027(string ai_name)
+{
+	dprint patrolscript0027
+	ai2_dopath C_Sb25 patrol_52
+	ai2_setjobstate C_Sb25
+	ai2_dopath C_Sb26 patrol_53
+	ai2_setjobstate C_Sb26
+	ai2_dopath C_Eb27 patrol_27b
+	ai2_setjobstate C_Eb27
+}
+
+func void com_ok(string ai_name)
+{
+	dprint final_ok
+	comdies_ok = 1
+}
+
+func void fconsole_ok(string ai_name)
+{
+	dprint fconsole_ok
+	conused_ok = 1
+	objective_set(6)
+	text_console level_19d
+	target_set(502,30.0)
+	particle green create
+	sleep 400
+	particle green2 create
+	particle green3 create
+}
+
+func void t31(string ai_name)
+{
+	dprint t31
+	if (conused_ok eq 1)
+	{
+#		if (comdies_ok eq 1)
+#		{
+			dprint TO_FINAL_BATTLE
+			target_set(1,0.0)
+			music_stop
+			dish
+#		}
+	}
+}
+
+func void check_death1a(string ai_name)
+{
+	dprint death1a
+	Round2a
+}
+
+func void check_death1b(string ai_name)
+{
+	dprint death1a
+	Round2b
+}
+
+func void final_round(string ai_name)
+{
+	dprint check_ROUND_3
+	counter = counter - 1
+	if(counter eq 0)
+	{
+		Round3
+	}
+}
+
+func void check_death2(string ai_name)
+{
+	Outro
+}
+
+func void Round2a(string ai_name)
+{
+	dprint ROUND_2a
+	round2_spawned = round2_spawned + 1;
+
+	ai2_spawn GrifElite04
+
+	ai2_passive GrifElite04 1
+
+	playback_block GrifElite04 GrifWave2_Run1
+
+	ai2_passive GrifElite04 0
+
+	if (muro_in_danger eq 1) {
+		# force the backup to go after konoko only
+		ai2_attack GrifElite04 char_0
+	}
+	if (muro_in_danger eq 0) {
+		ai2_makeaware GrifElite04 char_0
+	}
+}
+
+func void Round2b(string ai_name)
+{
+	dprint ROUND_2b
+	round2_spawned = round2_spawned + 1;
+
+	ai2_spawn GrifElite05
+
+	ai2_passive GrifElite05 1
+
+	playback_block GrifElite05 GrifWave2_Run1
+
+	ai2_passive GrifElite05 0
+
+	if (muro_in_danger eq 1) {
+		# force the backup to go after konoko only
+		ai2_attack GrifElite05 char_0
+	}
+	if (muro_in_danger eq 0) {
+		ai2_makeaware GrifElite05 char_0
+	}
+}
+
+func void Round3(string ai_name)
+{
+	dprint ROUND_3
+	round2_spawned = round2_spawned + 1;
+
+	ai2_spawn GrifElite06
+
+	ai2_passive GrifElite06 1
+
+	playback_block GrifElite06 GrifWave2_Run3
+
+	ai2_passive GrifElite06 0
+
+
+	if (muro_in_danger eq 1) {
+		# force the backup to go after konoko only
+		ai2_attack GrifElite06 char_0
+	}
+	if (muro_in_danger eq 0) {
+		# go after other dudes
+		ai2_makeaware GrifElite06 char_0
+	}
+}
+
+func void wait_to_help(void)
+{
+	chr_wait_health Muro 200
+	
+	dprint MURO_IN_DANGER
+	ai2_boss_battle = 0;
+	muro_in_danger = 1;
+	ai2_attack GrifElite01 char_0
+	ai2_attack GrifElite02 char_0
+	ai2_attack GrifElite03 char_0
+	ai2_attack GrifElite04 char_0
+	ai2_attack GrifElite05 char_0
+	ai2_attack GrifElite06 char_0
+}
+
+###################
+#	console	#
+###################
+
+func void console_truckinfo(void)
+{
+	text_console level_19e
+	console_reset 6
+}
+
+func void unlock44(string ai_name)
+{
+#	begin_cutscene
+#	ai2_makeignoreplayer C_Sb77 1
+#	ai2_makeignoreplayer C_Sb78 1
+#	ai2_makeignoreplayer C_Eb22 1
+#	ai2_makeignoreplayer C_Eb21 1
+#	ai2_makeignoreplayer C_Tb20 1
+#	ai2_makeignoreplayer C_Sr19 1
+#	ai2_makeignoreplayer C_Sr18 1
+#	ai2_makeignoreplayer C_Sr17 1
+#	ai2_makeignoreplayer C_Sb76 1
+#	ai2_makeignoreplayer C_Sb75 1
+	input 0
+	chr_invincible char_0 1
+	letterbox 1
+	fade_out 0 0 0 30
+	ai2_spawn C_Er79
+	music_guns
+	cm_interpolate door44 0
+	fade_in 30
+	target_set(559,30.0)
+}
+
+func void patrolscript0079(string ai_name)
+{
+	particle d1_locklight01 do start
+#	sleep 60
+	door_unlock 44
+	sleep 60
+	sound_dialog_play c18_70_13elite
+	sound_dialog_play_block
+}
+
+func void patrolscript0080(string ai_name)
+{
+	sleep 90
+	cm_interpolate door44b 300
+	sleep 160
+	sound_dialog_play c18_74_05elite
+#	sound_dialog_play_block
+	sleep 80
+	fade_out 0 0 0 60
+	sleep 60
+	cm_reset
+	fade_in 30
+	input 1
+#	end_cutscene
+	letterbox 0
+	chr_invincible char_0 0
+#	ai2_makeignoreplayer C_Sb77 0
+#	ai2_makeignoreplayer C_Sb78 0
+#	ai2_makeignoreplayer C_Eb22 0
+#	ai2_makeignoreplayer C_Eb21 0
+#	ai2_makeignoreplayer C_Tb20 0
+#	ai2_makeignoreplayer C_Sr19 0
+#	ai2_makeignoreplayer C_Sr18 0
+#	ai2_makeignoreplayer C_Sr17 0
+#	ai2_makeignoreplayer C_Sb76 0
+#	ai2_makeignoreplayer C_Sb75 0
+#	ai2_dopath C_Sr17 patrol_81
+#	ai2_dopath C_Sb75 patrol_81
+#	ai2_dopath C_Sb76 patrol_81
+	ai2_tripalarm 1 char_0
+}
+
+func void run1(string ai_name)
+{
+	dprint run1
+	ai2_doalarm A_Sb7 1
+	ai2_dopath A_Sb7 patrol_00
+#	ai2_setjobstate A_Sb7
+}
+
+func void patrolscript0054(string ai_name)
+{
+	dprint doalarm
+	ai2_doalarm A_Sb7 1
+}
+
+func void do_alarm_sound(void)
+{
+	sound_ambient_start alarm_loop
+	sleep 900
+	sound_ambient_stop alarm_loop
+}
+
+func void run1_alarm(string ai_name)
+{
+	dprint run1_alarm
+	fork do_alarm_sound
+	ai2_dopath A_E3 patrol_49	
+	ai2_dopath A_E4 patrol_49
+	ai2_dopath A_E5 patrol_49
+	ai2_dopath A_E6 patrol_49
+	ai2_spawn B_Sr9
+	sleep 7
+	ai2_dopath B_Sr9 patrol_10
+	ai2_spawn B_Eb11
+	sleep 60
+	ai2_dopath B_Eb11 patrol_10
+}
+
+func void driverhurt(string ai_name)
+{
+	dprint driverhurt
+	ai2_tripalarm 1 char_0
+}
+
+func void AreaF(string ai_name)
+{
+	console_count = console_count + 1
+	if(console_count eq 1)
+	{
+		text_console level_19a
+		sound_dialog_play_block c15_57_01konoko
+		sound_dialog_play_block pause
+		end_cutscene
+	}
+	if(console_count eq 2)
+	{
+		text_console level_19b
+		sound_dialog_play_block c15_57_02konoko
+	}
+	if (console_count eq 3)
+	{
+		dprint Area_F_now_open
+		trigvolume_enable attack_1tv 1
+		trigvolume_enable attack_2tv 1
+		trigvolume_enable attack_3tv 1
+		trigvolume_enable attack_3tv_copy 1
+		trigvolume_enable attack_4tv 1
+		text_console level_19c
+		set_objective_5
+		sound_dialog_play_block c15_57_03konoko
+		sound_dialog_play_block pause
+		sleep 60
+		music_guns
+	}
+}
+
+func void target100(void)
+{
+	console100used = 1;
+	if(console200used eq 0)
+	{
+		target_set(556,30.0)
+	}
+	if(console200used eq 1)
+	{
+		if(console300used eq 0)
+		{
+			target_set(557,30.0)
+		}
+	}
+	if(console200used eq 1)
+	{
+		if(console300used eq 1)
+		{
+			target_set(547,30.0)
+		}
+	}
+}
+	
+func void target200(void)
+{
+	console200used = 1;
+	if(console300used eq 0)
+	{
+		target_set(557,30.0)
+	}
+	if(console300used eq 1)
+	{
+		if(console100used eq 0)
+		{
+			target_set(555,30.0)
+		}
+	}
+	if(console300used eq 1)
+	{
+		if(console100used eq 1)
+		{
+			target_set(547,30.0)
+		}
+	}
+}
+
+func void target300(void)
+{
+	console300used = 1;
+	if(console200used eq 0)
+	{
+		target_set(556,30.0)
+	}
+	if(console200used eq 1)
+	{
+		if(console100used eq 0)
+		{
+			target_set(555,30.0)
+		}
+	}
+	if(console200used eq 1)
+	{
+		if(console100used eq 1)
+		{
+			target_set(547,30.0)
+		}
+	}
+}
+
+#func void console100(string ai_name)
+#{
+#	dprint console100
+#	console_deactivate 101
+#	AreaF
+#	target100
+#}
+
+func void console101(string ai_name)
+{
+	dprint console101
+	console101used = 1;
+	target100
+#	console_deactivate 100
+	AreaF
+}
+
+func void console200(string ai_name)
+{
+	dprint console200
+	target200
+	AreaF
+}
+
+func void console300(string ai_name)
+{
+	music_guns_stop
+	dprint console300
+	console_deactivate 301
+	target300
+	AreaF
+}
+
+func void console301(string ai_name)
+{
+	music_guns_stop
+	dprint console301
+	console_deactivate 300
+	target300
+	AreaF
+}
+
+func void purp2(void)
+{
+	input 0
+	fade_out 0 0 0 30
+	cm_interpolate unlock_door 0
+	fade_in 30
+	sleep 60
+	particle purple2_locklight01 do start
+	door_unlock 20
+	door_unlock 21
+	door_unlock 22
+	door_unlock 23
+	door_unlock 24
+	door_unlock 25
+	door_unlock 26
+	door_unlock 27
+	door_unlock 28
+	sleep 90
+	fade_out 0 0 0 30
+	cm_reset
+	fade_in 30
+	input 1
+}
+
+func void purple2_unlock(string ai_name)
+{
+	dprint purple2_unlock
+	purp2()
+	trigvolume_enable trigger_volume_21 1
+	trigvolume_enable trigger_volume_21_copy 1
+	trigvolume_enable trigger_volume_44 1
+	trigvolume_enable trigger_volume_45 1
+	console_deactivate 100
+}
+
+func void purple2_unlock_b(string ai_name)
+{
+	dprint purple2_unlockb
+	purp2()
+	if(console101used eq 0)
+	{
+		target_set(555,30.0)
+	}
+	console_deactivate 200
+}
+
+func void unlock_stairs(string ai_name)
+{
+	dprint unlock_stairs
+	music_stop
+	door_unlock 10
+	door_unlock 15
+	door_unlock 16
+	door_unlock 17
+	particle stair_locklight01 do start
+	ai2_spawn S_Tr41
+	console_deactivate 4
+#	console_deactivate 5
+	console_deactivate 3
+	stairs_open = 1
+	target_set(1,0.0)
+}
+
+
+func void unlock_stairs2(string ai_name)
+{
+	dprint unlock_stairs
+	music_stop
+	door_unlock 10
+	door_unlock 15
+	door_unlock 16
+	door_unlock 17
+	particle stair_locklight01 do start
+	console_deactivate 3
+#	console_deactivate 5
+	ai2_spawn S_Tr41
+	ai2_spawn C_b74
+	ai2_spawn C_Eb73
+	chr_teleport C_b74 224
+	ai2_dopath C_b74 patrol_80
+	chr_teleport C_Eb73 237
+	ai2_dopath C_Eb73 patrol_80
+	stairs_open = 1
+}
+
+
+#########################
+#  trigger volume stuff #
+#########################
+func void t8(string ai_name)
+{
+	dprint t8
+#	ai2_spawn C_Sb77
+	ai2_spawn C_Sb78
+	ai2_spawn C_Sr19
+	ai2_spawn C_Tb20
+	ai2_spawn C_Eb21
+	ai2_spawn C_Eb22
+	ai2_spawn C_N23
+	ai2_spawn C_N24
+	ai2_spawn C_Eb29
+	ai2_spawn C_Eb30
+}
+
+
+func void t9(string ai_name)
+{
+	dprint t9
+	ai2_spawn B_Eb16
+}
+
+func void t11(string ai_name)
+{
+	dprint t11
+	ai2_dopath C_Sb25 patrol_48
+	sleep 60
+	ai2_dopath C_Sb26 patrol_48
+	sleep 60
+	ai2_dopath C_Eb27 patrol_48
+
+}
+
+
+func void t13(string ai_name)
+{
+	dprint t13
+	ai2_spawn E_Er34
+	sleep 60
+	door_unlock 24
+#	door_unlock 23
+#	door_unlock 22
+	particle purple_locklight01 do start
+	ai2_dopath E_Er34 patrol_34
+	ai2_setjobstate E_Er34
+	ai2_spawn E_Eb35
+	target_set(501,30.0)	
+}
+
+func void t14(string ai_name)
+{
+	dprint t14
+	ai2_spawn E_N36
+	ai2_spawn E_Tr40
+	trigvolume_enable trigger_volume_15 0	
+}
+
+func void t15(string ai_name)
+{
+	dprint t15
+	ai2_spawn E_N35
+	ai2_spawn E_Nr46
+	trigvolume_enable trigger_volume_14 0	
+}
+
+func void t16(string ai_name)
+{
+	dprint t16
+	ai2_spawn E_Nr36
+	ai2_spawn E_Nb37
+	ai2_spawn E_Nr39
+	target_set (556,30.0)
+	door_unlock 22
+	particle purple3_locklight01 do start
+}
+
+func void t20(string ai_name)
+{
+	dprint t20
+	ai2_spawn E_N42
+	trigvolume_enable trigger_volume_18 0
+#	console_deactivate 100	
+	
+}
+
+func void t18(string ai_name)
+{
+	dprint t18
+	ai2_spawn E_N44
+	ai2_spawn E_R46
+	trigvolume_enable trigger_volume_20 0	
+#	console_deactivate 101	
+
+}
+
+func void t19(string ai_name)
+{
+	dprint t19
+	ai2_spawn E_Er45
+	ai2_spawn E_N41
+	trigvolume_enable trigger_volume_17 0
+#	console_deactivate 300	
+}
+
+func void t17(string ai_name)
+{
+	dprint t17
+	ai2_spawn E_N43
+	trigvolume_enable trigger_volume_19 0
+#	console_deactivate 301	
+	
+}
+
+func void t45(string ai_name)
+{
+	ai2_makeignoreplayer E_Eb35 1
+	ai2_makeignoreplayer E_Er34 1
+	ai2_makeignoreplayer E_Er45 1
+	ai2_makeignoreplayer E_Nb37 1
+	ai2_makeignoreplayer E_Nb38 1
+	ai2_makeignoreplayer E_Nr36 1
+	ai2_makeignoreplayer E_Nr39 1
+	ai2_makeignoreplayer E_Nr46 1
+	ai2_makeignoreplayer E_R46 1
+	ai2_makeignoreplayer E_Tr40 1
+	sleep 600
+	if(thru_door eq 0)
+	{
+		dprint DIDNOTGOTHRUDOOR
+	ai2_makeignoreplayer E_Eb35 0
+	ai2_makeignoreplayer E_Er34 0
+	ai2_makeignoreplayer E_Er45 0
+	ai2_makeignoreplayer E_Nb37 0
+	ai2_makeignoreplayer E_Nb38 0
+	ai2_makeignoreplayer E_Nr36 0
+	ai2_makeignoreplayer E_Nr39 0
+	ai2_makeignoreplayer E_Nr46 0
+	ai2_makeignoreplayer E_R46 0
+	ai2_makeignoreplayer E_Tr40 0
+	}
+}
+
+func void t21(string ai_name)
+{
+	dprint t21
+	input 0
+	letterbox 1
+	cm_interpolate red1 260
+	music_guns
+	sleep 90
+	particle mainchamber_locklight01 do start
+	door_unlock 18
+	door_unlock 19
+	ai2_spawn D_R31
+	ai2_spawn D_R32
+	ai2_spawn D_E83
+	door_open 18
+	door_open 19
+	sleep 180
+	door_lock 18
+	door_lock 19
+	particle mainchamber_locklight01 do stop
+	sleep 15
+	cm_interpolate red2 400
+	sleep 90
+	fade_out 0 0 0 30
+	sleep 30
+	cm_reset
+	fade_in 30
+	letterbox 0
+	input 1
+	trigvolume_enable trigger_volume_21_copy 0
+	trigvolume_enable trigger_volume_45 0
+	sleep 60
+	ai2_makeignoreplayer E_Eb35 0
+	ai2_makeignoreplayer E_Er34 0
+	ai2_makeignoreplayer E_Er45 0
+	ai2_makeignoreplayer E_Nb37 0
+	ai2_makeignoreplayer E_Nb38 0
+	ai2_makeignoreplayer E_Nr36 0
+	ai2_makeignoreplayer E_Nr39 0
+	ai2_makeignoreplayer E_Nr46 0
+	ai2_makeignoreplayer E_R46 0
+	ai2_makeignoreplayer E_Tr40 0
+	thru_door = 1;
+	sleep 300
+}
+
+func void t22(string ai_name)
+{
+	dprint t22
+	ai2_makeignoreplayer E_Eb35 1
+	ai2_makeignoreplayer E_Er34 1
+	ai2_makeignoreplayer E_Er45 1
+	ai2_makeignoreplayer E_Nb37 1
+	ai2_makeignoreplayer E_Nb38 1
+	ai2_makeignoreplayer E_Nr36 1
+	ai2_makeignoreplayer E_Nr39 1
+	ai2_makeignoreplayer E_Nr46 1
+	ai2_makeignoreplayer E_R46 1
+	ai2_makeignoreplayer E_Tr40 1
+	input 0
+	letterbox 1
+	cm_interpolate red3 260
+	music_guns
+	sleep 90
+	particle mainchamber_locklight01 do start
+	door_unlock 18
+	door_unlock 19
+	ai2_spawn D_R31
+	ai2_spawn D_R32
+	ai2_spawn D_E83
+	door_open 18
+	door_open 19
+	sleep 180
+	door_lock 18
+	door_lock 19
+	particle mainchamber_locklight01 do stop
+	sleep 15
+	cm_interpolate red4 400
+	sleep 90
+	fade_out 0 0 0 30
+	sleep 30
+	cm_reset
+	fade_in 30
+	letterbox 0
+	input 1
+	trigvolume_enable trigger_volume_21 0
+	trigvolume_enable trigger_volume_44 0
+	sleep 60
+	ai2_makeignoreplayer E_Eb35 0
+	ai2_makeignoreplayer E_Er34 0
+	ai2_makeignoreplayer E_Er45 0
+	ai2_makeignoreplayer E_Nb37 0
+	ai2_makeignoreplayer E_Nb38 0
+	ai2_makeignoreplayer E_Nr36 0
+	ai2_makeignoreplayer E_Nr39 0
+	ai2_makeignoreplayer E_Nr46 0
+	ai2_makeignoreplayer E_R46 0
+	ai2_makeignoreplayer E_Tr40 0
+	thru_door = 1;
+	sleep 300
+	music_stop
+}
+
+func void wake_E(string ai_name)
+{
+	sleep 60
+	ai2_makeignoreplayer E_Eb35 0
+	ai2_makeignoreplayer E_Er34 0
+	ai2_makeignoreplayer E_Er45 0
+	ai2_makeignoreplayer E_Nb37 0
+	ai2_makeignoreplayer E_Nb38 0
+	ai2_makeignoreplayer E_Nr36 0
+	ai2_makeignoreplayer E_Nr39 0
+	ai2_makeignoreplayer E_Nr46 0
+	ai2_makeignoreplayer E_R46 0
+	ai2_makeignoreplayer E_Tr40 0
+}
+
+func void sleep_E(string ai_name)
+{
+	ai2_makeignoreplayer E_Eb35 1
+	ai2_makeignoreplayer E_Er34 1
+	ai2_makeignoreplayer E_Er45 1
+	ai2_makeignoreplayer E_Nb37 1
+	ai2_makeignoreplayer E_Nb38 1
+	ai2_makeignoreplayer E_Nr36 1
+	ai2_makeignoreplayer E_Nr39 1
+	ai2_makeignoreplayer E_Nr46 1
+	ai2_makeignoreplayer E_R46 1
+	ai2_makeignoreplayer E_Tr40 1
+}
+
+func void fpath(string ai_name)
+{
+	ai2_dopath F_Eb43 patrol_43
+	ai2_setjobstate F_Eb43
+	sleep 30
+	ai2_dopath F_Eb44 patrol_44
+	ai2_setjobstate F_Eb44
+	sleep 30
+	ai2_dopath F_Eb47 patrol_47
+	ai2_setjobstate F_Eb47
+	music_stop
+}
+
+func void attack_1(string ai_name)
+{
+	dprint attack_1
+	sleep_E
+	chr_invincible char_0 1
+	letterbox 1
+	sleep 15
+	input 0
+	cm_interpolate attack1 90
+	ai2_spawn F_Eb43
+	ai2_spawn F_Eb44
+	ai2_spawn F_Eb47
+	door_unlock 43	
+#	sleep 60
+	sleep 90
+	particle F_locklight01 do start
+	fpath
+
+	cm_interpolate attack2 240
+	sleep 300
+	cm_interpolate attack1 600
+	chr_teleport 0 506
+	sleep 90
+	letterbox 0
+	cm_reset
+	chr_invincible char_0 0
+	trigvolume_enable attack_2tv 0
+	trigvolume_enable attack_3tv 0
+	trigvolume_enable attack_3tv_copy 0
+	trigvolume_enable attack_4tv 0
+	input 1
+	ai2_dopath F_Eb43 patrol_43b
+	ai2_setjobstate F_Eb43
+	ai2_dopath F_Eb44 patrol_44b
+	ai2_setjobstate F_Eb44
+	ai2_dopath F_Eb47 patrol_47b
+	ai2_setjobstate F_Eb47
+	wake_E
+}
+
+func void attack_2(string ai_name)
+{
+	dprint attack_2
+	sleep_E
+	chr_invincible char_0 1
+	letterbox 1
+	sleep 15
+	input 0
+	cm_interpolate attack2b 120
+	sleep 120
+	cm_interpolate attack2 400
+	sleep 100
+	particle F_locklight01 do start
+	sleep 80
+	ai2_spawn F_Eb43
+	ai2_spawn F_Eb44
+	ai2_spawn F_Eb47
+	door_unlock 43
+	fpath
+	sleep 290
+	cm_interpolate attack2b 500
+	chr_teleport 0 507
+	sleep 90
+	letterbox 0
+	cm_reset
+	chr_invincible char_0 0
+	trigvolume_enable attack_1tv 0
+	trigvolume_enable attack_3tv 0
+	trigvolume_enable attack_3tv_copy 0
+	trigvolume_enable attack_4tv 0
+	input 1
+	ai2_dopath F_Eb43 patrol_43b
+	ai2_setjobstate F_Eb43
+	ai2_dopath F_Eb44 patrol_44b
+	ai2_setjobstate F_Eb44
+	ai2_dopath F_Eb47 patrol_47b
+	ai2_setjobstate F_Eb47
+	wake_E
+}
+
+
+func void attack_3(string ai_name)
+{
+  if(count_attack3 eq 0)
+  {
+	count_attack3 = count_attack3 + 1;
+	dprint attack_3
+	chr_invincible char_0 1
+	sleep_E
+	letterbox 1
+	sleep 15
+	input 0
+	cm_interpolate attack3 90
+	ai2_spawn F_Eb43
+	ai2_spawn F_Eb44
+	ai2_spawn F_Eb47
+	door_unlock 43	
+	sleep 90
+	cm_interpolate attack4 210
+	particle F_locklight01 do start
+	fpath
+	sleep 150
+	cm_interpolate attack3 400
+	chr_teleport 0 508
+	sleep 90
+	letterbox 0
+	cm_reset
+	chr_invincible char_0 0
+	trigvolume_enable attack_2tv 0
+	trigvolume_enable attack_3tv_copy 0
+	trigvolume_enable attack_3tv 0
+	trigvolume_enable attack_1tv 0
+	trigvolume_enable attack_4tv 0
+	input 1
+	ai2_dopath F_Eb43 patrol_43b
+	ai2_setjobstate F_Eb43
+	ai2_dopath F_Eb44 patrol_44b
+	ai2_setjobstate F_Eb44
+	ai2_dopath F_Eb47 patrol_47b
+	ai2_setjobstate F_Eb47
+	wake_E
+  }
+}
+
+func void attack_4(string ai_name)
+{
+	dprint attack_4
+	chr_invincible char_0 1
+	sleep_E
+	letterbox 1
+	sleep 15
+	input 0
+	cm_interpolate attack3b 120
+	sleep 120
+	cm_interpolate attack4 300
+	sleep 240
+	particle F_locklight01 do start
+	ai2_spawn F_Eb43
+	ai2_spawn F_Eb44
+	ai2_spawn F_Eb47
+	door_unlock 43
+	fpath
+	sleep 160
+	cm_interpolate attack3b 500
+	chr_teleport 0 509
+	sleep 90
+	letterbox 0
+	cm_reset
+	chr_invincible char_0 0
+	trigvolume_enable attack_2tv 0
+	trigvolume_enable attack_3tv 0
+	trigvolume_enable attack_3tv_copy 0
+	trigvolume_enable attack_1tv 0
+	input 1
+	ai2_dopath F_Eb43 patrol_43b
+	ai2_setjobstate F_Eb43
+	ai2_dopath F_Eb44 patrol_44b
+	ai2_setjobstate F_Eb44
+	ai2_dopath F_Eb47 patrol_47b
+	ai2_setjobstate F_Eb47
+	wake_E
+}
+
+
+func void t27(string ai_name)
+{
+	dprint t27
+	ai2_dopath C_Sb25 patrol_54
+	ai2_dopath C_Sb26 patrol_54
+	ai2_dopath C_Eb27 patrol_54
+}
+
+func void t30(string ai_name)
+{
+	dprint t30
+	ai2_makeignoreplayer F_C62 0
+	ai2_spawn F_Er89
+}
+
+func void t33(string ai_name)
+{
+	dprint t33
+	ai2_spawn F_Er86
+	ai2_spawn F_Nr87
+	target_set(258,30.0)
+	sound_dialog_play c15_57_04konoko
+}
+func void t41(string ai_name)
+{
+	dprint t41
+	ai2_spawn F_Er59
+}
+
+func void t42(string ai_name)
+{
+	dprint t42
+	ai2_spawn F_Nr60
+}
+
+func void t43(string ai_name)
+{
+	dprint t43
+	ai2_spawn F_R61
+	ai2_spawn F_Er88
+	ai2_spawn F_C62
+	ai2_makeignoreplayer F_C62 1
+}
+
+func void comalarm(string ai_name)
+{
+	dprint comalarm
+	ai2_tripalarm 2 char_0
+}
+
+func void t38(string ai_name)
+{
+	dprint t38
+	ai2_spawn A_E4
+	ai2_spawn A_Sb63
+	ai2_spawn A_E6
+	ai2_spawn A_Sb7
+	ai2_spawn new_2
+}
+
+func void t40(string ai_name)
+{
+	dprint t40
+	input 0
+	letterbox 1
+	cm_interpolate red1 240
+	sleep 60
+	particle purple2_locklight01 do start
+	sleep 90
+	fade_out 0 0 0 30
+	cm_reset
+	fade_in 30
+	input 1
+}
+
+func void swat_dies(void)
+{
+	count_swat_dies = count_swat_dies - 1;
+	if(count_swat_dies eq 0)
+	{
+		ai2_attack GrifElite01 char_0
+		ai2_attack GrifElite02 char_0
+		ai2_attack GrifElite03 char_0
+		ai2_attack GrifElite04 char_0
+		ai2_attack GrifElite05 char_0
+	}
+}
Index: AE/packages/VanillaBSL/IGMD/compound/compound_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/compound/compound_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/compound/compound_cutscene.bsl	(revision 313)
@@ -0,0 +1,677 @@
+#
+# Compound_cutscene.bsl
+
+func void intro(void)
+{
+	fade_out 0 0 0 0
+	cm_interpolate IntroCam00 0
+	sleep f14
+	begin_cutscene	
+	ai2_allpassive 0
+	gs_farclipplane_set 10000
+	letterbox 1
+	cm_interpolate IntroCam00 0
+	sleep f60
+	chr_super 0 1
+	fade_in 120
+	music_intro
+	sleep f240
+	#Konoko drops from sky
+	cm_interpolate IntroCam01 300
+	sleep f300
+	cm_anim both IntroCam01
+	chr_envanim 0 IntroKonBox01 norotation
+	chr_animate 0 KONOKOlev7_Intro
+	sleep f90
+	cutscene_sync mark
+	sound_ambient_start c05_05_15kon_land
+	sleep f60
+	particle IntroImpact do explode
+	#close up of Konoko
+	cm_anim_block both IntroCam02
+	ai2_allpassive 1
+	#Vista shot
+	cm_wait
+	playback 0 IntroKonokoSet
+	cm_reset
+	end_cutscene
+	chr_set_health 0 400
+	chr_super 0 0
+	s1
+}
+
+
+func void ParkLeft(void)
+{
+	begin_cutscene
+	chr_teleport C_b74 541
+	ai2_dopath C_b74 patrol_74
+	chr_teleport C_Eb73 528
+	ai2_dopath C_Eb73 patrol_73
+	trigvolume_corpse 29
+	sleep f30
+	obj_create 51 59
+	env_anim 51 59
+	sleep f2
+	cm_interpolate ParkLeftCam01 0
+	#Show Truck objects
+	#see van entering from tunnel
+	sleep f8
+	cutscene_sync mark
+	sound_ambient_start c05_26_17_trucka
+	sleep f270
+	#Striker exits van
+	ai2_spawn ParkStriker
+	chr_lock_active ParkStriker
+	chr_neutral ParkStriker 1
+	cm_anim both ParkCam01
+	env_setanim 51 truckbackstop
+	env_setanim 52 truckcabstop
+	env_setanim 53 truckdoorstop
+	env_setanim 54 truckdoor2stop
+	env_setanim 55 truckwheel03stop
+	env_setanim 56 truckwheel04stop
+	env_setanim 57 truckwheel05stop
+	env_setanim 58 truckwheel06stop
+	env_setanim 59 truckwheel07stop
+	chr_envanim ParkStriker ParkStrikeBox01 norotation
+	sleep f40
+	cutscene_sync mark
+	sound_ambient_start c05_31_21_brake_doorsa
+	sleep f60
+	chr_animate ParkStriker STRIKElev7_Park
+	playback 0 ParkLeftKonoko
+	ai2_spawn C_Sb25
+	ai2_spawn C_Sb26
+	ai2_spawn C_Eb27
+	playback C_Sb25 truckers
+	sleep 40
+	playback C_Sb26 truckers
+	sleep 30
+	playback C_Eb27 truckers
+	sleep 60
+	#hide object van and unhide gunk van
+	obj_kill 51 59
+	env_show 151 1
+	env_show 152 1
+	env_show 153 1
+	env_show 154 1
+	env_show 155 1
+	env_show 156 1
+	env_show 157 1
+	env_show 158 1
+	env_show 159 1
+	#cm_wait
+	playback 0 ParkLeftKonoko01
+	#sleep f240
+	cm_reset
+	#chr_delete ParkStriker
+	#konoko talks
+	sleep f120
+	sound_dialog_play c15_57_05konoko
+	cinematic_start (KONlistening, 180, 180, 19, 7, 20, false)
+	sound_dialog_play_block
+	cinematic_stop (KONlistening, 19, 20)
+	end_cutscene
+	music_truck
+}
+
+func void ParkRight(void)
+{
+	begin_cutscene
+	chr_teleport C_b74 541
+	ai2_dopath C_b74 patrol_74
+	chr_teleport C_Eb73 528
+	ai2_dopath C_Eb73 patrol_73
+ 	trigvolume_corpse 29
+	sleep f30
+	obj_create 51 59
+	env_anim 51 59
+	sleep f2
+	cm_interpolate ParkRightCam01 0
+	#Show Truck objects
+	#see van entering from tunnel
+	sleep f8
+	cutscene_sync mark
+	sound_ambient_start c05_26_17_trucka
+	sleep f270
+	#Striker exits van
+	ai2_spawn ParkStriker
+	chr_lock_active ParkStriker
+	chr_neutral ParkStriker 1
+	cm_anim both ParkCam01
+	env_setanim 51 truckbackstop
+	env_setanim 52 truckcabstop
+	env_setanim 53 truckdoorstop
+	env_setanim 54 truckdoor2stop
+	env_setanim 55 truckwheel03stop
+	env_setanim 56 truckwheel04stop
+	env_setanim 57 truckwheel05stop
+	env_setanim 58 truckwheel06stop
+	env_setanim 59 truckwheel07stop
+	chr_envanim ParkStriker ParkStrikeBox01 norotation
+	sleep f40
+	cutscene_sync mark
+	sound_ambient_start c05_31_21_brake_doorsa
+	sleep f60
+	chr_animate ParkStriker STRIKElev7_Park
+	playback 0 ParkRightKonoko
+	ai2_spawn C_Sb25
+	ai2_spawn C_Sb26
+	ai2_spawn C_Eb27
+	playback C_Sb25 truckers
+	sleep 40
+	playback C_Sb26 truckers
+	sleep f30
+	playback C_Eb27 truckers
+	sleep 60
+	#hide object van and unhide gunk van
+	obj_kill 51 59
+	env_show 151 1
+	env_show 152 1
+	env_show 153 1
+	env_show 154 1
+	env_show 155 1
+	env_show 156 1
+	env_show 157 1
+	env_show 158 1
+	env_show 159 1
+	#cm_wait
+	playback 0 ParkRightKonoko01
+	#sleep f240
+	cm_reset
+	#chr_delete ParkStriker
+	#kononko talks
+	sleep f120
+	sound_dialog_play c15_57_05konoko
+	cinematic_start (KONlistening, 180, 180, 19, 7, 20, false)
+	sound_dialog_play_block
+	cinematic_stop (KONlistening, 19, 20)
+	end_cutscene
+	music_truck
+}
+
+
+func void Truck(void)
+{
+	trigvolume_corpse 29
+	begin_cutscene
+
+	#hide gunk and show object
+	obj_create 51 59
+	env_show 151 0
+	env_show 152 0
+	env_show 153 0
+	env_show 154 0
+	env_show 155 0
+	env_show 156 0
+	env_show 157 0
+	env_show 158 0
+	env_show 159 0
+	#Konoko enters Truck
+	cm_anim both TruckCam01
+	cutscene_sync mark
+	sound_ambient_start c05_26_17_truckb
+	chr_envanim 0 TruckKonBox01 norotation
+	chr_animate 0 KONOKOlev7_TruckEnter
+	env_setanim 54 truckdoor2enter
+	sound_dialog_play c15_57_06konoko
+	cinematic_start (KONintense, 180, 180, 19, 7, 20, false)
+
+	#Truck exhaust starts and truck peels out
+	#sleep f10
+	sound_ambient_start c05_31_21_brake_doorsb
+	cm_anim_block both TruckCam02
+	playback 0 TruckKonokoHide
+	ai2_allpassive 0
+	cinematic_stop (KONintense, 19, 20)
+	sleep f80
+	chr_teleport C_Sb25 238
+	ai2_dopath C_Sb25 patrol_70
+	chr_teleport C_Sb26 195
+	ai2_dopath C_Sb26 patrol_84
+	chr_teleport C_Eb27 227
+	ai2_dopath C_Eb26 patrol_85
+	env_setanim 51 truckbackdrive01
+	env_setanim 52 truckcabdrive01
+	env_setanim 53 truckdoordrive01
+	env_setanim 54 truckdoor2drive01
+	env_setanim 55 truckwheel03drive01
+	env_setanim 56 truckwheel04drive01
+	env_setanim 57 truckwheel05drive01
+	env_setanim 58 truckwheel06drive01
+	env_setanim 59 truckwheel07drive01
+
+	#Truck heads towrads camera
+	cm_interpolate_block TruckCam04 0
+	env_setanim 51 truckbackdrive02
+	env_setanim 52 truckcabdrive02
+	env_setanim 53 truckdoordrive02
+	env_setanim 54 truckdoor2drive02
+	env_setanim 55 truckwheel03drive02
+	env_setanim 56 truckwheel04drive02
+	env_setanim 57 truckwheel05drive02
+	env_setanim 58 truckwheel06drive02
+	env_setanim 59 truckwheel07drive02
+	sleep f160
+	fade_out 0 0 0 15
+	fade_in 15
+
+	#Truck heads towrads door
+	cm_anim both TruckCam03	
+	env_setanim 51 truckbackdrive02
+	env_setanim 52 truckcabdrive02
+	env_setanim 53 truckdoordrive02
+	env_setanim 54 truckdoor2drive02
+	env_setanim 55 truckwheel03drive02
+	env_setanim 56 truckwheel04drive02
+	env_setanim 57 truckwheel05drive02
+	env_setanim 58 truckwheel06drive02
+	env_setanim 59 truckwheel07drive02
+
+	#Truck crashes through door
+	cm_anim_block both TruckCam05
+	env_setanim 51 truckbackcrash
+	env_setanim 52 truckcabcrash
+	env_setanim 53 truckdoorcrash
+	env_setanim 54 truckdoor2crash
+	env_setanim 55 truckwheel03crash
+	env_setanim 56 truckwheel04crash
+	env_setanim 57 truckwheel05crash
+	env_setanim 58 truckwheel06crash
+	env_setanim 59 truckwheel07crash
+
+	#break door here
+	sleep f35
+	cutscene_sync mark
+	sound_ambient_start c05_53_27_crash
+	sleep f10
+	particle TruckDoor do explode
+	env_show 911 1
+	env_show 912 0
+	env_show 913 0
+	env_show 914 1
+
+	#Konoko exits truck
+	sleep f125
+	cutscene_sync mark
+	sound_ambient_start c05_31_21_brake_doorsc
+	cm_anim_block both TruckCam06
+	chr_envanim 0 TruckKonBox02 norotation
+	chr_animate 0 KONOKOlev7_TruckExit
+	env_setanim 54 truckdoor2exit
+
+	#gameplay resumes
+	cm_wait
+	env_show 915 1
+	env_show 916 1
+	env_show 251 1
+	env_show 252 1
+	env_show 253 1
+	env_show 254 1
+	env_show 255 1
+	env_show 256 1
+	env_show 257 1
+	env_show 258 1
+	env_show 259 1
+	obj_kill 51 59
+	cm_reset
+	playback 0 TruckExitKonoko
+	end_cutscene
+
+	stop_music_truck
+}
+
+func void sp_start_dish_loop(void)
+{
+	sound_ambient_start mc_dish_loop 0.6
+}
+
+func void sp_start_dish_and_wait(void)
+{
+	sleep 320
+	sound_ambient_start mc_dish_loop 0.1
+	sound_ambient_volume mc_dish_loop 0.6 4.0
+}
+
+func void dish(void)
+{
+	begin_cutscene
+	gs_farclipplane_set 5000
+	sleep f60
+	#hide and unhide dish stuff
+	obj_create 201 209
+	obj_shade 201 209 .5 .5 .5
+	env_show 301 0
+	env_show 302 0
+	env_show 303 0
+	env_show 304 0
+	env_show 305 0
+	env_show 306 0
+	env_show 307 0
+	env_show 308 0
+	env_show 309 0
+	cm_anim both DishCam01
+	chr_peace 0
+	chr_envanim 0 DishKonokoBox01
+	sleep f60
+	obj_force_draw 201 209
+	cutscene_sync mark
+	sound_ambient_start c06_08_03_basic
+	sleep f440
+	#dish thing starts to raise
+	env_anim 201 209
+	cm_anim_block both DishCam02
+	cm_anim_block both DishCam03
+	cm_anim_block both DishCam04
+	sleep f120
+	cutscene_sync mark
+	sound_ambient_start c06_35_00_servo
+	cm_anim_block both DishCam05
+	sleep f300
+	#close up of Konoko
+	env_show 401 1
+	env_show 402 1
+	env_show 403 1
+	env_show 404 1
+	env_show 405 1
+	env_show 406 1
+	env_show 407 1
+	env_show 408 1
+	env_show 409 1
+	obj_kill 201 209
+	#Vista shot
+	particle dish do explode
+	cutscene_sync mark
+	sound_ambient_start c16_49_01_amb2
+	gs_farclipplane_set 3000
+	cm_interpolate DishCam06 0
+	cm_interpolate_block DishCam07 940
+	sleep f600
+	cutscene_sync mark
+	sound_ambient_start c16_49_01_effectsa
+	sleep f330
+	cutscene_sync mark
+	sound_ambient_start c16_49_01_effectsb
+	fork sp_start_dish_and_wait
+	cm_wait
+	cm_interpolate DishCam08 0
+	particle dishpulse do start
+	particle sturm_ambient start
+	sleep f300
+	playback 0 GrifKonokoSet
+	cm_interpolate GrifCam01 180
+	sleep f120
+
+	#cm_reset
+	if (did_kill_griffen() eq 1)
+	{
+		mutant
+	}
+	if (did_kill_griffen() eq 0)
+	{
+		grif
+	}
+}
+
+
+func void grif(void)
+{
+	begin_cutscene
+	cutscene_sync mark
+	sound_ambient_start c07_17_19heli
+	#camera pans to see Konoko looking at dish
+	#playback 0 GrifKonokoSet
+	#cm_interpolate GrifCam01 180
+	#sleep f240
+
+	# CB: this sets up the AI target selection parameters for the group battle
+	ai2_boss_battle = 1
+
+	#camera pans to see Muro
+	ai2_spawn Muro
+	ai2_passive Muro 1
+	if (extra_guys eq 1) {
+		ai2_spawn GrifElite01
+		counter = counter + 1;
+	}
+	ai2_spawn GrifElite02
+	ai2_spawn GrifElite03
+	playback Muro GrifMuroSet
+	playback GrifElite01 GrifElite01Set
+	playback GrifElite02 GrifElite02Set
+	playback GrifElite03 GrifElite03Set
+	cm_interpolate GrifCam02 150
+	sleep f10
+	playback GrifElite02 GrifElite02Set
+	sleep f5
+	playback GrifElite03 GrifElite03Set
+	sleep f150
+	#Muro says  you shouldn't have come here alone
+	cm_interpolate GrifCamMuro01 0
+	sound_dialog_play c15_60_01muro
+	cinematic_start (MUROtalking, 180, 180, 19, 7, 20, false)
+	sound_dialog_play_block pause
+	cinematic_stop (MUROtalking, 19, 20)
+	#Konoko looks pissed
+	playback 0 GrifKonokoSet02
+	cm_interpolate GrifCamKon01 0
+	sleep f15
+	#griffin appears in a helicopter behind her
+	cm_interpolate GrifCamHeli 240
+	sleep f20
+	obj_create 901 906
+	env_anim 901 906
+	ai2_spawn Griffin
+	if (extra_guys eq 1) {
+		ai2_spawn GrifOps01
+		count_swat_dies = count_swat_dies + 1;
+	}
+	ai2_spawn GrifOps02
+	ai2_spawn GrifOps03
+	chr_envanim Griffin GrifGrifBox01
+	if (extra_guys eq 1) {
+		chr_envanim GrifOps01 GrifOps01Box01
+		chr_envanim GrifOps02 GrifOps02Box01
+	}
+	if (extra_guys eq 0) {
+		chr_envanim GrifOps02 GrifOps01Box01
+	}
+	chr_envanim GrifOps03 GrifOps03Box01
+	chr_animate Griffin COMGUYlev7_helistand 500
+	chr_animate GrifOps01 STRIKEcrouch_idle 400
+	chr_animate GrifOps02 STRIKEcrouch_idle 400
+	chr_animate GrifOps03 STRIKEcrouch_idle 400
+	sleep f90
+	sound_dialog_play c15_60_02griffin
+	cinematic_start (GRIFshouting, 180, 180, 15, 1, 20, false)
+	sleep f200
+	cinematic_stop (GRIFshouting, 15, 20)
+	#Guys jump out of helicopter
+	env_setanim 901 heli_doors_rt08
+	env_setanim 902 heli_doors_lt08
+	env_setanim 903 heli_rotorblades08
+	env_setanim 904 heli_body08
+	env_setanim 905 heli_canopy08
+	env_setanim 906 heli_interior08
+	chr_envanim Griffin GrifGrifBox02 norotation
+	if (extra_guys eq 1) {
+		chr_envanim GrifOps01 GrifOps01Box02 norotation
+		chr_envanim GrifOps02 GrifOps02Box02 norotation
+	}
+	if (extra_guys eq 0) {
+		chr_envanim GrifOps02 GrifOps01Box02 norotation
+	}
+	chr_envanim GrifOps03 GrifOps03Box02 norotation
+	chr_animate Griffin COMGUYlev7_Grif
+	if (extra_guys eq 1) {
+		chr_animate GrifOps01 STRIKElev7_Ops01
+		chr_animate GrifOps02 STRIKElev7_Ops02
+	}
+	if (extra_guys eq 0) {
+		chr_animate GrifOps02 STRIKElev7_Ops01
+	}
+	chr_animate GrifOps03 STRIKElev7_Ops03
+	cm_anim both GrifCamOut
+	ai2_allpassive 1
+	sleep f240
+	#Guys run to help Konoko
+	playback Griffin GrifGrifRunAlt
+	if (extra_guys eq 1) {
+		playback GrifOps01 GrifOps01Run
+		playback GrifOps02 GrifOps02Run
+	}
+	if (extra_guys eq 0) {
+		playback GrifOps02 GrifOps01Run
+	}
+	sleep f10
+	playback GrifOps03 GrifOps03Run
+	cm_wait
+	#sleep f20
+	cm_interpolate GrifCamHelp01 0
+	sleep f20
+	cm_interpolate_block GrifCamHelp02 180
+	sleep f180
+	cm_interpolate GrifCamWatch01 0
+	cm_interpolate_block GrifCamWatch02 210
+	playback 0 GrifKonokoWatch
+	sleep f210
+
+	#Muro says you gonna trust him?
+	obj_kill 901 906
+	cm_interpolate GrifCamFace01 0
+	cm_interpolate_block GrifCamFace02 700
+	sound_dialog_play c15_60_03muro
+	cinematic_start (MUROtalking, 180, 180, 19, 7, 20, false)
+	sound_dialog_play_block pause 
+
+	#Konoko says he dreamed of life
+	cm_interpolate GrifCamKonFace01 0
+	cm_interpolate_block GrifCamKonFace02 800
+	sound_dialog_play c15_60_04konoko
+	cinematic_start (KONintense, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block pause
+	sound_dialog_play c15_60_05konoko
+	sound_dialog_play_block pause
+
+	sound_music_start mus_ot
+
+	cm_interpolate GrifCamMuroFace01 0
+	sound_dialog_play c15_60_06muro
+	sound_dialog_play_block pause
+	cinematic_stop (MUROtalking, 19, 20)
+
+	chr_set_health Muro 500
+
+	cinematic_stop (KONintense, 20, 20)
+	end_cutscene
+	ai2_passive Muro 0
+	chr_boss_shield Muro
+	cm_reset
+	s4
+	fork wait_to_help
+	paths
+	objective_set(6)
+}
+
+
+func void mutant(void)
+{
+	begin_cutscene
+	#camera pans to see Konoko looking at dish
+	#playback 0 GrifKonokoSet
+	#cm_interpolate GrifCam01 180
+	#sleep f240
+	#camera pans to see Muro
+	ai2_spawn Muro
+	ai2_passive Muro 1
+	playback Muro GrifMuroSet
+	cm_interpolate GrifCam02 150
+	sleep f150
+	#Muro says  you shouldn't have come here alone
+	cm_interpolate GrifCamMuro01 0
+	cm_interpolate_block MutantCam01 900
+	sound_dialog_play c15_59_01muro
+	cinematic_start (MUROtalking, 180, 180, 19, 7, 20, false)
+	sleep f500
+	#Konoko looks pissed
+	playback 0 GrifKonokoSet02
+	cm_interpolate GrifCamKon01 0
+	sleep f150
+	cinematic_stop (MUROtalking, 19, 20)
+	#muro transforms
+	cm_interpolate GrifCam02 0
+	particle MutantTransform do explode
+	cutscene_sync mark
+	sound_ambient_start c08_06_25muro
+	sleep f150
+	chr_animate Muro MUROtransform
+	cm_interpolate_block MutantCam01 200
+	sleep f170
+	#show Konoko protecting herself from the blast
+	cm_interpolate MutantCamKon 0
+	chr_animate 0 KONOKOlev7_blown
+	sleep f100
+	#kill muro and spawn mutant muro
+	chr_delete Muro 
+	ai2_spawn MutantMuro
+	playback MutantMuro MutantMuroEnd01
+	sleep 1
+	ai2_allpassive=1
+	chr_neutral MutantMuro 1
+	sleep f10
+	chr_animate MutantMuro MUTCOMtransform
+	cm_interpolate MutantCam01 0
+	cm_interpolate_block  MutantCam03 240
+	sleep f60
+	sound_dialog_play c15_59_02muro
+	cinematic_start (MUTANTMUROface, 180, 180, 19, 7, 20, false)
+	cm_interpolate MutantCam04 700
+	sound_dialog_play_block pause
+	#Konoko says surrender
+	cm_interpolate MutantCamKonTalk 0
+	sound_dialog_play c15_59_03konoko
+	cinematic_start (KONangryfront, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block pause
+
+	sound_music_start mus_ot
+
+	#Muro says never
+	#playback MutantMuro MutantMuroEnd01
+	#cm_interpolate MutantCamMuroEnd 0
+	#sleep f60
+	#playback MutantMuro MutantMuroEnd02
+	#sleep f120
+	#gameplay resumes
+	cinematic_stop (KONangryfront, 20, 20)
+	cinematic_stop (MUTANTMUROface, 19, 20)
+	cm_reset	
+	end_cutscene
+	chr_boss_shield MutantMuro
+	ai2_passive MutantMuro 0
+	s4
+	objective_set(7)
+}
+
+
+
+func void
+Outro(
+	void)
+{
+	sound_music_stop mus_ot
+
+	begin_cutscene jello
+
+	#slowmo
+	#weird particle effect
+	sleep f120
+	chr_animate 0 KONOKOendpowerup
+	sleep f120
+	cm_interpolate EndCam 600
+	sound_ambient_volume mc_dish_loop 1.0 4.0
+	sleep f500
+	fade_out 0 0 0 120
+	sleep f120
+	win
+}
Index: AE/packages/VanillaBSL/IGMD/compound/compound_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/compound/compound_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/compound/compound_main.bsl	(revision 313)
@@ -0,0 +1,64 @@
+#
+# compound_main.bsl
+#
+
+func void
+main(
+	void)
+{
+	env_shade 912 913 .4 .4 .4
+	env_show 911 0
+	env_show 914 0
+	env_show 915 0
+	env_show 916 0
+	input	1	
+	#hide animation Truck Gunk
+	env_show 151 0
+	env_show 152 0
+	env_show 153 0
+	env_show 154 0
+	env_show 155 0
+	env_show 156 0
+	env_show 157 0
+	env_show 158 0
+	env_show 159 0
+	env_show 251 0
+	env_show 252 0
+	env_show 253 0
+	env_show 254 0
+	env_show 255 0
+	env_show 256 0
+	env_show 257 0
+	env_show 258 0
+	env_show 259 0
+	#Hide dish2 gunk
+	env_show 401 0
+	env_show 402 0
+	env_show 403 0
+	env_show 404 0
+	env_show 405 0
+	env_show 406 0
+	env_show 407 0
+	env_show 408 0
+	env_show 409 0
+
+	my_save_point = save_point;
+
+	start
+
+	if (my_save_point eq 0)
+	{
+		gl_fog_blue=0.0
+		gl_fog_red=0.0
+		gl_fog_green=0.0
+		gl_fog_start=.985
+		intro
+		gs_farclipplane_set 1000
+	}
+
+	gl_fog_blue=0.0
+	gl_fog_red=0.0
+	gl_fog_green=0.0
+	gl_fog_start=.985
+	gs_farclipplane_set 1000
+}
Index: AE/packages/VanillaBSL/IGMD/compound/particle_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/compound/particle_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/compound/particle_scripts.bsl	(revision 313)
@@ -0,0 +1,43 @@
+#snow for the airfield
+func void snow1_start(string ai_name)
+{
+	dprint snow1_start
+	particle snow1 start
+}
+func void snow1_stop(string ai_name)
+{
+	dprint snow1_stop
+	particle snow1 stop
+}
+func void snow2_start(string ai_name)
+{
+	dprint snow2_start
+	particle snow2 start
+}
+func void snow2_stop(string ai_name)
+{
+	dprint snow2_stop
+	particle snow2 stop
+}
+func void snow3_start(string ai_name)
+{
+	dprint snow3_start
+	particle snow3 start
+}
+func void snow3_stop(string ai_name)
+{
+	dprint snow3_stop
+	particle snow3 stop
+}
+
+#peak particles form the mountain top
+func void peak_start(string ai_name)
+{
+	dprint peak_start
+	particle peak start
+}
+func void peak_stop(string ai_name)
+{
+	dprint peak_stop
+	particle peak stop
+}
Index: AE/packages/VanillaBSL/IGMD/dream_lab/dream_lab_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/dream_lab/dream_lab_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/dream_lab/dream_lab_cutscene.bsl	(revision 313)
@@ -0,0 +1,441 @@
+#
+# dreamlab_cutscene.bsl
+#
+
+func void stop_xtr2_in_15(void)
+{
+	sleep 720
+	sound_music_stop mus_xtr2
+}
+
+
+func void
+intro(
+	void)
+{
+	fade_out 0 0 0 0
+	obj_create 131 132
+	cm_interpolate IntroCamOpen 0
+	sleep f14
+	begin_cutscene
+	env_show 231 0
+	env_show 232 0
+	sleep f90
+	chr_envanim 0 IntroKonBox01 norotation
+	chr_animate 0 KONOKOlev13_Sit 8000
+	cm_interpolate IntroCamOpen 0
+	fade_in 120
+	sleep f180
+	#Konoko opens up laptop
+	cm_anim both IntroCamOpen
+	sound_dialog_play c12_42_01konoko
+	
+	sound_music_start atm_cl16 0.75
+
+	sleep f285
+	chr_envanim 0 IntroKonBox01 norotation
+	chr_animate 0 KONOKOlev13_Open
+	env_anim 131 132
+	#Konoko puts in disk
+	cm_wait
+	obj_create 481 481
+	cm_anim both IntroCamDisk
+	chr_envanim 0 IntroKonBox01 norotation
+	chr_animate 0 KONOKOlev13_Disk
+	env_anim 481 481
+	sleep f83
+	obj_kill 481 481
+	cm_wait
+	#Konoko reads
+	chr_envanim 0 IntroKonBox01 norotation
+	chr_animate 0 KONOKOlev13_Sit 8000
+	cm_anim both ImageCam01
+	sound_dialog_play c12_43_01hasegawa
+	sleep f120
+	obj_create 101 107
+	env_anim 101 101
+	sleep f60
+	fadefog
+	sound_dialog_play_block pause
+	sound_dialog_play c12_43_02hasegawa
+	sound_dialog_play_block pause
+	sleep f15
+	sound_dialog_play c12_43_03hasegawa
+	env_anim 102 102
+	sound_dialog_play_block pause
+	sleep f15
+	sound_dialog_play c12_43_04hasegawa
+	env_anim 103 103
+	obj_kill 101 101
+	sound_dialog_play_block pause
+	sleep f15
+	sound_dialog_play c12_43_05hasegawa
+	sound_dialog_play_block pause
+	chr_envanim 0 IntroKonBox01 norotation
+	chr_animate 0 KONOKOlev13_Sit 8000
+	env_anim 104 104
+	sleep f90
+	sound_dialog_play c12_43_06hasegawa
+	sound_dialog_play_block pause
+	sleep f60
+	sound_dialog_play c12_43_07hasegawa
+
+	sound_music_volume atm_cl16 0.0 6.0
+	sound_music_start atm_cl05 0.1
+	sound_music_volume atm_cl05 0.5 6.0
+
+	obj_kill 102 102
+	sound_dialog_play_block pause
+	sleep f15
+	env_anim 105 105
+	sleep f50
+	sound_dialog_play c12_43_08hasegawa
+	obj_kill 103 103
+	sound_dialog_play_block pause
+	sleep f45
+	sound_dialog_play c12_43_09hasegawa
+	env_anim 106 106
+	obj_kill 104 104
+	sound_dialog_play_block pause
+	sleep f60
+	sound_dialog_play c12_43_10hasegawa
+	env_anim 107 107
+	obj_kill 105 105
+	sound_dialog_play_block pause
+	sleep f120
+	#put gunshot and sobbing in here
+
+	sound_ambient_start gunshot
+	sound_music_stop atm_cl16
+	sound_music_volume atm_cl05 0.0 0.25
+
+	sleep 120
+	
+	sound_music_stop atm_cl05
+	sound_music_start mus_xtr2 0.6
+
+	sleep 120
+	#sound_dialog_play hasegawa_cry
+	#sound_dialog_play_block pause
+	#sleep f90
+	#Konoko reads more
+	chr_envanim 0 IntroKonBox01 norotation
+	chr_animate 0 KONOKOlev13_Sit 8000
+	cm_interpolate IntroCamHighLeft 0
+	cm_interpolate_block IntroCamHighRight 1000
+	fork stop_xtr2_in_15
+	sound_dialog_play c12_43_11hasegawa
+	sound_dialog_play_block pause
+	#camera pans to see wall missing and Konoko looks up
+	env_show 200 0
+	env_show 227 0
+	env_show 201 0
+	env_show 999 0
+	chr_envanim 0 IntroKonBox01 norotation
+	chr_animate 0 KONOKOlev13_Sit 8000
+	cm_interpolate IntroCamLowLeft 0
+	obj_kill 106 106
+	obj_kill 107 107
+	gl_fog_end=1
+	gl_fog_start=.975
+	cm_interpolate_block IntroCamLook 800
+	sound_dialog_play c12_44_01konoko
+
+	particle fog_floor1 do start
+	
+	sleep f360
+
+	ai2_spawn IntroMuro
+	chr_lock_active IntroMuro
+	ai2_passive IntroMuro 1
+	playback IntroMuro IntroMuroEnter
+	chr_nocollision IntroMuro 1
+	sound_dialog_play_block pause
+	cinematic_start (MUROevilgrin, 180, 180, 15, 1, 20, false)
+		
+	sound_music_start mus_om01 .75
+	
+	sound_dialog_play c12_44_02muro
+	chr_animate 0 KONOKOlev13_Look
+	sleep f75
+	#Konoko gets up
+	chr_envanim 0 IntroKonBox02 norotation
+	chr_animate 0 KONOKOlev13_Getup
+	cm_anim both IntroCamGetup
+	sound_dialog_play_block pause
+	sleep f60
+	sound_dialog_play c12_44_03konoko
+	cinematic_start (KONlistening, 180, 180, 20, 9, 20, true)
+	cm_wait
+	#Camera pans to show Konoko from behind
+	env_show 231 1
+	env_show 232 1
+	obj_kill 131 132
+	playback 0 IntroKonokoSet
+	cm_interpolate IntroCamDoor01 0
+	cm_interpolate_block IntroCamDoor02 180
+	sound_dialog_play_block pause
+	sound_dialog_play c12_44_04muro
+	sleep f240
+	cinematic_stop (KONlistening, 20, 20)
+	cinematic_stop (MUROevilgrin, 15, 20)
+	#gameplay resumes
+	cm_reset
+	end_cutscene
+	ai2_passive IntroMuro 1
+	chr_nocollision IntroMuro 0
+
+	save_point_1
+}
+
+
+
+func void
+murodeath(
+	void)
+{
+	dprint WE_KILLED_MURO
+
+	env_show 999 0
+	env_show 1010 0
+	gs_farclipplane_set 2000
+
+	# ensure that muro doesn't get knocked out of his "death" anim
+	chr_unstoppable IntroMuro 1
+
+	chr_animate IntroMuro COMCOMlev13_death 120
+	gl_fog_start_changeto .995 30
+	sleep f24
+	chr_delete IntroMuro
+
+	sound_music_volume mus_om01 0.0 1.0
+	sound_music_start atm_gr09 0.75
+
+	objective_set(1)
+
+	sleep 60
+	sound_music_stop mus_om01
+}
+
+
+func void
+griffindeath(
+	void)
+{
+	# ensure that griffin doesn't get knocked out of his "death" anim
+	chr_unstoppable griffin 1
+
+	chr_animate griffin COMCOMlev13_death 120
+	sleep f20
+	chr_delete griffin
+	door_unlock 3
+}
+
+func void
+fadefog(
+	void)
+{
+	gl_fog_start_changeto .8 45
+}
+
+
+func void
+murofog(
+	void)
+{
+	ai2_passive IntroMuro 0
+	env_show 201 1
+	env_show 999 1
+	env_show 250 0
+	env_show 252 0
+	gl_fog_start_changeto .95 12
+	sleep f12
+	gs_farclipplane_set 75
+}	
+
+
+
+
+
+func void
+Griffin01(
+	void)
+{
+	begin_cutscene
+	door_lock 2
+	chr_lock_active griffin
+	playback griffin GrifGriffinSet
+	cm_interpolate GrifCamGriffin 200
+	#griffin talks
+	sleep f120
+	sound_dialog_play c12_45_01griffin
+	cinematic_start (GRIFtalkangry, 180, 180, 16, 3, 20, true)
+	playback 0 GrifKonokoSet
+	sound_dialog_play_block pause
+	cm_interpolate GrifCamKonoko01 0
+	cm_interpolate_block GrifCamKonoko02 800
+	sound_dialog_play c12_45_02konoko
+	cinematic_start (KONintense, 180, 180, 19, 7, 20, true)
+	sound_dialog_play_block pause
+	sound_dialog_play c12_45_03griffin
+	sound_dialog_play_block pause
+	cm_interpolate GrifCamBoth01 0
+	cm_interpolate_block GrifCamBoth02 800
+	sound_dialog_play c12_45_04konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c12_45_05griffin
+	sound_dialog_play_block pause
+	cinematic_stop (KONintense, 20, 20)
+	cinematic_stop (GRIFtalkangry, 15, 20)
+	cm_reset
+	end_cutscene
+	save_point_2
+}
+
+func void
+Konoko01(
+	void)
+{
+	begin_cutscene weapon
+	chr_lock_active evilkonoko
+	playback evilkonoko KonKonoko01Set
+	cm_interpolate KonCamKon01 200
+	#griffin talks
+	sleep f120
+	sound_dialog_play c12_46_01badasskon
+	cinematic_start (KONevil, 180, 180, 15, 1, 20, true)
+	playback 0 KonKonokoSet
+	sound_dialog_play_block pause
+	cm_interpolate KonCamBoth01 0
+	cm_interpolate_block KonCamBoth02 1000
+	sound_dialog_play c12_46_02konoko
+	cinematic_start (KONintense, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block pause
+	sound_dialog_play c12_46_03badasskon
+	sound_dialog_play_block pause
+	sound_dialog_play c12_46_04konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c12_46_05badasskon
+	sound_dialog_play_block pause
+	sound_dialog_play c12_46_06konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c12_46_07badasskon
+	cinematic_stop (KONintense, 20, 20)
+	sound_dialog_play_block pause
+	cinematic_stop (KONevil, 15, 20)
+	cm_reset
+	chr_animate evilkonoko KONOKOpowerup 0
+	chr_set_health evilkonoko 400
+	sleep f245
+	end_cutscene
+	env_show 250 1
+	env_show 252 1
+}
+
+func void
+Konoko02(
+	void)
+{
+	begin_cutscene
+	chr_lock_active evilkonoko
+	playback evilkonoko Kon2Konoko02Set
+	cm_interpolate Kon2CamKon201 140
+	sleep f120
+	cm_interpolate Kon2CamKon202 180	
+	#griffin talks
+	sleep f120
+	sound_dialog_play c12_46_01badasskon
+	cinematic_start (KONevil, 180, 180, 15, 1, 20, true)
+	playback 0 Kon2KonokoSet
+	sound_dialog_play_block pause
+	cm_interpolate Kon2Both01 0
+	cm_interpolate_block Kon2Both02 1000
+	sound_dialog_play c12_46_02konoko
+	cinematic_start (KONintense, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block pause
+	sound_dialog_play c12_46_03badasskon
+	sound_dialog_play_block pause
+	sound_dialog_play c12_46_04konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c12_46_05badasskon
+	sound_dialog_play_block pause
+	sound_dialog_play c12_46_06konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c12_46_07badasskon
+	cinematic_stop (KONintense, 20, 20)
+	sound_dialog_play_block pause
+	cinematic_stop (KONevil, 15, 20)
+	cm_reset
+	chr_animate evilkonoko KONOKOpowerup 0
+	chr_set_health evilkonoko 400
+	sleep f245
+	end_cutscene
+}
+
+
+func void
+Griffin02(
+	void)
+{
+	begin_cutscene
+	chr_lock_active griffin_2
+	playback griffin_2 Grif2GrifSet
+	cm_interpolate Kon2CamKon201 140
+	sleep f120
+	cm_interpolate Kon2CamKon202 180
+	#griffin talks
+	sleep f120
+	sound_dialog_play c12_45_01griffin
+	cinematic_start (GRIFtalkangry, 180, 180, 15, 1, 20, true)
+	playback 0 Kon2KonokoSet
+	sound_dialog_play_block pause
+	cm_interpolate Kon2Both01 0
+	cm_interpolate_block Kon2Both02 1000
+	sound_dialog_play c12_45_02konoko
+	cinematic_start (KONintense, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block pause
+	sound_dialog_play c12_45_03griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c12_45_04konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c12_45_05griffin
+	sound_dialog_play_block pause
+	cinematic_stop (KONintense, 20, 20)
+	cinematic_stop (GRIFtalkangry, 15, 20)
+	cm_reset
+	end_cutscene
+}
+
+
+func void delay_then_play_wakeup(void)
+{
+	sleep 5
+	sound_impulse_play konoko_wakeup
+
+}
+
+func void
+outro(
+	void)
+{
+	begin_cutscene
+	env_show 252 1
+	env_show 250 1
+	env_show 200 1
+	env_show 227 1
+	env_show 231 0
+	env_show 232 0
+	fade_out 0 0 0 10
+	sleep f10
+	delay_then_play_wakeup
+	ai2_spawn outro_konoko
+	chr_envanim outro_konoko OutroKonBox01 norotation
+	chr_animate outro_konoko KONOKOlev13_outro
+	cm_anim both OutroCam01
+	fade_in 5
+	sleep f240
+	fade_out 0 0 0 60
+	sleep 90
+	end_cutscene
+	win
+}
Index: AE/packages/VanillaBSL/IGMD/dream_lab/dream_lab_logic.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/dream_lab/dream_lab_logic.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/dream_lab/dream_lab_logic.bsl	(revision 313)
@@ -0,0 +1,771 @@
+### DREAMLAB LEVEL LOGIC ###
+
+### START, SAVE & OBJECTIVES ###
+
+# START
+func void start(string ai_name)
+{
+	door_lock 3
+	door_lock 1
+	env_show 1976 0
+	trigvolume_enable splash_trigger 0
+
+	if (save_point eq 0)
+		{
+		my_save_point=0;
+		trigvolume_enable shinatama1a 1
+		trigvolume_enable shinatama1b 1
+		#env_show 999 0
+		ai2_spawn ghost_1
+		ai2_spawn ghost_2
+		set_objective_1
+		}
+
+	if (save_point eq 1)
+		{
+		my_save_point=1;
+		dprint restore1
+		ai2_spawn IntroMuro
+		playback IntroMuro IntroMuroSet
+		ai2_passive IntroMuro 1
+		playback 0 IntroKonokoSet
+		env_show 200 0
+		env_show 201 0
+		env_show 227 0
+		env_show 231 1
+		env_show 232 1
+		env_show 999 0
+		particle fog_floor1 do start
+		sound_music_start mus_om01 .75
+		trigvolume_enable shinatama1a 1
+		trigvolume_enable shinatama1b 1
+		set_objective_1
+		restore_game
+		ai2_spawn ghost_1
+		ai2_spawn ghost_2
+		}
+
+	if (save_point eq 2)
+		{
+		my_save_point=2;	
+		dprint restore2
+		particle fog_room1 do start
+		ai2_spawn griffin
+		playback griffin GrifGriffinSet
+		door_lock 3
+		trigvolume_enable room1a 0
+		trigvolume_enable room1b 0
+		set_objective_2
+		restore_game
+		sound_music_start mus_wls .75
+		}
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	all_music_counters
+	lose
+}
+
+func void you_win(string char_index)
+{
+	sound_music_volume mus_wls 0.0 2.0
+	sleep 180
+	fade_out 0 0 0 180 
+	outro
+}
+
+func void save_point_1(string player_name)
+{
+	dprint save_1
+	save_game 1 autosave
+}
+
+func void save_point_2(string player_name)
+{
+	dprint save_2
+	save_game 2 autosave
+	chr_delete liliput_striker_1
+	chr_delete liliput_striker_2
+	chr_delete liliput_striker_3
+	set_objective_2
+}
+
+func void set_objective_1(string chr_index)
+{
+	dprint objective_1
+	objective_set(1)
+}
+
+func void set_objective_2(string chr_index)
+{
+	dprint objective_2
+	objective_set(2)
+}
+
+### MUSIC ###
+
+var int music_counter;
+
+func void music_force_stop(void)
+{
+	sleep 4500
+	if (0 ne music_counter) 
+		{
+		dprint music_force_stop
+		music_counter = 0
+		all_music_counters
+		}
+}
+
+func void music_script_start(void)
+{
+	music_counter = 2
+}
+
+func void striker_lullaby_1(string ai_name)
+{
+	dprint striker_lullaby1
+	music_counter = music_counter - 1
+	if (music_counter eq 0)
+		{
+		all_music_counters();
+		}
+}
+
+func void striker_lullaby_2(string ai_name)
+{
+	dprint striker_lullaby2
+	music_counter = music_counter - 1
+	if (music_counter eq 0)
+		{
+		all_music_counters();
+		}
+}
+
+func void all_music_counters(void)
+{
+	dprint STOP_THE_MUSIC
+	sound_music_stop atm_cl16
+	sound_music_stop mus_om01
+	sound_music_stop atm_gr09
+	sound_music_stop mus_wls
+	sound_music_stop atm_ft81
+}
+
+### FOLLOW THE WHITE SHINATAMA ###
+
+# SHINATAMA 1a
+func void shinatama_1a(string ai_name)
+{
+	sound_dialog_play c12_63_01shinatama
+	ai2_spawn shinatama_1a
+	ai2_lookatme shinatama_1a
+}
+
+# SHINATAMA 1b
+func void shinatama_1b(string ai_name)
+{
+	ai2_dopath shinatama_1a shinatama_flee_1
+	door_lock 8
+}
+
+# SHINATAMA 1a DEATH
+func void patrolscript0100(string ai_name)
+{
+	chr_delete shinatama_1a
+	door_lock 7	
+}
+
+# SHINATAMA 2
+func void shinatama_2(string ai_name)
+{
+	sound_dialog_play c12_63_03shinatama
+	dprint shinatama_2
+	ai2_spawn shinatama_2
+	ai2_spawn liliput_striker_1
+	ai2_spawn liliput_striker_2
+	ai2_spawn liliput_striker_3
+	chr_lock_active shinatama_2
+	door_lock 8
+	door_open 11
+	door_open 12
+}
+
+# SHINATAMA 2 DEATH
+func void patrolscript0101(string ai_name)
+{
+	chr_delete shinatama_2
+}
+
+# SHINATAMA 3
+func void shinatama_3(string ai_name)
+{
+	chr_delete ghost_1
+	chr_delete ghost_2
+	sound_dialog_play c12_63_04shinatama
+	ai2_spawn shinatama_3
+	ai2_spawn shin_striker_1
+	ai2_spawn shin_striker_2
+	ai2_spawn shin_striker_3
+	ai2_spawn shin_striker_4
+}
+
+# SHINATAMA 3 DEATH
+func void patrolscript0102(string ai_name)
+{
+	chr_delete shinatama_3
+	sleep 400
+	chr_delete shin_striker_1
+	chr_delete shin_striker_2
+	chr_delete shin_striker_3
+	chr_delete shin_striker_4
+	chr_delete shin_striker_5
+	chr_delete shin_striker_6
+	chr_delete shin_striker_7
+}
+
+func void delay_and_play_shin(void)
+{
+	sleep 240
+	sound_dialog_play c12_63_05shinatama
+}
+
+# SHINATAMA NO-GRAV
+func void shinatama_nograv(string ai_name)
+{
+	dprint shinatama_nograv
+	sound_music_volume atm_gr09 0.0 2.0
+	sound_music_stop atm_gr09
+	sound_music_start atm_ft81 .75	
+	particle fog_room1 do stop
+	particle fog_room2 do start
+	door_lock 5
+	door_lock 6
+	ai2_spawn shinatama_nograv
+	chr_invincible shinatama_nograv 1
+	chr_nocollision shinatama_nograv 1
+	sound_music_start atm_cl22 0.1
+	sound_music_volume atm_cl22 1.0 4
+	fork delay_and_play_shin
+	playback_block shinatama_nograv shinatama_nograv interp 30
+	chr_delete shinatama_nograv
+	door_unlock 6
+	door_close 5
+	door_jam 5
+	invincible = 0
+	sound_music_volume atm_cl22 0.0 6
+	sleep 250
+	sound_music_stop atm_cl22
+}
+
+### AMBUSHES, BACKUPS ###
+
+func void ghost_1(string ai_name)
+{
+	dprint vanish_ghost1
+	chr_delete ghost_1
+}
+
+func void ghost_2(string ai_name)
+{
+	dprint vanish_ghost2
+	chr_delete ghost_2
+}
+
+# AMBUSH 1a
+func void ambush_1a(string ai_name)
+{
+	dprint ambush_1a
+	ai2_spawn ambush_tanker_1a
+	sound_music_stop atm_gr09
+	sound_music_start mus_wls .75
+}
+
+# AMBUSH 1b
+func void ambush_1b(string ai_name)
+{
+	dprint ambush_1b
+	ai2_spawn ambush_tanker_1b
+	door_open 8
+	door_jam 8
+}
+
+# AMBUSH 2
+func void ambush_2(string ai_name)
+{
+	dprint ambush_2
+	ai2_spawn ambush_red_1
+	sound_music_stop atm_ft81 
+	sound_music_start mus_wls .75
+}
+
+# TANKER VARIABLE
+func void tanker_1_var(string ai_name)
+{
+	dprint tanker_var1
+	tanker_counter = tanker_counter - 1
+	chr_inv_reset ambush_tanker_1a
+	if (tanker_counter eq 0)
+		{
+		new_music();
+		}
+}
+
+func void tanker_2_var(string ai_name)
+{
+	dprint tanker_var2
+	tanker_counter = tanker_counter - 1
+	chr_inv_reset ambush_tanker_1b
+	if (tanker_counter eq 0)
+		{
+		new_music();
+		}
+}
+
+func void new_music(string ai_name)
+{
+	dprint change_the_track
+	door_unlock 9
+	sound_music_stop mus_wls
+	sound_music_start atm_ft81 .75
+}
+
+# RED VARIABLE
+func void red_1_var(string ai_name)
+{
+	dprint red_var
+	red_counter = red_counter - 1
+	if (red_counter eq 0)
+		{
+		redbackup();
+		}
+}
+
+# RED BACKUP
+func void redbackup(string ai_name)
+{
+	dprint red_backup
+	ai2_spawn ambush_red_2
+	door_unlock 1
+	door_lock 2
+	door_unjam 8
+	chr_delete liliput_striker_1
+	chr_delete liliput_striker_2
+	chr_delete liliput_striker_3
+}
+
+# RED RETREAT
+func void red_retreat(string ai_name)
+{
+	dprint retreat_reds
+	ai2_makeignoreplayer ambush_red_1 1
+	ai2_makeignoreplayer ambush_red_2 1
+	ai2_dopath ambush_red_1 red_retreat_1 1
+	ai2_dopath ambush_red_2	red_retreat_2 1
+}
+
+func void patrolscript0007(string ai_name)
+{
+	dprint red_react
+	ai2_makeignoreplayer ambush_red_1 0
+	ai2_makeignoreplayer ambush_red_2 0
+}
+
+# RED (MUSIC) SHIFT
+func void redmusic_1_var(string ai_name)
+{
+	dprint redmusic_1
+	rmusic_counter = rmusic_counter - 1
+	if (rmusic_counter eq 0)
+		{		
+		red_shift();
+		}
+}
+
+func void redmusic_2_var(string ai_name)
+{
+	dprint redmusic_2
+	rmusic_counter = rmusic_counter - 1
+	if (rmusic_counter eq 0)
+		{		
+		red_shift();
+		}
+}
+
+func void red_shift(string player_name)
+{
+	dprint redshift
+	sound_music_stop mus_wls
+	sound_music_start atm_gr09 0.75
+	door_unlock 2
+}
+
+
+# SWAT VARIABLE
+func void swat_1_var(string ai_name)
+{
+	dprint swat_var
+	swat_counter = swat_counter - 1
+	if (swat_counter eq 0)
+		{
+		swatbackup();
+		}
+}
+
+# SWAT BACKUP
+func void swatbackup(string ai_name)
+{
+	dprint swat_backup
+	door_unlock 2
+	ai2_spawn griffin_b1
+	ai2_spawn griffin_b2
+}
+
+# ROOM 1 END VAR
+func void end_1a_var(string ai_name)
+{
+	dprint swat_var
+	end1_counter = end1_counter - 1
+	if (end1_counter eq 0)
+		{
+		room1_end();
+		}
+}
+
+func void end_1b_var(string ai_name)
+{
+	dprint swat_var
+	end1_counter = end1_counter - 1
+	if (end1_counter eq 0)
+		{
+		room1_end();
+		}
+}
+
+func void end_1c_var(string ai_name)
+{
+	dprint swat_var
+	end1_counter = end1_counter - 1
+	if (end1_counter eq 0)
+		{
+		room1_end();
+		}
+}
+
+# ROOM 1 END
+func void room1_end(string ai_name)
+{
+	dprint room1_end
+	door_unlock 3
+	trigvolume_enable nodark 1
+}
+
+### GOTTA CATCH 'EM ALL! (WITH NO APOLOGIES TO YOU KNOW WHAT) ###
+
+# MINISTRIKE
+func void mini_strike(string ai_name)
+{
+	dprint mini_strike
+	ai2_spawn mini_strike_1
+	ai2_spawn mini_strike_2
+	ai2_spawn mini_strike_3
+	ai2_spawn mini_strike_4
+	chr_delete ghost_1
+	chr_delete ghost_2
+}
+
+# MINISTRIKE 1 FLEE
+func void mini_strike_flee_1(string ai_name)
+{
+	ai2_dopath mini_strike_1 mini_strike_flee_1
+}
+
+# MINISTRIKE 2 FLEE
+func void mini_strike_flee_2(string ai_name)
+{
+	ai2_dopath mini_strike_2 mini_strike_flee_2
+}
+
+# MINISTRIKE 3 FLEE
+func void mini_strike_flee_3(string ai_name)
+{
+	ai2_dopath mini_strike_3 mini_strike_flee_3
+}
+
+# MINISTRIKE 4 FLEE
+func void mini_strike_flee_4(string ai_name)
+{
+	ai2_dopath mini_strike_4 mini_strike_flee_4
+}
+
+# SWISS CHEESE
+
+func void patrolscript0001(string ai_name)
+{
+	dprint swisscheese_1
+	chr_nocollision mini_strike_1 1
+	playback_block mini_strike_1 cheese1 interp 30
+	chr_delete mini_strike_1
+}
+func void patrolscript0002(string ai_name)
+{
+	dprint swisscheese_2
+	chr_nocollision mini_strike_2 1
+	playback_block mini_strike_2 cheese2 interp 30
+	chr_delete mini_strike_2
+}
+
+func void patrolscript0003(string ai_name)
+{
+	dprint swisscheese_3
+	chr_nocollision mini_strike_3 1
+	playback_block mini_strike_3 cheese3 interp 30
+	chr_delete mini_strike_3
+}
+
+func void patrolscript0004(string ai_name)
+{
+	dprint swisscheese_4
+	chr_nocollision mini_strike_4 1
+	playback_block mini_strike_4 cheese4 interp 30
+	chr_delete mini_strike_4
+}
+
+# MINISTRIKE 1 HOLE
+func void patrolscript0110(string ai_name)
+{
+	chr_delete mini_strike_1
+}
+
+# MINISTRIKE 2 HOLE
+func void patrolscript0111(string ai_name)
+{
+	chr_delete mini_strike_2
+}
+
+# MINISTRIKE 3 HOLE
+func void patrolscript0112(string ai_name)
+{
+	chr_delete mini_strike_3
+}
+
+# MINISTRIKE 4 HOLE
+func void patrolscript0113(string ai_name)
+{
+	chr_delete mini_strike_4
+}
+
+### EVERYBODY WAS DREAM LAB FIGHTIN' ###
+
+# ROOM 1
+func void room_1(string ai_name)
+{
+	dprint room_1
+	sound_music_stop atm_gr09
+	sound_music_start mus_wls .75
+	particle fog_room1 do start
+	ai2_spawn griffin
+	Griffin01
+	trigvolume_enable room1a 0
+	trigvolume_enable room1b 0
+	trigvolume_enable room1c 0
+}
+
+# ROOM 2
+func void room_2(string ai_name)
+{
+	dprint room_2
+	ai2_spawn evilkonoko
+	Konoko02
+	door_lock 6
+	trigvolume_enable room2 0
+}
+
+# ROOM 2 MUSIC
+func void room2_music(string ai_name)
+{
+	dprint room2music
+	sound_music_volume atm_ft81 0.0 2.0
+	sound_music_stop atm_ft81 .75
+	sound_music_start mus_wls .75
+}
+
+### GENERAL CHICANERY ###
+
+# MURO'S WALL
+func void bring_the_wall(string char)
+{
+	dprint oops
+	env_show 1010 1
+}
+
+# FOG ON 1
+func void fog_floor1on(void)
+{
+	dprint fog_on
+	particle fog_floor1 do start
+	particle fog_floor2a do stop
+}
+
+# FOG OFF 1
+func void fog_floor1off(void)
+{
+	dprint fog_off
+	particle fog_floor1 do stop
+	particle fog_floor2a do start
+}
+
+# FOG ON 2
+func void fog_floor2boff(void)
+{
+	dprint fog_on
+	particle fog_floor2a do start
+	particle fog_floor2b do stop
+}
+
+# FOG OFF 2
+func void fog_floor2bon(void)
+{
+	dprint fog_off
+	particle fog_floor2a do stop
+	particle fog_floor2b do start
+}
+
+func void show_the_acid(string char)
+{
+	dprint show_acid
+	sound_music_volume mus_wls 0.0 2.0	
+	sound_music_stop mus_wls
+	sound_music_start atm_gr09 0.75
+	env_show 1976 1
+	trigvolume_enable splash_trigger 1
+	particle fog_floor1 do stop
+}
+
+# ACID DOOOOOM
+func void splash(string char)
+{
+  	var bool eggman;
+	eggman = chr_is_player(char);
+  	if (eggman eq 0)
+  		{
+    		chr_animate(char, KONOKOacid);
+    		sleep f10
+    		chr_set_health(char, 0);
+  		}
+
+  	if (eggman eq 1)
+  		{
+		input 0
+		chr_animate(char, KONOKOacid);
+		cm_detach
+
+		sound_impulse_play konoko_gruesome_death
+
+		sleep f5
+		chr_set_health(char, 0);
+  		}
+}
+
+func void laser_cutscene_fog(void)
+{
+	gs_farclipplane_set 2000
+	gl_fog_start_changeto .995 45
+}
+
+# LASER CUTSCENE
+func void laser_cutscene(string ai_name)
+{
+	dprint laser_cutscene
+	fork laser_cutscene_fog
+	begin_cutscene
+	sleep 90
+	trig_activate 1 
+	cm_interpolate laser_4 0
+	door_close 4
+	door_jam 4
+	cm_interpolate_block laser_3 250
+	sleep 250
+	cm_interpolate laser_2 0
+	cm_interpolate_block laser_8 200
+	ai2_spawn laser_ops_1
+	playback_block laser_ops_1 lstriker_1 interp 30
+	sleep 60
+	ai2_allpassive 0
+	cm_reset
+	door_lock 4
+	door_lock 5
+	trigvolume_enable lasercutscene 0
+	trigvolume_enable death_by_bungie 1
+	trigvolume_enable splash 1
+	sleep 15
+	end_cutscene
+}
+
+func void laser_cleanup(string ai_name)
+{
+	dprint laser_unlock
+	door_unlock 5
+}
+
+# BIG HEAD VAR
+func void bighead_1a_var(string ai_name)
+{
+	dprint bighead_var
+	bighead_counter = bighead_counter - 1
+	if (bighead_counter eq 0)
+		{
+		big_head();
+		}
+}
+
+func void bighead_1b_var(string ai_name)
+{
+	dprint bighead_var
+	bighead_counter = bighead_counter - 1
+	if (bighead_counter eq 0)
+		{
+		big_head();
+		}
+}
+
+func void bighead_1c_var(string ai_name)
+{
+	dprint bighead_var
+	bighead_counter = bighead_counter - 1
+	if (bighead_counter eq 0)
+		{
+		big_head();
+		}
+}
+
+func void bighead_1d_var(string ai_name)
+{
+	dprint bighead_var
+	bighead_counter = bighead_counter - 1
+	if (bighead_counter eq 0)
+		{
+		big_head();
+		}
+}
+
+# BIG HEAD
+func void big_head(string ai_name)
+{
+	dprint bighead
+	sleep 200
+	chr_big_head = 1
+	timer_start 120 small_head
+}
+
+func void small_head(string ai_name)
+{
+	dprint smallhead
+	chr_big_head = 0
+}
+
+### Level scripted by Joseph ###
Index: AE/packages/VanillaBSL/IGMD/dream_lab/dream_lab_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/dream_lab/dream_lab_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/dream_lab/dream_lab_main.bsl	(revision 313)
@@ -0,0 +1,29 @@
+#
+# dream_lab_main.bsl
+#
+
+var int my_save_point=0;
+var int rmusic_counter=2;
+var int tanker_counter=2;
+var int red_counter=1;
+var int swat_counter=1;
+var int end1_counter=3;
+var int bighead_counter=4;
+
+func void main(void)
+{
+	sound_ambient_start roomtone_softhum03 0.8
+
+	gl_fog_blue=0
+	gl_fog_red=0
+	gl_fog_green=0
+	gl_fog_start=.995
+	gs_farclipplane_set 2000
+	start
+
+	if (my_save_point eq 0)
+	{
+		intro
+	}
+}
+
Index: AE/packages/VanillaBSL/IGMD/dream_lab/particle_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/dream_lab/particle_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/dream_lab/particle_scripts.bsl	(revision 313)
@@ -0,0 +1,99 @@
+#partice scripts
+#alex okita
+#turns on and off particles for rooms
+
+#room1
+func void room1_start(string ai_name)
+{
+	dprint room1_start
+	particle room1 do start
+}
+func void room1_stop(string ai_name)
+{
+	dprint room1_stop
+	particle room1 do stop
+}
+#room2
+func void room2_start(string ai_name)
+{
+	dprint room2_start
+	particle room2 do start
+}
+func void room2_stop(string ai_name)
+{
+	dprint room2_stop
+	particle room2 do stop
+}
+
+#room3
+func void room3_start(string ai_name)
+{
+	dprint room3_start
+	particle room3 do start
+}
+func void room3_stop(string ai_name)
+{
+	dprint room3_stop
+	particle room3 do stop
+}
+
+#room4
+func void room4_start(string ai_name)
+{
+	dprint room4_start
+	particle room4 do start
+}
+func void room4_stop(string ai_name)
+{
+	dprint room4_stop
+	particle room4 do stop
+}
+
+#room5
+func void room5_start(string ai_name)
+{
+	dprint room5_start
+	particle room5 do start
+}
+func void room5_stop(string ai_name)
+{
+	dprint room5_stop
+	particle room5 do stop
+}
+
+#room4
+func void room6_start(string ai_name)
+{
+	dprint room6_start
+	particle room6 do start
+}
+func void room6_stop(string ai_name)
+{
+	dprint room6_stop
+	particle room6 do stop
+}
+
+#room7
+func void room7_start(string ai_name)
+{
+	dprint room7_start
+	particle room7 do start
+}
+func void room7_stop(string ai_name)
+{
+	dprint room7_stop
+	particle room7 do stop
+}
+
+#room8
+func void room8_start(string ai_name)
+{
+	dprint room8_start
+	particle room8 do start
+}
+func void room8_stop(string ai_name)
+{
+	dprint room8_stop
+	particle room8 do stop
+}
+
Index: AE/packages/VanillaBSL/IGMD/lab/lab_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/lab/lab_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/lab/lab_cutscene.bsl	(revision 313)
@@ -0,0 +1,368 @@
+#
+# lab_cutscene.bsl
+#
+
+func void shin_intro_dialogue(void)
+{
+	sound_dialog_play c00_01_99shinatama
+	cinematic_start (SHINtalking, 180, 180, 15, 1, 20, false)
+	sound_dialog_play_block pause
+	cinematic_stop (SHINtalking, 15, 20)
+}
+
+func void intro(void)
+{
+	fade_out 0 0 0 0
+	cm_interpolate Camout01 0
+	sleep 13
+	begin_cutscene		
+	#hide motorcycle gunk
+	env_show 8 0
+	env_show 9 0
+	env_show 10 0
+	chr_nocollision 0 1
+	chr_forceholster 0 1
+	sleep 60
+	fade_in 120
+	#fork camcontrol
+	cm_anim both Camout01
+	obj_create 8 10
+	env_anim 8 10
+	chr_envanim 0 KonBipedBox01
+	chr_animate 0 KONOKOcycle_ride 880
+	sleep 15
+	cutscene_sync mark
+	sound_ambient_start c02_02_01_motorcyclea
+	cm_wait
+	cm_anim both Camout02
+	cutscene_sync mark
+
+	fork shin_intro_dialogue
+
+	sound_ambient_start c02_02_01_motorcycleb 0.7
+
+	cm_wait
+	cm_anim both Camout03
+	cutscene_sync mark
+
+	sound_ambient_start c02_02_01_motorcyclec 0.7
+
+	ai2_spawn Barabus
+	ai2_setmovementmode Barabus walk
+	playback Barabus IntroSubboss01
+	cm_wait
+	cm_anim both Camout04
+	sleep 20
+	cutscene_sync mark
+
+	sound_ambient_start c02_14_27_jump_land_skid
+
+	sleep 40
+	chr_animate Barabus STRIKElev3_startle
+	cm_wait
+	cm_anim both Camout05
+	chr_animate 0 KONOKOlev3_intro_stop
+	env_setanim 8 hubs_stop
+	env_setanim 9 hubs_rear_stop
+	env_setanim 10 motorcycle02_stop
+	chr_envanim 0 KonBipedBox02 norotation
+	cm_wait
+	cm_interpolate Camout06 0
+	#chr_create 1000 start
+	#chr_neutral 1000 1
+	cinematic_start (BOSS1talking, 180, 180, 20, 8, 20, false)
+	sleep 20
+	sound_dialog_play c03_10_01barabas
+	sound_dialog_play_block pause
+	sleep 20
+	cinematic_stop (BOSS1talking, 19, 20)
+	#hide motorcycle object
+	obj_kill 8 10
+	#unhide motorcycle gunk
+	env_show 10 1
+	env_show 9 1
+	env_show 8 1
+	#setup Konoko for scene
+	playback 0 IntroKonoko01
+	sleep 10
+	cm_reset
+	chr_nocollision 0 0
+	end_cutscene
+	set_objective_1
+	trigvolume_enable save_1_trig 1
+	ai2_attack Barabus konoko
+
+	sound_music_start mus_main01_hd	0.8
+}
+
+func void camcontrol(void)
+{
+	cm_anim both Camout01
+	cm_anim both Camout02
+	cm_anim both Camout03
+	cm_anim both Camout04
+	cm_anim both Camout05
+	cm_wait
+	letterbox 0
+	cm_jello 1
+	cm_reset
+	chr_nocollision 0 0
+	input 1
+}
+
+func void rocket(void)
+{
+	sound_music_stop mus_main01_hd	
+
+	begin_cutscene jello
+	chr_animate Barabus STRIKEknockdown1
+	sleep 60
+	ai2_takecontrol 1
+	ai2_lookatchar 0 Barabus
+	chr_animate Barabus BARABstunned 1000
+	sound_dialog_play c03_10_02barabas
+	cinematic_start (BOSS1talking, 180, 180, 16, 1, 20, false)	
+	sleep 280
+	chr_nocollision Barabus 1
+	chr_animate Barabus BARABrocket 250
+	sleep 130
+	cutscene_sync mark
+	sound_ambient_start c01_00_02barjet
+	#Barabas flies into the sky
+	chr_animate_block Barabus BARABlev3_rocket
+	chr_envanim Barabus RocketBox01
+	cm_anim both RocketCam01
+	sleep 90
+	sound_dialog_play c03_11_01barabas
+	sound_dialog_play_block pause
+	sound_dialog_play c03_11_02muro
+	cinematic_start (MUROtalking, 180, 180, 16, 3, 20, true)	
+	sound_dialog_play_block pause
+	sound_dialog_play c03_11_03barabas
+	sound_dialog_play_block pause
+	sound_dialog_play c03_11_04muro
+	sound_dialog_play_block pause
+	sound_dialog_play c03_11_05barabas
+	sound_dialog_play_block pause
+	sleep 30
+	cinematic_stop (BOSS1talking, 15, 20)
+	cinematic_stop (MUROtalking, 16, 20)
+	sleep 10
+	cm_reset
+	end_cutscene
+	ai2_takecontrol 0
+	chr_delete Barabus
+	set_objective_2
+	trigvolume_enable floor1 1
+	trigvolume_enable outside_left 1
+	trigvolume_enable outside_right 1
+	trigvolume_enable outside_back 1
+
+	target_set(143, 30.0)
+
+	sleep 180
+
+	sound_ambient_start c00_01_98shinatama
+
+#	dprint savegame_1	
+#	save_game 1
+}
+
+
+func void bomber(void)
+{
+	chr_animate Tower_MB_1 STRIKEknockdown1
+	chr_invincible Tower_MB_1 1
+	chr_unstoppable Tower_MB_1 1
+	dprint(ainame);
+	begin_cutscene
+	#input 0
+	#cm_jello 0		
+	#letterbox 1
+	#add dialogue "Help Konoko!  We're pinned down!!"
+	sleep f60
+	sound_dialog_play c03_12_02tctfag1
+	door_unlock 60
+	door_unlock 61
+	sleep 60
+	cm_interpolate BomberCam01 0
+	cm_interpolate_block BomberCam02 300
+	ai2_spawn BombComguy
+	ai2_setmovementmode BombComguy run
+	playback BombComguy COMGUYfiring
+	sleep 180
+	#sound_dialog_play
+	ai2_spawn BombTCTF1
+	ai2_spawn BombTCTF2
+	chr_create 1004 start
+	ai2_setmovementmode BombTCTF1 run
+	ai2_setmovementmode BombTCTF2 run
+	playback BombTCTF1 TCTFfiring01
+	playback BombTCTF2 TCTFfiring02
+	playback 1004 TCTFradio
+	playback BombComguy COMGUYfiring
+	chr_animate 1004 COMGUYtalk_radio 380
+	sound_dialog_play_block pause
+	# CB: this sound file no longer exists (it was a duplicate)
+	sound_dialog_play c03_12_12TCTFAG1
+
+	cinematic_start (TCTFshouting, 180, 180, 16, 3, 20, true)	
+	sound_dialog_play_block pause
+	#env_show 777 1
+	#env_show 778 0
+	cinematic_stop (TCTFshouting, 16, 20)
+	#back in the tower Bomber man staggers to his feet
+	playback 0 KonBomb
+	chr_envanim Tower_MB_1 BomberBox01 norotation
+	chr_animate Tower_MB_1 BOMBlev3_stagger
+	cm_interpolate BomberCam03 0
+	cm_interpolate_block BomberCam04 330
+	cinematic_start (KONtalkangryfront, 180, 180, 18, 6, 20, true)
+	sleep 40
+	sound_dialog_play c03_12_03konoko
+	sound_dialog_play_block pause
+	sleep 60
+	cinematic_stop (KONtalkangryfront, 17, 20)
+	chr_envanim_block Tower_MB_1 BomberBox02 norotation
+	chr_animate Tower_MB_1 BOMBlev3_stand 1200
+	cm_interpolate_block BomberCam05 0
+	cinematic_start (BOMBbeatup, 180, 180, 18, 4, 30, false)
+	sound_dialog_play c03_12_04bombgreen
+	sound_dialog_play_block pause
+	cinematic_stop (BOMBbeatup, 17, 30)
+	playback BombComguy COMGUYfiring
+	chr_envanim 0 KonBomBox01
+	chr_animate 0 KONOKOlev3_bomber
+	cm_interpolate BomberCam06 0
+	sleep 195
+	cm_anim both BomberCam07
+	chr_envanim Tower_MB_1 BomberBox03 norotation
+	sleep 110
+	chr_animate Tower_MB_1 BOMBlev3_fall1 100
+	sleep 13
+	#break tower glass here
+	#env_show 776 1
+
+	sound_impulse_play glass_big 1.0
+
+	env_show 777 1
+	env_show 778 0
+	particle BomberCharge01 do explode
+	cm_wait
+	cm_anim both BomberCam08
+	chr_envanim Tower_MB_1 BomberBox04 norotation
+	chr_animate Tower_MB_1 BOMBlev3_fall2
+	sleep 50
+	#break atrium glass here
+	particle BomberCharge02 do explode
+	sleep 105
+	#explode bomber here
+	particle BomberExplosion create
+	chr_delete BombComguy
+	cm_wait
+	sleep 60
+	playback 0 KonBomb02
+	cm_interpolate BomberCam09 0
+	cinematic_start (TCTFtalking, 180, 180, 20, 9, 20, true)
+	sound_dialog_play c03_12_05tctfag1
+	sound_dialog_play_block pause
+	cinematic_stop (TCTFtalking, 20, 20)
+	# sounds of TCTF saying "uhhhh, we're not pinned down.
+	#cm_reset
+	#end_cutscene
+	set_objective_5
+	door_unlock 38
+	door_unlock 41
+	door_unlock 42
+	door_lock 60
+	door_lock 61
+	particle locktower_locklight01 do start
+	chr_delete BombTCTF1
+	chr_delete BombTCTF2
+	chr_delete BombComguy
+	chr_delete 1004
+	chr_delete Tower_MB_1
+	playback 0 BomberKonRun01
+	sleep 120
+	cm_interpolate BomberCamRun01 0
+	playback 0 BomberKonRun02
+	cm_interpolate_block BomberCamRun02 200
+	sleep 210
+	#begin_cutscene
+	sleep 30
+	chr_nocollision 0 1
+	cm_anim both ElevCam01
+	chr_envanim 0 ElevBox01
+	chr_animate 0 KONOKOidle1
+
+	sound_ambient_start rl_elevator 1.0
+
+	env_show 540 0 
+	cm_wait
+	end_cutscene
+	cm_reset
+	chr_nocollision 0 0
+	obj_create 2 7
+	sapper_damage_off
+#	save_game_3
+}
+
+
+func void fallinthevat(string char)
+{
+  var bool eggman;
+
+  eggman = chr_is_player(char);
+
+  if (eggman eq 0)
+  {
+    chr_animate(char, KONOKOacid);
+    sleep 10
+    chr_set_health(char, 0);
+  }
+
+  if (eggman eq 1)
+  {
+    cm_detach
+
+    sound_impulse_play konoko_gruesome_death
+
+    chr_animate(char, KONOKOacid);
+    sleep 10
+    chr_set_health(char, 0);
+  }
+}
+
+func void outro(void)
+{
+	target_set(256, 0.0)
+	ai2_allpassive=1
+	#begin_cutscene
+	#ai2_takecontrol 1
+	#ai2_movetoflag 0 257
+	env_anim 2 7
+	sound_ambient_start truck_driveaway
+	#cm_interpolate OutroCam01 360
+	sound_dialog_play c03_13_01konoko
+	cinematic_start (KONintense, 180, 180, 19, 7, 15, true)
+	sound_dialog_play_block pause
+	cm_interpolate OutroCam01 200
+	sleep 30
+	cinematic_stop (KONintense, 19, 30)
+	begin_cutscene
+	ai2_takecontrol 1
+	ai2_movetoflag 0 257
+	#camera cut to van
+	sound_dialog_play c03_13_02synhench1
+	cinematic_start (COMGUYtalking, 180, 180, 15, 1, 20, false)
+	sound_dialog_play_block pause
+	sound_dialog_play c03_13_03muro
+	sleep 120
+	fade_out 0 0 0 60
+	cinematic_start (MUROtalking, 180, 180, 16, 3, 20, true)
+	sound_dialog_play_block pause
+	cinematic_stop (MUROtalking, 16, 15)
+	cinematic_stop (COMGUYtalking, 15, 15)
+	sleep 30
+	win
+}
Index: AE/packages/VanillaBSL/IGMD/lab/lab_level_logic.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/lab/lab_level_logic.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/lab/lab_level_logic.bsl	(revision 313)
@@ -0,0 +1,898 @@
+################## RESEARCH LAB LEVEL LOGIC ##########################
+
+################ SCRIPTS BY Hardy AND Joseph #########################
+
+################# START, SAVE & OBJECTIVES ###########################
+
+
+# creates counterS for stuff
+
+var int door_counter=3;
+var int passage_counter=3;
+var int count_dead_end=2;
+
+func void turnoffcompass(string ai_name)
+{
+	target_set(143, 0.0)
+}
+
+func void level_start(string ai_name)
+{
+	dprint func_void_start
+
+	if (my_save_point eq 1)
+		{
+		dprint restore_game_1
+
+		set_objective_1
+
+		ai2_spawn Barabus
+
+		dprint SPAWN_BARABUS
+
+		ai2_attack Barabus konoko
+
+		env_show 10 1
+		env_show 9 1
+		env_show 8 1
+
+		#obj_kill 8 10
+
+		trigvolume_enable save_1_trig 0
+		trigvolume_enable floor1 0
+		trigvolume_enable outside_left 0
+		trigvolume_enable outside_right 0
+		trigvolume_enable outside_back 0
+
+		#chr_animate Barabus STRIKElev3_startle
+		#ai2_setmovementmode Barabus walk
+		#playback Barabus IntroSubboss01
+		playback 0 IntroKonoko01
+
+		sound_music_start mus_main01_hd	0.8
+
+		restore_game
+		}
+
+	if (my_save_point eq 2)
+		{
+		dprint restore_game_2
+
+		set_objective_2_from_save
+
+		dprint restore_game_2_a
+
+		door_lock 43
+
+		dprint restore_game_2_b
+
+		particle lock99_locklight01 do stop
+
+		dprint restore_game_2_c
+
+		spawn_floor1_guards
+
+		dprint restore_game_2_d
+
+		restore_game
+		cm_reset
+		}
+	
+	if (my_save_point eq 3)
+		{
+		dprint restore_game_3
+
+		spawn_lobby_tctf
+
+		trigvolume_enable save_3_trig 0
+
+		door_lock 35
+		dprint objective5
+		objective_set(5, silent)
+		target_set(142, 30.0)
+		
+		restore_game
+		}
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+
+func void you_win(int char_index)
+{
+	outro
+	win
+}
+
+func void save_game_1(string ai_name)
+{
+	dprint savegame_1	
+	if (my_save_point ne 1)
+	{
+		save_game 1 autosave
+	}
+}
+
+func void save_game_2(string ai_name)
+{
+	dprint savegame_2
+	if (my_save_point ne 2)
+	{
+		save_game 2 autosave
+	}
+}
+
+func void save_game_3(string ai_name)
+{
+	dprint savegame_3	
+
+	if (my_save_point ne 3)
+	{
+		save_game 3 autosave
+	}
+}
+
+########### GAME OBJECTIVES ############################3
+
+func void set_objective_1(void)
+{
+	dprint objective_1
+	objective_set(1)
+}
+
+func void set_objective_2_from_save(void)
+{
+	objective_set(2)	
+}
+
+func void set_objective_2(string chr_index)
+{
+	sleep 180
+	dprint objective_2
+	objective_set(2)
+	particle lock99_locklight01 do start
+	door_unlock 43
+}
+
+func void set_objective_3(string chr_index)
+{
+	dprint objective_3
+	#sound_dialog_play_block c00_01_20shinatama
+	#sound_dialog_play_block pause
+	objective_set(3)
+	target_set(205, 30.0)
+}
+
+func void set_objective_4(string chr_index)
+{
+	dprint objective_4
+	sound_dialog_play_block c00_01_19shinatama
+	sound_dialog_play_block pause
+	objective_set(4)
+	target_set(110, 30.0)
+}
+
+func void set_objective_5(string chr_index)
+{
+	dprint objective_5
+	#sound_dialog_play_block c00_01_18shinatama
+	#sound_dialog_play_block pause
+	objective_set(5)
+	target_set(142, 30.0)
+}
+
+func void set_objective_6(string chr_index)
+{
+	dprint objective_6
+	sound_dialog_play_block c00_01_22shinatama
+	sound_dialog_play_block pause
+	objective_set(6)
+	target_set(256, 30.0)
+}
+
+func void set_target_4(string chr_index)
+{
+	sound_dialog_play_block c00_01_26shinatama
+	sound_dialog_play_block pause
+	target_set(253, 30.0)
+}
+
+func void set_target_5(string chr_index)
+{
+	sound_dialog_play_block c00_01_28shinatama
+	sound_dialog_play_block pause
+	target_set(254, 30.0)
+}
+
+func void set_target_6(string chr_index)
+{
+	target_set(256, 30.0)
+}
+
+
+### MARTY'S HUGE SACK ###
+
+var int music_counter;
+
+func void music_force_stop(void)
+{
+	sleep 4500
+
+	if (0 ne music_counter) 
+	{
+		dprint music_force_stop
+		music_counter = 0
+		all_music_counters
+	}
+}
+
+func void music_script_start(void)
+{
+	music_counter = 2
+}
+
+func void striker_siesta_1(string ai_name)
+{
+	dprint striker_siesta1
+	music_counter = music_counter - 1
+
+	if (music_counter eq 0)
+	{
+		all_music_counters();
+	}
+
+}
+func void striker_siesta_2(string ai_name)
+{
+	dprint striker_siesta2
+	music_counter = music_counter - 1
+
+	if (music_counter eq 0)
+	{
+		all_music_counters();
+	}
+}
+
+func void all_music_counters(void)
+{
+	dprint WHEN_THE_LIGHTS_GO_DOWN_IN_THE_CITY
+	
+	sound_music_stop mus_trt
+#	sound_music_stop mus_fiteb
+#	sound_music_stop mus_asian
+}
+
+
+### TEXT CONSOLES ###
+
+func void level3a(string chr_index)
+{
+	dprint text3a
+	text_console level_3a
+	console_reset 7
+}
+
+func void level3b(string chr_index)
+{
+	dprint text3b
+	text_console level_3b
+	console_reset 6
+}
+
+func void level3c(string chr_index)
+{
+	dprint text3c
+	text_console level_3c
+	console_reset 1
+}
+
+func void level3d(string chr_index)
+{
+	dprint text3d
+	text_console level_3d
+	day_264
+}
+
+
+
+
+### GAMEPLAY PROGRESSION ###
+
+func void tower_lock_1(string chr_index)
+{
+	sound_music_stop mus_main03
+
+	ai2_spawn Tower_MB_1
+	trigvolume_enable towertrig_2 0
+	door_lock 41
+}
+
+func void sapper_damage_on(string chr_index)
+{
+	dprint sapper_dmg_start
+	particle sapper start
+}
+
+func void sapper_damage_off(string chr_index)
+{
+	dprint sapper_dmg_stop
+	particle sapper stop
+}
+
+func void spawn_floor1_guards(string ai_name)
+{
+	dprint spawn_floor1
+	particle lock1_locklight01 do stop
+	particle lockA_locklight01 do start
+	ai2_spawn Floor1_Striker_1
+	ai2_spawn Floor1_Striker_2
+	ai2_spawn Floor1_Sci_1
+	ai2_spawn Floor1_Sci_2
+	ai2_spawn Floor1_Sci_3
+	ai2_spawn Floor1_Sci_4
+
+	set_objective_3
+}
+
+func void spawn_right_patrol(string ai_name)
+{
+	dprint spawn_right_patrol
+	ai2_spawn right_patrol_striker_1
+}
+
+func void spawn_left_patrol(string ai_name)
+{
+	dprint spawn_right_patrol
+	ai2_spawn left_patrol_striker_1
+}
+
+func void spawn_back_patrol(string ai_name)
+{
+	dprint spawn_right_patrol
+	ai2_spawn back_patrol_striker_1
+	ai2_spawn back_patrol_striker_2
+}
+
+func void spawn_floor1_striker_10(string ai_name)
+{
+	dprint spawn_ambush_striker_10
+#	trig_activate 1
+	ai2_spawn Floor1_Striker_10
+	ai2_spawn Floor1_Striker_12
+}
+
+func void spawn_floor1_striker_11(string ai_name)
+{
+	dprint spawn_ambush_striker_11
+#	trig_activate 1
+	ai2_spawn Floor1_Striker_11
+	ai2_spawn Floor1_Striker_12
+}
+
+func void fake_console(string ai_name)
+{
+	sleep 180
+	dprint fake_console
+
+	door_unlock 2
+	door_unlock 9
+	door_unlock 12
+	door_unlock 15
+	door_unlock 18
+	door_unlock 21
+	door_unlock 24
+	door_unlock 27
+
+	particle lock2_locklight01 do start
+}
+
+func void spawn_floor2_guards(string ai_name)
+{
+	dprint spawn_floor2
+
+	particle lock2_locklight01 do stop
+
+	ai2_spawn Floor2_Striker_2
+	ai2_spawn Floor2_Striker_3
+	ai2_spawn Floor2_Striker_4
+
+	sleep 15
+
+	ai2_spawn Floor2_Striker_1
+	ai2_doalarm Floor2_Striker_1 3
+
+	sleep 15
+
+	ai2_spawn Floor2_Sci_1
+	ai2_spawn Floor2_Sci_2
+	ai2_spawn Floor2_Sci_3
+	ai2_spawn Floor2_Sci_4
+	ai2_spawn Floor2_Sci_5
+
+	trigvolume_enable attack_trigger 0
+}
+
+func void commence_attack(string ai_name)
+{
+	dprint commence_attack
+
+	ai2_setalert Floor2_Striker_2 high
+	ai2_setalert Floor2_Striker_3 high
+	ai2_setalert Floor2_Striker_4 high
+
+	ai2_dopath Floor2_Striker_1 Floor2_Stk_1
+	ai2_dopath Floor2_Striker_2 scram_path
+	ai2_dopath Floor2_Striker_3 attack_path_1
+	ai2_dopath Floor2_Striker_4 attack_path_2
+
+	ai2_setjobstate Floor2_Striker_1
+	ai2_setjobstate Floor2_Striker_2
+	ai2_setjobstate Floor2_Striker_3
+	ai2_setjobstate Floor2_Striker_4
+
+	ai2_attack Floor2_Striker_4 Floor2_Sci_4
+	ai2_attack Floor2_Striker_3 Floor2_Sci_1
+}
+
+func void death_sentence_1(string ai_name)
+{
+	dprint death_sentence_1
+	ai2_attack Floor2_Striker_4 Floor2_Sci_5
+}
+
+func void death_sentence_2(string ai_name)
+{
+	dprint death_sentence_2
+	ai2_attack Floor2_Striker_3 Floor2_Sci_2
+}
+
+func void death_sentence_3(string ai_name)
+{
+	dprint death_sentence_2
+	ai2_attack Floor2_Striker_3 Floor2_Sci_3
+}
+
+func void spawn_floor3_guards(string ai_name)
+{
+	dprint spawn_floor3
+
+	ai2_spawn Floor3_Striker_1
+	ai2_spawn Floor3_Striker_2
+	ai2_spawn Floor3_Striker_3
+	ai2_spawn Floor3_Striker_4
+
+	ai2_spawn Floor3_Comguy_1
+	
+	particle lock3_locklight01 do stop
+}
+
+func void spawn_roof_guards(string ai_name)
+{
+	dprint spawn_roof_guards
+
+	ai2_spawn Roof_Striker_1
+	ai2_spawn Roof_Striker_2
+	ai2_spawn Roof_Striker_3
+
+#	particle lock3_locklight01 do start
+}
+
+func void roof_surprise(string ai_name)
+{
+	dprint roof_surprise
+	ai2_dopath Roof_Striker_3 Roof_Striker_3b
+	ai2_setjobstate	Roof_Striker_3
+}
+
+func void spawn_tower_guards(string ai_name)
+{
+	dprint spawn_tower_guards
+
+	ai2_spawn Tower_Striker_1
+	ai2_spawn Tower_Striker_2
+#	particle lock3_locklight01 do start
+}
+
+func void spawn_lobby_tctf(string ai_name)
+{
+	dprint spawn_lobby_guards
+	ai2_spawn Lobby_TCL_1
+	ai2_spawn Lobby_TCL_2
+	ai2_spawn Lobby_TCS_1
+
+#	particle lock3_locklight01 do start
+}
+
+func void spawn_lobby_synd(string ai_name)
+{
+	dprint spawn_lobby_attackers
+
+	sleep 600
+
+	ai2_spawn Lobby_Striker_1
+	ai2_spawn Lobby_Striker_2
+	ai2_spawn Lobby_Striker_3
+	ai2_spawn Lobby_Striker_4
+
+	door_lock 35
+
+#	particle lock3_locklight01 do start
+}
+
+func void spawn_lively_1(string ai_name)
+{
+	dprint spawn_lively_1
+
+	ai2_spawn lively_striker_1
+}
+
+func void spawn_lively_2(string ai_name)
+{
+	dprint spawn_lively_2
+
+	ai2_spawn lively_striker_2
+}
+
+func void spawn_lively_3(string ai_name)
+{
+	dprint spawn_lively_3
+
+	ai2_spawn lively_striker_3
+	ai2_spawn lively_striker_4
+}
+
+func void spawn_opposite_striker_1(string ai_name)
+{
+	dprint spawn_opposite_1
+
+	ai2_spawn opposite_striker_1
+	trigvolume_enable spawn_opposite_2 0
+}
+
+func void spawn_opposite_striker_2(string ai_name)
+{
+	dprint spawn_opposite_2
+
+	ai2_spawn opposite_striker_2
+	trigvolume_enable spawn_opposite_1 0
+}
+
+func void backdoor(string ai_name)
+{
+	dprint spawn_backdoor_squad
+
+	ai2_spawn backdoor_striker_1
+	ai2_spawn backdoor_striker_3
+}
+
+func void spawn_vats(string ai_name)
+{
+	dprint spawn_vats
+
+	ai2_spawn Vat_Striker_1
+	ai2_spawn Vat_Striker_2
+	ai2_spawn Vat_Striker_3
+	ai2_spawn Vat_Striker_4
+	ai2_spawn Vat_Striker_5
+
+	particle lock4_locklight01 do stop
+	trigvolume_enable final_ambush 0
+	trigvolume_enable outro_volume_1 0
+	door_lock 49
+	door_lock 50
+}
+
+func void gethelp(string ai_name)
+{
+	trigvolume_enable outro_volume_1 1
+	sleep 120
+	door_unlock 49
+	door_unlock 50
+	ai2_attack Ambush_Striker_2 Konoko
+	particle lock177_locklight01 do start
+	sound_music_stop mus_main03
+}
+
+func void final_ambush(string ai_name)
+{
+	dprint spawn_final_ambush
+	ai2_spawn Ambush_Striker_1
+	ai2_spawn Ambush_Striker_2
+}
+
+func void unlock_floor1_doors(string ai_name)
+{
+	dprint unlock_floor1_doors
+
+	trigvolume_enable trigger_volume_10 0
+
+	door_unlock 3
+	door_unlock 8
+	door_unlock 11
+	door_unlock 14
+	door_unlock 17
+	door_unlock 20
+	door_unlock 23
+	door_unlock 26
+
+	if(trigvolume_count(36) eq 0)
+		{
+		input 0
+#		begin_cutscene
+		cm_interpolate lock1 0
+		sleep 60
+		particle lock1_locklight01 do start
+		sleep 150
+		cm_interpolate tophint 0
+		sleep 60
+		particle lock4a_locklight01 do start
+		sleep 150
+		cm_reset
+		end_cutscene
+		input 1
+		cm_reset
+#		end_cutscene
+		input 1
+		}
+
+	particle lock1_locklight01 do start
+	particle lock4a_locklight01 do start
+
+	door_counter = door_counter - 1
+	if (door_counter eq 0)
+		{
+		unlock_roof();
+		}
+}
+
+func void unlock_floor2_doors(string ai_name)
+{
+	dprint unlock_floor2_doors
+
+	trigvolume_enable attack_trigger 1
+
+	door_unlock 2
+	door_unlock 9
+	door_unlock 12
+	door_unlock 15
+	door_unlock 18
+	door_unlock 21
+	door_unlock 24
+	door_unlock 27
+
+	if(trigvolume_count(37) eq 0)
+		{
+		input 0
+#		begin_cutscene
+		cm_interpolate lock2 0
+		sleep 60
+		particle lock2_locklight01 do start
+		sleep 150
+		cm_interpolate tophint 0
+		sleep 60
+		particle lock4b_locklight01 do start
+		sleep 150
+		cm_reset
+		end_cutscene
+		input 1
+		cm_reset
+#		end_cutscene
+		input 1
+		}
+
+	particle lock2_locklight01 do start
+	particle lock4b_locklight01 do start
+
+	door_counter = door_counter - 1
+	if (door_counter eq 0)
+		{
+		unlock_roof();
+		}
+
+	sleep 60
+
+	ai2_dopath Floor2_Striker_1 Floor2_Stk_1
+	ai2_setjobstate	Floor2_Striker_1
+}
+
+func void unlock_floor3_doors(string ai_name)
+{
+	dprint unlock_floor3_doors
+
+	door_unlock 28
+	door_unlock 22
+	door_unlock 16
+	door_unlock 1
+	door_unlock 10
+	door_unlock 13
+	door_unlock 19
+	door_unlock 25
+
+	if(trigvolume_count(37) eq 0)
+		{
+		input 0
+#		begin_cutscene
+		cm_interpolate lock3 0
+		sleep 60
+		particle lock3_locklight01 do start
+		sleep 150
+		cm_interpolate tophint 0
+		sleep 60
+		particle lock4c_locklight01 do start
+		sleep 150
+		cm_reset
+#		end_cutscene
+		input 1
+		}
+
+	particle lock3_locklight01 do start
+	particle lock4c_locklight01 do start
+
+	door_counter = door_counter - 1
+	if (door_counter eq 0)
+		{
+		unlock_roof();
+		}
+}
+
+func void unlock_roof(string ai_name)
+{
+	dprint unlock_roof
+	door_unlock 4
+	spawn_roof_guards
+	door_unlock 56
+
+	sound_music_start mus_main03	
+}
+
+func void passage_1(string ai_name)
+{
+	dprint unlock_floor1_doors
+
+	input 0
+	cm_interpolate passage 0
+	sleep 60
+	particle lock69a_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	passage_counter = passage_counter - 1
+	if (passage_counter eq 0)
+		{
+		unlock_passage();
+		}
+}
+
+func void passage_2(string ai_name)
+{
+	dprint unlock_floor1_doors
+
+	input 0
+	cm_interpolate passage 0
+	sleep 60
+	particle lock69b_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	passage_counter = passage_counter - 1
+	if (passage_counter eq 0)
+		{
+		unlock_passage();
+		}
+}
+
+func void passage_3(string ai_name)
+{
+	dprint unlock_floor1_doors
+
+	input 0
+	cm_interpolate passage 0
+	sleep 60
+	particle lock69c_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	passage_counter = passage_counter - 1
+	if (passage_counter eq 0)
+		{
+		unlock_passage();
+		}
+}
+
+func void unlock_passage(string ai_name)
+{
+	dprint unlock_passage
+
+	sound_music_start mus_main03 1.0
+
+	door_unlock 48
+	#target_set(256, 0.0)
+}
+
+func void unlock_end_door(string ai_name)
+{
+	dprint unlock_end_door
+
+	door_unlock 56
+
+	trigvolume_enable final_ambush 1
+
+	input 0
+	cm_interpolate lock5 0
+	sleep 60
+	particle lockend_locklight02 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	target_set(52, 30.0)
+	sleep 30
+	ai2_spawn Vat_MB_1
+}
+
+
+func void Lobby_Hurt_TCL_1(string ai_name)
+{
+	dprint Hurt_TCL_1
+	ai2_dopath Lobby_TCL_1 Lobby_Hurt_TCL_1
+}
+
+
+func void Lobby_Hurt_TCL_2(string ai_name)
+{
+	dprint Hurt_TCL_2
+
+	sleep 120
+
+	ai2_dopath Lobby_TCL_2 Lobby_Hurt_TCL_2
+}
+
+
+### MISE EN SCENE ###
+
+
+func void miseenscene_start(string ai_name)
+{
+	dprint scene_start
+	particle scene create
+
+	ai2_spawn scene_thug_1
+	ai2_spawn scene_thug_2
+}
+
+func void miseenscene_stop(string ai_name)
+{
+	dprint scene_stop
+	particle scene kill
+}
+
+func void day_264(string ai_name)
+{
+	dprint day264
+	
+	sleep 150
+	particle day264 create
+	particle dayafter create
+	particle dayafter start
+
+	ai2_dopath scene_thug_1 scene_flee_1 1
+	ai2_dopath scene_thug_2 scene_flee_2 1
+
+	sleep 300
+	ai2_spawn arcy
+	
+	sleep 1000
+	chr_delete scene_thug_1
+	chr_delete scene_thug_2
+
+	sleep 500
+	chr_delete arcy
+}
Index: AE/packages/VanillaBSL/IGMD/lab/lab_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/lab/lab_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/lab/lab_main.bsl	(revision 313)
@@ -0,0 +1,39 @@
+#
+# lab_main.bsl
+#
+
+
+var int my_save_point;
+
+func void main(void)
+{
+	trigvolume_enable save_1_trig 0
+	env_show 776 0
+	env_show 777 0
+	gl_fog_blue=.15
+	gl_fog_red=.30
+	gl_fog_green=.17
+	gl_fog_start=.99
+	gs_farclipplane_set 5000
+
+	obj_create 2 7
+
+	my_save_point = save_point;
+
+	level_start
+
+	if (my_save_point eq 0)
+	{
+		trigvolume_enable outside_left 0
+		trigvolume_enable outside_right 0
+		trigvolume_enable outside_back 0
+
+		intro
+	}
+}
+
+func void chase1(void)
+{
+}
+
+
Index: AE/packages/VanillaBSL/IGMD/lab/particle_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/lab/particle_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/lab/particle_scripts.bsl	(revision 313)
@@ -0,0 +1,10 @@
+func void splash(string ai_name)
+{
+	dprint we_entered_splash
+	chr_animate ai_0 KONOKOacid
+}
+func void entry(string character)
+{
+	dprint EWW_GROSS
+	particle bug pulse
+}
Index: AE/packages/VanillaBSL/IGMD/manplant/manplant_anim_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/manplant/manplant_anim_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/manplant/manplant_anim_scripts.bsl	(revision 313)
@@ -0,0 +1,39 @@
+#
+# anim_scripts.bsl
+#
+
+func void patrolscript0001 (string ai_name)
+{
+	playback_block Pod1_TCL_1 alarm1 interp 20
+}
+func void patrolscript0002 (string ai_name)
+{
+	playback_block Pod1_TCL_2 alarm2 interp 20
+}
+func void patrolscript0003 (string ai_name)
+{
+	playback_block Pod2_TCL_1 pod2alarm1 interp 20
+}
+func void patrolscript0004 (string ai_name)
+{
+	playback_block Pod2_TCL_2 pod2alarm2 interp 20
+}
+
+
+func void patrolscript0009 (string ai_name)
+{
+	particle lock99_locklight01 do start
+	door_unlock 11
+	sleep 540
+	particle lock99_locklight01 do stop
+	door_lock 11
+}
+func void patrolscript0010 (string ai_name)
+{
+	particle lock99_locklight01 do start
+	door_unlock 11
+# WAIT AND RELOCK DOORS
+	sleep 540
+	particle lock99_locklight01 do stop
+	door_lock 11
+}
Index: AE/packages/VanillaBSL/IGMD/manplant/manplant_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/manplant/manplant_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/manplant/manplant_cutscene.bsl	(revision 313)
@@ -0,0 +1,411 @@
+#
+# manplant_cutscene.bsl
+#
+
+func void
+manplant_cs_intro(void)
+{
+
+}
+
+
+func void intro(void)
+{
+	fade_out 0 0 0 0
+	cm_interpolate Camout01 0
+	env_show 561 0
+	sleep f14
+	begin_cutscene
+	sleep f30
+	#Outside shot of cops walking in
+	ai2_spawn Recep
+	ai2_spawn partner_cop_1
+	ai2_spawn partner_cop_2
+	playback 0 IntroKonoko01
+	playback partner_cop_1 IntroCop01
+	playback partner_cop_2 IntroCop02
+	#cm_interpolate Camout01 0
+	
+	sound_music_start mus_ambgrv1b 0.90
+	#music_script_start();
+
+	fade_in 120
+
+	sleep f240
+	#cops enter building, shot behind the receptionist
+	cm_anim both Camin02
+	chr_envanim Recep IntroSecBox01 norotation
+	chr_animate Recep SECRETsit_prehello 540
+	chr_lock_active Recep
+	chr_lock_active partner_cop_1
+	chr_lock_active partner_cop_2
+	#receptionist looks up and Cop introduces himself
+	cm_interpolate_block Camin03 0
+	chr_envanim Recep IntroSecBox01 norotation
+	chr_animate Recep SECRETsit_prehello 120
+	chr_animate_block Recep SECRETsit_hello 90
+
+	sound_music_volume mus_ambgrv1b 0.6 1
+
+	chr_animate_block Recep SECRETsit_talk 600
+	chr_envanim Recep IntroSecBox01 norotation
+
+	sound_dialog_play c01_04_01receptionist
+	cinematic_start (RECEPtalking, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block pause
+	cinematic_stop (RECEPtalking, 20, 20)
+	cinematic_start (TCTFtalking, 180, 180, 19, 7, 20, false)
+	sound_dialog_play c01_04_02tctfag1
+	chr_envanim Recep IntroSecBox01 norotation
+	#Konoko interrupts Cop guy
+	playback 0 IntroKonokoInt
+	sleep f100
+	#sound_dialog_play_block pause
+	chr_envanim Recep IntroSecBox01 norotation
+	cm_interpolate IntroCamInterrupt 0
+	cinematic_start (KONpsychedup, 180, 180, 20, 7, 20, false)
+	playback partner_cop_1 IntroCopInt
+	sound_dialog_play_interrupt c01_04_03konoko
+	cinematic_stop (TCTFtalking, 19, 20)
+	sound_dialog_play_block pause
+	cinematic_stop (KONpsychedup, 19, 20)
+	#Receptionis says ok officer
+	cm_interpolate Camin03 0
+	chr_envanim Recep IntroSecBox01 norotation
+	chr_animate Recep SECRETsit_talk 400
+	sleep f30
+	cinematic_start (RECEPtalking, 180, 180, 20, 9, 20, true)
+	sound_dialog_play c01_04_04receptionist
+	sleep f90
+	#Receptionis hits alarm
+	cm_anim both IntroCamAlarm
+	chr_envanim Recep IntroSecBox01 norotation
+	chr_animate Recep SECRETsit_alarm 400
+	sleep f110
+	particle IntroLight01 create
+	particle IntroLight01 do start
+	cinematic_stop (RECEPtalking, 20, 20)
+	#Bad guys see alarm is hit
+	cm_wait
+	chr_create 1050 start
+	ai2_spawn Barabus
+	chr_neutral 1050 1
+	#chr_neutral 1051 1
+	playback 1050 IntroMuroSet
+	playback Barabus IntroBossSet
+	cm_interpolate IntroCamBadGuys00 0
+
+	sound_ambient_start alarm_loop
+
+	cm_interpolate_block IntroCamBadGuys01 240
+	sleep f120
+	cinematic_start (BOSS1nametag, 180, 180, 16, 3, 20, false)
+	sound_dialog_play c02_05_01barabas
+
+	sound_ambient_volume alarm_loop .35 1.0
+	
+	sound_dialog_play_block pause
+	#Muro turns to Bossman
+	playback 1050 IntroMuro01
+	cm_interpolate IntroCamMuro01 0
+	cinematic_start (MUROnametag, 180, 180, 15, 1, 20, false)	
+	sound_dialog_play c02_05_02muro
+	sound_dialog_play_block pause
+	#Bossman and Muro talk
+	cm_interpolate IntroCamBothLt 0
+	cm_interpolate_block IntroCamBothRt 500
+	sound_dialog_play c02_05_03barabas
+	sound_dialog_play_block pause
+	sound_dialog_play c02_05_04muro
+	sound_dialog_play_block pause
+	sound_dialog_play c02_05_05barabas
+	sound_dialog_play_block pause
+	#Muro talks
+	cm_interpolate IntroCamMuro02 0
+
+	sound_ambient_volume alarm_loop 0.0 1.0
+	sound_ambient_stop alarm_loop
+
+	sound_dialog_play c02_05_06muro
+	sound_dialog_play_block pause
+	#Bossman and Muro talk
+	cm_interpolate IntroCamBothRtHigh 0
+	cm_interpolate_block IntroCamBothLtHigh 500
+	sound_dialog_play c02_05_07muro
+	sound_dialog_play_block pause
+	sound_dialog_play c02_05_08barabas
+	sound_dialog_play_block pause
+	sound_dialog_play c02_05_09muro
+	sound_dialog_play_block pause
+	sound_dialog_play c02_05_10barabas
+	sound_dialog_play_block pause
+	#Muro talks
+	cm_interpolate IntroCamMuro01 0
+	sound_dialog_play c02_05_11muro
+	sound_dialog_play_block pause
+	cinematic_stop (MUROnametag, 15,20)
+	cinematic_stop (BOSS1nametag, 16,20)
+	#Receptionist says hold on
+	cm_interpolate Camin03 0
+	chr_envanim Recep IntroSecBox01 norotation
+	chr_animate Recep SECRETsit_unalarm 180
+	chr_animate_block Recep SECRETsit_talk 500
+	sound_dialog_play c02_05_12receptionist
+	cinematic_start (RECEPtalking, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block pause
+	cinematic_stop (RECEPtalking, 20,20)
+	#Strikers Rush in
+
+	sound_ambient_volume mus_ambgrv1b 0 .5
+
+	music_script_start();
+
+	ai2_spawn ambush_striker_3
+	ai2_spawn ambush_striker_2
+	#chr_neutral ambush_striker_3 1
+	#chr_neutral ambush_striker_2 1
+	
+	door_open 21
+	door_jam 21
+
+	playback ambush_striker_3 IntroStrikerRight01
+	playback ambush_striker_2 IntroStrikerRight02
+	cm_interpolate IntroCamDoorRight01 0
+	sleep f180
+	#Cop says what the?
+	playback partner_cop_2 IntroCop02Surprise
+	chr_envanim 1003 IntroSecBox01 norotation
+	chr_animate Recep SECRETsit_talk 400
+	cm_interpolate IntroCamSurprise 0
+	cm_interpolate_block IntroCamSurprise02 90
+	sound_dialog_play c02_05_13tctfag1
+	ai2_spawn ambush_striker_1
+	#chr_neutral ambush_striker_1 1
+
+	door_unlock 4
+	door_open 4
+	door_jam 4
+	
+	playback ambush_striker_1 IntroStrikerLeft01
+	sleep f60
+	#Konoko looks around
+	chr_envanim Recep IntroSecBox01 norotation
+	chr_animate Recep SECRETsit_talk 180
+	cm_reset
+	playback 0 IntroKonokoLook
+	sleep f30
+	cinematic_start (KONangryfront, 180, 180, 20, 7, 10, false)
+	sleep f170
+	#Konoko says we got company
+	playback Recep IntroRecepRun
+	cm_interpolate IntroCamCompany 0
+	sound_dialog_play c02_05_14konoko
+	sleep f30
+	playback Recep IntroRecepRun
+	sound_dialog_play_block pause
+	cinematic_stop (KONangryfront, 19 ,20)
+	#gameplay resumes
+	cm_reset
+	env_show 561 1
+	env_show 560 0
+	end_cutscene
+
+	ai2_attack partner_cop_1 ambush_striker_1
+	ai2_attack partner_cop_2 ambush_striker_3
+
+	chr_delete 1050
+	chr_delete Barabus
+	particle IntroLight01 kill
+	sleep f90
+	#chr_delete Recep
+	
+	door_lock 1
+	door_unjam 4
+	door_lock 4
+	door_unjam 21
+	set_objective_1
+	
+	save_point_1
+}
+
+func void
+Chase(
+	void)
+{
+	sleep 60
+	begin_cutscene jello
+#	sleep f10
+#	cm_orbit .1
+	sleep f30
+	chr_animate 0 KONOKOwatch_start 60
+	sleep f40
+	cinematic_start (KONtalking, 180, 180, 15, 1, 20, false)
+	cinematic_start (GRIFtalking, 180, 180, 16, 3, 20, true)
+	sleep f19
+	chr_animate 0 KONOKOwatch_idle 3000
+
+	sound_music_volume atm_low_perc1 0.35 1.0
+
+	sound_dialog_play c02_06_01konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c02_06_02griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c02_06_03konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c02_06_04griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c02_06_05konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c02_06_06griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c02_06_07konoko
+	sound_dialog_play_block pause
+	cinematic_stop (KONtalking, 15,20)
+	cinematic_stop (GRIFtalking, 16,20)
+	chr_animate 0 KONOKOwatch_stop
+	sleep f15
+	cm_reset
+	end_cutscene
+
+	sound_music_volume atm_low_perc1 .90 1.0
+	
+	striker_counter = striker_counter + 2
+	particle save1b_locklight01 do start
+	door_unlock 11
+	console_deactivate 15
+	
+	if (alarm_counter eq 1)		
+		{
+		ai2_spawn hall_striker_2
+		ai2_tripalarm konoko 1
+		}
+}
+
+
+func void
+Griffin_1(
+	void)
+{
+	begin_cutscene jello
+	sound_ambient_stop alarm_loop
+	sleep f30
+	chr_animate 0 KONOKOwatch_start 60
+	sleep 40
+	cinematic_start (KONtalking, 180, 180, 15, 1, 20, false)
+	cinematic_start (GRIFtalking, 180, 180, 16, 3, 20, true)
+	sleep f19
+	chr_animate 0 KONOKOwatch_idle 3000
+	sound_dialog_play c02_07_01griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c02_07_02konoko
+	sound_dialog_play_block pause
+	chr_animate 0 KONOKOwatch_stop
+	cinematic_stop (KONtalking, 15,20)
+	cinematic_stop (GRIFtalking, 16,20)
+	sleep f15
+	cm_reset
+	end_cutscene
+}
+
+
+func void
+outro(
+	void)
+{
+	begin_cutscene
+	env_show 555 1
+	env_show 556 0
+	#Konok talks on watch radio to Griffin
+	#playback 0 OutroKonokoSet
+	##cm_interpolate OutroCam00 0
+	##cm_interpolate_block OutroCam01 180
+	fork soundplay
+	gl_fog_blue=0
+	gl_fog_red=0
+	gl_fog_green=0
+	gl_fog_end=.999
+	gl_fog_start_changeto 0.92 60
+	sleep f60
+	sleep f30
+	playback 0 OutroKonokoRun
+	cm_interpolate OutroCam00 0
+	cm_interpolate_block OutroCam01 180
+	sleep f120
+	#Konoko jumps out of room
+	playback 0 OutroKonoko01
+	cm_interpolate OutroCam02 0
+	sleep f60
+	#cm_interpolate_block OutroCam03 180
+	sleep f40
+	particle OutroCharge do explode
+	sleep f200
+	#Konoko runs out of room
+	playback 0 OutroKonoko02
+	door_open 4
+	door_jam 4
+	cm_interpolate OutroCam04 0
+	sleep f90
+	cm_interpolate_block OutroCam05 180
+	sleep f180
+	#Konoko runs out of front door
+	cm_interpolate OutroCam06 0
+	cm_interpolate_block OutroCam07 180
+	sleep f100
+	door_open 1
+	door_jam 1
+	sleep f140
+	fade_out 0 0 0 120
+	#win
+}
+
+func void
+soundplay(
+	void)
+{
+	cinematic_start (GRIFtalking, 180, 180, 15, 1, 20, false)
+	sound_dialog_play c02_09_01griffin
+	sleep f60
+	sound_dialog_play_block pause
+	sound_dialog_play c02_09_02kerr
+	cinematic_start (KERRtalking, 180, 180, 16, 3, 20, true)	
+	sound_dialog_play_block pause
+	sound_dialog_play c02_09_03griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c02_09_04kerr
+	sound_dialog_play_block pause
+	sound_dialog_play c02_09_05griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c02_09_06kerr
+	sound_dialog_play_block pause
+	sound_dialog_play c02_09_07griffin
+	sound_dialog_play_block pause
+	cinematic_stop (KERRtalking, 16,20)
+	cinematic_stop (GRIFtalking, 15,20)
+	sleep f100
+	gl_fog_end=1
+	gl_fog_start=.975
+	win
+}
+
+
+
+func void
+animate(
+	void)
+{
+	env_anim 1101 1
+	env_anim 1102 1
+	env_anim 1103 1
+	env_anim 1104 1
+	env_anim 1105 1
+	env_anim 1106 1
+	env_anim 1107 1
+	env_anim 1108 1
+	env_anim 1109 1
+	env_anim 1110 1
+	env_anim 1111 1
+	env_anim 1201 1
+	env_anim 1202 1
+	env_anim 1203 1
+	env_anim 1204 1
+}
Index: AE/packages/VanillaBSL/IGMD/manplant/manplant_level_logic.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/manplant/manplant_level_logic.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/manplant/manplant_level_logic.bsl	(revision 313)
@@ -0,0 +1,1091 @@
+### MANPLANT LEVEL LOGIC###
+
+# START, SAVE & OBJECTIVES
+
+func void func_start(string ai_name)
+{
+	dprint start_active	
+	particle lock_1_locklight01 do start
+	particle guardroom_2_locklight01 do start
+	particle foyer_right_locklight01 do start
+	particle brainlock_2_locklight01 do start
+	chr_forceholster 0 1
+	trig_hide 205	
+	trig_hide 204
+	trig_hide 2042	
+	trig_hide 203
+	trig_hide 2032		
+	trig_hide 202
+	trig_hide 2022
+	trig_hide 2023
+	trig_hide 201	
+	trig_hide 2012
+	trig_hide 2013
+	particle febtober1_locklight01 do start
+	particle save1a_locklight01 do start
+
+	if (save_point eq 0)
+		{
+		my_save_point=0;	
+		particle vent03 start
+		}
+	
+	if (save_point eq 1)
+		{
+		my_save_point=1;	
+		particle vent03 start
+		ai2_spawn partner_cop_1
+		ai2_spawn partner_cop_2
+		ai2_spawn ambush_striker_1
+		ai2_spawn ambush_striker_2
+		ai2_spawn ambush_striker_3
+		chr_delete Recep
+		door_lock 1
+		door_lock 4
+		restore_game
+		ai2_attack partner_cop_1 ambush_striker_1
+		ai2_attack partner_cop_2 ambush_striker_3
+		music_script_start();
+		sleep 30
+		set_objective_1
+		}
+
+	if (save_point eq 2)
+		{
+		my_save_point=2;	
+		dprint restore2_active
+		door_lock 1
+		door_lock 4
+		door_lock 11
+		door_lock 12
+		door_lock 13
+		door_unlock 3
+		door_unlock 19
+		trigvolume_enable nook_1 0
+		trigvolume_enable nookright 0
+		trigvolume_enable tech_1 0
+		trigvolume_enable bait_1 0
+		trigvolume_enable tech_ambush_1 0
+		chr_delete Recep
+		chr_delete extra_thug_1
+		ai2_spawn hall_striker_1
+		console_deactivate 1
+		console_deactivate 9
+		particle lock_1b_locklight01 do start
+		particle lock_1a_locklight01 do start
+		particle save1b_locklight01 do stop
+		particle febtober1_locklight01 do start
+		particle vent01 start
+		particle vent03 start
+		restore_game
+		sound_music_start atm_low_perc1 0.90
+		sleep 30
+		set_objective_1
+		target_set (123,30)
+		}
+
+	if (save_point eq 3)
+		{
+		my_save_point=3;	
+		dprint restore3_active
+		door_lock 1
+		door_lock 12
+		door_lock 13
+		door_lock 25
+		door_unlock 19
+		door_unlock 3
+		trigvolume_enable nook_1 0
+		trigvolume_enable nookright 0
+		trigvolume_enable tech_1 0
+		trigvolume_enable bait_1 0
+		trigvolume_enable Griffin 0
+		trigvolume_enable lowthug_1 0
+		trigvolume_reset febtober
+		trigvolume_reset febtober2
+		chr_delete Recep
+		console_deactivate 10
+		particle lock_1b_locklight01 do start
+		particle lock_1a_locklight01 do start
+		particle vent01 start
+		particle vent03 start
+		ai2_spawn low_thug_1
+		ai2_spawn low_thug_2
+		restore_game
+		sleep 30
+		set_objective_3
+		}
+
+	if (save_point eq 4)
+		{
+		dprint save_point_4
+		my_save_point=4;	
+		dprint restore4_active
+		particle brainlock_2_locklight01 do stop
+		particle brainlock_3_locklight01 do start
+		door_lock 26
+		door_unlock 27
+		trigvolume_reset lockit 
+		trigvolume_enable save_point4 0
+		brain_counter
+		trig_show 202
+		trig_show 204
+		trig_speed 202 .2
+		trig_speed 204 .2
+		trig_hide 2023
+		trig_hide 2013
+		particle brain start
+		particle brain1 start
+		restore_game
+		sound_ambient_start deadlybrain_sound 0.75
+		sleep 30
+		set_objective_4	
+		}
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+
+func void you_win(int char_index)
+{
+	win
+}
+
+func void save_point_1(string player_name)
+{
+	dprint save_point_1_active
+	save_game 1 autosave
+}
+
+func void save_point_2(string player_name)
+{
+	dprint save_point_2_active
+	save_game 2 autosave
+}
+
+func void save_point_3(string player_name)
+{
+	dprint save_point_3_active
+	save_game 3
+	door_lock 25 autosave
+}
+
+func void save_point_4(string player_name)
+{
+	dprint save_point_4_active
+	save_game(4, autosave); 
+	particle(brainlock_2_locklight01, do, stop);
+	particle(brainlock_3_locklight01, do, start);
+	door_lock(26);
+	door_unlock(27);
+	particle vent01 kill
+	particle vent02 kill
+}
+
+func void set_objective_1(string ai_name)
+{
+	dprint set_objective1
+	objective_set(1)
+	target_set (38,30)
+	sound_dialog_play c00_01_22shinatama
+}
+
+func void set_objective_2(string ai_name)
+{
+	dprint set_objective2
+	objective_set(2)
+	target_set (128,30)
+	sound_dialog_play c00_01_26shinatama
+}
+
+func void set_target(string ai_name)
+{
+	dprint new_target
+	target_set (124,30)
+	sound_dialog_play c00_01_27shinatama
+}
+
+func void set_objective_3(string ai_name)
+{
+	dprint set_objective3
+	objective_set(3)
+	target_set (125,30)
+	trigvolume_enable Griffin 0
+	sound_dialog_play c00_01_18shinatama
+}
+
+func void set_objective_4(string ai_name)
+{
+	dprint set_objective4
+	objective_set(4)
+	sound_dialog_play c00_01_20shinatama
+}
+
+### MUSIC ###
+
+var int music_counter=3;
+
+func void music_force_stop(void)
+{
+	sleep 4500
+
+	if (0 ne music_counter) 
+	{
+		dprint music_force_stop
+		music_counter = 0
+		all_music_counters
+	}
+}
+
+func void music_script_start(void)
+{
+	sound_music_start mus_fiteb_hd 0.75
+	music_counter=3;
+}
+
+func void striker_lullaby_1(string ai_name)
+{
+	dprint striker_lullaby1
+	music_counter = music_counter - 1
+
+	if (music_counter eq 0)
+	{
+		all_music_counters();
+	}
+
+}
+
+func void striker_lullaby_2(string ai_name)
+{
+	dprint striker_lullaby2
+	music_counter = music_counter - 1
+
+	if (music_counter eq 0)
+	{
+		all_music_counters();
+	}
+}
+
+func void striker_lullaby_3(string ai_name)
+{
+	dprint striker_lullaby3
+	music_counter = music_counter - 1
+
+	if (music_counter eq 0)
+	{
+		all_music_counters();
+	}
+}
+
+
+func void all_music_counters(void)
+{
+	dprint ELVIS_HAS_LEFT_THE_BUILDING
+	sound_music_stop mus_ambgrv1b
+	sound_music_stop mus_fiteb_hd
+	sound_music_stop atm_low_perc1
+	sound_music_stop atm_cl12
+	sound_music_stop atm_cl11
+	sound_music_stop mus_sv
+}
+
+# SCRAMBLE SOUND ON
+func void scramble_sound_on(void)
+{
+	dprint scramble_sound_start
+	sound_music_start atm_cl12 0.75
+}
+
+# SCRAMBLE SOUND OFF
+func void scramble_sound_off(void)
+{
+	dprint scramble_sound_end
+	sound_music_stop atm_cl12
+}
+
+### TEXT CONSOLES ###
+
+func void level2a(string chr_index)
+{
+	dprint text2a
+	text_console level_2a
+	console_reset 2
+}
+
+func void level2b(string chr_index)
+{
+	dprint text2b
+	text_console level_2b
+	console_reset 12
+}
+
+func void level2c(string chr_index)
+{
+	dprint text2c
+	text_console level_2c
+	console_reset 13
+}
+
+func void level2d(string chr_index)
+{
+	dprint text2d
+	text_console level_2d
+	console_reset 14
+}
+
+func void level2e(string chr_index)
+{
+	dprint text2e
+	text_console level_2e
+	console_reset 11
+}
+
+### GAMEPLAY PROGRESSION ###
+
+# FIRST ROOM GUARDS
+func void tech_1(string ai_name)
+{
+
+	dprint trigger_tech_1_active
+	ai2_spawn tech_thug_1
+	ai2_spawn tech_thug_1a
+	ai2_dopath partner_cop_1 cop_backup_1a 1
+	ai2_dopath partner_cop_2 cop_backup_1b 1
+}
+
+# FIRST CONSOLE
+func void door_1(string ai_name)
+{
+
+	dprint trigger_door_1_active
+	input 0
+	begin_cutscene
+	door_unlock 19
+	door_unlock 3
+	cm_interpolate lock_1a 0
+	sleep 60
+	particle lock_1a_locklight01 do start
+	sleep 150
+	cm_interpolate lock_1b 0
+	sleep 60
+	particle lock_1b_locklight01 do start
+	sleep 150
+	cm_reset
+	end_cutscene
+	input 1
+	target_set (123,30)
+}
+
+# NOOK 1
+func void nook_1(string ai_name)
+{
+	dprint nook_1_active
+	ai2_spawn nookleft_thug_1
+}
+
+# FOYER RETURN REWARD
+func void nookright(string ai_name)
+{
+	dprint nookright_active
+	ai2_spawn nookright_thug_1
+}
+
+# FLYWAY AMBUSH
+func void flyway_1(string ai_name)
+{
+	dprint flyway_1_active
+	ai2_spawn flyway_striker_1
+}
+
+# COMMGUY BAIT
+func void bait_1(string ai_name)
+{
+	dprint bait_1_active
+	trigvolume_enable alarm_1 1
+	ai2_spawn bait_commguy_1
+	ai2_spawn tech_thug_2
+	sleep 120
+	ai2_doalarm bait_commguy_1 15
+	sound_music_start atm_low_perc1 0.90
+}
+
+# ALARM 
+func void patrolscript0300(string ai_name)
+{
+	dprint alarm
+	ai2_doalarm bait_commguy_1 1
+}
+
+# PLASMA STRIKER 1
+func void plasma_striker_1(string ai_name)
+{
+	dprint plasma_striker_1_active
+	ai2_spawn plasma_striker_1
+}
+
+# ALARM 1 AMBUSH
+func void alarm_1(string ai_name)
+{
+	dprint alarm_1_active
+	alarm_counter = alarm_counter + 1
+	sound_ambient_start alarm_loop
+	sleep 900
+	sound_ambient_stop alarm_loop
+}
+
+
+
+### CUTSCENE COUNTDOWN
+
+func void hall_striker_var(string ai_name)
+{
+	dprint striker_var
+	striker_counter = striker_counter - 1
+
+	if (striker_counter eq 0)
+	{		
+		sayonara_strikey();
+	}
+}
+
+func void hall_commguy_var(string ai_name)
+{
+	dprint commguy_var
+	striker_counter = striker_counter - 1
+
+	if (striker_counter eq 0)
+	{		
+		sayonara_strikey();
+	}
+}
+
+func void hall_thug1_var(string ai_name)
+{
+	dprint thug1_var
+	striker_counter = striker_counter - 1
+
+	if (striker_counter eq 0)
+	{		
+		sayonara_strikey();
+	}
+}
+
+func void sayonara_strikey
+{
+	dprint sayonara
+	Chase
+}
+
+### BACK TO THE LOGIC
+
+# TECH AMBUSH
+func void tech_ambush_1(string ai_name)
+{
+	dprint tech_ambush_1_active
+	ai2_spawn hall_striker_1
+}
+
+# SECOND CONSOLE
+func void door_2(string ai_name)
+{
+	dprint trigger_door_2_active
+	letterbox 1
+	door_lock 4
+	input 0
+	cm_interpolate lock_2 0
+	sleep 60
+	particle lock88_locklight02 do start
+	door_unlock 23
+	door_open 23
+	ai2_spawn patrol_striker_2
+	sleep 350
+	cm_reset
+	letterbox 0
+	input 1
+	door_lock 12
+	particle save1a_locklight01 do stop
+	target_set (124,30)
+	console_activate 4 1	
+}
+
+# THIRD CONSOLE
+func void door_3(string ai_name)
+{
+	dprint trigger_door_3_active
+	door_unlock 4
+	input 0
+	cm_interpolate lock_3 0
+	sleep 60
+	particle lock_3_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+	set_objective_2
+	sound_music_stop atm_low_perc1
+}
+
+# CRUEL COMMGUY
+func void cruel_1(string ai_name)
+{
+
+	dprint cruel_1_active_active
+	ai2_spawn cruel_commguy_1
+	ai2_spawn victim_femsci_1
+}
+
+# TECH 3 PATROL
+func void tech_3(string ai_name)
+{
+	dprint tech_3_active_active
+	ai2_spawn tech_thug_3
+}
+
+# NEW TARGET 1
+func void new_target_1(string ai_name)
+{
+	dprint new_target_1_active
+	target_set (54,30)
+}
+
+# BEATER ROOM 1
+func void beaters_1(string ai_name)
+{
+	dprint beaters_1_active
+	ai2_spawn scram_striker_1
+	ai2_spawn beater_thug_1
+	particle vent01 start
+	chr_delete plasma_striker_1
+}
+
+# BEATER THUG 2
+func void beater_thug_2(string ai_name)
+{
+	dprint beater_thug_2_active
+	ai2_spawn beater_thug_2
+}
+
+
+# BEATER BACKUP 1
+func void backup_1(string ai_name)
+{
+	dprint backup_1_active
+	ai2_spawn backup_thug_1
+	ai2_tripalarm 1 0
+}
+
+# BEATER BACKUP 2
+func void backup_2(string ai_name)
+{
+	dprint backup_2_active
+	ai2_spawn backup_thug_2
+	ai2_tripalarm 2 0
+}
+
+# NEW TARGET 2
+func void new_target_2(string ai_name)
+{
+	dprint new_target_2_active
+	target_set (54,30)
+}
+
+# NEW TARGET 3
+func void new_target_3(string ai_name)
+{
+	dprint new_target_3_active
+	target_set (126,30)
+}
+
+# LOW THUGS 1
+func void lowthug_1(string ai_name)
+{
+	dprint lowthug_1_active
+	ai2_spawn low_thug_1
+	ai2_spawn low_thug_2
+}
+
+# DISABLE OBJECTIVE TRIGGER 1
+func void disable_obj_trig_1(string ai_name)
+{
+	dprint_disable_obj_trig_1_active
+	trigvolume_enable low_thug_1 1
+}
+
+# HIDDEN LOCK 1
+func void hidden_1(string ai_name)
+{
+	dprint trigger_door_3_active
+	door_unlock 22
+	ai2_spawn hidden_sci_1
+	particle vent02 start
+	input 0
+	begin_cutscene
+	cm_interpolate hlock_1 0
+	sleep 60
+	particle hlock_1_locklight01 do start
+	sleep 150
+	cm_interpolate ShinatamaCam01 0
+	cm_interpolate_block ShinatamaCam02 900
+	chr_animate 0 KONOKOwatch_start 60
+	sleep f40
+	cinematic_start (SHINtalking, 180, 180, 16, 3, 20, true)
+	sleep f19
+	chr_animate 0 KONOKOwatch_idle 3000
+	sound_dialog_play c02_08_01shinatama
+	sound_dialog_play_block pause
+	sound_dialog_play c02_08_02konoko
+	cinematic_start(KONtalking, 180, 180, 15, 1, 20, false)
+	sound_dialog_play_block pause
+	sound_dialog_play c02_08_03shinatama
+	sound_dialog_play_block pause
+	cm_interpolate brain_off_1b 0
+	cm_interpolate_block brain_off_1a 1000
+	particle brain start
+	particle brain1 start	
+	sound_ambient_start deadlybrain_sound 0.75		
+	sound_dialog_play c02_08_04konoko
+	sound_dialog_play_block pause
+	sound_dialog_play c02_08_05shinatama
+	sound_dialog_play_block pause
+	sound_dialog_play c02_08_06konoko
+	sound_dialog_play_block pause
+	chr_animate 0 KONOKOwatch_stop 15
+	cinematic_stop(KONtalking, 15, 20)
+	cinematic_stop(SHINtalking, 16, 20)
+	sleep f15
+	sound_ambient_volume deadlybrain_sound 0
+	cm_reset
+	end_cutscene
+	particle brain stop
+	particle brain1 stop
+	target_set (127,30)
+	sleep 10
+	sound_ambient_stop deadlybrain_sound
+}
+
+# HIDDEN TRIGGER 1A
+func void hidden_1a(string ai_name)
+{
+	dprint hidden_1a_active
+	trigvolume_enable hidden_1b 1
+	particle vent02 start
+}
+
+# HIDDEN TRIGGER 1B
+func void hidden_1b(string ai_name)
+{
+	dprint hidden_1b_active
+	ai2_spawn patrol_striker_3
+}
+
+# TRIGGER DEACTIVATE 4
+func void trigger_deactivate_4(string ai_name)
+{
+	dprint trigger_deactivate_4_active
+	input 0
+	cm_interpolate trigger_4 0
+	sleep 90
+	trig_deactivate 4
+	sleep 150
+	cm_reset
+	input 1
+	target_set (125,30)
+}
+
+# LOW STRIKER 1
+func void low_striker_1(string ai_name)
+{
+	dprint low_striker_1_active
+	ai2_spawn low_striker_1
+	ai2_spawn low_striker_2
+}
+
+# HALL TRIGGER ACTIVATE
+func void trigger_active_1(string ai_name)
+{
+	dprint trigger_active_1_active
+	trig_activate 2
+}
+
+# GUARD ROOM 1
+func void guardroom_1(string ai_name)
+{
+	dprint guardroom_1_active
+	door_unlock 14
+	input 0
+	cm_interpolate guardroom_1 0
+	sleep 60
+	particle guardroom_1_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+	target_set (65,30)
+}
+
+# BRAIN COMMGUY 1
+func void brain_commguy_1(string ai_name)
+{
+	dprint brain_commguy_1_active
+	ai2_spawn brain_commguy_1
+	ai2_spawn brain_commguy_2
+}
+
+# BRAIN LOCK 1
+func void brainlock_1(string ai_name)
+{
+	dprint brainlock_1_active
+	door_unlock 6
+	input 0
+	cm_interpolate brainlock_1 0
+	sleep 60
+	particle brainlock_1_locklight02 do start
+	sleep 150
+	cm_reset
+	input 1
+	target_set (129,30)
+	trigvolume_enable cruel_striker_1 1
+}
+
+# BRAIN DEFEAT
+func void braindefeat(string ai_name)
+{
+	target_set (130,30)
+}
+
+# CRUEL STRIKER
+func void cruel_striker_1(string ai_name)
+{
+	dprint cruel_striker_1_active
+	ai2_spawn cruel_striker_1
+	ai2_spawn victim_mansci_1
+	particle vent01 stop
+	particle vent02 stop
+	particle brain start
+	particle brain1 start
+}
+
+# AAIIEE!
+func void flee(string ai_name)
+{
+	dprint we_are_in_flee
+	chr_talk victim_mansci_1 c02_62_11sci 0 0
+	ai2_dopath victim_mansci_1 victim_2
+	sleep 300
+	set_objective_4
+}
+
+# LOCKIT
+func void lockit(string ai_name)
+{
+	dprint lockit_active
+	particle brainlock_3_locklight01 do stop
+	door_close 27
+	door_jam 27
+	particle vent01 kill
+	if (mus_cool4_playing eq 0)
+		{
+		sound_music_start mus_cool4_hd 1
+		mus_cool4_playing = 1;
+		}
+}
+
+### GLORIOUS DEADLY BRAIN FIGHT ###
+
+var int console_count = 4;
+
+func void brain_counter(string player_name)
+{
+	console_count = console_count - 1;
+
+	if (console_count eq 0)
+	{
+		console_count = 4;
+
+		dprint brain_counter_active
+		brain_counter_var = brain_counter_var + 1;
+
+		if (brain_counter_var eq 0)
+		{
+			brain_round_1
+		}
+
+		if (brain_counter_var eq 1)
+		{
+			brain_round_2
+		}
+
+		if (brain_counter_var eq 2)
+		{
+			brain_round_3
+		}
+
+		if (brain_counter_var eq 3)
+		{
+			brain_round_4
+		}
+	}
+}
+
+# BRAIN ROUND 1
+func void brain_round_1(string ai_name)
+{
+	ai2_allpassive 1
+	turret_deactivate 20
+	input 0
+	begin_cutscene jello
+	#sound_music_start atm_cl11 0.75
+	sound_ambient_start deadlybrain_sound 1.0
+	sleep 60
+	cm_interpolate brain_off_1b 0
+	sleep 30
+	cm_interpolate brain_off_1a 800
+	sleep 5
+	trig_show 202
+	trig_show 204
+	trig_speed 202 .2
+	trig_speed 204 .2
+	trig_hide 2023
+	trig_hide 2013
+	cinematic_start (SHINtalking, 180, 180, 16, 3, 20, true)
+	sound_dialog_play c00_01_106Shinatama
+	sound_dialog_play_block pause
+	sound_dialog_play c00_01_107Shinatama
+	sound_dialog_play_block pause
+	sleep 30
+	sound_dialog_play c00_01_108Shinatama
+	sound_dialog_play_block pause
+	cinematic_stop(SHINtalking, 16, 20)
+	cm_interpolate_block brain_closeup 0
+	sleep 30
+	sound_dialog_play brain07final
+	sleep 200 
+	sound_music_stop atm_cl11
+	cm_reset
+	end_cutscene
+	input 1
+	sleep 90
+	ai2_allpassive 0
+	save_point_4
+	console_reset 21
+	console_reset 22
+	console_reset 23
+	console_reset 24
+}
+
+# BRAIN ROUND 2
+func void brain_round_2(string ai_name)
+{
+	ai2_allpassive 1
+	turret_deactivate 20
+	input 0
+	begin_cutscene jello	
+	#sound_music_start atm_cl11 0.75
+	sound_music_volume mus_cool4_hd 0.7 1
+	sleep 60
+	cm_interpolate brain_off_1a 0
+	sleep 30
+	cm_interpolate brain_off_1b 850
+	cinematic_start (SHINtalking, 180, 180, 16, 3, 20, true)
+	sound_dialog_play c00_01_113Shinatama
+	sleep 120
+	trig_hide 204
+	trig_hide 202
+	sleep 120
+	trig_speed 2012 0
+	trig_speed 2022 0
+	trig_show 2012
+	trig_show 2022
+	sleep 90
+	trig_speed 2012 .2
+	trig_speed 2022 .2
+	sound_dialog_play_block pause
+	cinematic_stop(SHINtalking, 16, 20)
+	sleep 60
+	cinematic_start (SHINscared, 180, 180, 16, 3, 20, true)
+	sound_dialog_play c00_01_114Shinatama
+	sound_dialog_play_block pause
+	cinematic_stop(SHINscared, 16, 20)
+	cm_interpolate_block brain_closeup 0
+	sleep 30
+	sound_dialog_play brain03final
+	sleep 200
+	end_cutscene
+	#sound_music_stop atm_cl11
+	sound_music_volume mus_cool4_hd 1 1
+	cm_reset
+	input 1
+	sleep 90
+	ai2_allpassive 0
+	console_reset 21
+	console_reset 22
+	console_reset 23
+	console_reset 24
+}
+
+# BRAIN ROUND 3
+func void brain_round_3(string ai_name)
+{
+	ai2_allpassive 1
+	turret_deactivate 20
+	input 0
+	begin_cutscene jello	
+	#sound_music_start atm_cl11 0.75
+	sound_music_volume mus_cool4_hd 0.7 1
+	sleep 60
+	cm_interpolate brain_off_1b 0
+	sleep 30
+	cm_interpolate brain_off_1a 1200
+	cinematic_start (SHINtalking, 180, 180, 16, 3, 20, true)
+	sound_dialog_play c00_01_115Shinatama
+	sleep 120
+	trig_hide 2012	
+	trig_hide 2022
+	sleep 120
+	trig_speed 205 0	
+	trig_speed 2042 0	
+	trig_speed 2032 0	
+	trig_speed 2023 0	
+	trig_speed 2013 0		
+	trig_show 205
+	sleep 60	
+	trig_show 2042
+	sleep 60	
+	trig_show 2032
+	sleep 60	
+	trig_show 2023
+	sleep 60	
+	trig_show 2013
+	sound_dialog_play_block pause
+	sleep 60
+	sound_dialog_play c00_01_117Shinatama
+	sound_dialog_play_block pause	
+	trig_speed 205 .4
+	trig_speed 2042 .4
+	trig_speed 2032 .4
+	trig_speed 2023 .4
+	trig_speed 2013 .4
+	cinematic_stop(SHINtalking, 16, 20)
+	cm_interpolate_block brain_closeup 0
+	sleep 30
+	sound_dialog_play brain08final
+	sleep 200
+	end_cutscene
+	#sound_music_stop atm_cl11
+	sound_music_volume mus_cool4_hd 1.0 1
+	cm_reset
+	input 1
+	sleep 90
+	ai2_allpassive 0
+	console_reset 21
+	console_reset 22
+	console_reset 23
+	console_reset 24
+}
+
+# BRAIN ROUND 4
+func void brain_round_4(string ai_name)
+{
+	ai2_allpassive 1
+	turret_deactivate 20
+	input 0
+	sound_music_stop mus_cool4_hd
+	sound_music_start mus_sv 0.75
+	begin_cutscene jello	
+	sleep 60
+	cm_interpolate brain_off_1a 0
+	sleep 30
+	cm_interpolate brain_off_1b 1000 
+	sleep 90
+	trig_speed 205 1
+	sleep 90	
+	trig_speed 2042 2
+	sleep 90	
+	trig_speed 2032 1
+	sleep 90
+	trig_speed 2023 2
+	sleep 90
+	trig_speed 2013 2
+	sleep 60
+	trig_hide 205
+	trig_hide 2013
+	sleep 60	
+	trig_hide 2042
+	sleep 60	
+	trig_hide 2032
+	trig_hide 2023
+	sleep 60
+	trig_hide 402
+	sound_ambient_stop deadlybrain_sound
+	particle brain1 kill
+	sleep 10
+	particle brain1 create
+	particle brain1 start
+	sleep 20
+	particle brain1 kill
+	particle brain1 create
+	particle brain1 start
+	sleep 30
+	particle brain1 kill
+	sleep 30
+	particle brain kill
+	sleep 250
+	trigvolume_enable febtober 0
+	door_unlock 1
+	door_unlock 4
+	particle lock_3_locklight01 do start
+	outro
+}
+
+### FEBTOBER ###
+
+# FEBTOBER TRIGGER 1
+func void feb_tober(string ai_name)
+{
+	dprint febtober_active
+
+	all_music_counters();
+
+	door_lock 10
+	door_lock 13
+	door_unlock 25
+	door_unlock 23
+	ai2_spawn febtober_striker_1
+	trigvolume_reset feb_tober2
+	trigvolume_enable cruel_1 0
+	trigvolume_enable flyway_1 0
+	trigvolume_enable beaters_1 0
+	console_deactivate 1
+	console_deactivate 4
+	particle lock_3_locklight01 do start
+	particle lock88_locklight02 do start
+	particle febtober1_locklight01 do stop
+}
+
+# FEBTOBER TRIGGER 2
+func void feb_tober2(string ai_name)
+{
+	dprint febtober_2_active
+	trigvolume_reset febtober
+}
+
+### I NEED SOME BACKUP ###
+
+func void calling_all_cars(string ai_name)
+{
+	dprint callingallcars
+	ai2_dopath partner_cop_1 cop_backup_2a 1
+	ai2_dopath partner_cop_2 cop_backup_2b 1
+}
+
+func void calling_all_cars2(string ai_name)
+{
+	dprint callingallcars
+	
+	ai2_dopath partner_cop_1 cop_backup_2a 1
+	ai2_dopath partner_cop_2 cop_backup_2b 1
+}
+
+### Level scripted by Joseph ###
Index: AE/packages/VanillaBSL/IGMD/manplant/manplant_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/manplant/manplant_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/manplant/manplant_main.bsl	(revision 313)
@@ -0,0 +1,30 @@
+#
+# CZ_main.bsl
+#
+
+var int my_save_point;
+var int brain_counter_var=0;
+var int striker_counter=2;
+var int backup1a_counter=1;
+var int backup1b_counter=1;
+var int mus_cool4_playing=0;
+var int alarm_counter;
+
+func void main(void)
+{
+	env_show 555 0
+	#obj_create 1101 1111
+	obj_create 1201 1208
+	#env_anim 1101 1111
+	env_anim 1201 1208
+	gl_fog_blue=.15
+	gl_fog_red=.15
+	gl_fog_green=.15
+	gl_fog_start=.98
+	gs_farclipplane_set 5000
+	func_start
+	if (my_save_point eq 0)
+	{
+	intro
+	}
+}
Index: AE/packages/VanillaBSL/IGMD/manplant/particle_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/manplant/particle_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/manplant/particle_scripts.bsl	(revision 313)
@@ -0,0 +1,16 @@
+#partice scripts
+#alex okita
+#turns on and off particles for rooms
+####################################
+##             brain1		    ##
+####################################
+func void brain1_on(string ai_name)
+{
+	dprint begin_evil_particles
+	particle brain1 do start
+}
+func void brain1_off(string ai_name)
+{
+	dprint stop_the_evil
+	particle brain1 do stop
+}
Index: AE/packages/VanillaBSL/IGMD/neuro/neuro_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/neuro/neuro_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/neuro/neuro_cutscene.bsl	(revision 313)
@@ -0,0 +1,915 @@
+#
+# neuro_cutscene.bsl
+#
+
+func void
+neuro_cs_intro(
+	void)
+{
+	fade_out 0 0 0 0		
+	env_show 271 0
+	env_show 272 0
+	obj_create 271 272
+	cm_interpolate IntroCamOut01 0
+	sleep f14
+	obj_shade 271 272 .4 .4 .2
+	begin_cutscene							
+	sleep f1
+	sound_music_start mus_low1 1.0
+	#fork music_force_stop
+	#Camera shot outside
+	cm_interpolate IntroCamOut01 0
+	ai2_spawn IntroTCTF01
+	playback IntroTCTF01 IntroSecSet
+	fade_in 60
+	sleep f100
+	playback IntroTCTF01 IntroSecStart
+	sleep f200
+	#Lobby shot
+	cm_interpolate IntroCamIn01 0
+	sleep f180
+	sound_dialog_play c13_47_03blackops
+	cinematic_start (TCTFtalking, 180, 180, 20, 9, 20, true)
+	sleep f60
+	#Security lets guy in
+	cm_interpolate IntroCamSecSet 0
+	playback IntroTCTF01 IntroSecSet
+	sleep f150
+	sound_dialog_play c13_47_04opsguard2
+	cinematic_start (BOPSface, 180, 180, 15, 1, 20, false)	
+	sleep f150
+	cinematic_stop (BOPSface, 15, 20)
+	cinematic_stop (TCTFtalking, 20, 20)
+	#Door opens
+	ai2_spawn IntroTCTF02
+	cm_interpolate IntroCamDoorOpen 0
+	playback IntroTCTF01 IntroSecSet
+	playback IntroTCTF02 IntroSecWalk
+	env_anim 271 272
+	sound_ambient_start c12_42_00door
+	sleep f240
+	#camera inside looking down
+	cm_interpolate IntroCamTopDown 0
+	playback 0 IntroKonCrouch
+	chr_animate 0 KONOKOcrouch_idle 1000
+	sleep f300
+	#camera showing security talking
+	playback IntroTCTF01 IntroSecMonitor01
+	#cm_interpolate IntroCamBothTalk 0
+	#sleep f180
+	#Security goes over to monitors
+	cm_interpolate IntroCamMonitorMid 0
+	playback IntroTCTF02 IntroSecMonitor02
+	#next line was 180
+	sleep f120
+	sound_dialog_play c13_47_01opsguard1
+	cinematic_start (TCTFtalking, 180, 180, 20, 9, 20, true)
+	sleep f60
+	#konoko jumps down behind Security
+	cm_interpolate IntroCamKonDrop 0
+	sleep f120
+	chr_envanim 0 IntroKonBox01 norotation
+	chr_animate 0 KONOKOlev14_IntroJump
+	#Konoko hides from guys
+	chr_envanim_block 0 IntroKonBox02 norotation
+	cm_anim both IntroCamHide
+	sound_dialog_play c13_47_02opsguard2
+	cinematic_start (BOPSface, 180, 180, 15, 1, 20, false)	
+	sleep f100
+	chr_animate 0 KONOKOlev14_IntroHide
+	sound_dialog_play_block pause
+	cinematic_stop (BOPSface, 15, 20)
+	cinematic_stop (TCTFtalking, 20, 20)
+	#Show doors closing
+	cm_wait
+	cm_interpolate IntroCamDoors 0
+	env_setanim 271 IntroDoorRt01
+	env_setanim 272 IntroDoorLt01
+	sound_ambient_start c13_04_03doorclose
+	sleep f120
+	#Konoko makes a run for it
+	env_setanim 271 IntroDoorRt01
+	env_setanim 272 IntroDoorLt01
+	cm_anim both IntroCamKonRun
+	chr_envanim 0 IntroKonBox03 norotation
+	chr_animate 0 KONOKOlev14_IntroRun
+	sound_music_stop mus_low1
+	#Konoko dives through closing door and sec turns around
+	cm_anim_block both IntroCamKonDive
+	chr_envanim 0 IntroKonBox04 norotation
+	chr_animate 0 KONOKOlev14_IntroDive
+	playback IntroTCTF01 IntroSecEnd
+	chr_envanim IntroTCTF02 IntroSecBox01 norotation
+	chr_animate IntroTCTF02 SECURIlev14_IntroTurn
+	#reset cam outside
+	cm_wait
+	playback 0 IntroKonstart
+	sleep f10
+	cm_reset
+	chr_delete IntroTCTF01
+	chr_delete IntroTCTF02
+	obj_kill 271 272
+	env_show 271 1
+	env_show 272 1
+	env_shade 271 272 .4 .4 .2
+	fork Setup_Intro
+	fork set_objective_1
+	end_cutscene
+}
+
+
+func void
+spawn_kerr(
+	void)
+{
+	ai2_spawn ScanKerr01
+	ai2_passive ScanKerr01 1
+	chr_unstoppable KerrKerr 1
+	chr_delete KerrKerr
+}
+
+
+func void
+scanner_start(
+	void)
+{
+	var int number_near = 0;
+
+	number_near = number_near + trigvolume_count(68);
+	number_near = number_near + trigvolume_count(69);
+	number_near = number_near + trigvolume_count(70);
+	number_near = number_near + trigvolume_count(71);
+
+	if (number_near eq 0) 
+	{
+		trigvolume_enable trigger_volume_13 0
+		doscanscene
+	}
+}
+
+##############################
+
+func void wait_and_play_xtr5(void)
+{
+	sleep 60
+	sound_music_start mus_xtr5 1.0
+}
+
+
+func void
+doscanscene(
+	void)
+{
+		sound_ambient_start lab_amb1 0.1
+		sound_ambient_volume lab_amb1 1 2
+		fork Scan_Guards	
+		has_probed = 1
+		begin_cutscene
+		#hide scanner gunk
+		env_show 51 0
+		env_show 52 0
+		env_show 53 0
+		env_show 54 0
+		env_show 55 0
+		env_show 56 0
+		env_show 57 0
+		env_show 58 0
+		env_show 59 0
+		obj_create 51 59
+		#create this character before konoko gets into the scanner room
+		cm_interpolate ScanCamDocTalk 200
+		#patrol Konoko to flag 1009
+		ai2_takecontrol 1
+		ai2_movetoflag 0 1009
+		sleep f200
+		#Konoko talks
+		ai2_takecontrol 0
+		playback 0 ScanKonokoSet
+		sound_dialog_play c13_64_01konoko
+		cinematic_start (KONlistening, 180, 180, 19, 7, 20, false)	
+		sound_dialog_play_block pause
+		sleep f15
+		#Doctor says Go Sit in That Chair
+		cm_interpolate ScanCamDocTalk 0
+		sound_dialog_play c13_65_01kerr
+		cinematic_start (KERRtalking, 180, 180, 20, 9, 20, true)
+		sound_dialog_play_block pause
+		sleep f25
+		#Is this necessary?
+		cm_interpolate ScanCamBoth 0
+		sound_dialog_play c13_65_02konoko
+		sound_dialog_play_block pause
+		sleep f10
+		sound_dialog_play c13_65_03kerr
+		sound_dialog_play_block pause
+		cinematic_stop (KERRtalking, 20, 20)
+		#Konoko walk to chair & doctor walks to booth
+		playback 0 ScanKonokoWalk
+		cm_interpolate ScanCamKonWalk 0
+		playback ScanKerr01 ScanDoctorWalk
+		sleep f120
+		sound_dialog_play c13_65_04konoko
+		sleep f140
+		cinematic_stop (KONlistening, 19, 20)
+		#chair drops
+		cm_interpolate ScanCamChairDown 0
+		sleep f30
+		cutscene_sync mark
+		sound_ambient_start c18_01_29_effectsa
+		sleep f30
+		env_setanim 53 Scan_chair01
+		env_setanim 54 Scan_chair02
+		env_setanim 55 Scan_chair03
+		sleep f30
+		sleep f150
+		#Doctor enters booth
+		cm_interpolate ScanCamBoothIn 0
+		sleep f200
+		#show doctor in booth
+		playback ScanKerr01 ScanDocBooth
+		cm_interpolate ScanCamBooth 0
+		chr_envanim 0 ScanKonBox04
+		chr_animate 0 KONOKOlev14_scan 500
+		sound_dialog_play c13_65_05kerr
+		cinematic_start (KERRtalking, 180, 180, 20, 9, 20, true)
+		sound_dialog_play_block pause
+		cinematic_stop (KERRtalking, 20, 20)
+		sleep f30
+		#scanner starts
+		env_setanim 51 Scan_arm01
+		env_setanim 52 Scan_arm02
+		env_setanim 53 Scan_chair0101
+		env_setanim 54 Scan_chair0201
+		env_setanim 55 Scan_chair0301
+		env_setanim 56 Scan_tube01
+		env_setanim 57 Scan_tube02
+		env_setanim 58 Scan_tube03
+		env_setanim 59 Scan_tube04
+		chr_envanim 0 ScanKonBox01
+		chr_animate 0 KONOKOlev14_scan 2000
+		cm_interpolate ScanCamScan01 0
+		sleep f60
+		cutscene_sync mark
+		sound_ambient_start c18_01_29_effectsb
+		sleep f120
+		cm_interpolate_block ScanCamScan02 300
+		#Konoko gets scanned
+		chr_envanim_block 0 ScanKonBox02
+		chr_animate 0 KONOKOlev14_scan 2000
+		cm_interpolate ScanCamScan03 0
+		cm_interpolate_block ScanCamScan04 360
+		particle brainscan do start
+		sound_ambient_start scanner
+		sleep f120
+		sound_ambient_volume scanner .5 2
+		sleep f60
+		#Doctor in booth
+		sound_dialog_play c13_65_07kerr
+		cinematic_start (KERRtalking, 180, 180, 20, 9, 20, true)
+		cm_interpolate_block ScanCamBoothOut 0
+		sleep f10
+		sound_dialog_play c13_65_08konoko
+		cinematic_start (KONdeepthought, 180, 180, 19, 7, 20, false)	
+		sound_dialog_play_block pause
+		#Doctrof rom inside booth
+		cm_interpolate ScanCamBooth 0
+		sound_dialog_play c13_65_09kerr
+		sound_dialog_play_block pause
+		#konoko scanned
+		chr_envanim 0 ScanKonBox02
+		chr_animate 0 KONOKOlev14_scan 2000
+		cm_interpolate ScanCamScan02 0
+		cm_interpolate_block ScanCamScan01 1000
+		sound_dialog_play c13_65_10konoko
+		sound_dialog_play_block pause
+		sound_dialog_play c13_65_11kerr
+		sound_dialog_play_block pause
+		sound_dialog_play c13_65_12konoko
+		sound_dialog_play_block pause
+		cm_interpolate ScanCamBoothOut02 0
+		cm_interpolate_block ScanCamBoothOut 900
+		sound_dialog_play c13_65_13kerr
+		sound_dialog_play_block pause
+		cm_interpolate ScanCamScan04 0
+		cm_interpolate_block ScanCamScan03 800
+		sound_dialog_play c13_65_14konoko
+		sound_dialog_play_block pause
+		sleep f75
+		cm_interpolate ScanCamBoothOut 0
+		cm_interpolate_block ScanCamBoothOut02 900
+		sound_dialog_play c13_65_15kerr
+		sound_dialog_play_block pause
+		sleep f25
+		sound_dialog_play c13_65_16konoko
+		sound_dialog_play_block pause
+		sleep f20
+		#Doc in Booth
+		sound_dialog_play c13_65_17kerr
+		sleep f100
+		#Scanner stops
+		particle brainscan do stop
+		cutscene_sync_mark
+		sound_ambient_stop scanner
+		env_setanim 51 Scan_arm0102
+		env_setanim 52 Scan_arm0202
+		env_setanim 53 Scan_chair0102
+		env_setanim 54 Scan_chair0202
+		env_setanim 55 Scan_chair0302
+		env_setanim 56 Scan_tube0102
+		env_setanim 57 Scan_tube0202
+		env_setanim 58 Scan_tube0302
+		env_setanim 59 Scan_tube0402
+		chr_envanim 0 ScanKonBox03
+		chr_animate 0 KONOKOlev14_scan 730
+		cm_interpolate ScanCamScan01 0
+		cutscene_sync mark
+		sound_ambient_start c18_01_29_effectsc
+		cm_interpolate_block ScanCamScanStop 300
+		sleep f700
+		cinematic_stop (KONdeepthought, 19, 20)
+		cinematic_stop (KERRtalking, 20, 20)
+		#Doctor comes out of booth
+		playback ScanKerr01 ScanDocWalkOut
+		cm_interpolate ScanCamBoothOut 0
+		sleep f60
+		playback 0 ScanKonDone
+		sleep f150
+		sleep f80
+		#Konoko and Doc meet to talk
+		cm_interpolate ScanCamBoth02 0
+		cm_interpolate_block ScanCamBoth03 300
+		sleep f120
+		sound_dialog_play c13_65_18konoko
+		cinematic_start (KONlistening, 180, 180, 19, 7, 20, false)	
+		sleep f240
+		#Doc talks
+		playback ScanKerr01 ScanDoctorSet
+		cm_interpolate ScanCamDocTalk 0
+		cm_interpolate_block ScanCamDocTalk02 1100
+		sound_dialog_play c13_65_19kerr
+		cinematic_start (KERRtalking, 180, 180, 20, 9, 20, true)
+		sound_dialog_play_block pause
+		sound_dialog_play c13_65_20konoko
+		sound_dialog_play_block pause
+		sound_dialog_play c13_65_21kerr
+		sound_music_start mus_sad1 0.8
+		sound_dialog_play_block pause
+		#KOnoko talks
+		playback 0 ScanKonokoSet
+		cm_interpolate ScanCamKonTalk 0
+		cm_interpolate_block ScanCamKonTalk03 600
+		sound_dialog_play_block pause
+		sound_dialog_play c13_65_22konoko
+		sound_dialog_play_block pause
+		sleep f25
+		sound_dialog_play c13_65_23kerr
+		sound_dialog_play_block pause
+		#Both talk
+		cm_interpolate ScanCamTalkBoth 0
+		cm_interpolate_block ScanCamTalkBoth02 800
+		sound_dialog_play_block pause
+		sound_dialog_play c13_65_24konoko
+		sound_dialog_play_block pause
+		sleep f55
+		sound_dialog_play c13_65_25kerr
+		sound_dialog_play_block pause
+		sleep f40
+		#Konoko cam
+		cm_interpolate ScanCamKonTalk04 0
+		cm_interpolate_block ScanCamKonTalk 1000
+		sound_dialog_play c13_65_26konoko
+		sound_dialog_play_block pause
+		#KerrCam
+		cm_interpolate ScanCamDocTalk02 0
+		cm_interpolate_block ScanCamDocTalk03 800
+		sound_dialog_play c13_65_27kerr
+		sound_dialog_play_block pause
+		#BothCam
+		cm_interpolate ScanCamTalkBoth02 0
+		cm_interpolate_block ScanCamTalkBoth 1000
+		sound_dialog_play c13_65_28konoko
+		sound_dialog_play_block pause
+		sleep f25
+		sound_dialog_play c13_65_29kerr
+		sound_dialog_play_block pause
+		sound_dialog_play c13_65_30konoko
+		sound_dialog_play_block pause
+		sleep f20
+		sound_dialog_play c13_65_31kerr
+		sound_dialog_play_block pause
+		sleep f20
+		sound_dialog_play c13_65_32konoko
+		sound_dialog_play_block pause
+		sleep f20
+		#KerrCam
+		cm_interpolate ScanCamDocTalk 0
+		cm_interpolate_block ScanCamDocTalk03 1000
+		sound_dialog_play c13_65_33kerr
+		sound_dialog_play_block pause
+		sleep f20
+		#Konoko cam
+		cm_interpolate ScanCamKonTalk02 0
+		cm_interpolate_block ScanCamKonTalk 800
+		sound_dialog_play c13_65_34konoko
+		sound_dialog_play_block pause
+		#BothCam
+		cm_interpolate ScanCamTalkBoth02 0
+		cm_interpolate_block ScanCamTalkBoth 800
+		sound_dialog_play c13_65_35kerr
+		sound_dialog_play_block pause
+		sound_dialog_play c13_65_36konoko
+		sound_dialog_play_block pause
+		sleep f20
+		#show scanner gunk and hide scanner objects
+		env_show 51 1
+		env_show 52 1
+		env_show 53 1
+		env_show 54 1
+		env_show 55 1
+		env_show 56 1
+		env_show 57 1
+		env_show 58 1
+		env_show 59 1
+		obj_kill 51 59
+		sound_dialog_play_block pause
+		sound_dialog_play c13_65_37kerr
+		sound_dialog_play_block pause
+#		#Ambush sequence starts
+		#dOORS start to open
+		sound_music_stop mus_sad1
+		door_open 7
+		ai2_spawn ScanOps01
+		ai2_setmovementmode ScanOps01 run
+		playback ScanOps01 AmbushTCTFenter
+		sleep f60
+		#Konoko and Doctor hear doors opening
+		cm_interpolate AmbushCamTurn 0
+		playback ScanKerr01 AmbushDoctorTurn
+		sleep f10
+		chr_animate 0 KONCOMstartle_lt1
+		sleep f60
+		#TCTF is shown entering
+		playback ScanOps01 AmbushTCTFenter011
+		cinematic_stop (KONlistening, 19, 20)
+		cinematic_stop (KERRtalking, 20, 20)
+		cm_interpolate AmbushCamTCTFenter02 160
+		sleep f120
+		sound_dialog_play c13_65_38opsguard1
+		cinematic_start (BOPSface, 180, 180, 15, 1, 20, false)
+		particle_temp_start
+		sound_dialog_play_block
+		cinematic_stop (BOPSface, 15, 20)
+		#TCTF shoots gun
+		playback ScanOps01 AmbushTCTFshoot fromhere
+		sleep f40
+		particle_temp_kill
+		#Doctor takes bullets for konoko
+		#chr_envanim 0 AmbushKonBox02 norotation
+		#chr_animate 0 KONOKOlev14_Ambush01
+		#chr_envanim ScanKerr01 AmbushKerrBox02 norotation
+		#chr_animate ScanKerr01 DOClev14_Ambush01
+		#cm_anim both AmbushCamDie01
+		#sleep f30
+		#other angle of above
+		slowmo 120
+		cm_anim both AmbushCamDie02
+		chr_envanim 0 AmbushKonBox02 norotation
+		chr_animate 0 KONOKOlev14_Ambush01
+		chr_envanim ScanKerr01 AmbushKerrBox02 norotation
+		chr_animate ScanKerr01 DOClev14_Ambush01
+		cm_anim both AmbushCamDie02
+		sleep f22
+		particle_temp_stop
+		particle ScanMerc pulse
+		sleep f1
+		particle scanexplode create
+		sound_dialog_play kerr_dth1
+
+		fork wait_and_play_xtr5
+
+		#TCTF says you're next
+		cm_wait
+		ai2_kill ScanKerr01
+		#chr_set_health ScanKerr01 0
+		cm_interpolate ScanCamSynDie 0
+		playback 0 ScanKonDie
+		sleep f120
+		#konoko says let's get it on gameplay resumes
+		cm_interpolate ScanCamKonDie 0
+		sound_dialog_play c13_65_39konoko
+		cinematic_start (KONangryfront, 180, 180, 19, 7, 20, true)	
+ 		sound_dialog_play_block pause
+		cinematic_stop (KONangryfront, 20, 20)
+		cm_reset
+		fork set_objective_3
+		trigvolume_enable trigger_volume_13 0
+
+		# CB: set up the monologue for konoko telling herself about her next objective
+		prepare_vat_monologue();
+
+		end_cutscene
+		env_show 823 0
+		save_point_3
+
+		sound_ambient_volume lab_amb1 0 4
+
+		sleep 120
+		post_scan_music_start
+}
+
+func void
+KerrSpawn(void)
+{
+		ai2_spawn KerrKerr
+		#playback KerrKerr KerrKerrSet
+		ai2_passive KerrKerr 1
+}
+
+func void
+Kerr(void)
+{
+	if(trigvolume_count(36) eq 0)
+	{
+		sound_music_start mus_sad1 0.8
+		begin_cutscene
+		#ai2_spawn KerrKerr
+		ai2_takecontrol 1
+		ai2_movetoflag 0 1261 setfacing
+		playback KerrKerr KerrKerrSet
+		cm_interpolate KerrCamKerr 180
+		sleep f100
+		#Konoko says Hi Uncle
+		sound_dialog_play c13_64_01konoko
+		cinematic_start (KONlistening, 180, 180, 19, 9, 20, true)
+		sound_dialog_play_block pause
+		#Kerr says what are you doing here?
+		cm_interpolate KerrCamKerr 180
+		sound_dialog_play c13_64_02kerr
+		cinematic_start (KERRtalking, 180, 180, 16, 1, 20, false)
+		sound_dialog_play_block pause
+		#Konoko says I need your help
+		playback 0 KerrKonSet
+		cm_interpolate KerrCamLt02 0
+		cm_interpolate_block KerrCamLt01 800
+		sound_dialog_play c13_64_03konoko
+		sound_dialog_play_block pause
+		#Kerr says yep, you do
+		sound_dialog_play c13_64_04kerr
+		sound_dialog_play_block pause
+		sleep f20
+		#Konoko says I'm on it
+		sound_dialog_play c13_64_05konoko
+		sound_dialog_play_block pause
+		sleep f30
+		#Kerr says meet me in lab
+		sound_dialog_play c13_64_06kerr
+		sound_dialog_play_block pause
+		cinematic_stop (KONlistening, 20, 20)
+		cinematic_stop (KERRtalking, 15, 20)
+		cm_reset
+		letterbox 0
+		playback KerrKerr KerrKerrGive fromhere
+		sleep f90
+		chr_animate KerrKerr COMGUYact_give
+		chr_animate 0 KONOKOact_give
+		sleep f90
+		give_powerup hypo
+		sleep f2
+		give_powerup hypo
+		ai2_takecontrol 0
+		fork set_objective_2
+		end_cutscene
+		trigvolume_enable Kerr_trig 0
+		trigvolume_enable Kerr_trig_copy 0
+		console_activate 13
+		save_point_2
+		sound_music_volume mus_sad1 0 2
+		kerr_console_music
+	}	
+}
+
+
+func void Acid01(string char)
+{
+  var bool eggman;
+
+  eggman = chr_is_player(char);
+
+  if (eggman eq 0)
+  {
+    chr_animate(char, KONOKOacid);
+    sleep 10
+    chr_set_health(char, 0);
+  }
+
+  if (eggman eq 1)
+  {
+	chr_animate(char, KONOKOacid);
+	trigvolume_enable LastVat 0
+	cm_interpolate AcidCam01 500
+	sleep 5
+	input 0
+	invincible=1
+	sleep 525
+	chr_animate(char, KONOKOlev14_grinder);
+	chr_envanim(char, GrinderKonBox01, norotation);
+	sleep f60
+	sound_ambient_start c13_47_11_bonecrunch
+	sleep f10
+	sound_impulse_play konoko_gruesome_death
+	sleep f75
+	chr_set_health(char, 0);
+  }
+}
+
+
+func void Acid02(string char)
+{
+  var bool eggman;
+
+  eggman = chr_is_player(char);
+
+  if (eggman eq 0)
+  {
+    chr_animate(char, KONOKOacid);
+    sleep f10
+    chr_set_health(char, 0);
+  }
+
+  if (eggman eq 1)
+  {
+	chr_animate(char, KONOKOacid);
+	input 0
+	trigvolume_enable LastVat 0
+	cm_interpolate AcidCam01 400
+	sleep f5
+	invincible=1
+	sleep f430
+	chr_animate(char, KONOKOlev14_grinder);
+	chr_envanim(char, GrinderKonBox01, norotation);
+	sleep f60
+	sound_ambient_start c13_47_11_bonecrunch
+	sleep f10
+	sound_impulse_play konoko_gruesome_death
+	sleep f75
+	chr_set_health(char, 0);
+  }
+}
+
+
+
+func void Acid03(string char)
+{
+  var bool eggman;
+
+  eggman = chr_is_player(char);
+
+  if (eggman eq 0)
+  {
+    chr_animate(char, KONOKOacid);
+    sleep f10
+    chr_set_health(char, 0);
+  }
+
+  if (eggman eq 1)
+  {
+	input 0
+	trigvolume_enable LastVat 0
+	chr_animate(char, KONOKOacid);
+	cm_interpolate AcidCam01 200
+	sleep f5
+	invincible=1
+	sleep 230
+	chr_animate(char, KONOKOlev14_grinder);
+	chr_envanim(char, GrinderKonBox01, norotation);
+	sleep f60
+	sound_ambient_start c13_47_11_bonecrunch
+	sleep f10
+	sound_impulse_play konoko_gruesome_death
+	sleep f75
+	chr_set_health(char, 0);
+  }
+}
+
+
+
+func void acid04(string char)
+{
+  var bool eggman;
+
+  eggman = chr_is_player(char);
+
+  if (eggman eq 0)
+  {
+    chr_animate(char, KONOKOacid);
+    sleep f10
+    chr_set_health(char, 0);
+  }
+
+  if (eggman eq 1)
+  {
+	cm_detach
+	input 0
+	trigvolume_enable LastVat 0
+	chr_animate(char, KONOKOacid);
+	sleep f5
+	invincible=1
+	sleep 40
+	cm_interpolate GrinderCamEnd 0
+	sleep f10
+	chr_animate(char, KONOKOlev14_grinderend);
+	chr_envanim(char, EndGrinderKonBox01, norotation);
+	sleep f60
+	sound_ambient_start c13_47_11_bonecrunch
+	sleep f10
+	sound_impulse_play konoko_gruesome_death
+	sleep f75
+	chr_set_health(char, 0);
+  }
+}
+
+
+
+
+
+func void
+EndScan(
+	void)
+{
+	sound_dialog_play c13_66_01konoko
+	cinematic_start (KONtalkangryfront, 180, 180, 19, 7, 20)
+	sound_dialog_play_block
+	sleep f60
+	cinematic_stop (KONtalkangryfront, 19, 20)
+}
+
+
+func void
+CraneTalk(
+	void)
+{
+	sound_dialog_play c13_66_03konoko
+	cinematic_start (KONtalkangryfront, 180, 180, 19, 7, 20)
+	sound_dialog_play_block
+	sleep f60
+	cinematic_stop (KONtalkangryfront, 19, 20)	
+}
+
+func void
+BeginVat(
+	void)
+{
+	sound_dialog_play c13_66_02konoko	
+	cinematic_start (KONtalkangryfront, 180, 180, 19, 7, 20)
+	sound_dialog_play_block
+	sleep f60
+	cinematic_stop (KONtalkangryfront, 19, 20)
+}
+
+
+func void
+Outro(
+	void)
+{
+	if(final_check eq 0)
+	{
+		dprint OUTRO_1
+		begin_cutscene
+		trigvolume_enable LastVat 0
+		ai2_takecontrol 1
+		ai2_movetoflag 0 222
+		sleep f200
+		Outro2
+	}
+
+	if(final_check ne 0)
+	{
+		Outro2
+	}
+}
+
+func void
+Outro2(
+	void)
+{
+	dprint OUTRO_2
+	begin_cutscene
+	trigvolume_enable LastVat 0
+	ai2_takecontrol 1	
+	#dialog talking about how to get to the crane
+	#Konoko runs to Crane
+	cm_interpolate OutroCam01 0
+	sound_dialog_play c13_66_04konoko
+	cinematic_start (KONintense, 180, 180, 19, 7, 20)
+	sound_dialog_play_block
+	chr_envanim 0 OutroKonBox01 norotation
+	env_anim 71 74
+	cm_anim both OutroCam01
+	cutscene_sync mark
+	sound_ambient_start c13_59_22_crane
+	sleep f150
+	chr_animate 0 KONOKOlev14_Run
+	#Konoko jumps to Crane
+	cm_anim_block both OutroCamJump
+	chr_envanim 0 OutroKonBox02 norotation
+	chr_animate 0 KONOKOlev14_Jump
+	env_setanim 71 cranehook_jump
+	env_setanim 72 cranerope_jump
+	#Konoko tucks over shredders
+	cm_anim_block both OutroCamTuck
+	chr_envanim 0 OutroKonBox03 norotation
+	chr_animate 0 KONOKOlev14_Tuck
+	env_setanim 71 cranehook_tuck
+	env_setanim 72 cranerope_tuck
+	sleep f160
+	sound_dialog_play c13_66_05konoko
+	#Konoko dives into acid
+	chr_nocollision 0 1
+	cm_anim_block both OutroCamDive
+	chr_envanim 0 OutroKonBox04 norotation
+	chr_animate 0 KONOKOlev14_Dive
+	env_setanim 71 cranehook_dive
+	env_setanim 72 cranerope_dive
+	sleep f90
+	cinematic_stop (KONintense, 20, 20)
+	sleep f60
+	particle OutroSplash create
+	sound_ambient_start c14_15_12_splash
+	sleep f120
+	sound_ambient_start c14_16_18_bubbles	
+	sleep f80
+
+
+
+	### CB: this is the two-guys-at-the-acid-pool script
+#	playback OutroTCTF1 OutroTCTFSwat01
+#	playback OutroTCTF2 OutroTCTFLite01
+#	sleep f100
+#	cm_interpolate OutroCamWater01 0
+#	sleep f120
+#	sound_dialog_play c13_67_01opsguard1
+#	cinematic_start (TCTFtalking, 180, 180, 19, 7, 20, false)
+#	sound_dialog_play_block
+#	sound_dialog_play c13_67_02opsguard2
+#	cinematic_start (BOPSface, 180, 180, 20, 9, 20, true)
+#	sound_dialog_play_block
+#	#TCTFguys from birds eye
+#	cm_interpolate OutroCamWater02 0
+#	#sound_dialog_play c13_67_03opsguard3
+#	#sound_dialog_play_block
+#	#sound_dialog_play c13_67_04opsguard1
+#	#sound_dialog_play_block
+#	sleep f30
+#	sound_dialog_play c13_67_05opsguard2
+#	sound_dialog_play_block
+#	cinematic_stop (BOPSface, 20, 20)
+#	cinematic_stop (TCTFtalking, 19, 20)
+
+
+
+
+
+
+	### CB: this is the same script with a third character added
+	ai2_spawn OutroTCTF1
+	ai2_spawn OutroTCTF2
+	ai2_spawn OutroTCTF3
+	playback OutroTCTF1 OutroTCTFSwat01
+	playback OutroTCTF2 OutroTCTFLite01
+	sleep f40
+	playback OutroTCTF3 OutroTCTFLite02
+	sleep f60
+	cm_interpolate OutroCamWater01 0
+	sleep f120
+	sound_dialog_play c13_67_01opsguard1
+	cinematic_start (TCTFtalking, 180, 180, 19, 7, 20, false)
+	sound_dialog_play_block
+	sound_dialog_play c13_67_02opsguard2
+	cinematic_start (BOPSface, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block
+	sound_dialog_play c13_67_03opsguard3
+	sound_dialog_play_block
+	cinematic_stop (BOPSface, 20, 20)
+	cinematic_stop (TCTFtalking, 19, 20)
+
+	#TCTFguys from birds eye
+	cm_interpolate OutroCamWater02 0
+	sleep f40
+	cinematic_start (TCTFtalking, 180, 180, 20, 9, 20, true)
+	sound_dialog_play c13_67_04opsguard1
+	sound_dialog_play_block
+	sleep f30
+	cinematic_start (BOPSface, 180, 180, 19, 7, 20, false)
+	sound_dialog_play c13_67_05opsguard2
+	sound_dialog_play_block
+	sleep f140
+	cinematic_stop (BOPSface, 19, 20)
+	cinematic_stop (TCTFtalking, 20, 20)
+
+
+
+
+	sleep f140
+	win
+}
+
Index: AE/packages/VanillaBSL/IGMD/neuro/neuro_level_logic.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/neuro/neuro_level_logic.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/neuro/neuro_level_logic.bsl	(revision 313)
@@ -0,0 +1,1166 @@
+# neuro_spawn_guards.bsl
+#
+# SCRIPTS TO SPAWN SECURITY GUARDS
+#
+
+################# START GAME LOGIC #############################
+
+# creates counterS for stuff
+var int neuro_counter;
+var int kerr_counter;
+var int has_probed = 0;
+var int ambush_counter = 2;
+var int final_check = 0;
+var int FTS_variable = 2;
+
+func void level_start(void)
+{
+# set counter values
+
+	neuro_counter = 3
+	end_counter = 2
+	kerr_counter = 3
+
+	############# SAVE GAME SCRIPTS #############
+
+# These functions are used when the game is restored.
+
+	if (save_point eq 0)
+	{
+		dprint SAVE_POINT_0
+#		VOODOO COMPUTING
+	}
+
+	if (save_point eq 1)
+	{
+		fork Setup_Intro
+		fork set_objective_1
+		dprint Restore_Autosave_Point_1
+		restore_game
+	}
+
+	if (save_point eq 2)
+	{
+		dprint Restore_Autosave_Point_2
+
+		objective_set 1 silent
+		target_set(1261, 30.0)
+
+		dprint Restore_Pod_1
+		ai2_spawn Pod1_TCL_1
+		ai2_spawn Pod1_TCL_2
+		ai2_spawn Pod1_TCL_3
+		ai2_spawn Pod1_Scientist_1
+		ai2_spawn Pod1_Scientist_2
+		#particle lock1_locklight01 do start
+		door_lock(11);
+		trigvolume_enable(autosave_trigger_1, 0);
+
+		restore_game
+
+#		console_deactivate 10
+#		trigvolume_enable(trig_train_saves, 0);
+#		trigvolume_enable(trig_train_objectives, 1);
+	}
+
+	if (save_point eq 3)
+	{
+		dprint RESTORE_SAVE_POINT_3
+
+		objective_set 2 silent
+		target_set(366, 30.0)
+
+		particle lock3_locklight02 do start
+		particle lock4_locklight02 do start
+
+		door_unlock(58);
+
+		door_lock(32);
+		door_lock(33);
+		door_lock(34);
+		door_lock(35);
+
+		trig_deactivate 2
+
+		trigvolume_enable(trigger_volume_76, 0);
+		trigvolume_enable(trigger_volume_06, 1);
+		trigvolume_enable(Kerr_trig, 0);
+		console_deactivate 12
+		console_deactivate 13
+
+		restore_game
+
+		kerr_console_music
+	}
+
+	if (save_point eq 4)
+	{
+		dprint RESTORE_SAVE_POINT_4
+
+		env_show 823 0
+
+		objective_set 3 silent
+		target_set(346, 30.0)
+
+		door_lock 58
+
+		door_unlock(1);
+		door_unlock(6);
+		door_unlock(7);
+
+		particle lock5a_locklight01 do start
+		particle lock5b_locklight01 do start
+		particle lock5c_locklight01 do start
+
+		particle labalarm1_emlight01 do stop
+		particle labalarm2_emlight01 do stop
+		particle labalarm3_emlight01 do stop
+
+		particle labalarm1 do stop
+		particle labalarm2 do stop
+		particle labalarm3 do stop
+
+		particle lock6_locklight02 do start
+
+		trigvolume_enable(trigger_volume_13, 0);
+		trigvolume_enable(spawn_kerr_trig, 0);
+		#trigvolume_enable(Setup_Security_Trig, 1);
+		#trigvolume_enable(chase_trigger, 1);
+
+		# CB: set up the monologue for konoko telling herself about her next objective
+		prepare_vat_monologue();
+
+		console_deactivate 3
+		console_deactivate 4
+		console_deactivate 5
+		console_deactivate 14
+		console_deactivate 88
+
+		ai2_spawn Scan_BOS_1
+		ai2_spawn Scan_BOS_2
+		ai2_spawn Scan_BOS_3
+		ai2_spawn Scan_BOS_4
+
+		ai2_spawn CS_ScanOps01
+
+		restore_game
+
+		post_scan_music_start
+	}
+}
+
+# This is an example of a save game console.
+
+func void autosave_1(string player_name)
+{
+	dprint autosave_1
+#	PLAY AUTOSAVE SOUND - ADD LATER!!!
+	save_game 2 autosave
+}
+
+func void save_point_2(string player_name)
+{
+	dprint saveit_2
+	save_game 3 autosave
+}
+
+func void save_point_3(string player_name)
+{
+	dprint saveit_3
+	save_game 4 autosave
+}
+
+########################################################
+
+func void start_trap_music(string ai_name)
+{
+	dprint martys_baby
+	sound_music_start mus_space01 0.8
+}
+
+func void Die_For_Kerr_1(string ai_name)
+{
+	dprint DFK_1
+	kerr_counter = kerr_counter - 1
+
+	if (kerr_counter eq 0)
+	{
+		Kerr_Console_All_Counters();
+	}
+}
+
+func void Die_For_Kerr_2(string ai_name)
+{
+	dprint DFK_2
+	kerr_counter = kerr_counter - 1
+
+	if (kerr_counter eq 0)
+	{
+		Kerr_Console_All_Counters();
+	}
+}
+
+func void Die_For_Kerr_3(string ai_name)
+{
+	dprint DFK_3
+	kerr_counter = kerr_counter - 1
+
+	if (kerr_counter eq 0)
+	{
+		Kerr_Console_All_Counters();
+	}
+}
+
+func void Kerr_Console_All_Counters(void)
+{
+	dprint START_KERR
+	trigvolume_enable(Kerr_trig, 1);
+	fork Pod3_Unlock_Doors
+}
+
+func void Setup_Intro(string ai_name)
+{
+# SETUP POD 1 AREA
+	dprint Setup_Intro
+	trig_activate 1
+	particle lock99_locklight02 do start
+	particle lock100_locklight01 do stop
+
+	door_unlock 11
+}
+
+func void Setup_Pod1(string ai_name)
+{
+# SETUP POD 1 AREA
+	dprint SetupPod1
+
+	door_lock 20
+	door_lock 21
+	door_lock 22
+	door_lock 23
+
+	ai2_spawn Pod1_TCL_1
+	ai2_spawn Pod1_TCL_2
+	ai2_spawn Pod1_TCL_3
+	ai2_spawn Pod1_Scientist_1
+	ai2_spawn Pod1_Scientist_2
+
+	particle lock1_locklight01 do stop
+	#particle lock1_locklight01 do start
+	sound_music_stop mus_space01
+}
+#########################################
+func void Pod1_RTAlarm_A(string ai_name)
+{
+	dprint Guard_A_RTAlarm
+	ai2_doalarm Pod1_TCL_1 10
+}
+
+func void Pod1_RTAlarm_B(string ai_name)
+{
+	dprint Guard_B_RTAlarm
+	ai2_doalarm Pod1_TCL_2 10
+}
+#########################################
+
+func void Pod1_Alarm_Sound(void)
+{
+	sound_ambient_start alarm_loop
+	sleep 900
+	sound_ambient_stop alarm_loop
+}
+
+func void Pod1_Alarm(string ai_name)
+{
+	dprint Pod1Alarm
+	door_unlock(11);
+	particle lock99_locklight02 do start
+	sleep 180
+# SPAWN ALARM CHARACTERS
+	ai2_spawn Pod1_BOL_Alarm_1
+	ai2_spawn Pod1_BOL_Alarm_2
+	ai2_spawn pod1_a_1
+	ai2_spawn pod1_a_2
+# SET ALERT LEVELS
+	ai2_setalert Pod1_TCL_1 high 
+	ai2_setalert Pod1_TCL_2 high 
+	ai2_setalert Pod1_TCL_3 high 
+	ai2_setalert Pod1_BOL_Alarm_1 high 
+	ai2_setalert Pod1_BOL_Alarm_2 high 
+# EXECUTE ALARM PATHS
+	ai2_dopath Pod1_TCL_1 Pod1_Final_Guard_A
+	ai2_dopath Pod1_TCL_2 Pod1_Final_Guard_B
+	ai2_dopath Pod1_TCL_3 Pod1_Final_Guard_C
+	ai2_dopath Pod1_Scientist_1 Pod1_Final_Sci_A
+	ai2_dopath Pod1_Scientist_2 Pod1_Final_Sci_B
+# MAKE ALARM PATHS THEIR JOBS
+	ai2_setjobstate Pod1_TCL_1
+	ai2_setjobstate Pod1_TCL_2
+	ai2_setjobstate Pod1_TCL_3
+
+	ai2_setjobstate Pod1_Scientist_1
+	ai2_setjobstate Pod1_Scientist_2
+
+# TRIP ALARM FOR BADDIES TO PURSUE KONOKO
+
+	ai2_tripalarm 11 Konoko
+
+	particle lock1_locklight01 do stop
+
+	particle alarm1_emlight01 do start
+
+# DOOR LOCK COMMAND
+	door_lock 20
+	door_lock 21
+	door_lock 22
+	door_lock 23
+
+# annoy the player with alarm sound
+	fork Pod1_Alarm_Sound
+
+	console_reset 1
+}
+
+# UNLOCK DOORS FROM CONSOLE
+func void Pod1_UnlockDoors(string ai_name)
+{
+	dprint Pod1UnlockDoors
+
+	door_unlock 20
+	door_unlock 21
+	door_unlock 22
+	door_unlock 23
+	door_lock(11);
+	particle lock99_locklight02 do stop
+
+	input 0
+	cm_interpolate lock1 0
+	sleep 30
+	particle alarm1_emlight01 do stop
+	sleep 30
+	particle lock1_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	console_reset 10
+}
+###################### POD 2 #################################
+func void Pod2_Setup(string ai_name)
+{
+	dprint SetupPod2
+	ai2_spawn Pod2_TCL_1
+	ai2_spawn Pod2_TCL_2
+	ai2_spawn Pod2_Sci_1
+
+	particle lock2_locklight01 do stop
+}
+##############################################################
+func void Pod2_RTAlarm_A(string ai_name)
+{
+	dprint Guard_A_RTAlarm
+	ai2_doalarm Pod2_TCL_1 11
+}
+
+func void Pod2_RTAlarm_B(string ai_name)
+{
+	dprint Guard_B_RTAlarm
+	ai2_doalarm Pod2_TCL_2 11
+}
+##############################################################
+
+func void Pod2_Alarm_Sound(void)
+{
+	sound_ambient_start alarm_loop
+	sleep 900
+	sound_ambient_stop alarm_loop
+}
+
+func void Pod2_Alarm(string ai_name)
+{
+	dprint Pod2Alarm
+	door_unlock(11);
+	particle lock99_locklight02 do start
+	sleep 180
+
+# SPAWN ALARM CHARACTERS
+	#ai2_spawn Pod2_BOS_1
+	ai2_spawn Pod2_BOL_Alarm_1
+	ai2_spawn pod2_a_1
+	ai2_spawn pod2_a_2
+
+# SET ALERT LEVELS
+	ai2_setalert Pod2_TCL_1 high 
+	ai2_setalert Pod2_TCL_2 high 
+	ai2_setalert Pod2_BOS_1 high 
+
+# EXECUTE ALARM PATHS
+	ai2_dopath Pod2_TCL_1 Pod2_End_TCL_1
+	ai2_dopath Pod2_TCL_2 Pod2_End_TCL_2
+	ai2_dopath Pod2_BOS_1 Pod2_End_BOS_1
+	ai2_dopath Pod2_Sci_1 Pod2_End_Sci_1
+
+# MAKE ALARM PATHS THEIR JOBS
+	ai2_setjobstate Pod2_TCL_1
+	ai2_setjobstate Pod2_TCL_2
+	ai2_setjobstate Pod2_BOS_1
+
+	ai2_setjobstate Pod2_Sci_1
+
+# TRIP ALARM FOR BADDIES TO PURSUE KONOKO
+
+	ai2_tripalarm 12 Konoko
+
+	particle lock2_locklight01 do stop
+
+	particle alarm2_emlight01 do start
+
+# DOOR LOCK COMMANDS
+	door_lock 28
+	door_lock 29
+	door_lock 30
+	door_lock 31
+
+	console_reset 2
+
+	fork Pod2_Alarm_Sound
+}
+
+# UNLOCK DOORS FROM CONSOLE
+
+func void Pod2_UnlockDoors(string ai_name)
+{
+	dprint Pod2UnlockDoors
+
+	door_unlock 28
+	door_unlock 29
+	door_unlock 30
+	door_unlock 31
+	door_lock(11);
+	particle lock99_locklight02 do stop
+
+	input 0
+	cm_interpolate lock2 0
+	sleep 30
+	particle alarm2_emlight01 do stop
+	sleep 30
+	particle lock2_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	console_reset 11
+}
+
+func void chase_after_scan(string ai_name)
+{
+	ai2_dopath Scan_BOS_3 chase_after_3
+	ai2_dopath Scan_BOS_4 chase_after_4
+
+	ai2_setjobstate Scan_BOS_3
+	ai2_setjobstate Scan_BOS_4
+
+	ai2_tripalarm 11 Konoko
+
+	sleep 1200
+
+	ai2_dopath Scan_BOS_1 chase_after_1
+	ai2_dopath Scan_BOS_2 chase_after_2
+
+	ai2_setjobstate Scan_BOS_1
+	ai2_setjobstate Scan_BOS_2
+
+	ai2_tripalarm 9 Konoko
+}
+###################### POD 3 #################################
+func void Pod3_Setup(string ai_name)
+{
+	dprint SetupPod3
+	ai2_spawn Pod3_BOS_1
+	ai2_spawn Pod3_BOS_2
+	ai2_spawn Pod3_BOL_1
+
+	#door_lock 59
+
+	trigvolume_enable Kerr_trig 1
+}
+
+func void Pod3_Unlock_Doors(string ai_name)
+{
+	dprint Pod3UnlockDoors
+
+	door_unlock 59
+
+	input 0
+	sleep 90
+	cm_interpolate lock3 0
+	sleep 60
+	particle lock3_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+}
+
+func void Kerr_Console(string ai_name)
+{
+	dprint Kerr_Console
+
+	door_unlock 58
+
+	input 0
+	cm_interpolate lock4 0
+	sleep 60
+	particle lock4_locklight02 do start
+	sleep 150
+	trig_deactivate 2
+	sleep 75
+	cm_reset
+	input 1
+}
+
+###################### LAB 1 #################################
+func void Setup_Lab(string ai_name)
+{
+	dprint SetUpLab
+
+	particle lock5_locklight01 do stop
+
+	door_lock 6
+	door_lock 7
+
+	ai2_spawn LabHall_BOL_1
+	ai2_spawn LabHall_BOL_2
+	ai2_spawn LabHall_BOL_3
+	ai2_spawn LabHall_BOL_4
+	ai2_spawn LabHall_BOL_5
+
+	ai2_spawn Hall_TCS_33
+
+	ai2_spawn Lab1_Sci_1
+	ai2_spawn Lab1_Sci_2
+
+	ai2_spawn Lab2_Sci_1
+	ai2_spawn Lab2_Sci_2
+
+	ai2_spawn Lab3_Sci_1
+	ai2_spawn Lab3_Sci_2
+
+	trigvolume_enable Setup_Security_Trig 0
+	trigvolume_enable(chase_trigger, 0);
+}
+
+func void Lab_Console_1(string ai_name)
+{
+	dprint LabConsole1
+
+	#particle create labalarm1_emlight02
+	particle labalarm1 do start
+
+	ai2_spawn lab_BOS_1
+
+	#ai2_spawn lab_BOS_2
+
+	ai2_tripalarm 1 Konoko
+
+	particle lock4_locklight02 do stop
+	door_lock 58
+
+	neuro_counter = neuro_counter - 1
+
+	input 0
+	cm_interpolate lock5 0
+	sleep 60
+	particle lock5a_locklight01 do start
+	sleep 150
+	cm_reset
+	target_set(1009, 30.0)
+	input 1
+
+	if (neuro_counter eq 0)
+	{
+		Lab_Console_All_Counters();
+	}
+}
+
+func void Lab_Console_2(string ai_name)
+{
+	dprint LabConsole2
+
+	particle labalarm2 do start
+
+	ai2_spawn lab_BOS_2
+
+	#ai2_spawn lab_BOS_4
+
+	ai2_tripalarm 1 Konoko
+
+	target_set(268, 30.0)
+
+	particle lock4_locklight02 do stop
+	door_lock 58
+
+	neuro_counter = neuro_counter - 1
+
+	input 0
+	cm_interpolate lock5 0
+	sleep 60
+	particle lock5b_locklight01 do start
+	sleep 150
+	cm_reset
+	target_set(1009, 30.0)
+	input 1
+
+	if (neuro_counter eq 0)
+	{
+		Lab_Console_All_Counters();
+	}
+}
+
+func void Lab_Console_3(string ai_name)
+{
+	dprint LabConsole3
+
+	ai2_spawn lab_BOS_3
+
+	#ai2_spawn lab_BOS_6
+
+	particle labalarm3 do start
+
+	ai2_tripalarm 1 Konoko
+
+	particle lock4_locklight02 do stop
+	door_lock 58
+
+	target_set(367, 30.0)
+
+	neuro_counter = neuro_counter - 1
+
+	input 0
+	cm_interpolate lock5 0
+	sleep 60
+	particle lock5c_locklight01 do start
+	sleep 150
+	cm_reset
+	target_set(1009, 30.0)
+	input 1
+
+	if (neuro_counter eq 0)
+	{
+		Lab_Console_All_Counters();
+	}
+}
+
+func void Lab_Console_All_Counters(void)
+{
+	dprint PROBE_ROOM_OPEN
+	door_unlock 6
+	door_unlock 7
+
+	kerr_console_music_stop
+}
+
+func void Lab_Unlock_Door_5(string ai_name)
+{
+	dprint Probe_Room_Unlock_Doors
+	door_unlock 1
+# CB: no idea what this was, maybe it was the same as the current 66_01
+#	sound_dialog_play c13_49a_01konoko
+	input 0
+	cm_interpolate lock6 0
+	sleep 60
+	particle lock6_locklight02 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	trigvolume_enable Setup_Security_Trig 1
+	trigvolume_enable(chase_trigger, 1);
+}
+#######################DURING THE SCAN#########################
+func void Scan_Guards(string ai_name)
+{
+	dprint Scan_Guards
+
+	ai2_spawn Scan_BOS_1
+	ai2_spawn Scan_BOS_2
+	ai2_spawn Scan_BOS_3
+	ai2_spawn Scan_BOS_4
+
+	#chr_teleport LabHall_BOL_1 274
+	#chr_teleport LabHall_BOL_4 275
+
+	chr_teleport LabHall_BOL_5 272
+	chr_teleport Hall_TCS_33 7018
+
+	#chr_teleport LabHall_BOL_2 264
+	#chr_teleport LabHall_BOL_3 7004
+
+	#ai2_forget LabHall_BOL_1
+	#ai2_forget LabHall_BOL_2
+	#ai2_forget LabHall_BOL_3
+	#ai2_forget LabHall_BOL_4
+
+	ai2_forget LabHall_BOL_5
+	ai2_forget Hall_TCS_33
+
+	ai2_dopath LabHall_BOL_1 Scan_BOL_1
+	ai2_dopath LabHall_BOL_2 Scan_BOL_2
+	ai2_dopath LabHall_BOL_3 Scan_BOL_3
+	ai2_dopath LabHall_BOL_4 Scan_BOL_4
+	ai2_dopath LabHall_BOL_5 Scan_BOL_5
+	ai2_dopath Hall_TCS_33 Scan_Hall_TCS_33
+
+	ai2_setjobstate LabHall_BOL_1
+	ai2_setjobstate LabHall_BOL_2
+	ai2_setjobstate LabHall_BOL_3
+	ai2_setjobstate LabHall_BOL_4
+	ai2_setjobstate Hall_TCS_33
+
+	fork get_her
+}
+
+func void get_her(string ai_name)
+{
+	dprint get_her_timer_start
+
+	sleep 18000
+
+	ai2_tripalarm 5 Konoko
+
+	ai2_dopath LabHall_BOL_1 get_her_1
+	ai2_dopath LabHall_BOL_2 get_her_2
+
+	ai2_setjobstate LabHall_BOL_1
+	ai2_setjobstate LabHall_BOL_2
+
+	sleep 18000
+
+	ai2_tripalarm 7 Konoko
+
+	ai2_dopath LabHall_BOL_3 Scan_BOL_3
+	ai2_dopath LabHall_BOL_4 Scan_BOL_4
+
+	ai2_setjobstate LabHall_BOL_3
+	ai2_setjobstate LabHall_BOL_4
+
+	sleep 18000
+
+	ai2_tripalarm 9 Konoko
+
+	ai2_dopath Scan_BOS_1 get_her_1
+	ai2_dopath Scan_BOS_2 get_her_2
+
+	ai2_setjobstate Scan_BOS_1
+	ai2_setjobstate Scan_BOS_2
+
+	sleep 18000
+
+	ai2_tripalarm 11 Konoko
+
+	ai2_dopath Scan_BOS_3 get_her_3
+	ai2_dopath Scan_BOS_4 get_her_4
+
+	ai2_setjobstate Scan_BOS_3
+	ai2_setjobstate Scan_BOS_4
+}
+
+func void endgether(string ai_name)
+{
+	ai2_attack Final_BOL_1 Konoko
+}
+########################### SECURITY #########################
+func void Setup_Security(string ai_name)
+{
+	dprint Setup_Security
+
+	ai2_spawn Sec_BOS_1
+	ai2_spawn Sec_BOS_2
+	ai2_spawn Sec_BOL_1
+
+	trigvolume_enable Ambush_Trigger_1 1
+
+	door_lock 7
+
+	particle lock8_locklight02 do stop
+
+	door_lock 54
+	particle lock7_locklight02 do stop
+
+	post_scan_music_stop
+}
+
+func void Unlock_Door_7(string ai_name)
+{
+	dprint Unlock_Door_7
+
+	door_unlock 54
+
+	input 0
+	cm_interpolate lock7 0
+	sleep 60
+	particle lock7_locklight02 do start
+	sleep 150
+	cm_reset
+	target_set(360, 30.0)
+	input 1
+
+	post_scan_music_stop
+}
+
+func void Sec_Ambush_1(string ai_name)
+{
+	dprint AMBUSH
+	trig_deactivate 3
+	trig_deactivate 4
+	turret_deactivate 2
+	turret_deactivate 3
+
+	door_unlock 7
+	door_unlock 36
+	particle lock8_locklight02 do start
+
+	door_lock 54
+	particle lock7_locklight02 do stop
+	
+	ai2_spawn Sec_Ambush_BOS_1
+	ai2_spawn Sec_Ambush_BOL_1
+
+	ai2_attack Sec_Ambush_BOS_1 Konoko
+	ai2_attack Sec_Ambush_BOL_1 Konoko
+
+	#ai2_spawn Sec_Ambush_BOS_2
+	#ai2_spawn Sec_Ambush_BOL_2
+}
+
+
+func void nextwave_1(string ai_name)
+{
+	ambush_counter = ambush_counter - 1
+
+	if (ambush_counter eq 0)
+	{
+		Sec_Ambush_2();
+	}
+}
+
+func void nextwave_2(string ai_name)
+{
+	ambush_counter = ambush_counter - 1
+
+	if (ambush_counter eq 0)
+	{
+		Sec_Ambush_2();
+	}
+}
+
+func void closethedoor(string ai_name)
+{
+	door_lock 7
+	door_lock 36
+
+	particle lock8_locklight02 do stop
+}
+
+func void Sec_Ambush_2(string ai_name)
+{
+	dprint AMBUSH2
+
+	door_unlock 7
+	door_unlock 36
+
+	particle lock8_locklight02 do start
+
+	ai2_spawn Sec_Ambush_BOS_2
+	ai2_spawn Sec_Ambush_BOL_2
+
+	ai2_attack Sec_Ambush_BOS_2 Konoko
+	ai2_attack Sec_Ambush_BOL_2 Konoko
+}
+
+######################### FINAL #########################
+
+func void Setup_Final(string ai_name)
+{
+	dprint Setup_Final
+
+	ai2_spawn Final_BOS_1
+	ai2_spawn Final_BOL_1
+
+	ai2_spawn Final_Thug_1
+	ai2_spawn Final_Thug_2
+
+	trigvolume_enable end 0
+}
+
+func void end(string ai_name)
+{
+	dprint END
+
+	fork Outro
+	
+	ai2_forget Final_BOS_1
+	ai2_forget Final_BOL_1
+	ai2_forget Final_BOL_2
+
+	ai2_forget Sec_Ambush_BOS_1
+	ai2_forget Sec_Ambush_BOS_2
+	ai2_forget Sec_Ambush_BOL_1
+	ai2_forget Sec_Ambush_BOL_1
+
+	ai2_forget Final_Thug_1
+	ai2_forget Final_Thug_2
+
+	ai2_dopath Final_BOS_1 End_BOS_1
+	ai2_dopath Final_BOL_1 End_BOL_1
+	ai2_dopath Final_BOL_2 End_BOL_2
+
+	ai2_dopath Sec_Ambush_BOS_1 End_BOS_1
+	ai2_dopath Sec_Ambush_BOS_2 End_BOS_1
+	ai2_dopath Sec_Ambush_BOL_1 End_BOL_1
+	ai2_dopath Sec_Ambush_BOL_2 End_BOL_1
+
+	ai2_dopath Final_Thug_1 End_Thug_1
+	ai2_dopath Final_Thug_2 End_Thug_1
+
+	ai2_setjobstate Final_BOS_1
+	ai2_setjobstate Final_BOL_1
+	ai2_setjobstate Final_BOL_2
+
+	ai2_setjobstate Sec_Ambush_BOS_1
+	ai2_setjobstate Sec_Ambush_BOS_2
+
+	ai2_setjobstate Sec_Ambush_BOL_1
+	ai2_setjobstate Sec_Ambush_BOL_2
+
+	ai2_setjobstate Final_Thug_1
+	ai2_setjobstate Final_Thug_2
+}
+
+##############################################################
+
+# COUNTDOWN TO FINAL CUTSCENE
+
+func void check_1(string ai_name)
+{
+	dprint circle_squared
+	final_count = final_count - 1
+	if (final_count eq 0)
+	{
+	trigvolume_enable ending 1
+	}
+}
+
+func void check_2(string ai_name)
+{
+	dprint circle_squared
+	final_count = final_count - 1
+	if (final_count eq 0)
+	{
+	trigvolume_enable ending 1
+	}
+}
+
+func void mid_guards(string ai_name)
+{
+	dprint final_guards
+	ai2_spawn Final_BOL_2
+	ai2_spawn Final_Thug_9
+
+	ai2_attack Final_BOL_2 Konoko
+}
+
+func void end_guards(string ai_name)
+{
+	dprint final_guards
+	ai2_spawn end_guard_1
+	ai2_spawn end_guard_2
+	ai2_spawn Final_Thug_10
+}
+
+
+####################################################################
+
+func void set_objective_1(void)
+{
+	dprint set_objective_1
+	objective_set(1)
+	target_set(1261, 30.0)
+}
+
+func void set_objective_2(string chr_index)
+{
+	dprint set_objective_2
+	objective_set(2)
+	target_set(366, 30.0)
+}
+
+func void set_objective_3(string chr_index)
+{
+	dprint set_objective_3
+	objective_set(3)
+	target_set(346, 30.0)
+}
+
+func void set_objective_4(string chr_index)
+{
+	dprint set_objective_4
+	objective_set(4)
+	target_set(222, 30.0)
+}
+
+func void kerr_died(string ai_name)
+{
+	if (has_probed eq 0)
+	{
+		you_lose();
+	}
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+
+func void level_14a(void)
+{
+	dprint set_text_14a
+	text_console level_14a
+	console_reset 12
+}
+
+func void level_14b(void)
+{
+	dprint set_text_14b
+	text_console level_14b
+	console_reset 6
+}
+
+
+################## ANIM SCRIPTS ##########################################
+func void patrolscript0001 (string ai_name)
+{
+	playback_block Pod1_TCL_1 alarm1 interp 20
+}
+
+func void patrolscript0002 (string ai_name)
+{
+	playback_block Pod1_TCL_2 alarm2 interp 20
+}
+
+func void patrolscript0003 (string ai_name)
+{
+	playback_block Pod2_TCL_1 pod2alarm1 interp 20
+}
+
+func void patrolscript0004 (string ai_name)
+{
+	playback_block Pod2_TCL_2 pod2alarm2 interp 20
+}
+
+func void patrolscript0009 (string ai_name)
+{
+	particle lock99_locklight02 do start
+	door_unlock 11
+	sleep 540
+	particle lock99_locklight02 do stop
+	door_lock 11
+}
+
+func void patrolscript0010 (string ai_name)
+{
+	particle lock99_locklight02 do start
+	door_unlock 11
+# WAIT AND RELOCK DOORS
+	sleep 540
+	particle lock99_locklight02 do stop
+	door_lock 11
+}
+
+func void kerr_console_music(void)
+{
+	sound_music_start mus_ambgrv2 0.8
+}
+
+func void kerr_console_music_stop(void)
+{
+	dprint stopping_kerr_console_music
+	sound_music_stop mus_ambgrv2
+}
+
+func void post_scan_music_start(void)
+{
+	dprint startting posctuscene
+	sound_music_start mus_xtr1 0.7
+}
+
+func void post_scan_music_stop(void)
+{
+	sound_music_stop mus_xtr1
+}
+
+################## VAT MONOLOGUE LOGIC ##########################
+
+var int played_vat_monologue = 0;
+
+func void prepare_vat_monologue(void)
+{
+	trigvolume_enable tv_vat_monologue_1 1
+	trigvolume_enable tv_vat_monologue_2 1
+}
+
+func void set_vat_monologue_variable(void)
+{
+	played_vat_monologue = 1;
+}
+
+func void play_vat_monologue(string ai_name)
+{
+	if (played_vat_monologue eq 0)
+	{
+		# this is a hack to get around the way that the scripting
+		# language mistakenly sets variables that are inside an
+		# if clause that isn't being run
+		set_vat_monologue_variable();
+
+		sleep 90
+
+		EndScan();
+	}
+}
+
+################## END LEVEL LOGIC FOR TRIGGER ###################
+
+func void check_outro(string ai_name)
+{
+	trigvolume_enable tv_check_outro 0
+	
+	if(FTS_variable eq 0)
+	{
+		if(trigvolume_count (77) eq 0)
+		{
+			sleep 120
+			trigvolume_enable ending 1
+			trigvolume_enable ending2 1
+		}
+		if(trigvolume_count (77) ne 0)
+		{
+			sleep 90
+			trigvolume_enable tv_check_outro 1
+		}
+	}
+	sleep 90
+	trigvolume_enable tv_check_outro 1
+}
+
+func void final_check_for_crane(string ai_name)
+{
+	final_check = final_check + 1
+}
+
+func void FTS(string ai_name)
+{
+	FTS_variable = FTS_variable - 1
+}
Index: AE/packages/VanillaBSL/IGMD/neuro/neuro_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/neuro/neuro_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/neuro/neuro_main.bsl	(revision 313)
@@ -0,0 +1,23 @@
+#
+# neuro_main.bsl
+#
+
+func void
+main(void)
+{
+	gl_fog_blue=.15
+	gl_fog_red=.15
+	gl_fog_green=.15
+	gl_fog_start=.985
+	gs_farclipplane_set 4000
+		obj_create 401 409
+		env_anim 401 409
+		obj_create 71 74
+	level_start
+
+	if (save_point eq 0)
+	{
+		neuro_cs_intro
+		save_game 1 autosave
+	}
+}
Index: AE/packages/VanillaBSL/IGMD/neuro/particle_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/neuro/particle_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/neuro/particle_scripts.bsl	(revision 313)
@@ -0,0 +1,102 @@
+#partice scripts
+#alex okita
+#turns on and off particles for rooms
+
+#lab 1
+func void lab1_start(string ai_name)
+{
+	dprint lab1_start
+	particle lab1 do start
+}
+func void lab1_stop(string ai_name)
+{
+	dprint lab1_stop
+	particle lab1 do stop
+}
+#lab2
+func void lab2_start(string ai_name)
+{
+	dprint lab2_start
+	particle lab2 do start
+}
+func void lab2_stop(string ai_name)
+{
+	dprint lab2_stop
+	particle lab2 do stop
+}
+#lab3
+func void lab3_start(string ai_name)
+{
+	dprint lab3_start
+	particle lab3 do start
+}
+func void lab3_stop(string ai_name)
+{
+	dprint lab3_stop
+	particle lab3 do stop
+}
+#Particles for the exterior of lab3
+func void part1_start(string ai_name)
+{
+	dprint part1_start
+	particle part1 do start
+}
+func void part1_stop(string ai_name)
+{
+	dprint part1_stop
+	particle part1 do stop
+}
+#Particles for the exterior of lab2
+func void part2_start(string ai_name)
+{
+	dprint part2_start
+	particle part2 do start
+}
+func void part2_stop(string ai_name)
+{
+	dprint part2_stop
+	particle part2 do stop
+}
+#Particles for the exterior of lab1
+func void part3_start(string ai_name)
+{
+	dprint part3_start
+	particle part3 do start
+}
+func void part3_stop(string ai_name)
+{
+	dprint part3_stop
+	particle part3 do stop
+}
+#particles for the vats in the end of the level
+func void vat1_start(string ai_name)
+{
+	dprint vat1_start
+	particle vat1 start
+}
+func void vat1_stop(string ai_name)
+{
+	dprint vat1_stop
+	particle vat1 stop
+}
+func void vat2_start(string ai_name)
+{
+	dprint vat2_start
+	particle vat2 start
+}
+func void vat2_stop(string ai_name)
+{
+	dprint vat2_stop
+	particle vat2 stop
+}
+func void vat3_start(string ai_name)
+{
+	dprint vat3_and_4_start
+	particle vat3 start
+	particle vat4 start
+}
+func void vat3_stop(string ai_name)
+{
+	dprint vat3_stop
+	particle vat3 stop
+}
Index: AE/packages/VanillaBSL/IGMD/power/particle_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/power/particle_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/power/particle_scripts.bsl	(revision 313)
@@ -0,0 +1,26 @@
+#partice scripts
+#alex okita
+#turns on and off particles for rooms
+
+#power1
+func void power1_start(string ai_name)
+{
+	dprint power1_start
+	particle power1 do start
+}
+func void power1_stop(string ai_name)
+{
+	dprint power1_stop
+	particle power1 do stop
+}
+#power2
+func void power2_start(string ai_name)
+{
+	dprint power2_start
+	particle power2 do start
+}
+func void power2_stop(string ai_name)
+{
+	dprint power2_stop
+	particle power2 do stop
+}
Index: AE/packages/VanillaBSL/IGMD/power/power_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/power/power_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/power/power_cutscene.bsl	(revision 313)
@@ -0,0 +1,428 @@
+#
+#
+# power_cutscene.bsl
+#
+
+func void
+intro(
+	void)
+{
+	# CB: begin_cutscene does a silent ai2_allpassive 1 as part of its cutscene setup,
+	# so we need to remove this if we want to have AIs walking around under their own
+	# control during a cutscene
+	fade_out 0 0 0 0
+	cm_interpolate Camout01 0
+	obj_create 100 104
+	chr_create 1000 start
+	chr_create 1001 start
+	playback 1000 IntroGrifTCTF
+	playback 1001 IntroKonTCTF
+	sleep f7
+	begin_cutscene
+	cutscene_sync off 
+	ai2_allpassive 0
+
+	ai2_spawn A1_intro01
+	ai2_spawn A1_intro02
+	ai2_makeignoreplayer A1_intro01 1
+	ai2_makeignoreplayer A1_intro02 1			
+	#fade_out 0 0 0 0
+	#Setup Konoko and Griffin talking			
+	sleep f60
+
+#	Force holster by Wu
+	chr_forceholster char_0 1
+
+	fade_in 120
+	chr_nocollision(0, 1);
+	#Setup shot
+	cm_anim both Camout01
+	cm_wait
+	#KOnoko standing on top
+	cm_anim both Camout02
+	chr_envanim 0 KonBipedBox01
+	chr_animate 0 KONOKOidle1 300
+	env_setanim 100 StandRightWing
+	env_setanim 101 StandLeftWing
+	env_setanim 102 StandBody
+	env_setanim 103 StandRightTail
+	env_setanim 104 StandLeftTail
+	#Konoko and Griffin talking
+	sleep f120
+	sound_dialog_play c08_27_01konoko
+	cinematic_start (KONtalking, 180, 180, 15, 1, 15, false)
+	sound_dialog_play_block pause
+	sound_dialog_play c08_27_02griffin
+	cinematic_start (GRIFtalking, 180, 180, 16, 3, 15, true)
+	cm_interpolate_block IntroCamTBoth 0
+	sound_dialog_play_block pause
+	sound_dialog_play c08_27_03konoko
+	cinematic_stop (KONtalking, 15, 20)
+	cinematic_start (KONintense, 180, 180, 15, 1, 20, false)
+	sound_dialog_play_block pause
+	sound_dialog_play c08_27_04griffin
+	sound_dialog_play_block pause
+	sound_dialog_play c08_27_05konoko
+	sound_dialog_play_block pause
+	cm_interpolate_block IntroCamTGrif 0
+	sound_dialog_play c08_27_06griffin
+	cinematic_stop (GRIFtalking, 16, 20)
+	cinematic_start (GRIFtalkangry, 180, 180, 16, 3, 20, true)
+	sound_dialog_play_block pause
+	cm_interpolate IntroCamTKon 0
+
+	# start the wind as the dialog ends, sync to that
+	cutscene_sync on
+	sound_dialog_play c08_27_07konoko
+	cinematic_stop (GRIFtalkangry, 16, 20)
+	cinematic_stop (KONintense, 15, 20)
+	cinematic_start (KONangry, 180, 180, 15, 1, 20, false)
+	sleep 200
+	sound_ambient_start pp_wind_loop 0.1
+	sound_ambient_volume pp_wind_loop 0.8 1.0
+	sleep 50
+	cutscene_sync off
+	#Jumping off the building
+	chr_envanim 0 KonBipedBox02 norotation
+	cm_anim both Camout03
+	#sound_ambient_start pp09_wingsa
+	chr_animate 0 KONOKOlev9_intro_jump
+	env_setanim 100 JumpRightWing
+	env_setanim 101 JumpLeftWing
+	env_setanim 102 JumpBody
+	env_setanim 103 JumpRightTail
+	env_setanim 104 JumpLeftTail
+	sleep f120
+	sound_ambient_start pp09_wingsa
+#	october 25, 2000 this pause was breaking the scene
+#	sound_dialog_play_block pause
+	cinematic_stop (KONangry, 15, 20)
+	#sleep f100	
+	cm_anim_block both Camout04
+	#Transport A1_intro02 to new location
+	chr_teleport A1_intro02 1105
+	#Gliding
+	#music_intro
+	sleep f100
+	sound_ambient_start pp09_wingsb
+	chr_envanim_block 0 KonBipedBox03
+	cm_anim both Camout05
+	chr_animate 0 KONOKOlev9_intro_glide 360
+	env_setanim 100 GlideRightWing
+	env_setanim 101 GlideLeftWing
+	env_setanim 102 GlideBody
+	env_setanim 103 GlideRightTail
+	env_setanim 104 GlideLeftTail
+	#Landing
+	chr_envanim_block 0 KonBipedBox04 norotation
+	#gl_fog_start=.98
+	#gs_farclipplane_set 2000
+	cm_anim both Camout06
+	chr_animate 0 KONOKOlev9_intro_land
+
+	env_setanim 100 LandRightWing
+	env_setanim 101 LandLeftWing
+	env_setanim 102 LandBody
+	env_setanim 103 LandRightTail
+	env_setanim 104 LandLeftTail
+	sleep 30
+	sound_ambient_volume pp_wind_loop 0.0 1.0
+	sleep 60
+	sound_ambient_stop pp_wind_loop
+	sound_ambient_start pp09_wingsc
+	cm_wait
+	playback 0 IntroKonokoSet01
+	obj_kill 100 104
+	sleep f5
+	cm_reset
+	chr_nocollision 0 0
+	end_cutscene
+	env_show 100 1
+	env_show 101 1
+	env_show 102 1
+	env_show 103 1
+	env_show 104 1
+	chr_delete ai_12
+	chr_delete ai_13
+	chr_delete 1000
+	chr_delete 1001
+	ai2_makeignoreplayer A1_intro01 0
+	ai2_makeignoreplayer A1_intro02 0
+	#Transport A1_intro02 to new location again
+	chr_teleport A1_intro02 1104
+	s1
+	music_intro
+	music_intro_timer
+}
+
+func void
+camcontrol(
+	void)
+{
+	cm_anim both Camout01
+	cm_anim both Camout02
+	cm_anim both Camout03
+	cm_anim both Camout04
+	cm_anim both Camout05
+	cm_anim both Camout06
+	cm_wait
+	letterbox 0
+	cm_jello 1
+	cm_reset
+	chr_nocollision 0 0
+	input 1
+}
+
+func void
+Muro(
+	void)
+{
+	begin_cutscene
+
+	sound_music_start mus_sad1 0.1
+	sound_music_volume mus_sad1 0.3 2
+
+	cutscene_sync off
+	sleep f10
+	cm_anim both Elev1Cam01
+	playback 0 Elev1KonokoSet01
+	cutscene_sync on
+	sound_ambient_start c12_20_16elevator
+	sleep f5
+	chr_nocollision 0 1
+	chr_envanim 0 Elev1KonBox01 norotation
+	obj_create 801 801
+	obj_shade 801 801 .4 .4 .4
+	env_show 801 0
+	env_setanim 801 Elev101
+	sleep 200
+
+	#Shinatama crying here
+
+	sound_dialog_play c08_28_05shinscream1
+	sound_music_volume mus_sad1 1.0 0.5
+
+	cinematic_start (SHINtortured, 180, 180, 20, 7, 15, false)
+
+	sleep 60
+	sound_music_volume mus_sad1 0.8 0.5	
+	sleep 100
+
+	fade_out 0 0 0 10
+	sleep f10
+	#Muro torturing shinatama
+	fade_in 10
+	particle torture do start
+	ai2_spawn MuroMuro
+	ai2_spawn MuroShinatama
+	ai2_spawn MuroComguy
+	playback MuroMuro MuroMuroSet
+	playback MuroComguy MuroComguySet
+
+	sound_dialog_play c08_28_06shinscream2
+
+	chr_envanim MuroShinatama ShinBox02 norotation
+	chr_animate MuroShinatama SHINATlev9_Shin02 180
+	cutscene_sync off
+	cm_interpolate MuroCamShin02 0
+	sound_ambient_start c12_26_20shin_tort
+	cm_interpolate_block MuroCamShin01 800
+	sleep f120
+	chr_envanim MuroShinatama ShinBox03 norotation
+	chr_animate MuroShinatama SHINATlev9_Shin03 12
+	sleep f12
+	particle torture do stop
+	chr_envanim MuroShinatama ShinBox04 norotation
+	chr_animate MuroShinatama SHINATlev9_Shin04 1000 12
+	sound_dialog_play_block pause
+	cinematic_stop (SHINtortured, 19,20)
+	##Muro talks
+	sound_dialog_play c08_28_01muro
+	cinematic_start (MUROtalking, 180, 180, 16, 3, 15, true)
+	cm_interpolate MuroCamMuro 0
+	sound_dialog_play_block pause
+	##Shin screams
+	particle torture do start
+	sound_ambient_start c12_26_20shin_torta
+	#chr_envanim MuroShinatama ShinBox01 norotation
+	#chr_animate MuroShinatama SHINATlev9_Shin01 12
+	#sleep f12
+	chr_envanim MuroShinatama ShinBox02 norotation
+	chr_animate MuroShinatama SHINATlev9_Shin02 180
+
+	sound_dialog_play shinscream_new
+
+	cinematic_start (SHINtortured, 180, 180, 19, 20, 10, false)
+	sleep f130
+	particle torture do stop
+	chr_envanim MuroShinatama ShinBox04 norotation
+	chr_animate MuroShinatama SHINATlev9_Shin04 1200 10
+	sleep f30
+	##Muro talks again
+	cm_interpolate MuroCamMuro01 0
+	cm_interpolate_block MuroCamMuro02 1400
+	sound_dialog_play c08_28_02muro
+	cinematic_stop (SHINtortured, 18,20)
+	sound_dialog_play_block pause
+	sleep f10
+	particle torture do start
+	sound_ambient_start c12_26_20shin_torta
+
+	sound_dialog_play shinscream_new2
+
+	sound_dialog_play_block pause
+	particle torture do stop
+	sleep f10
+	sound_dialog_play c08_28_03muro
+	sound_dialog_play_block pause
+	chr_envanim MuroShinatama ShinBox04 norotation
+	chr_animate MuroShinatama SHINATlev9_Shin04 1200 10
+	sleep f5
+
+	sound_dialog_play shinscreams_6
+
+	sound_dialog_play_block pause
+	sound_dialog_play c08_28_04muro
+	sound_dialog_play_block pause
+	cinematic_stop (MUROtalking, 16,15)
+
+	sound_dialog_play muro_laff2
+
+	sleep f80
+	particle torture do start
+	sound_ambient_start c12_26_20shin_torta
+	sleep f15
+
+	sound_dialog_play_interrupt shinscreams_4
+
+	cinematic_start (SHINtortured, 180, 180, 20, 19, 10, false)
+	sleep f20
+	fade_out 0 0 0 10
+	sleep f10
+	particle torture do stop
+	fade_in 10
+	#Konoko finishes riding elevator
+	chr_envanim 0 Elev1KonBox02 norotation
+	env_setanim 801 Elev102
+	cm_anim both Elev1Cam02
+	sound_ambient_start c13_07_22elevatora 
+	sleep f295
+	env_show 802 1
+	obj_kill 801 801
+	cm_reset
+	playback 0 Elev1KonokoSet
+	sleep f1
+	chr_nocollision 0 0
+	end_cutscene
+
+	chr_delete MuroComguy
+	chr_delete MuroMuro
+	chr_delete MuroShinatama
+}
+
+
+
+func void
+Elev2(
+	void)
+{
+	begin_cutscene
+	sleep f30
+	cutscene_sync off
+	chr_nocollision 0 1
+	playback 0 Elev2KonokoSet
+	cm_anim both Elev2Cam01
+	cutscene_sync on
+	sound_ambient_start c13_07_22elevator
+	chr_envanim 0 Elev2KonBox01
+	env_show 821 0
+	obj_create 821 821
+	obj_shade 821 821 .4 .4 .4
+	env_setanim 821 Elev201
+	cm_wait
+	obj_kill 821 821
+	env_show 822 1
+	chr_nocollision 0 0
+	cm_reset
+	end_cutscene
+}
+
+
+
+func void
+Torture(
+	void)
+{
+	#input 0
+	cm_interpolate TortureCam01 80
+	sleep f180
+	cm_reset 80
+	#input 1
+}
+
+
+func void
+outro(
+	void)
+{
+	sleep f30
+	begin_cutscene jello
+	cutscene_sync off
+	#oni SPECcial effect
+	chr_animate 0 KONOKOpowerup
+	cinematic_start (KONtransform, 180, 180, 15, 2, 15, false)
+	sleep f220
+	fade_out 0 0 0 10
+	sleep f10
+	fade_in 10
+	ai2_spawn OutroKerr
+	ai2_spawn OutroGrif
+	ai2_spawn OutroCop
+	playback OutroCop ShinCopSet
+	playback OutroGrif ShinGrifSet
+	playback OutroKerr ShinKerrSet
+	cinematic_stop (KONtransform, 16, 30)
+	cm_interpolate ShinCamCop 0
+	cm_interpolate_block ShinCamCopFace 1600
+	sleep f20
+	sound_dialog_play c08_29_01scigoon1
+	cinematic_start (COPtalking, 180, 180, 16, 3, 20, false)
+	sound_dialog_play_block pause
+	cinematic_stop (COPtalking, 16, 20)
+	cm_interpolate ShinCamGrif 0
+	cm_interpolate_block ShinCamGrifFace 1800
+	sound_dialog_play c08_29_02griffin
+	cinematic_start (GRIFtalking, 180, 180, 19, 7, 20, false)
+	sound_dialog_play_block pause
+	sleep f20
+	playback 0 OutroKonoko01
+	cinematic_stop (GRIFtalking, 19, 20)
+	fade_out 0 0 0 10
+	sleep f10
+	fade_in 10
+	#doors start to open
+	obj_create 131 133
+	env_anim 131 133
+	env_show 134 0
+	env_show 135 0
+	env_show 136 0
+	cm_interpolate OutroCam01 0
+	cutscene_sync on
+	sound_ambient_start c03_55_18bigdoor
+	cm_interpolate_block OutroCam02 700
+	sleep f200
+	playback 0 OutroKonoko02
+	sleep f200
+	#Konoko sees doors opening
+	#playback 0 OutroKonoko02
+	cm_interpolate OutroCam03 0
+	sleep f90
+	#playback 0 OutroKonoko02
+	sleep f40
+	cm_interpolate OutroCam04 0
+	sleep f180
+	fade_out 0 0 0 120
+	sleep f120
+	win
+}
+
Index: AE/packages/VanillaBSL/IGMD/power/power_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/power/power_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/power/power_main.bsl	(revision 313)
@@ -0,0 +1,36 @@
+#
+# power_main.bsl
+#
+
+func void
+main(
+	void)
+{
+	env_show 100 0
+	env_show 101 0
+	env_show 102 0
+	env_show 103 0
+	env_show 104 0
+	gl_fog_blue=0
+	gl_fog_red=0
+	gl_fog_green=0
+	gl_fog_start=.99
+	gs_farclipplane_set 3000	
+	#hide elevator gunk
+	env_show 802 0
+	env_show 822 0
+
+	my_save_point = save_point
+	
+	start
+
+	if (my_save_point eq 0)
+	{
+		fork intro();
+	}
+}
+
+#func void chase1(int chr_index)
+#{
+#}
+	
Index: AE/packages/VanillaBSL/IGMD/power/power_objectives.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/power/power_objectives.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/power/power_objectives.bsl	(revision 313)
@@ -0,0 +1,214 @@
+#
+# power_objectives.bsl
+#
+# SCRIPTS TO SET LEVEL OBJECTIVES/HINTS
+#
+var int cop;
+var int nocop;
+
+func void set_objective_1(string ai_name)
+{
+	dprint set_objective_1
+	objective_set(1)
+	target_set(5007, 30.0)
+}
+
+func void copdied(string ai_name)
+{
+	dprint copdied
+	nocop = 1
+}
+
+func void set_objective_3(string ai_name)
+{
+	dprint set_objective_3
+	objective_set(3)
+	cop = 1
+}
+
+func void target02(string ai_name)
+{
+	dprint target02
+	input 0
+	chr_invincible char_0 1
+
+
+	if(trigvolume_count(28) ne 0)
+	{
+	cm_interpolate bluedoor 0
+	sleep 60
+	}
+		
+	if(blue01 eq 0)
+	{
+	cm_interpolate bluedoor 0
+	sleep 60
+	}
+
+	if (blue01 eq 1)
+	{
+		if (trigvolume_count(28) eq 0)
+		{
+			ai2_passive A1_s_blue01 1
+			chr_teleport A1_s_blue01 7001
+			cm_interpolate bluedoor 0
+			sleep 60
+			ai2_passive A1_s_blue01 0
+			ai2_dopath A1_s_blue01 patrol_31_bluedoor
+			particle blue_locklight01 do start
+			particle b2_locklight01 do start
+			sleep 180
+		} 
+	}
+
+	particle blue_locklight01 do start
+	particle b2_locklight01 do start
+	sleep 60
+	cm_reset
+	chr_invincible char_0 0
+	input 1
+	target_set(2001, 30.0)
+#	ai2_spawn A1_s_red01
+	ai2_spawn A1_s_red02
+	trigvolume_enable trigger_volume_12 1
+}
+
+func void target03(string ai_name)
+{
+	dprint target03
+	ai2_spawn char_1
+	target_set(5007, 30.0)
+
+}
+
+func void target04(string ai_name)
+{
+	dprint target04
+	target_set(108, 30.0)
+
+}
+
+func void target05(string ai_name)
+{
+	dprint target05_07_09
+	ai2_spawn whiteneut
+	ai2_spawn B1_s_Red01
+	ai2_spawn B2_s_blue06
+	target_set(133, 30.0)
+	sleep 60
+
+	music_stop
+}
+
+func void target06(string ai_name)
+{
+	dprint target06
+	particle green_locklight01 do start
+	target_set(2005, 30.0)
+	sleep 120
+	trigvolume_enable trigger_volume_13 1
+	music_stop
+}
+
+func void target08(string ai_name)
+{
+	dprint target08
+	particle white_locklight01 do start
+	target_set(3001, 30.0)
+
+}
+
+func void target10(string ai_name)
+{
+	dprint target10
+	target_set(5008, 30.0)
+
+}
+
+func void target11(string ai_name)
+{
+	dprint target02
+	target_set(5009, 30.0)
+
+}
+
+func void target12(string ai_name)
+{
+	dprint target12
+	target_set(119, 30.0)
+
+}
+
+func void target13(string ai_name)
+{
+	dprint target13_16_18
+	target_set(128, 30.0)
+}
+
+func void target14(string ai_name)
+{
+	dprint target14
+	particle red_locklight01 do start
+	target_set(2085, 30.0)
+
+}
+
+func void target15(string ai_name)
+{
+	dprint target15
+	target_set(125, 30.0)
+
+}
+
+func void target17(string ai_name)
+{
+	dprint target17
+	particle yellow_locklight01 do start
+	target_set(3094, 30.0)
+
+}
+
+func void target19(string ai_name)
+{
+	dprint target19
+	target_set(5010, 30.0)
+
+}
+
+func void target20(string ai_name)
+{
+	dprint target20
+	target_set(5006, 30.0)
+
+}
+
+func void unlock_bwhite(string ai_name)
+{
+	dprint unlock_bwhite
+	particle bwhite_locklight01 do start
+	s5
+# checks to see if cop has already talked to konoko
+	if (cop eq 0)
+	{
+# if not, then see if the cop is dead
+		if(nocop eq 1)
+		{
+# if so, then go ahead and give next objective from console 4
+			sleep 180
+			set_objective_3
+		}
+	}
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+func void you_win(int char_index)
+{
+	outro
+	win
+}
Index: AE/packages/VanillaBSL/IGMD/power/power_spawn.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/power/power_spawn.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/power/power_spawn.bsl	(revision 313)
@@ -0,0 +1,750 @@
+#	power_spawn
+#	spawn units and trigger volumes
+
+var int counter = 8;
+var int my_save_point = 0;
+var int blue01 = 1;
+var int music_counter = 0;
+var int pipe;
+var int pipe2;
+var int count_respawn1=0;
+var int count_respawn2=0;
+
+# music #
+
+func void music_intro(void)
+{
+	sound_music_start mus_main01 .75
+	music_counter = 2
+}
+
+func void music_muro(void)
+{
+	sound_music_start mus_sad1 .8
+#	this music stopped in target05 in objective scripts
+}
+
+func void music_pipe(void)
+{
+	sound_music_start mus_asian .75
+#	this music stopped in target13 in objective scripts
+}
+
+func void music_battle(void)
+{
+	sound_music_start mus_fiteb .75
+#	this music stopped in check_death script
+}
+
+func void music_intro_timer(void)
+{
+	sleep 4500
+
+	if (music_counter ne 0) 
+	{
+		dprint music_force_stop
+		music_counter = 0
+		music_stop
+	}
+}
+
+func void die_for_art(string ai_name)
+{
+	dprint DFA_1
+	music_counter = music_counter - 1
+
+	if (music_counter eq 0)
+	{
+		music_stop
+	}
+
+}
+
+func void music_stop(void)
+{
+	dprint STOP_THE_MUSIC
+	sound_music_stop mus_main01
+	sound_music_stop mus_sad1
+	sound_music_stop mus_asian
+	sound_music_stop mus_fiteb
+}
+
+# start and objectives #
+
+func void start(string ai_name)
+{
+	dprint XXX_start_script_XXX
+	particle power1 do start
+	particle power2 do start
+	trigvolume_enable trigger_volume_02 0
+	trigvolume_enable trigger_volume_06 0
+	trigvolume_enable trigger_volume_12 0
+	trigvolume_enable trigger_volume_13 0
+	trigvolume_enable trigger_volume_40 0
+
+	if (my_save_point eq 0)
+	{
+		set_objective_1
+	}
+
+	if (my_save_point eq 1)
+	{
+		dprint restore1
+		ai2_spawn A1_intro01
+		ai2_spawn A1_intro02
+		restore_game
+		music_intro	
+		objective_set 1 silent
+		target_set(5007, 30.0)
+		music_intro_timer
+	}
+
+	if (my_save_point eq 2)
+	{
+		dprint restore2
+		env_show 802 1
+		ai2_spawn B1_s_green01
+		ai2_spawn new_dummy1
+		ai2_spawn C2_blue25
+		chr_delete A1_intro01
+		chr_delete A1_intro02
+		chr_delete A1_s_blue01
+		target_set(1083,30.0)
+		trigvolume_enable trigger_volume_35 0
+		music_muro
+		ai2_spawn B1_s_blue05
+		ai2_dopath B1_s_blue05 patrol_08_blue05b
+		ai2_setjobstate B1_s_blue05
+		chr_teleport B1_s_blue05 1046
+		restore_game
+		objective_set 1 silent
+	}
+
+	if (my_save_point eq 3)
+	{
+		dprint restore3
+		particle red_locklight01 do start
+		door_unlock 38
+		console_deactivate 7
+		ai2_spawn D2_blue60
+		ai2_spawn D1_neut10
+		ai2_spawn new_5
+		ai2_spawn D2_blue61
+		chr_delete A1_intro01
+		chr_delete A1_intro02
+		chr_delete A1_s_blue01
+		target_set(125,30.0)
+		trigvolume_enable trigger_volume_25 0
+		restore_game
+		objective_set 2 silent
+	}
+
+	if (my_save_point eq 4)
+	{
+		dprint restore4
+		particle red_locklight01 do start
+		door_unlock 38
+		console_deactivate 7
+		ai2_spawn D2_blue61
+		ai2_spawn D2_blue60
+		ai2_spawn new_5
+		ai2_spawn D1_neut10
+		chr_delete A1_intro01
+		chr_delete A1_intro02
+		chr_delete A1_s_blue01
+		target13
+		trigvolume_enable trigger_volume_30 0
+		trigvolume_enable trigger_volume_17 0
+		trigvolume_enable trigger_volume_25 0
+		restore_game
+		objective_set 2 silent
+		pipe = 100;
+	}
+
+	if (my_save_point eq 5)
+	{
+		dprint restore5
+		counter = 7;
+		target20
+		ai2_spawn F_blue1
+		chr_delete A1_intro01
+		chr_delete A1_intro02
+		chr_delete A1_s_blue01
+		console_deactivate 8
+		door_unlock 4
+		particle bwhite_locklight01 do start
+		trigvolume_enable trigger_volume_07 0
+		restore_game
+		objective_set 3 silent
+		pipe = 100;
+	}
+}
+
+func void blue01_dies(string ai_name)
+{
+	blue01 = 0
+}
+
+func void script_respawn1(void)
+{
+	if(trigvolume_count (42) eq 0)
+	{
+		count_respawn1 = count_respawn1 + 1;
+		if(count_respawn1 eq 1)
+		{
+			dprint rs1a
+			ai2_spawn respawn1
+			chr_giveweapon respawn1 w7_scc
+		}
+		if(count_respawn1 eq 2)
+		{
+			dprint rs1b
+			ai2_spawn respawn1
+			chr_giveweapon respawn1 w3_phr
+			ai2_dopath patrol_08_blue05
+			ai2_setjobstate respawn1
+		}
+		if(count_respawn1 eq 3)
+		{
+			dprint rs1c
+			ai2_spawn respawn1
+			chr_giveweapon respawn1 w2_sap
+		}
+	}
+}
+
+func void script_respawn2(void)
+{
+	if(trigvolume_count (42) eq 0)
+	{
+		count_respawn2 = count_respawn2 + 1;
+		if(count_respawn2 eq 1)
+		{
+			dprint rs2a
+			ai2_spawn respawn2
+			chr_giveweapon respawn2 w3_phr
+		}
+		if(count_respawn2 eq 2)
+		{
+			dprint rs2b
+			ai2_spawn respawn2
+			chr_giveweapon respawn2 w2_sap
+			ai2_dopath patrol_19_blue20b
+			ai2_setjobstate respawn2
+		}
+		if(count_respawn2 eq 3)
+		{
+			dprint rs2c
+			ai2_spawn respawn2
+			chr_giveweapon respawn2 w2_sap
+		}
+	}
+}
+
+func void script_respawn3(void)
+{
+	if(trigvolume_count (42) eq 0)
+	{
+		ai2_spawn C1_red21
+	}
+}
+func void tv01(string ai_name)
+{
+	dprint tv01 B2
+	ai2_spawn C1_blue22
+	ai2_spawn B2_s_blue08
+	ai2_spawn B2_s_tank04
+		
+}
+
+func void tv02(string ai_name)
+{
+	dprint tv02
+
+	if (trigvolume_count(32) ne 0)
+	{
+		trigvolume_reset trigger_volume_02
+	}
+
+	if (trigvolume_count(32) eq 0)
+	{
+	ai2_makeignoreplayer sniper1 1
+	ai2_dopath sniper1 patrol_53
+	ai2_setjobstate sniper1
+#	ai2_spawn B2_s_blue06
+	ai2_spawn B1_s_blue05
+#	ai2_spawn B1_s_Red01
+	ai2_spawn B1_s_green01
+	ai2_spawn new_dummy1
+	ai2_spawn C1_blue22
+	ai2_spawn C2_blue25
+#	ai2_spawn B1_neut01
+	trigvolume_corpse 32
+	Muro
+	target_set(1083, 30.0)
+	chr_delete A1_intro01
+	chr_delete A1_intro02
+	chr_delete A1_s_blue01
+	chr_delete A1_s_red01
+	chr_delete A1_s_red02
+	chr_delete A2_s_blue01
+	chr_delete A2_s_blue03
+	chr_delete A2_s_blue09
+#	chr_delete A2_s_blue10
+	chr_delete A2_s_tank01
+	chr_delete A2_s_tank02
+	chr_delete char_1
+	chr_delete sniper1
+	chr_delete A2_s_blue13
+	chr_delete A2_s_red03
+	chr_delete A2_s_red04
+	chr_delete new_1
+	chr_delete new_2
+	chr_delete new_3
+	chr_delete new_4
+	chr_delete whiteneut
+	chr_delete B3_s_green02
+	}
+}
+
+func void tv03(string ai_name)
+{
+	dprint tv03
+	ai2_spawn A2_s_blue09
+#	ai2_spawn A2_s_blue10
+#	ai2_spawn A2_s_red04
+
+}
+
+func void ontv02(string ai_name)
+{
+	dprint ontv02
+	trigvolume_enable trigger_volume_02 1
+	particle el_red1 kill
+	particle el_1_locklight01 do start
+}
+
+func void tv04(string ai_name)
+{
+	dprint tv04
+	ai2_spawn A2_s_tank01
+	ai2_spawn A2_s_blue13
+#	ai2_spawn A2_s_tank02
+	ai2_spawn A2_s_blue01
+	ai2_spawn A2_s_red03
+#	ai2_spawn A2_s_blue03
+		
+}
+
+func void tv05(string ai_name)
+{
+	dprint tv05_B3_C1
+	ai2_spawn B3_s_green02
+	ai2_spawn C1_blue20
+#	Torture
+}
+
+func void ontv06(string ai_name)
+{
+	dprint ontv06
+	trigvolume_enable trigger_volume_06 1
+	particle el_2_locklight01 do start
+}
+
+func void start_elevator2_music(void)
+{
+	sound_music_start mus_space01 0.75
+}
+
+func void stop_elevator2_music(void)
+{
+	sound_music_stop mus_space01
+}
+
+func void tv06(string ai_name)
+{
+	dprint tv06_C3
+
+	if (trigvolume_count(31) ne 0)
+	{
+		trigvolume_reset trigger_volume_06
+	}
+
+	if (trigvolume_count(31) eq 0)
+	{
+		start_elevator2_music
+
+		ai2_spawn D1_neut05
+		trigvolume_corpse 31
+		Elev2
+		target_set(128,30.0)
+		chr_delete respawn1
+		chr_delete respawn2
+		chr_delete B1_neut01
+		chr_delete B1_s_blue05
+		chr_delete B1_s_green01
+		chr_delete B1_s_Red01
+		chr_delete B2_s_blue06
+		chr_delete B2_s_blue07
+		chr_delete B2_s_blue08
+		chr_delete B2_s_tank04
+		chr_delete B3_green02
+		chr_delete C1_blue20
+		chr_delete C1_blue22
+		chr_delete C1_red21
+		chr_delete C2_blue25
+		chr_delete C2_red26
+		chr_delete C2_tank24
+		chr_delete new_dummy1
+		objective_set(2)
+	}
+}
+
+func void power_lull_1(string ai_name)
+{	
+	dprint pipe_discharged
+	ai2_neutralbehavior D1_neut02 none
+	pipe = pipe + 1
+
+	if (pipe eq 1)
+	{
+		stop_elevator2_music
+
+		input 0
+		music_pipe
+		cm_interpolate pipe_view 180
+		particle power1 do stop
+		sleep 270
+		cm_reset
+		input 1
+		timer_start 25 power_lull_1b
+		if(my_save_point ne 3)
+		{
+			s3
+		}
+	}
+
+	if(pipe ne 1)
+	{
+		particle power1 do stop
+		timer_start 20 power_lull_1b
+	}	
+}
+
+func void power_lull_1b(void)
+{	
+	dprint pipe_recharged
+	music_stop
+	particle power1 do start
+	sleep 300
+	console_reset 9
+}
+
+func void power_deactivate(void)
+{	
+	dprint power_deactivate
+	ai2_doalarm D1_neut02 9
+	ai2_dopath D1_neut02 patrol_80
+	ai2_setjobstate D1_neut02
+}
+
+func void power_lull_2(string ai_name)
+{	
+	dprint pipe_discharged
+	pipe2 =  pipe2 + 1
+	if (pipe2 eq 1)
+	{
+		music_pipe
+		ai2_spawn new_67
+	}
+	particle power2 do stop
+	ai2_spawn new_10
+	ai2_spawn D3_tank65
+	timer_start 20 power_lull_2b
+}
+
+func void power_lull_2b(void)
+{	
+	dprint pipe_recharged
+	music_stop
+	particle power2 do start
+	sleep 300
+	console_reset 11
+}
+
+func void tv07(string ai_name)
+{
+	dprint tv07
+	target20
+	chr_delete sci_maniac
+	chr_delete D1_blue50
+	chr_delete D1_neut02
+	chr_delete D1_neut05
+	chr_delete D1_neut10
+	chr_delete D1_red30
+	chr_delete D2_blue60
+	chr_delete D2_blue61
+	chr_delete new_5
+	chr_delete D2_red62
+	chr_delete D2_tank63
+	chr_delete new_8
+	chr_delete D3_red66
+	chr_delete D3_tank65
+	chr_delete new_1
+	chr_delete new_2
+	chr_delete new_3
+	chr_delete new_4
+	chr_delete new_6
+	chr_delete new_7
+	ai2_spawn F_friend
+	ai2_spawn F_blue73
+	ai2_spawn F_blue1
+
+}
+
+func void tv08(string ai_name)
+{
+	dprint tv08_chamber_four
+	ai2_spawn end01
+	ai2_spawn end02
+	ai2_spawn end03
+	sleep 60
+	ai2_dopath F_tank70 patrol_5004
+	ai2_setjobstate F_tank70
+	ai2_dopath F_blue69 patrol_5005
+	ai2_setjobstate F_blue69
+	ai2_dopath F_blue2 patrol_5004
+	ai2_setjobstate F_blue2
+	ai2_dopath F_blue1 patrol_5006
+	ai2_setjobstate F_blue1
+	ai2_dopath F_blue73 patrol_5006
+	ai2_setjobstate F_blue73
+	ai2_attack F_tank70 char_0
+	ai2_attack F_blue69 char_0
+	ai2_attack F_blue2 char_0
+	ai2_attack F_blue1 char_0
+	ai2_attack F_blue73 char_0
+}
+
+func check_death(string ai_name)
+{
+	dprint check_death
+	counter = counter - 1
+	if (counter eq 0)
+	{
+		dprint counterdone
+		sound_music_volume mus_fiteb 0 3
+		music_stop
+		sleep 120		
+		you_win
+	}
+}
+
+func void tv09(string ai_name)
+{
+	dprint tv09_chamber_one
+
+}
+
+func void tv10(string ai_name)
+{
+	dprint tv10_chamber_two
+	ai2_spawn F_blue69
+	ai2_spawn F_blue2
+}
+
+func void spawn2tube(string ai_name)
+{
+	dprint spawn2tube
+	ai2_spawn D2_tank63
+	ai2_spawn new_8
+	ai2_spawn sci_maniac
+}
+
+func void tv11(string ai_name)
+{
+	dprint tv11_chamber_three
+	ai2_spawn F_tank70
+
+}
+
+func void tv25(string ai_name)
+{
+	dprint tv25
+#	ai2_spawn D1_blue50
+	ai2_spawn D1_red30
+	ai2_spawn D1_neut02
+	ai2_spawn D2_blue60
+	ai2_spawn D1_neut10
+	ai2_spawn new_5
+	ai2_spawn D2_blue61
+}
+
+func void change_patrol(string ai_name)
+{
+	dprint change_patrol
+	ai2_dopath A1_s_red02 patrol_45
+	ai2_setjobstate A1_s_red02
+}
+
+func void spawn_sniper1(string ai_name)
+{
+	dprint spawn_sniper1
+	ai2_spawn sniper1
+	ai2_makeignoreplayer sniper1 1
+	playback_block sniper1 sniper1_jump
+	ai2_makeignoreplayer sniper1 0
+	ai2_dopath sniper1 patrol_52
+	ai2_setjobstate sniper1
+	sleep 600
+	hurt_sniper1
+}
+
+func void hurt_sniper1(string ai_name)
+{
+	dprint hurt_sniper1
+	ai2_makeignoreplayer sniper1 1
+	ai2_dopath sniper1 patrol_53
+	ai2_setjobstate sniper1
+}
+
+func void tv33(string ai_name)
+{
+	dprint neutral_leaves
+	ai2_makeignoreplayer A2_s_red04 1
+	ai2_dopath A2_s_red04 patrol_54
+	ai2_setjobstate A2_s_red04
+}
+
+func void tv34(string ai_name)
+{
+	dprint spawnneutral
+	ai2_spawn A2_s_red04 
+}
+
+func void t36(string ai_name)
+{
+	dprint t36
+	ai2_spawn sbg_1
+	ai2_spawn sbg_2
+	ai2_spawn sbg_3
+}
+
+func void t37(string ai_name)
+{
+	dprint t37
+	ai2_spawn new_1
+	ai2_spawn new_2
+}
+
+func void t38(string ai_name)
+{
+	dprint t38
+	ai2_spawn new_3
+	ai2_spawn new_4
+}
+
+func void t39(string ai_name)
+{
+	dprint t39
+	trigvolume_enable trigger_volume_40 1 
+}
+
+func void t40(string ai_name)
+{
+	dprint t40
+	ai2_spawn new_6
+	ai2_spawn new_7
+}
+
+###################
+#	save game	#
+###################
+
+func void s1(string ai_name)
+{
+	dprint SAVEDGAME1	
+
+	if (my_save_point ne 1)
+	{
+		save_game 1 autosave
+	}
+}
+
+func void s2(string ai_name)
+{
+	dprint SAVEDGAME2
+
+	if (my_save_point ne 2)
+	{
+		save_game 2 autosave
+	}
+}
+
+func void s3(string ai_name)
+{
+	dprint SAVEDGAME3
+
+	if (my_save_point ne 3)
+	{
+		save_game 3 autosave
+	}
+}
+
+
+func void s4(string ai_name)
+{
+	dprint SAVEDGAME4
+
+	if (my_save_point ne 4)
+	{
+		save_game 4 autosave
+	}
+}
+
+func void s5(string ai_name)
+{
+	dprint SAVEDGAME5
+
+	if (my_save_point ne 5)
+	{
+		save_game 5 autosave
+	}
+}
+###################
+# 	console	#
+###################
+
+func void console_pipe(void)
+{
+	text_console level_9d
+	console_reset 13
+}
+
+func void text9a(void)
+{
+	dprint level_9a
+	text_console level_9a
+	console_reset 2
+}
+
+func void text9b(void)
+{
+	dprint level_9b
+	text_console level_9b
+	console_reset 5
+}
+
+func void text9c(void)
+{
+	dprint level_9c
+	text_console level_9c
+	console_reset 14
+}
+
+func void patrolscript0031(string ai_name)
+{
+	dprint sayline
+	sound_dialog_play c18_70_04striker
+	sound_dialog_play_block
+}
Index: AE/packages/VanillaBSL/IGMD/power_II/particle_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/power_II/particle_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/power_II/particle_scripts.bsl	(revision 313)
@@ -0,0 +1,180 @@
+#partice scripts
+#alex okita
+#turns on and off particles for rooms
+
+####################################
+##             ROOM 1             ##
+####################################
+func void particle_room1_start(string ai_name)
+{
+	dprint start_room1_particles
+	particle room1 do start
+}
+func void particle_room1_stop(string ai_name)
+{
+	dprint stop_room1_particles
+	particle room1 do stop
+}
+
+####################################
+##             ROOM 2             ##
+####################################
+func void particle_room2_start(string ai_name)
+{
+	dprint start_room2_particles
+	particle room2 do start
+}
+func void particle_room2_stop(string ai_name)
+{
+	dprint stop_room2_particles
+	particle room2 do stop
+}
+
+####################################
+##             ROOM 3             ##
+####################################
+func void particle_room3_start(string ai_name)
+{
+	dprint start_room3_particles
+	particle room3 do start
+}
+func void particle_room3_stop(string ai_name)
+{
+	dprint stop_room3_particles
+	particle room3 do stop
+}
+
+####################################
+##             ROOM 4             ##
+####################################
+func void particle_room4_start(string ai_name)
+{
+	dprint start_room4_particles
+	particle room4 do start
+}
+func void particle_room4_stop(string ai_name)
+{
+	dprint stop_room4_particles
+	particle room4 do stop
+}
+
+####################################
+##             ROOM 5             ##
+####################################
+func void particle_room5_start(string ai_name)
+{
+	dprint start_room5_particles
+	particle room5 do start
+}
+func void particle_room5_stop(string ai_name)
+{
+	dprint stop_room5_particles
+	particle room5 do stop
+}
+
+####################################
+##           vat room             ##
+####################################
+func void particle_vatroom1_start(string ai_name)
+{
+	dprint start_vatroom1_particles
+	particle vatroom1 do start
+}
+func void particle_vatroom1_stop(string ai_name)
+{
+	dprint stop_vatroom1_particles
+	particle vatroom1 do stop
+}
+
+####################################
+# first energy sprinkler activator #
+# this one starts over the first   #
+# vat.                             #
+# the particle name is "zap1"      #
+####################################
+
+var int zap=1;
+
+func void zap_start(string ai_name)
+{
+	dprint zap_on
+	
+	trigvolume_enable zap1 0
+
+	if (zap eq 1)
+	{
+	particle zap1 do start
+	sleep 120
+	particle zap1 stop
+	}
+	
+	if (zap eq 1)
+	{
+	particle zap2 start
+	sleep 120
+	particle zap2 stop
+	}
+	
+	if (zap eq 1)
+	{
+	particle zap3 start
+	sleep 120
+	particle zap3 stop
+	}
+
+	# CB: this delay ensures we don't execute every frame
+	sleep 60
+	trigvolume_enable zap1 1
+}
+
+func void zap_timer_1(string ai_name)
+{
+	dprint do_zap_timer_1
+	zap = 0
+	timer_start 15 zap_start_again
+}
+
+func void zap_timer_2(string ai_name)
+{
+	dprint do_zap_timer_2
+	zap = 0
+	timer_start 10 zap_start_again
+}
+
+func void zap_timer_3(string ai_name)
+{
+	dprint do_zap_timer_3
+	zap = 0
+	timer_start 5 zap_start_again
+}
+
+func void zap_start_again(string ai_name)
+{
+	dprint zap_on_again
+	zap = 1
+	console_reset 4
+}
+
+# FINAL PIPE
+func void pipe3_start(string ai_name)
+{
+	dprint pipe_started
+	particle pipe3 do start
+}
+
+
+func void zap_kill(string ai_name)
+{
+	dprint zap_die
+	particle zap1 kill
+	particle zap2 kill
+	particle zap3 kill
+}
+
+func void zap_create(string ai_name)
+{
+	dprint zap_live
+	particle zap1 create
+	particle zap2 create
+	particle zap3 create
+}
Index: AE/packages/VanillaBSL/IGMD/power_II/power2_spawn.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/power_II/power2_spawn.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/power_II/power2_spawn.bsl	(revision 313)
@@ -0,0 +1,689 @@
+### POWER PLANT II LEVEL LOGIC ###
+
+### START, SAVE & OBJECTIVES ###
+
+var int inside_final_cutscene = 0;
+
+func void start(string ai_name)
+{
+	particle save3_locklight01 do start
+
+	if (save_point eq 0)
+		{
+		my_save_point = 0
+		trigvolume_enable trigger_volume_07 0
+		particle_room1_start
+		particle doorA_locklight01 do stop
+		ai2_spawn ambush_striker_10
+		ai2_spawn ambush_striker_11
+		set_objective_1
+		chr_invincible ShinShin 1
+		chr_unstoppable ShinShin 1
+		}
+	if (save_point eq 1)
+		{
+		my_save_point = 1;
+		dprint restore1_active
+		trigvolume_enable room3_particle_control 0
+		door_lock 3
+		particle Shindoor_locklight01 do stop
+		particle room4 do start
+		ai2_spawn A3_n05
+		restore_game
+		set_objective_3
+		}
+	if (save_point eq 2)
+		{
+		my_save_point = 2;
+		dprint restore2_active
+		particle doorA_locklight01 do stop
+		particle doorB_locklight01 do start
+		door_lock 15
+		trigvolume_enable save2 0
+		ai2_spawn vat_bot_1
+		ai2_spawn vat_bot_2
+		ai2_spawn vat_bot_3
+		ai2_spawn vat_bot_4
+		ai2_spawn vat_bot_5
+		chr_weapon_immune(vat_bot_1);
+		chr_weapon_immune(vat_bot_2);
+		chr_weapon_immune(vat_bot_3);
+		chr_weapon_immune(vat_bot_4);
+		chr_weapon_immune(vat_bot_5);
+		restore_game
+		set_objective_4
+		sound_music_start atm_cl12 0.75
+		}
+	if (save_point eq 3)
+		{
+		my_save_point = 3;
+		dprint restore3_active
+		particle save3_locklight01 do stop
+		door_lock 23
+		door_lock 28
+		ai2_spawn E1_sr28
+		ai2_spawn E1_sr30
+		ai2_spawn E1_sb29
+		ai2_spawn ambush_comguy_1
+		ai2_spawn E1_n31
+		ai2_spawn E1_n32
+		ai2_spawn E1_n37
+		trigvolume_enable save_point3 0
+		trigvolume_enable p11b_vol 0
+		restore_game
+		pipe3_start
+		set_objective_5
+		}
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+
+func void you_win(int char_index)
+{
+	outro
+	win
+}
+
+func void new_save1(string ai_name)
+{
+	if (my_save_point ne 1)
+	{
+		save_game 1 autosave
+	}
+}
+
+func void save_point_1(string ai_name)
+{
+	dprint savegame_1	
+	door_lock 3
+	particle Shindoor_locklight01 do stop
+}
+
+func void save_point_2(string ai_name)
+{
+	dprint savegame_2
+	save_game 2 autosave
+}
+
+func void save_point_3(string ai_name)
+{
+	dprint savegame_3	
+	save_game 3 autosave
+}
+
+func void set_objective_1(string ai_name)
+{
+	dprint set_objective1
+	objective_set(1)
+}
+
+func void set_objective_2(string ai_name)
+{
+	dprint set_objective2
+	objective_set(2)
+	target_set(7020,60.00)
+}
+
+func void set_objective_3(string ai_name)
+{
+	dprint set_objective3
+	objective_set(3)
+	target_set(0,0)
+}
+
+func void set_objective_4(string ai_name)
+{
+	dprint set_objective4
+	objective_set(4)
+	trigvolume_enable setobjective_4 0
+}
+
+func void set_objective_5(string ai_name)
+{
+	dprint set_objective5
+	objective_set(5)
+	trigvolume_enable setobjective_5 0
+}
+
+### MUSIC ###
+
+var int music_counter;
+
+func void music_force_stop(void)
+{
+	sleep 4500
+	if (0 ne music_counter) 
+		{
+		dprint music_force_stop
+		music_counter = 0
+		all_music_counters
+		}	
+}
+
+func void music_script_start(void)
+{
+	music_counter = 2
+}
+
+func void striker_lullaby_1(string ai_name)
+{
+	dprint striker_lullaby1
+	music_counter = music_counter - 1
+	if (music_counter eq 0)
+		{
+		all_music_counters();
+		}
+}
+
+func void striker_lullaby_2(string ai_name)
+{
+	dprint striker_lullaby2
+	music_counter = music_counter - 1
+	if (music_counter eq 0)
+		{
+		all_music_counters();
+		}
+}
+
+func void all_music_counters(void)
+{
+	dprint ELVIS_HAS_LEFT_THE_BUILDING
+	sound_music_stop mus_trt
+	sound_music_stop mus_sad1
+	sound_music_stop atm_cl10
+	sound_music_stop atm_ft66
+	sound_music_stop atm_cl09
+	sound_music_stop atm_cl11
+	sound_music_stop mus_xtr2
+	sound_music_stop mus_lz
+}
+
+### TEXT CONSOLES ###
+
+func void level10a(string chr_index)
+{
+	dprint text10a
+	text_console level_10a
+	console_reset 2
+}
+
+func void level10b(string chr_index)
+{
+	dprint text10b
+	text_console level_10b
+	console_reset 7
+}
+
+### GAMEPLAY PROGRESSION ###
+
+# STRIKER BACKUPS
+func void backup_1(string ai_name)
+{
+	dprint backup1
+	ai2_spawn backup_striker1
+	particle blast1_locklight01 do start
+	door_unlock 1
+	door_open 1
+}
+
+func void backup_2(string ai_name)
+{
+	dprint backup2
+	ai2_spawn backup_striker2
+	particle blast2_locklight01 do start
+	door_unlock 2
+	door_open 2
+}
+	
+
+# COME TO ME
+func void come_to_me(string ai_name)
+{
+	dprint go_to_konoko
+	ai2_dopath ambush_striker1 come_to_me 1
+	ai2_dopath ambush_striker2 come_to_me 1
+	ai2_dopath A1_t02 come_to_me 1
+	ai2_dopath A1_sr01 come_to_me 1
+	ai2_dopath ambush_striker1 come_to_me 1
+	ai2_dopath ambush_striker2 come_to_me 1
+}
+
+# SHIN CUTSCENE CHECK
+func void shin_check(string ai_name)
+{
+	var int inside_count;
+	dprint shin_cutscene_check
+	trigvolume_enable trigger_volume_03 0
+
+	inside_count = trigvolume_count(32);
+
+	if (inside_count ne 0)
+	{
+		sleep 60
+		trigvolume_enable trigger_volume_03 1
+	}
+
+	if (inside_count eq 0)
+	{
+		Shin
+	}
+}
+
+func void t43(string ai_name)
+{
+	dprint konoko_dies
+	inroom = 1
+}
+
+func void t43b(string ai_name)
+{
+	dprint konoko_lives
+	inroom = 0
+}
+
+func void delete_script(string ai_name)
+{
+	dprint dead_or_not
+	chr_delete ai_name
+}
+
+func void shin_dies(void)
+{
+	dprint KABOOM
+	particle ShinBomb do explode
+	fade_out 1 1 1 30
+	if (inroom eq 1)
+	{
+		chr_set_health 0 0
+	}
+
+	trigvolume_kill 64
+
+	chr_delete ShinShin
+	fade_in 60
+	door_lock 3
+	particle Shindoor_locklight01 do stop
+	set_objective_3	
+}
+
+func void p1(string ai_name)
+{
+	dprint p1_trigger_entered
+	sound_music_stop mus_trt
+	sound_music_start atm_cl09 1.0
+	ai2_spawn A1_sr01
+	ai2_lookatme A1_sr01	
+	ai2_spawn A1_t02
+	ai2_lookatme A1_t02
+	sleep 120
+	door_lock 1
+	door_lock 2
+}
+
+func void open_ambush1(string ai_name)
+{
+	dprint ambush_1
+	particle blast1_locklight01 do start
+	door_unlock 1
+	ai2_spawn ambush_striker1
+}
+
+func void open_ambush2(string ai_name)
+{
+	dprint ambush_2
+	particle blast2_locklight01 do start
+	door_unlock 2
+	ai2_spawn ambush_striker2
+}
+
+func void p2(string ai_name)
+{
+	dprint p2
+	ai2_spawn A2_r03
+	playback A2_r03 redjump
+	ai2_lookatme A2_r03
+	ai2_spawn aerial_red_2
+	ai2_passive aerial_red_2 1
+	playback aerial_red_2 redjump2
+	ai2_passive aerial_red_2 0
+	ai2_lookatme aerial_red_2
+	ai2_spawn red_guard_1
+	ai2_dopath A1_sr01 patrol_31
+	ai2_dopath A1_t02	patrol_31
+	ai2_setjobstate A1_sr01
+	ai2_setjobstate A1_t02 patrol_31	
+	sleep 120	
+}
+
+func void p5(string ai_name)
+{
+	dprint p5
+	ai2_spawn A3_n05
+	ai2_spawn A3_sb06
+	ai2_spawn A4_n07
+}
+
+func void p6(string ai_name)
+{
+	dprint p6
+	ai2_spawn A4_sr08
+	ai2_spawn B1_c07
+}
+
+func void enableP7(string ai_name)
+{
+	dprint enableP7
+	trigvolume_enable trigger_volume_07 1
+}
+
+func void do_console_1(string ai_name)
+{
+	dprint do_console
+	ai2_doalarm A3_n05 1
+}
+
+func void p8(string ai_name)
+{
+	dprint p8
+	ai2_spawn B2_sb09
+	ai2_spawn B2_n10
+	trigvolume_enable trigger_volume_07 0
+	trigvolume_enable trigger_volume_08 0	
+}
+
+func void p9(string ai_name)
+{
+	dprint p9
+	ai2_spawn C1_c16
+	ai2_spawn C1_t11	
+	ai2_spawn C1_sb12
+	ai2_spawn C1_t13	
+	ai2_spawn C2_sg15
+	ai2_spawn C2_sr17
+	ai2_spawn C2_sb14
+	ai2_spawn C2_t19		
+	particle room1 stop
+}
+
+func void red_ambush(string ai_name)
+{
+	dprint ambush_red
+	ai2_spawn ambush_red_1
+}
+
+func void p10(string ai_name)
+{
+	dprint p10
+	ai2_spawn D1_sr20
+	ai2_spawn D1_sb21	
+}
+
+func void p11(string ai_name)
+{
+	dprint p11
+	particle room6 do start
+	pipe3_start
+}
+func void p11b(string ai_name)
+{
+	dprint p11b
+	particle room6 do stop
+}
+
+func void striker_guards(string ai_name)
+{
+	dprint spawn_strikers
+	ai2_spawn striker_guard_1
+	ai2_spawn striker_guard_2
+}
+
+func void spawn_EC_guards(string ai_name)
+{
+	dprint spawn_guards
+	ai2_spawn E1_sb29
+	ai2_spawn E1_c33
+	ai2_spawn E1_c40
+	ai2_spawn E1_f34
+	ai2_spawn E1_f40
+	ai2_spawn E1_f35
+}
+
+func void final_guards(string ai_name)
+{
+	dprint last_guards_activated
+	ai2_spawn final_guard_1
+	ai2_spawn final_guard_2
+}
+
+func void p12(string ai_name)
+{
+	dprint p12
+	ai2_spawn D2_sb26
+	playback D2_sb26 piperun
+	ai2_spawn pipe_guard_1
+	ai2_spawn pipe_guard_2
+}
+
+func void p13(string ai_name)
+{
+	dprint p13
+	ai2_spawn E1_sr28
+	ai2_spawn E1_sb29
+	ai2_spawn E1_sr30
+	ai2_spawn ambush_comguy_1
+	ai2_spawn E1_n31
+	ai2_spawn E1_n32
+	ai2_spawn E1_n37
+	particle elev1_locklight01 do stop
+	particle elev2_locklight01 do stop
+}
+
+func void p14(string ai_name)
+{
+	dprint p14
+	chr_teleport 0 105
+	ai2_spawn F_r40
+	particle pipe3 do start
+}
+
+func void p36(string ai_name)
+{
+	dprint spawned_muro_runner_p36
+	ai2_spawn muro_runner
+	ai2_spawn muro_runner2
+}
+
+func void p39(string ai_name)
+{
+	dprint p39
+	ai2_spawn F_r40
+}
+
+func void cross_fire(string ai_name)
+{
+	dprint crossfire
+	ai2_spawn D2_sg24
+	ai2_spawn D2_f25	
+}
+
+func void tctf_control(string ai_name)
+{
+	dprint tctfcontrol_start
+	sound_music_start mus_amasian 1.0
+	input 0
+	letterbox 1
+	door_unlock 38
+	ai2_spawn E2_sr38
+	ai2_spawn E2_sr39
+	particle elev1_locklight01 do start
+	particle elev2_locklight01 do start
+	cm_interpolate tctf_3 0
+	cm_interpolate_block tctf_1 300
+	cm_interpolate_block tctf_2 150
+	sleep 180
+	cm_reset
+	letterbox 0
+	input 1
+	door_unlock 37
+}
+
+func void warnbigroom(string ai_name)
+{
+	dprint warnbigroom
+	ai2_tripalarm 1	
+}
+
+func void zap_cinematic(string ai_name)
+{
+	dprint doorA
+	input 0
+	begin_cutscene
+	sound_music_start atm_cl12 0.75
+	particle zap1 create
+	particle zap1 start
+	cm_interpolate zap_cinematic1 0
+	cm_interpolate_block zap_cinematic3 700
+	sleep 750
+	cm_interpolate zap_cinematic4 0	
+	sleep 60
+	particle doorA_locklight01 do start
+	sleep 150
+	door_unlock 15	
+	cm_reset
+	end_cutscene
+	input 1
+	ai2_spawn vat_bot_1
+	ai2_spawn vat_bot_2
+	ai2_spawn vat_bot_3
+	ai2_spawn vat_bot_4
+	ai2_spawn vat_bot_5
+	chr_weapon_immune(vat_bot_1);
+	chr_weapon_immune(vat_bot_2);
+	chr_weapon_immune(vat_bot_3);
+	chr_weapon_immune(vat_bot_4);
+	chr_weapon_immune(vat_bot_5);
+	particle doorB_locklight01 do start
+}
+
+func void change_patrol_1(string ai_name)
+{
+	dprint change_patrol
+	ai2_dopath vat_bot_2 vat_bot_2b 1
+}
+
+func void change_patrol_2(string ai_name)
+{
+	dprint change_patrol
+	ai2_dopath vat_bot_3 vat_bot_3b 1
+} 
+
+func void change_patrol_3(string ai_name)
+{
+	dprint change_patrol
+	ai2_dopath vat_bot_5 vat_bot_5b 1
+}
+
+func void spark_sound_off(string ai_name)
+{
+	dprint spark_music_off
+	sound_music_stop atm_cl12
+}
+
+# YOUR DEATH IS ASSURED
+func void dont_even_try_it(string ai_name)
+{
+	chr_set_health 0 0
+}
+
+### SPECIAL PARTICLES ###
+
+func void killmuro(string ai_name)
+{
+	dprint killedmuro
+	chr_delete muro_runner
+	chr_delete muro_runner2
+	sound_music_stop atm_cl11
+	ai2_spawn A4_n07
+}
+
+func void pipe1a(string ai_name)
+{	
+	dprint pipe1_discharged
+	ai2_passive A3_n05 1
+	particle room4 do stop
+	timer_start 30 pipe1b
+	sound_music_start atm_cl11
+}
+
+func void pipe1b(void)
+{	
+	dprint pipe1_recharged
+	particle room4 do start
+	console_reset 1
+
+	pipe1_music_off();
+}
+
+func void pipe1_music_off(void)
+{	
+	dprint pipe1_music_off
+	sound_music_stop atm_cl11
+}
+
+func void pipe2a(void)
+{	
+	dprint pipe2_discharged
+	particle room6 do stop
+	timer_start 29 pipe2b
+	sound_music_start atm_cl11
+}
+
+func void pipe2b(void)
+{	
+	dprint pipe2_recharged
+	particle room6 do start
+	console_reset 8
+
+	pipe2_music_off();
+}
+
+func void pipe2_music_off(void)
+{	
+	dprint pipe2_music_off
+	sound_music_stop atm_cl11
+}
+
+func void pipe3(void)
+{	
+	dprint pipe_discharged
+	timer_start 19 pipe3b
+	sound_music_volume mus_amasian 0.0 2.0
+	particle pipe3 kill
+	sound_music_start atm_cl11
+	sound_music_stop mus_amasian
+}
+
+func void pipe3b(void)
+{	
+	if (inside_final_cutscene eq 0)
+		{
+		dprint pipe_recharged
+		particle pipe3 create
+		particle pipe3 do start
+		console_reset 15
+		}
+}
+
+func void final_cutscene_trumps_particles(void)
+{
+	inside_final_cutscene = 1;
+	particle pipe3 kill
+}
+
+### Level scripted by Joseph ###
Index: AE/packages/VanillaBSL/IGMD/power_II/powerII_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/power_II/powerII_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/power_II/powerII_cutscene.bsl	(revision 313)
@@ -0,0 +1,533 @@
+#
+#
+# power_cutscene.bsl
+#
+
+func void
+intro(
+	void)
+{
+	ai2_passive ShinShin 1
+	ai2_makeblind ShinShin 1
+	ai2_makedeaf ShinShin 1
+	chr_lock_active ShinShin
+	chr_unstoppable ShinShin 1
+	fade_out 0 0 0 0
+	cm_interpolate IntroCam01 0
+	sleep f14
+	begin_cutscene
+	sleep f60
+	#Konoko in big space
+	playback 0 IntroKonoko01
+
+	sound_music_start mus_trt
+	music_script_start
+
+	cm_interpolate IntroCam01 0
+	fade_in 60
+	sleep f60
+	cm_interpolate IntroCam02 300
+	sleep f400
+	cm_reset
+	letterbox 0
+	chr_nocollision ShinShin 1
+	sleep f10
+	playback ShinShin ShinShinSet
+	end_cutscene
+	sleep f90
+	ai2_setmovementmode ShinShin creep
+}
+
+
+
+func void
+Shin(
+	void)
+{
+	sleep 60
+	begin_cutscene
+	
+	sound_music_stop atm_cl09
+	sound_music_start mus_xtr2 0.50
+
+	#Shinatama sitting in chair
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_sit 1000 12
+	cm_interpolate ShinCam00 120
+	sleep f180
+	#Konoko kneels next to Shinatama
+	chr_envanim 0 ShinKonBox01 norotation
+	chr_animate 0 KONOKOlev10_Kneel
+	cm_anim both ShinCam01
+	cm_wait
+	sound_dialog_play c09_31_01konoko
+	cinematic_start (KONtalking, 180, 180, 20, 9, 20, true)
+	chr_envanim 0 ShinKonBox02 norotation
+	chr_animate 0 KONOKOlev10_Kneeling 1000
+	sound_dialog_play_block
+	#Konoko kneeling next to Shinatama
+	cm_interpolate ShinCam02 0
+	cm_interpolate_block ShinCam03 1200
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_sit 1000
+	chr_envanim 0 ShinKonBox02 norotation
+	chr_animate 0 KONOKOlev10_Kneeling 1000
+	sound_dialog_play c09_31_02shinatama
+	cinematic_start (SHINdamaged, 180, 180, 19, 7, 20, false)
+	sound_dialog_play_block
+	sound_dialog_play c09_31_03konoko
+	sound_dialog_play_block
+	sound_dialog_play c09_31_04shinatama
+	sound_dialog_play_block
+	sound_dialog_play c09_31_05konoko
+	sound_dialog_play_block
+	#Camera showing both of them	
+	cm_interpolate ShinCamBoth01 0
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_sit 1000
+	chr_envanim 0 ShinKonBox02 norotation
+	chr_animate 0 KONOKOlev10_Kneeling 1000
+	cm_interpolate_block ShinCam01 1500
+	sound_dialog_play c09_31_06shinatama
+	sound_dialog_play_block
+	sound_dialog_play c09_31_07konoko
+	sound_dialog_play_block
+	cm_interpolate ShinCamShinNo 0
+	cm_interpolate ShinCamShinNo2 900
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_sit 1000
+	chr_envanim 0 ShinKonBox02 norotation
+	chr_animate 0 KONOKOlev10_Kneeling 1000
+	sound_dialog_play c09_31_08shinatama
+	sound_dialog_play_block
+	sound_dialog_play c09_31_09konoko
+	sound_dialog_play_block
+	cinematic_stop (KONtalking, 20, 20)
+	cinematic_stop (SHINdamaged, 19, 20)
+	#TCTF Griffin talking
+	chr_create 1010 start
+	chr_create 1011 start
+	chr_create 1012 start
+	ai2_spawn Honey
+	ai2_passive Honey 1
+	playback Honey ShinFemSet
+	playback 1010 ShinCopSet
+	playback 1011 ShinGrifSet
+	playback 1012 ShinKerrSet
+	sleep f20
+	chr_animate 1010 COMGUYlev10_console1 120
+	cm_interpolate ShinCamCop 0
+	chr_animate_block 1010 COMGUYlev10_console2 1000
+	sound_dialog_play c09_31_10scigoon3
+	cinematic_start (COPtalking, 180, 180, 16, 3, 20, true)
+	sound_dialog_play_block
+	cm_interpolate ShinCamGrif 1600
+	sound_dialog_play c09_31_11griffin
+	cinematic_start (GRIFtalking, 180, 180, 19, 7, 20, false)
+	sound_dialog_play_block
+	sound_dialog_play c09_31_12scigoon1
+	sound_dialog_play_block
+	cinematic_stop (COPtalking, 16, 20)
+	cm_interpolate ShinCamKerrFace 0
+	sound_dialog_play c09_31_13kerr
+	cinematic_start (KERRtalking, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block
+	cinematic_stop (KERRtalking, 20, 20)
+	cm_interpolate ShinCamGrifFace 0
+	sound_dialog_play c09_31_14griffin
+	sound_dialog_play_block
+	cm_interpolate ShinCamCopFace 2400
+	sound_dialog_play c09_31_15scigoonwom
+	cinematic_start (CIVIL4talking, 180, 180, 15, 1, 20, true)
+	sound_dialog_play_block
+	cinematic_stop (CIVIL4talking, 15, 20)
+	cm_interpolate ShinCamKerrFace 0
+	sound_dialog_play c09_31_16kerr
+	cinematic_start (KERRtalking, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block
+	cm_interpolate ShinCamGrif 0
+	cm_interpolate_block ShinCamGrif02 1200
+	sound_dialog_play c09_31_17griffin
+	cinematic_stop (GRIFtalking, 19, 20)
+	cinematic_start (GRIFtalkangry, 180, 180, 19, 7, 20, false)
+	sound_dialog_play_block
+	cinematic_stop (KERRtalking, 20, 20)
+	cinematic_stop (GRIFtalkangry, 19, 20)
+	#Shinatama tenses up
+	playback 0 ShinKonokoSet
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_sit 1000
+	chr_envanim 0 ShinKonBox02 norotation
+	chr_animate 0 KONOKOlev10_Kneeling 1000
+	cm_interpolate ShinCamShinNo2 0
+	cm_interpolate_block ShinCamShinNo 800
+	sleep f60
+	chr_animate ShinShin SHINATlev10_SitSpaz 60
+	cutscene_sync mark
+	sound_ambient_start c05_46_24shinwake
+	sleep f60
+	chr_animate ShinShin SHINATlev10_Sit2 200
+	sound_dialog_play c09_31_18konoko
+	cinematic_start (KONtalking, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block
+	#Konoko asks what's wrong
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_Sit2 1000
+	chr_envanim 0 ShinKonBox02 norotation
+	chr_animate 0 KONOKOlev10_Kneeling 1000
+	cm_interpolate ShinCamKonNo3 0
+	#Shinatama says to get the flock out of there
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_Sit2 1000
+	chr_envanim 0 ShinKonBox02 norotation
+	chr_animate 0 KONOKOlev10_Kneeling 1000
+	cm_interpolate ShinCamShinNo 800
+	sound_dialog_play c09_31_19shinatama
+	cinematic_start (SHINdamaged, 180, 180, 19, 7, 20, false)
+	cm_interpolate ShinCamKonNo 0
+	#I can't delay it much longer
+	cm_interpolate ShinCamShinNo3 2000
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_Sit2 1000
+	sound_dialog_play c09_31_21shinatama
+	sound_dialog_play_block
+	#KONOKO I won't leave you
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_Sit2 1000
+	chr_animate 0 KONOKOlev10_Kneeling 1000
+	sound_dialog_play c09_31_22konoko
+	sound_dialog_play_block
+	#bye Konoko
+	cm_interpolate ShinCamShinNo3 0
+	chr_envanim 0 ShinKonBox02 norotation
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_Sit2 1000
+	sound_dialog_play c09_31_23shinatama
+	sound_dialog_play_block
+	#KONOKO says no
+	chr_animate 0 KONOKOlev10_Kneeling 1000
+	sound_dialog_play c09_31_24konoko
+	sound_dialog_play_block
+	chr_envanim ShinShin ShinBox01 norotation
+	chr_animate ShinShin SHINATlev10_Sit2 1000
+	sound_dialog_play c09_31_25shinatama
+	sound_dialog_play_block
+	cinematic_stop (SHINdamaged, 19, 20)
+	#goodbye shinatama
+	chr_envanim 0 ShinKonBox04 norotation
+	chr_animate 0 KONOKOlev10_Kneel_end
+	sleep f30
+	cm_interpolate ShinCamKonNo 180
+	sleep f30
+	playback 0 ShinKonokoSet
+	sleep f70
+	sound_dialog_play c09_31_26konoko
+	sound_dialog_play_block
+	cinematic_stop (KONtalking, 20, 20)
+
+	sound_music_volume mus_xtr2 0.0 5.0
+	sound_music_start atm_cl10 0.0
+	sound_music_volume atm_cl10 1.0 5.0
+	sound_music_stop mus_xtr2
+
+	set_objective_2	
+
+	cm_reset
+	end_cutscene
+	chr_delete 1010
+	chr_delete 1011
+	chr_delete 1012
+	chr_delete Honey	
+#	START TIMER (added by wu)
+
+	particle blast1_locklight01 do stop
+	particle blast2_locklight01 do stop
+	door_lock 1
+	door_lock 2
+
+	door_unlock 3
+	particle Shindoor_locklight01 do start
+	ai2_spawn A2_sb04
+	sound_dialog_play c09_31_27shinatama
+	sound_dialog_play_block pause
+	#timer_start 30 shin_dies
+	sleep f600
+	sound_dialog_play c09_31_28shinatama
+	sleep f600
+	sound_dialog_play c09_31_29shinatama
+	sleep f330
+	sound_dialog_play_block pause
+	sleep f15
+	
+	sound_music_stop atm_cl10
+	cutscene_sync mark
+	sound_ambient_start c06_45_04_explo
+	sleep f10
+	shin_dies
+	#particle ShinBomb do explode
+	
+		
+}
+
+
+func void
+elevator(
+	void)
+{
+	begin_cutscene
+	sleep f40
+	chr_envanim 0 ElevatorKonBox01
+	cm_anim both ElevatorCam01
+	sleep 40
+	cutscene_sync mark
+	sound_ambient_start c07_21_20elevator
+	cm_wait
+	env_show 778 1
+	env_shade 778 778 .3 .3 .3
+	playback 0 ElevatorTop
+	cm_reset
+	end_cutscene
+}
+
+func void
+temp(
+	void)
+{
+	chr_envanim 0 ShinKonBox04 norotation
+	chr_animate 0 KONOKOlev10_Kneeling 1000
+	sleep f40
+	chr_animate 0 KONOKOlev10_Kneel_end
+}
+
+func void
+outro(
+	void)
+{
+	# if you didn't disable the console, we still need to kill that music
+	sound_music_volume mus_amasian 0.0 2.0
+	sound_music_stop mus_amasian
+
+	final_cutscene_trumps_particles
+
+	begin_cutscene
+	chr_delete F_r40
+	
+	sound_music_volume atm_cl11 0.0 1.0
+	sound_music_start mus_lz 1.0
+	sound_music_stop atm_cl11
+
+	particle pipe3 kill
+	
+	cm_interpolate OutroCamEnter01 0
+	cm_interpolate_block OutroCamEnter02 500
+	ai2_spawn TCTF1053
+	ai2_spawn TCTF1054
+	ai2_spawn TCTF1051
+	ai2_spawn TCTF1052
+	chr_lock_active 1051
+	chr_lock_active 1052
+	chr_lock_active 1053
+	chr_lock_active 1054
+	#ai2_passive 1053 1
+	#ai2_passive 1054 1
+	#ai2_makeblind 1053 1
+	#ai2_makeblind 1054 1
+	playback TCTF1053 OutroLiteEnter
+	sleep f30
+	playback TCTF1054 OutroLiteEnter
+	sleep f60
+	playback TCTF1051 OutroSwatEnter
+	sleep f30
+	chr_nocollision TCTF1052 1
+	playback TCTF1052 OutroSwatEnter
+	sleep f180
+	chr_nocollision TCTF1052 0
+	#TCTF says I know How to Stop Her
+	playback 0 OutroKonokoRun
+	cm_interpolate OutroCamBooth01 0
+	sleep f5
+	cm_interpolate OutroCamBooth02 400
+	#chr_create 1053 start
+	#chr_create 1054 start
+	playback TCTF1053 OutroTCTF3Set
+	playback TCTF1054 OutroTCTF4Set
+	sleep f60
+	#chr_create 1051 start
+	#chr_create 1052 start
+	playback TCTF1051 OutroTCTF1Enter
+	playback TCTF1052 OutroTCTF2Enter
+	sleep f380
+	#TCTF Guys hit the fan
+	cm_interpolate OutroCamBooth03 0
+	sleep f20
+	sound_dialog_play c09_32_03tctf
+	cinematic_start (TCTFtalking, 180, 180, 15, 1, 15, false)
+	sleep 240
+	chr_animate TCTF1054 COMGUYlev10_console
+	sleep f60
+	#sound_ambient_start console
+	sleep f30
+	cinematic_stop (TCTFtalking, 15, 25)
+	#Konoko stops in front as fan starts
+	playback 0 OutroKonokoStop
+	sleep f70
+	cm_anim both OutroCam01
+	env_anim 81 82
+	cutscene_sync mark
+	sound_ambient_start c14_14_26_basic
+	sound_ambient_start c14_42_09_effectsa
+	sleep f300
+	#TCTF guys run towards the Fan and then Stop
+	playback TCTF1051 OutroTCTFTurn
+	playback TCTF1052 OutroTCTF2Turn
+	sleep f120
+	cm_interpolate OutroCamTurn01 0
+	env_setanim 81 FanHub02
+	env_setanim 82 FanBlade02
+	cm_interpolate_block OutroCamTurn02 180
+	sleep f240
+	#Those Dudes run away 
+	particle OutroWind do start
+	playback TCTF1051 OutroTCTF2Flee
+	playback TCTF1052 OutroTCTFBlown
+	chr_envanim 0 OutroKonBox01 norotation
+	chr_animate 0 KONOKOlev10_Blown01
+	cm_interpolate OutroCamBlow01 0
+	cm_interpolate_block OutroCamBlow02 240
+	sleep f100
+	cutscene_sync mark
+	sound_ambient_start c14_30_15_wind
+	sleep f130
+	chr_animate TCTF1052 TCTFlev10_Blown 240 8
+	sleep f235
+	#Konoko starts to get blown away
+	sleep f2
+	cm_anim both OutroCamBlown
+	chr_envanim 0 OutroKonBox01 norotation
+	chr_animate 0 KONOKOlev10_Blown01
+	#Konoko Grabs handrail, tctf flies into fan
+	cm_wait
+	chr_envanim 0 OutroKonBox02 norotation
+	chr_animate 0 KONOKOlev10_Grab
+	chr_envanim TCTF1052 OutroTCTFBox01
+	chr_animate TCTF1052 STRIKEjump_flail 340
+	cm_anim both OutroCamGrab
+	#Konoko work her way up rail
+	cm_wait
+	cutscene_sync mark
+	sound_ambient_start c14_42_09_effectsb
+	chr_set_health TCTF1052 0
+	chr_envanim 0 OutroKonBox05 norotation
+	chr_animate 0 KONOKOlev10_OutroHand
+	cm_anim both OutroCamHand05
+	#Konoko works her way up rail
+	#cm_wait
+	#chr_envanim 0 OutroKonBox06 norotation
+	#chr_animate 0 KONOKOlev10_OutroHand
+	#cm_anim both OutroCamHand06
+	#TCTF says she got away	
+	#Konoko makes it towards safety
+	#cm_wait
+	#chr_envanim 0 OutroKonBox07 norotation
+	#chr_animate 0 KONOKOlev10_OutroHand
+	#cm_anim both OutroCamHand07
+	#sleep f240
+	#TCTF Griffin talking
+	cm_wait
+	chr_create 1010 start
+	chr_create 1011 start
+	chr_create 1012 start
+	playback 1010 ShinCopSet
+	playback 1011 ShinGrifSet
+	playback 1012 ShinKerrSet
+	cm_interpolate ShinCamGrifFace 0
+	sound_ambient_volume c14_14_26_basic 0 .5
+	sound_ambient_volume c14_30_15_wind 0 .5
+	sleep f20
+	sound_ambient_stop c14_14_26_basic
+	sound_ambient_stop c14_30_15_wind
+	sound_dialog_play c09_33_01griffin
+	cinematic_start (GRIFtalking, 180, 180, 19, 7, 20, false)
+	#chr_animate 1010 COMGUYlev10_console1 120
+	sound_dialog_play_block
+	cm_interpolate ShinCamCop 0
+	cm_interpolate_block ShinCamCopFace 2000
+	chr_animate 1010 COMGUYlev10_console2 1500
+
+	sound_music_volume mus_lz 0.65 2.0
+
+	sound_dialog_play c09_33_02scigoon1
+	cinematic_start (COPtalking, 180, 180, 16, 3, 20, true)
+	sound_dialog_play_block
+	sound_dialog_play c09_33_03griffin
+	sound_dialog_play_block
+	sound_dialog_play c09_33_04scigoon1
+	sound_dialog_play_block
+	cinematic_stop (COPtalking, 16, 20)
+	sound_dialog_play c09_33_05griffin
+	sound_dialog_play_block
+	cm_interpolate ShinCamKerrFace 0
+	sound_dialog_play c09_33_06kerr
+	cinematic_start (KERRtalking, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block
+	cinematic_stop (KERRtalking, 20, 20)
+	cm_interpolate ShinCamGrifFace 0
+	sound_dialog_play c09_33_07griffin
+	sound_dialog_play_block
+	sound_dialog_play c09_33_09griffin
+	sound_dialog_play_block
+	sleep 30
+	#Konoko overhears that she's rogue
+	playback 0 OutroKonokoWatch
+	chr_animate 0 KONOKOwatch_radio 400
+	sound_ambient_start c14_30_15_wind
+	cm_interpolate OutroCamWatch01 0
+	cm_interpolate_block OutroCamWatch02 300
+	sound_dialog_play c09_33_09agriffin
+	sound_dialog_play_block
+	cinematic_stop (GRIFtalking, 19, 20)
+
+	sound_music_volume mus_lz 1.0 1.0
+
+	chr_animate 0 KONOKOlev10_watch_run 60
+	sleep f60
+	fade_out 0 0 0 120
+	sound_ambient_volume c14_30_15_wind 0 2
+	sleep f120
+	sound_ambient_stop c14_30_15_wind
+	end_cutscene
+	win
+}
+
+
+
+func void splash(string character)
+{
+  var bool eggman;
+
+  eggman = chr_is_player(character);
+
+  if (eggman eq 0)
+  {
+    chr_animate(character, KONOKOacid);
+    sleep f10
+    chr_set_health(character, 0);
+  }
+
+  if (eggman eq 1)
+  {
+    	cm_detach
+    	chr_animate(character, KONOKOacid);
+	sleep f10
+	sound_impulse_play konoko_gruesome_death
+	chr_set_health(character, 0);
+  }
+}
+
+func void
+detachcam(
+	void)
+{
+	#cm_detach
+}
+
Index: AE/packages/VanillaBSL/IGMD/power_II/power_II_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/power_II/power_II_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/power_II/power_II_main.bsl	(revision 313)
@@ -0,0 +1,26 @@
+#
+# power_main.bsl
+#
+
+var int inroom=0;
+var int in_blue=0;
+var int my_save_point=0;
+var int blue_striker=1;
+
+func void main(void)
+{
+	obj_create 81 82
+	env_shade 777 777 .4 .4 .4
+	env_show 778 0
+	gl_fog_blue=.15
+	gl_fog_red=.15
+	gl_fog_green=.15
+	gl_fog_start=.99
+	gs_farclipplane_set 2500
+	start
+	if (my_save_point eq 0)
+	{
+		fork intro
+	}
+}
+
Index: AE/packages/VanillaBSL/IGMD/roof/particle_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/roof/particle_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/roof/particle_scripts.bsl	(revision 313)
@@ -0,0 +1,521 @@
+###################################building 1
+func void rain1(string ai_name)
+{
+	dprint b1r1of3
+	particle b01_rain1 start
+	particle b01_rain2 stop
+}
+func void rain2(string ai_name)
+{
+	dprint b1r2of3
+	particle b01_rain1 stop
+	particle b01_rain2 start
+	particle b01_rain3 stop
+}
+func void rain3(string ai_name)
+{
+	dprint b1r3of3
+	particle b01_rain2 stop
+	particle b01_rain3 start
+	particle b02_rain1 stop
+}
+###################################building 2
+func void rain4(string ai_name)
+{
+	dprint b2r1of2
+	particle b01_rain3 stop
+	particle b02_rain1 start
+	particle b02_rain2 stop
+}
+func void rain5(string ai_name)
+{
+	dprint b2r2of2
+	particle b02_rain1 stop
+	particle b02_rain2 start
+	particle b03_rain1 stop
+}
+###################################building 3
+func void rain6(string ai_name)
+{
+	dprint b3r1of3
+	particle b02_rain2 stop
+	particle b03_rain1 start
+	particle b03_rain2 stop
+}
+func void rain7(string ai_name)
+{
+	dprint b3r2of3
+	particle b03_rain1 stop
+	particle b03_rain2 start
+	particle b03_rain3 stop
+}
+func void rain8(string ai_name)
+{
+	dprint b3r3of3
+	particle b02_rain2 stop
+	particle b03_rain3 start
+	particle b03_rain1 stop
+}
+###################################building 4/6
+func void rain9(string ai_name)
+{
+	dprint b4r1of6
+	particle b03_rain3 stop
+	particle b04_rain1 start
+	particle b04_rain2 stop
+}
+func void rain10(string ai_name)
+{
+	dprint b4r2of6
+	particle b04_rain1 stop
+	particle b04_rain2 start
+	particle b04_rain3 stop
+}
+func void rain11(string ai_name)
+{
+	dprint b4r3of6
+	particle b04_rain2 stop
+	particle b04_rain3 start
+	particle b04_rain4 stop
+}
+func void rain12(string ai_name)
+{
+	dprint b4r4of6
+	particle b04_rain3 stop
+	particle b04_rain4 start
+	particle b04_rain5 stop
+}
+func void rain13(string ai_name)
+{
+	dprint b4r5of6
+	particle b04_rain4 stop
+	particle b04_rain5 start
+	particle b04_rain6 stop
+}
+func void rain14(string ai_name)
+{
+	dprint b4r6of6
+	particle b04_rain5 stop
+	particle b04_rain6 start
+	particle b06_rain1 stop
+}
+###################################building 6/6
+func void rain15(string ai_name)
+{
+	dprint b6r1of6
+	particle b04_rain6 stop
+	particle b06_rain1 start
+	particle b06_rain2 stop
+}
+func void rain16(string ai_name)
+{
+	dprint b6r2of6
+	particle b06_rain1 stop
+	particle b06_rain2 start
+	particle b06_rain3 stop
+}
+func void rain17(string ai_name)
+{
+	dprint b6r3of6
+	particle b06_rain2 stop
+	particle b06_rain3 start
+	particle b06_rain4 stop
+}
+func void rain18(string ai_name)
+{
+	dprint b6r4of6
+	particle b06_rain3 stop
+	particle b06_rain4 start
+	particle b06_rain5 stop
+}
+func void rain19(string ai_name)
+{
+	dprint b6r5of6
+	particle b06_rain4 stop
+	particle b06_rain5 start
+	particle b06_rain6 stop
+}
+func void rain20(string ai_name)
+{
+	dprint b6r6of6
+	particle b06_rain5 stop
+	particle b06_rain6 start
+	particle b06_rain5 stop
+}
+func void rain21(string ai_name)
+{
+	dprint b6_off
+	particle b06_rain6 stop
+}
+################# kill lower clouds ###########
+func void cloudkiller(string ai_name)
+{
+	dprint makingLowCloudsDie
+	particle b01a die
+	particle b01b die
+	particle b01c die
+	particle b01d die
+	particle b01e die
+	particle b01f die
+	particle b01g die
+	particle b01h die
+	particle b01i die
+	particle b01j die
+	particle b01k die
+	particle b01l die
+	particle b01m die
+	particle b01n die
+	particle b01o die
+	particle b01p die
+	particle b01q die
+	particle b01r die
+	particle b01s die
+	particle b01t die
+	particle b01u die
+	particle b01v die
+	particle b01w die
+	particle b01x die
+	particle b01y die
+	particle b01z die
+	particle b02a die
+	particle b02b die
+	particle b02c die
+	particle b02d die
+	particle b02e die
+	particle b02f die
+	particle b02g die
+	particle b02h die
+	particle b02i die
+	particle b02j die
+	particle b02k die
+	particle b02l die
+	particle b02m die
+	particle b02n die
+	particle b02o die
+	particle b02p die
+	particle b02q die
+	particle b02r die
+	particle b02s die
+	particle b02t die
+	particle b02u die
+	particle b02v die
+	particle b02w die
+	particle b02x die
+	particle b02y die
+	particle b02z die
+	particle b03a die
+	particle b03b die
+	particle b03c die
+	particle b03d die
+	particle b03e die
+	particle b03f die
+	particle b03g die
+	particle b03h die
+	particle b03i die
+	particle b03j die
+	particle b03k die
+	particle b03l die
+	particle b03m die
+	particle b03n die
+	particle b03o die
+	particle b03p die
+	particle b03q die
+	particle b03r die
+	particle b03s die
+	particle b03t die
+	particle b03u die
+	particle b03v die
+	particle b03w die
+	particle b03x die
+	particle b03y die
+	particle b03z die
+	particle b04a die
+	particle b04b die
+	particle b04c die
+	particle b04d die
+	particle b04e die
+	particle b04f die
+	particle b04g die
+	particle b04h die
+	particle b04i die
+	particle b04j die
+	particle b04k die
+	particle b04l die
+	particle b04m die
+	particle b04n die
+	particle b04o die
+	particle b04p die
+	particle b04q die
+	particle b04r die
+	particle b04s die
+	particle b04t die
+	particle b04u die
+	particle b04v die
+	particle b04w die
+	particle b04x die
+	particle b04y die
+	particle b04z die
+}
+###################################lightningFlashes	
+func void b01(string ai_name)
+{
+	dprint Building01_flash
+	particle b01a start
+	sleep f9
+	particle b01a start
+	sleep f9
+	particle b01a start
+	sleep f9
+	particle b01b start
+	sleep f9
+	particle b01b start
+	sleep f9
+	particle b01b start
+	sleep f9
+	particle b01c start
+	sleep f9
+	particle b01c start
+	sleep f9
+	particle b01c start
+	sleep f9
+	particle b01d start
+	sleep f9
+	particle b01d start
+	sleep f9
+	particle b01d start
+	sleep f9
+	particle b01d start
+	sleep f9
+
+}
+func void b02(string ai_name)
+{
+	dprint Building02_flash
+	particle b02a start
+	sleep f2
+	particle b02a start
+	sleep f3
+	particle b02a start
+	sleep f3
+	particle b02a start
+	sleep f5
+	particle b02b start
+	sleep f5
+	particle b02b start
+	sleep f6
+	particle b02b start
+	sleep f6
+	particle b02b start
+	sleep f6
+	particle b02c start
+	sleep f5
+	particle b02d start
+	sleep f5
+	particle b02d start
+	sleep f4
+	particle b02e start
+	sleep f4
+	particle b02e start
+	sleep f4
+	particle b02f start
+	sleep f3
+	particle b02f start
+	sleep f3
+	particle b02f start
+	sleep f5
+	particle b02g start
+	sleep f5
+	particle b02h start
+	sleep f4
+	particle b02i start
+	sleep f4
+	particle b02j start
+	sleep f6
+	particle b02j start
+	sleep f6
+	particle b02k start
+	sleep f7
+	particle b02k start
+	sleep f6
+	particle b02l start
+	sleep f5
+	particle b02m start
+	sleep f4
+	particle b02m start
+	sleep f3
+	particle b02m start
+	sleep f5
+	particle b02n start
+	sleep f6
+	particle b02n start
+}
+func void b03a(string ai_name)
+{
+	dprint Building03_flash
+	particle b03a start
+	sleep f5
+	particle b03b start
+	sleep f5
+	particle b03a start
+	sleep f5
+	particle b03b start
+	sleep f5
+	particle b03b start
+	sleep f5
+	particle b03c start
+	sleep f5
+	particle b03c start
+	sleep f5
+	particle b03c start
+	sleep f5
+	particle b03d start
+	sleep f5
+	particle b03d start
+	sleep f5
+	particle b03d start
+	sleep f5
+	particle b03d start
+	sleep f5
+	particle b03e start
+	sleep f5
+	particle b03e start
+	sleep f5
+	particle b03f start
+	sleep f5
+	particle b03f start
+	sleep f5
+	particle b03f start
+	sleep f5
+	particle b03g start
+	sleep f5
+	particle b03g start
+	sleep f5
+	particle b03g start
+	sleep f5
+	particle b03g start
+	sleep f5
+	particle b03g start
+	sleep f5
+	particle b03h start
+	sleep f5
+	particle b03h start
+	sleep f5
+}
+func void b03b(string ai_name)
+{
+	dprint Building03_flash
+	particle b03i start
+	sleep f5
+	particle b03i start
+	sleep f5
+	particle b03j start
+	sleep f5
+	particle b03j start
+	sleep f5
+	particle b03i start
+	sleep f5
+	particle b03k start
+	sleep f5
+	particle b03k start
+	sleep f5
+	particle b03k start
+	sleep f5
+	particle b03l start
+	sleep f5
+	particle b03l start
+	sleep f5
+	particle b03m start
+	sleep f5
+	particle b03n start
+	sleep f5
+	particle b03o start
+	sleep f5
+	particle b03n start
+	sleep f5
+	particle b03m start
+	sleep f5
+	particle b03l start
+	sleep f5
+	particle b03l start
+	sleep f5
+	particle b03l start
+	sleep f5
+	particle b03k start
+	sleep f5
+	particle b03k start
+	sleep f5
+	particle b03j start
+	sleep f5
+	particle b03i start
+	sleep f5
+	particle b03i start
+	sleep f5
+	particle b03h start
+	sleep f5
+}
+
+func void l1(string ai_name)
+{
+	dprint Flash
+	particle c01 start
+	sleep f9
+	particle c01 start
+	sleep f9
+	particle c01 start
+	sleep f9
+	particle c02 start
+	sleep f9
+	particle c02 start
+	sleep f7
+	particle c03 start
+	particle c04 start
+	sleep f7
+	particle c04 start
+	sleep f7
+	particle c04 start
+	sleep f7
+	particle c02 start
+	sleep f7
+	particle c02 start
+	sleep f7
+	particle c01 start
+	particle c05 start
+}
+func void l2(string ai_name)
+{
+	dprint Flash
+	particle c06 start
+	sleep f7
+	particle c07 start
+	sleep f7
+	particle c08 start
+	sleep f7
+	particle c09 start
+	sleep f7
+	particle c10 start
+	sleep f7
+	particle c11 start
+	sleep f7
+	particle c12 start
+	sleep f7
+	particle c11 start
+	sleep f7
+	particle c10 start
+	sleep f7
+	particle c09 start
+	sleep f7
+	particle c08 start
+	sleep f7
+	particle c07 start
+	sleep f7
+
+}
+######################################
+### NINJA CLOUD COVER START SCRIPT ###
+######################################
+func void storm(string ai_name)
+{
+	dprint Starting_Storm
+	particle storm create
+	particle wind start
+}
Index: AE/packages/VanillaBSL/IGMD/roof/roof.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/roof/roof.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/roof/roof.bsl	(revision 313)
@@ -0,0 +1,942 @@
+#	rooftop
+#	scripts for level 12 by wu
+#	
+#	LEGEND
+#
+#	character naming convention: X_Yx
+#	where X = area letter (A=first area, B=second area, etc.)
+#	      Y = character type (N=ninja, T=tanker, S=striker, R=red, etc.)
+#		x = character number, usually same as character's initial patrol id
+#
+#	trigger volume scripts: t##, where ## refers to trigger volume id
+#	
+#	CONTENTS
+#	
+#	1.variables defined
+#	1b.music scripts
+#	2.start and objectives scripts
+#	3.save game scripts
+#	4.cut scene scripts
+#	5.console scripts
+#	6.trigger volume scripts
+
+###############################
+#	variables defined 	#
+###############################
+
+var int my_save_point=0;
+var int ninja1=0;
+var int ninja2=0;
+var int strike1=0;
+var int strike1b=0;
+var int strike2=0;
+var int strike3=0;
+#var int elv1_check=0;
+var int invading_counter=3;
+var int done_with_intro_cutscene = 0;
+var int go_hide;
+var int go_hide2;
+
+###############################
+#		music		 	#
+###############################
+
+func void music_first(void)
+{
+	sound_music_start mus_cool19 0.0
+	sound_music_volume mus_cool19 0.75 3.0
+#	stopped at tanker death or timer
+}
+
+func void music_first_timer(void)
+{
+	sleep 1800
+	music_stop
+}
+
+func void music_gauntlet(void)
+{
+	sound_music_start mus_atm_cl12lp 0.0
+	sound_music_volume mus_atm_cl12lp 0.75 3.0
+#	this music stopped in t14
+}
+
+func void music_billboard(void)
+{
+	sound_music_start mus_low1 0.0
+	sound_music_start mus_low1 0.75 3
+#	this music stopped in ta2_54 script
+}
+
+func void music_battle(void)
+{
+	sound_music_start mus_fitec
+#	this music stopped in outro
+}
+
+func void music_stop(void)
+{
+	dprint STOP_THE_MUSIC
+	sound_music_stop mus_cool19
+	sound_music_stop mus_atm_cl12lp
+	sound_music_stop mus_low1
+	sound_music_stop mus_fitec
+}
+
+###############################
+#	start and objectives	#
+###############################
+func void start(string ai_name)
+{
+	dprint start	
+	
+	particle el1_locklight01 do start
+	door_lock 6
+
+	my_save_point = save_point;
+
+	if (my_save_point eq 0)
+	{
+		set_objective_1
+		powerup_spawn lsi 605 
+	}
+
+	if (my_save_point eq 1)
+	{
+		dprint restore1
+		set_objective_1
+		done_with_intro_cutscene = 1;
+		fork intro_taunt
+		restore_game
+		powerup_spawn lsi 605 
+	}
+
+	if (my_save_point eq 2)
+	{
+		done_with_intro_cutscene = 1;
+		dprint restore2
+		set_objective_1
+		chr_delete A_Sr9
+		chr_delete A_N1
+		chr_delete IntroNinja
+		ai2_spawn C_T16
+		ai2_spawn C_Sr15
+		ai2_spawn C_R55
+		ai2_spawn C_N57
+		trigvolume_enable trigger_volume_13 0
+		door_lock 3
+		restore_game
+		powerup_spawn lsi 605 
+	}
+
+	if (my_save_point eq 3)
+	{
+		done_with_intro_cutscene = 1;
+		dprint restore3
+		set_objective_3
+		chr_delete A_Sr9
+		chr_delete A_N1
+		chr_delete IntroNinja
+		trigvolume_enable trigger_volume_79 0
+		restore_game
+	}
+
+	if (my_save_point eq 4)
+	{
+		done_with_intro_cutscene = 1;
+		dprint restore4
+		chr_delete A_Sr9
+		chr_delete A_N1
+		chr_delete IntroNinja
+		trigvolume_enable trigger_volume_28 0
+		ai2_spawn OutroNinja
+		chr_boss_shield OutroNinja
+		music_battle
+		gs_farclipplane_set 500
+		door_lock 2
+		restore_game
+	}
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+
+func void you_win(int char_index)
+{
+	outro
+	win
+}
+
+func void set_objective_1(string ai_name)
+{
+	dprint set_objective_1
+	objective_set(1)
+	target_set (7006,0.0)
+}
+
+func void set_objective_2(string ai_name)
+{
+	dprint set_objective_2
+	objective_set(2)
+	target_set (7006,0.0)
+}
+
+func void set_objective_3(string ai_name)
+{
+	dprint set_objective_3
+	objective_set(3)
+	target_set (7006,0.0)
+}
+
+###################
+#	save game	#
+###################
+
+func void s1(string ai_name)
+{
+	dprint SAVEDGAME1	
+
+	if (my_save_point ne 1)
+	{
+		save_game 1 autosave
+	}
+}
+
+func void s2(string ai_name)
+{
+	dprint SAVEDGAME2	
+
+	if (my_save_point ne 2)
+	{
+		save_game 2 autosave
+	}
+}
+
+func void s3(string ai_name)
+{
+	dprint SAVEDGAME3	
+
+	if (my_save_point ne 3)
+	{
+		save_game 3 autosave
+	}
+}
+
+func void s4(string ai_name)
+{
+	dprint SAVEDGAME4	
+
+	if (my_save_point ne 4)
+	{
+		save_game 4 autosave
+	}
+}
+
+##########################
+#	cut scene scripts  #
+##########################
+
+func void t12(string ai_name)
+{
+	dprint t12_elevator
+	if (trigvolume_count(62) eq 0)
+	{
+		trigvolume_enable trigger_volume_12 0
+		sleep 7
+		trigvolume_corpse 62
+		dprint delete_oldAI
+		chr_delete B_R11
+		chr_delete B_R12a
+		chr_delete B_Sr10
+		chr_delete B_Sr10a
+		chr_delete B_T13
+		chr_delete B_Sr12
+		chr_delete B_N17
+		chr_delete B_N18	
+		chr_delete A_N8
+		chr_delete A_T4
+		chr_delete A_Sr3
+		chr_delete C_N17
+		chr_delete C_N18
+		Elevator
+		target_set(47,0.0)
+		ai2_spawn C_Sr15
+		ai2_spawn C_T16
+		ai2_spawn C_R55
+		ai2_spawn C_N57
+	}
+}
+
+func void t17(string ai_name)
+{
+	dprint t17_KonokoZip
+	if (chr_has_lsi(0))
+	{
+		KonokoZip
+		chr_delete D_C19
+		chr_delete D_C60
+		chr_delete D_N25
+		chr_delete D_R21
+		chr_delete D_Sb20
+		chr_delete D_Sb22
+		chr_delete D_Sb23
+		chr_delete D_Sr24
+		chr_delete D_Sr26
+		chr_delete D_Sr27
+		chr_delete D_Sr38
+		chr_delete D_T28
+		set_objective_3
+	}
+}
+
+func void t27(string ai_name)
+{
+	dprint t27_ElevatorFinalFight
+	ai2_spawn SuperNinja
+#	Elevator cut scene
+#	I'm backing him into a corner.  This isn't going to be pretty..."
+
+	chr_teleport 0 96
+
+}
+
+
+###################
+#	console	#
+###################
+
+#########################
+#  trigger volume stuff #
+#########################
+
+func void t28(string ai_name)
+{
+	chr_wait_animtype char_0 Pickup_Object
+	particle obj_zip create
+}
+
+func void runup(void)
+{
+	ai2_dopath B_Sr10 patrol_10z
+	ai2_setjobstate B_Sr10
+}
+
+func void t1(string ai_name)
+{
+	dprint t1 
+	ai2_dopath A_N1 patrol_02
+	ai2_setjobstate A_N1
+	ai2_dopath IntroNinja patrol_40
+	ai2_setjobstate IntroNinja
+	if (strike1b eq 1)
+	{	
+		dprint strike1b
+		ai2_dopath A_Sr9 patrol_09
+		ai2_setjobstate A_Sr9
+	}
+	sleep 300
+	if (ninja1 ne 0)
+	{
+		dprint ninja1_failed_trying_again
+		ai2_dopath IntroNinja patrol_40
+		ai2_setjobstate IntroNinja
+	}
+
+	if (ninja2 ne 0)
+	{
+		dprint ninja2_failed_trying_again
+		ai2_dopath A_N1 patrol_02
+		ai2_setjobstate A_N1
+	}
+}
+
+func void patrolscript0001(string ai_name)
+{
+	dprint patrolscript0001_t1
+	playback_block IntroNinja ninja_jump5 interp 30
+#	ai2_makeignoreplayer A_N1 0
+}
+
+func void patrolscript0002(string ai_name)
+{
+	dprint patrolscript0002_t1
+	playback_block A_N1 ninja_jump interp 30
+#	ai2_makeignoreplayer A_N1 0
+}
+
+func void t2(string ai_name)
+{
+	dprint t2
+	trigvolume_enable trigger_volume_03 0
+	ai2_spawn A_C5
+}
+
+func void t3(string ai_name)
+{
+	dprint t3
+	trigvolume_enable trigger_volume_02 0
+	ai2_spawn A_Sr3
+}
+
+func void t4(string ai_name)
+{
+	dprint t4	
+	trigvolume_enable trigger_volume_05 0
+	ai2_spawn A_T6
+	chr_delete A_Sr9
+	chr_delete A_N1
+	chr_delete IntroNinja
+
+}
+
+func void patrolscript0004(string ai_name)
+{
+	dprint patrolscript0004	
+	playback_block A_T6 tanker2 interp 20
+
+}
+
+func void t5(string ai_name)
+{
+	dprint t5	
+	trigvolume_enable trigger_volume_04 0
+	ai2_spawn A_T4
+	chr_delete A_Sr9
+	chr_delete A_N1
+	chr_delete IntroNinja
+
+}
+
+func void patrolscript0005(string ai_name)
+{
+	dprint patrolscript0005	
+	playback_block A_T4 tanker1 interp 20
+
+}
+
+func void t6(string ai_name)
+{
+	dprint t6
+	ai2_spawn A_N7
+	trigvolume_enable trigger_volume_07_copy 0
+
+}
+
+func void t7(string ai_name)
+{
+	dprint t7
+	ai2_spawn A_N8
+	trigvolume_enable trigger_volume_06 0
+}
+
+func void t8(string ai_name)
+{
+	dprint t8
+	ai2_spawn B_Sr10
+	ai2_spawn B_Sr10a
+	ai2_spawn B_R11
+	ai2_spawn B_R12a
+	ai2_dopath A_T6 patrol_42
+	ai2_setjobstate A_T6
+	ai2_dopath A_T4 patrol_42
+	ai2_setjobstate A_T4
+#	ai2_dopath A_Sr3 patrol_44
+	ai2_setjobstate A_Sr3
+#	ai2_dopath A_C5 patrol_44
+	ai2_setjobstate A_C5
+	ai2_dopath A_N7 patrol_45
+	ai2_setjobstate A_N7
+	ai2_dopath A_N8 patrol_45
+	ai2_setjobstate A_N8
+}
+
+func void t9(string ai_name)
+{
+	dprint t9
+	ai2_spawn E_N37
+	ai2_makeignoreplayer E_N37 1
+	playback_block E_N37 ninja_jump2
+	ai2_makeignoreplayer E_N37 0
+	ai2_attack E_N37 char_0
+}
+
+func void t10(string ai_name)
+{
+	dprint t10
+	# "I lost him. Wait! There he is."
+	sound_dialog_play c11_39_03konoko
+	ai2_spawn B_Sr12
+	ai2_spawn B_T13
+	ai2_spawn B_SuperNinja
+	chr_boss_shield B_SuperNinja
+	chr_unstoppable B_SuperNinja 1
+	chr_neutral B_SuperNinja 1
+	playback_block B_SuperNinja superninja1 interp 20
+	sleep 60
+	chr_delete B_SuperNinja
+
+}
+
+func void t11(string ai_name)
+{
+	dprint t11
+	ai2_spawn C_N17
+	ai2_spawn C_N18
+	ai2_dopath B_T13 patrol_41
+	ai2_setjobstate B_T13
+}
+
+func void patrolscript0011(string ai_name)
+{
+	dprint patrolscript0011
+	playback_block B_T13 tanker_jump interp 30
+
+}
+
+func void t14(string ai_name)
+{
+	dprint t14
+	music_stop
+	target_set (1,0.0)
+	chr_delete C_N57
+	chr_delete C_Sr15
+	chr_delete C_T16
+	chr_delete C_R55
+	ai2_dopath D_Sb20 patrol_35
+	ai2_spawn D_Sr38
+	ai2_spawn D_C60
+}
+
+func void patrolscript0014(string ai_name)
+{
+	dprint patrolscript0014	
+	playback_block D_Sb20 striker_jump interp 20
+}
+
+func void t15(string ai_name)
+{
+	dprint t15
+	ai2_spawn E_N14
+	ai2_spawn E_N14a
+	ai2_passive E_N14 1
+	#ai2_passive E_N14a 1
+	ai2_spawn NinjaZip
+	ai2_passive NinjaZip 1
+	chr_unstoppable NinjaZip 1
+	playback NinjaZip NinjaZipSet
+	playback E_N14 Ninja02Set
+
+}
+
+#func void patrolscript0016(string ai_name)
+#{
+#	dprint patrolscript0016	
+#	playback_block E_N14 LSIninja interp 20
+#}
+
+func void t18(string ai_name)
+{
+	dprint t18
+	music_gauntlet
+	ai2_spawn D_C19
+	ai2_spawn D_Sb20
+	ai2_spawn D_R21
+	ai2_spawn D_Sb22
+	ai2_spawn D_Sb23
+	ai2_spawn D_Sr24
+}
+
+func void t19(string ai_name)
+{
+	dprint t19
+	music_billboard
+	ai2_spawn D_N25
+	ai2_spawn C_R61
+}
+
+func void t20(string ai_name)
+{
+	dprint t20
+	music_stop
+	ai2_spawn D_Sr26
+	ai2_spawn D_Sr27
+	ai2_spawn D_T28
+}
+
+func void cantescape_dialog(void)
+{
+	sleep 120
+	# "He can't escape me. But why?"
+	sound_dialog_play c11_39_04konoko
+}
+
+func void t21(string ai_name)
+{
+	dprint t21_E_SuperNinja
+	fork cantescape_dialog
+	ai2_spawn E_N29
+	ai2_spawn E_Sb31
+	ai2_spawn E_Sr63
+	ai2_spawn E_Sr64
+	ai2_spawn E_R65
+	ai2_spawn E_SuperNinja
+	chr_boss_shield E_SuperNinja
+	chr_unstoppable E_SuperNinja
+	playback_block E_SuperNinja superninja2 interp 20
+	sleep 60
+	chr_delete E_SuperNinja
+
+}
+
+func void t22(string ai_name)
+{
+	dprint t22
+	ai2_dopath IntroNinja patrol_39
+	ai2_setjobstate IntroNinja
+
+}
+
+func void patrolscript0022(string ai_name)
+{
+	dprint patrolscript0022
+	playback_block IntroNinja ninja_jump4 interp 20
+
+}
+
+func void t23(string ai_name)
+{
+	dprint t23
+	ai2_spawn E_Sr30
+
+}
+
+func void t24(string ai_name)
+{
+	dprint t24
+	# "He knows I can feel him. That we are... rivals? Natural enemies?"
+	sound_dialog_play c11_39_08konoko
+	ai2_spawn E_R32
+	ai2_dopath E_Sr33 patrol_34
+	ai2_setjobstate E_Sr33
+}
+
+func void t25(string ai_name)
+{
+	dprint t25
+	ai2_spawn E_Sr33
+	ai2_dopath E_Sr30 patrol_34
+	ai2_setjobstate E_Sr30
+}
+
+func void t29(string ai_name)
+{
+	dprint t29
+	# "There's something familar about him, I can't quite place it."
+	sound_dialog_play c11_39_05konoko
+}
+
+func void t30(string ai_name)
+{
+	dprint t30_D_SuperNinja
+	# "Where... ? Ah! Over there!"
+	sound_dialog_play c11_39_01konoko
+	ai2_spawn D_SuperNinja
+	chr_boss_shield D_SuperNinja
+	chr_unstoppable D_SuperNinja 1
+	playback_block D_SuperNinja superninja1b interp 20
+	sleep 60
+	chr_delete D_SuperNinja
+
+}
+
+func void t31(string ai_name)
+{
+	dprint t31
+	ai2_spawn A_N43
+}
+
+func void t32in(string ai_name)
+{
+	dprint t32in
+	ninja1 = ninja1 + 1
+}
+
+func void t32out(string ai_name)
+{
+	dprint t32out
+	ninja1 = ninja1 - 1
+}
+
+func void t33in(string ai_name)
+{
+	dprint t33in
+	ninja2 = ninja2 + 1
+}
+
+func void t33out(string ai_name)
+{
+	dprint t33out
+	ninja2 = ninja2 - 1
+}
+
+func void ninja1_die(string ai_name)
+{
+	dprint ninja1_die
+	ninja1 = 0
+}
+
+func void ninja2_die(string ai_name)
+{
+	dprint ninja2_die
+	ninja2 = 0
+}
+
+func void t57(string ai_name)
+{
+	dprint t57
+	strike1=1
+	sleep 120
+	if (strike1 eq 1)
+	{
+		ai2_dopath A_Sr9 patrol_48
+		ai2_setjobstate A_Sr9
+	}
+}
+
+func void t57b(string ai_name)
+{
+	dprint t57b
+	strike1=0
+	strike1b=1
+}
+
+
+func void t58(string ai_name)
+{
+	dprint t58
+	music_first
+#	ai2_makeignoreplayer A_Sr9 1
+#	ai2_makeignoreplayer A_N1 1
+#	ai2_makeignoreplayer IntroNinja 1
+	ai2_dopath A_Sr9 patrol_49
+	ai2_setjobstate A_Sr9
+	ai2_dopath A_N1 patrol_50
+	ai2_setjobstate A_N1
+	ai2_dopath IntroNinja patrol_51
+	ai2_setjobstate IntroNinja
+#	sleep 15
+#	ai2_makeignoreplayer A_Sr9 0
+#	ai2_makeignoreplayer A_N1 0
+#	ai2_makeignoreplayer IntroNinja 0
+	music_first_timer
+
+}
+
+func void t83(string ai_name)
+{
+	dprint checking
+	go_hide =  go_hide + 1;
+	if(trigvolume_count (83) ne 0)
+	{
+		dprint t83
+		if(go_hide eq 0)
+		{
+			ai2_makeignoreplayer (ai_name,1)
+			ai2_dopath (ai_name,patrol_13b)
+			ai2_setjobstate (ai_name)
+			ai2_forget (ai_name)
+			sleep 60
+			ai2_makeignoreplayer (ai_name,0)
+		}
+		if(go_hide eq 1)
+		{
+			ai2_makeignoreplayer (ai_name,1)
+			ai2_dopath (ai_name,patrol_12b) 
+			ai2_setjobstate (ai_name)
+			ai2_forget (ai_name)
+			sleep 60
+			ai2_makeignoreplayer (ai_name,0)
+		}
+	}
+}
+
+func void t83b(string ai_name)
+{
+	dprint t83B
+	go_hide =  go_hide - 1;
+}
+
+func void t84(string ai_name)
+{
+	dprint checking
+	go_hide2 =  go_hide2 + 1;
+	sleep 60
+	if(trigvolume_count (84) ne 0)
+	{
+		dprint t84
+		if(go_hide2 eq 0)
+		{
+			ai2_makeignoreplayer (ai_name,1)
+			ai2_dopath (ai_name,patrol_69)
+			ai2_setjobstate (ai_name)
+			ai2_forget (ai_name)
+			sleep 60
+			ai2_makeignoreplayer (ai_name,0)
+		}
+		if(go_hide2 eq 1)
+		{
+			ai2_makeignoreplayer (ai_name,1)
+			ai2_dopath (ai_name,patrol_70) 
+			ai2_setjobstate (ai_name)
+			ai2_forget (ai_name)
+			sleep 60
+			ai2_makeignoreplayer (ai_name,0)
+		}
+		if(go_hide2 eq 2)
+		{
+			ai2_makeignoreplayer (ai_name,1)
+			ai2_dopath (ai_name,patrol_71) 
+			ai2_setjobstate (ai_name)
+			ai2_forget (ai_name)
+			sleep 60
+			ai2_makeignoreplayer (ai_name,0)
+		}
+	}
+}
+
+func void t84b(string ai_name)
+{
+	dprint t84B
+	go_hide2 =  go_hide2 - 1;
+}
+
+func void t85(string ai_name)
+{
+	dprint t85
+	ai2_spawn sbg_ninja
+}
+func void t59(string ai_name)
+{
+	dprint t59
+	strike2=1
+	sleep 120
+	if (strike2 eq 1)
+	{
+		ai2_dopath A_Sr3 patrol_52
+		ai2_setjobstate A_Sr3
+		ai2_dopath A_C5 patrol_52
+		ai2_setjobstate A_C5
+	}
+}
+
+func void t59b(string ai_name)
+{
+	dprint t59b
+	strike2=0
+}
+
+func void t60(string ai_name)
+{
+	dprint t60
+	strike3=1
+	sleep 120
+	if (strike3 eq 1)
+	{
+		ai2_dopath B_Sr12 patrol_53
+		ai2_setjobstate B_Sr12
+	}
+}
+
+func void t60b(string ai_name)
+{
+	dprint t60b
+	strike3=0
+}
+
+func void t63(string ai_name)
+{
+	if (trigvolume_count(64) eq 0)
+	{
+		trigvolume_enable trigger_volume_63 0
+		dprint t63
+		chr_delete E_R32
+		chr_delete E_Sr33
+		chr_delete E_Sr30
+		door_unlock 6
+	}
+}
+
+func void t65(string ai_name)
+{
+	dprint t65
+	chr_teleport C_R55 7013
+	ai2_dopath C_R55 patrol_56
+	ai2_setjobstate C_R55
+}
+
+func void t77(string ai_name)
+{
+	dprint t77
+	ai2_dopath D_R21 patrol_58
+}
+
+func void t78(string ai_name)
+{
+	dprint t78
+	ai2_dopath D_R21 patrol_59
+}
+
+func void minus_invading_counter(string ai_name)
+{
+	invading_counter = invading_counter - 1
+
+	if (invading_counter eq 0)
+	{
+		invading_dialog();
+	}
+}
+
+func void invading_dialog(void)
+{
+	invading_counter = 0;
+	trigvolume_enable trigger_volume_95 0
+
+	sleep 90
+	# "It's like this is his territory, and I'm invading."
+	sound_dialog_play c11_39_06konoko
+}
+
+func void t95(string ai_name)
+{
+	dprint t95
+
+	invading_dialog();
+}
+
+func void t96(string ai_name)
+{
+	dprint t96
+	# "He's... angry! I can _taste_ his frustration."
+	sound_dialog_play c11_39_07konoko
+}
+
+func void patrolscript0077(string ai_name)
+{
+	dprint 0077
+	ai2_dopath D_R21 patrol_21
+	ai2_setjobstate D_R21
+}
+
+func void t80(string ai_name)
+{
+	dprint t78
+	ai2_spawn E_C62
+	playback E_C62 com
+	
+}
+
Index: AE/packages/VanillaBSL/IGMD/roof/roof_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/roof/roof_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/roof/roof_cutscene.bsl	(revision 313)
@@ -0,0 +1,340 @@
+#
+#
+# roof_cutscene.bsl
+#
+
+func void intro_roll_sounds(void)
+{
+	sleep 252
+	sound_impulse_play kon_roll
+	sleep 3
+	sound_impulse_play kon_roll
+}
+
+func void
+intro_taunt(
+	void)
+{
+	chr_envanim_stop IntroNinja
+	chr_teleport IntroNinja 600
+	chr_facetoflag IntroNinja 600
+	chr_animate IntroNinja NINCOMcrouch_idle
+
+	ai2_passive IntroNinja 1
+	ai2_setmovementmode IntroNinja creep
+	sleep f40
+	playback_block IntroNinja IntroNinja
+	ai2_passive IntroNinja 0
+
+	ai2_attack IntroNinja 0
+}
+
+func void
+intro(
+	void)
+{
+	fade_out 0 0 0 0
+	cm_interpolate IntroCam01 0
+	sleep 14
+	begin_cutscene
+	ai2_spawn IntroNinja
+	#sound_ambient_start c08_11_19zip
+	sleep 30
+	fade_in 120
+	obj_create 81 81
+	env_anim 81 81
+	cm_anim both IntroCam01
+	chr_envanim 0 IntroKonBip01 norotation
+	chr_animate 0 KONOKOlev12_Intro
+	chr_envanim IntroNinja IntroNinBip01 norotation
+	chr_animate IntroNinja NINJAlev12_Intro
+	fork intro_roll_sounds
+	sleep f30
+	sound_ambient_start c08_11_19zip
+	cm_anim_block both IntroCam02
+	cm_wait
+	cm_reset
+	playback 0 IntroKonoko
+	done_with_intro_cutscene = 1;
+	trigvolume_reset death_fall_trigger_67
+	end_cutscene
+	fork intro_taunt
+	s1
+}
+
+func void
+camcontrol(
+	void)
+{
+	cm_anim both IntroCam01
+	cm_anim_block both IntroCam02
+	cm_wait
+}
+
+
+
+func void
+Elevator(
+	void)
+{
+	begin_cutscene
+	sleep 10
+	# "It's strange, I can almost feel him out there, creeping from shadow to shadow..."
+	sound_dialog_play c11_39_02konoko
+	playback 0 ElevatorKonokoSet
+	cm_interpolate ElevatorCam01 0
+	sleep 10
+	chr_envanim 0 ElevatorKonBox01
+	obj_create 31 31
+	obj_shade 31 31 .4 .4 .4
+	env_anim 31 31
+	sound_ambient_start first_elevator
+	cm_anim both ElevatorCam01
+	sleep 220
+	obj_kill 31 31
+	env_show 31 1
+	cm_reset
+	sleep 10
+	end_cutscene
+}
+
+
+
+
+func void
+NinjaZip(
+	void)
+{
+	chr_envanim NinjaZip ZipNinjaBipBox norotation
+	chr_animate NinjaZip NINJAlev12_zip
+	obj_create 72 72
+	env_anim 72 72
+	sleep 60
+	playback E_N14 Ninja02Jump
+	sleep 80
+	ai2_passive E_N14 0
+	sleep 100
+	playback NinjaZip NinjaZipLeave
+	sleep 120
+	chr_delete NinjaZip
+}
+
+func void
+KonokoZip(
+	void)
+{
+	particle obj_zip kill
+	begin_cutscene
+	sleep 10
+	cm_anim both KonZipCam01
+	chr_envanim 0 ZipKonBipBox norotation
+	chr_animate 0 KONOKOlev12_zip
+	obj_create 71 71
+	env_anim 71 71
+	sleep 55
+	sound_ambient_start c08_11_19zip
+	sleep 235
+
+	# CB: kill ninja's zip so we don't get Z fighting on superposed objects
+	obj_kill 72 72
+
+	cm_reset
+	end_cutscene
+}
+
+func void pretty_sayline(void)
+{
+	sleep 180
+	# "I'm backing him into a corner. This isn't going to be pretty."
+	sound_dialog_play c11_39_09konoko
+	sound_dialog_play_block pause
+	sleep 30
+	door_open 2
+	door_jam 2
+}
+
+func void
+ninja(
+	void)
+{
+	begin_cutscene
+	sleep 10
+	fork pretty_sayline
+	fork storm
+	ai2_spawn OutroNinja
+	chr_boss_shield OutroNinja
+	ai2_allpassive 1
+	playback OutroNinja SuperNinjaSet
+	chr_nocollision OutroNinja 1
+	#konokoenters elevator
+	#cm_interpolate SuperCam00 0
+	#playback 0 SuperKonokoEnter
+	chr_envanim 0 SuperKonBox01
+	gs_farclipplane_set 500
+	obj_create 41 41
+	obj_shade 41 41 .4 .4 .4
+	env_anim 41 41
+	sound_ambient_start c08_20_27elevator
+	cm_anim both SuperCam00
+	cm_wait
+	obj_kill 41 41
+	env_show 41 1
+	cm_interpolate SuperNinjaCam01 180
+	sleep 120
+	#all you have done is force me to fight
+	sound_dialog_play c11_40_01superninja
+	cinematic_start (BOSS2face, 180, 180, 19, 7, 20, false)
+	sleep 60
+	playback 0 SuperKonokoSet
+	sound_dialog_play_block pause
+	#Konoko who are you
+	cm_interpolate SuperCamKonokoSet 0
+	door_close 2
+	door_lock 2
+	sound_dialog_play c11_40_02konoko
+	cinematic_start (KONtalking, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block pause
+	cinematic_stop (KONtalking, 20, 20)
+	#Super Ninja goes around
+	playback OutroNinja SuperNinjaWalk
+	sleep 40
+	playback 0 SuperKonokoWalk
+	#ninja talks
+	sound_dialog_play c11_40_03superninja
+	cinematic_stop (BOSS2face, 7, 0)
+	cinematic_start (BOSS2face, 180, 180, 7, 9, 2, false)
+	cm_interpolate SuperCamWalkOut02 0
+	cm_interpolate_block SuperCamWalkOut02b 800
+	sound_dialog_play_block pause
+	#konoko answers
+	sound_dialog_play c11_40_04konoko
+	cinematic_start (KONtalking, 180, 180, 16, 3, 20, true)
+	sound_dialog_play_block pause
+	cinematic_stop (KONtalking, 16, 20)
+	#super ninja we writhe
+	sound_dialog_play c11_40_05superninja
+	#cm_interpolate_block SuperCamWalkOut02b 800
+	sound_dialog_play_block pause
+	cm_interpolate SuperCamWalkOut02b 800
+	#Konoko says you're a thug
+	sound_dialog_play c11_40_06konoko
+	cinematic_start (KONangry, 180, 180, 16, 3, 20, true)
+	cm_interpolate SuperCamWalkOut03 0
+	cm_interpolate_block SuperCamWalkOut03b 600
+	sound_dialog_play_block pause
+	cinematic_stop (KONtalking, 16, 20)
+	#ninja says we'll see about that
+	sound_dialog_play c11_40_07superninja
+	sound_dialog_play_block pause
+	cinematic_stop (BOSS2face, 19, 15)
+	#gameplay setup
+	playback 0 SuperKonokoEnd
+	cm_reset
+	end_cutscene
+	sleep 20
+	chr_animate OutroNinja NINCOMteleport_in 47
+	music_battle
+	sleep 40
+	playback OutroNinja SuperNinjaDone
+	chr_animate OutroNinja NINCOMteleport_out 31
+	chr_nocollision OutroNinja 0
+
+	dprint SAVEDGAME4	
+	save_game 4 autosave
+}
+
+
+func void
+test(
+	void)
+{
+	chr_envanim 0 ZipKonBipBox norotation
+	sleep 120
+	playback 0 IntroKonoko
+}
+
+
+func void
+deathfall(
+	void)
+{
+	if (done_with_intro_cutscene eq 1)
+	{
+		sleep 30
+		cm_detach
+		sleep 30
+		chr_set_health 0 0
+	}
+}
+
+
+func void
+outro(
+	void)
+{
+	sound_music_volume mus_fitec 0.0 1.0
+	music_stop
+	begin_cutscene
+	chr_animate OutroNinja NINCOMteleport_in 31	
+	sleep 10
+	#spawn teleported Ninja and add some glowy bits
+	chr_envanim OutroNinja OutroNinjaBox01
+	chr_animate OutroNinja NINCOMteleport_out 31
+	sleep 10
+	cm_interpolate OutroCam01 0
+	sleep 10
+	chr_envanim OutroNinja OutroNinjaBox01 norotation
+	chr_animate OutroNinja NINJAlev12_Outro1
+	sound_ambient_start ninja_cd_scene
+	cm_anim both OutroCam01
+	sleep 208
+	obj_create 481 481
+	env_anim 481 481
+	cm_interpolate OutroCamDisk 90
+	chr_envanim OutroNinja OutroNinjaBox02 norotation
+	chr_animate OutroNinja NINJAlev12_Outro2 900
+	#Konoko patrol to flag 2000
+	#chr_teleport 0 2000
+	playback 0 OutroKonoko01
+	sleep 100
+	sleep 70
+	#camera cut here to Konoko's face
+	cm_interpolate OutroCam02 0
+	#sleep 30
+	#playback 0 OutroKonoko02
+	sleep 50
+	cinematic_start (KONtalking, 180, 180, 18, 6, 15, true)
+	sound_dialog_play c11_41_01konoko
+	sleep 300
+	#camera cut here to Konoko and Ninja
+	cm_interpolate OutroCam03 0
+	cm_interpolate_block OutroCam04 800
+	chr_envanim OutroNinja OutroNinjaBox02 norotation
+	chr_animate OutroNinja NINJAlev12_Outro2 1300
+	sound_dialog_play_block
+	# Camera cut as Konoko steps on Ninja
+	#Add sound of Konoko saying she has nothing in common
+	sound_dialog_play c11_41_01bkonoko
+	cinematic_stop (KONtalking, 18, 20)
+	cinematic_start (KONintense, 180, 180, 18, 6, 15, true)
+	cm_anim both OutroCam05
+	chr_envanim 0 OutroKonBox01 norotation
+	chr_animate 0 KONOKOlev12_Outro1
+	chr_envanim OutroNinja OutroNinjaBox03 norotation
+	chr_animate OutroNinja NINJAlev12_Outro3
+	sleep 175
+	sound_ambient_start c09_36_26neckbreak
+	sleep 100
+	#Camera cut to Konoko's face
+	playback 0 OutroKonoko02
+	chr_animate OutroNinja STRIKEfallen_front 540
+	cm_interpolate OutroCam06 0
+	sleep 60
+	sound_dialog_play c11_41_02konoko
+	cinematic_stop (KONintense, 18, 10)
+	sleep 60
+	fade_out 0 0 0 120	
+	sleep 120
+	win
+}
+
Index: AE/packages/VanillaBSL/IGMD/roof/roof_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/roof/roof_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/roof/roof_main.bsl	(revision 313)
@@ -0,0 +1,22 @@
+#
+# power_main.bsl
+#
+
+func void
+main(
+	void)
+{
+	env_shade 1500 1501 .9 .8 .9
+	gl_fog_blue=0
+	gl_fog_red=0
+	gl_fog_green=0
+	gl_fog_start=.975
+	gs_farclipplane_set 900
+	start
+	if (my_save_point eq 0)
+	{
+		fork intro	
+	}
+	env_show 31 0
+	env_show 41 0
+}
Index: AE/packages/VanillaBSL/IGMD/state/state_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/state/state_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/state/state_cutscene.bsl	(revision 313)
@@ -0,0 +1,411 @@
+#
+# state_cutscene.bsl
+#
+
+var int face_count_dead;
+
+func void
+state_cs_intro(
+	void)
+{
+	trigvolume_enable trig_vol_17 0
+	trigvolume_enable trig_vol_19 0
+	trigvolume_enable trigger_volume_99 0
+	begin_cutscene
+	cutscene_sync off
+	fade_out 0 0 0 0
+	sleep 120
+	#Griffin talks
+	cinematic_start(GRIFtalkangry, 180, 180, 16, 3, 30, true)
+	sound_dialog_play c10_34_01griffin
+	sound_dialog_play_block pause
+	#Kerr responds
+	sleep 20
+	#cinematic_start(KERRtalking, 180, 180, 19, 7, 10, false)
+	cinematic_start(KERRtalking, 180, 180, 15, 1, 10, false)
+	sound_dialog_play c10_34_02kerr
+	sound_dialog_play_block pause
+	#Griffin talks again
+	sleep 20
+	sound_dialog_play c10_34_03griffin
+	sleep 400
+
+	#Make characters for cut-scene
+	sound_music_start mus_main02_hd 1.0
+	chr_create 102 start
+	sleep 10
+	#ninja runs out of scene
+	playback 102 IntroNinja
+	playback 0 IntroKonoko
+	chr_nocollision 0 1
+	fade_in 120
+	cm_anim both Camout01
+	sleep 120
+	cinematic_stop (GRIFtalkangry, 16, 10)
+	cinematic_stop (KERRtalking, 15, 10)
+	cm_wait
+	chr_delete 102	
+	cm_anim both Camout02
+	cm_wait
+	cm_interpolate Camin03 0
+	#change this amount to work with cutscene
+	sleep 170	
+	sleep 60
+	#security shows up behind Konoko
+	ai2_spawn IntroSec1
+	ai2_spawn IntroSec2
+	sleep 10
+	cm_interpolate Camin04 0
+	playback 0 IntroKonoko02
+	sleep 30
+	sound_dialog_play c10_34_05secguard2
+	sound_dialog_play_block pause
+	chr_animate IntroSec2 SECURIlev11_intro
+	cm_interpolate Camin05 0
+	#put security guard talking here
+	cinematic_start(SEC2talking, 180, 180, 15, 1, 30, true)
+	sound_dialog_play c10_34_04secguard1
+	sound_dialog_play_block pause
+	#Konoko says I don't have time for this
+	cm_interpolate IntroCamNotime 0
+	cinematic_start (KONintense, 180, 180, 20, 8, 20, true)
+	sound_dialog_play c10_34_06konoko
+	sound_dialog_play_block pause
+	#Security says something
+	sound_dialog_play c10_34_07secguard1
+	sound_dialog_play_block pause
+	cinematic_stop (SEC2talking, 15, 30)
+	#your call
+	cm_interpolate IntroCamCall01 0
+	cm_interpolate_block IntroCamCall02 90
+	sleep 70
+	sound_dialog_play c10_34_08konoko
+	sound_dialog_play_block pause
+	cinematic_stop (KONintense, 20,20)
+	sleep 20
+	cm_reset 0
+	#chr_delete 102
+	chr_nocollision 0 0
+	trigvolume_enable trig_vol_17 1
+	trigvolume_enable trig_vol_19 1
+	trigvolume_enable trigger_volume_99 1
+	end_cutscene
+	set_objective_1
+}
+
+
+func void
+dog(string ai_name)
+{
+	particle obj1 kill
+	begin_cutscene
+	chr_forceholster 0 1
+	chr_nocollision 0 1
+	sleep 30
+	#Konoko uses console
+	playback 0 DogKonokoSet
+	cm_interpolate DogCamLeftHigh 0
+	cm_interpolate_block DogCamRightHigh 400
+	sleep 10
+	chr_animate 0 KONOKOlev11_cnsl_start 68
+	chr_animate_block 0 KONOKOlev11_cnsl_idle 300
+	#sleep 30
+	#Konoko talks
+	cinematic_start (KONintense, 180, 180, 19, 7, 20, false)
+	sound_dialog_play c10_35_01aKonoko
+	sleep 90
+	chr_animate 0 KONOKOlev11_cnsl_type 120
+	chr_animate_block 0 KONOKOlev11_cnsl_idle 800 8
+	sleep 120
+	cm_interpolate DogCamRight 0
+	cm_interpolate_block DogCamLeft 500
+	#Konoko senses the watchdog
+	sound_dialog_play_block c10_35_01bKonoko
+	chr_animate 0 KONOKOlev11_cnsl_type 120
+	chr_animate_block 0 KONOKOlev11_cnsl_type 800 8
+	#camera switches to show Ninja
+	chr_create 1030 start
+	playback 1030 DogNinjaSet
+	chr_animate 1030 NINJAlev11_cnsl_type 400
+	cm_interpolate DogCamNinjaRight 0
+	cm_interpolate_block DogCamNinjaLeft 360
+	sleep 360
+	#Konoko says no
+	cm_interpolate DogCamLeftHigh 0
+	cm_interpolate_block DogCamRight 800
+	sound_dialog_play_block c10_35_01cKonoko
+	chr_animate 0 KONOKOlev11_cnsl_idle 240 8
+	sleep 180
+	#Konoko wonders who hacker was
+	chr_animate_block 0 KONOKOlev11_cnsl_stop	
+	#Gameplay resumes
+	chr_delete 1030
+	sound_dialog_play_block pause
+	cinematic_stop (KONintense, 15, 30)
+	end_cutscene
+	cm_reset
+	chr_nocollision 0 0
+	playback DogKonokoEnd
+#	save_game_2
+
+	trig_activate 12
+	trig_activate 13
+	trig_activate 14
+
+	door_unlock 82
+
+	set_objective_5
+	set_target_2
+
+	console_activate 1
+	console_activate 6
+}
+
+func void
+Nwindow_ninja(string ai_name)
+{
+	#spawn character 1030 before Konoko enters the room
+	chr_create 1030 start
+	chr_neutral 1030 1
+	playback 1030 WindowNinjaSet
+}
+
+func void
+window_ninja(string ai_name)
+{
+	trigvolume_enable Cut_outro 0
+	chr_create 1030 start
+	chr_neutral 1030 1
+	playback 1030 WindowNinjaSet
+	begin_cutscene
+	cm_interpolate WindowCamSet 70
+	ai2_takecontrol 1
+	ai2_setmovementmode 0 walk
+	ai2_movetoflag 0 289
+	sleep f60
+	cm_interpolate WindowCamStart 120
+	sound_music_start mus_pursuit_hd
+	sleep 120
+	#Ninja turns around
+	cm_anim both WindowCam00
+	ai2_takecontrol 0
+	chr_envanim 1030 WindowNinjaBox02 norotation
+	chr_animate 1030 NINJAlev11_windowturn
+	obj_create 481 481
+	obj_show 481 481
+	env_anim 481 481
+	#Konoko says give me back those files
+	cm_wait
+	playback 0 WindowKonoko01
+	cm_interpolate WindowCam02 0
+	sleep 30
+	#cinematic_start (KONintense, 180, 180, 17, 6, 30, false)
+	#sound_dialog_play lev11_WindowKon
+	#sound_dialog_play_block pause
+	#cinematic_stop (KONintense, 18, 30)
+	sleep 60
+	playback 0 WindowKonoko02
+	#Ninja backs towards window and flies out)
+	env_setanim 481 Disk02
+	chr_envanim 1030 WindowNinjaBox01 norotation
+	chr_animate 1030 NINJAlev11_window
+	cm_anim both WindowCam03
+	sleep 185
+	#break glass here
+	sound_impulse_play glass_big
+	particle WindowCharge do explode
+	cm_wait
+	cm_reset
+	end_cutscene
+	sleep 60
+	chr_delete 1030
+	ai2_spawn WindowNinjaRun
+	ai2_passive WindowNinjaRun 1
+	chr_unstoppable WindowNinjaRun 1
+	ai2_spawn creepy_ninja_4
+	chr_lock_active WindowNinjaRun
+	#make ninja no collision with particles
+	playback WindowNinjaRun WindowNinjaRun
+	obj_kill 481 481
+	target_set(1030, 0.0)
+	sleep f210
+	playback WindowNinjaRun JumpNinjaSet
+	sleep f10
+	playback WindowNinjaRun JumpNinjaSet
+	#chr_delete WindowNinjaRun
+}
+
+func void
+WindowNinjaDelete(string ai_name)
+{
+	#chr_delete WindowNinjaRun 
+}
+
+func void
+FaceSet(string ai_name)
+{
+	playback WindowNinjaRun
+	ai2_spawn FaceNinja
+	ai2_spawn FaceNinja2
+	ai2_passive FaceNinja 1
+	ai2_passive FaceNinja2 1
+	ai2_passive FaceNinja3 1
+	playback FaceNinja FaceNinjaSet
+	playback FaceNinja FaceNinjaJump
+	sleep 60
+	#chr_delete WindowNinjaRun 
+	ai2_passive FaceNinja 0
+	ai2_passive FaceNinja2 0
+	ai2_passive FaceNinja3 0
+	trigvolume_enable Cut_outro 0
+}
+
+func void
+JumpNinja(string ai_name)
+{
+	chr_nocollision WindowNinjaRun 1
+	chr_animate WindowNinjaRun KONOKOlev11_jump -1
+	sleep f135
+	chr_delete WindowNinjaRun
+}
+
+func void
+JumpKonoko(string ai_name)
+{
+	begin_cutscene
+	chr_animate 0 KONOKOlev11_jump -1
+	sleep f135
+}
+
+#func void
+#Face(string ai_name)
+#{
+#	playback FaceNinja FaceNinjaJump
+#	sleep 60
+#	#chr_delete WindowNinjaRun 
+#	ai2_passive FaceNinja 0
+#	sleep 60
+#}
+
+
+func void
+outro_makeNinja(string ai_name)
+{
+	chr_create 111 start
+	chr_create 110 start
+	chr_neutral 110 1
+	chr_neutral 111 1
+	playback 110 OutroNinja
+	playback 111 OutroSuperNinja
+}
+
+func void
+outro(string ai_name)
+{
+	particle obj2 kill
+	sound_music_stop mus_pursuit_hd
+	begin_cutscene
+	sleep f30
+	chr_nocollision 0 1
+	chr_create 111 start
+	chr_create 110 start
+	chr_neutral 110 1
+	chr_neutral 111 1
+	playback 110 OutroNinja
+	playback 111 OutroSuperNinja
+	cm_interpolate JumpCamKonoko01 0
+	playback 0 JumpKonokoSet
+	cm_interpolate_block JumpCamKonoko02 90
+	sleep f10
+	chr_animate 0 KONOKOlev11_jump -1
+	sleep f100
+	chr_nocollision 0 0
+	sleep f10
+	playback 0 JumpKonokoDown
+	cm_interpolate OutroCamSet 0
+	#chr_forceholster 0 1
+	sleep f90
+	cm_interpolate OutroCam01 140
+	sleep 60
+	chr_animate 111 NINCOMstartle_bk1
+	sleep 80
+	cinematic_start (BOSS2face, 180, 180, 17, 6, 30, false)
+	sound_dialog_play c10_37_01superninja
+	sound_dialog_play_block pause
+	cinematic_stop(BOSS2face, 17, 30)
+	#ninja jumps onto line
+	obj_create 71 71
+	cm_anim both OutroCam02
+	env_anim 71 71
+	chr_envanim 111 OutroNinjaBox01 norotation
+	chr_animate 111 NINJAlev11_outrozip01
+	playback 110 OutroNinja02
+	cutscene_sync_mark
+	sound_ambient_start c12_14_07zipa
+	sleep 170
+	cm_interpolate OutroCam03 0
+	playback 0 OutroKonoko
+	#kill character 111 here
+	chr_delete 111
+	sleep 60
+	#KONOKO jumps on back of Ninja
+	env_anim 71 71
+	chr_envanim_block 110 OutroNinjaBox01 norotation
+	chr_animate 110 NINJAlev11_outrozip01
+	chr_envanim 0 OutroKonBox01 norotation
+	chr_animate 0 KONOKOlev11_outrozip01
+	cm_anim both OutroCam04
+	cutscene_sync_mark
+	sound_ambient_start c12_14_07zipb
+	cm_wait
+	cm_anim both OutroCam05
+	env_setanim 71 Zipthing02
+	chr_envanim 110 OutroNinjaBox02 norotation
+	chr_animate 110 NINJAlev11_outrozip02
+	chr_envanim 0 OutroKonBox02 norotation
+	chr_animate 0 KONOKOlev11_outrozip02
+	sleep 60
+	fade_out 0 0 0 60
+	sleep 90
+	win
+}
+
+func void
+Floor2Unlock(string ai_name)
+{
+	input 0
+	cm_interpolate Floor2Unlock 0
+	sleep 150
+	cm_reset
+	door_unlock 54
+	particle lock1_locklight01 do start
+	input 1
+}
+
+func void
+DataArchiveUnlock(string ai_name)
+{
+	door_unlock 7
+	ai2_spawn fl1_target_1
+	input 0
+	sound_music_start mus_heart
+	fork music_force_stop
+	cm_interpolate DataArchiveUnlock 0
+	trigvolume_enable shut_off_vault_music 1
+	particle obj1 create
+	sleep 150
+	cm_reset
+	input 1
+}
+
+func void
+you_lose(string ai_name)
+{
+	sound_music_stop mus_main02_hd
+	sound_music_stop mus_heart
+	sound_music_stop mus_pursuit
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
Index: AE/packages/VanillaBSL/IGMD/state/state_level_logic.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/state/state_level_logic.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/state/state_level_logic.bsl	(revision 313)
@@ -0,0 +1,607 @@
+#
+# state_spawn_guards.bsl
+#
+# LEVEL LOGIC
+#
+################## MUSIC TEST ################################
+func void level_start(string ai_name)
+{
+# These functions are used when the game is restored.
+
+	if (my_save_point eq 0)
+	{
+		dprint SAVE_POINT_0
+#		USE THIS FUNC TO SET UP TRAINING SEQUENCE AGAIN
+
+		ai2_spawn neutral_1
+		ai2_spawn fl2_secguard_1
+		powerup_spawn ammo 131
+		powerup_spawn hypo 132
+	}
+
+	if (my_save_point eq 1)
+	{
+		dprint RESTORE_SAVE_POINT_1
+		fl1_spawn_guards
+
+		ai2_spawn neutral_1
+		ai2_spawn fl2_secguard_1
+		powerup_spawn ammo 131
+		powerup_spawn hypo 132
+
+		objective_set(1);
+		particle(lock99_locklight01, do, start);
+		console_deactivate 10
+		trigvolume_enable(trigger_volume_09, 0);
+		restore_game
+	}
+
+	if (my_save_point eq 2)
+	{
+		dprint RESTORE_SAVE_POINT_2
+
+		particle obj1 create
+		particle obj1 start
+
+		trigvolume_enable(Cut_dog, 1);
+		trigvolume_enable(trigger_volume_11, 1);
+		trigvolume_enable(trigger_volume_12, 1);
+		trigvolume_enable(trigger_volume_14, 1);
+		trigvolume_enable(trigger_volume_15, 1);
+		trigvolume_enable(trigger_volume_10, 1);
+
+		trigvolume_enable(shut_off_vault_music, 0);
+		trigvolume_enable(trigger_volume_09, 0);
+		trigvolume_enable(trigger_volume_08, 0);
+		trigvolume_enable(trigger_volume_02, 0);
+		trigvolume_enable(trigger_volume_01, 0);
+
+		trigvolume_enable(save_trig_right, 0);
+		trigvolume_enable(save_trig_left, 0);
+
+		objective_set 4 silent
+
+		target_set(267, 30.0)
+
+		#change_flGUARD_CORRIDOR_lights	
+
+		door_lock(3);
+		door_lock(77);
+
+		door_unlock(15);
+		door_unlock(14);
+		door_unlock(7);
+		door_unlock(5);
+		door_unlock(75);
+		door_unlock(59);
+		door_unlock(54);
+		door_unlock(67);
+		door_unlock(68);
+		door_unlock(76);
+		door_unlock(23);
+		door_unlock(42);
+
+		trig_activate 1
+		trig_activate 2
+		#trig_activate 14
+
+		#console_activate 6
+		#console_activate 7
+		#console_activate 9
+
+		console_deactivate 11
+		console_deactivate 4
+		console_deactivate 88
+		console_deactivate 82
+		console_deactivate 5
+		console_deactivate 3
+		console_deactivate 6
+		console_deactivate 1
+		console_deactivate 2
+
+		particle lock1_locklight01 do start
+		particle lock2_locklight01 do start
+		particle lock3_locklight01 do start
+		particle lock4_locklight01 do start
+		particle lock5a_locklight01 do start
+		particle lock5b_locklight01 do start
+		particle lock5c_locklight01 do start
+		particle lock99_locklight01 do start
+
+		particle lock6_locklight01 do stop
+
+		env_shade 271 272 .4 .4 .2
+
+		restore_game
+#		objective_set(3);
+	}
+}
+
+# This is an example of a save game console.
+
+func void save_game_1(string player_name)
+{
+	dprint saveit_1
+	save_game 1 autosave
+}
+
+func void save_game_2_right(string player_name)
+{
+	dprint saveit_2
+	save_game 2 autosave
+	trigvolume_enable save_trig_left 0
+}
+
+func void save_game_2_left(string player_name)
+{
+	dprint saveit_2
+	save_game 2 autosave
+	trigvolume_enable save_trig_right 0
+}
+
+##############################################################
+var int music_counter;
+
+func void music_force_stop(void)
+{
+	sleep 4500
+
+	if (0 ne music_counter) 
+	{
+		dprint music_force_stop
+		music_counter = 0
+		all_music_counters
+	}
+}
+func void music_script_start(void)
+{
+	music_counter = 2
+}
+
+func void die_for_art_1(string ai_name)
+{
+	dprint DFA_1
+	music_counter = music_counter - 1
+
+	if (music_counter eq 0)
+	{
+		all_music_counters();
+	}
+
+}
+func void die_for_art_2(string ai_name)
+{
+	dprint DFA_2
+	music_counter = music_counter - 1
+
+	if (music_counter eq 0)
+	{
+		all_music_counters();
+	}
+
+}
+func void all_music_counters(void)
+{
+	dprint STOP_THE_MUSIC
+	sound_music_stop mus_main02
+	sound_music_stop mus_heart
+	sound_music_stop mus_main02_hd
+}
+
+func void fl1_spawn_guards(string ai_name)
+{
+#	dprint FL1_SPAWN_GUARDS
+	ai2_spawn fl1_secguard_1
+	ai2_spawn fl1_secguard_2
+	ai2_spawn fl1_secguard_4
+	trigvolume_enable shut_off_vault_music 0
+}
+
+func void fl2_spawn_secguard_2(string ai_name)
+{
+#	dprint FL2_SPAWN_GUARDS
+	ai2_spawn fl2_secguard_2
+	ai2_spawn fl2_secguard_7
+	ai2_spawn fl2_balcony_2
+
+	ai2_spawn neutral_2
+	ai2_spawn neutral_4
+}
+
+func void fl2_spawn_secguard_3(string ai_name)
+{
+#	dprint FL2_SPAWN_ASSAULT_GUARDS
+	ai2_spawn fl2_secguard_3
+	ai2_spawn fl2_secguard_6
+	ai2_spawn fl2_balcony_1
+}
+
+# THESE ARE THE THIRD FLOOR/ROOF GUYS
+
+func void spawn_fl3_guards(string ai_name)
+{
+#	dprint FLROOF_SPAWN_GUARDS
+	ai2_spawn fl3_secguard_1
+	ai2_spawn fl3_secguard_2
+	ai2_spawn fl3_secguard_6
+	ai2_spawn flROOF_sniper_1
+	ai2_spawn Roof_BOSWAT_1
+
+	ai2_spawn neutral_3
+	ai2_spawn neutral_6
+}
+
+# THESE ARE THE COMPUTER ROOM GUYS
+
+func void spawn_flBASEMENT_guards(string ai_name)
+{
+#	dprint FLROOF_SPAWN_GUARDS
+	ai2_spawn flBASEMENT_guard_1
+	ai2_spawn flBASEMENT_guard_2
+}
+
+# THESE ARE THE COMPUTER ROOM GUYS
+
+func void spawn_flRAMP_guards(string ai_name)
+{
+#	dprint FLROOF_SPAWN_GUARDS
+	ai2_spawn flRAMP_guard_1
+	ai2_spawn flRAMP_guard_2
+	trigvolume_enable ninja_ambush_top_trig 0
+	trigvolume_enable ninja_ambush_bot_trig 0
+	particle lock46_locklight01 do start
+}
+
+func void spawn_outside_left_snipers(string ai_name)
+{
+#	dprint FL2_SPAWN_GUARDS
+	ai2_spawn flOUTSIDE_A_sniper_1
+	ai2_spawn flOUTSIDE_A_sniper_2
+	ai2_spawn flOUTSIDE_B_sniper_1
+	ai2_spawn flOUTSIDE_C_sniper_1
+}
+
+func void spawn_outside_right_snipers(string ai_name)
+{
+#	dprint FL2_SPAWN_GUARDS
+	ai2_spawn flOUTSIDE_E_sniper_1
+	ai2_spawn flOUTSIDE_E_sniper_2
+	ai2_spawn flOUTSIDE_D_sniper_1
+	ai2_spawn flOUTSIDE_D_sniper_2
+}
+
+func void spawn_targets(string ai_name)
+{
+#	dprint FL2_SPAWN_GUARDS
+	ai2_spawn fl2_target_2
+}
+
+func void do_neutral_1_run(string ai_name)
+{
+	ai2_neutralbehavior neutral_1 none
+	ai2_setmovementmode neutral_1 run_noaim
+	ai2_dopath neutral_1 neutral_1_run
+	ai2_setjobstate neutral_1
+}
+
+func void do_neutral_2_run(string ai_name)
+{
+	ai2_neutralbehavior neutral_2 none
+	ai2_dopath neutral_2 neutral_2_run
+	ai2_setjobstate neutral_2
+}
+
+func void do_neutral_3_run(string ai_name)
+{
+	ai2_neutralbehavior neutral_3 none
+	ai2_dopath neutral_3 neutral_3_run
+	ai2_setjobstate neutral_3
+}
+
+func void unlock_secret_1(string ai_name)
+{
+	input 0
+	cm_interpolate secret1 0
+	sleep 60
+	console_activate 7
+	#particle lock69a_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	ai2_spawn secret_guard_1
+	ai2_spawn secret_guard_2
+}
+
+func void unlock_secret_2(string ai_name)
+{
+	door_unlock 34
+	door_unlock 36
+
+	# CB: ensure ramp guards do not see ninja and go after him!
+	ai2_passive flRAMP_guard_1 1
+	ai2_passive flRAMP_guard_2 1
+
+	ai2_spawn cutscene_ninja_1
+	input 0
+	cm_interpolate secret2 0
+	sleep 60
+	particle lock7_locklight01 do start
+	sleep 15
+	trig_deactivate 12
+	sleep 150
+	cm_reset
+	input 1
+
+	chr_delete cutscene_ninja_1
+	ai2_passive flRAMP_guard_1 0
+	ai2_passive flRAMP_guard_2 0
+
+	trigvolume_enable ninja_ambush_top_trig 1
+	trigvolume_enable ninja_ambush_bot_trig 1
+}
+
+func void ninja_ambush(string ai_name)
+{
+	trigvolume_enable ninja_ambush_top_trig 0	
+	trigvolume_enable ninja_ambush_bot_trig 0	
+
+	ai2_spawn ambush_ninja_1
+	ai2_spawn creepy_ninja_1
+	ai2_spawn creepy_ninja_3
+}
+
+func void hall_1(string ai_name)
+{
+	input 0
+	cm_interpolate hall1 0
+	sleep 60
+	door_unlock 77
+	door_unlock 38
+	door_unlock 22
+	door_unlock 3
+	particle lock6_locklight01 do start
+	particle lock7_locklight01 do stop
+	sleep 150
+	cm_reset
+	input 1
+
+	trig_deactivate 1
+	trig_deactivate 2
+}
+
+func void top_1(string ai_name)
+{
+	input 0
+	#cm_interpolate hall1 0
+	sleep 60
+	door_unlock 35
+	door_unlock 38
+	door_unlock 22
+	door_unlock 3
+	particle lock6_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	trig_activate 12
+	trig_activate 13
+	trig_activate 14
+
+	trig_deactivate 1
+	trig_deactivate 2
+}
+
+func void downstairs(string ai_name)
+{
+	trig_deactivate 14
+	door_unlock 8
+	door_unlock 9
+	particle lock23_locklight01 do start
+	ai2_spawn creepy_ninja_5
+	ai2_spawn creepy_ninja_6
+}
+
+func void upstairs(string ai_name)
+{
+	trig_deactivate 13
+	door_unlock 35
+	particle lock65_locklight01 do start
+}
+
+var int door_counter=3;
+
+func void seclock_music_start(void)
+{
+	if (door_counter eq 3)
+	{
+		sound_music_start mus_lz 0.75
+	}
+}
+
+func void seclock_decrement_counter(void)
+{
+	door_counter = door_counter - 1
+
+
+	if (door_counter eq 0)
+	{
+		sound_music_stop mus_lz
+		unlock_roof();
+	}
+}
+
+func void seclock1(string ai_name)
+{
+	seclock_music_start
+
+	input 0
+	cm_interpolate security 0
+	sleep 60
+	particle lock5a_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	seclock_decrement_counter
+}
+
+func void seclock2(string ai_name)
+{
+	seclock_music_start
+
+	input 0
+	cm_interpolate security 0
+	sleep 60
+	particle lock5b_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	seclock_decrement_counter
+}
+
+func void seclock3(string ai_name)
+{
+	seclock_music_start
+
+	input 0
+	cm_interpolate security 0
+	sleep 60
+	particle lock5c_locklight01 do start
+	sleep 150
+	cm_reset
+	input 1
+
+	seclock_decrement_counter
+}
+
+func void unlock_roof(string ai_name)
+{
+	door_unlock 23
+	door_unlock 42
+}
+
+#
+# state_door_lock_lights.bsl
+#
+# SCRIPTS TO CHANGE THE LOCKED LIGHTS ON DOORS
+#
+# TURN FROM GREEN TO RED: do stop
+
+func void change_fl2_lights(string ai_name)
+{
+#	dprint WHATEVER YOU WANT
+	sleep 60
+	particle lock2_locklight01 do start
+}
+
+func void change_fl3_lights(string ai_name)
+{
+	particle lock3_locklight01 do start
+	ai2_spawn fl3_mook_1
+	ai2_spawn fl3_mook_2
+}
+
+func void change_flDATA_ARCHIVE_lights(string ai_name)
+{
+	sleep 60
+	particle lock4_locklight01 do start
+}
+
+func void change_flCOMMAND_CENTER_lights(string ai_name)
+{
+	particle lock5_locklight01 do start
+}
+
+func void change_flGUARD_CORRIDOR_lights(string ai_name)
+{
+	particle lock6_locklight01 do start
+}
+
+func void change_flDIG_OFFICES_lights(string ai_name)
+{
+	particle lock7_locklight01 do start
+}
+
+
+func void grifftext(string chr_index)
+{
+	dprint text2a
+	text_console level_11a
+	console_reset 9
+}
+
+
+#
+# state_spawn_guards.bsl
+#
+# SCRIPTS TO SPAWN SECURITY GUARDS
+#
+
+func void set_objective_1(string ai_name)
+{
+#	dprint WHATEVER I WANT
+	objective_set(1)
+	target_set(127, 30.0)
+}
+
+func void set_objective_2(string ai_name)
+{
+#	dprint WHATEVER I WANT
+	objective_set(2)
+}
+
+func void set_objective_3(string ai_name)
+{
+#	dprint WHATEVER I WANT
+	objective_set(3)
+}
+
+func void set_objective_4(string ai_name)
+{
+#	dprint WHATEVER I WANT
+	objective_set(4)
+	target_set(267, 30.0)
+}
+
+func void set_objective_5(string ai_name)
+{
+#	dprint WHATEVER I WANT
+	objective_set(5)
+}
+
+func void set_objective_6(string ai_name)
+{
+#	dprint WHATEVER I WANT
+	objective_set(6)
+}
+
+func void set_target_1(string ai_name)
+{
+#	dprint WHATEVER I WANT
+	target_set(267, 30.0)
+}
+
+func void set_target_2(string ai_name)
+{
+#	dprint WHATEVER I WANT
+	target_set(1030, 30.0)
+}
+###wuscripts
+func void check_outro(string ai_name)
+{
+	trigvolume_enable tv_check_outro 0
+	if(trigvolume_count (24) eq 0)
+	{
+		trigvolume_enable Cut_outro 1
+		particle obj2 create
+		target_set(126,30.0)
+	}
+	if(trigvolume_count (24) ne 0)
+	{
+		sleep 60
+		trigvolume_enable tv_check_outro 1
+	}
+}
+		
Index: AE/packages/VanillaBSL/IGMD/state/state_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/state/state_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/state/state_main.bsl	(revision 313)
@@ -0,0 +1,25 @@
+#
+# state_main.bsl
+#
+var int my_save_point;
+
+func void main(void)
+{
+
+	gl_fog_blue=0
+	gl_fog_red=0
+	gl_fog_green=0
+	gl_fog_start=.99
+	gs_farclipplane_set 3000	
+
+	my_save_point = save_point;
+
+	level_start
+
+	if (my_save_point eq 0)
+	{
+		particle lock99_locklight01 do start
+		music_script_start();
+		state_cs_intro
+	}
+}
Index: AE/packages/VanillaBSL/IGMD/tctf/particle_scripts.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/tctf/particle_scripts.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/tctf/particle_scripts.bsl	(revision 313)
@@ -0,0 +1,107 @@
+#partice scripts
+#alex okita
+#turns on and off particles for rooms
+
+#room1
+func void room1_start(string ai_name)
+{
+	dprint room1_start
+	particle room1 start
+	particle smoke start
+}
+func void room1_stop(string ai_name)
+{
+	dprint room1_stop
+	particle room1 stop
+}
+#room2
+func void room2_start(string ai_name)
+{
+	dprint room2_start
+	particle room2 start
+}
+func void room2_stop(string ai_name)
+{
+	dprint room2_stop
+	particle room2 stop
+}
+
+#room3
+func void room3_start(string ai_name)
+{
+	dprint room3_start
+	particle room3 start
+}
+func void room3_stop(string ai_name)
+{
+	dprint room3_stop
+	particle room3 stop
+}
+
+#room4
+func void room4_start(string ai_name)
+{
+	dprint room4_start
+	particle room4 start
+}
+func void room4_stop(string ai_name)
+{
+	dprint room4_stop
+	particle room4 stop
+}
+
+#room5
+func void room5_start(string ai_name)
+{
+	dprint room5_start
+	particle room5 start
+}
+func void room5_stop(string ai_name)
+{
+	dprint room5_stop
+	particle room5 stop
+}
+
+#room4
+func void room6_start(string ai_name)
+{
+	dprint room6_start
+	particle room6 start
+}
+func void room6_stop(string ai_name)
+{
+	dprint room6_stop
+	particle room6 stop
+}
+
+#room7
+func void room7_start(string ai_name)
+{
+	dprint room7_start
+	particle room7 start
+}
+func void room7_stop(string ai_name)
+{
+	dprint room7_stop
+	particle room7 stop
+}
+
+#room8
+func void room8_start(string ai_name)
+{
+	dprint room8_start
+	particle room8 start
+}
+func void room8_stop(string ai_name)
+{
+	dprint room8_stop
+	particle room8 stop
+	particle smoke stop
+}
+
+func void fire_damage(string ai_name)
+{	
+	dprint fire_hurt_konoko
+	chr_poison (ai_name, 5, 30, 30);
+}
+
Index: AE/packages/VanillaBSL/IGMD/tctf/tctf_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/tctf/tctf_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/tctf/tctf_cutscene.bsl	(revision 313)
@@ -0,0 +1,682 @@
+#
+# tctf_cutscene.bsl
+#
+
+func void
+Cut01(
+	void)
+{
+	fade_out 0 0 0 0
+	cm_interpolate IntroCam01 0
+	sleep 8
+	begin_cutscene
+	sleep 1
+	sound_ambient_start cs_tctf8_01
+	fork Soundcue
+	env_show 99 0	
+	sleep 40
+	#hides motorcycle gunk
+	env_show 110 0
+	env_show 111 0
+	env_show 112 0
+	#hides	van	gunk
+	env_show 444 0
+	env_show	101	0
+	env_show	103	0
+	env_show	104	0
+	env_show	105	0
+	env_show	106	0
+	env_show	107	0
+	env_show	108	0	
+	#hides	curtain	wall
+	#start cutscene	
+	#fade_in 120
+	cm_anim both IntroCam01	
+	#cycle	and	konoko	animate					
+	chr_envanim 0 IntroKonBox01			
+	chr_animate 0 KONOKOcycle_ride 560
+	obj_create 10 12
+	obj_create 1 8		
+	env_anim	10	12
+	fade_in 120
+	#sound_ambient_start cs_tctf8_01
+	#fork Soundcue
+	#Konoko looking at TCTF
+	chr_envanim_block 0 IntroKonBox02
+	cm_anim both IntroCam02
+	chr_animate 0 KONOKOlev8_IntroKon01
+	#show helicopters circling
+	cm_anim_block both IntroCam03
+	obj_create 601 606
+	obj_create 701 706
+	env_anim 601 606
+	env_anim 701 706
+	#sleep 
+	#sound_ambient_play cs_tctf8_02
+	#Van animate
+	cm_anim_block both IntroCam04
+	env_anim 1 8
+	#sleep 20
+	particle object_Blackvan_FB_VanHeadlight do start
+	#Vancrash
+	cm_anim_block both IntroCam05
+	#sound_ambient_start cs_tctf8_03
+	env_setanim 1 Blackvan_FB01
+	env_setanim 3 Blackvan_LR01
+	env_setanim 4 Blackvan_TB01
+	env_setanim 5 Blackvan_W01
+	env_setanim 6 Blackvan_WB01
+	env_setanim 7 Blackvan_doors0201
+	env_setanim 8 Blackvan_doors0301
+	sleep 287
+	#turn off unbroken curtain wall
+	env_show 98 0
+	env_show 398 0
+	particle LobbyWall do explode
+	#turn on broken	curtain	wall
+	env_show 99 1
+	#camera shows lobby doors closing and lights flashing
+	cm_interpolate_block IntroLobbyCam00 0
+	particle LobbyAlarm create
+	#hide	object	van		
+	obj_kill 1 8
+	#show	gunk	van		
+	env_show	101	1				
+	env_show	103	1
+	env_show	104	1
+	env_show	105	1
+	env_show	106	1
+	env_show	107	1
+	env_show	108	1
+	env_show 444 1
+	#Strikers run into Lobby space
+	ai2_spawn IntroStriker01
+	ai2_spawn IntroStriker02
+	playback IntroStriker01 IntroStrikerLobby
+	cm_interpolate_block IntroLobbyCam01 220
+	env_show 97 0
+	sleep 50
+	obj_create 321 325
+	env_anim 321 322
+	playback IntroStriker02 IntroStrikerLobby
+	sleep 190
+	#Show alarms flashing and blast doors closing
+	cm_interpolate_block IntroDoorCam02 0
+	cutscene_sync mark 
+	sound_ambient_start cs_tctf8_03
+	env_anim 323 325
+	sleep 200
+	#Konoko sees doors closing
+	chr_delete IntroStriker01
+	chr_delete IntroStriker02
+	cm_anim_block both IntroCam06
+	chr_envanim 0 IntroKonBox03 norotation
+	chr_animate 0 KONOKOlev8_IntroKon03
+	env_setanim 10 motorcycle03
+	env_setanim 11 hubs03
+	env_setanim 12 hubs_rear03
+	env_anim 323 325
+	#Konoko rides towards closing doors
+	chr_envanim_block 0 IntroKonBox04
+	chr_animate 0 KONOKOcycle_ride 246
+	env_setanim 10 motorcycle04
+	env_setanim 11 hubs04
+	env_setanim 12 hubs_rear04
+	cm_anim both IntroCam07
+	#Konoko slides under the doors
+	chr_envanim_block 0 IntroKonBox05 norotation
+	chr_animate 0 KONOKOlev8_IntroKon05
+	env_setanim 10 motorcycle05
+	env_setanim 11 hubs05
+	env_setanim 12 hubs_rear05
+	cm_anim both IntroCam08
+	#Konoko game start
+	cm_wait
+	playback 0 IntroKonoko
+	cinematic_start(KONintense, 180,180,15, 1, 15, false)
+	sound_dialog_play c07_22_01konoko
+	cm_reset
+	sleep 1
+	#hide motorcycle object
+	obj_kill 10 12
+	#kill helicopter objects
+	obj_kill 601 606
+	obj_kill 701 706
+	#hide door objects
+	obj_kill 321 325
+	#show gunk motorcycle
+	env_show 110 1
+	env_show 111 1
+	env_show 112 1
+	#show door gunk
+	env_show 321 1
+	env_show 322 1
+	env_show 323 1
+	env_show 324 1
+	env_show 325 1
+	env_shade 321 325 .3 .3 .3
+	#gameplay	settings			
+	end_cutscene
+	sound_dialog_play_block pause
+	music_intro
+	sleep 60
+	cinematic_stop(KONintense, 15, 15)
+	ai2_spawn lobby_striker_01
+	ai2_spawn lobby_striker_02
+	ai2_spawn lobby_striker_03
+	s1
+	sleep 120
+	particle LobbyAlarm kill
+}
+
+func void
+Soundcue(void)
+{
+	sleep 1146
+	sound_ambient_start cs_tctf8_02
+	cutscene_sync mark 
+
+}
+
+func void
+Attack(void)
+{
+	begin_cutscene
+	particle Attack do start
+	fade_out 0 0 0 30
+	ai2_spawn AttackCivil01
+	ai2_spawn AttackCivil02
+	ai2_spawn AttackStriker01
+	ai2_spawn AttackStriker02
+	ai2_setmovementmode AttackStriker01 run
+	ai2_setmovementmode AttackStriker02 run
+	chr_create 1054 start
+	playback AttackCivil01 AttackGeneric01
+	playback AttackCivil02 AttackCop01
+	playback AttackStriker01 AttackStriker01
+	playback AttackStriker02 AttackStriker02
+	playback 1054 AttackComguy01
+	sleep 30
+	chr_animate AttackCivil01 KONPANcrouch_idle1 1000
+	fade_in 30
+	sleep 1
+	chr_animate 1054 COMGUYtalk_radio 1660
+	cm_interpolate AttackCam01 0
+	sleep 60
+	cm_interpolate AttackCam02 400
+	sleep 300
+	cinematic_start(COMGUYtalking, 180,180, 19, 7, 20, false)
+	sound_dialog_play c07_23_01synhench1
+	sound_dialog_play_block pause
+	cinematic_stop (COMGUYtalking, 19, 30)
+	sleep 10
+	end_cutscene
+	fade_out 0 0 0 30
+	sleep 30
+	cm_reset
+	fade_in 30
+	#kill characters 1050-1054
+	chr_delete AttackCivil01
+	chr_delete AttackCivil02
+	chr_delete AttackStriker01
+	chr_delete AttackStriker02
+	chr_delete 1054
+	particle Attack do stop
+	music_attack
+
+	# CB: after 10 seconds, play shinatama dialog "they're attacking the command center"
+	sleep 600
+	sound_dialog_play c00_01_105shinatama
+	sound_dialog_play_block
+}
+
+
+
+func void
+Kidnap(
+	void)
+{
+	particle Kidnap do start
+	begin_cutscene
+	fade_out 0 0 0 30
+	sleep 30
+	
+	#Shinatama caught up in destruction
+	chr_create 1101 start
+	chr_envanim 1101 KidnapShinBox02
+	chr_animate 1101 SHINATsit_idle 3000
+
+	#create the strikers
+	chr_create 1103 start
+	chr_create 1104 start
+	playback 1103 KidnapStriker01
+	playback 1104 KidnapStriker02
+
+	#run the camera
+	dprint run_the_camera
+	cm_interpolate KidnapCam01 0
+	cm_interpolate_block KidnapCam02 300
+	fade_in 30
+	sleep 360
+
+	#Shinatama looks up to see SubBoss1
+	dprint shinatama_looks_up
+	chr_envanim 1101 KidnapShinBox02
+	chr_animate 1101 SHINATsit_idle 610
+
+	#cm_anim both KidnapCam03
+	cm_interpolate KidnapCam03 0
+	cm_interpolate_block KidnapHelpCam02 300
+	cinematic_start(SHINhelpme, 180,180, 15, 1, 20, false)
+	sound_dialog_play c07_24_02shinatama
+
+	#create barabus as passsive
+	dprint create_barabus
+	ai2_spawn barabus
+	chr_boss_shield barabus
+	ai2_passive barabus 1
+	chr_lock_active barabus
+	playback barabus KidnapSubBoss01
+
+	dprint sound_dialog_pause
+	sound_dialog_play_block pause
+	cinematic_stop (SHINhelpme, 19, 30)
+
+	#SubBoss grabs Shinatama
+	dprint barabus_grabs_shinatama
+	chr_envanim 1101 KidnapShinBox01 norotation
+	chr_animate 1101 SHINATlev8_Kidnap01 -1
+	chr_envanim barabus KidnapStrBox01 norotation
+	chr_animate barabus STRIKElev8_Kidnap01 -1
+	cutscene_sync mark
+	sound_ambient_start c09_32_09shin_kidnap
+	cinematic_start(BOSS01menacing, 180,180, 20, 9, 20, false)
+	sound_dialog_play c07_24_01barabas
+	cm_anim both KidnapCam04
+	sleep 60
+	particle KidnapSpark do start
+	sleep 5
+	particle KidnapSpark do stop
+	sleep 20
+	cinematic_stop (BOSS01menacing, 19, 30)
+	fade_out 0 0 0 30
+	chr_delete 1101
+	chr_delete 1103
+	chr_delete 1104
+	sleep 30
+	chr_delete barabus
+	cm_reset
+	fade_in 30
+	end_cutscene
+	particle Kidnap do stop
+}
+
+
+func void
+Elevator(
+	void)
+{
+	begin_cutscene
+	#hide gunk and show elevator objects
+	env_show 501 0
+	env_show 502 0
+	env_show 503 0
+	env_show 504 0
+	obj_create 781 781
+	obj_create 501 504
+	obj_force_draw 781 781
+	obj_force_draw 501 504
+	#KONOKO cuts the cables
+	chr_invincible 0 1
+	chr_nocollision 0 1
+	cm_anim both ElevatorCam01
+	chr_envanim 0 ElevatorKonBox01 norotation
+	chr_animate 0 KONOKOlev8_Elevator01
+	env_anim 781 781
+	env_anim 501 504
+	sleep f40
+	cutscene_sync mark
+	sound_ambient_start c10_00_10_torch
+	sleep 100
+	particle ElevatorSpark do start
+	sound_ambient_start c09_32_09shin_kidnap
+	sleep 85
+	particle ElevatorSpark do stop
+	cutscene_sync mark
+	sound_ambient_start c10_01_29_elevator
+	sleep 45
+	particle ElevatorSpark2 do start
+	sound_ambient_start c09_32_09shin_kidnap
+	sleep 70
+	particle ElevatorSpark2 do stop
+	#Elevator falls and KONOKO rises
+	chr_envanim_block 0 ElevatorKonBox02 norotation
+	obj_kill 781 781
+	chr_animate 0 KONOKOlev8_Elevator02
+	env_setanim 501 Elevator_fall
+	env_setanim 502 Elevator_brace_fall
+	env_setanim 503 Elevator_cable01_fall
+	env_setanim 504 Elevator_cable02_fall
+	cm_anim both ElevatorCam02
+	sleep 60
+	particle ElevatorDust do explode
+	sleep 5
+	particle ElevatorDust do explode
+	#KONOKO stops at top
+	chr_envanim_block 0 ElevatorKonBox03 norotation
+	chr_animate 0 KONOKOlev8_Elevator03
+	env_setanim 503 Elevator_cable01_stop
+	cm_anim both ElevatorCam03
+	#KONOKOleaps out of shaft
+	chr_envanim_block 0 ElevatorKonBox04 norotation
+	chr_animate 0 KONOKOlev8_Elevator04
+	cm_anim both ElevatorCam04
+	#hide objects and show gunk
+	obj_kill 501 504
+	env_show 601 1
+	env_show 602 1
+	cm_wait
+	playback 0 ElevatorEndSet
+	cm_reset
+	chr_invincible 0 0
+	chr_nocollision 0 0
+	end_cutscene
+	sleep 5
+}
+
+
+func void
+helicopter(
+	void)
+{
+	obj_create 901 906
+	particle EndDust create
+}
+
+func void helicopter_sound_start(void)
+{
+	sound_ambient_start c08_heli 1.0
+}
+
+func void helicopter_sound_stop(void)
+{
+	sleep 680
+	sound_ambient_volume c08_heli 0.0 12
+	sleep 600
+	sound_ambient_stop c08_heli
+}
+
+func void helicopter_fly_away(void)
+{
+	fork helicopter_sound_stop
+
+	#helicopter
+	chr_create 1019 start
+	chr_create 1020 start
+	chr_create 1021 start						
+	chr_envanim 1019 HeliOutroShinBox01						
+	chr_envanim 1020 HeliOutroStrBox01						
+	chr_envanim 1021 HeliOutroStrBox02						
+	chr_animate 1019 SHINATstand_heli 1000
+	chr_animate 1020 STRIKEstand_heli 1000				
+	chr_animate 1021 STRIKEcrouch_idle 1000
+	env_anim 901 906
+}
+
+func void
+HeliOutroRight(
+	void)
+{
+	cutscene_sync mark
+	helicopter_sound_start
+	ai2_takecontrol 1
+	ai2_passive sh_s12b 1
+	ai2_passive sh_s12 1
+	ai2_passive sh_s12c 1
+	ai2_movetoflag 0 1900
+	begin_cutscene
+	chr_delete sh_s12b
+	chr_delete sh_s12
+	chr_delete sh_s12c
+	ai2_kill
+	sleep 10
+	helicopter_fly_away
+	cm_interpolate HeliOutroRight 200
+	sleep 200
+	cm_anim both HeliOutroCam012
+	sleep 100
+	ai2_takecontrol 0
+	input 0
+	playback 0 HeliOutroKonoko02
+	cinematic_start(KONtalking, 180,180, 16, 3, 15, true)
+	sound_dialog_play c07_25_01konoko
+	sound_dialog_play_block pause
+	fork HeliOutro
+}
+
+
+func void
+HeliOutroMid(
+	void)
+{
+	cutscene_sync mark
+	helicopter_sound_start
+	ai2_takecontrol 1
+	ai2_passive sh_s12b 1
+	ai2_passive sh_s12c 1
+	ai2_passive sh_s12 1
+	ai2_movetoflag 0 1900
+	begin_cutscene
+	chr_delete sh_s12c
+	chr_delete sh_s12b
+	chr_delete sh_s12
+	ai2_kill
+	sleep 10
+	helicopter_fly_away
+	cm_interpolate HeliOutroMid 100
+	sleep 100
+	cm_interpolate HeliOutroCam01 100
+	cm_anim_block both HeliOutroCam01
+	sleep 200
+	ai2_takecontrol 0
+	input 0
+	playback 0 HeliOutroKonoko02
+	cinematic_start(KONtalking, 180,180, 16, 3, 15, true)
+	sound_dialog_play c07_25_01konoko
+	sound_dialog_play_block pause
+	fork HeliOutro
+}
+
+func void
+HeliOutroMidLt(
+	void)
+{
+	cutscene_sync mark
+	helicopter_sound_start
+	ai2_takecontrol 1
+	ai2_passive sh_s12c 1
+	ai2_passive sh_s12b 1
+	ai2_passive sh_s12 1
+	ai2_movetoflag 0 1900
+	begin_cutscene
+	chr_delete sh_s12c
+	chr_delete sh_s12b
+	chr_delete sh_s12
+	ai2_kill
+	sleep 10
+	helicopter_fly_away
+	cm_interpolate HeliOutroMidLt 100
+	sleep 100
+	cm_interpolate HeliOutroCam01 100
+	cm_anim_block both HeliOutroCam01
+	#patrol Konoko to flag #1010
+	sleep 200
+	ai2_takecontrol 0
+	input 0
+	playback 0 HeliOutroKonoko02
+	cinematic_start(KONtalking, 180,180, 16, 3, 15, true)
+	sound_dialog_play c07_25_01konoko
+	sound_dialog_play_block pause
+	fork HeliOutro
+}
+
+func void
+HeliOutroLeft(
+	void)
+{
+	cutscene_sync mark
+	helicopter_sound_start
+	ai2_takecontrol 1
+	ai2_passive sh_s12c 1
+	ai2_passive sh_s12b 1
+	ai2_passive sh_s12 1
+	ai2_movetoflag 0 1900
+	begin_cutscene
+	chr_delete sh_s12c
+	chr_delete sh_s12b
+	chr_delete sh_s12
+	ai2_kill
+	sleep 10
+	helicopter_fly_away
+	cm_interpolate HeliOutroLeft 200
+	sleep 200
+	cm_anim both HeliOutroCam012
+	sleep 200
+	ai2_takecontrol 0
+	input 0
+	playback 0 HeliOutroKonoko02
+	cinematic_start(KONtalking, 180,180, 20, 9, 15, true)
+	sound_dialog_play c07_25_01konoko
+	sound_dialog_play_block pause
+	fork HeliOutro
+}
+
+
+func void
+HeliOutro(
+void)
+{
+	particle EndDust kill
+	target_set(1,0.0)
+	#Subboss shows up behind konoko
+	cm_interpolate_block HeliOutroCam02 0
+	chr_delete 1019
+	chr_delete 1020
+	chr_delete 1021
+	playback 0 HeliOutroKonoko01
+	ai2_spawn barabus
+	chr_boss_shield barabus
+	playback barabus HeliOutroBoss01
+	sleep 40
+	chr_animate 0 KONCOMstartle_bk2
+	cinematic_stop (KONtalking, 20, 40)
+	cinematic_start(KONintense, 180,180, 20, 9, 40, false)
+	sound_dialog_play c07_25_02konoko
+	sound_dialog_play_block pause
+	#subboss taunts Konoko
+	cm_interpolate HeliOutroCam03 0
+	sleep 30
+	cinematic_start(BOSS1talking, 180,180,19, 7, 25, false)
+	sound_dialog_play c07_25_03barabas
+	sound_dialog_play_block pause
+	#"KONOKO, let's get it on!!!!!"
+	cinematic_stop (BOSS1talking, 19, 40)
+	#camera of Konoko's face
+	cm_interpolate HeliCamKonFace 60
+	sound_dialog_play c07_25_04konoko
+	sound_dialog_play_block pause
+	sleep 30
+	cinematic_stop (KONintense, 19, 30)
+	#resume gameplay
+	cm_reset
+	letterbox 0
+	input 1
+	chr_neutral 1010 0
+	obj_kill 901 906
+	ai2_takecontrol 0
+	end_cutscene
+	music_battle
+	s4
+}
+
+
+func void
+final(
+void)
+{
+	music_stop
+	begin_cutscene
+	sleep 120
+	sound_dialog_play c07_26a_01konokofx
+	chr_animate 0 KONOKOpowerup
+	sleep 240
+	cinematic_start (KONtalking, 180, 180, 19, 7, 20, false)
+	sound_dialog_play c07_26_01konoko
+	sound_dialog_play_block
+	cinematic_stop (KONtalking, 19, 20)
+	fade_out 0 0 0 120
+	sleep 120
+	win
+}
+
+func void
+BarabasNorth(string barabas)
+{
+	cutscene_sync mark
+	sound_ambient_start c11_10_14bar_jet
+	playback barabus BarabasNorth
+	ai2_barabbas_retrievegun barabus
+	sleep 60
+	chr_envanim barabus BarabasNorthBox norotation
+	chr_animate barabus BARABnorth
+	sleep 105
+	#particle BarabasNorth do start
+}
+
+
+
+func void
+BarabasSouth(string barabas)
+{
+	cutscene_sync mark
+	sound_ambient_start c11_10_14bar_jet
+	playback barabus BarabasSouth
+	ai2_barabbas_retrievegun barabus
+	sleep 60
+	chr_envanim barabus BarabasSouthBox norotation
+	chr_animate barabus BARABsouth
+	sleep 105
+	#particle BarabasSouth do start
+}
+
+
+func void
+BarabasEast(string barabas)
+{
+	cutscene_sync mark
+	sound_ambient_start c11_10_14bar_jet
+	playback barabus BarabasEast
+	ai2_barabbas_retrievegun barabus
+	sleep 60
+	chr_envanim barabus BarabasEastBox norotation
+	chr_animate barabus BARABeast
+	sleep 105
+	#particle BarabasEast do start
+}
+
+
+
+func void
+BarabasWest(string barabas)
+{
+	cutscene_sync mark
+	sound_ambient_start c11_10_14bar_jet
+	playback barabus BarabasWest
+	ai2_barabbas_retrievegun barabus
+	sleep 60
+	chr_envanim barabus BarabasWestBox norotation
+	chr_animate barabus BARABwest
+	sleep 105
+	#particle BarabasWest do start
+
+}
Index: AE/packages/VanillaBSL/IGMD/tctf/tctf_door_lock_lights.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/tctf/tctf_door_lock_lights.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/tctf/tctf_door_lock_lights.bsl	(revision 313)
@@ -0,0 +1,31 @@
+#
+# tctf_door_lock_lights.bsl
+#
+# SCRIPTS TO CHANGE THE LOCKED LIGHTS ON DOORS
+#
+# GREEN TO RED: do stop
+# RED TO GREEN: do start
+
+func void floor4_lock(void)
+{
+	music_stop
+	input 0
+	fade_out 0 0 0 30
+	cm_interpolate floor4_lock 0
+	fade_in 30
+	sleep 60
+	particle floor4_lock_locklight01 do start
+	sleep 90
+	fade_out 0 0 0 30
+	cm_reset
+	fade_in 30
+	input 1
+	target_set(60,30.0)
+	sound_dialog_play_block c00_01_28shinatama
+}
+
+func void shin_lock(void)
+{
+	particle shin_lock_locklight01 do start
+	particle roof_locklight01 do start
+}
Index: AE/packages/VanillaBSL/IGMD/tctf/tctf_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/tctf/tctf_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/tctf/tctf_main.bsl	(revision 313)
@@ -0,0 +1,28 @@
+#
+# tctf_main.bsl
+#
+
+func void
+main(
+	void)
+{	
+
+	gl_fog_blue=0
+	gl_fog_red=0
+	gl_fog_green=0
+	gl_fog_start=.995
+	gs_farclipplane_set 5000
+	env_show 601 0
+	env_show 602 0	
+	env_show 321 0
+	env_show 322 0
+	env_show 323 0
+	env_show 324 0
+	env_show 325 0			
+	start
+	if (my_save_point eq 0)
+	{
+		Cut01
+	}
+}
+	
Index: AE/packages/VanillaBSL/IGMD/tctf/tctf_objectives.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/tctf/tctf_objectives.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/tctf/tctf_objectives.bsl	(revision 313)
@@ -0,0 +1,98 @@
+#
+# tctf_objectives.bsl
+#
+# SCRIPTS TO SET LEVEL OBJECTIVES/HINTS
+#
+func void set_objective_1(void)
+{
+	dprint set_objective_1
+	objective_set(1)
+	target_set(323,30.0)
+}
+func void set_objective_2(string ai_name)
+{
+	dprint set_objective_2
+	objective_set(2)
+	target_set(1111, 30.0)
+
+}
+func void set_objective_3(string ai_name)
+{
+	dprint set_objective_3
+	objective_set(3)
+	target_set(60,30.0)
+}
+func void set_objective_4(string ai_name)
+{
+	dprint set_objective_4
+	if(elev_count ne 1)
+	{
+		trigvolume_enable trigger_volume_81 1
+		objective_set(4)
+		particle obj1 create
+		target_set(9999, 30.0)
+	}
+}
+
+func void set_objective_5(string ai_name)
+{
+	dprint set_objective_5
+	objective_set(5)
+	target_set(58,30.0)
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+func void you_win(int char_index)
+{
+	win
+}
+
+### TEXT CONSOLES ###
+
+func void level_8a(void)
+{
+	dprint text_8a
+	text_console level_8a
+	console_reset 17
+}
+
+func void level_8b(void)
+{
+	dprint text_8b
+	text_console level_8b
+	console_reset 12
+}
+
+func void level_8c(void)
+{
+	dprint text_8c
+	text_console level_8c
+	console_reset 14
+}
+
+func void level_8d(void)
+{
+	dprint text_8d
+	text_console level_8d
+	console_reset 16
+}
+
+func void level_8e(void)
+{
+	dprint text_8e
+	text_console level_8e
+	console_reset 15
+}
+
+func void level_8f(void)
+{
+	dprint text_8f
+	text_console level_8f
+	console_reset 13
+}
Index: AE/packages/VanillaBSL/IGMD/tctf/tctf_spawn_syndicate.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/tctf/tctf_spawn_syndicate.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/tctf/tctf_spawn_syndicate.bsl	(revision 313)
@@ -0,0 +1,1071 @@
+#
+# tctf_spawn_syndicate.bsl
+#
+# SCRIPTS TO SPAWN SYNDICATE UNITS
+#
+
+var int my_save_point=0;
+var int striker_count=0;
+var int music_counter = 0;
+var int counter = 0;
+var int elev_count=0;
+var int shut_down_t103;
+var int count_follow;
+
+# music #
+
+func void music_intro(void)
+{
+	sound_music_start mus_asianb
+}
+
+func void music_intro_stop(void)
+{
+	sound_music_stop mus_asianb
+}
+
+func void music_attack(void)
+{
+	sound_music_start mus_pursuit 0
+	sound_music_volume mus_pursuit 0.75 3.0
+#	this music stopped in floor4_lock script
+}
+
+func void music_kidnap(void)
+{
+	dprint kidnapmusic
+	sound_music_start mus_om01 0.0
+	sound_music_volume mus_om01 0.75 3.0
+#	this music stopped in ta2_54 script
+}
+
+func void music_battle(void)
+{
+	sound_music_start mus_asianb 0
+	sound_music_volume mus_asianb 2
+#	this music stopped in final script
+}
+
+func void music_stop(void)
+{
+	dprint STOP_THE_MUSIC
+	sound_music_stop mus_asianb
+	sound_music_stop mus_pursuit
+	sound_music_stop mus_om01
+#	sound_music_stop mus_asianb
+}
+
+
+###############################
+#	start and objectives   	#
+###############################
+func void start(string ai_name)
+{
+	dprint start
+
+	trig_deactivate	1	
+	trig_deactivate	2	
+	trig_deactivate	3	
+	trig_deactivate	4	
+	trig_deactivate	5
+	trig_deactivate	6
+	trig_deactivate	7
+	trig_deactivate	8
+	trig_deactivate	9
+	trig_deactivate	10
+	trig_deactivate	60
+	trig_deactivate	61
+	trig_deactivate	62
+	trig_deactivate	63
+	trig_deactivate	64
+	trig_deactivate	65
+	trig_deactivate	70
+	trig_deactivate	71
+	trig_deactivate	72
+	trig_deactivate	73
+	trig_deactivate	74
+	trig_deactivate	75
+	trig_deactivate	302	
+	trig_deactivate	303	
+	trig_deactivate	100
+	trig_deactivate	101	
+	trig_deactivate	500	
+	trig_deactivate	501	
+	trig_deactivate	502	
+	trig_deactivate	503	
+	trig_deactivate	400	
+	trig_deactivate	510
+	trig_deactivate 511
+	trig_deactivate	512	
+	trig_deactivate	520
+	trig_deactivate	521
+	trig_deactivate	522
+	trig_deactivate	310
+	trig_deactivate	320
+	trig_deactivate	98
+	trig_deactivate	99
+	trigvolume_enable trigger_volume_81 0
+	trigvolume_enable z_40t 0
+	trigvolume_enable zz_40t 0
+	trigvolume_enable zzz_40t 0
+	trigvolume_enable zzzz_40t 0
+	trigvolume_enable tv_61t 0
+
+	if (save_point eq 0)
+	{
+		my_save_point=0;	
+		set_objective_1
+		particle security_locklight01 do start
+		particle smoke start
+	}
+
+	if (save_point eq 1)
+	{
+		my_save_point=1;	
+		dprint restore1
+		set_objective_1
+		particle smoke start
+		particle security_locklight01 do start
+		env_show 398 0
+		#turn off unbroken curtain wall
+		env_show 98 0
+		#turn on broken curtain wall
+		env_show 99 1
+		#show gunk van 
+		env_show 101 1 
+		env_show 103 1
+		env_show 104 1
+		env_show 105 1
+		env_show 106 1
+		env_show 107 1
+		env_show 108 1
+		env_show 444 1
+		env_show 97 0
+		#show gunk motorcycle
+		env_show 110 1
+		env_show 111 1
+		env_show 112 1
+		#show door gunk
+		env_show 321 1
+		env_show 322 1
+		env_show 323 1
+		env_show 324 1
+		env_show 325 1
+		env_shade 321 325 .3 .3 .3
+		ai2_spawn lobby_striker_01
+		ai2_spawn lobby_striker_02
+		ai2_spawn lobby_striker_03
+		music_intro
+		restore_game
+		sleep 7
+		sound_dialog_play c07_22_01konoko
+		particle LobbyWall do explode
+	}
+
+	if (save_point eq 2)
+		{
+		my_save_point=2;	
+		dprint restore2
+		set_objective_3
+		trigvolume_enable tv_58t 0
+		door_lock 41
+		chr_delete lobby_victim
+		trigvolume_enable trigger_volume_80 0
+		music_kidnap
+		restore_game
+		}
+
+	if (save_point eq 3)
+	{
+		my_save_point=3;	
+		dprint restore3
+		trigvolume_enable t86 0
+		set_objective_5
+		trigvolume_enable tsh_55t 0
+		#Hide elevator gunk 
+		env_show 501 0 
+		env_show 502 0 
+		env_show 503 0 
+		env_show 504 0 
+		#Show new elevator gunk 
+		env_show 601 1 
+		env_show 602 1 
+		fork tsh_55
+		restore_game
+		trigvolume_enable tv_58t 0
+	}
+
+	if (save_point eq 4)
+		{
+		my_save_point=4;	
+		dprint restore4
+		set_objective_5
+		trigvolume_enable tsh_60t 0
+		trigvolume_enable tr_66t 0
+		trigvolume_enable tr_67t 0
+		trigvolume_enable tr_65t 0
+		trigvolume_enable tr_64t 0
+		ai2_spawn barabus
+		chr_boss_shield barabus
+		target_set(1,0.0)
+		restore_game
+		}
+
+}
+
+func void striker_spawn(string ai_name)
+{
+	dprint striker_spawn
+	striker_count =  striker_count + 1
+}
+
+func void striker_die(string ai_name)
+{
+	dprint striker_die
+	striker_count =  striker_count - 1
+}
+
+#########################
+#	trigger volumes	#
+#########################
+
+func void t102(string ai_name)
+{
+	ai2_spawn mbo_sniper
+	ai2_spawn mbo_target
+}
+
+func void t103(string ai_name)
+{
+	dprint t103
+	trigvolume_enable trigger_volume_103 0
+	sleep 7
+	if(elev_count ne 1)
+	{
+		if (chr_has_lsi(0))
+		{
+			trigvolume_enable trigger_volume_81 1
+			objective_set(4)
+			particle obj1 create
+			target_set(9999, 30.0)
+			shut_down_t103 = 1;
+		}
+	}
+	if(shut_down_t103 eq 0)
+	{
+		sleep 60
+		trigvolume_enable trigger_volume_103 1
+	}
+}
+
+func void spawnL2_4(string ai_name)
+{
+	dprint spawnL2_4
+	ai2_spawn lobby_striker_04
+	playback lobby_striker_04 lobbystriker_roll
+	trigvolume_enable u_36t 0
+	
+}
+
+func void spawnL1_6(string ai_name)
+{
+	dprint spawnL1_6
+	ai2_spawn lobby_striker_06
+	trigvolume_enable tv_50t 0
+
+}
+
+func void spawnG2_7(string ai_name)
+{
+	dprint spawnG2_7
+	ai2_spawn garage_striker_01
+	ai2_spawn garage_striker_02
+	
+}
+
+func void spawnG3_8(string ai_name)
+{
+	dprint spawnG3_8
+	if (striker_count eq 0)
+	{
+		ai2_spawn garage_striker_03
+		ai2_makeignoreplayer garage_striker_03 1
+		ai2_spawn garage_striker_04
+		ai2_spawn garage_striker_05
+		playback_block garage_striker_03 garage_jump
+		ai2_makeignoreplayer garage_striker_03 0
+	}
+	if (striker_count ne 0)
+	{
+		ai2_spawn garage_striker_03
+		ai2_makeignoreplayer garage_striker_03 1
+		playback_block garage_striker_03 garage_jump
+		ai2_makeignoreplayer garage_striker_03 0
+	}
+}
+
+func void spawnG3_11(string ai_name)
+{
+	dprint spawnG3_11
+	ai2_spawn garage_striker_07
+	ai2_passive garage_striker_07 1
+	ai2_spawn garage_striker_08
+	playback garage_striker_07 garage_taunt
+	ai2_passive garage_striker_07 0
+
+}
+
+func void spawnG3_12(string ai_name)
+{
+	dprint spawnG3_12
+	
+	if (striker_count eq 0)
+	{
+		ai2_spawn garage_striker_09
+		ai2_spawn garage_striker_10
+	}
+	if (striker_count ne 0)
+	{
+		ai2_spawn garage_striker_09
+	}
+}
+
+func void killG2_08(string ai_name)
+{
+	dprint killG2_08
+	trigvolume_enable trigger_volume_G2_08 0 
+	
+}
+
+func void killG2_10(string ai_name)
+{
+	dprint killG2_10
+	trigvolume_enable trigger_volume_G2_10 0 
+	
+}
+
+func void killG3_11(string ai_name)
+{
+	dprint killG3_11
+	trigvolume_enable trigger_volume_G3_11 0 
+	
+}
+
+func void killG3_12(string ai_name)
+{
+	dprint killG3_12
+	trigvolume_enable trigger_volume_G3_12 0 
+	
+}
+
+func void a_18(string ai_name)
+{
+	dprint a_18
+	trigvolume_enable b_19t 0 
+	trigvolume_enable c_13t 0 
+
+}
+
+func void b_19(string ai_name)
+{
+	dprint b_19
+	ai2_spawn lobby_striker_30
+	ai2_spawn lobby_striker_31
+	playback lobby_striker_31 lobby_roll2
+#	ai2_spawn lobby_striker_33
+#	ai2_spawn lobby_tctf_02
+	trigvolume_enable d_20t 0
+}
+
+func void c_13(string ai_name)
+{
+	dprint c_13
+	ai2_spawn lobby_striker_20
+	ai2_spawn lobby_striker_21
+	ai2_spawn lobby_fodder01
+	ai2_spawn lobby_striker_05
+	trigvolume_enable vv_38t 0
+	trigvolume_enable a_18t 0
+	music_stop
+}
+
+func void d_20(string ai_name)
+{
+	dprint d_20
+	ai2_spawn l2_s46
+	ai2_spawn l2_s44
+	playback_block l2_s44 lobby_roll3
+
+}
+
+func void e_21(string ai_name)
+{
+	dprint e_21
+	ai2_spawn lobby_striker_34
+	ai2_spawn lobby_victim05
+	ai2_spawn lobby_victim06
+	trigvolume_enable l_27t 0
+}
+
+func void f_22(string ai_name)
+{
+	dprint f_22
+	ai2_spawn lobby_striker_05
+	trigvolume_enable vv_38t 0
+	ai2_spawn lobby_striker_20
+	ai2_spawn lobby_fodder01
+	ai2_spawn lobby_striker_21
+
+}
+
+func void g_23(string ai_name)
+{
+	dprint g_23
+	ai2_spawn L2s_01
+	ai2_spawn L2s_02
+	ai2_spawn L2s_03
+	ai2_spawn L2tctf_01
+	ai2_spawn L2tctf_02
+	music_stop
+	trigvolume_enable trigger_volume_w_39 0
+
+}
+
+func void h_06(string ai_name)
+{
+	dprint h_06
+	ai2_spawn L2s_10
+	ai2_spawn Ls_15
+	ai2_spawn Ltctf_55
+	ai2_dopath L2tctf_01 patrol_L2_13
+	ai2_dopath L2tctf_02 patrol_L2_13
+
+}
+
+func void i_24(string ai_name)
+{
+	dprint i_24
+	trigvolume_enable j_25t 0
+	trigvolume_enable h_06t 0
+
+}
+
+func void j_25(string ai_name)
+{
+	dprint j_25
+	ai2_spawn L2s_11
+
+}
+
+func void k_26(string ai_name)
+{
+	dprint k_26
+	trigvolume_enable l_27t 1
+
+}
+
+func void l_27(string ai_name)
+{
+	dprint l_27
+	ai2_spawn L3s_40
+	ai2_spawn L3s_41
+#	ai2_spawn L3s_42
+
+}
+
+func void m_28(string ai_name)
+{
+	dprint m_28
+	ai2_spawn Lv_40
+	ai2_spawn Lv_41
+	ai2_spawn Lc_43
+	ai2_spawn Ls_44
+	trigvolume_enable s_34t 1
+
+}
+
+func void n_29(string ai_name)
+{
+	dprint n_29
+	ai2_spawn Lc_50
+	ai2_spawn Ls_51
+	ai2_spawn Ls_12
+
+}
+
+func void o_30(string ai_name)
+{
+	dprint o_30
+	ai2_spawn Ls_60
+	ai2_spawn a_v2
+	
+}
+
+func void p_31(string ai_name)
+{
+	dprint p_31
+	trigvolume_enable trigger_volume_L2_4 1
+
+}
+
+func void s_34(string ai_name)
+{
+	dprint s_34
+	ai2_spawn Lcom_01
+
+}
+
+func void t_35(string ai_name)
+{
+	dprint t_35
+	trigvolume_enable s_34t 0
+
+}
+
+func void u_36(string ai_name)
+{
+	dprint u_36
+	ai2_spawn cat1_02
+	trigvolume_enable trigger_volume_L2_4 0
+}
+
+func void v_37(string ai_name)
+{
+	dprint v_37
+	ai2_spawn cat1_01
+	trigvolume_enable vv_38t 0
+	
+}
+
+func void t98(string ai_name)
+{
+	dprint t98
+	ai2_spawn a_v4
+}
+
+func void vv_38(string ai_name)
+{
+	dprint vv_38
+	ai2_spawn lobby_striker_05
+	ai2_spawn lobby_striker_20
+	ai2_spawn lobby_striker_21
+	ai2_spawn lobby_fodder01
+	trigvolume_enable v_37t 0
+
+}
+
+func void w_39(string ai_name)
+{
+	dprint w_39
+	ai2_spawn s2_t01
+	ai2_spawn s2_t02
+	ai2_spawn s2_s01
+	ai2_spawn s2_s02
+	ai2_spawn s2_s03
+#	ai2_spawn s2_c01
+	ai2_spawn s2_s05
+	ai2_spawn s2_t05
+	trigvolume_enable g_23t 0
+
+}
+
+func void x_05(string ai_name)
+{
+	dprint x_05
+	ai2_spawn l_c01
+	ai2_lookatme l_c01
+	ai2_passive l_c01 1
+	playback l_c01 lobby_runout
+	ai2_passive l_c01 0
+	trigvolume_enable trigger_volume_L1_6_9 0
+
+}
+
+func void y_32(string ai_name)
+{
+	dprint y_32
+	ai2_spawn l_t01
+	playback l_t01 lobby_backroll
+	sleep 15
+	ai2_spawn l_s02
+	ai2_spawn l_s03
+	trigvolume_enable tv_47t 0
+
+}
+
+func void unlock_follow(void)
+{
+	dprint unlockfollow
+	count_follow = count_follow + 1;
+	if(count_follow eq 2)
+	{
+		trigvolume_enable z_40t 1
+		trigvolume_enable zz_40t 1
+		trigvolume_enable zzz_40t 1
+		trigvolume_enable zzzz_40t 1
+		trigvolume_enable tv_61t 1
+	}
+}
+
+func void patrolscript2222(void)
+{
+	dprint lookatplayer
+	ai2_lookatchar l_t01 char_0
+	ai2_lookatchar l_t23 char_0
+}
+	
+func void z01(string ai_name)
+{
+	dprint z01
+
+	ai2_dopath l_t01 l_t01_01
+	ai2_setjobstate l_t01
+
+	ai2_dopath l_t23 l_t23_04
+	ai2_setjobstate l_t23
+
+}
+
+func void z02(string ai_name)
+{
+	dprint z02
+	ai2_dopath l_t01 l_t01_04
+	ai2_setjobstate l_t01
+	
+	ai2_dopath l_t23 l_t23_02
+	ai2_setjobstate l_t23
+}
+
+func void z03(string ai_name)
+{
+	dprint z03
+	ai2_dopath l_t01 l_t01_05
+	ai2_setjobstate l_t01
+
+	ai2_dopath l_t23 l_t23_01
+	ai2_setjobstate l_t23
+}
+
+func void z04(string ai_name)
+{
+	dprint z04	
+	ai2_dopath l_t01 l_t01_06
+	ai2_setjobstate l_t01
+
+	ai2_dopath l_t23 l_t23_06
+	ai2_setjobstate l_t23
+}
+
+func void z05(string ai_name)
+{
+	dprint z05
+	ai2_dopath l_t01 l_t01_07
+	ai2_setjobstate l_t01
+
+	ai2_dopath l_t23 l_t23_07
+	ai2_setjobstate l_t23
+}
+
+func void z06(string ai_name)
+{
+	dprint z06
+	ai2_dopath l_t01 l_t01_08
+	ai2_setjobstate l_t01
+
+	ai2_dopath l_t23 l_t23_08
+	ai2_setjobstate l_t23
+}
+
+func void z_40(string ai_name)
+{
+	dprint z_40
+	ai2_followme l_t01
+	ai2_lookatme l_t01
+	ai2_followme l_t23
+	ai2_lookatme l_t23
+	ai2_followme s2_t05
+	ai2_lookatme s2_t05
+	ai2_followme s2_t02
+	ai2_lookatme s2_t02
+	ai2_followme s2_t01
+	ai2_lookatme s2_t01
+	ai2_followme L2tctf_02
+	ai2_lookatme L2tctf_02
+	ai2_followme L2tctf_01
+	ai2_lookatme L2tctf_01
+	ai2_followme Lc_43
+	ai2_lookatme Lc_43
+
+}
+
+func void tv_44(string ai_name)
+{
+	dprint tv_44
+	ai2_spawn l_c10
+	ai2_dopath l_t01 l_t01_02
+	ai2_setjobstate l_t01
+
+	ai2_dopath l_t23 l_t23_03
+	ai2_setjobstate l_t23
+}
+
+func void tv_45(string ai_name)
+{
+	dprint tv_45
+	ai2_spawn a_v1
+	ai2_spawn l_s22
+	ai2_spawn l_s23
+	ai2_dopath l_t01 l_t01_03
+	ai2_setjobstate l_t01
+
+	ai2_dopath l_t23 l_t23_05
+	ai2_setjobstate l_t23
+
+}
+
+func void tv_46(string ai_name)
+{
+	dprint tv_46
+	ai2_spawn l_s24
+	ai2_spawn l_t23
+	trigvolume_enable tv_47t 1
+	ai2_dopath l_t01 l_t01_06
+	ai2_setjobstate l_t01
+}
+
+func void tv_47(string ai_name)
+{
+	dprint tv_47
+	ai2_spawn l_s27
+
+}
+
+func void tv_48(string ai_name)
+{
+	dprint tv_48
+	ai2_spawn l2_s46
+
+}
+
+func void tv_49(string ai_name)
+{
+	dprint tv_49
+	ai2_spawn l2_s47
+
+}
+
+func void tv_50(string ai_name)
+{
+	dprint tv_50
+	ai2_spawn l_s99
+	ai2_spawn l_s98
+	music_stop
+
+}
+
+func void tv_51(string ai_name)
+{
+	dprint tv_51
+	ai2_spawn l4_red1
+	ai2_spawn l4_t1
+	ai2_spawn l4_s1
+	ai2_spawn l4_s67
+	ai2_spawn l4_t2
+	ai2_spawn l4_s2
+	ai2_spawn l4_s3	
+	ai2_spawn l4_f1
+	ai2_spawn l4_f2
+	ai2_spawn l4_f3
+	ai2_kill l4_f1
+	ai2_kill l4_f2
+	ai2_kill l4_f3
+	ai2_spawn l4_c66
+	ai2_kill l4_c66
+	
+}
+
+func void tv_52(string ai_name)
+{
+	dprint tv_52
+	particle smoke stop
+	ai2_spawn a_t03
+	ai2_passive a_t03 1
+	playback a_t03 atrium_run
+	sleep 7
+	ai2_spawn a_t06
+	sleep 7
+	ai2_spawn a_s02
+	sleep 7
+	ai2_spawn a_s03
+	sleep 7
+	ai2_spawn a_red1
+	ai2_passive a_t03 0
+	chr_set_health a_t05 900
+	chr_set_health a_t06 900
+	chr_set_health a_s02 900
+	chr_set_health a_s03 900
+}
+func void new_atrium(string ai_name)
+{
+	ai2_spawn a_s07
+	ai2_spawn a_s05
+	ai2_spawn a_v3
+}
+
+func void ta_53(string ai_name)
+{
+	dprint ta_53
+	ai2_spawn a_t05
+	ai2_dopath a_s03 patrol_7043
+	ai2_setjobstate a_s03
+	ai2_dopath a_s02 patrol_7030
+	ai2_setjobstate a_s02
+	ai2_dopath a_t06 patrol_7034
+	ai2_setjobstate a_t06
+	ai2_dopath a_t05 patrol_7042
+	ai2_setjobstate a_t05
+	chr_set_health a_t05 40
+	chr_set_health a_t06 30
+	chr_set_health a_s02 80
+	chr_set_health a_s03 80
+	sleep 2000
+	dprint no_more_tctf
+	counter = 100
+
+}
+
+func void ta_53b(string ai_name)
+{
+	dprint ta_53b
+	chr_set_health a_t05 80
+	chr_set_health a_t06 60
+	chr_set_health a_s02 70
+	chr_set_health a_s03 80
+}
+
+func void ta2_54(string ai_name)
+{
+	dprint ta2_54
+	ai2_spawn a2_t1
+	ai2_spawn a2_red1
+	ai2_spawn LSI
+	chr_invincible LSI 1
+	sleep 240
+	music_stop
+}
+
+func void tsh_55(string ai_name)
+{
+	dprint tsh_55
+	ai2_spawn sh_tank1
+	ai2_spawn sh_red1
+	ai2_spawn sh_s3
+	ai2_spawn sh_s4
+	ai2_spawn sh_s4b
+	set_objective_5
+	sleep 120
+	ai2_attack sh_s3 char_0
+}
+
+func void t62(string ai_name)
+{
+	dprint t62
+	ai2_spawn sh_s1
+	ai2_spawn sh_s2
+	ai2_spawn sh_s6
+}
+
+func void femcop_holster(string ai_name)
+{
+	dprint holstergun
+	chr_forceholster Lc_43 1
+}
+
+func void t72(string ai_name)
+{
+	dprint t72
+	ai2_spawn sh_com1
+	ai2_spawn sh_tank2
+	ai2_spawn sh_s9
+}
+
+func void tv57(string ai_name)
+{
+	dprint tv57
+	Attack
+	target_set(59,30.0)
+}
+
+func void goAttack(string ai_name)
+{
+	music_intro_stop
+
+	dprint goAttack
+	trigvolume_enable tv_57t 1
+	input 0
+	fade_out 0 0 0 30
+	chr_delete l_c01
+	chr_delete lobby_striker_01
+	chr_delete lobby_striker_02
+	chr_delete garage_striker_01
+	chr_delete garage_striker_02
+	chr_delete garage_striker_03
+	chr_delete garage_striker_04
+	chr_delete garage_striker_05
+	chr_delete garage_striker_06
+	chr_delete garage_striker_07
+	chr_delete garage_striker_08
+	chr_delete garage_striker_09
+	chr_delete garage_striker_10
+	chr_delete l_s98
+	chr_delete l_s99	
+	cm_interpolate stair_lock 0
+	fade_in 30
+	sleep 60
+	particle stair_lock_locklight01 do start
+	sleep 90
+	fade_out 0 0 0 30
+	cm_reset
+	fade_in 30
+	input 1
+	set_objective_2
+	ai2_spawn tanker_stairdoor
+	sound_dialog_play c00_01_27shinatama
+}
+
+func void tsh_60(string ai_name)
+{
+	dprint tsh_60
+	ai2_spawn sh_s12
+	ai2_spawn sh_s12b
+	helicopter
+}
+
+func void ta_62(string ai_name)
+{
+	dprint ta_62
+	if (chr_has_lsi(0))
+	{	
+		trigvolume_enable trigger_volume_81 0
+		particle obj1 kill
+		ai2_kill
+		elev_count = 1;
+		sleep 10
+		Elevator
+	}
+}
+
+func void tv_58(string ai_name)
+{
+	dprint tv_58
+	door_lock 41
+	particle security_locklight01 do stop
+	ai2_kill
+	Kidnap
+	set_objective_3
+	s2
+}
+
+func void tv_68(string ai_name)
+{
+	dprint tv_68
+	ai2_spawn b_victim
+}
+
+func void tr_64(string ai_name)
+{
+	dprint tr_64
+	target_set(58,0.0)
+	HeliOutroRight
+	trigvolume_enable tr_65t 0
+	trigvolume_enable tr_66t 0
+	trigvolume_enable tr_67t 0
+
+}
+
+func void tr_65(string ai_name)
+{
+	dprint tr_65
+	target_set(58,0.0)
+	HeliOutroLeft
+	trigvolume_enable tr_64t 0
+	trigvolume_enable tr_66t 0
+	trigvolume_enable tr_67t 0
+
+}
+
+func void tr_66(string ai_name)
+{
+	dprint tr_66
+	target_set(58,0.0)
+	HeliOutroMid
+	trigvolume_enable tr_65t 0
+	trigvolume_enable tr_64t 0
+	trigvolume_enable tr_67t 0
+
+}
+
+func void tr_67(string ai_name)
+{
+	dprint tr_67
+	target_set(58,0.0)
+	HeliOutroMidLt
+	trigvolume_enable tr_65t 0
+	trigvolume_enable tr_66t 0
+	trigvolume_enable tr_64t 0
+
+}
+
+func void t100(string ai_name)
+{
+	dprint t100
+	ai2_spawn roof_tctf1
+	ai2_spawn sh_s12c
+}
+#####################
+#	save scripts  #
+#####################
+
+func void s1(string ai_name)
+{
+	dprint SAVEDGAME	
+	save_game 1 autosave
+}
+
+func void s2(string ai_name)
+{
+	dprint SAVEDGAME	
+	save_game 2 autosave
+}
+
+func void s3(string ai_name)
+{
+	dprint SAVEDGAME	
+	save_game 3 autosave
+}
+
+func void s4(string ai_name)
+{
+	dprint SAVEDGAME	
+	save_game 4 autosave
+}
+
+func void check_death(string ai_name)
+{
+	dprint check_death
+	counter = counter - 1
+	if (trigvolume_count(99) eq 0)
+	{	
+		if(counter eq 0)
+		{
+			sleep 210
+			ai2_spawn a_t99
+		}
+	}
+}
+
+func void spawn(string ai_name)
+{
+	dprint spawn	
+	counter = counter + 1
+}
Index: AE/packages/VanillaBSL/IGMD/tctf_ii/tctf2.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/tctf_ii/tctf2.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/tctf_ii/tctf2.bsl	(revision 313)
@@ -0,0 +1,2024 @@
+#	tctf2_spawn
+#	scripts for level 18 by wu
+
+var int counter=3;
+var int my_save_point=0;
+var int counterA=0;
+var int counterB=0;
+var int counterC=0;
+var int counterD=0;
+var int counterDestroy=0;
+var int lastdoor_count=0;
+var int sub1 = 0;
+var int sub2 = 0;
+var int sub3 = 0;
+var int ld1;
+var int ld2;
+var int ld3;
+var int audio_counter = 3;
+
+#########
+# music #
+#########
+func void music_intro(void)
+{
+	sound_music_start mus_main03 1.0
+#	this music stopped in t2 script
+}
+
+func void music_chair(void)
+{
+	dprint music_chair
+	sound_music_start mus_wls 1.0
+#	this music stopped in 11 and 11b script
+}
+
+func void music_atrium(void)
+{
+	dprint music_atrium
+	sound_music_start mus_trt .8
+#	this music stopped in check_power script
+}
+
+func void music_zom(void)
+{
+	dprint music_zom
+	sound_music_start mus_sv 0.75
+#	this music stopped in Zom script
+}
+
+func void music_stop(void)
+{
+	dprint STOP_THE_MUSIC
+	sound_music_stop mus_main03
+	sound_music_stop mus_wls
+	sound_music_stop mus_trt
+	sound_music_stop mus_sv
+}
+
+func void spawnA(void)
+{
+		dprint spawn_zone_A
+
+		ai2_spawn A_L19
+		ai2_spawn l1
+		ai2_spawn l3
+		ai2_spawn A_L12
+		ai2_spawn A_Lbo13
+		ai2_spawn A_L8
+		ai2_spawn l7
+}
+###############################
+#	start and objectives    #
+###############################
+func void start(string ai_name)
+{
+	dprint start
+	trig_deactivate	1	
+	trig_deactivate	2	
+	trig_deactivate	3	
+	trig_deactivate	4	
+	trig_deactivate	5
+	trig_deactivate	6
+	trig_deactivate	7
+	trig_deactivate	8
+	trig_deactivate	9
+	trig_deactivate 91
+	trig_deactivate 92
+	trig_deactivate 93
+	trig_deactivate	98
+	trig_deactivate	99
+	trig_deactivate	10
+	trig_deactivate	302	
+	trig_deactivate	303	
+	trig_deactivate	315
+	trig_deactivate	320	
+	trig_deactivate	100
+	trig_deactivate	101	
+	trig_deactivate	500	
+	trig_deactivate	501	
+	trig_deactivate	502	
+	trig_deactivate	503	
+	trig_deactivate	400		
+	trig_deactivate	510
+	trig_deactivate 511
+	trig_deactivate	512	
+	trig_deactivate	520
+	trig_deactivate	521
+	trig_deactivate	522
+	door_unlock 65
+	door_unlock 71
+#	door_unlock 59
+	door_unlock 61	
+	door_unlock 67
+	door_lock 7
+	door_lock 4
+	door_lock 5
+	door_lock 8
+	door_lock 6
+	door_lock 9
+	console_deactivate 3
+
+	# incidental zombie shinatama dialog
+	trigvolume_enable shinzom_voice1 0
+	trigvolume_enable shinzom_voice2 0
+	trigvolume_enable shinzom_voice3 0
+	trigvolume_enable shinzom_voice4 0
+
+	particle griffin_locklight01 do start
+	particle door42_locklight01 do start
+	particle stair_lock_locklight01 do start
+	particle roof_doors_locklight01 do start
+	trigvolume_enable trigger_volume_29 0
+	trigvolume_enable trigger_volume_35 0
+	trigvolume_enable trigger_volume_39 0
+	trigvolume_enable trigger_volume_36 0
+	trigvolume_enable trigger_volume_41 0
+
+	my_save_point = save_point;
+
+	if (my_save_point eq 0)
+	{
+		objective_set(1)
+		target_set(590,30.0)
+
+		Intro	
+		spawnA
+	}
+
+	if (my_save_point eq 1)
+	{
+		dprint restore1
+		objective_set(1)
+		env_show 403 0 
+		target_set(590,30.0)
+		spawnA
+		music_intro
+		restore_game
+	}
+
+	if (my_save_point eq 2)
+	{
+		dprint restore2
+		objective_set(2)
+		target_set(593,30.0)
+		trigvolume_enable trigger_volume_06 0
+		ai2_spawn B_S22
+
+		particle shin_lock_locklight01 do start
+		door_unlock 48
+		door_unlock 14
+		trig_activate	6
+		trig_activate	7
+		trig_activate	99
+		trig_activate	98
+		restore_game
+	}
+
+	if (my_save_point eq 3)
+	{
+		dprint restore3
+		particle shin_lock_locklight01 do stop
+		door_lock 14
+		objective_set(2)
+		trigvolume_enable trigger_volume_46 0
+		trigvolume_enable trigger_volume_47 0
+		trig_deactivate	60
+		trig_deactivate	61
+		trig_deactivate	62
+		trig_deactivate	63
+		trig_deactivate	64
+		trig_deactivate	65
+		trig_deactivate	70
+		trig_deactivate	71
+		trig_deactivate	72
+		trig_deactivate	73
+		trig_deactivate	74
+		trig_deactivate	75
+		trig_deactivate 91
+		trig_deactivate 92
+		trig_deactivate 93
+		trig_deactivate	98
+		trig_deactivate	99
+		trig_deactivate	6
+		trig_deactivate	7
+		target_set(587,30.0)
+		restore_game
+		spine1
+		sleep 7
+		spine2
+		sleep 7
+		spine3
+	}
+
+	if (my_save_point eq 4)
+	{
+		dprint restore4
+		objective_set(3)
+		target_set(596,30.0)
+		trig_deactivate	60
+		trig_deactivate	61
+		trig_deactivate	62
+		trig_deactivate	63
+		trig_deactivate	64
+		trig_deactivate	65
+		trig_deactivate	70
+		trig_deactivate	71
+		trig_deactivate	72
+		trig_deactivate	73
+		trig_deactivate	74
+		trig_deactivate	75
+		trig_deactivate 91
+		trig_deactivate 92
+		trig_deactivate 93
+		trig_deactivate	98
+		trig_deactivate	99
+		trig_deactivate	6
+		trig_deactivate	7
+		door_lock 42
+		particle door42_locklight01 do stop
+		ai2_spawn D_N74
+		restore_game
+	}
+
+	if (my_save_point eq 5)
+	{
+		dprint restore5
+		objective_set(4)
+		trigvolume_enable trigger_volume_42 0
+		trigvolume_enable trigger_volume_35 0
+		particle ZomShin_door_locklight01 do stop
+		door_lock 16
+
+		#TCTF II cutscene "Base"
+		env_show 171 1
+		env_show 172 1
+		env_show 173 1
+		env_show 174 1
+		particle Forcefield do start
+		particle zombiesteam start
+		sound_ambient_start zomshin_amb_loop 1.0
+		music_zom
+
+		#these next lines place griffin where he should be
+		dprint place_griffin_and_holster
+		ai2_spawn ZomGrif
+		ai2_makeignoreplayer ZomGrif 1
+		# make sure that griffin is aiming his weapon!
+		ai2_setmovementmode ZomGrif walk
+		# ai2_passive ZomGrif 1
+		playback ZomGrif ZomGrifDraw
+
+		# don't call the GrifSpawn function again
+		trigvolume_enable t9 0
+
+		create_zomshin
+		playback ZomShin BaseShin
+
+		restore_game
+
+		zombie_round_2
+	#	chr_teleport 0 589
+	}
+}
+
+func void you_lose(string ai_name)
+{
+	sleep 240
+	fade_out 0 0 0 180 
+	sleep 240
+	lose
+}
+
+func void you_win(int char_index)
+{
+	outro
+	win
+}
+
+func void set_objective_1(string ai_name)
+{
+	dprint set_objective_1
+	objective_set(1)
+	target_set (1,0)
+}
+
+func void set_objective_2(string ai_name)
+{
+	dprint set_objective_2
+	objective_set(2)
+	target_set (1,0)
+}
+
+func void set_objective_3(string ai_name)
+{
+	dprint set_objective_3
+	objective_set(3)
+	target_set (1,0)
+}
+
+func void set_objective_4(string ai_name)
+{
+	dprint set_objective_4
+	objective_set(4)
+	target_set (401,30)
+	particle ZomShin_door_locklight01 do start
+}
+
+
+#################################
+#	cut scene scripts         #
+#################################
+
+func void grifdies(string ai_name)
+{
+	killed_griffen 1
+	OutroKill
+}
+
+func void t35(string ai_name)
+{
+	killed_griffen 0
+	OutroNoKill
+}
+
+func void outta_sight(string ai_name)
+{
+	ai2_dopath n5 patrol_99
+	ai2_setjobstate n5
+}
+
+#########################
+#  trigger volume stuff #
+#########################
+
+func void t68(string ai_name)
+{
+	ai2_spawn mbo_femcop
+}
+
+func void t2(string ai_name)
+{
+	dprint t2_active
+	trigvolume_enable trigger_volume_61 0
+	ai2_spawn n5
+	ai2_spawn A_Sbo14
+	ai2_dopath A_Sbo14 patrol_14
+	ai2_setjobstate A_Sbo14
+	ai2_spawn A_Sbo15
+	sleep 30
+	ai2_dopath A_Sbo15 patrol_14
+	ai2_setjobstate A_Sbo15
+#	ai2_spawn A_Sbo16
+	music_stop
+
+}
+
+func void t61(string ai_name)
+{
+	dprint t61_active
+	trigvolume_enable trigger_volume_02 0
+	ai2_spawn n5
+	ai2_spawn A_Sbo14
+	ai2_spawn A_Sbo15
+	music_stop
+}
+
+func void t3(string ai_name)
+{
+	dprint t3_active
+	ai2_dopath A_n17 patrol_16
+	ai2_setjobstate A_n17
+
+}
+
+func void t4(string ai_name)
+{
+	dprint t4_active
+	ai2_spawn A_L18
+}
+
+func void t6(string ai_name)
+{
+	dprint t6_active
+	ai2_spawn A_L20
+	ai2_spawn A_L21	
+	ai2_spawn B_S22
+	ai2_makeignoreplayer B_S22 1
+	trig_activate	6
+	trig_activate	7
+	trig_activate	99
+	trig_activate	98
+	target_set(593,30.0)
+}
+
+func void t7(string ai_name)
+{
+	dprint t7_active
+	ai2_dopath B_S22 patrol_23
+	ai2_setjobstate B_S22
+	ai2_makeignoreplayer B_S22 0
+	ai2_spawn B_N28	
+}
+
+func void t7b(string ai_name)
+{
+	dprint t7b_active
+	ai2_spawn B_Lbo26
+	playback_block B_Lbo26 run1 interp 20
+	sleep 20
+	ai2_dopath B_Lbo26 patrol_27
+	ai2_setjobstate B_Lbo26
+		
+}
+
+func void t8(string ai_name)
+{
+	dprint t8_active
+	chr_delete A_L19
+	chr_delete l1
+	chr_delete l3
+	chr_delete A_L12
+	chr_delete A_Lbo13
+	chr_delete A_L8
+	chr_delete l7
+	chr_delete n5
+	chr_delete A_T25
+	chr_delete A_n17
+	chr_delete A_N31
+	ai2_spawn B_Sbo38
+	ai2_spawn B_S36	
+	ai2_makeignoreplayer B_S36 1
+	ai2_spawn B_L40
+	ai2_spawn B_L41
+	music_chair
+	sleep 90
+	substation_monologue
+}
+
+func void t9(string ai_name)
+{
+	dprint t9_spawning_griffin
+#	ai2_spawn ZomGrif
+	GrifSpawn
+	target_set (1,0.0)
+}
+
+func void t10(string ai_name)
+{
+	dprint t10_active
+	ai2_spawn B_S29
+}
+
+func void t11(string ai_name)
+{
+	dprint t11_active
+	ai2_dopath B_S36 patrol_38
+	ai2_setjobstate B_S36
+	ai2_makeignoreplayer B_Sbo38 0
+#	ai2_makeignoreplayer B_Sbo35 0
+	ai2_makeignoreplayer B_S36 0
+	ai2_makeignoreplayer B_S37 0
+	ai2_spawn B_Lbo76
+#	ai2_spawn B_Lbo77
+	ai2_spawn B_C34
+	ai2_spawn B_C33
+	ai2_spawn B_C32
+	trigvolume_enable trigger_volume_11_copy 0
+	music_stop
+}
+
+func void t59(string ai_name)
+{
+	ai2_spawn B_L30
+	ai2_spawn B_L95
+	ai2_spawn B_Lbo27
+}
+
+func void t60(string ai_name)
+{
+	ai2_spawn B_C32
+	ai2_spawn B_C34
+	ai2_spawn B_C33
+	ai2_makeignoreplayer B_S36 0
+}
+
+func void t67(string ai_name)
+{
+	ai2_spawn B_S43
+}
+
+func void t11b(string ai_name)
+{
+	dprint t11b_active
+	ai2_dopath B_S36 patrol_38
+	ai2_setjobstate B_S36
+	ai2_makeignoreplayer B_Sbo38 0
+#	ai2_makeignoreplayer B_Sbo35 0
+	ai2_makeignoreplayer B_S36 0
+	ai2_makeignoreplayer B_S37 0
+	ai2_spawn B_Lbo76
+#	ai2_spawn B_Lbo77
+	trigvolume_enable trigger_volume_11 0
+	music_stop
+}
+
+func void t12(string ai_name)
+{
+	dprint t12_active
+	ai2_dopath B_N28 patrol_42
+	ai2_setjobstate B_N28
+}
+
+func void t14(string ai_name)
+{
+	dprint t14_active
+	ai2_spawn C_Sbo44
+#	ai2_spawn C_C46
+	ai2_spawn C_C47
+	ai2_spawn C_N48
+#	ai2_spawn C_L50
+#	ai2_makeignoreplayer C_L50 1
+#	ai2_spawn C_L51
+#	ai2_makeignoreplayer C_L51 1
+
+}
+
+func void t15(string ai_name)
+{
+	dprint t15_active
+	ai2_lookatme C_L51
+	ai2_dopath C_L51 patrol_51
+	ai2_setjobstate C_L51
+	ai2_makeignoreplayer C_L51 0
+	sleep 90
+	ai2_lookatme C_L50
+	ai2_dopath C_L50 patrol_50
+	ai2_setjobstate C_L50 
+	ai2_makeignoreplayer C_L50 0
+
+}
+
+func void t16(string ai_name)
+{
+	dprint t16_active
+	ai2_makeignoreplayer C_L50 0
+	ai2_makeignoreplayer C_L51 0
+
+}
+
+func void t17(string ai_name)
+{
+	dprint t17_active
+	ai2_makeignoreplayer C_N55 0
+	ai2_spawn C_Sbo56
+
+}
+
+func void t18(string ai_name)
+{
+	dprint t18_active
+	ai2_spawn C_S57
+
+}
+
+func void t19(string ai_name)
+{
+	dprint t19_active
+	ai2_spawn C_S58
+	ai2_spawn C_S59
+
+}
+
+func void t20(string ai_name)
+{
+	dprint t20_active
+#	sleep 200
+	ai2_spawn C_Lbo62
+	ai2_spawn C_Sbo61
+
+}
+
+func void t21(string ai_name)
+{
+	dprint t21_active
+	ai2_spawn C_Sbo63
+	ai2_spawn C_Sbo64
+
+}
+
+func void t22(string ai_name)
+{
+	dprint t22_active
+	ai2_makeignoreplayer C_C65 0
+
+}
+
+func void t23(string ai_name)
+{
+	dprint t23_active
+	ai2_spawn C_L71
+	ai2_spawn C_S72
+	ai2_spawn C_N74
+
+}
+
+func void t25(string ai_name)
+{
+	dprint t25_active
+	ai2_spawn D_C70
+	ai2_makeignoreplayer D_C70 1
+	ai2_spawn D_Sbo71
+	ai2_spawn D_Sbo72
+	ai2_spawn D_Sbo73
+	ai2_spawn D_Sbo75
+	ai2_spawn D_N76
+
+}
+
+func void t26(string ai_name)
+{
+	dprint t26_active
+	ai2_spawn D_L74
+	ai2_spawn new_1
+}
+
+func void t28(string ai_name)
+{
+	dprint t28_active
+	ai2_spawn D_S78
+	ai2_spawn D_S79
+	trigvolume_enable trigger_volume_29 1
+
+}
+
+func void t29(string ai_name)
+{
+	dprint t29_active
+	ai2_spawn D_Lbo81
+	ai2_spawn D_S82
+
+}
+
+func void t30(string ai_name)
+{
+	dprint t30_active
+	ai2_spawn D_L80
+
+}
+
+func void t31(string ai_name)
+{
+	dprint t31_active
+	ai2_spawn D_S83
+	ai2_spawn D_L84
+	ai2_spawn D_Lbo85
+	ai2_spawn D_Sbo86
+	trigvolume_enable trigger_volume_32 0
+}
+
+func void t32(string ai_name)
+{
+	dprint t32_active
+	ai2_spawn D_L88
+	ai2_spawn D_S87
+	ai2_spawn D_Sbo86
+	trigvolume_enable trigger_volume_31 0
+	target_set(599,30.0)
+}
+
+
+func void t33(string ai_name)
+{
+	dprint t33_active
+	door_lock 97
+	particle lastdoor1_locklight01 do stop
+	particle lastdoor2_locklight01 do stop
+	particle lastdoor3_locklight01 do stop
+	#play doorsound
+}
+
+func void t34(string ai_name)
+{
+	dprint t34_active
+	ai2_spawn D_Sbo75
+	ai2_spawn D_Sbo92
+	ai2_spawn D_L91
+	ai2_spawn D_S90
+	ai2_spawn D_S89
+}
+
+func void t37(string ai_name)
+{
+	dprint t37_active
+	ai2_makeignoreplayer D_C70 0
+
+}
+
+func void t38(string ai_name)
+{
+	dprint t38
+#	ai2_spawn B_N31
+
+}
+
+func void t41(string ai_name)
+{
+	dprint t41_active
+	target_set(596,30.0)
+}
+
+func void t42(string ai_name)
+{
+	dprint t42_active
+	door_lock 16
+	particle ZomShin_door_locklight01 do stop
+	trigvolume_enable trigger_volume_35 0
+	Base
+	s5
+}
+
+func void t43(string ai_name)
+{
+	dprint t43_active
+	ai2_spawn B_S96
+}
+
+func void t44(string ai_name)
+{
+	dprint t44
+	target_set(598,30.0)
+}
+
+func void t45(string ai_name)
+{
+	dprint t45_active
+	target_set(587,30.0)
+	door_lock 14
+	particle shin_lock_locklight01 do stop
+	console_activate 3
+#	play door lock sound
+	trig_deactivate	60
+	trig_deactivate	61
+	trig_deactivate	62
+	trig_deactivate	63
+	trig_deactivate	64
+	trig_deactivate	65
+	trig_deactivate	70
+	trig_deactivate	71
+	trig_deactivate	72
+	trig_deactivate	73
+	trig_deactivate	74
+	trig_deactivate	75
+	trig_deactivate 91
+	trig_deactivate 92
+	trig_deactivate 93
+	trig_deactivate	98
+	trig_deactivate	99
+	trig_deactivate	6
+	trig_deactivate	7
+	if (trigvolume_count(20) eq 0)
+	{
+		dprint delete_B_AI
+		chr_delete B_L95
+		chr_delete B_Lbo27
+		chr_delete B_S29
+		chr_delete B_L30
+		chr_delete B_Sbo38
+		chr_delete B_S36	
+		chr_delete B_S37
+		chr_delete B_L40
+		chr_delete B_L41
+		chr_delete B_Lbo39
+		chr_delete B_S43
+		chr_delete B_C32
+		chr_delete B_C33
+		chr_delete B_C34
+		chr_delete B_Lbo26
+		chr_delete B_S96
+		chr_delete B_Lbo76
+		chr_delete B_S22
+		chr_delete B_N31
+		chr_delete B_Lbo77
+	}
+	dprint delete_A_AI
+	chr_delete A_L20
+	chr_delete A_L21
+	chr_delete A_Sbo15
+	chr_delete A_Sbo14
+	chr_delete A_L19
+	chr_delete l1
+	chr_delete l3
+	chr_delete A_L12
+	chr_delete A_Lbo13
+	chr_delete A_L8
+	chr_delete l7
+	chr_delete n5
+	chr_delete A_T25
+	chr_delete B_N28
+	chr_delete A_n17
+	chr_delete A_N31
+}
+
+func void attack_konoko(string ai_name)
+{
+	ai2_attack new_1 A_player
+}
+
+func void substation_monologue(void)
+{
+	dprint playkonokoline
+	sound_dialog_play c14_54_24konoko
+	cinematic_start (KONtalkangryfront, 180, 180, 19, 7, 20)
+	sound_dialog_play_block
+	sleep f60
+	cinematic_stop (KONtalkangryfront, 19, 20)
+
+	objective_set(2, silent)
+}
+
+func void save3_and_spine(string ai_name)
+{
+	s3
+	spine1
+	sleep 7
+	spine2
+	sleep 7
+	spine3
+}
+func void t45b(string ai_name)
+{
+	dprint t45b_modified_by_okita
+	ai2_spawn C_L51
+	ai2_spawn C_L50
+	ai2_spawn C_C65
+	ai2_spawn C_N66
+	ai2_spawn C_Sbo93
+	ai2_spawn C_N60
+	ai2_spawn C_N55
+	ai2_makeignoreplayer C_L50 1
+	ai2_makeignoreplayer C_L51 1
+	ai2_makeignoreplayer C_N55 1
+	ai2_makeignoreplayer C_C65 1
+	trig_activate	1	
+	trig_activate	2	
+	trig_activate	3	
+	trig_activate	4	
+	trig_activate	5
+	trig_activate	8		
+	trig_activate	303	
+	trig_activate	100
+	trig_activate	101	
+	trig_activate	500	
+	trig_activate	400	
+	trig_activate	503
+	trig_activate	502
+	trig_activate	501
+	trig_activate	510
+	trig_activate 	511
+	trig_activate	512	
+	trig_activate	520
+	trig_activate	521
+	trig_activate	522
+	trig_activate	320
+	trig_activate	315
+	trig_activate	302	
+	music_atrium	
+}
+################ begin #################
+########## okita's modification ########
+########################################
+func void spine1(void)
+{
+	dprint spine1_start
+
+	if (sub1 eq 0)
+	{
+		particle spine1 start
+		particle spinesound1 start
+	}
+}
+
+func void spine2(void)
+{
+	dprint spine2_start
+
+	if (sub2 eq 0)
+	{
+		particle spine2 start
+		particle spinesound2 start
+	}
+}
+
+func void spine3(void)
+{
+	dprint spine3_start
+
+	if (sub3 eq 0)
+	{
+		particle spine3 start
+		particle spinesound3 start
+	}
+}
+################  end  #################
+########## okita's modification ########
+########################################
+func void patrolscript0001(void)
+{
+	playback_block B_S22 taunt1 interp 20
+}
+
+func void B_S22_run (string ai_name)
+{
+	ai2_dopath B_S22 patrol_24
+	ai2_setjobstate B_S22
+}
+
+func void A_T25_run (string ai_name)
+{
+	ai2_dopath A_T25 patrol_25
+	ai2_setjobstate A_T25
+}
+
+func void t39(string ai_name)
+{
+	target_set(598,30.0)
+}
+
+func void t48(string ai_name)
+{
+	ai2_spawn D_S101
+	ai2_spawn D_C100
+}
+#########################################
+#      		console/special	    #
+#########################################
+func void unlock14(string ai_name)
+{
+	dprint unlock14_active
+	door_unlock 14
+	particle shin_lock_locklight01 do start
+}
+
+func void console_android(void)
+{
+	text_console level_18b
+	console_reset 16
+}
+
+func void console_zombie(void)
+{
+	text_console level_18a
+	console_reset 17
+}
+
+func void console1(string ai_name)
+{
+	dprint console1_active
+	text_console level_18c
+	console_reset 14
+	console_activate 14
+}
+
+func void console2(string ai_name)
+{
+	dprint console2_active
+	text_console level_18d
+	console_reset 15
+}
+
+func void level_18e(string ai_name)
+{
+	dprint text_18e
+	text_console level_18e
+	console_reset 1
+	console_activate 1
+}
+
+func void lastdoor_console(string ai_name)
+{	
+	dprint lastdoor_console
+	lastdoor_count = lastdoor_count + 1
+	if (lastdoor_count eq 1)
+	{
+		input 0
+		fade_out 0 0 0 30
+		cm_interpolate lastdoor_cam 0
+		fade_in 30
+		sleep 60
+		particle lastdoor3_locklight01 do start
+		sleep 30
+		fade_out 0 0 0 30
+		cm_reset
+		input 1
+		fade_in 30
+	}
+	if (lastdoor_count eq 2)
+	{
+		input 0
+		fade_out 0 0 0 30
+		cm_interpolate lastdoor_cam 0
+		fade_in 30
+		sleep 60
+		particle lastdoor2_locklight01 do start
+		sleep 30
+		fade_out 0 0 0 30
+		cm_reset
+		input 1
+		fade_in 30
+	}
+	if (lastdoor_count eq 3)
+	{
+		input 0
+		fade_out 0 0 0 30
+		cm_interpolate lastdoor_cam 0
+		fade_in 30
+		sleep 60
+		particle lastdoor1_locklight01 do start
+		set_objective_4
+		target_set(401,30.0)
+		sleep 30
+		fade_out 0 0 0 30
+		cm_reset
+		input 1
+		fade_in 30
+		trigvolume_enable trigger_volume_40 0
+		door_unlock 97
+	}
+
+}
+
+func void refuse_script(string ai_name)
+{	
+	dprint refuse
+	ai2_dopath C_N48 patrol_98
+}
+
+func void patrolscript0098(string ai_name)
+{	
+	dprint patrolscript0098
+	ai2_doalarm C_N48 10
+}
+
+func void shin_lock(string ai_name)
+{
+	particle shin_lock_locklight01 do start
+}
+
+func void stair_lock(string ai_name)
+{
+	particle stair_lock_locklight01 do start
+}
+
+func void roof(string ai_name)
+{
+	particle roof_locklight01 do start
+	particle shin_lock_locklight01 do start
+	ai2_spawn A_T25
+
+}
+
+func void floor4_lock(string ai_name)
+{
+	particle floor4_lock_locklight01 do start
+	trigvolume_enable trigger_volume_39 1
+
+}
+
+func void roof_doors(string ai_name)
+{
+	particle roof_doors_locklight01 do start
+
+}
+
+func void roof_door2(string ai_name)
+{
+	particle roof_door2_locklight01 do start
+	ai2_spawn A_n17
+}
+
+func void enable_t29(string ai_name)
+{
+	trigvolume_enable trigger_volume_29 1
+
+}
+
+func void t40(string ai_name)
+{
+	dprint t40_active
+	if(sub1 ne 1)
+	{
+		if (audio_counter eq 2)
+		{
+			if(trigvolume_count(49) eq 0)
+			{
+				trigvolume_enable trigger_volume_40 0
+				sound_dialog_play c14_54_26konoko
+				sound_dialog_play_block pause
+				audio_counter = audio_counter - 1;
+			}
+		}
+		if (audio_counter eq 3)
+		{
+			if(trigvolume_count(49) eq 0)
+			{
+				trigvolume_enable trigger_volume_40 0
+				sound_dialog_play c14_54_25konoko
+				sound_dialog_play_block pause
+				audio_counter = audio_counter - 1;
+			}
+		}
+	}
+}
+
+func void t50(string ai_name)
+{
+	dprint t50_active
+	if(sub2 ne 1)
+	{
+		if (audio_counter eq 2)
+		{
+			if(trigvolume_count(51) eq 0)
+			{
+
+				trigvolume_enable trigger_volume_50 0
+				sound_dialog_play c14_54_26konoko
+				sound_dialog_play_block pause
+				audio_counter = audio_counter - 1;
+			}
+		}
+		if (audio_counter eq 3)
+		{
+			if(trigvolume_count(51) eq 0)
+			{
+				trigvolume_enable trigger_volume_50 0
+				sound_dialog_play c14_54_25konoko
+				sound_dialog_play_block pause
+				audio_counter = audio_counter - 1;
+			}
+		}
+	}
+}
+
+func void t53(string ai_name)
+{
+	dprint t53_active
+	if(sub3 ne 1)
+	{
+		if (audio_counter eq 2)
+		{
+			if(trigvolume_count (54) eq 0)
+			{
+				trigvolume_enable trigger_volume_53 0
+				sound_dialog_play c14_54_26konoko
+				sound_dialog_play_block pause
+				audio_counter = audio_counter - 1;
+			}
+		}
+		if (audio_counter eq 3)
+		{
+			if(trigvolume_count(54) eq 0)
+			{
+				trigvolume_enable trigger_volume_53 0
+				sound_dialog_play c14_54_25konoko
+				sound_dialog_play_block pause
+				audio_counter = audio_counter - 1;
+			}
+		}
+	}
+}
+
+func powersub1(string ai_name)
+{
+	dprint powersub1_active
+	sub1 = 1;
+	particle spine1 stop
+	particle spinesound1 stop
+
+	if(sub3 eq 0)
+	{
+		target_set(594,30.0)
+	}
+	if(sub3 ne 0)
+	{
+		if(sub2 eq 0)
+		{
+			target_set(595,30.0)
+		}
+	}
+	check_power
+}
+
+func powersub2(string ai_name)
+{
+	dprint powersub2_active
+	particle spine2 do stop
+	particle spinesound2 stop
+	sub2 = 1;
+	if(sub3 eq 0)
+	{
+		target_set(594,30.0)
+	}
+	if(sub3 ne 0)
+	{
+		if(sub1 eq 0)
+		{
+			target_set(587,30.0)
+		}
+	}
+	check_power
+}
+
+func powersub3(string ai_name)
+{
+	dprint powersub3_active
+	sub3 = 1;
+	particle spine3 do stop
+	particle spinesound3 stop
+	if(sub2 eq 0)
+	{
+		target_set(595,30.0)
+	}
+
+	if(sub2 ne 0)
+	{
+		if(sub1 eq 0)
+		{
+			target_set(587,30.0)
+		}
+	}
+	check_power
+}
+
+func check_power(string ai_name)
+{
+	dprint check_power_active
+	counter = counter - 1
+	if (counter eq 1)
+	{
+		sound_dialog_play c14_54_27konoko
+		sound_dialog_play_block pause
+	}
+
+	if (counter eq 0)
+	{
+		dprint power_down
+		trigvolume_enable trigger_volume_36 1
+		trigvolume_enable trigger_volume_41 1
+		input 0
+		fade_out 0 0 0 30
+		cm_interpolate substation 0
+		fade_in 30
+	#	sleep 180
+		trig_deactivate	1	
+		trig_deactivate	2	
+		trig_deactivate	3	
+		trig_deactivate	4	
+		trig_deactivate	5
+		trig_deactivate	8		
+		trig_deactivate	303	
+		trig_deactivate	100
+		trig_deactivate	101	
+		trig_deactivate	500	
+		trig_deactivate	400	
+		sleep 15
+		trig_deactivate	503
+		sleep 5
+		trig_deactivate	502
+		sleep 5
+		trig_deactivate	501
+		sleep 15	
+		trig_deactivate	510
+		sleep 5
+		trig_deactivate 	511
+		sleep 5	
+		trig_deactivate	512	
+		sleep 15
+		trig_deactivate	520
+		sleep 5	
+		trig_deactivate	521
+		sleep 5	
+		trig_deactivate	522
+		sleep 15
+		trig_deactivate	320
+		sleep 15
+		trig_deactivate	315
+		sleep 15
+		trig_deactivate	302	
+		door_unlock	16
+		particle ZomShin_door_locklight do start
+		sleep 120
+		fade_out 0 0 0 240
+		cm_reset
+		input 1
+		target_set(403, 30.0)
+		fade_in 30
+		music_stop
+		objective_set(3)
+	}
+}
+
+func void lastdoor1(string ai_name)
+{
+	ld1=1
+	if(ld2 eq 0)
+	{
+		target_set(599,30.0)
+	}
+	if (ld2 ne 0)
+	{
+		if(ld3 eq 0)
+		{
+			target_set(598,30.0)
+		}
+	}
+}
+
+func void lastdoor2(string ai_name)
+{
+	ld2=1
+	if(ld3 eq 0)
+	{
+		target_set(598,30.0)
+	}
+	if(ld3 ne 0)
+	{
+		if(ld1 eq 0)
+		{
+			target_set(597,30.0)
+		}
+	}
+}
+
+func void lastdoor3(string ai_name)
+{
+	ld3=1
+	if(ld2 eq 0)
+	{
+		target_set(599,30.0)
+	}
+	if(ld2 ne 0)
+	{
+		if(ld1 eq 0)
+		{
+			target_set(597,30.0)
+		}
+	}
+}
+
+#########################
+#	save game	      #
+#########################
+func void s1(string ai_name)
+{
+	dprint SAVEDGAME1	
+
+	if (my_save_point ne 1)
+	{
+		save_game 1 autosave
+	}
+}
+
+func void s2(string ai_name)
+{
+	dprint SAVEDGAME2	
+
+	if (my_save_point ne 2)
+	{
+		save_game 2 autosave
+	}
+}
+
+func void s3(string ai_name)
+{
+	dprint SAVEDGAME3	
+
+	if (my_save_point ne 3)
+	{
+		save_game 3 autosave
+	}
+}
+
+func void s4(string ai_name)
+{
+	dprint SAVEDGAME4	
+
+	if (my_save_point ne 4)
+	{
+		save_game 4 autosave
+	}
+}
+
+func void s5(string ai_name)
+{
+	dprint SAVEDGAME5	
+
+	if (my_save_point ne 5)
+	{
+		save_game 5 autosave
+	}
+}
+
+###############################################
+#####   FURIOUS ZOMBIE SHINATAMA FIGHT   ######
+###############################################
+
+var int console_count = 4;
+var int zombie_counter_var = 0;
+
+func void zombie_counter(string player_name)
+{
+	console_count = console_count - 1;
+
+	door_lock 16	
+
+	if (console_count eq 0)
+	{
+		console_count = 4;
+
+		dprint zombie_counter
+		zombie_counter_var = zombie_counter_var + 1;
+
+		if (zombie_counter_var eq 0)
+		{
+			zombie_round_2
+		}
+
+		if (zombie_counter_var eq 1)
+		{
+			zombie_round_3
+		}
+
+		if (zombie_counter_var eq 2)
+		{
+			zombie_round_4
+		}
+
+		if (zombie_counter_var eq 3)
+		{
+			zombie_round_5
+		}
+	}
+}
+
+func void t52(string ai_name)
+{
+	ai2_dopath ZomGrif patrol_102
+}
+
+func void t55(string ai_name)
+{
+	ai2_dopath ZomGrif patrol_103
+}
+
+func void t56(string ai_name)
+{
+	ai2_dopath ZomGrif patrol_104
+}
+
+func void t57(string ai_name)
+{
+	ai2_dopath ZomGrif patrol_105
+}
+
+func void t58(string ai_name)
+{
+	ai2_spawn C_Lbo53
+	ai2_spawn C_Sbo52
+}
+
+func void zombie_dialog_round3(void)
+{
+	sound_dialog_play c14_51_07shinatama
+	cinematic_start(SHINZOMlistening, 180,180,19,8,20, false)
+	sound_dialog_play_block
+	cinematic_stop (SHINZOMlistening, 19, 20)
+}
+
+func void zombie_dialog_round4(void)
+{
+	sound_dialog_play c14_51_08shinatama
+	cinematic_start(SHINZOMlistening, 180,180,19,8,20, false)
+	sound_dialog_play_block
+	cinematic_stop (SHINZOMlistening, 19, 20)
+}
+
+func void zombie_dialog_round5(void)
+{
+	sound_dialog_play c14_51_09shinatama
+	cinematic_start(SHINZOMlistening, 180,180,19,8,20, false)
+	sound_dialog_play_block
+	cinematic_stop (SHINZOMlistening, 19, 20)
+}
+
+# CB: this round is not called any longer! only zombie rounds 2-5 are used now
+# ZOMBIE ROUND 1
+func void zombie_round_1(string ai_name)
+{
+	dprint zombie_round_1
+
+	particle zombie1 create
+	particle zombie1 start
+
+	ai2_allpassive 1
+	input 0
+
+	# CB: kill all weapon particles
+	p3_removedangerous
+
+	sleep 120
+
+	trig_show 91
+	trig_show 92
+	trig_show 93
+
+	trig_activate 91
+	trig_activate 92
+	trig_activate 93
+
+	sleep 30
+
+#	trig_speed 202 .2
+#	trig_speed 204 .2
+#	trig_hide 2023
+#	trig_hide 2013
+
+#	particle ????? start
+#	particle ????? start
+
+	cm_reset
+	input 1
+	sleep 90
+	ai2_allpassive 0
+	ai2_makeignoreplayer ZomGrif 1
+}
+
+# CB: this round has all the old zombie round 2 setup including camera angles
+# OLD ZOMBIE ROUND 2
+func void old_zombie_round_2(string ai_name)
+{
+	dprint zombie_round_2
+
+	ai2_allpassive 1
+	turret_deactivate 330
+	turret_deactivate 333
+	turret_deactivate 336
+	input 0
+
+	# CB: kill all weapon particles
+	p3_removedangerous
+
+	particle zombie1 kill
+
+	sleep 90
+
+	cm_interpolate zombie_hint 0
+
+	particle zombie1 create
+	particle zombie1 start
+
+	sleep 120
+
+	trig_deactivate 91
+	trig_deactivate 92
+	trig_deactivate 93
+
+	dprint trig_off_1
+
+	sleep 15
+	trig_hide 91
+	sleep 15
+	trig_hide 92
+	sleep 15
+	trig_hide 93
+
+	sleep 120
+
+	trig_show 210
+	trig_show 310
+	trig_show 410
+	trig_show 510
+
+	trig_activate 210
+	trig_activate 310
+	trig_activate 410
+	trig_activate 510
+
+	trig_reset 91
+	trig_reset 92
+	trig_reset 93
+
+	sleep 15
+	trig_show 91
+	sleep 15
+	trig_show 92
+	sleep 15
+	trig_show 93
+
+	trig_activate 91
+	trig_activate 92
+	trig_activate 93
+
+	sleep 90
+	
+	cm_reset
+	input 1
+	sleep 90
+	ai2_allpassive 0
+	ai2_makeignoreplayer ZomGrif 1
+
+	console_reset 399
+	console_reset 400
+	console_reset 401
+	console_reset 402
+}	
+
+# CB: this round is the new zombie round 2 setup which is tabulae rasa
+# and fit to be called from a save point, or from the cutscene
+# ZOMBIE ROUND 2
+func void zombie_round_2(string ai_name)
+{
+	dprint zombie_round_2_active
+
+	particle zombie1 create
+	particle zombie1 start
+
+	ai2_allpassive 1
+	input 0
+
+	# CB: kill all weapon particles
+	p3_removedangerous
+
+	sleep 120
+
+	trig_show 210
+	trig_show 310
+	trig_show 410
+	trig_show 510
+
+	trig_activate 210
+	trig_activate 310
+	trig_activate 410
+	trig_activate 510
+
+	trig_reset 91
+	trig_reset 92
+	trig_reset 93
+
+	sleep 15
+	trig_show 91
+	sleep 15
+	trig_show 92
+	sleep 15
+	trig_show 93
+
+	trig_activate 91
+	trig_activate 92
+	trig_activate 93
+
+	# incidental zombie shinatama dialog
+	trigvolume_enable shinzom_voice1 1
+	trigvolume_enable shinzom_voice2 1
+
+	cm_reset
+	input 1
+	sleep 90
+	ai2_allpassive 0
+	ai2_makeignoreplayer ZomGrif 1
+}	
+
+# ZOMBIE ROUND 3
+func void zombie_round_3(string ai_name)
+{
+	dprint zombie_round_3_active
+
+	ai2_allpassive 1
+	turret_deactivate 330
+	turret_deactivate 333
+	turret_deactivate 336
+	input 0
+
+	# CB: kill all weapon particles
+	p3_removedangerous
+
+	particle zombie1 kill
+
+	# incidental zombie shinatama dialog
+	trigvolume_enable shinzom_voice3 1
+
+	sleep 90
+
+	cm_interpolate zombie_hint 0
+
+	particle zombie1 create
+	particle zombie1 start
+	sleep 20
+	particle zombie1 kill
+	sleep 10
+	particle zombie1 create
+	particle zombie1 start
+
+	sleep 120
+
+	trig_deactivate 91
+	trig_deactivate 92
+	trig_deactivate 93
+
+	dprint trig_off_2
+
+	sleep 15
+	trig_hide 91
+	sleep 15
+	trig_hide 92
+	sleep 15
+	trig_hide 93
+
+	trig_deactivate 210
+	trig_deactivate 310
+	trig_deactivate 410
+	trig_deactivate 510
+
+	fork zombie_dialog_round3
+	sleep 120
+
+	trig_reset 91
+	trig_reset 92
+	trig_reset 93
+
+	sleep 15
+	trig_show 91
+	sleep 15
+	trig_show 92
+	sleep 15
+	trig_show 93
+
+	trig_activate 91
+	trig_activate 92
+	trig_activate 93
+
+	trig_reset 210
+	trig_reset 310
+	trig_reset 410
+	trig_reset 510
+
+	trig_activate 210
+	trig_activate 310
+	trig_activate 410
+	trig_activate 510
+
+	trig_show 2101
+	trig_show 3101
+	trig_show 4101
+	trig_show 5101
+
+	trig_activate 2101
+	trig_activate 3101
+	trig_activate 4101
+	trig_activate 5101
+
+	trig_speed 210 .3
+	trig_speed 310 .3
+	trig_speed 410 .3
+	trig_speed 510 .3
+
+	trig_speed 2101 .3
+	trig_speed 3101 .3
+	trig_speed 4101 .3
+	trig_speed 5101 .3
+
+	sleep 90
+
+	cm_reset
+	input 1
+	sleep 90
+	ai2_allpassive 0
+	# ai2_passive ZomGrif 1
+
+	console_reset 399
+	console_reset 400
+	console_reset 401
+	console_reset 402
+}
+
+## ZOMBIE ROUND 4
+func void zombie_round_4(string ai_name)
+{
+	dprint zombie_round_4_active
+
+	ai2_allpassive 1
+	turret_deactivate 330
+	turret_deactivate 333
+	turret_deactivate 336
+	input 0
+
+	# CB: kill all weapon particles
+	p3_removedangerous
+
+	particle zombie1 kill
+
+	# incidental zombie shinatama dialog
+	trigvolume_enable shinzom_voice4 1
+
+	sleep 90
+
+	cm_interpolate zombie_hint 0
+
+	sleep 30
+	particle zombie1 create
+	particle zombie1 start
+	sleep 20
+	particle zombie1 kill
+	sleep 30
+	particle zombie1 create
+	particle zombie1 start
+
+	fork zombie_dialog_round4
+	sleep 120
+
+	trig_deactivate 91
+	trig_deactivate 92
+	trig_deactivate 93
+
+	dprint trig_off_3
+
+	trig_hide 91
+	trig_hide 92
+	trig_hide 93
+
+	trig_deactivate 210
+	trig_deactivate 310
+	trig_deactivate 410
+	trig_deactivate 510
+
+	trig_hide 210
+	trig_hide 310
+	trig_hide 410
+	trig_hide 510
+
+	trig_deactivate 2101
+	trig_deactivate 3101
+	trig_deactivate 4101
+	trig_deactivate 5101
+
+	trig_hide 2101
+	trig_hide 3101
+	trig_hide 4101
+	trig_hide 5101
+
+	sleep 120
+		
+	trig_show 214
+	trig_show 314
+	trig_show 414
+	trig_show 514
+
+	sleep 15
+
+	trig_show 94
+
+	sleep 15
+
+	trig_show 910
+
+	trig_activate 214
+	trig_activate 314
+	trig_activate 414
+	trig_activate 514
+
+	trig_activate 910
+	trig_activate 94
+
+	trig_speed 214 .15
+	trig_speed 314 .15
+	trig_speed 414 .15
+	trig_speed 514 .15
+
+	trig_speed 910 .35
+	trig_speed 94 .35
+		
+	sleep 90
+	
+	cm_reset
+	input 1
+	sleep 90
+	ai2_allpassive 0
+	# # ai2_passive ZomGrif 1
+
+	console_reset 399
+	console_reset 400
+	console_reset 401
+	console_reset 402
+}
+
+########## ZOMBIE ROUND 5 - YOU WIN ############
+
+func void zombie_round_5(string ai_name)
+{
+	dprint zombie_round_5_active
+
+	ai2_allpassive 1
+	turret_deactivate 330
+	turret_deactivate 333
+	turret_deactivate 336
+
+	trig_hide 214
+	trig_hide 414
+
+	trig_activate 210
+	trig_activate 410	
+
+	# CB: kill all weapon particles
+	p3_removedangerous
+
+	input 0
+
+	begin_cutscene	
+
+	music_stop
+
+	sleep 60
+
+	cm_interpolate zombie_death 0
+	
+	fork zombie_dialog_round5
+	sleep 90
+
+	trig_speed 9 1
+	trig_speed 10 2
+	trig_speed 910 2.5
+	trig_speed 94 .5
+	trig_speed 210 2
+	sleep 90	
+	trig_speed 410 2
+	sleep 90	
+	trig_speed 514 1
+	trig_speed 410 1
+	sleep 90
+	trig_speed 314 2
+	sleep 90
+	trig_speed 210 1
+
+	sleep 60
+	trig_hide 210
+	trig_hide 9
+	trig_speed 10 .2
+	sleep 60	
+	trig_hide 314
+	trig_hide 910
+	sleep 60	
+	trig_speed 514 .2
+	trig_hide 410
+	trig_hide 10
+	trig_hide 94
+	sleep 60
+	trig_hide 514
+	sleep 60
+	trig_hide 93
+	particle zombie1 kill
+	sound_ambient_start shin_zom_shutdown 1.0
+	sleep 10
+	particle zombie1 create
+	particle zombie1 start
+	sleep 20
+	particle zombie1 kill
+	particle zombie1 create
+	particle zombie1 start
+	sleep 30
+	particle zombie1 kill
+	particle zombiesteam stop
+	particle zombient stop
+	
+	sleep 90
+
+#	Hardy, if griffin has to see konoko after or during the zom cutscene, 
+#	make sure this next line makes it into the shorter zombie shin scripts --mike
+
+	ai2_makeignoreplayer ZomGrif 0
+	Zom
+}
+
+
+
+############################################################
+########### INCIDENTAL SHINATAMA ZOMBIE DIALOG #############
+############################################################
+
+func void shinzom_voice1(string ai_name)
+{
+	sound_dialog_play c00_01_102shinatama
+}
+
+func void shinzom_voice2(string ai_name)
+{
+	sound_dialog_play c00_01_101shinatama
+}
+
+func void shinzom_voice3(string ai_name)
+{
+	sound_dialog_play c00_01_100shinatama
+}
+
+func void shinzom_voice4(string ai_name)
+{
+	sound_dialog_play c00_01_103shinatama
+}
Index: AE/packages/VanillaBSL/IGMD/tctf_ii/tctf_ii_cutscene.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/tctf_ii/tctf_ii_cutscene.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/tctf_ii/tctf_ii_cutscene.bsl	(revision 313)
@@ -0,0 +1,419 @@
+#
+# tctf_cutscene.bsl
+#
+
+func void
+Intro(
+	void)
+{
+	fade_out 0 0 0 0
+	cm_interpolate IntroCam01 0
+	sleep f14
+	begin_cutscene weapon
+	marketing_line_off=1
+	letterbox 1
+	sleep f60
+	invincible=1
+	obj_create 401 402
+	obj_create 404 407
+	fade_in 90
+	#Outside shot of TCTF
+	cm_interpolate IntroCam01 0
+	playback 0 IntroKonokoSet
+	sleep f300
+	#Griffin and Guy talking
+	chr_create 1201 start
+	chr_create 1202 start
+	playback 1202 IntroTCTF01
+	#make this box animation last as long as conversation
+	chr_envanim 1201 IntroGriffinBox01
+	chr_animate 1201 COMGUYsit_idle1 1800
+	#Conversation between the two
+	cm_interpolate IntroCam02 0
+	sound_dialog_play c14_50_01scigoon1
+	cinematic_start (COPtalking, 180, 180, 15, 1, 20, false)
+	sound_dialog_play_block pause
+	cm_interpolate IntroCamGriffin 0
+	sound_dialog_play c14_50_02griffin
+	cinematic_start (GRIFtalking, 180, 180, 16, 3, 20, true)
+	sound_dialog_play_block pause
+	#TCTF walks out
+	sound_music_start atm_low_perc2 0.8
+	cm_interpolate IntroCam02 0
+	playback 1202 IntroTCTF02
+	sound_dialog_play c14_50_03scigoon1
+	sleep f240
+	cinematic_stop (COPtalking, 15, 20)
+	cinematic_stop (GRIFtalking, 15, 20)
+	sleep f60
+	door_open 70
+	door_jam 70
+	sleep f100
+	#KONOKO on roof
+	playback 0 IntroKonoko01
+	cm_interpolate IntroCamInside01 0
+	cm_interpolate_block IntroCamInside02 400
+	sleep f400
+	cm_anim both IntroCamRoof
+	sleep f210
+	#Konoko falls into view
+	cm_anim both IntroCamFall01
+	chr_envanim 0 IntroKonBox01 norotation
+	chr_animate 0 KONOKOlev18_IntroFall01 140
+	#Griffin gets surprised
+	chr_delete 1202
+	cm_anim_block both IntroCamStand01
+	chr_envanim 1201 IntroGriffinBox02 norotation
+	chr_animate 1201 GRIFINlev18_IntroStand 110
+	env_anim 401 401
+	sleep f88
+	#Konoko enters office
+	playback 0 IntroKonoko02
+	cm_interpolate_block IntroCamKonAim01 0
+	cm_interpolate_block IntroCamKonAim02 350
+	sleep f140
+	cinematic_start(KONangryfront, 180, 180, 18, 6, 30, true)
+	sound_dialog_play c14_50_04konoko
+	sound_dialog_play_block pause
+	cinematic_stop (KONangryfront, 18, 30)
+	#Conversation with Griffin
+	playback 1201 IntroGriffin
+	cm_interpolate IntroCamGriffin02 0
+	cinematic_start(GRIFtalkangry, 180,180,18,6,30, true)
+	sound_dialog_play c14_50_05griffin
+	sound_dialog_play_block pause
+	cinematic_stop (GRIFtalkangry, 18, 30)
+	#Griffin's office goes down
+	sound_music_volume atm_low_perc2 0.0 0.5
+	sound_music_stop atm_low_perc2
+	music_intro
+	env_show 403 0
+	obj_create 403 403
+	cm_anim both IntroCamEscape01
+	chr_envanim 1201 IntroGriffinBox03 norotation
+	env_setanim 401 IntroChair02
+	env_anim 402 407
+	cutscene_sync mark
+	sound_ambient_start c14_46_11grifdesk
+	sleep f16
+	playback 0 IntroKonokoAim fromhere
+	cm_anim_block both IntroCamEscape02
+	cm_wait
+	cm_reset
+	obj_kill 401 407
+	# look out Stefan is editing scripts; yo foolios need to turn back on the laser sight :O)
+	marketing_line_off=0
+	end_cutscene
+	invincible=0
+	chr_delete 1201
+	door_unjam 70
+	door_close 70
+	# who is a foolio? the foo or the foo who follows him?
+	s1
+}
+
+
+func void
+GrifSpawn(
+	void)
+{
+	ai2_spawn ZomGrif
+	chr_invincible ZomGrif 1
+	sleep f2
+	ai2_passive ZomGrif 1
+	ai2_setmovementmode ZomGrif walk
+	playback ZomGrif ZomGrifDraw
+}
+
+func void create_zomshin(void)
+{
+	ai2_spawn ZomShin
+	ai2_passive ZomShin 1
+	chr_shadow ZomShin 0
+	chr_invincible ZomShin 1
+	chr_unstoppable ZomShin 1
+	chr_nocollision ZomShin 1
+	chr_neutral ZomShin 1
+	chr_lock_active ZomShin
+}
+
+func void
+Base(
+	void)
+{
+	begin_cutscene
+	#place Griffin here earlier
+	#chr_neutral ZomGrif 1
+	sleep f20
+	#playback ZomGrif BaseGriffin01
+	cm_interpolate BaseCam01 180
+	sleep f210
+	#place Konoko
+	playback 0 BaseKonoko01
+	cm_interpolate BaseCam02 0
+	cm_interpolate_block BaseCam04 500
+	sound_dialog_play c14_51_01konoko
+	cinematic_start(KONangryfront, 180,180,19,7,20, true)
+	sound_dialog_play_block pause
+	cinematic_stop (KONangryfront, 19, 20)
+	cm_interpolate BaseCam01 0
+	cm_interpolate_block BaseCam03 600
+	sound_dialog_play c14_51_02griffin
+	cinematic_start(GRIFtalkangry, 180,180,20,9,20, true)
+	sound_dialog_play_block pause
+	cutscene_sync mark
+	sound_ambient_start c15_04_23_effects
+	sound_dialog_play c14_51_03griffin
+	#Shinzom comes out of ground
+	create_zomshin
+	chr_envanim ZomShin ChairShinBox01
+	obj_create 171 174
+	env_anim 171 174
+	obj_shade 171 174 .5 .5 .5
+	cm_anim both ChairCamZomUp
+	#chr_create ZomShin start
+	#chr_neutral ZomShin 1
+	sleep f270
+	particle zombiespark pulse
+
+	cm_wait
+
+	particle zombient start
+	#hide Chair object, show chair gunk
+	env_show 171 1
+	env_show 172 1
+	env_show 173 1
+	env_show 174 1
+	obj_kill 171 174
+	cm_interpolate BaseCamShin01 0
+	playback ZomShin BaseShin
+	cm_interpolate_block BaseCamShin02 300
+	sound_dialog_play_block
+	cinematic_stop (GRIFtalkangry, 20, 20)
+	sound_dialog_play c14_51_04shinatama
+	cinematic_start(SHINZOMlistening, 180,180,19,7,20, false)
+	sound_dialog_play_block
+	cinematic_stop (SHINZOMlistening, 19, 20)
+	sleep f30
+	particle Forcefield do start
+	sound_ambient_start zomshin_amb_loop 0.1
+	sound_ambient_volume zomshin_amb_loop 1.0 1.0
+	cm_interpolate BaseCam02 0
+	sound_dialog_play c14_51_05konoko
+	cinematic_start(KONscared, 180,180,20,9,20, true)
+	sound_dialog_play_block
+	cinematic_stop (KONscared, 20, 20)
+	playback ZomShin BaseShin
+	cm_interpolate_block BaseCamShin02 0
+	sound_dialog_play c14_51_06shinatama
+	cinematic_start(SHINZOMlistening, 180,180,19,7,20, false)
+	particle zombiesteam start
+	sound_dialog_play_block pause
+	cinematic_stop (SHINZOMlistening, 19, 20)
+#	cm_reset
+#	trig_show 9
+#	trig_activate 9
+	end_cutscene
+	music_zom
+	ai2_passive ZomShin 1
+	ai2_makeignoreplayer ZomGrif 1
+	zombie_round_2
+#	ai2_allpassive 1
+#	remove line below after zomshin puzzle is fixed
+#	Zom
+}
+
+func void fade_out_zom_amb(void)
+{
+	sound_ambient_volume zomshin_amb_loop 0.0 1.0
+	sleep 60
+	sound_ambient_stop zomshin_amb_loop
+}
+
+func void
+Zom(
+	void)
+{
+	env_show 1010 0
+	particle Forcefield do stop
+	fork fade_out_zom_amb
+	begin_cutscene
+	marketing_line_off=1
+	#Shinatama will already be created
+	#show the destruction of the turrets and the forcefield around Griffin
+	#cm_interpolate ZomCamGrif01 0
+	ai2_setmovementmode ZomGrif walk
+	playback ZomGrif ZomGrifDrawSet
+	#sleep f120
+	#Shinatama gets up out of chair
+	chr_shadow ZomShin 1
+	chr_invincible ZomShin 0
+	chr_unstoppable ZomShin 0
+	chr_envanim ZomShin ZomShinBox01 norotation
+	chr_animate ZomShin SHINZOMlev18_Free
+	cm_anim both ZomCamFree01
+	sleep f90
+	cutscene_sync mark
+	sound_ambient_start c_shin_escape
+	cm_wait
+	#Griffin says "what are you doing?"
+	cm_interpolate ZomCamGrif01 0
+	sound_dialog_play c14_52_01griffin
+	cinematic_start(GRIFtalkangry, 180,180,19,7,20, false)
+	sound_dialog_play_block
+	cinematic_stop(GRIFtalkangry, 19,20)
+	#Shinatama approaches Griffin
+	cm_interpolate ZomCamShinStart 0
+	playback ZomShin ZomShinSet
+	chr_animate ZomShin SHINZOMwalk1 180
+	chr_nocollision ZomShin 0
+	sleep f175
+	#Griffin says GET BACK OR I'll SHOOT
+	#cm_interpolate ZomCamGrif01 0
+	#playback ZomGrif ZomGrifDrawSet
+	#sleep f120
+	#Shin keeps coming
+	#cm_interpolate ZomCamShinApproach 0
+	playback ZomShin ZomShinWalk
+	chr_animate ZomShin SHINZOMwalk1 600
+	#sleep f120
+	#Griffin draws weapon
+	cm_interpolate ZomCamGrif01 0
+	playback ZomGrif ZomGrifDrawSet
+	sleep f30
+	#sound_dialog_play c14_52_01bgriffin
+	playback ZomGrif ZomGrifDraw
+	sleep f60
+	#konoko drops weapon
+	playback 0 ZomKonokoDrop
+	#Shinatama Approaches Griffin
+	cm_interpolate ZomCamBoth 0
+	sleep f180
+	#Griffin shoots
+	cm_interpolate ZomCamGrifShoot 0
+	playback ZomGrif ZomGrifShoot
+	sleep f50
+	#Shinatama gets hit
+	cm_interpolate ZomCamShinDie 0
+	chr_animate ZomShin SHINZOMshot 126
+	sound_ambient_start c_shin_die 1.0
+	sleep f120
+	#Show Griffin over Shinatama
+	cm_interpolate ZomCamDead 0
+	playback ZomGrif ZomGriffinKilled
+	chr_animate ZomShin SHINZOMfallen_front 1000
+	sleep f10
+	cm_interpolate ZomCamKonokoBehind 270
+	playback 0 ZomKonokoBehind
+	sleep f280
+	#Griffin turns and gets thrown
+	# CB: we force omnipotent off because it breaks this cutscene (you kill
+	# griffin prematurely)
+	omnipotent = 0
+	chr_invincible ZomGrif 0
+	ai2_kill ZomShin
+	chr_neutral ZomGrif 0
+	cm_interpolate ZomCamThrow 0
+	playback ZomGrif ZomGriffinTurn
+	playback 0 ZomKonokoThrow
+	sleep f140
+	#Knoko holds him down
+	cm_interpolate ZomCamKonokoAim02 0
+	chr_neutral ZomGrif 1
+	chr_envanim ZomGrif ZomGriffinBox01 norotation
+	chr_envanim 0 ZomKonokoBox01 norotation
+	chr_animate 0 KONOKOlev18_ZomAim 300
+	chr_animate ZomGrif GRIFINlev18_ZomAim 500
+	sound_dialog_play c14_52_02konoko
+	cinematic_start(KONangryfront, 180,180,19,7,20, false)
+	sound_dialog_play_block pause
+	#Looking down at griffin
+	#chr_envanim 0 ZomKonokoBox01 norotation
+	#chr_envanim ZomGrif ZomGriffinBox01 norotation
+	#chr_animate 0 KONOKOlev18_ZomAim 300
+	#chr_animate ZomGrif GRIFINlev18_ZomAim 500
+	#cm_interpolate ZomCamKonokoAim01 0
+	#KONoko gets off Griffin
+	#cm_interpolate ZomCamKonokoAim02 0
+	chr_envanim 0 ZomKonokoBox02 norotation
+	chr_envanim ZomGrif ZomGriffinBox01 norotation
+	chr_animate ZomGrif GRIFINlev18_ZomAim 500
+	chr_animate 0 KONOKOlev18_ZomUp 120
+	#sound_dialog_play c14_52_04konoko
+	#Griffin gets up put the gun down
+	sleep f100
+	cm_interpolate ZomCamGriffinUp 0
+	chr_envanim ZomGrif ZomGriffinBox02 norotation
+	chr_animate ZomGrif GRIFINlev18_ZomUp
+	sound_dialog_play c14_52_03griffin
+	cinematic_start(GRIFbeatup, 180, 180, 20, 9, 20, true)
+	sound_dialog_play_block pause
+	#Konoko I'm a rogue agent, very dangerous
+	playback 0 ZomKonokoFace
+	cm_interpolate ZomCamKonokoFace 0
+	sound_dialog_play c14_52_04konoko
+	sound_dialog_play_block pause
+	#Griffin says youre a monster
+	cm_interpolate ZomCamGriffinFace 0
+	playback ZomGrif ZomGriffinFace
+	sound_dialog_play c14_52_05griffin
+	sound_dialog_play_block pause
+	#for you, badly
+	cm_interpolate ZomCamKonokoFace 0
+	sound_dialog_play c14_52_06konoko
+	sound_dialog_play_block pause
+	#Griffin says youre a monster
+	cm_interpolate ZomCamGriffinFace 0
+	sound_dialog_play c14_52_07griffin
+	sound_dialog_play_block pause
+	cinematic_stop(GRIFbeatup, 20, 20)
+	cinematic_stop(KONangryfront, 19, 20)
+	#Give player back control
+	cm_reset
+	end_cutscene
+	ai2_allpassive 1
+	chr_set_health ZomGrif 1
+	marketing_line_off=0
+	trigvolume_enable trigger_volume_35 1
+	objective_set(5)
+}
+
+func void
+OutroKill(
+	void)
+{
+	sound_music_start mus_wls 1.0
+	begin_cutscene jello
+	sleep f40
+	sound_dialog_play c14_53_01konoko
+	cinematic_start(KONintense, 180,180,19,8,20, false)
+	sound_dialog_play_block
+	cinematic_stop (KONintense, 19, 20)
+	fade_out 0 0 0 120
+	sleep f120
+	end_cutscene
+	win
+}
+
+
+func void
+OutroNoKill(
+	void)
+{
+	begin_cutscene jello
+	cm_detach
+	ai2_takecontrol 1
+	ai2_lookatchar 0 ZomGrif
+	ai2_lookatchar ZomGrif 0
+	sound_music_start mus_sad1
+	sound_dialog_play c14_54_01konoko
+	cinematic_start(KONlistening, 180,180,19,8,20, false)
+	sleep f120
+	cm_interpolate BaseCam01 180
+	sound_dialog_play_block
+	cinematic_stop (KONlistening, 19, 20)
+	fade_out 0 0 0 120
+	sleep f120
+	end_cutscene
+	win
+}
Index: AE/packages/VanillaBSL/IGMD/tctf_ii/tctf_ii_main.bsl
===================================================================
--- AE/packages/VanillaBSL/IGMD/tctf_ii/tctf_ii_main.bsl	(revision 313)
+++ AE/packages/VanillaBSL/IGMD/tctf_ii/tctf_ii_main.bsl	(revision 313)
@@ -0,0 +1,49 @@
+#
+# tctf_ii_main.bsl
+#
+
+func void main(void)
+{
+	env_shade 321 325 .3 .3 .3
+	gl_fog_blue=0
+	gl_fog_red=0
+	gl_fog_green=0
+	gl_fog_start=.995
+	gs_farclipplane_set 5000
+	#hide trigger for Base
+	trig_hide 9
+	#Hide Chair Gunk
+	env_show 171 0
+	env_show 172 0
+	env_show 173 0
+	env_show 174 0
+
+##### THEESE TRIGGERS ARE FOR ZOMBIE SHINATAMA ############
+
+	trig_hide 91
+	trig_hide 92
+	trig_hide 93
+	trig_hide 94
+
+	trig_hide 910
+
+	trig_hide 10
+
+	trig_hide 210
+	trig_hide 2101
+	trig_hide 214
+
+	trig_hide 310
+	trig_hide 3101
+	trig_hide 314
+
+	trig_hide 410
+	trig_hide 4101
+	trig_hide 414
+
+	trig_hide 510
+	trig_hide 5101
+	trig_hide 514
+	
+	start
+}
