iw6-scripts/common_scripts/_createfx.gsc
2024-02-13 13:20:49 +01:00

2233 lines
54 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
createeffect( var_0, var_1 )
{
var_2 = spawnstruct();
if ( !isdefined( level.createfxent ) )
level.createfxent = [];
level.createfxent[level.createfxent.size] = var_2;
var_2.v = [];
var_2.v["type"] = var_0;
var_2.v["fxid"] = var_1;
var_2.v["angles"] = ( 0, 0, 0 );
var_2.v["origin"] = ( 0, 0, 0 );
var_2.drawn = 1;
if ( isdefined( var_1 ) && isdefined( level.createfxbyfxid ) )
{
var_3 = level.createfxbyfxid[var_1];
if ( !isdefined( var_3 ) )
var_3 = [];
var_3[var_3.size] = var_2;
level.createfxbyfxid[var_1] = var_3;
}
return var_2;
}
getloopeffectdelaydefault()
{
return 0.5;
}
getoneshoteffectdelaydefault()
{
return -15;
}
getexploderdelaydefault()
{
return 0;
}
getintervalsounddelaymindefault()
{
return 0.75;
}
getintervalsounddelaymaxdefault()
{
return 2;
}
createloopsound()
{
var_0 = spawnstruct();
if ( !isdefined( level.createfxent ) )
level.createfxent = [];
level.createfxent[level.createfxent.size] = var_0;
var_0.v = [];
var_0.v["type"] = "soundfx";
var_0.v["fxid"] = "No FX";
var_0.v["soundalias"] = "nil";
var_0.v["angles"] = ( 0, 0, 0 );
var_0.v["origin"] = ( 0, 0, 0 );
var_0.v["server_culled"] = 1;
if ( getdvar( "serverCulledSounds" ) != "1" )
var_0.v["server_culled"] = 0;
var_0.drawn = 1;
return var_0;
}
createintervalsound()
{
var_0 = createloopsound();
var_0.v["type"] = "soundfx_interval";
var_0.v["delay_min"] = getintervalsounddelaymindefault();
var_0.v["delay_max"] = getintervalsounddelaymaxdefault();
return var_0;
}
createnewexploder()
{
var_0 = spawnstruct();
if ( !isdefined( level.createfxent ) )
level.createfxent = [];
level.createfxent[level.createfxent.size] = var_0;
var_0.v = [];
var_0.v["type"] = "exploder";
var_0.v["fxid"] = "No FX";
var_0.v["soundalias"] = "nil";
var_0.v["loopsound"] = "nil";
var_0.v["angles"] = ( 0, 0, 0 );
var_0.v["origin"] = ( 0, 0, 0 );
var_0.v["exploder"] = 1;
var_0.v["flag"] = "nil";
var_0.v["exploder_type"] = "normal";
var_0.drawn = 1;
return var_0;
}
createexploderex( var_0, var_1 )
{
var_2 = common_scripts\utility::createexploder( var_0 );
var_2.v["exploder"] = var_1;
return var_2;
}
createreactiveent()
{
var_0 = spawnstruct();
level.createfxent[level.createfxent.size] = var_0;
var_0.v = [];
var_0.v["origin"] = ( 0, 0, 0 );
var_0.v["reactive_radius"] = 200;
var_0.v["fxid"] = "No FX";
var_0.v["type"] = "reactive_fx";
var_0.v["soundalias"] = "nil";
return var_0;
}
set_origin_and_angles( var_0, var_1 )
{
if ( isdefined( level.createfx_offset ) )
var_0 = var_0 + level.createfx_offset;
self.v["origin"] = var_0;
self.v["angles"] = var_1;
}
set_forward_and_up_vectors()
{
self.v["up"] = anglestoup( self.v["angles"] );
self.v["forward"] = anglestoforward( self.v["angles"] );
}
createfx_common()
{
precacheshader( "black" );
level._createfx = spawnstruct();
level._createfx.grenade = spawn( "script_origin", ( 0, 0, 0 ) );
level._createfx.grenade.fx = loadfx( "fx/explosions/grenadeexp_default" );
level._createfx.grenade.sound = "grenade_explode_default";
level._createfx.grenade.radius = 256;
if ( level.mp_createfx )
hack_start( "painter_mp" );
else
hack_start( "painter" );
common_scripts\utility::flag_init( "createfx_saving" );
common_scripts\utility::flag_init( "createfx_started" );
if ( !isdefined( level.createfx ) )
level.createfx = [];
level.createfx_loopcounter = 0;
level notify( "createfx_common_done" );
}
init_level_variables()
{
level._createfx.selectedmove_up = 0;
level._createfx.selectedmove_forward = 0;
level._createfx.selectedmove_right = 0;
level._createfx.selectedrotate_pitch = 0;
level._createfx.selectedrotate_roll = 0;
level._createfx.selectedrotate_yaw = 0;
level._createfx.selected_fx = [];
level._createfx.selected_fx_ents = [];
level._createfx.rate = 1;
level._createfx.snap2normal = 0;
level._createfx.axismode = 0;
level._createfx.select_by_name = 0;
level._createfx.player_speed = getdvarfloat( "g_speed" );
set_player_speed_hud();
}
init_locked_list()
{
level._createfx.lockedlist = [];
level._createfx.lockedlist["escape"] = 1;
level._createfx.lockedlist["BUTTON_LSHLDR"] = 1;
level._createfx.lockedlist["BUTTON_RSHLDR"] = 1;
level._createfx.lockedlist["mouse1"] = 1;
level._createfx.lockedlist["ctrl"] = 1;
}
init_colors()
{
var_0 = [];
var_0["loopfx"]["selected"] = ( 1, 1, 0.2 );
var_0["loopfx"]["highlighted"] = ( 0.4, 0.95, 1 );
var_0["loopfx"]["default"] = ( 0.3, 0.8, 1 );
var_0["oneshotfx"]["selected"] = ( 1, 1, 0.2 );
var_0["oneshotfx"]["highlighted"] = ( 0.4, 0.95, 1 );
var_0["oneshotfx"]["default"] = ( 0.3, 0.8, 1 );
var_0["exploder"]["selected"] = ( 1, 1, 0.2 );
var_0["exploder"]["highlighted"] = ( 1, 0.2, 0.2 );
var_0["exploder"]["default"] = ( 1, 0.1, 0.1 );
var_0["rainfx"]["selected"] = ( 1, 1, 0.2 );
var_0["rainfx"]["highlighted"] = ( 0.95, 0.4, 0.95 );
var_0["rainfx"]["default"] = ( 0.78, 0, 0.73 );
var_0["soundfx"]["selected"] = ( 1, 1, 0.2 );
var_0["soundfx"]["highlighted"] = ( 0.5, 1, 0.75 );
var_0["soundfx"]["default"] = ( 0.2, 0.9, 0.2 );
var_0["soundfx_interval"]["selected"] = ( 1, 1, 0.2 );
var_0["soundfx_interval"]["highlighted"] = ( 0.5, 1, 0.75 );
var_0["soundfx_interval"]["default"] = ( 0.2, 0.9, 0.2 );
var_0["reactive_fx"]["selected"] = ( 1, 1, 0.2 );
var_0["reactive_fx"]["highlighted"] = ( 0.5, 1, 0.75 );
var_0["reactive_fx"]["default"] = ( 0.2, 0.9, 0.2 );
level._createfx.colors = var_0;
}
createfxlogic()
{
waittillframeend;
wait 0.05;
if ( !isdefined( level._effect ) )
level._effect = [];
if ( getdvar( "createfx_map" ) == "" )
{
}
else if ( getdvar( "createfx_map" ) == common_scripts\utility::get_template_level() )
[[ level.func_position_player ]]();
init_crosshair();
common_scripts\_createfxmenu::init_menu();
init_huds();
init_tool_hud();
init_crosshair();
init_level_variables();
init_locked_list();
init_colors();
if ( getdvar( "createfx_use_f4" ) == "" )
{
}
if ( getdvar( "createfx_no_autosave" ) == "" )
{
}
level.createfx_draw_enabled = 1;
level.last_displayed_ent = undefined;
level.buttonisheld = [];
var_0 = ( 0, 0, 0 );
common_scripts\utility::flag_set( "createfx_started" );
if ( !level.mp_createfx )
var_0 = level.player.origin;
var_1 = undefined;
level.fx_rotating = 0;
common_scripts\_createfxmenu::setmenu( "none" );
level.createfx_selecting = 0;
var_2 = newhudelem();
var_2.x = -120;
var_2.y = 200;
var_2.foreground = 0;
var_2 setshader( "black", 250, 160 );
var_2.alpha = 0;
level.createfx_inputlocked = 0;
foreach ( var_4 in level.createfxent )
var_4 post_entity_creation_function();
thread draw_distance();
var_6 = undefined;
thread createfx_autosave();
for (;;)
{
var_7 = 0;
var_8 = anglestoright( level.player getplayerangles() );
var_9 = anglestoforward( level.player getplayerangles() );
var_10 = anglestoup( level.player getplayerangles() );
var_11 = 0.85;
var_12 = var_9 * 750;
level.createfxcursor = bullettrace( level.player geteye(), level.player geteye() + var_12, 0, undefined );
var_13 = undefined;
level.buttonclick = [];
level.button_is_kb = [];
process_button_held_and_clicked();
var_14 = button_is_held( "ctrl", "BUTTON_LSHLDR" );
var_15 = button_is_clicked( "mouse1", "BUTTON_A" );
var_16 = button_is_held( "mouse1", "BUTTON_A" );
common_scripts\_createfxmenu::create_fx_menu();
var_17 = "F5";
if ( getdvarint( "createfx_use_f4" ) )
var_17 = "F4";
if ( button_is_clicked( var_17 ) )
{
}
if ( getdvarint( "scr_createfx_dump" ) )
generate_fx_log();
if ( button_is_clicked( "F2" ) )
toggle_createfx_drawing();
if ( button_is_clicked( "ins" ) )
insert_effect();
if ( button_is_clicked( "del" ) )
delete_pressed();
if ( button_is_clicked( "escape" ) )
clear_settable_fx();
if ( button_is_clicked( "space" ) )
set_off_exploders();
if ( button_is_clicked( "u" ) )
select_by_name_list();
modify_player_speed();
if ( !var_14 && button_is_clicked( "g" ) )
{
select_all_exploders_of_currently_selected( "exploder" );
select_all_exploders_of_currently_selected( "flag" );
}
if ( button_is_held( "h", "F1" ) )
{
show_help();
wait 0.05;
continue;
}
if ( button_is_clicked( "BUTTON_LSTICK" ) )
copy_ents();
if ( button_is_clicked( "BUTTON_RSTICK" ) )
paste_ents();
if ( var_14 )
{
if ( button_is_clicked( "c" ) )
copy_ents();
if ( button_is_clicked( "v" ) )
paste_ents();
if ( button_is_clicked( "g" ) )
spawn_grenade();
}
if ( isdefined( level._createfx.selected_fx_option_index ) )
common_scripts\_createfxmenu::menu_fx_option_set();
for ( var_18 = 0; var_18 < level.createfxent.size; var_18++ )
{
var_4 = level.createfxent[var_18];
var_19 = vectornormalize( var_4.v["origin"] - ( level.player.origin + ( 0, 0, 55 ) ) );
var_20 = vectordot( var_9, var_19 );
if ( var_20 < var_11 )
continue;
var_11 = var_20;
var_13 = var_4;
}
level.fx_highlightedent = var_13;
if ( isdefined( var_13 ) )
{
if ( isdefined( var_1 ) )
{
if ( var_1 != var_13 )
{
if ( !ent_is_selected( var_1 ) )
var_1 thread entity_highlight_disable();
if ( !ent_is_selected( var_13 ) )
var_13 thread entity_highlight_enable();
}
}
else if ( !ent_is_selected( var_13 ) )
var_13 thread entity_highlight_enable();
}
manipulate_createfx_ents( var_13, var_15, var_16, var_14, var_8 );
var_7 = handle_selected_ents( var_7 );
wait 0.05;
if ( var_7 )
update_selected_entities();
if ( !level.mp_createfx )
var_0 = [[ level.func_position_player_get ]]( var_0 );
var_1 = var_13;
if ( last_selected_entity_has_changed( var_6 ) )
{
level.effect_list_offset = 0;
clear_settable_fx();
common_scripts\_createfxmenu::setmenu( "none" );
}
if ( level._createfx.selected_fx_ents.size )
{
var_6 = level._createfx.selected_fx_ents[level._createfx.selected_fx_ents.size - 1];
continue;
}
var_6 = undefined;
}
}
modify_player_speed()
{
var_0 = 0;
var_1 = button_is_held( "ctrl" );
if ( button_is_held( "." ) )
{
if ( var_1 )
{
if ( level._createfx.player_speed < 190 )
level._createfx.player_speed = 190;
else
level._createfx.player_speed = level._createfx.player_speed + 10;
}
else
level._createfx.player_speed = level._createfx.player_speed + 5;
var_0 = 1;
}
else if ( button_is_held( "," ) )
{
if ( var_1 )
{
if ( level._createfx.player_speed > 190 )
level._createfx.player_speed = 190;
else
level._createfx.player_speed = level._createfx.player_speed - 10;
}
else
level._createfx.player_speed = level._createfx.player_speed - 5;
var_0 = 1;
}
if ( var_0 )
{
level._createfx.player_speed = clamp( level._createfx.player_speed, 5, 500 );
[[ level.func_player_speed ]]();
set_player_speed_hud();
}
}
set_player_speed_hud()
{
if ( !isdefined( level._createfx.player_speed_hud ) )
{
var_0 = newhudelem();
var_0.alignx = "right";
var_0.foreground = 1;
var_0.fontscale = 1.2;
var_0.alpha = 0.2;
var_0.x = 320;
var_0.y = 420;
var_1 = newhudelem();
var_1.alignx = "left";
var_1.foreground = 1;
var_1.fontscale = 1.2;
var_1.alpha = 0.2;
var_1.x = 320;
var_1.y = 420;
var_0.hud_value = var_1;
level._createfx.player_speed_hud = var_0;
}
level._createfx.player_speed_hud.hud_value setvalue( level._createfx.player_speed );
}
toggle_createfx_drawing()
{
level.createfx_draw_enabled = !level.createfx_draw_enabled;
}
insert_effect()
{
common_scripts\_createfxmenu::setmenu( "creation" );
level.effect_list_offset = 0;
clear_fx_hudelements();
set_fx_hudelement( "Pick effect type to create:" );
set_fx_hudelement( "1. One Shot FX" );
set_fx_hudelement( "2. Looping sound" );
set_fx_hudelement( "3. Exploder" );
set_fx_hudelement( "4. One Shot Sound" );
set_fx_hudelement( "5. Reactive Sound" );
set_fx_hudelement( "(c) Cancel >" );
set_fx_hudelement( "(x) Exit >" );
}
manipulate_createfx_ents( var_0, var_1, var_2, var_3, var_4 )
{
if ( !level.createfx_draw_enabled )
return;
if ( level._createfx.select_by_name )
{
level._createfx.select_by_name = 0;
var_0 = undefined;
}
else if ( select_by_substring() )
var_0 = undefined;
for ( var_5 = 0; var_5 < level.createfxent.size; var_5++ )
{
var_6 = level.createfxent[var_5];
if ( !var_6.drawn )
continue;
var_7 = getdvarfloat( "createfx_scaleid" );
if ( isdefined( var_0 ) && var_6 == var_0 )
{
if ( !common_scripts\_createfxmenu::entities_are_selected() )
common_scripts\_createfxmenu::display_fx_info( var_6 );
if ( var_1 )
{
var_8 = index_is_selected( var_5 );
level.createfx_selecting = !var_8;
if ( !var_3 )
{
var_9 = level._createfx.selected_fx_ents.size;
clear_entity_selection();
if ( var_8 && var_9 == 1 )
select_entity( var_5, var_6 );
}
toggle_entity_selection( var_5, var_6 );
}
else if ( var_2 )
{
if ( var_3 )
{
if ( level.createfx_selecting )
select_entity( var_5, var_6 );
if ( !level.createfx_selecting )
deselect_entity( var_5, var_6 );
}
}
var_10 = "highlighted";
}
else
var_10 = "default";
if ( index_is_selected( var_5 ) )
var_10 = "selected";
var_6 createfx_print3d( var_10, var_7, var_4 );
}
}
createfx_print3d( var_0, var_1, var_2 )
{
if ( self.textalpha > 0 )
{
var_3 = get_print3d_text();
var_4 = var_2 * ( var_3.size * -2.93 );
var_5 = level._createfx.colors[self.v["type"]][var_0];
if ( isdefined( self.is_playing ) )
var_5 = ( 1, 0.5, 0 );
if ( isdefined( self.v["reactive_radius"] ) )
return;
}
}
get_print3d_text()
{
switch ( self.v["type"] )
{
case "reactive_fx":
return "reactive: " + self.v["soundalias"];
default:
return self.v["fxid"];
}
}
select_by_name_list()
{
level.effect_list_offset = 0;
clear_fx_hudelements();
common_scripts\_createfxmenu::setmenu( "select_by_name" );
common_scripts\_createfxmenu::draw_effects_list();
}
handle_selected_ents( var_0 )
{
if ( level._createfx.selected_fx_ents.size > 0 )
{
var_0 = selected_ent_buttons( var_0 );
if ( !current_mode_hud( "selected_ents" ) )
{
new_tool_hud( "selected_ents" );
set_tool_hudelem( "Selected Ent Mode" );
set_tool_hudelem( "Mode:", "move" );
set_tool_hudelem( "Rate:", level._createfx.rate );
set_tool_hudelem( "Snap2Normal:", level._createfx.snap2normal );
}
if ( level._createfx.axismode && level._createfx.selected_fx_ents.size > 0 )
{
set_tool_hudelem( "Mode:", "rotate" );
thread [[ level.func_process_fx_rotater ]]();
if ( button_is_clicked( "enter", "p" ) )
reset_axis_of_selected_ents();
if ( button_is_clicked( "v" ) )
copy_angles_of_selected_ents();
for ( var_1 = 0; var_1 < level._createfx.selected_fx_ents.size; var_1++ )
level._createfx.selected_fx_ents[var_1] draw_axis();
if ( level.selectedrotate_pitch != 0 || level.selectedrotate_yaw != 0 || level.selectedrotate_roll != 0 )
var_0 = 1;
}
else
{
set_tool_hudelem( "Mode:", "move" );
var_2 = get_selected_move_vector();
for ( var_1 = 0; var_1 < level._createfx.selected_fx_ents.size; var_1++ )
{
var_3 = level._createfx.selected_fx_ents[var_1];
if ( isdefined( var_3.model ) )
continue;
var_3 draw_cross();
var_3.v["origin"] = var_3.v["origin"] + var_2;
}
if ( distance( ( 0, 0, 0 ), var_2 ) > 0 )
var_0 = 1;
}
}
else
clear_tool_hud();
return var_0;
}
selected_ent_buttons( var_0 )
{
if ( button_is_clicked( "shift", "BUTTON_X" ) )
toggle_axismode();
modify_rate();
if ( button_is_clicked( "s" ) )
toggle_snap2normal();
if ( button_is_clicked( "end", "l" ) )
{
drop_selection_to_ground();
var_0 = 1;
}
if ( button_is_clicked( "tab", "BUTTON_RSHLDR" ) )
{
move_selection_to_cursor();
var_0 = 1;
}
return var_0;
}
modify_rate()
{
var_0 = button_is_held( "shift" );
var_1 = button_is_held( "ctrl" );
if ( button_is_clicked( "=" ) )
{
if ( var_0 )
level._createfx.rate = level._createfx.rate + 1;
else if ( var_1 )
{
if ( level._createfx.rate < 1 )
level._createfx.rate = 1;
else
level._createfx.rate = level._createfx.rate + 10;
}
else
level._createfx.rate = level._createfx.rate + 0.1;
}
else if ( button_is_clicked( "-" ) )
{
if ( var_0 )
level._createfx.rate = level._createfx.rate - 1;
else if ( var_1 )
{
if ( level._createfx.rate > 1 )
level._createfx.rate = 1;
else
level._createfx.rate = 0.1;
}
else
level._createfx.rate = level._createfx.rate - 0.1;
}
level._createfx.rate = clamp( level._createfx.rate, 0.1, 100 );
set_tool_hudelem( "Rate:", level._createfx.rate );
}
toggle_axismode()
{
level._createfx.axismode = !level._createfx.axismode;
}
toggle_snap2normal()
{
level._createfx.snap2normal = !level._createfx.snap2normal;
set_tool_hudelem( "Snap2Normal:", level._createfx.snap2normal );
}
copy_angles_of_selected_ents()
{
level notify( "new_ent_selection" );
for ( var_0 = 0; var_0 < level._createfx.selected_fx_ents.size; var_0++ )
{
var_1 = level._createfx.selected_fx_ents[var_0];
var_1.v["angles"] = level._createfx.selected_fx_ents[level._createfx.selected_fx_ents.size - 1].v["angles"];
var_1 set_forward_and_up_vectors();
}
update_selected_entities();
}
reset_axis_of_selected_ents()
{
level notify( "new_ent_selection" );
for ( var_0 = 0; var_0 < level._createfx.selected_fx_ents.size; var_0++ )
{
var_1 = level._createfx.selected_fx_ents[var_0];
var_1.v["angles"] = ( 0, 0, 0 );
var_1 set_forward_and_up_vectors();
}
update_selected_entities();
}
last_selected_entity_has_changed( var_0 )
{
if ( isdefined( var_0 ) )
{
if ( !common_scripts\_createfxmenu::entities_are_selected() )
return 1;
}
else
return common_scripts\_createfxmenu::entities_are_selected();
return var_0 != level._createfx.selected_fx_ents[level._createfx.selected_fx_ents.size - 1];
}
drop_selection_to_ground()
{
for ( var_0 = 0; var_0 < level._createfx.selected_fx_ents.size; var_0++ )
{
var_1 = level._createfx.selected_fx_ents[var_0];
var_2 = bullettrace( var_1.v["origin"], var_1.v["origin"] + ( 0, 0, -2048 ), 0, undefined );
var_1.v["origin"] = var_2["position"];
}
}
set_off_exploders()
{
level notify( "createfx_exploder_reset" );
var_0 = [];
for ( var_1 = 0; var_1 < level._createfx.selected_fx_ents.size; var_1++ )
{
var_2 = level._createfx.selected_fx_ents[var_1];
if ( isdefined( var_2.v["exploder"] ) )
var_0[var_2.v["exploder"]] = 1;
}
var_3 = getarraykeys( var_0 );
for ( var_1 = 0; var_1 < var_3.size; var_1++ )
common_scripts\utility::exploder( var_3[var_1] );
}
draw_distance()
{
var_0 = 0;
if ( getdvarint( "createfx_drawdist" ) == 0 )
{
}
for (;;)
{
var_1 = getdvarint( "createfx_drawdist" );
var_1 = var_1 * var_1;
for ( var_2 = 0; var_2 < level.createfxent.size; var_2++ )
{
var_3 = level.createfxent[var_2];
var_3.drawn = distancesquared( level.player.origin, var_3.v["origin"] ) <= var_1;
var_0++;
if ( var_0 > 100 )
{
var_0 = 0;
wait 0.05;
}
}
if ( level.createfxent.size == 0 )
wait 0.05;
}
}
createfx_autosave()
{
setdvarifuninitialized( "createfx_autosave_time", "300" );
for (;;)
{
wait( getdvarint( "createfx_autosave_time" ) );
common_scripts\utility::flag_waitopen( "createfx_saving" );
if ( getdvarint( "createfx_no_autosave" ) )
continue;
generate_fx_log( 1 );
}
}
rotate_over_time( var_0, var_1 )
{
level endon( "new_ent_selection" );
var_2 = 0.1;
for ( var_3 = 0; var_3 < var_2 * 20; var_3++ )
{
if ( level.selectedrotate_pitch != 0 )
var_0 addpitch( level.selectedrotate_pitch );
else if ( level.selectedrotate_yaw != 0 )
var_0 addyaw( level.selectedrotate_yaw );
else
var_0 addroll( level.selectedrotate_roll );
wait 0.05;
var_0 draw_axis();
for ( var_4 = 0; var_4 < level._createfx.selected_fx_ents.size; var_4++ )
{
var_5 = level._createfx.selected_fx_ents[var_4];
if ( isdefined( var_5.model ) )
continue;
var_5.v["origin"] = var_1[var_4].origin;
var_5.v["angles"] = var_1[var_4].angles;
}
}
}
delete_pressed()
{
if ( level.createfx_inputlocked )
{
remove_selected_option();
return;
}
delete_selection();
}
remove_selected_option()
{
if ( !isdefined( level._createfx.selected_fx_option_index ) )
return;
var_0 = level._createfx.options[level._createfx.selected_fx_option_index]["name"];
for ( var_1 = 0; var_1 < level.createfxent.size; var_1++ )
{
var_2 = level.createfxent[var_1];
if ( !ent_is_selected( var_2 ) )
continue;
var_2 remove_option( var_0 );
}
update_selected_entities();
clear_settable_fx();
}
remove_option( var_0 )
{
self.v[var_0] = undefined;
}
delete_selection()
{
var_0 = [];
for ( var_1 = 0; var_1 < level.createfxent.size; var_1++ )
{
var_2 = level.createfxent[var_1];
if ( ent_is_selected( var_2 ) )
{
if ( isdefined( var_2.looper ) )
var_2.looper delete();
var_2 notify( "stop_loop" );
continue;
}
var_0[var_0.size] = var_2;
}
level.createfxent = var_0;
level._createfx.selected_fx = [];
level._createfx.selected_fx_ents = [];
clear_fx_hudelements();
}
move_selection_to_cursor()
{
var_0 = level.createfxcursor["position"];
if ( level._createfx.selected_fx_ents.size <= 0 )
return;
var_1 = get_center_of_array( level._createfx.selected_fx_ents );
var_2 = var_1 - var_0;
for ( var_3 = 0; var_3 < level._createfx.selected_fx_ents.size; var_3++ )
{
var_4 = level._createfx.selected_fx_ents[var_3];
if ( isdefined( var_4.model ) )
continue;
var_4.v["origin"] = var_4.v["origin"] - var_2;
if ( level._createfx.snap2normal )
{
if ( isdefined( level.createfxcursor["normal"] ) )
var_4.v["angles"] = vectortoangles( level.createfxcursor["normal"] );
}
}
}
select_last_entity()
{
select_entity( level.createfxent.size - 1, level.createfxent[level.createfxent.size - 1] );
}
select_all_exploders_of_currently_selected( var_0 )
{
var_1 = [];
foreach ( var_3 in level._createfx.selected_fx_ents )
{
if ( !isdefined( var_3.v[var_0] ) )
continue;
var_4 = var_3.v[var_0];
var_1[var_4] = 1;
}
foreach ( var_4, var_7 in var_1 )
{
foreach ( var_9, var_3 in level.createfxent )
{
if ( index_is_selected( var_9 ) )
continue;
if ( !isdefined( var_3.v[var_0] ) )
continue;
if ( var_3.v[var_0] != var_4 )
continue;
select_entity( var_9, var_3 );
}
}
update_selected_entities();
}
copy_ents()
{
if ( level._createfx.selected_fx_ents.size <= 0 )
return;
var_0 = [];
for ( var_1 = 0; var_1 < level._createfx.selected_fx_ents.size; var_1++ )
{
var_2 = level._createfx.selected_fx_ents[var_1];
var_3 = spawnstruct();
var_3.v = var_2.v;
var_3 post_entity_creation_function();
var_0[var_0.size] = var_3;
}
level.stored_ents = var_0;
}
post_entity_creation_function()
{
self.textalpha = 0;
self.drawn = 1;
}
paste_ents()
{
if ( !isdefined( level.stored_ents ) )
return;
clear_entity_selection();
for ( var_0 = 0; var_0 < level.stored_ents.size; var_0++ )
add_and_select_entity( level.stored_ents[var_0] );
move_selection_to_cursor();
update_selected_entities();
level.stored_ents = [];
copy_ents();
}
add_and_select_entity( var_0 )
{
level.createfxent[level.createfxent.size] = var_0;
select_last_entity();
}
get_center_of_array( var_0 )
{
var_1 = ( 0, 0, 0 );
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
var_1 = ( var_1[0] + var_0[var_2].v["origin"][0], var_1[1] + var_0[var_2].v["origin"][1], var_1[2] + var_0[var_2].v["origin"][2] );
return ( var_1[0] / var_0.size, var_1[1] / var_0.size, var_1[2] / var_0.size );
}
ent_draw_axis()
{
self endon( "death" );
for (;;)
{
draw_axis();
wait 0.05;
}
}
rotation_is_occuring()
{
if ( level.selectedrotate_roll != 0 )
return 1;
if ( level.selectedrotate_pitch != 0 )
return 1;
return level.selectedrotate_yaw != 0;
}
print_fx_options( var_0, var_1, var_2 )
{
for ( var_3 = 0; var_3 < level._createfx.options.size; var_3++ )
{
var_4 = level._createfx.options[var_3];
var_5 = var_4["name"];
if ( !isdefined( var_0.v[var_5] ) )
continue;
if ( !common_scripts\_createfxmenu::mask( var_4["mask"], var_0.v["type"] ) )
continue;
if ( !level.mp_createfx )
{
if ( common_scripts\_createfxmenu::mask( "fx", var_0.v["type"] ) && var_5 == "fxid" )
continue;
if ( var_0.v["type"] == "exploder" && var_5 == "exploder" )
continue;
var_6 = var_0.v["type"] + "/" + var_5;
if ( isdefined( level._createfx.defaults[var_6] ) && level._createfx.defaults[var_6] == var_0.v[var_5] )
continue;
}
if ( var_4["type"] == "string" )
{
var_7 = var_0.v[var_5] + "";
if ( var_7 == "nil" )
continue;
cfxprintln( var_1 + "ent.v[ \"" + var_5 + "\" ] = \"" + var_0.v[var_5] + "\";" );
continue;
}
cfxprintln( var_1 + "ent.v[ \"" + var_5 + "\" ] = " + var_0.v[var_5] + ";" );
}
}
entity_highlight_disable()
{
self notify( "highlight change" );
self endon( "highlight change" );
for (;;)
{
self.textalpha = self.textalpha * 0.85;
self.textalpha = self.textalpha - 0.05;
if ( self.textalpha < 0 )
break;
wait 0.05;
}
self.textalpha = 0;
}
entity_highlight_enable()
{
self notify( "highlight change" );
self endon( "highlight change" );
for (;;)
{
self.textalpha = self.textalpha + 0.05;
self.textalpha = self.textalpha * 1.25;
if ( self.textalpha > 1 )
break;
wait 0.05;
}
self.textalpha = 1;
}
clear_settable_fx()
{
level.createfx_inputlocked = 0;
level._createfx.selected_fx_option_index = undefined;
reset_fx_hud_colors();
}
reset_fx_hud_colors()
{
for ( var_0 = 0; var_0 < level._createfx.hudelem_count; var_0++ )
level._createfx.hudelems[var_0][0].color = ( 1, 1, 1 );
}
toggle_entity_selection( var_0, var_1 )
{
if ( isdefined( level._createfx.selected_fx[var_0] ) )
deselect_entity( var_0, var_1 );
else
select_entity( var_0, var_1 );
}
select_entity( var_0, var_1 )
{
if ( isdefined( level._createfx.selected_fx[var_0] ) )
return;
clear_settable_fx();
level notify( "new_ent_selection" );
var_1 thread entity_highlight_enable();
level._createfx.selected_fx[var_0] = 1;
level._createfx.selected_fx_ents[level._createfx.selected_fx_ents.size] = var_1;
}
ent_is_highlighted( var_0 )
{
if ( !isdefined( level.fx_highlightedent ) )
return 0;
return var_0 == level.fx_highlightedent;
}
deselect_entity( var_0, var_1 )
{
if ( !isdefined( level._createfx.selected_fx[var_0] ) )
return;
clear_settable_fx();
level notify( "new_ent_selection" );
level._createfx.selected_fx[var_0] = undefined;
if ( !ent_is_highlighted( var_1 ) )
var_1 thread entity_highlight_disable();
var_2 = [];
for ( var_3 = 0; var_3 < level._createfx.selected_fx_ents.size; var_3++ )
{
if ( level._createfx.selected_fx_ents[var_3] != var_1 )
var_2[var_2.size] = level._createfx.selected_fx_ents[var_3];
}
level._createfx.selected_fx_ents = var_2;
}
index_is_selected( var_0 )
{
return isdefined( level._createfx.selected_fx[var_0] );
}
ent_is_selected( var_0 )
{
for ( var_1 = 0; var_1 < level._createfx.selected_fx_ents.size; var_1++ )
{
if ( level._createfx.selected_fx_ents[var_1] == var_0 )
return 1;
}
return 0;
}
clear_entity_selection()
{
for ( var_0 = 0; var_0 < level._createfx.selected_fx_ents.size; var_0++ )
{
if ( !ent_is_highlighted( level._createfx.selected_fx_ents[var_0] ) )
level._createfx.selected_fx_ents[var_0] thread entity_highlight_disable();
}
level._createfx.selected_fx = [];
level._createfx.selected_fx_ents = [];
}
draw_axis()
{
}
draw_cross()
{
}
createfx_centerprint( var_0 )
{
thread createfx_centerprint_thread( var_0 );
}
createfx_centerprint_thread( var_0 )
{
level notify( "new_createfx_centerprint" );
level endon( "new_createfx_centerprint" );
for ( var_1 = 0; var_1 < 5; var_1++ )
{
}
wait 4.5;
for ( var_1 = 0; var_1 < 5; var_1++ )
{
}
}
get_selected_move_vector()
{
var_0 = level.player getplayerangles()[1];
var_1 = ( 0, var_0, 0 );
var_2 = anglestoright( var_1 );
var_3 = anglestoforward( var_1 );
var_4 = anglestoup( var_1 );
var_5 = 0;
var_6 = level._createfx.rate;
if ( buttondown( "kp_uparrow", "DPAD_UP" ) )
{
if ( level.selectedmove_forward < 0 )
level.selectedmove_forward = 0;
level.selectedmove_forward = level.selectedmove_forward + var_6;
}
else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) )
{
if ( level.selectedmove_forward > 0 )
level.selectedmove_forward = 0;
level.selectedmove_forward = level.selectedmove_forward - var_6;
}
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 + var_6;
}
else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) )
{
if ( level.selectedmove_right > 0 )
level.selectedmove_right = 0;
level.selectedmove_right = level.selectedmove_right - var_6;
}
else
level.selectedmove_right = 0;
if ( buttondown( "BUTTON_Y" ) )
{
if ( level.selectedmove_up < 0 )
level.selectedmove_up = 0;
level.selectedmove_up = level.selectedmove_up + var_6;
}
else if ( buttondown( "BUTTON_B" ) )
{
if ( level.selectedmove_up > 0 )
level.selectedmove_up = 0;
level.selectedmove_up = level.selectedmove_up - var_6;
}
else
level.selectedmove_up = 0;
var_7 = ( 0, 0, 0 );
var_7 = var_7 + var_3 * level.selectedmove_forward;
var_7 = var_7 + var_2 * level.selectedmove_right;
var_7 = var_7 + var_4 * level.selectedmove_up;
return var_7;
}
set_anglemod_move_vector()
{
var_0 = level._createfx.rate;
if ( buttondown( "kp_uparrow", "DPAD_UP" ) )
{
if ( level.selectedrotate_pitch < 0 )
level.selectedrotate_pitch = 0;
level.selectedrotate_pitch = level.selectedrotate_pitch + var_0;
}
else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) )
{
if ( level.selectedrotate_pitch > 0 )
level.selectedrotate_pitch = 0;
level.selectedrotate_pitch = level.selectedrotate_pitch - var_0;
}
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 + var_0;
}
else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) )
{
if ( level.selectedrotate_yaw > 0 )
level.selectedrotate_yaw = 0;
level.selectedrotate_yaw = level.selectedrotate_yaw - var_0;
}
else
level.selectedrotate_yaw = 0;
if ( buttondown( "BUTTON_Y" ) )
{
if ( level.selectedrotate_roll < 0 )
level.selectedrotate_roll = 0;
level.selectedrotate_roll = level.selectedrotate_roll + var_0;
}
else if ( buttondown( "BUTTON_B" ) )
{
if ( level.selectedrotate_roll > 0 )
level.selectedrotate_roll = 0;
level.selectedrotate_roll = level.selectedrotate_roll - var_0;
}
else
level.selectedrotate_roll = 0;
}
update_selected_entities()
{
var_0 = 0;
foreach ( var_2 in level._createfx.selected_fx_ents )
{
if ( var_2.v["type"] == "reactive_fx" )
var_0 = 1;
var_2 [[ level.func_updatefx ]]();
}
if ( var_0 )
refresh_reactive_fx_ents();
}
hack_start( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = "painter_mp";
precachemenu( var_0 );
wait 0.05;
if ( var_0 == "painter_mp" )
return;
level.player openpopupmenu( var_0 );
level.player closepopupmenu( var_0 );
}
stop_fx_looper()
{
if ( isdefined( self.looper ) )
self.looper delete();
stop_loopsound();
}
stop_loopsound()
{
self notify( "stop_loop" );
}
func_get_level_fx()
{
if ( !isdefined( level._effect_keys ) )
var_0 = getarraykeys( level._effect );
else
{
var_0 = getarraykeys( level._effect );
if ( var_0.size == level._effect_keys.size )
return level._effect_keys;
}
var_0 = common_scripts\utility::alphabetize( var_0 );
level._effect_keys = var_0;
return var_0;
}
restart_fx_looper()
{
stop_fx_looper();
set_forward_and_up_vectors();
switch ( self.v["type"] )
{
case "oneshotfx":
common_scripts\_fx::create_triggerfx();
break;
case "soundfx":
common_scripts\_fx::create_loopsound();
break;
case "soundfx_interval":
common_scripts\_fx::create_interval_sound();
break;
}
}
refresh_reactive_fx_ents()
{
level._fx.reactive_fx_ents = undefined;
foreach ( var_1 in level.createfxent )
{
if ( var_1.v["type"] == "reactive_fx" )
{
var_1 set_forward_and_up_vectors();
var_1 common_scripts\_fx::add_reactive_fx();
}
}
}
process_fx_rotater()
{
if ( level.fx_rotating )
return;
set_anglemod_move_vector();
if ( !rotation_is_occuring() )
return;
level.fx_rotating = 1;
if ( level._createfx.selected_fx_ents.size > 1 )
{
var_0 = get_center_of_array( level._createfx.selected_fx_ents );
var_1 = spawn( "script_origin", var_0 );
var_1.v["angles"] = level._createfx.selected_fx_ents[0].v["angles"];
var_1.v["origin"] = var_0;
var_2 = [];
for ( var_3 = 0; var_3 < level._createfx.selected_fx_ents.size; var_3++ )
{
var_2[var_3] = spawn( "script_origin", level._createfx.selected_fx_ents[var_3].v["origin"] );
var_2[var_3].angles = level._createfx.selected_fx_ents[var_3].v["angles"];
var_2[var_3] linkto( var_1 );
}
rotate_over_time( var_1, var_2 );
var_1 delete();
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
var_2[var_3] delete();
}
else if ( level._createfx.selected_fx_ents.size == 1 )
{
var_4 = level._createfx.selected_fx_ents[0];
var_2 = spawn( "script_origin", ( 0, 0, 0 ) );
var_2.angles = var_4.v["angles"];
if ( level.selectedrotate_pitch != 0 )
var_2 addpitch( level.selectedrotate_pitch );
else if ( level.selectedrotate_yaw != 0 )
var_2 addyaw( level.selectedrotate_yaw );
else
var_2 addroll( level.selectedrotate_roll );
var_4.v["angles"] = var_2.angles;
var_2 delete();
wait 0.05;
}
level.fx_rotating = 0;
}
spawn_grenade()
{
playfx( level._createfx.grenade.fx, level.createfxcursor["position"] );
level._createfx.grenade playsound( level._createfx.grenade.sound );
radiusdamage( level.createfxcursor["position"], level._createfx.grenade.radius, 50, 5, undefined, "MOD_EXPLOSIVE" );
level notify( "code_damageradius", undefined, level._createfx.grenade.radius, level.createfxcursor["position"] );
}
show_help()
{
clear_fx_hudelements();
set_fx_hudelement( "Help:" );
set_fx_hudelement( "Insert Insert entity" );
set_fx_hudelement( "L Drop selected entities to the ground" );
set_fx_hudelement( "A Add option to the selected entities" );
set_fx_hudelement( "P Reset the rotation of the selected entities" );
set_fx_hudelement( "V Copy the angles from the most recently selected fx onto all selected fx." );
set_fx_hudelement( "Delete Kill the selected entities" );
set_fx_hudelement( "ESCAPE Cancel out of option-modify-mode, must have console open" );
set_fx_hudelement( "Ctrl-C Copy" );
set_fx_hudelement( "Ctrl-V Paste" );
set_fx_hudelement( "F2 Toggle createfx dot and text drawing" );
set_fx_hudelement( "F5 SAVES your work" );
set_fx_hudelement( "Dpad Move selected entitise on X/Y or rotate pitch/yaw" );
set_fx_hudelement( "A button Toggle the selection of the current entity" );
set_fx_hudelement( "X button Toggle entity rotation mode" );
set_fx_hudelement( "Y button Move selected entites up or rotate roll" );
set_fx_hudelement( "B button Move selected entites down or rotate roll" );
set_fx_hudelement( "R Shoulder Move selected entities to the cursor" );
set_fx_hudelement( "L Shoulder Hold to select multiple entites" );
set_fx_hudelement( "L JoyClick Copy" );
set_fx_hudelement( "R JoyClick Paste" );
set_fx_hudelement( "N UFO" );
set_fx_hudelement( "T Toggle Timescale FAST" );
set_fx_hudelement( "Y Toggle Timescale SLOW" );
set_fx_hudelement( "[ Toggle FX Visibility" );
set_fx_hudelement( "] Toggle ShowTris" );
set_fx_hudelement( "F11 Toggle FX Profile" );
}
generate_fx_log( var_0 )
{
}
write_log( var_0, var_1, var_2, var_3 )
{
var_4 = "\\t";
cfxprintlnstart();
cfxprintln( "//_createfx generated. Do not touch!!" );
cfxprintln( "#include common_scripts\\utility;" );
cfxprintln( "#include common_scripts\\_createfx;\\n" );
cfxprintln( "" );
cfxprintln( "main()" );
cfxprintln( "{" );
cfxprintln( var_4 + "// CreateFX " + var_1 + " entities placed: " + var_0.size );
foreach ( var_6 in var_0 )
{
if ( level.createfx_loopcounter > 16 )
{
level.createfx_loopcounter = 0;
wait 0.1;
}
level.createfx_loopcounter++;
if ( getdvarint( "scr_map_exploder_dump" ) )
{
if ( !isdefined( var_6.model ) )
continue;
}
else if ( isdefined( var_6.model ) )
continue;
if ( var_6.v["type"] == "oneshotfx" )
cfxprintln( var_4 + "ent = createOneshotEffect( \"" + var_6.v["fxid"] + "\" );" );
if ( var_6.v["type"] == "exploder" )
{
if ( isdefined( var_6.v["exploder"] ) && !level.mp_createfx )
cfxprintln( var_4 + "ent = createExploderEx( \"" + var_6.v["fxid"] + "\", \"" + var_6.v["exploder"] + "\" );" );
else
cfxprintln( var_4 + "ent = createExploder( \"" + var_6.v["fxid"] + "\" );" );
}
if ( var_6.v["type"] == "soundfx" )
cfxprintln( var_4 + "ent = createLoopSound();" );
if ( var_6.v["type"] == "soundfx_interval" )
cfxprintln( var_4 + "ent = createIntervalSound();" );
if ( var_6.v["type"] == "reactive_fx" )
cfxprintln( var_4 + "ent = createReactiveEnt();" );
cfxprintln( var_4 + "ent set_origin_and_angles( " + var_6.v["origin"] + ", " + var_6.v["angles"] + " );" );
print_fx_options( var_6, var_4, var_2 );
cfxprintln( "" );
}
cfxprintln( "}" );
cfxprintln( " " );
cfxprintlnend( var_2, var_3, var_1 );
}
createfx_adjust_array()
{
var_0 = 0.1;
foreach ( var_2 in level.createfxent )
{
var_3 = [];
var_4 = [];
for ( var_5 = 0; var_5 < 3; var_5++ )
{
var_3[var_5] = var_2.v["origin"][var_5];
var_4[var_5] = var_2.v["angles"][var_5];
if ( var_3[var_5] < var_0 && var_3[var_5] > var_0 * -1 )
var_3[var_5] = 0;
if ( var_4[var_5] < var_0 && var_4[var_5] > var_0 * -1 )
var_4[var_5] = 0;
}
var_2.v["origin"] = ( var_3[0], var_3[1], var_3[2] );
var_2.v["angles"] = ( var_4[0], var_4[1], var_4[2] );
}
}
get_createfx_array( var_0 )
{
var_1 = get_createfx_types( var_0 );
var_2 = [];
foreach ( var_5, var_4 in var_1 )
var_2[var_5] = [];
foreach ( var_7 in level.createfxent )
{
var_8 = 0;
foreach ( var_5, var_0 in var_1 )
{
if ( var_7.v["type"] != var_0 )
continue;
var_8 = 1;
var_2[var_5][var_2[var_5].size] = var_7;
break;
}
}
var_11 = [];
for ( var_12 = 0; var_12 < var_1.size; var_12++ )
{
foreach ( var_7 in var_2[var_12] )
var_11[var_11.size] = var_7;
}
return var_11;
}
get_createfx_types( var_0 )
{
var_1 = [];
if ( var_0 == "fx" )
{
var_1[0] = "oneshotfx";
var_1[1] = "exploder";
}
else
{
var_1[0] = "soundfx";
var_1[1] = "soundfx_interval";
var_1[2] = "reactive_fx";
}
return var_1;
}
is_createfx_type( var_0, var_1 )
{
var_2 = get_createfx_types( var_1 );
foreach ( var_4 in var_2 )
{
if ( var_0.v["type"] == var_4 )
return 1;
}
return 0;
}
createfx_filter_types()
{
var_0 = [];
var_0[0] = "soundfx";
var_0[1] = "oneshotfx";
var_0[2] = "exploder";
var_0[3] = "soundfx_interval";
var_0[4] = "reactive_fx";
var_1 = [];
foreach ( var_4, var_3 in var_0 )
var_1[var_4] = [];
foreach ( var_6 in level.createfxent )
{
var_7 = 0;
foreach ( var_4, var_9 in var_0 )
{
if ( var_6.v["type"] != var_9 )
continue;
var_7 = 1;
var_1[var_4][var_1[var_4].size] = var_6;
break;
}
}
var_11 = [];
for ( var_12 = 0; var_12 < var_0.size; var_12++ )
{
foreach ( var_6 in var_1[var_12] )
var_11[var_11.size] = var_6;
}
level.createfxent = var_11;
}
cfxprintlnstart()
{
common_scripts\utility::fileprint_launcher_start_file();
}
cfxprintln( var_0 )
{
common_scripts\utility::fileprint_launcher( var_0 );
}
cfxprintlnend( var_0, var_1, var_2 )
{
var_3 = 1;
if ( var_1 != "" || var_0 )
var_3 = 0;
if ( common_scripts\utility::issp() )
{
var_4 = common_scripts\utility::get_template_level() + var_1 + "_" + var_2 + ".gsc";
if ( var_0 )
var_4 = "backup_" + var_2 + ".gsc";
}
else
{
var_4 = common_scripts\utility::get_template_level() + var_1 + "_" + var_2 + ".gsc";
if ( var_0 )
var_4 = "backup.gsc";
}
common_scripts\utility::fileprint_launcher_end_file( "/share/raw/maps/createfx/" + var_4, var_3 );
}
process_button_held_and_clicked()
{
add_button( "mouse1" );
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( "shift" );
add_kb_button( "ctrl" );
add_kb_button( "escape" );
add_kb_button( "F1" );
add_kb_button( "F5" );
add_kb_button( "F4" );
add_kb_button( "F2" );
add_kb_button( "a" );
add_kb_button( "g" );
add_kb_button( "c" );
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( "s" );
add_kb_button( "u" );
add_kb_button( "v" );
add_kb_button( "x" );
add_kb_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( "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( "-" );
add_kb_button( "=" );
add_kb_button( "," );
add_kb_button( "." );
add_kb_button( "[" );
add_kb_button( "]" );
add_kb_button( "leftarrow" );
add_kb_button( "rightarrow" );
add_kb_button( "uparrow" );
add_kb_button( "downarrow" );
}
locked( var_0 )
{
if ( isdefined( level._createfx.lockedlist[var_0] ) )
return 0;
return kb_locked( var_0 );
}
kb_locked( var_0 )
{
return level.createfx_inputlocked && isdefined( level.button_is_kb[var_0] );
}
add_button( var_0 )
{
if ( locked( var_0 ) )
return;
if ( !isdefined( level.buttonisheld[var_0] ) )
{
if ( level.player buttonpressed( var_0 ) )
{
level.buttonisheld[var_0] = 1;
level.buttonclick[var_0] = 1;
}
}
else if ( !level.player buttonpressed( var_0 ) )
level.buttonisheld[var_0] = undefined;
}
add_kb_button( var_0 )
{
level.button_is_kb[var_0] = 1;
add_button( var_0 );
}
buttondown( var_0, var_1 )
{
return buttonpressed_internal( var_0 ) || buttonpressed_internal( var_1 );
}
buttonpressed_internal( var_0 )
{
if ( !isdefined( var_0 ) )
return 0;
if ( kb_locked( var_0 ) )
return 0;
return level.player buttonpressed( var_0 );
}
button_is_held( var_0, var_1 )
{
if ( isdefined( var_1 ) )
{
if ( isdefined( level.buttonisheld[var_1] ) )
return 1;
}
return isdefined( level.buttonisheld[var_0] );
}
button_is_clicked( var_0, var_1 )
{
if ( isdefined( var_1 ) )
{
if ( isdefined( level.buttonclick[var_1] ) )
return 1;
}
return isdefined( level.buttonclick[var_0] );
}
init_huds()
{
level._createfx.hudelems = [];
level._createfx.hudelem_count = 30;
var_0 = [];
var_1 = [];
var_0[0] = 0;
var_1[0] = 0;
var_0[1] = 1;
var_1[1] = 1;
var_0[2] = -2;
var_1[2] = 1;
var_0[3] = 1;
var_1[3] = -1;
var_0[4] = -2;
var_1[4] = -1;
level.cleartextmarker = newhudelem();
level.cleartextmarker.alpha = 0;
for ( var_2 = 0; var_2 < level._createfx.hudelem_count; var_2++ )
{
var_3 = [];
for ( var_4 = 0; var_4 < 1; var_4++ )
{
var_5 = newhudelem();
var_5.alignx = "left";
var_5.location = 0;
var_5.foreground = 1;
var_5.fontscale = 1.4;
var_5.sort = 20 - var_4;
var_5.alpha = 1;
var_5.x = 0 + var_0[var_4];
var_5.y = 60 + var_1[var_4] + var_2 * 15;
if ( var_4 > 0 )
var_5.color = ( 0, 0, 0 );
var_3[var_3.size] = var_5;
}
level._createfx.hudelems[var_2] = var_3;
}
var_3 = [];
for ( var_4 = 0; var_4 < 5; var_4++ )
{
var_5 = newhudelem();
var_5.alignx = "center";
var_5.location = 0;
var_5.foreground = 1;
var_5.fontscale = 1.4;
var_5.sort = 20 - var_4;
var_5.alpha = 1;
var_5.x = 320 + var_0[var_4];
var_5.y = 80 + var_1[var_4];
if ( var_4 > 0 )
var_5.color = ( 0, 0, 0 );
var_3[var_3.size] = var_5;
}
level.createfx_centerprint = var_3;
}
init_crosshair()
{
var_0 = newhudelem();
var_0.location = 0;
var_0.alignx = "center";
var_0.aligny = "middle";
var_0.foreground = 1;
var_0.fontscale = 2;
var_0.sort = 20;
var_0.alpha = 1;
var_0.x = 320;
var_0.y = 233;
}
clear_fx_hudelements()
{
level.cleartextmarker clearalltextafterhudelem();
for ( var_0 = 0; var_0 < level._createfx.hudelem_count; var_0++ )
{
for ( var_1 = 0; var_1 < 1; var_1++ )
{
}
}
level.fxhudelements = 0;
}
set_fx_hudelement( var_0 )
{
for ( var_1 = 0; var_1 < 1; var_1++ )
{
}
level.fxhudelements++;
}
init_tool_hud()
{
if ( !isdefined( level._createfx.tool_hudelems ) )
level._createfx.tool_hudelems = [];
if ( !isdefined( level._createfx.tool_hud_visible ) )
level._createfx.tool_hud_visible = 1;
if ( !isdefined( level._createfx.tool_hud ) )
level._createfx.tool_hud = "";
}
new_tool_hud( var_0 )
{
foreach ( var_3, var_2 in level._createfx.tool_hudelems )
{
if ( isdefined( var_2.value_hudelem ) )
var_2.value_hudelem destroy();
var_2 destroy();
level._createfx.tool_hudelems[var_3] = undefined;
}
level._createfx.tool_hud = var_0;
}
current_mode_hud( var_0 )
{
return level._createfx.tool_hud == var_0;
}
clear_tool_hud()
{
new_tool_hud( "" );
}
new_tool_hudelem( var_0 )
{
var_1 = newhudelem();
var_1.alignx = "left";
var_1.location = 0;
var_1.foreground = 1;
var_1.fontscale = 1.2;
var_1.alpha = 1;
var_1.x = 0;
var_1.y = 320 + var_0 * 15;
return var_1;
}
get_tool_hudelem( var_0 )
{
if ( isdefined( level._createfx.tool_hudelems[var_0] ) )
return level._createfx.tool_hudelems[var_0];
return undefined;
}
set_tool_hudelem( var_0, var_1 )
{
var_2 = get_tool_hudelem( var_0 );
if ( !isdefined( var_2 ) )
{
var_2 = new_tool_hudelem( level._createfx.tool_hudelems.size );
level._createfx.tool_hudelems[var_0] = var_2;
var_2.text = var_0;
}
if ( isdefined( var_1 ) )
{
if ( isdefined( var_2.value_hudelem ) )
var_3 = var_2.value_hudelem;
else
{
var_3 = new_tool_hudelem( level._createfx.tool_hudelems.size );
var_3.x = var_3.x + 80;
var_3.y = var_2.y;
var_2.value_hudelem = var_3;
}
if ( isdefined( var_3.text ) && var_3.text == var_1 )
return;
var_3.text = var_1;
}
}
select_by_substring()
{
var_0 = getdvar( "select_by_substring" );
if ( var_0 == "" )
return 0;
setdvar( "select_by_substring", "" );
var_1 = [];
foreach ( var_4, var_3 in level.createfxent )
{
if ( issubstr( var_3.v["fxid"], var_0 ) )
var_1[var_1.size] = var_4;
}
if ( var_1.size == 0 )
return 0;
deselect_all_ents();
select_index_array( var_1 );
foreach ( var_6 in var_1 )
{
var_3 = level.createfxent[var_6];
select_entity( var_6, var_3 );
}
return 1;
}
select_index_array( var_0 )
{
foreach ( var_2 in var_0 )
{
var_3 = level.createfxent[var_2];
select_entity( var_2, var_3 );
}
}
deselect_all_ents()
{
foreach ( var_2, var_1 in level._createfx.selected_fx_ents )
deselect_entity( var_2, var_1 );
}