############## ### README ### ############## # How to start: # # Look for your Oni folder on your harddisk. It includes a folder named "GameDataFolder", which contains an other folder named "Igmd". # Open this folder. You find in it the folders for the level scripts (the first is named "Airport", the last "tctf_ii"). Put this script into a level # folder. (If you want to have this script in all levels, you have to copy it into every folder. Yeah, I know - it's a lot of handwork to do. ;-) # # After that, you have to copy the line below (menu1, without the #) to the main.bsl before the line with the start function. # menu1 # (Every level folder includes a main.bsl file. If you want to have... you know, a lot of handwork to do. ;-) # # Run back and punch to activate the menu. # # Please use the numpad keys to type the numbers. # # Oni does not remembers the state of a variable. For example, if "break all" is on, and you load a new savepoint or a new level, # "break all" will switch to off. ################# ### VARIABLES ### ################# var int var_main_menu; var int var_sub_menu; var int var_sub_menu_camera; var int var_sub_menu_no_clipping; var int var_sub_menu_slowmo; var int var_sub_menu_ignore; var int var_sub_menu_breakall; var int var_sub_menu_doors; var int var_check_clipping; var int var_first_contact; ### below are the "I am in use" variables // chr_wait_animtype needs these, to get not forked twice or more ### var int var_main1; var int var_main2; var int var_main3; var int var_main4; var int var_main5; var int var_main6; var int var_main_back; var int var_camera1; var int var_camera2; var int var_camera3; var int var_camera99; var int var_no_clipping1; var int var_no_clipping2; var int var_slowmo1; var int var_slowmo2; var int var_ignore1; var int var_ignore2; var int var_breakall1; var int var_breakall2; var int var_doors1; var int var_doors2; var int var_exit1; var int var_exit2; ### below are the counter variables for the main menu display ### var int var_counter_camera = 0; var int var_counter_no_clipping = 0; var int var_counter_slowmo = 0; var int var_counter_ignore = 0; var int var_counter_breakall = 0; var int var_counter_doors = 0; ################## ### START MENU ### ################## func void menu(void) { fork menu_pre_start } func void menu_pre_start(void) { chr_pin_character = 0 p3_everything_breakable = 0 door_ignore_locks = 0 menu_start } func void menu_start(void) { chr_wait_animtype 0 run_back_punch chr_pin_character = 1 ai2_allpassive 1 var_main_menu = 0 var_sub_menu = 0 fork menu_end main_menu } ################# ### MAIN MENU ### ################# ### MAIN FUNCTION ### func void main_menu(void) { fork show_main_menu if(var_main1 ne 1) { var_main1 = 1 fork menu_choose1 } if(var_main2 ne 1) { var_main2 = 1 fork menu_choose2 } if(var_main3 ne 1) { var_main3 = 1 fork menu_choose3 } if(var_main4 ne 1) { var_main4 = 1 fork menu_choose4 } if(var_main5 ne 1) { var_main5 = 1 fork menu_choose5 } if(var_main6 ne 1) { var_main6 = 1 fork menu_choose6 } } ### MESSAGE FUNCTION ### func void show_main_menu(void) { dmsg "[r. Main Menu - please use the numpad numbers]" if (var_counter_camera eq 1 and var_counter_no_clipping eq 1 and var_counter_slowmo eq 1) dmsg "[y.1 = rotate camera 2 = no clipping 3 = slowmo]" if (var_counter_camera eq 1 and var_counter_no_clipping eq 1 and var_counter_slowmo eq 0) dmsg "[y.1 = rotate camera 2 = no clipping][b. 3 = slowmo]" if (var_counter_camera eq 1 and var_counter_no_clipping eq 0 and var_counter_slowmo eq 1) dmsg "[y.1 = rotate camera][b. 2 = no clipping][y. 3 = slowmo]" if (var_counter_camera eq 0 and var_counter_no_clipping eq 1 and var_counter_slowmo eq 1) dmsg "[b.1 = rotate camera][y. 2 = no clipping 3 = slowmo]" if (var_counter_camera eq 1 and var_counter_no_clipping eq 0 and var_counter_slowmo eq 0) dmsg "[y.1 = rotate camera][b. 2 = no clipping 3 = slowmo]" if (var_counter_camera eq 0 and var_counter_no_clipping eq 1 and var_counter_slowmo eq 0) dmsg "[b.1 = rotate camera][y. 2 = no clipping][b. 3 = slowmo]" if (var_counter_camera eq 0 and var_counter_no_clipping eq 0 and var_counter_slowmo eq 1) dmsg "[b.1 = rotate camera 2 = no clipping][y. 3 = slowmo]" if (var_counter_camera eq 0 and var_counter_no_clipping eq 0 and var_counter_slowmo eq 0) dmsg "[b.1 = rotate camera 2 = no clipping 3 = slowmo]" if (var_counter_ignore eq 1 and var_counter_breakall eq 1 and var_counter_doors eq 1) dmsg "[y.4 = AI ignores you 5 = all breakable 6 = unlock doors]" if (var_counter_ignore eq 1 and var_counter_breakall eq 1 and var_counter_doors eq 0) dmsg "[y.4 = AI ignores you 5 = all breakable][b. 6 = unlock doors]" if (var_counter_ignore eq 1 and var_counter_breakall eq 0 and var_counter_doors eq 1) dmsg "[y.4 = AI ignores you][b. 5 = all breakable][y. 6 = unlock doors]" if (var_counter_ignore eq 0 and var_counter_breakall eq 1 and var_counter_doors eq 1) dmsg "[b.4 = AI ignores you][y. 5 = all breakable 6 = unlock doors]" if (var_counter_ignore eq 1 and var_counter_breakall eq 0 and var_counter_doors eq 0) dmsg "[y.4 = AI ignores you][b. 5 = all breakable 6 = unlock doors]" if (var_counter_ignore eq 0 and var_counter_breakall eq 1 and var_counter_doors eq 0) dmsg "[b.4 = AI ignores you][y. 5 = all breakable][b. 6 = unlock doors]" if (var_counter_ignore eq 0 and var_counter_breakall eq 0 and var_counter_doors eq 1) dmsg "[b.4 = AI ignores you 5 = all breakable][y. 6 = unlock doors]" if (var_counter_ignore eq 0 and var_counter_breakall eq 0 and var_counter_doors eq 0) dmsg "[b.4 = AI ignores you 5 = all breakable 6 = unlock doors]" dmsg "[JUMP to exit - yellow = activated]" sleep 60 if(var_sub_menu eq 0) fork show_main_menu } ################ ### SUB MENU ### ################ ### MAIN FUNCTIONS ### func void menu_choose1(void) { bind numpad1 to forward chr_wait_animtype 0 run_start var_main1 = 0 unbind numpad1 if(var_sub_menu eq 0) { var_sub_menu = 1 sub_menu } } func void menu_choose2(void) { bind numpad2 to backward chr_wait_animtype 0 run_backwards_start var_main2 = 0 unbind numpad2 if(var_sub_menu eq 0) { var_sub_menu = 2 sub_menu } } func void menu_choose3(void) { bind numpad3 to stepleft chr_wait_animtype 0 run_sidestep_left_start var_main3 = 0 unbind numpad3 if(var_sub_menu eq 0) { var_sub_menu = 3 sub_menu } } func void menu_choose4(void) { bind numpad4 to stepright chr_wait_animtype 0 run_sidestep_right_start var_main4 = 0 unbind numpad4 if(var_sub_menu eq 0) { var_sub_menu = 4 sub_menu } } func void menu_choose5(void) { bind numpad5 to punch chr_wait_animtype 0 punch var_main5 = 0 unbind numpad5 if(var_sub_menu eq 0) { var_sub_menu = 5 sub_menu } } func void menu_choose6(void) { bind numpad6 to kick chr_wait_animtype 0 kick var_main6 = 0 unbind numpad6 if(var_sub_menu eq 0) { var_sub_menu = 6 sub_menu } } func void sub_menu(void) { fork back_to_main_menu if(var_sub_menu eq 1) { var_sub_menu_camera = 0 fork show_sub_menu_camera pre_sub_menu_camera } if(var_sub_menu eq 2) { var_sub_menu_no_clipping = 0 fork show_sub_menu_no_clipping pre_sub_menu_no_clipping } if(var_sub_menu eq 3) { var_sub_menu_slowmo = 0 fork show_sub_menu_slowmo pre_sub_menu_slowmo } if(var_sub_menu eq 4) { var_sub_menu_ignore = 0 fork show_sub_menu_ignore pre_sub_menu_ignore } if(var_sub_menu eq 5) { var_sub_menu_breakall = 0 fork show_sub_menu_breakall pre_sub_menu_breakall } if(var_sub_menu eq 6) { var_sub_menu_doors = 0 fork show_sub_menu_doors pre_sub_menu_doors } } ### MESSAGE FUNCTIONS ### func void show_sub_menu_camera(void) { dmsg "[r.Sub Menu - Camera]" dmsg "[g.Camera rotation in degrees. Please press a key.]" dmsg "[b.1 = 90 2 = 180 3 = 270 0 = reset]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_camera eq 0) fork show_sub_menu_camera } func void show_sub_menu_no_clipping(void) { dmsg "[r.Sub Menu - No clipping]" dmsg "[g.if you jump in the game, no clipping will switch off]" dmsg "[b.1 = no clipping on 2 = no clipping off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_no_clipping eq 0) fork show_sub_menu_no_clipping } func void show_sub_menu_slowmo(void) { dmsg "[r.Sub Menu - Slowmo]" dmsg "[g. ]" dmsg "[b.1 = slowmo on 2 = slowmo off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_slowmo eq 0) fork show_sub_menu_slowmo } func void show_sub_menu_ignore(void) { dmsg "[r.Sub Menu - AI ignores you]" dmsg "[g. ]" dmsg "[b.1 = AI ignore on 2 = AI ignore off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_ignore eq 0) fork show_sub_menu_ignore } func void show_sub_menu_breakall(void) { dmsg "[r.Sub Menu - All breakable]" dmsg "[g. ]" dmsg "[b.1 = all breakable on 2 = all breakable off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_breakall eq 0) fork show_sub_menu_breakall } func void show_sub_menu_doors(void) { dmsg "[r.Sub Menu - Doors]" dmsg "[g. ]" dmsg "[b.1 = unlock doors on 2 = unlock doors off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_doors eq 0) fork show_sub_menu_doors } ######################### ### SUB MENU - CAMERA ### ######################### ### INITIALIZE AND CHECK FUNCTION ### func void pre_sub_menu_camera(void) { if(var_camera1 ne 1 and var_sub_menu_camera ne 1) { var_camera1 = 1 fork choose1_camera } if(var_camera2 ne 1 and var_sub_menu_camera ne 2) { var_camera2 = 1 fork choose2_camera } if(var_camera3 ne 1 and var_sub_menu_camera ne 3) { var_camera3 = 1 fork choose3_camera } if(var_camera99 ne 1 and var_sub_menu_camera ne 99) { var_camera99 = 1 fork choose99_camera } } ### MAIN FUNCTIONS ### func void choose1_camera(void) { sleep 30 var_first_contact = 0 bind numpad1 to forward chr_wait_animtype 0 run_start var_camera1 = 0 unbind numpad1 if(var_sub_menu eq 1 and var_first_contact eq 0) { var_sub_menu_camera = 1 var_counter_camera = 1 cm_orbit 2 90 sub_menu_camera } } func void choose2_camera(void) { sleep 30 var_first_contact = 0 bind numpad2 to backward chr_wait_animtype 0 run_backwards_start var_camera2 = 0 unbind numpad2 if(var_sub_menu eq 1 and var_first_contact eq 0) { var_sub_menu_camera = 2 var_counter_camera = 1 cm_orbit 2 180 sub_menu_camera } } func void choose3_camera(void) { sleep 30 var_first_contact = 0 bind numpad3 to stepleft chr_wait_animtype 0 run_sidestep_left_start var_camera3 = 0 unbind numpad3 if(var_sub_menu eq 1 and var_first_contact eq 0) { var_sub_menu_camera = 3 var_counter_camera = 1 cm_orbit 2 270 sub_menu_camera } } func void choose99_camera(void) { sleep 30 var_first_contact = 0 bind numpad0 to stepright chr_wait_animtype 0 run_sidestep_right_start var_camera99 = 0 unbind numpad0 if(var_sub_menu eq 1 and var_first_contact eq 0) { var_sub_menu_camera = 99 var_counter_camera = 0 cm_reset sub_menu_camera } } func void sub_menu_camera(void) { if(var_sub_menu_camera eq 1) { fork show_sub_menu_camera_90 fork pre_sub_menu_camera } if(var_sub_menu_camera eq 2) { fork show_sub_menu_camera_180 fork pre_sub_menu_camera } if(var_sub_menu_camera eq 3) { fork show_sub_menu_camera_270 fork pre_sub_menu_camera } if(var_sub_menu_camera eq 99) { fork show_sub_menu_camera_reset fork pre_sub_menu_camera } } ### MESSAGE FUNCTIONS ### func void show_sub_menu_camera_90(void) { dmsg "[r.Sub Menu - Camera]" dmsg "[y.camera 90 degrees]" dmsg "[b.1 = 90 2 = 180 3 = 270 0 = reset]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_camera eq 1) fork show_sub_menu_camera_90 } func void show_sub_menu_camera_180(void) { dmsg "[r.Sub Menu - Camera]" dmsg "[y.camera 180 degrees]" dmsg "[b.1 = 90 2 = 180 3 = 270 0 = reset]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_camera eq 2) fork show_sub_menu_camera_180 } func void show_sub_menu_camera_270(void) { dmsg "[r.Sub Menu - Camera]" dmsg "[y.camera 270 degrees]" dmsg "[b.1 = 90 2 = 180 3 = 270 0 = reset]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_camera eq 3) fork show_sub_menu_camera_270 } func void show_sub_menu_camera_reset(void) { dmsg "[r.Sub Menu - Camera]" dmsg "[y.camera reset]" dmsg "[b.1 = 90 2 = 180 3 = 270 0 = reset]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_camera eq 99) fork show_sub_menu_camera_reset } ############################ ### SUB MENU - NO CLIPPING ### ############################ ### INITIALIZE AND CHECK FUNCTION ### func void pre_sub_menu_no_clipping(void) { if(var_no_clipping1 ne 1and var_sub_menu_no_clipping ne 1) { var_no_clipping1 = 1 fork choose_on_no_clipping } if(var_no_clipping2 ne 1and var_sub_menu_no_clipping ne 2) { var_no_clipping2 = 1 fork choose_off_no_clipping } } ### MAIN FUNCTIONS ### func void choose_on_no_clipping(void) { sleep 30 var_first_contact = 0 bind numpad1 to forward chr_wait_animtype 0 run_start var_no_clipping1 = 0 unbind numpad1 if(var_sub_menu eq 2 and var_first_contact eq 0) { var_sub_menu_no_clipping = 1 var_counter_no_clipping = 1 var_check_clipping = 1 chr_nocollision 0 1 sub_menu_no_clipping } } func void choose_off_no_clipping(void) { sleep 30 var_first_contact = 0 bind numpad2 to backward chr_wait_animtype 0 run_backwards_start var_no_clipping2 = 0 unbind numpad2 if(var_sub_menu eq 2 and var_first_contact eq 0) { var_sub_menu_no_clipping = 2 var_counter_no_clipping = 0 var_check_clipping = 0 chr_nocollision 0 0 sub_menu_no_clipping } } func void sub_menu_no_clipping(void) { if(var_sub_menu_no_clipping eq 1) { fork show_sub_menu_no_clipping_on fork pre_sub_menu_no_clipping } if(var_sub_menu_no_clipping eq 2) { fork show_sub_menu_no_clipping_off pre_sub_menu_no_clipping } } ### MESSAGE FUNCTIONS ### func void show_sub_menu_no_clipping_on(void) { dmsg "[r.Sub Menu - No Clipping]" dmsg "[y.no clipping on - you can go trough walls now]" dmsg "[b.1 = no clipping on 2 = no clipping off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_no_clipping eq 1) fork show_sub_menu_no_clipping_on } func void show_sub_menu_no_clipping_off(void) { dmsg "[r.Sub Menu - No Clipping]" dmsg "[y.no clipping off - you can't go trough walls anymore]" dmsg "[b.1 = no clipping on 2 = no clipping off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_no_clipping eq 2) fork show_sub_menu_no_clipping_off } ############################# ### SUB MENU - SLOWMOTION ### ############################# ### INITIALIZE AND CHECK FUNCTION ### func void pre_sub_menu_slowmo(void) { if(var_slowmo1 ne 1 and var_sub_menu_slowmo ne 1) fork choose_on_slowmo if(var_slowmo2 ne 1 and var_sub_menu_slowmo ne 2) fork choose_off_slowmo } ### MAIN FUNCTIONS ### func void choose_on_slowmo(void) { sleep 30 var_first_contact = 0 bind numpad1 to forward chr_wait_animtype 0 run_start unbind numpad1 if(var_sub_menu eq 3 and var_first_contact eq 0) { var_sub_menu_slowmo = 1 var_counter_slowmo = 1 fork sub_menu_slowmo fork slowmo_3600 } } func void slowmo_3600(void) { slowmo 3600 sleep 3590 if(var_counter_slowmo eq 1) fork slowmo_3600 } func void choose_off_slowmo(void) { sleep 30 var_first_contact = 0 bind numpad2 to backward chr_wait_animtype 0 run_backwards_start unbind numpad2 if(var_sub_menu eq 3 and var_first_contact eq 0) { var_sub_menu_slowmo = 2 var_counter_slowmo = 0 slowmo 0 sub_menu_slowmo } } func void sub_menu_slowmo(void) { if(var_sub_menu_slowmo eq 1) { fork show_sub_menu_slowmo_on fork pre_sub_menu_slowmo } if(var_sub_menu_slowmo eq 2) { fork show_sub_menu_slowmo_off fork pre_sub_menu_slowmo } } ### MESSAGE FUNCTIONS ### func void show_sub_menu_slowmo_on(void) { dmsg "[r.Sub Menu - Slowmo]" dmsg "[y.slowmo on]" dmsg "[b.1 = slowmo on 2 = slowmo off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_slowmo eq 1) fork show_sub_menu_slowmo_on } func void show_sub_menu_slowmo_off(void) { dmsg "[r.Sub Menu - Slowmo]" dmsg "[y.slowmo off]" dmsg "[b.1 = slowmo on 2 = slowmo off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_slowmo eq 2) fork show_sub_menu_slowmo_off } ############################### ### SUB MENU - AI IGNORES YOU ### ############################### ### INITIALIZE AND CHECK FUNCTION ### func void pre_sub_menu_ignore(void) { if(var_ignore1 ne 1 and var_sub_menu_ignore ne 1) { var_ignore1 = 1 fork choose_on_ignore } if(var_ignore2 ne 1 and var_sub_menu_ignore ne 2) { var_ignore2 = 1 fork choose_off_ignore } } ### MAIN FUNCTIONS ### func void choose_on_ignore(void) { sleep 30 var_first_contact = 0 bind numpad1 to forward chr_wait_animtype 0 run_start var_ignore1 = 0 unbind numpad1 if(var_sub_menu eq 4 and var_first_contact eq 0) { var_sub_menu_ignore = 1 var_counter_ignore = 1 ai2_ignore_player = 1 sub_menu_ignore } } func void choose_off_ignore(void) { sleep 30 var_first_contact = 0 bind numpad2 to backward chr_wait_animtype 0 run_backwards_start var_ignore2 = 0 unbind numpad2 if(var_sub_menu eq 4 and var_first_contact eq 0) { var_sub_menu_ignore = 2 var_counter_ignore = 0 ai2_ignore_player = 0 sub_menu_ignore } } func void sub_menu_ignore(void) { if(var_sub_menu_ignore eq 1) { fork show_sub_menu_ignore_on fork pre_sub_menu_ignore } if(var_sub_menu_ignore eq 2) { fork show_sub_menu_ignore_off fork pre_sub_menu_ignore } } ### MESSAGE FUNCTIONS ### func void show_sub_menu_ignore_on(void) { dmsg "[r.Sub Menu - AI ignores you]" dmsg "[y.AI ignore on - AI will ignores you now]" dmsg "[b.1 = AI ignore on 2 = AI ignore off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_ignore eq 1) fork show_sub_menu_ignore_on } func void show_sub_menu_ignore_off(void) { dmsg "[r.Sub Menu - AI ignores you]" dmsg "[y.AI ignore off - AI won't ignores you any longer]" dmsg "[b.1 = AI ignore on 2 = AI ignore off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_ignore eq 2) fork show_sub_menu_ignore_off } ################################ ### SUB MENU - ALL BREAKABLE ### ################################ ### INITIALIZE AND CHECK FUNCTION ### func void pre_sub_menu_breakall(void) { if(var_breakall1 ne 1 and var_sub_menu_breakall ne 1) { var_breakall1 = 1 fork choose_on_breakall } if(var_breakall2 ne 1 and var_sub_menu_breakall ne 2) { var_breakall2 = 1 fork choose_off_breakall } } ### MAIN FUNCTIONS ### func void choose_on_breakall(void) { sleep 30 var_first_contact = 0 bind numpad1 to forward chr_wait_animtype 0 run_start var_breakall1 = 0 unbind numpad1 if(var_sub_menu eq 5 and var_first_contact eq 0) { var_sub_menu_breakall = 1 var_counter_breakall = 1 p3_everything_breakable = 1 sub_menu_breakall } } func void choose_off_breakall(void) { sleep 30 var_first_contact = 0 bind numpad2 to backward chr_wait_animtype 0 run_backwards_start var_breakall2 = 0 unbind numpad2 if(var_sub_menu eq 5 and var_first_contact eq 0) { var_sub_menu_breakall = 2 var_counter_breakall = 0 p3_everything_breakable = 0 sub_menu_breakall } } func void sub_menu_breakall(void) { if(var_sub_menu_breakall eq 1) { fork show_sub_menu_breakall_on fork pre_sub_menu_breakall } if(var_sub_menu_breakall eq 2) { fork show_sub_menu_breakall_off fork pre_sub_menu_breakall } } ### MESSAGE FUNCTIONS ### func void show_sub_menu_breakall_on(void) { dmsg "[r.Sub Menu - All breakable]" dmsg "[y.all breakable on - you can destroy anything]" dmsg "[b.1 = all breakable on 2 = all breakable off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_breakall eq 1) fork show_sub_menu_breakall_on } func void show_sub_menu_breakall_off(void) { dmsg "[r.Sub Menu - All breakable]" dmsg "[y.all breakable off - you can't destroy anything]" dmsg "[b.1 = all breakable on 2 = all breakable off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_breakall eq 2) fork show_sub_menu_breakall_off } ################################### ### SUB MENU - UNLOCK ALL DOORS ### ################################### ### INITIALIZE AND CHECK FUNCTION ### func void pre_sub_menu_doors(void) { if(var_doors1 ne 1and var_sub_menu_doors ne 1) { var_doors1 = 1 fork choose_on_doors } if(var_doors2 ne 1and var_sub_menu_doors ne 2) { var_doors2 = 1 fork choose_off_doors } } ### MAIN FUNCTIONS ### func void choose_on_doors(void) { sleep 30 var_first_contact = 0 bind numpad1 to forward chr_wait_animtype 0 run_start var_doors1 = 0 unbind numpad1 if(var_sub_menu eq 6 and var_first_contact eq 0) { var_sub_menu_doors = 1 var_counter_doors = 1 door_ignore_locks = 1 sub_menu_doors } } func void choose_off_doors(void) { sleep 30 var_first_contact = 0 bind numpad2 to backward chr_wait_animtype 0 run_backwards_start var_doors2 = 0 unbind numpad2 if(var_sub_menu eq 6 and var_first_contact eq 0) { var_sub_menu_doors = 2 var_counter_doors = 0 door_ignore_locks = 0 sub_menu_doors } } func void sub_menu_doors(void) { if(var_sub_menu_doors eq 1) { fork show_sub_menu_doors_on fork pre_sub_menu_doors } if(var_sub_menu_doors eq 2) { fork show_sub_menu_doors_off fork pre_sub_menu_doors } } ### MESSAGE FUNCTIONS ### func void show_sub_menu_doors_on(void) { dmsg "[r.Sub Menu - Doors]" dmsg "[y.unlock doors on - you can open all doors]" dmsg "[b.1 = unlock doors on 2 = unlock doors off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_doors eq 1) fork show_sub_menu_doors_on } func void show_sub_menu_doors_off(void) { dmsg "[r.Sub Menu - Doors]" dmsg "[y.unlock doors off - you can't open closed doors]" dmsg "[b.1 = unlock doors on 2 = unlock doors off]" dmsg "[JUMP to exit - ENTER to main menu]" sleep 60 if(var_sub_menu_doors eq 2) fork show_sub_menu_doors_off } ################################### ### BACK TO MAIN MENU FUNCTION ### ################################### func void back_to_main_menu(void) { if(var_main_back ne 1) { bind enter to crouch var_main_back = 1 chr_wait_animtype 0 crouch var_main_back = 0 unbind enter if(var_main_menu eq 0) { var_sub_menu_camera = 100 var_sub_menu_no_clipping = 100 var_sub_menu_slowmo = 100 var_sub_menu_ignore = 100 var_sub_menu_breakall = 100 var_sub_menu_doors = 100 var_sub_menu = 0 var_first_contact = 1 fork main_menu } } } ########################## ### EXIT MENU FUNCTION ### ########################## func void menu_end(void) { chr_wait_animtype 0 jump chr_animate 0 KONOKOidle1 if(var_check_clipping eq 1) fork special_exit_menu chr_pin_character = 0 ai2_allpassive 0 var_sub_menu_camera = 100 var_sub_menu_no_clipping = 100 var_sub_menu_slowmo = 100 var_sub_menu_ignore = 100 var_sub_menu_breakall = 100 var_sub_menu_doors = 100 var_sub_menu = 100 var_first_contact = 1 dmsg "[y. ]" dmsg "[y. ]" dmsg "[y. ]" dmsg "[exit menu]" fork menu_start sleep 60 message_remove var_main_menu = 1 } func void special_exit_menu(void) { if(var_exit1 ne 1) { var_exit1 = 1 fork jump_check_1 } if(var_exit2 ne 1) { var_exit2 = 1 fork jump_check_2 } } func void jump_check_1(void) { chr_wait_animtype 0 jump var_exit1 = 0 if(var_main_menu eq 1 and var_check_clipping eq 1) jump_message } func void jump_check_2(void) { chr_wait_animtype 0 jump_backward var_exit2 = 0 if(var_main_menu eq 1 and var_check_clipping eq 1) jump_message } func void jump_message(void) { chr_nocollision 0 0 dmsg "[y. ]" dmsg "[y. ]" dmsg "[y. ]" dmsg "[no clipping off, because you jumped]" var_check_clipping = 0 var_counter_no_clipping = 0 sleep 60 message_remove } ############################## ### written by ssg, december 2004 ### ### last edit: 01/September/2005 ### ### visit http://oni.bungie.org ### ##############################