#include common_scripts\utility; #include maps\_utility; init_once() { PrecacheShader( "white" ); dyn_models = GetDynModels(); dyn_models = []; for( i = 0; i < dyn_models.size; i++ ) { if( isdefined( dyn_models[i] ) ) { PrecacheModel( dyn_models[i] ); } } misc_models = GetMiscModels(); misc_models = []; for( i = 0; i < misc_models.size; i++ ) { if( isdefined( misc_models[i] ) ) { PrecacheModel( misc_models[i] ); } } level.model_names["dynent"] = []; level.model_names["destructible"] = []; level.model_names["miscmodel"] = []; level.models["dynent"] = []; level.models["destructible"] = []; level.models["miscmodel"] = []; level.dynent_groups = []; level.all_objects = []; setup_groups(); dyn_models = GetDynModels(); dyn_models = []; for( i = 0; i < dyn_models.size; i++ ) { if( isdefined( dyn_models[i] ) ) { add_model_to_group( dyn_models[i] ); add_name( dyn_models[i], "dynent" ); } } misc_models = GetMiscModels(); misc_models = []; for( i = 0; i < misc_models.size; i++ ) { add_name( misc_models[i], "miscmodel" ); } destructible_defs = GetDestructibleDefs(); for( i = 0; i < destructible_defs.size; i++ ) { add_name( destructible_defs[i], "destructible" ); } } main() { while( GetDvar( #"propman" ) != "1" ) { wait 1; } if( !isdefined( level.script ) ) { level.script = ToLower( GetDvar( #"mapname" ) ); } waittillframeend; wait 1; wait_for_first_player(); players = get_players(); level.debug_player = players[0]; level set_default_path(); level set_crosshair(); level init(); level setup_menus(); level setup_menu_buttons(); level thread menu_input(); level setup_xform_menu(); } set_crosshair() { crossHair = NewDebugHudElem(); crossHair.location = 0; crossHair.alignX = "center"; crossHair.alignY = "middle"; crossHair.foreground = 1; crossHair.fontScale = 2; crossHair.sort = 20; crossHair.alpha = 1; crossHair.x = 320; crossHair.y = 233; crossHair setText("."); } setup_groups() { level.model_group_map = []; level.dynent_groups = []; level.groups = []; level.model_group_map["p_glo_gascan"] = "p_glo"; level.model_group_map["p_glo_cinder_block"] = "p_glo"; level.model_group_map["p_jun_fruit_apple"] = "fruits"; level.model_group_map["p_jun_fruit_pineapple"] = "fruits"; } add_to_group( group, model ) { if( isdefined( level.groups[group] ) ) { if( check_for_dupes( level.groups[group], model ) ) { level.groups[group][level.groups[group].size] = model; } } else { level.dynent_groups[level.dynent_groups.size] = group; level.groups[group][0] = model; } } add_model_to_group( model ) { if( isdefined( level.model_group_map[model] ) ) { add_to_group( level.model_group_map[model], model ); } else { add_to_group( "miscmodel", model ); } } init() { level.highlighted = []; level.rotate_highlighted = []; } add_to_dynent_group( dynent_name ) { if( check_for_dupes( level.dynent_groups, dynent_name ) ) { level.dynent_groups[level.dynent_groups.size] = dynent_name; } } add_to_all_objects() { if( check_for_dupes( level.all_objects, self ) ) { level.all_objects[level.all_objects.size] = self; } } remove_from_all_objects() { if( level.all_objects.size > 0 ) { level.all_objects = array_remove( level.all_objects, self ); } } add_name( name, type ) { if( check_for_dupes( level.model_names[type], name ) ) { level.model_names[type][level.model_names[type].size] = name; } } add_model( type ) { if( check_for_dupes( level.models[type], self ) ) { level.models[type][level.models[type].size] = self; } } check_for_dupes( array, single ) { for( i = 0; i < array.size; i++ ) { if( array[i] == single ) { return false; } } return true; } setup_menus() { level.menu_sys = []; level.menu_sys["current_menu"] = SpawnStruct(); add_menu( "choose_mode", "Choose Mode:" ); add_menuoptions( "choose_mode", "Dyn Ents Mode" ); add_menuoptions( "choose_mode", "Destructibles Mode" ); add_menuoptions( "choose_mode", "Misc Models Mode" ); add_menuoptions( "choose_mode", "Toggle Help Hud", ::toggle_xform_hud ); add_menuoptions( "choose_mode", "Quit", ::quit ); add_menu_child( "choose_mode", "dynent_mode", "Dyn Ents Mode" ); set_no_back_menu( "dynent_mode" ); add_menuoptions( "dynent_mode", "Select Model", ::select_dynent_from_list ); add_menuoptions( "dynent_mode", "Select Group", ::select_dynent_group ); add_menuoptions( "dynent_mode", "Place Model", ::place_dynent ); add_menuoptions( "dynent_mode", "Place Copy", ::place_dynent_copy ); add_menuoptions( "dynent_mode", "Spray Selected", ::spray_model ); add_menuoptions( "dynent_mode", "Select Mode" ); add_menuoptions( "dynent_mode", "Save", ::save_dynents ); add_menuoptions( "dynent_mode", "Back", ::selected_back ); add_menu_child( "dynent_mode", "dynent_select_menu", "Dyn Ents->Select Mode:", 5, ::select_dynents ); add_menuoptions( "dynent_select_menu", "Move" ); add_menuoptions( "dynent_select_menu", "Copy" ); add_menuoptions( "dynent_select_menu", "Delete", ::delete_model ); add_menuoptions( "dynent_select_menu", "Save" ); add_menu_child( "dynent_select_menu", "dynent_move_menu", "Dyn Ents->Move Selected:", 0, ::move_model ); set_no_back_menu( "dynent_move_menu" ); add_menuoptions( "dynent_move_menu", "Place Model", ::place_dynent ); add_menuoptions( "dynent_move_menu", "Copy Model", ::place_dynent_copy ); add_menuoptions( "dynent_move_menu", "Back", ::selected_back ); add_menu_child( "dynent_select_menu", "dynent_copy_menu", "Dyn Ents->Copy Selected:", 1, ::copy_dynent ); set_no_back_menu( "dynent_copy_menu" ); add_menuoptions( "dynent_copy_menu", "Place Model", ::place_dynent ); add_menuoptions( "dynent_copy_menu", "Place Copy", ::place_dynent_copy ); add_menuoptions( "dynent_copy_menu", "Back", ::selected_back ); add_menu_child( "dynent_select_menu", "selected_dynent_save_menu", "Dyn Ents->Save Selected:", 3, ::selected_dynent_save ); add_menuoptions( "selected_dynent_save_menu", "Highlight", ::selected_save_highlight ); add_menuoptions( "selected_dynent_save_menu", "Save Selected", ::save_dynent_highlighted ); add_menu_child( "choose_mode", "destructible_mode", "Destructibles Mode" ); add_menuoptions( "destructible_mode", "Select Model", ::select_destructible_from_list ); add_menuoptions( "destructible_mode", "Place Model", ::place_destructible ); add_menuoptions( "destructible_mode", "Place Copy", ::place_destructible_copy ); add_menuoptions( "destructible_mode", "Select Mode" ); add_menuoptions( "destructible_mode", "Save", ::save_destructibles ); add_menu_child( "destructible_mode", "destructible_select_menu", "Destructibles->Select Mode:", 3, ::select_destructibles ); add_menuoptions( "destructible_select_menu", "Move" ); add_menuoptions( "destructible_select_menu", "Copy" ); add_menuoptions( "destructible_select_menu", "Delete", ::delete_model ); add_menuoptions( "destructible_select_menu", "Save" ); add_menu_child( "destructible_select_menu", "destructible_move_menu", "Destructibles->Move Selected:", 0, ::move_model ); set_no_back_menu( "destructible_move_menu" ); add_menuoptions( "destructible_move_menu", "Place Model", ::place_destructible ); add_menuoptions( "destructible_move_menu", "Copy Model", ::place_destructible_copy ); add_menuoptions( "destructible_move_menu", "Back", ::selected_back ); add_menu_child( "destructible_select_menu", "destructible_copy_menu", "Destructibles->Copy Selected:", 1, ::copy_destructible ); set_no_back_menu( "destructible_copy_menu" ); add_menuoptions( "destructible_copy_menu", "Place Model", ::place_destructible ); add_menuoptions( "destructible_copy_menu", "Place Copy", ::place_destructible_copy ); add_menuoptions( "destructible_copy_menu", "Back", ::selected_back ); add_menu_child( "destructible_select_menu", "selected_destructible_save_menu", "Destructibles->Save Selected:", 3, ::selected_destructible_save ); add_menuoptions( "selected_destructible_save_menu", "Highlight", ::selected_save_highlight ); add_menuoptions( "selected_destructible_save_menu", "Save Selected", ::save_destructible_highlighted ); add_menu_child( "choose_mode", "miscmodel_menu", "Misc Models Mode" ); add_menuoptions( "miscmodel_menu", "Select Model", ::select_miscmodel_from_list ); add_menuoptions( "miscmodel_menu", "Place Model", ::place_miscmodel ); add_menuoptions( "miscmodel_menu", "Place Copy", ::place_miscmodel_copy ); add_menuoptions( "miscmodel_menu", "Select Mode" ); add_menuoptions( "miscmodel_menu", "Save", ::save_miscmodels ); add_menu_child( "miscmodel_menu", "miscmodel_select_menu", "Misc Model->Select Mode:", 3, ::select_miscmodels ); add_menuoptions( "miscmodel_select_menu", "Move" ); add_menuoptions( "miscmodel_select_menu", "Copy" ); add_menuoptions( "miscmodel_select_menu", "Delete", ::delete_model ); add_menuoptions( "miscmodel_select_menu", "Save" ); add_menu_child( "miscmodel_select_menu", "miscmodel_move_menu", "Misc Model->Move Selected:", 0, ::move_model ); set_no_back_menu( "miscmodel_move_menu" ); add_menuoptions( "miscmodel_move_menu", "Place Model", ::place_miscmodel ); add_menuoptions( "miscmodel_move_menu", "Copy Model", ::place_miscmodel_copy ); add_menuoptions( "miscmodel_move_menu", "Back", ::selected_back ); add_menu_child( "miscmodel_select_menu", "miscmodel_copy_menu", "Misc Model->Copy Selected:", 1, ::copy_miscmodel ); set_no_back_menu( "miscmodel_copy_menu" ); add_menuoptions( "miscmodel_copy_menu", "Place Model", ::place_miscmodel); add_menuoptions( "miscmodel_copy_menu", "Place Copy", ::place_miscmodel_copy ); add_menuoptions( "miscmodel_copy_menu", "Back", ::selected_back ); add_menu_child( "miscmodel_select_menu", "selected_miscmodel_save_menu", "Misc Model->Save Selected:", 3, ::selected_miscmodel_save ); add_menuoptions( "selected_miscmodel_save_menu", "Highlight", ::selected_save_highlight ); add_menuoptions( "selected_miscmodel_save_menu", "Save Selected", ::save_miscmodel_highlighted ); enable_menu( "choose_mode" ); } add_menu( menu_name, title ) { if( isdefined( level.menu_sys[menu_name] ) ) { println( "^1level.menu_sys[" + menu_name + "] already exists, change the menu_name" ); return; } level.menu_sys[menu_name] = SpawnStruct(); level.menu_sys[menu_name].title = "none"; level.menu_sys[menu_name].title = title; } add_menuoptions( menu_name, option_text, func ) { if( !isdefined( level.menu_sys[menu_name].options ) ) { level.menu_sys[menu_name].options = []; } num = level.menu_sys[menu_name].options.size; level.menu_sys[menu_name].options[num] = option_text; level.menu_sys[menu_name].function[num] = func; } add_menu_child( parent_menu, child_menu, child_title, child_number_override, func ) { if( !isdefined( level.menu_sys[child_menu] ) ) { add_menu( child_menu, child_title ); } level.menu_sys[child_menu].parent_menu = parent_menu; if( !isdefined( level.menu_sys[parent_menu].children_menu ) ) { level.menu_sys[parent_menu].children_menu = []; } if( !isdefined( child_number_override ) ) { size = level.menu_sys[parent_menu].children_menu.size; } else { size = child_number_override; } level.menu_sys[parent_menu].children_menu[size] = child_menu; if( isdefined( func ) ) { if( !isdefined( level.menu_sys[parent_menu].children_func ) ) { level.menu_sys[parent_menu].children_func = []; } level.menu_sys[parent_menu].children_func[size] = func; } } set_no_back_menu( menu_name ) { level.menu_sys[menu_name].no_back = true; } enable_menu( menu_name ) { disable_menu( "current_menu" ); if( isdefined( level.menu_cursor ) ) { level.menu_cursor.y = 130; level.menu_cursor.current_pos = 0; } level.menu_sys["current_menu"].title = set_menu_hudelem( level.menu_sys[menu_name].title, "title" ); level.menu_sys["current_menu"].menu_name = menu_name; back_option_num = 0; if( isdefined( level.menu_sys[menu_name].options ) ) { options = level.menu_sys[menu_name].options; for( i = 0; i < options.size; i++ ) { text = ( i + 1 ) + ". " + options[i]; level.menu_sys["current_menu"].options[i] = set_menu_hudelem( text, "options", 20 * i ); back_option_num = i; } } if( isdefined( level.menu_sys[menu_name].parent_menu ) && !isdefined( level.menu_sys[menu_name].no_back ) ) { back_option_num++; text = ( back_option_num + 1 ) + ". " + "Back"; level.menu_sys["current_menu"].options[back_option_num] = set_menu_hudelem( text, "options", 20 * back_option_num ); } } disable_menu( menu_name ) { if( isdefined( level.menu_sys[menu_name] ) ) { if( isdefined( level.menu_sys[menu_name].title ) ) { level.menu_sys[menu_name].title Destroy(); } if( isdefined( level.menu_sys[menu_name].options ) ) { options = level.menu_sys[menu_name].options; for( i = 0; i < options.size; i++ ) { options[i] Destroy(); } } } level.menu_sys[menu_name].title = undefined; level.menu_sys[menu_name].options = []; } set_menu_hudelem( text, type, y_offset ) { x = 10; y = 100; if( isdefined( type ) && type == "title" ) { scale = 2; } else { scale = 1.3; y = y + 30; } if( !isdefined( y_offset ) ) { y_offset = 0; } y = y + y_offset; return set_hudelem( text, x, y, scale ); } set_hudelem( text, x, y, scale, alpha ) { if( !isdefined( alpha ) ) { alpha = 1; } if( !isdefined( scale ) ) { scale = 1; } hud = NewDebugHudElem(); hud.location = 0; hud.alignX = "left"; hud.alignY = "middle"; hud.foreground = 1; hud.fontScale = scale; hud.sort = 20; hud.alpha = alpha; hud.x = x; hud.y = y; hud.og_scale = scale; if( isdefined( text ) ) { hud SetText( text ); } return hud; } menu_input() { level endon( "stop_createdynents" ); while( 1 ) { level waittill( "menu_button_pressed", keystring ); menu_name = level.menu_sys["current_menu"].menu_name; if( keystring == "dpad_up" || keystring == "uparrow" ) { if( level.menu_cursor.current_pos > 0 ) { level.menu_cursor.y = level.menu_cursor.y - 20; level.menu_cursor.current_pos--; } else { level.menu_cursor.y = 130 + 20 * ( level.menu_sys["current_menu"].options.size - 1 ); level.menu_cursor.current_pos = level.menu_sys["current_menu"].options.size - 1; } continue; } else if( keystring == "dpad_down" || keystring == "downarrow" ) { if( level.menu_cursor.current_pos < level.menu_sys["current_menu"].options.size - 1 ) { level.menu_cursor.y = level.menu_cursor.y + 20; level.menu_cursor.current_pos++; } else { level.menu_cursor.y = 130; level.menu_cursor.current_pos = 0; } continue; } else if( keystring == "button_a" || keystring == "enter" ) { key = level.menu_cursor.current_pos; } else { key = int( keystring ) - 1; } if( key > level.menu_sys[menu_name].options.size ) { continue; } else if( isdefined( level.menu_sys[menu_name].parent_menu ) && key == level.menu_sys[menu_name].options.size ) { level notify( "disable " + menu_name ); level enable_menu( level.menu_sys[menu_name].parent_menu ); } else if( isdefined( level.menu_sys[menu_name].function ) && isdefined( level.menu_sys[menu_name].function[key] ) ) { level.menu_sys["current_menu"].options[key] thread hud_selector( level.menu_sys["current_menu"].options[key].x, level.menu_sys["current_menu"].options[key].y ); if( isdefined( level.menu_sys[menu_name].func_key ) && isdefined( level.menu_sys[menu_name].func_key[key] ) && level.menu_sys[menu_name].func_key[key] == keystring ) { error_msg = level [[level.menu_sys[menu_name].function[key]]](); } else { error_msg = level [[level.menu_sys[menu_name].function[key]]](); } level thread hud_selector_fade_out(); if( isdefined( error_msg ) ) { level thread selection_error( error_msg, level.menu_sys["current_menu"].options[key].x, level.menu_sys["current_menu"].options[key].y ); } } if( !isdefined( level.menu_sys[menu_name].children_menu ) ) { continue; } else if( !isdefined( level.menu_sys[menu_name].children_menu[key] ) ) { continue; } else if( !isdefined( level.menu_sys[level.menu_sys[menu_name].children_menu[key]] ) ) { continue; } if( isdefined( level.menu_sys[menu_name].children_func ) && isdefined( level.menu_sys[menu_name].children_func[key] ) ) { func = level.menu_sys[menu_name].children_func[key]; error_msg = [[func]](); if( isdefined( error_msg ) ) { level thread selection_error( error_msg, level.menu_sys["current_menu"].options[key].x, level.menu_sys["current_menu"].options[key].y ); continue; } } level enable_menu( level.menu_sys[menu_name].children_menu[key] ); } } force_menu_back() { level endon( "stop_createdynents" ); wait( 0.1 ); menu_name = level.menu_sys["current_menu"].menu_name; key = level.menu_sys[menu_name].options.size; key++; keys[1] = "1"; keys[2] = "2"; keys[3] = "3"; keys[4] = "4"; keys[5] = "5"; keys[6] = "6"; keys[7] = "7"; keys[8] = "8"; keys[9] = "9"; if( key > 0 && key < 10 ) key = keys[key]; level notify( "menu_button_pressed", key ); } list_menu( list, x, y, scale, func ) { hud_array = []; space_apart = 15; for( i = 0; i < list.size; i++ ) { alpha = 1 / ( i + 1 ); if( alpha < 0.2 ) { alpha = 0.1; } hud = set_hudelem( list[i], x, y + ( i * space_apart ), scale, alpha ); hud_array = array_add( hud_array, hud ); } current_num = 0; old_num = 0; selected = false; [[func]]( list[current_num] ); while( true ) { level waittill( "menu_button_pressed", key ); if( any_button_hit( key, "numbers" ) ) { break; } else if( key == "downarrow" || key == "dpad_down" ) { if( current_num >= hud_array.size - 1 ) { continue; } current_num++; move_list_menu( hud_array, "down", space_apart, current_num ); } else if( key == "uparrow" || key == "dpad_up" ) { if( current_num <= 0 ) { continue; } current_num--; move_list_menu( hud_array, "up", space_apart, current_num ); } else if( key == "enter" || key == "button_a" ) { selected = true; break; } level notify( "scroll_list" ); if( current_num != old_num ) { old_num = current_num; [[func]]( list[current_num] ); } } for( i = 0; i < hud_array.size; i++ ) { hud_array[i] Destroy(); } if( selected ) { return current_num; } } move_list_menu( hud_array, dir, space, num ) { time = 0.1; if( dir == "up" ) { movement = space; } else { movement = space * -1; } for( i = 0; i < hud_array.size; i++ ) { hud_array[i] MoveOverTime( time ); hud_array[i].y = hud_array[i].y + movement; temp = i - num; if( temp < 0 ) { temp = temp * -1; } alpha = 1 / ( temp + 1 ); if( alpha < 0.2 ) { alpha = 0.1; } hud_array[i] FadeOverTime( time ); hud_array[i].alpha = alpha; } } hud_selector( x, y ) { level endon( "stop_createdynents" ); if( isdefined( level.hud_selector ) ) { level thread hud_selector_fade_out(); } level.menu_cursor.alpha = 0; level.hud_selector = set_hudelem( undefined, x - 10, y, 1 ); level.hud_selector SetShader( "white", 125, 20 ); level.hud_selector.color = ( 1, 1, 0.5 ); level.hud_selector.alpha = 0.5; level.hud_selector.sort = 10; } hud_selector_fade_out( time ) { level endon( "stop_createdynents" ); if( !isdefined( time ) ) { time = 0.25; } level.menu_cursor.alpha = 0.5; hud = level.hud_selector; level.hud_selector = undefined; hud FadeOverTime( time ); hud.alpha = 0; wait( time + 0.1 ); hud Destroy(); } selection_error( msg, x, y ) { level endon( "stop_createdynents" ); hud = set_hudelem( undefined, x - 10, y, 1 ); hud SetShader( "white", 110, 20 ); hud.color = ( 0.5, 0, 0 ); hud.alpha = 0.7; error_hud = set_hudelem( msg, x + 110, y, 1 ); error_hud.color = ( 1, 0, 0 ); hud FadeOverTime( 3 ); hud.alpha = 0; error_hud FadeOverTime( 3 ); error_hud.alpha = 0; wait( 3.1 ); hud Destroy(); error_hud Destroy(); } hud_font_scaler( mult ) { level endon( "stop_createdynents" ); self notify( "stop_fontscaler" ); self endon( "death" ); self endon( "stop_fontscaler" ); og_scale = self.og_scale; if( !isdefined( mult ) ) { mult = 1.5; } self.fontscale = og_scale * mult; dif = og_scale - self.fontscale; time = 1; dif /= time * 20; for( i = 0; i < time * 20; i++ ) { self.fontscale += dif; wait( 0.05 ); } } update_selected_object_position() { object = level.selected_object; if( isdefined( object ) ) { forward = AnglesToforward( level.debug_player GetPlayerAngles() ); vector = level.debug_player GetEye() + vector_scale( forward, 5000 ); trace = BulletTrace( level.debug_player GetEye(), vector, false, self ); if( trace["fraction"] != 1 ) { vector = trace["position"] + ( 0, 0, level.selected_object_z_offset ); if( vector != object.origin ) { object MoveTo( vector, 0.1 ); object waittill( "movedone" ); } } wait( 0.1 ); } } move_selected_object( with_trace ) { level endon( "stop_createdynents" ); self notify( "stop_move_selected_object" ); self endon( "stop_move_selected_object" ); self endon( "unlink_selected_object" ); self endon( "death" ); if( !isdefined( with_trace ) ) { with_trace = false; } while( true ) { forward = AnglesToforward( level.debug_player GetPlayerAngles() ); if( with_trace ) { vector = level.debug_player GetEye() + vector_scale( forward, 5000 ); trace = BulletTrace( level.debug_player GetEye(), vector, false, self ); if( trace["fraction"] == 1 ) { wait( 0.1 ); continue; } else { vector = trace["position"]; } vector = vector + ( 0, 0, level.selected_object_z_offset ); } else { vector = level.debug_player GetEye() + vector_scale( forward, level.selected_object_dist ); } if( vector != self.origin ) { self MoveTo( vector, 0.1 ); self waittill( "movedone" ); } else { wait( 0.1 ); } } } get_random_model() { count = level.groups[level.selected_group].size; return level.groups[level.selected_group][randomintrange( 0, count )]; } spray_model() { level.spray = []; if( isdefined( level.selected_object ) && !isdefined( level.selected_group ) ) { level.spray = []; level.spray["model"] = level.selected_object.model; level.selected_object Delete(); } else { if( isdefined( level.selected_group ) ) { level.spray = []; level.spray["model"] = get_random_model(); if( isdefined( level.selected_object ) ) { level.selected_object Delete(); level.selected_object = undefined; } } else { return "ERROR: Select Model or Group first!"; } } level.spray["rate"] = 0.25; level.spray["power"] = 1000; spray_buttons(); spray_hud(); level thread spray_trajectory(); while( 1 ) { level waittill( "spray_button_pressed", key ); if( key == "fire" ) { do_spray_model(); if( isdefined( level.selected_group ) ) { level.spray["model"] = get_random_model(); level.spray_hud["model"] SetText( level.spray["model"] ); level.spray_hud["model"] thread hud_font_scaler(); } wait( level.spray["rate"] - 0.1 ); } else if( key == "uparrow" || key == "dpad_up" ) { level.spray["power"] += 50; if( level.spray["power"] > 5000 ) { level.spray["power"] = 5000; } level.spray_hud["power"] SetText( level.spray["power"] ); level.spray_hud["power"] thread hud_font_scaler(); wait( 0.05 ); } else if( key == "downarrow" || key == "dpad_down" ) { level.spray["power"] -= 50; if( level.spray["power"] < 50 ) { level.spray["power"] = 50; } level.spray_hud["power"] SetText( level.spray["power"] ); level.spray_hud["power"] thread hud_font_scaler(); wait( 0.05 ); } else if( key == "leftarrow" || key == "dpad_left" ) { level.spray["rate"] -= 0.05; if( level.spray["rate"] < 0.25 ) { level.spray["rate"] = 0.25; } level.spray_hud["rate"] SetText( level.spray["rate"] ); level.spray_hud["rate"] thread hud_font_scaler(); wait( 0.05 ); } else if( key == "rightarrow" || key == "dpad_right" ) { level.spray["rate"] += 0.05; if( level.spray["rate"] > 1 ) { level.spray["rate"] = 1; } level.spray_hud["rate"] SetText( level.spray["rate"] ); level.spray_hud["rate"] thread hud_font_scaler(); wait( 0.05 ); } else if( key == "button_lshldr" || key == "button_rshldr" ) { if( isdefined( level.selected_group ) ) { level.spray["model"] = get_random_model(); level.spray_hud["model"] SetText( level.spray["model"] ); level.spray_hud["model"] thread hud_font_scaler(); wait( 0.05 ); } } else if( key == "end" || key == "button_b" ) { break; } } level notify( "stop_spray" ); remove_hud( "spray_hud" ); } do_spray_model() { forward = AnglesToForward( level.debug_player GetPlayerAngles() ); vector = level.debug_player GetEye() + vector_scale( forward, 48 ); object = Spawn( "script_model", vector ); object SetModel( level.spray["model"] ); velocity = vector_scale( forward, level.spray["power"] ); object PhysicsLaunch( object.origin, velocity ); object store_model( "dynent" ); } spray_trajectory() { level endon( "stop_createdynents" ); level endon( "stop_spray" ); segments = 10; time = 1.0; time_inc = time / segments; og_time_inc = time_inc; while( 1 ) { time_inc = og_time_inc; forward = AnglesToForward( level.debug_player GetPlayerAngles() ); velocity = vector_scale( forward, level.spray["power"] ); sub_vel = vector_scale( velocity, time_inc ); start_pos = level.debug_player GetEye() + vector_scale( forward, 48 );; gravity = GetDvarInt( #"bg_gravity" ); for( i = 1; i < segments + 1; i++ ) { pos = start_pos + vector_scale( sub_vel, i ); pos = pos - ( 0, 0, ( 0.5 * gravity * ( time_inc * time_inc ) ) ); print3d( pos, ".", ( 1, 1, 0 ) ); time_inc += og_time_inc; } wait( 0.05 ); } } spray_hud() { level.spray_hud = []; x = 0; y = 400; hud = new_hud( "spray_hud", undefined, x, y, 1 ); hud SetShader( "white", 145, 58 ); hud.alignX = "left"; hud.alignY = "top"; hud.sort = 10; hud.alpha = 0.6; hud.color = ( 0.0, 0.0, 0.5 ); hud = new_hud( "spray_hud", "Model:", 319, 385, 1.2 ); hud.alignX = "right"; level.spray_hud["model"] = new_hud( "spray_hud", level.spray["model"], 321, 385, 1.2 ); level.spray_hud["model"].alignX = "left"; hud = new_hud( "spray_hud", "Rate:", 319, 400, 1.2 ); hud.alignX = "right"; level.spray_hud["rate"] = new_hud( "spray_hud", level.spray["rate"], 321, 400, 1.2 ); level.spray_hud["rate"].alignX = "left"; hud = new_hud( "spray_hud", "Power:", 319, 415, 1.2 ); hud.alignX = "right"; level.spray_hud["power"] = new_hud( "spray_hud", level.spray["power"], 321, 415, 1.2 ); level.spray_hud["power"].alignX = "left"; new_hud( "spray_hud", "FIRE", x + 5, y + 10, 1 ); new_hud( "spray_hud", "LEFT/RIGHT", x + 5, y + 20, 1 ); new_hud( "spray_hud", "UP/DOWN", x + 5, y + 30, 1 ); if( isdefined( level.selected_group ) ) { new_hud( "spray_hud", "Bumpers", x + 5, y + 40, 1 ); new_hud( "spray_hud", "B", x + 5, y + 50, 1 ); } else { new_hud( "spray_hud", "B", x + 5, y + 40, 1 ); } new_hud( "spray_hud", "- Spray Object", x + 60, y + 10, 1 ); new_hud( "spray_hud", "- Inc/Dec Rate", x + 60, y + 20, 1 ); new_hud( "spray_hud", "- Inc/Dec Power", x + 60, y + 30, 1 ); if( isdefined( level.selected_group ) ) { new_hud( "spray_hud", "- Change model", x + 60, y + 40, 1 ); new_hud( "spray_hud", "- Quit", x + 60, y + 50, 1 ); } else { new_hud( "spray_hud", "- Quit", x + 60, y + 40, 1 ); } } spray_buttons() { clear_universal_buttons( "spray" ); add_universal_button( "spray", "dpad_up" ); add_universal_button( "spray", "dpad_down" ); add_universal_button( "spray", "dpad_left" ); add_universal_button( "spray", "dpad_right" ); add_universal_button( "spray", "button_b" ); add_universal_button( "spray", "button_lshldr" ); add_universal_button( "spray", "button_rshldr" ); level thread universal_input_loop( "spray", "stop_spray", true ); } add_universal_button( button_group, name ) { if( !isdefined( level.u_buttons[button_group] ) ) { level.u_buttons[button_group] = []; } if( check_for_dupes( level.u_buttons[button_group], name ) ) { level.u_buttons[button_group][level.u_buttons[button_group].size] = name; } } clear_universal_buttons( button_group ) { level.u_buttons[button_group] = []; } universal_input_loop( button_group, end_on, use_attackbutton, mod_button, no_mod_button ) { level endon( "stop_createdynents" ); level endon( end_on ); if( !isdefined( use_attackbutton ) ) { use_attackbutton = false; } notify_name = button_group + "_button_pressed"; buttons = level.u_buttons[button_group]; level.u_buttons_disable[button_group] = false; while( 1 ) { if( level.u_buttons_disable[button_group] ) { wait( 0.05 ); continue; } if( isdefined( mod_button ) && !level.debug_player ButtonPressed( mod_button ) ) { wait( 0.05 ); continue; } else if( isdefined( no_mod_button ) && level.debug_player ButtonPressed( no_mod_button ) ) { wait( 0.05 ); continue; } if( use_attackbutton && level.debug_player AttackButtonPressed() ) { level notify( notify_name, "fire" ); wait( 0.15 ); continue; } for( i = 0; i < buttons.size; i++ ) { if( level.debug_player ButtonPressed( buttons[i] ) ) { level notify( notify_name, buttons[i] ); wait( 0.15 ); break; } } wait( 0.05 ); } } disable_buttons( button_group ) { level.u_buttons_disable[button_group] = true; } enable_buttons( button_group ) { wait( 1 ); level.u_buttons_disable[button_group] = false; } select_dynent_group() { level.dyn_ent_selected_group = undefined; y = level.menu_sys["current_menu"].options[0].y; if( !isdefined( level.dynent_groups ) ) { return; } arrow_hud = set_hudelem( "-------->", 120, y, 1.3 ); selected = list_menu( level.dynent_groups, 180, y, 1.3, ::group_selected ); if( !isdefined( selected ) ) { level notify( "stop_select_group" ); } else { level.dyn_ent_selected_group = level.dynent_groups[selected]; } arrow_hud Destroy(); } group_selected( group_name ) { level.selected_group = group_name; } remove_hud( hud_name ) { if( !isdefined( level.hud_array[hud_name] ) ) { return; } huds = level.hud_array[hud_name]; for( i = 0; i < huds.size; i++ ) { destroy_hud( huds[i] ); } level.hud_array[hud_name] = undefined; } new_hud( hud_name, msg, x, y, scale ) { if( !isdefined( level.hud_array ) ) { level.hud_array = []; } if( !isdefined( level.hud_array[hud_name] ) ) { level.hud_array[hud_name] = []; } hud = set_hudelem( msg, x, y, scale ); level.hud_array[hud_name][level.hud_array[hud_name].size] = hud; return hud; } object_highlight( objects ) { level endon( "stop_createdynents" ); level endon( "stop_select_model" ); dot = 0.85; highlighted_object = undefined; forward = AnglesToForward( level.debug_player GetPlayerAngles() ); for( i = 0; i < objects.size; i++ ) { if( !isdefined( objects[i].select_scale ) ) { objects[i] select_icon_think(); } ent = objects[i]; difference = VectorNormalize( ent.origin - ( level.debug_player.origin + ( 0, 0, 55 ) ) ); newdot = VectorDot( forward, difference ); if( newdot < dot ) { continue; } dot = newdot; highlighted_object = ent; } if( isdefined( highlighted_object ) ) { highlighted_object.select_scale = 3; highlighted_object.select_color = level.selected_color; level.highlighted_object = highlighted_object; for( i = 0; i < objects.size; i++ ) { if( objects[i] == highlighted_object ) { continue; } objects[i].select_scale = 1; objects[i].select_color = level.unselected_color; } } } selected_delete( no_force_back ) { if( isdefined( level.selected_object ) ) { level.selected_object remove_from_all_objects(); level.selected_object remove_model( "dynent" ); level.selected_object remove_model( "destructible" ); level.selected_object remove_model( "miscmodel" ); level.selected_object notify( "unlink_selected_object" ); level.selected_object notify( "stop_move" ); level.selected_object notify( "stop_move_selected_object" ); level.selected_object Delete(); level.selected_object = undefined; if( !isdefined( no_force_back ) || !no_force_back ) { level thread force_menu_back(); } } } selected_back() { if( isdefined( level.selected_object ) ) { if( isdefined( level.selected_object.old_origin ) ) { level.selected_object notify( "unlink_selected_object" ); level.selected_object.origin = level.selected_object.old_origin; level thread force_menu_back(); level.selected_object = undefined; } else { selected_delete(); } } else { level thread force_menu_back(); } } selected_save_highlight( key ) { if( isdefined( level.highlighted_object ) ) { object = level.highlighted_object; if( isdefined( object.save_selected ) ) { object remove_highlighted(); object.save_selected = false; object notify( "stop_save_highlight" ); } else { object add_highlighted(); object.save_selected = true; object thread save_highlight_loop(); } wait( 0.1 ); } } save_highlight_loop() { level endon( "stop_createdynents" ); self endon( "stop_save_highlight" ); while( 1 ) { print3d( self.origin, "S", ( 0, 1, 0 ), 1 ); wait( 0.05 ); } } add_highlighted() { level.highlighted[level.highlighted.size] = self; } remove_highlighted() { level.highlighted = array_remove( level.highlighted, self ); } selected_models_save_thread( type ) { level endon( "stop_createdynents" ); level waittill( "disable selected_" + type + "_save_menu" ); for( i = 0; i < level.models[type].size; i++ ) { level.models[type][i] remove_save_stat(); } } selected_dynent_save() { level.highlighted = []; level thread selected_models_save_thread( "dynent" ); } selected_destructible_save() { level.highlighted = []; level thread selected_models_save_thread( "destructible" ); } selected_miscmodel_save() { level.highlighted = []; level thread selected_models_save_thread( "miscmodel" ); } remove_save_stat() { self notify( "stop_save_highlight" ); self.save_selected = false; } save_dynent_highlighted() { if( level.highlighted.size > 0 ) { return save_master( "Save Selected DynEnts?", "dynents_selected", level.highlighted, "dynent" ); } } save_destructible_highlighted() { if( level.highlighted.size > 0 ) { return save_master( "Save Selected Destructibles?", "detructibles_selected", level.highlighted, "destructible" ); } } save_miscmodel_highlighted() { if( level.highlighted.size > 0 ) { return save_master( "Save Selected Misc_Models?", "miscmodels_selected", level.highlighted, "miscmodel" ); } } setup_menu_buttons() { clear_universal_buttons( "menu" ); menu_cursor(); add_universal_button( "menu", "dpad_up" ); add_universal_button( "menu", "dpad_down" ); add_universal_button( "menu", "dpad_left" ); add_universal_button( "menu", "dpad_right" ); add_universal_button( "menu", "button_a" ); add_universal_button( "menu", "button_b" ); add_universal_button( "menu", "1" ); add_universal_button( "menu", "2" ); add_universal_button( "menu", "3" ); add_universal_button( "menu", "4" ); add_universal_button( "menu", "5" ); add_universal_button( "menu", "6" ); add_universal_button( "menu", "7" ); add_universal_button( "menu", "8" ); add_universal_button( "menu", "9" ); add_universal_button( "menu", "0" ); add_universal_button( "menu", "downarrow" ); add_universal_button( "menu", "uparrow" ); add_universal_button( "menu", "leftarrow" ); add_universal_button( "menu", "rightarrow" ); add_universal_button( "menu", "enter" ); add_universal_button( "menu", "end" ); add_universal_button( "menu", "backspace" ); level thread universal_input_loop( "menu", "never", undefined, undefined, "button_ltrig" ); } menu_cursor() { level.menu_cursor = set_hudelem( undefined, 0, 130, 1.3 ); level.menu_cursor SetShader( "white", 125, 20 ); level.menu_cursor.color = ( 1, 0.5, 0 ); level.menu_cursor.alpha = 0.5; level.menu_cursor.sort = 1; level.menu_cursor.current_pos = 0; } any_button_hit( button_hit, type ) { buttons = []; if( type == "numbers" ) { buttons[0] = "0"; buttons[1] = "1"; buttons[2] = "2"; buttons[3] = "3"; buttons[4] = "4"; buttons[5] = "5"; buttons[6] = "6"; buttons[7] = "7"; buttons[8] = "8"; buttons[9] = "9"; } else { buttons = level.buttons; } for( i = 0; i < buttons.size; i++ ) { if( button_hit == buttons[i] ) { return true; } } return false; } setup_xform_menu() { level.selected_object_z_offset = 0; level.selected_object_dist = 48; setup_xform_buttons(); level thread xform_input_handler(); level.xform_hud_active = 0; toggle_xform_hud(); } toggle_xform_hud() { level.xform_hud_active = !level.xform_hud_active; if( level.xform_hud_active ) { shader_width = 120; shader_height = 90; x = 640 - shader_width; y = 480 - shader_height - 25; hud = new_hud( "xform_hud", undefined, x, y, 1 ); hud SetShader( "white", shader_width, shader_height ); hud.alignX = "left"; hud.alignY = "top"; hud.sort = 10; hud.alpha = 0.6; hud.color = ( 0.0, 0.0, 0.5 ); new_hud( "xform_hud", "BUMPERS", x + 5, y + 10, 1 ); new_hud( "xform_hud", "Up / Down", x + 60, y + 10, 1 ); y += 3; new_hud( "xform_hud", "(HOLD LTrigger) +", x + 5, y + 20, 1 ); y += 3; new_hud( "xform_hud", "Y/A", x + 5, y + 30, 1 ); new_hud( "xform_hud", "X/B", x + 5, y + 40, 1 ); new_hud( "xform_hud", "BUMPERS", x + 5, y + 50, 1 ); new_hud( "xform_hud", "L3", x + 5, y + 60, 1 ); new_hud( "xform_hud", "- Pitch", x + 60, y + 30, 1 ); new_hud( "xform_hud", "- Yaw", x + 60, y + 40, 1 ); new_hud( "xform_hud", "- Roll", x + 60, y + 50, 1 ); new_hud( "xform_hud", "- Zero Out", x + 60, y + 60, 1 ); } else { remove_hud( "xform_hud" ); } } setup_xform_buttons() { clear_universal_buttons( "xform" ); add_universal_button( "xform", "button_a" ); add_universal_button( "xform", "button_b" ); add_universal_button( "xform", "button_x" ); add_universal_button( "xform", "button_y" ); add_universal_button( "xform", "button_lshldr" ); add_universal_button( "xform", "button_rshldr" ); add_universal_button( "xform", "button_lstick" ); level thread universal_input_loop( "xform", "never", true ); } xform_input_handler() { level endon( "stop_createdynents" ); rate = 2; while( 1 ) { level waittill( "xform_button_pressed", key ); object = level.selected_object; if( !isdefined( object ) ) object = level.highlighted_object; if( !level.debug_player ButtonPressed( "button_ltrig" ) ) { if( key == "button_rshldr" ) { level.selected_object_z_offset += 4; update_selected_object_position(); } else if( key == "button_lshldr" ) { level.selected_object_z_offset -= 4; update_selected_object_position(); } } else if( isdefined( object ) ) { if( key == "button_b" ) { object DevAddYaw( rate ); } else if( key == "button_x" ) { object DevAddYaw( rate * -1 ); } else if( key == "button_y" ) { object DevAddPitch( rate * -1 ); } else if( key == "button_a" ) { object DevAddPitch( rate ); } else if( key == "button_lshldr" ) { object DevAddRoll( rate * -1 ); } else if( key == "button_rshldr" ) { object DevAddRoll( rate ); } else if( key == "button_lstick" ) { object.angles = ( 0, 0, 0 ); } } wait( 0.1 ); } } place( type ) { if( isdefined( level.selected_object ) ) { level.selected_object notify( "unlink_selected_object" ); level notify( "stop_move" ); level.selected_object add_model( type ); level.selected_object = undefined; } } place_copy( type ) { if( isdefined( level.selected_object ) ) { level.selected_object notify( "unlink_selected_object" ); if( type == "destructible" ) { model_name = level.selected_object getdestructiblename(); } else { model_name = level.selected_object.model; } level.selected_object add_model( type ); angles = level.selected_object.angles; level.selected_object = undefined; with_trace = true; spawn_selected_object( model_name, true, type ); level.selected_object.angles = angles; } } place_dynent() { place( "dynent" ); } place_destructible() { place( "destructible" ); } place_miscmodel() { place( "miscmodel" ); } place_dynent_copy() { place_copy( "dynent" ); } place_destructible_copy() { place_copy( "destructible" ); } place_miscmodel_copy() { place_copy( "miscmodel" ); } select_dynent_from_list() { y = level.menu_sys["current_menu"].options[0].y; arrow_hud = set_hudelem( "-------->", 120, y, 1.3 ); list_menu( level.model_names["dynent"], 180, y, 1.3, ::spawn_dynent ); level.selected_group = undefined; arrow_hud Destroy(); } select_destructible_from_list() { y = level.menu_sys["current_menu"].options[0].y; arrow_hud = set_hudelem( "-------->", 120, y, 1.3 ); list_menu( level.model_names["destructible"], 180, y, 1.3, ::spawn_destructible ); level.selected_group = undefined; arrow_hud Destroy(); } select_miscmodel_from_list() { y = level.menu_sys["current_menu"].options[0].y; arrow_hud = set_hudelem( "-------->", 120, y, 1.3 ); list_menu( level.model_names["miscmodel"], 180, y, 1.3, ::spawn_miscmodel ); arrow_hud Destroy(); } spawn_selected_object( model_name, with_trace, type ) { if( isdefined( level.selected_object ) ) { level.selected_object Delete(); } forward = AnglesToforward( level.debug_player GetPlayerAngles() ); vector = level.debug_player GetEye() + vector_scale( forward, level.selected_object_dist ); if( isdefined( type ) && type == "destructible" ) { level.selected_object = CodeSpawn( "script_model", vector, 0, 0, 0, model_name ); } else { level.selected_object = Spawn( "script_model", vector ); level.selected_object SetModel( model_name ); } level.select_group = undefined; level.selected_object thread move_selected_object( with_trace ); } spawn_dynent( model_name ) { spawn_selected_object( model_name, true, "dynent" ); } spawn_miscmodel( model_name ) { spawn_selected_object( model_name, true, "miscmodel" ); } spawn_destructible( model_name ) { spawn_selected_object( model_name, true, "destructible" ); } move_model() { if( isdefined( level.highlighted_object ) ) { level.selected_object = level.highlighted_object; level.selected_object.old_origin = level.selected_object.origin; level.selected_object thread move_selected_object( true ); level thread move_model_thread(); } } move_model_thread() { level endon( "stop_createdynents" ); level waittill( "stop_move" ); level thread force_menu_back(); } copy_model( type ) { if( isdefined( level.highlighted_object ) ) { model_origin = level.highlighted_object.origin; if( type == "destructible" ) { model_name = level.highlighted_object getdestructiblename(); level.selected_object = CodeSpawn( "script_model", model_origin, 0, 0, 0, model_name ); } else { model_name = level.highlighted_object.model; level.selected_object = Spawn( "script_model", model_origin ); level.selected_object SetModel( model_name ); } level.selected_object.old_origin = level.selected_object.origin; level.selected_object thread move_selected_object( true ); level thread copy_thread(); } } copy_dynent() { copy_model( "dynent" ); } copy_destructible() { copy_model( "destructible" ); } copy_miscmodel() { copy_model( "miscmodel" ); } copy_thread() { level endon( "stop_createdynents" ); level waittill( "stop_move" ); level thread force_menu_back(); } select_dynents() { select( "dynent" ); } select_destructibles() { select( "destructible" ); } select_miscmodels() { select( "miscmodel" ); } select( type ) { if( level.models[type].size > 0 ) { level thread select_model_thread( type ); } } draw_selectables( objects ) { for( i = 0; i < objects.size; i++ ) { objects[i] thread select_icon_think(); } } select_icon_think() { level endon( "stop_createdynents" ); self endon( "death" ); self notify( "only_one_icon_think_thread" ); self endon( "only_one_icon_think_thread" ); level endon( "stop_select_model" ); if( !isdefined( self.select_scale ) ) { self.select_scale = 1; } self.select_color = level.unselected_color; while( 1 ) { print3d( self.origin, ".", self.select_color, 1, self.select_scale ); wait( 0.05 ); } } delete_model() { if( isdefined( level.highlighted_object ) ) { level.highlighted_object remove_from_all_objects(); level.highlighted_object remove_model( "dynent" ); level.highlighted_object remove_model( "destructible" ); level.highlighted_object remove_model( "miscmodel" ); level.highlighted_object Delete(); level.selected_object = undefined; } } select_model_thread( type ) { level endon( "stop_createdynents" ); selected_delete( true ); level.unselected_color = ( 1, 1, 1 ); level.selected_color = ( 1, 1, 0 ); draw_selectables( level.models[type] ); level thread select_main_thread( type ); level waittill( "disable " + type + "_select_menu" ); level notify( "stop_select_model" ); } select_main_thread( type ) { level endon( "stop_createdynents" ); level endon( "stop_select_model" ); level.highlighted_object = undefined; level.selected_object = undefined; while( 1 ) { if( !isdefined( level.selected_object ) ) { level thread object_highlight( level.models[type] ); } wait( 0.05 ); } } set_default_path() { if( !isdefined( level.path ) ) { level.path = "prop_man/" + level.script + "/"; } } store_model( type ) { self add_to_all_objects(); level.models[type] = array_add( level.models[type], self ); } remove_model( type ) { level.models[type] = array_remove( level.models[type], self ); } save_dynents() { if( level.models["dynent"].size > 0 ) { return save_master( "Save All DynEnts?", "dynents_all", level.models["dynent"], "dynent" ); } } save_destructibles() { if( level.models["destructible"].size > 0 ) { return save_master( "Save All Destructibles?", "destructibles_all", level.models["destructible"], "destructible" ); } } save_miscmodels() { selected_delete( true ); if( level.models["miscmodel"].size > 0 ) { return save_master( "Save All misc models?", "miscmodels_all", level.models["miscmodel"], "miscmodel" ); } } save_master( save_msg, filename, save_array, type ) { disable_buttons( "menu" ); disable_buttons( "rotate" ); disable_buttons( "prop" ); level.debug_player FreezeControls( true ); save_buttons(); filename = filename + ".map"; save_dialog( save_msg, filename ); yes_key = "button_x"; no_key = "button_b"; while( true ) { level waittill( "save_button_pressed", key ); if( key == yes_key ) { level thread save_selector( level.save_yes_hud.x, level.save_yes_hud.y, 40 ); check = save( save_array, filename, type ); if( isdefined( check ) && check != "failed" ) { level thread save_complete( check ); } else { level thread save_failed(); } break; } else if( key == no_key ) { save_selector( level.save_no_hud.x, level.save_no_hud.y, 40 ); break; } } level notify( "stop_savebutton_loop" ); remove_hud( "save" ); level.debug_player FreezeControls( false ); level thread enable_buttons( "menu" ); level thread enable_buttons( "rotate" ); level thread enable_buttons( "prop" ); } save_dialog( msg, filename ) { if( !isdefined( level.save_hud_x ) ) { level.save_hud_x = 0; } if( !isdefined( level.save_hud_y ) ) { level.save_hud_y = 300; } x = level.save_hud_x; y = level.save_hud_y; bg1_shader_width = 640; bg1_shader_height = 100; hud = new_hud( "save", undefined, ( x + ( bg1_shader_width * 0.5 ) ), y, 1 ); hud SetShader( "white", bg1_shader_width, bg1_shader_height ); hud.alignX = "center"; hud.alignY = "top"; hud.color = ( 0.55, 0.29, 0 ); hud.alpha = 0.85; hud.sort = 30; bg2_shader_width = 280; bg2_shader_height = 20; hud = new_hud( "save", msg, ( x + 10 ), ( y + 10 ), 1.3 ); hud.sort = 35; prefix = "Path: xenonOutput/scriptdata/"; hud = new_hud( "save", prefix + level.path + filename, ( x + 10 ), ( y + 30 ), 1.1 ); hud.sort = 35; yes_hud = "Yes [X]"; no_hud = "No [B]"; level.save_yes_hud = new_hud( "save", yes_hud, ( x + ( bg1_shader_width * 0.5 ) ) - 50, ( y + 90 ), 1.3 ); level.save_yes_hud.alignX = "center"; level.save_yes_hud.sort = 35; level.save_no_hud = new_hud( "save", no_hud, ( x + ( bg1_shader_width * 0.5 ) ) + 50, ( y + 90 ), 1.3 ); level.save_no_hud.alignX = "center"; level.save_no_hud.sort = 35; } destroy_hud( hud ) { if( isdefined( hud ) ) { hud Destroy(); } } save_complete( msg ) { hud = set_hudelem( "Save Successful", 320, 100, 1.5 ); hud.alignX = "center"; hud.color = ( 0, 1, 0 ); hud_msg = set_hudelem( msg, 320, 120, 1.3 ); hud_msg.alignX = "center"; hud_msg.color = ( 1, 1, 1 ); wait( 2 ); hud FadeOverTime( 3 ); hud.alpha = 0; hud_msg FadeOverTime( 3 ); hud_msg.alpha = 0; wait( 3 ); hud Destroy(); hud_msg Destroy(); } save_failed() { hud = set_hudelem( "Save Failed!", 320, 100, 1.5 ); hud.AlignX = "center"; hud.color = ( 1, 0, 0 ); wait( 1 ); hud FadeOverTime( 3 ); hud.alpha = 0; wait( 3 ); hud Destroy(); } save_selector( x, y, width ) { hud = set_hudelem( undefined, x, y, 1 ); hud.alignX = "center"; hud SetShader( "white", width, 20 ); hud.color = ( 1, 1, 0.5 ); hud.alpha = 0.5; hud.sort = 10; hud FadeOverTime( 0.25 ); hud.alpha = 0; wait( 0.35 ); hud Destroy(); } save( model_array, filename, type ) { } save_buttons() { clear_universal_buttons( "save" ); add_universal_button( "save", "button_x" ); add_universal_button( "save", "button_b" ); level thread universal_input_loop( "save", "stop_savebutton_loop" ); } quit() { if( level.xform_hud_active ) toggle_xform_hud(); level.hud_selector Destroy(); disable_menu( "current_menu" ); level.menu_sys = []; AddDebugCommand( "set propman 0" ); wait 1; AddDebugCommand( "noclip" ); wait 1; thread main(); level notify( "stop_createdynents" ); }