################# ### VARIABLES ### ################# var int var_counter = 0; ############ ### MAIN ### ############ func void main(void) { gl_fog_red = 0 gl_fog_blue = 0 gl_fog_green = 0 gl_fog_start = .995 gs_farclipplane_set 5000 ui_suppress_prompt = 1 chr_auto_aim_dist = 0 start } ############# ### START ### ############# func void start(string ai_name) { fork deactivate_stuff if(save_point eq 0) save_point = 1 if(save_point eq 1) fork intro if(save_point eq 2) restore_game sleep 5 fork sp_all } func void deactivate_stuff(void) { #not used trigvolume_enable Cut_dog 0 trigvolume_enable trigger_volume_07 0 trigvolume_enable trigger_volume_11 0 trigvolume_enable trigger_volume_12 0 trigvolume_enable trigger_volume_14 0 trigvolume_enable trigger_volume_15 0 #used trigvolume_enable Cut_outro 0 trigvolume_enable shut_off_vault_music 0 trigvolume_enable ninja_ambush_bot_trig 0 trigvolume_enable ninja_ambush_top_trig 0 } func void you_lose(string ai_name) { fade_out 0 0 0 30 sleep 30 lose } #################################### ### SEVERAL TIMES USED FUNCTIONS ### #################################### func void sp_all(void) { co_message_display = 0 if(save_point eq 1) save_game 1 autosave if(save_point eq 2) save_game 2 autosave sleep 180 co_message_display = 1 } func void remove_ai(void) { ai2_kill sleep 60 powerup_reset weapon_reset sleep 240 corpse_reset } func void music_stop(void) { sound_music_stop mus_main02 sound_music_stop mus_lz sound_music_stop mus_heart sound_music_stop mus_main02_hd } #tv13, tv14, tv15, tv19 and tv 20 func void spawn_outside_left_snipers(string ai_name) { ai2_spawn flOUTSIDE_A_sniper_1 ai2_spawn flOUTSIDE_A_sniper_2 ai2_spawn flOUTSIDE_B_sniper_1 ai2_spawn flOUTSIDE_C_sniper_1 } #tv16, tv17 and tv18 func void spawn_outside_right_snipers(string ai_name) { ai2_spawn flOUTSIDE_D_sniper_1 ai2_spawn flOUTSIDE_D_sniper_2 ai2_spawn flOUTSIDE_E_sniper_1 ai2_spawn flOUTSIDE_E_sniper_2 } ########## ### SP1 ### ########## func void intro(void) { particle lock99_locklight01 do start ai2_spawn IntroSec1 ai2_spawn IntroSec2 ai2_spawn neutral_1 ai2_spawn fl2_secguard_1 powerup_spawn ammo 131 powerup_spawn hypo 132 objective_set 1 silent target_set 127 30 sleep 1 sound_music_start mus_main02_hd 1.0 } #lose func of IntroSec2 func void die_for_art_1(string ai_name) { die_for_art_2 } #lose func of IntroSec1 func void die_for_art_2(string ai_name) { var_counter = var_counter + 1 if(var_counter eq 2) music_stop } ### GROUND FLOOR ### #tv7 - after door 59 func void save_game_1(string ai_name) { ai2_spawn fl1_secguard_1 ai2_spawn fl1_secguard_2 ai2_spawn fl1_secguard_4 } #hit func of neutral_1 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 } #console2 func void change_fl2_lights(string ai_name) { particle lock1_locklight01 do start particle lock2_locklight01 do start door_unlock 54 objective_set 2 silent } ### 1ST FLOOR ### #tv2 - after door 67, the complete room plus all rooms behind it func void fl2_spawn_secguard_3(string ai_name) { ai2_spawn fl2_secguard_3 ai2_spawn fl2_secguard_6 ai2_spawn fl2_balcony_1 } #tv1 - after door 75, the complete room plus all rooms behind it func void fl2_spawn_secguard_2(string ai_name) { ai2_spawn fl2_secguard_2 ai2_spawn fl2_secguard_7 ai2_spawn fl2_balcony_2 ai2_spawn neutral_2 ai2_spawn neutral_4 } #hit func of neutral_2 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 } #console3 func void change_fl3_lights(string ai_name) { particle lock3_locklight01 do start ai2_spawn fl3_mook_1 ai2_spawn fl3_mook_2 } ### 2ND FLOOR ### #tv6 - in front of door 68 and door 76 func void spawn_fl3_guards(string ai_name) { 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 objective_set 3 silent var_counter = 0 } #hit func of neutral_3 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 } #console4 func void seclock2(string ai_name) { particle lock5b_locklight01 do start console_check } #console82 func void seclock3(string ai_name) { particle lock5c_locklight01 do start console_check } #console88 func void seclock1(string ai_name) { particle lock5a_locklight01 do start console_check } func void console_check(void) { var_counter = var_counter + 1 if(var_counter eq 1) sound_music_start mus_lz 0.75 if(var_counter eq 3) { music_stop door_unlock 23 door_unlock 42 } } ### ROOF ### #console5 func void DataArchiveUnlock(string ai_name) { sound_music_start mus_heart particle lock4_locklight01 do start door_unlock 7 ai2_spawn fl1_target_1 ai2_spawn fl2_target_2 objective_set 4 silent target_set 267 30 trigvolume_enable shut_off_vault_music 1 } ### BACK TO GROUND FLOOR ### #tv22 - between door 7 and door 14 func void all_music_counters(void) { music_stop } ########## ### SP2 ### ########## ### BASMENT ### #tv24 - after door 15 (which is on the left side) func void save_game_2_right(string player_name) { save_game_2_left } #tv23 - after door 5 (which is on the right side) func void save_game_2_left(string player_name) { if(save_point eq 2) fork load_s2 else { save_game 2 autosave fork remove_ai } trigvolume_enable save_trig_left 0 trigvolume_enable save_trig_right 0 ai2_spawn flBASEMENT_guard_1 ai2_spawn flBASEMENT_guard_2 console_activate 1 console_activate 6 } func void load_s2(void) { 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 door_unlock 5 door_unlock 7 door_unlock 14 door_unlock 15 door_unlock 23 door_unlock 42 door_unlock 54 door_unlock 59 door_unlock 67 door_unlock 68 door_unlock 75 door_unlock 76 trig_activate 1 trig_activate 2 console_deactivate 2 console_deactivate 3 console_deactivate 5 console_deactivate 4 console_deactivate 11 console_deactivate 82 console_deactivate 88 trigvolume_enable trigger_volume_09 0 trigvolume_enable trigger_volume_08 0 trigvolume_enable trigger_volume_02 0 trigvolume_enable trigger_volume_01 0 ai2_spawn neutral_1 ai2_spawn neutral_2 ai2_spawn neutral_3 ai2_spawn neutral_4 ai2_spawn neutral_5 ai2_spawn neutral_6 ai2_neutralbehavior neutral_1 none ai2_neutralbehavior neutral_2 none ai2_neutralbehavior neutral_3 none objective_set 4 silent target_set 267 30 } #console6 func void hall_1(string ai_name) { particle lock6_locklight01 do start door_unlock 3 door_unlock 22 door_unlock 38 door_unlock 77 trig_deactivate 1 trig_deactivate 2 } #console1 func void unlock_secret_1(string ai_name) { console_activate 7 ai2_spawn secret_guard_1 ai2_spawn secret_guard_2 trig_activate 12 trig_activate 13 trig_activate 14 door_unlock 82 objective_set 5 silent target_set 1030 30 } #tv8 - in front of door 3 and door 77 func void spawn_flRAMP_guards(string ai_name) { particle lock46_locklight01 do start ai2_spawn flRAMP_guard_1 ai2_spawn flRAMP_guard_2 } ### BACK TO 2ND FLOOR ### #console7 func void unlock_secret_2(string ai_name) { particle lock7_locklight01 do start door_unlock 34 door_unlock 36 trig_deactivate 12 trigvolume_enable ninja_ambush_top_trig 1 trigvolume_enable ninja_ambush_bot_trig 1 } #tv29 - after door 3 and door 77 #tv25 - after door 22 and door 38 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 } ### NEXT PART OF THE BUILDING - 1ST FLOOR ### #console8 func void upstairs(string ai_name) { particle lock23_locklight01 do start particle lock65_locklight01 do start door_unlock 8 door_unlock 9 door_unlock 35 trig_deactivate 13 trig_deactivate 14 ai2_spawn creepy_ninja_5 ai2_spawn creepy_ninja_6 } ### 2ND FLOOR ### #tv4 - in front of door 37 func void window_ninja(string ai_name) { trigvolume_enable Cut_outro 0 ai2_spawn creepy_ninja_4 chr_teleport creepy_ninja_4 289 ai2_lookatme creepy_ninja_4 chr_animate creepy_ninja_4 NINJArun_kick chr_create 1030 start chr_neutral 1030 1 playback 1030 WindowNinjaSet sound_music_start mus_pursuit_hd obj_create 481 481 obj_show 481 481 env_anim 481 481 env_setanim 481 Disk02 chr_envanim 1030 WindowNinjaBox01 norotation chr_animate 1030 NINJAlev11_window sleep 185 sound_impulse_play glass_big particle WindowCharge do explode sleep 60 chr_delete 1030 ai2_spawn WindowNinjaRun ai2_passive WindowNinjaRun 1 chr_unstoppable WindowNinjaRun 1 chr_lock_active WindowNinjaRun playback WindowNinjaRun WindowNinjaRun obj_kill 481 481 target_set 1030 0 sleep 210 playback WindowNinjaRun JumpNinjaSet #sleep 10 #playback WindowNinjaRun JumpNinjaSet } ### OUTSIDE ON THE ROOF ### #tv27 - complete roof 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 } else { sleep 60 trigvolume_enable tv_check_outro 1 } } #tv28 - complete roof too; used to count the enemies inside it; see func above #tv21 - after the window, from the first left box to the right wall func void FaceSet(string ai_name) { playback WindowNinjaRun ai2_spawn FaceNinja ai2_spawn FaceNinja2 playback FaceNinja FaceNinjaSet playback FaceNinja FaceNinjaJump } #tv26 - passage between the two boxes func void JumpNinja(string ai_name) { chr_nocollision WindowNinjaRun 1 chr_animate WindowNinjaRun KONOKOlev11_jump -1 sleep 135 chr_delete WindowNinjaRun } #tv5 - the place with the yellow flashing circle func void outro(string ai_name) { fade_out 0 0 0 30 sleep 30 win } ##################### ### TEXT CONSOLES ### ##################### func void grifftext(string chr_index) { text_console level_11a console_reset 9 }