IL-GSC/BO2/PC/MP/maps/mp/_createfxmenu.gsc
2023-10-28 00:17:17 -04:00

1065 lines
20 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_createfxmenu.gsc
* Game: Call of Duty: Black Ops 2
* Platform: PC
* Function Count: 35
* Decompile Time: 18 ms
* Timestamp: 10/28/2023 12:10:53 AM
*******************************************************************/
#include common_scripts/utility;
#include maps/mp/_createfx;
#include maps/mp/_createfxundo;
#include maps/mp/_utility;
//Function Number: 1
menu(name)
{
/#
return level.create_fx_menu == name;
#/
}
//Function Number: 2
setmenu(name)
{
/#
level.create_fx_menu = name;
#/
}
//Function Number: 3
create_fx_menu()
{
/#
if(button_is_clicked("escape","x"))
{
exit_menu();
return;
}
if(menu("creation"))
{
if(button_is_clicked("1"))
{
setmenu("create_oneshot");
draw_effects_list();
return;
}
if(button_is_clicked("2"))
{
setmenu("create_loopfx");
draw_effects_list();
return;
}
if(button_is_clicked("3"))
{
setmenu("create_exploder");
draw_effects_list();
return;
}
if(button_is_clicked("4"))
{
setmenu("create_loopsound");
ent = createloopsound();
finish_creating_entity(ent);
setmenu("none");
return;
}
}
if(menu("create_oneshot") || menu("create_loopfx") || menu("create_exploder") || menu("change_fxid"))
{
if(button_is_clicked("rightarrow"))
{
increment_list_offset();
draw_effects_list();
}
if(button_is_clicked("leftarrow"))
{
decrement_list_offset();
draw_effects_list();
}
menu_fx_creation();
}
else if(menu("none"))
{
menu_change_selected_fx();
if(entities_are_selected())
{
display_fx_info(get_last_selected_entity());
if(button_is_clicked("a"))
{
clear_settable_fx();
setmenu("add_options");
}
}
}
else if(menu("add_options"))
{
if(!(entities_are_selected()))
{
clear_fx_hudelements();
setmenu("none");
return;
}
display_fx_add_options(get_last_selected_entity());
if(button_is_clicked("rightarrow"))
{
increment_list_offset();
}
if(button_is_clicked("leftarrow"))
{
decrement_list_offset();
}
}
else if(menu("jump_to_effect"))
{
if(button_is_clicked("rightarrow"))
{
increment_list_offset();
draw_effects_list("Select effect to jump to:");
}
if(button_is_clicked("leftarrow"))
{
decrement_list_offset();
draw_effects_list("Select effect to jump to:");
}
jump_to_effect();
}
else if(menu("select_by_property"))
{
menu_selection();
if(button_is_clicked("rightarrow"))
{
increment_list_offset();
}
if(button_is_clicked("leftarrow"))
{
decrement_list_offset();
}
}
else if(menu("change_type"))
{
if(!(entities_are_selected()))
{
clear_fx_hudelements();
setmenu("none");
return;
}
else
{
menu_fx_type();
}
}
#/
}
//Function Number: 4
exit_menu()
{
/#
clear_fx_hudelements();
clear_entity_selection();
update_selected_entities();
setmenu("none");
#/
}
//Function Number: 5
get_last_selected_entity()
{
/#
return level.selected_fx_ents[level.selected_fx_ents.size - 1];
#/
}
//Function Number: 6
menu_fx_creation()
{
/#
count = 0;
picked_fx = undefined;
keys = get_level_ambient_fx();
for(i = level.effect_list_offset;i < keys.size;i++)
{
count = count + 1;
button_to_check = count;
if(button_to_check == 10)
{
button_to_check = 0;
}
if(button_is_clicked(button_to_check + "") && !button_is_held("f"))
{
picked_fx = keys[i];
break;
}
if(count > level.effect_list_offset_max)
{
break;
}
}
if(!(IsDefined(picked_fx)))
{
return;
}
if(menu("change_fxid"))
{
apply_option_to_selected_fx(get_option("fxid"),picked_fx);
level.effect_list_offset = 0;
clear_fx_hudelements();
setmenu("none");
return;
}
ent = undefined;
if(menu("create_loopfx"))
{
ent = createloopeffect(picked_fx);
}
if(menu("create_oneshot"))
{
ent = createoneshoteffect(picked_fx);
delay_min = GetDvarInt(#"72501C7");
delay_max = GetDvarInt(#"A6DCBA49");
if(delay_min > delay_max)
{
temp = delay_min;
delay_min = delay_max;
delay_max = temp;
}
ent.v["delay"] = randomintrange(delay_min,delay_max);
}
if(menu("create_exploder"))
{
ent = createexploder(picked_fx);
}
finish_creating_entity(ent);
if(level.cfx_last_action != "none")
{
store_undo_state("edit",level.selected_fx_ents);
}
store_undo_state("add",level.createfxent[level.createfxent.size - 1]);
level.cfx_last_action = "none";
setmenu("none");
#/
}
//Function Number: 7
finish_creating_entity(ent)
{
/#
ent.v["angles"] = VectorToAngles(100 + VectorScale((0,0,1)) - ent.v["origin"]);
/#
assert(IsDefined(ent));
#/
ent post_entity_creation_function();
clear_entity_selection();
select_last_entity("skip_undo");
move_selection_to_cursor("skip_undo");
update_selected_entities();
#/
}
//Function Number: 8
change_effect_to_oneshot(ent)
{
/#
if(ent.v["type"] == "oneshotfx")
{
return;
}
if(ent.v["type"] == "exploder")
{
ent.v["exploder"] = undefined;
ent.v["exploder_type"] = undefined;
ent.v["soundalias"] = undefined;
}
if(!IsDefined(ent.v["delay"]) || ent.v["delay"] == 0)
{
delay_min = GetDvarInt(#"72501C7");
delay_max = GetDvarInt(#"A6DCBA49");
if(delay_min > delay_max)
{
temp = delay_min;
delay_min = delay_max;
delay_max = temp;
}
ent.v["delay"] = randomintrange(delay_min,delay_max);
}
ent.v["type"] = "oneshotfx";
#/
}
//Function Number: 9
change_effect_to_loop(ent)
{
/#
if(ent.v["type"] == "loopfx")
{
return;
}
if(ent.v["type"] == "exploder")
{
ent.v["exploder"] = undefined;
ent.v["exploder_type"] = undefined;
ent.v["soundalias"] = undefined;
}
if(!IsDefined(ent.v["delay"]) || ent.v["delay"] <= 0)
{
ent.v["delay"] = 1;
}
ent.v["type"] = "loopfx";
#/
}
//Function Number: 10
change_effect_to_exploder(ent)
{
/#
if(ent.v["type"] == "exploder")
{
return;
}
ent.v["type"] = "exploder";
if(!IsDefined(ent.v["delay"]) || ent.v["delay"] < 0)
{
ent.v["delay"] = 0;
}
ent.v["exploder"] = 1;
ent.v["exploder_type"] = "normal";
#/
}
//Function Number: 11
change_ent_type(newtype)
{
/#
store_undo_state("edit",level.selected_fx_ents);
level.cfx_last_action = "ent_type";
if(newtype == "oneshotfx")
{
for(i = 0;i < level.selected_fx_ents.size;i++)
{
change_effect_to_oneshot(level.selected_fx_ents[i]);
}
}
else if(newtype == "loopfx")
{
for(i = 0;i < level.selected_fx_ents.size;i++)
{
change_effect_to_loop(level.selected_fx_ents[i]);
}
}
else if(newtype == "exploder")
{
for(i = 0;i < level.selected_fx_ents.size;i++)
{
change_effect_to_exploder(level.selected_fx_ents[i]);
}
}
#/
}
//Function Number: 12
menu_init()
{
/#
level.createfx_options = [];
addoption("string","type","Type","oneshotfx","fx");
addoption("string","fxid","Name","nil","fx");
addoption("vector","origin","Origin",(0,0,0),"fx");
addoption("vector","angles","Angles",(0,0,0),"fx");
addoption("float","delay","Repeat rate/start delay",0.5,"fx");
addoption("int","repeat","Number of times to repeat",5,"exploder");
addoption("float","primlightfrac","Primary light fraction",1,"fx");
addoption("int","lightoriginoffs","Light origin offset",64,"fx");
addoption("float","delay_min","Minimum time between repeats",1,"exploder");
addoption("float","delay_max","Maximum time between repeats",2,"exploder");
addoption("float","fire_range","Fire damage range",0,"fx");
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("string","ender","Level notify for ending 2nd FX","nil","exploder");
addoption("string","rumble","Rumble","nil","exploder");
addoption("float","damage","Radius damage",150,"exploder");
addoption("float","damage_radius","Radius of radius damage",250,"exploder");
addoption("int","exploder","Exploder",1,"exploder");
addoption("string","earthquake","Earthquake","nil","exploder");
addoption("string","soundalias","Soundalias","nil","all");
addoption("int","stoppable","Can be stopped from script","1","all");
level.effect_list_offset = 0;
level.effect_list_offset_max = 9;
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["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;
#/
}
//Function Number: 13
get_last_selected_ent()
{
/#
return level.selected_fx_ents[level.selected_fx_ents.size - 1];
#/
}
//Function Number: 14
entities_are_selected()
{
/#
return level.selected_fx_ents.size > 0;
#/
}
//Function Number: 15
menu_change_selected_fx()
{
/#
if(!(level.selected_fx_ents.size))
{
return;
}
count = 0;
drawncount = 0;
ent = get_last_selected_ent();
for(i = 0;i < level.createfx_options.size;i++)
{
option = level.createfx_options[i];
if(!(IsDefined(ent.v[option["name"]])))
{
}
else
{
count++;
if(count < level.effect_list_offset)
{
}
else
{
drawncount++;
button_to_check = drawncount;
if(button_to_check == 10)
{
button_to_check = 0;
}
if(button_is_clicked(button_to_check + "") && !button_is_held("f"))
{
prepare_option_for_change(option,drawncount);
break;
}
if(drawncount > level.effect_list_offset_max)
{
break;
}
}
}
}
#/
}
//Function Number: 16
prepare_option_for_change(option,drawncount)
{
/#
if(option["name"] == "fxid")
{
setmenu("change_fxid");
draw_effects_list();
return;
}
if(option["name"] == "type")
{
setmenu("change_type");
return;
}
level.createfx_inputlocked = 1;
set_option_index(option["name"]);
setdvar("fx","nil");
level.createfxhudelements[drawncount + 1][0].color = (1,1,0);
#/
}
//Function Number: 17
menu_fx_option_set()
{
/#
if(GetDvar(#"5977E3") == "nil")
{
return;
}
option = get_selected_option();
setting = undefined;
if(option["type"] == "string")
{
setting = GetDvar(#"5977E3");
}
if(option["type"] == "int")
{
setting = GetDvarInt(#"5977E3");
}
if(option["type"] == "float")
{
setting = GetDvarFloat(#"5977E3");
}
if(option["type"] == "vector")
{
setting = GetDvar(#"5977E3");
temparray = strtok(setting," ");
if(temparray.size == 3)
{
setting = (float(temparray[0]),float(temparray[1]),float(temparray[2]));
}
else
{
clear_settable_fx();
return;
}
}
apply_option_to_selected_fx(option,setting);
#/
}
//Function Number: 18
menu_fx_type()
{
/#
clear_fx_hudelements();
set_fx_hudelement("Change effect type to:");
set_fx_hudelement(" (1) Oneshot");
set_fx_hudelement(" (2) Looped");
set_fx_hudelement(" (3) Exploder");
set_fx_hudelement("(x) Exit >");
if(button_is_clicked("1") && !button_is_held("f"))
{
change_ent_type("oneshotfx");
setmenu("none");
}
else if(button_is_clicked("2") && !button_is_held("f"))
{
change_ent_type("loopfx");
setmenu("none");
}
else if(button_is_clicked("3") && !button_is_held("f"))
{
change_ent_type("exploder");
setmenu("none");
}
if(menu("none"))
{
update_selected_entities();
}
#/
}
//Function Number: 19
menu_selection()
{
/#
clear_fx_hudelements();
set_fx_hudelement("Select all by property:");
drawncount = 0;
option_number = 0;
ent = level.selected_fx_ents[level.selected_fx_ents.size - 1];
if(level.selected_fx_ents.size < 1)
{
set_fx_hudelement("No ent is selected.");
}
else
{
for(i = level.effect_list_offset;i < level.createfx_options.size;i++)
{
if(drawncount > level.effect_list_offset_max)
{
break;
}
if(drawncount > ent.v.size)
{
break;
}
prop_name = level.createfx_options[i]["name"];
option_number = drawncount + 1;
if(IsDefined(ent.v[prop_name]))
{
if(button_is_clicked(option_number + "") && !button_is_held("f"))
{
level.cfx_selected_prop = prop_name;
menunone();
level.effect_list_offset = 0;
return;
}
prop_desc = level.createfx_options[i]["description"];
set_fx_hudelement(option_number + ". " + prop_desc + ": " + ent.v[prop_name]);
drawncount++;
}
else
{
}
}
}
if(drawncount > level.effect_list_offset_max)
{
pages = ceil(ent.v.size / level.effect_list_offset_max);
current_page = level.effect_list_offset / level.effect_list_offset_max + 1;
set_fx_hudelement("(<-) Page " + current_page + " of " + pages + " (->)");
}
set_fx_hudelement("(x) Exit >");
#/
}
//Function Number: 20
apply_option_to_selected_fx(option,setting)
{
/#
if(level.cfx_last_action != option["name"])
{
store_undo_state("edit",level.selected_fx_ents);
level.cfx_last_action = option["name"];
}
for(i = 0;i < level.selected_fx_ents.size;i++)
{
ent = level.selected_fx_ents[i];
if(mask(option["mask"],ent.v["type"]))
{
ent.v[option["name"]] = setting;
}
}
update_selected_entities();
clear_settable_fx();
#/
}
//Function Number: 21
set_option_index(name)
{
/#
for(i = 0;i < level.createfx_options.size;i++)
{
if(level.createfx_options[i]["name"] != name)
{
}
else
{
level.selected_fx_option_index = i;
return;
}
}
#/
}
//Function Number: 22
get_selected_option()
{
/#
return level.createfx_options[level.selected_fx_option_index];
#/
}
//Function Number: 23
mask(type,name)
{
/#
return IsDefined(level.createfxmasks[type][name]);
#/
}
//Function Number: 24
addoption(type,name,description,defaultsetting,mask)
{
/#
option = [];
option["type"] = type;
option["name"] = name;
option["description"] = description;
option["default"] = defaultsetting;
option["mask"] = mask;
level.createfx_options[level.createfx_options.size] = option;
#/
}
//Function Number: 25
get_option(name)
{
/#
for(i = 0;i < level.createfx_options.size;i++)
{
if(level.createfx_options[i]["name"] == name)
{
return level.createfx_options[i];
}
}
#/
}
//Function Number: 26
display_fx_info(ent)
{
/#
if(!(menu("none")))
{
return;
}
clear_fx_hudelements();
if(!(level.createfx_draw_enabled))
{
return;
}
set_fx_hudelement("Selected: " + level.selected_fx_ents.size + " Distance: " + get_distance_from_ent(ent));
level.createfxhudelements[0][0].color = (1,1,0);
set_fx_hudelement("Name: " + ent.v["fxid"]);
if(entities_are_selected())
{
count = 0;
drawncount = 0;
for(i = 0;i < level.createfx_options.size;i++)
{
option = level.createfx_options[i];
if(!(IsDefined(ent.v[option["name"]])))
{
}
else
{
count++;
if(count < level.effect_list_offset)
{
}
else
{
drawncount++;
set_fx_hudelement(drawncount + ". " + option["description"] + ": " + ent.v[option["name"]]);
if(drawncount > level.effect_list_offset_max)
{
more = 1;
break;
}
}
}
}
if(count > level.effect_list_offset_max)
{
pages = ceil(level.createfx_options.size / level.effect_list_offset_max);
current_page = level.effect_list_offset / level.effect_list_offset_max + 1;
set_fx_hudelement("(<-) Page " + current_page + " of " + pages + " (->)");
}
set_fx_hudelement("(a) Add >");
set_fx_hudelement("(x) Exit >");
}
else
{
set_fx_hudelement("Origin: " + ent.v["origin"]);
set_fx_hudelement("Angles: " + ent.v["angles"]);
}
#/
}
//Function Number: 27
display_fx_add_options(ent)
{
/#
/#
assert(menu("add_options"));
#/
/#
assert(entities_are_selected());
#/
clear_fx_hudelements();
set_fx_hudelement("Selected: " + level.selected_fx_ents.size + " Distance: " + get_distance_from_ent(ent));
level.createfxhudelements[0][0].color = (1,1,0);
set_fx_hudelement("Name: " + ent.v["fxid"]);
set_fx_hudelement("Origin: " + ent.v["origin"]);
set_fx_hudelement("Angles: " + ent.v["angles"]);
count = 0;
drawncount = 0;
if(level.effect_list_offset >= level.createfx_options.size)
{
level.effect_list_offset = 0;
}
for(i = 0;i < level.createfx_options.size;i++)
{
option = level.createfx_options[i];
if(IsDefined(ent.v[option["name"]]))
{
}
else if(!(mask(option["mask"],ent.v["type"])))
{
}
else
{
count++;
if(count < level.effect_list_offset)
{
}
else if(drawncount >= level.effect_list_offset_max)
{
}
else
{
drawncount++;
button_to_check = drawncount;
if(button_to_check == 10)
{
button_to_check = 0;
}
if(button_is_clicked(button_to_check + "") && !button_is_held("f"))
{
add_option_to_selected_entities(option);
menunone();
return;
}
set_fx_hudelement(button_to_check + ". " + option["description"]);
}
}
}
if(count > level.effect_list_offset_max)
{
pages = ceil(level.createfx_options.size / level.effect_list_offset_max);
current_page = level.effect_list_offset / level.effect_list_offset_max + 1;
set_fx_hudelement("(<-) Page " + current_page + " of " + pages + " (->)");
}
set_fx_hudelement("(x) Exit >");
#/
}
//Function Number: 28
add_option_to_selected_entities(option)
{
/#
for(i = 0;i < level.selected_fx_ents.size;i++)
{
ent = level.selected_fx_ents[i];
if(mask(option["mask"],ent.v["type"]))
{
ent.v[option["name"]] = option["default"];
}
}
#/
}
//Function Number: 29
menunone()
{
/#
level.effect_list_offset = 0;
clear_fx_hudelements();
setmenu("none");
#/
}
//Function Number: 30
draw_effects_list(title)
{
/#
clear_fx_hudelements();
if(!(IsDefined(title)))
{
title = "Pick an effect:";
}
set_fx_hudelement(title);
count = 0;
more = 0;
keys = get_level_ambient_fx();
if(level.effect_list_offset >= keys.size)
{
level.effect_list_offset = 0;
}
else if(level.effect_list_offset < 0)
{
level.effect_list_offset = int(floor(keys.size / level.effect_list_offset_max) * level.effect_list_offset_max);
}
for(i = level.effect_list_offset;i < keys.size;i++)
{
count = count + 1;
set_fx_hudelement(count + ". " + keys[i]);
if(count >= level.effect_list_offset_max)
{
more = 1;
break;
}
}
if(keys.size > level.effect_list_offset_max)
{
pages = ceil(keys.size / level.effect_list_offset_max);
current_page = level.effect_list_offset / level.effect_list_offset_max + 1;
set_fx_hudelement("(<-) Page " + current_page + " of " + pages + " (->)");
}
#/
}
//Function Number: 31
increment_list_offset()
{
/#
level.effect_list_offset = level.effect_list_offset + level.effect_list_offset_max;
#/
}
//Function Number: 32
decrement_list_offset()
{
/#
level.effect_list_offset = level.effect_list_offset - level.effect_list_offset_max;
#/
}
//Function Number: 33
jump_to_effect()
{
/#
count = 0;
picked_fxid = undefined;
keys = get_level_ambient_fx();
for(i = level.effect_list_offset;i < keys.size;i++)
{
count = count + 1;
button_to_check = count;
if(button_to_check == 10)
{
button_to_check = 0;
}
if(button_is_clicked(button_to_check + "") && !button_is_held("f"))
{
picked_fxid = keys[i];
break;
}
if(count > level.effect_list_offset_max)
{
break;
}
}
if(!(IsDefined(picked_fxid)))
{
return;
}
clear_entity_selection();
ent = get_next_ent_with_same_id(-1,picked_fxid);
if(IsDefined(ent))
{
level.cfx_next_ent = ent;
move_player_to_next_same_effect(1);
}
else
{
iprintln("Effect " + picked_fxid + " has not been placed.");
}
level.effect_list_offset = 0;
clear_fx_hudelements();
setmenu("none");
#/
}
//Function Number: 34
get_level_ambient_fx()
{
/#
if(!(IsDefined(level._effect_keys)))
{
keys = getarraykeys(level._effect);
level._effect_keys = [];
k = 0;
for(i = 0;i < keys.size;i++)
{
if(issubstr(keys[i],"fx_"))
{
level._effect_keys[k] = keys[i];
k++;
}
}
if(level._effect_keys.size == 0)
{
level._effect_keys = keys;
}
}
return level._effect_keys;
#/
}
//Function Number: 35
get_distance_from_ent(ent)
{
/#
player = get_players()[0];
return distance(player geteye(),ent.v["origin"]);
#/
}