BSL:Tutorial/airport1 level logic.bsl
Table of Contents
Start, Save & Objectives
### AIRPORT 1 LEVEL LOGIC ###
### START, SAVE & OBJECTIVES ###
(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 you_lose
func void you_lose(string ai_name)
{
all_music_counters
sleep 240
fade_out 0 0 0 180
sleep 240
lose
}
func you_win
func void you_win(int char_index)
{
all_music_counters
win
}
func save_point_1
func void save_point_1(string player_name)
{
dprint save_point_1_active
save_game 1 autosave
}
func save_point_2
func void save_point_2(string player_name)
{
dprint save_point_2_active
save_game 2 autosave
}
func save_point_3
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 set_objective_1
func void set_objective_1(string chr_index)
{
dprint objective_1
objective_set(1)
sound_dialog_play c00_01_22shinatama
}
func set_objective_2
func void set_objective_2(string chr_index)
{
dprint objective_2
objective_set(2)
sound_dialog_play c00_01_19shinatama
}
func set_objective_3
func void set_objective_3(string chr_index)
{
dprint objective_3
objective_set(3)
console_deactivate 2
sound_dialog_play c00_01_18shinatama
}
func set_objective_4
func void set_objective_4(string chr_index)
{
dprint objective_4
objective_set(4)
sound_dialog_play c00_01_20shinatama
}
func set_target_1
func void set_target_1(string chr_index)
{
dprint set_target1
target_set(1095, 30.0)
sound_dialog_play c00_01_28shinatama
}
func set_target_2
func void set_target_2(string chr_index)
{
dprint set_target2
target_set(1132, 30.0)
sound_dialog_play c00_01_27shinatama
}
func set_target_3
func void set_target_3(string chr_index)
{
dprint set_target3
target_set(1109, 30.0)
sound_dialog_play c00_01_26shinatama
}
func set_target_4
func void set_target_4(string chr_index)
{
dprint set_target4
target_set(1112, 30.0)
sound_dialog_play c00_01_25shinatama
}
func set_target_5
func void set_target_5(string chr_index)
{
dprint set_target5
target_set(1115, 30.0)
sound_dialog_play c00_01_24shinatama
}
func set_target_6
func void set_target_6(string chr_index)
{
dprint set_target6
target_set(1139, 30.0)
sound_dialog_play c00_01_28shinatama
}
func set_target_blank
func void set_target_blank(string chr_index)
{
dprint set_targetblank
target_set(0, 0.0)
}
### MUSIC ###
var music_counter
var int music_counter;
func music_force_stop
func void music_force_stop(void)
{
sleep 4500
if (0 ne music_counter)
{
dprint music_force_stop
music_counter = 0
all_music_counters
}
}
func music_script_start
func void music_script_start(void)
{
music_counter = 2
}
func striker_lullaby_1
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 striker_lullaby_2
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 all_music_counters
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 level_4a
func void level_4a(void)
{
dprint set_text_4a
text_console level_4a
console_reset 7
}
func level_4b
func void level_4b(void)
{
dprint set_text_4b
text_console level_4b
console_reset 7
}
func level_4c
func void level_4c(void)
{
dprint set_text_4c
text_console level_4c
console_reset 8
}
### GAMEPLAY PROGRESSION ###
func FixDoors
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 panic1a
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 panic1b
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 hide_1
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 horror_1
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 ambush_striker_1
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 civ_victim_20s_flee
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 LoadingBay1
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 bomber_boom
func void bomber_boom(string char_index)
{
dprint bomberboom
particle bomb1 do explode
obj_kill 991 992
sleep 300
particle bomb1 stop
}
func mad_bomber_bait
func void mad_bomber_bait(string char_index)
{
dprint bomber_bait
ai2_dopath mad_bomber_1 bomber_flee 1
}
func patrolscript0200
func void patrolscript0200(string char_index)
{
dprint bomber1_death
chr_delete mad_bomber_1
}
func Tarmac1
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 back9a
func void back9a(string ai_name)
{
dprint hidden_striker1
ai2_spawn hidden_striker1
}
func back9b
func void back9b(string ai_name)
{
dprint hidden_striker1
ai2_spawn hidden_striker2
}
func bay1_particles
func void bay1_particles(void)
{
dprint bay1_fires_on
particle fx3 do start
particle fx4 do stop
}
func fire_damage
func void fire_damage(string ai_name)
{
dprint fire_hurt_konoko
chr_poison (ai_name, 5, 30, 30);
}
func bay2_particles
func void bay2_particles(void)
{
dprint bay2_fires_on
particle fx3 do stop
particle fx4 do start
}
# COME TO ME
func 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 second_coming
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 progress_counter
var int progress_counter=2;
func progress_check_1
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 progress_check_2
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 progress_check_3
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 progress_check_4
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 exhaust_on
func void exhaust_on(string ai_name)
{
dprint start_exhaust
particle exhaust create
}
func exhaust_off
func void exhaust_off(string ai_name)
{
dprint stop_exhaust
particle exhaust kill
}
func pass_go_collect_whupass
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 patrolscript000
func void patrolscript000(string ai_name)
{
dprint do_my_bidding
particle lock2_locklight01 do start
door_unlock 6
}
func BayTwo1
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 Repair1
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 Repair2
func void Repair2(string char_index)
{
dprint spawn_guards
ai2_spawn Repair_Striker_2
ai2_spawn Repair_Comguy_2
}
func console_2_activate
func void console_2_activate(string char_index)
{
dprint console2_activate
console_activate 2
}
func final_ambush
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 i_uh_heheheh
That thing is supposed to force the two Red Strikers from the final fight to retreat to the end-of-level door when and if Konoko is about to unlock it. The trigger volume responsible for this is i_uh_heheheh1 (number 6): func i_uh_heheheh is its entry function; it spans the stairs that lead to the final console. It is disabled at level start and is never enabled, so the following function is never actually called in the original Oni. If you want to experiment with it, just do trigvolume_enable i_uh_heheheh1 1 after the Strikers are spawned, make a run for the console and see them do their "strategic retreat".
- Note the typically inconsistent string char_index parameter: actually the name of the character who fired the trigger volume function.
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 change_terminaldoor_light
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 change_door2_light
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 change_enddoor_light
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
}