Files
IL-GSC/MW3/PC/SP/maps/_sea.gsc
InfinityLoader d559c1d414 Added MW3 Scripts
2023-10-27 03:47:01 -04:00

555 lines
12 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\_sea.gsc
* Game: Call of Duty: Modern Warfare 3
* Platform: PC
* Function Count: 18
* Decompile Time: 228 ms
* Timestamp: 10/27/2023 2:20:17 AM
*******************************************************************/
//Function Number: 1
main()
{
level._sea_scale = 1;
level.sea_model = getent("sea","targetname");
level._sea_org = spawn("script_origin",level.sea_model.origin);
level._sea_org.offset = level.sea_model.origin * -1;
level._sea_org.sway = "sway2";
level._sea_link = spawn("script_origin",level.sea_model.origin);
level._sea_link.offset = level._sea_org.offset;
level.sea_model linkto(level._sea_link);
level.sea_foam = getent("sea_foam","targetname");
if(isdefined(level.sea_foam))
{
level.sea_foam linkto(level._sea_link);
level.sea_foam hide();
}
level.sea_black = getent("sea_black","targetname");
if(isdefined(level.sea_black))
{
level.sea_black linkto(level._sea_link);
}
common_scripts\utility::flag_init("_sea_waves");
common_scripts\utility::flag_init("_sea_viewbob");
common_scripts\utility::flag_init("_sea_bob");
common_scripts\utility::flag_set("_sea_bob");
common_scripts\utility::flag_set("_sea_viewbob");
var_00 = getentarray("boat_sway","script_noteworthy");
if(isdefined(var_00))
{
common_scripts\utility::array_thread(var_00,::sea_objectbob,level._sea_org);
}
thread sea_logic();
}
//Function Number: 2
sea_logic()
{
wait 0.05;
var_00 = getmapsundirection();
setsundirection(var_00);
level.lite_settings = vectortoangles(var_00);
level.new_lite_settings = level.lite_settings;
level._sea_org thread sea_bob();
level._sea_org thread sea_waves();
level._sea_org thread sea_viewbob();
}
//Function Number: 3
sea_objectbob_precalc(param_00,param_01)
{
self.waittime = randomfloatrange(0.5,1);
if(isdefined(self.setscale))
{
self.scale = self.setscale;
}
else
{
self.scale = randomfloatrange(2,3);
}
var_02 = 0;
var_03 = 0;
switch(param_01)
{
case "sway1":
var_02 = self.sway1max;
break;
case "sway2":
var_02 = self.sway2max;
break;
}
if(self.axial)
{
var_04 = param_00.rotation[0] * self.pratio * self.scale + param_00.rotation[2] * self.rratio * self.scale;
if(var_02 < abs(var_04))
{
if(var_04 < 1)
{
var_03 = var_02 * -1;
}
else
{
var_03 = var_02;
}
}
else
{
var_03 = var_04;
}
self.ang = (self.angles[0],self.angles[1],var_03);
return;
}
self.ang = param_00.rotation * self.scale;
}
//Function Number: 4
sea_objectbob(param_00)
{
if(isdefined(self.targetname))
{
var_01 = getentarray(self.targetname,"target");
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_01[var_02] linkto(self);
}
}
var_03 = common_scripts\utility::getstructarray(self.target,"targetname");
var_04 = var_03[0].origin;
var_05 = undefined;
var_06 = spawn("script_origin",(0,0,0));
var_06.axial = 0;
if(isdefined(var_03[1]))
{
var_05 = var_03[1].origin;
var_06.axial = 1;
}
else
{
var_07 = anglestoup(var_03[0].angles);
var_07 = var_07 * 10;
var_05 = var_04 + var_07;
}
var_06.origin = var_04;
var_06.angles = vectortoangles(var_05 - var_04);
var_06.pratio = 1;
var_06.rratio = 1;
var_06.sway1max = 100;
var_06.sway2max = 100;
var_06.setscale = undefined;
if(isdefined(var_03[0].script_parameters))
{
var_08 = strtok(var_03[0].script_parameters,":;, ");
for(var_02 = 0;var_02 < var_08.size;var_02++)
{
switch(var_08[var_02])
{
case "axial":
var_06.axial = 1;
break;
case "sway1":
var_02++;
var_06.sway1max = int(var_08[var_02]);
break;
case "sway2":
var_02++;
var_06.sway2max = int(var_08[var_02]);
break;
case "setscale":
var_02++;
if(var_08[var_02] == "randomrange")
{
var_02++;
var_09 = int(var_08[var_02]);
var_02++;
var_0A = int(var_08[var_02]);
var_06.setscale = randomfloatrange(var_09,var_0A);
}
else
{
var_06.setscale = int(var_08[var_02]);
}
break;
}
}
}
if(var_06.axial)
{
var_0B = undefined;
var_0C = (0,360,0);
if(!isdefined(var_03[1]))
{
var_0B = var_03[0].angles;
}
else
{
var_0B = vectortoangles(var_05 - var_04);
}
var_06.rratio = vectordot(anglestoright(var_0B),anglestoright(var_0C));
var_06.pratio = vectordot(anglestoright(var_0B),anglestoforward(var_0C));
}
self.link = var_06;
self notify("got_link");
for(var_02 = 0;var_02 < var_03.size;var_02++)
{
var_03[var_02] thread sea_objectbob_findparent(var_06,param_00);
}
wait 0.05;
self linkto(var_06);
if(isdefined(self.script_parameters))
{
}
thread sea_objectbob_logic(param_00,var_06);
}
//Function Number: 5
sea_objectbob_logic(param_00,param_01)
{
for(;;)
{
if(param_00.sway == "sway2")
{
param_00 waittill("sway1");
}
param_01 sea_objectbob_precalc(param_00,"sway1");
param_01 notify("precalcdone1");
if(!isdefined(param_01.parent))
{
wait param_01.waittime;
}
param_01 rotateto(param_01.ang,param_00.time,param_00.time * 0.5,param_00.time * 0.5);
if(param_00.sway == "sway1")
{
param_00 waittill("sway2");
}
param_01 sea_objectbob_precalc(param_00,"sway2");
param_01 notify("precalcdone2");
if(!isdefined(param_01.parent))
{
wait param_01.waittime;
}
param_01 rotateto(param_01.ang,param_00.time,param_00.time * 0.5,param_00.time * 0.5);
}
}
//Function Number: 6
sea_objectbob_follow(param_00)
{
for(;;)
{
self moveto(param_00.origin,0.1);
wait 0.1;
}
}
//Function Number: 7
sea_objectbob_findparent(param_00,param_01)
{
if(!isdefined(self.target))
{
return;
}
param_00.parent = getent(self.target,"targetname");
if(!isdefined(param_00.parent.link))
{
param_00.parent waittill("got_link");
}
var_02 = param_00.parent.link;
var_03 = param_00.origin;
var_04 = spawn("script_origin",var_02.origin);
var_04.angles = var_02.angles;
var_05 = spawn("script_origin",param_00.origin);
var_05.angles = param_00.angles;
var_05 linkto(var_04);
param_00 thread sea_objectbob_follow(var_05);
for(;;)
{
var_02 waittill("precalcdone1");
wait var_02.waittime - 0.05;
var_04 rotateto(var_02.ang,param_01.time,param_01.time * 0.5,param_01.time * 0.5);
var_02 waittill("precalcdone2");
wait var_02.waittime - 0.05;
var_04 rotateto(var_02.ang,param_01.time,param_01.time * 0.5,param_01.time * 0.5);
}
}
//Function Number: 8
sea_bob()
{
self endon("manual_override");
common_scripts\utility::flag_wait("_sea_bob");
thread sea_bob_reset();
wait 0.05;
for(;;)
{
var_00 = 0;
var_01 = 0;
var_02 = randomfloatrange(2,4) * level._sea_scale;
self.time = randomfloatrange(3,4);
self.rotation = (var_01,var_00,var_02);
self.sway = "sway1";
self notify("sway1");
if(common_scripts\utility::flag("_sea_bob"))
{
level._sea_link rotateto(self.rotation,self.time,self.time * 0.5,self.time * 0.5);
}
self rotateto(self.rotation,self.time,self.time * 0.5,self.time * 0.5);
wait self.time;
self.rotation = self.rotation * -1;
self.sway = "sway2";
self notify("sway2");
if(common_scripts\utility::flag("_sea_bob"))
{
level._sea_link rotateto(self.rotation,self.time,self.time * 0.5,self.time * 0.5);
}
self rotateto(self.rotation,self.time,self.time * 0.5,self.time * 0.5);
wait self.time;
}
}
//Function Number: 9
sea_bob_reset_loop()
{
self endon("manual_override");
common_scripts\utility::flag_wait("_sea_bob");
thread sea_bob_reset();
}
//Function Number: 10
sea_bob_reset()
{
self endon("manual_override");
level waittill("_sea_bob");
thread sea_bob_reset_loop();
level endon("_sea_bob");
var_00 = 1.5;
var_01 = (0,0,0);
level._sea_link rotateto(var_01,var_00,var_00 * 0.5,var_00 * 0.5);
wait var_00;
wait 0.05;
level.new_lite_settings = level.lite_settings;
level._sea_link.angles = (0,0,0);
}
//Function Number: 11
sea_waves()
{
var_00 = sea_waves_setup();
if(!isdefined(var_00))
{
return;
}
self.oldwaves = [];
for(;;)
{
common_scripts\utility::flag_wait("_sea_waves");
self waittill("sway1");
thread sea_waves_fx(var_00,"right");
common_scripts\utility::flag_wait("_sea_waves");
self waittill("sway2");
thread sea_waves_fx(var_00,"left");
}
}
//Function Number: 12
sea_waves_fx(param_00,param_01)
{
wait self.time * 0.5;
var_02 = 2;
var_03 = common_scripts\utility::random(sea_closestwavearray(param_00[param_01],var_02));
if(!isdefined(self.oldwaves[param_01]))
{
self.oldwaves[param_01] = var_03;
}
while(self.oldwaves[param_01] == var_03)
{
wait 0.05;
var_03 = common_scripts\utility::random(sea_closestwavearray(param_00[param_01],var_02));
}
self.oldwaves[param_01] = var_03;
var_03 thread sea_waves_fx2();
thread common_scripts\utility::play_sound_in_space("elm_wave_crash_ext",var_03.origin);
}
//Function Number: 13
sea_waves_fx2()
{
wait randomfloat(0.15);
common_scripts\utility::exploder(self.exploder.v["exploder"]);
}
//Function Number: 14
sea_closestwavearray(param_00,param_01)
{
var_02 = [];
for(var_03 = 0;var_03 < param_00.size;var_03++)
{
param_00[var_03]._sea_dist = distancesquared(param_00[var_03].origin,level.player.origin);
}
for(var_03 = 0;var_03 < param_00.size;var_03++)
{
var_02 = sea_closestwavelogic(var_02,param_00[var_03]);
}
var_04 = [];
var_03 = 0;
while(var_03 < param_01)
{
var_04++ = var_7B[var_03];
}
return var_7B;
}
//Function Number: 15
sea_closestwavelogic(param_00,param_01)
{
if(!param_00.size)
{
param_00[0] = param_01;
return param_00;
}
for(var_02 = 0;var_02 < param_00.size;var_02++)
{
if(param_00[var_02]._sea_dist > param_01._sea_dist)
{
param_00 = maps\_utility::array_insert(param_00,param_01,var_02);
break;
}
}
if(var_02 == param_00.size)
{
param_00 = maps\_utility::array_add(param_00,param_01);
}
return param_00;
}
//Function Number: 16
sea_waves_setup()
{
var_00 = common_scripts\utility::getstructarray("wave_fx","targetname");
var_01 = common_scripts\utility::getstruct("wave_fx_center","targetname");
if(!var_00.size)
{
return undefined;
}
var_02 = anglestoforward(var_01.angles);
var_03 = anglestoright(var_01.angles);
var_04 = [];
for(var_05 = 0;var_05 < var_01.size;var_05++ = var_7B["left"])
{
var_01[var_05].forward = anglestoforward(var_01[var_05].angles);
var_01[var_05].up = anglestoup(var_01[var_05].angles);
var_01[var_05].right = anglestoright(var_01[var_05].angles);
}
for(var_05 = 0;var_05 < var_01.size;var_05++ = [])
{
if(vectordot(var_01[var_05].forward,var_04) > 0)
{
var_7B["right"][var_7B["right"].size] = var_01[var_05];
continue;
}
var_7B["left"][var_7B["left"].size] = var_01[var_05];
}
var_06 = level._waves_exploders;
for(var_05 = 0;var_05 < var_06.size;var_05++ = var_7B["right"])
{
var_06[var_05].origin = var_06[var_05].v["origin"];
}
for(var_05 = 0;var_05 < var_7B["right"].size;var_05++ = [])
{
var_07 = maps\_utility::getclosest(var_7B["right"][var_05].origin,var_06,64);
var_06 = common_scripts\utility::array_remove(var_06,var_07);
if(isdefined(var_7B["right"][var_05].angles))
{
var_07.v["forward"] = anglestoup(var_7B["right"][var_05].angles);
}
var_7B["right"][var_05].exploder = var_07;
}
for(var_05 = 0;var_05 < var_7B["left"].size;var_05++)
{
var_07 = maps\_utility::getclosest(var_7B["left"][var_05].origin,var_06,64);
var_06 = common_scripts\utility::array_remove(var_06,var_07);
if(isdefined(var_7B["left"][var_05].angles))
{
var_07.v["forward"] = anglestoup(var_7B["left"][var_05].angles);
}
var_7B["left"][var_05].exploder = var_07;
}
return var_7B;
}
//Function Number: 17
sea_litebob()
{
for(;;)
{
wait 0.2;
var_00 = self.angles * 2;
var_00 = (var_00[0],var_00[1],var_00[2]);
var_01 = level.new_lite_settings;
level.new_lite_settings = combineangles(var_00,level.lite_settings);
var_02 = level.new_lite_settings;
var_03 = anglestoforward(var_01);
var_04 = anglestoforward(var_02);
lerpsundirection(var_03,var_04,0.2);
}
}
//Function Number: 18
sea_viewbob()
{
for(;;)
{
common_scripts\utility::flag_wait("_sea_viewbob");
level.player playersetgroundreferenceent(self);
if(common_scripts\utility::flag("_sea_viewbob"))
{
level waittill("_sea_viewbob");
}
level.player playersetgroundreferenceent(undefined);
}
}