3274 lines
70 KiB
Plaintext

#include maps/mp/_script_gen;
#include maps/mp/_fx;
#include maps/mp/_createfxundo;
#include maps/mp/_createfxmenu;
#include maps/mp/_utility;
#include common_scripts/utility;
createfx()
{
/#
println( "^2Running CreateFX 2.0" );
#/
if ( ismp() )
{
init_mp_paths();
level.timelimitoverride = 1;
}
else
{
init_sp_paths();
}
precachemodel( "fx_axis_createfx" );
precacheshader( "black" );
if ( getDvar( "createfx_scaleid" ) == "" )
{
setdvar( "createfx_scaleid", "0.5" );
}
if ( getDvar( "createfx_print_frames" ) == "" )
{
setdvar( "createfx_print_frames", "3" );
}
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", "300" );
}
if ( getDvar( "createfx_oneshot_min_delay" ) == "" )
{
setdvar( "createfx_oneshot_min_delay", "-100" );
}
if ( getDvar( "createfx_oneshot_max_delay" ) == "" )
{
setdvar( "createfx_oneshot_max_delay", "-15" );
}
flag_init( "createfx_saving" );
if ( !isDefined( level.createfx ) )
{
level.createfx = [];
}
if ( !isDefined( level.cfx_uniqueid ) )
{
level.cfx_uniqueid = 0;
}
level.cfx_last_action = "none";
if ( !ismp() )
{
level thread [[ level.cfx_func_run_gump_func ]]();
}
if ( isDefined( level.createfx_callback_thread ) )
{
level thread [[ level.createfx_callback_thread ]]();
}
if ( ismp() )
{
level.callbackplayerdisconnect = ::empty;
level.callbackplayerdamage = ::damage_void;
level.callbackplayerkilled = ::empty;
level.callbackplayerconnect = ::callback_playerconnect;
while ( !isDefined( level.player ) )
{
wait 0,05;
}
thread createfxdelay();
}
level.is_camera_on = 0;
thread createfxlogic();
level waittill( "eternity" );
}
fx_init()
{
if ( ismp() )
{
init_client_mp_variables();
}
else
{
init_client_sp_variables();
}
level.exploderfunction = level.cfx_exploder_before;
waittillframeend;
waittillframeend;
level.exploderfunction = level.cfx_exploder_after;
level.non_fx_ents = 0;
if ( level.createfx_enabled )
{
triggers = getentarray( "trigger_multiple", "classname" );
i = 0;
while ( i < triggers.size )
{
triggers[ i ] delete();
i++;
}
triggers = getentarray( "trigger_once", "classname" );
i = 0;
while ( i < triggers.size )
{
triggers[ i ] delete();
i++;
}
triggers = getentarray( "trigger_box", "classname" );
i = 0;
while ( i < triggers.size )
{
triggers[ i ] delete();
i++;
}
triggers = getentarray( "trigger_radius", "classname" );
i = 0;
while ( i < triggers.size )
{
triggers[ i ] delete();
i++;
}
triggers = getentarray( "trigger_lookat", "classname" );
i = 0;
while ( i < triggers.size )
{
triggers[ i ] delete();
i++;
}
triggers = getentarray( "trigger_damage", "classname" );
i = 0;
while ( i < triggers.size )
{
triggers[ i ] delete();
i++;
}
sm = getentarray( "spawn_manager", "classname" );
i = 0;
while ( i < sm.size )
{
sm[ i ] delete();
i++;
}
delete_spawns();
if ( !ismp() )
{
delete_arrays_in_sp();
/#
println( "We're not in MP!" );
#/
}
}
i = 0;
while ( i < level.createfxent.size )
{
ent = level.createfxent[ i ];
ent set_forward_and_up_vectors();
if ( level.clientscripts )
{
if ( !level.createfx_enabled )
{
i++;
continue;
}
}
else
{
if ( isDefined( ent.model ) )
{
level.non_fx_ents++;
}
if ( ent.v[ "type" ] == "loopfx" )
{
ent thread [[ level.cfx_func_loopfx ]]();
}
if ( ent.v[ "type" ] == "oneshotfx" )
{
ent thread [[ level.cfx_func_oneshotfx ]]();
}
if ( ent.v[ "type" ] == "soundfx" )
{
ent thread [[ level.cfx_func_soundfx ]]();
}
}
i++;
}
}
add_effect( name, effect )
{
if ( !isDefined( level._effect ) )
{
level._effect = [];
}
level._effect[ name ] = loadfx( effect );
}
createeffect( type, fxid )
{
ent = undefined;
if ( !isDefined( level.createfx_enabled ) )
{
level.createfx_enabled = getDvar( "createfx" ) != "";
}
if ( !isDefined( level.createfxent ) )
{
level.createfxent = [];
}
if ( level.createfx_enabled )
{
if ( !isDefined( level.cfx_uniqueid ) )
{
level.cfx_uniqueid = 0;
}
ent = spawnstruct();
ent.uniqueid = level.cfx_uniqueid;
level.cfx_uniqueid++;
}
else if ( type == "exploder" )
{
ent = spawnstruct();
}
else
{
if ( !isDefined( level._fake_createfx_struct ) )
{
level._fake_createfx_struct = spawnstruct();
}
ent = level._fake_createfx_struct;
}
level.createfxent[ level.createfxent.size ] = ent;
ent.v = [];
ent.v[ "type" ] = type;
ent.v[ "fxid" ] = fxid;
ent.v[ "angles" ] = ( 1, 1, 1 );
ent.v[ "origin" ] = ( 1, 1, 1 );
ent.drawn = 1;
return ent;
}
createloopsound()
{
ent = spawnstruct();
if ( !isDefined( level.createfxent ) )
{
level.createfxent = [];
}
level.createfxent[ level.createfxent.size ] = ent;
ent.v = [];
ent.v[ "type" ] = "soundfx";
ent.v[ "fxid" ] = "No FX";
ent.v[ "soundalias" ] = "nil";
ent.v[ "angles" ] = ( 1, 1, 1 );
ent.v[ "origin" ] = ( 1, 1, 1 );
ent.drawn = 1;
return ent;
}
set_forward_and_up_vectors()
{
self.v[ "up" ] = anglesToUp( self.v[ "angles" ] );
self.v[ "forward" ] = anglesToForward( self.v[ "angles" ] );
}
createfxlogic()
{
waittillframeend;
menu_init();
if ( !ismp() )
{
players = get_players();
if ( !isDefined( players ) || players.size == 0 )
{
level waittill( "first_player_ready" );
}
}
/#
adddebugcommand( "noclip" );
#/
if ( !isDefined( level._effect ) )
{
level._effect = [];
}
if ( getDvar( "createfx_map" ) == "" )
{
setdvar( "createfx_map", level.script );
}
else
{
if ( getDvar( "createfx_map" ) == level.script )
{
if ( !ismp() )
{
playerpos = [];
playerpos[ 0 ] = getDvarInt( #"274F266C" );
playerpos[ 1 ] = getDvarInt( #"274F266D" );
playerpos[ 2 ] = getDvarInt( #"274F266E" );
player = get_players()[ 0 ];
player setorigin( ( playerpos[ 0 ], playerpos[ 1 ], playerpos[ 2 ] ) );
}
}
}
/#
filename = level.cfx_server_scriptdata + level.script + "_fx.gsc";
file = openfile( filename, "append" );
level.write_error = "";
if ( file == -1 )
{
level.write_error = filename;
}
else
{
closefile( file );
#/
}
level.createfxhudelements = [];
level.createfx_hudelements = 100;
stroffsetx = [];
stroffsety = [];
stroffsetx[ 0 ] = 0;
stroffsety[ 0 ] = 0;
stroffsetx[ 1 ] = 1;
stroffsety[ 1 ] = 1;
stroffsetx[ 2 ] = -2;
stroffsety[ 2 ] = 1;
setdvar( "fx", "nil" );
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( "." );
center_text_init();
level.cleartextmarker = newdebughudelem();
level.cleartextmarker.alpha = 0;
level.cleartextmarker settext( "marker" );
i = 0;
while ( i < level.createfx_hudelements )
{
newstrarray = [];
p = 0;
while ( p < 2 )
{
newstr = newhudelem();
newstr.alignx = "left";
newstr.location = 0;
newstr.foreground = 1;
newstr.fontscale = 1,1;
newstr.sort = 20 - p;
newstr.alpha = 1;
newstr.x = 0 + stroffsetx[ p ];
newstr.y = ( 60 + stroffsety[ p ] ) + ( i * 15 );
if ( p > 0 )
{
newstr.color = ( 1, 1, 1 );
}
newstrarray[ newstrarray.size ] = newstr;
p++;
}
level.createfxhudelements[ i ] = newstrarray;
i++;
}
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" ] = 1;
level.createfx_lockedlist[ "BUTTON_LSHLDR" ] = 1;
level.createfx_lockedlist[ "BUTTON_RSHLDR" ] = 1;
level.createfx_lockedlist[ "mouse1" ] = 1;
level.createfx_lockedlist[ "ctrl" ] = 1;
level.createfx_draw_enabled = 1;
level.buttonisheld = [];
axismode = 0;
colors = [];
colors[ "loopfx" ][ "selected" ] = ( 1, 1, 0,2 );
colors[ "loopfx" ][ "highlighted" ] = ( 0,4, 0,95, 1 );
colors[ "loopfx" ][ "default" ] = ( 0,3, 0,5, 1 );
colors[ "oneshotfx" ][ "selected" ] = ( 1, 1, 0,2 );
colors[ "oneshotfx" ][ "highlighted" ] = ( 0,33, 0,97, 1 );
colors[ "oneshotfx" ][ "default" ] = ( 0,1, 0,73, 0,73 );
colors[ "exploder" ][ "selected" ] = ( 1, 1, 0,2 );
colors[ "exploder" ][ "highlighted" ] = ( 1, 0,1, 0,1 );
colors[ "exploder" ][ "default" ] = ( 1, 0,1, 0,1 );
colors[ "rainfx" ][ "selected" ] = ( 1, 1, 0,2 );
colors[ "rainfx" ][ "highlighted" ] = ( 0,95, 0,4, 0,95 );
colors[ "rainfx" ][ "default" ] = ( 0,78, 0, 0,73 );
colors[ "soundfx" ][ "selected" ] = ( 1, 1, 0,2 );
colors[ "soundfx" ][ "highlighted" ] = ( 0,5, 1, 0,75 );
colors[ "soundfx" ][ "default" ] = ( 0,2, 0,9, 0,2 );
lasthighlightedent = undefined;
level.fx_rotating = 0;
setmenu( "none" );
level.createfx_selecting = 0;
level.createfx_last_player_origin = ( 1, 1, 1 );
level.createfx_last_player_forward = ( 1, 1, 1 );
level.createfx_last_view_change_test = 0;
player = get_players()[ 0 ];
black = newdebughudelem();
black.x = -120;
black.y = 200;
black.foreground = 0;
black setshader( "black", 250, 160 );
black.alpha = 0;
level.createfx_inputlocked = 0;
help_on_last_frame = 0;
i = 0;
while ( i < level.createfxent.size )
{
ent = level.createfxent[ i ];
ent post_entity_creation_function();
i++;
}
thread draw_distance();
lastselectentity = undefined;
thread createfx_autosave();
if ( !ismp() )
{
make_sp_player_invulnerable( player );
}
for ( ;; )
{
player = get_players()[ 0 ];
changedselectedents = 0;
right = anglesToRight( player getplayerangles() );
forward = anglesToForward( player getplayerangles() );
up = anglesToUp( player getplayerangles() );
dot = 0,85;
placeent_vector = vectorScale( forward, 750 );
level.createfxcursor = bullettrace( player geteye(), player geteye() + placeent_vector, 0, 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" );
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( "c" ) )
{
if ( level.is_camera_on == 0 )
{
/#
adddebugcommand( "noclip" );
#/
level thread handle_camera();
level.is_camera_on = 1;
break;
}
else
{
if ( level.is_camera_on == 1 )
{
/#
adddebugcommand( "noclip" );
#/
level notify( "new_camera" );
level.is_camera_on = 0;
axismode = 0;
}
}
}
if ( button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on )
{
axismode = 1;
}
else
{
if ( !button_is_held( "BUTTON_RTRIG" ) && level.is_camera_on )
{
axismode = 0;
}
}
if ( button_is_clicked( "del" ) || !shiftheld && button_is_clicked( "d" ) )
{
delete_pressed();
}
if ( button_is_clicked( "end" ) || shiftheld && button_is_clicked( "d" ) )
{
drop_selection_to_ground();
changedselectedents = 1;
}
if ( button_is_clicked( "s" ) )
{
setmenu( "select_by_property" );
wait 0,05;
}
if ( isDefined( level.cfx_selected_prop ) )
{
if ( ctrlheld )
{
select_ents_by_property( level.cfx_selected_prop, 1 );
}
else
{
select_ents_by_property( level.cfx_selected_prop );
}
level.cfx_selected_prop = undefined;
}
if ( button_is_clicked( "j" ) )
{
setmenu( "jump_to_effect" );
draw_effects_list( "Select effect to jump to:" );
}
if ( button_is_clicked( "escape" ) )
{
clear_settable_fx();
}
if ( button_is_clicked( "space" ) && !shiftheld )
{
set_off_exploders();
}
if ( button_is_clicked( "space" ) && shiftheld )
{
turn_off_exploders();
}
if ( button_is_clicked( "tab", "BUTTON_RSHLDR" ) )
{
move_selection_to_cursor();
changedselectedents = 1;
}
if ( button_is_clicked( "z" ) )
{
if ( shiftheld )
{
break;
}
else
{
undo();
}
}
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" ) && !ctrlheld )
{
copy_ents();
}
if ( button_is_clicked( "BUTTON_RSTICK" ) )
{
if ( ctrlheld )
{
paste_ents_onto_ents();
break;
}
else
{
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;
}
else
{
if ( menu( "none" ) )
{
if ( button_is_clicked( "rightarrow" ) )
{
move_player_to_next_same_effect( 1, lastselectentity );
break;
}
else
{
if ( button_is_clicked( "leftarrow" ) )
{
move_player_to_next_same_effect( 0, lastselectentity );
}
}
}
if ( level.write_error != "" )
{
level notify( "write_error" );
thread write_error_msg( level.write_error );
level.write_error = "";
}
highlightedent = level.fx_highlightedent;
if ( leftclick || ( getTime() - level.createfx_last_view_change_test ) > 250 )
{
if ( !leftclick || vector_changed( level.createfx_last_player_origin, player.origin ) && dot_changed( level.createfx_last_player_forward, forward ) )
{
i = 0;
while ( i < level.createfxent.size )
{
ent = level.createfxent[ i ];
if ( !ent.drawn )
{
i++;
continue;
}
else difference = vectornormalize( ent.v[ "origin" ] - ( player.origin + vectorScale( ( 1, 1, 1 ), 55 ) ) );
newdot = vectordot( forward, difference );
if ( newdot < dot )
{
i++;
continue;
}
else if ( newdot == dot )
{
if ( ent_is_selected( ent ) )
{
i++;
continue;
}
}
else
{
dot = newdot;
highlightedent = ent;
highlightedent.last_fx_index = i;
}
i++;
}
level.fx_highlightedent = highlightedent;
level.createfx_last_player_origin = player.origin;
level.createfx_last_player_forward = forward;
}
level.createfx_last_view_change_test = getTime();
}
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();
}
}
break;
}
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();
}
while ( getDvarInt( "createfx_drawaxis" ) == 1 )
{
i = 0;
while ( i < level.selected_fx_ents.size )
{
level.selected_fx_ents[ i ] draw_axis();
i++;
}
}
if ( level.selectedrotate_pitch != 0 || level.selectedrotate_yaw != 0 && level.selectedrotate_roll != 0 )
{
changedselectedents = 1;
}
wait 0,05;
}
else
{
stop_drawing_axis_models();
selectedmove_vector = get_selected_move_vector();
if ( distancesquared( ( 1, 1, 1 ), selectedmove_vector ) > 0 )
{
changedselectedents = 1;
if ( level.cfx_last_action != "translate" )
{
store_undo_state( "edit", level.selected_fx_ents );
level.cfx_last_action = "translate";
}
}
i = 0;
while ( i < level.selected_fx_ents.size )
{
ent = level.selected_fx_ents[ i ];
if ( isDefined( ent.model ) )
{
i++;
continue;
}
else
{
ent.v[ "origin" ] += selectedmove_vector;
}
i++;
}
wait 0,05;
}
if ( changedselectedents )
{
update_selected_entities();
}
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 ];
break;
}
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 )
{
clear_fx_hudelements();
return;
}
scale = getDvarFloat( "createfx_scaleid" );
print_frames = getDvarInt( "createfx_print_frames" );
if ( !isDefined( level.createfx_manipulate_offset ) )
{
level.createfx_manipulate_offset = 0;
}
offset = level.createfx_manipulate_offset;
level.createfx_manipulate_offset = ( level.createfx_manipulate_offset + 1 ) % print_frames;
i = offset;
while ( i < level.createfxent.size )
{
ent = level.createfxent[ i ];
if ( !ent.drawn )
{
}
else if ( isDefined( highlightedent ) && ent == highlightedent )
{
}
else colorindex = "default";
if ( index_is_selected( i ) )
{
colorindex = "selected";
}
/#
print3d( ent.v[ "origin" ], ".", colors[ ent.v[ "type" ] ][ colorindex ], 1, scale, print_frames );
#/
if ( ent.textalpha > 0 )
{
printright = vectorScale( right, ( ent.v[ "fxid" ].size * -2,93 ) * scale );
printup = ( 0, 0, 15 * scale );
/#
print3d( ent.v[ "origin" ] + printright + printup, ent.v[ "fxid" ], colors[ ent.v[ "type" ] ][ colorindex ], ent.textalpha, scale, print_frames );
#/
}
i += print_frames;
}
if ( isDefined( highlightedent ) )
{
if ( !entities_are_selected() )
{
display_fx_info( highlightedent );
}
if ( leftclick )
{
entwasselected = index_is_selected( highlightedent.last_fx_index );
level.createfx_selecting = !entwasselected;
if ( !ctrlheld )
{
selectedsize = level.selected_fx_ents.size;
clear_entity_selection();
if ( entwasselected && selectedsize == 1 )
{
select_entity( highlightedent.last_fx_index, highlightedent );
}
}
toggle_entity_selection( highlightedent.last_fx_index, highlightedent );
}
else
{
if ( leftheld )
{
if ( ctrlheld )
{
if ( level.createfx_selecting )
{
select_entity( highlightedent.last_fx_index, highlightedent );
}
if ( !level.createfx_selecting )
{
deselect_entity( highlightedent.last_fx_index, highlightedent );
}
}
}
}
colorindex = "highlighted";
if ( index_is_selected( highlightedent.last_fx_index ) )
{
colorindex = "selected";
}
/#
print3d( highlightedent.v[ "origin" ], ".", colors[ highlightedent.v[ "type" ] ][ colorindex ], 1, scale, 1 );
#/
if ( highlightedent.textalpha > 0 )
{
printright = vectorScale( right, ( highlightedent.v[ "fxid" ].size * -2,93 ) * scale );
printup = ( 0, 0, 15 * scale );
/#
print3d( highlightedent.v[ "origin" ] + printright + printup, highlightedent.v[ "fxid" ], colors[ highlightedent.v[ "type" ] ][ colorindex ], highlightedent.textalpha, scale, 1 );
#/
}
}
}
clear_settable_fx()
{
level.createfx_inputlocked = 0;
setdvar( "fx", "nil" );
level.selected_fx_option_index = undefined;
reset_fx_hud_colors();
}
reset_fx_hud_colors()
{
i = 0;
while ( i < level.createfx_hudelements )
{
level.createfxhudelements[ i ][ 0 ].color = ( 1, 1, 1 );
i++;
}
}
button_is_held( name, name2 )
{
if ( isDefined( name2 ) )
{
if ( isDefined( level.buttonisheld[ name2 ] ) )
{
return 1;
}
}
return isDefined( level.buttonisheld[ name ] );
}
button_is_clicked( name, name2 )
{
if ( isDefined( name2 ) )
{
if ( isDefined( level.buttonclick[ name2 ] ) )
{
return 1;
}
}
return isDefined( level.buttonclick[ name ] );
}
toggle_entity_selection( index, ent )
{
if ( isDefined( level.selected_fx[ index ] ) )
{
deselect_entity( index, ent );
}
else
{
select_entity( index, ent );
}
}
select_entity( index, ent, skip_undo )
{
if ( isDefined( level.selected_fx[ index ] ) )
{
return;
}
ent.last_fx_index = index;
if ( !isDefined( skip_undo ) && level.cfx_last_action != "none" )
{
store_undo_state( "edit", level.selected_fx_ents );
level.cfx_last_action = "none";
}
clear_settable_fx();
level notify( "new_ent_selection" );
ent thread entity_highlight_enable();
level.selected_fx[ index ] = 1;
level.selected_fx_ents[ level.selected_fx_ents.size ] = ent;
}
ent_is_highlighted( ent )
{
if ( !isDefined( level.fx_highlightedent ) )
{
return 0;
}
return ent == level.fx_highlightedent;
}
deselect_entity( index, ent )
{
if ( !isDefined( level.selected_fx[ index ] ) )
{
return;
}
if ( level.cfx_last_action != "none" )
{
store_undo_state( "edit", level.selected_fx_ents );
level.cfx_last_action = "none";
}
clear_settable_fx();
level notify( "new_ent_selection" );
if ( !ent_is_highlighted( ent ) )
{
ent thread entity_highlight_disable();
}
newarray = [];
i = 0;
while ( i < level.selected_fx_ents.size )
{
if ( level.selected_fx_ents[ i ] != ent )
{
newarray[ newarray.size ] = level.selected_fx_ents[ i ];
}
i++;
}
level.selected_fx_ents = newarray;
}
index_is_selected( index )
{
return isDefined( level.selected_fx[ index ] );
}
ent_is_selected( ent )
{
i = 0;
while ( i < level.selected_fx_ents.size )
{
if ( level.selected_fx_ents[ i ] == ent )
{
return 1;
}
i++;
}
return 0;
}
clear_entity_selection( skip_undo )
{
if ( !isDefined( skip_undo ) && level.cfx_last_action != "none" )
{
store_undo_state( "edit", level.selected_fx_ents );
level.cfx_last_action = "none";
}
i = 0;
while ( i < level.selected_fx_ents.size )
{
if ( !ent_is_highlighted( level.selected_fx_ents[ i ] ) )
{
level.selected_fx_ents[ i ] thread entity_highlight_disable();
}
i++;
}
level.selected_fx = [];
level.selected_fx_ents = [];
}
draw_axis()
{
if ( isDefined( self.draw_axis_model ) )
{
return;
}
self.draw_axis_model = spawn_axis_model( self.v[ "origin" ], self.v[ "angles" ] );
level thread draw_axis_think( self );
if ( !isDefined( level.draw_axis_models ) )
{
level.draw_axis_models = [];
}
level.draw_axis_models[ level.draw_axis_models.size ] = self.draw_axis_model;
}
spawn_axis_model( origin, angles )
{
model = spawn( "script_model", origin );
model setmodel( "fx_axis_createfx" );
model.angles = angles;
return model;
}
draw_axis_think( axis_parent )
{
axis_model = axis_parent.draw_axis_model;
axis_model endon( "death" );
player = get_players()[ 0 ];
range = getDvarInt( "createfx_drawaxis_range" );
i = 0;
while ( 1 )
{
if ( !isDefined( axis_parent ) )
{
break;
}
else
{
if ( distancesquared( axis_model.origin, player.origin ) > ( range * range ) )
{
if ( isDefined( axis_model ) )
{
axis_model delete();
arrayremovevalue( level.draw_axis_models, undefined );
}
}
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,1;
i++;
if ( i >= 10 )
{
range = getDvarInt( "createfx_drawaxis_range" );
i = 0;
}
}
}
if ( isDefined( axis_model ) )
{
axis_model delete();
}
}
stop_drawing_axis_models()
{
if ( isDefined( level.draw_axis_models ) )
{
i = 0;
while ( i < level.draw_axis_models.size )
{
if ( isDefined( level.draw_axis_models[ i ] ) )
{
level.draw_axis_models[ i ] delete();
}
i++;
}
arrayremovevalue( level.draw_axis_models, undefined );
}
}
clear_fx_hudelements()
{
level.cfx_center_text[ level.cfx_center_text_max - 1 ] clearalltextafterhudelem();
i = 0;
while ( i < level.createfx_hudelements )
{
p = 0;
while ( p < 2 )
{
level.createfxhudelements[ i ][ p ] settext( "" );
p++;
}
i++;
}
level.fxhudelements = 0;
}
set_fx_hudelement( text )
{
if ( ismp() && !isDefined( level.createfx_delay_done ) )
{
return;
}
if ( level.fxhudelements < level.createfx_hudelements )
{
p = 0;
while ( p < 2 )
{
level.createfxhudelements[ level.fxhudelements ][ p ] settext( text );
p++;
}
level.fxhudelements++;
}
}
buttondown( button, button2 )
{
if ( !buttonpressed_internal( button ) )
{
return buttonpressed_internal( button2 );
}
}
buttonpressed_internal( button )
{
if ( !isDefined( button ) )
{
return 0;
}
if ( kb_locked( button ) )
{
return 0;
}
player = get_players()[ 0 ];
return player buttonpressed( button );
}
get_selected_move_vector()
{
player = get_players()[ 0 ];
yaw = player getplayerangles()[ 1 ];
angles = ( 0, yaw, 0 );
right = anglesToRight( angles );
forward = anglesToForward( angles );
up = anglesToUp( angles );
ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" );
if ( buttondown( "kp_uparrow", "DPAD_UP" ) )
{
if ( level.selectedmove_forward < 0 )
{
level.selectedmove_forward = 0;
}
if ( ctrlheld )
{
level.selectedmove_forward = 0,1;
wait 0,05;
}
else
{
level.selectedmove_forward += 1;
}
}
else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) )
{
if ( level.selectedmove_forward > 0 )
{
level.selectedmove_forward = 0;
}
if ( ctrlheld )
{
level.selectedmove_forward = -1 * 0,1;
wait 0,05;
}
else
{
level.selectedmove_forward -= 1;
}
}
else
{
level.selectedmove_forward = 0;
}
if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) )
{
if ( level.selectedmove_right < 0 )
{
level.selectedmove_right = 0;
}
if ( ctrlheld )
{
level.selectedmove_right = 0,1;
wait 0,05;
}
else
{
level.selectedmove_right += 1;
}
}
else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) )
{
if ( level.selectedmove_right > 0 )
{
level.selectedmove_right = 0;
}
if ( ctrlheld )
{
level.selectedmove_right = -1 * 0,1;
wait 0,05;
}
else
{
level.selectedmove_right -= 1;
}
}
else
{
level.selectedmove_right = 0;
}
if ( buttondown( "BUTTON_Y" ) )
{
if ( level.selectedmove_up < 0 )
{
level.selectedmove_up = 0;
}
if ( ctrlheld )
{
level.selectedmove_up = 0,1;
wait 0,05;
}
else
{
level.selectedmove_up += 1;
}
}
else if ( buttondown( "BUTTON_B" ) )
{
if ( level.selectedmove_up > 0 )
{
level.selectedmove_up = 0;
}
if ( ctrlheld )
{
level.selectedmove_up = -1 * 0,1;
wait 0,05;
}
else
{
level.selectedmove_up -= 1;
}
}
else
{
level.selectedmove_up = 0;
}
vector = ( 1, 1, 1 );
vector += vectorScale( forward, level.selectedmove_forward );
vector += vectorScale( right, level.selectedmove_right );
vector += vectorScale( 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( "j" );
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( "s" );
add_kb_button( "v" );
add_kb_button( "x" );
add_kb_button( "z" );
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( "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 0;
}
return kb_locked( name );
}
kb_locked( name )
{
if ( level.createfx_inputlocked )
{
return isDefined( level.button_is_kb[ name ] );
}
}
add_button( name )
{
player = get_players()[ 0 ];
if ( locked( name ) )
{
return;
}
if ( !isDefined( level.buttonisheld[ name ] ) )
{
if ( player buttonpressed( name ) )
{
level.buttonisheld[ name ] = 1;
level.buttonclick[ name ] = 1;
}
}
else
{
if ( !player buttonpressed( name ) )
{
}
}
}
add_kb_button( name )
{
level.button_is_kb[ name ] = 1;
add_button( name );
}
set_anglemod_move_vector()
{
/#
ctrlheld = button_is_held( "ctrl", "BUTTON_LSHLDR" );
players = get_players();
if ( level.is_camera_on == 1 )
{
newmovement = players[ 0 ] getnormalizedmovement();
dolly_movement = players[ 0 ] getnormalizedcameramovement();
if ( newmovement[ 1 ] <= -0,3 )
{
level.selectedrotate_yaw -= 1;
}
else if ( newmovement[ 1 ] >= 0,3 )
{
level.selectedrotate_yaw += 1;
}
else if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) )
{
if ( level.selectedrotate_yaw < 0 )
{
level.selectedrotate_yaw = 0;
}
level.selectedrotate_yaw += 0,1;
}
else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) )
{
if ( level.selectedrotate_yaw > 0 )
{
level.selectedrotate_yaw = 0;
}
level.selectedrotate_yaw -= 0,1;
}
else
{
level.selectedrotate_yaw = 0;
}
if ( dolly_movement[ 0 ] <= -0,2 )
{
level.selectedrotate_pitch += 1;
}
else if ( dolly_movement[ 0 ] >= 0,2 )
{
level.selectedrotate_pitch -= 1;
}
else if ( buttondown( "kp_uparrow", "DPAD_UP" ) )
{
if ( level.selectedrotate_pitch < 0 )
{
level.selectedrotate_pitch = 0;
}
level.selectedrotate_pitch += 0,1;
}
else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) )
{
if ( level.selectedrotate_pitch > 0 )
{
level.selectedrotate_pitch = 0;
}
level.selectedrotate_pitch -= 0,1;
}
else
{
level.selectedrotate_pitch = 0;
}
if ( buttondown( "BUTTON_Y" ) )
{
if ( level.selectedrotate_roll < 0 )
{
level.selectedrotate_roll = 0;
}
level.selectedrotate_roll += 0,1;
}
else if ( buttondown( "BUTTON_B" ) )
{
if ( level.selectedrotate_roll > 0 )
{
level.selectedrotate_roll = 0;
}
level.selectedrotate_roll -= 0,1;
}
else
{
level.selectedrotate_roll = 0;
}
}
else if ( buttondown( "kp_uparrow", "DPAD_UP" ) )
{
if ( level.selectedrotate_pitch < 0 )
{
level.selectedrotate_pitch = 0;
}
if ( ctrlheld )
{
level.selectedrotate_pitch = 0,1;
wait 0,05;
}
else
{
level.selectedrotate_pitch += 1;
}
}
else if ( buttondown( "kp_downarrow", "DPAD_DOWN" ) )
{
if ( level.selectedrotate_pitch > 0 )
{
level.selectedrotate_pitch = 0;
}
if ( ctrlheld )
{
level.selectedrotate_pitch = -1 * 0,1;
wait 0,05;
}
else
{
level.selectedrotate_pitch -= 1;
}
}
else
{
level.selectedrotate_pitch = 0;
}
if ( buttondown( "kp_leftarrow", "DPAD_LEFT" ) )
{
if ( level.selectedrotate_yaw < 0 )
{
level.selectedrotate_yaw = 0;
}
if ( ctrlheld )
{
level.selectedrotate_yaw = 0,1;
wait 0,05;
}
else
{
level.selectedrotate_yaw += 1;
}
}
else if ( buttondown( "kp_rightarrow", "DPAD_RIGHT" ) )
{
if ( level.selectedrotate_yaw > 0 )
{
level.selectedrotate_yaw = 0;
}
if ( ctrlheld )
{
level.selectedrotate_yaw = -1 * 0,1;
wait 0,05;
}
else
{
level.selectedrotate_yaw -= 1;
}
}
else
{
level.selectedrotate_yaw = 0;
}
if ( buttondown( "BUTTON_Y" ) )
{
if ( level.selectedrotate_roll < 0 )
{
level.selectedrotate_roll = 0;
}
if ( ctrlheld )
{
level.selectedrotate_roll = 0,1;
wait 0,05;
}
else
{
level.selectedrotate_roll += 1;
}
}
else if ( buttondown( "BUTTON_B" ) )
{
if ( level.selectedrotate_roll > 0 )
{
level.selectedrotate_roll = 0;
}
if ( ctrlheld )
{
level.selectedrotate_roll = -1 * 0,1;
wait 0,05;
}
else
{
level.selectedrotate_roll -= 1;
}
}
else
{
level.selectedrotate_roll = 0;
#/
}
}
cfxprintln( file, string )
{
/#
if ( file == -1 )
{
return;
}
fprintln( file, string );
#/
}
update_save_bar( number )
{
level notify( "saving_start" );
level endon( "saving_start" );
level.current_saving_number = 0;
while ( level.current_saving_number < level.createfxent.size )
{
center_text_clear();
center_text_add( "Saving Createfx to File" );
center_text_add( "Saving effect " + level.current_saving_number + "/" + level.createfxent.size );
center_text_add( "Do not reset Xenon until saving is complete." );
wait 0,05;
center_text_clear();
}
center_text_add( "Saving Complete." );
center_text_add( level.createfxent.size + " effects saved to files." );
}
generate_fx_log( type, autosave )
{
/#
autosave = isDefined( autosave );
if ( type == "server" )
{
if ( !autosave )
{
filename = level.cfx_server_scriptdata + level.script + "_fx.gsc";
}
else
{
filename = level.cfx_server_scriptdata + "backup.gsc";
}
call_loop = level.cfx_server_loop;
call_oneshot = level.cfx_server_oneshot;
call_exploder = level.cfx_server_exploder;
call_loopsound = level.cfx_server_loopsound;
}
else if ( type == "client" )
{
if ( !autosave )
{
filename = level.cfx_client_scriptdata + level.script + "_fx.csc";
}
else
{
filename = level.cfx_client_scriptdata + "backup.csc";
}
call_loop = level.cfx_client_loop;
call_oneshot = level.cfx_client_oneshot;
call_exploder = level.cfx_client_exploder;
call_loopsound = level.cfx_client_loopsound;
}
else
{
println( "^1Error: Improper type in generate_fx_log()" );
return;
}
file = openfile( filename, "write" );
if ( file == -1 )
{
level.write_error = filename;
if ( type == "server" )
{
return 1;
}
else
{
if ( type == "client" )
{
return 2;
}
else
{
return 3;
}
}
}
else
{
cfxprintln( file, "//_createfx generated. Do not touch!!" );
cfxprintln( file, "main()" );
cfxprintln( file, "{" );
p = 0;
while ( p < level.createfxent.size )
{
ent = level.createfxent[ p ];
origin = [];
angles = [];
i = 0;
while ( i < 3 )
{
origin[ i ] = ent.v[ "origin" ][ i ];
angles[ i ] = ent.v[ "angles" ][ i ];
if ( origin[ i ] < 0,1 && origin[ i ] > ( 0,1 * -1 ) )
{
origin[ i ] = 0;
}
if ( angles[ i ] < 0,1 && angles[ i ] > ( 0,1 * -1 ) )
{
angles[ i ] = 0;
}
i++;
}
ent.v[ "origin" ] = ( origin[ 0 ], origin[ 1 ], origin[ 2 ] );
ent.v[ "angles" ] = ( angles[ 0 ], angles[ 1 ], angles[ 2 ] );
p++;
}
if ( !autosave )
{
println( " *** CREATING EFFECT, COPY THESE LINES TO ", level.script, "_fx.gsc *** " );
}
cfxprintln( file, "// CreateFX entities placed: " + ( level.createfxent.size - level.non_fx_ents ) );
breather = 0;
if ( autosave )
{
breather_pause = 1;
}
else
{
breather_pause = 5;
}
i = 0;
while ( i < level.createfxent.size )
{
e = level.createfxent[ i ];
assert( isDefined( e.v[ "type" ] ), "effect at origin " + e.v[ "origin" ] + " has no type" );
if ( isDefined( e.model ) )
{
i++;
continue;
}
else if ( e.v[ "fxid" ] == "No FX" )
{
i++;
continue;
}
else
{
output_name = "\t";
output_props = "\t";
ent_type = e.v[ "type" ];
if ( ent_type == "loopfx" )
{
output_name += "ent = " + call_loop + "( "" + e.v[ "fxid" ] + "" );";
}
if ( ent_type == "oneshotfx" )
{
output_name += "ent = " + call_oneshot + "( "" + e.v[ "fxid" ] + "" );";
}
if ( ent_type == "exploder" )
{
output_name += "ent = " + call_exploder + "( "" + e.v[ "fxid" ] + "" );";
}
if ( ent_type == "soundfx" )
{
output_name += "ent = " + call_loopsound + "();";
}
output_props += get_fx_options( e );
cfxprintln( file, output_name );
cfxprintln( file, output_props );
cfxprintln( file, "\t" );
breather++;
if ( breather >= breather_pause )
{
wait 0,05;
breather = 0;
}
}
i++;
}
if ( level.bscriptgened )
{
script_gen_dump_addline( level.cfx_server_scriptgendump, level.script + "_fx" );
[[ level.cfx_func_script_gen_dump ]]();
}
cfxprintln( file, "}" );
saved = closefile( file );
assert( saved == 1, "File not saved (see above message?): " + filename );
println( "CreateFX entities placed: " + ( level.createfxent.size - level.non_fx_ents ) );
return 0;
#/
}
}
get_fx_options( ent )
{
output_props = "";
i = 0;
while ( i < level.createfx_options.size )
{
option = level.createfx_options[ i ];
if ( !isDefined( ent.v[ option[ "name" ] ] ) )
{
i++;
continue;
}
else if ( !mask( option[ "mask" ], ent.v[ "type" ] ) )
{
i++;
continue;
}
else if ( option[ "type" ] == "string" )
{
if ( option[ "name" ] == "fxid" )
{
i++;
continue;
}
else output_props += "ent.v[ "" + option[ "name" ] + "" ] = "" + ent.v[ option[ "name" ] ] + ""; ";
i++;
continue;
}
else
{
output_props += "ent.v[ "" + option[ "name" ] + "" ] = " + ent.v[ option[ "name" ] ] + "; ";
}
i++;
}
return output_props;
}
entity_highlight_disable()
{
self notify( "highlight change" );
self endon( "highlight change" );
for ( ;; )
{
self.textalpha -= 0,05;
if ( self.textalpha < 0,4 )
{
break;
}
else
{
wait 0,05;
}
}
self.textalpha = 0,4;
}
entity_highlight_enable()
{
self notify( "highlight change" );
self endon( "highlight change" );
for ( ;; )
{
self.textalpha += 0,05;
if ( self.textalpha > 1 )
{
break;
}
else
{
wait 0,05;
}
}
self.textalpha = 1;
}
get_center_of_array( array )
{
center = ( 1, 1, 1 );
i = 0;
while ( i < array.size )
{
center = ( center[ 0 ] + array[ i ].v[ "origin" ][ 0 ], center[ 1 ] + array[ i ].v[ "origin" ][ 1 ], center[ 2 ] + array[ i ].v[ "origin" ][ 2 ] );
i++;
}
return ( center[ 0 ] / array.size, center[ 1 ] / array.size, center[ 2 ] / array.size );
}
rotation_is_occuring()
{
if ( level.selectedrotate_roll != 0 )
{
return 1;
}
if ( level.selectedrotate_pitch != 0 )
{
return 1;
}
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 = 1;
if ( level.cfx_last_action != "rotate" )
{
store_undo_state( "edit", level.selected_fx_ents );
level.cfx_last_action = "rotate";
}
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 = [];
i = 0;
while ( i < level.selected_fx_ents.size )
{
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 );
i++;
}
rotate_over_time( org, rotater );
org delete();
i = 0;
while ( i < rotater.size )
{
rotater[ i ] delete();
i++;
}
}
else if ( level.selected_fx_ents.size == 1 )
{
ent = level.selected_fx_ents[ 0 ];
rotater = spawn( "script_origin", ( 1, 1, 1 ) );
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 = 0;
}
rotate_over_time( org, rotater )
{
level endon( "new_ent_selection" );
p = 0;
while ( p < 2 )
{
if ( level.selectedrotate_pitch != 0 )
{
org devaddpitch( level.selectedrotate_pitch );
}
else if ( level.selectedrotate_yaw != 0 )
{
org devaddyaw( level.selectedrotate_yaw );
}
else
{
org devaddroll( level.selectedrotate_roll );
}
wait 0,05;
i = 0;
while ( i < level.selected_fx_ents.size )
{
ent = level.selected_fx_ents[ i ];
if ( isDefined( ent.model ) )
{
i++;
continue;
}
else
{
ent.v[ "origin" ] = rotater[ i ].origin;
ent.v[ "angles" ] = rotater[ i ].angles;
}
i++;
}
p++;
}
}
delete_pressed()
{
if ( level.createfx_inputlocked )
{
remove_selected_option();
return;
}
delete_selection();
}
remove_selected_option()
{
if ( !isDefined( level.selected_fx_option_index ) )
{
return;
}
name = level.createfx_options[ level.selected_fx_option_index ][ "name" ];
i = 0;
while ( i < level.createfxent.size )
{
ent = level.createfxent[ i ];
if ( !ent_is_selected( ent ) )
{
i++;
continue;
}
else
{
ent remove_option( name );
}
i++;
}
update_selected_entities();
clear_settable_fx();
}
remove_option( name )
{
}
delete_selection()
{
newarray = [];
if ( level.selected_fx_ents.size < 1 )
{
return;
}
store_undo_state( "delete", level.selected_fx_ents );
level.cfx_last_action = "none";
i = 0;
while ( i < level.createfxent.size )
{
ent = level.createfxent[ i ];
if ( ent_is_selected( ent ) )
{
if ( isDefined( ent.looper ) )
{
ent.looper delete();
}
level.fx_highlightedent = undefined;
ent notify( "stop_loop" );
i++;
continue;
}
else
{
newarray[ newarray.size ] = ent;
}
i++;
}
level.createfxent = newarray;
level.selected_fx = [];
level.selected_fx_ents = [];
clear_fx_hudelements();
}
move_selection_to_cursor( skip_undo )
{
origin = level.createfxcursor[ "position" ];
if ( level.selected_fx_ents.size <= 0 )
{
return;
}
if ( !isDefined( skip_undo ) && level.cfx_last_action != "move_to_cursor" )
{
store_undo_state( "edit", level.selected_fx_ents );
level.cfx_last_action = "move_to_cursor";
}
center = get_center_of_array( level.selected_fx_ents );
difference = center - origin;
i = 0;
while ( i < level.selected_fx_ents.size )
{
ent = level.selected_fx_ents[ i ];
if ( isDefined( ent.model ) )
{
i++;
continue;
}
else
{
ent.v[ "origin" ] -= difference;
}
i++;
}
}
insert_effect()
{
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 fx" );
set_fx_hudelement( "3. Exploder" );
set_fx_hudelement( "4. Looping sound" );
set_fx_hudelement( "(c) Cancel" );
set_fx_hudelement( "(x) Exit" );
}
show_help()
{
clear_fx_hudelements();
set_fx_hudelement( "Help:" );
set_fx_hudelement( "I Insert effect" );
set_fx_hudelement( "Shift + D Delete selected effects" );
set_fx_hudelement( "F + 5 Save" );
set_fx_hudelement( "A button Toggle the selection of the current effect" );
set_fx_hudelement( "X button Toggle effect rotation mode" );
set_fx_hudelement( "Y button Move selected effects up or rotate X axis" );
set_fx_hudelement( "B button Move selected effects down or rotate X axis" );
set_fx_hudelement( "D-pad Up/Down Move selected effects Forward/Backward or rotate Y axis" );
set_fx_hudelement( "D-pad Left/Right Move selected effects Left/Right or rotate Z axis" );
set_fx_hudelement( "R Shoulder Move selected effects to the cursor" );
set_fx_hudelement( "L Shoulder Hold to select multiple effects" );
set_fx_hudelement( "Right Arrow Next page in options menu" );
set_fx_hudelement( "Left Arrow Previous page in options menu" );
set_fx_hudelement( "A Add option to the selected effects" );
set_fx_hudelement( "X Exit effect options menu" );
set_fx_hudelement( "Shift + D Drop selected effects to the ground" );
set_fx_hudelement( "R Reset the rotation of the selected effects" );
set_fx_hudelement( "L Stick Copy effects" );
set_fx_hudelement( "R Stick Paste effects" );
set_fx_hudelement( "V Copy the angles from the most recently selected fx onto all selected fx." );
set_fx_hudelement( "F + 2 Toggle CreateFX dot and menu drawing" );
set_fx_hudelement( "U UFO" );
set_fx_hudelement( "N Noclip" );
set_fx_hudelement( "R Trig + L Trig Jump forward 8000 units" );
set_fx_hudelement( "T Toggle Timescale FAST" );
set_fx_hudelement( "Y Toggle Timescale SLOW" );
set_fx_hudelement( "H Toggle FX Visibility" );
set_fx_hudelement( "W Toggle effect wireframe" );
set_fx_hudelement( "P Toggle FX Profile" );
}
center_text_init()
{
level.cfx_center_text = [];
level.cfx_center_text_index = 0;
level.cfx_center_text_max = 3;
new_array = [];
p = 0;
while ( p < level.cfx_center_text_max )
{
center_hud = newdebughudelem();
center_hud settext( " " );
center_hud.horzalign = "center";
center_hud.vertalign = "middle";
center_hud.alignx = "center";
center_hud.aligny = "middle";
center_hud.foreground = 1;
center_hud.fontscale = 1,1;
center_hud.sort = 21;
center_hud.alpha = 1;
center_hud.color = ( 1, 1, 1 );
center_hud.y = p * 25;
new_array[ p ] = center_hud;
p++;
}
level.cfx_center_text = new_array;
}
center_text_add( text )
{
if ( isDefined( text ) && isDefined( level.cfx_center_text ) )
{
level.cfx_center_text[ level.cfx_center_text_index ] settext( text );
level.cfx_center_text_index++;
if ( level.cfx_center_text_index >= level.cfx_center_text_max )
{
level.cfx_center_text_index = level.cfx_center_text_max - 1;
}
}
}
center_text_clear()
{
p = 0;
while ( p < level.cfx_center_text_max )
{
level.cfx_center_text[ p ] settext( " " );
p++;
}
level.cfx_center_text_index = 0;
}
write_error_msg( filename )
{
level notify( "write_error" );
level endon( "write_error" );
while ( isDefined( filename ) )
{
center_text_clear();
center_text_add( "File " + filename + " is not writeable." );
center_text_add( "If it's checked out, restart your computer!" );
center_text_add( "Hold the A Button to dismiss." );
for ( ;; )
{
player = get_players()[ 0 ];
if ( player buttonpressed( "BUTTON_A" ) )
{
center_text_clear();
level.write_error = "";
return;
}
else
{
wait 0,25;
}
}
}
}
select_last_entity( skip_undo )
{
select_entity( level.createfxent.size - 1, level.createfxent[ level.createfxent.size - 1 ], skip_undo );
}
post_entity_creation_function()
{
self.textalpha = 0;
self.drawn = 1;
}
copy_ents()
{
if ( level.selected_fx_ents.size <= 0 )
{
return;
}
array = [];
i = 0;
while ( i < level.selected_fx_ents.size )
{
ent = level.selected_fx_ents[ i ];
newent = spawnstruct();
newent.v = ent.v;
newent post_entity_creation_function();
array[ array.size ] = newent;
i++;
}
level.stored_ents = array;
}
paste_ents()
{
delay_min = getDvarInt( "createfx_oneshot_min_delay" );
delay_max = getDvarInt( "createfx_oneshot_max_delay" );
if ( delay_min > delay_max )
{
temp = delay_min;
delay_min = delay_max;
delay_max = temp;
}
if ( !isDefined( level.stored_ents ) )
{
return;
}
clear_entity_selection();
if ( level.cfx_last_action != "none" )
{
store_undo_state( "edit", level.selected_fx_ents );
}
level.cfx_last_action = "none";
i = 0;
while ( i < level.stored_ents.size )
{
level.stored_ents[ i ].uniqueid = level.cfx_uniqueid;
level.cfx_uniqueid++;
if ( level.stored_ents[ i ].v[ "type" ] == "oneshotfx" )
{
level.stored_ents[ i ].v[ "delay" ] = randomintrange( delay_min, delay_max );
}
add_and_select_entity( level.stored_ents[ i ], "skip_undo" );
i++;
}
move_selection_to_cursor( "skip_undo" );
update_selected_entities();
store_undo_state( "add", level.stored_ents );
level.stored_ents = [];
copy_ents();
}
paste_ents_onto_ents()
{
if ( !isDefined( level.stored_ents ) || !isDefined( level.selected_fx_ents ) )
{
return;
}
if ( level.stored_ents.size < 1 || level.selected_fx_ents.size < 1 )
{
return;
}
if ( level.stored_ents.size != level.selected_fx_ents.size )
{
/#
println( "^2CreateFX: Number of source ents must match the number of destination ents for Paste Into to work." );
#/
return;
}
if ( level.cfx_last_action != "none" )
{
store_undo_state( "edit", level.selected_fx_ents );
}
level.cfx_last_action = "none";
selected_ents_temp = level.selected_fx_ents;
i = 0;
while ( i < level.stored_ents.size )
{
source_ent = level.stored_ents[ i ];
target_ent = level.selected_fx_ents[ i ];
source_ent.uniqueid = level.cfx_uniqueid;
level.cfx_uniqueid++;
source_ent.v[ "angles" ] = target_ent.v[ "angles" ];
source_ent.v[ "origin" ] = target_ent.v[ "origin" ];
add_and_select_entity( source_ent, "skip_undo" );
i++;
}
i = 0;
while ( i < selected_ents_temp.size )
{
deselect_entity( selected_ents_temp[ i ].last_fx_index, selected_ents_temp[ i ] );
i++;
}
update_selected_entities();
store_undo_state( "add", level.stored_ents );
level.stored_ents = [];
copy_ents();
}
add_and_select_entity( ent, skip_undo )
{
level.createfxent[ level.createfxent.size ] = ent;
select_last_entity( skip_undo );
}
stop_fx_looper()
{
if ( isDefined( self.looper ) )
{
self.looper delete();
}
self [[ level.cfx_func_stop_loopsound ]]();
}
restart_fx_looper()
{
stop_fx_looper();
self set_forward_and_up_vectors();
if ( self.v[ "type" ] == "loopfx" )
{
self [[ level.cfx_func_create_looper ]]();
}
if ( self.v[ "type" ] == "oneshotfx" )
{
self [[ level.cfx_func_create_triggerfx ]]();
}
if ( self.v[ "type" ] == "soundfx" )
{
self [[ level.cfx_func_create_loopsound ]]();
}
}
update_selected_entities()
{
i = 0;
while ( i < level.selected_fx_ents.size )
{
ent = level.selected_fx_ents[ i ];
ent restart_fx_looper();
i++;
}
}
copy_angles_of_selected_ents()
{
level notify( "new_ent_selection" );
if ( level.cfx_last_action != "copy_angles" )
{
store_undo_state( "edit", level.selected_fx_ents );
level.cfx_last_action = "copy_angles";
}
i = 0;
while ( i < level.selected_fx_ents.size )
{
ent = level.selected_fx_ents[ i ];
ent.v[ "angles" ] = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ].v[ "angles" ];
ent set_forward_and_up_vectors();
i++;
}
update_selected_entities();
}
reset_axis_of_selected_ents()
{
level notify( "new_ent_selection" );
if ( level.cfx_last_action != "reset_axis" )
{
store_undo_state( "edit", level.selected_fx_ents );
level.cfx_last_action = "reset_axis";
}
i = 0;
while ( i < level.selected_fx_ents.size )
{
ent = level.selected_fx_ents[ i ];
ent.v[ "angles" ] = ( 1, 1, 1 );
ent set_forward_and_up_vectors();
i++;
}
update_selected_entities();
}
last_selected_entity_has_changed( lastselectentity )
{
if ( isDefined( lastselectentity ) )
{
if ( !entities_are_selected() )
{
return 1;
}
}
else
{
return entities_are_selected();
}
return lastselectentity != level.selected_fx_ents[ level.selected_fx_ents.size - 1 ];
}
createfx_showorigin( id, org, delay, org2, type, exploder, id2, firefx, firefxdelay, firefxsound, fxsound, fxquake, fxdamage, soundalias, repeat, delay_min, delay_max, damage_radius, firefxtimeout )
{
}
drop_selection_to_ground()
{
if ( level.cfx_last_action != "drop_to_ground" )
{
store_undo_state( "edit", level.selected_fx_ents );
level.cfx_last_action = "drop_to_ground";
}
i = 0;
while ( i < level.selected_fx_ents.size )
{
ent = level.selected_fx_ents[ i ];
trace = bullettrace( ent.v[ "origin" ], ent.v[ "origin" ] + vectorScale( ( 1, 1, 1 ), 2048 ), 0, undefined );
ent.v[ "origin" ] = trace[ "position" ];
i++;
}
}
set_off_exploders()
{
level notify( "createfx_exploder_reset" );
exploders = [];
i = 0;
while ( i < level.selected_fx_ents.size )
{
ent = level.selected_fx_ents[ i ];
if ( isDefined( ent.v[ "exploder" ] ) )
{
exploders[ ent.v[ "exploder" ] ] = 1;
}
i++;
}
keys = getarraykeys( exploders );
i = 0;
while ( i < keys.size )
{
exploder( keys[ i ] );
i++;
}
}
turn_off_exploders()
{
level notify( "createfx_exploder_reset" );
exploders = [];
i = 0;
while ( i < level.selected_fx_ents.size )
{
ent = level.selected_fx_ents[ i ];
if ( isDefined( ent.v[ "exploder" ] ) )
{
exploders[ ent.v[ "exploder" ] ] = 1;
}
i++;
}
keys = getarraykeys( exploders );
i = 0;
while ( i < keys.size )
{
stop_exploder( keys[ i ] );
i++;
}
}
draw_distance()
{
count = 0;
last_pos = ( 1, 1, 1 );
if ( getDvarInt( "createfx_drawdist" ) == 0 )
{
setdvar( "createfx_drawdist", "1500" );
}
player = get_players()[ 0 ];
for ( ;; )
{
maxdist = getDvarInt( "createfx_drawdist" );
maxdistsqr = maxdist * maxdist;
/#
if ( flag( "createfx_saving" ) )
{
println( "Waiting for createfx to save..." );
#/
}
flag_waitopen( "createfx_saving" );
i = 0;
while ( i < level.createfxent.size )
{
ent = level.createfxent[ i ];
if ( ent_is_selected( ent ) )
{
ent.drawn = 1;
count++;
continue;
}
else
{
ent.drawn = distancesquared( player.origin, ent.v[ "origin" ] ) <= maxdistsqr;
}
count++;
if ( count > 50 )
{
count = 0;
wait 0,05;
}
i++;
}
wait 0,1;
while ( distancesquared( player.origin, last_pos ) < 2500 )
{
wait 0,1;
}
last_pos = player.origin;
}
}
createfx_save( autosave )
{
flag_waitopen( "createfx_saving" );
flag_set( "createfx_saving" );
resettimeout();
if ( isDefined( autosave ) )
{
savemode = "AUTOSAVE";
}
else
{
savemode = "USER SAVE";
}
type = "server";
old_time = getTime();
/#
println( "\n^3#### CREATEFX SERVER " + savemode + " BEGIN ####" );
#/
file_error = generate_fx_log( type, autosave );
/#
println( ( "^3#### CREATEFX SERVER " + savemode + " END (Time: " ) + ( ( getTime() - old_time ) * 0,001 ) + " seconds)####" );
#/
if ( file_error )
{
/#
println( "^3#### CREATEFX " + savemode + " CANCELLED ####" );
#/
createfx_emergency_backup();
}
else
{
if ( level.clientscripts && !isDefined( autosave ) )
{
old_time = getTime();
/#
println( "\n^3#### CREATEFX CLIENT " + savemode + " BEGIN ####" );
#/
file_error = generate_fx_log( "client" );
/#
println( ( "^3#### CREATEFX CLIENT " + savemode + " END (Time: " ) + ( ( getTime() - old_time ) * 0,001 ) + " seconds)####" );
#/
if ( file_error )
{
/#
iprintln( "CreateFX clientscript file is not writeable! Aborting save." );
#/
/#
println( "^3#### CREATEFX " + savemode + " CANCELLED ####" );
#/
return;
}
}
flag_clear( "createfx_saving" );
}
}
createfx_autosave()
{
for ( ;; )
{
wait_time = getDvarInt( "createfx_autosave_time" );
if ( wait_time < 120 || isstring( wait_time ) )
{
wait_time = 120;
}
wait wait_time;
if ( !flag( "createfx_saving" ) )
{
createfx_save( 1 );
}
}
}
createfx_emergency_backup()
{
/#
println( "^5#### CREATEFX EMERGENCY BACKUP BEGIN ####" );
#/
file_error = generate_fx_log( "server", 1 );
if ( file_error )
{
/#
iprintln( "Error saving to backup.gsc. All is lost!" );
#/
}
else
{
/#
println( "^5#### CREATEFX EMERGENCY BACKUP END ####" );
#/
}
flag_clear( "createfx_saving" );
}
move_player_around_map_fast()
{
player = get_players()[ 0 ];
direction = player getplayerangles();
direction_vec = anglesToForward( direction );
eye = player geteye();
trace = bullettrace( eye, eye + vectorScale( direction_vec, 20000 ), 0, undefined );
dist = distance( eye, trace[ "position" ] );
position = eye + vectorScale( direction_vec, dist - 64 );
player setorigin( position );
}
move_player_to_next_same_effect( forward_search, lastselectentity )
{
player = get_players()[ 0 ];
direction = player getplayerangles();
direction_vec = anglesToForward( direction );
if ( !isDefined( forward_search ) )
{
forward_search = 1;
}
ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ];
start_index = 0;
if ( level.selected_fx_ents.size <= 0 )
{
if ( forward_search )
{
ent = level.cfx_next_ent;
}
else
{
ent = level.cfx_previous_ent;
}
if ( isDefined( ent ) )
{
index = get_ent_index( ent );
if ( index >= 0 )
{
select_entity( index, ent );
position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 );
player setorigin( position );
level.cfx_previous_ent = ent;
level.cfx_next_ent = get_next_ent_with_same_id( index, ent.v[ "fxid" ] );
}
else if ( forward_search )
{
level.cfx_next_ent = undefined;
}
else
{
level.cfx_previous_ent = undefined;
}
}
return;
}
if ( level.selected_fx_ents.size == 1 )
{
i = 0;
while ( i < level.createfxent.size )
{
if ( isDefined( level.selected_fx[ i ] ) )
{
start_index = i;
deselect_entity( i, ent );
break;
}
else
{
i++;
}
}
if ( forward_search )
{
level.cfx_previous_ent = ent;
ent = get_next_ent_with_same_id( i, ent.v[ "fxid" ] );
select_entity( level.ent_found_index, ent );
position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 );
player setorigin( position );
level.cfx_next_ent = get_next_ent_with_same_id( level.ent_found_index, ent.v[ "fxid" ] );
return;
}
else
{
level.cfx_next_ent = ent;
ent = get_previous_ent_with_same_id( i, ent.v[ "fxid" ] );
select_entity( level.ent_found_index, ent );
position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 );
player setorigin( position );
level.cfx_previous_ent = get_previous_ent_with_same_id( level.ent_found_index, ent.v[ "fxid" ] );
return;
}
}
else
{
if ( isDefined( level.last_ent_moved_to ) && !last_selected_entity_has_changed( lastselectentity ) )
{
ent = level.last_ent_moved_to;
}
i = 0;
while ( i < level.selected_fx_ents.size )
{
if ( ent == level.selected_fx_ents[ i ] )
{
break;
}
else
{
i++;
}
}
if ( forward_search )
{
if ( i < ( level.selected_fx_ents.size - 1 ) )
{
i++;
ent = level.selected_fx_ents[ i ];
}
else
{
ent = level.selected_fx_ents[ 0 ];
}
}
else if ( i > 0 )
{
ent = level.selected_fx_ents[ i - 1 ];
}
else
{
ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ];
}
level.last_ent_moved_to = ent;
position = ent.v[ "origin" ] - vectorScale( direction_vec, 175 );
player setorigin( position );
}
}
get_next_ent_with_same_id( index, ent_id )
{
i = index + 1;
while ( i < level.createfxent.size )
{
if ( ent_id == level.createfxent[ i ].v[ "fxid" ] )
{
level.ent_found_index = i;
return level.createfxent[ i ];
}
i++;
}
i = 0;
while ( i < index )
{
if ( ent_id == level.createfxent[ i ].v[ "fxid" ] )
{
level.ent_found_index = i;
return level.createfxent[ i ];
}
i++;
}
level.ent_found_index = index;
return level.createfxent[ index ];
}
get_previous_ent_with_same_id( index, ent_id )
{
i = index - 1;
while ( i > 0 )
{
if ( ent_id == level.createfxent[ i ].v[ "fxid" ] )
{
level.ent_found_index = i;
return level.createfxent[ i ];
}
i--;
}
i = level.createfxent.size - 1;
while ( i > index )
{
if ( ent_id == level.createfxent[ i ].v[ "fxid" ] )
{
level.ent_found_index = i;
return level.createfxent[ i ];
}
i--;
}
level.ent_found_index = index;
return level.createfxent[ index ];
}
get_ent_index( ent )
{
i = 0;
while ( i < level.createfxent.size )
{
if ( ent == level.createfxent[ i ] )
{
return i;
}
i++;
}
return -1;
}
select_ents_by_property( property, add_to_selection )
{
ent = level.selected_fx_ents[ level.selected_fx_ents.size - 1 ];
prop_to_match = ent.v[ property ];
if ( !isDefined( add_to_selection ) )
{
clear_entity_selection();
}
i = 0;
while ( i < level.createfxent.size )
{
if ( isDefined( level.createfxent[ i ].v[ property ] ) )
{
if ( level.createfxent[ i ].v[ property ] == prop_to_match )
{
select_entity( i, level.createfxent[ i ] );
}
}
i++;
}
}
print_ambient_fx_inventory()
{
/#
fx_list = get_level_ambient_fx();
ent_list = [];
fx_list_count = [];
println( "\n\n^2INVENTORY OF AMBIENT EFFECTS: " );
i = 0;
while ( i < level.createfxent.size )
{
ent_list[ i ] = level.createfxent[ i ].v[ "fxid" ];
i++;
}
i = 0;
while ( i < fx_list.size )
{
count = 0;
j = 0;
while ( j < ent_list.size )
{
if ( fx_list[ i ] == ent_list[ j ] )
{
count++;
ent_list[ j ] = "";
}
j++;
}
fx_list_count[ i ] = count;
i++;
}
i = 0;
while ( i < ( fx_list_count.size - 1 ) )
{
j = i + 1;
while ( j < fx_list_count.size )
{
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;
}
j++;
}
i++;
}
i = 0;
while ( i < fx_list_count.size )
{
switch( fx_list_count[ i ] )
{
case 0:
print( "^1" );
break;
case 1:
print( "^3" );
break;
default:
}
print( fx_list_count[ i ] + "\t" + fx_list[ i ] + "\n" );
i++;
}
print( "\n" );
#/
}
}
vector_changed( old, new )
{
if ( distancesquared( old, new ) >= 1 )
{
return 1;
}
return 0;
}
dot_changed( old, new )
{
dot = vectordot( old, new );
if ( dot < 1 )
{
return 1;
}
return 0;
}
damage_void( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, timeoffset, boneindex )
{
}
handle_camera()
{
/#
level notify( "new_camera" );
level endon( "new_camera" );
movement = ( 1, 1, 1 );
if ( !isDefined( level.camera ) )
{
level.camera = spawn( "script_origin", ( 1, 1, 1 ) );
level.camera setmodel( "tag_origin" );
}
players = get_players();
players[ 0 ] playerlinktodelta( level.camera, "tag_origin", 1, 0, 0, 0, 0, 1 );
players[ 0 ] disableweapons();
level.camera_snapto = 1;
level.stick_camera = 1;
level.camera_prev_snapto = 0;
level.cameravec = ( 90, 150, 20 );
model = undefined;
n_y_vector = 0;
n_x_vector = 0;
zoom_level = 300;
b_changes_x = 0;
b_changes_z = 0;
b_changes_y = 0;
test_string = "";
for ( ;; )
{
while ( 1 )
{
if ( level.camera_snapto > 0 )
{
if ( level.stick_camera )
{
originoffset = vectorScale( level.cameravec, -1 );
temp_offset = originoffset + vectorScale( ( 1, 1, 1 ), 60 );
anglesoffset = vectorToAngle( temp_offset );
if ( level.camera_prev_snapto == level.camera_snapto )
{
players = get_players();
newmovement = players[ 0 ] getnormalizedmovement();
dolly_movement = players[ 0 ] getnormalizedcameramovement();
if ( button_is_held( "BUTTON_LTRIG" ) || button_is_held( "BUTTON_RTRIG" ) )
{
}
else
{
if ( newmovement[ 1 ] <= -0,4 )
{
n_y_vector += -0,2;
b_changes_y = 1;
}
else if ( newmovement[ 1 ] >= 0,4 )
{
n_y_vector += 0,2;
b_changes_y = 1;
}
else
{
b_changes_y = 0;
}
if ( newmovement[ 0 ] <= -0,4 )
{
n_x_vector += -0,4;
b_changes_x = 1;
}
else if ( newmovement[ 0 ] >= 0,4 )
{
n_x_vector += 0,4;
b_changes_x = 1;
}
else
{
b_changes_x = 0;
}
if ( dolly_movement[ 0 ] <= -0,4 )
{
zoom_level += 30;
b_changes_z = 1;
}
else if ( dolly_movement[ 0 ] >= 0,4 )
{
zoom_level += -30;
b_changes_z = 1;
}
else
{
b_changes_z = 0;
}
if ( !b_changes_z || b_changes_x && b_changes_y )
{
newmovement = ( n_x_vector, n_y_vector, newmovement[ 2 ] );
movement = ( 1, 1, 1 );
movement = vectorScale( movement, 0,8 ) + vectorScale( newmovement, 1 - 0,8 );
tilt = max( 0, 10 + ( movement[ 0 ] * 160 ) );
level.cameravec = ( cos( movement[ 1 ] * 180 ) * zoom_level, sin( movement[ 1 ] * 180 ) * zoom_level, tilt );
iprintln( level.cameravec[ 0 ] + " " + level.cameravec[ 1 ] + " " + level.cameravec[ 2 ] );
}
}
}
else
{
level.camera_prev_snapto = level.camera_snapto;
}
if ( isDefined( level.current_select_ent ) )
{
originoffset = vectorScale( level.cameravec, -1 );
temp_offset = originoffset + vectorScale( ( 1, 1, 1 ), 60 );
anglesoffset = vectorToAngle( temp_offset );
if ( !isDefined( model ) )
{
model = spawn( "script_origin", level.current_select_ent.v[ "origin" ] );
model setmodel( "tag_origin" );
}
if ( model.origin != level.current_select_ent.v[ "origin" ] )
{
model.origin = level.current_select_ent.v[ "origin" ];
}
level.camera linkto( model, "tag_origin", level.cameravec, anglesoffset );
break;
}
else
{
wait 0,05;
}
}
}
else level.camera unlink();
}
wait 0,05;
#/
}
}
camera_hud_toggle( text )
{
if ( isDefined( level.camera_hud ) )
{
level.camera_hud destroy();
}
level.camera_hud = newdebughudelem();
level.camera_hud settext( text );
level.camera_hud.horzalign = "left";
level.camera_hud.vertalign = "bottom";
level.camera_hud.alignx = "left";
level.camera_hud.aligny = "bottom";
level.camera_hud.foreground = 1;
level.camera_hud.fontscale = 1,1;
level.camera_hud.sort = 21;
level.camera_hud.alpha = 1;
level.camera_hud.color = ( 1, 1, 1 );
}
init_sp_paths()
{
}
make_sp_player_invulnerable( player )
{
}
delete_arrays_in_sp()
{
}
used_in_animation( sp )
{
}
init_client_sp_variables()
{
}
init_mp_paths()
{
level.cfx_server_scriptdata = "mpcreatefx/";
level.cfx_client_scriptdata = "mpclientcreatefx/";
level.cfx_server_loop = "maps\\mp\\_utility::createLoopEffect";
level.cfx_server_oneshot = "maps\\mp\\_utility::createOneshotEffect";
level.cfx_server_exploder = "maps\\mp\\_utility::createExploder";
level.cfx_server_loopsound = "maps\\mp\\_createfx::createLoopSound";
level.cfx_server_scriptgendump = "maps\\mp\\createfx\\" + level.script + "_fx::main();";
level.cfx_client_loop = "clientscripts\\mp\\_fx::createLoopEffect";
level.cfx_client_oneshot = "clientscripts\\mp\\_fx::createOneshotEffect";
level.cfx_client_exploder = "clientscripts\\mp\\_fx::createExploder";
level.cfx_client_loopsound = "clientscripts\\mp\\_fx::createLoopSound";
level.cfx_client_scriptgendump = "clientscripts\\mp\\_createfx\\" + level.script + "_fx::main();";
level.cfx_func_run_gump_func = ::empty;
level.cfx_func_loopfx = ::maps/mp/_fx::loopfxthread;
level.cfx_func_oneshotfx = ::maps/mp/_fx::oneshotfxthread;
level.cfx_func_soundfx = ::maps/mp/_fx::create_loopsound;
level.cfx_func_script_gen_dump = ::maps/mp/_script_gen::script_gen_dump;
level.cfx_func_stop_loopsound = ::maps/mp/_fx::stop_loopsound;
level.cfx_func_create_looper = ::maps/mp/_fx::create_looper;
level.cfx_func_create_triggerfx = ::maps/mp/_fx::create_triggerfx;
level.cfx_func_create_loopsound = ::maps/mp/_fx::create_loopsound;
}
callback_playerconnect()
{
self waittill( "begin" );
if ( !isDefined( level.hasspawned ) )
{
spawnpoints = getentarray( "mp_global_intermission", "classname" );
if ( !spawnpoints.size )
{
spawnpoints = getentarray( "info_player_start", "classname" );
}
/#
assert( spawnpoints.size );
#/
spawnpoint = spawnpoints[ 0 ];
self.sessionteam = "none";
self.sessionstate = "playing";
if ( !level.teambased )
{
self.ffateam = "none";
}
self spawn( spawnpoint.origin, spawnpoint.angles );
level.player = self;
level.hasspawned = 1;
}
else
{
kick( self.name );
}
}
delete_spawns()
{
spawn_classes = [];
spawn_classes[ spawn_classes.size ] = "mp_dm_spawn";
spawn_classes[ spawn_classes.size ] = "mp_tdm_spawn";
spawn_classes[ spawn_classes.size ] = "mp_dom_spawn";
spawn_classes[ spawn_classes.size ] = "mp_dom_spawn_axis_start";
spawn_classes[ spawn_classes.size ] = "mp_dom_spawn_allies_start";
spawn_classes[ spawn_classes.size ] = "mp_res_spawn_allies";
spawn_classes[ spawn_classes.size ] = "mp_res_spawn_axis";
spawn_classes[ spawn_classes.size ] = "mp_res_spawn_axis_start";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_a";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_b";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_c";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attacker_start";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_attackerOT_start";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_a";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_b";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_c";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defender_start";
spawn_classes[ spawn_classes.size ] = "mp_dem_spawn_defenderOT_start";
_a4256 = spawn_classes;
_k4256 = getFirstArrayKey( _a4256 );
while ( isDefined( _k4256 ) )
{
class = _a4256[ _k4256 ];
spawns = getentarray( class, "classname" );
_a4260 = spawns;
_k4260 = getFirstArrayKey( _a4260 );
while ( isDefined( _k4260 ) )
{
spawn = _a4260[ _k4260 ];
spawn delete();
_k4260 = getNextArrayKey( _a4260, _k4260 );
}
_k4256 = getNextArrayKey( _a4256, _k4256 );
}
}
createfxdelay()
{
wait 10;
level.createfx_delay_done = 1;
}
init_client_mp_variables()
{
level.cfx_exploder_before = ::maps/mp/_utility::exploder_before_load;
level.cfx_exploder_after = ::maps/mp/_utility::exploder_after_load;
}