#include common_scripts\utility; #include maps\_utility; #include maps\_createFxMenu; createfx() { precacheModel( "fx_axis_createfx" ); PrecacheShader( "black" ); if( GetDvar( #"createfx_scaleid" ) == "" ) { SetDvar( "createfx_scaleid", "1" ); } if( GetDvar( #"createfx_drawaxis" ) == "" ) { SetDvar( "createfx_drawaxis", "1" ); } if( GetDvar( #"createfx_drawaxis_range" ) == "" ) { SetDvar( "createfx_drawaxis_range", "2000" ); } if( GetDvar( #"createfx_autosave_time" ) == "" ) { SetDvar( "createfx_autosave_time", "600" ); } flag_init( "createfx_saving" ); if ( !isdefined( level.createFX ) ) { level.createFX = []; } if ( isdefined( level.delete_when_in_createfx ) ) { level [[ level.delete_when_in_createfx ]](); } triggers = getentarray( "trigger_multiple", "classname" ); for (i=0;i 0) { newStr.color = (0,0,0); } newStrArray[newStrArray.size] = newStr; } level.createFxHudElements[i] = newStrArray; } newStrArray = []; for (p=0;p<2;p++) { newStr = newHudElem(); newStr.alignX = "center"; newStr.location = 0; newStr.foreground = 1; newStr.fontScale = 1.30; newStr.sort = 20 - p; newStr.alpha = 1; newStr.x = 320 + strOffsetX[p]; newStr.y = 80 + strOffsetY[p]; if (p > 0) { newStr.color = (0,0,0); } newStrArray[newStrArray.size] = newStr; } level.createFX_centerPrint = newStrArray; level.selectedMove_up = 0; level.selectedMove_forward = 0; level.selectedMove_right = 0; level.selectedRotate_pitch = 0; level.selectedRotate_roll = 0; level.selectedRotate_yaw = 0; level.selected_fx = []; level.selected_fx_ents = []; level.createfx_lockedList = []; level.createfx_lockedList["escape"] = true; level.createfx_lockedList["BUTTON_LSHLDR"] = true; level.createfx_lockedList["BUTTON_RSHLDR"] = true; level.createfx_lockedList["mouse1"] = true; level.createfx_lockedList["ctrl"] = true; level.createfx_draw_enabled = true; level.buttonIsHeld = []; axisMode = false; players = get_players(); lastPlayerOrigin = players[0].origin; colors = []; colors["loopfx"]["selected"] = (1.0, 1.0, 0.2); colors["loopfx"]["highlighted"] = (0.4, 0.95, 1.0); colors["loopfx"]["default"] = (0.3, 0.8, 1.0); colors["oneshotfx"]["selected"] = (1.0, 1.0, 0.2); colors["oneshotfx"]["highlighted"] = (0.4, 0.95, 1.0); colors["oneshotfx"]["default"] = (0.3, 0.8, 1.0); colors["exploder"]["selected"] = (1.0, 1.0, 0.2); colors["exploder"]["highlighted"] = (1.0, 0.2, 0.2); colors["exploder"]["default"] = (1.0, 0.1, 0.1); colors["rainfx"]["selected"] = (1.0, 1.0, 0.2); colors["rainfx"]["highlighted"] = (.95, 0.4, 0.95); colors["rainfx"]["default"] = (.78, 0.0, 0.73); colors["soundfx"]["selected"] = (1.0, 1.0, 0.2); colors["soundfx"]["highlighted"] = (.5, 1.0, 0.75); colors["soundfx"]["default"] = (.2, 0.9, 0.2); lastHighlightedEnt = undefined; level.fx_rotating = false; setMenu("none"); level.createfx_selecting = false; black = newHudElem(); black.x = -120; black.y = 200; black.foreground = 0; black setShader("black", 250, 160); black.alpha = 0; level.createfx_inputlocked = false; help_on_last_frame = 0; for ( i = 0; i < level.createFXent.size; i++ ) { ent = level.createFXent[i]; ent post_entity_creation_function(); } thread draw_distance(); lastSelectEntity = undefined; thread createfx_autosave(); for (;;) { players = get_players(); changedSelectedEnts = false; right = anglestoright (players[0] getplayerangles()); forward = anglestoforward (players[0] getplayerangles()); up = anglestoup (players[0] getplayerangles()); dot = 0.85; placeEnt_vector = vector_scale(forward, 750); level.createfxCursor = bullettrace(players[0] geteye(), players[0] geteye() + placeEnt_vector, false, undefined); highlightedEnt = undefined; level.buttonClick = []; level.button_is_kb = []; process_button_held_and_clicked(); ctrlHeld = button_is_held("ctrl", "BUTTON_LSHLDR" ); shiftHeld = button_is_held("shift"); functionHeld = button_is_held("f"); leftClick = button_is_clicked("mouse1", "BUTTON_A" ); leftHeld = button_is_held("mouse1", "BUTTON_A" ); consoleOn = false; create_fx_menu(); if ( button_is_clicked("BUTTON_X") || (shiftHeld && button_is_clicked("x")) ) { axisMode = !axisMode; } if ( button_is_clicked( "F2" ) || ( functionHeld && button_is_clicked("2") ) ) { toggle_createfx_drawing(); } if ( button_is_clicked( "F3" ) || ( functionHeld && button_is_clicked("3") ) ) { print_ambient_fx_inventory(); } if ( button_is_clicked( "F5" ) || ( functionHeld && button_is_clicked("5") ) ) { createfx_save(); } if (button_is_clicked("ins","i")) { insert_effect(); } if (button_is_clicked("del", "d")) { delete_pressed(); } if (button_is_clicked("end", "l")) { drop_selection_to_ground(); changedSelectedEnts = true; } if (button_is_clicked("escape")) { clear_settable_fx(); } if ( button_is_clicked("space") ) { set_off_exploders(); } if (button_is_clicked("tab", "BUTTON_RSHLDR")) { move_selection_to_cursor(); changedSelectedEnts = true; } if ( button_is_held( "q", "F1" ) ) { help_on_last_frame = 1; show_help(); wait (0.05); continue; } else if (help_on_last_frame == 1) { clear_fx_hudElements(); help_on_last_frame = 0; } if ( button_is_clicked( "BUTTON_LSTICK" ) ) { copy_ents(); } if ( button_is_clicked( "BUTTON_RSTICK" ) ) { paste_ents(); } if (ctrlHeld) { if (button_is_clicked("c")) { copy_ents(); } if (button_is_clicked("v")) { paste_ents(); } } if (isdefined(level.selected_fx_option_index)) menu_fx_option_set(); if ( button_is_held( "BUTTON_RTRIG" ) && button_is_held( "BUTTON_LTRIG" )) { move_player_around_map_fast(); wait (0.25); continue; } for ( i = 0; i < level.createFXent.size; i++ ) { ent = level.createFXent[i]; difference = vectornormalize(ent.v["origin"] - (players[0].origin + (0,0,55))); newdot = vectordot(forward, difference); if (newdot < dot) { continue; } dot = newdot; highlightedEnt = ent; } level.fx_highLightedEnt = highLightedEnt; if (isdefined(highLightedEnt)) { if (isdefined(lastHighlightedEnt)) { if (lastHighlightedEnt != highlightedEnt) { if (!ent_is_selected(lastHighlightedEnt)) { lastHighlightedEnt thread entity_highlight_disable(); } if (!ent_is_selected(highlightedEnt)) { highlightedEnt thread entity_highlight_enable(); } } } else { if (!ent_is_selected(highlightedEnt)) { highlightedEnt thread entity_highlight_enable(); } } } manipulate_createfx_ents( highlightedEnt, leftClick, leftHeld, ctrlHeld, colors, right ); if (axisMode && level.selected_fx_ents.size > 0) { thread process_fx_rotater(); if ( button_is_clicked( "enter", "r" ) ) { reset_axis_of_selected_ents(); } if ( button_is_clicked( "v" ) ) { copy_angles_of_selected_ents(); } for ( i=0; i < level.selected_fx_ents.size; i++) { level.selected_fx_ents[i] draw_axis(); } if ( level.selectedRotate_pitch != 0 || level.selectedRotate_yaw != 0 || level.selectedRotate_roll != 0 ) { changedSelectedEnts = true; } wait (0.05); } else { stop_drawing_axis_models(); selectedMove_vector = get_selected_move_vector(); for ( i=0; i < level.selected_fx_ents.size; i++) { ent = level.selected_fx_ents[i]; if (isdefined(ent.model)) { continue; } ent.v["origin"] = ent.v["origin"] + selectedMove_vector; } if ( distance( (0,0,0), selectedMove_vector) > 0 ) { changedSelectedEnts = true; } wait(0.05); } if ( changedSelectedEnts ) { update_selected_entities(); } if (distance(lastPlayerOrigin, players[0].origin) > 64) { setdvar("createfx_playerpos_x", players[0].origin[0]); setdvar("createfx_playerpos_y", players[0].origin[1]); setdvar("createfx_playerpos_z", players[0].origin[2]); lastPlayerOrigin = players[0].origin; } lastHighlightedEnt = highlightedEnt; if ( last_selected_entity_has_changed ( lastSelectEntity )) { level.effect_list_offset = 0; clear_settable_fx(); setmenu("none"); } if (level.selected_fx_ents.size) { lastSelectEntity = level.selected_fx_ents[level.selected_fx_ents.size-1]; } else { lastSelectEntity = undefined; } } } toggle_createfx_drawing() { level.createfx_draw_enabled = !level.createfx_draw_enabled; } manipulate_createfx_ents( highlightedEnt, leftClick, leftHeld, ctrlHeld, colors, right ) { if ( !level.createfx_draw_enabled ) { return; } for ( i = 0; i < level.createFXent.size; i++ ) { ent = level.createFXent[i]; if ( !ent.drawn ) { continue; } scale = GetDvarFloat( #"createfx_scaleid" ); if ( isdefined( highlightedEnt ) && (ent == highlightedEnt) ) { if ( !entities_are_selected() ) { display_fx_info( ent ); } if ( leftClick ) { entWasSelected = index_is_selected( i ); level.createfx_selecting = !entWasSelected; if ( !ctrlHeld ) { selectedSize = level.selected_fx_ents.size; clear_entity_selection(); if ( entWasSelected && selectedSize == 1 ) { select_entity( i, ent ); } } toggle_entity_selection( i, ent ); } else if ( leftHeld ) { if ( ctrlHeld ) { if ( level.createfx_selecting ) { select_entity( i, ent); } if ( !level.createfx_selecting ) { deselect_entity( i, ent); } } } colorIndex = "highlighted"; if ( index_is_selected( i ) ) { colorIndex = "selected"; } print3d( ent.v["origin"], ".", colors[ ent.v[ "type" ] ][ colorIndex ], 1, scale ); if ( ent.textalpha > 0 ) { printRight = vector_scale( right, ent.v[ "fxid" ].size * -2.93 * scale ); print3d( ent.v[ "origin" ] + printRight + (0,0,15), ent.v[ "fxid" ], colors[ ent.v[ "type" ] ][ colorIndex ], ent.textalpha, scale ); } } else { colorIndex = "default"; if ( index_is_selected( i ) ) { colorIndex = "selected"; } print3d( ent.v[ "origin" ], ".", colors[ ent.v[ "type" ] ][ colorIndex ], 1, scale ); if ( ent.textalpha > 0 ) { printRight = vector_scale(right, ent.v["fxid"].size * -2.93 ); print3d( ent.v[ "origin" ] + printRight + (0,0,15), ent.v[ "fxid" ], colors[ ent.v[ "type" ] ][ colorIndex ], ent.textalpha, scale ); } } } } clear_settable_fx() { level.createfx_inputlocked = false; setdvar("fx", "nil"); level.selected_fx_option_index = undefined; reset_fx_hud_colors(); } reset_fx_hud_colors() { for ( i=0;i range * range ) { if( IsDefined( axis_model ) ) { axis_model Delete(); level.draw_axis_models = array_removeUndefined( level.draw_axis_models ); } } else { if( !IsDefined( axis_model ) ) { axis_model = spawn_axis_model( axis_parent.v["origin"], axis_parent.v["angles"] ); axis_parent.draw_axis_model = axis_model; level.draw_axis_models[level.draw_axis_models.size] = axis_model; } } axis_model.origin = axis_parent.v["origin"]; axis_model.angles = axis_parent.v["angles"]; wait( 0.05 ); } if( IsDefined( axis_model ) ) { axis_model Delete(); } } stop_drawing_axis_models() { if( IsDefined( level.draw_axis_models ) ) { for( i = 0; i < level.draw_axis_models.size; i++ ) { if( IsDefined( level.draw_axis_models[i] ) ) { level.draw_axis_models[i] Delete(); } } level.draw_axis_models = array_removeUndefined( level.draw_axis_models ); } } clear_fx_hudElements() { level.clearTextMarker clearAllTextAfterHudElem(); for (i=0;i 0) { level.selectedMove_forward = 0; } level.selectedMove_forward = level.selectedMove_forward - rate; } else { level.selectedMove_forward = 0; } if (buttonDown("kp_rightarrow", "DPAD_RIGHT")) { if (level.selectedMove_right < 0) { level.selectedMove_right = 0; } level.selectedMove_right = level.selectedMove_right + rate; } else if (buttonDown("kp_leftarrow", "DPAD_LEFT")) { if (level.selectedMove_right > 0) { level.selectedMove_right = 0; } level.selectedMove_right = level.selectedMove_right - rate; } else { level.selectedMove_right = 0; } if (buttonDown("BUTTON_Y")) { if (level.selectedMove_up < 0) { level.selectedMove_up = 0; } level.selectedMove_up = level.selectedMove_up + rate; } else if (buttonDown("BUTTON_B")) { if (level.selectedMove_up > 0) { level.selectedMove_up = 0; } level.selectedMove_up = level.selectedMove_up - rate; } else { level.selectedMove_up = 0; } vector = (0,0,0); vector += vector_scale(forward, level.selectedMove_forward); vector += vector_scale(right, level.selectedMove_right); vector += vector_scale(up, level.selectedMove_up); return vector; } process_button_held_and_clicked() { add_button("mouse1"); add_kb_button("shift"); add_kb_button("ctrl"); add_button("BUTTON_RSHLDR"); add_button("BUTTON_LSHLDR"); add_button("BUTTON_RSTICK"); add_button("BUTTON_LSTICK"); add_button("BUTTON_A"); add_button("BUTTON_B"); add_button("BUTTON_X"); add_button("BUTTON_Y"); add_button("DPAD_UP"); add_button("DPAD_LEFT"); add_button("DPAD_RIGHT"); add_button("DPAD_DOWN"); add_kb_button("escape"); add_button("BUTTON_RTRIG"); add_button("BUTTON_LTRIG"); add_kb_button("a"); add_button("F1"); add_button("F5"); add_button("F2"); add_kb_button("c"); add_kb_button("d"); add_kb_button("f"); add_kb_button("h"); add_kb_button("i"); add_kb_button("k"); add_kb_button("l"); add_kb_button("m"); add_kb_button("p"); add_kb_button("q"); add_kb_button("r"); add_kb_button("x"); add_button("del"); add_kb_button("end"); add_kb_button("tab"); add_kb_button("ins"); add_kb_button("add"); add_kb_button("space"); add_kb_button("enter"); add_kb_button("leftarrow"); add_kb_button("rightarrow"); add_kb_button("v"); add_kb_button("1"); add_kb_button("2"); add_kb_button("3"); add_kb_button("4"); add_kb_button("5"); add_kb_button("6"); add_kb_button("7"); add_kb_button("8"); add_kb_button("9"); add_kb_button("0"); add_kb_button("~"); } locked( name ) { if ( isdefined(level.createfx_lockedList[name]) ) { return false; } return kb_locked( name ); } kb_locked( name ) { return level.createfx_inputlocked && isdefined( level.button_is_kb[ name ] ); } add_button( name ) { players = get_players(); if ( locked( name ) ) { return; } if (!isdefined(level.buttonIsHeld[name])) { if (players[0] buttonPressed(name)) { level.buttonIsHeld[ name ] = true; level.buttonClick[ name ] = true; } } else { if (!players[0] buttonPressed(name)) { level.buttonIsHeld[name] = undefined; } } } add_kb_button( name ) { level.button_is_kb[ name ] = true; add_button( name ); } set_anglemod_move_vector() { rate = 2; if (buttonDown("kp_uparrow", "DPAD_UP")) { if (level.selectedRotate_pitch < 0) { level.selectedRotate_pitch = 0; } level.selectedRotate_pitch = level.selectedRotate_pitch + rate; } else if (buttonDown("kp_downarrow", "DPAD_DOWN")) { if (level.selectedRotate_pitch > 0) { level.selectedRotate_pitch = 0; } level.selectedRotate_pitch = level.selectedRotate_pitch - rate; } else { level.selectedRotate_pitch = 0; } if (buttonDown("kp_leftarrow", "DPAD_LEFT")) { if (level.selectedRotate_yaw < 0) { level.selectedRotate_yaw = 0; } level.selectedRotate_yaw = level.selectedRotate_yaw + rate; } else if (buttonDown("kp_rightarrow", "DPAD_RIGHT")) { if (level.selectedRotate_yaw > 0) { level.selectedRotate_yaw = 0; } level.selectedRotate_yaw = level.selectedRotate_yaw - rate; } else { level.selectedRotate_yaw = 0; } if (buttonDown("BUTTON_Y")) { if (level.selectedRotate_roll < 0) { level.selectedRotate_roll = 0; } level.selectedRotate_roll = level.selectedRotate_roll + rate; } else if (buttonDown("BUTTON_B")) { if (level.selectedRotate_roll > 0) { level.selectedRotate_roll = 0; } level.selectedRotate_roll = level.selectedRotate_roll - rate; } else { level.selectedRotate_roll = 0; } } cfxprintln(file,string) { if(file == -1) { return; } fprintln(file,string); } generate_client_fx_log( autosave ) { } generate_fx_log( autosave ) { } print_fx_options( ent, tab, file, autosave ) { for ( i=0; i 1) { break; } wait (0.05); } self.textalpha = 1; } get_center_of_array( array ) { center = (0,0,0); for ( i=0; i < array.size; i++) { center = (center[0] + array[i].v["origin"][0], center[1] + array[i].v["origin"][1], center[2] + array[i].v["origin"][2]); } return (center[0] / array.size, center[1] / array.size, center[2] / array.size); } rotation_is_occuring() { if ( level.selectedRotate_roll != 0 ) { return true; } if ( level.selectedRotate_pitch != 0 ) { return true; } return level.selectedRotate_yaw != 0; } process_fx_rotater() { if ( level.fx_rotating ) { return; } set_anglemod_move_vector(); if ( !rotation_is_occuring() ) { return; } level.fx_rotating = true; if ( level.selected_fx_ents.size > 1 ) { center = get_center_of_array(level.selected_fx_ents); org = spawn("script_origin", center); org.v["angles"] = level.selected_fx_ents[0].v["angles"]; org.v["origin"] = center; rotater = []; for ( i=0; i < level.selected_fx_ents.size; i++) { rotater[i] = spawn("script_origin", level.selected_fx_ents[i].v["origin"]); rotater[i].angles = level.selected_fx_ents[i].v["angles"]; rotater[i] linkto (org); } rotate_over_time(org, rotater); org delete(); for ( i=0; i < rotater.size; i++) { rotater[i] delete(); } } else if ( level.selected_fx_ents.size == 1 ) { ent = level.selected_fx_ents[ 0 ]; rotater = spawn( "script_origin", (0,0,0) ); rotater.angles = ent.v[ "angles" ]; if (level.selectedRotate_pitch != 0) { rotater devAddPitch(level.selectedRotate_pitch); } else if (level.selectedRotate_yaw != 0) { rotater devAddYaw(level.selectedRotate_yaw); } else { rotater devAddRoll(level.selectedRotate_roll); } ent.v[ "angles" ] = rotater.angles; rotater delete(); wait( 0.05 ); } level.fx_rotating = false; } rotate_over_time ( org, rotater ) { level endon ("new_ent_selection"); timer = 0.1; for (p=0;p 100 ) { count = 0; wait (0.05); } } if ( level.createFXent.size == 0 ) { wait (0.05); } } } createfx_save(autosave) { old_time = GetTime(); if ( isdefined( autosave ) ) { savemode = "AUTOSAVE"; } else { savemode = "USER SAVE"; } println( "\n^3#### CREATEFX " + savemode + " BEGIN ####" ); file_error = generate_fx_log(autosave); if ( file_error ) { println( "^3#### CREATEFX " + savemode + " CANCELLED - Initiating autosave ####" ); println( "^5#### CREATEFX AUTOSAVE BEGIN ####" ); file_error = generate_fx_log(true); if ( file_error ) { } else { println( "^5#### CREATEFX AUTOSAVE END ####" ); } } else { if (level.clientscripts && !isdefined( autosave )) { file_error = generate_client_fx_log(); if ( file_error ) { println( "^3#### CREATEFX " + savemode + " CANCELLED ####" ); return; } } println( "^3#### CREATEFX " + savemode + " END (Time: " + ( GetTime() - old_time ) * 0.001 + " seconds)####" ); } } createfx_autosave() { for ( ;; ) { flag_waitopen( "createfx_saving" ); wait_time = GetDvarInt( #"createfx_autosave_time" ); if( wait_time < 10 || IsString( wait_time ) ) { wait_time = 120; } wait( wait_time ); if( !flag( "createfx_saving" ) ) { createfx_save(true); } } } move_player_around_map_fast() { player = get_players()[0]; direction = player getPlayerAngles(); direction_vec = anglesToForward( direction ); eye = player getEye(); trace = bullettrace( eye, eye + vector_scale( direction_vec , 8000 ), 0, undefined ); dist = distance (eye, trace["position"]); position = eye + vector_scale( direction_vec , (dist - 64) ); player setorigin(position); } print_ambient_fx_inventory() { fx_list = get_level_ambient_fx(); ent_list = []; fx_list_count = []; println("\n\n^2INVENTORY OF AMBIENT EFFECTS: "); for (i=0; i < level.createFXent.size; i++) { ent_list[i] = level.createFXent[i].v["fxid"]; } for (i=0; i < fx_list.size; i++) { count = 0; for (j=0; j < ent_list.size; j++) { if ( fx_list[i] == ent_list[j] ) { count++; ent_list[j] = ""; } } fx_list_count[i] = count; } for ( i = 0; i < fx_list_count.size-1; i++ ) { for ( j = i+1; j < fx_list_count.size; j++ ) { if ( fx_list_count[j] < fx_list_count[i] ) { temp_count = fx_list_count[i]; temp_id = fx_list[i]; fx_list_count[i] = fx_list_count[j]; fx_list[i] = fx_list[j]; fx_list_count[j] = temp_count; fx_list[j] = temp_id; } } } for ( i = 0; i < fx_list_count.size; i++ ) { switch (fx_list_count[i]) { case 0: print("^1"); break; case 1: print("^3"); break; default: break; } print(fx_list_count[i] + "\t" + fx_list[i] + "\n"); } print("\n"); }