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

703 lines
19 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_menu()
{
level._createfx.options = [];
addoption( "string", "fxid", "FX id", "nil", "fx" );
addoption( "float", "delay", "Repeat rate/start delay", 0.5, "fx" );
addoption( "string", "flag", "Flag", "nil", "exploder" );
if ( !level.mp_createfx )
{
addoption( "string", "firefx", "2nd FX id", "nil", "exploder" );
addoption( "float", "firefxdelay", "2nd FX id repeat rate", 0.5, "exploder" );
addoption( "float", "firefxtimeout", "2nd FX timeout", 5, "exploder" );
addoption( "string", "firefxsound", "2nd FX soundalias", "nil", "exploder" );
addoption( "float", "damage", "Radius damage", 150, "exploder" );
addoption( "float", "damage_radius", "Radius of radius damage", 250, "exploder" );
addoption( "string", "earthquake", "Earthquake", "nil", "exploder" );
addoption( "string", "ender", "Level notify for ending 2nd FX", "nil", "exploder" );
}
addoption( "float", "delay_min", "Minimimum time between repeats", 1, "soundfx_interval" );
addoption( "float", "delay_max", "Maximum time between repeats", 2, "soundfx_interval" );
addoption( "int", "repeat", "Number of times to repeat", 5, "exploder" );
addoption( "string", "exploder", "Exploder", "1", "exploder" );
addoption( "string", "soundalias", "Soundalias", "nil", "all" );
addoption( "string", "loopsound", "Loopsound", "nil", "exploder" );
addoption( "int", "reactive_radius", "Reactive Radius", 100, "reactive_fx", ::input_reactive_radius );
if ( !level.mp_createfx )
{
addoption( "string", "rumble", "Rumble", "nil", "exploder" );
addoption( "int", "stoppable", "Can be stopped from script", "1", "all" );
}
level.effect_list_offset = 0;
level.effect_list_offset_max = 10;
level.createfxmasks = [];
level.createfxmasks["all"] = [];
level.createfxmasks["all"]["exploder"] = 1;
level.createfxmasks["all"]["oneshotfx"] = 1;
level.createfxmasks["all"]["loopfx"] = 1;
level.createfxmasks["all"]["soundfx"] = 1;
level.createfxmasks["all"]["soundfx_interval"] = 1;
level.createfxmasks["all"]["reactive_fx"] = 1;
level.createfxmasks["fx"] = [];
level.createfxmasks["fx"]["exploder"] = 1;
level.createfxmasks["fx"]["oneshotfx"] = 1;
level.createfxmasks["fx"]["loopfx"] = 1;
level.createfxmasks["exploder"] = [];
level.createfxmasks["exploder"]["exploder"] = 1;
level.createfxmasks["loopfx"] = [];
level.createfxmasks["loopfx"]["loopfx"] = 1;
level.createfxmasks["oneshotfx"] = [];
level.createfxmasks["oneshotfx"]["oneshotfx"] = 1;
level.createfxmasks["soundfx"] = [];
level.createfxmasks["soundfx"]["soundalias"] = 1;
level.createfxmasks["soundfx_interval"] = [];
level.createfxmasks["soundfx_interval"]["soundfx_interval"] = 1;
level.createfxmasks["reactive_fx"] = [];
level.createfxmasks["reactive_fx"]["reactive_fx"] = 1;
var_0 = [];
var_0["creation"] = ::menu_create_select;
var_0["create_oneshot"] = ::menu_create;
var_0["create_loopfx"] = ::menu_create;
var_0["change_fxid"] = ::menu_create;
var_0["none"] = ::menu_none;
var_0["add_options"] = ::menu_add_options;
var_0["select_by_name"] = ::menu_select_by_name;
level._createfx.menus = var_0;
}
menu( var_0 )
{
return level.create_fx_menu == var_0;
}
setmenu( var_0 )
{
level.create_fx_menu = var_0;
}
create_fx_menu()
{
if ( common_scripts\_createfx::button_is_clicked( "escape", "x" ) )
{
_exit_menu();
return;
}
if ( isdefined( level._createfx.menus[level.create_fx_menu] ) )
[[ level._createfx.menus[level.create_fx_menu] ]]();
}
menu_create_select()
{
if ( common_scripts\_createfx::button_is_clicked( "1" ) )
{
setmenu( "create_oneshot" );
draw_effects_list();
return;
}
else if ( common_scripts\_createfx::button_is_clicked( "2" ) )
{
setmenu( "create_loopsound" );
var_0 = common_scripts\_createfx::createloopsound();
finish_creating_entity( var_0 );
return;
}
else if ( common_scripts\_createfx::button_is_clicked( "3" ) )
{
setmenu( "create_exploder" );
var_0 = common_scripts\_createfx::createnewexploder();
finish_creating_entity( var_0 );
return;
}
else if ( common_scripts\_createfx::button_is_clicked( "4" ) )
{
setmenu( "create_interval_sound" );
var_0 = common_scripts\_createfx::createintervalsound();
finish_creating_entity( var_0 );
return;
}
else if ( common_scripts\_createfx::button_is_clicked( "5" ) )
{
var_0 = common_scripts\_createfx::createreactiveent();
finish_creating_entity( var_0 );
return;
}
}
menu_create()
{
if ( next_button() )
{
increment_list_offset();
draw_effects_list();
}
else if ( previous_button() )
{
decrement_list_offset();
draw_effects_list();
}
menu_fx_creation();
}
menu_none()
{
if ( common_scripts\_createfx::button_is_clicked( "m" ) )
increment_list_offset();
menu_change_selected_fx();
if ( entities_are_selected() )
{
var_0 = get_last_selected_ent();
if ( !isdefined( level.last_displayed_ent ) || var_0 != level.last_displayed_ent )
{
display_fx_info( var_0 );
level.last_displayed_ent = var_0;
}
if ( common_scripts\_createfx::button_is_clicked( "a" ) )
{
common_scripts\_createfx::clear_settable_fx();
setmenu( "add_options" );
return;
}
}
else
level.last_displayed_ent = undefined;
}
menu_add_options()
{
if ( !entities_are_selected() )
{
common_scripts\_createfx::clear_fx_hudelements();
setmenu( "none" );
return;
}
display_fx_add_options( get_last_selected_ent() );
if ( next_button() )
increment_list_offset();
}
menu_select_by_name()
{
if ( next_button() )
{
increment_list_offset();
draw_effects_list( "Select by name" );
}
else if ( previous_button() )
{
decrement_list_offset();
draw_effects_list( "Select by name" );
}
select_by_name();
}
next_button()
{
return common_scripts\_createfx::button_is_clicked( "rightarrow" );
}
previous_button()
{
return common_scripts\_createfx::button_is_clicked( "leftarrow" );
}
_exit_menu()
{
common_scripts\_createfx::clear_fx_hudelements();
common_scripts\_createfx::clear_entity_selection();
common_scripts\_createfx::update_selected_entities();
setmenu( "none" );
}
menu_fx_creation()
{
var_0 = 0;
var_1 = undefined;
var_2 = common_scripts\_createfx::func_get_level_fx();
for ( var_3 = level.effect_list_offset; var_3 < var_2.size; var_3++ )
{
var_0 = var_0 + 1;
var_4 = var_0;
if ( var_4 == 10 )
var_4 = 0;
if ( common_scripts\_createfx::button_is_clicked( var_4 + "" ) )
{
var_1 = var_2[var_3];
break;
}
if ( var_0 > level.effect_list_offset_max )
break;
}
if ( !isdefined( var_1 ) )
return;
if ( menu( "change_fxid" ) )
{
apply_option_to_selected_fx( get_option( "fxid" ), var_1 );
level.effect_list_offset = 0;
common_scripts\_createfx::clear_fx_hudelements();
setmenu( "none" );
return;
}
var_5 = undefined;
if ( menu( "create_loopfx" ) )
var_5 = common_scripts\utility::createloopeffect( var_1 );
if ( menu( "create_oneshot" ) )
var_5 = common_scripts\utility::createoneshoteffect( var_1 );
finish_creating_entity( var_5 );
}
finish_creating_entity( var_0 )
{
var_0.v["angles"] = vectortoangles( var_0.v["origin"] + ( 0, 0, 100 ) - var_0.v["origin"] );
var_0 common_scripts\_createfx::post_entity_creation_function();
common_scripts\_createfx::clear_entity_selection();
common_scripts\_createfx::select_last_entity();
common_scripts\_createfx::move_selection_to_cursor();
common_scripts\_createfx::update_selected_entities();
setmenu( "none" );
}
entities_are_selected()
{
return level._createfx.selected_fx_ents.size > 0;
}
menu_change_selected_fx()
{
if ( !level._createfx.selected_fx_ents.size )
return;
var_0 = 0;
var_1 = 0;
var_2 = get_last_selected_ent();
for ( var_3 = 0; var_3 < level._createfx.options.size; var_3++ )
{
var_4 = level._createfx.options[var_3];
if ( !isdefined( var_2.v[var_4["name"]] ) )
continue;
var_0++;
if ( var_0 < level.effect_list_offset )
continue;
var_1++;
var_5 = var_1;
if ( var_5 == 10 )
var_5 = 0;
if ( common_scripts\_createfx::button_is_clicked( var_5 + "" ) )
{
prepare_option_for_change( var_4, var_1 );
break;
}
if ( var_1 > level.effect_list_offset_max )
{
var_6 = 1;
break;
}
}
}
prepare_option_for_change( var_0, var_1 )
{
if ( var_0["name"] == "fxid" )
{
setmenu( "change_fxid" );
draw_effects_list();
return;
}
level.createfx_inputlocked = 1;
level._createfx.hudelems[var_1 + 3][0].color = ( 1, 1, 0 );
if ( isdefined( var_0["input_func"] ) )
thread [[ var_0["input_func"] ]]( var_1 + 3 );
else
common_scripts\_createfx::createfx_centerprint( "To change " + var_0["description"] + " on selected entities, type /fx newvalue" );
set_option_index( var_0["name"] );
setdvar( "fx", "nil" );
}
menu_fx_option_set()
{
if ( getdvar( "fx" ) == "nil" )
return;
var_0 = get_selected_option();
var_1 = undefined;
if ( var_0["type"] == "string" )
var_1 = getdvar( "fx" );
if ( var_0["type"] == "int" )
var_1 = getdvarint( "fx" );
if ( var_0["type"] == "float" )
var_1 = getdvarfloat( "fx" );
apply_option_to_selected_fx( var_0, var_1 );
}
apply_option_to_selected_fx( var_0, var_1 )
{
for ( var_2 = 0; var_2 < level._createfx.selected_fx_ents.size; var_2++ )
{
var_3 = level._createfx.selected_fx_ents[var_2];
if ( mask( var_0["mask"], var_3.v["type"] ) )
var_3.v[var_0["name"]] = var_1;
}
level.last_displayed_ent = undefined;
common_scripts\_createfx::update_selected_entities();
common_scripts\_createfx::clear_settable_fx();
}
set_option_index( var_0 )
{
for ( var_1 = 0; var_1 < level._createfx.options.size; var_1++ )
{
if ( level._createfx.options[var_1]["name"] != var_0 )
continue;
level._createfx.selected_fx_option_index = var_1;
return;
}
}
get_selected_option()
{
return level._createfx.options[level._createfx.selected_fx_option_index];
}
mask( var_0, var_1 )
{
return isdefined( level.createfxmasks[var_0][var_1] );
}
addoption( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = [];
var_6["type"] = var_0;
var_6["name"] = var_1;
var_6["description"] = var_2;
var_6["default"] = var_3;
var_6["mask"] = var_4;
if ( isdefined( var_5 ) )
var_6["input_func"] = var_5;
level._createfx.options[level._createfx.options.size] = var_6;
}
get_option( var_0 )
{
for ( var_1 = 0; var_1 < level._createfx.options.size; var_1++ )
{
if ( level._createfx.options[var_1]["name"] == var_0 )
return level._createfx.options[var_1];
}
}
input_reactive_radius( var_0 )
{
for (;;)
{
wait 0.05;
if ( level.player buttonpressed( "escape" ) || level.player buttonpressed( "x" ) )
break;
var_1 = 0;
if ( level.player buttonpressed( "-" ) )
var_1 = -10;
else if ( level.player buttonpressed( "=" ) )
var_1 = 10;
if ( var_1 != 0 )
{
foreach ( var_3 in level._createfx.selected_fx_ents )
{
if ( isdefined( var_3.v["reactive_radius"] ) )
{
var_3.v["reactive_radius"] = var_3.v["reactive_radius"] + var_1;
var_3.v["reactive_radius"] = clamp( var_3.v["reactive_radius"], 10, 1000 );
}
}
}
}
level.last_displayed_ent = undefined;
common_scripts\_createfx::update_selected_entities();
common_scripts\_createfx::clear_settable_fx();
}
display_fx_add_options( var_0 )
{
common_scripts\_createfx::clear_fx_hudelements();
common_scripts\_createfx::set_fx_hudelement( "Name: " + var_0.v["fxid"] );
common_scripts\_createfx::set_fx_hudelement( "Type: " + var_0.v["type"] );
common_scripts\_createfx::set_fx_hudelement( "Origin: " + var_0.v["origin"] );
common_scripts\_createfx::set_fx_hudelement( "Angles: " + var_0.v["angles"] );
var_1 = 0;
var_2 = 0;
var_3 = 0;
if ( level.effect_list_offset >= level._createfx.options.size )
level.effect_list_offset = 0;
for ( var_4 = 0; var_4 < level._createfx.options.size; var_4++ )
{
var_5 = level._createfx.options[var_4];
if ( isdefined( var_0.v[var_5["name"]] ) )
continue;
if ( !mask( var_5["mask"], var_0.v["type"] ) )
continue;
var_1++;
if ( var_1 < level.effect_list_offset )
continue;
if ( var_2 >= level.effect_list_offset_max )
continue;
var_2++;
var_6 = var_2;
if ( var_6 == 10 )
var_6 = 0;
if ( common_scripts\_createfx::button_is_clicked( var_6 + "" ) )
{
add_option_to_selected_entities( var_5 );
menunone();
level.last_displayed_ent = undefined;
return;
}
common_scripts\_createfx::set_fx_hudelement( var_6 + ". " + var_5["description"] );
}
if ( var_1 > level.effect_list_offset_max )
common_scripts\_createfx::set_fx_hudelement( "(->) More >" );
common_scripts\_createfx::set_fx_hudelement( "(x) Exit >" );
}
add_option_to_selected_entities( var_0 )
{
var_1 = undefined;
for ( var_2 = 0; var_2 < level._createfx.selected_fx_ents.size; var_2++ )
{
var_3 = level._createfx.selected_fx_ents[var_2];
if ( mask( var_0["mask"], var_3.v["type"] ) )
var_3.v[var_0["name"]] = var_0["default"];
}
}
menunone()
{
level.effect_list_offset = 0;
common_scripts\_createfx::clear_fx_hudelements();
setmenu( "none" );
}
display_fx_info( var_0 )
{
if ( !menu( "none" ) )
return;
common_scripts\_createfx::clear_fx_hudelements();
common_scripts\_createfx::set_fx_hudelement( "Name: " + var_0.v["fxid"] );
common_scripts\_createfx::set_fx_hudelement( "Type: " + var_0.v["type"] );
common_scripts\_createfx::set_fx_hudelement( "Origin: " + var_0.v["origin"] );
common_scripts\_createfx::set_fx_hudelement( "Angles: " + var_0.v["angles"] );
if ( entities_are_selected() )
{
var_1 = 0;
var_2 = 0;
var_3 = 0;
for ( var_4 = 0; var_4 < level._createfx.options.size; var_4++ )
{
var_5 = level._createfx.options[var_4];
if ( !isdefined( var_0.v[var_5["name"]] ) )
continue;
var_1++;
if ( var_1 < level.effect_list_offset )
continue;
var_2++;
common_scripts\_createfx::set_fx_hudelement( var_2 + ". " + var_5["description"] + ": " + var_0.v[var_5["name"]] );
if ( var_2 > level.effect_list_offset_max )
{
var_3 = 1;
break;
}
}
if ( var_1 > level.effect_list_offset_max )
common_scripts\_createfx::set_fx_hudelement( "(->) More >" );
common_scripts\_createfx::set_fx_hudelement( "(a) Add >" );
common_scripts\_createfx::set_fx_hudelement( "(x) Exit >" );
}
else
{
var_1 = 0;
var_3 = 0;
for ( var_4 = 0; var_4 < level._createfx.options.size; var_4++ )
{
var_5 = level._createfx.options[var_4];
if ( !isdefined( var_0.v[var_5["name"]] ) )
continue;
var_1++;
common_scripts\_createfx::set_fx_hudelement( var_5["description"] + ": " + var_0.v[var_5["name"]] );
if ( var_1 > level._createfx.hudelem_count )
break;
}
}
}
draw_effects_list( var_0 )
{
common_scripts\_createfx::clear_fx_hudelements();
var_1 = 0;
var_2 = 0;
var_3 = common_scripts\_createfx::func_get_level_fx();
if ( !isdefined( var_0 ) )
var_0 = "Pick an effect";
common_scripts\_createfx::set_fx_hudelement( var_0 + " [" + level.effect_list_offset + " - " + var_3.size + "]:" );
for ( var_4 = level.effect_list_offset; var_4 < var_3.size; var_4++ )
{
var_1 = var_1 + 1;
common_scripts\_createfx::set_fx_hudelement( var_1 + ". " + var_3[var_4] );
if ( var_1 >= level.effect_list_offset_max )
{
var_2 = 1;
break;
}
}
if ( var_3.size > level.effect_list_offset_max )
{
common_scripts\_createfx::set_fx_hudelement( "(->) More >" );
common_scripts\_createfx::set_fx_hudelement( "(<-) Previous >" );
}
}
increment_list_offset()
{
var_0 = common_scripts\_createfx::func_get_level_fx();
if ( level.effect_list_offset >= var_0.size - level.effect_list_offset_max )
level.effect_list_offset = 0;
else
level.effect_list_offset = level.effect_list_offset + level.effect_list_offset_max;
}
decrement_list_offset()
{
level.effect_list_offset = level.effect_list_offset - level.effect_list_offset_max;
if ( level.effect_list_offset < 0 )
{
var_0 = common_scripts\_createfx::func_get_level_fx();
level.effect_list_offset = var_0.size - level.effect_list_offset_max;
}
}
select_by_name()
{
var_0 = 0;
var_1 = undefined;
var_2 = common_scripts\_createfx::func_get_level_fx();
for ( var_3 = level.effect_list_offset; var_3 < var_2.size; var_3++ )
{
var_0 = var_0 + 1;
var_4 = var_0;
if ( var_4 == 10 )
var_4 = 0;
if ( common_scripts\_createfx::button_is_clicked( var_4 + "" ) )
{
var_1 = var_2[var_3];
break;
}
if ( var_0 > level.effect_list_offset_max )
break;
}
if ( !isdefined( var_1 ) )
return;
var_5 = [];
foreach ( var_3, var_7 in level.createfxent )
{
if ( issubstr( var_7.v["fxid"], var_1 ) )
var_5[var_5.size] = var_3;
}
common_scripts\_createfx::deselect_all_ents();
common_scripts\_createfx::select_index_array( var_5 );
level._createfx.select_by_name = 1;
}
get_last_selected_ent()
{
return level._createfx.selected_fx_ents[level._createfx.selected_fx_ents.size - 1];
}